Update oc-dr1-dev to v11.1 RC06 am: 9a6afa3ae2  -s ours am: 012b92867d  -s ours
am: 9369ec816e  -s ours

Change-Id: I5c97aaa0c0c8083a55de8df2741f76eb64c14205
diff --git a/Android.mk b/Android.mk
index beccd86..2da71a5 100644
--- a/Android.mk
+++ b/Android.mk
@@ -1,25 +1,13 @@
 # Local modifications:
-# * removed com.google.android.backup.api_key. This should be added to
-#      the manifest in the top level directory.
 # * removed com.google.android.geo.API_KEY key. This should be added to
 #      the manifest files in java/com/android/incallui/calllocation/impl/
 #      and /java/com/android/incallui/maps/impl/
 # * b/62417801 modify translation string naming convention:
 #      $ find . -type d | grep 262 | rename 's/(values)\-([a-zA-Z\+\-]+)\-(mcc262-mnc01)/$1-$3-$2/'
-# * b/62343966 include manually generated GRPC service class:
-#      $ protoc --plugin=protoc-gen-grpc-java=prebuilts/tools/common/m2/repository/io/grpc/protoc-gen-grpc-java/1.0.3/protoc-gen-grpc-java-1.0.3-linux-x86_64.exe \
-#               --grpc-java_out=lite:"packages/apps/Dialer/java/com/android/voicemail/impl/" \
-#               --proto_path="packages/apps/Dialer/java/com/android/voicemail/impl/transcribe/grpc/" "packages/apps/Dialer/java/com/android/voicemail/impl/transcribe/grpc/voicemail_transcription.proto"
 # * b/37077388 temporarily disable proguard with javac
 LOCAL_PATH:= $(call my-dir)
 include $(CLEAR_VARS)
 
-ifeq ($(TARGET_BUILD_APPS),)
-support_library_root_dir := frameworks/support
-else
-support_library_root_dir := prebuilts/sdk/current/support
-endif
-
 # The base directory for Dialer sources.
 BASE_DIR := java/com/android
 
@@ -63,210 +51,82 @@
 	$(BASE_DIR)/dialer/binary/google/GoogleStubDialerRootComponent.java \
 	$(BASE_DIR)/dialer/binary/google/GoogleStubDialerApplication.java
 
-# All Dialers resources.
-# find . -type d -name "res" | uniq | sort
-RES_DIRS := \
-	assets/product/res \
-	assets/quantum/res \
-	$(BASE_DIR)/contacts/common/res \
-	$(BASE_DIR)/dialer/about/res \
-	$(BASE_DIR)/dialer/app/res \
-	$(BASE_DIR)/dialer/app/voicemail/error/res \
-	$(BASE_DIR)/dialer/blocking/res \
-	$(BASE_DIR)/dialer/callcomposer/camera/camerafocus/res \
-	$(BASE_DIR)/dialer/callcomposer/cameraui/res \
-	$(BASE_DIR)/dialer/callcomposer/res \
-	$(BASE_DIR)/dialer/calldetails/res \
-	$(BASE_DIR)/dialer/calllog/ui/res \
-	$(BASE_DIR)/dialer/calllogutils/res \
-	$(BASE_DIR)/dialer/common/res \
-	$(BASE_DIR)/dialer/contactactions/res \
-	$(BASE_DIR)/dialer/contactsfragment/res \
-	$(BASE_DIR)/dialer/dialpadview/res \
-	$(BASE_DIR)/dialer/enrichedcall/simulator/res \
-	$(BASE_DIR)/dialer/interactions/res \
-	$(BASE_DIR)/dialer/main/impl/res \
-	$(BASE_DIR)/dialer/notification/res \
-	$(BASE_DIR)/dialer/oem/res \
-	$(BASE_DIR)/dialer/phonenumberutil/res \
-	$(BASE_DIR)/dialer/postcall/res \
-	$(BASE_DIR)/dialer/searchfragment/common/res \
-	$(BASE_DIR)/dialer/searchfragment/list/res \
-	$(BASE_DIR)/dialer/searchfragment/nearbyplaces/res \
-	$(BASE_DIR)/dialershared/bubble/res \
-	$(BASE_DIR)/dialer/shortcuts/res \
-	$(BASE_DIR)/dialer/speeddial/res \
-	$(BASE_DIR)/dialer/theme/res \
-	$(BASE_DIR)/dialer/util/res \
-	$(BASE_DIR)/dialer/voicemailstatus/res \
-	$(BASE_DIR)/dialer/widget/res \
-	$(BASE_DIR)/incallui/answer/impl/affordance/res \
-	$(BASE_DIR)/incallui/answer/impl/answermethod/res \
-	$(BASE_DIR)/incallui/answer/impl/hint/res \
-	$(BASE_DIR)/incallui/answer/impl/res \
-	$(BASE_DIR)/incallui/audioroute/res \
-	$(BASE_DIR)/incallui/autoresizetext/res \
-	$(BASE_DIR)/incallui/calllocation/impl/res \
-	$(BASE_DIR)/incallui/commontheme/res \
-	$(BASE_DIR)/incallui/contactgrid/res \
-	$(BASE_DIR)/incallui/disconnectdialog/res \
-	$(BASE_DIR)/incallui/hold/res \
-	$(BASE_DIR)/incallui/incall/impl/res \
-	$(BASE_DIR)/incallui/res \
-	$(BASE_DIR)/incallui/sessiondata/res \
-	$(BASE_DIR)/incallui/speakerbuttonlogic/res \
-	$(BASE_DIR)/incallui/telecomeventui/res \
-	$(BASE_DIR)/incallui/video/impl/res \
-	$(BASE_DIR)/incallui/video/protocol/res \
-	$(BASE_DIR)/voicemail/impl/configui/res \
-	$(BASE_DIR)/voicemail/impl/res \
+EXCLUDE_RESOURCE_DIRECTORIES := \
+	java/com/android/incallui/maps/impl/res \
 
+# All Dialers resources.
+RES_DIRS := $(call all-subdir-named-dirs,res,.)
+RES_DIRS := $(filter-out $(EXCLUDE_RESOURCE_DIRECTORIES),$(RES_DIRS))
+
+EXCLUDE_MANIFESTS := \
+	$(BASE_DIR)/dialer/binary/aosp/testing/AndroidManifest.xml \
+	$(BASE_DIR)/dialer/binary/google/AndroidManifest.xml \
+	$(BASE_DIR)/incallui/calllocation/impl/AndroidManifest.xml \
+	$(BASE_DIR)/incallui/maps/impl/AndroidManifest.xml \
 
 # Dialer manifest files to merge.
-# find . -type f -name "AndroidManifest.xml" | uniq | sort
-DIALER_MANIFEST_FILES += \
-	$(BASE_DIR)/contacts/common/AndroidManifest.xml \
-	$(BASE_DIR)/dialer/about/AndroidManifest.xml \
-	$(BASE_DIR)/dialer/app/AndroidManifest.xml \
-	$(BASE_DIR)/dialer/app/manifests/activities/AndroidManifest.xml \
-	$(BASE_DIR)/dialer/app/voicemail/error/AndroidManifest.xml \
-	$(BASE_DIR)/dialer/backup/AndroidManifest.xml \
-	$(BASE_DIR)/dialer/blocking/AndroidManifest.xml \
-	$(BASE_DIR)/dialer/callcomposer/AndroidManifest.xml \
-	$(BASE_DIR)/dialer/callcomposer/camera/AndroidManifest.xml \
-	$(BASE_DIR)/dialer/callcomposer/camera/camerafocus/AndroidManifest.xml \
-	$(BASE_DIR)/dialer/callcomposer/cameraui/AndroidManifest.xml \
-	$(BASE_DIR)/dialer/calldetails/AndroidManifest.xml \
-	$(BASE_DIR)/dialer/calllog/ui/AndroidManifest.xml \
-	$(BASE_DIR)/dialer/calllogutils/AndroidManifest.xml \
-	$(BASE_DIR)/dialer/common/AndroidManifest.xml \
-	$(BASE_DIR)/dialer/contactactions/AndroidManifest.xml \
-	$(BASE_DIR)/dialer/contactsfragment/AndroidManifest.xml \
-	$(BASE_DIR)/dialer/dialpadview/AndroidManifest.xml \
-	$(BASE_DIR)/dialer/enrichedcall/simulator/AndroidManifest.xml \
-	$(BASE_DIR)/dialer/interactions/AndroidManifest.xml \
-	$(BASE_DIR)/dialer/main/impl/AndroidManifest.xml \
-	$(BASE_DIR)/dialer/notification/AndroidManifest.xml \
-	$(BASE_DIR)/dialer/oem/AndroidManifest.xml \
-	$(BASE_DIR)/dialer/phonenumberutil/AndroidManifest.xml \
-	$(BASE_DIR)/dialer/postcall/AndroidManifest.xml \
-	$(BASE_DIR)/dialer/searchfragment/common/AndroidManifest.xml \
-	$(BASE_DIR)/dialer/searchfragment/list/AndroidManifest.xml \
-	$(BASE_DIR)/dialer/searchfragment/nearbyplaces/AndroidManifest.xml \
-	$(BASE_DIR)/dialershared/bubble/AndroidManifest.xml \
-	$(BASE_DIR)/dialer/shortcuts/AndroidManifest.xml \
-	$(BASE_DIR)/dialer/simulator/impl/AndroidManifest.xml \
-	$(BASE_DIR)/dialer/speeddial/AndroidManifest.xml \
-	$(BASE_DIR)/dialer/theme/AndroidManifest.xml \
-	$(BASE_DIR)/dialer/util/AndroidManifest.xml \
-	$(BASE_DIR)/dialer/voicemailstatus/AndroidManifest.xml \
-	$(BASE_DIR)/dialer/widget/AndroidManifest.xml \
-	$(BASE_DIR)/incallui/AndroidManifest.xml \
-	$(BASE_DIR)/incallui/answer/impl/affordance/AndroidManifest.xml \
-	$(BASE_DIR)/incallui/answer/impl/AndroidManifest.xml \
-	$(BASE_DIR)/incallui/answer/impl/answermethod/AndroidManifest.xml \
-	$(BASE_DIR)/incallui/answer/impl/hint/AndroidManifest.xml \
-	$(BASE_DIR)/incallui/audioroute/AndroidManifest.xml \
-	$(BASE_DIR)/incallui/autoresizetext/AndroidManifest.xml \
-	$(BASE_DIR)/incallui/commontheme/AndroidManifest.xml \
-	$(BASE_DIR)/incallui/contactgrid/AndroidManifest.xml \
-	$(BASE_DIR)/incallui/disconnectdialog/AndroidManifest.xml \
-	$(BASE_DIR)/incallui/hold/AndroidManifest.xml \
-	$(BASE_DIR)/incallui/incall/impl/AndroidManifest.xml \
-	$(BASE_DIR)/incallui/sessiondata/AndroidManifest.xml \
-	$(BASE_DIR)/incallui/speakerbuttonlogic/AndroidManifest.xml \
-	$(BASE_DIR)/incallui/telecomeventui/AndroidManifest.xml \
-	$(BASE_DIR)/incallui/video/impl/AndroidManifest.xml \
-	$(BASE_DIR)/incallui/video/protocol/AndroidManifest.xml \
-	$(BASE_DIR)/voicemail/AndroidManifest.xml \
-	$(BASE_DIR)/voicemail/impl/configui/AndroidManifest.xml \
-	$(BASE_DIR)/voicemail/impl/AndroidManifest.xml \
-
+DIALER_MANIFEST_FILES := $(call all-named-files-under,AndroidManifest.xml,.)
+DIALER_MANIFEST_FILES := $(filter-out $(EXCLUDE_MANIFESTS),$(DIALER_MANIFEST_FILES))
 
 # Merge all manifest files.
 LOCAL_FULL_LIBS_MANIFEST_FILES := \
 	$(addprefix $(LOCAL_PATH)/, $(DIALER_MANIFEST_FILES))
+
+# * b/62875795 include manually generated GRPC service class:
+ifeq ($(HOST_OS),linux)
+	define gen-dialer-grpc
+	$(shell cd $(LOCAL_PATH) ; \
+		../../../prebuilts/tools/linux-x86_64/protoc/bin/protoc --plugin=protoc-gen-grpc-java=../../../prebuilts/tools/common/m2/repository/io/grpc/protoc-gen-grpc-java/1.0.3/protoc-gen-grpc-java-1.0.3-linux-x86_64.exe \
+		--grpc-java_out=lite:"java/com/android/voicemail/impl/" \
+		--proto_path="java/com/android/voicemail/impl/transcribe/grpc/" "java/com/android/voicemail/impl/transcribe/grpc/voicemail_transcription.proto")
+	endef
+endif
+ifeq ($(HOST_OS),darwin)
+	define gen-dialer-grpc
+	$(shell cd $(LOCAL_PATH) ; \
+		../../../prebuilts/tools/darwin-x86_64/protoc/bin/protoc --plugin=protoc-gen-grpc-java=../../../prebuilts/tools/common/m2/repository/io/grpc/protoc-gen-grpc-java/1.0.3/protoc-gen-grpc-java-1.0.3-osx-x86_64.exe \
+		--grpc-java_out=lite:"java/com/android/voicemail/impl/" \
+		--proto_path="java/com/android/voicemail/impl/transcribe/grpc/" "java/com/android/voicemail/impl/transcribe/grpc/voicemail_transcription.proto")
+	endef
+endif
+
+$(call gen-dialer-grpc)
+
 LOCAL_SRC_FILES := $(call all-java-files-under, $(SRC_DIRS))
 LOCAL_SRC_FILES := $(filter-out $(EXCLUDE_FILES),$(LOCAL_SRC_FILES))
+# * b/62875795 include manually generated GRPC service class:
+LOCAL_SRC_FILES += java/com/android/voicemail/impl/com/google/internal/communications/voicemailtranscription/v1/VoicemailTranscriptionServiceGrpc.java
 LOCAL_SRC_FILES += $(call all-proto-files-under, $(SRC_DIRS))
+
+# Backup Library
+BACKUP_LIB_SRC_DIR := ../../../external/libbackup/src/com/google/android/libraries/backup
+EXCLUDE_BACKUP_LIB_SRCS := $(call all-java-files-under, $(BACKUP_LIB_SRC_DIR)/shadow)
+LOCAL_SRC_FILES += $(call all-java-files-under, $(BACKUP_LIB_SRC_DIR))
+LOCAL_SRC_FILES := $(filter-out $(EXCLUDE_BACKUP_LIB_SRCS),$(LOCAL_SRC_FILES))
+
 LOCAL_PROTOC_FLAGS := --proto_path=$(LOCAL_PATH)
 
-LOCAL_RESOURCE_DIR := \
-	$(addprefix $(LOCAL_PATH)/, $(RES_DIRS)) \
-	$(support_library_root_dir)/design/res \
-	$(support_library_root_dir)/transition/res \
-	$(support_library_root_dir)/v7/appcompat/res \
-	$(support_library_root_dir)/v7/cardview/res \
-	$(support_library_root_dir)/v7/recyclerview/res
+LOCAL_RESOURCE_DIR := $(addprefix $(LOCAL_PATH)/, $(RES_DIRS))
+
+define all-dialer-manifest-extra-packages
+  $(shell cd $(LOCAL_PATH) ; \
+          find . -type f -name "AndroidManifest.xml" | uniq | sort | cut -c 8- | rev | cut -c 21- | rev | sed 's/\//./g')
+endef
+
+EXCLUDE_EXTRA_PACKAGES := \
+	com.android.dialer.binary.aosp.testing \
+	com.android.dialer.binary.google \
+	com.android.incallui.calllocation.impl \
+	com.android.incallui.maps.impl \
 
 # We specify each package explicitly to glob resource files.
-LOCAL_AAPT_FLAGS := \
+LOCAL_AAPT_FLAGS := $(call all-dialer-manifest-extra-packages)
+LOCAL_AAPT_FLAGS := $(filter-out $(EXCLUDE_EXTRA_PACKAGES),$(LOCAL_AAPT_FLAGS))
+LOCAL_AAPT_FLAGS := $(addprefix --extra-packages , $(LOCAL_AAPT_FLAGS))
+LOCAL_AAPT_FLAGS += \
 	--auto-add-overlay \
-	--extra-packages com.android.contacts.common \
-	--extra-packages com.android.dialer.about \
-	--extra-packages com.android.dialer.app \
-	--extra-packages com.android.dialer.app.voicemail.error \
-	--extra-packages com.android.dialer.blocking \
-	--extra-packages com.android.dialer.callcomposer \
-	--extra-packages com.android.dialer.callcomposer \
-	--extra-packages com.android.dialer.callcomposer.camera \
-	--extra-packages com.android.dialer.callcomposer.camera.camerafocus \
-	--extra-packages com.android.dialer.callcomposer.cameraui \
-	--extra-packages com.android.dialer.calldetails \
-	--extra-packages com.android.dialer.calllog.ui \
-	--extra-packages com.android.dialer.calllogutils \
-	--extra-packages com.android.dialer.common \
-        --extra-packages com.android.dialer.contactactions \
-	--extra-packages com.android.dialer.contactsfragment \
-	--extra-packages com.android.dialer.dialpadview \
-	--extra-packages com.android.dialer.enrichedcall.simulator \
-	--extra-packages com.android.dialer.interactions \
-	--extra-packages com.android.dialer.main.impl \
-	--extra-packages com.android.dialer.notification \
-	--extra-packages com.android.dialer.oem \
-	--extra-packages com.android.dialer.phonenumberutil \
-	--extra-packages com.android.dialer.postcall \
-	--extra-packages com.android.dialer.searchfragment.common \
-	--extra-packages com.android.dialer.searchfragment.list \
-	--extra-packages com.android.dialer.searchfragment.nearbyplaces \
-	--extra-packages com.android.dialershared.bubble \
-	--extra-packages com.android.dialer.shortcuts \
-	--extra-packages com.android.dialer.speeddial \
-	--extra-packages com.android.dialer.theme \
-	--extra-packages com.android.dialer.util \
-	--extra-packages com.android.dialer.voicemailstatus \
-	--extra-packages com.android.dialer.widget \
-	--extra-packages com.android.incallui \
-	--extra-packages com.android.incallui.answer.impl \
-	--extra-packages com.android.incallui.answer.impl.affordance \
-	--extra-packages com.android.incallui.answer.impl.affordance \
-	--extra-packages com.android.incallui.answer.impl.answermethod \
-	--extra-packages com.android.incallui.answer.impl.hint \
-	--extra-packages com.android.incallui.audioroute \
-	--extra-packages com.android.incallui.autoresizetext \
-	--extra-packages com.android.incallui.calllocation \
-	--extra-packages com.android.incallui.calllocation.impl \
-	--extra-packages com.android.incallui.commontheme \
-	--extra-packages com.android.incallui.contactgrid \
-	--extra-packages com.android.incallui.disconnectdialog \
-	--extra-packages com.android.incallui.hold \
-	--extra-packages com.android.incallui.incall.impl \
-	--extra-packages com.android.incallui.maps.impl \
-	--extra-packages com.android.incallui.sessiondata \
-	--extra-packages com.android.incallui.speakerbuttonlogic \
-	--extra-packages com.android.incallui.telecomeventui \
-	--extra-packages com.android.incallui.video \
-	--extra-packages com.android.incallui.video.impl \
-	--extra-packages com.android.phone.common \
-	--extra-packages com.android.voicemail \
-	--extra-packages com.android.voicemail.impl.configui \
-	--extra-packages com.android.voicemail.impl \
-	--extra-packages com.android.voicemail.impl.fetch \
-	--extra-packages com.android.voicemail.impl.settings \
-	--extra-packages com.android.voicemail.settings \
 	--extra-packages me.leolin.shortcutbadger \
 
-
 LOCAL_STATIC_JAVA_LIBRARIES := \
 	android-common \
 	android-support-dynamic-animation \
@@ -276,12 +136,12 @@
 	dialer-disklrucache-target \
 	dialer-gifdecoder-target \
 	dialer-glide-target \
-        dialer-grpc-all-target \
-        dialer-grpc-context-target \
-        dialer-grpc-core-target \
+	dialer-grpc-all-target \
+	dialer-grpc-context-target \
+	dialer-grpc-core-target \
 	dialer-grpc-okhttp-target \
 	dialer-grpc-protobuf-lite-target \
-        dialer-grpc-stub-target \
+	dialer-grpc-stub-target \
 	dialer-guava-target \
 	dialer-javax-annotation-api-target \
 	dialer-javax-inject-target \
@@ -290,10 +150,10 @@
 	dialer-mime4j-dom-target \
 	jsr305 \
 	libphonenumber \
-	okhttp \
 	volley \
 
 LOCAL_STATIC_ANDROID_LIBRARIES := \
+	android-support-core-ui \
 	android-support-design \
 	android-support-transition \
 	android-support-v13 \
@@ -331,13 +191,14 @@
 
 LOCAL_PROGUARD_ENABLED := disabled
 ifdef LOCAL_JACK_ENABLED
+
+define all-dialer-proguard-flags
+  $(shell cd $(LOCAL_PATH) ; \
+          find . -type f -name "proguard.*flags" | uniq | sort | cut -c 3-)
+endef
+
 # Proguard includes
-LOCAL_PROGUARD_FLAG_FILES := \
-    java/com/android/dialer/common/proguard.flags \
-    java/com/android/dialer/proguard/proguard_base.flags \
-    java/com/android/dialer/proguard/proguard.flags \
-    java/com/android/dialer/proguard/proguard_release.flags \
-    java/com/android/incallui/answer/impl/proguard.flags
+LOCAL_PROGUARD_FLAG_FILES := $(call all-dialer-proguard-flags)
 LOCAL_PROGUARD_ENABLED := custom
 
 LOCAL_PROGUARD_ENABLED += optimization
@@ -365,6 +226,10 @@
 DIALER_MANIFEST_FILES :=
 PROCESSOR_LIBRARIES_TARGET :=
 PROCESSOR_JARS :=
+EXCLUDE_MANIFESTS :=
+EXCLUDE_EXTRA_PACKAGES :=
+BACKUP_LIB_SRC_DIR :=
+EXCLUDE_BACKUP_LIB_SRCS :=
 
 # Create references to prebuilt libraries.
 include $(CLEAR_VARS)
@@ -557,4 +422,4 @@
 
 include $(BUILD_PREBUILT)
 
-include $(CLEAR_VARS)
\ No newline at end of file
+include $(CLEAR_VARS)
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 5420ec0..ca18feb 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -16,8 +16,8 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
   coreApp="true"
   package="com.android.dialer"
-  android:versionCode="150000"
-  android:versionName="11.0">
+  android:versionCode="160000"
+  android:versionName="12.0">
 
   <uses-sdk
     android:minSdkVersion="23"
@@ -103,17 +103,12 @@
   <uses-permission android:name="com.oppo.launcher.permission.WRITE_SETTINGS"/>
 
   <application
-    android:backupAgent='com.android.dialer.backup.DialerBackupAgent'
-    android:fullBackupOnly="true"
-    android:restoreAnyVersion="true"
     android:hardwareAccelerated="true"
     android:icon="@mipmap/ic_launcher_phone"
     android:label="@string/applicationLabel"
     android:name="com.android.dialer.binary.aosp.AospDialerApplication"
     android:supportsRtl="true"
     android:usesCleartextTraffic="false">
-
-
   </application>
 
 </manifest>
diff --git a/assets/quantum/res/drawable/quantum_ic_language_vd_theme_24.xml b/assets/quantum/res/drawable/quantum_ic_language_vd_theme_24.xml
new file mode 100644
index 0000000..bea0d5c
--- /dev/null
+++ b/assets/quantum/res/drawable/quantum_ic_language_vd_theme_24.xml
@@ -0,0 +1,10 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24dp"
+        android:height="24dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0"
+        android:tint="?attr/colorControlNormal">
+    <path
+        android:fillColor="@android:color/white"
+        android:pathData="M11.99,2C6.47,2 2,6.48 2,12s4.47,10 9.99,10C17.52,22 22,17.52 22,12S17.52,2 11.99,2zM18.92,8h-2.95c-0.32,-1.25 -0.78,-2.45 -1.38,-3.56 1.84,0.63 3.37,1.91 4.33,3.56zM12,4.04c0.83,1.2 1.48,2.53 1.91,3.96h-3.82c0.43,-1.43 1.08,-2.76 1.91,-3.96zM4.26,14C4.1,13.36 4,12.69 4,12s0.1,-1.36 0.26,-2h3.38c-0.08,0.66 -0.14,1.32 -0.14,2 0,0.68 0.06,1.34 0.14,2L4.26,14zM5.08,16h2.95c0.32,1.25 0.78,2.45 1.38,3.56 -1.84,-0.63 -3.37,-1.9 -4.33,-3.56zM8.03,8L5.08,8c0.96,-1.66 2.49,-2.93 4.33,-3.56C8.81,5.55 8.35,6.75 8.03,8zM12,19.96c-0.83,-1.2 -1.48,-2.53 -1.91,-3.96h3.82c-0.43,1.43 -1.08,2.76 -1.91,3.96zM14.34,14L9.66,14c-0.09,-0.66 -0.16,-1.32 -0.16,-2 0,-0.68 0.07,-1.35 0.16,-2h4.68c0.09,0.65 0.16,1.32 0.16,2 0,0.68 -0.07,1.34 -0.16,2zM14.59,19.56c0.6,-1.11 1.06,-2.31 1.38,-3.56h2.95c-0.96,1.65 -2.49,2.93 -4.33,3.56zM16.36,14c0.08,-0.66 0.14,-1.32 0.14,-2 0,-0.68 -0.06,-1.34 -0.14,-2h3.38c0.16,0.64 0.26,1.31 0.26,2s-0.1,1.36 -0.26,2h-3.38z"/>
+</vector>
diff --git a/java/com/android/contacts/common/Bindings.java b/java/com/android/contacts/common/Bindings.java
deleted file mode 100644
index 29cf795..0000000
--- a/java/com/android/contacts/common/Bindings.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.contacts.common;
-
-import android.content.Context;
-import com.android.contacts.common.bindings.ContactsCommonBindings;
-import com.android.contacts.common.bindings.ContactsCommonBindingsFactory;
-import com.android.contacts.common.bindings.ContactsCommonBindingsStub;
-import java.util.Objects;
-
-/** Accessor for the contacts common bindings. */
-public class Bindings {
-
-  private static ContactsCommonBindings instance;
-
-  private Bindings() {}
-
-  public static ContactsCommonBindings get(Context context) {
-    Objects.requireNonNull(context);
-    if (instance != null) {
-      return instance;
-    }
-
-    Context application = context.getApplicationContext();
-    if (application instanceof ContactsCommonBindingsFactory) {
-      instance = ((ContactsCommonBindingsFactory) application).newContactsCommonBindings();
-    }
-
-    if (instance == null) {
-      instance = new ContactsCommonBindingsStub();
-    }
-    return instance;
-  }
-
-  public static void setForTesting(ContactsCommonBindings testInstance) {
-    instance = testInstance;
-  }
-}
diff --git a/java/com/android/contacts/common/bindings/ContactsCommonBindings.java b/java/com/android/contacts/common/bindings/ContactsCommonBindings.java
deleted file mode 100644
index 44be53b..0000000
--- a/java/com/android/contacts/common/bindings/ContactsCommonBindings.java
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
- * in compliance with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied. See the License for the specific language governing permissions and limitations under
- * the License.
- */
-
-package com.android.contacts.common.bindings;
-
-import android.support.annotation.Nullable;
-
-/** Allows the container application to customize the contacts common library. */
-public interface ContactsCommonBindings {
-
-  /** Builds a user agent string for the current application. */
-  @Nullable
-  String getUserAgent();
-}
diff --git a/java/com/android/contacts/common/bindings/ContactsCommonBindingsFactory.java b/java/com/android/contacts/common/bindings/ContactsCommonBindingsFactory.java
deleted file mode 100644
index 8958ad9..0000000
--- a/java/com/android/contacts/common/bindings/ContactsCommonBindingsFactory.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
- * in compliance with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied. See the License for the specific language governing permissions and limitations under
- * the License.
- */
-
-package com.android.contacts.common.bindings;
-
-/**
- * This interface should be implementated by the Application subclass. It allows the contacts common
- * module to get references to the ContactsCommonBindings.
- */
-public interface ContactsCommonBindingsFactory {
-
-  ContactsCommonBindings newContactsCommonBindings();
-}
diff --git a/java/com/android/contacts/common/bindings/ContactsCommonBindingsStub.java b/java/com/android/contacts/common/bindings/ContactsCommonBindingsStub.java
deleted file mode 100644
index f2e21b1..0000000
--- a/java/com/android/contacts/common/bindings/ContactsCommonBindingsStub.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
- * in compliance with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied. See the License for the specific language governing permissions and limitations under
- * the License.
- */
-
-package com.android.contacts.common.bindings;
-
-import android.support.annotation.Nullable;
-
-/** Default implementation for contacts common bindings. */
-public class ContactsCommonBindingsStub implements ContactsCommonBindings {
-
-  @Override
-  @Nullable
-  public String getUserAgent() {
-    return null;
-  }
-}
diff --git a/java/com/android/contacts/common/compat/telecom/TelecomManagerCompat.java b/java/com/android/contacts/common/compat/telecom/TelecomManagerCompat.java
index 2d77dc7..172fb11 100644
--- a/java/com/android/contacts/common/compat/telecom/TelecomManagerCompat.java
+++ b/java/com/android/contacts/common/compat/telecom/TelecomManagerCompat.java
@@ -23,7 +23,7 @@
 /** Compatibility class for {@link android.telecom.TelecomManager}. */
 public class TelecomManagerCompat {
 
-  // TODO: remove once this is available in android.telecom.Call
+  // TODO(mdooley): remove once this is available in android.telecom.Call
   // b/33779976
   public static final String EXTRA_LAST_EMERGENCY_CALLBACK_TIME_MILLIS =
       "android.telecom.extra.LAST_EMERGENCY_CALLBACK_TIME_MILLIS";
@@ -37,7 +37,7 @@
 
   // This is a hidden constant in android.telecom.DisconnectCause. Telecom sets this as a disconnect
   // reason if it wants us to prompt the user that the video call is not available.
-  // TODO: Reference it to constant in android.telecom.DisconnectCause.
+  // TODO(wangqi): Reference it to constant in android.telecom.DisconnectCause.
   public static final String REASON_IMS_ACCESS_BLOCKED = "REASON_IMS_ACCESS_BLOCKED";
 
   /**
diff --git a/java/com/android/contacts/common/database/NoNullCursorAsyncQueryHandler.java b/java/com/android/contacts/common/database/NoNullCursorAsyncQueryHandler.java
index d5e6135..5d10720 100644
--- a/java/com/android/contacts/common/database/NoNullCursorAsyncQueryHandler.java
+++ b/java/com/android/contacts/common/database/NoNullCursorAsyncQueryHandler.java
@@ -20,6 +20,9 @@
 import android.content.ContentResolver;
 import android.database.Cursor;
 import android.net.Uri;
+import android.support.annotation.Nullable;
+import android.support.annotation.VisibleForTesting;
+import java.util.concurrent.atomic.AtomicInteger;
 
 /**
  * An {@AsyncQueryHandler} that will never return a null cursor.
@@ -27,6 +30,8 @@
  * <p>Instead, will return a {@link Cursor} with 0 records.
  */
 public abstract class NoNullCursorAsyncQueryHandler extends AsyncQueryHandler {
+  private static final AtomicInteger pendingQueryCount = new AtomicInteger();
+  @Nullable private static PendingQueryCountChangedListener pendingQueryCountChangedListener;
 
   public NoNullCursorAsyncQueryHandler(ContentResolver cr) {
     super(cr);
@@ -41,6 +46,11 @@
       String selection,
       String[] selectionArgs,
       String orderBy) {
+    pendingQueryCount.getAndIncrement();
+    if (pendingQueryCountChangedListener != null) {
+      pendingQueryCountChangedListener.onPendingQueryCountChanged();
+    }
+
     final CookieWithProjection projectionCookie = new CookieWithProjection(cookie, projection);
     super.startQuery(token, projectionCookie, uri, projection, selection, selectionArgs, orderBy);
   }
@@ -55,10 +65,31 @@
       cursor = new EmptyCursor(projectionCookie.projection);
     }
     onNotNullableQueryComplete(token, projectionCookie.originalCookie, cursor);
+
+    pendingQueryCount.getAndDecrement();
+    if (pendingQueryCountChangedListener != null) {
+      pendingQueryCountChangedListener.onPendingQueryCountChanged();
+    }
   }
 
   protected abstract void onNotNullableQueryComplete(int token, Object cookie, Cursor cursor);
 
+  @VisibleForTesting(otherwise = VisibleForTesting.NONE)
+  public static void setPendingQueryCountChangedListener(
+      @Nullable PendingQueryCountChangedListener listener) {
+    pendingQueryCountChangedListener = listener;
+  }
+
+  @VisibleForTesting(otherwise = VisibleForTesting.NONE)
+  public static int getPendingQueryCount() {
+    return pendingQueryCount.get();
+  }
+
+  /** Callback to listen for changes in the number of queries that have not completed. */
+  public interface PendingQueryCountChangedListener {
+    void onPendingQueryCountChanged();
+  }
+
   /** Class to add projection to an existing cookie. */
   private static class CookieWithProjection {
 
diff --git a/java/com/android/contacts/common/dialog/CallSubjectDialog.java b/java/com/android/contacts/common/dialog/CallSubjectDialog.java
index 88fac02..5c2ae2f 100644
--- a/java/com/android/contacts/common/dialog/CallSubjectDialog.java
+++ b/java/com/android/contacts/common/dialog/CallSubjectDialog.java
@@ -43,13 +43,13 @@
 import android.widget.ListView;
 import android.widget.QuickContactBadge;
 import android.widget.TextView;
-import com.android.contacts.common.ContactPhotoManager;
 import com.android.contacts.common.R;
-import com.android.contacts.common.lettertiles.LetterTileDrawable;
 import com.android.dialer.animation.AnimUtils;
 import com.android.dialer.callintent.CallInitiationType;
 import com.android.dialer.callintent.CallIntentBuilder;
 import com.android.dialer.common.LogUtil;
+import com.android.dialer.contactphoto.ContactPhotoManager;
+import com.android.dialer.lettertile.LetterTileDrawable;
 import com.android.dialer.util.ViewUtil;
 import java.nio.charset.Charset;
 import java.util.ArrayList;
diff --git a/java/com/android/contacts/common/list/ContactEntryListAdapter.java b/java/com/android/contacts/common/list/ContactEntryListAdapter.java
index 7335297..117825d 100644
--- a/java/com/android/contacts/common/list/ContactEntryListAdapter.java
+++ b/java/com/android/contacts/common/list/ContactEntryListAdapter.java
@@ -32,8 +32,6 @@
 import android.widget.QuickContactBadge;
 import android.widget.SectionIndexer;
 import android.widget.TextView;
-import com.android.contacts.common.ContactPhotoManager;
-import com.android.contacts.common.ContactPhotoManager.DefaultImageRequest;
 import com.android.contacts.common.ContactsUtils;
 import com.android.contacts.common.R;
 import com.android.contacts.common.compat.DirectoryCompat;
@@ -41,6 +39,8 @@
 import com.android.dialer.common.LogUtil;
 import com.android.dialer.compat.CompatUtils;
 import com.android.dialer.configprovider.ConfigProviderBindings;
+import com.android.dialer.contactphoto.ContactPhotoManager;
+import com.android.dialer.contactphoto.ContactPhotoManager.DefaultImageRequest;
 import com.android.dialer.logging.InteractionEvent;
 import com.android.dialer.logging.Logger;
 import java.util.HashSet;
diff --git a/java/com/android/contacts/common/list/ContactEntryListFragment.java b/java/com/android/contacts/common/list/ContactEntryListFragment.java
index 04658be..94551a8 100644
--- a/java/com/android/contacts/common/list/ContactEntryListFragment.java
+++ b/java/com/android/contacts/common/list/ContactEntryListFragment.java
@@ -43,10 +43,10 @@
 import android.widget.AdapterView.OnItemClickListener;
 import android.widget.ListView;
 import com.android.common.widget.CompositeCursorAdapter.Partition;
-import com.android.contacts.common.ContactPhotoManager;
 import com.android.contacts.common.preference.ContactsPreferences;
 import com.android.contacts.common.util.ContactListViewUtils;
 import com.android.dialer.common.LogUtil;
+import com.android.dialer.contactphoto.ContactPhotoManager;
 import com.android.dialer.performancereport.PerformanceReport;
 import java.lang.ref.WeakReference;
 import java.util.Locale;
diff --git a/java/com/android/contacts/common/list/ContactListAdapter.java b/java/com/android/contacts/common/list/ContactListAdapter.java
index 6cd3118..721609d 100644
--- a/java/com/android/contacts/common/list/ContactListAdapter.java
+++ b/java/com/android/contacts/common/list/ContactListAdapter.java
@@ -23,9 +23,9 @@
 import android.provider.ContactsContract.Directory;
 import android.provider.ContactsContract.SearchSnippets;
 import android.view.ViewGroup;
-import com.android.contacts.common.ContactPhotoManager.DefaultImageRequest;
 import com.android.contacts.common.R;
 import com.android.contacts.common.preference.ContactsPreferences;
+import com.android.dialer.contactphoto.ContactPhotoManager.DefaultImageRequest;
 
 /**
  * A cursor adapter for the {@link ContactsContract.Contacts#CONTENT_TYPE} content type. Also
diff --git a/java/com/android/contacts/common/list/ContactTileView.java b/java/com/android/contacts/common/list/ContactTileView.java
index 15582d6..4635641 100644
--- a/java/com/android/contacts/common/list/ContactTileView.java
+++ b/java/com/android/contacts/common/list/ContactTileView.java
@@ -23,13 +23,13 @@
 import android.widget.FrameLayout;
 import android.widget.ImageView;
 import android.widget.TextView;
-import com.android.contacts.common.ContactPhotoManager;
-import com.android.contacts.common.ContactPhotoManager.DefaultImageRequest;
 import com.android.contacts.common.MoreContactUtils;
 import com.android.contacts.common.R;
 import com.android.dialer.callintent.CallInitiationType;
 import com.android.dialer.callintent.CallSpecificAppData;
 import com.android.dialer.common.LogUtil;
+import com.android.dialer.contactphoto.ContactPhotoManager;
+import com.android.dialer.contactphoto.ContactPhotoManager.DefaultImageRequest;
 
 /** A ContactTile displays a contact's picture and name */
 public abstract class ContactTileView extends FrameLayout {
diff --git a/java/com/android/contacts/common/list/PhoneNumberListAdapter.java b/java/com/android/contacts/common/list/PhoneNumberListAdapter.java
index ae15eb2..71d9dad 100644
--- a/java/com/android/contacts/common/list/PhoneNumberListAdapter.java
+++ b/java/com/android/contacts/common/list/PhoneNumberListAdapter.java
@@ -31,25 +31,25 @@
 import android.text.TextUtils;
 import android.view.View;
 import android.view.ViewGroup;
-import com.android.contacts.common.ContactPhotoManager.DefaultImageRequest;
 import com.android.contacts.common.ContactsUtils;
 import com.android.contacts.common.R;
 import com.android.contacts.common.compat.CallableCompat;
 import com.android.contacts.common.compat.DirectoryCompat;
 import com.android.contacts.common.compat.PhoneCompat;
 import com.android.contacts.common.extensions.PhoneDirectoryExtenderAccessor;
-import com.android.contacts.common.lettertiles.LetterTileDrawable;
 import com.android.contacts.common.list.ContactListItemView.CallToAction;
 import com.android.contacts.common.preference.ContactsPreferences;
 import com.android.contacts.common.util.Constants;
 import com.android.dialer.common.LogUtil;
 import com.android.dialer.compat.CompatUtils;
+import com.android.dialer.contactphoto.ContactPhotoManager.DefaultImageRequest;
 import com.android.dialer.dialercontact.DialerContact;
 import com.android.dialer.enrichedcall.EnrichedCallCapabilities;
 import com.android.dialer.enrichedcall.EnrichedCallComponent;
 import com.android.dialer.enrichedcall.EnrichedCallManager;
+import com.android.dialer.lettertile.LetterTileDrawable;
 import com.android.dialer.lightbringer.LightbringerComponent;
-import com.android.dialer.location.GeoUtil;
+import com.android.dialer.phonenumberutil.PhoneNumberHelper;
 import com.android.dialer.util.CallUtil;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -381,7 +381,7 @@
         text = phoneLabel;
       } else {
         final String phoneNumber = cursor.getString(PhoneQuery.PHONE_NUMBER);
-        text = GeoUtil.getGeocodedLocationFor(mContext, phoneNumber);
+        text = PhoneNumberHelper.getGeoDescription(mContext, phoneNumber);
       }
     }
     view.setPhoneNumber(text);
@@ -407,7 +407,7 @@
     if (action == ContactListItemView.NONE) {
       EnrichedCallManager manager = EnrichedCallComponent.get(mContext).getEnrichedCallManager();
       EnrichedCallCapabilities capabilities = manager.getCapabilities(number);
-      if (capabilities != null && capabilities.supportsCallComposer()) {
+      if (capabilities != null && capabilities.isCallComposerCapable()) {
         action = ContactListItemView.CALL_AND_SHARE;
       } else if (capabilities == null
           && getQueryString() != null
diff --git a/java/com/android/contacts/common/list/PhoneNumberPickerFragment.java b/java/com/android/contacts/common/list/PhoneNumberPickerFragment.java
index de7903e..2ab1217 100644
--- a/java/com/android/contacts/common/list/PhoneNumberPickerFragment.java
+++ b/java/com/android/contacts/common/list/PhoneNumberPickerFragment.java
@@ -278,7 +278,7 @@
   @MainThread
   public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
     Assert.isMainThread();
-    // TODO: define and verify behavior for "Nearby places", corp directories,
+    // TODO(strongarm): define and verify behavior for "Nearby places", corp directories,
     // and dividers listed in UI between these categories
     if (mCursorReranker != null
         && data != null
@@ -353,7 +353,7 @@
         if (view.getCallToAction() != ContactListItemView.NONE
             || view.getPhoneNumber() == null
             || manager.getCapabilities(view.getPhoneNumber()) == null
-            || !manager.getCapabilities(view.getPhoneNumber()).supportsCallComposer()) {
+            || !manager.getCapabilities(view.getPhoneNumber()).isCallComposerCapable()) {
           continue;
         }
         view.setCallToAction(ContactListItemView.CALL_AND_SHARE, listener, view.getPosition());
diff --git a/java/com/android/contacts/common/model/ContactLoader.java b/java/com/android/contacts/common/model/ContactLoader.java
index 7ef3b73..d2c7577 100644
--- a/java/com/android/contacts/common/model/ContactLoader.java
+++ b/java/com/android/contacts/common/model/ContactLoader.java
@@ -44,10 +44,10 @@
 import com.android.contacts.common.model.dataitem.PhotoDataItem;
 import com.android.contacts.common.util.Constants;
 import com.android.contacts.common.util.ContactLoaderUtils;
-import com.android.contacts.common.util.UriUtils;
 import com.android.dialer.common.LogUtil;
 import com.android.dialer.location.GeoUtil;
 import com.android.dialer.util.PermissionsUtil;
+import com.android.dialer.util.UriUtils;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
@@ -731,6 +731,7 @@
         intent.setClassName(servicePackageName, serviceName);
         intent.setAction(Intent.ACTION_VIEW);
         intent.setDataAndType(uri, RawContacts.CONTENT_ITEM_TYPE);
+        intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
         try {
           context.startService(intent);
         } catch (Exception e) {
diff --git a/java/com/android/contacts/common/preference/ContactsPreferences.java b/java/com/android/contacts/common/preference/ContactsPreferences.java
index 7f0d99a..2bdf5c8 100644
--- a/java/com/android/contacts/common/preference/ContactsPreferences.java
+++ b/java/com/android/contacts/common/preference/ContactsPreferences.java
@@ -27,6 +27,7 @@
 import android.text.TextUtils;
 import com.android.contacts.common.R;
 import com.android.contacts.common.model.account.AccountWithDataSet;
+import com.android.dialer.strictmode.DialerStrictMode;
 
 /** Manages user preferences for contacts. */
 public class ContactsPreferences implements OnSharedPreferenceChangeListener {
@@ -77,11 +78,11 @@
     maybeMigrateSystemSettings();
   }
 
-  public boolean isSortOrderUserChangeable() {
+  private boolean isSortOrderUserChangeable() {
     return mContext.getResources().getBoolean(R.bool.config_sort_order_user_changeable);
   }
 
-  public int getDefaultSortOrder() {
+  private int getDefaultSortOrder() {
     if (mContext.getResources().getBoolean(R.bool.config_default_sort_order_primary)) {
       return SORT_ORDER_PRIMARY;
     } else {
@@ -103,14 +104,14 @@
     mSortOrder = sortOrder;
     final Editor editor = mPreferences.edit();
     editor.putInt(SORT_ORDER_KEY, sortOrder);
-    editor.commit();
+    DialerStrictMode.bypass(editor::commit);
   }
 
-  public boolean isDisplayOrderUserChangeable() {
+  private boolean isDisplayOrderUserChangeable() {
     return mContext.getResources().getBoolean(R.bool.config_display_order_user_changeable);
   }
 
-  public int getDefaultDisplayOrder() {
+  private int getDefaultDisplayOrder() {
     if (mContext.getResources().getBoolean(R.bool.config_default_display_order_primary)) {
       return DISPLAY_ORDER_PRIMARY;
     } else {
@@ -132,14 +133,14 @@
     mDisplayOrder = displayOrder;
     final Editor editor = mPreferences.edit();
     editor.putInt(DISPLAY_ORDER_KEY, displayOrder);
-    editor.commit();
+    DialerStrictMode.bypass(editor::commit);
   }
 
-  public boolean isDefaultAccountUserChangeable() {
+  private boolean isDefaultAccountUserChangeable() {
     return mContext.getResources().getBoolean(R.bool.config_default_account_user_changeable);
   }
 
-  public String getDefaultAccount() {
+  private String getDefaultAccount() {
     if (!isDefaultAccountUserChangeable()) {
       return mDefaultAccount;
     }
@@ -153,7 +154,7 @@
     return mDefaultAccount;
   }
 
-  public void setDefaultAccount(AccountWithDataSet accountWithDataSet) {
+  private void setDefaultAccount(AccountWithDataSet accountWithDataSet) {
     mDefaultAccount = accountWithDataSet == null ? null : accountWithDataSet.name;
     final Editor editor = mPreferences.edit();
     if (TextUtils.isEmpty(mDefaultAccount)) {
@@ -162,7 +163,7 @@
       editor.putString(mDefaultAccountKey, accountWithDataSet.stringify());
     }
     editor.putBoolean(mDefaultAccountSavedKey, true);
-    editor.commit();
+    DialerStrictMode.bypass(editor::commit);
   }
 
   public void registerChangeListener(ChangeListener listener) {
diff --git a/java/com/android/contacts/common/res/drawable/ic_work_profile.xml b/java/com/android/contacts/common/res/drawable/ic_work_profile.xml
index fc21100..4452885 100644
--- a/java/com/android/contacts/common/res/drawable/ic_work_profile.xml
+++ b/java/com/android/contacts/common/res/drawable/ic_work_profile.xml
@@ -1,16 +1,26 @@
-<?xml version="1.0" encoding="utf-8"?>
+<!--
+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.
+-->
 <vector xmlns:android="http://schemas.android.com/apk/res/android"
-  android:height="16dp"
-  android:viewportHeight="48"
-  android:viewportWidth="48"
-  android:width="16dp">
+        android:width="16dp"
+        android:height="16dp"
+        android:viewportWidth="16.0"
+        android:viewportHeight="16.0">
 
 
-  <path
-    android:fillColor="#757575"
-    android:pathData="M28 33h-8v-3H6v8c0 2.2 1.8 4 4 4h28c2.2 0 4-1.8
-4-4v-8H28v3zm12-21h-7V9l-3-3H18l-3 3.1V12H8c-2.2 0-4 1.8-4 4v8c0 2.2 1.8 4 4
-4h12v-3h8v3h12c2.2 0 4-1.8 4-4v-8c0-2.2-1.8-4-4-4zm-10 0H18V9h12v3z"/>
-  <path
-    android:pathData="M0 0h48v48H0z"/>
+    <path
+        android:pathData="M13.33,4h-2.67V2.67c0,-0.74 -0.59,-1.33 -1.33,-1.33H6.67c-0.74,0 -1.33,0.59 -1.33,1.33V4H2.67C1.93,4 1.34,4.59 1.34,5.33l-0.01,7.33c0,0.74 0.59,1.33 1.33,1.33h10.67c0.74,0 1.33,-0.59 1.33,-1.33V5.33C14.67,4.59 14.07,4 13.33,4zM8,10c-0.73,0 -1.33,-0.6 -1.33,-1.33S7.27,7.33 8,7.33s1.33,0.6 1.33,1.33S8.73,10 8,10zM9.33,4H6.67V2.67h2.67V4z"
+        android:fillColor="#757575"/>
 </vector>
diff --git a/java/com/android/contacts/common/res/values-zh-rHK/strings.xml b/java/com/android/contacts/common/res/values-zh-rHK/strings.xml
index 842ac87..122d0fe 100644
--- a/java/com/android/contacts/common/res/values-zh-rHK/strings.xml
+++ b/java/com/android/contacts/common/res/values-zh-rHK/strings.xml
@@ -64,7 +64,7 @@
     <string name="sms_mms" msgid="5187888900503248542">"傳送短訊至 MMS 電話號碼"</string>
     <string name="sms_by_shortcut" msgid="8005496406639963582">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (訊息)"</string>
     <string name="clearFrequentsConfirmation_title" msgid="7465690215775790243">"清除常用聯絡人?"</string>
-    <string name="clearFrequentsConfirmation" msgid="5750611450893399198">"您將清除「通訊錄」應用程式和「電話」應用程式中的常用聯絡人名單,並強制電子郵件應用程式重新取得您的寄件偏好設定。"</string>
+    <string name="clearFrequentsConfirmation" msgid="5750611450893399198">"您將清除「通訊錄」應用程式和「電話」應用程式中的常用聯絡人名單,並強制電子郵件應用程式重新取得您的寄件喜好設定。"</string>
     <string name="clearFrequentsProgress_title" msgid="2057183487226039454">"正在清除常用聯絡人…"</string>
     <string name="status_available" msgid="2648156525685472626">"在線"</string>
     <string name="status_away" msgid="2298688367552893953">"離開"</string>
diff --git a/java/com/android/contacts/common/res/values/colors.xml b/java/com/android/contacts/common/res/values/colors.xml
index 434d193..ca87341 100644
--- a/java/com/android/contacts/common/res/values/colors.xml
+++ b/java/com/android/contacts/common/res/values/colors.xml
@@ -20,8 +20,6 @@
 
   <color name="focus_color">#44ff0000</color>
 
-  <color name="spam_contact_background">#A52714</color>
-
   <!-- Color of ripples used for views with dark backgrounds -->
   <color name="dialer_ripple_material_dark">#a0ffffff</color>
 
@@ -59,24 +57,6 @@
   <color name="textColorIconOverlay">#fff</color>
   <color name="textColorIconOverlayShadow">#000</color>
 
-
-  <array name="letter_tile_colors">
-    <item>#DB4437</item>
-    <item>#E91E63</item>
-    <item>#9C27B0</item>
-    <item>#673AB7</item>
-    <item>#3F51B5</item>
-    <item>#4285F4</item>
-    <item>#039BE5</item>
-    <item>#0097A7</item>
-    <item>#009688</item>
-    <item>#0F9D58</item>
-    <item>#689F38</item>
-    <item>#EF6C00</item>
-    <item>#FF5722</item>
-    <item>#757575</item>
-  </array>
-
   <!-- Darker versions of letter_tile_colors, two shades darker. These colors are used
       for settings secondary activity colors. -->
   <array name="letter_tile_colors_dark">
@@ -103,11 +83,6 @@
           this is Blue Grey 700 -->
   <color name="quickcontact_default_photo_tint_color_dark">#455A64</color>
 
-
-  <color name="letter_tile_default_color">#cccccc</color>
-
-  <color name="letter_tile_font_color">#ffffff</color>
-
   <color name="contactscommon_actionbar_background_color">@color/dialer_theme_color</color>
   <!-- Color for icons in the actionbar -->
   <color name="actionbar_icon_color">#ffffff</color>
diff --git a/java/com/android/contacts/common/res/values/dimens.xml b/java/com/android/contacts/common/res/values/dimens.xml
index 26f095f..74e1547 100644
--- a/java/com/android/contacts/common/res/values/dimens.xml
+++ b/java/com/android/contacts/common/res/values/dimens.xml
@@ -83,12 +83,6 @@
   <dimen name="contact_phone_list_empty_description_size">20sp</dimen>
   <dimen name="contact_phone_list_empty_description_padding">10dip</dimen>
 
-  <!-- Dimensions for contact letter tiles -->
-  <dimen name="tile_letter_font_size">40dp</dimen>
-  <dimen name="tile_letter_font_size_small">20dp</dimen>
-  <dimen name="tile_divider_width">1dp</dimen>
-  <item name="letter_to_tile_ratio" type="dimen">67%</item>
-
   <!-- Height of the floating action button -->
   <dimen name="floating_action_button_height">56dp</dimen>
   <!-- Width of the floating action button -->
diff --git a/java/com/android/contacts/common/res/values/strings.xml b/java/com/android/contacts/common/res/values/strings.xml
index 85866f7..f83f16b 100644
--- a/java/com/android/contacts/common/res/values/strings.xml
+++ b/java/com/android/contacts/common/res/values/strings.xml
@@ -182,13 +182,6 @@
     <item quantity="other"><xliff:g id="count">%d</xliff:g> found</item>
   </plurals>
 
-  <!-- String describing the text for photo of a contact in a contacts list.
-
-      Note: AccessibilityServices use this attribute to announce what the view represents.
-            This is especially valuable for views without textual representation like ImageView.
-  -->
-  <string name="description_quick_contact_for">Quick contact for <xliff:g id="name">%1$s</xliff:g></string>
-
   <!-- Shown as the display name for a person when the name is missing or unknown. [CHAR LIMIT=18]-->
   <string name="missing_name">(No name)</string>
 
diff --git a/java/com/android/dialer/about/res/raw/third_party_license_metadata b/java/com/android/dialer/about/res/raw/third_party_license_metadata
old mode 100644
new mode 100755
diff --git a/java/com/android/dialer/about/res/raw/third_party_licenses b/java/com/android/dialer/about/res/raw/third_party_licenses
old mode 100644
new mode 100755
diff --git a/java/com/android/dialer/app/DialtactsActivity.java b/java/com/android/dialer/app/DialtactsActivity.java
index b6025d3..7e62065 100644
--- a/java/com/android/dialer/app/DialtactsActivity.java
+++ b/java/com/android/dialer/app/DialtactsActivity.java
@@ -287,7 +287,7 @@
           }
           mSearchQuery = newText;
 
-          // TODO: show p13n when newText is empty.
+          // TODO(calderwoodra): show p13n when newText is empty.
           // Show search fragment only when the query string is changed to non-empty text.
           if (!TextUtils.isEmpty(newText)) {
             // Call enterSearchUi only if we are switching search modes, or showing a search
@@ -598,7 +598,7 @@
         new P13nRefreshCompleteListener() {
           @Override
           public void onP13nRefreshComplete() {
-            // TODO: make zero-query search results visible
+            // TODO(strongarm): make zero-query search results visible
           }
         });
     Trace.endSection();
@@ -678,6 +678,7 @@
       mListsFragment.addOnPageChangeListener(this);
     } else if (fragment instanceof NewSearchFragment) {
       mNewSearchFragment = (NewSearchFragment) fragment;
+      updateSearchFragmentPosition();
     }
     if (fragment instanceof SearchFragment) {
       final SearchFragment searchFragment = (SearchFragment) fragment;
@@ -854,7 +855,7 @@
 
     Assert.isNotNull(mListsFragment.getView()).animate().alpha(0).withLayer();
 
-    //adjust the title, so the user will know where we're at when the activity start/resumes.
+    // adjust the title, so the user will know where we're at when the activity start/resumes.
     setTitle(R.string.launcherDialpadActivityLabel);
   }
 
@@ -916,7 +917,7 @@
         exitSearchUi();
       }
     }
-    //reset the title to normal.
+    // reset the title to normal.
     setTitle(R.string.launcherActivityLabel);
   }
 
@@ -951,6 +952,12 @@
       // available immediately which is required to update position. By forcing an animation,
       // position will be updated after a delay by when the dialpad height would be available.
       fragment.updatePosition(true /* animate */);
+    } else if (mNewSearchFragment != null) {
+      int animationDuration = getResources().getInteger(R.integer.dialpad_slide_in_duration);
+      int shadowHeight = getResources().getDrawable(R.drawable.search_shadow).getIntrinsicHeight();
+      int start = isDialpadShown() ? mActionBarHeight - shadowHeight : 0;
+      int end = isDialpadShown() ? 0 : mActionBarHeight - shadowHeight;
+      mNewSearchFragment.animatePosition(start, end, animationDuration);
     }
   }
 
@@ -1171,7 +1178,7 @@
       }
       transaction.add(R.id.dialtacts_frame, fragment, tag);
     } else {
-      // TODO: if this is a transition from dialpad to searchbar, animate fragment
+      // TODO(calderwoodra): if this is a transition from dialpad to searchbar, animate fragment
       // down, and vice versa. Perhaps just add a coordinator behavior with the search bar.
       transaction.show(fragment);
     }
@@ -1184,7 +1191,7 @@
       ((SearchFragment) fragment)
           .setShowEmptyListForNullQuery(mP13nRanker.shouldShowEmptyListForNullQuery());
     } else {
-      // TODO: add p13n ranker to new search.
+      // TODO(calderwoodra): add p13n ranker to new search.
     }
 
     if (!smartDialSearch && !useNewSearch) {
diff --git a/java/com/android/dialer/app/SpecialCharSequenceMgr.java b/java/com/android/dialer/app/SpecialCharSequenceMgr.java
index 20222d6..fd67f47 100644
--- a/java/com/android/dialer/app/SpecialCharSequenceMgr.java
+++ b/java/com/android/dialer/app/SpecialCharSequenceMgr.java
@@ -39,7 +39,6 @@
 import android.widget.EditText;
 import android.widget.Toast;
 import com.android.common.io.MoreCloseables;
-import com.android.contacts.common.compat.TelephonyManagerCompat;
 import com.android.contacts.common.database.NoNullCursorAsyncQueryHandler;
 import com.android.contacts.common.util.ContactDisplayUtils;
 import com.android.contacts.common.widget.SelectPhoneAccountDialogFragment;
@@ -47,6 +46,7 @@
 import com.android.dialer.calllogutils.PhoneAccountUtils;
 import com.android.dialer.common.Assert;
 import com.android.dialer.common.LogUtil;
+import com.android.dialer.compat.telephony.TelephonyManagerCompat;
 import com.android.dialer.oem.MotorolaUtils;
 import com.android.dialer.telecom.TelecomUtil;
 import java.util.ArrayList;
diff --git a/java/com/android/dialer/app/calllog/CallLogActivity.java b/java/com/android/dialer/app/calllog/CallLogActivity.java
index 35e05bc..c9e655d 100644
--- a/java/com/android/dialer/app/calllog/CallLogActivity.java
+++ b/java/com/android/dialer/app/calllog/CallLogActivity.java
@@ -32,10 +32,8 @@
 import com.android.contacts.common.list.ViewPagerTabs;
 import com.android.dialer.app.DialtactsActivity;
 import com.android.dialer.app.R;
-import com.android.dialer.app.calllog.ClearCallLogDialog.Listener;
 import com.android.dialer.calldetails.CallDetailsActivity;
 import com.android.dialer.database.CallLogQueryHandler;
-import com.android.dialer.enrichedcall.EnrichedCallComponent;
 import com.android.dialer.logging.Logger;
 import com.android.dialer.logging.ScreenEvent;
 import com.android.dialer.logging.UiAction;
@@ -46,7 +44,7 @@
 
 /** Activity for viewing call history. */
 public class CallLogActivity extends TransactionSafeActivity
-    implements ViewPager.OnPageChangeListener, Listener {
+    implements ViewPager.OnPageChangeListener {
 
   private static final int TAB_INDEX_ALL = 0;
   private static final int TAB_INDEX_MISSED = 1;
@@ -148,7 +146,7 @@
       startActivity(intent);
       return true;
     } else if (item.getItemId() == R.id.delete_all) {
-      ClearCallLogDialog.show(getFragmentManager(), this);
+      ClearCallLogDialog.show(getFragmentManager());
       return true;
     }
     return super.onOptionsItemSelected(item);
@@ -184,15 +182,6 @@
   }
 
   @Override
-  public void callHistoryDeleted() {
-    if (EnrichedCallComponent.get(this).getEnrichedCallManager().hasStoredData()) {
-      Snackbar.make(
-              findViewById(R.id.calllog_frame), getString(R.string.multiple_ec_data_deleted), 5_000)
-          .show();
-    }
-  }
-
-  @Override
   public void onBackPressed() {
     PerformanceReport.recordClick(UiAction.Type.PRESS_ANDROID_BACK_BUTTON);
     super.onBackPressed();
diff --git a/java/com/android/dialer/app/calllog/CallLogAdapter.java b/java/com/android/dialer/app/calllog/CallLogAdapter.java
index e0cd170..5fcf59b 100644
--- a/java/com/android/dialer/app/calllog/CallLogAdapter.java
+++ b/java/com/android/dialer/app/calllog/CallLogAdapter.java
@@ -344,10 +344,30 @@
           // If enriched call capabilities were unknown on the initial load,
           // viewHolder.isCallComposerCapable may be unset. Check here if we have the capabilities
           // as a last attempt at getting them before showing the expanded view to the user
-          EnrichedCallCapabilities capabilities =
-              getEnrichedCallManager().getCapabilities(viewHolder.number);
-          viewHolder.isCallComposerCapable =
-              capabilities != null && capabilities.supportsCallComposer();
+          EnrichedCallCapabilities capabilities = null;
+
+          if (viewHolder.number != null) {
+            capabilities = getEnrichedCallManager().getCapabilities(viewHolder.number);
+          }
+
+          if (capabilities == null) {
+            capabilities = EnrichedCallCapabilities.NO_CAPABILITIES;
+          }
+
+          viewHolder.isCallComposerCapable = capabilities.isCallComposerCapable();
+
+          if (capabilities.isTemporarilyUnavailable()) {
+            LogUtil.i(
+                "mExpandCollapseListener.onClick",
+                "%s is temporarily unavailable, requesting capabilities",
+                LogUtil.sanitizePhoneNumber(viewHolder.number));
+            // Refresh the capabilities when temporarily unavailable, see go/ec-temp-unavailable.
+            // Similarly to when we request capabilities the first time, the 'Share and call' button
+            // won't pop in with the new capabilities. Instead the row needs to be collapsed and
+            // expanded again.
+            getEnrichedCallManager().requestCapabilities(viewHolder.number);
+          }
+
           generateAndMapNewCallDetailsEntriesHistoryResults(
               viewHolder.number,
               viewHolder.getDetailedPhoneDetails(),
@@ -454,7 +474,7 @@
    * Holds a list of URIs that are pending deletion or undo. If the activity ends before the undo
    * timeout, all of the pending URIs will be deleted.
    *
-   * <p>TODO: move this and OnVoicemailDeletedListener to somewhere like {@link
+   * <p>TODO(twyen): move this and OnVoicemailDeletedListener to somewhere like {@link
    * VisualVoicemailCallLogFragment}. The CallLogAdapter does not need to know about what to do with
    * hidden item or what to hide.
    */
@@ -879,7 +899,7 @@
       getEnrichedCallManager().requestCapabilities(number);
       return false;
     }
-    return capabilities.supportsCallComposer();
+    return capabilities.isCallComposerCapable();
   }
 
   @NonNull
@@ -977,7 +997,7 @@
   }
 
   @MainThread
-  private static CallDetailsEntries createCallDetailsEntries(Cursor cursor, int count) {
+  private CallDetailsEntries createCallDetailsEntries(Cursor cursor, int count) {
     Assert.isMainThread();
     int position = cursor.getPosition();
     CallDetailsEntries.Builder entries = CallDetailsEntries.newBuilder();
@@ -990,6 +1010,16 @@
               .setDate(cursor.getLong(CallLogQuery.DATE))
               .setDuration(cursor.getLong(CallLogQuery.DURATION))
               .setFeatures(cursor.getInt(CallLogQuery.FEATURES));
+
+      String phoneAccountComponentName = cursor.getString(CallLogQuery.ACCOUNT_COMPONENT_NAME);
+      if (getLightbringer().getPhoneAccountComponentName() != null
+          && getLightbringer()
+              .getPhoneAccountComponentName()
+              .flattenToString()
+              .equals(phoneAccountComponentName)) {
+        entry.setIsLightbringerCall(true);
+      }
+
       entries.addEntries(entry.build());
       cursor.moveToNext();
     }
diff --git a/java/com/android/dialer/app/calllog/CallLogAsyncTaskUtil.java b/java/com/android/dialer/app/calllog/CallLogAsyncTaskUtil.java
index b1ad0d9..78ec7a6 100644
--- a/java/com/android/dialer/app/calllog/CallLogAsyncTaskUtil.java
+++ b/java/com/android/dialer/app/calllog/CallLogAsyncTaskUtil.java
@@ -66,9 +66,8 @@
                     .update(voicemailUri, values, Voicemails.IS_READ + " = 0", null)
                 > 0) {
               uploadVoicemailLocalChangesToServer(context);
+              CallLogNotificationsService.markAllNewVoicemailsAsOld(context);
             }
-
-            CallLogNotificationsService.markAllNewVoicemailsAsOld(context);
             return null;
           }
         });
diff --git a/java/com/android/dialer/app/calllog/CallLogListItemViewHolder.java b/java/com/android/dialer/app/calllog/CallLogListItemViewHolder.java
index a4a2ba2..f7ea63c 100644
--- a/java/com/android/dialer/app/calllog/CallLogListItemViewHolder.java
+++ b/java/com/android/dialer/app/calllog/CallLogListItemViewHolder.java
@@ -50,12 +50,8 @@
 import android.widget.TextView;
 import android.widget.Toast;
 import com.android.contacts.common.ClipboardUtils;
-import com.android.contacts.common.ContactPhotoManager;
 import com.android.contacts.common.compat.PhoneNumberUtilsCompat;
 import com.android.contacts.common.dialog.CallSubjectDialog;
-import com.android.contacts.common.lettertiles.LetterTileDrawable;
-import com.android.contacts.common.lettertiles.LetterTileDrawable.ContactType;
-import com.android.contacts.common.util.UriUtils;
 import com.android.dialer.app.DialtactsActivity;
 import com.android.dialer.app.R;
 import com.android.dialer.app.calllog.CallLogAdapter.OnActionModeStateChangedListener;
@@ -73,8 +69,11 @@
 import com.android.dialer.common.LogUtil;
 import com.android.dialer.compat.CompatUtils;
 import com.android.dialer.configprovider.ConfigProviderBindings;
+import com.android.dialer.contactphoto.ContactPhotoManager;
 import com.android.dialer.dialercontact.DialerContact;
 import com.android.dialer.dialercontact.SimDetails;
+import com.android.dialer.lettertile.LetterTileDrawable;
+import com.android.dialer.lettertile.LetterTileDrawable.ContactType;
 import com.android.dialer.lightbringer.Lightbringer;
 import com.android.dialer.lightbringer.LightbringerComponent;
 import com.android.dialer.logging.ContactSource;
@@ -91,6 +90,7 @@
 import com.android.dialer.telecom.TelecomUtil;
 import com.android.dialer.util.CallUtil;
 import com.android.dialer.util.DialerUtils;
+import com.android.dialer.util.UriUtils;
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 
@@ -164,7 +164,7 @@
    * The callable phone number for the current call log entry. Cached here as the call back intent
    * is set only when the actions ViewStub is inflated.
    */
-  public String number;
+  @Nullable public String number;
   /** The post-dial numbers that are dialed following the phone number. */
   public String postDialDigits;
   /** The formatted phone number to display. */
@@ -584,8 +584,12 @@
       return;
     }
 
+    TextView callTypeOrLocationView =
+        ((TextView) callButtonView.findViewById(R.id.call_type_or_location_text));
+
     if (canPlaceCallToNumber) {
       callButtonView.setTag(IntentProvider.getReturnCallIntentProvider(number));
+      callTypeOrLocationView.setVisibility(View.GONE);
     }
 
     if (!TextUtils.isEmpty(voicemailUri) && canPlaceCallToNumber) {
@@ -594,13 +598,10 @@
               TextUtils.expandTemplate(
                   mContext.getString(R.string.call_log_action_call),
                   nameOrNumber == null ? "" : nameOrNumber));
-      TextView callTypeOrLocationView =
-          ((TextView) callButtonView.findViewById(R.id.call_type_or_location_text));
+
       if (callType == Calls.VOICEMAIL_TYPE && !TextUtils.isEmpty(callTypeOrLocation)) {
         callTypeOrLocationView.setText(callTypeOrLocation);
         callTypeOrLocationView.setVisibility(View.VISIBLE);
-      } else {
-        callTypeOrLocationView.setVisibility(View.GONE);
       }
       callButtonView.setVisibility(View.VISIBLE);
     }
@@ -929,7 +930,9 @@
       contact.setNameOrNumber((String) nameOrNumber);
     }
     contact.setContactType(getContactType());
-    contact.setNumber(number);
+    if (number != null) {
+      contact.setNumber(number);
+    }
     /* second line of contact view. */
     if (!TextUtils.isEmpty(info.name)) {
       contact.setDisplayNumber(displayNumber);
diff --git a/java/com/android/dialer/app/calllog/CallLogNotificationsService.java b/java/com/android/dialer/app/calllog/CallLogNotificationsService.java
index be1ebfb..0490b99 100644
--- a/java/com/android/dialer/app/calllog/CallLogNotificationsService.java
+++ b/java/com/android/dialer/app/calllog/CallLogNotificationsService.java
@@ -24,7 +24,13 @@
 import android.support.annotation.NonNull;
 import android.support.annotation.Nullable;
 import android.support.annotation.VisibleForTesting;
+import android.support.annotation.WorkerThread;
+import android.telecom.PhoneAccountHandle;
+import com.android.dialer.app.voicemail.LegacyVoicemailNotificationReceiver;
+import com.android.dialer.common.Assert;
 import com.android.dialer.common.LogUtil;
+import com.android.dialer.common.concurrent.DialerExecutor.Worker;
+import com.android.dialer.common.concurrent.DialerExecutorComponent;
 import com.android.dialer.telecom.TelecomUtil;
 import com.android.dialer.util.PermissionsUtil;
 
@@ -44,7 +50,8 @@
  */
 public class CallLogNotificationsService extends IntentService {
 
-  private static final String ACTION_MARK_ALL_NEW_VOICEMAILS_AS_OLD =
+  @VisibleForTesting
+  static final String ACTION_MARK_ALL_NEW_VOICEMAILS_AS_OLD =
       "com.android.dialer.calllog.ACTION_MARK_ALL_NEW_VOICEMAILS_AS_OLD";
 
   private static final String ACTION_MARK_SINGLE_NEW_VOICEMAIL_AS_OLD =
@@ -64,6 +71,10 @@
   public static final String ACTION_CALL_BACK_FROM_MISSED_CALL_NOTIFICATION =
       "com.android.dialer.calllog.CALL_BACK_FROM_MISSED_CALL_NOTIFICATION";
 
+  /** Action mark legacy voicemail as dismissed. */
+  public static final String ACTION_LEGACY_VOICEMAIL_DISMISSED =
+      "com.android.dialer.calllog.ACTION_LEGACY_VOICEMAIL_DISMISSED";
+
   /**
    * Extra to be included with {@link #ACTION_INCOMING_POST_CALL} to represent a post call note.
    *
@@ -79,6 +90,8 @@
    */
   private static final String EXTRA_POST_CALL_NUMBER = "POST_CALL_NUMBER";
 
+  private static final String EXTRA_PHONE_ACCOUNT_HANDLE = "PHONE_ACCOUNT_HANDLE";
+
   public static final int UNKNOWN_MISSED_CALL_COUNT = -1;
 
   public CallLogNotificationsService() {
@@ -108,6 +121,15 @@
     context.startService(serviceIntent);
   }
 
+  public static void cancelAllMissedCalls(Context context) {
+    LogUtil.enterBlock("CallLogNotificationsService.cancelAllMissedCalls");
+    DialerExecutorComponent.get(context)
+        .dialerExecutorFactory()
+        .createNonUiTaskBuilder(new CancelAllMissedCallsWorker())
+        .build()
+        .executeSerial(context);
+  }
+
   public static PendingIntent createMarkAllNewVoicemailsAsOldIntent(@NonNull Context context) {
     Intent intent = new Intent(context, CallLogNotificationsService.class);
     intent.setAction(CallLogNotificationsService.ACTION_MARK_ALL_NEW_VOICEMAILS_AS_OLD);
@@ -122,13 +144,6 @@
     return PendingIntent.getService(context, 0, intent, 0);
   }
 
-  public static void cancelAllMissedCalls(@NonNull Context context) {
-    LogUtil.enterBlock("CallLogNotificationsService.cancelAllMissedCalls");
-    Intent serviceIntent = new Intent(context, CallLogNotificationsService.class);
-    serviceIntent.setAction(ACTION_CANCEL_ALL_MISSED_CALLS);
-    context.startService(serviceIntent);
-  }
-
   public static PendingIntent createCancelAllMissedCallsPendingIntent(@NonNull Context context) {
     Intent intent = new Intent(context, CallLogNotificationsService.class);
     intent.setAction(ACTION_CANCEL_ALL_MISSED_CALLS);
@@ -143,6 +158,14 @@
     return PendingIntent.getService(context, 0, intent, 0);
   }
 
+  public static PendingIntent createLegacyVoicemailDismissedPendingIntent(
+      @NonNull Context context, PhoneAccountHandle phoneAccountHandle) {
+    Intent intent = new Intent(context, CallLogNotificationsService.class);
+    intent.setAction(ACTION_LEGACY_VOICEMAIL_DISMISSED);
+    intent.putExtra(EXTRA_PHONE_ACCOUNT_HANDLE, phoneAccountHandle);
+    return PendingIntent.getService(context, 0, intent, 0);
+  }
+
   @Override
   protected void onHandleIntent(Intent intent) {
     if (intent == null) {
@@ -168,15 +191,17 @@
         VoicemailQueryHandler.markSingleNewVoicemailAsRead(this, voicemailUri);
         VisualVoicemailNotifier.cancelSingleVoicemailNotification(this, voicemailUri);
         break;
+      case ACTION_LEGACY_VOICEMAIL_DISMISSED:
+        LegacyVoicemailNotificationReceiver.setDismissed(
+            this, intent.getParcelableExtra(EXTRA_PHONE_ACCOUNT_HANDLE), true);
+        break;
       case ACTION_INCOMING_POST_CALL:
         String note = intent.getStringExtra(EXTRA_POST_CALL_NOTE);
         String phoneNumber = intent.getStringExtra(EXTRA_POST_CALL_NUMBER);
         MissedCallNotifier.getIstance(this).insertPostCallNotification(phoneNumber, note);
         break;
       case ACTION_CANCEL_ALL_MISSED_CALLS:
-        CallLogNotificationsQueryHelper.markAllMissedCallsInCallLogAsRead(this);
-        MissedCallNotifier.cancelAllMissedCallNotifications(this);
-        TelecomUtil.cancelMissedCallsNotification(this);
+        cancelAllMissedCalls(this);
         break;
       case ACTION_CANCEL_SINGLE_MISSED_CALL:
         Uri callUri = intent.getData();
@@ -196,4 +221,26 @@
         break;
     }
   }
+
+  @WorkerThread
+  private static void cancelAllMissedCallsBackground(Context context) {
+    LogUtil.enterBlock("CallLogNotificationsService.cancelAllMissedCallsBackground");
+    Assert.isWorkerThread();
+    CallLogNotificationsQueryHelper.markAllMissedCallsInCallLogAsRead(context);
+    MissedCallNotifier.cancelAllMissedCallNotifications(context);
+    TelecomUtil.cancelMissedCallsNotification(context);
+  }
+
+  /** Worker that cancels all missed call notifications and updates call log entries. */
+  private static class CancelAllMissedCallsWorker implements Worker<Context, Void> {
+
+    @Nullable
+    @Override
+    public Void doInBackground(@Nullable Context context) throws Throwable {
+      if (context != null) {
+        cancelAllMissedCallsBackground(context);
+      }
+      return null;
+    }
+  }
 }
diff --git a/java/com/android/dialer/app/calllog/ClearCallLogDialog.java b/java/com/android/dialer/app/calllog/ClearCallLogDialog.java
index 5c3d4d9..b16eb1b 100644
--- a/java/com/android/dialer/app/calllog/ClearCallLogDialog.java
+++ b/java/com/android/dialer/app/calllog/ClearCallLogDialog.java
@@ -22,76 +22,63 @@
 import android.app.DialogFragment;
 import android.app.FragmentManager;
 import android.app.ProgressDialog;
-import android.content.ContentResolver;
 import android.content.Context;
-import android.content.DialogInterface;
 import android.content.DialogInterface.OnClickListener;
-import android.os.AsyncTask;
 import android.os.Bundle;
 import android.provider.CallLog.Calls;
-import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+import android.support.design.widget.Snackbar;
 import com.android.dialer.app.R;
 import com.android.dialer.common.Assert;
+import com.android.dialer.common.concurrent.DialerExecutor;
+import com.android.dialer.common.concurrent.DialerExecutor.Worker;
+import com.android.dialer.common.concurrent.DialerExecutorComponent;
+import com.android.dialer.enrichedcall.EnrichedCallComponent;
 import com.android.dialer.phonenumbercache.CachedNumberLookupService;
 import com.android.dialer.phonenumbercache.PhoneNumberCache;
 
 /** Dialog that clears the call log after confirming with the user */
 public class ClearCallLogDialog extends DialogFragment {
 
-  private Listener listener;
+  private DialerExecutor<Void> clearCallLogTask;
+  private ProgressDialog progressDialog;
 
   /** Preferred way to show this dialog */
-  public static void show(FragmentManager fragmentManager, @NonNull Listener listener) {
+  public static void show(FragmentManager fragmentManager) {
     ClearCallLogDialog dialog = new ClearCallLogDialog();
-    dialog.listener = Assert.isNotNull(listener);
     dialog.show(fragmentManager, "deleteCallLog");
   }
 
   @Override
+  public void onCreate(Bundle savedInstanceState) {
+    super.onCreate(savedInstanceState);
+
+    clearCallLogTask =
+        DialerExecutorComponent.get(getContext())
+            .dialerExecutorFactory()
+            .createUiTaskBuilder(
+                getFragmentManager(),
+                "clearCallLogTask",
+                new ClearCallLogWorker(getActivity().getApplicationContext()))
+            .onSuccess(this::onSuccess)
+            .build();
+  }
+
+  @Override
   public Dialog onCreateDialog(Bundle savedInstanceState) {
-    final ContentResolver resolver = getActivity().getContentResolver();
-    final Context context = getActivity().getApplicationContext();
-    final OnClickListener okListener =
-        new OnClickListener() {
-          @Override
-          public void onClick(DialogInterface dialog, int which) {
-            final ProgressDialog progressDialog =
-                ProgressDialog.show(
-                    getActivity(), getString(R.string.clearCallLogProgress_title), "", true, false);
-            progressDialog.setOwnerActivity(getActivity());
-            CallLogNotificationsService.cancelAllMissedCalls(getContext());
-            final AsyncTask<Void, Void, Void> task =
-                new AsyncTask<Void, Void, Void>() {
-                  @Override
-                  protected Void doInBackground(Void... params) {
-                    resolver.delete(Calls.CONTENT_URI, null, null);
-                    CachedNumberLookupService cachedNumberLookupService =
-                        PhoneNumberCache.get(context).getCachedNumberLookupService();
-                    if (cachedNumberLookupService != null) {
-                      cachedNumberLookupService.clearAllCacheEntries(context);
-                    }
-                    return null;
-                  }
+    OnClickListener okListener =
+        (dialog, which) -> {
+          progressDialog =
+              ProgressDialog.show(
+                  getActivity(), getString(R.string.clearCallLogProgress_title), "", true, false);
+          progressDialog.setOwnerActivity(getActivity());
+          CallLogNotificationsService.cancelAllMissedCalls(getContext());
 
-                  @Override
-                  protected void onPostExecute(Void result) {
-                    final Activity activity = progressDialog.getOwnerActivity();
+          // TODO: Once we have the API, we should configure this ProgressDialog
+          // to only show up after a certain time (e.g. 150ms)
+          progressDialog.show();
 
-                    if (activity == null || activity.isDestroyed() || activity.isFinishing()) {
-                      return;
-                    }
-
-                    listener.callHistoryDeleted();
-                    if (progressDialog != null && progressDialog.isShowing()) {
-                      progressDialog.dismiss();
-                    }
-                  }
-                };
-            // TODO: Once we have the API, we should configure this ProgressDialog
-            // to only show up after a certain time (e.g. 150ms)
-            progressDialog.show();
-            task.execute();
-          }
+          clearCallLogTask.executeSerial(null);
         };
     return new AlertDialog.Builder(getActivity())
         .setTitle(R.string.clearCallLogConfirmation_title)
@@ -103,7 +90,48 @@
         .create();
   }
 
-  interface Listener {
-    void callHistoryDeleted();
+  private static class ClearCallLogWorker implements Worker<Void, Void> {
+    private final Context appContext;
+
+    private ClearCallLogWorker(Context appContext) {
+      this.appContext = appContext;
+    }
+
+    @Nullable
+    @Override
+    public Void doInBackground(@Nullable Void unused) throws Throwable {
+      appContext.getContentResolver().delete(Calls.CONTENT_URI, null, null);
+      CachedNumberLookupService cachedNumberLookupService =
+          PhoneNumberCache.get(appContext).getCachedNumberLookupService();
+      if (cachedNumberLookupService != null) {
+        cachedNumberLookupService.clearAllCacheEntries(appContext);
+      }
+      return null;
+    }
+  }
+
+  private void onSuccess(Void unused) {
+    Assert.isNotNull(progressDialog);
+    Activity activity = progressDialog.getOwnerActivity();
+
+    if (activity == null || activity.isDestroyed() || activity.isFinishing()) {
+      return;
+    }
+
+    maybeShowEnrichedCallSnackbar(activity);
+
+    if (progressDialog != null && progressDialog.isShowing()) {
+      progressDialog.dismiss();
+    }
+  }
+
+  private void maybeShowEnrichedCallSnackbar(Activity activity) {
+    if (EnrichedCallComponent.get(activity).getEnrichedCallManager().hasStoredData()) {
+      Snackbar.make(
+              activity.findViewById(R.id.calllog_frame),
+              getString(R.string.multiple_ec_data_deleted),
+              5_000)
+          .show();
+    }
   }
 }
diff --git a/java/com/android/dialer/app/calllog/LegacyVoicemailNotifier.java b/java/com/android/dialer/app/calllog/LegacyVoicemailNotifier.java
index 428c716..c64e03e 100644
--- a/java/com/android/dialer/app/calllog/LegacyVoicemailNotifier.java
+++ b/java/com/android/dialer/app/calllog/LegacyVoicemailNotifier.java
@@ -122,7 +122,10 @@
             .setSound(pinnedTelephonyManager.getVoicemailRingtoneUri(handle))
             .setOngoing(isOngoing)
             .setOnlyAlertOnce(isRefresh)
-            .setChannelId(NotificationChannelManager.getVoicemailChannelId(context, handle));
+            .setChannelId(NotificationChannelManager.getVoicemailChannelId(context, handle))
+            .setDeleteIntent(
+                CallLogNotificationsService.createLegacyVoicemailDismissedPendingIntent(
+                    context, handle));
 
     if (pinnedTelephonyManager.isVoicemailVibrationEnabled(handle)) {
       builder.setDefaults(Notification.DEFAULT_VIBRATE);
diff --git a/java/com/android/dialer/app/calllog/calllogcache/CallLogCacheLollipopMr1.java b/java/com/android/dialer/app/calllog/calllogcache/CallLogCacheLollipopMr1.java
deleted file mode 100644
index 2424b6d..0000000
--- a/java/com/android/dialer/app/calllog/calllogcache/CallLogCacheLollipopMr1.java
+++ /dev/null
@@ -1,96 +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.dialer.app.calllog.calllogcache;
-
-import android.content.Context;
-import android.support.annotation.Nullable;
-import android.telecom.PhoneAccountHandle;
-import android.text.TextUtils;
-import android.util.ArrayMap;
-import com.android.dialer.calllogutils.PhoneAccountUtils;
-import com.android.dialer.telecom.TelecomUtil;
-import java.util.Map;
-
-/**
- * This is the CallLogCache for versions of dialer Lollipop Mr1 and above with support for multi-SIM
- * devices.
- *
- * <p>This class should not be initialized directly and instead be acquired from {@link
- * CallLogCache#getCallLogCache}.
- */
-class CallLogCacheLollipopMr1 extends CallLogCache {
-
-  private final Map<PhoneAccountHandle, String> mPhoneAccountLabelCache = new ArrayMap<>();
-  private final Map<PhoneAccountHandle, Integer> mPhoneAccountColorCache = new ArrayMap<>();
-  private final Map<PhoneAccountHandle, Boolean> mPhoneAccountCallWithNoteCache = new ArrayMap<>();
-
-  /* package */ CallLogCacheLollipopMr1(Context context) {
-    super(context);
-  }
-
-  @Override
-  public void reset() {
-    mPhoneAccountLabelCache.clear();
-    mPhoneAccountColorCache.clear();
-    mPhoneAccountCallWithNoteCache.clear();
-
-    super.reset();
-  }
-
-  @Override
-  public boolean isVoicemailNumber(
-      PhoneAccountHandle accountHandle, @Nullable CharSequence number) {
-    if (TextUtils.isEmpty(number)) {
-      return false;
-    }
-    return TelecomUtil.isVoicemailNumber(mContext, accountHandle, number.toString());
-  }
-
-  @Override
-  public String getAccountLabel(PhoneAccountHandle accountHandle) {
-    if (mPhoneAccountLabelCache.containsKey(accountHandle)) {
-      return mPhoneAccountLabelCache.get(accountHandle);
-    } else {
-      String label = PhoneAccountUtils.getAccountLabel(mContext, accountHandle);
-      mPhoneAccountLabelCache.put(accountHandle, label);
-      return label;
-    }
-  }
-
-  @Override
-  public int getAccountColor(PhoneAccountHandle accountHandle) {
-    if (mPhoneAccountColorCache.containsKey(accountHandle)) {
-      return mPhoneAccountColorCache.get(accountHandle);
-    } else {
-      Integer color = PhoneAccountUtils.getAccountColor(mContext, accountHandle);
-      mPhoneAccountColorCache.put(accountHandle, color);
-      return color;
-    }
-  }
-
-  @Override
-  public boolean doesAccountSupportCallSubject(PhoneAccountHandle accountHandle) {
-    if (mPhoneAccountCallWithNoteCache.containsKey(accountHandle)) {
-      return mPhoneAccountCallWithNoteCache.get(accountHandle);
-    } else {
-      Boolean supportsCallWithNote =
-          PhoneAccountUtils.getAccountSupportsCallSubject(mContext, accountHandle);
-      mPhoneAccountCallWithNoteCache.put(accountHandle, supportsCallWithNote);
-      return supportsCallWithNote;
-    }
-  }
-}
diff --git a/java/com/android/dialer/app/contactinfo/ContactInfoCache.java b/java/com/android/dialer/app/contactinfo/ContactInfoCache.java
index 82fc229..155a6a2 100644
--- a/java/com/android/dialer/app/contactinfo/ContactInfoCache.java
+++ b/java/com/android/dialer/app/contactinfo/ContactInfoCache.java
@@ -163,7 +163,7 @@
     if (request.isLocalRequest()) {
       info = mContactInfoHelper.lookupNumber(request.number, request.countryIso);
       if (info != null && !info.contactExists) {
-        // TODO: Maybe skip look up if it's already available in cached number lookup
+        // TODO(wangqi): Maybe skip look up if it's already available in cached number lookup
         // service.
         long start = SystemClock.elapsedRealtime();
         mContactInfoHelper.updateFromCequintCallerId(mCequintCallerIdManager, info, request.number);
diff --git a/java/com/android/dialer/app/contactinfo/ContactPhotoLoader.java b/java/com/android/dialer/app/contactinfo/ContactPhotoLoader.java
index 4c8e32a..537acd0 100644
--- a/java/com/android/dialer/app/contactinfo/ContactPhotoLoader.java
+++ b/java/com/android/dialer/app/contactinfo/ContactPhotoLoader.java
@@ -25,10 +25,10 @@
 import android.support.annotation.VisibleForTesting;
 import android.support.v4.graphics.drawable.RoundedBitmapDrawable;
 import android.support.v4.graphics.drawable.RoundedBitmapDrawableFactory;
-import com.android.contacts.common.lettertiles.LetterTileDrawable;
 import com.android.dialer.app.R;
 import com.android.dialer.common.Assert;
 import com.android.dialer.common.LogUtil;
+import com.android.dialer.lettertile.LetterTileDrawable;
 import com.android.dialer.location.GeoUtil;
 import com.android.dialer.phonenumbercache.ContactInfo;
 import com.android.dialer.phonenumbercache.ContactInfoHelper;
diff --git a/java/com/android/dialer/app/filterednumber/BlockedNumbersAdapter.java b/java/com/android/dialer/app/filterednumber/BlockedNumbersAdapter.java
index dbd4e86..ca12e43 100644
--- a/java/com/android/dialer/app/filterednumber/BlockedNumbersAdapter.java
+++ b/java/com/android/dialer/app/filterednumber/BlockedNumbersAdapter.java
@@ -20,9 +20,9 @@
 import android.database.Cursor;
 import android.telephony.PhoneNumberUtils;
 import android.view.View;
-import com.android.contacts.common.ContactPhotoManager;
 import com.android.dialer.app.R;
 import com.android.dialer.blocking.BlockNumberDialogFragment;
+import com.android.dialer.contactphoto.ContactPhotoManager;
 import com.android.dialer.database.FilteredNumberContract.FilteredNumberColumns;
 import com.android.dialer.location.GeoUtil;
 import com.android.dialer.logging.InteractionEvent;
diff --git a/java/com/android/dialer/app/filterednumber/BlockedNumbersFragment.java b/java/com/android/dialer/app/filterednumber/BlockedNumbersFragment.java
index f53a458..db119ab 100644
--- a/java/com/android/dialer/app/filterednumber/BlockedNumbersFragment.java
+++ b/java/com/android/dialer/app/filterednumber/BlockedNumbersFragment.java
@@ -31,7 +31,6 @@
 import android.view.ViewGroup;
 import android.widget.ImageView;
 import android.widget.TextView;
-import com.android.contacts.common.lettertiles.LetterTileDrawable;
 import com.android.dialer.app.R;
 import com.android.dialer.blocking.BlockedNumbersMigrator;
 import com.android.dialer.blocking.BlockedNumbersMigrator.Listener;
@@ -40,6 +39,7 @@
 import com.android.dialer.blocking.FilteredNumbersUtil.CheckForSendToVoicemailContactListener;
 import com.android.dialer.blocking.FilteredNumbersUtil.ImportSendToVoicemailContactsListener;
 import com.android.dialer.database.FilteredNumberContract;
+import com.android.dialer.lettertile.LetterTileDrawable;
 import com.android.dialer.voicemailstatus.VisualVoicemailEnabledChecker;
 
 public class BlockedNumbersFragment extends ListFragment
diff --git a/java/com/android/dialer/app/filterednumber/NumbersAdapter.java b/java/com/android/dialer/app/filterednumber/NumbersAdapter.java
index d98395e..6e1d1a5 100644
--- a/java/com/android/dialer/app/filterednumber/NumbersAdapter.java
+++ b/java/com/android/dialer/app/filterednumber/NumbersAdapter.java
@@ -26,15 +26,15 @@
 import android.widget.QuickContactBadge;
 import android.widget.SimpleCursorAdapter;
 import android.widget.TextView;
-import com.android.contacts.common.ContactPhotoManager;
-import com.android.contacts.common.ContactPhotoManager.DefaultImageRequest;
-import com.android.contacts.common.lettertiles.LetterTileDrawable;
-import com.android.contacts.common.util.UriUtils;
 import com.android.dialer.app.R;
 import com.android.dialer.compat.CompatUtils;
+import com.android.dialer.contactphoto.ContactPhotoManager;
+import com.android.dialer.contactphoto.ContactPhotoManager.DefaultImageRequest;
+import com.android.dialer.lettertile.LetterTileDrawable;
 import com.android.dialer.phonenumbercache.ContactInfo;
 import com.android.dialer.phonenumbercache.ContactInfoHelper;
 import com.android.dialer.phonenumberutil.PhoneNumberHelper;
+import com.android.dialer.util.UriUtils;
 
 public class NumbersAdapter extends SimpleCursorAdapter {
 
diff --git a/java/com/android/dialer/app/filterednumber/ViewNumbersToImportAdapter.java b/java/com/android/dialer/app/filterednumber/ViewNumbersToImportAdapter.java
index 313efb4..1e90eec 100644
--- a/java/com/android/dialer/app/filterednumber/ViewNumbersToImportAdapter.java
+++ b/java/com/android/dialer/app/filterednumber/ViewNumbersToImportAdapter.java
@@ -19,9 +19,9 @@
 import android.content.Context;
 import android.database.Cursor;
 import android.view.View;
-import com.android.contacts.common.ContactPhotoManager;
 import com.android.dialer.app.R;
 import com.android.dialer.blocking.FilteredNumbersUtil;
+import com.android.dialer.contactphoto.ContactPhotoManager;
 import com.android.dialer.location.GeoUtil;
 import com.android.dialer.phonenumbercache.ContactInfoHelper;
 
diff --git a/java/com/android/dialer/app/list/OldSpeedDialFragment.java b/java/com/android/dialer/app/list/OldSpeedDialFragment.java
index 05d017b..afc7c13 100644
--- a/java/com/android/dialer/app/list/OldSpeedDialFragment.java
+++ b/java/com/android/dialer/app/list/OldSpeedDialFragment.java
@@ -45,13 +45,13 @@
 import android.widget.FrameLayout.LayoutParams;
 import android.widget.ImageView;
 import android.widget.ListView;
-import com.android.contacts.common.ContactPhotoManager;
 import com.android.contacts.common.ContactTileLoaderFactory;
 import com.android.contacts.common.list.ContactTileView;
 import com.android.contacts.common.list.OnPhoneNumberPickerActionListener;
 import com.android.dialer.app.R;
 import com.android.dialer.callintent.CallSpecificAppData;
 import com.android.dialer.common.LogUtil;
+import com.android.dialer.contactphoto.ContactPhotoManager;
 import com.android.dialer.util.PermissionsUtil;
 import com.android.dialer.util.ViewUtil;
 import com.android.dialer.widget.EmptyContentView;
diff --git a/java/com/android/dialer/app/list/PhoneFavoriteTileView.java b/java/com/android/dialer/app/list/PhoneFavoriteTileView.java
index 30870eb..88a6dff 100644
--- a/java/com/android/dialer/app/list/PhoneFavoriteTileView.java
+++ b/java/com/android/dialer/app/list/PhoneFavoriteTileView.java
@@ -18,20 +18,23 @@
 
 import android.content.ClipData;
 import android.content.Context;
+import android.net.Uri;
 import android.provider.ContactsContract.PinnedPositions;
 import android.text.TextUtils;
 import android.util.AttributeSet;
 import android.view.View;
 import android.widget.ImageView;
-import com.android.contacts.common.ContactPhotoManager.DefaultImageRequest;
 import com.android.contacts.common.MoreContactUtils;
-import com.android.contacts.common.lettertiles.LetterTileDrawable;
 import com.android.contacts.common.list.ContactEntry;
 import com.android.contacts.common.list.ContactTileView;
+import com.android.contacts.common.model.ContactLoader;
 import com.android.dialer.app.R;
 import com.android.dialer.callintent.CallInitiationType;
 import com.android.dialer.callintent.CallSpecificAppData;
 import com.android.dialer.callintent.SpeedDialContactType;
+import com.android.dialer.common.LogUtil;
+import com.android.dialer.contactphoto.ContactPhotoManager.DefaultImageRequest;
+import com.android.dialer.lettertile.LetterTileDrawable;
 import com.android.dialer.logging.InteractionEvent;
 import com.android.dialer.logging.Logger;
 
@@ -94,11 +97,11 @@
     isPinned = (entry.pinned != PinnedPositions.UNPINNED);
     isStarred = entry.isFavorite;
     if (entry != null) {
+      sendViewNotification(getContext(), entry.lookupUri);
       // Grab the phone-number to call directly. See {@link onClick()}.
       mPhoneNumberString = entry.phoneNumber;
 
-      // If this is a blank entry, don't show anything.
-      // TODO krelease: Just hide the view for now. For this to truly look like an empty row
+      // If this is a blank entry, don't show anything. For this to truly look like an empty row
       // the entire ContactTileRow needs to be hidden.
       if (entry == ContactEntry.BLANK_ENTRY) {
         setVisibility(View.INVISIBLE);
@@ -186,4 +189,22 @@
   public void setPosition(int position) {
     this.position = position;
   }
+
+  /**
+   * Send a notification using a {@link ContactLoader} to inform the sync adapter that we are
+   * viewing a particular contact, so that it can download the high-res photo.
+   */
+  private static void sendViewNotification(Context context, Uri contactUri) {
+    ContactLoader loader = new ContactLoader(context, contactUri, true /* postViewNotification */);
+    loader.registerListener(
+        0,
+        (loader1, contact) -> {
+          try {
+            loader1.reset();
+          } catch (RuntimeException e) {
+            LogUtil.e("PhoneFavoriteTileView.onLoadComplete", "error resetting loader", e);
+          }
+        });
+    loader.startLoading();
+  }
 }
diff --git a/java/com/android/dialer/app/list/PhoneFavoritesTileAdapter.java b/java/com/android/dialer/app/list/PhoneFavoritesTileAdapter.java
index dbd601a..cd5712e 100644
--- a/java/com/android/dialer/app/list/PhoneFavoritesTileAdapter.java
+++ b/java/com/android/dialer/app/list/PhoneFavoritesTileAdapter.java
@@ -34,13 +34,13 @@
 import android.view.View;
 import android.view.ViewGroup;
 import android.widget.BaseAdapter;
-import com.android.contacts.common.ContactPhotoManager;
 import com.android.contacts.common.ContactTileLoaderFactory;
 import com.android.contacts.common.list.ContactEntry;
 import com.android.contacts.common.list.ContactTileView;
 import com.android.contacts.common.preference.ContactsPreferences;
 import com.android.dialer.app.R;
 import com.android.dialer.common.LogUtil;
+import com.android.dialer.contactphoto.ContactPhotoManager;
 import com.android.dialer.lightbringer.Lightbringer;
 import com.android.dialer.lightbringer.LightbringerComponent;
 import com.android.dialer.logging.InteractionEvent;
diff --git a/java/com/android/dialer/app/res/drawable-hdpi/ic_dialer_fork_add_call.png b/java/com/android/dialer/app/res/drawable-hdpi/ic_dialer_fork_add_call.png
old mode 100644
new mode 100755
Binary files differ
diff --git a/java/com/android/dialer/app/res/drawable-hdpi/ic_dialer_fork_current_call.png b/java/com/android/dialer/app/res/drawable-hdpi/ic_dialer_fork_current_call.png
old mode 100644
new mode 100755
Binary files differ
diff --git a/java/com/android/dialer/app/res/drawable-hdpi/ic_dialer_fork_tt_keypad.png b/java/com/android/dialer/app/res/drawable-hdpi/ic_dialer_fork_tt_keypad.png
old mode 100644
new mode 100755
Binary files differ
diff --git a/java/com/android/dialer/app/res/layout/call_log_activity.xml b/java/com/android/dialer/app/res/layout/call_log_activity.xml
index 4e2b188..a5e5326 100644
--- a/java/com/android/dialer/app/res/layout/call_log_activity.xml
+++ b/java/com/android/dialer/app/res/layout/call_log_activity.xml
@@ -15,26 +15,27 @@
 -->
 
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-  android:id="@+id/calllog_frame"
-  android:layout_width="match_parent"
-  android:layout_height="match_parent"
-  android:orientation="vertical">
+    android:id="@+id/calllog_frame"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:background="@color/background_dialer_light"
+    android:orientation="vertical">
   <com.android.contacts.common.list.ViewPagerTabs
-    android:id="@+id/viewpager_header"
-    style="@style/DialtactsActionBarTabTextStyle"
-    android:layout_width="match_parent"
-    android:layout_height="@dimen/tab_height"
-    android:layout_gravity="top"
-    android:elevation="@dimen/tab_elevation"
-    android:orientation="horizontal"
-    android:textAllCaps="true"/>
+      android:id="@+id/viewpager_header"
+      style="@style/DialtactsActionBarTabTextStyle"
+      android:layout_width="match_parent"
+      android:layout_height="@dimen/tab_height"
+      android:layout_gravity="top"
+      android:elevation="@dimen/tab_elevation"
+      android:orientation="horizontal"
+      android:textAllCaps="true"/>
   <android.support.v4.view.ViewPager
-    android:id="@+id/call_log_pager"
-    android:layout_width="match_parent"
-    android:layout_height="0dp"
-    android:layout_weight="1"/>
+      android:id="@+id/call_log_pager"
+      android:layout_width="match_parent"
+      android:layout_height="0dp"
+      android:layout_weight="1"/>
   <RelativeLayout
-    android:id="@+id/floating_action_button_container"
-    android:layout_width="0dp"
-    android:layout_height="0dp"/>
+      android:id="@+id/floating_action_button_container"
+      android:layout_width="0dp"
+      android:layout_height="0dp"/>
 </LinearLayout>
diff --git a/java/com/android/dialer/app/res/layout/call_log_fragment.xml b/java/com/android/dialer/app/res/layout/call_log_fragment.xml
index bbfe4e3..efc08fb 100644
--- a/java/com/android/dialer/app/res/layout/call_log_fragment.xml
+++ b/java/com/android/dialer/app/res/layout/call_log_fragment.xml
@@ -18,7 +18,6 @@
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
-  android:background="@color/background_dialer_call_log"
   android:orientation="vertical">
 
   <LinearLayout
@@ -37,6 +36,7 @@
         android:paddingLeft="@dimen/select_all_icon_padding"
         android:paddingRight="@dimen/select_all_icon_padding"
         android:gravity="center_vertical"
+        android:contentDescription="@string/select_all"
         android:src="@drawable/ic_empty_check_mark_white_24dp"/>
     <TextView
         android:id="@+id/select_all_view_text"
@@ -64,7 +64,6 @@
     android:paddingBottom="@dimen/floating_action_button_list_bottom_padding"
     android:paddingStart="@dimen/call_log_horizontal_margin"
     android:paddingEnd="@dimen/call_log_horizontal_margin"
-    android:background="@color/background_dialer_call_log"
     android:clipToPadding="false"/>
 
   <com.android.dialer.widget.EmptyContentView
diff --git a/java/com/android/dialer/app/res/layout/call_log_list_item_actions.xml b/java/com/android/dialer/app/res/layout/call_log_list_item_actions.xml
index 5046383..ec9e5a0 100644
--- a/java/com/android/dialer/app/res/layout/call_log_list_item_actions.xml
+++ b/java/com/android/dialer/app/res/layout/call_log_list_item_actions.xml
@@ -35,8 +35,7 @@
 
   <LinearLayout
     android:id="@+id/call_action"
-    style="@style/CallLogActionStyle"
-    android:paddingTop="@dimen/call_log_actions_top_padding">
+    style="@style/CallLogActionStyle">
 
     <ImageView
       style="@style/CallLogActionIconStyle"
diff --git a/java/com/android/dialer/app/res/values-bs/strings.xml b/java/com/android/dialer/app/res/values-bs/strings.xml
index fb00ce4..9d8914c 100644
--- a/java/com/android/dialer/app/res/values-bs/strings.xml
+++ b/java/com/android/dialer/app/res/values-bs/strings.xml
@@ -100,7 +100,7 @@
     <string name="description_video_call" msgid="3738199365585751727">"Videopoziv."</string>
     <string name="description_send_text_message" msgid="8450269896765568596">"Pošalji SMS kontaktu <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="description_call_log_unheard_voicemail" msgid="2258821530650350303">"Nepreslušana govorna pošta"</string>
-    <string name="description_start_voice_search" msgid="8380022725973015261">"Pokreni glasovno pretraživanje"</string>
+    <string name="description_start_voice_search" msgid="8380022725973015261">"Pokreni glasovnu pretragu"</string>
     <string name="menu_callNumber" msgid="1540773545517152514">"Pozovi <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="voicemail" msgid="8899540969000957954">"Govorna pošta"</string>
     <string name="callDetailsShortDurationFormat" msgid="8517030531054801588">"<xliff:g id="SECONDS">%s</xliff:g> sek."</string>
@@ -127,7 +127,7 @@
     <string name="meid" msgid="3333779521535224028">"MEID"</string>
     <string name="simContacts_emptyLoading" msgid="6205424276735652071">"Učitavanje sa SIM kartice…"</string>
     <string name="simContacts_title" msgid="7961069730386378887">"Kontakti sa SIM kartice"</string>
-    <string name="voice_search_not_available" msgid="6546240433719732905">"Glasovno pretraživanje nije dostupno"</string>
+    <string name="voice_search_not_available" msgid="6546240433719732905">"Glasovna pretraga nije dostupna"</string>
     <string name="call_not_available" msgid="7850148370757361155">"Nije moguće uputiti poziv jer je aplikacija Telefon onemogućena."</string>
     <string name="dialer_hint_find_contact" msgid="2023214799381149808">"Traži kontakte"</string>
     <string name="block_number_search_hint" msgid="5377706079015099416">"Dodajte broj ili tražite kontakte"</string>
@@ -157,7 +157,7 @@
     <string name="speed_dial_empty_add_favorite_action" msgid="3470360584638103033">"Dodaj u favorite"</string>
     <string name="contact_tooltip" msgid="8871614660967439999">"Dodirnite sliku da vidite sve brojeve ili dodirnite i držite da promijenite raspored."</string>
     <string name="remove_contact" msgid="2353580570488923668">"Ukloni"</string>
-    <string name="select_all" msgid="408601760696146245">"Odaberi sve"</string>
+    <string name="select_all" msgid="408601760696146245">"Izaberi sve"</string>
     <string name="call_log_action_video_call" msgid="7565549950343850819">"Videopoziv"</string>
     <string name="call_log_action_send_message" msgid="6948727362660115554">"Pošalji poruku"</string>
     <string name="call_log_action_details" msgid="2091370737371449501">"Detalji o pozivu"</string>
diff --git a/java/com/android/dialer/app/res/values-da/strings.xml b/java/com/android/dialer/app/res/values-da/strings.xml
index aabe678..81fd5dd 100644
--- a/java/com/android/dialer/app/res/values-da/strings.xml
+++ b/java/com/android/dialer/app/res/values-da/strings.xml
@@ -88,7 +88,7 @@
     <string name="actionIncomingCall" msgid="891346596090030558">"Indgående opkald"</string>
     <string name="description_entering_bulk_action_mode" msgid="6134916000015585401">"Massehandlingstilstanden startes"</string>
     <string name="description_leaving_bulk_action_mode" msgid="4355853387639765529">"Massehandlingstilstanden blev afsluttet"</string>
-    <string name="description_selecting_bulk_action_mode" msgid="7228565941043117618">"Valgt <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+    <string name="description_selecting_bulk_action_mode" msgid="7228565941043117618">"Vælg <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
     <string name="description_unselecting_bulk_action_mode" msgid="6450971299622386060">"Fravalgt <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
     <string name="description_call_log_play_button" msgid="2349845005022431438">"Afspil telefonsvarerbesked"</string>
     <string name="description_view_contact" msgid="3940984937384372665">"Vis kontaktpersonen <xliff:g id="NAME">%1$s</xliff:g>"</string>
diff --git a/java/com/android/dialer/app/res/values-sq/strings.xml b/java/com/android/dialer/app/res/values-sq/strings.xml
index 8f43ba7..ca3d522 100644
--- a/java/com/android/dialer/app/res/values-sq/strings.xml
+++ b/java/com/android/dialer/app/res/values-sq/strings.xml
@@ -236,6 +236,6 @@
     <string name="call_composer_connection_failed" msgid="6776461585447831242">"<xliff:g id="NAME">%1$s</xliff:g> është jashtë linje dhe nuk mund të kontaktohet"</string>
     <string name="about_phone_label" msgid="582991354677973731">"Rreth"</string>
     <string name="view_conversation" msgid="7895904782094119702">"Shiko"</string>
-    <string name="ec_data_deleted" msgid="4794880345545827107">"Telefonata u fshi. Shiko dhe fshi bashkëngjitjet e ndara gjatë kësaj telefonate te Messages."</string>
-    <string name="multiple_ec_data_deleted" msgid="2971579891973176316">"Telefonatat u fshinë. Shiko dhe fshi bashkëngjitjet e ndara gjatë telefonatave te Messages."</string>
+    <string name="ec_data_deleted" msgid="4794880345545827107">"Telefonata u fshi. Shiko dhe fshi bashkëngjitjet e ndara gjatë kësaj telefonate te \"Mesazhet\"."</string>
+    <string name="multiple_ec_data_deleted" msgid="2971579891973176316">"Telefonatat u fshinë. Shiko dhe fshi bashkëngjitjet e ndara gjatë telefonatave te \"Mesazhet\"."</string>
 </resources>
diff --git a/java/com/android/dialer/app/res/values-ur/strings.xml b/java/com/android/dialer/app/res/values-ur/strings.xml
index f713f4c..2b6a3eb 100644
--- a/java/com/android/dialer/app/res/values-ur/strings.xml
+++ b/java/com/android/dialer/app/res/values-ur/strings.xml
@@ -236,6 +236,6 @@
     <string name="call_composer_connection_failed" msgid="6776461585447831242">"<xliff:g id="NAME">%1$s</xliff:g> آف لائن ہے اور اس تک پہنچا نہیں جا سکتا"</string>
     <string name="about_phone_label" msgid="582991354677973731">"تفصیل"</string>
     <string name="view_conversation" msgid="7895904782094119702">"دیکھیں"</string>
-    <string name="ec_data_deleted" msgid="4794880345545827107">"کال حذف ہو گئی۔ اس کال کے دوران اشتراک کردہ منسلکہ جات کو \'پیغامات \' میں ملاحظہ کریں اور حذف کریں۔"</string>
-    <string name="multiple_ec_data_deleted" msgid="2971579891973176316">"کالیں حذف ہو گئیں۔ کالوں کے دوران اشتراک کردہ منسلکہ جات کو \'پیغامات \' میں ملاحظہ کریں اور حذف کریں۔"</string>
+    <string name="ec_data_deleted" msgid="4794880345545827107">"کال حذف ہو گئی۔ اس کال کے دوران پیغامات کے اندر اشتراک کردہ منسلکہ جات ملاحظہ کریں اور حذف کریں۔"</string>
+    <string name="multiple_ec_data_deleted" msgid="2971579891973176316">"کالیں حذف ہو گئیں۔ کالوں کے دوران پیغامات کے اندر اشتراک کردہ منسلکہ جات ملاحظہ کریں اور حذف کریں۔"</string>
 </resources>
diff --git a/java/com/android/dialer/app/res/values/colors.xml b/java/com/android/dialer/app/res/values/colors.xml
index 2f6d87b..7a08dca 100644
--- a/java/com/android/dialer/app/res/values/colors.xml
+++ b/java/com/android/dialer/app/res/values/colors.xml
@@ -54,7 +54,6 @@
 
   <!-- Background color for search results and call details -->
   <color name="background_dialer_results">#f9f9f9</color>
-  <color name="background_dialer_call_log">@color/background_dialer_light</color>
 
   <!-- Color of the 1dp divider that separates favorites -->
   <color name="favorite_contacts_separator_color">#d0d0d0</color>
diff --git a/java/com/android/dialer/app/settings/DialerSettingsActivity.java b/java/com/android/dialer/app/settings/DialerSettingsActivity.java
index 6036c85..6010f92 100644
--- a/java/com/android/dialer/app/settings/DialerSettingsActivity.java
+++ b/java/com/android/dialer/app/settings/DialerSettingsActivity.java
@@ -31,11 +31,11 @@
 import android.telephony.TelephonyManager;
 import android.view.MenuItem;
 import android.widget.Toast;
-import com.android.contacts.common.compat.TelephonyManagerCompat;
 import com.android.dialer.about.AboutPhoneFragment;
 import com.android.dialer.app.R;
 import com.android.dialer.blocking.FilteredNumberCompat;
 import com.android.dialer.common.LogUtil;
+import com.android.dialer.compat.telephony.TelephonyManagerCompat;
 import com.android.dialer.proguard.UsedByReflection;
 import com.android.voicemail.VoicemailClient;
 import com.android.voicemail.VoicemailComponent;
diff --git a/java/com/android/dialer/app/voicemail/LegacyVoicemailNotificationReceiver.java b/java/com/android/dialer/app/voicemail/LegacyVoicemailNotificationReceiver.java
index 4100521..a81d866 100644
--- a/java/com/android/dialer/app/voicemail/LegacyVoicemailNotificationReceiver.java
+++ b/java/com/android/dialer/app/voicemail/LegacyVoicemailNotificationReceiver.java
@@ -23,15 +23,15 @@
 import android.content.Intent;
 import android.os.Build;
 import android.os.Build.VERSION_CODES;
-import android.preference.PreferenceManager;
+import android.support.annotation.VisibleForTesting;
 import android.support.v4.os.BuildCompat;
-import android.support.v4.os.UserManagerCompat;
 import android.telecom.PhoneAccountHandle;
 import android.telephony.TelephonyManager;
 import com.android.dialer.app.calllog.LegacyVoicemailNotifier;
 import com.android.dialer.common.Assert;
 import com.android.dialer.common.LogUtil;
 import com.android.dialer.common.PerAccountSharedPreferences;
+import com.android.dialer.util.DialerUtils;
 import com.android.voicemail.VoicemailComponent;
 
 /**
@@ -43,15 +43,14 @@
 public class LegacyVoicemailNotificationReceiver extends BroadcastReceiver {
 
   private static final String LEGACY_VOICEMAIL_COUNT = "legacy_voicemail_count";
+  @VisibleForTesting static final String LEGACY_VOICEMAIL_DISMISSED = "legacy_voicemail_dismissed";
 
   /**
-   * Hidden extra for {@link TelephonyManager#ACTION_SHOW_VOICEMAIL_NOTIFICATION} for whether the
-   * notification is just a refresh or for a new voicemail. The phone should not play a ringtone or
-   * vibrate during a refresh if the notification is already showing.
-   *
-   * <p>TODO(b/62202833): make public
+   * Whether the notification is just a refresh or for a new voicemail. The phone should not play a
+   * ringtone or vibrate during a refresh if the notification is already showing. This is Hidden in
+   * O and public in O MR1.
    */
-  private static final String EXTRA_IS_REFRESH = "is_refresh";
+  @VisibleForTesting static final String EXTRA_IS_REFRESH = "is_refresh";
 
   @Override
   public void onReceive(Context context, Intent intent) {
@@ -72,8 +71,21 @@
     PhoneAccountHandle phoneAccountHandle =
         Assert.isNotNull(intent.getParcelableExtra(TelephonyManager.EXTRA_PHONE_ACCOUNT_HANDLE));
     int count = intent.getIntExtra(TelephonyManager.EXTRA_NOTIFICATION_COUNT, -1);
+    boolean isRefresh = intent.getBooleanExtra(EXTRA_IS_REFRESH, false);
+    LogUtil.i("LegacyVoicemailNotificationReceiver.onReceive", "isRefresh: " + isRefresh);
+    PerAccountSharedPreferences preferences = getSharedPreferences(context, phoneAccountHandle);
+    if (isRefresh) {
+      if (preferences.getBoolean(LEGACY_VOICEMAIL_DISMISSED, false)) {
+        LogUtil.i(
+            "LegacyVoicemailNotificationReceiver.onReceive",
+            "notification dismissed, ignoring refresh");
+        return;
+      }
+    } else {
+      setDismissed(context, phoneAccountHandle, false);
+    }
 
-    if (!hasVoicemailCountChanged(context, phoneAccountHandle, count)) {
+    if (!hasVoicemailCountChanged(preferences, count)) {
       LogUtil.i(
           "LegacyVoicemailNotificationReceiver.onReceive",
           "voicemail count hasn't changed, ignoring");
@@ -116,27 +128,24 @@
         voicemailNumber,
         callVoicemailIntent,
         voicemailSettingIntent,
-        intent.getBooleanExtra(EXTRA_IS_REFRESH, false));
+        isRefresh);
+  }
+
+  public static void setDismissed(
+      Context context, PhoneAccountHandle phoneAccountHandle, boolean dismissed) {
+    getSharedPreferences(context, phoneAccountHandle)
+        .edit()
+        .putBoolean(LEGACY_VOICEMAIL_DISMISSED, dismissed)
+        .apply();
   }
 
   private static boolean hasVoicemailCountChanged(
-      Context context, PhoneAccountHandle phoneAccountHandle, int newCount) {
-    // Need credential encrypted storage to access preferences.
-    if (!UserManagerCompat.isUserUnlocked(context)) {
-      LogUtil.i(
-          "LegacyVoicemailNotificationReceiver.onReceive",
-          "User locked, bypassing voicemail count check");
-      return true;
-    }
-
+      PerAccountSharedPreferences preferences, int newCount) {
     if (newCount == -1) {
       // Carrier does not report voicemail count
       return true;
     }
 
-    PerAccountSharedPreferences preferences =
-        new PerAccountSharedPreferences(
-            context, phoneAccountHandle, PreferenceManager.getDefaultSharedPreferences(context));
     // Carriers may send multiple notifications for the same voicemail.
     if (newCount != 0 && newCount == preferences.getInt(LEGACY_VOICEMAIL_COUNT, -1)) {
       return false;
@@ -144,4 +153,13 @@
     preferences.edit().putInt(LEGACY_VOICEMAIL_COUNT, newCount).apply();
     return true;
   }
+
+  @VisibleForTesting
+  static PerAccountSharedPreferences getSharedPreferences(
+      Context context, PhoneAccountHandle phoneAccountHandle) {
+    return new PerAccountSharedPreferences(
+        context,
+        phoneAccountHandle,
+        DialerUtils.getDefaultSharedPreferenceForDeviceProtectedStorageContext(context));
+  }
 }
diff --git a/java/com/android/dialer/app/voicemail/VoicemailAudioManager.java b/java/com/android/dialer/app/voicemail/VoicemailAudioManager.java
index 8d70cdb..d3c3820 100644
--- a/java/com/android/dialer/app/voicemail/VoicemailAudioManager.java
+++ b/java/com/android/dialer/app/voicemail/VoicemailAudioManager.java
@@ -86,6 +86,7 @@
     if (newIsPluggedIn) {
       newRoute = CallAudioState.ROUTE_WIRED_HEADSET;
     } else {
+      mVoicemailPlaybackPresenter.pausePlayback();
       if (mWasSpeakerOn) {
         newRoute = CallAudioState.ROUTE_SPEAKER;
       } else {
diff --git a/java/com/android/dialer/app/voicemail/VoicemailErrorManager.java b/java/com/android/dialer/app/voicemail/VoicemailErrorManager.java
index a0bae36..bc6ffb5 100644
--- a/java/com/android/dialer/app/voicemail/VoicemailErrorManager.java
+++ b/java/com/android/dialer/app/voicemail/VoicemailErrorManager.java
@@ -92,7 +92,7 @@
       }
     }
     alertItem.updateStatus(statuses, this);
-    // TODO: b/30668323 support error from multiple sources.
+    // TODO(twyen): b/30668323 support error from multiple sources.
     return;
   }
 
diff --git a/java/com/android/dialer/app/voicemail/VoicemailPlaybackLayout.java b/java/com/android/dialer/app/voicemail/VoicemailPlaybackLayout.java
index f160e02..9c1e446 100644
--- a/java/com/android/dialer/app/voicemail/VoicemailPlaybackLayout.java
+++ b/java/com/android/dialer/app/voicemail/VoicemailPlaybackLayout.java
@@ -85,7 +85,7 @@
           // When the undo button is pressed, the viewHolder we have is no longer valid because when
           // we hide the view it is binded to something else, and the layout is not updated for
           // hidden items. copy the adapter position so we can update the view upon undo.
-          // TODO: refactor this so the view holder will always be valid.
+          // TODO(twyen): refactor this so the view holder will always be valid.
           final int adapterPosition = mViewHolder.getAdapterPosition();
 
           mPresenter.pausePlayback();
diff --git a/java/com/android/dialer/app/voicemail/error/VoicemailStatusCorruptionHandler.java b/java/com/android/dialer/app/voicemail/error/VoicemailStatusCorruptionHandler.java
index 3a169e4..fa637f3 100644
--- a/java/com/android/dialer/app/voicemail/error/VoicemailStatusCorruptionHandler.java
+++ b/java/com/android/dialer/app/voicemail/error/VoicemailStatusCorruptionHandler.java
@@ -24,9 +24,9 @@
 import android.provider.VoicemailContract.Status;
 import android.telecom.PhoneAccountHandle;
 import android.telephony.TelephonyManager;
-import com.android.contacts.common.compat.TelephonyManagerCompat;
 import com.android.dialer.common.Assert;
 import com.android.dialer.common.LogUtil;
+import com.android.dialer.compat.telephony.TelephonyManagerCompat;
 import com.android.dialer.configprovider.ConfigProviderBindings;
 import com.android.dialer.logging.DialerImpression;
 import com.android.dialer.logging.Logger;
diff --git a/java/com/android/dialer/app/voicemail/error/VoicemailTosMessageCreator.java b/java/com/android/dialer/app/voicemail/error/VoicemailTosMessageCreator.java
index e3dc0b0..865d252 100644
--- a/java/com/android/dialer/app/voicemail/error/VoicemailTosMessageCreator.java
+++ b/java/com/android/dialer/app/voicemail/error/VoicemailTosMessageCreator.java
@@ -31,9 +31,9 @@
 import android.text.style.StyleSpan;
 import android.view.View;
 import android.view.View.OnClickListener;
-import com.android.contacts.common.compat.TelephonyManagerCompat;
 import com.android.dialer.app.voicemail.error.VoicemailErrorMessage.Action;
 import com.android.dialer.common.LogUtil;
+import com.android.dialer.compat.telephony.TelephonyManagerCompat;
 import com.android.dialer.configprovider.ConfigProviderBindings;
 import com.android.dialer.logging.DialerImpression;
 import com.android.dialer.logging.Logger;
@@ -75,7 +75,7 @@
 
   @Nullable
   VoicemailErrorMessage maybeCreateTosMessage() {
-    // TODO: add filtering based on carrier
+    // TODO(mdooley): add filtering based on carrier
     if (hasAcceptedTos()) {
       return null;
     }
diff --git a/java/com/android/dialer/app/voicemail/error/Vvm3VoicemailMessageCreator.java b/java/com/android/dialer/app/voicemail/error/Vvm3VoicemailMessageCreator.java
index e639eff..d3024f4 100644
--- a/java/com/android/dialer/app/voicemail/error/Vvm3VoicemailMessageCreator.java
+++ b/java/com/android/dialer/app/voicemail/error/Vvm3VoicemailMessageCreator.java
@@ -259,7 +259,7 @@
 
   @NonNull
   private static CharSequence getCustomerSupportString(Context context, int id) {
-    // TODO: get number based on the country the user is currently in.
+    // TODO(twyen): get number based on the country the user is currently in.
     return ContactDisplayUtils.getTtsSpannedPhoneNumber(
         context.getResources(),
         id,
diff --git a/java/com/android/dialer/backup/AndroidManifest.xml b/java/com/android/dialer/backup/AndroidManifest.xml
index 1cbbe53..84992c0 100644
--- a/java/com/android/dialer/backup/AndroidManifest.xml
+++ b/java/com/android/dialer/backup/AndroidManifest.xml
@@ -1,5 +1,5 @@
 <!--
- ~ Copyright (C) 2016 The Android Open Source Project
+ ~ 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.
@@ -13,14 +13,13 @@
  ~ 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.dialer.backup">
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    package="com.android.dialer.backup">
 
-  <application
-    android:backupAgent="com.android.dialer.backup.DialerBackupAgent"
-    android:fullBackupOnly="true"
-    android:restoreAnyVersion="true"
-    />
 
-</manifest>
+  <!-- Android backup service key -->
+  <!-- https://developer.android.com/google/backup/signup.html -->
+  <meta-data
+      android:name="com.google.android.backup.api_key"
+      android:value="AEdPqrEAAAAIn3-Y3JKit1mrzfvcdbVhUiJn2ICtKfhGYLy0Bg"/>
+</manifest>
\ No newline at end of file
diff --git a/java/com/android/dialer/backup/DialerBackupAgent.java b/java/com/android/dialer/backup/DialerBackupAgent.java
deleted file mode 100644
index a0baf39..0000000
--- a/java/com/android/dialer/backup/DialerBackupAgent.java
+++ /dev/null
@@ -1,263 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.dialer.backup;
-
-import android.annotation.TargetApi;
-import android.app.backup.BackupAgent;
-import android.app.backup.BackupDataInput;
-import android.app.backup.BackupDataOutput;
-import android.app.backup.FullBackupDataOutput;
-import android.content.ContentResolver;
-import android.content.ContentValues;
-import android.database.Cursor;
-import android.net.Uri;
-import android.os.Build.VERSION_CODES;
-import android.os.ParcelFileDescriptor;
-import android.provider.CallLog;
-import android.provider.CallLog.Calls;
-import android.provider.VoicemailContract;
-import android.provider.VoicemailContract.Voicemails;
-import android.telecom.PhoneAccountHandle;
-import android.util.Pair;
-import com.android.dialer.common.Assert;
-import com.android.dialer.common.LogUtil;
-import com.android.dialer.logging.DialerImpression;
-import com.android.dialer.logging.Logger;
-import com.android.dialer.telecom.TelecomUtil;
-import java.io.File;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.util.List;
-import java.util.Locale;
-
-/**
- * The Dialer backup agent to backup voicemails, and files under files, shared prefs and databases
- */
-public class DialerBackupAgent extends BackupAgent {
-  // File names suffix for backup/restore.
-  private static final String VOICEMAIL_BACKUP_FILE_SUFFIX = "_voicemail_backup.proto";
-  // File name formats for backup. It looks like 000000_voicemail_backup.proto, 0000001...
-  private static final String VOICEMAIL_BACKUP_FILE_FORMAT = "%06d" + VOICEMAIL_BACKUP_FILE_SUFFIX;
-  // Order by Date entries from database. We start backup from the newest.
-  private static final String ORDER_BY_DATE = "date DESC";
-  // Voicemail Uri Column
-  public static final String VOICEMAIL_URI = "voicemail_uri";
-  // Voicemail packages to backup
-  public static final String VOICEMAIL_SOURCE_PACKAGE = "com.google.android.dialer";
-
-  private long voicemailsBackedupSoFar = 0;
-  private long sizeOfVoicemailsBackedupSoFar = 0;
-  private boolean maxVoicemailBackupReached = false;
-
-  /**
-   * onBackup is used for Key/Value backup. Since we are using Dolly/Android Auto backup, we do not
-   * need to implement this method and Dolly should not be calling this. Instead Dolly will be
-   * calling onFullBackup.
-   */
-  @Override
-  public void onBackup(
-      ParcelFileDescriptor parcelFileDescriptor,
-      BackupDataOutput backupDataOutput,
-      ParcelFileDescriptor parcelFileDescriptor1)
-      throws IOException {
-    Logger.get(this).logImpression(DialerImpression.Type.BACKUP_ON_BACKUP);
-    Assert.fail("Android Backup should not call DialerBackupAgent.onBackup");
-  }
-
-  /**
-   * onRestore is used for Key/Value restore. Since we are using Dolly/Android Auto backup/restore,
-   * we need to implement this method only for backwards compatibility. Dolly should be calling
-   * onFileRestore during its restore.
-   */
-  @Override
-  public void onRestore(
-      BackupDataInput backupDataInput, int i, ParcelFileDescriptor parcelFileDescriptor)
-      throws IOException {
-    Logger.get(this).logImpression(DialerImpression.Type.BACKUP_ON_RESTORE);
-  }
-
-  @TargetApi(VERSION_CODES.M)
-  @Override
-  public void onFullBackup(FullBackupDataOutput data) throws IOException {
-    Logger.get(this).logImpression(DialerImpression.Type.BACKUP_ON_FULL_BACKUP);
-    LogUtil.i("DialerBackupAgent.onFullBackup", "performing dialer backup");
-
-    List<PhoneAccountHandle> phoneAccountsToArchive =
-        DialerBackupUtils.getPhoneAccountsToArchive(this);
-
-    if (!maxVoicemailBackupReached && !phoneAccountsToArchive.isEmpty()) {
-      voicemailsBackedupSoFar = 0;
-      sizeOfVoicemailsBackedupSoFar = 0;
-
-      LogUtil.i("DialerBackupAgent.onFullBackup", "autoBackup is enabled");
-      ContentResolver contentResolver = getContentResolver();
-      int limit = 1000;
-
-      Uri uri =
-          TelecomUtil.getCallLogUri(this)
-              .buildUpon()
-              .appendQueryParameter(Calls.LIMIT_PARAM_KEY, Integer.toString(limit))
-              .build();
-
-      LogUtil.i("DialerBackupAgent.onFullBackup", "backing up from: " + uri);
-
-      try (Cursor cursor =
-          contentResolver.query(
-              uri,
-              null,
-              String.format(
-                  "(%s = ? AND deleted = 0 AND  %s = ? AND ?)",
-                  Calls.TYPE, Voicemails.SOURCE_PACKAGE),
-              new String[] {
-                Integer.toString(CallLog.Calls.VOICEMAIL_TYPE),
-                VOICEMAIL_SOURCE_PACKAGE,
-                DialerBackupUtils.getPhoneAccountClause(phoneAccountsToArchive)
-              },
-              ORDER_BY_DATE,
-              null)) {
-
-        if (cursor == null) {
-          LogUtil.i("DialerBackupAgent.onFullBackup", "cursor was null");
-          return;
-        }
-
-        LogUtil.i("DialerBackupAgent.onFullBackup", "cursor count: " + cursor.getCount());
-        if (cursor.moveToFirst()) {
-          int fileNum = 0;
-          do {
-            backupRow(
-                data, cursor, String.format(Locale.US, VOICEMAIL_BACKUP_FILE_FORMAT, fileNum++));
-          } while (cursor.moveToNext() && !maxVoicemailBackupReached);
-        } else {
-          LogUtil.i("DialerBackupAgent.onFullBackup", "cursor.moveToFirst failed");
-        }
-      }
-    }
-    LogUtil.i(
-        "DialerBackupAgent.onFullBackup",
-        "vm files backed up: %d, vm size backed up:%d, "
-            + "max vm backup reached:%b, phone accounts to archive: %d",
-        voicemailsBackedupSoFar,
-        sizeOfVoicemailsBackedupSoFar,
-        maxVoicemailBackupReached,
-        phoneAccountsToArchive.size());
-    super.onFullBackup(data);
-    Logger.get(this).logImpression(DialerImpression.Type.BACKUP_FULL_BACKED_UP);
-  }
-
-  private void backupRow(FullBackupDataOutput data, Cursor cursor, String fileName)
-      throws IOException {
-
-    VoicemailInfo cursorRowInProto =
-        DialerBackupUtils.convertVoicemailCursorRowToProto(cursor, getContentResolver());
-
-    File file = new File(getFilesDir(), fileName);
-    DialerBackupUtils.writeProtoToFile(file, cursorRowInProto);
-
-    if (sizeOfVoicemailsBackedupSoFar + file.length()
-        > DialerBackupUtils.maxVoicemailSizeToBackup) {
-      Logger.get(this).logImpression(DialerImpression.Type.BACKUP_MAX_VM_BACKUP_REACHED);
-      maxVoicemailBackupReached = true;
-      file.delete();
-      return;
-    }
-
-    backupFile(file, data);
-  }
-
-  // TODO: Write to FullBackupDataOutput directly (b/33849960)
-  private void backupFile(File file, FullBackupDataOutput data) throws IOException {
-    try {
-      super.fullBackupFile(file, data);
-      sizeOfVoicemailsBackedupSoFar = sizeOfVoicemailsBackedupSoFar + file.length();
-      voicemailsBackedupSoFar++;
-      Logger.get(this).logImpression(DialerImpression.Type.BACKUP_VOICEMAIL_BACKED_UP);
-      LogUtil.i("DialerBackupAgent.backupFile", "file backed up:" + file.getAbsolutePath());
-    } finally {
-      file.delete();
-    }
-  }
-
-  // Being tracked in b/33839952
-  @Override
-  public void onQuotaExceeded(long backupDataBytes, long quotaBytes) {
-    Logger.get(this).logImpression(DialerImpression.Type.BACKUP_ON_QUOTA_EXCEEDED);
-    LogUtil.i("DialerBackupAgent.onQuotaExceeded", "does nothing");
-  }
-
-  @TargetApi(VERSION_CODES.M)
-  @Override
-  public void onRestoreFile(
-      ParcelFileDescriptor data, long size, File destination, int type, long mode, long mtime)
-      throws IOException {
-    LogUtil.i("DialerBackupAgent.onRestoreFile", "size:" + size + " destination: " + destination);
-
-    String fileName = destination.getName();
-    LogUtil.i("DialerBackupAgent.onRestoreFile", "file name: " + fileName);
-
-    if (fileName.endsWith(VOICEMAIL_BACKUP_FILE_SUFFIX)) {
-      if (DialerBackupUtils.canRestoreVoicemails(getContentResolver(), this)) {
-        try {
-          super.onRestoreFile(data, size, destination, type, mode, mtime);
-          restoreVoicemail(destination);
-          destination.delete();
-        } catch (IOException e) {
-          Logger.get(this).logImpression(DialerImpression.Type.BACKUP_ON_RESTORE_IO_EXCEPTION);
-          LogUtil.e(
-              "DialerBackupAgent.onRestoreFile", "could not restore voicemail - IOException: ", e);
-        }
-      } else {
-        LogUtil.i("DialerBackupAgent.onRestoreFile", "build does not support restoring voicemails");
-      }
-
-    } else {
-      super.onRestoreFile(data, size, destination, type, mode, mtime);
-      LogUtil.i("DialerBackupAgent.onRestoreFile", "restored: " + fileName);
-      Logger.get(this).logImpression(DialerImpression.Type.BACKUP_RESTORED_FILE);
-    }
-  }
-
-  @Override
-  public void onRestoreFinished() {
-    Logger.get(this).logImpression(DialerImpression.Type.BACKUP_ON_RESTORE_FINISHED);
-    LogUtil.i("DialerBackupAgent.onRestoreFinished", "do nothing");
-  }
-
-  @TargetApi(VERSION_CODES.M)
-  private void restoreVoicemail(File file) throws IOException {
-    Pair<ContentValues, byte[]> pair =
-        DialerBackupUtils.convertVoicemailProtoFileToContentValueAndAudioBytes(
-            file, getApplicationContext());
-
-    if (pair == null) {
-      LogUtil.i("DialerBackupAgent.restoreVoicemail", "not restoring VM due to duplicate");
-      Logger.get(this)
-          .logImpression(DialerImpression.Type.BACKUP_ON_RESTORE_VM_DUPLICATE_NOT_RESTORING);
-      return;
-    }
-
-    // TODO: Uniquely identify backup agent as the creator of this voicemail b/34084298
-    try (OutputStream restoreStream =
-        getContentResolver()
-            .openOutputStream(
-                getContentResolver()
-                    .insert(VoicemailContract.Voicemails.CONTENT_URI, pair.first))) {
-      DialerBackupUtils.copyAudioBytesToContentUri(pair.second, restoreStream);
-      Logger.get(this).logImpression(DialerImpression.Type.BACKUP_RESTORED_VOICEMAIL);
-    }
-  }
-}
diff --git a/java/com/android/dialer/backup/DialerBackupUtils.java b/java/com/android/dialer/backup/DialerBackupUtils.java
deleted file mode 100644
index fe714f6..0000000
--- a/java/com/android/dialer/backup/DialerBackupUtils.java
+++ /dev/null
@@ -1,363 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.dialer.backup;
-
-import android.annotation.TargetApi;
-import android.content.ContentResolver;
-import android.content.ContentValues;
-import android.content.Context;
-import android.database.Cursor;
-import android.net.Uri;
-import android.os.Build.VERSION_CODES;
-import android.provider.VoicemailContract;
-import android.provider.VoicemailContract.Voicemails;
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
-import android.telecom.PhoneAccountHandle;
-import android.telecom.TelecomManager;
-import android.util.Pair;
-import com.android.dialer.common.Assert;
-import com.android.dialer.common.LogUtil;
-import com.android.dialer.configprovider.ConfigProviderBindings;
-import com.android.voicemail.VoicemailComponent;
-import com.google.common.io.ByteStreams;
-import com.google.common.io.Files;
-import com.google.protobuf.ByteString;
-import java.io.ByteArrayInputStream;
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.util.ArrayList;
-import java.util.List;
-
-/** Helper functions for DialerBackupAgent */
-public class DialerBackupUtils {
-  // Backup voicemails up to 20MB
-  static long maxVoicemailSizeToBackup = 20000000L;
-  static final String RESTORED_COLUMN = "restored";
-
-  private DialerBackupUtils() {}
-
-  public static void copyAudioBytesToContentUri(
-      @NonNull byte[] audioBytesArray, @NonNull OutputStream restoreStream) throws IOException {
-    LogUtil.i("DialerBackupUtils.copyStream", "audioByteArray length: " + audioBytesArray.length);
-
-    ByteArrayInputStream decodedStream = new ByteArrayInputStream(audioBytesArray);
-    LogUtil.i(
-        "DialerBackupUtils.copyStream", "decodedStream.available: " + decodedStream.available());
-
-    ByteStreams.copy(decodedStream, restoreStream);
-  }
-
-  public static @Nullable ByteString audioStreamToByteString(@NonNull InputStream stream)
-      throws IOException {
-    if (stream.available() > 0) {
-      return ByteString.readFrom(stream);
-    } else {
-      LogUtil.i("DialerBackupUtils.audioStreamToByteArray", "no audio stream to backup");
-    }
-    return ByteString.EMPTY;
-  }
-
-  public static void writeProtoToFile(@NonNull File file, @NonNull VoicemailInfo voicemailInfo)
-      throws IOException {
-    LogUtil.i(
-        "DialerBackupUtils.writeProtoToFile",
-        "backup " + voicemailInfo + " to " + file.getAbsolutePath());
-
-    byte[] bytes = voicemailInfo.toByteArray();
-    Files.write(bytes, file);
-  }
-
-  /** Only restore voicemails that have the restored column in calllog (NMR2+ builds) */
-  @TargetApi(VERSION_CODES.M)
-  public static boolean canRestoreVoicemails(ContentResolver contentResolver, Context context) {
-    try (Cursor cursor = contentResolver.query(Voicemails.CONTENT_URI, null, null, null, null)) {
-      // Restored column only exists in NMR2 and above builds.
-      if (cursor.getColumnIndex(RESTORED_COLUMN) != -1) {
-        LogUtil.i("DialerBackupUtils.canRestoreVoicemails", "Build supports restore");
-        return true;
-      } else {
-        LogUtil.i("DialerBackupUtils.canRestoreVoicemails", "Build does not support restore");
-        return false;
-      }
-    }
-  }
-
-  public static VoicemailInfo protoFileToVoicemailInfo(@NonNull File file) throws IOException {
-    byte[] byteArray = Files.toByteArray(file);
-    return VoicemailInfo.parseFrom(byteArray);
-  }
-
-  @TargetApi(VERSION_CODES.M)
-  public static VoicemailInfo convertVoicemailCursorRowToProto(
-      @NonNull Cursor cursor, @NonNull ContentResolver contentResolver) throws IOException {
-
-    VoicemailInfo.Builder voicemailInfo = VoicemailInfo.newBuilder();
-
-    for (int i = 0; i < cursor.getColumnCount(); ++i) {
-      String name = cursor.getColumnName(i);
-      String value = cursor.getString(i);
-
-      LogUtil.i(
-          "DialerBackupUtils.convertVoicemailCursorRowToProto",
-          "column index: %d, column name: %s, column value: %s",
-          i,
-          name,
-          value);
-
-      switch (name) {
-        case Voicemails.DATE:
-          voicemailInfo.setDate(value);
-          break;
-        case Voicemails.DELETED:
-          voicemailInfo.setDeleted(value);
-          break;
-        case Voicemails.DIRTY:
-          voicemailInfo.setDirty(value);
-          break;
-        case Voicemails.DIR_TYPE:
-          voicemailInfo.setDirType(value);
-          break;
-        case Voicemails.DURATION:
-          voicemailInfo.setDuration(value);
-          break;
-        case Voicemails.HAS_CONTENT:
-          voicemailInfo.setHasContent(value);
-          break;
-        case Voicemails.IS_READ:
-          voicemailInfo.setIsRead(value);
-          break;
-        case Voicemails.ITEM_TYPE:
-          voicemailInfo.setItemType(value);
-          break;
-        case Voicemails.LAST_MODIFIED:
-          voicemailInfo.setLastModified(value);
-          break;
-        case Voicemails.MIME_TYPE:
-          voicemailInfo.setMimeType(value);
-          break;
-        case Voicemails.NUMBER:
-          voicemailInfo.setNumber(value);
-          break;
-        case Voicemails.PHONE_ACCOUNT_COMPONENT_NAME:
-          voicemailInfo.setPhoneAccountComponentName(value);
-          break;
-        case Voicemails.PHONE_ACCOUNT_ID:
-          voicemailInfo.setPhoneAccountId(value);
-          break;
-        case Voicemails.SOURCE_DATA:
-          voicemailInfo.setSourceData(value);
-          break;
-        case Voicemails.SOURCE_PACKAGE:
-          voicemailInfo.setSourcePackage(value);
-          break;
-        case Voicemails.TRANSCRIPTION:
-          voicemailInfo.setTranscription(value);
-          break;
-        case DialerBackupAgent.VOICEMAIL_URI:
-          try (InputStream audioStream = contentResolver.openInputStream(Uri.parse(value))) {
-            voicemailInfo.setEncodedVoicemailKey(audioStreamToByteString(audioStream));
-          }
-          break;
-        default:
-          LogUtil.i(
-              "DialerBackupUtils.convertVoicemailCursorRowToProto",
-              "Not backing up column: %s, with value: %s",
-              name,
-              value);
-          break;
-      }
-    }
-    return voicemailInfo.build();
-  }
-
-  public static Pair<ContentValues, byte[]> convertVoicemailProtoFileToContentValueAndAudioBytes(
-      @NonNull File file, Context context) throws IOException {
-
-    VoicemailInfo voicemailInfo = DialerBackupUtils.protoFileToVoicemailInfo(file);
-    LogUtil.i(
-        "DialerBackupUtils.convertVoicemailProtoFileToContentValueAndEncodedAudio",
-        "file name: "
-            + file.getName()
-            + " voicemailInfo size: "
-            + voicemailInfo.getSerializedSize());
-
-    if (isDuplicate(context, voicemailInfo)) {
-      LogUtil.i(
-          "DialerBackupUtils.convertVoicemailProtoFileToContentValueAndEncodedAudio",
-          "voicemail already exists");
-      return null;
-    } else {
-      ContentValues contentValues = new ContentValues();
-
-      if (voicemailInfo.hasDate()) {
-        contentValues.put(Voicemails.DATE, voicemailInfo.getDate());
-      }
-      if (voicemailInfo.hasDeleted()) {
-        contentValues.put(Voicemails.DELETED, voicemailInfo.getDeleted());
-      }
-      if (!voicemailInfo.hasDirty()) {
-        contentValues.put(Voicemails.DIRTY, voicemailInfo.getDirty());
-      }
-      if (!voicemailInfo.hasDuration()) {
-        contentValues.put(Voicemails.DURATION, voicemailInfo.getDuration());
-      }
-      if (!voicemailInfo.hasIsRead()) {
-        contentValues.put(Voicemails.IS_READ, voicemailInfo.getIsRead());
-      }
-      if (!voicemailInfo.hasLastModified()) {
-        contentValues.put(Voicemails.LAST_MODIFIED, voicemailInfo.getLastModified());
-      }
-      if (!voicemailInfo.hasMimeType()) {
-        contentValues.put(Voicemails.MIME_TYPE, voicemailInfo.getMimeType());
-      }
-      if (!voicemailInfo.hasNumber()) {
-        contentValues.put(Voicemails.NUMBER, voicemailInfo.getNumber());
-      }
-      if (!voicemailInfo.hasPhoneAccountComponentName()) {
-        contentValues.put(
-            Voicemails.PHONE_ACCOUNT_COMPONENT_NAME, voicemailInfo.getPhoneAccountComponentName());
-      }
-      if (!voicemailInfo.hasPhoneAccountId()) {
-        contentValues.put(Voicemails.PHONE_ACCOUNT_ID, voicemailInfo.getPhoneAccountId());
-      }
-      if (!voicemailInfo.hasSourceData()) {
-        contentValues.put(Voicemails.SOURCE_DATA, voicemailInfo.getSourceData());
-      }
-      if (!voicemailInfo.hasSourcePackage()) {
-        contentValues.put(Voicemails.SOURCE_PACKAGE, voicemailInfo.getSourcePackage());
-      }
-      if (!voicemailInfo.hasTranscription()) {
-        contentValues.put(Voicemails.TRANSCRIPTION, voicemailInfo.getTranscription());
-      }
-      contentValues.put(VoicemailContract.Voicemails.HAS_CONTENT, 1);
-      contentValues.put(RESTORED_COLUMN, "1");
-      contentValues.put(Voicemails.SOURCE_PACKAGE, getSourcePackage(context, voicemailInfo));
-
-      LogUtil.i(
-          "DialerBackupUtils.convertVoicemailProtoFileToContentValueAndEncodedAudio",
-          "cv: " + contentValues);
-
-      return Pair.create(contentValues, voicemailInfo.getEncodedVoicemailKey().toByteArray());
-    }
-  }
-
-  /**
-   * We should be using the system package name as the source package if there is no endless VM/VM
-   * archive present on the device. This is to separate pre-O (no endless VM) and O+ (endless VM)
-   * devices. This ensures that the source of truth for VMs is the VM server when endless VM is not
-   * enabled, and when endless VM/archived VMs is present, the source of truth for VMs is the device
-   * itself.
-   */
-  private static String getSourcePackage(Context context, VoicemailInfo voicemailInfo) {
-    if (ConfigProviderBindings.get(context)
-        .getBoolean("voicemail_restore_force_system_source_package", false)) {
-      LogUtil.i("DialerBackupUtils.getSourcePackage", "forcing system source package");
-      return "com.android.phone";
-    }
-    if (ConfigProviderBindings.get(context)
-        .getBoolean("voicemail_restore_check_archive_for_source_package", true)) {
-      if ("1".equals(voicemailInfo.getArchived())) {
-        LogUtil.i(
-            "DialerBackupUtils.getSourcePackage",
-            "voicemail was archived, using app source package");
-        // Using our app's source package will prevent the archived voicemail from being deleted by
-        // the system when it syncs with the voicemail server. In most cases the user will not see
-        // duplicate voicemails because this voicemail was archived and likely deleted from the
-        // voicemail server.
-        return context.getPackageName();
-      } else {
-        // Use the system source package. This means that if the voicemail is not present on the
-        // voicemail server then the system will delete it when it syncs.
-        LogUtil.i(
-            "DialerBackupUtils.getSourcePackage",
-            "voicemail was not archived, using system source package");
-        return "com.android.phone";
-      }
-    }
-    // Use our app's source package. This means that if the system syncs voicemail from the server
-    // the user could potentially get duplicate voicemails.
-    LogUtil.i("DialerBackupUtils.getSourcePackage", "defaulting to using app source package");
-    return context.getPackageName();
-  }
-
-  @TargetApi(VERSION_CODES.M)
-  private static boolean isDuplicate(Context context, VoicemailInfo voicemailInfo) {
-    // This checks for VM that might already exist, and doesn't restore them
-    try (Cursor cursor =
-        context
-            .getContentResolver()
-            .query(
-                VoicemailContract.Voicemails.CONTENT_URI,
-                null,
-                String.format(
-                    "(%s = ? AND %s = ? AND %s = ?)",
-                    Voicemails.NUMBER, Voicemails.DATE, Voicemails.DURATION),
-                new String[] {
-                  voicemailInfo.getNumber(), voicemailInfo.getDate(), voicemailInfo.getDuration()
-                },
-                null,
-                null)) {
-      if (cursor.moveToFirst()
-          && ConfigProviderBindings.get(context)
-              .getBoolean("enable_vm_restore_no_duplicate", true)) {
-        return true;
-      }
-    }
-    return false;
-  }
-
-  public static String getPhoneAccountClause(List<PhoneAccountHandle> phoneAccountsToArchive) {
-    Assert.checkArgument(!phoneAccountsToArchive.isEmpty());
-    StringBuilder whereQuery = new StringBuilder();
-
-    whereQuery.append("(");
-
-    for (int i = 0; i < phoneAccountsToArchive.size(); i++) {
-      whereQuery.append(
-          Voicemails.PHONE_ACCOUNT_ID + " = " + phoneAccountsToArchive.get(i).getId());
-
-      if (phoneAccountsToArchive.size() > 1 && i < phoneAccountsToArchive.size() - 1) {
-        whereQuery.append(" OR ");
-      }
-    }
-    whereQuery.append(")");
-    return whereQuery.toString();
-  }
-
-  public static List<PhoneAccountHandle> getPhoneAccountsToArchive(Context context) {
-    List<PhoneAccountHandle> phoneAccountsToBackUp = new ArrayList<>();
-
-    for (PhoneAccountHandle handle :
-        context.getSystemService(TelecomManager.class).getCallCapablePhoneAccounts()) {
-
-      if (VoicemailComponent.get(context)
-          .getVoicemailClient()
-          .isVoicemailArchiveEnabled(context, handle)) {
-        phoneAccountsToBackUp.add(handle);
-        LogUtil.i(
-            "DialerBackupUtils.getPhoneAccountsToArchive", "enabled for: " + handle.toString());
-      } else {
-        LogUtil.i(
-            "DialerBackupUtils.getPhoneAccountsToArchive", "not enabled for: " + handle.toString());
-      }
-    }
-    return phoneAccountsToBackUp;
-  }
-}
diff --git a/java/com/android/dialer/backup/DialerPersistentBackupAgent.java b/java/com/android/dialer/backup/DialerPersistentBackupAgent.java
new file mode 100644
index 0000000..085c343
--- /dev/null
+++ b/java/com/android/dialer/backup/DialerPersistentBackupAgent.java
@@ -0,0 +1,84 @@
+/*
+ * 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
+ */
+package com.android.dialer.backup;
+
+import android.app.backup.BackupDataInput;
+import android.app.backup.BackupDataOutput;
+import android.os.ParcelFileDescriptor;
+import android.support.annotation.NonNull;
+import android.support.annotation.VisibleForTesting;
+import android.util.ArrayMap;
+import com.android.dialer.common.Assert;
+import com.android.dialer.common.LogUtil;
+import com.android.dialer.logging.DialerImpression;
+import com.android.dialer.logging.Logger;
+import com.google.android.libraries.backup.BackupKeyPredicate;
+import com.google.android.libraries.backup.BackupKeyPredicates;
+import com.google.android.libraries.backup.PersistentBackupAgentHelper;
+import java.io.IOException;
+import java.util.Map;
+
+/** Implementation of Key/Value Backup that powers Dialer's backup and restore. */
+public class DialerPersistentBackupAgent extends PersistentBackupAgentHelper {
+
+  private static final String DEFAULT_SHARED_PREFS_NAME = "com.google.android.dialer_preferences";
+
+  @NonNull private final String sharedPrefsName;
+
+  @VisibleForTesting(otherwise = VisibleForTesting.NONE)
+  DialerPersistentBackupAgent(@NonNull String sharedPreferenceName) {
+    this.sharedPrefsName = Assert.isNotNull(sharedPreferenceName);
+    Logger.get(this).logImpression(DialerImpression.Type.BACKUP_KEY_VALUE_BACKUP_AGENT_CONSTRUCTOR);
+  }
+
+  public DialerPersistentBackupAgent() {
+    this(DEFAULT_SHARED_PREFS_NAME);
+  }
+
+  @Override
+  public void onRestore(BackupDataInput data, int appVersionCode, ParcelFileDescriptor stateFile)
+      throws IOException {
+    Logger.get(this).logImpression(DialerImpression.Type.BACKUP_KEY_VALUE_ON_RESTORE);
+    LogUtil.i("DialerPersistentBackupAgent.onRestore", "restore from version: " + appVersionCode);
+    super.onRestore(data, appVersionCode, stateFile);
+  }
+
+  @Override
+  public void onBackup(
+      ParcelFileDescriptor oldState, BackupDataOutput data, ParcelFileDescriptor newState)
+      throws IOException {
+    Logger.get(this).logImpression(DialerImpression.Type.BACKUP_KEY_VALUE_ON_BACKUP);
+    LogUtil.i("DialerPersistentBackupAgent.onBackup", "onBackup being performed");
+    super.onBackup(oldState, data, newState);
+  }
+
+  @Override
+  public Map<String, BackupKeyPredicate> getBackupSpecification() {
+    Logger.get(this).logImpression(DialerImpression.Type.BACKUP_KEY_VALUE_GET_BACKUP_SPECIFICATION);
+    LogUtil.i(
+        "DialerPersistentBackupAgent.getBackupSpecification",
+        "file being backed up: " + sharedPrefsName);
+    Map<String, BackupKeyPredicate> backupSpecification = new ArrayMap<>();
+    backupSpecification.put(sharedPrefsName, BackupKeyPredicates.alwaysTrue());
+    return backupSpecification;
+  }
+
+  @Override
+  public void onRestoreFinished() {
+    Logger.get(this).logImpression(DialerImpression.Type.BACKUP_KEY_VALUE_ON_RESTORE_FINISHED);
+    super.onRestoreFinished();
+  }
+}
diff --git a/java/com/android/dialer/backup/proto/voicemail_info.proto b/java/com/android/dialer/backup/proto/voicemail_info.proto
deleted file mode 100644
index 7497683..0000000
--- a/java/com/android/dialer/backup/proto/voicemail_info.proto
+++ /dev/null
@@ -1,31 +0,0 @@
-syntax = "proto2";
-
-option java_package = "com.android.dialer.backup";
-option java_multiple_files = true;
-option optimize_for = LITE_RUNTIME;
-
-
-package com.android.dialer.backup;
-
-// Next id: 20
-message VoicemailInfo {
-  optional string date = 1;
-  optional string deleted = 2;
-  optional string dirty = 3;
-  optional string dir_type = 4;
-  optional string duration = 5;
-  optional string has_content = 6;
-  optional string is_read = 7;
-  optional string item_type = 8;
-  optional string last_modified = 9;
-  optional string mime_type = 10;
-  optional string number = 11;
-  optional string phone_account_component_name = 12;
-  optional string phone_account_id = 13;
-  optional string source_data = 14;
-  optional string source_package = 15;
-  optional string transcription = 16;
-  optional string voicemail_uri = 17;
-  optional bytes encoded_voicemail_key = 18;
-  optional string archived = 19;
-}
diff --git a/java/com/android/dialer/binary/aosp/AospDialerRootComponent.java b/java/com/android/dialer/binary/aosp/AospDialerRootComponent.java
index 6a7c588..c4adb37 100644
--- a/java/com/android/dialer/binary/aosp/AospDialerRootComponent.java
+++ b/java/com/android/dialer/binary/aosp/AospDialerRootComponent.java
@@ -24,6 +24,7 @@
 import com.android.dialer.inject.ContextModule;
 import com.android.dialer.lightbringer.stub.StubLightbringerModule;
 import com.android.dialer.simulator.impl.SimulatorModule;
+import com.android.dialer.storage.StorageModule;
 import com.android.incallui.calllocation.stub.StubCallLocationModule;
 import com.android.incallui.maps.stub.StubMapsModule;
 import com.android.voicemail.impl.VoicemailModule;
@@ -39,6 +40,7 @@
     DialerExecutorModule.class,
     SharedPrefConfigProviderModule.class,
     SimulatorModule.class,
+    StorageModule.class,
     StubCallLocationModule.class,
     StubEnrichedCallModule.class,
     StubMapsModule.class,
diff --git a/java/com/android/dialer/binary/basecomponent/BaseDialerRootComponent.java b/java/com/android/dialer/binary/basecomponent/BaseDialerRootComponent.java
index 8ac071f..1349564 100644
--- a/java/com/android/dialer/binary/basecomponent/BaseDialerRootComponent.java
+++ b/java/com/android/dialer/binary/basecomponent/BaseDialerRootComponent.java
@@ -24,6 +24,7 @@
 import com.android.dialer.lightbringer.LightbringerComponent;
 import com.android.dialer.main.MainComponent;
 import com.android.dialer.simulator.SimulatorComponent;
+import com.android.dialer.storage.StorageComponent;
 import com.android.incallui.calllocation.CallLocationComponent;
 import com.android.incallui.maps.MapsComponent;
 import com.android.voicemail.VoicemailComponent;
@@ -42,5 +43,6 @@
         EnrichedCallComponent.HasComponent,
         MapsComponent.HasComponent,
         SimulatorComponent.HasComponent,
+        StorageComponent.HasComponent,
         VoicemailComponent.HasComponent,
         LightbringerComponent.HasComponent {}
diff --git a/java/com/android/dialer/binary/common/DialerApplication.java b/java/com/android/dialer/binary/common/DialerApplication.java
index 08666a2..580e0a3 100644
--- a/java/com/android/dialer/binary/common/DialerApplication.java
+++ b/java/com/android/dialer/binary/common/DialerApplication.java
@@ -17,18 +17,17 @@
 package com.android.dialer.binary.common;
 
 import android.app.Application;
-import android.os.StrictMode;
 import android.os.Trace;
 import android.support.annotation.NonNull;
 import android.support.v4.os.BuildCompat;
 import com.android.dialer.blocking.BlockedNumbersAutoMigrator;
 import com.android.dialer.blocking.FilteredNumberAsyncQueryHandler;
-import com.android.dialer.buildtype.BuildType;
 import com.android.dialer.calllog.CallLogComponent;
 import com.android.dialer.common.concurrent.DefaultDialerExecutorFactory;
 import com.android.dialer.inject.HasRootComponent;
 import com.android.dialer.notification.NotificationChannelManager;
 import com.android.dialer.persistentlog.PersistentLogger;
+import com.android.dialer.strictmode.DialerStrictMode;
 
 /** A common application subclass for all Dialer build variants. */
 public abstract class DialerApplication extends Application implements HasRootComponent {
@@ -38,9 +37,8 @@
   @Override
   public void onCreate() {
     Trace.beginSection("DialerApplication.onCreate");
-    if (BuildType.get() == BuildType.BUGFOOD) {
-      enableStrictMode();
-    }
+    DialerStrictMode.onApplicationCreate(this);
+
     super.onCreate();
     new BlockedNumbersAutoMigrator(
             this.getApplicationContext(),
@@ -56,13 +54,6 @@
     Trace.endSection();
   }
 
-  private void enableStrictMode() {
-    StrictMode.setThreadPolicy(
-        new StrictMode.ThreadPolicy.Builder().detectAll().penaltyLog().penaltyDeath().build());
-    StrictMode.setVmPolicy(
-        new StrictMode.VmPolicy.Builder().detectAll().penaltyLog().penaltyDeath().build());
-  }
-
   /**
    * Returns a new instance of the root component for the application. Sub classes should define a
    * root component that extends all the sub components "HasComponent" intefaces. The component
diff --git a/java/com/android/dialer/binary/google/AndroidManifest.xml b/java/com/android/dialer/binary/google/AndroidManifest.xml
new file mode 100644
index 0000000..95c7dda
--- /dev/null
+++ b/java/com/android/dialer/binary/google/AndroidManifest.xml
@@ -0,0 +1,112 @@
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+  coreApp="true"
+  package="com.google.android.google_stub_dialer"
+  android:versionCode="160000"
+  android:versionName="12.0">
+
+  <uses-sdk
+    android:minSdkVersion="23"
+    android:targetSdkVersion="26"/>
+
+  <uses-permission android:name="android.permission.CALL_PHONE"/>
+  <uses-permission android:name="android.permission.READ_CONTACTS"/>
+  <uses-permission android:name="android.permission.WRITE_CONTACTS"/>
+  <uses-permission android:name="android.permission.READ_CALL_LOG"/>
+  <uses-permission android:name="android.permission.WRITE_CALL_LOG"/>
+  <uses-permission android:name="android.permission.READ_PROFILE"/>
+  <uses-permission android:name="android.permission.MANAGE_ACCOUNTS"/>
+  <uses-permission android:name="android.permission.GET_ACCOUNTS"/>
+  <uses-permission android:name="android.permission.GET_ACCOUNTS_PRIVILEGED"/>
+  <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
+  <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
+  <uses-permission android:name="android.permission.INTERNET"/>
+  <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"/>
+  <uses-permission android:name="android.permission.NFC"/>
+  <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
+  <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
+  <uses-permission android:name="android.permission.MODIFY_PHONE_STATE"/>
+  <uses-permission android:name="android.permission.WAKE_LOCK"/>
+  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
+  <uses-permission android:name="android.permission.WRITE_SETTINGS"/>
+  <uses-permission android:name="android.permission.USE_CREDENTIALS"/>
+  <uses-permission android:name="android.permission.VIBRATE"/>
+  <uses-permission android:name="android.permission.READ_SYNC_SETTINGS"/>
+  <uses-permission android:name="com.android.voicemail.permission.ADD_VOICEMAIL"/>
+  <uses-permission android:name="com.android.voicemail.permission.WRITE_VOICEMAIL"/>
+  <uses-permission android:name="com.android.voicemail.permission.READ_VOICEMAIL"/>
+  <uses-permission android:name="android.permission.ALLOW_ANY_CODEC_FOR_PLAYBACK"/>
+  <uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT"/>
+  <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
+  <uses-permission android:name="android.permission.BROADCAST_STICKY"/>
+  <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
+
+  <uses-permission android:name="android.permission.CONTROL_INCALL_EXPERIENCE"/>
+  <!-- We use this to disable the status bar buttons of home, back and recent
+  during an incoming call. By doing so this allows us to not show the user
+  is viewing the activity in full screen alert, on a fresh system/factory
+  reset state of the app. -->
+  <uses-permission android:name="android.permission.STATUS_BAR"/>
+  <uses-permission android:name="android.permission.CAMERA"/>
+
+  <!-- This tells the activity manager to not delay any of our activity
+   start requests, even if they happen immediately after the user
+   presses home. -->
+  <uses-permission android:name="android.permission.STOP_APP_SWITCHES"/>
+
+  <!-- Permissions needed for badger count showing on launch icon. -->
+
+  <!--for Samsung-->
+  <uses-permission android:name="com.sec.android.provider.badge.permission.READ"/>
+  <uses-permission android:name="com.sec.android.provider.badge.permission.WRITE"/>
+
+  <!--for htc-->
+  <uses-permission android:name="com.htc.launcher.permission.READ_SETTINGS"/>
+  <uses-permission android:name="com.htc.launcher.permission.UPDATE_SHORTCUT"/>
+
+  <!--for sony-->
+  <uses-permission android:name="com.sonyericsson.home.permission.BROADCAST_BADGE"/>
+  <uses-permission android:name="com.sonymobile.home.permission.PROVIDER_INSERT_BADGE"/>
+
+  <!--for apex-->
+  <uses-permission android:name="com.anddoes.launcher.permission.UPDATE_COUNT"/>
+
+  <!--for solid-->
+  <uses-permission android:name="com.majeur.launcher.permission.UPDATE_BADGE"/>
+
+  <!--for huawei-->
+  <uses-permission android:name="com.huawei.android.launcher.permission.CHANGE_BADGE"/>
+  <uses-permission android:name="com.huawei.android.launcher.permission.READ_SETTINGS"/>
+  <uses-permission android:name="com.huawei.android.launcher.permission.WRITE_SETTINGS"/>
+
+  <!--for ZUK-->
+  <uses-permission android:name="android.permission.READ_APP_BADGE"/>
+
+  <!--for OPPO-->
+  <uses-permission android:name="com.oppo.launcher.permission.READ_SETTINGS"/>
+  <uses-permission android:name="com.oppo.launcher.permission.WRITE_SETTINGS"/>
+
+  <application
+    android:hardwareAccelerated="true"
+    android:icon="@mipmap/ic_launcher_phone"
+    android:label="@string/applicationLabel"
+    android:name="com.android.dialer.binary.google.GoogleStubDialerApplication"
+    android:supportsRtl="true"
+    android:usesCleartextTraffic="false">
+  </application>
+
+</manifest>
diff --git a/java/com/android/dialer/binary/google/GoogleStubDialerApplication.java b/java/com/android/dialer/binary/google/GoogleStubDialerApplication.java
new file mode 100644
index 0000000..e9289af
--- /dev/null
+++ b/java/com/android/dialer/binary/google/GoogleStubDialerApplication.java
@@ -0,0 +1,37 @@
+/*
+ * 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
+ */
+
+package com.android.dialer.binary.google;
+
+import android.support.annotation.NonNull;
+import com.android.dialer.binary.common.DialerApplication;
+import com.android.dialer.inject.ContextModule;
+
+/**
+ * The application class for the Google Stub Dialer. This is a version of the Dialer app that
+ * depends on Google Play Services.
+ */
+public class GoogleStubDialerApplication extends DialerApplication {
+
+  /** Returns a new instance of the root component for the Google Stub Dialer. */
+  @Override
+  @NonNull
+  protected Object buildRootComponent() {
+    return DaggerGoogleStubDialerRootComponent.builder()
+        .contextModule(new ContextModule(this))
+        .build();
+  }
+}
diff --git a/java/com/android/dialer/binary/google/GoogleStubDialerRootComponent.java b/java/com/android/dialer/binary/google/GoogleStubDialerRootComponent.java
new file mode 100644
index 0000000..570b569
--- /dev/null
+++ b/java/com/android/dialer/binary/google/GoogleStubDialerRootComponent.java
@@ -0,0 +1,54 @@
+/*
+ * 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
+ */
+
+package com.android.dialer.binary.google;
+
+import com.android.dialer.binary.basecomponent.BaseDialerRootComponent;
+import com.android.dialer.calllog.CallLogModule;
+import com.android.dialer.common.concurrent.DialerExecutorModule;
+import com.android.dialer.configprovider.SharedPrefConfigProviderModule;
+import com.android.dialer.enrichedcall.stub.StubEnrichedCallModule;
+import com.android.dialer.inject.ContextModule;
+import com.android.dialer.lightbringer.stub.StubLightbringerModule;
+import com.android.dialer.simulator.impl.SimulatorModule;
+import com.android.dialer.storage.StorageModule;
+import com.android.incallui.calllocation.impl.CallLocationModule;
+import com.android.incallui.maps.impl.MapsModule;
+import com.android.voicemail.impl.VoicemailModule;
+import dagger.Component;
+import javax.inject.Singleton;
+
+/**
+ * Root component for the Google Stub Dialer application. Unlike the AOSP variant, this component
+ * can pull in modules that depend on Google Play Services like the maps module.
+ */
+@Singleton
+@Component(
+  modules = {
+    CallLocationModule.class,
+    CallLogModule.class,
+    ContextModule.class,
+    DialerExecutorModule.class,
+    SharedPrefConfigProviderModule.class,
+    SimulatorModule.class,
+    StorageModule.class,
+    StubEnrichedCallModule.class,
+    MapsModule.class,
+    VoicemailModule.class,
+    StubLightbringerModule.class
+  }
+)
+public interface GoogleStubDialerRootComponent extends BaseDialerRootComponent {}
diff --git a/java/com/android/dialer/blocking/FilteredNumberAsyncQueryHandler.java b/java/com/android/dialer/blocking/FilteredNumberAsyncQueryHandler.java
index fa74850..d806a83 100644
--- a/java/com/android/dialer/blocking/FilteredNumberAsyncQueryHandler.java
+++ b/java/com/android/dialer/blocking/FilteredNumberAsyncQueryHandler.java
@@ -262,7 +262,7 @@
   }
 
   /*
-   * TODO: b/27779827, non-e164 numbers can be blocked in the new form of blocking. As a
+   * TODO(maxwelb): b/27779827, non-e164 numbers can be blocked in the new form of blocking. As a
    * temporary workaround, determine which column of the database to query based on whether the
    * number is e164 or not.
    */
diff --git a/java/com/android/dialer/blocking/FilteredNumberCompat.java b/java/com/android/dialer/blocking/FilteredNumberCompat.java
index 9e01127..548c965 100644
--- a/java/com/android/dialer/blocking/FilteredNumberCompat.java
+++ b/java/com/android/dialer/blocking/FilteredNumberCompat.java
@@ -38,6 +38,7 @@
 import com.android.dialer.database.FilteredNumberContract.FilteredNumberColumns;
 import com.android.dialer.database.FilteredNumberContract.FilteredNumberSources;
 import com.android.dialer.database.FilteredNumberContract.FilteredNumberTypes;
+import com.android.dialer.strictmode.DialerStrictMode;
 import com.android.dialer.telecom.TelecomUtil;
 import java.util.ArrayList;
 import java.util.List;
@@ -124,8 +125,10 @@
    *     android.provider.BlockedNumberContract} blocking, {@code false} otherwise.
    */
   public static boolean hasMigratedToNewBlocking(Context context) {
-    return PreferenceManager.getDefaultSharedPreferences(context)
-        .getBoolean(HAS_MIGRATED_TO_NEW_BLOCKING_KEY, false);
+    return DialerStrictMode.bypass(
+        () ->
+            PreferenceManager.getDefaultSharedPreferences(context)
+                .getBoolean(HAS_MIGRATED_TO_NEW_BLOCKING_KEY, false));
   }
 
   /**
@@ -270,7 +273,7 @@
     }
 
     // Great Wall blocking, must be primary user and the default or system dialer
-    // TODO: check that we're the system Dialer
+    // TODO(maxwelb): check that we're the system Dialer
     return TelecomUtil.isDefaultDialer(context)
         && safeBlockedNumbersContractCanCurrentUserBlockNumbers(context);
   }
diff --git a/java/com/android/dialer/blocking/res/values-hu/strings.xml b/java/com/android/dialer/blocking/res/values-hu/strings.xml
index 7981d6c..1070454 100644
--- a/java/com/android/dialer/blocking/res/values-hu/strings.xml
+++ b/java/com/android/dialer/blocking/res/values-hu/strings.xml
@@ -33,7 +33,7 @@
     <string name="block_number_undo" msgid="5158120911892491697">"VISSZAVONÁS"</string>
     <string name="send_to_voicemail_import_failed" msgid="1012752662074208237">"Az importálás nem sikerült"</string>
     <string name="call_blocking_disabled_notification_title" msgid="7211352205255347489">"A hívások tiltása funkció kikapcsolva 48 órára"</string>
-    <string name="call_blocking_disabled_notification_text" msgid="141384084865180722">"Letiltva segélyhívás miatt."</string>
+    <string name="call_blocking_disabled_notification_text" msgid="141384084865180722">"Letiltva vészhívás miatt."</string>
     <string name="block_report_number_alert_title" msgid="2740581989824959611">"Letiltja a következő számot: <xliff:g id="NUMBER">%1$s</xliff:g>?"</string>
     <string name="block_report_number_alert_details" msgid="2652479394593143562">"A jövőben nem fogad hívásokat erről a számról."</string>
     <string name="block_number_alert_details" msgid="715942751312046429">"<xliff:g id="TEXT">%1$s</xliff:g> A hívást spamként jelentjük be."</string>
diff --git a/java/com/android/dialer/buildtype/bugfood/BuildTypeAccessorImpl.java b/java/com/android/dialer/buildtype/bugfood/BuildTypeAccessorImpl.java
new file mode 100644
index 0000000..45d72e0
--- /dev/null
+++ b/java/com/android/dialer/buildtype/bugfood/BuildTypeAccessorImpl.java
@@ -0,0 +1,30 @@
+/*
+ * 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
+ */
+
+package com.android.dialer.buildtype;
+
+import com.android.dialer.proguard.UsedByReflection;
+
+/** Gets the build type. */
+@UsedByReflection(value = "BuildType.java")
+public class BuildTypeAccessorImpl implements BuildTypeAccessor {
+
+  @Override
+  @BuildType.Type
+  public int getBuildType() {
+    return BuildType.BUGFOOD;
+  }
+}
diff --git a/java/com/android/dialer/buildtype/dogfood/BuildTypeAccessorImpl.java b/java/com/android/dialer/buildtype/dogfood/BuildTypeAccessorImpl.java
new file mode 100644
index 0000000..e1f2cdc
--- /dev/null
+++ b/java/com/android/dialer/buildtype/dogfood/BuildTypeAccessorImpl.java
@@ -0,0 +1,30 @@
+/*
+ * 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
+ */
+
+package com.android.dialer.buildtype;
+
+import com.android.dialer.proguard.UsedByReflection;
+
+/** Gets the build type. */
+@UsedByReflection(value = "BuildType.java")
+public class BuildTypeAccessorImpl implements BuildTypeAccessor {
+
+  @Override
+  @BuildType.Type
+  public int getBuildType() {
+    return BuildType.DOGFOOD;
+  }
+}
diff --git a/java/com/android/dialer/buildtype/fishfood/BuildTypeAccessorImpl.java b/java/com/android/dialer/buildtype/fishfood/BuildTypeAccessorImpl.java
new file mode 100644
index 0000000..e5ad901
--- /dev/null
+++ b/java/com/android/dialer/buildtype/fishfood/BuildTypeAccessorImpl.java
@@ -0,0 +1,30 @@
+/*
+ * 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
+ */
+
+package com.android.dialer.buildtype;
+
+import com.android.dialer.proguard.UsedByReflection;
+
+/** Gets the build type. */
+@UsedByReflection(value = "BuildType.java")
+public class BuildTypeAccessorImpl implements BuildTypeAccessor {
+
+  @Override
+  @BuildType.Type
+  public int getBuildType() {
+    return BuildType.FISHFOOD;
+  }
+}
diff --git a/java/com/android/dialer/buildtype/test/BuildTypeAccessorImpl.java b/java/com/android/dialer/buildtype/test/BuildTypeAccessorImpl.java
new file mode 100644
index 0000000..80a1cb7
--- /dev/null
+++ b/java/com/android/dialer/buildtype/test/BuildTypeAccessorImpl.java
@@ -0,0 +1,30 @@
+/*
+ * 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
+ */
+
+package com.android.dialer.buildtype;
+
+import com.android.dialer.proguard.UsedByReflection;
+
+/** Gets the build type. */
+@UsedByReflection(value = "BuildType.java")
+public class BuildTypeAccessorImpl implements BuildTypeAccessor {
+
+  @Override
+  @BuildType.Type
+  public int getBuildType() {
+    return BuildType.TEST;
+  }
+}
diff --git a/java/com/android/dialer/callcomposer/CallComposerActivity.java b/java/com/android/dialer/callcomposer/CallComposerActivity.java
index df5cc29..e6e5513 100644
--- a/java/com/android/dialer/callcomposer/CallComposerActivity.java
+++ b/java/com/android/dialer/callcomposer/CallComposerActivity.java
@@ -32,6 +32,7 @@
 import android.support.annotation.VisibleForTesting;
 import android.support.v4.content.ContextCompat;
 import android.support.v4.content.FileProvider;
+import android.support.v4.util.Pair;
 import android.support.v4.view.ViewPager.OnPageChangeListener;
 import android.support.v4.view.animation.FastOutSlowInInterpolator;
 import android.support.v7.app.AppCompatActivity;
@@ -50,17 +51,18 @@
 import android.widget.RelativeLayout;
 import android.widget.TextView;
 import android.widget.Toast;
-import com.android.contacts.common.ContactPhotoManager;
 import com.android.dialer.callcomposer.CallComposerFragment.CallComposerListener;
 import com.android.dialer.callintent.CallInitiationType;
 import com.android.dialer.callintent.CallIntentBuilder;
 import com.android.dialer.common.Assert;
 import com.android.dialer.common.LogUtil;
 import com.android.dialer.common.UiUtil;
+import com.android.dialer.common.concurrent.DialerExecutor;
 import com.android.dialer.common.concurrent.DialerExecutors;
 import com.android.dialer.common.concurrent.ThreadUtil;
 import com.android.dialer.configprovider.ConfigProviderBindings;
 import com.android.dialer.constants.Constants;
+import com.android.dialer.contactphoto.ContactPhotoManager;
 import com.android.dialer.dialercontact.DialerContact;
 import com.android.dialer.enrichedcall.EnrichedCallComponent;
 import com.android.dialer.enrichedcall.EnrichedCallManager;
@@ -139,6 +141,7 @@
   private FrameLayout background;
   private LinearLayout windowContainer;
 
+  private DialerExecutor<Uri> copyAndResizeExecutor;
   private FastOutSlowInInterpolator interpolator;
   private boolean shouldAnimateEntrance = true;
   private boolean inFullscreenMode;
@@ -207,6 +210,29 @@
         });
 
     setMediaIconSelected(currentIndex);
+
+    copyAndResizeExecutor =
+        DialerExecutors.createUiTaskBuilder(
+                getFragmentManager(),
+                "copyAndResizeImageToSend",
+                new CopyAndResizeImageWorker(this.getApplicationContext()))
+            .onSuccess(this::onCopyAndResizeImageSuccess)
+            .onFailure(this::onCopyAndResizeImageFailure)
+            .build();
+  }
+
+  private void onCopyAndResizeImageSuccess(Pair<File, String> output) {
+    Uri shareableUri =
+        FileProvider.getUriForFile(
+            CallComposerActivity.this, Constants.get().getFileProviderAuthority(), output.first);
+
+    placeRCSCall(
+        MultimediaData.builder().setImage(grantUriPermission(shareableUri), output.second));
+  }
+
+  private void onCopyAndResizeImageFailure(Throwable throwable) {
+    // TODO(b/34279096) - gracefully handle message failure
+    LogUtil.e("CallComposerActivity.onCopyAndResizeImageFailure", "copy Failed", throwable);
   }
 
   @Override
@@ -332,28 +358,8 @@
       GalleryComposerFragment galleryComposerFragment = (GalleryComposerFragment) fragment;
       // If the current data is not a copy, make one.
       if (!galleryComposerFragment.selectedDataIsCopy()) {
-        DialerExecutors.createUiTaskBuilder(
-                getFragmentManager(),
-                "copyAndResizeImageToSend",
-                new CopyAndResizeImageWorker(this.getApplicationContext()))
-            .onSuccess(
-                output -> {
-                  Uri shareableUri =
-                      FileProvider.getUriForFile(
-                          CallComposerActivity.this,
-                          Constants.get().getFileProviderAuthority(),
-                          output.first);
-
-                  builder.setImage(grantUriPermission(shareableUri), output.second);
-                  placeRCSCall(builder);
-                })
-            .onFailure(
-                throwable -> {
-                  // TODO(b/34279096) - gracefully handle message failure
-                  LogUtil.e("CallComposerActivity.onCopyFailed", "copy Failed", throwable);
-                })
-            .build()
-            .executeParallel(galleryComposerFragment.getGalleryData().getFileUri());
+        copyAndResizeExecutor.executeParallel(
+            galleryComposerFragment.getGalleryData().getFileUri());
       } else {
         Uri shareableUri =
             FileProvider.getUriForFile(
@@ -415,7 +421,7 @@
 
   /** Give permission to Messenger to view our image for RCS purposes. */
   private Uri grantUriPermission(Uri uri) {
-    // TODO: Move this to the enriched call manager.
+    // TODO(sail): Move this to the enriched call manager.
     grantUriPermission(
         "com.google.android.apps.messaging", uri, Intent.FLAG_GRANT_READ_URI_PERMISSION);
     return uri;
@@ -664,12 +670,20 @@
                   public void onAnimationStart(Animator animation) {
                     isSendAndCallHidingOrHidden = shouldHide;
                     sendAndCall.setVisibility(View.VISIBLE);
+                    cameraIcon.setVisibility(View.VISIBLE);
+                    galleryIcon.setVisibility(View.VISIBLE);
+                    messageIcon.setVisibility(View.VISIBLE);
                   }
 
                   @Override
                   public void onAnimationEnd(Animator animation) {
                     if (isSendAndCallHidingOrHidden) {
                       sendAndCall.setVisibility(View.INVISIBLE);
+                    } else {
+                      // hide buttons to prevent overdrawing and talkback discoverability
+                      cameraIcon.setVisibility(View.GONE);
+                      galleryIcon.setVisibility(View.GONE);
+                      messageIcon.setVisibility(View.GONE);
                     }
                   }
 
diff --git a/java/com/android/dialer/callcomposer/CameraComposerFragment.java b/java/com/android/dialer/callcomposer/CameraComposerFragment.java
index 7ec6611..a5c65fd 100644
--- a/java/com/android/dialer/callcomposer/CameraComposerFragment.java
+++ b/java/com/android/dialer/callcomposer/CameraComposerFragment.java
@@ -326,7 +326,11 @@
   /** Updates the state of the buttons and overlays based on the current state of the view */
   private void updateViewState() {
     Assert.isNotNull(cameraView);
-    Assert.isNotNull(getContext());
+    if (isDetached() || getContext() == null) {
+      LogUtil.i(
+          "CameraComposerFragment.updateViewState", "Fragment detached, cannot update view state");
+      return;
+    }
 
     boolean isCameraAvailable = CameraManager.get().isCameraAvailable();
     boolean uriReadyOrProcessing = cameraUri != null || processingUri;
diff --git a/java/com/android/dialer/callcomposer/GalleryCursorLoader.java b/java/com/android/dialer/callcomposer/GalleryCursorLoader.java
index 39d6a4a..d33bfb3 100644
--- a/java/com/android/dialer/callcomposer/GalleryCursorLoader.java
+++ b/java/com/android/dialer/callcomposer/GalleryCursorLoader.java
@@ -16,7 +16,6 @@
 
 package com.android.dialer.callcomposer;
 
-import android.annotation.SuppressLint;
 import android.content.Context;
 import android.net.Uri;
 import android.provider.MediaStore.Files;
@@ -44,11 +43,10 @@
         SORT_ORDER);
   }
 
-  @SuppressLint("DefaultLocale")
   private static String createSelection() {
-    return String.format(
-        "mime_type IN ('image/jpeg', 'image/jpg', 'image/png', 'image/webp')"
-            + " AND media_type in (%d)",
-        FileColumns.MEDIA_TYPE_IMAGE);
+    return "mime_type IN ('image/jpeg', 'image/jpg', 'image/png', 'image/webp')"
+        + " AND media_type in ("
+        + FileColumns.MEDIA_TYPE_IMAGE
+        + ")";
   }
 }
diff --git a/java/com/android/dialer/callcomposer/camera/CameraManager.java b/java/com/android/dialer/callcomposer/camera/CameraManager.java
index 5915ce3..f79f654 100644
--- a/java/com/android/dialer/callcomposer/camera/CameraManager.java
+++ b/java/com/android/dialer/callcomposer/camera/CameraManager.java
@@ -35,6 +35,7 @@
 import com.android.dialer.callcomposer.camera.camerafocus.RenderOverlay;
 import com.android.dialer.common.Assert;
 import com.android.dialer.common.LogUtil;
+import com.android.dialer.common.concurrent.DialerExecutors;
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Collections;
@@ -118,7 +119,7 @@
   /**
    * 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
+   * TODO(blemmon): 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;
@@ -457,9 +458,9 @@
             int height;
             if (mRotation == 90 || mRotation == 270) {
               // Is rotated, so swapping dimensions is desired
-              //noinspection SuspiciousNameCombination
+              // noinspection SuspiciousNameCombination
               width = size.height;
-              //noinspection SuspiciousNameCombination
+              // noinspection SuspiciousNameCombination
               height = size.width;
             } else {
               width = size.width;
@@ -467,9 +468,20 @@
             }
             LogUtil.i(
                 "CameraManager.onPictureTaken", "taken picture size: " + bytes.length + " bytes");
-            new ImagePersistTask(
-                    width, height, heightPercent, bytes, mCameraPreview.getContext(), callback)
-                .execute();
+            DialerExecutors.createNonUiTaskBuilder(
+                    new ImagePersistWorker(
+                        width, height, heightPercent, bytes, mCameraPreview.getContext()))
+                .onSuccess(
+                    (result) -> {
+                      callback.onMediaReady(
+                          result.getUri(), "image/jpeg", result.getWidth(), result.getHeight());
+                    })
+                .onFailure(
+                    (throwable) -> {
+                      callback.onMediaFailed(new Exception("Persisting image failed", throwable));
+                    })
+                .build()
+                .executeSerial(null);
           }
         };
 
diff --git a/java/com/android/dialer/callcomposer/camera/ImagePersistTask.java b/java/com/android/dialer/callcomposer/camera/ImagePersistWorker.java
similarity index 77%
rename from java/com/android/dialer/callcomposer/camera/ImagePersistTask.java
rename to java/com/android/dialer/callcomposer/camera/ImagePersistWorker.java
index 8620701..26b0bde 100644
--- a/java/com/android/dialer/callcomposer/camera/ImagePersistTask.java
+++ b/java/com/android/dialer/callcomposer/camera/ImagePersistWorker.java
@@ -22,13 +22,16 @@
 import android.graphics.BitmapFactory;
 import android.net.Uri;
 import android.os.Build.VERSION_CODES;
+import android.support.annotation.NonNull;
 import android.support.v4.content.FileProvider;
+import com.android.dialer.callcomposer.camera.ImagePersistWorker.Result;
 import com.android.dialer.callcomposer.camera.exif.ExifInterface;
 import com.android.dialer.callcomposer.util.BitmapResizer;
 import com.android.dialer.common.Assert;
-import com.android.dialer.common.concurrent.FallibleAsyncTask;
+import com.android.dialer.common.concurrent.DialerExecutor.Worker;
 import com.android.dialer.constants.Constants;
 import com.android.dialer.util.DialerUtils;
+import com.google.auto.value.AutoValue;
 import java.io.File;
 import java.io.FileOutputStream;
 import java.io.IOException;
@@ -36,52 +39,70 @@
 
 /** Persisting image routine. */
 @TargetApi(VERSION_CODES.M)
-public class ImagePersistTask extends FallibleAsyncTask<Void, Void, Uri> {
+public class ImagePersistWorker implements Worker<Void, Result> {
   private int mWidth;
   private int mHeight;
   private final float mHeightPercent;
   private final byte[] mBytes;
   private final Context mContext;
-  private final CameraManager.MediaCallback mCallback;
 
-  ImagePersistTask(
+  @AutoValue
+  abstract static class Result {
+
+    public static Builder builder() {
+      return new AutoValue_ImagePersistWorker_Result.Builder();
+    }
+
+    @NonNull
+    abstract Uri getUri();
+
+    abstract int getWidth();
+
+    abstract int getHeight();
+
+    @AutoValue.Builder
+    abstract static class Builder {
+      abstract Builder setUri(@NonNull Uri uri);
+
+      abstract Builder setWidth(int width);
+
+      abstract Builder setHeight(int height);
+
+      abstract Result build();
+    }
+  }
+
+  ImagePersistWorker(
       final int width,
       final int height,
       final float heightPercent,
       final byte[] bytes,
-      final Context context,
-      final CameraManager.MediaCallback callback) {
+      final Context context) {
     Assert.checkArgument(heightPercent >= 0 && heightPercent <= 1);
     Assert.isNotNull(bytes);
     Assert.isNotNull(context);
-    Assert.isNotNull(callback);
     mWidth = width;
     mHeight = height;
     mHeightPercent = heightPercent;
     mBytes = bytes;
     mContext = context;
-    mCallback = callback;
   }
 
   @Override
-  protected Uri doInBackgroundFallible(final Void... params) throws Exception {
+  public Result doInBackground(Void unused) throws Exception {
     File outputFile = DialerUtils.createShareableFile(mContext);
 
     try (OutputStream outputStream = new FileOutputStream(outputFile)) {
       writeClippedBitmap(outputStream);
     }
 
-    return FileProvider.getUriForFile(
-        mContext, Constants.get().getFileProviderAuthority(), outputFile);
-  }
-
-  @Override
-  protected void onPostExecute(FallibleTaskResult<Uri> result) {
-    if (result.isFailure()) {
-      mCallback.onMediaFailed(new Exception("Persisting image failed", result.getThrowable()));
-    } else {
-      mCallback.onMediaReady(result.getResult(), "image/jpeg", mWidth, mHeight);
-    }
+    return Result.builder()
+        .setUri(
+            FileProvider.getUriForFile(
+                mContext, Constants.get().getFileProviderAuthority(), outputFile))
+        .setWidth(mWidth)
+        .setHeight(mHeight)
+        .build();
   }
 
   private void writeClippedBitmap(OutputStream outputStream) throws IOException {
diff --git a/java/com/android/dialer/callcomposer/camera/camerafocus/FocusOverlayManager.java b/java/com/android/dialer/callcomposer/camera/camerafocus/FocusOverlayManager.java
index 1c5ac38..a5edf33 100644
--- a/java/com/android/dialer/callcomposer/camera/camerafocus/FocusOverlayManager.java
+++ b/java/com/android/dialer/callcomposer/camera/camerafocus/FocusOverlayManager.java
@@ -389,7 +389,7 @@
       focusIndicator.showStart();
     } else {
       if (Parameters.FOCUS_MODE_CONTINUOUS_PICTURE.equals(mFocusMode)) {
-        // TODO: check HAL behavior and decide if this can be removed.
+        // TODO(blemmon): check HAL behavior and decide if this can be removed.
         focusIndicator.showSuccess(false);
       } else if (mState == STATE_SUCCESS) {
         focusIndicator.showSuccess(false);
diff --git a/java/com/android/dialer/callcomposer/camera/exif/ExifParser.java b/java/com/android/dialer/callcomposer/camera/exif/ExifParser.java
index 23d748c..c728845 100644
--- a/java/com/android/dialer/callcomposer/camera/exif/ExifParser.java
+++ b/java/com/android/dialer/callcomposer/camera/exif/ExifParser.java
@@ -499,7 +499,7 @@
       mTiffStream.skip(4);
       return null;
     }
-    // TODO: handle numOfComp overflow
+    // TODO(blemmon): handle numOfComp overflow
     ExifTag tag =
         new ExifTag(
             tagId,
diff --git a/java/com/android/dialer/callcomposer/camera/exif/ExifTag.java b/java/com/android/dialer/callcomposer/camera/exif/ExifTag.java
index a254ae9..9a03c10 100644
--- a/java/com/android/dialer/callcomposer/camera/exif/ExifTag.java
+++ b/java/com/android/dialer/callcomposer/camera/exif/ExifTag.java
@@ -187,7 +187,7 @@
 
   /** Gets the component count of this tag. */
 
-  // TODO: fix integer overflows with this
+  // TODO(blemmon): fix integer overflows with this
   int getComponentCount() {
     return mComponentCountActual;
   }
diff --git a/java/com/android/dialer/callcomposer/res/layout/fragment_message_composer.xml b/java/com/android/dialer/callcomposer/res/layout/fragment_message_composer.xml
index 1556247..39c2d0d 100644
--- a/java/com/android/dialer/callcomposer/res/layout/fragment_message_composer.xml
+++ b/java/com/android/dialer/callcomposer/res/layout/fragment_message_composer.xml
@@ -51,7 +51,6 @@
       android:background="@color/call_composer_divider"/>
 
   <RelativeLayout
-      android:orientation="horizontal"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content">
 
diff --git a/java/com/android/dialer/callcomposer/res/values-af/strings.xml b/java/com/android/dialer/callcomposer/res/values-af/strings.xml
index 62a7457..ef35865 100644
--- a/java/com/android/dialer/callcomposer/res/values-af/strings.xml
+++ b/java/com/android/dialer/callcomposer/res/values-af/strings.xml
@@ -33,6 +33,8 @@
     <string name="description_call_composer_camera" msgid="388088245837924914">"Neem \'n foto"</string>
     <string name="description_call_composer_photo" msgid="6449208314952246454">"Kies \'n foto"</string>
     <string name="description_call_composer_message" msgid="9132362446000908550">"Stuur \'n boodskap"</string>
-    <string name="image_sent_messages" msgid="6520870555040566229">"Foto is via Boodskappe gestuur"</string>
-    <string name="message_sent_messages" msgid="6286576951151541098">"Boodskap is via Boodskappe gestuur"</string>
+    <!-- no translation found for image_sent_messages (6520870555040566229) -->
+    <skip />
+    <!-- no translation found for message_sent_messages (6286576951151541098) -->
+    <skip />
 </resources>
diff --git a/java/com/android/dialer/callcomposer/res/values-am/strings.xml b/java/com/android/dialer/callcomposer/res/values-am/strings.xml
index fe1c1e5..8224b1e 100644
--- a/java/com/android/dialer/callcomposer/res/values-am/strings.xml
+++ b/java/com/android/dialer/callcomposer/res/values-am/strings.xml
@@ -33,6 +33,8 @@
     <string name="description_call_composer_camera" msgid="388088245837924914">"ፎቶ ያንሱ"</string>
     <string name="description_call_composer_photo" msgid="6449208314952246454">"ፎቶ ይምረጡ"</string>
     <string name="description_call_composer_message" msgid="9132362446000908550">"መልዕክት ይላኩ"</string>
-    <string name="image_sent_messages" msgid="6520870555040566229">"ፎቶ በመልዕክቶች በኩል ተልኳል"</string>
-    <string name="message_sent_messages" msgid="6286576951151541098">"መልዕክት በመልዕክቶች በኩል ተልኳል"</string>
+    <!-- no translation found for image_sent_messages (6520870555040566229) -->
+    <skip />
+    <!-- no translation found for message_sent_messages (6286576951151541098) -->
+    <skip />
 </resources>
diff --git a/java/com/android/dialer/callcomposer/res/values-ar/strings.xml b/java/com/android/dialer/callcomposer/res/values-ar/strings.xml
index b70f3ff..4e27f21 100644
--- a/java/com/android/dialer/callcomposer/res/values-ar/strings.xml
+++ b/java/com/android/dialer/callcomposer/res/values-ar/strings.xml
@@ -33,6 +33,8 @@
     <string name="description_call_composer_camera" msgid="388088245837924914">"التقاط صورة"</string>
     <string name="description_call_composer_photo" msgid="6449208314952246454">"اختيار صورة"</string>
     <string name="description_call_composer_message" msgid="9132362446000908550">"إرسال رسالة"</string>
-    <string name="image_sent_messages" msgid="6520870555040566229">"‏صورة مرسلة عبر Messages"</string>
-    <string name="message_sent_messages" msgid="6286576951151541098">"‏رسالة مرسلة عبر Messages"</string>
+    <!-- no translation found for image_sent_messages (6520870555040566229) -->
+    <skip />
+    <!-- no translation found for message_sent_messages (6286576951151541098) -->
+    <skip />
 </resources>
diff --git a/java/com/android/dialer/callcomposer/res/values-az/strings.xml b/java/com/android/dialer/callcomposer/res/values-az/strings.xml
index 7495555..d861e66 100644
--- a/java/com/android/dialer/callcomposer/res/values-az/strings.xml
+++ b/java/com/android/dialer/callcomposer/res/values-az/strings.xml
@@ -33,6 +33,8 @@
     <string name="description_call_composer_camera" msgid="388088245837924914">"Şəkil çəkin"</string>
     <string name="description_call_composer_photo" msgid="6449208314952246454">"Foto seçin"</string>
     <string name="description_call_composer_message" msgid="9132362446000908550">"Mesaj göndərin"</string>
-    <string name="image_sent_messages" msgid="6520870555040566229">"Foto Mesajlaşma tətbiqi vasitəsilə göndərildi"</string>
-    <string name="message_sent_messages" msgid="6286576951151541098">"Mesaj Mesajlaşma tətbiqi vasitəsilə göndərildi"</string>
+    <!-- no translation found for image_sent_messages (6520870555040566229) -->
+    <skip />
+    <!-- no translation found for message_sent_messages (6286576951151541098) -->
+    <skip />
 </resources>
diff --git a/java/com/android/dialer/callcomposer/res/values-b+sr+Latn/strings.xml b/java/com/android/dialer/callcomposer/res/values-b+sr+Latn/strings.xml
index 88b8011..0a93b22 100644
--- a/java/com/android/dialer/callcomposer/res/values-b+sr+Latn/strings.xml
+++ b/java/com/android/dialer/callcomposer/res/values-b+sr+Latn/strings.xml
@@ -33,6 +33,8 @@
     <string name="description_call_composer_camera" msgid="388088245837924914">"Slikajte"</string>
     <string name="description_call_composer_photo" msgid="6449208314952246454">"Izaberite sliku"</string>
     <string name="description_call_composer_message" msgid="9132362446000908550">"Pošaljite poruku"</string>
-    <string name="image_sent_messages" msgid="6520870555040566229">"Slika je poslata preko Messages-a"</string>
-    <string name="message_sent_messages" msgid="6286576951151541098">"Poruka je poslata preko Messages-a"</string>
+    <!-- no translation found for image_sent_messages (6520870555040566229) -->
+    <skip />
+    <!-- no translation found for message_sent_messages (6286576951151541098) -->
+    <skip />
 </resources>
diff --git a/java/com/android/dialer/callcomposer/res/values-be/strings.xml b/java/com/android/dialer/callcomposer/res/values-be/strings.xml
index a741ccd..ba55fc7 100644
--- a/java/com/android/dialer/callcomposer/res/values-be/strings.xml
+++ b/java/com/android/dialer/callcomposer/res/values-be/strings.xml
@@ -33,6 +33,8 @@
     <string name="description_call_composer_camera" msgid="388088245837924914">"Зрабіць фота"</string>
     <string name="description_call_composer_photo" msgid="6449208314952246454">"Выбраць фота"</string>
     <string name="description_call_composer_message" msgid="9132362446000908550">"Адправіць паведамленне"</string>
-    <string name="image_sent_messages" msgid="6520870555040566229">"Фота адпраўлена праз праграму \"Паведамленні\""</string>
-    <string name="message_sent_messages" msgid="6286576951151541098">"Паведамленне адпраўлена праз праграму \"Паведамленні\""</string>
+    <!-- no translation found for image_sent_messages (6520870555040566229) -->
+    <skip />
+    <!-- no translation found for message_sent_messages (6286576951151541098) -->
+    <skip />
 </resources>
diff --git a/java/com/android/dialer/callcomposer/res/values-bg/strings.xml b/java/com/android/dialer/callcomposer/res/values-bg/strings.xml
index 4348bc6..7dad394 100644
--- a/java/com/android/dialer/callcomposer/res/values-bg/strings.xml
+++ b/java/com/android/dialer/callcomposer/res/values-bg/strings.xml
@@ -33,6 +33,8 @@
     <string name="description_call_composer_camera" msgid="388088245837924914">"Правене на снимка"</string>
     <string name="description_call_composer_photo" msgid="6449208314952246454">"Избиране на снимка"</string>
     <string name="description_call_composer_message" msgid="9132362446000908550">"Изпращане на съобщение"</string>
-    <string name="image_sent_messages" msgid="6520870555040566229">"Снимката е изпратена чрез Messages"</string>
-    <string name="message_sent_messages" msgid="6286576951151541098">"Съобщението е изпратено чрез Messages"</string>
+    <!-- no translation found for image_sent_messages (6520870555040566229) -->
+    <skip />
+    <!-- no translation found for message_sent_messages (6286576951151541098) -->
+    <skip />
 </resources>
diff --git a/java/com/android/dialer/callcomposer/res/values-bn/strings.xml b/java/com/android/dialer/callcomposer/res/values-bn/strings.xml
index f2f3f11..607f195 100644
--- a/java/com/android/dialer/callcomposer/res/values-bn/strings.xml
+++ b/java/com/android/dialer/callcomposer/res/values-bn/strings.xml
@@ -33,6 +33,8 @@
     <string name="description_call_composer_camera" msgid="388088245837924914">"একটি ছবি তুলুন"</string>
     <string name="description_call_composer_photo" msgid="6449208314952246454">"একটি ফটো বেছে নিন"</string>
     <string name="description_call_composer_message" msgid="9132362446000908550">"একটি বার্তা পাঠান"</string>
-    <string name="image_sent_messages" msgid="6520870555040566229">"Messages এর সাহায্যে ফটো পাঠানো হয়েছে"</string>
-    <string name="message_sent_messages" msgid="6286576951151541098">"Messages-এর সাহায্যে বার্তা পাঠানো হয়েছে"</string>
+    <!-- no translation found for image_sent_messages (6520870555040566229) -->
+    <skip />
+    <!-- no translation found for message_sent_messages (6286576951151541098) -->
+    <skip />
 </resources>
diff --git a/java/com/android/dialer/callcomposer/res/values-bs/strings.xml b/java/com/android/dialer/callcomposer/res/values-bs/strings.xml
index 8ba9e72..99ca5db 100644
--- a/java/com/android/dialer/callcomposer/res/values-bs/strings.xml
+++ b/java/com/android/dialer/callcomposer/res/values-bs/strings.xml
@@ -31,8 +31,10 @@
     <string name="camera_permission_text" msgid="7863231776480341614">"Da snimite fotografiju, dajte pristup Kameri"</string>
     <string name="gallery_permission_text" msgid="4102566850658919346">"Da podijelite sliku, dozvolite pristup Medijima"</string>
     <string name="description_call_composer_camera" msgid="388088245837924914">"Uslikaj"</string>
-    <string name="description_call_composer_photo" msgid="6449208314952246454">"Odaberi fotografiju"</string>
+    <string name="description_call_composer_photo" msgid="6449208314952246454">"Izaberi fotografiju"</string>
     <string name="description_call_composer_message" msgid="9132362446000908550">"Pošalji poruku"</string>
-    <string name="image_sent_messages" msgid="6520870555040566229">"Fotografija je poslana putem aplikacije Messages"</string>
-    <string name="message_sent_messages" msgid="6286576951151541098">"Poruka je poslana putem aplikacije Messages"</string>
+    <!-- no translation found for image_sent_messages (6520870555040566229) -->
+    <skip />
+    <!-- no translation found for message_sent_messages (6286576951151541098) -->
+    <skip />
 </resources>
diff --git a/java/com/android/dialer/callcomposer/res/values-ca/strings.xml b/java/com/android/dialer/callcomposer/res/values-ca/strings.xml
index 1f3007d..7b55346 100644
--- a/java/com/android/dialer/callcomposer/res/values-ca/strings.xml
+++ b/java/com/android/dialer/callcomposer/res/values-ca/strings.xml
@@ -33,6 +33,8 @@
     <string name="description_call_composer_camera" msgid="388088245837924914">"Fes una foto"</string>
     <string name="description_call_composer_photo" msgid="6449208314952246454">"Tria una foto"</string>
     <string name="description_call_composer_message" msgid="9132362446000908550">"Envia un missatge"</string>
-    <string name="image_sent_messages" msgid="6520870555040566229">"Foto enviada mitjançant Missatges"</string>
-    <string name="message_sent_messages" msgid="6286576951151541098">"Missatge enviat mitjançant Missatges"</string>
+    <!-- no translation found for image_sent_messages (6520870555040566229) -->
+    <skip />
+    <!-- no translation found for message_sent_messages (6286576951151541098) -->
+    <skip />
 </resources>
diff --git a/java/com/android/dialer/callcomposer/res/values-cs/strings.xml b/java/com/android/dialer/callcomposer/res/values-cs/strings.xml
index 590ab1c..f30bb3c 100644
--- a/java/com/android/dialer/callcomposer/res/values-cs/strings.xml
+++ b/java/com/android/dialer/callcomposer/res/values-cs/strings.xml
@@ -33,6 +33,8 @@
     <string name="description_call_composer_camera" msgid="388088245837924914">"Vyfotit"</string>
     <string name="description_call_composer_photo" msgid="6449208314952246454">"Vybrat fotku"</string>
     <string name="description_call_composer_message" msgid="9132362446000908550">"Poslat zprávu"</string>
-    <string name="image_sent_messages" msgid="6520870555040566229">"Fotka poslaná v aplikaci Zprávy"</string>
-    <string name="message_sent_messages" msgid="6286576951151541098">"Zpráva poslaná v aplikaci Zprávy"</string>
+    <!-- no translation found for image_sent_messages (6520870555040566229) -->
+    <skip />
+    <!-- no translation found for message_sent_messages (6286576951151541098) -->
+    <skip />
 </resources>
diff --git a/java/com/android/dialer/callcomposer/res/values-da/strings.xml b/java/com/android/dialer/callcomposer/res/values-da/strings.xml
index 179e0d0..bae4495 100644
--- a/java/com/android/dialer/callcomposer/res/values-da/strings.xml
+++ b/java/com/android/dialer/callcomposer/res/values-da/strings.xml
@@ -33,6 +33,8 @@
     <string name="description_call_composer_camera" msgid="388088245837924914">"Tag et billede"</string>
     <string name="description_call_composer_photo" msgid="6449208314952246454">"Vælg et billede"</string>
     <string name="description_call_composer_message" msgid="9132362446000908550">"Send en sms"</string>
-    <string name="image_sent_messages" msgid="6520870555040566229">"Fotoet blev sendt via Beskeder"</string>
-    <string name="message_sent_messages" msgid="6286576951151541098">"Beskeden blev sendt via Beskeder"</string>
+    <!-- no translation found for image_sent_messages (6520870555040566229) -->
+    <skip />
+    <!-- no translation found for message_sent_messages (6286576951151541098) -->
+    <skip />
 </resources>
diff --git a/java/com/android/dialer/callcomposer/res/values-de/strings.xml b/java/com/android/dialer/callcomposer/res/values-de/strings.xml
index d0c88a9..ac7ce4e 100644
--- a/java/com/android/dialer/callcomposer/res/values-de/strings.xml
+++ b/java/com/android/dialer/callcomposer/res/values-de/strings.xml
@@ -33,6 +33,8 @@
     <string name="description_call_composer_camera" msgid="388088245837924914">"Bild aufnehmen"</string>
     <string name="description_call_composer_photo" msgid="6449208314952246454">"Foto auswählen"</string>
     <string name="description_call_composer_message" msgid="9132362446000908550">"Nachricht senden"</string>
-    <string name="image_sent_messages" msgid="6520870555040566229">"Foto über Messages gesendet"</string>
-    <string name="message_sent_messages" msgid="6286576951151541098">"Nachricht über Messages gesendet."</string>
+    <!-- no translation found for image_sent_messages (6520870555040566229) -->
+    <skip />
+    <!-- no translation found for message_sent_messages (6286576951151541098) -->
+    <skip />
 </resources>
diff --git a/java/com/android/dialer/callcomposer/res/values-el/strings.xml b/java/com/android/dialer/callcomposer/res/values-el/strings.xml
index bfa626b..1e7659b 100644
--- a/java/com/android/dialer/callcomposer/res/values-el/strings.xml
+++ b/java/com/android/dialer/callcomposer/res/values-el/strings.xml
@@ -33,6 +33,8 @@
     <string name="description_call_composer_camera" msgid="388088245837924914">"Λήψη φωτογραφίας"</string>
     <string name="description_call_composer_photo" msgid="6449208314952246454">"Επιλογή φωτογραφίας"</string>
     <string name="description_call_composer_message" msgid="9132362446000908550">"Αποστολή μηνύματος"</string>
-    <string name="image_sent_messages" msgid="6520870555040566229">"Η φωτογραφία στάλθηκε μέσω του Messages"</string>
-    <string name="message_sent_messages" msgid="6286576951151541098">"Το μήνυμα στάλθηκε μέσω του Messages"</string>
+    <!-- no translation found for image_sent_messages (6520870555040566229) -->
+    <skip />
+    <!-- no translation found for message_sent_messages (6286576951151541098) -->
+    <skip />
 </resources>
diff --git a/java/com/android/dialer/callcomposer/res/values-en-rAU/strings.xml b/java/com/android/dialer/callcomposer/res/values-en-rAU/strings.xml
index 5e2807b..2b3f7a3 100644
--- a/java/com/android/dialer/callcomposer/res/values-en-rAU/strings.xml
+++ b/java/com/android/dialer/callcomposer/res/values-en-rAU/strings.xml
@@ -33,6 +33,8 @@
     <string name="description_call_composer_camera" msgid="388088245837924914">"Take a picture"</string>
     <string name="description_call_composer_photo" msgid="6449208314952246454">"Choose a photo"</string>
     <string name="description_call_composer_message" msgid="9132362446000908550">"Sending a message"</string>
-    <string name="image_sent_messages" msgid="6520870555040566229">"Photo sent via Messages"</string>
-    <string name="message_sent_messages" msgid="6286576951151541098">"Message sent via Messages"</string>
+    <!-- no translation found for image_sent_messages (6520870555040566229) -->
+    <skip />
+    <!-- no translation found for message_sent_messages (6286576951151541098) -->
+    <skip />
 </resources>
diff --git a/java/com/android/dialer/callcomposer/res/values-en-rGB/strings.xml b/java/com/android/dialer/callcomposer/res/values-en-rGB/strings.xml
index 5e2807b..2b3f7a3 100644
--- a/java/com/android/dialer/callcomposer/res/values-en-rGB/strings.xml
+++ b/java/com/android/dialer/callcomposer/res/values-en-rGB/strings.xml
@@ -33,6 +33,8 @@
     <string name="description_call_composer_camera" msgid="388088245837924914">"Take a picture"</string>
     <string name="description_call_composer_photo" msgid="6449208314952246454">"Choose a photo"</string>
     <string name="description_call_composer_message" msgid="9132362446000908550">"Sending a message"</string>
-    <string name="image_sent_messages" msgid="6520870555040566229">"Photo sent via Messages"</string>
-    <string name="message_sent_messages" msgid="6286576951151541098">"Message sent via Messages"</string>
+    <!-- no translation found for image_sent_messages (6520870555040566229) -->
+    <skip />
+    <!-- no translation found for message_sent_messages (6286576951151541098) -->
+    <skip />
 </resources>
diff --git a/java/com/android/dialer/callcomposer/res/values-en-rIN/strings.xml b/java/com/android/dialer/callcomposer/res/values-en-rIN/strings.xml
index 5e2807b..2b3f7a3 100644
--- a/java/com/android/dialer/callcomposer/res/values-en-rIN/strings.xml
+++ b/java/com/android/dialer/callcomposer/res/values-en-rIN/strings.xml
@@ -33,6 +33,8 @@
     <string name="description_call_composer_camera" msgid="388088245837924914">"Take a picture"</string>
     <string name="description_call_composer_photo" msgid="6449208314952246454">"Choose a photo"</string>
     <string name="description_call_composer_message" msgid="9132362446000908550">"Sending a message"</string>
-    <string name="image_sent_messages" msgid="6520870555040566229">"Photo sent via Messages"</string>
-    <string name="message_sent_messages" msgid="6286576951151541098">"Message sent via Messages"</string>
+    <!-- no translation found for image_sent_messages (6520870555040566229) -->
+    <skip />
+    <!-- no translation found for message_sent_messages (6286576951151541098) -->
+    <skip />
 </resources>
diff --git a/java/com/android/dialer/callcomposer/res/values-es-rUS/strings.xml b/java/com/android/dialer/callcomposer/res/values-es-rUS/strings.xml
index f1d4705..67bac97 100644
--- a/java/com/android/dialer/callcomposer/res/values-es-rUS/strings.xml
+++ b/java/com/android/dialer/callcomposer/res/values-es-rUS/strings.xml
@@ -33,6 +33,8 @@
     <string name="description_call_composer_camera" msgid="388088245837924914">"Tomar una foto"</string>
     <string name="description_call_composer_photo" msgid="6449208314952246454">"Elegir una foto"</string>
     <string name="description_call_composer_message" msgid="9132362446000908550">"Enviar un mensaje"</string>
-    <string name="image_sent_messages" msgid="6520870555040566229">"Foto enviada por Mensajes"</string>
-    <string name="message_sent_messages" msgid="6286576951151541098">"Mensaje de texto enviado por Mensajes"</string>
+    <!-- no translation found for image_sent_messages (6520870555040566229) -->
+    <skip />
+    <!-- no translation found for message_sent_messages (6286576951151541098) -->
+    <skip />
 </resources>
diff --git a/java/com/android/dialer/callcomposer/res/values-es/strings.xml b/java/com/android/dialer/callcomposer/res/values-es/strings.xml
index cba427b..4b87268 100644
--- a/java/com/android/dialer/callcomposer/res/values-es/strings.xml
+++ b/java/com/android/dialer/callcomposer/res/values-es/strings.xml
@@ -33,6 +33,8 @@
     <string name="description_call_composer_camera" msgid="388088245837924914">"Hacer una foto"</string>
     <string name="description_call_composer_photo" msgid="6449208314952246454">"Elegir una foto"</string>
     <string name="description_call_composer_message" msgid="9132362446000908550">"Enviar un mensaje"</string>
-    <string name="image_sent_messages" msgid="6520870555040566229">"Foto enviada a través de Mensajes"</string>
-    <string name="message_sent_messages" msgid="6286576951151541098">"Mensaje enviado a través de Mensajes"</string>
+    <!-- no translation found for image_sent_messages (6520870555040566229) -->
+    <skip />
+    <!-- no translation found for message_sent_messages (6286576951151541098) -->
+    <skip />
 </resources>
diff --git a/java/com/android/dialer/callcomposer/res/values-et/strings.xml b/java/com/android/dialer/callcomposer/res/values-et/strings.xml
index d79ca90..896525d 100644
--- a/java/com/android/dialer/callcomposer/res/values-et/strings.xml
+++ b/java/com/android/dialer/callcomposer/res/values-et/strings.xml
@@ -33,6 +33,8 @@
     <string name="description_call_composer_camera" msgid="388088245837924914">"Pildistamine"</string>
     <string name="description_call_composer_photo" msgid="6449208314952246454">"Foto valimine"</string>
     <string name="description_call_composer_message" msgid="9132362446000908550">"Sõnumi saatmine"</string>
-    <string name="image_sent_messages" msgid="6520870555040566229">"Foto saadeti rakenduse Messages kaudu"</string>
-    <string name="message_sent_messages" msgid="6286576951151541098">"Sõnum saadeti rakenduse Messages kaudu"</string>
+    <!-- no translation found for image_sent_messages (6520870555040566229) -->
+    <skip />
+    <!-- no translation found for message_sent_messages (6286576951151541098) -->
+    <skip />
 </resources>
diff --git a/java/com/android/dialer/callcomposer/res/values-eu/strings.xml b/java/com/android/dialer/callcomposer/res/values-eu/strings.xml
index 32413f9..ce7e296 100644
--- a/java/com/android/dialer/callcomposer/res/values-eu/strings.xml
+++ b/java/com/android/dialer/callcomposer/res/values-eu/strings.xml
@@ -33,6 +33,8 @@
     <string name="description_call_composer_camera" msgid="388088245837924914">"Atera argazki bat"</string>
     <string name="description_call_composer_photo" msgid="6449208314952246454">"Aukeratu argazki bat"</string>
     <string name="description_call_composer_message" msgid="9132362446000908550">"Bidali mezu bat"</string>
-    <string name="image_sent_messages" msgid="6520870555040566229">"Mezuak aplikazioaren bidez bidali da argazkia"</string>
-    <string name="message_sent_messages" msgid="6286576951151541098">"Mezuak aplikazioaren bidez bidali da mezua"</string>
+    <!-- no translation found for image_sent_messages (6520870555040566229) -->
+    <skip />
+    <!-- no translation found for message_sent_messages (6286576951151541098) -->
+    <skip />
 </resources>
diff --git a/java/com/android/dialer/callcomposer/res/values-fa/strings.xml b/java/com/android/dialer/callcomposer/res/values-fa/strings.xml
index a2604a9..6f0c2e5 100644
--- a/java/com/android/dialer/callcomposer/res/values-fa/strings.xml
+++ b/java/com/android/dialer/callcomposer/res/values-fa/strings.xml
@@ -33,6 +33,8 @@
     <string name="description_call_composer_camera" msgid="388088245837924914">"عکس گرفتن"</string>
     <string name="description_call_composer_photo" msgid="6449208314952246454">"انتخاب عکس"</string>
     <string name="description_call_composer_message" msgid="9132362446000908550">"ارسال پیام"</string>
-    <string name="image_sent_messages" msgid="6520870555040566229">"عکس ارسال‌شده ازطریق «پیام‌ها»"</string>
-    <string name="message_sent_messages" msgid="6286576951151541098">"پیام ارسال‌شده ازطریق «پیام‌ها»"</string>
+    <!-- no translation found for image_sent_messages (6520870555040566229) -->
+    <skip />
+    <!-- no translation found for message_sent_messages (6286576951151541098) -->
+    <skip />
 </resources>
diff --git a/java/com/android/dialer/callcomposer/res/values-fi/strings.xml b/java/com/android/dialer/callcomposer/res/values-fi/strings.xml
index 482a36a..ce0786c 100644
--- a/java/com/android/dialer/callcomposer/res/values-fi/strings.xml
+++ b/java/com/android/dialer/callcomposer/res/values-fi/strings.xml
@@ -33,6 +33,8 @@
     <string name="description_call_composer_camera" msgid="388088245837924914">"Ota kuva"</string>
     <string name="description_call_composer_photo" msgid="6449208314952246454">"Valitse kuva"</string>
     <string name="description_call_composer_message" msgid="9132362446000908550">"Lähetä viesti"</string>
-    <string name="image_sent_messages" msgid="6520870555040566229">"Kuva lähetettiin Messages-sovelluksen kautta"</string>
-    <string name="message_sent_messages" msgid="6286576951151541098">"Viesti lähetettiin Messages-sovelluksen kautta"</string>
+    <!-- no translation found for image_sent_messages (6520870555040566229) -->
+    <skip />
+    <!-- no translation found for message_sent_messages (6286576951151541098) -->
+    <skip />
 </resources>
diff --git a/java/com/android/dialer/callcomposer/res/values-fr-rCA/strings.xml b/java/com/android/dialer/callcomposer/res/values-fr-rCA/strings.xml
index be06baa..0451dcf 100644
--- a/java/com/android/dialer/callcomposer/res/values-fr-rCA/strings.xml
+++ b/java/com/android/dialer/callcomposer/res/values-fr-rCA/strings.xml
@@ -33,6 +33,8 @@
     <string name="description_call_composer_camera" msgid="388088245837924914">"Prendre une photo"</string>
     <string name="description_call_composer_photo" msgid="6449208314952246454">"Choisir une photo"</string>
     <string name="description_call_composer_message" msgid="9132362446000908550">"Envoyer un message"</string>
-    <string name="image_sent_messages" msgid="6520870555040566229">"Photo envoyée au moyen de l\'application Messages"</string>
-    <string name="message_sent_messages" msgid="6286576951151541098">"Message envoyé au moyen de l\'application Messages"</string>
+    <!-- no translation found for image_sent_messages (6520870555040566229) -->
+    <skip />
+    <!-- no translation found for message_sent_messages (6286576951151541098) -->
+    <skip />
 </resources>
diff --git a/java/com/android/dialer/callcomposer/res/values-fr/strings.xml b/java/com/android/dialer/callcomposer/res/values-fr/strings.xml
index f56ad7a..50e6194 100644
--- a/java/com/android/dialer/callcomposer/res/values-fr/strings.xml
+++ b/java/com/android/dialer/callcomposer/res/values-fr/strings.xml
@@ -33,6 +33,8 @@
     <string name="description_call_composer_camera" msgid="388088245837924914">"Prendre une photo"</string>
     <string name="description_call_composer_photo" msgid="6449208314952246454">"Choisir une photo"</string>
     <string name="description_call_composer_message" msgid="9132362446000908550">"Envoyer un message"</string>
-    <string name="image_sent_messages" msgid="6520870555040566229">"Photo envoyée via l\'application Messages"</string>
-    <string name="message_sent_messages" msgid="6286576951151541098">"Message envoyé via l\'application Messages"</string>
+    <!-- no translation found for image_sent_messages (6520870555040566229) -->
+    <skip />
+    <!-- no translation found for message_sent_messages (6286576951151541098) -->
+    <skip />
 </resources>
diff --git a/java/com/android/dialer/callcomposer/res/values-gl/strings.xml b/java/com/android/dialer/callcomposer/res/values-gl/strings.xml
index f2a0f15..2ad2c9a 100644
--- a/java/com/android/dialer/callcomposer/res/values-gl/strings.xml
+++ b/java/com/android/dialer/callcomposer/res/values-gl/strings.xml
@@ -33,6 +33,8 @@
     <string name="description_call_composer_camera" msgid="388088245837924914">"Tira unha foto"</string>
     <string name="description_call_composer_photo" msgid="6449208314952246454">"Escolle unha foto"</string>
     <string name="description_call_composer_message" msgid="9132362446000908550">"Envía unha mensaxe"</string>
-    <string name="image_sent_messages" msgid="6520870555040566229">"Foto enviada a través de Mensaxes"</string>
-    <string name="message_sent_messages" msgid="6286576951151541098">"Mensaxe enviada a través de Mensaxes"</string>
+    <!-- no translation found for image_sent_messages (6520870555040566229) -->
+    <skip />
+    <!-- no translation found for message_sent_messages (6286576951151541098) -->
+    <skip />
 </resources>
diff --git a/java/com/android/dialer/callcomposer/res/values-gu/strings.xml b/java/com/android/dialer/callcomposer/res/values-gu/strings.xml
index 771d148..8c9a521 100644
--- a/java/com/android/dialer/callcomposer/res/values-gu/strings.xml
+++ b/java/com/android/dialer/callcomposer/res/values-gu/strings.xml
@@ -33,6 +33,8 @@
     <string name="description_call_composer_camera" msgid="388088245837924914">"એક ચિત્ર લો"</string>
     <string name="description_call_composer_photo" msgid="6449208314952246454">"ફોટો પસંદ કરો"</string>
     <string name="description_call_composer_message" msgid="9132362446000908550">"એક સંદેશ મોકલો"</string>
-    <string name="image_sent_messages" msgid="6520870555040566229">"Messages મારફતે ફોટો મોકલ્યો"</string>
-    <string name="message_sent_messages" msgid="6286576951151541098">"Messages મારફતે સંદેશ મોકલ્યો"</string>
+    <!-- no translation found for image_sent_messages (6520870555040566229) -->
+    <skip />
+    <!-- no translation found for message_sent_messages (6286576951151541098) -->
+    <skip />
 </resources>
diff --git a/java/com/android/dialer/callcomposer/res/values-hi/strings.xml b/java/com/android/dialer/callcomposer/res/values-hi/strings.xml
index 4de9a6d..8d4f91e 100644
--- a/java/com/android/dialer/callcomposer/res/values-hi/strings.xml
+++ b/java/com/android/dialer/callcomposer/res/values-hi/strings.xml
@@ -33,6 +33,8 @@
     <string name="description_call_composer_camera" msgid="388088245837924914">"चित्र लें"</string>
     <string name="description_call_composer_photo" msgid="6449208314952246454">"एक फ़ोटो चुनें"</string>
     <string name="description_call_composer_message" msgid="9132362446000908550">"संदेश भेजें"</string>
-    <string name="image_sent_messages" msgid="6520870555040566229">"संदेश ऐप्लिकेशन के ज़रिए फ़ोटो भेजा गया"</string>
-    <string name="message_sent_messages" msgid="6286576951151541098">"संदेश ऐप्लिकेशन के ज़रिए संदेश भेजा गया"</string>
+    <!-- no translation found for image_sent_messages (6520870555040566229) -->
+    <skip />
+    <!-- no translation found for message_sent_messages (6286576951151541098) -->
+    <skip />
 </resources>
diff --git a/java/com/android/dialer/callcomposer/res/values-hr/strings.xml b/java/com/android/dialer/callcomposer/res/values-hr/strings.xml
index 4bea73c..cc3219d 100644
--- a/java/com/android/dialer/callcomposer/res/values-hr/strings.xml
+++ b/java/com/android/dialer/callcomposer/res/values-hr/strings.xml
@@ -33,6 +33,8 @@
     <string name="description_call_composer_camera" msgid="388088245837924914">"Snimi fotografiju"</string>
     <string name="description_call_composer_photo" msgid="6449208314952246454">"Odaberi fotografiju"</string>
     <string name="description_call_composer_message" msgid="9132362446000908550">"Pošalji poruku"</string>
-    <string name="image_sent_messages" msgid="6520870555040566229">"Fotografija poslana putem Poruka"</string>
-    <string name="message_sent_messages" msgid="6286576951151541098">"Poruka poslana putem Poruka"</string>
+    <!-- no translation found for image_sent_messages (6520870555040566229) -->
+    <skip />
+    <!-- no translation found for message_sent_messages (6286576951151541098) -->
+    <skip />
 </resources>
diff --git a/java/com/android/dialer/callcomposer/res/values-hu/strings.xml b/java/com/android/dialer/callcomposer/res/values-hu/strings.xml
index 2a590e0..b222c53 100644
--- a/java/com/android/dialer/callcomposer/res/values-hu/strings.xml
+++ b/java/com/android/dialer/callcomposer/res/values-hu/strings.xml
@@ -33,6 +33,8 @@
     <string name="description_call_composer_camera" msgid="388088245837924914">"Kép készítése"</string>
     <string name="description_call_composer_photo" msgid="6449208314952246454">"Fotó kiválasztása"</string>
     <string name="description_call_composer_message" msgid="9132362446000908550">"Üzenet küldése"</string>
-    <string name="image_sent_messages" msgid="6520870555040566229">"Fotó elküldve a Messages alkalmazásban"</string>
-    <string name="message_sent_messages" msgid="6286576951151541098">"Üzenet elküldve a Messages alkalmazásban"</string>
+    <!-- no translation found for image_sent_messages (6520870555040566229) -->
+    <skip />
+    <!-- no translation found for message_sent_messages (6286576951151541098) -->
+    <skip />
 </resources>
diff --git a/java/com/android/dialer/callcomposer/res/values-hy/strings.xml b/java/com/android/dialer/callcomposer/res/values-hy/strings.xml
index 1b55234..01635f6 100644
--- a/java/com/android/dialer/callcomposer/res/values-hy/strings.xml
+++ b/java/com/android/dialer/callcomposer/res/values-hy/strings.xml
@@ -33,6 +33,8 @@
     <string name="description_call_composer_camera" msgid="388088245837924914">"Լուսանկարել"</string>
     <string name="description_call_composer_photo" msgid="6449208314952246454">"Ընտրել լուսանկար"</string>
     <string name="description_call_composer_message" msgid="9132362446000908550">"Ուղարկել հաղորդագրություն"</string>
-    <string name="image_sent_messages" msgid="6520870555040566229">"Լուսանկարն ուղարկվել է Messages-ի միջոցով"</string>
-    <string name="message_sent_messages" msgid="6286576951151541098">"Հաղորդագրությունն ուղարկվել է Messages-ի միջոցով"</string>
+    <!-- no translation found for image_sent_messages (6520870555040566229) -->
+    <skip />
+    <!-- no translation found for message_sent_messages (6286576951151541098) -->
+    <skip />
 </resources>
diff --git a/java/com/android/dialer/callcomposer/res/values-in/strings.xml b/java/com/android/dialer/callcomposer/res/values-in/strings.xml
index 7983c4d..4c6d844 100644
--- a/java/com/android/dialer/callcomposer/res/values-in/strings.xml
+++ b/java/com/android/dialer/callcomposer/res/values-in/strings.xml
@@ -33,6 +33,8 @@
     <string name="description_call_composer_camera" msgid="388088245837924914">"Jepret"</string>
     <string name="description_call_composer_photo" msgid="6449208314952246454">"Pilih foto"</string>
     <string name="description_call_composer_message" msgid="9132362446000908550">"Mengirim pesan"</string>
-    <string name="image_sent_messages" msgid="6520870555040566229">"Foto dikirim lewat Message"</string>
-    <string name="message_sent_messages" msgid="6286576951151541098">"Pesan dikirim lewat Message"</string>
+    <!-- no translation found for image_sent_messages (6520870555040566229) -->
+    <skip />
+    <!-- no translation found for message_sent_messages (6286576951151541098) -->
+    <skip />
 </resources>
diff --git a/java/com/android/dialer/callcomposer/res/values-is/strings.xml b/java/com/android/dialer/callcomposer/res/values-is/strings.xml
index 3bf4a6b..d951edd 100644
--- a/java/com/android/dialer/callcomposer/res/values-is/strings.xml
+++ b/java/com/android/dialer/callcomposer/res/values-is/strings.xml
@@ -33,6 +33,8 @@
     <string name="description_call_composer_camera" msgid="388088245837924914">"Taka mynd"</string>
     <string name="description_call_composer_photo" msgid="6449208314952246454">"Velja mynd"</string>
     <string name="description_call_composer_message" msgid="9132362446000908550">"Senda skilaboð"</string>
-    <string name="image_sent_messages" msgid="6520870555040566229">"Mynd send með Messages"</string>
-    <string name="message_sent_messages" msgid="6286576951151541098">"Skilaboð send með Messages"</string>
+    <!-- no translation found for image_sent_messages (6520870555040566229) -->
+    <skip />
+    <!-- no translation found for message_sent_messages (6286576951151541098) -->
+    <skip />
 </resources>
diff --git a/java/com/android/dialer/callcomposer/res/values-it/strings.xml b/java/com/android/dialer/callcomposer/res/values-it/strings.xml
index 343dd84..9d26b2c 100644
--- a/java/com/android/dialer/callcomposer/res/values-it/strings.xml
+++ b/java/com/android/dialer/callcomposer/res/values-it/strings.xml
@@ -33,6 +33,8 @@
     <string name="description_call_composer_camera" msgid="388088245837924914">"Scatta una foto"</string>
     <string name="description_call_composer_photo" msgid="6449208314952246454">"Scegli una foto"</string>
     <string name="description_call_composer_message" msgid="9132362446000908550">"Invia un messaggio"</string>
-    <string name="image_sent_messages" msgid="6520870555040566229">"Foto inviata tramite Messaggi"</string>
-    <string name="message_sent_messages" msgid="6286576951151541098">"Messaggio inviato tramite Messaggi"</string>
+    <!-- no translation found for image_sent_messages (6520870555040566229) -->
+    <skip />
+    <!-- no translation found for message_sent_messages (6286576951151541098) -->
+    <skip />
 </resources>
diff --git a/java/com/android/dialer/callcomposer/res/values-iw/strings.xml b/java/com/android/dialer/callcomposer/res/values-iw/strings.xml
index 24c6203..26e7daf 100644
--- a/java/com/android/dialer/callcomposer/res/values-iw/strings.xml
+++ b/java/com/android/dialer/callcomposer/res/values-iw/strings.xml
@@ -33,6 +33,8 @@
     <string name="description_call_composer_camera" msgid="388088245837924914">"צילום תמונה"</string>
     <string name="description_call_composer_photo" msgid="6449208314952246454">"בחירת תמונה"</string>
     <string name="description_call_composer_message" msgid="9132362446000908550">"שליחת הודעה"</string>
-    <string name="image_sent_messages" msgid="6520870555040566229">"‏התמונה נשלחה דרך אפליקציית Messages"</string>
-    <string name="message_sent_messages" msgid="6286576951151541098">"‏ההודעה נשלחה דרך אפליקציית Messages"</string>
+    <!-- no translation found for image_sent_messages (6520870555040566229) -->
+    <skip />
+    <!-- no translation found for message_sent_messages (6286576951151541098) -->
+    <skip />
 </resources>
diff --git a/java/com/android/dialer/callcomposer/res/values-ja/strings.xml b/java/com/android/dialer/callcomposer/res/values-ja/strings.xml
index 33f48c9..96eaea5 100644
--- a/java/com/android/dialer/callcomposer/res/values-ja/strings.xml
+++ b/java/com/android/dialer/callcomposer/res/values-ja/strings.xml
@@ -33,6 +33,8 @@
     <string name="description_call_composer_camera" msgid="388088245837924914">"画像を撮影します"</string>
     <string name="description_call_composer_photo" msgid="6449208314952246454">"写真を選択します"</string>
     <string name="description_call_composer_message" msgid="9132362446000908550">"メッセージを送信します"</string>
-    <string name="image_sent_messages" msgid="6520870555040566229">"Android メッセージで写真が送信されました"</string>
-    <string name="message_sent_messages" msgid="6286576951151541098">"Android メッセージでメッセージが送信されました"</string>
+    <!-- no translation found for image_sent_messages (6520870555040566229) -->
+    <skip />
+    <!-- no translation found for message_sent_messages (6286576951151541098) -->
+    <skip />
 </resources>
diff --git a/java/com/android/dialer/callcomposer/res/values-ka/strings.xml b/java/com/android/dialer/callcomposer/res/values-ka/strings.xml
index 65084f3..0cef94d 100644
--- a/java/com/android/dialer/callcomposer/res/values-ka/strings.xml
+++ b/java/com/android/dialer/callcomposer/res/values-ka/strings.xml
@@ -33,6 +33,8 @@
     <string name="description_call_composer_camera" msgid="388088245837924914">"სურათის გადაღება"</string>
     <string name="description_call_composer_photo" msgid="6449208314952246454">"ფოტოს არჩევა"</string>
     <string name="description_call_composer_message" msgid="9132362446000908550">"შეტყობინების გაგზავნა"</string>
-    <string name="image_sent_messages" msgid="6520870555040566229">"ფოტო გაიგზავნა Messages აპიდან"</string>
-    <string name="message_sent_messages" msgid="6286576951151541098">"შეტყობინება გაიგზავნა Messages აპიდან"</string>
+    <!-- no translation found for image_sent_messages (6520870555040566229) -->
+    <skip />
+    <!-- no translation found for message_sent_messages (6286576951151541098) -->
+    <skip />
 </resources>
diff --git a/java/com/android/dialer/callcomposer/res/values-kk/strings.xml b/java/com/android/dialer/callcomposer/res/values-kk/strings.xml
index bf41736..c95fb7b 100644
--- a/java/com/android/dialer/callcomposer/res/values-kk/strings.xml
+++ b/java/com/android/dialer/callcomposer/res/values-kk/strings.xml
@@ -33,6 +33,8 @@
     <string name="description_call_composer_camera" msgid="388088245837924914">"Суретке түсіру"</string>
     <string name="description_call_composer_photo" msgid="6449208314952246454">"Суретті таңдау"</string>
     <string name="description_call_composer_message" msgid="9132362446000908550">"Хабар жіберу"</string>
-    <string name="image_sent_messages" msgid="6520870555040566229">"Сурет Messages арқылы жіберілді"</string>
-    <string name="message_sent_messages" msgid="6286576951151541098">"Хабар Messages арқылы жіберілді"</string>
+    <!-- no translation found for image_sent_messages (6520870555040566229) -->
+    <skip />
+    <!-- no translation found for message_sent_messages (6286576951151541098) -->
+    <skip />
 </resources>
diff --git a/java/com/android/dialer/callcomposer/res/values-km/strings.xml b/java/com/android/dialer/callcomposer/res/values-km/strings.xml
index 10c8d52..66f82c5 100644
--- a/java/com/android/dialer/callcomposer/res/values-km/strings.xml
+++ b/java/com/android/dialer/callcomposer/res/values-km/strings.xml
@@ -33,6 +33,8 @@
     <string name="description_call_composer_camera" msgid="388088245837924914">"ថតរូប"</string>
     <string name="description_call_composer_photo" msgid="6449208314952246454">"ជ្រើសរើស​រូបថត"</string>
     <string name="description_call_composer_message" msgid="9132362446000908550">"ផ្ញើសារ"</string>
-    <string name="image_sent_messages" msgid="6520870555040566229">"រូបថត​ដែល​បាន​ផ្ញើ​តាមរយៈ Messages"</string>
-    <string name="message_sent_messages" msgid="6286576951151541098">"សារ​ដែល​បាន​ផ្ញើ​តាមរយៈ Messages"</string>
+    <!-- no translation found for image_sent_messages (6520870555040566229) -->
+    <skip />
+    <!-- no translation found for message_sent_messages (6286576951151541098) -->
+    <skip />
 </resources>
diff --git a/java/com/android/dialer/callcomposer/res/values-kn/strings.xml b/java/com/android/dialer/callcomposer/res/values-kn/strings.xml
index 3776d9d..7bb1e48 100644
--- a/java/com/android/dialer/callcomposer/res/values-kn/strings.xml
+++ b/java/com/android/dialer/callcomposer/res/values-kn/strings.xml
@@ -33,6 +33,8 @@
     <string name="description_call_composer_camera" msgid="388088245837924914">"ಚಿತ್ರ ತೆಗೆದುಕೊಳ್ಳಿ"</string>
     <string name="description_call_composer_photo" msgid="6449208314952246454">"ಒಂದು ಫೋಟೋ ಆಯ್ಕೆಮಾಡಿ"</string>
     <string name="description_call_composer_message" msgid="9132362446000908550">"ಸಂದೇಶ ಕಳುಹಿಸಿ"</string>
-    <string name="image_sent_messages" msgid="6520870555040566229">"ಸಂದೇಶಗಳ ಮೂಲಕ ಕಳುಹಿಸಲಾದ ಫೋಟೋ"</string>
-    <string name="message_sent_messages" msgid="6286576951151541098">"ಸಂದೇಶಗಳ ಮೂಲಕ ಕಳುಹಿಸಲಾದ ಸಂದೇಶ"</string>
+    <!-- no translation found for image_sent_messages (6520870555040566229) -->
+    <skip />
+    <!-- no translation found for message_sent_messages (6286576951151541098) -->
+    <skip />
 </resources>
diff --git a/java/com/android/dialer/callcomposer/res/values-ko/strings.xml b/java/com/android/dialer/callcomposer/res/values-ko/strings.xml
index 0e6820e..1052d55 100644
--- a/java/com/android/dialer/callcomposer/res/values-ko/strings.xml
+++ b/java/com/android/dialer/callcomposer/res/values-ko/strings.xml
@@ -33,6 +33,8 @@
     <string name="description_call_composer_camera" msgid="388088245837924914">"사진 촬영"</string>
     <string name="description_call_composer_photo" msgid="6449208314952246454">"사진 선택"</string>
     <string name="description_call_composer_message" msgid="9132362446000908550">"메시지 보내기"</string>
-    <string name="image_sent_messages" msgid="6520870555040566229">"메시지를 통해 전송된 사진"</string>
-    <string name="message_sent_messages" msgid="6286576951151541098">"메시지를 통해 전송된 메시지"</string>
+    <!-- no translation found for image_sent_messages (6520870555040566229) -->
+    <skip />
+    <!-- no translation found for message_sent_messages (6286576951151541098) -->
+    <skip />
 </resources>
diff --git a/java/com/android/dialer/callcomposer/res/values-ky/strings.xml b/java/com/android/dialer/callcomposer/res/values-ky/strings.xml
index f96ce4d..6e5889d 100644
--- a/java/com/android/dialer/callcomposer/res/values-ky/strings.xml
+++ b/java/com/android/dialer/callcomposer/res/values-ky/strings.xml
@@ -33,6 +33,8 @@
     <string name="description_call_composer_camera" msgid="388088245837924914">"Сүрөткө тартуу"</string>
     <string name="description_call_composer_photo" msgid="6449208314952246454">"Сүрөттү тандоо"</string>
     <string name="description_call_composer_message" msgid="9132362446000908550">"Билдирүү жөнөтүү"</string>
-    <string name="image_sent_messages" msgid="6520870555040566229">"Сүрөт Android жазышуулары колдонмосу аркылуу жөнөтүлдү"</string>
-    <string name="message_sent_messages" msgid="6286576951151541098">"Билдирүү Android жазышуулары колдонмосу аркылуу жөнөтүлдү"</string>
+    <!-- no translation found for image_sent_messages (6520870555040566229) -->
+    <skip />
+    <!-- no translation found for message_sent_messages (6286576951151541098) -->
+    <skip />
 </resources>
diff --git a/java/com/android/dialer/callcomposer/res/values-lo/strings.xml b/java/com/android/dialer/callcomposer/res/values-lo/strings.xml
index d14f03d..87d72db 100644
--- a/java/com/android/dialer/callcomposer/res/values-lo/strings.xml
+++ b/java/com/android/dialer/callcomposer/res/values-lo/strings.xml
@@ -33,6 +33,8 @@
     <string name="description_call_composer_camera" msgid="388088245837924914">"ຖ່າຍຮູບ"</string>
     <string name="description_call_composer_photo" msgid="6449208314952246454">"ເລືອກຮູບພາບ..."</string>
     <string name="description_call_composer_message" msgid="9132362446000908550">"ສົ່ງຂໍ້ຄວາມ"</string>
-    <string name="image_sent_messages" msgid="6520870555040566229">"ສົ່ງຮູບຜ່ານ Messages ແລ້ວ"</string>
-    <string name="message_sent_messages" msgid="6286576951151541098">"ສົ່ງຮູບຜ່ານ Messages ແລ້ວ"</string>
+    <!-- no translation found for image_sent_messages (6520870555040566229) -->
+    <skip />
+    <!-- no translation found for message_sent_messages (6286576951151541098) -->
+    <skip />
 </resources>
diff --git a/java/com/android/dialer/callcomposer/res/values-lt/strings.xml b/java/com/android/dialer/callcomposer/res/values-lt/strings.xml
index 4453bcd..07fe444 100644
--- a/java/com/android/dialer/callcomposer/res/values-lt/strings.xml
+++ b/java/com/android/dialer/callcomposer/res/values-lt/strings.xml
@@ -33,6 +33,8 @@
     <string name="description_call_composer_camera" msgid="388088245837924914">"Fotografuoti"</string>
     <string name="description_call_composer_photo" msgid="6449208314952246454">"Pasirinkti nuotrauką"</string>
     <string name="description_call_composer_message" msgid="9132362446000908550">"Siųsti pranešimą"</string>
-    <string name="image_sent_messages" msgid="6520870555040566229">"Nuotrauka išsiųsta naudojant „Messages“"</string>
-    <string name="message_sent_messages" msgid="6286576951151541098">"Pranešimas išsiųstas naudojant „Messages“"</string>
+    <!-- no translation found for image_sent_messages (6520870555040566229) -->
+    <skip />
+    <!-- no translation found for message_sent_messages (6286576951151541098) -->
+    <skip />
 </resources>
diff --git a/java/com/android/dialer/callcomposer/res/values-lv/strings.xml b/java/com/android/dialer/callcomposer/res/values-lv/strings.xml
index 80e5214..9a3efc7 100644
--- a/java/com/android/dialer/callcomposer/res/values-lv/strings.xml
+++ b/java/com/android/dialer/callcomposer/res/values-lv/strings.xml
@@ -33,6 +33,8 @@
     <string name="description_call_composer_camera" msgid="388088245837924914">"Uzņemt attēlu"</string>
     <string name="description_call_composer_photo" msgid="6449208314952246454">"Izvēlēties fotoattēlu"</string>
     <string name="description_call_composer_message" msgid="9132362446000908550">"Sūtīt ziņojumu"</string>
-    <string name="image_sent_messages" msgid="6520870555040566229">"Fotoattēls nosūtīts, izmantojot lietotni Ziņojumi"</string>
-    <string name="message_sent_messages" msgid="6286576951151541098">"Ziņojums nosūtīts, izmantojot lietotni Ziņojumi"</string>
+    <!-- no translation found for image_sent_messages (6520870555040566229) -->
+    <skip />
+    <!-- no translation found for message_sent_messages (6286576951151541098) -->
+    <skip />
 </resources>
diff --git a/java/com/android/dialer/callcomposer/res/values-mk/strings.xml b/java/com/android/dialer/callcomposer/res/values-mk/strings.xml
index bd8f0c8..218c23d 100644
--- a/java/com/android/dialer/callcomposer/res/values-mk/strings.xml
+++ b/java/com/android/dialer/callcomposer/res/values-mk/strings.xml
@@ -33,6 +33,8 @@
     <string name="description_call_composer_camera" msgid="388088245837924914">"Фотографирајте"</string>
     <string name="description_call_composer_photo" msgid="6449208314952246454">"Изберете фотографија"</string>
     <string name="description_call_composer_message" msgid="9132362446000908550">"Испратете порака"</string>
-    <string name="image_sent_messages" msgid="6520870555040566229">"Фотографијата е испратена преку Messages"</string>
-    <string name="message_sent_messages" msgid="6286576951151541098">"Пораката е испратена преку Messages"</string>
+    <!-- no translation found for image_sent_messages (6520870555040566229) -->
+    <skip />
+    <!-- no translation found for message_sent_messages (6286576951151541098) -->
+    <skip />
 </resources>
diff --git a/java/com/android/dialer/callcomposer/res/values-ml/strings.xml b/java/com/android/dialer/callcomposer/res/values-ml/strings.xml
index e4931cb..0e58cbb 100644
--- a/java/com/android/dialer/callcomposer/res/values-ml/strings.xml
+++ b/java/com/android/dialer/callcomposer/res/values-ml/strings.xml
@@ -33,6 +33,8 @@
     <string name="description_call_composer_camera" msgid="388088245837924914">"ഒരു ചിത്രമെടുക്കുക"</string>
     <string name="description_call_composer_photo" msgid="6449208314952246454">"ഒരു ഫോട്ടോ തിരഞ്ഞെടുക്കുക"</string>
     <string name="description_call_composer_message" msgid="9132362446000908550">"ഒരു സന്ദേശം അയയ്‌ക്കുക"</string>
-    <string name="image_sent_messages" msgid="6520870555040566229">"മെസേജ് വഴി ഫോട്ടോ അയച്ചു"</string>
-    <string name="message_sent_messages" msgid="6286576951151541098">"മെസേജ് വഴി സന്ദേശം അയച്ചു"</string>
+    <!-- no translation found for image_sent_messages (6520870555040566229) -->
+    <skip />
+    <!-- no translation found for message_sent_messages (6286576951151541098) -->
+    <skip />
 </resources>
diff --git a/java/com/android/dialer/callcomposer/res/values-mn/strings.xml b/java/com/android/dialer/callcomposer/res/values-mn/strings.xml
index 62a7750..8728740 100644
--- a/java/com/android/dialer/callcomposer/res/values-mn/strings.xml
+++ b/java/com/android/dialer/callcomposer/res/values-mn/strings.xml
@@ -33,6 +33,8 @@
     <string name="description_call_composer_camera" msgid="388088245837924914">"Зураг авах"</string>
     <string name="description_call_composer_photo" msgid="6449208314952246454">"Зураг сонгоно уу"</string>
     <string name="description_call_composer_message" msgid="9132362446000908550">"Зурвас илгээх"</string>
-    <string name="image_sent_messages" msgid="6520870555040566229">"Зургийг Зурвасаар дамжуулан илгээсэн"</string>
-    <string name="message_sent_messages" msgid="6286576951151541098">"Зурвасыг Зурвасаар дамжуулан илгээсэн"</string>
+    <!-- no translation found for image_sent_messages (6520870555040566229) -->
+    <skip />
+    <!-- no translation found for message_sent_messages (6286576951151541098) -->
+    <skip />
 </resources>
diff --git a/java/com/android/dialer/callcomposer/res/values-mr/strings.xml b/java/com/android/dialer/callcomposer/res/values-mr/strings.xml
index e7a7190..3ca51a2 100644
--- a/java/com/android/dialer/callcomposer/res/values-mr/strings.xml
+++ b/java/com/android/dialer/callcomposer/res/values-mr/strings.xml
@@ -33,6 +33,8 @@
     <string name="description_call_composer_camera" msgid="388088245837924914">"एक फोटो घ्या"</string>
     <string name="description_call_composer_photo" msgid="6449208314952246454">"फोटो निवडा"</string>
     <string name="description_call_composer_message" msgid="9132362446000908550">"एक संदेश पाठवा"</string>
-    <string name="image_sent_messages" msgid="6520870555040566229">"Messages द्वारे फोटो पाठविला"</string>
-    <string name="message_sent_messages" msgid="6286576951151541098">"Messages द्वारे संदेश पाठविला"</string>
+    <!-- no translation found for image_sent_messages (6520870555040566229) -->
+    <skip />
+    <!-- no translation found for message_sent_messages (6286576951151541098) -->
+    <skip />
 </resources>
diff --git a/java/com/android/dialer/callcomposer/res/values-ms/strings.xml b/java/com/android/dialer/callcomposer/res/values-ms/strings.xml
index 39ed6fa..e722b88 100644
--- a/java/com/android/dialer/callcomposer/res/values-ms/strings.xml
+++ b/java/com/android/dialer/callcomposer/res/values-ms/strings.xml
@@ -33,6 +33,8 @@
     <string name="description_call_composer_camera" msgid="388088245837924914">"Ambil gambar"</string>
     <string name="description_call_composer_photo" msgid="6449208314952246454">"Pilih foto"</string>
     <string name="description_call_composer_message" msgid="9132362446000908550">"Hantar mesej"</string>
-    <string name="image_sent_messages" msgid="6520870555040566229">"Photo dihantar melalui Mesej"</string>
-    <string name="message_sent_messages" msgid="6286576951151541098">"Mesej dihantar melalui Mesej"</string>
+    <!-- no translation found for image_sent_messages (6520870555040566229) -->
+    <skip />
+    <!-- no translation found for message_sent_messages (6286576951151541098) -->
+    <skip />
 </resources>
diff --git a/java/com/android/dialer/callcomposer/res/values-my/strings.xml b/java/com/android/dialer/callcomposer/res/values-my/strings.xml
index a20dabc..b49b1ea 100644
--- a/java/com/android/dialer/callcomposer/res/values-my/strings.xml
+++ b/java/com/android/dialer/callcomposer/res/values-my/strings.xml
@@ -33,6 +33,8 @@
     <string name="description_call_composer_camera" msgid="388088245837924914">"ဓာတ်ပုံတစ်ပုံ ရိုက်ရန်"</string>
     <string name="description_call_composer_photo" msgid="6449208314952246454">"ဓာတ်ပုံတစ်ပုံ ရွေးရန်"</string>
     <string name="description_call_composer_message" msgid="9132362446000908550">"မက်ဆေ့ဂျ်ပို့ရန်"</string>
-    <string name="image_sent_messages" msgid="6520870555040566229">"မက်ဆေ့ဂျ်များမှတစ်ဆင့် ဓာတ်ပုံပို့ပြီးပါပြီ"</string>
-    <string name="message_sent_messages" msgid="6286576951151541098">"မက်ဆေ့ဂျ်များမှတစ်ဆင့် မက်ဆေ့ဂျ်ပို့ပြီးပါပြီ"</string>
+    <!-- no translation found for image_sent_messages (6520870555040566229) -->
+    <skip />
+    <!-- no translation found for message_sent_messages (6286576951151541098) -->
+    <skip />
 </resources>
diff --git a/java/com/android/dialer/callcomposer/res/values-nb/strings.xml b/java/com/android/dialer/callcomposer/res/values-nb/strings.xml
index cbb1acc..07caf6e 100644
--- a/java/com/android/dialer/callcomposer/res/values-nb/strings.xml
+++ b/java/com/android/dialer/callcomposer/res/values-nb/strings.xml
@@ -33,6 +33,8 @@
     <string name="description_call_composer_camera" msgid="388088245837924914">"Ta et bilde"</string>
     <string name="description_call_composer_photo" msgid="6449208314952246454">"Velg et bilde"</string>
     <string name="description_call_composer_message" msgid="9132362446000908550">"Send en melding"</string>
-    <string name="image_sent_messages" msgid="6520870555040566229">"Bildet er sendt via Messages"</string>
-    <string name="message_sent_messages" msgid="6286576951151541098">"Meldingen er sendt via Messages"</string>
+    <!-- no translation found for image_sent_messages (6520870555040566229) -->
+    <skip />
+    <!-- no translation found for message_sent_messages (6286576951151541098) -->
+    <skip />
 </resources>
diff --git a/java/com/android/dialer/callcomposer/res/values-ne/strings.xml b/java/com/android/dialer/callcomposer/res/values-ne/strings.xml
index f084dc9..03eac6c 100644
--- a/java/com/android/dialer/callcomposer/res/values-ne/strings.xml
+++ b/java/com/android/dialer/callcomposer/res/values-ne/strings.xml
@@ -33,6 +33,8 @@
     <string name="description_call_composer_camera" msgid="388088245837924914">"तस्बिर खिच्नुहोस्"</string>
     <string name="description_call_composer_photo" msgid="6449208314952246454">"तस्बिर छनौट गर्नुहोस्"</string>
     <string name="description_call_composer_message" msgid="9132362446000908550">"सन्देश पठाउनुहोस्"</string>
-    <string name="image_sent_messages" msgid="6520870555040566229">"Messages मार्फत पठाइएको तस्बिर"</string>
-    <string name="message_sent_messages" msgid="6286576951151541098">"Messages मार्फत पठाइएको सन्देश"</string>
+    <!-- no translation found for image_sent_messages (6520870555040566229) -->
+    <skip />
+    <!-- no translation found for message_sent_messages (6286576951151541098) -->
+    <skip />
 </resources>
diff --git a/java/com/android/dialer/callcomposer/res/values-nl/strings.xml b/java/com/android/dialer/callcomposer/res/values-nl/strings.xml
index 5511427..7a73d93 100644
--- a/java/com/android/dialer/callcomposer/res/values-nl/strings.xml
+++ b/java/com/android/dialer/callcomposer/res/values-nl/strings.xml
@@ -33,6 +33,8 @@
     <string name="description_call_composer_camera" msgid="388088245837924914">"Een foto nemen"</string>
     <string name="description_call_composer_photo" msgid="6449208314952246454">"Een foto kiezen"</string>
     <string name="description_call_composer_message" msgid="9132362446000908550">"Een bericht verzenden"</string>
-    <string name="image_sent_messages" msgid="6520870555040566229">"Foto verzonden via Berichten"</string>
-    <string name="message_sent_messages" msgid="6286576951151541098">"Bericht verzonden via Berichten"</string>
+    <!-- no translation found for image_sent_messages (6520870555040566229) -->
+    <skip />
+    <!-- no translation found for message_sent_messages (6286576951151541098) -->
+    <skip />
 </resources>
diff --git a/java/com/android/dialer/callcomposer/res/values-no/strings.xml b/java/com/android/dialer/callcomposer/res/values-no/strings.xml
index cbb1acc..07caf6e 100644
--- a/java/com/android/dialer/callcomposer/res/values-no/strings.xml
+++ b/java/com/android/dialer/callcomposer/res/values-no/strings.xml
@@ -33,6 +33,8 @@
     <string name="description_call_composer_camera" msgid="388088245837924914">"Ta et bilde"</string>
     <string name="description_call_composer_photo" msgid="6449208314952246454">"Velg et bilde"</string>
     <string name="description_call_composer_message" msgid="9132362446000908550">"Send en melding"</string>
-    <string name="image_sent_messages" msgid="6520870555040566229">"Bildet er sendt via Messages"</string>
-    <string name="message_sent_messages" msgid="6286576951151541098">"Meldingen er sendt via Messages"</string>
+    <!-- no translation found for image_sent_messages (6520870555040566229) -->
+    <skip />
+    <!-- no translation found for message_sent_messages (6286576951151541098) -->
+    <skip />
 </resources>
diff --git a/java/com/android/dialer/callcomposer/res/values-pa/strings.xml b/java/com/android/dialer/callcomposer/res/values-pa/strings.xml
index 5c20adc..25de393 100644
--- a/java/com/android/dialer/callcomposer/res/values-pa/strings.xml
+++ b/java/com/android/dialer/callcomposer/res/values-pa/strings.xml
@@ -33,6 +33,8 @@
     <string name="description_call_composer_camera" msgid="388088245837924914">"ਇੱਕ ਤਸਵੀਰ ਖਿੱਚੋ"</string>
     <string name="description_call_composer_photo" msgid="6449208314952246454">"ਇੱਕ ਫ਼ੋਟੋ ਚੁਣੋ"</string>
     <string name="description_call_composer_message" msgid="9132362446000908550">"ਇੱਕ ਸੁਨੇਹਾ ਭੇਜੋ"</string>
-    <string name="image_sent_messages" msgid="6520870555040566229">"ਫ਼ੋਟੋ &amp;quot;ਸੁਨੇਹੇ&amp;quot; ਐਪ ਰਾਹੀਂ ਭੇਜੀ ਗਈ"</string>
-    <string name="message_sent_messages" msgid="6286576951151541098">"ਸੁਨੇਹਾ &amp;quot;ਸੁਨੇਹੇ&amp;quot; ਐਪ ਰਾਹੀਂ ਭੇਜਿਆ ਗਿਆ"</string>
+    <!-- no translation found for image_sent_messages (6520870555040566229) -->
+    <skip />
+    <!-- no translation found for message_sent_messages (6286576951151541098) -->
+    <skip />
 </resources>
diff --git a/java/com/android/dialer/callcomposer/res/values-pl/strings.xml b/java/com/android/dialer/callcomposer/res/values-pl/strings.xml
index eea7496..b65ba23 100644
--- a/java/com/android/dialer/callcomposer/res/values-pl/strings.xml
+++ b/java/com/android/dialer/callcomposer/res/values-pl/strings.xml
@@ -33,6 +33,8 @@
     <string name="description_call_composer_camera" msgid="388088245837924914">"Zrób zdjęcie"</string>
     <string name="description_call_composer_photo" msgid="6449208314952246454">"Wybierz zdjęcie"</string>
     <string name="description_call_composer_message" msgid="9132362446000908550">"Wyślij wiadomość"</string>
-    <string name="image_sent_messages" msgid="6520870555040566229">"Zdjęcie zostało wysłane przez Wiadomości"</string>
-    <string name="message_sent_messages" msgid="6286576951151541098">"Tekst został wysłany przez Wiadomości"</string>
+    <!-- no translation found for image_sent_messages (6520870555040566229) -->
+    <skip />
+    <!-- no translation found for message_sent_messages (6286576951151541098) -->
+    <skip />
 </resources>
diff --git a/java/com/android/dialer/callcomposer/res/values-pt-rBR/strings.xml b/java/com/android/dialer/callcomposer/res/values-pt-rBR/strings.xml
index 026cfac..669e850 100644
--- a/java/com/android/dialer/callcomposer/res/values-pt-rBR/strings.xml
+++ b/java/com/android/dialer/callcomposer/res/values-pt-rBR/strings.xml
@@ -33,6 +33,8 @@
     <string name="description_call_composer_camera" msgid="388088245837924914">"Tirar uma foto"</string>
     <string name="description_call_composer_photo" msgid="6449208314952246454">"Escolher uma foto"</string>
     <string name="description_call_composer_message" msgid="9132362446000908550">"Enviar uma mensagem"</string>
-    <string name="image_sent_messages" msgid="6520870555040566229">"Foto enviada pelo Mensagens"</string>
-    <string name="message_sent_messages" msgid="6286576951151541098">"Mensagem enviada pelo Mensagens"</string>
+    <!-- no translation found for image_sent_messages (6520870555040566229) -->
+    <skip />
+    <!-- no translation found for message_sent_messages (6286576951151541098) -->
+    <skip />
 </resources>
diff --git a/java/com/android/dialer/callcomposer/res/values-pt-rPT/strings.xml b/java/com/android/dialer/callcomposer/res/values-pt-rPT/strings.xml
index 1a35ce2..45411d3 100644
--- a/java/com/android/dialer/callcomposer/res/values-pt-rPT/strings.xml
+++ b/java/com/android/dialer/callcomposer/res/values-pt-rPT/strings.xml
@@ -33,6 +33,8 @@
     <string name="description_call_composer_camera" msgid="388088245837924914">"Tirar uma foto"</string>
     <string name="description_call_composer_photo" msgid="6449208314952246454">"Selecionar foto"</string>
     <string name="description_call_composer_message" msgid="9132362446000908550">"Enviar uma mensagem"</string>
-    <string name="image_sent_messages" msgid="6520870555040566229">"Foto enviada através da aplicação Mensagens"</string>
-    <string name="message_sent_messages" msgid="6286576951151541098">"Mensagem enviada através da aplicação Mensagens"</string>
+    <!-- no translation found for image_sent_messages (6520870555040566229) -->
+    <skip />
+    <!-- no translation found for message_sent_messages (6286576951151541098) -->
+    <skip />
 </resources>
diff --git a/java/com/android/dialer/callcomposer/res/values-pt/strings.xml b/java/com/android/dialer/callcomposer/res/values-pt/strings.xml
index 026cfac..669e850 100644
--- a/java/com/android/dialer/callcomposer/res/values-pt/strings.xml
+++ b/java/com/android/dialer/callcomposer/res/values-pt/strings.xml
@@ -33,6 +33,8 @@
     <string name="description_call_composer_camera" msgid="388088245837924914">"Tirar uma foto"</string>
     <string name="description_call_composer_photo" msgid="6449208314952246454">"Escolher uma foto"</string>
     <string name="description_call_composer_message" msgid="9132362446000908550">"Enviar uma mensagem"</string>
-    <string name="image_sent_messages" msgid="6520870555040566229">"Foto enviada pelo Mensagens"</string>
-    <string name="message_sent_messages" msgid="6286576951151541098">"Mensagem enviada pelo Mensagens"</string>
+    <!-- no translation found for image_sent_messages (6520870555040566229) -->
+    <skip />
+    <!-- no translation found for message_sent_messages (6286576951151541098) -->
+    <skip />
 </resources>
diff --git a/java/com/android/dialer/callcomposer/res/values-ro/strings.xml b/java/com/android/dialer/callcomposer/res/values-ro/strings.xml
index ac55b80..cd8359f 100644
--- a/java/com/android/dialer/callcomposer/res/values-ro/strings.xml
+++ b/java/com/android/dialer/callcomposer/res/values-ro/strings.xml
@@ -33,6 +33,8 @@
     <string name="description_call_composer_camera" msgid="388088245837924914">"Fotografiați"</string>
     <string name="description_call_composer_photo" msgid="6449208314952246454">"Alegeți o fotografie"</string>
     <string name="description_call_composer_message" msgid="9132362446000908550">"Trimiteți un mesaj"</string>
-    <string name="image_sent_messages" msgid="6520870555040566229">"Fotografie trimisă prin Messages"</string>
-    <string name="message_sent_messages" msgid="6286576951151541098">"Mesaj trimis prin Messages"</string>
+    <!-- no translation found for image_sent_messages (6520870555040566229) -->
+    <skip />
+    <!-- no translation found for message_sent_messages (6286576951151541098) -->
+    <skip />
 </resources>
diff --git a/java/com/android/dialer/callcomposer/res/values-ru/strings.xml b/java/com/android/dialer/callcomposer/res/values-ru/strings.xml
index 79d8136..1119a0e 100644
--- a/java/com/android/dialer/callcomposer/res/values-ru/strings.xml
+++ b/java/com/android/dialer/callcomposer/res/values-ru/strings.xml
@@ -33,6 +33,8 @@
     <string name="description_call_composer_camera" msgid="388088245837924914">"Сделать фото"</string>
     <string name="description_call_composer_photo" msgid="6449208314952246454">"Выбрать фото"</string>
     <string name="description_call_composer_message" msgid="9132362446000908550">"Отправить сообщение"</string>
-    <string name="image_sent_messages" msgid="6520870555040566229">"Фото отправлено через Android Сообщения"</string>
-    <string name="message_sent_messages" msgid="6286576951151541098">"Сообщение отправлено через Android Сообщения"</string>
+    <!-- no translation found for image_sent_messages (6520870555040566229) -->
+    <skip />
+    <!-- no translation found for message_sent_messages (6286576951151541098) -->
+    <skip />
 </resources>
diff --git a/java/com/android/dialer/callcomposer/res/values-si/strings.xml b/java/com/android/dialer/callcomposer/res/values-si/strings.xml
index 8c2b953..dfae242 100644
--- a/java/com/android/dialer/callcomposer/res/values-si/strings.xml
+++ b/java/com/android/dialer/callcomposer/res/values-si/strings.xml
@@ -33,6 +33,8 @@
     <string name="description_call_composer_camera" msgid="388088245837924914">"පින්තුරයක් ගැනීම"</string>
     <string name="description_call_composer_photo" msgid="6449208314952246454">"ඡායාරූපයක් තේරීම"</string>
     <string name="description_call_composer_message" msgid="9132362446000908550">"පණිවිඩයක් යැවීම"</string>
-    <string name="image_sent_messages" msgid="6520870555040566229">"Messages හරහා ඡායාරූපය යවන ලදී"</string>
-    <string name="message_sent_messages" msgid="6286576951151541098">"Messages හරහා පණිවිඩය යවන ලදී"</string>
+    <!-- no translation found for image_sent_messages (6520870555040566229) -->
+    <skip />
+    <!-- no translation found for message_sent_messages (6286576951151541098) -->
+    <skip />
 </resources>
diff --git a/java/com/android/dialer/callcomposer/res/values-sk/strings.xml b/java/com/android/dialer/callcomposer/res/values-sk/strings.xml
index ee062c4..f54c73e 100644
--- a/java/com/android/dialer/callcomposer/res/values-sk/strings.xml
+++ b/java/com/android/dialer/callcomposer/res/values-sk/strings.xml
@@ -33,6 +33,8 @@
     <string name="description_call_composer_camera" msgid="388088245837924914">"Odfotiť"</string>
     <string name="description_call_composer_photo" msgid="6449208314952246454">"Vybrať fotku"</string>
     <string name="description_call_composer_message" msgid="9132362446000908550">"Odoslať správu"</string>
-    <string name="image_sent_messages" msgid="6520870555040566229">"Fotka bola odoslaná prostredníctvom Správ"</string>
-    <string name="message_sent_messages" msgid="6286576951151541098">"Správa bola odoslaná prostredníctvom Správ"</string>
+    <!-- no translation found for image_sent_messages (6520870555040566229) -->
+    <skip />
+    <!-- no translation found for message_sent_messages (6286576951151541098) -->
+    <skip />
 </resources>
diff --git a/java/com/android/dialer/callcomposer/res/values-sl/strings.xml b/java/com/android/dialer/callcomposer/res/values-sl/strings.xml
index 9d57cfd..010ad07 100644
--- a/java/com/android/dialer/callcomposer/res/values-sl/strings.xml
+++ b/java/com/android/dialer/callcomposer/res/values-sl/strings.xml
@@ -33,6 +33,8 @@
     <string name="description_call_composer_camera" msgid="388088245837924914">"Posnemi fotografijo"</string>
     <string name="description_call_composer_photo" msgid="6449208314952246454">"Izberi fotografijo"</string>
     <string name="description_call_composer_message" msgid="9132362446000908550">"Pošlji sporočilo"</string>
-    <string name="image_sent_messages" msgid="6520870555040566229">"Fotografija je bila poslana prek aplikacije Messages"</string>
-    <string name="message_sent_messages" msgid="6286576951151541098">"Sporočilo je bila poslano prek aplikacije Messages"</string>
+    <!-- no translation found for image_sent_messages (6520870555040566229) -->
+    <skip />
+    <!-- no translation found for message_sent_messages (6286576951151541098) -->
+    <skip />
 </resources>
diff --git a/java/com/android/dialer/callcomposer/res/values-sq/strings.xml b/java/com/android/dialer/callcomposer/res/values-sq/strings.xml
index 7209942..b106d5a 100644
--- a/java/com/android/dialer/callcomposer/res/values-sq/strings.xml
+++ b/java/com/android/dialer/callcomposer/res/values-sq/strings.xml
@@ -33,6 +33,8 @@
     <string name="description_call_composer_camera" msgid="388088245837924914">"Bëj një fotografi"</string>
     <string name="description_call_composer_photo" msgid="6449208314952246454">"Zgjidh një fotografi"</string>
     <string name="description_call_composer_message" msgid="9132362446000908550">"Dërgo një mesazh"</string>
-    <string name="image_sent_messages" msgid="6520870555040566229">"Fotografia u dërgua nëpërmjet \"Mesazheve\""</string>
-    <string name="message_sent_messages" msgid="6286576951151541098">"Mesazhi u dërgua nëpërmjet \"Mesazheve\""</string>
+    <!-- no translation found for image_sent_messages (6520870555040566229) -->
+    <skip />
+    <!-- no translation found for message_sent_messages (6286576951151541098) -->
+    <skip />
 </resources>
diff --git a/java/com/android/dialer/callcomposer/res/values-sr/strings.xml b/java/com/android/dialer/callcomposer/res/values-sr/strings.xml
index 1eafcb7..2b85628 100644
--- a/java/com/android/dialer/callcomposer/res/values-sr/strings.xml
+++ b/java/com/android/dialer/callcomposer/res/values-sr/strings.xml
@@ -33,6 +33,8 @@
     <string name="description_call_composer_camera" msgid="388088245837924914">"Сликајте"</string>
     <string name="description_call_composer_photo" msgid="6449208314952246454">"Изаберите слику"</string>
     <string name="description_call_composer_message" msgid="9132362446000908550">"Пошаљите поруку"</string>
-    <string name="image_sent_messages" msgid="6520870555040566229">"Слика је послата преко Messages-а"</string>
-    <string name="message_sent_messages" msgid="6286576951151541098">"Порука је послата преко Messages-а"</string>
+    <!-- no translation found for image_sent_messages (6520870555040566229) -->
+    <skip />
+    <!-- no translation found for message_sent_messages (6286576951151541098) -->
+    <skip />
 </resources>
diff --git a/java/com/android/dialer/callcomposer/res/values-sv/strings.xml b/java/com/android/dialer/callcomposer/res/values-sv/strings.xml
index 787d865..e60bbe9 100644
--- a/java/com/android/dialer/callcomposer/res/values-sv/strings.xml
+++ b/java/com/android/dialer/callcomposer/res/values-sv/strings.xml
@@ -33,6 +33,8 @@
     <string name="description_call_composer_camera" msgid="388088245837924914">"Ta en bild"</string>
     <string name="description_call_composer_photo" msgid="6449208314952246454">"Välj ett foto"</string>
     <string name="description_call_composer_message" msgid="9132362446000908550">"Skicka ett meddelande"</string>
-    <string name="image_sent_messages" msgid="6520870555040566229">"Fotot har skickats via Messages"</string>
-    <string name="message_sent_messages" msgid="6286576951151541098">"Meddelandet har skickats via Messages"</string>
+    <!-- no translation found for image_sent_messages (6520870555040566229) -->
+    <skip />
+    <!-- no translation found for message_sent_messages (6286576951151541098) -->
+    <skip />
 </resources>
diff --git a/java/com/android/dialer/callcomposer/res/values-sw/strings.xml b/java/com/android/dialer/callcomposer/res/values-sw/strings.xml
index d33ff31..f67c899 100644
--- a/java/com/android/dialer/callcomposer/res/values-sw/strings.xml
+++ b/java/com/android/dialer/callcomposer/res/values-sw/strings.xml
@@ -33,6 +33,8 @@
     <string name="description_call_composer_camera" msgid="388088245837924914">"Piga picha"</string>
     <string name="description_call_composer_photo" msgid="6449208314952246454">"Chagua picha"</string>
     <string name="description_call_composer_message" msgid="9132362446000908550">"Tuma ujumbe"</string>
-    <string name="image_sent_messages" msgid="6520870555040566229">"Picha imetumwa kupitia Programu ya Messages"</string>
-    <string name="message_sent_messages" msgid="6286576951151541098">"Ujumbe umetumwa kupitia Programu ya Messages"</string>
+    <!-- no translation found for image_sent_messages (6520870555040566229) -->
+    <skip />
+    <!-- no translation found for message_sent_messages (6286576951151541098) -->
+    <skip />
 </resources>
diff --git a/java/com/android/dialer/callcomposer/res/values-ta/strings.xml b/java/com/android/dialer/callcomposer/res/values-ta/strings.xml
index 37c0193..ae59b3d 100644
--- a/java/com/android/dialer/callcomposer/res/values-ta/strings.xml
+++ b/java/com/android/dialer/callcomposer/res/values-ta/strings.xml
@@ -33,6 +33,8 @@
     <string name="description_call_composer_camera" msgid="388088245837924914">"படமெடுக்கவும்"</string>
     <string name="description_call_composer_photo" msgid="6449208314952246454">"புகைப்படத்தைத் தேர்வு செய்யும்"</string>
     <string name="description_call_composer_message" msgid="9132362446000908550">"செய்தியை அனுப்பும்"</string>
-    <string name="image_sent_messages" msgid="6520870555040566229">"மெசேஜஸ் மூலம் படம் அனுப்பப்பட்டது"</string>
-    <string name="message_sent_messages" msgid="6286576951151541098">"மெசேஜஸ் மூலம் செய்தி அனுப்பப்பட்டது"</string>
+    <!-- no translation found for image_sent_messages (6520870555040566229) -->
+    <skip />
+    <!-- no translation found for message_sent_messages (6286576951151541098) -->
+    <skip />
 </resources>
diff --git a/java/com/android/dialer/callcomposer/res/values-te/strings.xml b/java/com/android/dialer/callcomposer/res/values-te/strings.xml
index 5480370..01d0910 100644
--- a/java/com/android/dialer/callcomposer/res/values-te/strings.xml
+++ b/java/com/android/dialer/callcomposer/res/values-te/strings.xml
@@ -33,6 +33,8 @@
     <string name="description_call_composer_camera" msgid="388088245837924914">"చిత్రాన్ని తీస్తుంది"</string>
     <string name="description_call_composer_photo" msgid="6449208314952246454">"ఫోటోను ఎంచుకోండి"</string>
     <string name="description_call_composer_message" msgid="9132362446000908550">"సందేశాన్ని పంపుతుంది"</string>
-    <string name="image_sent_messages" msgid="6520870555040566229">"సందేశాల అనువర్తనం ద్వారా ఫోటోను పంపాము"</string>
-    <string name="message_sent_messages" msgid="6286576951151541098">"సందేశాల అనువర్తనం ద్వారా సందేశాన్ని పంపాము"</string>
+    <!-- no translation found for image_sent_messages (6520870555040566229) -->
+    <skip />
+    <!-- no translation found for message_sent_messages (6286576951151541098) -->
+    <skip />
 </resources>
diff --git a/java/com/android/dialer/callcomposer/res/values-th/strings.xml b/java/com/android/dialer/callcomposer/res/values-th/strings.xml
index 9d98d56..53dbaea 100644
--- a/java/com/android/dialer/callcomposer/res/values-th/strings.xml
+++ b/java/com/android/dialer/callcomposer/res/values-th/strings.xml
@@ -33,6 +33,8 @@
     <string name="description_call_composer_camera" msgid="388088245837924914">"ถ่ายภาพ"</string>
     <string name="description_call_composer_photo" msgid="6449208314952246454">"เลือกรูปภาพ"</string>
     <string name="description_call_composer_message" msgid="9132362446000908550">"ส่งข้อความ"</string>
-    <string name="image_sent_messages" msgid="6520870555040566229">"ส่งรูปภาพผ่าน Messages แล้ว"</string>
-    <string name="message_sent_messages" msgid="6286576951151541098">"ส่งข้อความผ่าน Messages แล้ว"</string>
+    <!-- no translation found for image_sent_messages (6520870555040566229) -->
+    <skip />
+    <!-- no translation found for message_sent_messages (6286576951151541098) -->
+    <skip />
 </resources>
diff --git a/java/com/android/dialer/callcomposer/res/values-tl/strings.xml b/java/com/android/dialer/callcomposer/res/values-tl/strings.xml
index 5bba942..910d907 100644
--- a/java/com/android/dialer/callcomposer/res/values-tl/strings.xml
+++ b/java/com/android/dialer/callcomposer/res/values-tl/strings.xml
@@ -33,6 +33,8 @@
     <string name="description_call_composer_camera" msgid="388088245837924914">"Kumuha ng larawan"</string>
     <string name="description_call_composer_photo" msgid="6449208314952246454">"Pumili ng larawan"</string>
     <string name="description_call_composer_message" msgid="9132362446000908550">"Magpadala ng mensahe"</string>
-    <string name="image_sent_messages" msgid="6520870555040566229">"Larawang ipinadala sa pamamagitan ng Messages"</string>
-    <string name="message_sent_messages" msgid="6286576951151541098">"Mensaheng ipinadala sa pamamagitan ng Messages"</string>
+    <!-- no translation found for image_sent_messages (6520870555040566229) -->
+    <skip />
+    <!-- no translation found for message_sent_messages (6286576951151541098) -->
+    <skip />
 </resources>
diff --git a/java/com/android/dialer/callcomposer/res/values-tr/strings.xml b/java/com/android/dialer/callcomposer/res/values-tr/strings.xml
index cfb8bfb..51069ea 100644
--- a/java/com/android/dialer/callcomposer/res/values-tr/strings.xml
+++ b/java/com/android/dialer/callcomposer/res/values-tr/strings.xml
@@ -33,6 +33,8 @@
     <string name="description_call_composer_camera" msgid="388088245837924914">"Resim çeker"</string>
     <string name="description_call_composer_photo" msgid="6449208314952246454">"Fotoğraf seçilmesini sağlar"</string>
     <string name="description_call_composer_message" msgid="9132362446000908550">"Mesaj gönderir"</string>
-    <string name="image_sent_messages" msgid="6520870555040566229">"Fotoğraf, Mesajlar uygulaması üzerinden gönderildi"</string>
-    <string name="message_sent_messages" msgid="6286576951151541098">"Mesaj, Mesajlar uygulaması üzerinden gönderildi"</string>
+    <!-- no translation found for image_sent_messages (6520870555040566229) -->
+    <skip />
+    <!-- no translation found for message_sent_messages (6286576951151541098) -->
+    <skip />
 </resources>
diff --git a/java/com/android/dialer/callcomposer/res/values-uk/strings.xml b/java/com/android/dialer/callcomposer/res/values-uk/strings.xml
index 4cb1a2d..57ee722 100644
--- a/java/com/android/dialer/callcomposer/res/values-uk/strings.xml
+++ b/java/com/android/dialer/callcomposer/res/values-uk/strings.xml
@@ -33,6 +33,8 @@
     <string name="description_call_composer_camera" msgid="388088245837924914">"Зробити знімок"</string>
     <string name="description_call_composer_photo" msgid="6449208314952246454">"Вибрати фотографію"</string>
     <string name="description_call_composer_message" msgid="9132362446000908550">"Надіслати повідомлення"</string>
-    <string name="image_sent_messages" msgid="6520870555040566229">"Фотографію надіслано через додаток Повідомлення"</string>
-    <string name="message_sent_messages" msgid="6286576951151541098">"Текст надіслано через додаток Повідомлення"</string>
+    <!-- no translation found for image_sent_messages (6520870555040566229) -->
+    <skip />
+    <!-- no translation found for message_sent_messages (6286576951151541098) -->
+    <skip />
 </resources>
diff --git a/java/com/android/dialer/callcomposer/res/values-ur/strings.xml b/java/com/android/dialer/callcomposer/res/values-ur/strings.xml
index c665cfb..28d79b8 100644
--- a/java/com/android/dialer/callcomposer/res/values-ur/strings.xml
+++ b/java/com/android/dialer/callcomposer/res/values-ur/strings.xml
@@ -33,6 +33,8 @@
     <string name="description_call_composer_camera" msgid="388088245837924914">"تصویر لیں"</string>
     <string name="description_call_composer_photo" msgid="6449208314952246454">"ایک تصویر چنیں"</string>
     <string name="description_call_composer_message" msgid="9132362446000908550">"پیغام بھیجیں"</string>
-    <string name="image_sent_messages" msgid="6520870555040566229">"تصویر پیغامات کے ذریعے بھیجی گئی"</string>
-    <string name="message_sent_messages" msgid="6286576951151541098">"پیغام پیغامات کے ذریعے بھیجا گیا"</string>
+    <!-- no translation found for image_sent_messages (6520870555040566229) -->
+    <skip />
+    <!-- no translation found for message_sent_messages (6286576951151541098) -->
+    <skip />
 </resources>
diff --git a/java/com/android/dialer/callcomposer/res/values-uz/strings.xml b/java/com/android/dialer/callcomposer/res/values-uz/strings.xml
index 0237ab9..a3c7346 100644
--- a/java/com/android/dialer/callcomposer/res/values-uz/strings.xml
+++ b/java/com/android/dialer/callcomposer/res/values-uz/strings.xml
@@ -33,6 +33,8 @@
     <string name="description_call_composer_camera" msgid="388088245837924914">"Rasmga olish"</string>
     <string name="description_call_composer_photo" msgid="6449208314952246454">"Rasm tanlash"</string>
     <string name="description_call_composer_message" msgid="9132362446000908550">"Xabar yuborish"</string>
-    <string name="image_sent_messages" msgid="6520870555040566229">"Rasm Android Xabarlar orqali yuborildi"</string>
-    <string name="message_sent_messages" msgid="6286576951151541098">"Xabar Android Xabarlar orqali yuborildi"</string>
+    <!-- no translation found for image_sent_messages (6520870555040566229) -->
+    <skip />
+    <!-- no translation found for message_sent_messages (6286576951151541098) -->
+    <skip />
 </resources>
diff --git a/java/com/android/dialer/callcomposer/res/values-vi/strings.xml b/java/com/android/dialer/callcomposer/res/values-vi/strings.xml
index d617cfb..7be47a0 100644
--- a/java/com/android/dialer/callcomposer/res/values-vi/strings.xml
+++ b/java/com/android/dialer/callcomposer/res/values-vi/strings.xml
@@ -33,6 +33,8 @@
     <string name="description_call_composer_camera" msgid="388088245837924914">"Chụp ảnh"</string>
     <string name="description_call_composer_photo" msgid="6449208314952246454">"Chọn ảnh"</string>
     <string name="description_call_composer_message" msgid="9132362446000908550">"Gửi tin nhắn"</string>
-    <string name="image_sent_messages" msgid="6520870555040566229">"Đã gửi ảnh qua Messages"</string>
-    <string name="message_sent_messages" msgid="6286576951151541098">"Đã gửi tin nhắn qua Messages"</string>
+    <!-- no translation found for image_sent_messages (6520870555040566229) -->
+    <skip />
+    <!-- no translation found for message_sent_messages (6286576951151541098) -->
+    <skip />
 </resources>
diff --git a/java/com/android/dialer/callcomposer/res/values-zh-rCN/strings.xml b/java/com/android/dialer/callcomposer/res/values-zh-rCN/strings.xml
index 97017d6..39ace9d 100644
--- a/java/com/android/dialer/callcomposer/res/values-zh-rCN/strings.xml
+++ b/java/com/android/dialer/callcomposer/res/values-zh-rCN/strings.xml
@@ -33,6 +33,8 @@
     <string name="description_call_composer_camera" msgid="388088245837924914">"拍照"</string>
     <string name="description_call_composer_photo" msgid="6449208314952246454">"选择一张照片"</string>
     <string name="description_call_composer_message" msgid="9132362446000908550">"发送信息"</string>
-    <string name="image_sent_messages" msgid="6520870555040566229">"已通过“信息”应用发送照片"</string>
-    <string name="message_sent_messages" msgid="6286576951151541098">"已通过“信息”应用发送短信"</string>
+    <!-- no translation found for image_sent_messages (6520870555040566229) -->
+    <skip />
+    <!-- no translation found for message_sent_messages (6286576951151541098) -->
+    <skip />
 </resources>
diff --git a/java/com/android/dialer/callcomposer/res/values-zh-rHK/strings.xml b/java/com/android/dialer/callcomposer/res/values-zh-rHK/strings.xml
index b191949..87052ff 100644
--- a/java/com/android/dialer/callcomposer/res/values-zh-rHK/strings.xml
+++ b/java/com/android/dialer/callcomposer/res/values-zh-rHK/strings.xml
@@ -33,6 +33,8 @@
     <string name="description_call_composer_camera" msgid="388088245837924914">"拍照"</string>
     <string name="description_call_composer_photo" msgid="6449208314952246454">"選擇相片"</string>
     <string name="description_call_composer_message" msgid="9132362446000908550">"傳送訊息"</string>
-    <string name="image_sent_messages" msgid="6520870555040566229">"已透過「訊息」傳送相片"</string>
-    <string name="message_sent_messages" msgid="6286576951151541098">"已透過「訊息」傳送訊息"</string>
+    <!-- no translation found for image_sent_messages (6520870555040566229) -->
+    <skip />
+    <!-- no translation found for message_sent_messages (6286576951151541098) -->
+    <skip />
 </resources>
diff --git a/java/com/android/dialer/callcomposer/res/values-zh-rTW/strings.xml b/java/com/android/dialer/callcomposer/res/values-zh-rTW/strings.xml
index ef2cd9d..51cc8f6 100644
--- a/java/com/android/dialer/callcomposer/res/values-zh-rTW/strings.xml
+++ b/java/com/android/dialer/callcomposer/res/values-zh-rTW/strings.xml
@@ -33,6 +33,8 @@
     <string name="description_call_composer_camera" msgid="388088245837924914">"拍攝相片"</string>
     <string name="description_call_composer_photo" msgid="6449208314952246454">"選擇相片"</string>
     <string name="description_call_composer_message" msgid="9132362446000908550">"傳送訊息"</string>
-    <string name="image_sent_messages" msgid="6520870555040566229">"透過訊息應用程式傳送的相片"</string>
-    <string name="message_sent_messages" msgid="6286576951151541098">"透過訊息應用程式傳送的訊息"</string>
+    <!-- no translation found for image_sent_messages (6520870555040566229) -->
+    <skip />
+    <!-- no translation found for message_sent_messages (6286576951151541098) -->
+    <skip />
 </resources>
diff --git a/java/com/android/dialer/callcomposer/res/values-zu/strings.xml b/java/com/android/dialer/callcomposer/res/values-zu/strings.xml
index 09845f6..3e2db44 100644
--- a/java/com/android/dialer/callcomposer/res/values-zu/strings.xml
+++ b/java/com/android/dialer/callcomposer/res/values-zu/strings.xml
@@ -33,6 +33,8 @@
     <string name="description_call_composer_camera" msgid="388088245837924914">"Thatha isithombe"</string>
     <string name="description_call_composer_photo" msgid="6449208314952246454">"Khetha isithombe"</string>
     <string name="description_call_composer_message" msgid="9132362446000908550">"Thumela umlayezo"</string>
-    <string name="image_sent_messages" msgid="6520870555040566229">"Isithombe sithunyelwe ngemilayezo"</string>
-    <string name="message_sent_messages" msgid="6286576951151541098">"Umlayezo uthunyelwe ngemilayezo"</string>
+    <!-- no translation found for image_sent_messages (6520870555040566229) -->
+    <skip />
+    <!-- no translation found for message_sent_messages (6286576951151541098) -->
+    <skip />
 </resources>
diff --git a/java/com/android/dialer/callcomposer/res/values/dimens.xml b/java/com/android/dialer/callcomposer/res/values/dimens.xml
index 083bd0a..798c46f 100644
--- a/java/com/android/dialer/callcomposer/res/values/dimens.xml
+++ b/java/com/android/dialer/callcomposer/res/values/dimens.xml
@@ -15,15 +15,15 @@
   ~ limitations under the License
   -->
 <resources>
-  <dimen name="call_composer_view_pager_height">306dp</dimen>
+  <dimen name="call_composer_view_pager_height">292dp</dimen>
 
   <!-- Contact bar -->
   <dimen name="call_composer_contact_photo_border_thickness">2dp</dimen>
-  <dimen name="call_composer_contact_photo_size">116dp</dimen>
-  <dimen name="call_composer_contact_container_margin_top">58dp</dimen>
-  <dimen name="call_composer_contact_container_padding_top">58dp</dimen>
-  <dimen name="call_composer_contact_container_padding_bottom">18dp</dimen>
-  <dimen name="call_composer_name_text_size">32sp</dimen>
+  <dimen name="call_composer_contact_photo_size">112dp</dimen>
+  <dimen name="call_composer_contact_container_margin_top">56dp</dimen>
+  <dimen name="call_composer_contact_container_padding_top">56dp</dimen>
+  <dimen name="call_composer_contact_container_padding_bottom">16dp</dimen>
+  <dimen name="call_composer_name_text_size">28sp</dimen>
   <dimen name="call_composer_number_text_size">16sp</dimen>
   <dimen name="call_composer_contact_container_elevation">2dp</dimen>
 
diff --git a/java/com/android/dialer/callcomposer/res/values/styles.xml b/java/com/android/dialer/callcomposer/res/values/styles.xml
index 16e7fb6..a03ee48 100644
--- a/java/com/android/dialer/callcomposer/res/values/styles.xml
+++ b/java/com/android/dialer/callcomposer/res/values/styles.xml
@@ -34,7 +34,8 @@
   <style name="message_composer_textview">
     <item name="android:textSize">@dimen/message_compose_item_text_size</item>
     <item name="android:textColor">@color/dialer_primary_text_color</item>
-    <item name="android:padding">@dimen/message_composer_item_padding</item>
+    <item name="android:paddingStart">@dimen/message_composer_item_padding</item>
+    <item name="android:paddingEnd">@dimen/message_composer_item_padding</item>
     <item name="android:background">@drawable/item_background_material_light</item>
     <item name="android:gravity">center_vertical</item>
   </style>
diff --git a/java/com/android/dialer/calldetails/CallDetailsAdapter.java b/java/com/android/dialer/calldetails/CallDetailsAdapter.java
index 48e9b69..66a736c 100644
--- a/java/com/android/dialer/calldetails/CallDetailsAdapter.java
+++ b/java/com/android/dialer/calldetails/CallDetailsAdapter.java
@@ -26,6 +26,7 @@
 import com.android.dialer.calllogutils.CallTypeHelper;
 import com.android.dialer.common.Assert;
 import com.android.dialer.dialercontact.DialerContact;
+import com.android.dialer.lightbringer.LightbringerComponent;
 import java.util.List;
 
 /** Adapter for RecyclerView in {@link CallDetailsActivity}. */
@@ -48,7 +49,9 @@
     this.contact = Assert.isNotNull(contact);
     this.callDetailsEntries = callDetailsEntries;
     this.listener = listener;
-    callTypeHelper = new CallTypeHelper(context.getResources());
+    callTypeHelper =
+        new CallTypeHelper(
+            context.getResources(), LightbringerComponent.get(context).getLightbringer());
   }
 
   @Override
diff --git a/java/com/android/dialer/calldetails/CallDetailsEntryViewHolder.java b/java/com/android/dialer/calldetails/CallDetailsEntryViewHolder.java
index 204e407..9c592fc 100644
--- a/java/com/android/dialer/calldetails/CallDetailsEntryViewHolder.java
+++ b/java/com/android/dialer/calldetails/CallDetailsEntryViewHolder.java
@@ -56,7 +56,7 @@
 
   private final ImageView multimediaImage;
 
-  // TODO: Display this when location is stored - b/36160042
+  // TODO(maxwelb): Display this when location is stored - b/36160042
   @SuppressWarnings("unused")
   private final TextView multimediaAttachmentsNumber;
 
@@ -91,6 +91,7 @@
     boolean isPulledCall =
         (entry.getFeatures() & Calls.FEATURES_PULLED_EXTERNALLY)
             == Calls.FEATURES_PULLED_EXTERNALLY;
+    boolean isLightbringerCall = entry.getIsLightbringerCall();
 
     callTime.setTextColor(getColorForCallType(context, callType));
     callTypeIcon.clear();
@@ -100,7 +101,8 @@
     callTypeIcon.setShowWifi(
         MotorolaUtils.shouldShowWifiIconInCallLog(context, entry.getFeatures()));
 
-    callTypeText.setText(callTypeHelper.getCallTypeText(callType, isVideoCall, isPulledCall));
+    callTypeText.setText(
+        callTypeHelper.getCallTypeText(callType, isVideoCall, isPulledCall, isLightbringerCall));
     callTime.setText(CallEntryFormatter.formatDate(context, entry.getDate()));
     if (CallTypeHelper.isMissedCallType(callType)) {
       callDuration.setVisibility(View.GONE);
diff --git a/java/com/android/dialer/calldetails/CallDetailsHeaderViewHolder.java b/java/com/android/dialer/calldetails/CallDetailsHeaderViewHolder.java
index ea12c4f..410a3a0 100644
--- a/java/com/android/dialer/calldetails/CallDetailsHeaderViewHolder.java
+++ b/java/com/android/dialer/calldetails/CallDetailsHeaderViewHolder.java
@@ -25,10 +25,10 @@
 import android.view.View.OnClickListener;
 import android.widget.QuickContactBadge;
 import android.widget.TextView;
-import com.android.contacts.common.ContactPhotoManager;
 import com.android.dialer.callintent.CallInitiationType;
 import com.android.dialer.callintent.CallIntentBuilder;
 import com.android.dialer.common.Assert;
+import com.android.dialer.contactphoto.ContactPhotoManager;
 import com.android.dialer.dialercontact.DialerContact;
 import com.android.dialer.logging.DialerImpression;
 import com.android.dialer.logging.InteractionEvent;
diff --git a/java/com/android/dialer/calldetails/proto/call_details_entries.proto b/java/com/android/dialer/calldetails/proto/call_details_entries.proto
index 18bc931..587fd35 100644
--- a/java/com/android/dialer/calldetails/proto/call_details_entries.proto
+++ b/java/com/android/dialer/calldetails/proto/call_details_entries.proto
@@ -18,6 +18,7 @@
     optional int64 duration = 5;
     optional int64 data_usage = 6;
     repeated enrichedcall.historyquery.proto.HistoryResult history_results = 7;
+    optional bool is_lightbringer_call = 8;
   }
 
   repeated CallDetailsEntry entries = 1;
diff --git a/java/com/android/dialer/calldetails/res/layout/contact_container.xml b/java/com/android/dialer/calldetails/res/layout/contact_container.xml
index 0911291..b01a6cc 100644
--- a/java/com/android/dialer/calldetails/res/layout/contact_container.xml
+++ b/java/com/android/dialer/calldetails/res/layout/contact_container.xml
@@ -31,8 +31,7 @@
       android:layout_height="@dimen/call_details_contact_photo_size"
       android:layout_centerVertical="true"
       android:padding="@dimen/call_details_contact_photo_padding"
-      android:focusable="true"
-      android:contentDescription="@string/description_quick_contact_for"/>
+      android:focusable="true"/>
 
   <LinearLayout
       android:orientation="vertical"
diff --git a/java/com/android/dialer/calldetails/res/values-uz/strings.xml b/java/com/android/dialer/calldetails/res/values-uz/strings.xml
index 57f0526..4f38cab 100644
--- a/java/com/android/dialer/calldetails/res/values-uz/strings.xml
+++ b/java/com/android/dialer/calldetails/res/values-uz/strings.xml
@@ -20,7 +20,7 @@
     <string name="call_details" msgid="5063658079729839605">"Chaqiruv tafsilotlari"</string>
     <string name="delete" msgid="2141020674108406737">"O‘chirib tashlash"</string>
     <string name="call_details_copy_number" msgid="4265479408878990796">"Raqamni nusxalash"</string>
-    <string name="call_details_edit_number" msgid="8718476514903513624">"Chaqiruvdan oldin raqamni tahrirlash"</string>
+    <string name="call_details_edit_number" msgid="8718476514903513624">"Qo‘ng‘iroq qilishdan oldin raqamni tahrirlash"</string>
     <string name="call_details_report_call_id" msgid="8857541295264421217">"Raqamdagi xatolik haqida xabar berish"</string>
     <string name="sent_a_photo" msgid="3978670717462979502">"Rasm yuborildi"</string>
     <string name="received_a_photo" msgid="3528953225576480505">"Rasm qabul qilindi"</string>
diff --git a/java/com/android/dialer/callintent/call_initiation_type.proto b/java/com/android/dialer/callintent/call_initiation_type.proto
index 318da9c..32e4e49 100644
--- a/java/com/android/dialer/callintent/call_initiation_type.proto
+++ b/java/com/android/dialer/callintent/call_initiation_type.proto
@@ -8,6 +8,7 @@
 package com.android.dialer.callintent;
 
 
+
 // Different ways a call can be initiated.
 message CallInitiationType {
   enum Type {
diff --git a/java/com/android/dialer/callintent/speed_dial_contact_type.proto b/java/com/android/dialer/callintent/speed_dial_contact_type.proto
index 588eadf..ecb1c3f 100644
--- a/java/com/android/dialer/callintent/speed_dial_contact_type.proto
+++ b/java/com/android/dialer/callintent/speed_dial_contact_type.proto
@@ -8,6 +8,7 @@
 package com.android.dialer.callintent;
 
 
+
 // The type of speed call contact (favorites). Applies to initiation type
 // SPEED_DIAL only.
 message SpeedDialContactType {
diff --git a/java/com/android/dialer/calllog/database/AnnotatedCallLogDatabaseHelper.java b/java/com/android/dialer/calllog/database/AnnotatedCallLogDatabaseHelper.java
index 887dfcb..5f48d7b 100644
--- a/java/com/android/dialer/calllog/database/AnnotatedCallLogDatabaseHelper.java
+++ b/java/com/android/dialer/calllog/database/AnnotatedCallLogDatabaseHelper.java
@@ -68,7 +68,7 @@
     long startTime = System.currentTimeMillis();
     db.execSQL(CREATE_TABLE_SQL);
     db.execSQL(String.format(Locale.US, CREATE_TRIGGER_SQL, maxRows, maxRows));
-    // TODO: Consider logging impression.
+    // TODO(zachh): Consider logging impression.
     LogUtil.i(
         "AnnotatedCallLogDatabaseHelper.onCreate",
         "took: %dms",
diff --git a/java/com/android/dialer/calllog/database/Coalescer.java b/java/com/android/dialer/calllog/database/Coalescer.java
index 5683687..23ddc9c 100644
--- a/java/com/android/dialer/calllog/database/Coalescer.java
+++ b/java/com/android/dialer/calllog/database/Coalescer.java
@@ -129,7 +129,7 @@
    */
   private static boolean rowsShouldBeCombined(
       DialerPhoneNumberUtil dialerPhoneNumberUtil, ContentValues row1, ContentValues row2) {
-    // TODO: Real implementation.
+    // TODO(zachh): Real implementation.
     DialerPhoneNumber number1;
     DialerPhoneNumber number2;
     try {
diff --git a/java/com/android/dialer/calllog/datasources/contacts/ContactsDataSource.java b/java/com/android/dialer/calllog/datasources/contacts/ContactsDataSource.java
index 82a8523..db74215 100644
--- a/java/com/android/dialer/calllog/datasources/contacts/ContactsDataSource.java
+++ b/java/com/android/dialer/calllog/datasources/contacts/ContactsDataSource.java
@@ -39,7 +39,7 @@
   public boolean isDirty(Context appContext) {
     Assert.isWorkerThread();
 
-    // TODO: Implementation.
+    // TODO(zachh): Implementation.
     return false;
   }
 
@@ -49,7 +49,7 @@
       Context appContext,
       CallLogMutations mutations) {
     Assert.isWorkerThread();
-    // TODO: Implementation.
+    // TODO(zachh): Implementation.
     for (ContentValues contentValues : mutations.getInserts().values()) {
       contentValues.put(AnnotatedCallLog.CONTACT_NAME, "Placeholder name");
     }
@@ -57,12 +57,12 @@
 
   @Override
   public void onSuccessfulFill(Context appContext) {
-    // TODO: Implementation.
+    // TODO(zachh): Implementation.
   }
 
   @Override
   public ContentValues coalesce(List<ContentValues> individualRowsSortedByTimestampDesc) {
-    // TODO: Implementation.
+    // TODO(zachh): Implementation.
     return new RowCombiner(individualRowsSortedByTimestampDesc)
         .useSingleValueString(AnnotatedCallLog.CONTACT_NAME)
         .combine();
@@ -72,6 +72,6 @@
   @Override
   public void registerContentObservers(
       Context appContext, ContentObserverCallbacks contentObserverCallbacks) {
-    // TODO: Guard against missing permissions during callback registration.
+    // TODO(zachh): Guard against missing permissions during callback registration.
   }
 }
diff --git a/java/com/android/dialer/calllog/datasources/systemcalllog/SystemCallLogDataSource.java b/java/com/android/dialer/calllog/datasources/systemcalllog/SystemCallLogDataSource.java
index f206328..86145a9 100644
--- a/java/com/android/dialer/calllog/datasources/systemcalllog/SystemCallLogDataSource.java
+++ b/java/com/android/dialer/calllog/datasources/systemcalllog/SystemCallLogDataSource.java
@@ -143,7 +143,7 @@
 
   @Override
   public ContentValues coalesce(List<ContentValues> individualRowsSortedByTimestampDesc) {
-    // TODO: Complete implementation.
+    // TODO(zachh): Complete implementation.
     ContentValues coalescedValues =
         new RowCombiner(individualRowsSortedByTimestampDesc)
             .useMostRecentLong(AnnotatedCallLog.TIMESTAMP)
@@ -182,7 +182,7 @@
     DialerPhoneNumberUtil dialerPhoneNumberUtil =
         new DialerPhoneNumberUtil(PhoneNumberUtil.getInstance());
 
-    // TODO: Really should be getting last 1000 by timestamp, not by last modified.
+    // TODO(zachh): Really should be getting last 1000 by timestamp, not by last modified.
     try (Cursor cursor =
         appContext
             .getContentResolver()
diff --git a/java/com/android/dialer/calllog/ui/NewCallLogFragment.java b/java/com/android/dialer/calllog/ui/NewCallLogFragment.java
index 712f7cf..17fcf19 100644
--- a/java/com/android/dialer/calllog/ui/NewCallLogFragment.java
+++ b/java/com/android/dialer/calllog/ui/NewCallLogFragment.java
@@ -92,7 +92,7 @@
     CallLogFramework callLogFramework = CallLogComponent.get(getContext()).callLogFramework();
     callLogFramework.attachUi(this);
 
-    // TODO: Consider doing this when fragment becomes visible.
+    // TODO(zachh): Consider doing this when fragment becomes visible.
     checkAnnotatedCallLogDirtyAndRefreshIfNecessary();
   }
 
@@ -142,7 +142,7 @@
   public void onLoadFinished(Loader<Cursor> loader, Cursor newCursor) {
     LogUtil.enterBlock("NewCallLogFragment.onLoadFinished");
 
-    // TODO: Handle empty cursor by showing empty view.
+    // TODO(zachh): Handle empty cursor by showing empty view.
     recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
     recyclerView.setAdapter(new NewCallLogAdapter(newCursor));
   }
diff --git a/java/com/android/dialer/calllog/ui/NewCallLogViewHolder.java b/java/com/android/dialer/calllog/ui/NewCallLogViewHolder.java
index 4c459e1..9521a03 100644
--- a/java/com/android/dialer/calllog/ui/NewCallLogViewHolder.java
+++ b/java/com/android/dialer/calllog/ui/NewCallLogViewHolder.java
@@ -24,7 +24,7 @@
 /** {@link RecyclerView.ViewHolder} for the new call log. */
 final class NewCallLogViewHolder extends RecyclerView.ViewHolder {
 
-  // TODO: Format correctly using current locale.
+  // TODO(zachh): Format correctly using current locale.
   private final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm", Locale.US);
 
   private final TextView contactNameView;
diff --git a/java/com/android/dialer/calllogutils/CallTypeHelper.java b/java/com/android/dialer/calllogutils/CallTypeHelper.java
index d3b5b67..783f799 100644
--- a/java/com/android/dialer/calllogutils/CallTypeHelper.java
+++ b/java/com/android/dialer/calllogutils/CallTypeHelper.java
@@ -18,6 +18,7 @@
 
 import android.content.res.Resources;
 import com.android.dialer.compat.AppCompatConstants;
+import com.android.dialer.lightbringer.Lightbringer;
 
 /** Helper class to perform operations related to call types. */
 public class CallTypeHelper {
@@ -50,8 +51,12 @@
   private final CharSequence mBlockedName;
   /** Name used to identify calls which were answered on another device. */
   private final CharSequence mAnsweredElsewhereName;
+  /** Name used to identify incoming lightbringer calls. */
+  private final CharSequence mIncomingLightbringerCall;
+  /** Name used to identify outgoing lightbringer calls. */
+  private final CharSequence mOutgoingLightbringerCall;
 
-  public CallTypeHelper(Resources resources) {
+  public CallTypeHelper(Resources resources, Lightbringer lightbringer) {
     // Cache these values so that we do not need to look them up each time.
     mIncomingName = resources.getString(R.string.type_incoming);
     mIncomingPulledName = resources.getString(R.string.type_incoming_pulled);
@@ -67,6 +72,18 @@
     mRejectedName = resources.getString(R.string.type_rejected);
     mBlockedName = resources.getString(R.string.type_blocked);
     mAnsweredElsewhereName = resources.getString(R.string.type_answered_elsewhere);
+
+    if (lightbringer.getIncomingCallTypeText() != -1) {
+      mIncomingLightbringerCall = resources.getString(lightbringer.getIncomingCallTypeText());
+    } else {
+      mIncomingLightbringerCall = mIncomingVideoName;
+    }
+
+    if (lightbringer.getOutgoingCallTypeText() != -1) {
+      mOutgoingLightbringerCall = resources.getString(lightbringer.getOutgoingCallTypeText());
+    } else {
+      mOutgoingLightbringerCall = mOutgoingVideoName;
+    }
   }
 
   public static boolean isMissedCallType(int callType) {
@@ -77,13 +94,17 @@
   }
 
   /** Returns the text used to represent the given call type. */
-  public CharSequence getCallTypeText(int callType, boolean isVideoCall, boolean isPulledCall) {
+  public CharSequence getCallTypeText(
+      int callType, boolean isVideoCall, boolean isPulledCall, boolean isLightbringerCall) {
     switch (callType) {
       case AppCompatConstants.CALLS_INCOMING_TYPE:
         if (isVideoCall) {
           if (isPulledCall) {
             return mIncomingVideoPulledName;
           } else {
+            if (isLightbringerCall) {
+              return mIncomingLightbringerCall;
+            }
             return mIncomingVideoName;
           }
         } else {
@@ -99,6 +120,9 @@
           if (isPulledCall) {
             return mOutgoingVideoPulledName;
           } else {
+            if (isLightbringerCall) {
+              return mOutgoingLightbringerCall;
+            }
             return mOutgoingVideoName;
           }
         } else {
diff --git a/java/com/android/dialer/calllogutils/res/values-ar/strings.xml b/java/com/android/dialer/calllogutils/res/values-ar/strings.xml
index 39afb6d..617d6d8 100644
--- a/java/com/android/dialer/calllogutils/res/values-ar/strings.xml
+++ b/java/com/android/dialer/calllogutils/res/values-ar/strings.xml
@@ -34,8 +34,8 @@
     <string name="call_details_seconds_abbreviation" msgid="5893806826648947126">"ث"</string>
     <string name="a11y_call_duration_format" msgid="2905525933361674470">"<xliff:g id="MINUTES_0">%d</xliff:g> <xliff:g id="MINUTES_TRANSLATION">%s</xliff:g> <xliff:g id="SECONDS_1">%d</xliff:g> <xliff:g id="SECONDS_TRANSLATION">%s</xliff:g>"</string>
     <string name="a11y_call_duration_short_format" msgid="5908875871251062453">"<xliff:g id="SECONDS_0">%d</xliff:g> <xliff:g id="SECONDS_TRANSLATION">%s</xliff:g>"</string>
-    <string name="call_duration_format_pattern" msgid="7566375153243313914">"<xliff:g id="MINUTES_SPECIAL_CHARACTER">%s</xliff:g>\'<xliff:g id="MINUTES_TRANSLATION">%s</xliff:g>\' <xliff:g id="SECONDS_SPECIAL_CHARACTER">%s</xliff:g>\'<xliff:g id="SECONDS_TRANSLATION">%s</xliff:g>\'"</string>
-    <string name="call_duration_short_format_pattern" msgid="1713177000235994790">"<xliff:g id="SECONDS_SPECIAL_CHARACTER">%s</xliff:g>\'<xliff:g id="SECONDS_TRANSLATION">%s</xliff:g>\'"</string>
+    <string name="call_duration_format_pattern" msgid="7566375153243313914">"<xliff:g id="MINUTES_SPECIAL_CHARACTER">%s</xliff:g>\'<xliff:g id="MINUTES_TRANSLATION">%s</xliff:g>\' <xliff:g id="SECONDS_SPECIAL_CHARACTER">%s</xliff:g>\'<xliff:g id="SECONDS_TRANSLATION">%s</xliff:g>"</string>
+    <string name="call_duration_short_format_pattern" msgid="1713177000235994790">"<xliff:g id="SECONDS_SPECIAL_CHARACTER">%s</xliff:g>\'<xliff:g id="SECONDS_TRANSLATION">%s</xliff:g>"</string>
     <plurals name="a11y_seconds" formatted="false" msgid="6695730844760611970">
       <item quantity="zero">ثوان</item>
       <item quantity="two">ثانيتان</item>
diff --git a/java/com/android/dialer/calllogutils/res/values-az/strings.xml b/java/com/android/dialer/calllogutils/res/values-az/strings.xml
index 0efe1e8..c280c8e 100644
--- a/java/com/android/dialer/calllogutils/res/values-az/strings.xml
+++ b/java/com/android/dialer/calllogutils/res/values-az/strings.xml
@@ -34,8 +34,8 @@
     <string name="call_details_seconds_abbreviation" msgid="5893806826648947126">"san"</string>
     <string name="a11y_call_duration_format" msgid="2905525933361674470">"<xliff:g id="MINUTES_0">%d</xliff:g> <xliff:g id="MINUTES_TRANSLATION">%s</xliff:g> <xliff:g id="SECONDS_1">%d</xliff:g> <xliff:g id="SECONDS_TRANSLATION">%s</xliff:g>"</string>
     <string name="a11y_call_duration_short_format" msgid="5908875871251062453">"<xliff:g id="SECONDS_0">%d</xliff:g> <xliff:g id="SECONDS_TRANSLATION">%s</xliff:g>"</string>
-    <string name="call_duration_format_pattern" msgid="7566375153243313914">"<xliff:g id="MINUTES_SPECIAL_CHARACTER">%s</xliff:g>\'<xliff:g id="MINUTES_TRANSLATION">%s</xliff:g>\' <xliff:g id="SECONDS_SPECIAL_CHARACTER">%s</xliff:g>\'<xliff:g id="SECONDS_TRANSLATION">%s</xliff:g>\'"</string>
-    <string name="call_duration_short_format_pattern" msgid="1713177000235994790">"<xliff:g id="SECONDS_SPECIAL_CHARACTER">%s</xliff:g>\'<xliff:g id="SECONDS_TRANSLATION">%s</xliff:g>\'"</string>
+    <string name="call_duration_format_pattern" msgid="7566375153243313914">"<xliff:g id="MINUTES_SPECIAL_CHARACTER">%s</xliff:g>\"<xliff:g id="MINUTES_TRANSLATION">%s</xliff:g>\" <xliff:g id="SECONDS_SPECIAL_CHARACTER">%s</xliff:g>\"<xliff:g id="SECONDS_TRANSLATION">%s</xliff:g>\""</string>
+    <string name="call_duration_short_format_pattern" msgid="1713177000235994790">"<xliff:g id="SECONDS_SPECIAL_CHARACTER">%s</xliff:g>\"<xliff:g id="SECONDS_TRANSLATION">%s</xliff:g>\""</string>
     <plurals name="a11y_seconds" formatted="false" msgid="6695730844760611970">
       <item quantity="other">saniyə</item>
       <item quantity="one">saniyə</item>
diff --git a/java/com/android/dialer/calllogutils/res/values-da/strings.xml b/java/com/android/dialer/calllogutils/res/values-da/strings.xml
index 21c6e0e..123002a 100644
--- a/java/com/android/dialer/calllogutils/res/values-da/strings.xml
+++ b/java/com/android/dialer/calllogutils/res/values-da/strings.xml
@@ -34,8 +34,8 @@
     <string name="call_details_seconds_abbreviation" msgid="5893806826648947126">"sek."</string>
     <string name="a11y_call_duration_format" msgid="2905525933361674470">"<xliff:g id="MINUTES_0">%d</xliff:g> <xliff:g id="MINUTES_TRANSLATION">%s</xliff:g> <xliff:g id="SECONDS_1">%d</xliff:g> <xliff:g id="SECONDS_TRANSLATION">%s</xliff:g>"</string>
     <string name="a11y_call_duration_short_format" msgid="5908875871251062453">"<xliff:g id="SECONDS_0">%d</xliff:g> <xliff:g id="SECONDS_TRANSLATION">%s</xliff:g>"</string>
-    <string name="call_duration_format_pattern" msgid="7566375153243313914">"<xliff:g id="MINUTES_SPECIAL_CHARACTER">%s</xliff:g> \'<xliff:g id="MINUTES_TRANSLATION">%s</xliff:g>\' <xliff:g id="SECONDS_SPECIAL_CHARACTER">%s</xliff:g> \'<xliff:g id="SECONDS_TRANSLATION">%s</xliff:g>\'"</string>
-    <string name="call_duration_short_format_pattern" msgid="1713177000235994790">"<xliff:g id="SECONDS_SPECIAL_CHARACTER">%s</xliff:g> \'<xliff:g id="SECONDS_TRANSLATION">%s</xliff:g>\'"</string>
+    <string name="call_duration_format_pattern" msgid="7566375153243313914">"<xliff:g id="MINUTES_SPECIAL_CHARACTER">%s</xliff:g>\' <xliff:g id="MINUTES_TRANSLATION">%s</xliff:g>\' <xliff:g id="SECONDS_SPECIAL_CHARACTER">%s</xliff:g>\' <xliff:g id="SECONDS_TRANSLATION">%s</xliff:g>\'"</string>
+    <string name="call_duration_short_format_pattern" msgid="1713177000235994790">"<xliff:g id="SECONDS_SPECIAL_CHARACTER">%s</xliff:g>\' <xliff:g id="SECONDS_TRANSLATION">%s</xliff:g>\'"</string>
     <plurals name="a11y_seconds" formatted="false" msgid="6695730844760611970">
       <item quantity="one">sekund</item>
       <item quantity="other">sekunder</item>
diff --git a/java/com/android/dialer/calllogutils/res/values-de/strings.xml b/java/com/android/dialer/calllogutils/res/values-de/strings.xml
index 4d6f416..5867b73 100644
--- a/java/com/android/dialer/calllogutils/res/values-de/strings.xml
+++ b/java/com/android/dialer/calllogutils/res/values-de/strings.xml
@@ -34,8 +34,8 @@
     <string name="call_details_seconds_abbreviation" msgid="5893806826648947126">"s"</string>
     <string name="a11y_call_duration_format" msgid="2905525933361674470">"<xliff:g id="MINUTES_0">%d</xliff:g> <xliff:g id="MINUTES_TRANSLATION">%s</xliff:g> <xliff:g id="SECONDS_1">%d</xliff:g> <xliff:g id="SECONDS_TRANSLATION">%s</xliff:g>"</string>
     <string name="a11y_call_duration_short_format" msgid="5908875871251062453">"<xliff:g id="SECONDS_0">%d</xliff:g> <xliff:g id="SECONDS_TRANSLATION">%s</xliff:g>"</string>
-    <string name="call_duration_format_pattern" msgid="7566375153243313914">"<xliff:g id="MINUTES_SPECIAL_CHARACTER">%s</xliff:g> \'<xliff:g id="MINUTES_TRANSLATION">%s</xliff:g>\' <xliff:g id="SECONDS_SPECIAL_CHARACTER">%s</xliff:g> \'<xliff:g id="SECONDS_TRANSLATION">%s</xliff:g>\'"</string>
-    <string name="call_duration_short_format_pattern" msgid="1713177000235994790">"<xliff:g id="SECONDS_SPECIAL_CHARACTER">%s</xliff:g> \'<xliff:g id="SECONDS_TRANSLATION">%s</xliff:g>\'"</string>
+    <string name="call_duration_format_pattern" msgid="7566375153243313914">"<xliff:g id="MINUTES_SPECIAL_CHARACTER">%s</xliff:g> \"<xliff:g id="MINUTES_TRANSLATION">%s</xliff:g>\" <xliff:g id="SECONDS_SPECIAL_CHARACTER">%s</xliff:g> \"<xliff:g id="SECONDS_TRANSLATION">%s</xliff:g>\""</string>
+    <string name="call_duration_short_format_pattern" msgid="1713177000235994790">"<xliff:g id="SECONDS_SPECIAL_CHARACTER">%s</xliff:g> \"<xliff:g id="SECONDS_TRANSLATION">%s</xliff:g>\""</string>
     <plurals name="a11y_seconds" formatted="false" msgid="6695730844760611970">
       <item quantity="other"> Sekunden</item>
       <item quantity="one"> Sekunde</item>
diff --git a/java/com/android/dialer/calllogutils/res/values-eu/strings.xml b/java/com/android/dialer/calllogutils/res/values-eu/strings.xml
index 7ab37c5..a097ec8 100644
--- a/java/com/android/dialer/calllogutils/res/values-eu/strings.xml
+++ b/java/com/android/dialer/calllogutils/res/values-eu/strings.xml
@@ -34,7 +34,7 @@
     <string name="call_details_seconds_abbreviation" msgid="5893806826648947126">"s"</string>
     <string name="a11y_call_duration_format" msgid="2905525933361674470">"<xliff:g id="MINUTES_0">%d</xliff:g> <xliff:g id="MINUTES_TRANSLATION">%s</xliff:g> eta <xliff:g id="SECONDS_1">%d</xliff:g> <xliff:g id="SECONDS_TRANSLATION">%s</xliff:g>"</string>
     <string name="a11y_call_duration_short_format" msgid="5908875871251062453">"<xliff:g id="SECONDS_0">%d</xliff:g> <xliff:g id="SECONDS_TRANSLATION">%s</xliff:g>"</string>
-    <string name="call_duration_format_pattern" msgid="7566375153243313914">"<xliff:g id="MINUTES_SPECIAL_CHARACTER">%s</xliff:g> \'<xliff:g id="MINUTES_TRANSLATION">%s</xliff:g>\' \'eta\' <xliff:g id="SECONDS_SPECIAL_CHARACTER">%s</xliff:g> \'<xliff:g id="SECONDS_TRANSLATION">%s</xliff:g>\'"</string>
+    <string name="call_duration_format_pattern" msgid="7566375153243313914">"<xliff:g id="MINUTES_SPECIAL_CHARACTER">%s</xliff:g> \'<xliff:g id="MINUTES_TRANSLATION">%s</xliff:g>\' eta <xliff:g id="SECONDS_SPECIAL_CHARACTER">%s</xliff:g> \'<xliff:g id="SECONDS_TRANSLATION">%s</xliff:g>\'"</string>
     <string name="call_duration_short_format_pattern" msgid="1713177000235994790">"<xliff:g id="SECONDS_SPECIAL_CHARACTER">%s</xliff:g> \'<xliff:g id="SECONDS_TRANSLATION">%s</xliff:g>\'"</string>
     <plurals name="a11y_seconds" formatted="false" msgid="6695730844760611970">
       <item quantity="other">segundo</item>
diff --git a/java/com/android/dialer/calllogutils/res/values-hi/strings.xml b/java/com/android/dialer/calllogutils/res/values-hi/strings.xml
index b9a6241..d20e88e 100644
--- a/java/com/android/dialer/calllogutils/res/values-hi/strings.xml
+++ b/java/com/android/dialer/calllogutils/res/values-hi/strings.xml
@@ -34,8 +34,8 @@
     <string name="call_details_seconds_abbreviation" msgid="5893806826648947126">"से."</string>
     <string name="a11y_call_duration_format" msgid="2905525933361674470">"<xliff:g id="MINUTES_0">%d</xliff:g> <xliff:g id="MINUTES_TRANSLATION">%s</xliff:g> <xliff:g id="SECONDS_1">%d</xliff:g> <xliff:g id="SECONDS_TRANSLATION">%s</xliff:g>"</string>
     <string name="a11y_call_duration_short_format" msgid="5908875871251062453">"<xliff:g id="SECONDS_0">%d</xliff:g> <xliff:g id="SECONDS_TRANSLATION">%s</xliff:g>"</string>
-    <string name="call_duration_format_pattern" msgid="7566375153243313914">"<xliff:g id="MINUTES_SPECIAL_CHARACTER">%s</xliff:g> \'<xliff:g id="MINUTES_TRANSLATION">%s</xliff:g>\' <xliff:g id="SECONDS_SPECIAL_CHARACTER">%s</xliff:g> \'<xliff:g id="SECONDS_TRANSLATION">%s</xliff:g>\'"</string>
-    <string name="call_duration_short_format_pattern" msgid="1713177000235994790">"<xliff:g id="SECONDS_SPECIAL_CHARACTER">%s</xliff:g> \'<xliff:g id="SECONDS_TRANSLATION">%s</xliff:g>\'"</string>
+    <string name="call_duration_format_pattern" msgid="7566375153243313914">"<xliff:g id="MINUTES_SPECIAL_CHARACTER">%s</xliff:g>\'<xliff:g id="MINUTES_TRANSLATION">%s</xliff:g>\' <xliff:g id="SECONDS_SPECIAL_CHARACTER">%s</xliff:g>\'<xliff:g id="SECONDS_TRANSLATION">%s</xliff:g>\'"</string>
+    <string name="call_duration_short_format_pattern" msgid="1713177000235994790">"<xliff:g id="SECONDS_SPECIAL_CHARACTER">%s</xliff:g>\'<xliff:g id="SECONDS_TRANSLATION">%s</xliff:g>\'"</string>
     <plurals name="a11y_seconds" formatted="false" msgid="6695730844760611970">
       <item quantity="one">सेकंड</item>
       <item quantity="other">सेकंड</item>
diff --git a/java/com/android/dialer/calllogutils/res/values-iw/strings.xml b/java/com/android/dialer/calllogutils/res/values-iw/strings.xml
index 1ab041a..2f29855 100644
--- a/java/com/android/dialer/calllogutils/res/values-iw/strings.xml
+++ b/java/com/android/dialer/calllogutils/res/values-iw/strings.xml
@@ -34,7 +34,7 @@
     <string name="call_details_seconds_abbreviation" msgid="5893806826648947126">"שנ\'"</string>
     <string name="a11y_call_duration_format" msgid="2905525933361674470">"<xliff:g id="MINUTES_0">%d</xliff:g> <xliff:g id="MINUTES_TRANSLATION">%s</xliff:g> ו-<xliff:g id="SECONDS_1">%d</xliff:g> <xliff:g id="SECONDS_TRANSLATION">%s</xliff:g>"</string>
     <string name="a11y_call_duration_short_format" msgid="5908875871251062453">"<xliff:g id="SECONDS_0">%d</xliff:g> <xliff:g id="SECONDS_TRANSLATION">%s</xliff:g>"</string>
-    <string name="call_duration_format_pattern" msgid="7566375153243313914">"<xliff:g id="MINUTES_SPECIAL_CHARACTER">%s</xliff:g>\'<xliff:g id="MINUTES_TRANSLATION">%s</xliff:g>\' <xliff:g id="SECONDS_SPECIAL_CHARACTER">%s</xliff:g>\'<xliff:g id="SECONDS_TRANSLATION">%s</xliff:g>\'"</string>
+    <string name="call_duration_format_pattern" msgid="7566375153243313914">"<xliff:g id="MINUTES_SPECIAL_CHARACTER">%s</xliff:g>\'<xliff:g id="MINUTES_TRANSLATION">%s</xliff:g>\' ו-<xliff:g id="SECONDS_SPECIAL_CHARACTER">%s</xliff:g>\'<xliff:g id="SECONDS_TRANSLATION">%s</xliff:g>\'"</string>
     <string name="call_duration_short_format_pattern" msgid="1713177000235994790">"<xliff:g id="SECONDS_SPECIAL_CHARACTER">%s</xliff:g>\'<xliff:g id="SECONDS_TRANSLATION">%s</xliff:g>\'"</string>
     <plurals name="a11y_seconds" formatted="false" msgid="6695730844760611970">
       <item quantity="two">שניות</item>
diff --git a/java/com/android/dialer/calllogutils/res/values-ky/strings.xml b/java/com/android/dialer/calllogutils/res/values-ky/strings.xml
index 76d389e..f758dab 100644
--- a/java/com/android/dialer/calllogutils/res/values-ky/strings.xml
+++ b/java/com/android/dialer/calllogutils/res/values-ky/strings.xml
@@ -35,7 +35,7 @@
     <string name="a11y_call_duration_format" msgid="2905525933361674470">"<xliff:g id="MINUTES_0">%d</xliff:g> <xliff:g id="MINUTES_TRANSLATION">%s</xliff:g> <xliff:g id="SECONDS_1">%d</xliff:g> <xliff:g id="SECONDS_TRANSLATION">%s</xliff:g>"</string>
     <string name="a11y_call_duration_short_format" msgid="5908875871251062453">"<xliff:g id="SECONDS_0">%d</xliff:g> <xliff:g id="SECONDS_TRANSLATION">%s</xliff:g>"</string>
     <string name="call_duration_format_pattern" msgid="7566375153243313914">"<xliff:g id="MINUTES_SPECIAL_CHARACTER">%s</xliff:g>\'<xliff:g id="MINUTES_TRANSLATION">%s</xliff:g>\' <xliff:g id="SECONDS_SPECIAL_CHARACTER">%s</xliff:g>\'<xliff:g id="SECONDS_TRANSLATION">%s</xliff:g>\'"</string>
-    <string name="call_duration_short_format_pattern" msgid="1713177000235994790">"<xliff:g id="SECONDS_SPECIAL_CHARACTER">%s</xliff:g> \'<xliff:g id="SECONDS_TRANSLATION">%s</xliff:g>\'"</string>
+    <string name="call_duration_short_format_pattern" msgid="1713177000235994790">"<xliff:g id="SECONDS_SPECIAL_CHARACTER">%s</xliff:g>\'<xliff:g id="SECONDS_TRANSLATION">%s</xliff:g>\'"</string>
     <plurals name="a11y_seconds" formatted="false" msgid="6695730844760611970">
       <item quantity="other">секундалар</item>
       <item quantity="one">секунда</item>
diff --git a/java/com/android/dialer/calllogutils/res/values-mr/strings.xml b/java/com/android/dialer/calllogutils/res/values-mr/strings.xml
index 9a7513b..c01f7c1 100644
--- a/java/com/android/dialer/calllogutils/res/values-mr/strings.xml
+++ b/java/com/android/dialer/calllogutils/res/values-mr/strings.xml
@@ -34,8 +34,8 @@
     <string name="call_details_seconds_abbreviation" msgid="5893806826648947126">"से"</string>
     <string name="a11y_call_duration_format" msgid="2905525933361674470">"<xliff:g id="MINUTES_0">%d</xliff:g> <xliff:g id="MINUTES_TRANSLATION">%s</xliff:g> <xliff:g id="SECONDS_1">%d</xliff:g> <xliff:g id="SECONDS_TRANSLATION">%s</xliff:g>"</string>
     <string name="a11y_call_duration_short_format" msgid="5908875871251062453">"<xliff:g id="SECONDS_0">%d</xliff:g> <xliff:g id="SECONDS_TRANSLATION">%s</xliff:g>"</string>
-    <string name="call_duration_format_pattern" msgid="7566375153243313914">"<xliff:g id="MINUTES_SPECIAL_CHARACTER">%s</xliff:g> \'<xliff:g id="MINUTES_TRANSLATION">%s</xliff:g>\' <xliff:g id="SECONDS_SPECIAL_CHARACTER">%s</xliff:g> \'<xliff:g id="SECONDS_TRANSLATION">%s</xliff:g>\'"</string>
-    <string name="call_duration_short_format_pattern" msgid="1713177000235994790">"<xliff:g id="SECONDS_SPECIAL_CHARACTER">%s</xliff:g> \'<xliff:g id="SECONDS_TRANSLATION">%s</xliff:g>\'"</string>
+    <string name="call_duration_format_pattern" msgid="7566375153243313914">"<xliff:g id="MINUTES_SPECIAL_CHARACTER">%s</xliff:g>\'<xliff:g id="MINUTES_TRANSLATION">%s</xliff:g>\' <xliff:g id="SECONDS_SPECIAL_CHARACTER">%s</xliff:g>\'<xliff:g id="SECONDS_TRANSLATION">%s</xliff:g>\'"</string>
+    <string name="call_duration_short_format_pattern" msgid="1713177000235994790">"<xliff:g id="SECONDS_SPECIAL_CHARACTER">%s</xliff:g>\'<xliff:g id="SECONDS_TRANSLATION">%s</xliff:g>\'"</string>
     <plurals name="a11y_seconds" formatted="false" msgid="6695730844760611970">
       <item quantity="one">सेकंद</item>
       <item quantity="other">सेकंद</item>
diff --git a/java/com/android/dialer/calllogutils/res/values-nb/strings.xml b/java/com/android/dialer/calllogutils/res/values-nb/strings.xml
index 4ec963d..2f74403 100644
--- a/java/com/android/dialer/calllogutils/res/values-nb/strings.xml
+++ b/java/com/android/dialer/calllogutils/res/values-nb/strings.xml
@@ -34,8 +34,8 @@
     <string name="call_details_seconds_abbreviation" msgid="5893806826648947126">"sek."</string>
     <string name="a11y_call_duration_format" msgid="2905525933361674470">"<xliff:g id="MINUTES_0">%d</xliff:g> <xliff:g id="MINUTES_TRANSLATION">%s</xliff:g> <xliff:g id="SECONDS_1">%d</xliff:g> <xliff:g id="SECONDS_TRANSLATION">%s</xliff:g>"</string>
     <string name="a11y_call_duration_short_format" msgid="5908875871251062453">"<xliff:g id="SECONDS_0">%d</xliff:g> <xliff:g id="SECONDS_TRANSLATION">%s</xliff:g>"</string>
-    <string name="call_duration_format_pattern" msgid="7566375153243313914">"<xliff:g id="MINUTES_SPECIAL_CHARACTER">%s</xliff:g> \'<xliff:g id="MINUTES_TRANSLATION">%s</xliff:g>\' <xliff:g id="SECONDS_SPECIAL_CHARACTER">%s</xliff:g> \'<xliff:g id="SECONDS_TRANSLATION">%s</xliff:g>\'"</string>
-    <string name="call_duration_short_format_pattern" msgid="1713177000235994790">"<xliff:g id="SECONDS_SPECIAL_CHARACTER">%s</xliff:g> \'<xliff:g id="SECONDS_TRANSLATION">%s</xliff:g>\'"</string>
+    <string name="call_duration_format_pattern" msgid="7566375153243313914">"<xliff:g id="MINUTES_SPECIAL_CHARACTER">%s</xliff:g>\'<xliff:g id="MINUTES_TRANSLATION">%s</xliff:g>\' <xliff:g id="SECONDS_SPECIAL_CHARACTER">%s</xliff:g>\'<xliff:g id="SECONDS_TRANSLATION">%s</xliff:g>\'"</string>
+    <string name="call_duration_short_format_pattern" msgid="1713177000235994790">"<xliff:g id="SECONDS_SPECIAL_CHARACTER">%s</xliff:g>\'<xliff:g id="SECONDS_TRANSLATION">%s</xliff:g>\'"</string>
     <plurals name="a11y_seconds" formatted="false" msgid="6695730844760611970">
       <item quantity="other">sekunder</item>
       <item quantity="one">sekund</item>
diff --git a/java/com/android/dialer/calllogutils/res/values-nl/strings.xml b/java/com/android/dialer/calllogutils/res/values-nl/strings.xml
index 5239928..d156109 100644
--- a/java/com/android/dialer/calllogutils/res/values-nl/strings.xml
+++ b/java/com/android/dialer/calllogutils/res/values-nl/strings.xml
@@ -34,8 +34,8 @@
     <string name="call_details_seconds_abbreviation" msgid="5893806826648947126">"s"</string>
     <string name="a11y_call_duration_format" msgid="2905525933361674470">"<xliff:g id="MINUTES_0">%d</xliff:g> <xliff:g id="MINUTES_TRANSLATION">%s</xliff:g> <xliff:g id="SECONDS_1">%d</xliff:g> <xliff:g id="SECONDS_TRANSLATION">%s</xliff:g>"</string>
     <string name="a11y_call_duration_short_format" msgid="5908875871251062453">"<xliff:g id="SECONDS_0">%d</xliff:g> <xliff:g id="SECONDS_TRANSLATION">%s</xliff:g>"</string>
-    <string name="call_duration_format_pattern" msgid="7566375153243313914">"<xliff:g id="MINUTES_SPECIAL_CHARACTER">%s</xliff:g> \'<xliff:g id="MINUTES_TRANSLATION">%s</xliff:g>\' <xliff:g id="SECONDS_SPECIAL_CHARACTER">%s</xliff:g> \'<xliff:g id="SECONDS_TRANSLATION">%s</xliff:g>\'"</string>
-    <string name="call_duration_short_format_pattern" msgid="1713177000235994790">"<xliff:g id="SECONDS_SPECIAL_CHARACTER">%s</xliff:g> \'<xliff:g id="SECONDS_TRANSLATION">%s</xliff:g>\'"</string>
+    <string name="call_duration_format_pattern" msgid="7566375153243313914">"<xliff:g id="MINUTES_SPECIAL_CHARACTER">%s</xliff:g>\'<xliff:g id="MINUTES_TRANSLATION">%s</xliff:g>\' <xliff:g id="SECONDS_SPECIAL_CHARACTER">%s</xliff:g>\'<xliff:g id="SECONDS_TRANSLATION">%s</xliff:g>\'"</string>
+    <string name="call_duration_short_format_pattern" msgid="1713177000235994790">"<xliff:g id="SECONDS_SPECIAL_CHARACTER">%s</xliff:g>\'<xliff:g id="SECONDS_TRANSLATION">%s</xliff:g>\'"</string>
     <plurals name="a11y_seconds" formatted="false" msgid="6695730844760611970">
       <item quantity="other">seconden</item>
       <item quantity="one">seconde</item>
diff --git a/java/com/android/dialer/calllogutils/res/values-no/strings.xml b/java/com/android/dialer/calllogutils/res/values-no/strings.xml
index 4ec963d..2f74403 100644
--- a/java/com/android/dialer/calllogutils/res/values-no/strings.xml
+++ b/java/com/android/dialer/calllogutils/res/values-no/strings.xml
@@ -34,8 +34,8 @@
     <string name="call_details_seconds_abbreviation" msgid="5893806826648947126">"sek."</string>
     <string name="a11y_call_duration_format" msgid="2905525933361674470">"<xliff:g id="MINUTES_0">%d</xliff:g> <xliff:g id="MINUTES_TRANSLATION">%s</xliff:g> <xliff:g id="SECONDS_1">%d</xliff:g> <xliff:g id="SECONDS_TRANSLATION">%s</xliff:g>"</string>
     <string name="a11y_call_duration_short_format" msgid="5908875871251062453">"<xliff:g id="SECONDS_0">%d</xliff:g> <xliff:g id="SECONDS_TRANSLATION">%s</xliff:g>"</string>
-    <string name="call_duration_format_pattern" msgid="7566375153243313914">"<xliff:g id="MINUTES_SPECIAL_CHARACTER">%s</xliff:g> \'<xliff:g id="MINUTES_TRANSLATION">%s</xliff:g>\' <xliff:g id="SECONDS_SPECIAL_CHARACTER">%s</xliff:g> \'<xliff:g id="SECONDS_TRANSLATION">%s</xliff:g>\'"</string>
-    <string name="call_duration_short_format_pattern" msgid="1713177000235994790">"<xliff:g id="SECONDS_SPECIAL_CHARACTER">%s</xliff:g> \'<xliff:g id="SECONDS_TRANSLATION">%s</xliff:g>\'"</string>
+    <string name="call_duration_format_pattern" msgid="7566375153243313914">"<xliff:g id="MINUTES_SPECIAL_CHARACTER">%s</xliff:g>\'<xliff:g id="MINUTES_TRANSLATION">%s</xliff:g>\' <xliff:g id="SECONDS_SPECIAL_CHARACTER">%s</xliff:g>\'<xliff:g id="SECONDS_TRANSLATION">%s</xliff:g>\'"</string>
+    <string name="call_duration_short_format_pattern" msgid="1713177000235994790">"<xliff:g id="SECONDS_SPECIAL_CHARACTER">%s</xliff:g>\'<xliff:g id="SECONDS_TRANSLATION">%s</xliff:g>\'"</string>
     <plurals name="a11y_seconds" formatted="false" msgid="6695730844760611970">
       <item quantity="other">sekunder</item>
       <item quantity="one">sekund</item>
diff --git a/java/com/android/dialer/calllogutils/res/values-pt-rBR/strings.xml b/java/com/android/dialer/calllogutils/res/values-pt-rBR/strings.xml
index ba526a8..8c13e81 100644
--- a/java/com/android/dialer/calllogutils/res/values-pt-rBR/strings.xml
+++ b/java/com/android/dialer/calllogutils/res/values-pt-rBR/strings.xml
@@ -34,8 +34,8 @@
     <string name="call_details_seconds_abbreviation" msgid="5893806826648947126">"s"</string>
     <string name="a11y_call_duration_format" msgid="2905525933361674470">"<xliff:g id="MINUTES_0">%d</xliff:g> <xliff:g id="MINUTES_TRANSLATION">%s</xliff:g> <xliff:g id="SECONDS_1">%d</xliff:g> <xliff:g id="SECONDS_TRANSLATION">%s</xliff:g>"</string>
     <string name="a11y_call_duration_short_format" msgid="5908875871251062453">"<xliff:g id="SECONDS_0">%d</xliff:g> <xliff:g id="SECONDS_TRANSLATION">%s</xliff:g>"</string>
-    <string name="call_duration_format_pattern" msgid="7566375153243313914">"<xliff:g id="MINUTES_SPECIAL_CHARACTER">%s</xliff:g> \'<xliff:g id="MINUTES_TRANSLATION">%s</xliff:g>\' <xliff:g id="SECONDS_SPECIAL_CHARACTER">%s</xliff:g> \'<xliff:g id="SECONDS_TRANSLATION">%s</xliff:g>\'"</string>
-    <string name="call_duration_short_format_pattern" msgid="1713177000235994790">"<xliff:g id="SECONDS_SPECIAL_CHARACTER">%s</xliff:g> \'<xliff:g id="SECONDS_TRANSLATION">%s</xliff:g>\'"</string>
+    <string name="call_duration_format_pattern" msgid="7566375153243313914">"<xliff:g id="MINUTES_SPECIAL_CHARACTER">%s</xliff:g> \"<xliff:g id="MINUTES_TRANSLATION">%s</xliff:g>\" <xliff:g id="SECONDS_SPECIAL_CHARACTER">%s</xliff:g> \"<xliff:g id="SECONDS_TRANSLATION">%s</xliff:g>\""</string>
+    <string name="call_duration_short_format_pattern" msgid="1713177000235994790">"<xliff:g id="SECONDS_SPECIAL_CHARACTER">%s</xliff:g> \"<xliff:g id="SECONDS_TRANSLATION">%s</xliff:g>\""</string>
     <plurals name="a11y_seconds" formatted="false" msgid="6695730844760611970">
       <item quantity="one"> segundo</item>
       <item quantity="other"> segundos</item>
diff --git a/java/com/android/dialer/calllogutils/res/values-pt-rPT/strings.xml b/java/com/android/dialer/calllogutils/res/values-pt-rPT/strings.xml
index adb5dac..e24d245 100644
--- a/java/com/android/dialer/calllogutils/res/values-pt-rPT/strings.xml
+++ b/java/com/android/dialer/calllogutils/res/values-pt-rPT/strings.xml
@@ -34,8 +34,8 @@
     <string name="call_details_seconds_abbreviation" msgid="5893806826648947126">"seg"</string>
     <string name="a11y_call_duration_format" msgid="2905525933361674470">"<xliff:g id="MINUTES_0">%d</xliff:g> <xliff:g id="MINUTES_TRANSLATION">%s</xliff:g>, <xliff:g id="SECONDS_1">%d</xliff:g> <xliff:g id="SECONDS_TRANSLATION">%s</xliff:g>"</string>
     <string name="a11y_call_duration_short_format" msgid="5908875871251062453">"<xliff:g id="SECONDS_0">%d</xliff:g> <xliff:g id="SECONDS_TRANSLATION">%s</xliff:g>"</string>
-    <string name="call_duration_format_pattern" msgid="7566375153243313914">"<xliff:g id="MINUTES_SPECIAL_CHARACTER">%s</xliff:g>\'<xliff:g id="MINUTES_TRANSLATION">%s</xliff:g>\', <xliff:g id="SECONDS_SPECIAL_CHARACTER">%s</xliff:g>\'<xliff:g id="SECONDS_TRANSLATION">%s</xliff:g>\'"</string>
-    <string name="call_duration_short_format_pattern" msgid="1713177000235994790">"<xliff:g id="SECONDS_SPECIAL_CHARACTER">%s</xliff:g> \'<xliff:g id="SECONDS_TRANSLATION">%s</xliff:g>\'"</string>
+    <string name="call_duration_format_pattern" msgid="7566375153243313914">"<xliff:g id="MINUTES_SPECIAL_CHARACTER">%s</xliff:g>\"<xliff:g id="MINUTES_TRANSLATION">%s</xliff:g>\", <xliff:g id="SECONDS_SPECIAL_CHARACTER">%s</xliff:g>\"<xliff:g id="SECONDS_TRANSLATION">%s</xliff:g>\""</string>
+    <string name="call_duration_short_format_pattern" msgid="1713177000235994790">"<xliff:g id="SECONDS_SPECIAL_CHARACTER">%s</xliff:g> \"<xliff:g id="SECONDS_TRANSLATION">%s</xliff:g>\""</string>
     <plurals name="a11y_seconds" formatted="false" msgid="6695730844760611970">
       <item quantity="one">seconds</item>
       <item quantity="other">segundos</item>
diff --git a/java/com/android/dialer/calllogutils/res/values-pt/strings.xml b/java/com/android/dialer/calllogutils/res/values-pt/strings.xml
index ba526a8..8c13e81 100644
--- a/java/com/android/dialer/calllogutils/res/values-pt/strings.xml
+++ b/java/com/android/dialer/calllogutils/res/values-pt/strings.xml
@@ -34,8 +34,8 @@
     <string name="call_details_seconds_abbreviation" msgid="5893806826648947126">"s"</string>
     <string name="a11y_call_duration_format" msgid="2905525933361674470">"<xliff:g id="MINUTES_0">%d</xliff:g> <xliff:g id="MINUTES_TRANSLATION">%s</xliff:g> <xliff:g id="SECONDS_1">%d</xliff:g> <xliff:g id="SECONDS_TRANSLATION">%s</xliff:g>"</string>
     <string name="a11y_call_duration_short_format" msgid="5908875871251062453">"<xliff:g id="SECONDS_0">%d</xliff:g> <xliff:g id="SECONDS_TRANSLATION">%s</xliff:g>"</string>
-    <string name="call_duration_format_pattern" msgid="7566375153243313914">"<xliff:g id="MINUTES_SPECIAL_CHARACTER">%s</xliff:g> \'<xliff:g id="MINUTES_TRANSLATION">%s</xliff:g>\' <xliff:g id="SECONDS_SPECIAL_CHARACTER">%s</xliff:g> \'<xliff:g id="SECONDS_TRANSLATION">%s</xliff:g>\'"</string>
-    <string name="call_duration_short_format_pattern" msgid="1713177000235994790">"<xliff:g id="SECONDS_SPECIAL_CHARACTER">%s</xliff:g> \'<xliff:g id="SECONDS_TRANSLATION">%s</xliff:g>\'"</string>
+    <string name="call_duration_format_pattern" msgid="7566375153243313914">"<xliff:g id="MINUTES_SPECIAL_CHARACTER">%s</xliff:g> \"<xliff:g id="MINUTES_TRANSLATION">%s</xliff:g>\" <xliff:g id="SECONDS_SPECIAL_CHARACTER">%s</xliff:g> \"<xliff:g id="SECONDS_TRANSLATION">%s</xliff:g>\""</string>
+    <string name="call_duration_short_format_pattern" msgid="1713177000235994790">"<xliff:g id="SECONDS_SPECIAL_CHARACTER">%s</xliff:g> \"<xliff:g id="SECONDS_TRANSLATION">%s</xliff:g>\""</string>
     <plurals name="a11y_seconds" formatted="false" msgid="6695730844760611970">
       <item quantity="one"> segundo</item>
       <item quantity="other"> segundos</item>
diff --git a/java/com/android/dialer/calllogutils/res/values-sw/strings.xml b/java/com/android/dialer/calllogutils/res/values-sw/strings.xml
index 46217e7..5a5a690 100644
--- a/java/com/android/dialer/calllogutils/res/values-sw/strings.xml
+++ b/java/com/android/dialer/calllogutils/res/values-sw/strings.xml
@@ -34,8 +34,8 @@
     <string name="call_details_seconds_abbreviation" msgid="5893806826648947126">"sek"</string>
     <string name="a11y_call_duration_format" msgid="2905525933361674470">"<xliff:g id="MINUTES_0">%d</xliff:g> <xliff:g id="MINUTES_TRANSLATION">%s</xliff:g> <xliff:g id="SECONDS_1">%d</xliff:g> <xliff:g id="SECONDS_TRANSLATION">%s</xliff:g>"</string>
     <string name="a11y_call_duration_short_format" msgid="5908875871251062453">"<xliff:g id="SECONDS_0">%d</xliff:g> <xliff:g id="SECONDS_TRANSLATION">%s</xliff:g>"</string>
-    <string name="call_duration_format_pattern" msgid="7566375153243313914">"\'<xliff:g id="MINUTES_TRANSLATION">%s</xliff:g>\'<xliff:g id="MINUTES_SPECIAL_CHARACTER">%s</xliff:g> \'<xliff:g id="SECONDS_TRANSLATION">%s</xliff:g>\'<xliff:g id="SECONDS_SPECIAL_CHARACTER">%s</xliff:g>"</string>
-    <string name="call_duration_short_format_pattern" msgid="1713177000235994790">"\'<xliff:g id="SECONDS_TRANSLATION">%s</xliff:g>\'<xliff:g id="SECONDS_SPECIAL_CHARACTER">%s</xliff:g>"</string>
+    <string name="call_duration_format_pattern" msgid="7566375153243313914">"<xliff:g id="MINUTES_SPECIAL_CHARACTER">%s</xliff:g>\'<xliff:g id="MINUTES_TRANSLATION">%s</xliff:g>\' <xliff:g id="SECONDS_SPECIAL_CHARACTER">%s</xliff:g>\'<xliff:g id="SECONDS_TRANSLATION">%s</xliff:g>\'"</string>
+    <string name="call_duration_short_format_pattern" msgid="1713177000235994790">"<xliff:g id="SECONDS_SPECIAL_CHARACTER">%s</xliff:g>\'<xliff:g id="SECONDS_TRANSLATION">%s</xliff:g>\'"</string>
     <plurals name="a11y_seconds" formatted="false" msgid="6695730844760611970">
       <item quantity="other">Sekunde</item>
       <item quantity="one">Sekunde</item>
diff --git a/java/com/android/dialer/calllogutils/res/values-tr/strings.xml b/java/com/android/dialer/calllogutils/res/values-tr/strings.xml
index 93cf690..78e0b5b 100644
--- a/java/com/android/dialer/calllogutils/res/values-tr/strings.xml
+++ b/java/com/android/dialer/calllogutils/res/values-tr/strings.xml
@@ -34,8 +34,8 @@
     <string name="call_details_seconds_abbreviation" msgid="5893806826648947126">"sn."</string>
     <string name="a11y_call_duration_format" msgid="2905525933361674470">"<xliff:g id="MINUTES_0">%d</xliff:g> <xliff:g id="MINUTES_TRANSLATION">%s</xliff:g> <xliff:g id="SECONDS_1">%d</xliff:g> <xliff:g id="SECONDS_TRANSLATION">%s</xliff:g>"</string>
     <string name="a11y_call_duration_short_format" msgid="5908875871251062453">"<xliff:g id="SECONDS_0">%d</xliff:g> <xliff:g id="SECONDS_TRANSLATION">%s</xliff:g>"</string>
-    <string name="call_duration_format_pattern" msgid="7566375153243313914">"<xliff:g id="MINUTES_SPECIAL_CHARACTER">%s</xliff:g> \'<xliff:g id="MINUTES_TRANSLATION">%s</xliff:g>\' <xliff:g id="SECONDS_SPECIAL_CHARACTER">%s</xliff:g> \'<xliff:g id="SECONDS_TRANSLATION">%s</xliff:g>\'"</string>
-    <string name="call_duration_short_format_pattern" msgid="1713177000235994790">"<xliff:g id="SECONDS_SPECIAL_CHARACTER">%s</xliff:g> \'<xliff:g id="SECONDS_TRANSLATION">%s</xliff:g>\'"</string>
+    <string name="call_duration_format_pattern" msgid="7566375153243313914">"<xliff:g id="MINUTES_SPECIAL_CHARACTER">%s</xliff:g> \"<xliff:g id="MINUTES_TRANSLATION">%s</xliff:g>\" <xliff:g id="SECONDS_SPECIAL_CHARACTER">%s</xliff:g> \"<xliff:g id="SECONDS_TRANSLATION">%s</xliff:g>\""</string>
+    <string name="call_duration_short_format_pattern" msgid="1713177000235994790">"<xliff:g id="SECONDS_SPECIAL_CHARACTER">%s</xliff:g> \"<xliff:g id="SECONDS_TRANSLATION">%s</xliff:g>\""</string>
     <plurals name="a11y_seconds" formatted="false" msgid="6695730844760611970">
       <item quantity="other">saniye</item>
       <item quantity="one">saniye</item>
diff --git a/java/com/android/dialer/common/AndroidManifest.xml b/java/com/android/dialer/common/AndroidManifest.xml
index ae43d66..8892b58 100644
--- a/java/com/android/dialer/common/AndroidManifest.xml
+++ b/java/com/android/dialer/common/AndroidManifest.xml
@@ -1,3 +1,18 @@
+<!--
+  ~ 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
+  -->
 <manifest
   package="com.android.dialer.common">
 </manifest>
diff --git a/java/com/android/dialer/common/concurrent/DefaultDialerExecutorFactory.java b/java/com/android/dialer/common/concurrent/DefaultDialerExecutorFactory.java
index 82e517d..a87bbce 100644
--- a/java/com/android/dialer/common/concurrent/DefaultDialerExecutorFactory.java
+++ b/java/com/android/dialer/common/concurrent/DefaultDialerExecutorFactory.java
@@ -166,17 +166,7 @@
             });
 
     private static final Executor defaultParallelExecutor =
-        Executors.newFixedThreadPool(
-            5,
-            new ThreadFactory() {
-              @Override
-              public Thread newThread(Runnable runnable) {
-                LogUtil.i("NonUiTaskBuilder.newThread", "creating parallel thread");
-                Thread thread = new Thread(runnable, "NonUiTaskBuilder-Parallel");
-                thread.setPriority(4); // Corresponds to Process.THREAD_PRIORITY_BACKGROUND
-                return thread;
-              }
-            });
+        DialerExecutors.getLowPriorityThreadPool();
 
     NonUiTaskBuilder(Worker<InputT, OutputT> worker) {
       this(worker, defaultSerialExecutorService, defaultParallelExecutor);
diff --git a/java/com/android/dialer/common/concurrent/DialerExecutors.java b/java/com/android/dialer/common/concurrent/DialerExecutors.java
index 148d866..81b3c5c 100644
--- a/java/com/android/dialer/common/concurrent/DialerExecutors.java
+++ b/java/com/android/dialer/common/concurrent/DialerExecutors.java
@@ -19,7 +19,11 @@
 import android.app.FragmentManager;
 import android.support.annotation.NonNull;
 import com.android.dialer.common.Assert;
+import com.android.dialer.common.LogUtil;
 import com.android.dialer.common.concurrent.DialerExecutor.Worker;
+import java.util.concurrent.Executor;
+import java.util.concurrent.Executors;
+import java.util.concurrent.ThreadFactory;
 
 /**
  * Factory methods for creating {@link DialerExecutor} objects for doing background work.
@@ -131,4 +135,27 @@
       @NonNull Worker<InputT, OutputT> worker) {
     return new DefaultDialerExecutorFactory().createNonUiTaskBuilder(Assert.isNotNull(worker));
   }
+
+  private static final Executor lowPriorityThreadPool =
+      Executors.newFixedThreadPool(
+          5,
+          new ThreadFactory() {
+            @Override
+            public Thread newThread(Runnable runnable) {
+              LogUtil.i("DialerExecutors.newThread", "creating low priority thread");
+              Thread thread = new Thread(runnable, "DialerExecutors-LowPriority");
+              thread.setPriority(4); // Corresponds to Process.THREAD_PRIORITY_BACKGROUND
+              return thread;
+            }
+          });
+
+  /**
+   * An application-wide thread pool used for low priority (non-UI) tasks.
+   *
+   * <p>This exists to prevent each individual dialer component from having to create its own
+   * threads/pools, which would result in the application having more threads than really necessary.
+   */
+  public static Executor getLowPriorityThreadPool() {
+    return lowPriorityThreadPool;
+  }
 }
diff --git a/java/com/android/dialer/common/concurrent/FallibleAsyncTask.java b/java/com/android/dialer/common/concurrent/FallibleAsyncTask.java
index 6d02fe6..c7a7f36 100644
--- a/java/com/android/dialer/common/concurrent/FallibleAsyncTask.java
+++ b/java/com/android/dialer/common/concurrent/FallibleAsyncTask.java
@@ -30,7 +30,9 @@
  * @param <ParamsT> the type of the parameters sent to the task upon execution
  * @param <ProgressT> the type of the progress units published during the background computation
  * @param <ResultT> the type of the result of the background computation
+ * @deprecated Please use {@link DialerExecutors}.
  */
+@Deprecated
 public abstract class FallibleAsyncTask<ParamsT, ProgressT, ResultT>
     extends AsyncTask<ParamsT, ProgressT, FallibleTaskResult<ResultT>> {
 
diff --git a/java/com/android/dialer/common/database/Selection.java b/java/com/android/dialer/common/database/Selection.java
new file mode 100644
index 0000000..b61472d
--- /dev/null
+++ b/java/com/android/dialer/common/database/Selection.java
@@ -0,0 +1,260 @@
+/*
+ * 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
+ */
+
+package com.android.dialer.common.database;
+
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+import com.android.dialer.common.Assert;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * Utility to build SQL selections. Handles string concatenation, nested statements, empty
+ * statements, and tracks the selection arguments.
+ *
+ * <p>A selection can be build from a string, factory methods like {@link #column(String)}, or use
+ * {@link Builder} to build complex nested selection with multiple operators. The Selection manages
+ * the {@code selection} and {@code selectionArgs} passed into {@link
+ * android.content.ContentResolver#query(android.net.Uri, String[], String, String[], String)}.
+ *
+ * <p>Example:
+ *
+ * <pre><code>
+ *   fromString("foo = 1")
+ * </code></pre>
+ *
+ * expands into "(foo = 1)", {}
+ *
+ * <p>
+ *
+ * <pre><code>
+ *   column("foo").is("LIKE", "bar")
+ * </code></pre>
+ *
+ * expands into "(foo LIKE ?)", {"bar"}
+ *
+ * <p>
+ *
+ * <pre><code>
+ *   builder()
+ *     .and(
+ *       fromString("foo = ?", "1").buildUpon()
+ *       .or(column("bar").is("<", 2))
+ *       .build())
+ *     .and(not(column("baz").is("!= 3")))
+ *     .build();
+ * </code></pre>
+ *
+ * expands into "(((foo = ?) OR (bar < ?)) AND (NOT (baz != 3)))", {"1", "2"}
+ */
+public final class Selection {
+
+  private final String selection;
+  private final String[] selectionArgs;
+
+  private Selection(@NonNull String selection, @NonNull String[] selectionArgs) {
+    this.selection = selection;
+    this.selectionArgs = selectionArgs;
+  }
+
+  @NonNull
+  public String getSelection() {
+    return selection;
+  }
+
+  @NonNull
+  public String[] getSelectionArgs() {
+    return selectionArgs;
+  }
+
+  public boolean isEmpty() {
+    return selection.isEmpty();
+  }
+
+  /**
+   * @return a mutable builder that appends to the selection. The selection will be parenthesized
+   *     before anything is appended to it.
+   */
+  @NonNull
+  public Builder buildUpon() {
+    return new Builder(this);
+  }
+
+  /** @return a builder that is empty. */
+  @NonNull
+  public static Builder builder() {
+    return new Builder();
+  }
+
+  /**
+   * @return a Selection built from regular selection string/args pair. The result selection will be
+   *     enclosed in a parenthesis.
+   */
+  @NonNull
+  public static Selection fromString(@Nullable String selection, @Nullable String... args) {
+    return new Builder(selection, args).build();
+  }
+
+  /** @return a selection that is negated */
+  @NonNull
+  public static Selection not(@NonNull Selection selection) {
+    Assert.checkArgument(!selection.isEmpty());
+    return fromString("NOT " + selection.getSelection(), selection.getSelectionArgs());
+  }
+
+  /**
+   * Build a selection based on condition upon a column. is() should be called to complete the
+   * selection.
+   */
+  @NonNull
+  public static Column column(@NonNull String column) {
+    return new Column(column);
+  }
+
+  /** Helper class to build a selection based on condition upon a column. */
+  public static class Column {
+
+    @NonNull private final String column;
+
+    private Column(@NonNull String column) {
+      this.column = Assert.isNotNull(column);
+    }
+
+    /** Expands to "<column> <operator> ?" and add {@code value} to the arguments. */
+    @NonNull
+    public Selection is(@NonNull String operator, @NonNull Object value) {
+      return fromString(column + " " + Assert.isNotNull(operator) + " ?", value.toString());
+    }
+
+    /**
+     * Expands to "<column> <operator>". {@link #is(String, Object)} should be used if the condition
+     * is comparing to a string or a user input value, which must be sanitized.
+     */
+    @NonNull
+    public Selection is(@NonNull String condition) {
+      return fromString(column + " " + Assert.isNotNull(condition));
+    }
+  }
+
+  /** Builder for {@link Selection} */
+  public static final class Builder {
+
+    private final StringBuilder selection = new StringBuilder();
+    private final List<String> selectionArgs = new ArrayList<>();
+
+    private Builder() {}
+
+    private Builder(@Nullable String selection, @Nullable String... args) {
+      if (selection == null) {
+        return;
+      }
+      checkArgsCount(selection, args);
+      this.selection.append(parenthesized(selection));
+      if (args != null) {
+        Collections.addAll(selectionArgs, args);
+      }
+    }
+
+    private Builder(@NonNull Selection selection) {
+      this.selection.append(selection.getSelection());
+      Collections.addAll(selectionArgs, selection.selectionArgs);
+    }
+
+    @NonNull
+    public Selection build() {
+      if (selection.length() == 0) {
+        return new Selection("", new String[] {});
+      }
+      return new Selection(
+          parenthesized(selection.toString()),
+          selectionArgs.toArray(new String[selectionArgs.size()]));
+    }
+
+    @NonNull
+    public Builder and(@NonNull Selection selection) {
+      if (selection.isEmpty()) {
+        return this;
+      }
+
+      if (this.selection.length() > 0) {
+        this.selection.append(" AND ");
+      }
+      this.selection.append(selection.getSelection());
+      Collections.addAll(selectionArgs, selection.getSelectionArgs());
+      return this;
+    }
+
+    @NonNull
+    public Builder or(@NonNull Selection selection) {
+      if (selection.isEmpty()) {
+        return this;
+      }
+
+      if (this.selection.length() > 0) {
+        this.selection.append(" OR ");
+      }
+      this.selection.append(selection.getSelection());
+      Collections.addAll(selectionArgs, selection.getSelectionArgs());
+      return this;
+    }
+
+    private static void checkArgsCount(@NonNull String selection, @Nullable String... args) {
+      int argsInSelection = 0;
+      for (int i = 0; i < selection.length(); i++) {
+        if (selection.charAt(i) == '?') {
+          argsInSelection++;
+        }
+      }
+      Assert.checkArgument(argsInSelection == (args == null ? 0 : args.length));
+    }
+  }
+
+  /**
+   * Parenthesized the {@code string}. Will not parenthesized if {@code string} is empty or is
+   * already parenthesized (top level parenthesis encloses the whole string).
+   */
+  @NonNull
+  private static String parenthesized(@NonNull String string) {
+    if (string.isEmpty()) {
+      return "";
+    }
+    if (!string.startsWith("(")) {
+      return "(" + string + ")";
+    }
+    int depth = 1;
+    for (int i = 1; i < string.length() - 1; i++) {
+      switch (string.charAt(i)) {
+        case '(':
+          depth++;
+          break;
+        case ')':
+          depth--;
+          if (depth == 0) {
+            // First '(' closed before the string has ended,need an additional level of nesting.
+            // For example "(A) AND (B)" should become "((A) AND (B))"
+            return "(" + string + ")";
+          }
+          break;
+        default:
+          continue;
+      }
+    }
+    Assert.checkArgument(depth == 1);
+    return string;
+  }
+}
diff --git a/java/com/android/dialer/common/res/values/strings.xml b/java/com/android/dialer/common/res/values/strings.xml
index 8e96161..770f42f 100644
--- a/java/com/android/dialer/common/res/values/strings.xml
+++ b/java/com/android/dialer/common/res/values/strings.xml
@@ -1,4 +1,19 @@
 <?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ 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
+  -->
 <resources>
   <string name="network_name_wifi">Wifi</string>
   <string name="network_name_mobile">Mobile</string>
diff --git a/java/com/android/contacts/common/compat/TelephonyManagerCompat.java b/java/com/android/dialer/compat/telephony/TelephonyManagerCompat.java
similarity index 87%
rename from java/com/android/contacts/common/compat/TelephonyManagerCompat.java
rename to java/com/android/dialer/compat/telephony/TelephonyManagerCompat.java
index 02113ca..22ec70c 100644
--- a/java/com/android/contacts/common/compat/TelephonyManagerCompat.java
+++ b/java/com/android/dialer/compat/telephony/TelephonyManagerCompat.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.contacts.common.compat;
+package com.android.dialer.compat.telephony;
 
 import android.content.Context;
 import android.content.Intent;
@@ -32,7 +32,7 @@
 
 public class TelephonyManagerCompat {
 
-  // TODO: Use public API for these constants when available
+  // TODO(maxwelb): Use public API for these constants when available
   public static final String EVENT_HANDOVER_VIDEO_FROM_WIFI_TO_LTE =
       "android.telephony.event.EVENT_HANDOVER_VIDEO_FROM_WIFI_TO_LTE";
   public static final String EVENT_HANDOVER_TO_WIFI_FAILED =
@@ -50,6 +50,23 @@
 
   private static final String SECRET_CODE_ACTION = "android.provider.Telephony.SECRET_CODE";
 
+  // TODO(erfanian): b/63995261 Replace with the platform/telecom constant when available.
+  /**
+   * Indicates that the call being placed originated from a known contact.
+   *
+   * <p>This signals to the telephony platform that an outgoing call qualifies for assisted dialing.
+   */
+  public static final String ALLOW_ASSISTED_DIAL = "android.telecom.extra.ALLOW_ASSISTED_DIAL";
+
+  // TODO(erfanian): b/63995261 Replace with the platform/telecom constant when available.
+  /**
+   * Indicates that an outgoing call has undergone assisted dialing.
+   *
+   * <p>Unlike {@link ALLOW_ASSISTED_DIAL}, the presence of this key further indicates that a call
+   * has undergone Assisted Dialing -- not just that it qualified for Assisted Dialing.
+   */
+  public static final String IS_ASSISTED_DIALED = "android.telecom.extra.IS_ASSISTED_DIALED";
+
   /**
    * Returns the number of phones available. Returns 1 for Single standby mode (Single SIM
    * functionality) Returns 2 for Dual standby mode.(Dual SIM functionality)
@@ -120,7 +137,7 @@
   }
 
   /**
-   * This method uses a new system API to enable or disable visual voicemail. TODO: restrict
+   * This method uses a new system API to enable or disable visual voicemail. TODO(twyen): restrict
    * to N MR1, not needed in future SDK.
    */
   public static void setVisualVoicemailEnabled(
@@ -138,7 +155,7 @@
   }
 
   /**
-   * This method uses a new system API to check if visual voicemail is enabled TODO: restrict
+   * This method uses a new system API to check if visual voicemail is enabled TODO(twyen): restrict
    * to N MR1, not needed in future SDK.
    */
   public static boolean isVisualVoicemailEnabled(
diff --git a/java/com/android/dialer/configprovider/SharedPrefConfigProvider.java b/java/com/android/dialer/configprovider/SharedPrefConfigProvider.java
index fad25a4..6ee4695 100644
--- a/java/com/android/dialer/configprovider/SharedPrefConfigProvider.java
+++ b/java/com/android/dialer/configprovider/SharedPrefConfigProvider.java
@@ -20,11 +20,11 @@
 import android.content.Intent;
 import android.content.SharedPreferences;
 import android.content.SharedPreferences.Editor;
-import android.os.StrictMode;
 import android.support.annotation.Nullable;
 import com.android.dialer.common.Assert;
 import com.android.dialer.common.LogUtil;
 import com.android.dialer.inject.ApplicationContext;
+import com.android.dialer.strictmode.DialerStrictMode;
 import com.android.dialer.util.DialerUtils;
 import javax.inject.Inject;
 
@@ -95,37 +95,26 @@
 
   @Override
   public String getString(String key, String defaultValue) {
-    return bypassStrictMode(
+    // Reading shared prefs on the main thread is generally safe since a single instance is cached.
+    return DialerStrictMode.bypass(
         () -> getSharedPrefs(appContext).getString(PREF_PREFIX + key, defaultValue));
   }
 
   @Override
   public long getLong(String key, long defaultValue) {
-    return bypassStrictMode(
+    // Reading shared prefs on the main thread is generally safe since a single instance is cached.
+    return DialerStrictMode.bypass(
         () -> getSharedPrefs(appContext).getLong(PREF_PREFIX + key, defaultValue));
   }
 
   @Override
   public boolean getBoolean(String key, boolean defaultValue) {
-    return bypassStrictMode(
+    // Reading shared prefs on the main thread is generally safe since a single instance is cached.
+    return DialerStrictMode.bypass(
         () -> getSharedPrefs(appContext).getBoolean(PREF_PREFIX + key, defaultValue));
   }
 
   private static SharedPreferences getSharedPrefs(Context appContext) {
     return DialerUtils.getDefaultSharedPreferenceForDeviceProtectedStorageContext(appContext);
   }
-
-  private interface Provider<T> {
-    T get();
-  }
-
-  // Reading shared prefs on the main thread is generally safe since a single instance is cached.
-  private static <T> T bypassStrictMode(Provider<T> provider) {
-    StrictMode.ThreadPolicy oldPolicy = StrictMode.allowThreadDiskReads();
-    try {
-      return provider.get();
-    } finally {
-      StrictMode.setThreadPolicy(oldPolicy);
-    }
-  }
 }
diff --git a/java/com/android/dialer/constants/Constants.java b/java/com/android/dialer/constants/Constants.java
index 076393e..f9d07e3 100644
--- a/java/com/android/dialer/constants/Constants.java
+++ b/java/com/android/dialer/constants/Constants.java
@@ -16,6 +16,7 @@
 
 package com.android.dialer.constants;
 
+import android.content.Context;
 import android.support.annotation.NonNull;
 import com.android.dialer.common.Assert;
 import com.android.dialer.proguard.UsedByReflection;
@@ -56,5 +57,7 @@
   @NonNull
   public abstract String getAnnotatedCallLogProviderAuthority();
 
+  public abstract String getUserAgent(Context context);
+
   protected Constants() {}
 }
diff --git a/java/com/android/dialer/constants/TrafficStatsTags.java b/java/com/android/dialer/constants/TrafficStatsTags.java
index 13c3e2c..1eca784 100644
--- a/java/com/android/dialer/constants/TrafficStatsTags.java
+++ b/java/com/android/dialer/constants/TrafficStatsTags.java
@@ -18,12 +18,16 @@
 
 /** Registry of tags for {@link android.net.TrafficStats#setThreadStatsTag(int)} */
 public class TrafficStatsTags {
-  public static final int CONTACT_PHOTO_DOWNLOAD_TAG = 0x0001;
-  public static final int NEARBY_PLACES_TAG = 0xaaaa;
-  public static final int REVERSE_LOOKUP_CONTACT_TAG = 0xbaaa;
-  public static final int REVERSE_LOOKUP_IMAGE_TAG = 0xbaab;
-  public static final int DOWNLOAD_LOCATION_MAP_TAG = 0xd000;
-  public static final int REVERSE_GEOCODE_TAG = 0xd001;
-  public static final int VISUAL_VOICEMAIL_TAG = 0xd002;
-  public static final int DIALER_VOIP_TAG = 0xd003;
+  public static final int CONTACT_PHOTO_DOWNLOAD_TAG = 0x00000001;
+  public static final int NEARBY_PLACES_TAG = 0x00000002;
+  public static final int REVERSE_LOOKUP_CONTACT_TAG = 0x00000003;
+  public static final int REVERSE_LOOKUP_IMAGE_TAG = 0x00000004;
+  public static final int DOWNLOAD_LOCATION_MAP_TAG = 0x00000005;
+  public static final int REVERSE_GEOCODE_TAG = 0x00000006;
+  public static final int VISUAL_VOICEMAIL_TAG = 0x00000007;
+
+  // 0xfffffe00 to 0xffffff00 reserved for proprietary extensions to the dialer app.
+
+  // 0xffffff00 to 0xffffffff reserved by the system (see TrafficStats#getAndSetThreadStatsTag)
+
 }
diff --git a/java/com/android/dialer/constants/aospdialer/ConstantsImpl.java b/java/com/android/dialer/constants/aospdialer/ConstantsImpl.java
index 1111732..38fd24b 100644
--- a/java/com/android/dialer/constants/aospdialer/ConstantsImpl.java
+++ b/java/com/android/dialer/constants/aospdialer/ConstantsImpl.java
@@ -16,6 +16,7 @@
 
 package com.android.dialer.constants;
 
+import android.content.Context;
 import android.support.annotation.NonNull;
 import com.android.dialer.proguard.UsedByReflection;
 
@@ -40,4 +41,9 @@
   public String getAnnotatedCallLogProviderAuthority() {
     return "com.android.dialer.annotatedcalllog";
   }
+
+  @Override
+  public String getUserAgent(Context context) {
+    return null;
+  }
 }
diff --git a/java/com/android/dialer/constants/googledialer/ConstantsImpl.java b/java/com/android/dialer/constants/googledialer/ConstantsImpl.java
new file mode 100644
index 0000000..e151344
--- /dev/null
+++ b/java/com/android/dialer/constants/googledialer/ConstantsImpl.java
@@ -0,0 +1,61 @@
+/*
+ * 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.
+ */
+
+package com.android.dialer.constants;
+
+import android.content.Context;
+import android.content.pm.PackageManager;
+import android.os.Build;
+import android.support.annotation.NonNull;
+import com.android.dialer.proguard.UsedByReflection;
+
+/** Provider config values for Google Dialer. */
+@UsedByReflection(value = "Constants.java")
+public class ConstantsImpl extends Constants {
+
+  @Override
+  @NonNull
+  public String getFilteredNumberProviderAuthority() {
+    return "com.google.android.dialer.blocking.filterednumberprovider";
+  }
+
+  @Override
+  @NonNull
+  public String getFileProviderAuthority() {
+    return "com.google.android.dialer.files";
+  }
+
+  @NonNull
+  @Override
+  public String getAnnotatedCallLogProviderAuthority() {
+    return "com.google.android.dialer.annotatedcalllog";
+  }
+
+  @Override
+  public String getUserAgent(Context context) {
+    StringBuilder userAgent = new StringBuilder("GoogleDialer ");
+    try {
+      String versionName =
+          context.getPackageManager().getPackageInfo(context.getPackageName(), 0).versionName;
+      userAgent.append(versionName).append(" ");
+    } catch (PackageManager.NameNotFoundException e) {
+      // ignore
+    }
+    userAgent.append(Build.FINGERPRINT);
+
+    return userAgent.toString();
+  }
+}
diff --git a/java/com/android/dialer/contactactions/ContactActionBottomSheet.java b/java/com/android/dialer/contactactions/ContactActionBottomSheet.java
index 4718ff0..9bf7ca0 100644
--- a/java/com/android/dialer/contactactions/ContactActionBottomSheet.java
+++ b/java/com/android/dialer/contactactions/ContactActionBottomSheet.java
@@ -28,8 +28,8 @@
 import android.widget.ImageView;
 import android.widget.LinearLayout;
 import android.widget.TextView;
-import com.android.contacts.common.ContactPhotoManager;
 import com.android.dialer.common.Assert;
+import com.android.dialer.contactphoto.ContactPhotoManager;
 import com.android.dialer.dialercontact.DialerContact;
 import java.util.List;
 
@@ -75,7 +75,7 @@
     }
   }
 
-  // TODO: add on click action to contact.
+  // TODO(calderwoodra): add on click action to contact.
   private View getContactView(ViewGroup container) {
     LayoutInflater inflater = LayoutInflater.from(getContext());
     View contactView = inflater.inflate(R.layout.contact_layout, container, false);
diff --git a/java/com/android/dialer/contactphoto/AndroidManifest.xml b/java/com/android/dialer/contactphoto/AndroidManifest.xml
new file mode 100644
index 0000000..d852d40
--- /dev/null
+++ b/java/com/android/dialer/contactphoto/AndroidManifest.xml
@@ -0,0 +1,18 @@
+<!--
+  ~ 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
+  -->
+<manifest
+    package="com.android.dialer.contactphoto">
+</manifest>
\ No newline at end of file
diff --git a/java/com/android/contacts/common/util/BitmapUtil.java b/java/com/android/dialer/contactphoto/BitmapUtil.java
similarity index 98%
rename from java/com/android/contacts/common/util/BitmapUtil.java
rename to java/com/android/dialer/contactphoto/BitmapUtil.java
index 51f65f2..36055e2 100644
--- a/java/com/android/contacts/common/util/BitmapUtil.java
+++ b/java/com/android/dialer/contactphoto/BitmapUtil.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.contacts.common.util;
+package com.android.dialer.contactphoto;
 
 import android.graphics.Bitmap;
 import android.graphics.BitmapFactory;
diff --git a/java/com/android/contacts/common/ContactPhotoManager.java b/java/com/android/dialer/contactphoto/ContactPhotoManager.java
similarity index 98%
rename from java/com/android/contacts/common/ContactPhotoManager.java
rename to java/com/android/dialer/contactphoto/ContactPhotoManager.java
index fbf51cc..4598379 100644
--- a/java/com/android/contacts/common/ContactPhotoManager.java
+++ b/java/com/android/dialer/contactphoto/ContactPhotoManager.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.contacts.common;
+package com.android.dialer.contactphoto;
 
 import android.content.ComponentCallbacks2;
 import android.content.Context;
@@ -28,10 +28,10 @@
 import android.view.View;
 import android.widget.ImageView;
 import android.widget.QuickContactBadge;
-import com.android.contacts.common.lettertiles.LetterTileDrawable;
-import com.android.contacts.common.util.UriUtils;
 import com.android.dialer.common.LogUtil;
+import com.android.dialer.lettertile.LetterTileDrawable;
 import com.android.dialer.util.PermissionsUtil;
+import com.android.dialer.util.UriUtils;
 
 /** Asynchronously loads contact photos and maintains a cache of photos. */
 public abstract class ContactPhotoManager implements ComponentCallbacks2 {
diff --git a/java/com/android/contacts/common/ContactPhotoManagerImpl.java b/java/com/android/dialer/contactphoto/ContactPhotoManagerImpl.java
similarity index 97%
rename from java/com/android/contacts/common/ContactPhotoManagerImpl.java
rename to java/com/android/dialer/contactphoto/ContactPhotoManagerImpl.java
index 28ecf34..5dbdf5e 100644
--- a/java/com/android/contacts/common/ContactPhotoManagerImpl.java
+++ b/java/com/android/dialer/contactphoto/ContactPhotoManagerImpl.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.contacts.common;
+package com.android.dialer.contactphoto;
 
 import android.app.ActivityManager;
 import android.content.ComponentCallbacks2;
@@ -52,11 +52,11 @@
 import android.view.View;
 import android.view.ViewGroup;
 import android.widget.ImageView;
-import com.android.contacts.common.util.BitmapUtil;
-import com.android.contacts.common.util.UriUtils;
 import com.android.dialer.common.LogUtil;
+import com.android.dialer.constants.Constants;
 import com.android.dialer.constants.TrafficStatsTags;
 import com.android.dialer.util.PermissionsUtil;
+import com.android.dialer.util.UriUtils;
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
@@ -197,7 +197,7 @@
         context.getResources().getDimensionPixelSize(R.dimen.contact_browser_list_item_photo_size);
 
     // Get a user agent string to use for URI photo requests.
-    mUserAgent = Bindings.get(context).getUserAgent();
+    mUserAgent = Constants.get().getUserAgent(context);
     if (mUserAgent == null) {
       mUserAgent = "";
     }
@@ -566,7 +566,7 @@
     if (request.mIsCircular) {
       final RoundedBitmapDrawable drawable = RoundedBitmapDrawableFactory.create(resources, bitmap);
       drawable.setAntiAlias(true);
-      drawable.setCornerRadius(bitmap.getHeight() / 2);
+      drawable.setCornerRadius(drawable.getIntrinsicHeight() / 2);
       return drawable;
     } else {
       return new BitmapDrawable(resources, bitmap);
@@ -1220,20 +1220,23 @@
           InputStream is = null;
           if (scheme.equals("http") || scheme.equals("https")) {
             TrafficStats.setThreadStatsTag(TrafficStatsTags.CONTACT_PHOTO_DOWNLOAD_TAG);
-            final HttpURLConnection connection =
-                (HttpURLConnection) new URL(uri.toString()).openConnection();
-
-            // Include the user agent if it is specified.
-            if (!TextUtils.isEmpty(mUserAgent)) {
-              connection.setRequestProperty("User-Agent", mUserAgent);
-            }
             try {
-              is = connection.getInputStream();
-            } catch (IOException e) {
-              connection.disconnect();
-              is = null;
+              final HttpURLConnection connection =
+                  (HttpURLConnection) new URL(uri.toString()).openConnection();
+
+              // Include the user agent if it is specified.
+              if (!TextUtils.isEmpty(mUserAgent)) {
+                connection.setRequestProperty("User-Agent", mUserAgent);
+              }
+              try {
+                is = connection.getInputStream();
+              } catch (IOException e) {
+                connection.disconnect();
+                is = null;
+              }
+            } finally {
+              TrafficStats.clearThreadStatsTag();
             }
-            TrafficStats.clearThreadStatsTag();
           } else {
             is = mResolver.openInputStream(uri);
           }
diff --git a/java/com/android/dialer/contactphoto/res/values/dimens.xml b/java/com/android/dialer/contactphoto/res/values/dimens.xml
new file mode 100644
index 0000000..7c3361a
--- /dev/null
+++ b/java/com/android/dialer/contactphoto/res/values/dimens.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ 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
+  -->
+<resources>
+  <dimen name="contact_browser_list_item_photo_size">40dp</dimen>
+</resources>
\ No newline at end of file
diff --git a/java/com/android/dialer/contactphoto/res/values/strings.xml b/java/com/android/dialer/contactphoto/res/values/strings.xml
new file mode 100644
index 0000000..5b050d8
--- /dev/null
+++ b/java/com/android/dialer/contactphoto/res/values/strings.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ 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
+  -->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+  <!-- String describing the text for photo of a contact in a contacts list.
+
+      Note: AccessibilityServices use this attribute to announce what the view represents.
+            This is especially valuable for views without textual representation like ImageView.
+  -->
+  <string name="description_quick_contact_for">Quick contact for <xliff:g id="name">%1$s</xliff:g></string>
+</resources>
\ No newline at end of file
diff --git a/java/com/android/dialer/contactsfragment/ContactsAdapter.java b/java/com/android/dialer/contactsfragment/ContactsAdapter.java
index d8ee3d1..1bd8e34 100644
--- a/java/com/android/dialer/contactsfragment/ContactsAdapter.java
+++ b/java/com/android/dialer/contactsfragment/ContactsAdapter.java
@@ -26,9 +26,9 @@
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
-import com.android.contacts.common.ContactPhotoManager;
-import com.android.contacts.common.lettertiles.LetterTileDrawable;
 import com.android.dialer.common.Assert;
+import com.android.dialer.contactphoto.ContactPhotoManager;
+import com.android.dialer.lettertile.LetterTileDrawable;
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 
@@ -137,7 +137,7 @@
 
   @Override
   public int getItemCount() {
-    return (cursor == null ? 0 : cursor.getCount()) + 1; // add contact
+    return (cursor == null || cursor.isClosed() ? 0 : cursor.getCount()) + 1; // add contact
   }
 
   private static String getDisplayName(Cursor cursor) {
diff --git a/java/com/android/dialer/contactsfragment/ContactsFragment.java b/java/com/android/dialer/contactsfragment/ContactsFragment.java
index 41fa8f9..50c9fe8 100644
--- a/java/com/android/dialer/contactsfragment/ContactsFragment.java
+++ b/java/com/android/dialer/contactsfragment/ContactsFragment.java
@@ -122,8 +122,10 @@
       emptyContentView.setDescription(R.string.all_contacts_empty);
       emptyContentView.setActionLabel(R.string.all_contacts_empty_add_contact_action);
       emptyContentView.setVisibility(View.VISIBLE);
+      recyclerView.setVisibility(View.GONE);
     } else {
       emptyContentView.setVisibility(View.GONE);
+      recyclerView.setVisibility(View.VISIBLE);
       adapter = new ContactsAdapter(getContext(), cursor);
       manager =
           new LinearLayoutManager(getContext()) {
diff --git a/java/com/android/dialer/contactsfragment/FastScroller.java b/java/com/android/dialer/contactsfragment/FastScroller.java
index 0223c5f..2a86a3b 100644
--- a/java/com/android/dialer/contactsfragment/FastScroller.java
+++ b/java/com/android/dialer/contactsfragment/FastScroller.java
@@ -91,6 +91,7 @@
     int targetPos = getValueInRange(0, itemCount - 1, (int) scrolledPosition);
     layoutManager.scrollToPositionWithOffset(targetPos, 0);
     container.setText(adapter.getHeaderString(targetPos));
+    adapter.refreshHeaders();
   }
 
   // Returns a float in range [0, 1] which represents the position of the scroller.
diff --git a/java/com/android/dialer/database/VoicemailStatusQuery.java b/java/com/android/dialer/database/VoicemailStatusQuery.java
index d9e1b72..dbd88be 100644
--- a/java/com/android/dialer/database/VoicemailStatusQuery.java
+++ b/java/com/android/dialer/database/VoicemailStatusQuery.java
@@ -27,7 +27,7 @@
 /** The query for the call voicemail status table. */
 public class VoicemailStatusQuery {
 
-  // TODO: Column indices should be removed in favor of Cursor#getColumnIndex
+  // TODO(maxwelb): Column indices should be removed in favor of Cursor#getColumnIndex
   public static final int SOURCE_PACKAGE_INDEX = 0;
   public static final int SETTINGS_URI_INDEX = 1;
   public static final int VOICEMAIL_ACCESS_URI_INDEX = 2;
diff --git a/java/com/android/dialer/databasepopulator/AndroidManifest.xml b/java/com/android/dialer/databasepopulator/AndroidManifest.xml
new file mode 100644
index 0000000..0a37285
--- /dev/null
+++ b/java/com/android/dialer/databasepopulator/AndroidManifest.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ ~ 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
+ -->
+<manifest package="com.android.dialer.databasepopulator">
+</manifest>
\ No newline at end of file
diff --git a/java/com/android/dialer/simulator/impl/SimulatorCallLog.java b/java/com/android/dialer/databasepopulator/CallLogPopulator.java
similarity index 88%
rename from java/com/android/dialer/simulator/impl/SimulatorCallLog.java
rename to java/com/android/dialer/databasepopulator/CallLogPopulator.java
index f127d56..79b3fd6 100644
--- a/java/com/android/dialer/simulator/impl/SimulatorCallLog.java
+++ b/java/com/android/dialer/databasepopulator/CallLogPopulator.java
@@ -14,7 +14,7 @@
  * limitations under the License
  */
 
-package com.android.dialer.simulator.impl;
+package com.android.dialer.databasepopulator;
 
 import android.content.ContentProviderOperation;
 import android.content.ContentValues;
@@ -28,10 +28,11 @@
 import com.android.dialer.common.Assert;
 import com.google.auto.value.AutoValue;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.concurrent.TimeUnit;
 
 /** Populates the device database with call log entries. */
-final class SimulatorCallLog {
+public final class CallLogPopulator {
   // Phone numbers from https://www.google.com/about/company/facts/locations/
   private static final CallEntry.Builder[] SIMPLE_CALL_LOG = {
     CallEntry.builder().setType(Calls.MISSED_TYPE).setNumber("+1-302-6365454"),
@@ -96,6 +97,21 @@
     }
   }
 
+  @WorkerThread
+  public static void deleteAllCallLog(@NonNull Context context) {
+    Assert.isWorkerThread();
+    try {
+      context
+          .getContentResolver()
+          .applyBatch(
+              CallLog.AUTHORITY,
+              new ArrayList<>(
+                  Arrays.asList(ContentProviderOperation.newDelete(Calls.CONTENT_URI).build())));
+    } catch (RemoteException | OperationApplicationException e) {
+      Assert.fail("failed to delete call log: " + e);
+    }
+  }
+
   @AutoValue
   abstract static class CallEntry {
     @NonNull
@@ -108,7 +124,7 @@
     abstract long getTimeMillis();
 
     static Builder builder() {
-      return new AutoValue_SimulatorCallLog_CallEntry.Builder()
+      return new AutoValue_CallLogPopulator_CallEntry.Builder()
           .setPresentation(Calls.PRESENTATION_ALLOWED);
     }
 
@@ -135,5 +151,5 @@
     }
   }
 
-  private SimulatorCallLog() {}
+  private CallLogPopulator() {}
 }
diff --git a/java/com/android/dialer/simulator/impl/SimulatorContacts.java b/java/com/android/dialer/databasepopulator/ContactsPopulator.java
similarity index 89%
rename from java/com/android/dialer/simulator/impl/SimulatorContacts.java
rename to java/com/android/dialer/databasepopulator/ContactsPopulator.java
index 5bd2898..e93c569 100644
--- a/java/com/android/dialer/simulator/impl/SimulatorContacts.java
+++ b/java/com/android/dialer/databasepopulator/ContactsPopulator.java
@@ -14,7 +14,7 @@
  * limitations under the License
  */
 
-package com.android.dialer.simulator.impl;
+package com.android.dialer.databasepopulator;
 
 import android.content.ContentProviderOperation;
 import android.content.Context;
@@ -26,6 +26,7 @@
 import android.os.RemoteException;
 import android.provider.ContactsContract;
 import android.provider.ContactsContract.CommonDataKinds.Phone;
+import android.provider.ContactsContract.RawContacts;
 import android.support.annotation.NonNull;
 import android.support.annotation.Nullable;
 import android.support.annotation.WorkerThread;
@@ -34,10 +35,11 @@
 import com.google.auto.value.AutoValue;
 import java.io.ByteArrayOutputStream;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
 
 /** Populates the device database with contacts. */
-public final class SimulatorContacts {
+public final class ContactsPopulator {
   // Phone numbers from https://www.google.com/about/company/facts/locations/
   private static final Contact[] SIMPLE_CONTACTS = {
     // US, contact with e164 number.
@@ -46,6 +48,7 @@
         .addPhoneNumber(new PhoneNumber("+1-302-6365454", Phone.TYPE_MOBILE))
         .addEmail(new Email("m@example.com"))
         .setIsStarred(true)
+        .setPinned(1)
         .setOrangePhoto()
         .build(),
     // US, contact with a non-e164 number.
@@ -54,6 +57,7 @@
         .addPhoneNumber(new PhoneNumber("(425) 739-5600", Phone.TYPE_MOBILE))
         .addEmail(new Email("l@example.com"))
         .setIsStarred(true)
+        .setPinned(2)
         .setBluePhoto()
         .build(),
     // UK, number where the (0) should be dropped.
@@ -62,6 +66,7 @@
         .addPhoneNumber(new PhoneNumber("+44 (0) 20 7031 3000", Phone.TYPE_MOBILE))
         .addEmail(new Email("r@example.com"))
         .setIsStarred(true)
+        .setPinned(3)
         .setRedPhoto()
         .build(),
     // US and Australia, contact with a long name and multiple phone numbers.
@@ -71,6 +76,7 @@
         .addPhoneNumber(new PhoneNumber("+1 404-487-9000", Phone.TYPE_WORK))
         .addPhoneNumber(new PhoneNumber("+61 2 9374 4001", Phone.TYPE_FAX_HOME))
         .setIsStarred(true)
+        .setPinned(4)
         .setPurplePhoto()
         .build(),
     // US, phone number shared with another contact and 2nd phone number with wait and pause.
@@ -78,25 +84,30 @@
         .setName("Splinter")
         .addPhoneNumber(new PhoneNumber("+1-650-2530000", Phone.TYPE_HOME))
         .addPhoneNumber(new PhoneNumber("+1 303-245-0086;123,456", Phone.TYPE_WORK))
+        .setBluePhoto()
         .build(),
     // France, number with Japanese name.
     Contact.builder()
         .setName("スパイク・スピーゲル")
         .addPhoneNumber(new PhoneNumber("+33 (0)1 42 68 53 00", Phone.TYPE_MOBILE))
+        .setBluePhoto()
         .build(),
     // Israel, RTL name and non-e164 number.
     Contact.builder()
         .setName("עקב אריה טברסק")
         .addPhoneNumber(new PhoneNumber("+33 (0)1 42 68 53 00", Phone.TYPE_MOBILE))
+        .setBluePhoto()
         .build(),
     // UAE, RTL name.
     Contact.builder()
         .setName("سلام دنیا")
         .addPhoneNumber(new PhoneNumber("+971 4 4509500", Phone.TYPE_MOBILE))
+        .setBluePhoto()
         .build(),
     // Brazil, contact with no name.
     Contact.builder()
         .addPhoneNumber(new PhoneNumber("+55-31-2128-6800", Phone.TYPE_MOBILE))
+        .setBluePhoto()
         .build(),
     // Short number, contact with no name.
     Contact.builder().addPhoneNumber(new PhoneNumber("611", Phone.TYPE_MOBILE)).build(),
@@ -104,12 +115,14 @@
     Contact.builder()
         .setName("Anonymous")
         .addPhoneNumber(new PhoneNumber("*86 512-343-5283", Phone.TYPE_MOBILE))
+        .setBluePhoto()
         .build(),
     // None, contact with no phone number.
     Contact.builder()
         .setName("No Phone Number")
         .addEmail(new Email("no@example.com"))
         .setIsStarred(true)
+        .setBluePhoto()
         .build(),
   };
 
@@ -127,6 +140,22 @@
     }
   }
 
+  @WorkerThread
+  public static void deleteAllContacts(@NonNull Context context) {
+    Assert.isWorkerThread();
+    try {
+      context
+          .getContentResolver()
+          .applyBatch(
+              ContactsContract.AUTHORITY,
+              new ArrayList<>(
+                  Arrays.asList(
+                      ContentProviderOperation.newDelete(RawContacts.CONTENT_URI).build())));
+    } catch (RemoteException | OperationApplicationException e) {
+      Assert.fail("failed to delete contacts: " + e);
+    }
+  }
+
   private static void addContact(Contact contact, List<ContentProviderOperation> operations) {
     int index = operations.size();
 
@@ -135,6 +164,9 @@
             .withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, contact.getAccountType())
             .withValue(ContactsContract.RawContacts.ACCOUNT_NAME, contact.getAccountName())
             .withValue(ContactsContract.RawContacts.STARRED, contact.getIsStarred() ? 1 : 0)
+            .withValue(
+                ContactsContract.RawContacts.PINNED,
+                contact.getIsStarred() ? contact.getPinned() : 0)
             .withYieldAllowed(true)
             .build());
 
@@ -203,6 +235,8 @@
 
     abstract boolean getIsStarred();
 
+    abstract int getPinned();
+
     @Nullable
     abstract ByteArrayOutputStream getPhotoStream();
 
@@ -213,9 +247,10 @@
     abstract List<Email> getEmails();
 
     static Builder builder() {
-      return new AutoValue_SimulatorContacts_Contact.Builder()
+      return new AutoValue_ContactsPopulator_Contact.Builder()
           .setAccountType("com.google")
           .setAccountName("foo@example")
+          .setPinned(0)
           .setIsStarred(false)
           .setPhoneNumbers(new ArrayList<>())
           .setEmails(new ArrayList<>());
@@ -234,6 +269,8 @@
 
       abstract Builder setIsStarred(boolean isStarred);
 
+      abstract Builder setPinned(int position);
+
       abstract Builder setPhotoStream(ByteArrayOutputStream photoStream);
 
       abstract Builder setPhoneNumbers(@NonNull List<PhoneNumber> phoneNumbers);
@@ -315,5 +352,5 @@
     }
   }
 
-  private SimulatorContacts() {}
+  private ContactsPopulator() {}
 }
diff --git a/java/com/android/dialer/simulator/impl/SimulatorVoicemail.java b/java/com/android/dialer/databasepopulator/VoicemailPopulator.java
similarity index 90%
rename from java/com/android/dialer/simulator/impl/SimulatorVoicemail.java
rename to java/com/android/dialer/databasepopulator/VoicemailPopulator.java
index 04de201..581100f 100644
--- a/java/com/android/dialer/simulator/impl/SimulatorVoicemail.java
+++ b/java/com/android/dialer/databasepopulator/VoicemailPopulator.java
@@ -14,7 +14,7 @@
  * limitations under the License
  */
 
-package com.android.dialer.simulator.impl;
+package com.android.dialer.databasepopulator;
 
 import android.content.ComponentName;
 import android.content.ContentValues;
@@ -30,7 +30,7 @@
 import java.util.concurrent.TimeUnit;
 
 /** Populates the device database with voicemail entries. */
-final class SimulatorVoicemail {
+public final class VoicemailPopulator {
   private static final String ACCOUNT_ID = "ACCOUNT_ID";
 
   private static final Voicemail.Builder[] SIMPLE_VOICEMAILS = {
@@ -90,9 +90,17 @@
     }
   }
 
+  @WorkerThread
+  public static void deleteAllVoicemail(@NonNull Context context) {
+    Assert.isWorkerThread();
+    context
+        .getContentResolver()
+        .delete(Voicemails.buildSourceUri(context.getPackageName()), "", new String[] {});
+  }
+
   private static void enableVoicemail(@NonNull Context context) {
     PhoneAccountHandle handle =
-        new PhoneAccountHandle(new ComponentName(context, SimulatorVoicemail.class), ACCOUNT_ID);
+        new PhoneAccountHandle(new ComponentName(context, VoicemailPopulator.class), ACCOUNT_ID);
 
     ContentValues values = new ContentValues();
     values.put(Status.SOURCE_PACKAGE, handle.getComponentName().getPackageName());
@@ -120,7 +128,7 @@
     abstract boolean getIsRead();
 
     static Builder builder() {
-      return new AutoValue_SimulatorVoicemail_Voicemail.Builder();
+      return new AutoValue_VoicemailPopulator_Voicemail.Builder();
     }
 
     ContentValues getAsContentValues(Context context) {
@@ -150,5 +158,5 @@
     }
   }
 
-  private SimulatorVoicemail() {}
+  private VoicemailPopulator() {}
 }
diff --git a/java/com/android/dialer/dialpadview/res/layout-land/dialpad_key_one.xml b/java/com/android/dialer/dialpadview/res/layout-land/dialpad_key_one.xml
index 6f178f0..1356246 100644
--- a/java/com/android/dialer/dialpadview/res/layout-land/dialpad_key_one.xml
+++ b/java/com/android/dialer/dialpadview/res/layout-land/dialpad_key_one.xml
@@ -35,7 +35,7 @@
       <ImageView
         android:id="@+id/dialpad_key_voicemail"
         android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
+        android:layout_height="@dimen/dialpad_voicemail_icon_size"
         android:scaleType="fitCenter"
         android:src="@drawable/quantum_ic_voicemail_white_24"
         android:tint="@color/dialpad_voicemail_tint"/>
diff --git a/java/com/android/dialer/dialpadview/res/layout/dialpad_key_one.xml b/java/com/android/dialer/dialpadview/res/layout/dialpad_key_one.xml
index 8859440..4401c5b 100644
--- a/java/com/android/dialer/dialpadview/res/layout/dialpad_key_one.xml
+++ b/java/com/android/dialer/dialpadview/res/layout/dialpad_key_one.xml
@@ -18,7 +18,8 @@
   android:id="@+id/one"
   style="@style/DialpadKeyButtonStyle">
   <LinearLayout
-    style="@style/DialpadKeyInternalLayoutStyle">
+      android:layout_marginTop="1dp"
+      style="@style/DialpadKeyInternalLayoutStyle">
     <com.android.dialer.dialpadview.DialpadTextView
       android:id="@+id/dialpad_key_number"
       style="@style/DialpadKeyNumberStyle"/>
@@ -28,9 +29,8 @@
       <ImageView
         android:id="@+id/dialpad_key_voicemail"
         android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
+        android:layout_height="@dimen/dialpad_voicemail_icon_size"
         android:layout_centerInParent="true"
-        android:paddingTop="@dimen/dialpad_voicemail_icon_padding_top"
         android:scaleType="fitCenter"
         android:src="@drawable/quantum_ic_voicemail_white_24"
         android:tint="?attr/dialpad_voicemail_tint"/>
diff --git a/java/com/android/dialer/dialpadview/res/values/dimens.xml b/java/com/android/dialer/dialpadview/res/values/dimens.xml
index 7277364..187ec9a 100644
--- a/java/com/android/dialer/dialpadview/res/values/dimens.xml
+++ b/java/com/android/dialer/dialpadview/res/values/dimens.xml
@@ -35,7 +35,7 @@
   <dimen name="dialpad_digits_menu_right_padding">10dp</dimen>
   <dimen name="dialpad_center_margin">3dp</dimen>
   <dimen name="dialpad_button_margin">2dp</dimen>
-  <dimen name="dialpad_voicemail_icon_padding_top">2dp</dimen>
+  <dimen name="dialpad_voicemail_icon_size">18dp</dimen>
   <dimen name="dialpad_key_button_translate_y">100dp</dimen>
   <dimen name="dialpad_overflow_margin">8dp</dimen>
   <dimen name="dialpad_space_above_keys">14dp</dimen>
diff --git a/java/com/android/dialer/enrichedcall/EnrichedCallCapabilities.java b/java/com/android/dialer/enrichedcall/EnrichedCallCapabilities.java
index c3c78c9..32054e8 100644
--- a/java/com/android/dialer/enrichedcall/EnrichedCallCapabilities.java
+++ b/java/com/android/dialer/enrichedcall/EnrichedCallCapabilities.java
@@ -22,18 +22,53 @@
 @AutoValue
 public abstract class EnrichedCallCapabilities {
 
-  public static final EnrichedCallCapabilities NO_CAPABILITIES =
-      EnrichedCallCapabilities.create(false, false, false);
+  public static final EnrichedCallCapabilities NO_CAPABILITIES = builder().build();
 
-  public static EnrichedCallCapabilities create(
-      boolean supportsCallComposer, boolean supportsPostCall, boolean supportsVideoCall) {
-    return new AutoValue_EnrichedCallCapabilities(
-        supportsCallComposer, supportsPostCall, supportsVideoCall);
+  public static final EnrichedCallCapabilities ALL_CAPABILITIES =
+      builder()
+          .setCallComposerCapable(true)
+          .setPostCallCapable(true)
+          .setVideoShareCapable(true)
+          .build();
+
+  public abstract boolean isCallComposerCapable();
+
+  public abstract boolean isPostCallCapable();
+
+  public abstract boolean isVideoShareCapable();
+
+  public abstract Builder toBuilder();
+
+  /**
+   * Returns {@code true} if these capabilities represent those of a user that is temporarily
+   * unavailable. This is an indication that capabilities should be refreshed.
+   */
+  public abstract boolean isTemporarilyUnavailable();
+
+  /**
+   * Creates an instance of {@link Builder}.
+   *
+   * <p>Unless otherwise set, all fields will default to false.
+   */
+  public static Builder builder() {
+    return new AutoValue_EnrichedCallCapabilities.Builder()
+        .setCallComposerCapable(false)
+        .setPostCallCapable(false)
+        .setVideoShareCapable(false)
+        .setTemporarilyUnavailable(false);
   }
 
-  public abstract boolean supportsCallComposer();
+  /** Creates instances of {@link EnrichedCallCapabilities}. */
+  @AutoValue.Builder
+  public abstract static class Builder {
+    public abstract Builder setCallComposerCapable(boolean isCapable);
 
-  public abstract boolean supportsPostCall();
+    public abstract Builder setPostCallCapable(boolean isCapable);
 
-  public abstract boolean supportsVideoShare();
+    public abstract Builder setVideoShareCapable(boolean isCapable);
+
+    public abstract Builder setTemporarilyUnavailable(boolean temporarilyUnavailable);
+
+    public abstract EnrichedCallCapabilities build();
+  }
 }
diff --git a/java/com/android/dialer/enrichedcall/EnrichedCallManager.java b/java/com/android/dialer/enrichedcall/EnrichedCallManager.java
index f1057be..4d00854 100644
--- a/java/com/android/dialer/enrichedcall/EnrichedCallManager.java
+++ b/java/com/android/dialer/enrichedcall/EnrichedCallManager.java
@@ -23,6 +23,7 @@
 import com.android.dialer.calldetails.CallDetailsEntries.CallDetailsEntry;
 import com.android.dialer.enrichedcall.historyquery.proto.HistoryResult;
 import com.android.dialer.enrichedcall.videoshare.VideoShareListener;
+import com.android.dialer.enrichedcall.videoshare.VideoShareSession;
 import com.android.dialer.multimedia.MultimediaData;
 import java.util.List;
 import java.util.Map;
@@ -299,6 +300,14 @@
   long getVideoShareInviteSessionId(@NonNull String number);
 
   /**
+   * Returns the {@link VideoShareSession} for the given sessionId, or {@code null} if no session
+   * exists.
+   */
+  @MainThread
+  @Nullable
+  VideoShareSession getVideoShareSession(long sessionId);
+
+  /**
    * Ends the given video share session.
    *
    * @param sessionId the id of the session to end
diff --git a/java/com/android/dialer/enrichedcall/FuzzyPhoneNumberMatcher.java b/java/com/android/dialer/enrichedcall/FuzzyPhoneNumberMatcher.java
index 27dc0e9..6f4d975 100644
--- a/java/com/android/dialer/enrichedcall/FuzzyPhoneNumberMatcher.java
+++ b/java/com/android/dialer/enrichedcall/FuzzyPhoneNumberMatcher.java
@@ -29,25 +29,34 @@
    * too slow, so character by character matching is used instead.
    */
   public static boolean matches(@NonNull String lhs, @NonNull String rhs) {
-    int aIndex = lhs.length() - 1;
-    int bIndex = rhs.length() - 1;
+    return lastSevenDigitsCharacterByCharacterMatches(lhs, rhs);
+  }
+
+  /**
+   * This strategy examines the numbers character by character starting from the end. If the last
+   * {@link #REQUIRED_MATCHED_DIGITS} match, it returns {@code true}.
+   */
+  private static boolean lastSevenDigitsCharacterByCharacterMatches(
+      @NonNull String lhs, @NonNull String rhs) {
+    int lhsIndex = lhs.length() - 1;
+    int rhsIndex = rhs.length() - 1;
 
     int matchedDigits = 0;
 
-    while (aIndex >= 0 && bIndex >= 0) {
-      if (!Character.isDigit(lhs.charAt(aIndex))) {
-        --aIndex;
+    while (lhsIndex >= 0 && rhsIndex >= 0) {
+      if (!Character.isDigit(lhs.charAt(lhsIndex))) {
+        --lhsIndex;
         continue;
       }
-      if (!Character.isDigit(rhs.charAt(bIndex))) {
-        --bIndex;
+      if (!Character.isDigit(rhs.charAt(rhsIndex))) {
+        --rhsIndex;
         continue;
       }
-      if (lhs.charAt(aIndex) != rhs.charAt(bIndex)) {
-        return false;
+      if (lhs.charAt(lhsIndex) != rhs.charAt(rhsIndex)) {
+        break;
       }
-      --aIndex;
-      --bIndex;
+      --lhsIndex;
+      --rhsIndex;
       ++matchedDigits;
     }
 
diff --git a/java/com/android/dialer/enrichedcall/stub/EnrichedCallManagerStub.java b/java/com/android/dialer/enrichedcall/stub/EnrichedCallManagerStub.java
index 1f2b005..de95e07 100644
--- a/java/com/android/dialer/enrichedcall/stub/EnrichedCallManagerStub.java
+++ b/java/com/android/dialer/enrichedcall/stub/EnrichedCallManagerStub.java
@@ -27,6 +27,7 @@
 import com.android.dialer.enrichedcall.Session;
 import com.android.dialer.enrichedcall.historyquery.proto.HistoryResult;
 import com.android.dialer.enrichedcall.videoshare.VideoShareListener;
+import com.android.dialer.enrichedcall.videoshare.VideoShareSession;
 import com.android.dialer.multimedia.MultimediaData;
 import java.util.Collections;
 import java.util.List;
@@ -169,6 +170,14 @@
     return Session.NO_SESSION_ID;
   }
 
+  @MainThread
+  @Nullable
+  @Override
+  public VideoShareSession getVideoShareSession(long sessionId) {
+    Assert.isMainThread();
+    return null;
+  }
+
   @Override
   public void endVideoShareSession(long sessionId) {}
 }
diff --git a/java/com/android/dialer/enrichedcall/videoshare/VideoShareListener.java b/java/com/android/dialer/enrichedcall/videoshare/VideoShareListener.java
index f24724a..0e5f79f 100644
--- a/java/com/android/dialer/enrichedcall/videoshare/VideoShareListener.java
+++ b/java/com/android/dialer/enrichedcall/videoshare/VideoShareListener.java
@@ -13,6 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+
 package com.android.dialer.enrichedcall.videoshare;
 
 import android.support.annotation.MainThread;
diff --git a/java/com/android/dialer/enrichedcall/videoshare/VideoShareSession.java b/java/com/android/dialer/enrichedcall/videoshare/VideoShareSession.java
new file mode 100644
index 0000000..b0f24ff
--- /dev/null
+++ b/java/com/android/dialer/enrichedcall/videoshare/VideoShareSession.java
@@ -0,0 +1,39 @@
+/*
+ * 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
+ */
+
+package com.android.dialer.enrichedcall.videoshare;
+
+import android.support.annotation.NonNull;
+import android.view.SurfaceView;
+
+/** Holds state information and data about video share sessions. */
+public interface VideoShareSession {
+  void setSessionId(long sessionId);
+
+  long getSessionId();
+
+  int getState();
+
+  void pause();
+
+  void unpause();
+
+  void dispose();
+
+  void setSurfaceView(@NonNull SurfaceView surfaceView);
+
+  void setCamera(String cameraId);
+}
diff --git a/java/com/android/dialer/interactions/PhoneNumberInteraction.java b/java/com/android/dialer/interactions/PhoneNumberInteraction.java
index ef468a9..39781cf 100644
--- a/java/com/android/dialer/interactions/PhoneNumberInteraction.java
+++ b/java/com/android/dialer/interactions/PhoneNumberInteraction.java
@@ -15,7 +15,6 @@
  */
 package com.android.dialer.interactions;
 
-import android.Manifest;
 import android.annotation.SuppressLint;
 import android.app.Activity;
 import android.app.AlertDialog;
@@ -28,7 +27,6 @@
 import android.content.Intent;
 import android.content.Loader;
 import android.content.Loader.OnLoadCompleteListener;
-import android.content.pm.PackageManager;
 import android.database.Cursor;
 import android.net.Uri;
 import android.os.Bundle;
@@ -42,7 +40,6 @@
 import android.support.annotation.IntDef;
 import android.support.annotation.VisibleForTesting;
 import android.support.v4.app.ActivityCompat;
-import android.support.v4.content.ContextCompat;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
@@ -63,10 +60,12 @@
 import com.android.dialer.logging.InteractionEvent;
 import com.android.dialer.logging.Logger;
 import com.android.dialer.util.DialerUtils;
+import com.android.dialer.util.PermissionsUtil;
 import com.android.dialer.util.TransactionSafeActivity;
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
 
 /**
@@ -221,20 +220,27 @@
     // It's possible for a shortcut to have been created, and then permissions revoked. To avoid a
     // crash when the user tries to use such a shortcut, check for this condition and ask the user
     // for the permission.
-    if (ContextCompat.checkSelfPermission(mContext, Manifest.permission.CALL_PHONE)
-        != PackageManager.PERMISSION_GRANTED) {
-      LogUtil.i("PhoneNumberInteraction.startInteraction", "No phone permissions");
+    String[] deniedPhonePermissions =
+        PermissionsUtil.getPermissionsCurrentlyDenied(
+            mContext, PermissionsUtil.allPhoneGroupPermissionsUsedInDialer);
+    if (deniedPhonePermissions.length > 0) {
+      LogUtil.i(
+          "PhoneNumberInteraction.startInteraction",
+          "Need phone permissions: " + Arrays.toString(deniedPhonePermissions));
       ActivityCompat.requestPermissions(
-          (Activity) mContext, new String[] {Manifest.permission.CALL_PHONE}, REQUEST_CALL_PHONE);
+          (Activity) mContext, deniedPhonePermissions, REQUEST_CALL_PHONE);
       return;
     }
-    if (ContextCompat.checkSelfPermission(mContext, Manifest.permission.READ_CONTACTS)
-        != PackageManager.PERMISSION_GRANTED) {
-      LogUtil.i("PhoneNumberInteraction.startInteraction", "No contact permissions");
+
+    String[] deniedContactsPermissions =
+        PermissionsUtil.getPermissionsCurrentlyDenied(
+            mContext, PermissionsUtil.allContactsGroupPermissionsUsedInDialer);
+    if (deniedContactsPermissions.length > 0) {
+      LogUtil.i(
+          "PhoneNumberInteraction.startInteraction",
+          "Need contact permissions: " + Arrays.toString(deniedContactsPermissions));
       ActivityCompat.requestPermissions(
-          (Activity) mContext,
-          new String[] {Manifest.permission.READ_CONTACTS},
-          REQUEST_READ_CONTACTS);
+          (Activity) mContext, deniedContactsPermissions, REQUEST_READ_CONTACTS);
       return;
     }
 
diff --git a/java/com/android/dialer/interactions/res/layout/phone_disambig_item.xml b/java/com/android/dialer/interactions/res/layout/phone_disambig_item.xml
old mode 100644
new mode 100755
diff --git a/java/com/android/dialer/interactions/res/values-bs/strings.xml b/java/com/android/dialer/interactions/res/values-bs/strings.xml
index 24601b5..d7434f8 100644
--- a/java/com/android/dialer/interactions/res/values-bs/strings.xml
+++ b/java/com/android/dialer/interactions/res/values-bs/strings.xml
@@ -17,7 +17,7 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="sms_disambig_title" msgid="369677069797534410">"Odaberite broj"</string>
-    <string name="call_disambig_title" msgid="2395382326030227603">"Odaberite broj"</string>
+    <string name="sms_disambig_title" msgid="369677069797534410">"Izaberite broj"</string>
+    <string name="call_disambig_title" msgid="2395382326030227603">"Izaberite broj"</string>
     <string name="make_primary" msgid="9069345357862475091">"Zapamti ovaj izbor"</string>
 </resources>
diff --git a/java/com/android/dialer/lettertile/AndroidManifest.xml b/java/com/android/dialer/lettertile/AndroidManifest.xml
new file mode 100644
index 0000000..dce6806
--- /dev/null
+++ b/java/com/android/dialer/lettertile/AndroidManifest.xml
@@ -0,0 +1,18 @@
+<!--
+  ~ 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
+  -->
+<manifest
+  package="com.android.dialer.lettertile">
+</manifest>
diff --git a/java/com/android/contacts/common/lettertiles/LetterTileDrawable.java b/java/com/android/dialer/lettertile/LetterTileDrawable.java
similarity index 98%
rename from java/com/android/contacts/common/lettertiles/LetterTileDrawable.java
rename to java/com/android/dialer/lettertile/LetterTileDrawable.java
index 73809c4..c8b75c5 100644
--- a/java/com/android/contacts/common/lettertiles/LetterTileDrawable.java
+++ b/java/com/android/dialer/lettertile/LetterTileDrawable.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.contacts.common.lettertiles;
+package com.android.dialer.lettertile;
 
 import android.content.res.Resources;
 import android.content.res.TypedArray;
@@ -33,7 +33,6 @@
 import android.support.annotation.Nullable;
 import android.telecom.TelecomManager;
 import android.text.TextUtils;
-import com.android.contacts.common.R;
 import com.android.dialer.common.Assert;
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
@@ -55,6 +54,7 @@
 
   /** Contact type constants */
   public static final int TYPE_PERSON = 1;
+
   public static final int TYPE_BUSINESS = 2;
   public static final int TYPE_VOICEMAIL = 3;
   /**
@@ -62,6 +62,7 @@
    * situations where a contact is anonymous.
    */
   public static final int TYPE_GENERIC_AVATAR = 4;
+
   public static final int TYPE_SPAM = 5;
   public static final int TYPE_CONFERENCE = 6;
   @ContactType public static final int TYPE_DEFAULT = TYPE_PERSON;
@@ -128,8 +129,7 @@
     mDefaultSpamAvatar = res.getDrawable(R.drawable.quantum_ic_report_vd_theme_24, null);
     mDefaultConferenceAvatar = res.getDrawable(R.drawable.quantum_ic_group_vd_theme_24, null);
 
-    mPaint.setTypeface(
-        Typeface.create(res.getString(R.string.letter_tile_letter_font_family), Typeface.NORMAL));
+    mPaint.setTypeface(Typeface.create("sans-serif-medium", Typeface.NORMAL));
     mPaint.setTextAlign(Align.CENTER);
     mPaint.setAntiAlias(true);
     mPaint.setFilterBitmap(true);
diff --git a/java/com/android/dialer/lettertile/res/values/colors.xml b/java/com/android/dialer/lettertile/res/values/colors.xml
new file mode 100644
index 0000000..406b490
--- /dev/null
+++ b/java/com/android/dialer/lettertile/res/values/colors.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ 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
+  -->
+<resources>
+  <array name="letter_tile_colors">
+    <item>#DB4437</item>
+    <item>#E91E63</item>
+    <item>#9C27B0</item>
+    <item>#673AB7</item>
+    <item>#3F51B5</item>
+    <item>#4285F4</item>
+    <item>#039BE5</item>
+    <item>#0097A7</item>
+    <item>#009688</item>
+    <item>#0F9D58</item>
+    <item>#689F38</item>
+    <item>#EF6C00</item>
+    <item>#FF5722</item>
+    <item>#757575</item>
+  </array>
+
+  <color name="spam_contact_background">#A52714</color>
+
+  <color name="letter_tile_default_color">#cccccc</color>
+
+  <color name="letter_tile_font_color">#ffffff</color>
+</resources>
\ No newline at end of file
diff --git a/java/com/android/dialer/lettertile/res/values/dimens.xml b/java/com/android/dialer/lettertile/res/values/dimens.xml
new file mode 100644
index 0000000..c804431
--- /dev/null
+++ b/java/com/android/dialer/lettertile/res/values/dimens.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ 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
+  -->
+<resources>
+  <!-- Dimensions for contact letter tiles -->
+  <item name="letter_to_tile_ratio" type="dimen">67%</item>
+</resources>
\ No newline at end of file
diff --git a/java/com/android/dialer/lightbringer/Lightbringer.java b/java/com/android/dialer/lightbringer/Lightbringer.java
index 8bfa773..9120b24 100644
--- a/java/com/android/dialer/lightbringer/Lightbringer.java
+++ b/java/com/android/dialer/lightbringer/Lightbringer.java
@@ -22,6 +22,7 @@
 import android.support.annotation.MainThread;
 import android.support.annotation.NonNull;
 import android.support.annotation.Nullable;
+import android.support.annotation.StringRes;
 import android.telecom.Call;
 import android.telecom.PhoneAccountHandle;
 
@@ -58,4 +59,12 @@
   @Nullable
   @MainThread
   String getPackageName();
+
+  @StringRes
+  @MainThread
+  int getOutgoingCallTypeText();
+
+  @StringRes
+  @MainThread
+  int getIncomingCallTypeText();
 }
diff --git a/java/com/android/dialer/lightbringer/stub/LightbringerStub.java b/java/com/android/dialer/lightbringer/stub/LightbringerStub.java
index e691b96..c98ae09 100644
--- a/java/com/android/dialer/lightbringer/stub/LightbringerStub.java
+++ b/java/com/android/dialer/lightbringer/stub/LightbringerStub.java
@@ -22,6 +22,7 @@
 import android.support.annotation.MainThread;
 import android.support.annotation.NonNull;
 import android.support.annotation.Nullable;
+import android.support.annotation.StringRes;
 import android.telecom.Call;
 import android.telecom.PhoneAccountHandle;
 import com.android.dialer.common.Assert;
@@ -102,4 +103,16 @@
   public String getPackageName() {
     return null;
   }
+
+  @StringRes
+  @Override
+  public int getOutgoingCallTypeText() {
+    return -1;
+  }
+
+  @StringRes
+  @Override
+  public int getIncomingCallTypeText() {
+    return -1;
+  }
 }
diff --git a/java/com/android/dialer/location/GeoUtil.java b/java/com/android/dialer/location/GeoUtil.java
index 1be4054..b39256d 100644
--- a/java/com/android/dialer/location/GeoUtil.java
+++ b/java/com/android/dialer/location/GeoUtil.java
@@ -17,11 +17,6 @@
 package com.android.dialer.location;
 
 import android.content.Context;
-import com.google.i18n.phonenumbers.NumberParseException;
-import com.google.i18n.phonenumbers.PhoneNumberUtil;
-import com.google.i18n.phonenumbers.Phonenumber;
-import com.google.i18n.phonenumbers.geocoding.PhoneNumberOfflineGeocoder;
-import java.util.Locale;
 
 /** Static methods related to Geo. */
 public class GeoUtil {
@@ -31,17 +26,4 @@
     // The {@link CountryDetector} should never return null so this is safe to return as-is.
     return CountryDetector.getInstance(context).getCurrentCountryIso();
   }
-
-  public static String getGeocodedLocationFor(Context context, String phoneNumber) {
-    final PhoneNumberOfflineGeocoder geocoder = PhoneNumberOfflineGeocoder.getInstance();
-    final PhoneNumberUtil phoneNumberUtil = PhoneNumberUtil.getInstance();
-    try {
-      final Phonenumber.PhoneNumber structuredPhoneNumber =
-          phoneNumberUtil.parse(phoneNumber, getCurrentCountryIso(context));
-      final Locale locale = context.getResources().getConfiguration().locale;
-      return geocoder.getDescriptionForNumber(structuredPhoneNumber, locale);
-    } catch (NumberParseException e) {
-      return null;
-    }
-  }
 }
diff --git a/java/com/android/dialer/logging/LoggingBindings.java b/java/com/android/dialer/logging/LoggingBindings.java
index 85ccfdf..ca9a053 100644
--- a/java/com/android/dialer/logging/LoggingBindings.java
+++ b/java/com/android/dialer/logging/LoggingBindings.java
@@ -80,4 +80,11 @@
       QuickContactBadge quickContact,
       InteractionEvent.Type interactionEvent,
       boolean shouldPerformClick);
+
+  /** Logs People Api lookup result with error */
+  void logPeopleApiLookupReportWithError(
+      long latency, int httpResponseCode, PeopleApiLookupError.Type errorType);
+
+  /** Logs successful People Api lookup result */
+  void logSuccessfulPeopleApiLookupReport(long latency, int httpResponseCode);
 }
diff --git a/java/com/android/dialer/logging/LoggingBindingsStub.java b/java/com/android/dialer/logging/LoggingBindingsStub.java
index 3892996..2dbcc3f 100644
--- a/java/com/android/dialer/logging/LoggingBindingsStub.java
+++ b/java/com/android/dialer/logging/LoggingBindingsStub.java
@@ -54,4 +54,11 @@
       QuickContactBadge quickContact,
       InteractionEvent.Type interactionEvent,
       boolean shouldPerformClick) {}
+
+  @Override
+  public void logPeopleApiLookupReportWithError(
+      long latency, int httpResponseCode, PeopleApiLookupError.Type errorType) {}
+
+  @Override
+  public void logSuccessfulPeopleApiLookupReport(long latency, int httpResponseCode) {}
 }
diff --git a/java/com/android/dialer/logging/contact_lookup_result.proto b/java/com/android/dialer/logging/contact_lookup_result.proto
index 13ea3c8..6c83908 100644
--- a/java/com/android/dialer/logging/contact_lookup_result.proto
+++ b/java/com/android/dialer/logging/contact_lookup_result.proto
@@ -6,6 +6,8 @@
 option optimize_for = LITE_RUNTIME;
 
 
+
+
 message ContactLookupResult {
   // The different results of a contact lookup done using a phone number.
   enum Type {
diff --git a/java/com/android/dialer/logging/contact_source.proto b/java/com/android/dialer/logging/contact_source.proto
index ffd32de..3a24da1 100644
--- a/java/com/android/dialer/logging/contact_source.proto
+++ b/java/com/android/dialer/logging/contact_source.proto
@@ -6,6 +6,8 @@
 option optimize_for = LITE_RUNTIME;
 
 
+
+
 message ContactSource {
   // Applies only to reports made from call history. If we have contact
   // information for the phone number, this field indicates its source.
diff --git a/java/com/android/dialer/logging/dialer_impression.proto b/java/com/android/dialer/logging/dialer_impression.proto
index 2f89a3a..4422b9c 100644
--- a/java/com/android/dialer/logging/dialer_impression.proto
+++ b/java/com/android/dialer/logging/dialer_impression.proto
@@ -7,6 +7,7 @@
 
 
 
+
 message DialerImpression {
   // Event enums to be used for Impression Logging in Dialer.
   // It's perfectly acceptable for this enum to be large
@@ -48,6 +49,7 @@
     // This happens when the user had initially blocked a number and also claimed the number was
     // spam and had now proceeded to undo that.
     REPORT_AS_NOT_SPAM_VIA_UNBLOCK_NUMBER = 1009
+
       ;
 
     // A number that was identified as spam and the user proceeded to block it. However this
@@ -63,10 +65,12 @@
     // the number via call log. This is for case where the user wants to block a number and also
     // report it as spam
     REPORT_CALL_AS_SPAM_VIA_CALL_LOG_BLOCK_REPORT_SPAM_SENT_VIA_BLOCK_NUMBER_DIALOG = 1011
+
       ;
 
     // User made it to the last step and actually blocked the number
     USER_ACTION_BLOCKED_NUMBER = 1012
+
       ;
 
     // User made it to the last step and actually unblocked the number
@@ -89,16 +93,19 @@
 
     // User added the number to contacts from the after call notification
     SPAM_AFTER_CALL_NOTIFICATION_ADD_TO_CONTACTS = 1019
+
       ;
 
     // User marked the number as spam on the after call notification flow
     SPAM_AFTER_CALL_NOTIFICATION_MARKED_NUMBER_AS_SPAM = 1020
+
       ;
 
     SPAM_AFTER_CALL_NOTIFICATION_MARKED_NUMBER_AS_NOT_SPAM_AND_BLOCKED = 1021;
 
     // User reported the number as not spam
     SPAM_AFTER_CALL_NOTIFICATION_REPORT_NUMBER_AS_NOT_SPAM = 1022
+
       ;
 
     // User dismissed the spam notification
@@ -120,6 +127,7 @@
     // able to stitch different types of events if they make sense e.g user pressed a speaker button
     // and we want to associate that to a call event
     USER_PARTICIPATED_IN_A_CALL = 1028
+
       ;
 
     // Incoming call is a spam call
@@ -152,44 +160,54 @@
 
     // User deleted a call log entry
     USER_DELETED_CALL_LOG_ITEM = 1048
+
       ;
 
     // User tapped on "Send a message"
     CALL_LOG_SEND_MESSAGE = 1049
+
       ;
 
     // User tapped on "Add to contact"
     CALL_LOG_ADD_TO_CONTACT = 1050
+
       ;
 
     // User tapped on "Create new contact"
     CALL_LOG_CREATE_NEW_CONTACT = 1051
+
       ;
 
     // User deleted an entry from the voicemail tab
     VOICEMAIL_DELETE_ENTRY = 1052
+
       ;
 
     // Voicemail call log entry was expanded. Could be either if the user tapped the voicemail
     // call log entry or pressed the play button when the voicemail call log entry was not expanded
     VOICEMAIL_EXPAND_ENTRY = 1053
+
       ;
 
     // The play button for voicemail call log entry was tapped directly (i.e when the voicemail
     // call log entry was not expanded and the playbutton was tapped)
     VOICEMAIL_PLAY_AUDIO_DIRECTLY= 1054
+
       ;
 
     // The play button after expanding the voicemail call log entry was tapped
     VOICEMAIL_PLAY_AUDIO_AFTER_EXPANDING_ENTRY= 1055
+
       ;
 
     // Incoming call was rejected from the notifications
     REJECT_INCOMING_CALL_FROM_NOTIFICATION= 1056
+
       ;
 
     // Incoming call was rejected from the answer screen including rejecting via sms and talkback
     REJECT_INCOMING_CALL_FROM_ANSWER_SCREEN= 1057
+
       ;
 
     // User tapped block and spam buttons in context menu, same as buttons in
@@ -249,24 +267,24 @@
     VOICEMAIL_CONFIGURATION_STATE_CORRUPTION_DETECTED_FROM_NOTIFICATION = 1080;
 
     // Android Auto Backup and Restore (Dolly)
-    BACKUP_ON_BACKUP = 1081;
-    BACKUP_ON_FULL_BACKUP = 1082;
-    BACKUP_ON_BACKUP_DISABLED = 1083;
-    BACKUP_VOICEMAIL_BACKED_UP = 1084;
-    BACKUP_FULL_BACKED_UP = 1085;
-    BACKUP_ON_BACKUP_JSON_EXCEPTION = 1086;
+    BACKUP_ON_BACKUP = 1081 [deprecated = true];
+    BACKUP_ON_FULL_BACKUP = 1082 [deprecated = true];
+    BACKUP_ON_BACKUP_DISABLED = 1083 [deprecated = true];
+    BACKUP_VOICEMAIL_BACKED_UP = 1084 [deprecated = true];
+    BACKUP_FULL_BACKED_UP = 1085 [deprecated = true];
+    BACKUP_ON_BACKUP_JSON_EXCEPTION = 1086 [deprecated = true];
 
-    BACKUP_ON_QUOTA_EXCEEDED = 1087;
+    BACKUP_ON_QUOTA_EXCEEDED = 1087 [deprecated = true];
 
-    BACKUP_ON_RESTORE = 1088;
-    BACKUP_RESTORED_FILE = 1089;
-    BACKUP_RESTORED_VOICEMAIL = 1090;
-    BACKUP_ON_RESTORE_FINISHED = 1091;
-    BACKUP_ON_RESTORE_DISABLED = 1092;
-    BACKUP_ON_RESTORE_JSON_EXCEPTION = 1093;
-    BACKUP_ON_RESTORE_IO_EXCEPTION = 1094;
+    BACKUP_ON_RESTORE = 1088 [deprecated = true];
+    BACKUP_RESTORED_FILE = 1089 [deprecated = true];
+    BACKUP_RESTORED_VOICEMAIL = 1090 [deprecated = true];
+    BACKUP_ON_RESTORE_FINISHED = 1091 [deprecated = true];
+    BACKUP_ON_RESTORE_DISABLED = 1092 [deprecated = true];
+    BACKUP_ON_RESTORE_JSON_EXCEPTION = 1093 [deprecated = true];
+    BACKUP_ON_RESTORE_IO_EXCEPTION = 1094 [deprecated = true];
 
-    BACKUP_MAX_VM_BACKUP_REACHED = 1095;
+    BACKUP_MAX_VM_BACKUP_REACHED = 1095 [deprecated = true];
 
     EVENT_ANSWER_HINT_ACTIVATED = 1096;
     EVENT_ANSWER_HINT_DEACTIVATED = 1097;
@@ -280,7 +298,7 @@
     INCOMING_VIDEO_CALL = 1102;
     USER_PARTICIPATED_IN_A_VIDEO_CALL = 1103;
 
-    BACKUP_ON_RESTORE_VM_DUPLICATE_NOT_RESTORING = 1104;
+    BACKUP_ON_RESTORE_VM_DUPLICATE_NOT_RESTORING = 1104 [deprecated = true];
 
     // User tapped the 'Share and call' button to start the call composer
     CALL_LOG_SHARE_AND_CALL = 1105;
@@ -362,14 +380,19 @@
     EMERGENCY_LAUNCHED_MAP = 1173;
 
     VIDEO_CALL_UPGRADE_REQUESTED = 1174
+
         ;
     VIDEO_CALL_REQUEST_ACCEPTED = 1175
+
         ;
     VIDEO_CALL_REQUEST_ACCEPTED_AS_AUDIO = 1176
+
         ;
     VIDEO_CALL_REQUEST_DECLINED = 1177
+
         ;
     VIDEO_CALL_REQUEST_RECEIVED = 1178
+
         ;
 
     RCS_VIDEO_SHARE_UPGRADE_REQUESTED = 1179;
@@ -455,5 +478,26 @@
 
     // In in call UI
     UPGRADE_TO_VIDEO_CALL_BUTTON_SHOWN = 1236;
+
+    // Bubble primary button first click to expand bubble
+    BUBBLE_PRIMARY_BUTTON_EXPAND = 1237;
+    // Bubble prinary button second click to return to call
+    BUBBLE_PRIMARY_BUTTON_RETURN_TO_CALL = 1238;
+
+    // Dialer Key/Value Backup and Restore
+    BACKUP_KEY_VALUE_ON_BACKUP = 1239;
+    BACKUP_KEY_VALUE_ON_RESTORE = 1240;
+    BACKUP_KEY_VALUE_ON_RESTORE_FINISHED = 1241;
+    BACKUP_KEY_VALUE_GET_BACKUP_SPECIFICATION = 1242;
+    BACKUP_KEY_VALUE_BACKUP_AGENT_CONSTRUCTOR = 1243;
+
+    // In the in call UI
+    UPGRADE_TO_VIDEO_CALL_BUTTON_SHOWN_FOR_LIGHTBRINGER = 1244;
+    UPGRADE_TO_VIDEO_CALL_BUTTON_SHOWN_FOR_IMS = 1245;
+    UPGRADE_TO_VIDEO_CALL_BUTTON_SHOWN_FOR_RCS = 1246;
+    LIGHTBRINGER_UPGRADE_REQUESTED = 1247;
+
+    // Found Lightbringer reachable contact when launching Dialer
+    HAS_LIGHTBRINGER_REACHABLE_CONTACTS = 1248;
   }
 }
diff --git a/java/com/android/dialer/logging/interaction_event.proto b/java/com/android/dialer/logging/interaction_event.proto
index 89cf46f..47ea534 100644
--- a/java/com/android/dialer/logging/interaction_event.proto
+++ b/java/com/android/dialer/logging/interaction_event.proto
@@ -6,6 +6,8 @@
 option optimize_for = LITE_RUNTIME;
 
 
+
+
 message InteractionEvent {
   // Next Tag: 38
   enum Type {
diff --git a/java/com/android/dialer/logging/people_api_lookup_error.proto b/java/com/android/dialer/logging/people_api_lookup_error.proto
new file mode 100644
index 0000000..e37d10a
--- /dev/null
+++ b/java/com/android/dialer/logging/people_api_lookup_error.proto
@@ -0,0 +1,19 @@
+syntax = "proto2";
+
+package com.android.dialer.logging;
+option java_package = "com.android.dialer.logging";
+option java_multiple_files = true;
+option optimize_for = LITE_RUNTIME;
+
+
+
+
+message PeopleApiLookupError {
+  enum Type {
+    UNKNOWN = 0;
+    HTTP_RESPONSE_ERROR = 1;
+    WRONG_KIND_VALUE = 2;
+    NO_ITEM_FOUND = 3;
+    JSON_PARSING_ERROR = 4;
+  }
+}
diff --git a/java/com/android/dialer/logging/reporting_location.proto b/java/com/android/dialer/logging/reporting_location.proto
index d436564..3c1baf0 100644
--- a/java/com/android/dialer/logging/reporting_location.proto
+++ b/java/com/android/dialer/logging/reporting_location.proto
@@ -6,6 +6,8 @@
 option optimize_for = LITE_RUNTIME;
 
 
+
+
 message ReportingLocation {
   // Spam reporting location
   enum Type {
diff --git a/java/com/android/dialer/logging/screen_event.proto b/java/com/android/dialer/logging/screen_event.proto
index ca62477..603f710 100644
--- a/java/com/android/dialer/logging/screen_event.proto
+++ b/java/com/android/dialer/logging/screen_event.proto
@@ -6,6 +6,8 @@
 option optimize_for = LITE_RUNTIME;
 
 
+
+
 message ScreenEvent {
   enum Type {
 
diff --git a/java/com/android/dialer/logging/ui_action.proto b/java/com/android/dialer/logging/ui_action.proto
index 784dbed..886fe04 100644
--- a/java/com/android/dialer/logging/ui_action.proto
+++ b/java/com/android/dialer/logging/ui_action.proto
@@ -6,6 +6,8 @@
 option optimize_for = LITE_RUNTIME;
 
 
+
+
 message UiAction {
   enum Type {
     UNKNOWN = 0;
diff --git a/java/com/android/dialer/main/impl/MainActivity.java b/java/com/android/dialer/main/impl/MainActivity.java
index 4b2bd2e..6dced3d 100644
--- a/java/com/android/dialer/main/impl/MainActivity.java
+++ b/java/com/android/dialer/main/impl/MainActivity.java
@@ -77,7 +77,7 @@
       // open contacts
       return true;
     } else {
-      // TODO handle other menu items
+      // TODO(calderwoodra) handle other menu items
       return super.onOptionsItemSelected(item);
     }
   }
diff --git a/java/com/android/dialer/main/impl/MainPagerAdapter.java b/java/com/android/dialer/main/impl/MainPagerAdapter.java
index 19cf4e7..c669a62 100644
--- a/java/com/android/dialer/main/impl/MainPagerAdapter.java
+++ b/java/com/android/dialer/main/impl/MainPagerAdapter.java
@@ -49,13 +49,13 @@
 
   @Override
   public int getCount() {
-    // TODO: add logic to hide/show voicemail tab
+    // TODO(calderwoodra): add logic to hide/show voicemail tab
     return 3;
   }
 
   @Override
   public Fragment getItem(int position) {
-    // TODO: implement tabs
+    // TODO(calderwoodra): implement tabs
     return new StubFragment();
   }
 
diff --git a/java/com/android/dialer/notification/VoicemailChannelUtils.java b/java/com/android/dialer/notification/VoicemailChannelUtils.java
index dc74799..e2d0f3a 100644
--- a/java/com/android/dialer/notification/VoicemailChannelUtils.java
+++ b/java/com/android/dialer/notification/VoicemailChannelUtils.java
@@ -193,7 +193,7 @@
   private static NotificationChannel newChannel(
       @NonNull Context context, @NonNull String channelId, @Nullable CharSequence nameSuffix) {
     CharSequence name = context.getText(R.string.notification_channel_voicemail);
-    // TODO: Use a string resource template after v10.
+    // TODO(sail): Use a string resource template after v10.
     if (!TextUtils.isEmpty(nameSuffix)) {
       name = TextUtils.concat(name, ": ", nameSuffix);
     }
diff --git a/java/com/android/dialer/oem/CequintCallerIdManager.java b/java/com/android/dialer/oem/CequintCallerIdManager.java
index 86097c4..7b6ddbc 100644
--- a/java/com/android/dialer/oem/CequintCallerIdManager.java
+++ b/java/com/android/dialer/oem/CequintCallerIdManager.java
@@ -74,7 +74,7 @@
   private static boolean hasAlreadyCheckedCequintCallerIdPackage;
   private static boolean isCequintCallerIdEnabled;
 
-  // TODO: Revisit it and maybe remove it if it's not necessary.
+  // TODO(wangqi): Revisit it and maybe remove it if it's not necessary.
   private final ConcurrentHashMap<String, CequintCallerIdContact> callLogCache;
 
   /** Cequint caller id contact information. */
diff --git a/java/com/android/dialer/persistentlog/PersistentLogFileHandler.java b/java/com/android/dialer/persistentlog/PersistentLogFileHandler.java
index 5c7a28c..8bd8335 100644
--- a/java/com/android/dialer/persistentlog/PersistentLogFileHandler.java
+++ b/java/com/android/dialer/persistentlog/PersistentLogFileHandler.java
@@ -27,6 +27,7 @@
 import android.support.annotation.Nullable;
 import android.support.annotation.WorkerThread;
 import android.support.v4.os.UserManagerCompat;
+import com.android.dialer.common.LogUtil;
 import java.io.ByteArrayInputStream;
 import java.io.DataInputStream;
 import java.io.DataOutputStream;
@@ -58,6 +59,16 @@
   private static final String LOG_DIRECTORY = "persistent_log";
   private static final String NEXT_FILE_INDEX_PREFIX = "persistent_long_next_file_index_";
 
+  private static final byte[] ENTRY_PREFIX = {'P'};
+  private static final byte[] ENTRY_POSTFIX = {'L'};
+
+  private static class LogCorruptionException extends Exception {
+
+    public LogCorruptionException(String message) {
+      super(message);
+    }
+  };
+
   private File logDirectory;
   private final String subfolder;
   private final int fileSizeLimit;
@@ -106,8 +117,10 @@
     try (DataOutputStream outputStream =
         new DataOutputStream(new FileOutputStream(outputFile, true))) {
       for (byte[] log : logs) {
+        outputStream.write(ENTRY_PREFIX);
         outputStream.writeInt(log.length);
         outputStream.write(log);
+        outputStream.write(ENTRY_POSTFIX);
       }
       outputStream.close();
       if (outputFile.length() > fileSizeLimit) {
@@ -116,6 +129,21 @@
     }
   }
 
+  void writeRawLogsForTest(byte[] data) throws IOException {
+    if (outputFile == null) {
+      selectNextFileToWrite();
+    }
+    outputFile.createNewFile();
+    try (DataOutputStream outputStream =
+        new DataOutputStream(new FileOutputStream(outputFile, true))) {
+      outputStream.write(data);
+      outputStream.close();
+      if (outputFile.length() > fileSizeLimit) {
+        selectNextFileToWrite();
+      }
+    }
+  }
+
   /** Concatenate all log files in chronicle order and return a byte array. */
   @WorkerThread
   @NonNull
@@ -149,10 +177,21 @@
         logs.add(log);
         log = readLog(input);
       }
+    } catch (LogCorruptionException e) {
+      LogUtil.e("PersistentLogFileHandler.getLogs", "logs corrupted, deleting", e);
+      deleteLogs();
+      return new ArrayList<>();
     }
     return logs;
   }
 
+  private void deleteLogs() throws IOException {
+    for (File file : getLogFiles()) {
+      file.delete();
+    }
+    selectNextFileToWrite();
+  }
+
   @WorkerThread
   private void selectNextFileToWrite() throws IOException {
     File[] files = getLogFiles();
@@ -186,10 +225,28 @@
 
   @Nullable
   @WorkerThread
-  private static byte[] readLog(DataInputStream inputStream) throws IOException {
+  private byte[] readLog(DataInputStream inputStream) throws IOException, LogCorruptionException {
     try {
-      byte[] data = new byte[inputStream.readInt()];
+      byte[] prefix = new byte[ENTRY_PREFIX.length];
+      if (inputStream.read(prefix) == -1) {
+        // EOF
+        return null;
+      }
+      if (!Arrays.equals(prefix, ENTRY_PREFIX)) {
+        throw new LogCorruptionException("entry prefix mismatch");
+      }
+      int dataLength = inputStream.readInt();
+      if (dataLength > fileSizeLimit) {
+        throw new LogCorruptionException("data length over max size");
+      }
+      byte[] data = new byte[dataLength];
       inputStream.read(data);
+
+      byte[] postfix = new byte[ENTRY_POSTFIX.length];
+      inputStream.read(postfix);
+      if (!Arrays.equals(postfix, ENTRY_POSTFIX)) {
+        throw new LogCorruptionException("entry postfix mismatch");
+      }
       return data;
     } catch (EOFException e) {
       return null;
diff --git a/java/com/android/dialer/persistentlog/PersistentLogger.java b/java/com/android/dialer/persistentlog/PersistentLogger.java
index cf43b8c..847625e 100644
--- a/java/com/android/dialer/persistentlog/PersistentLogger.java
+++ b/java/com/android/dialer/persistentlog/PersistentLogger.java
@@ -43,7 +43,7 @@
  * com.google.android.apps.dialer.crashreporter.SilentCrashReporter} is expected to handle such
  * cases.
  *
- * <p>{@link #logText(String, String)} should be used to log ad-hoc text logs. TODO: switch
+ * <p>{@link #logText(String, String)} should be used to log ad-hoc text logs. TODO(twyen): switch
  * to structured logging
  */
 public final class PersistentLogger {
@@ -110,6 +110,16 @@
     loggerThreadHandler.sendEmptyMessageDelayed(MESSAGE_FLUSH, FLUSH_DELAY_MILLIS);
   }
 
+  @VisibleForTesting
+  /** write raw bytes directly to the log file, likely corrupting it. */
+  static void rawLogForTest(byte[] data) {
+    try {
+      fileHandler.writeRawLogsForTest(data);
+    } catch (IOException e) {
+      throw new RuntimeException(e);
+    }
+  }
+
   /** Dump the log as human readable string. Blocks until the dump is finished. */
   @NonNull
   @WorkerThread
diff --git a/java/com/android/dialer/phonenumbercache/ContactInfo.java b/java/com/android/dialer/phonenumbercache/ContactInfo.java
index aef7374..a620a23 100644
--- a/java/com/android/dialer/phonenumbercache/ContactInfo.java
+++ b/java/com/android/dialer/phonenumbercache/ContactInfo.java
@@ -20,8 +20,8 @@
 import android.support.annotation.NonNull;
 import android.text.TextUtils;
 import com.android.contacts.common.ContactsUtils.UserType;
-import com.android.contacts.common.util.UriUtils;
 import com.android.dialer.logging.ContactSource;
+import com.android.dialer.util.UriUtils;
 
 /** Information for a contact as needed by the Call Log. */
 public class ContactInfo {
diff --git a/java/com/android/dialer/phonenumbercache/ContactInfoHelper.java b/java/com/android/dialer/phonenumbercache/ContactInfoHelper.java
index 4fa3147..b680bd5 100644
--- a/java/com/android/dialer/phonenumbercache/ContactInfoHelper.java
+++ b/java/com/android/dialer/phonenumbercache/ContactInfoHelper.java
@@ -38,7 +38,6 @@
 import com.android.contacts.common.ContactsUtils.UserType;
 import com.android.contacts.common.compat.DirectoryCompat;
 import com.android.contacts.common.util.Constants;
-import com.android.contacts.common.util.UriUtils;
 import com.android.dialer.common.Assert;
 import com.android.dialer.common.LogUtil;
 import com.android.dialer.logging.ContactSource;
@@ -48,6 +47,7 @@
 import com.android.dialer.phonenumberutil.PhoneNumberHelper;
 import com.android.dialer.telecom.TelecomUtil;
 import com.android.dialer.util.PermissionsUtil;
+import com.android.dialer.util.UriUtils;
 import java.util.ArrayList;
 import java.util.List;
 import org.json.JSONException;
diff --git a/java/com/android/dialer/phonenumberutil/PhoneNumberHelper.java b/java/com/android/dialer/phonenumberutil/PhoneNumberHelper.java
index ea4396f..cc4ec2d 100644
--- a/java/com/android/dialer/phonenumberutil/PhoneNumberHelper.java
+++ b/java/com/android/dialer/phonenumberutil/PhoneNumberHelper.java
@@ -214,7 +214,7 @@
 
   private static boolean isVerizon(Context context) {
     // Verizon MCC/MNC codes copied from com/android/voicemailomtp/res/xml/vvm_config.xml.
-    // TODO: Need a better way to do per carrier and per OEM configurations.
+    // TODO(sail): Need a better way to do per carrier and per OEM configurations.
     switch (context.getSystemService(TelephonyManager.class).getSimOperator()) {
       case "310004":
       case "310010":
diff --git a/java/com/android/dialer/postcall/AndroidManifest.xml b/java/com/android/dialer/postcall/AndroidManifest.xml
index 22c77dd..7e69d33 100644
--- a/java/com/android/dialer/postcall/AndroidManifest.xml
+++ b/java/com/android/dialer/postcall/AndroidManifest.xml
@@ -22,7 +22,6 @@
       android:name="com.android.dialer.postcall.PostCallActivity"
       android:exported="false"
       android:theme="@style/DialerThemeBase.NoActionBar"
-      android:windowSoftInputMode="adjustResize"
-      android:screenOrientation="portrait"/>
+      android:windowSoftInputMode="adjustResize"/>
   </application>
 </manifest>
diff --git a/java/com/android/dialer/postcall/PostCall.java b/java/com/android/dialer/postcall/PostCall.java
index 6d9ad01..011fbc9 100644
--- a/java/com/android/dialer/postcall/PostCall.java
+++ b/java/com/android/dialer/postcall/PostCall.java
@@ -46,6 +46,7 @@
   private static final String KEY_POST_CALL_CALL_CONNECT_TIME = "post_call_call_connect_time";
   private static final String KEY_POST_CALL_CALL_NUMBER = "post_call_call_number";
   private static final String KEY_POST_CALL_MESSAGE_SENT = "post_call_message_sent";
+  private static final String KEY_POST_CALL_DISCONNECT_PRESSED = "post_call_disconnect_pressed";
 
   private static Snackbar activeSnackbar;
 
@@ -79,7 +80,7 @@
         LogUtil.sanitizePhoneNumber(getPhoneNumber(activity)),
         capabilities);
 
-    boolean isRcsPostCall = capabilities != null && capabilities.supportsPostCall();
+    boolean isRcsPostCall = capabilities != null && capabilities.isPostCallCapable();
     String actionText =
         isRcsPostCall
             ? activity.getString(R.string.post_call_add_message)
@@ -146,6 +147,13 @@
         .apply();
   }
 
+  public static void onDisconnectPressed(Context context) {
+    DialerUtils.getDefaultSharedPreferenceForDeviceProtectedStorageContext(context)
+        .edit()
+        .putBoolean(KEY_POST_CALL_DISCONNECT_PRESSED, true)
+        .apply();
+  }
+
   public static void onCallDisconnected(Context context, String number, long callConnectedMillis) {
     DialerUtils.getDefaultSharedPreferenceForDeviceProtectedStorageContext(context)
         .edit()
@@ -185,6 +193,7 @@
         .remove(KEY_POST_CALL_CALL_NUMBER)
         .remove(KEY_POST_CALL_MESSAGE_SENT)
         .remove(KEY_POST_CALL_CALL_CONNECT_TIME)
+        .remove(KEY_POST_CALL_DISCONNECT_PRESSED)
         .apply();
   }
 
@@ -197,6 +206,8 @@
     long timeSinceDisconnect = System.currentTimeMillis() - disconnectTimeMillis;
     long callDurationMillis = disconnectTimeMillis - connectTimeMillis;
 
+    boolean callDisconnectedByUser = manager.getBoolean(KEY_POST_CALL_DISCONNECT_PRESSED, false);
+
     ConfigProvider binding = ConfigProviderBindings.get(context);
     return disconnectTimeMillis != -1
         && connectTimeMillis != -1
@@ -204,7 +215,8 @@
         && binding.getLong("postcall_last_call_threshold", 30_000) > timeSinceDisconnect
         && (connectTimeMillis == 0
             || binding.getLong("postcall_call_duration_threshold", 35_000) > callDurationMillis)
-        && getPhoneNumber(context) != null;
+        && getPhoneNumber(context) != null
+        && callDisconnectedByUser;
   }
 
   private static boolean shouldPromptUserToViewSentMessage(Context context) {
diff --git a/java/com/android/dialer/postcall/res/layout/post_call_activity.xml b/java/com/android/dialer/postcall/res/layout/post_call_activity.xml
index 256c110..c42764e 100644
--- a/java/com/android/dialer/postcall/res/layout/post_call_activity.xml
+++ b/java/com/android/dialer/postcall/res/layout/post_call_activity.xml
@@ -14,20 +14,21 @@
   ~ 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:background="@color/background_dialer_white"
+<LinearLayout
+  xmlns:android="http://schemas.android.com/apk/res/android"
+  android:orientation="vertical"
   android:layout_width="match_parent"
-  android:layout_height="match_parent">
-
-  <FrameLayout
-    android:id="@+id/message_container"
-    android:layout_width="match_parent"
-    android:layout_height="wrap_content"
-    android:layout_alignParentBottom="true"
-    android:background="@color/background_dialer_white"/>
+  android:layout_height="match_parent"
+  android:background="@color/background_dialer_white">
 
   <com.android.dialer.widget.DialerToolbar
       android:id="@+id/toolbar"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"/>
-</RelativeLayout>
\ No newline at end of file
+
+  <FrameLayout
+    android:id="@+id/message_container"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:background="@color/background_dialer_white"/>
+</LinearLayout>
\ No newline at end of file
diff --git a/java/com/android/dialer/searchfragment/common/QueryFilteringUtil.java b/java/com/android/dialer/searchfragment/common/QueryFilteringUtil.java
index b23315b..0d22a82 100644
--- a/java/com/android/dialer/searchfragment/common/QueryFilteringUtil.java
+++ b/java/com/android/dialer/searchfragment/common/QueryFilteringUtil.java
@@ -42,7 +42,7 @@
     }
 
     // Check matches initials
-    // TODO investigate faster implementation
+    // TODO(calderwoodra) investigate faster implementation
     query = digitsOnly(query);
     int queryIndex = 0;
 
@@ -60,6 +60,23 @@
     return queryIndex == query.length();
   }
 
+  /**
+   * Returns true if the subparts of the name (split by white space) begin with the query.
+   *
+   * <p>Examples:
+   *
+   * <ul>
+   *   <li>#nameContainsQuery("b", "Brandon") returns true
+   *   <li>#nameContainsQuery("o", "Bob") returns false
+   *   <li>#nameContainsQuery("o", "Bob Olive") returns true
+   * </ul>
+   */
+  public static boolean nameContainsQuery(String query, String name) {
+    return Pattern.compile("(^|\\s)" + Pattern.quote(query.toLowerCase()))
+        .matcher(name.toLowerCase())
+        .find();
+  }
+
   /** @return true if the number belongs to the query. */
   public static boolean numberMatchesNumberQuery(String query, String number) {
     return PhoneNumberUtils.isGlobalPhoneNumber(query)
diff --git a/java/com/android/dialer/searchfragment/common/SearchCursor.java b/java/com/android/dialer/searchfragment/common/SearchCursor.java
new file mode 100644
index 0000000..368ee09
--- /dev/null
+++ b/java/com/android/dialer/searchfragment/common/SearchCursor.java
@@ -0,0 +1,38 @@
+/*
+ * 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
+ */
+
+package com.android.dialer.searchfragment.common;
+
+import android.database.Cursor;
+import android.support.annotation.NonNull;
+
+/** Base cursor interface needed for all cursors used in search. */
+public interface SearchCursor extends Cursor {
+
+  String[] HEADER_PROJECTION = {"header_text"};
+
+  int HEADER_TEXT_POSITION = 0;
+
+  /** Returns true if the current cursor position is a header */
+  boolean isHeader();
+
+  /**
+   * Notifies the cursor that the query has updated.
+   *
+   * @return true if the data set has changed.
+   */
+  boolean updateQuery(@NonNull String query);
+}
diff --git a/java/com/android/dialer/searchfragment/cp2/AndroidManifest.xml b/java/com/android/dialer/searchfragment/cp2/AndroidManifest.xml
new file mode 100644
index 0000000..8d2efca
--- /dev/null
+++ b/java/com/android/dialer/searchfragment/cp2/AndroidManifest.xml
@@ -0,0 +1,16 @@
+<!--
+ ~ 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
+ -->
+<manifest  package="com.android.dialer.searchfragment.cp2"/>
\ No newline at end of file
diff --git a/java/com/android/dialer/searchfragment/cp2/SearchContactCursor.java b/java/com/android/dialer/searchfragment/cp2/ContactFilterCursor.java
similarity index 96%
rename from java/com/android/dialer/searchfragment/cp2/SearchContactCursor.java
rename to java/com/android/dialer/searchfragment/cp2/ContactFilterCursor.java
index a2ef58c..d5fcfba 100644
--- a/java/com/android/dialer/searchfragment/cp2/SearchContactCursor.java
+++ b/java/com/android/dialer/searchfragment/cp2/ContactFilterCursor.java
@@ -34,12 +34,12 @@
 import java.util.List;
 
 /**
- * Wrapper for a cursor returned by {@link SearchContactsCursorLoader}.
+ * Wrapper for a cursor containing all on device contacts.
  *
  * <p>This cursor removes duplicate phone numbers associated with the same contact and can filter
  * contacts based on a query by calling {@link #filter(String)}.
  */
-public final class SearchContactCursor implements Cursor {
+final class ContactFilterCursor implements Cursor {
 
   private final Cursor cursor;
   // List of cursor ids that are valid for displaying after filtering.
@@ -66,8 +66,8 @@
    * @param cursor with projection {@link Projections#PHONE_PROJECTION}.
    * @param query to filter cursor results.
    */
-  public SearchContactCursor(Cursor cursor, @Nullable String query) {
-    // TODO investigate copying this into a MatrixCursor and holding in memory
+  ContactFilterCursor(Cursor cursor, @Nullable String query) {
+    // TODO(calderwoodra) investigate copying this into a MatrixCursor and holding in memory
     this.cursor = cursor;
     filter(query);
   }
@@ -142,7 +142,7 @@
       if (TextUtils.isEmpty(query)
           || QueryFilteringUtil.nameMatchesT9Query(query, previousName)
           || QueryFilteringUtil.numberMatchesNumberQuery(query, previousMostQualifiedNumber)
-          || previousName.contains(query)) {
+          || QueryFilteringUtil.nameContainsQuery(query, previousName)) {
         queryFilteredPositions.add(previousMostQualifiedPosition);
       }
     }
diff --git a/java/com/android/dialer/searchfragment/cp2/SearchContactViewHolder.java b/java/com/android/dialer/searchfragment/cp2/SearchContactViewHolder.java
index 5f06b59..1e8224d 100644
--- a/java/com/android/dialer/searchfragment/cp2/SearchContactViewHolder.java
+++ b/java/com/android/dialer/searchfragment/cp2/SearchContactViewHolder.java
@@ -30,14 +30,15 @@
 import android.widget.ImageView;
 import android.widget.QuickContactBadge;
 import android.widget.TextView;
-import com.android.contacts.common.ContactPhotoManager;
-import com.android.contacts.common.lettertiles.LetterTileDrawable;
 import com.android.dialer.callintent.CallInitiationType.Type;
 import com.android.dialer.callintent.CallIntentBuilder;
 import com.android.dialer.common.Assert;
+import com.android.dialer.contactphoto.ContactPhotoManager;
+import com.android.dialer.lettertile.LetterTileDrawable;
 import com.android.dialer.searchfragment.common.Projections;
 import com.android.dialer.searchfragment.common.QueryBoldingUtil;
 import com.android.dialer.searchfragment.common.R;
+import com.android.dialer.searchfragment.common.SearchCursor;
 import com.android.dialer.telecom.TelecomUtil;
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
@@ -77,7 +78,7 @@
    * Binds the ViewHolder with a cursor from {@link SearchContactsCursorLoader} with the data found
    * at the cursors set position.
    */
-  public void bind(Cursor cursor, String query) {
+  public void bind(SearchCursor cursor, String query) {
     number = cursor.getString(Projections.PHONE_NUMBER);
     String name = cursor.getString(Projections.PHONE_DISPLAY_NAME);
     String label = getLabel(context.getResources(), cursor);
@@ -91,7 +92,7 @@
     numberView.setText(QueryBoldingUtil.getNumberWithQueryBolded(query, secondaryInfo));
     setCallToAction(cursor);
 
-    if (shouldShowPhoto(cursor, name)) {
+    if (shouldShowPhoto(cursor)) {
       nameOrNumberView.setVisibility(View.VISIBLE);
       photo.setVisibility(View.VISIBLE);
       String photoUri = cursor.getString(Projections.PHONE_PHOTO_URI);
@@ -109,16 +110,19 @@
     }
   }
 
-  private boolean shouldShowPhoto(Cursor cursor, String currentName) {
+  // Show the contact photo next to only the first number if a contact has multiple numbers
+  private boolean shouldShowPhoto(SearchCursor cursor) {
     int currentPosition = cursor.getPosition();
-    if (currentPosition == 0) {
-      return true;
-    } else {
-      cursor.moveToPosition(currentPosition - 1);
-      String previousName = cursor.getString(Projections.PHONE_DISPLAY_NAME);
+    String currentLookupKey = cursor.getString(Projections.PHONE_LOOKUP_KEY);
+    cursor.moveToPosition(currentPosition - 1);
+
+    if (!cursor.isHeader() && !cursor.isBeforeFirst()) {
+      String previousLookupKey = cursor.getString(Projections.PHONE_LOOKUP_KEY);
       cursor.moveToPosition(currentPosition);
-      return !currentName.equals(previousName);
+      return !currentLookupKey.equals(previousLookupKey);
     }
+    cursor.moveToPosition(currentPosition);
+    return true;
   }
 
   private static Uri getContactUri(Cursor cursor) {
@@ -127,8 +131,8 @@
     return Contacts.getLookupUri(contactId, lookupKey);
   }
 
-  // TODO: handle CNAP and cequint types.
-  // TODO: unify this into a utility method with CallLogAdapter#getNumberType
+  // TODO(calderwoodra): handle CNAP and cequint types.
+  // TODO(calderwoodra): unify this into a utility method with CallLogAdapter#getNumberType
   private static String getLabel(Resources resources, Cursor cursor) {
     int numberType = cursor.getInt(Projections.PHONE_TYPE);
     String numberLabel = cursor.getString(Projections.PHONE_LABEL);
@@ -171,7 +175,7 @@
       return CallToAction.VIDEO_CALL;
     }
 
-    // TODO: enriched calling
+    // TODO(calderwoodra): enriched calling
     return CallToAction.NONE;
   }
 
@@ -183,13 +187,13 @@
           callToActionView.setVisibility(View.VISIBLE);
           callToActionView.setImageDrawable(
               context.getDrawable(com.android.contacts.common.R.drawable.ic_phone_attach));
-          // TODO: open call composer.
+          // TODO(calderwoodra): open call composer.
           break;
         case CallToAction.VIDEO_CALL:
           callToActionView.setVisibility(View.VISIBLE);
           callToActionView.setImageDrawable(
               context.getDrawable(R.drawable.quantum_ic_videocam_white_24));
-          // TODO: place a video call
+          // TODO(calderwoodra): place a video call
           break;
         case CallToAction.NONE:
         default:
@@ -197,7 +201,7 @@
               "Invalid Call to action type: " + currentAction);
       }
     } else {
-      // TODO: set the correct call initiation type.
+      // TODO(calderwoodra): set the correct call initiation type.
       TelecomUtil.placeCall(context, new CallIntentBuilder(number, Type.REGULAR_SEARCH).build());
     }
   }
diff --git a/java/com/android/dialer/searchfragment/cp2/SearchContactsCursor.java b/java/com/android/dialer/searchfragment/cp2/SearchContactsCursor.java
new file mode 100644
index 0000000..18c9ecd
--- /dev/null
+++ b/java/com/android/dialer/searchfragment/cp2/SearchContactsCursor.java
@@ -0,0 +1,64 @@
+/*
+ * 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
+ */
+
+package com.android.dialer.searchfragment.cp2;
+
+import android.content.Context;
+import android.database.Cursor;
+import android.database.MatrixCursor;
+import android.database.MergeCursor;
+import android.support.annotation.Nullable;
+import com.android.dialer.searchfragment.common.SearchCursor;
+
+/**
+ * {@link SearchCursor} implementation for displaying on device contacts.
+ *
+ * <p>Inserts header "All Contacts" at position 0.
+ */
+final class SearchContactsCursor extends MergeCursor implements SearchCursor {
+
+  private final ContactFilterCursor contactFilterCursor;
+
+  public static SearchContactsCursor newInstnace(
+      Context context, ContactFilterCursor contactFilterCursor) {
+    MatrixCursor headerCursor = new MatrixCursor(HEADER_PROJECTION);
+    headerCursor.addRow(new String[] {context.getString(R.string.all_contacts)});
+    return new SearchContactsCursor(new Cursor[] {headerCursor, contactFilterCursor});
+  }
+
+  private SearchContactsCursor(Cursor[] cursors) {
+    super(cursors);
+    contactFilterCursor = (ContactFilterCursor) cursors[1];
+  }
+
+  @Override
+  public boolean isHeader() {
+    return isFirst();
+  }
+
+  @Override
+  public boolean updateQuery(@Nullable String query) {
+    contactFilterCursor.filter(query);
+    return true;
+  }
+
+  @Override
+  public int getCount() {
+    // If we don't have any contents, we don't want to show the header
+    int count = contactFilterCursor.getCount();
+    return count == 0 ? 0 : count + 1;
+  }
+}
diff --git a/java/com/android/dialer/searchfragment/cp2/SearchContactsCursorLoader.java b/java/com/android/dialer/searchfragment/cp2/SearchContactsCursorLoader.java
index c72f28b..d75a661 100644
--- a/java/com/android/dialer/searchfragment/cp2/SearchContactsCursorLoader.java
+++ b/java/com/android/dialer/searchfragment/cp2/SearchContactsCursorLoader.java
@@ -37,6 +37,11 @@
 
   @Override
   public Cursor loadInBackground() {
-    return new SearchContactCursor(super.loadInBackground(), null);
+    // All contacts
+    Cursor cursor = super.loadInBackground();
+    // Filtering logic
+    ContactFilterCursor contactFilterCursor = new ContactFilterCursor(cursor, null);
+    // Header logic
+    return SearchContactsCursor.newInstnace(getContext(), contactFilterCursor);
   }
 }
diff --git a/java/com/android/dialer/searchfragment/cp2/res/values/strings.xml b/java/com/android/dialer/searchfragment/cp2/res/values/strings.xml
new file mode 100644
index 0000000..5462dc9
--- /dev/null
+++ b/java/com/android/dialer/searchfragment/cp2/res/values/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ 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
+  -->
+<resources>
+  <!-- Label for a list of all contacts on device. [CHAR LIMIT=30]-->
+  <string name="all_contacts">All contacts</string>
+</resources>
\ No newline at end of file
diff --git a/java/com/android/dialer/searchfragment/list/NewSearchFragment.java b/java/com/android/dialer/searchfragment/list/NewSearchFragment.java
index fcc87c3..2c02815 100644
--- a/java/com/android/dialer/searchfragment/list/NewSearchFragment.java
+++ b/java/com/android/dialer/searchfragment/list/NewSearchFragment.java
@@ -19,59 +19,111 @@
 import android.app.Fragment;
 import android.app.LoaderManager.LoaderCallbacks;
 import android.content.Loader;
+import android.content.pm.PackageManager;
 import android.database.Cursor;
 import android.os.Bundle;
+import android.support.annotation.NonNull;
 import android.support.annotation.Nullable;
+import android.support.annotation.VisibleForTesting;
+import android.support.v13.app.FragmentCompat;
 import android.support.v7.widget.LinearLayoutManager;
 import android.support.v7.widget.RecyclerView;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
+import android.view.animation.Interpolator;
 import com.android.contacts.common.extensions.PhoneDirectoryExtenderAccessor;
+import com.android.dialer.animation.AnimUtils;
+import com.android.dialer.common.Assert;
+import com.android.dialer.common.LogUtil;
 import com.android.dialer.common.concurrent.ThreadUtil;
+import com.android.dialer.searchfragment.common.SearchCursor;
 import com.android.dialer.searchfragment.cp2.SearchContactsCursorLoader;
 import com.android.dialer.searchfragment.nearbyplaces.NearbyPlacesCursorLoader;
+import com.android.dialer.searchfragment.remote.RemoteContactsCursorLoader;
+import com.android.dialer.searchfragment.remote.RemoteDirectoriesCursorLoader;
+import com.android.dialer.searchfragment.remote.RemoteDirectoriesCursorLoader.Directory;
+import com.android.dialer.util.PermissionsUtil;
+import com.android.dialer.util.ViewUtil;
+import com.android.dialer.widget.EmptyContentView;
+import com.android.dialer.widget.EmptyContentView.OnEmptyViewActionButtonClickedListener;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
 
 /** Fragment used for searching contacts. */
-public final class NewSearchFragment extends Fragment implements LoaderCallbacks<Cursor> {
+public final class NewSearchFragment extends Fragment
+    implements LoaderCallbacks<Cursor>, OnEmptyViewActionButtonClickedListener {
 
   // Since some of our queries can generate network requests, we should delay them until the user
   // stops typing to prevent generating too much network traffic.
   private static final int NETWORK_SEARCH_DELAY_MILLIS = 300;
 
-  private static final int CONTACTS_LOADER_ID = 0;
-  private static final int NEARBY_PLACES_ID = 1;
+  @VisibleForTesting public static final int READ_CONTACTS_PERMISSION_REQUEST_CODE = 1;
 
+  private static final int CONTACTS_LOADER_ID = 0;
+  private static final int NEARBY_PLACES_LOADER_ID = 1;
+  private static final int REMOTE_DIRECTORIES_LOADER_ID = 2;
+  private static final int REMOTE_CONTACTS_LOADER_ID = 3;
+
+  private EmptyContentView emptyContentView;
   private RecyclerView recyclerView;
   private SearchAdapter adapter;
   private String query;
+  private boolean remoteDirectoriesDisabledForTesting;
 
+  private final List<Directory> directories = new ArrayList<>();
   private final Runnable loadNearbyPlacesRunnable =
-      () -> getLoaderManager().restartLoader(NEARBY_PLACES_ID, null, this);
+      () -> getLoaderManager().restartLoader(NEARBY_PLACES_LOADER_ID, null, this);
+  private final Runnable loadRemoteContactsRunnable =
+      () -> getLoaderManager().restartLoader(REMOTE_CONTACTS_LOADER_ID, null, this);
+
+  private Runnable updatePositionRunnable;
 
   @Nullable
   @Override
   public View onCreateView(
       LayoutInflater inflater, @Nullable ViewGroup parent, @Nullable Bundle bundle) {
-    getLoaderManager().initLoader(0, null, this);
     View view = inflater.inflate(R.layout.fragment_search, parent, false);
-    adapter = new SearchAdapter(getContext());
+    adapter = new SearchAdapter(getContext(), new SearchCursorManager());
+    emptyContentView = view.findViewById(R.id.empty_view);
     recyclerView = view.findViewById(R.id.recycler_view);
     recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
     recyclerView.setAdapter(adapter);
 
+    if (!PermissionsUtil.hasContactsReadPermissions(getContext())) {
+      emptyContentView.setDescription(R.string.new_permission_no_search);
+      emptyContentView.setActionLabel(R.string.permission_single_turn_on);
+      emptyContentView.setActionClickedListener(this);
+      emptyContentView.setImage(R.drawable.empty_contacts);
+      emptyContentView.setVisibility(View.VISIBLE);
+    } else {
+      initLoaders();
+    }
+
+    if (updatePositionRunnable != null) {
+      ViewUtil.doOnPreDraw(view, false, updatePositionRunnable);
+    }
+    return view;
+  }
+
+  private void initLoaders() {
     getLoaderManager().initLoader(CONTACTS_LOADER_ID, null, this);
     loadNearbyPlacesCursor();
-    return view;
+    loadRemoteDirectoriesCursor();
   }
 
   @Override
   public Loader<Cursor> onCreateLoader(int id, Bundle bundle) {
-    // TODO add enterprise loader
+    // TODO(calderwoodra) add enterprise loader
     if (id == CONTACTS_LOADER_ID) {
       return new SearchContactsCursorLoader(getContext());
-    } else if (id == NEARBY_PLACES_ID) {
+    } else if (id == NEARBY_PLACES_LOADER_ID) {
       return new NearbyPlacesCursorLoader(getContext(), query);
+    } else if (id == REMOTE_DIRECTORIES_LOADER_ID) {
+      return new RemoteDirectoriesCursorLoader(getContext());
+    } else if (id == REMOTE_CONTACTS_LOADER_ID) {
+      return new RemoteContactsCursorLoader(getContext(), query, directories);
     } else {
       throw new IllegalStateException("Invalid loader id: " + id);
     }
@@ -79,10 +131,29 @@
 
   @Override
   public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) {
+    if (cursor != null
+        && !(loader instanceof RemoteDirectoriesCursorLoader)
+        && !(cursor instanceof SearchCursor)) {
+      throw Assert.createIllegalStateFailException("Cursors must implement SearchCursor");
+    }
+
     if (loader instanceof SearchContactsCursorLoader) {
-      adapter.setContactsCursor(cursor);
+      adapter.setContactsCursor((SearchCursor) cursor);
+
     } else if (loader instanceof NearbyPlacesCursorLoader) {
-      adapter.setNearbyPlacesCursor(cursor);
+      adapter.setNearbyPlacesCursor((SearchCursor) cursor);
+
+    } else if (loader instanceof RemoteContactsCursorLoader) {
+      adapter.setRemoteContactsCursor((SearchCursor) cursor);
+
+    } else if (loader instanceof RemoteDirectoriesCursorLoader) {
+      directories.clear();
+      cursor.moveToPosition(-1);
+      while (cursor.moveToNext()) {
+        directories.add(RemoteDirectoriesCursorLoader.readDirectory(cursor));
+      }
+      loadRemoteContactsCursors();
+
     } else {
       throw new IllegalStateException("Invalid loader: " + loader);
     }
@@ -99,16 +170,28 @@
     if (adapter != null) {
       adapter.setQuery(query);
       loadNearbyPlacesCursor();
+      loadRemoteContactsCursors();
     }
   }
 
+  public void animatePosition(int start, int end, int duration) {
+    // Called before the view is ready, prepare a runnable to run in onCreateView
+    if (getView() == null) {
+      updatePositionRunnable = () -> animatePosition(start, end, 0);
+      return;
+    }
+    boolean slideUp = start > end;
+    Interpolator interpolator = slideUp ? AnimUtils.EASE_IN : AnimUtils.EASE_OUT;
+    getView().setTranslationY(start);
+    getView().animate().translationY(end).setInterpolator(interpolator).setDuration(duration);
+    updatePositionRunnable = null;
+  }
+
   @Override
   public void onDestroy() {
     super.onDestroy();
-    // close adapters
-    adapter.setNearbyPlacesCursor(null);
-    adapter.setContactsCursor(null);
     ThreadUtil.getUiThreadHandler().removeCallbacks(loadNearbyPlacesRunnable);
+    ThreadUtil.getUiThreadHandler().removeCallbacks(loadRemoteContactsRunnable);
   }
 
   private void loadNearbyPlacesCursor() {
@@ -122,4 +205,55 @@
     ThreadUtil.getUiThreadHandler()
         .postDelayed(loadNearbyPlacesRunnable, NETWORK_SEARCH_DELAY_MILLIS);
   }
+
+  @Override
+  public void onRequestPermissionsResult(
+      int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
+    if (requestCode == READ_CONTACTS_PERMISSION_REQUEST_CODE) {
+      if (grantResults.length >= 1 && PackageManager.PERMISSION_GRANTED == grantResults[0]) {
+        // Force a refresh of the data since we were missing the permission before this.
+        emptyContentView.setVisibility(View.GONE);
+        initLoaders();
+      }
+    }
+  }
+
+  @Override
+  public void onEmptyViewActionButtonClicked() {
+    String[] deniedPermissions =
+        PermissionsUtil.getPermissionsCurrentlyDenied(
+            getContext(), PermissionsUtil.allContactsGroupPermissionsUsedInDialer);
+    if (deniedPermissions.length > 0) {
+      LogUtil.i(
+          "NewSearchFragment.onEmptyViewActionButtonClicked",
+          "Requesting permissions: " + Arrays.toString(deniedPermissions));
+      FragmentCompat.requestPermissions(
+          this, deniedPermissions, READ_CONTACTS_PERMISSION_REQUEST_CODE);
+    }
+  }
+
+  private void loadRemoteDirectoriesCursor() {
+    if (!remoteDirectoriesDisabledForTesting) {
+      getLoaderManager().initLoader(REMOTE_DIRECTORIES_LOADER_ID, null, this);
+    }
+  }
+
+  private void loadRemoteContactsCursors() {
+    if (remoteDirectoriesDisabledForTesting) {
+      return;
+    }
+
+    // Cancel existing load if one exists.
+    ThreadUtil.getUiThreadHandler().removeCallbacks(loadRemoteContactsRunnable);
+    ThreadUtil.getUiThreadHandler()
+        .postDelayed(loadRemoteContactsRunnable, NETWORK_SEARCH_DELAY_MILLIS);
+  }
+
+  // Currently, setting up multiple FakeContentProviders doesn't work and results in this fragment
+  // being untestable while it can query multiple datasources. This is a temporary fix.
+  // TODO(b/64099602): Remove this method and test this fragment with multiple data sources
+  @VisibleForTesting
+  public void setRemoteDirectoriesDisabled(boolean disabled) {
+    remoteDirectoriesDisabledForTesting = disabled;
+  }
 }
diff --git a/java/com/android/dialer/searchfragment/list/SearchAdapter.java b/java/com/android/dialer/searchfragment/list/SearchAdapter.java
index 023513e..81e8e38 100644
--- a/java/com/android/dialer/searchfragment/list/SearchAdapter.java
+++ b/java/com/android/dialer/searchfragment/list/SearchAdapter.java
@@ -17,15 +17,16 @@
 package com.android.dialer.searchfragment.list;
 
 import android.content.Context;
-import android.database.Cursor;
 import android.support.v7.widget.RecyclerView;
 import android.support.v7.widget.RecyclerView.ViewHolder;
 import android.view.LayoutInflater;
 import android.view.ViewGroup;
 import com.android.dialer.common.Assert;
+import com.android.dialer.searchfragment.common.SearchCursor;
 import com.android.dialer.searchfragment.cp2.SearchContactViewHolder;
 import com.android.dialer.searchfragment.list.SearchCursorManager.RowType;
 import com.android.dialer.searchfragment.nearbyplaces.NearbyPlaceViewHolder;
+import com.android.dialer.searchfragment.remote.RemoteContactViewHolder;
 
 /** RecyclerView adapter for {@link NewSearchFragment}. */
 class SearchAdapter extends RecyclerView.Adapter<ViewHolder> {
@@ -35,9 +36,9 @@
 
   private String query;
 
-  SearchAdapter(Context context) {
-    searchCursorManager = new SearchCursorManager();
+  SearchAdapter(Context context, SearchCursorManager searchCursorManager) {
     this.context = context;
+    this.searchCursorManager = searchCursorManager;
   }
 
   @Override
@@ -49,11 +50,14 @@
       case RowType.NEARBY_PLACES_ROW:
         return new NearbyPlaceViewHolder(
             LayoutInflater.from(context).inflate(R.layout.search_contact_row, root, false));
+      case RowType.CONTACT_HEADER:
       case RowType.DIRECTORY_HEADER:
       case RowType.NEARBY_PLACES_HEADER:
         return new HeaderViewHolder(
             LayoutInflater.from(context).inflate(R.layout.header_layout, root, false));
-      case RowType.DIRECTORY_ROW: // TODO: add directory rows to search
+      case RowType.DIRECTORY_ROW:
+        return new RemoteContactViewHolder(
+            LayoutInflater.from(context).inflate(R.layout.search_contact_row, root, false));
       case RowType.INVALID:
       default:
         throw Assert.createIllegalStateFailException("Invalid RowType: " + rowType);
@@ -68,20 +72,21 @@
   @Override
   public void onBindViewHolder(ViewHolder holder, int position) {
     if (holder instanceof SearchContactViewHolder) {
-      Cursor cursor = searchCursorManager.getCursor(position);
-      ((SearchContactViewHolder) holder).bind(cursor, query);
+      ((SearchContactViewHolder) holder).bind(searchCursorManager.getCursor(position), query);
     } else if (holder instanceof NearbyPlaceViewHolder) {
-      Cursor cursor = searchCursorManager.getCursor(position);
-      ((NearbyPlaceViewHolder) holder).bind(cursor, query);
+      ((NearbyPlaceViewHolder) holder).bind(searchCursorManager.getCursor(position), query);
+    } else if (holder instanceof RemoteContactViewHolder) {
+      ((RemoteContactViewHolder) holder).bind(searchCursorManager.getCursor(position), query);
     } else if (holder instanceof HeaderViewHolder) {
-      String header = context.getString(searchCursorManager.getHeaderText(position));
+      String header =
+          searchCursorManager.getCursor(position).getString(SearchCursor.HEADER_TEXT_POSITION);
       ((HeaderViewHolder) holder).setHeader(header);
     } else {
       throw Assert.createIllegalStateFailException("Invalid ViewHolder: " + holder);
     }
   }
 
-  void setContactsCursor(Cursor cursor) {
+  void setContactsCursor(SearchCursor cursor) {
     searchCursorManager.setContactsCursor(cursor);
     notifyDataSetChanged();
   }
@@ -97,12 +102,20 @@
 
   public void setQuery(String query) {
     this.query = query;
-    searchCursorManager.setQuery(query);
-    notifyDataSetChanged();
+    if (searchCursorManager.setQuery(query)) {
+      notifyDataSetChanged();
+    }
   }
 
-  public void setNearbyPlacesCursor(Cursor nearbyPlacesCursor) {
-    searchCursorManager.setNearbyPlacesCursor(nearbyPlacesCursor);
-    notifyDataSetChanged();
+  public void setNearbyPlacesCursor(SearchCursor nearbyPlacesCursor) {
+    if (searchCursorManager.setNearbyPlacesCursor(nearbyPlacesCursor)) {
+      notifyDataSetChanged();
+    }
+  }
+
+  public void setRemoteContactsCursor(SearchCursor remoteContactsCursor) {
+    if (searchCursorManager.setCorpDirectoryCursor(remoteContactsCursor)) {
+      notifyDataSetChanged();
+    }
   }
 }
diff --git a/java/com/android/dialer/searchfragment/list/SearchCursorManager.java b/java/com/android/dialer/searchfragment/list/SearchCursorManager.java
index 216a9ad..b385aa3 100644
--- a/java/com/android/dialer/searchfragment/list/SearchCursorManager.java
+++ b/java/com/android/dialer/searchfragment/list/SearchCursorManager.java
@@ -16,11 +16,9 @@
 
 package com.android.dialer.searchfragment.list;
 
-import android.database.Cursor;
 import android.support.annotation.IntDef;
-import android.support.annotation.StringRes;
 import com.android.dialer.common.Assert;
-import com.android.dialer.searchfragment.cp2.SearchContactCursor;
+import com.android.dialer.searchfragment.common.SearchCursor;
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 
@@ -30,9 +28,9 @@
  * <p>This class accepts three cursors:
  *
  * <ul>
- *   <li>A contacts cursor {@link #setContactsCursor(Cursor)}
- *   <li>A google search results cursor {@link #setNearbyPlacesCursor(Cursor)}
- *   <li>A work directory cursor {@link #setCorpDirectoryCursor(Cursor)}
+ *   <li>A contacts cursor {@link #setContactsCursor(SearchCursor)}
+ *   <li>A google search results cursor {@link #setNearbyPlacesCursor(SearchCursor)}
+ *   <li>A work directory cursor {@link #setCorpDirectoryCursor(SearchCursor)}
  * </ul>
  *
  * <p>The key purpose of this class is to compose three aforementioned cursors together to function
@@ -50,6 +48,7 @@
   @Retention(RetentionPolicy.SOURCE)
   @IntDef({
     SearchCursorManager.RowType.INVALID,
+    SearchCursorManager.RowType.CONTACT_HEADER,
     SearchCursorManager.RowType.CONTACT_ROW,
     SearchCursorManager.RowType.NEARBY_PLACES_HEADER,
     SearchCursorManager.RowType.NEARBY_PLACES_ROW,
@@ -58,25 +57,29 @@
   })
   @interface RowType {
     int INVALID = 0;
+    // TODO(calderwoodra) add suggestions header and list
+    /** Header to mark the start of contact rows. */
+    int CONTACT_HEADER = 1;
     /** A row containing contact information for contacts stored locally on device. */
-    int CONTACT_ROW = 1;
+    int CONTACT_ROW = 2;
     /** Header to mark the end of contact rows and start of nearby places rows. */
-    int NEARBY_PLACES_HEADER = 2;
+    int NEARBY_PLACES_HEADER = 3;
     /** A row containing nearby places information/search results. */
-    int NEARBY_PLACES_ROW = 3;
+    int NEARBY_PLACES_ROW = 4;
     /** Header to mark the end of the previous row set and start of directory rows. */
-    int DIRECTORY_HEADER = 4;
+    int DIRECTORY_HEADER = 5;
     /** A row containing contact information for contacts stored externally in corp directories. */
-    int DIRECTORY_ROW = 5;
+    int DIRECTORY_ROW = 6;
   }
 
-  private Cursor contactsCursor = null;
-  private Cursor nearbyPlacesCursor = null;
-  private Cursor corpDirectoryCursor = null;
+  private SearchCursor contactsCursor = null;
+  private SearchCursor nearbyPlacesCursor = null;
+  private SearchCursor corpDirectoryCursor = null;
 
-  void setContactsCursor(Cursor cursor) {
+  /** Returns true if the cursor changed. */
+  boolean setContactsCursor(SearchCursor cursor) {
     if (cursor == contactsCursor) {
-      return;
+      return false;
     }
 
     if (contactsCursor != null && !contactsCursor.isClosed()) {
@@ -88,11 +91,13 @@
     } else {
       contactsCursor = null;
     }
+    return true;
   }
 
-  void setNearbyPlacesCursor(Cursor cursor) {
+  /** Returns true if the cursor changed. */
+  boolean setNearbyPlacesCursor(SearchCursor cursor) {
     if (cursor == nearbyPlacesCursor) {
-      return;
+      return false;
     }
 
     if (nearbyPlacesCursor != null && !nearbyPlacesCursor.isClosed()) {
@@ -104,11 +109,13 @@
     } else {
       nearbyPlacesCursor = null;
     }
+    return true;
   }
 
-  void setCorpDirectoryCursor(Cursor cursor) {
+  /** Returns true if a cursor changed. */
+  boolean setCorpDirectoryCursor(SearchCursor cursor) {
     if (cursor == corpDirectoryCursor) {
-      return;
+      return false;
     }
 
     if (corpDirectoryCursor != null && !corpDirectoryCursor.isClosed()) {
@@ -120,16 +127,26 @@
     } else {
       corpDirectoryCursor = null;
     }
+    return true;
   }
 
-  void setQuery(String query) {
+  boolean setQuery(String query) {
+    boolean updated = false;
     if (contactsCursor != null) {
-      // TODO: abstract this
-      ((SearchContactCursor) contactsCursor).filter(query);
+      updated = contactsCursor.updateQuery(query);
     }
+
+    if (nearbyPlacesCursor != null) {
+      updated |= nearbyPlacesCursor.updateQuery(query);
+    }
+
+    if (corpDirectoryCursor != null) {
+      updated |= corpDirectoryCursor.updateQuery(query);
+    }
+    return updated;
   }
 
-  /** @return the sum of counts of all cursors, including headers. */
+  /** Returns the sum of counts of all cursors, including headers. */
   int getCount() {
     int count = 0;
     if (contactsCursor != null) {
@@ -137,12 +154,10 @@
     }
 
     if (nearbyPlacesCursor != null) {
-      count++; // header
       count += nearbyPlacesCursor.getCount();
     }
 
     if (corpDirectoryCursor != null) {
-      count++; // header
       count += corpDirectoryCursor.getCount();
     }
 
@@ -151,54 +166,30 @@
 
   @RowType
   int getRowType(int position) {
-    if (contactsCursor != null) {
-      position -= contactsCursor.getCount();
-
-      if (position < 0) {
-        return SearchCursorManager.RowType.CONTACT_ROW;
-      }
+    SearchCursor cursor = getCursor(position);
+    if (cursor == contactsCursor) {
+      return cursor.isHeader() ? RowType.CONTACT_HEADER : RowType.CONTACT_ROW;
     }
 
-    if (nearbyPlacesCursor != null) {
-      if (position == 0) {
-        return SearchCursorManager.RowType.NEARBY_PLACES_HEADER;
-      } else {
-        position--; // header
-      }
-
-      position -= nearbyPlacesCursor.getCount();
-
-      if (position < 0) {
-        return SearchCursorManager.RowType.NEARBY_PLACES_ROW;
-      }
+    if (cursor == nearbyPlacesCursor) {
+      return cursor.isHeader() ? RowType.NEARBY_PLACES_HEADER : RowType.NEARBY_PLACES_ROW;
     }
 
-    if (corpDirectoryCursor != null) {
-      if (position == 0) {
-        return SearchCursorManager.RowType.DIRECTORY_HEADER;
-      } else {
-        position--; // header
-      }
-
-      position -= corpDirectoryCursor.getCount();
-
-      if (position < 0) {
-        return SearchCursorManager.RowType.DIRECTORY_ROW;
-      }
+    if (cursor == corpDirectoryCursor) {
+      return cursor.isHeader() ? RowType.DIRECTORY_HEADER : RowType.DIRECTORY_ROW;
     }
-
     throw Assert.createIllegalStateFailException("No valid row type.");
   }
 
   /**
-   * Gets cursor corresponding to position in coelesced list of search cursors. Callers should
+   * Gets cursor corresponding to position in coalesced list of search cursors. Callers should
    * ensure that {@link #getRowType(int)} doesn't correspond to header position, otherwise an
    * exception will be thrown.
    *
-   * @param position in coalecsed list of search cursors
+   * @param position in coalesced list of search cursors
    * @return Cursor moved to position specific to passed in position.
    */
-  Cursor getCursor(int position) {
+  SearchCursor getCursor(int position) {
     if (contactsCursor != null) {
       int count = contactsCursor.getCount();
 
@@ -210,8 +201,6 @@
     }
 
     if (nearbyPlacesCursor != null) {
-      Assert.checkArgument(position != 0, "No valid cursor, position is nearby places header.");
-      position--; // header
       int count = nearbyPlacesCursor.getCount();
 
       if (position - count < 0) {
@@ -222,8 +211,6 @@
     }
 
     if (corpDirectoryCursor != null) {
-      Assert.checkArgument(position != 0, "No valid cursor, position is directory search header.");
-      position--; // header
       int count = corpDirectoryCursor.getCount();
 
       if (position - count < 0) {
@@ -236,23 +223,6 @@
     throw Assert.createIllegalStateFailException("No valid cursor.");
   }
 
-  @StringRes
-  int getHeaderText(int position) {
-    @RowType int rowType = getRowType(position);
-    switch (rowType) {
-      case RowType.NEARBY_PLACES_HEADER:
-        return R.string.nearby_places;
-      case RowType.DIRECTORY_HEADER: // TODO
-      case RowType.DIRECTORY_ROW:
-      case RowType.CONTACT_ROW:
-      case RowType.NEARBY_PLACES_ROW:
-      case RowType.INVALID:
-      default:
-        throw Assert.createIllegalStateFailException(
-            "Invalid row type, position " + position + " is rowtype " + rowType);
-    }
-  }
-
   /** removes all cursors. */
   void clear() {
     if (contactsCursor != null) {
diff --git a/java/com/android/dialer/searchfragment/list/res/layout/fragment_search.xml b/java/com/android/dialer/searchfragment/list/res/layout/fragment_search.xml
index 06f2348..07113c0 100644
--- a/java/com/android/dialer/searchfragment/list/res/layout/fragment_search.xml
+++ b/java/com/android/dialer/searchfragment/list/res/layout/fragment_search.xml
@@ -14,8 +14,19 @@
   ~ See the License for the specific language governing permissions and
   ~ limitations under the License
   -->
-<android.support.v7.widget.RecyclerView
+<FrameLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
-    android:id="@+id/recycler_view"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"/>
+    android:layout_height="match_parent"
+    android:layout_width="match_parent">
+
+  <android.support.v7.widget.RecyclerView
+      android:id="@+id/recycler_view"
+      android:layout_width="match_parent"
+      android:layout_height="match_parent"/>
+
+  <com.android.dialer.widget.EmptyContentView
+      android:id="@+id/empty_view"
+      android:layout_width="match_parent"
+      android:layout_height="match_parent"
+      android:visibility="gone"/>
+</FrameLayout>
diff --git a/java/com/android/dialer/searchfragment/list/res/layout/header_layout.xml b/java/com/android/dialer/searchfragment/list/res/layout/header_layout.xml
index 36af42e..eef0dee 100644
--- a/java/com/android/dialer/searchfragment/list/res/layout/header_layout.xml
+++ b/java/com/android/dialer/searchfragment/list/res/layout/header_layout.xml
@@ -18,5 +18,6 @@
     android:id="@+id/header"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
+    android:layout_marginTop="8dp"
     android:paddingStart="16dp"
     style="@style/SecondaryText"/>
diff --git a/java/com/android/dialer/searchfragment/list/res/values/strings.xml b/java/com/android/dialer/searchfragment/list/res/values/strings.xml
new file mode 100644
index 0000000..0d25b8c
--- /dev/null
+++ b/java/com/android/dialer/searchfragment/list/res/values/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ 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
+  -->
+<resources>
+  <!-- Shown as a prompt to turn on contacts permissions to allow contact search [CHAR LIMIT=NONE]. See 2424710404207193826 for current translation. -->
+  <string name="new_permission_no_search">To search your contacts, turn on the Contacts permissions.</string>
+</resources>
diff --git a/java/com/android/dialer/searchfragment/nearbyplaces/AndroidManifest.xml b/java/com/android/dialer/searchfragment/nearbyplaces/AndroidManifest.xml
index 178cd83..52fb086 100644
--- a/java/com/android/dialer/searchfragment/nearbyplaces/AndroidManifest.xml
+++ b/java/com/android/dialer/searchfragment/nearbyplaces/AndroidManifest.xml
@@ -13,4 +13,4 @@
  ~ See the License for the specific language governing permissions and
  ~ limitations under the License
  -->
-<manifest  package="com.android.dialer.searchfragment.common"/>
\ No newline at end of file
+<manifest  package="com.android.dialer.searchfragment.nearbyplaces"/>
\ No newline at end of file
diff --git a/java/com/android/dialer/searchfragment/nearbyplaces/NearbyPlaceViewHolder.java b/java/com/android/dialer/searchfragment/nearbyplaces/NearbyPlaceViewHolder.java
index b6e5a90..575582e 100644
--- a/java/com/android/dialer/searchfragment/nearbyplaces/NearbyPlaceViewHolder.java
+++ b/java/com/android/dialer/searchfragment/nearbyplaces/NearbyPlaceViewHolder.java
@@ -24,10 +24,10 @@
 import android.view.View;
 import android.widget.QuickContactBadge;
 import android.widget.TextView;
-import com.android.contacts.common.ContactPhotoManager;
-import com.android.contacts.common.lettertiles.LetterTileDrawable;
 import com.android.dialer.callintent.CallInitiationType;
 import com.android.dialer.callintent.CallIntentBuilder;
+import com.android.dialer.contactphoto.ContactPhotoManager;
+import com.android.dialer.lettertile.LetterTileDrawable;
 import com.android.dialer.searchfragment.common.Projections;
 import com.android.dialer.searchfragment.common.QueryBoldingUtil;
 import com.android.dialer.searchfragment.common.R;
diff --git a/java/com/android/dialer/searchfragment/nearbyplaces/NearbyPlacesCursor.java b/java/com/android/dialer/searchfragment/nearbyplaces/NearbyPlacesCursor.java
new file mode 100644
index 0000000..a4142a4
--- /dev/null
+++ b/java/com/android/dialer/searchfragment/nearbyplaces/NearbyPlacesCursor.java
@@ -0,0 +1,64 @@
+/*
+ * 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
+ */
+
+package com.android.dialer.searchfragment.nearbyplaces;
+
+import android.content.Context;
+import android.database.Cursor;
+import android.database.MatrixCursor;
+import android.database.MergeCursor;
+import android.support.annotation.Nullable;
+import com.android.dialer.searchfragment.common.SearchCursor;
+
+/** {@link SearchCursor} implementation for displaying on nearby places. */
+final class NearbyPlacesCursor extends MergeCursor implements SearchCursor {
+
+  private final Cursor nearbyPlacesCursor;
+
+  public static NearbyPlacesCursor newInstnace(Context context, Cursor nearbyPlacesCursor) {
+    MatrixCursor headerCursor = new MatrixCursor(HEADER_PROJECTION);
+    headerCursor.addRow(new String[] {context.getString(R.string.nearby_places)});
+    return new NearbyPlacesCursor(new Cursor[] {headerCursor, nearbyPlacesCursor});
+  }
+
+  private NearbyPlacesCursor(Cursor[] cursors) {
+    super(cursors);
+    nearbyPlacesCursor = cursors[1];
+  }
+
+  @Override
+  public boolean isHeader() {
+    return isFirst();
+  }
+
+  @Override
+  public boolean updateQuery(@Nullable String query) {
+    // When the query changes, a new network request is made for nearby places. Meaning this cursor
+    // will be closed and another created, so return false.
+    return false;
+  }
+
+  @Override
+  public int getCount() {
+    // If we don't have any contents, we don't want to show the header
+    if (nearbyPlacesCursor == null || nearbyPlacesCursor.isClosed()) {
+      return 0;
+    }
+
+    int count = nearbyPlacesCursor.getCount();
+    return count == 0 ? 0 : count + 1;
+  }
+}
diff --git a/java/com/android/dialer/searchfragment/nearbyplaces/NearbyPlacesCursorLoader.java b/java/com/android/dialer/searchfragment/nearbyplaces/NearbyPlacesCursorLoader.java
index 9f3193e..6807a6e 100644
--- a/java/com/android/dialer/searchfragment/nearbyplaces/NearbyPlacesCursorLoader.java
+++ b/java/com/android/dialer/searchfragment/nearbyplaces/NearbyPlacesCursorLoader.java
@@ -18,6 +18,7 @@
 
 import android.content.Context;
 import android.content.CursorLoader;
+import android.database.Cursor;
 import android.net.Uri;
 import android.provider.ContactsContract;
 import com.android.contacts.common.extensions.PhoneDirectoryExtenderAccessor;
@@ -32,6 +33,11 @@
     super(context, getContentUri(context, query), Projections.PHONE_PROJECTION, null, null, null);
   }
 
+  @Override
+  public Cursor loadInBackground() {
+    return NearbyPlacesCursor.newInstnace(getContext(), super.loadInBackground());
+  }
+
   private static Uri getContentUri(Context context, String query) {
     return PhoneDirectoryExtenderAccessor.get(context)
         .getContentUri()
diff --git a/java/com/android/dialer/searchfragment/remote/AndroidManifest.xml b/java/com/android/dialer/searchfragment/remote/AndroidManifest.xml
new file mode 100644
index 0000000..e52f531
--- /dev/null
+++ b/java/com/android/dialer/searchfragment/remote/AndroidManifest.xml
@@ -0,0 +1,16 @@
+<!--
+ ~ 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
+ -->
+<manifest  package="com.android.dialer.searchfragment.remote"/>
\ No newline at end of file
diff --git a/java/com/android/dialer/searchfragment/remote/RemoteContactViewHolder.java b/java/com/android/dialer/searchfragment/remote/RemoteContactViewHolder.java
new file mode 100644
index 0000000..5fb12d3
--- /dev/null
+++ b/java/com/android/dialer/searchfragment/remote/RemoteContactViewHolder.java
@@ -0,0 +1,133 @@
+/*
+ * 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
+ */
+
+package com.android.dialer.searchfragment.remote;
+
+import android.content.Context;
+import android.content.res.Resources;
+import android.database.Cursor;
+import android.net.Uri;
+import android.provider.ContactsContract;
+import android.provider.ContactsContract.CommonDataKinds.Phone;
+import android.support.v7.widget.RecyclerView;
+import android.text.TextUtils;
+import android.view.View;
+import android.widget.QuickContactBadge;
+import android.widget.TextView;
+import com.android.dialer.callintent.CallInitiationType;
+import com.android.dialer.callintent.CallIntentBuilder;
+import com.android.dialer.contactphoto.ContactPhotoManager;
+import com.android.dialer.lettertile.LetterTileDrawable;
+import com.android.dialer.searchfragment.common.Projections;
+import com.android.dialer.searchfragment.common.QueryBoldingUtil;
+import com.android.dialer.searchfragment.common.R;
+import com.android.dialer.searchfragment.common.SearchCursor;
+import com.android.dialer.telecom.TelecomUtil;
+
+/** ViewHolder for a nearby place row. */
+public final class RemoteContactViewHolder extends RecyclerView.ViewHolder
+    implements View.OnClickListener {
+
+  private final Context context;
+  private final TextView nameView;
+  private final TextView numberView;
+  private final QuickContactBadge photo;
+
+  private String number;
+
+  public RemoteContactViewHolder(View view) {
+    super(view);
+    view.setOnClickListener(this);
+    photo = view.findViewById(R.id.photo);
+    nameView = view.findViewById(R.id.primary);
+    numberView = view.findViewById(R.id.secondary);
+    context = view.getContext();
+  }
+
+  /**
+   * Binds the ViewHolder with a cursor from {@link RemoteContactsCursorLoader} with the data found
+   * at the cursors current position.
+   */
+  public void bind(SearchCursor cursor, String query) {
+    number = cursor.getString(Projections.PHONE_NUMBER);
+    String name = cursor.getString(Projections.PHONE_DISPLAY_NAME);
+    String label = getLabel(context.getResources(), cursor);
+    String secondaryInfo =
+        TextUtils.isEmpty(label)
+            ? number
+            : context.getString(
+                com.android.contacts.common.R.string.call_subject_type_and_number, label, number);
+
+    nameView.setText(QueryBoldingUtil.getNameWithQueryBolded(query, name));
+    numberView.setText(QueryBoldingUtil.getNameWithQueryBolded(query, secondaryInfo));
+
+    if (shouldShowPhoto(cursor)) {
+      nameView.setVisibility(View.VISIBLE);
+      photo.setVisibility(View.VISIBLE);
+      String photoUri = cursor.getString(Projections.PHONE_PHOTO_URI);
+      ContactPhotoManager.getInstance(context)
+          .loadDialerThumbnailOrPhoto(
+              photo,
+              getContactUri(cursor),
+              cursor.getLong(Projections.PHONE_PHOTO_ID),
+              photoUri == null ? null : Uri.parse(photoUri),
+              name,
+              LetterTileDrawable.TYPE_DEFAULT);
+    } else {
+      nameView.setVisibility(View.GONE);
+      photo.setVisibility(View.INVISIBLE);
+    }
+  }
+
+  // Show the contact photo next to only the first number if a contact has multiple numbers
+  private boolean shouldShowPhoto(SearchCursor cursor) {
+    int currentPosition = cursor.getPosition();
+    String currentLookupKey = cursor.getString(Projections.PHONE_LOOKUP_KEY);
+    cursor.moveToPosition(currentPosition - 1);
+
+    if (!cursor.isHeader() && !cursor.isBeforeFirst()) {
+      String previousLookupKey = cursor.getString(Projections.PHONE_LOOKUP_KEY);
+      cursor.moveToPosition(currentPosition);
+      return !currentLookupKey.equals(previousLookupKey);
+    }
+    cursor.moveToPosition(currentPosition);
+    return true;
+  }
+
+  // TODO(calderwoodra): unify this into a utility method with CallLogAdapter#getNumberType
+  private static String getLabel(Resources resources, Cursor cursor) {
+    int numberType = cursor.getInt(Projections.PHONE_TYPE);
+    String numberLabel = cursor.getString(Projections.PHONE_LABEL);
+
+    // Returns empty label instead of "custom" if the custom label is empty.
+    if (numberType == Phone.TYPE_CUSTOM && TextUtils.isEmpty(numberLabel)) {
+      return "";
+    }
+    return (String) Phone.getTypeLabel(resources, numberType, numberLabel);
+  }
+
+  private static Uri getContactUri(Cursor cursor) {
+    long contactId = cursor.getLong(Projections.PHONE_ID);
+    String lookupKey = cursor.getString(Projections.PHONE_LOOKUP_KEY);
+    return ContactsContract.Contacts.getLookupUri(contactId, lookupKey);
+  }
+
+  @Override
+  public void onClick(View v) {
+    TelecomUtil.placeCall(
+        context, new CallIntentBuilder(number, CallInitiationType.Type.REGULAR_SEARCH).build());
+  }
+}
diff --git a/java/com/android/dialer/searchfragment/remote/RemoteContactsCursor.java b/java/com/android/dialer/searchfragment/remote/RemoteContactsCursor.java
new file mode 100644
index 0000000..d7c4f38
--- /dev/null
+++ b/java/com/android/dialer/searchfragment/remote/RemoteContactsCursor.java
@@ -0,0 +1,105 @@
+/*
+ * 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
+ */
+
+package com.android.dialer.searchfragment.remote;
+
+import android.content.Context;
+import android.database.Cursor;
+import android.database.MatrixCursor;
+import android.database.MergeCursor;
+import android.support.annotation.Nullable;
+import android.support.annotation.VisibleForTesting;
+import com.android.dialer.common.Assert;
+import com.android.dialer.searchfragment.common.SearchCursor;
+import com.android.dialer.searchfragment.remote.RemoteDirectoriesCursorLoader.Directory;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * {@link MergeCursor} used for combining remote directory cursors into one cursor.
+ *
+ * <p>Usually a device with multiple Google accounts will have multiple remote directories returned
+ * by {@link RemoteDirectoriesCursorLoader}, each represented as a {@link Directory}.
+ *
+ * <p>This cursor merges them together with a header at the start of each cursor/list using {@link
+ * Directory#getDisplayName()} as the header text.
+ */
+@VisibleForTesting(otherwise = VisibleForTesting.PACKAGE_PRIVATE)
+public final class RemoteContactsCursor extends MergeCursor implements SearchCursor {
+
+  /**
+   * Returns a single cursor with headers inserted between each non-empty cursor. If all cursors are
+   * empty, null or closed, this method returns null.
+   */
+  @Nullable
+  @VisibleForTesting(otherwise = VisibleForTesting.PACKAGE_PRIVATE)
+  public static RemoteContactsCursor newInstance(
+      Context context, Cursor[] cursors, List<Directory> directories) {
+    Assert.checkArgument(
+        cursors.length == directories.size(), "Directories and cursors must be the same size.");
+    Cursor[] cursorsWithHeaders = insertHeaders(context, cursors, directories);
+    if (cursorsWithHeaders.length > 0) {
+      return new RemoteContactsCursor(cursorsWithHeaders);
+    }
+    return null;
+  }
+
+  private RemoteContactsCursor(Cursor[] cursors) {
+    super(cursors);
+  }
+
+  private static Cursor[] insertHeaders(
+      Context context, Cursor[] cursors, List<Directory> directories) {
+    List<Cursor> cursorList = new ArrayList<>();
+    for (int i = 0; i < cursors.length; i++) {
+      Cursor cursor = cursors[i];
+
+      if (cursor == null || cursor.isClosed()) {
+        continue;
+      }
+
+      Directory directory = directories.get(i);
+      if (cursor.getCount() == 0) {
+        // Since the cursor isn't being merged in, we need to close it here.
+        cursor.close();
+        continue;
+      }
+
+      cursorList.add(createHeaderCursor(context, directory.getDisplayName()));
+      cursorList.add(cursor);
+    }
+    return cursorList.toArray(new Cursor[cursorList.size()]);
+  }
+
+  private static MatrixCursor createHeaderCursor(Context context, String name) {
+    MatrixCursor headerCursor = new MatrixCursor(HEADER_PROJECTION, 1);
+    headerCursor.addRow(new String[] {context.getString(R.string.directory, name)});
+    return headerCursor;
+  }
+
+  /** Returns true if the current position is a header row. */
+  @Override
+  public boolean isHeader() {
+    return !isClosed() && getColumnIndex(HEADER_PROJECTION[HEADER_TEXT_POSITION]) != -1;
+  }
+
+  @Override
+  public boolean updateQuery(@Nullable String query) {
+    // When the query changes, a new network request is made for nearby places. Meaning this cursor
+    // will be closed and another created, so return false.
+    return false;
+  }
+}
diff --git a/java/com/android/dialer/searchfragment/remote/RemoteContactsCursorLoader.java b/java/com/android/dialer/searchfragment/remote/RemoteContactsCursorLoader.java
new file mode 100644
index 0000000..771b7f1
--- /dev/null
+++ b/java/com/android/dialer/searchfragment/remote/RemoteContactsCursorLoader.java
@@ -0,0 +1,106 @@
+/*
+ * 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
+ */
+
+package com.android.dialer.searchfragment.remote;
+
+import android.content.Context;
+import android.content.CursorLoader;
+import android.database.Cursor;
+import android.net.Uri;
+import android.os.Build.VERSION;
+import android.os.Build.VERSION_CODES;
+import android.provider.ContactsContract;
+import android.provider.ContactsContract.CommonDataKinds.Phone;
+import android.support.annotation.VisibleForTesting;
+import android.text.TextUtils;
+import com.android.dialer.searchfragment.common.Projections;
+import com.android.dialer.searchfragment.remote.RemoteDirectoriesCursorLoader.Directory;
+import java.util.List;
+
+/**
+ * Cursor loader to load extended contacts on device.
+ *
+ * <p>This loader performs several database queries in serial and merges the resulting cursors
+ * together into {@link RemoteContactsCursor}. If there are no results, the loader will return a
+ * null cursor.
+ */
+public final class RemoteContactsCursorLoader extends CursorLoader {
+
+  private static final Uri ENTERPRISE_CONTENT_FILTER_URI =
+      Uri.withAppendedPath(Phone.CONTENT_URI, "filter_enterprise");
+
+  private static final String IGNORE_NUMBER_TOO_LONG_CLAUSE = "length(" + Phone.NUMBER + ") < 1000";
+  private static final String MAX_RESULTS = "20";
+
+  private final String query;
+  private final List<Directory> directories;
+  private final Cursor[] cursors;
+
+  public RemoteContactsCursorLoader(Context context, String query, List<Directory> directories) {
+    super(
+        context,
+        null,
+        Projections.PHONE_PROJECTION,
+        IGNORE_NUMBER_TOO_LONG_CLAUSE,
+        null,
+        Phone.SORT_KEY_PRIMARY);
+    this.query = query;
+    this.directories = directories;
+    cursors = new Cursor[directories.size()];
+  }
+
+  @Override
+  public Cursor loadInBackground() {
+    for (int i = 0; i < directories.size(); i++) {
+      Directory directory = directories.get(i);
+      // Since the on device contacts could be queried as remote directories and we already query
+      // them in SearchContactsCursorLoader, avoid querying them again.
+      // TODO(calderwoodra): It's a happy coincidence that on device contacts don't have directory
+      // names set, leaving this todo to investigate a better way to isolate them from other remote
+      // directories.
+      if (TextUtils.isEmpty(directory.getDisplayName())) {
+        cursors[i] = null;
+        continue;
+      }
+      cursors[i] =
+          getContext()
+              .getContentResolver()
+              .query(
+                  getContentFilterUri(query, directory.getId()),
+                  getProjection(),
+                  getSelection(),
+                  getSelectionArgs(),
+                  getSortOrder());
+    }
+    return RemoteContactsCursor.newInstance(getContext(), cursors, directories);
+  }
+
+  @VisibleForTesting
+  static Uri getContentFilterUri(String query, int directoryId) {
+    Uri baseUri =
+        VERSION.SDK_INT >= VERSION_CODES.N
+            ? ENTERPRISE_CONTENT_FILTER_URI
+            : Phone.CONTENT_FILTER_URI;
+
+    return baseUri
+        .buildUpon()
+        .appendPath(query)
+        .appendQueryParameter(ContactsContract.DIRECTORY_PARAM_KEY, String.valueOf(directoryId))
+        .appendQueryParameter(ContactsContract.REMOVE_DUPLICATE_ENTRIES, "true")
+        .appendQueryParameter(ContactsContract.LIMIT_PARAM_KEY, MAX_RESULTS)
+        .build();
+  }
+}
diff --git a/java/com/android/dialer/searchfragment/remote/RemoteDirectoriesCursorLoader.java b/java/com/android/dialer/searchfragment/remote/RemoteDirectoriesCursorLoader.java
new file mode 100644
index 0000000..327a62c
--- /dev/null
+++ b/java/com/android/dialer/searchfragment/remote/RemoteDirectoriesCursorLoader.java
@@ -0,0 +1,77 @@
+/*
+
+* 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
+*/
+
+package com.android.dialer.searchfragment.remote;
+
+import android.content.Context;
+import android.content.CursorLoader;
+import android.database.Cursor;
+import android.net.Uri;
+import android.os.Build.VERSION;
+import android.os.Build.VERSION_CODES;
+import android.provider.ContactsContract;
+import android.support.annotation.Nullable;
+import android.support.annotation.VisibleForTesting;
+import com.google.auto.value.AutoValue;
+
+/** CursorLoader to load the list of remote directories on the device. */
+public final class RemoteDirectoriesCursorLoader extends CursorLoader {
+
+  /** Positions of columns in {@code PROJECTIONS}. */
+  private static final int ID = 0;
+
+  private static final int DISPLAY_NAME = 1;
+  private static final int PHOTO_SUPPORT = 2;
+
+  @VisibleForTesting
+  static final String[] PROJECTION = {
+    ContactsContract.Directory._ID,
+    ContactsContract.Directory.DISPLAY_NAME,
+    ContactsContract.Directory.PHOTO_SUPPORT,
+  };
+
+  public RemoteDirectoriesCursorLoader(Context context) {
+    super(context, getContentUri(), PROJECTION, null, null, ContactsContract.Directory._ID);
+  }
+
+  /** @return current cursor row represented as a {@link Directory}. */
+  public static Directory readDirectory(Cursor cursor) {
+    return Directory.create(
+        cursor.getInt(ID), cursor.getString(DISPLAY_NAME), cursor.getInt(PHOTO_SUPPORT) != 0);
+  }
+
+  private static Uri getContentUri() {
+    return VERSION.SDK_INT >= VERSION_CODES.N
+        ? ContactsContract.Directory.ENTERPRISE_CONTENT_URI
+        : ContactsContract.Directory.CONTENT_URI;
+  }
+
+  /** POJO representing the results returned from {@link RemoteDirectoriesCursorLoader}. */
+  @AutoValue
+  public abstract static class Directory {
+    public static Directory create(int id, @Nullable String displayName, boolean supportsPhotos) {
+      return new AutoValue_RemoteDirectoriesCursorLoader_Directory(id, displayName, supportsPhotos);
+    }
+
+    abstract int getId();
+
+    /** Returns a user facing display name of the directory. Null if none exists. */
+    abstract @Nullable String getDisplayName();
+
+    abstract boolean supportsPhotos();
+  }
+}
diff --git a/java/com/android/dialer/searchfragment/remote/res/values/strings.xml b/java/com/android/dialer/searchfragment/remote/res/values/strings.xml
new file mode 100644
index 0000000..beabba1
--- /dev/null
+++ b/java/com/android/dialer/searchfragment/remote/res/values/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ 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
+  -->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+  <!-- Label for a list of contacts stored in a seperate directory [CHAR LIMIT=30]-->
+  <string name="directory">Directory <xliff:g example="google.com" id="email">%1$s</xliff:g></string>
+</resources>
\ No newline at end of file
diff --git a/java/com/android/dialer/searchfragment/testing/TestSearchCursor.java b/java/com/android/dialer/searchfragment/testing/TestSearchCursor.java
new file mode 100644
index 0000000..9a0b957
--- /dev/null
+++ b/java/com/android/dialer/searchfragment/testing/TestSearchCursor.java
@@ -0,0 +1,47 @@
+/*
+ * 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.
+ */
+
+package com.android.dialer.searchfragment.testing;
+
+import android.database.Cursor;
+import android.database.MatrixCursor;
+import android.database.MergeCursor;
+import android.support.annotation.Nullable;
+import com.android.dialer.searchfragment.common.SearchCursor;
+
+/** {@link SearchCursor} implementation useful for testing with a header inserted at position 0. */
+public final class TestSearchCursor extends MergeCursor implements SearchCursor {
+
+  public static TestSearchCursor newInstance(Cursor cursor, String header) {
+    MatrixCursor headerRow = new MatrixCursor(HEADER_PROJECTION);
+    headerRow.addRow(new String[] {header});
+    return new TestSearchCursor(new Cursor[] {headerRow, cursor});
+  }
+
+  private TestSearchCursor(Cursor[] cursors) {
+    super(cursors);
+  }
+
+  @Override
+  public boolean isHeader() {
+    return isFirst();
+  }
+
+  @Override
+  public boolean updateQuery(@Nullable String query) {
+    return false;
+  }
+}
diff --git a/java/com/android/dialer/shortcuts/IconFactory.java b/java/com/android/dialer/shortcuts/IconFactory.java
index 4ec964c..7aad112 100644
--- a/java/com/android/dialer/shortcuts/IconFactory.java
+++ b/java/com/android/dialer/shortcuts/IconFactory.java
@@ -33,8 +33,8 @@
 import android.support.annotation.WorkerThread;
 import android.support.v4.graphics.drawable.RoundedBitmapDrawable;
 import android.support.v4.graphics.drawable.RoundedBitmapDrawableFactory;
-import com.android.contacts.common.lettertiles.LetterTileDrawable;
 import com.android.dialer.common.Assert;
+import com.android.dialer.lettertile.LetterTileDrawable;
 import com.android.dialer.util.DrawableConverter;
 import java.io.InputStream;
 
diff --git a/java/com/android/dialer/shortcuts/ShortcutRefresher.java b/java/com/android/dialer/shortcuts/ShortcutRefresher.java
index 120382d..496f3f0 100644
--- a/java/com/android/dialer/shortcuts/ShortcutRefresher.java
+++ b/java/com/android/dialer/shortcuts/ShortcutRefresher.java
@@ -20,21 +20,17 @@
 import android.os.Build;
 import android.support.annotation.MainThread;
 import android.support.annotation.NonNull;
-import android.support.annotation.WorkerThread;
 import com.android.contacts.common.list.ContactEntry;
 import com.android.dialer.common.Assert;
 import com.android.dialer.common.LogUtil;
-import com.android.dialer.common.concurrent.AsyncTaskExecutor;
-import com.android.dialer.common.concurrent.AsyncTaskExecutors;
-import com.android.dialer.common.concurrent.FallibleAsyncTask;
+import com.android.dialer.common.concurrent.DialerExecutor.Worker;
+import com.android.dialer.common.concurrent.DialerExecutors;
 import java.util.ArrayList;
 import java.util.List;
 
 /** Refreshes launcher shortcuts from UI components using provided list of contacts. */
 public final class ShortcutRefresher {
 
-  private static final AsyncTaskExecutor EXECUTOR = AsyncTaskExecutors.createThreadPoolExecutor();
-
   /** Asynchronously updates launcher shortcuts using the provided list of contacts. */
   @MainThread
   public static void refresh(@NonNull Context context, List<ContactEntry> contacts) {
@@ -49,36 +45,27 @@
       return;
     }
 
-    //noinspection unchecked
-    EXECUTOR.submit(Task.ID, new Task(context), new ArrayList<>(contacts));
+    DialerExecutors.createNonUiTaskBuilder(new RefreshWorker(context))
+        .build()
+        .executeSerial(new ArrayList<>(contacts));
   }
 
-  private static final class Task extends FallibleAsyncTask<List<ContactEntry>, Void, Void> {
-    private static final String ID = "ShortcutRefresher.Task";
-
+  private static final class RefreshWorker implements Worker<List<ContactEntry>, Void> {
     private final Context context;
 
-    Task(Context context) {
+    RefreshWorker(Context context) {
       this.context = context;
     }
 
-    /**
-     * @param params array containing exactly one element, the list of contacts from favorites
-     *     tiles, ordered in tile order.
-     */
-    @SafeVarargs
     @Override
-    @NonNull
-    @WorkerThread
-    protected final Void doInBackgroundFallible(List<ContactEntry>... params) {
-      Assert.isWorkerThread();
+    public Void doInBackground(List<ContactEntry> contacts) {
       LogUtil.enterBlock("ShortcutRefresher.Task.doInBackground");
 
       // Only dynamic shortcuts are maintained from UI components. Pinned shortcuts are maintained
       // by the job scheduler. This is because a pinned contact may not necessarily still be in the
       // favorites tiles, so refreshing it would require an additional database query. We don't want
       // to incur the cost of that extra database query every time the favorites tiles change.
-      new DynamicShortcuts(context, new IconFactory(context)).refresh(params[0]); // Blocking
+      new DynamicShortcuts(context, new IconFactory(context)).refresh(contacts); // Blocking
 
       return null;
     }
diff --git a/java/com/android/dialer/simulator/impl/SimulatorActionProvider.java b/java/com/android/dialer/simulator/impl/SimulatorActionProvider.java
index f2749b2..4efc0ee 100644
--- a/java/com/android/dialer/simulator/impl/SimulatorActionProvider.java
+++ b/java/com/android/dialer/simulator/impl/SimulatorActionProvider.java
@@ -30,6 +30,9 @@
 import com.android.dialer.common.LogUtil;
 import com.android.dialer.common.concurrent.DialerExecutor.Worker;
 import com.android.dialer.common.concurrent.DialerExecutors;
+import com.android.dialer.databasepopulator.CallLogPopulator;
+import com.android.dialer.databasepopulator.ContactsPopulator;
+import com.android.dialer.databasepopulator.VoicemailPopulator;
 import com.android.dialer.enrichedcall.simulator.EnrichedCallSimulatorActivity;
 import com.android.dialer.persistentlog.PersistentLogger;
 
@@ -89,6 +92,13 @@
               return true;
             });
     subMenu
+        .add("Clean database")
+        .setOnMenuItemClickListener(
+            (itme) -> {
+              cleanDatabase();
+              return true;
+            });
+    subMenu
         .add("Sync Voicemail")
         .setOnMenuItemClickListener(
             (item) -> {
@@ -128,9 +138,21 @@
     new AsyncTask<Void, Void, Void>() {
       @Override
       public Void doInBackground(Void... params) {
-        SimulatorContacts.populateContacts(context);
-        SimulatorCallLog.populateCallLog(context);
-        SimulatorVoicemail.populateVoicemail(context);
+        ContactsPopulator.populateContacts(context);
+        CallLogPopulator.populateCallLog(context);
+        VoicemailPopulator.populateVoicemail(context);
+        return null;
+      }
+    }.execute();
+  }
+
+  private void cleanDatabase() {
+    new AsyncTask<Void, Void, Void>() {
+      @Override
+      public Void doInBackground(Void... params) {
+        ContactsPopulator.deleteAllContacts(context);
+        CallLogPopulator.deleteAllCallLog(context);
+        VoicemailPopulator.deleteAllVoicemail(context);
         return null;
       }
     }.execute();
diff --git a/java/com/android/dialer/speeddial/SpeedDialFragment.java b/java/com/android/dialer/speeddial/SpeedDialFragment.java
index 68ee388..c087439 100644
--- a/java/com/android/dialer/speeddial/SpeedDialFragment.java
+++ b/java/com/android/dialer/speeddial/SpeedDialFragment.java
@@ -23,7 +23,7 @@
 import android.view.View;
 import android.view.ViewGroup;
 
-/** Favorites fragment. Contents TBD. TODO */
+/** Favorites fragment. Contents TBD. TODO(calderwoodra) */
 public class SpeedDialFragment extends Fragment {
 
   public static SpeedDialFragment newInstance() {
@@ -38,7 +38,7 @@
   }
 
   public boolean hasFrequents() {
-    // TODO
+    // TODO(calderwoodra)
     return false;
   }
 }
diff --git a/java/com/android/dialer/storage/DeviceProtected.java b/java/com/android/dialer/storage/DeviceProtected.java
new file mode 100644
index 0000000..862259a
--- /dev/null
+++ b/java/com/android/dialer/storage/DeviceProtected.java
@@ -0,0 +1,22 @@
+/*
+ * 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
+ */
+package com.android.dialer.storage;
+
+import javax.inject.Qualifier;
+
+/** Annotation for retrieving device protected storage objects. */
+@Qualifier
+public @interface DeviceProtected {}
diff --git a/java/com/android/dialer/storage/StorageComponent.java b/java/com/android/dialer/storage/StorageComponent.java
new file mode 100644
index 0000000..51afea7
--- /dev/null
+++ b/java/com/android/dialer/storage/StorageComponent.java
@@ -0,0 +1,40 @@
+/*
+ * 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
+ */
+
+package com.android.dialer.storage;
+
+import android.content.Context;
+import android.content.SharedPreferences;
+import com.android.dialer.inject.HasRootComponent;
+import dagger.Subcomponent;
+
+/** Dagger component for storage. */
+@Subcomponent
+public abstract class StorageComponent {
+
+  public abstract @DeviceProtected SharedPreferences deviceProtectedSharedPreferences();
+
+  public static StorageComponent get(Context context) {
+    return ((StorageComponent.HasComponent)
+            ((HasRootComponent) context.getApplicationContext()).component())
+        .storageComponent();
+  }
+
+  /** Used to refer to the root application component. */
+  public interface HasComponent {
+    StorageComponent storageComponent();
+  }
+}
diff --git a/java/com/android/dialer/storage/StorageModule.java b/java/com/android/dialer/storage/StorageModule.java
new file mode 100644
index 0000000..8c97980
--- /dev/null
+++ b/java/com/android/dialer/storage/StorageModule.java
@@ -0,0 +1,46 @@
+/*
+ * 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
+ */
+package com.android.dialer.storage;
+
+import android.content.Context;
+import android.content.SharedPreferences;
+import android.preference.PreferenceManager;
+import android.support.v4.content.ContextCompat;
+import com.android.dialer.inject.ApplicationContext;
+import dagger.Module;
+import dagger.Provides;
+import javax.inject.Singleton;
+
+/** Module for the storage component. */
+@Module
+public class StorageModule {
+
+  @Provides
+  @Singleton
+  @DeviceProtected
+  static SharedPreferences provideDeviceProtectedSharedPreferences(
+      @ApplicationContext Context appContext) {
+    // #createDeviceProtectedStorageContext returns a new context each time, so we cache the shared
+    // preferences object in order to avoid accessing disk for every operation.
+    Context deviceProtectedContext = ContextCompat.createDeviceProtectedStorageContext(appContext);
+
+    // ContextCompat.createDeviceProtectedStorageContext(context) returns null on pre-N, thus fall
+    // back to regular default shared preference for pre-N devices since devices protected context
+    // is not available.
+    return PreferenceManager.getDefaultSharedPreferences(
+        deviceProtectedContext != null ? deviceProtectedContext : appContext);
+  }
+}
diff --git a/java/com/android/dialer/strictmode/DialerStrictMode.java b/java/com/android/dialer/strictmode/DialerStrictMode.java
new file mode 100644
index 0000000..5ce2ad6
--- /dev/null
+++ b/java/com/android/dialer/strictmode/DialerStrictMode.java
@@ -0,0 +1,154 @@
+/*
+ * 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
+ */
+
+package com.android.dialer.strictmode;
+
+import android.app.Application;
+import android.content.Context;
+import android.os.Looper;
+import android.os.StrictMode;
+import android.os.StrictMode.ThreadPolicy;
+import android.os.StrictMode.VmPolicy;
+import android.preference.PreferenceManager;
+import com.android.dialer.buildtype.BuildType;
+import com.android.dialer.util.DialerUtils;
+
+/** Enables strict mode for the application, and provides means of temporarily disabling it. */
+public final class DialerStrictMode {
+
+  /** Initializes strict mode on application start. */
+  public static void onApplicationCreate(Application application) {
+    warmupSharedPrefs(application);
+    enableDeathPenalty();
+  }
+
+  /**
+   * We frequently access shared preferences on the main thread, which causes strict mode
+   * violations. When strict mode is allowed, warm up the shared preferences so that later uses of
+   * shared preferences access the in-memory versions and we don't have to bypass strict mode at
+   * every point in the application where shared preferences are accessed.
+   */
+  private static void warmupSharedPrefs(Application application) {
+    if (isStrictModeAllowed()) {
+      // From credential-encrypted (CE) storage, i.e.:
+      //    /data/data/com.google.android.dialer/shared_prefs
+
+      // com.google.android.dialer_preferences.xml
+      PreferenceManager.getDefaultSharedPreferences(application);
+
+      // com.google.android.dialer.xml
+      application.getSharedPreferences(application.getPackageName(), Context.MODE_PRIVATE);
+
+      // From device-encrypted (DE) storage, i.e.:
+      //   /data/user_de/0/com.android.dialer/shared_prefs/
+
+      // com.google.android.dialer_preferences.xml
+      DialerUtils.getDefaultSharedPreferenceForDeviceProtectedStorageContext(application);
+    }
+  }
+
+  /**
+   * Disables the strict mode death penalty. If strict mode is enabled for the build, warnings are
+   * printed instead of the application crashing.
+   *
+   * <p>You should typically do this only temporarily and restore the death penalty in a finally
+   * block using {@link #enableDeathPenalty()}.
+   *
+   * <p>The thread policy is only mutated if this is called from the main thread.
+   */
+  public static void disableDeathPenalty() {
+    if (isStrictModeAllowed()) {
+      if (onMainThread()) {
+        StrictMode.setThreadPolicy(threadPolicyTemplate().build());
+      }
+      StrictMode.setVmPolicy(vmPolicyTemplate().build());
+    }
+  }
+
+  /**
+   * Restore the death penalty. This should typically be called in a finally block after calling
+   * {@link #disableDeathPenalty()}.
+   *
+   * <p>The thread policy is only mutated if this is called from the main thread.
+   */
+  public static void enableDeathPenalty() {
+    if (isStrictModeAllowed()) {
+      if (onMainThread()) {
+        StrictMode.setThreadPolicy(threadPolicyTemplate().penaltyDeath().build());
+      }
+      StrictMode.setVmPolicy(vmPolicyTemplate().penaltyDeath().build());
+    }
+  }
+
+  private static ThreadPolicy.Builder threadPolicyTemplate() {
+    return new StrictMode.ThreadPolicy.Builder().detectAll().penaltyLog();
+  }
+
+  private static VmPolicy.Builder vmPolicyTemplate() {
+    return new StrictMode.VmPolicy.Builder().detectAll().penaltyLog();
+  }
+
+  private static boolean isStrictModeAllowed() {
+    return BuildType.get() == BuildType.BUGFOOD;
+  }
+
+  private static boolean onMainThread() {
+    return Looper.getMainLooper().equals(Looper.myLooper());
+  }
+
+  /** Functional interface intended to be used with {@link #bypass(Provider)}. */
+  public interface Provider<T> {
+    T get();
+  }
+
+  /**
+   * Convenience method for disabling and enabling the death penalty using lambdas.
+   *
+   * <p>For example:
+   *
+   * <p><code>
+   *   Value foo = DialerStrictMode.bypass(() -> doDiskAccessOnMainThreadReturningValue());
+   * </code>
+   *
+   * <p>The thread policy is only mutated if this is called from the main thread.
+   */
+  public static <T> T bypass(Provider<T> provider) {
+    disableDeathPenalty();
+    try {
+      return provider.get();
+    } finally {
+      enableDeathPenalty();
+    }
+  }
+
+  /**
+   * Convenience method for disabling and enabling the death penalty using lambdas.
+   *
+   * <p>For example:
+   *
+   * <p><code>
+   *   DialerStrictMode.bypass(() -> doDiskAccessOnMainThread());
+   * </code>
+   */
+  public static void bypass(Runnable runnable) {
+    disableDeathPenalty();
+    try {
+      runnable.run();
+    } finally {
+      enableDeathPenalty();
+    }
+  }
+}
diff --git a/java/com/android/dialer/theme/res/values-af/strings.xml b/java/com/android/dialer/theme/res/values-af/strings.xml
index 9681aee..17e6cea 100644
--- a/java/com/android/dialer/theme/res/values-af/strings.xml
+++ b/java/com/android/dialer/theme/res/values-af/strings.xml
@@ -21,6 +21,7 @@
     <string name="unknown_counter" msgid="7452889151953704159">"<xliff:g id="UNKNOWN">%s</xliff:g> <xliff:g id="ID">%d</xliff:g>"</string>
     <string name="payphone" msgid="7106361320283710387">"Telefoonhokkie"</string>
     <string name="launcherActivityLabel" msgid="9034868428899993166">"Foon"</string>
+    <string name="camera_privacy_text" msgid="1318954032109938588">"Kameratoestemming is geaktiveer"</string>
     <string name="video_call" msgid="8914878391104612532">"Video-oproep"</string>
     <string name="call" msgid="3699617769606114168">"Bel"</string>
 </resources>
diff --git a/java/com/android/dialer/theme/res/values-am/strings.xml b/java/com/android/dialer/theme/res/values-am/strings.xml
index 0bbcc02..5b0b2fd 100644
--- a/java/com/android/dialer/theme/res/values-am/strings.xml
+++ b/java/com/android/dialer/theme/res/values-am/strings.xml
@@ -21,6 +21,7 @@
     <string name="unknown_counter" msgid="7452889151953704159">"<xliff:g id="UNKNOWN">%s</xliff:g> <xliff:g id="ID">%d</xliff:g>"</string>
     <string name="payphone" msgid="7106361320283710387">"የሕዝብ ስልክ"</string>
     <string name="launcherActivityLabel" msgid="9034868428899993166">"ስልክ"</string>
+    <string name="camera_privacy_text" msgid="1318954032109938588">"የካሜራ ፈቃድ ነቅቷል"</string>
     <string name="video_call" msgid="8914878391104612532">"የቪዲዮ ጥሪ"</string>
     <string name="call" msgid="3699617769606114168">"ደውል"</string>
 </resources>
diff --git a/java/com/android/dialer/theme/res/values-ar/strings.xml b/java/com/android/dialer/theme/res/values-ar/strings.xml
index c474c6e..ea3468e 100644
--- a/java/com/android/dialer/theme/res/values-ar/strings.xml
+++ b/java/com/android/dialer/theme/res/values-ar/strings.xml
@@ -21,6 +21,7 @@
     <string name="unknown_counter" msgid="7452889151953704159">"<xliff:g id="UNKNOWN">%s</xliff:g> <xliff:g id="ID">%d</xliff:g>"</string>
     <string name="payphone" msgid="7106361320283710387">"هاتف يعمل بالعملة"</string>
     <string name="launcherActivityLabel" msgid="9034868428899993166">"الهاتف"</string>
+    <string name="camera_privacy_text" msgid="1318954032109938588">"تم تمكين إذن الكاميرا"</string>
     <string name="video_call" msgid="8914878391104612532">"مكالمة فيديو"</string>
     <string name="call" msgid="3699617769606114168">"اتصال"</string>
 </resources>
diff --git a/java/com/android/dialer/theme/res/values-az/strings.xml b/java/com/android/dialer/theme/res/values-az/strings.xml
index f3e7a01..91ead1b 100644
--- a/java/com/android/dialer/theme/res/values-az/strings.xml
+++ b/java/com/android/dialer/theme/res/values-az/strings.xml
@@ -21,6 +21,7 @@
     <string name="unknown_counter" msgid="7452889151953704159">"<xliff:g id="UNKNOWN">%s</xliff:g> <xliff:g id="ID">%d</xliff:g>"</string>
     <string name="payphone" msgid="7106361320283710387">"Taksofon"</string>
     <string name="launcherActivityLabel" msgid="9034868428899993166">"Telefon"</string>
+    <string name="camera_privacy_text" msgid="1318954032109938588">"Kamera icazəsi aktiv edildi"</string>
     <string name="video_call" msgid="8914878391104612532">"Video zəng"</string>
     <string name="call" msgid="3699617769606114168">"Zəng edin"</string>
 </resources>
diff --git a/java/com/android/dialer/theme/res/values-b+sr+Latn/strings.xml b/java/com/android/dialer/theme/res/values-b+sr+Latn/strings.xml
index e1a26fa..a1e5965 100644
--- a/java/com/android/dialer/theme/res/values-b+sr+Latn/strings.xml
+++ b/java/com/android/dialer/theme/res/values-b+sr+Latn/strings.xml
@@ -21,6 +21,7 @@
     <string name="unknown_counter" msgid="7452889151953704159">"<xliff:g id="UNKNOWN">%s</xliff:g> <xliff:g id="ID">%d</xliff:g>"</string>
     <string name="payphone" msgid="7106361320283710387">"Telefonska govornica"</string>
     <string name="launcherActivityLabel" msgid="9034868428899993166">"Telefon"</string>
+    <string name="camera_privacy_text" msgid="1318954032109938588">"Omogućena je dozvola za kameru"</string>
     <string name="video_call" msgid="8914878391104612532">"Uputi video poziv"</string>
     <string name="call" msgid="3699617769606114168">"Pozovi"</string>
 </resources>
diff --git a/java/com/android/dialer/theme/res/values-be/strings.xml b/java/com/android/dialer/theme/res/values-be/strings.xml
index 305f608..881aa7f 100644
--- a/java/com/android/dialer/theme/res/values-be/strings.xml
+++ b/java/com/android/dialer/theme/res/values-be/strings.xml
@@ -21,6 +21,7 @@
     <string name="unknown_counter" msgid="7452889151953704159">"<xliff:g id="UNKNOWN">%s</xliff:g> <xliff:g id="ID">%d</xliff:g>"</string>
     <string name="payphone" msgid="7106361320283710387">"Таксафон"</string>
     <string name="launcherActivityLabel" msgid="9034868428899993166">"Тэлефон"</string>
+    <string name="camera_privacy_text" msgid="1318954032109938588">"Уключаны дазвол на выкарыстанне камеры"</string>
     <string name="video_call" msgid="8914878391104612532">"Відэавыклік"</string>
     <string name="call" msgid="3699617769606114168">"Выклікаць"</string>
 </resources>
diff --git a/java/com/android/dialer/theme/res/values-bg/strings.xml b/java/com/android/dialer/theme/res/values-bg/strings.xml
index 77c8086..debc238 100644
--- a/java/com/android/dialer/theme/res/values-bg/strings.xml
+++ b/java/com/android/dialer/theme/res/values-bg/strings.xml
@@ -21,6 +21,7 @@
     <string name="unknown_counter" msgid="7452889151953704159">"<xliff:g id="UNKNOWN">%s</xliff:g> <xliff:g id="ID">%d</xliff:g>"</string>
     <string name="payphone" msgid="7106361320283710387">"Обществен телефон"</string>
     <string name="launcherActivityLabel" msgid="9034868428899993166">"Телефон"</string>
+    <string name="camera_privacy_text" msgid="1318954032109938588">"Активирано бе разрешението за камерата"</string>
     <string name="video_call" msgid="8914878391104612532">"Видеообаждане"</string>
     <string name="call" msgid="3699617769606114168">"Обаждане"</string>
 </resources>
diff --git a/java/com/android/dialer/theme/res/values-bn/strings.xml b/java/com/android/dialer/theme/res/values-bn/strings.xml
index 1e13496..806ee8e 100644
--- a/java/com/android/dialer/theme/res/values-bn/strings.xml
+++ b/java/com/android/dialer/theme/res/values-bn/strings.xml
@@ -21,6 +21,7 @@
     <string name="unknown_counter" msgid="7452889151953704159">"<xliff:g id="UNKNOWN">%s</xliff:g> <xliff:g id="ID">%d</xliff:g>"</string>
     <string name="payphone" msgid="7106361320283710387">"পে ফোন"</string>
     <string name="launcherActivityLabel" msgid="9034868428899993166">"ফোন"</string>
+    <string name="camera_privacy_text" msgid="1318954032109938588">"ক্যামেরার অনুমতি সক্ষম করা হয়েছে"</string>
     <string name="video_call" msgid="8914878391104612532">"ভিডিও কল"</string>
     <string name="call" msgid="3699617769606114168">"কল করুন"</string>
 </resources>
diff --git a/java/com/android/dialer/theme/res/values-bs/strings.xml b/java/com/android/dialer/theme/res/values-bs/strings.xml
index 051e4e9..bed71a2 100644
--- a/java/com/android/dialer/theme/res/values-bs/strings.xml
+++ b/java/com/android/dialer/theme/res/values-bs/strings.xml
@@ -21,6 +21,7 @@
     <string name="unknown_counter" msgid="7452889151953704159">"<xliff:g id="UNKNOWN">%s</xliff:g> <xliff:g id="ID">%d</xliff:g>"</string>
     <string name="payphone" msgid="7106361320283710387">"Telefonska govornica"</string>
     <string name="launcherActivityLabel" msgid="9034868428899993166">"Telefon"</string>
+    <string name="camera_privacy_text" msgid="1318954032109938588">"Dozvola za kameru je omogućena"</string>
     <string name="video_call" msgid="8914878391104612532">"Videopoziv"</string>
     <string name="call" msgid="3699617769606114168">"Pozovi"</string>
 </resources>
diff --git a/java/com/android/dialer/theme/res/values-ca/strings.xml b/java/com/android/dialer/theme/res/values-ca/strings.xml
index ce3bd43..5140ca5 100644
--- a/java/com/android/dialer/theme/res/values-ca/strings.xml
+++ b/java/com/android/dialer/theme/res/values-ca/strings.xml
@@ -21,6 +21,7 @@
     <string name="unknown_counter" msgid="7452889151953704159">"<xliff:g id="UNKNOWN">%s</xliff:g> <xliff:g id="ID">%d</xliff:g>"</string>
     <string name="payphone" msgid="7106361320283710387">"Telèfon públic"</string>
     <string name="launcherActivityLabel" msgid="9034868428899993166">"Telèfon"</string>
+    <string name="camera_privacy_text" msgid="1318954032109938588">"S\'ha activat el permís d\'accés a la càmera"</string>
     <string name="video_call" msgid="8914878391104612532">"Videotrucada"</string>
     <string name="call" msgid="3699617769606114168">"Truca"</string>
 </resources>
diff --git a/java/com/android/dialer/theme/res/values-cs/strings.xml b/java/com/android/dialer/theme/res/values-cs/strings.xml
index 235260f..a951fe7 100644
--- a/java/com/android/dialer/theme/res/values-cs/strings.xml
+++ b/java/com/android/dialer/theme/res/values-cs/strings.xml
@@ -21,6 +21,7 @@
     <string name="unknown_counter" msgid="7452889151953704159">"<xliff:g id="UNKNOWN">%s</xliff:g> <xliff:g id="ID">%d</xliff:g>"</string>
     <string name="payphone" msgid="7106361320283710387">"Telefonní automat"</string>
     <string name="launcherActivityLabel" msgid="9034868428899993166">"Telefon"</string>
+    <string name="camera_privacy_text" msgid="1318954032109938588">"Byl povolen přístup k fotoaparátu"</string>
     <string name="video_call" msgid="8914878391104612532">"Zahájit videohovor"</string>
     <string name="call" msgid="3699617769606114168">"Volat"</string>
 </resources>
diff --git a/java/com/android/dialer/theme/res/values-da/strings.xml b/java/com/android/dialer/theme/res/values-da/strings.xml
index 5525744..54f1850 100644
--- a/java/com/android/dialer/theme/res/values-da/strings.xml
+++ b/java/com/android/dialer/theme/res/values-da/strings.xml
@@ -21,6 +21,7 @@
     <string name="unknown_counter" msgid="7452889151953704159">"<xliff:g id="UNKNOWN">%s</xliff:g> <xliff:g id="ID">%d</xliff:g>"</string>
     <string name="payphone" msgid="7106361320283710387">"Mønttelefon"</string>
     <string name="launcherActivityLabel" msgid="9034868428899993166">"Opkald"</string>
+    <string name="camera_privacy_text" msgid="1318954032109938588">"Kameratilladelse er aktiveret"</string>
     <string name="video_call" msgid="8914878391104612532">"Videoopkald"</string>
     <string name="call" msgid="3699617769606114168">"Ring op"</string>
 </resources>
diff --git a/java/com/android/dialer/theme/res/values-de/strings.xml b/java/com/android/dialer/theme/res/values-de/strings.xml
index b155577..0c97581 100644
--- a/java/com/android/dialer/theme/res/values-de/strings.xml
+++ b/java/com/android/dialer/theme/res/values-de/strings.xml
@@ -21,6 +21,7 @@
     <string name="unknown_counter" msgid="7452889151953704159">"<xliff:g id="UNKNOWN">%s</xliff:g> <xliff:g id="ID">%d</xliff:g>"</string>
     <string name="payphone" msgid="7106361320283710387">"Münztelefon"</string>
     <string name="launcherActivityLabel" msgid="9034868428899993166">"Telefon"</string>
+    <string name="camera_privacy_text" msgid="1318954032109938588">"Berechtigung für Kamera aktiviert"</string>
     <string name="video_call" msgid="8914878391104612532">"Videoanruf"</string>
     <string name="call" msgid="3699617769606114168">"Anrufen"</string>
 </resources>
diff --git a/java/com/android/dialer/theme/res/values-el/strings.xml b/java/com/android/dialer/theme/res/values-el/strings.xml
index 156b7cd..1c34a69 100644
--- a/java/com/android/dialer/theme/res/values-el/strings.xml
+++ b/java/com/android/dialer/theme/res/values-el/strings.xml
@@ -21,6 +21,7 @@
     <string name="unknown_counter" msgid="7452889151953704159">"<xliff:g id="UNKNOWN">%s</xliff:g> <xliff:g id="ID">%d</xliff:g>"</string>
     <string name="payphone" msgid="7106361320283710387">"Τηλέφωνο με χρέωση"</string>
     <string name="launcherActivityLabel" msgid="9034868428899993166">"Τηλέφωνο"</string>
+    <string name="camera_privacy_text" msgid="1318954032109938588">"Το δικαίωμα χρήσης της κάμερας έχει ενεργοποιηθεί"</string>
     <string name="video_call" msgid="8914878391104612532">"Βιντεοκλήση"</string>
     <string name="call" msgid="3699617769606114168">"Κλήση"</string>
 </resources>
diff --git a/java/com/android/dialer/theme/res/values-en-rAU/strings.xml b/java/com/android/dialer/theme/res/values-en-rAU/strings.xml
index 36de9e5..136d7df 100644
--- a/java/com/android/dialer/theme/res/values-en-rAU/strings.xml
+++ b/java/com/android/dialer/theme/res/values-en-rAU/strings.xml
@@ -21,6 +21,7 @@
     <string name="unknown_counter" msgid="7452889151953704159">"<xliff:g id="UNKNOWN">%s</xliff:g> <xliff:g id="ID">%d</xliff:g>"</string>
     <string name="payphone" msgid="7106361320283710387">"Payphone"</string>
     <string name="launcherActivityLabel" msgid="9034868428899993166">"Phone"</string>
+    <string name="camera_privacy_text" msgid="1318954032109938588">"Camera permission enabled"</string>
     <string name="video_call" msgid="8914878391104612532">"Video call"</string>
     <string name="call" msgid="3699617769606114168">"Call"</string>
 </resources>
diff --git a/java/com/android/dialer/theme/res/values-en-rGB/strings.xml b/java/com/android/dialer/theme/res/values-en-rGB/strings.xml
index 36de9e5..136d7df 100644
--- a/java/com/android/dialer/theme/res/values-en-rGB/strings.xml
+++ b/java/com/android/dialer/theme/res/values-en-rGB/strings.xml
@@ -21,6 +21,7 @@
     <string name="unknown_counter" msgid="7452889151953704159">"<xliff:g id="UNKNOWN">%s</xliff:g> <xliff:g id="ID">%d</xliff:g>"</string>
     <string name="payphone" msgid="7106361320283710387">"Payphone"</string>
     <string name="launcherActivityLabel" msgid="9034868428899993166">"Phone"</string>
+    <string name="camera_privacy_text" msgid="1318954032109938588">"Camera permission enabled"</string>
     <string name="video_call" msgid="8914878391104612532">"Video call"</string>
     <string name="call" msgid="3699617769606114168">"Call"</string>
 </resources>
diff --git a/java/com/android/dialer/theme/res/values-en-rIN/strings.xml b/java/com/android/dialer/theme/res/values-en-rIN/strings.xml
index 36de9e5..136d7df 100644
--- a/java/com/android/dialer/theme/res/values-en-rIN/strings.xml
+++ b/java/com/android/dialer/theme/res/values-en-rIN/strings.xml
@@ -21,6 +21,7 @@
     <string name="unknown_counter" msgid="7452889151953704159">"<xliff:g id="UNKNOWN">%s</xliff:g> <xliff:g id="ID">%d</xliff:g>"</string>
     <string name="payphone" msgid="7106361320283710387">"Payphone"</string>
     <string name="launcherActivityLabel" msgid="9034868428899993166">"Phone"</string>
+    <string name="camera_privacy_text" msgid="1318954032109938588">"Camera permission enabled"</string>
     <string name="video_call" msgid="8914878391104612532">"Video call"</string>
     <string name="call" msgid="3699617769606114168">"Call"</string>
 </resources>
diff --git a/java/com/android/dialer/theme/res/values-es-rUS/strings.xml b/java/com/android/dialer/theme/res/values-es-rUS/strings.xml
index be2eac8..90837b7 100644
--- a/java/com/android/dialer/theme/res/values-es-rUS/strings.xml
+++ b/java/com/android/dialer/theme/res/values-es-rUS/strings.xml
@@ -21,6 +21,7 @@
     <string name="unknown_counter" msgid="7452889151953704159">"<xliff:g id="UNKNOWN">%s</xliff:g> <xliff:g id="ID">%d</xliff:g>"</string>
     <string name="payphone" msgid="7106361320283710387">"Teléfono público"</string>
     <string name="launcherActivityLabel" msgid="9034868428899993166">"Teléfono"</string>
+    <string name="camera_privacy_text" msgid="1318954032109938588">"Se activó el permiso de la cámara"</string>
     <string name="video_call" msgid="8914878391104612532">"Videollamada"</string>
     <string name="call" msgid="3699617769606114168">"Llamar"</string>
 </resources>
diff --git a/java/com/android/dialer/theme/res/values-es/strings.xml b/java/com/android/dialer/theme/res/values-es/strings.xml
index c63374c..c2d3ee3 100644
--- a/java/com/android/dialer/theme/res/values-es/strings.xml
+++ b/java/com/android/dialer/theme/res/values-es/strings.xml
@@ -21,6 +21,7 @@
     <string name="unknown_counter" msgid="7452889151953704159">"<xliff:g id="UNKNOWN">%s</xliff:g> <xliff:g id="ID">%d</xliff:g>"</string>
     <string name="payphone" msgid="7106361320283710387">"Teléfono público"</string>
     <string name="launcherActivityLabel" msgid="9034868428899993166">"Teléfono"</string>
+    <string name="camera_privacy_text" msgid="1318954032109938588">"Se ha habilitado el acceso a la cámara"</string>
     <string name="video_call" msgid="8914878391104612532">"Videollamada"</string>
     <string name="call" msgid="3699617769606114168">"Llamar"</string>
 </resources>
diff --git a/java/com/android/dialer/theme/res/values-et/strings.xml b/java/com/android/dialer/theme/res/values-et/strings.xml
index 1f76a4b..269fa64 100644
--- a/java/com/android/dialer/theme/res/values-et/strings.xml
+++ b/java/com/android/dialer/theme/res/values-et/strings.xml
@@ -21,6 +21,7 @@
     <string name="unknown_counter" msgid="7452889151953704159">"<xliff:g id="UNKNOWN">%s</xliff:g> <xliff:g id="ID">%d</xliff:g>"</string>
     <string name="payphone" msgid="7106361320283710387">"Telefoniautomaat"</string>
     <string name="launcherActivityLabel" msgid="9034868428899993166">"Telefon"</string>
+    <string name="camera_privacy_text" msgid="1318954032109938588">"Kaameraluba on antud"</string>
     <string name="video_call" msgid="8914878391104612532">"Videokõne"</string>
     <string name="call" msgid="3699617769606114168">"Helista"</string>
 </resources>
diff --git a/java/com/android/dialer/theme/res/values-eu/strings.xml b/java/com/android/dialer/theme/res/values-eu/strings.xml
index 8b28467..14345f0 100644
--- a/java/com/android/dialer/theme/res/values-eu/strings.xml
+++ b/java/com/android/dialer/theme/res/values-eu/strings.xml
@@ -21,6 +21,7 @@
     <string name="unknown_counter" msgid="7452889151953704159">"<xliff:g id="UNKNOWN">%s</xliff:g> <xliff:g id="ID">%d</xliff:g>"</string>
     <string name="payphone" msgid="7106361320283710387">"Telefono publikoa"</string>
     <string name="launcherActivityLabel" msgid="9034868428899993166">"Telefonoa"</string>
+    <string name="camera_privacy_text" msgid="1318954032109938588">"Kamera atzitzeko baimena eman da"</string>
     <string name="video_call" msgid="8914878391104612532">"Bideo-deia"</string>
     <string name="call" msgid="3699617769606114168">"Deitu"</string>
 </resources>
diff --git a/java/com/android/dialer/theme/res/values-fa/strings.xml b/java/com/android/dialer/theme/res/values-fa/strings.xml
index 340adb1..f751f34 100644
--- a/java/com/android/dialer/theme/res/values-fa/strings.xml
+++ b/java/com/android/dialer/theme/res/values-fa/strings.xml
@@ -21,6 +21,7 @@
     <string name="unknown_counter" msgid="7452889151953704159">"<xliff:g id="ID">%d</xliff:g> <xliff:g id="UNKNOWN">%s</xliff:g>"</string>
     <string name="payphone" msgid="7106361320283710387">"تلفن عمومی"</string>
     <string name="launcherActivityLabel" msgid="9034868428899993166">"تلفن"</string>
+    <string name="camera_privacy_text" msgid="1318954032109938588">"مجوز دوربین فعال شد"</string>
     <string name="video_call" msgid="8914878391104612532">"تماس ویدیویی"</string>
     <string name="call" msgid="3699617769606114168">"تماس"</string>
 </resources>
diff --git a/java/com/android/dialer/theme/res/values-fi/strings.xml b/java/com/android/dialer/theme/res/values-fi/strings.xml
index 52cab8a..0c09d7f 100644
--- a/java/com/android/dialer/theme/res/values-fi/strings.xml
+++ b/java/com/android/dialer/theme/res/values-fi/strings.xml
@@ -21,6 +21,7 @@
     <string name="unknown_counter" msgid="7452889151953704159">"<xliff:g id="UNKNOWN">%s</xliff:g> <xliff:g id="ID">%d</xliff:g>"</string>
     <string name="payphone" msgid="7106361320283710387">"Maksupuhelin"</string>
     <string name="launcherActivityLabel" msgid="9034868428899993166">"Puhelin"</string>
+    <string name="camera_privacy_text" msgid="1318954032109938588">"Kameran käyttöoikeus myönnettiin"</string>
     <string name="video_call" msgid="8914878391104612532">"Videopuhelu"</string>
     <string name="call" msgid="3699617769606114168">"Soita"</string>
 </resources>
diff --git a/java/com/android/dialer/theme/res/values-fr-rCA/strings.xml b/java/com/android/dialer/theme/res/values-fr-rCA/strings.xml
index b1d0ff1..7d901ca 100644
--- a/java/com/android/dialer/theme/res/values-fr-rCA/strings.xml
+++ b/java/com/android/dialer/theme/res/values-fr-rCA/strings.xml
@@ -21,6 +21,7 @@
     <string name="unknown_counter" msgid="7452889151953704159">"<xliff:g id="UNKNOWN">%s</xliff:g> <xliff:g id="ID">%d</xliff:g>"</string>
     <string name="payphone" msgid="7106361320283710387">"Cabine téléphonique"</string>
     <string name="launcherActivityLabel" msgid="9034868428899993166">"Téléphone"</string>
+    <string name="camera_privacy_text" msgid="1318954032109938588">"Autorisation d\'accès à l\'appareil photo activée"</string>
     <string name="video_call" msgid="8914878391104612532">"Appel vidéo"</string>
     <string name="call" msgid="3699617769606114168">"Appeler"</string>
 </resources>
diff --git a/java/com/android/dialer/theme/res/values-fr/strings.xml b/java/com/android/dialer/theme/res/values-fr/strings.xml
index b1d0ff1..1c30ef1 100644
--- a/java/com/android/dialer/theme/res/values-fr/strings.xml
+++ b/java/com/android/dialer/theme/res/values-fr/strings.xml
@@ -21,6 +21,7 @@
     <string name="unknown_counter" msgid="7452889151953704159">"<xliff:g id="UNKNOWN">%s</xliff:g> <xliff:g id="ID">%d</xliff:g>"</string>
     <string name="payphone" msgid="7106361320283710387">"Cabine téléphonique"</string>
     <string name="launcherActivityLabel" msgid="9034868428899993166">"Téléphone"</string>
+    <string name="camera_privacy_text" msgid="1318954032109938588">"Autorisation d\'accès à l\'appareil photo accordée"</string>
     <string name="video_call" msgid="8914878391104612532">"Appel vidéo"</string>
     <string name="call" msgid="3699617769606114168">"Appeler"</string>
 </resources>
diff --git a/java/com/android/dialer/theme/res/values-gl/strings.xml b/java/com/android/dialer/theme/res/values-gl/strings.xml
index 1788843..083d395 100644
--- a/java/com/android/dialer/theme/res/values-gl/strings.xml
+++ b/java/com/android/dialer/theme/res/values-gl/strings.xml
@@ -21,6 +21,7 @@
     <string name="unknown_counter" msgid="7452889151953704159">"<xliff:g id="UNKNOWN">%s</xliff:g> <xliff:g id="ID">%d</xliff:g>"</string>
     <string name="payphone" msgid="7106361320283710387">"Teléfono público"</string>
     <string name="launcherActivityLabel" msgid="9034868428899993166">"Teléfono"</string>
+    <string name="camera_privacy_text" msgid="1318954032109938588">"Activouse o permiso de acceso á cámara"</string>
     <string name="video_call" msgid="8914878391104612532">"Videochamada"</string>
     <string name="call" msgid="3699617769606114168">"Chamar"</string>
 </resources>
diff --git a/java/com/android/dialer/theme/res/values-gu/strings.xml b/java/com/android/dialer/theme/res/values-gu/strings.xml
index 8de6e2a..4baba69 100644
--- a/java/com/android/dialer/theme/res/values-gu/strings.xml
+++ b/java/com/android/dialer/theme/res/values-gu/strings.xml
@@ -21,6 +21,7 @@
     <string name="unknown_counter" msgid="7452889151953704159">"<xliff:g id="UNKNOWN">%s</xliff:g> <xliff:g id="ID">%d</xliff:g>"</string>
     <string name="payphone" msgid="7106361320283710387">"પેફોન"</string>
     <string name="launcherActivityLabel" msgid="9034868428899993166">"ફોન"</string>
+    <string name="camera_privacy_text" msgid="1318954032109938588">"કૅમેરાની પરવાનગી સક્ષમ કરી"</string>
     <string name="video_call" msgid="8914878391104612532">"વિડિઓ કૉલ"</string>
     <string name="call" msgid="3699617769606114168">"કૉલ કરો"</string>
 </resources>
diff --git a/java/com/android/dialer/theme/res/values-hi/strings.xml b/java/com/android/dialer/theme/res/values-hi/strings.xml
index fbc56e9..758be5d 100644
--- a/java/com/android/dialer/theme/res/values-hi/strings.xml
+++ b/java/com/android/dialer/theme/res/values-hi/strings.xml
@@ -21,6 +21,7 @@
     <string name="unknown_counter" msgid="7452889151953704159">"<xliff:g id="UNKNOWN">%s</xliff:g> <xliff:g id="ID">%d</xliff:g>"</string>
     <string name="payphone" msgid="7106361320283710387">"पे-फ़ोन"</string>
     <string name="launcherActivityLabel" msgid="9034868428899993166">"फ़ोन"</string>
+    <string name="camera_privacy_text" msgid="1318954032109938588">"कैमरे की अनुमति सक्षम की गई"</string>
     <string name="video_call" msgid="8914878391104612532">"वीडियो कॉल"</string>
     <string name="call" msgid="3699617769606114168">"कॉल करें"</string>
 </resources>
diff --git a/java/com/android/dialer/theme/res/values-hr/strings.xml b/java/com/android/dialer/theme/res/values-hr/strings.xml
index 73c6542..89a5aee 100644
--- a/java/com/android/dialer/theme/res/values-hr/strings.xml
+++ b/java/com/android/dialer/theme/res/values-hr/strings.xml
@@ -21,6 +21,7 @@
     <string name="unknown_counter" msgid="7452889151953704159">"<xliff:g id="UNKNOWN">%s</xliff:g> <xliff:g id="ID">%d</xliff:g>"</string>
     <string name="payphone" msgid="7106361320283710387">"Javna telefonska govornica"</string>
     <string name="launcherActivityLabel" msgid="9034868428899993166">"Telefon"</string>
+    <string name="camera_privacy_text" msgid="1318954032109938588">"Omogućen je pristup kameri"</string>
     <string name="video_call" msgid="8914878391104612532">"Videopoziv"</string>
     <string name="call" msgid="3699617769606114168">"Pozovi"</string>
 </resources>
diff --git a/java/com/android/dialer/theme/res/values-hu/strings.xml b/java/com/android/dialer/theme/res/values-hu/strings.xml
index d70977d..30051d4 100644
--- a/java/com/android/dialer/theme/res/values-hu/strings.xml
+++ b/java/com/android/dialer/theme/res/values-hu/strings.xml
@@ -21,6 +21,7 @@
     <string name="unknown_counter" msgid="7452889151953704159">"<xliff:g id="UNKNOWN">%s</xliff:g> <xliff:g id="ID">%d</xliff:g>"</string>
     <string name="payphone" msgid="7106361320283710387">"Nyilvános telefon"</string>
     <string name="launcherActivityLabel" msgid="9034868428899993166">"Telefon"</string>
+    <string name="camera_privacy_text" msgid="1318954032109938588">"Kameraengedély megadva"</string>
     <string name="video_call" msgid="8914878391104612532">"Videohívás"</string>
     <string name="call" msgid="3699617769606114168">"Hívás"</string>
 </resources>
diff --git a/java/com/android/dialer/theme/res/values-hy/strings.xml b/java/com/android/dialer/theme/res/values-hy/strings.xml
index 5f53c9f..6577dab 100644
--- a/java/com/android/dialer/theme/res/values-hy/strings.xml
+++ b/java/com/android/dialer/theme/res/values-hy/strings.xml
@@ -21,6 +21,7 @@
     <string name="unknown_counter" msgid="7452889151953704159">"<xliff:g id="UNKNOWN">%s</xliff:g> <xliff:g id="ID">%d</xliff:g>"</string>
     <string name="payphone" msgid="7106361320283710387">"Բջջային տերմինալ"</string>
     <string name="launcherActivityLabel" msgid="9034868428899993166">"Հեռախոս"</string>
+    <string name="camera_privacy_text" msgid="1318954032109938588">"Տեսախցիկից օգտվելու թույլտվությունը տրամադրված է"</string>
     <string name="video_call" msgid="8914878391104612532">"Տեսազանգ"</string>
     <string name="call" msgid="3699617769606114168">"Զանգել"</string>
 </resources>
diff --git a/java/com/android/dialer/theme/res/values-in/strings.xml b/java/com/android/dialer/theme/res/values-in/strings.xml
index 193c6e9..d2d72b8 100644
--- a/java/com/android/dialer/theme/res/values-in/strings.xml
+++ b/java/com/android/dialer/theme/res/values-in/strings.xml
@@ -21,6 +21,7 @@
     <string name="unknown_counter" msgid="7452889151953704159">"<xliff:g id="UNKNOWN">%s</xliff:g> <xliff:g id="ID">%d</xliff:g>"</string>
     <string name="payphone" msgid="7106361320283710387">"Telepon Umum"</string>
     <string name="launcherActivityLabel" msgid="9034868428899993166">"Telepon"</string>
+    <string name="camera_privacy_text" msgid="1318954032109938588">"Izin kamera diaktifkan"</string>
     <string name="video_call" msgid="8914878391104612532">"Video call"</string>
     <string name="call" msgid="3699617769606114168">"Telepon"</string>
 </resources>
diff --git a/java/com/android/dialer/theme/res/values-is/strings.xml b/java/com/android/dialer/theme/res/values-is/strings.xml
index 6a67ad9..ff3faf8 100644
--- a/java/com/android/dialer/theme/res/values-is/strings.xml
+++ b/java/com/android/dialer/theme/res/values-is/strings.xml
@@ -21,6 +21,7 @@
     <string name="unknown_counter" msgid="7452889151953704159">"<xliff:g id="UNKNOWN">%s</xliff:g> <xliff:g id="ID">%d</xliff:g>"</string>
     <string name="payphone" msgid="7106361320283710387">"Símasjálfsali"</string>
     <string name="launcherActivityLabel" msgid="9034868428899993166">"Sími"</string>
+    <string name="camera_privacy_text" msgid="1318954032109938588">"Myndavélarheimild virk"</string>
     <string name="video_call" msgid="8914878391104612532">"Hringja myndsímtal"</string>
     <string name="call" msgid="3699617769606114168">"Hringja"</string>
 </resources>
diff --git a/java/com/android/dialer/theme/res/values-it/strings.xml b/java/com/android/dialer/theme/res/values-it/strings.xml
index 46c6d56..4b26288 100644
--- a/java/com/android/dialer/theme/res/values-it/strings.xml
+++ b/java/com/android/dialer/theme/res/values-it/strings.xml
@@ -21,6 +21,7 @@
     <string name="unknown_counter" msgid="7452889151953704159">"<xliff:g id="UNKNOWN">%s</xliff:g> <xliff:g id="ID">%d</xliff:g>"</string>
     <string name="payphone" msgid="7106361320283710387">"Cabina telefonica"</string>
     <string name="launcherActivityLabel" msgid="9034868428899993166">"Telefono"</string>
+    <string name="camera_privacy_text" msgid="1318954032109938588">"Autorizzazioni della fotocamera attivate"</string>
     <string name="video_call" msgid="8914878391104612532">"Videochiamata"</string>
     <string name="call" msgid="3699617769606114168">"Chiama"</string>
 </resources>
diff --git a/java/com/android/dialer/theme/res/values-iw/strings.xml b/java/com/android/dialer/theme/res/values-iw/strings.xml
index 1bc8cbb..09abf2e 100644
--- a/java/com/android/dialer/theme/res/values-iw/strings.xml
+++ b/java/com/android/dialer/theme/res/values-iw/strings.xml
@@ -21,6 +21,7 @@
     <string name="unknown_counter" msgid="7452889151953704159">"<xliff:g id="UNKNOWN">%s</xliff:g> <xliff:g id="ID">%d</xliff:g>"</string>
     <string name="payphone" msgid="7106361320283710387">"טלפון ציבורי"</string>
     <string name="launcherActivityLabel" msgid="9034868428899993166">"טלפון"</string>
+    <string name="camera_privacy_text" msgid="1318954032109938588">"הרשאת הגישה למצלמה הופעלה"</string>
     <string name="video_call" msgid="8914878391104612532">"שיחת וידאו"</string>
     <string name="call" msgid="3699617769606114168">"התקשר"</string>
 </resources>
diff --git a/java/com/android/dialer/theme/res/values-ja/strings.xml b/java/com/android/dialer/theme/res/values-ja/strings.xml
index 839495d..551d679 100644
--- a/java/com/android/dialer/theme/res/values-ja/strings.xml
+++ b/java/com/android/dialer/theme/res/values-ja/strings.xml
@@ -21,6 +21,7 @@
     <string name="unknown_counter" msgid="7452889151953704159">"<xliff:g id="UNKNOWN">%s</xliff:g>(<xliff:g id="ID">%d</xliff:g>)"</string>
     <string name="payphone" msgid="7106361320283710387">"公衆電話"</string>
     <string name="launcherActivityLabel" msgid="9034868428899993166">"電話"</string>
+    <string name="camera_privacy_text" msgid="1318954032109938588">"カメラへのアクセスを自動で許可しました"</string>
     <string name="video_call" msgid="8914878391104612532">"ビデオハングアウト"</string>
     <string name="call" msgid="3699617769606114168">"発信"</string>
 </resources>
diff --git a/java/com/android/dialer/theme/res/values-ka/strings.xml b/java/com/android/dialer/theme/res/values-ka/strings.xml
index 37fdabd..ab22595 100644
--- a/java/com/android/dialer/theme/res/values-ka/strings.xml
+++ b/java/com/android/dialer/theme/res/values-ka/strings.xml
@@ -21,6 +21,7 @@
     <string name="unknown_counter" msgid="7452889151953704159">"<xliff:g id="UNKNOWN">%s</xliff:g> <xliff:g id="ID">%d</xliff:g>"</string>
     <string name="payphone" msgid="7106361320283710387">"გადახდის ტელეფონი"</string>
     <string name="launcherActivityLabel" msgid="9034868428899993166">"ტელეფონი"</string>
+    <string name="camera_privacy_text" msgid="1318954032109938588">"კამერაზე წვდომის ნებართვა ჩართულია"</string>
     <string name="video_call" msgid="8914878391104612532">"ვიდეოზარი"</string>
     <string name="call" msgid="3699617769606114168">"დარეკვა"</string>
 </resources>
diff --git a/java/com/android/dialer/theme/res/values-kk/strings.xml b/java/com/android/dialer/theme/res/values-kk/strings.xml
index 1b6a516..d3a1b7b 100644
--- a/java/com/android/dialer/theme/res/values-kk/strings.xml
+++ b/java/com/android/dialer/theme/res/values-kk/strings.xml
@@ -21,6 +21,7 @@
     <string name="unknown_counter" msgid="7452889151953704159">"<xliff:g id="UNKNOWN">%s</xliff:g> <xliff:g id="ID">%d</xliff:g>"</string>
     <string name="payphone" msgid="7106361320283710387">"Автомат-телефон"</string>
     <string name="launcherActivityLabel" msgid="9034868428899993166">"Телефон"</string>
+    <string name="camera_privacy_text" msgid="1318954032109938588">"Камера рұқсаты қосылды"</string>
     <string name="video_call" msgid="8914878391104612532">"Бейне қоңырау"</string>
     <string name="call" msgid="3699617769606114168">"Қоңырау шалу"</string>
 </resources>
diff --git a/java/com/android/dialer/theme/res/values-km/strings.xml b/java/com/android/dialer/theme/res/values-km/strings.xml
index cfc2010..900f1d6 100644
--- a/java/com/android/dialer/theme/res/values-km/strings.xml
+++ b/java/com/android/dialer/theme/res/values-km/strings.xml
@@ -21,6 +21,7 @@
     <string name="unknown_counter" msgid="7452889151953704159">"<xliff:g id="UNKNOWN">%s</xliff:g> <xliff:g id="ID">%d</xliff:g>"</string>
     <string name="payphone" msgid="7106361320283710387">"ទូរស័ព្ទសាធារណៈ"</string>
     <string name="launcherActivityLabel" msgid="9034868428899993166">"ទូរស័ព្ទ"</string>
+    <string name="camera_privacy_text" msgid="1318954032109938588">"បានបើក​ការអនុញ្ញាត​កាមេរ៉ា"</string>
     <string name="video_call" msgid="8914878391104612532">"ការ​ហៅវីដេអូ"</string>
     <string name="call" msgid="3699617769606114168">"ហៅ​ទូរសព្ទ"</string>
 </resources>
diff --git a/java/com/android/dialer/theme/res/values-kn/strings.xml b/java/com/android/dialer/theme/res/values-kn/strings.xml
index dffa10e0..ab9f816 100644
--- a/java/com/android/dialer/theme/res/values-kn/strings.xml
+++ b/java/com/android/dialer/theme/res/values-kn/strings.xml
@@ -21,6 +21,7 @@
     <string name="unknown_counter" msgid="7452889151953704159">"<xliff:g id="UNKNOWN">%s</xliff:g> <xliff:g id="ID">%d</xliff:g>"</string>
     <string name="payphone" msgid="7106361320283710387">"ಪೇಫೋನ್"</string>
     <string name="launcherActivityLabel" msgid="9034868428899993166">"ಫೋನ್"</string>
+    <string name="camera_privacy_text" msgid="1318954032109938588">"ಕ್ಯಾಮರಾ ಅನುಮತಿಯನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ"</string>
     <string name="video_call" msgid="8914878391104612532">"ವೀಡಿಯೊ ಕರೆ"</string>
     <string name="call" msgid="3699617769606114168">"ಕರೆಮಾಡಿ"</string>
 </resources>
diff --git a/java/com/android/dialer/theme/res/values-ko/strings.xml b/java/com/android/dialer/theme/res/values-ko/strings.xml
index ff6710c..b5ac556 100644
--- a/java/com/android/dialer/theme/res/values-ko/strings.xml
+++ b/java/com/android/dialer/theme/res/values-ko/strings.xml
@@ -21,6 +21,7 @@
     <string name="unknown_counter" msgid="7452889151953704159">"<xliff:g id="UNKNOWN">%s</xliff:g> <xliff:g id="ID">%d</xliff:g>"</string>
     <string name="payphone" msgid="7106361320283710387">"공중전화"</string>
     <string name="launcherActivityLabel" msgid="9034868428899993166">"휴대전화"</string>
+    <string name="camera_privacy_text" msgid="1318954032109938588">"카메라 권한 사용 가능"</string>
     <string name="video_call" msgid="8914878391104612532">"화상 통화"</string>
     <string name="call" msgid="3699617769606114168">"전화"</string>
 </resources>
diff --git a/java/com/android/dialer/theme/res/values-ky/strings.xml b/java/com/android/dialer/theme/res/values-ky/strings.xml
index 036c270..0a9bec2 100644
--- a/java/com/android/dialer/theme/res/values-ky/strings.xml
+++ b/java/com/android/dialer/theme/res/values-ky/strings.xml
@@ -21,6 +21,7 @@
     <string name="unknown_counter" msgid="7452889151953704159">"<xliff:g id="UNKNOWN">%s</xliff:g> <xliff:g id="ID">%d</xliff:g>"</string>
     <string name="payphone" msgid="7106361320283710387">"Таксофон"</string>
     <string name="launcherActivityLabel" msgid="9034868428899993166">"Телефон"</string>
+    <string name="camera_privacy_text" msgid="1318954032109938588">"Камеранын уруксаты иштетилди"</string>
     <string name="video_call" msgid="8914878391104612532">"Видео чалуу"</string>
     <string name="call" msgid="3699617769606114168">"Чалуу"</string>
 </resources>
diff --git a/java/com/android/dialer/theme/res/values-lo/strings.xml b/java/com/android/dialer/theme/res/values-lo/strings.xml
index 9204a02..d33d43e 100644
--- a/java/com/android/dialer/theme/res/values-lo/strings.xml
+++ b/java/com/android/dialer/theme/res/values-lo/strings.xml
@@ -21,6 +21,7 @@
     <string name="unknown_counter" msgid="7452889151953704159">"<xliff:g id="UNKNOWN">%s</xliff:g> <xliff:g id="ID">%d</xliff:g>"</string>
     <string name="payphone" msgid="7106361320283710387">"ຕູ້​ໂທ​ລະ​ສັບ​ສາ​ທາ​ລະ​ນະ"</string>
     <string name="launcherActivityLabel" msgid="9034868428899993166">"ໂທລະສັບ"</string>
+    <string name="camera_privacy_text" msgid="1318954032109938588">"ເປີດໃຊ້ສິດອະນຸຍາດກ້ອງຖ່າຍຮູບແລ້ວ"</string>
     <string name="video_call" msgid="8914878391104612532">"ໂທວິດີໂອ"</string>
     <string name="call" msgid="3699617769606114168">"ໂທ"</string>
 </resources>
diff --git a/java/com/android/dialer/theme/res/values-lt/strings.xml b/java/com/android/dialer/theme/res/values-lt/strings.xml
index be14536..fdf31e2 100644
--- a/java/com/android/dialer/theme/res/values-lt/strings.xml
+++ b/java/com/android/dialer/theme/res/values-lt/strings.xml
@@ -21,6 +21,7 @@
     <string name="unknown_counter" msgid="7452889151953704159">"<xliff:g id="ID">%d</xliff:g> <xliff:g id="UNKNOWN">%s</xliff:g>"</string>
     <string name="payphone" msgid="7106361320283710387">"Taksofonas"</string>
     <string name="launcherActivityLabel" msgid="9034868428899993166">"Telefonas"</string>
+    <string name="camera_privacy_text" msgid="1318954032109938588">"Fotoaparato leidimas įgalintas"</string>
     <string name="video_call" msgid="8914878391104612532">"Vaizdo skambutis"</string>
     <string name="call" msgid="3699617769606114168">"Skambinti"</string>
 </resources>
diff --git a/java/com/android/dialer/theme/res/values-lv/strings.xml b/java/com/android/dialer/theme/res/values-lv/strings.xml
index 35b742f..031c5bd 100644
--- a/java/com/android/dialer/theme/res/values-lv/strings.xml
+++ b/java/com/android/dialer/theme/res/values-lv/strings.xml
@@ -21,6 +21,7 @@
     <string name="unknown_counter" msgid="7452889151953704159">"<xliff:g id="UNKNOWN">%s</xliff:g> <xliff:g id="ID">%d</xliff:g>"</string>
     <string name="payphone" msgid="7106361320283710387">"Maksas tālrunis"</string>
     <string name="launcherActivityLabel" msgid="9034868428899993166">"Tālrunis"</string>
+    <string name="camera_privacy_text" msgid="1318954032109938588">"Kameras atļauja iespējota"</string>
     <string name="video_call" msgid="8914878391104612532">"Videozvans"</string>
     <string name="call" msgid="3699617769606114168">"Zvanīt"</string>
 </resources>
diff --git a/java/com/android/dialer/theme/res/values-mk/strings.xml b/java/com/android/dialer/theme/res/values-mk/strings.xml
index 3975ae5..d89d12e 100644
--- a/java/com/android/dialer/theme/res/values-mk/strings.xml
+++ b/java/com/android/dialer/theme/res/values-mk/strings.xml
@@ -21,6 +21,7 @@
     <string name="unknown_counter" msgid="7452889151953704159">"<xliff:g id="UNKNOWN">%s</xliff:g> <xliff:g id="ID">%d</xliff:g>"</string>
     <string name="payphone" msgid="7106361320283710387">"Говорница"</string>
     <string name="launcherActivityLabel" msgid="9034868428899993166">"Телефон"</string>
+    <string name="camera_privacy_text" msgid="1318954032109938588">"Дозволата за камера е овозможена"</string>
     <string name="video_call" msgid="8914878391104612532">"Воспоставете видеоповик"</string>
     <string name="call" msgid="3699617769606114168">"Повикајте"</string>
 </resources>
diff --git a/java/com/android/dialer/theme/res/values-ml/strings.xml b/java/com/android/dialer/theme/res/values-ml/strings.xml
index 146bfdf..f02ceeb 100644
--- a/java/com/android/dialer/theme/res/values-ml/strings.xml
+++ b/java/com/android/dialer/theme/res/values-ml/strings.xml
@@ -21,6 +21,7 @@
     <string name="unknown_counter" msgid="7452889151953704159">"<xliff:g id="UNKNOWN">%s</xliff:g> <xliff:g id="ID">%d</xliff:g>"</string>
     <string name="payphone" msgid="7106361320283710387">"പണം നൽകി ഉപയോഗിക്കുന്ന ഫോൺ"</string>
     <string name="launcherActivityLabel" msgid="9034868428899993166">"ഫോണ്‍"</string>
+    <string name="camera_privacy_text" msgid="1318954032109938588">"ക്യാമറ അനുമതി നൽകി"</string>
     <string name="video_call" msgid="8914878391104612532">"വീഡിയോ കോള്‍"</string>
     <string name="call" msgid="3699617769606114168">"വിളിക്കുക"</string>
 </resources>
diff --git a/java/com/android/dialer/theme/res/values-mn/strings.xml b/java/com/android/dialer/theme/res/values-mn/strings.xml
index 0e27e8d..7a07e5d 100644
--- a/java/com/android/dialer/theme/res/values-mn/strings.xml
+++ b/java/com/android/dialer/theme/res/values-mn/strings.xml
@@ -21,6 +21,7 @@
     <string name="unknown_counter" msgid="7452889151953704159">"<xliff:g id="UNKNOWN">%s</xliff:g> <xliff:g id="ID">%d</xliff:g>"</string>
     <string name="payphone" msgid="7106361320283710387">"Payphone"</string>
     <string name="launcherActivityLabel" msgid="9034868428899993166">"Утас"</string>
+    <string name="camera_privacy_text" msgid="1318954032109938588">"Камерын зөвшөөрөл идэвхжсэн"</string>
     <string name="video_call" msgid="8914878391104612532">"Видео дуудлага"</string>
     <string name="call" msgid="3699617769606114168">"Залгах"</string>
 </resources>
diff --git a/java/com/android/dialer/theme/res/values-mr/strings.xml b/java/com/android/dialer/theme/res/values-mr/strings.xml
index 7fa6f26..eeb9afa 100644
--- a/java/com/android/dialer/theme/res/values-mr/strings.xml
+++ b/java/com/android/dialer/theme/res/values-mr/strings.xml
@@ -21,6 +21,7 @@
     <string name="unknown_counter" msgid="7452889151953704159">"<xliff:g id="UNKNOWN">%s</xliff:g> <xliff:g id="ID">%d</xliff:g>"</string>
     <string name="payphone" msgid="7106361320283710387">"सार्वजनिक फोन"</string>
     <string name="launcherActivityLabel" msgid="9034868428899993166">"फोन"</string>
+    <string name="camera_privacy_text" msgid="1318954032109938588">"कॅमेरा परवानगी सक्षम केली"</string>
     <string name="video_call" msgid="8914878391104612532">"व्हिडिओ कॉल"</string>
     <string name="call" msgid="3699617769606114168">"कॉल करा"</string>
 </resources>
diff --git a/java/com/android/dialer/theme/res/values-ms/strings.xml b/java/com/android/dialer/theme/res/values-ms/strings.xml
index 18df912..2e424fd 100644
--- a/java/com/android/dialer/theme/res/values-ms/strings.xml
+++ b/java/com/android/dialer/theme/res/values-ms/strings.xml
@@ -21,6 +21,7 @@
     <string name="unknown_counter" msgid="7452889151953704159">"<xliff:g id="UNKNOWN">%s</xliff:g> <xliff:g id="ID">%d</xliff:g>"</string>
     <string name="payphone" msgid="7106361320283710387">"Telefon Awam"</string>
     <string name="launcherActivityLabel" msgid="9034868428899993166">"Telefon"</string>
+    <string name="camera_privacy_text" msgid="1318954032109938588">"Kebenaran kamera didayakan"</string>
     <string name="video_call" msgid="8914878391104612532">"Panggilan video"</string>
     <string name="call" msgid="3699617769606114168">"Panggil"</string>
 </resources>
diff --git a/java/com/android/dialer/theme/res/values-my/strings.xml b/java/com/android/dialer/theme/res/values-my/strings.xml
index 67b9b28..97b871b 100644
--- a/java/com/android/dialer/theme/res/values-my/strings.xml
+++ b/java/com/android/dialer/theme/res/values-my/strings.xml
@@ -21,6 +21,7 @@
     <string name="unknown_counter" msgid="7452889151953704159">"<xliff:g id="UNKNOWN">%s</xliff:g> <xliff:g id="ID">%d</xliff:g>"</string>
     <string name="payphone" msgid="7106361320283710387">"ငွေပေးရသည့်ဖုန်း"</string>
     <string name="launcherActivityLabel" msgid="9034868428899993166">"ဖုန်း"</string>
+    <string name="camera_privacy_text" msgid="1318954032109938588">"ကင်မရာအသုံးပြုခွင့် ဖွင့်ထားပါသည်"</string>
     <string name="video_call" msgid="8914878391104612532">"ဗီဒီယိုခေါ်ဆိုမှု"</string>
     <string name="call" msgid="3699617769606114168">"ခေါ်ဆိုရန်"</string>
 </resources>
diff --git a/java/com/android/dialer/theme/res/values-nb/strings.xml b/java/com/android/dialer/theme/res/values-nb/strings.xml
index 1a6e593..7587b7e 100644
--- a/java/com/android/dialer/theme/res/values-nb/strings.xml
+++ b/java/com/android/dialer/theme/res/values-nb/strings.xml
@@ -21,6 +21,7 @@
     <string name="unknown_counter" msgid="7452889151953704159">"<xliff:g id="UNKNOWN">%s</xliff:g> <xliff:g id="ID">%d</xliff:g>"</string>
     <string name="payphone" msgid="7106361320283710387">"Telefonkiosk"</string>
     <string name="launcherActivityLabel" msgid="9034868428899993166">"Telefon"</string>
+    <string name="camera_privacy_text" msgid="1318954032109938588">"Kameratillatelsen er aktivert"</string>
     <string name="video_call" msgid="8914878391104612532">"Videosamtale"</string>
     <string name="call" msgid="3699617769606114168">"Ring"</string>
 </resources>
diff --git a/java/com/android/dialer/theme/res/values-ne/strings.xml b/java/com/android/dialer/theme/res/values-ne/strings.xml
index eb73de9..af1ad5e 100644
--- a/java/com/android/dialer/theme/res/values-ne/strings.xml
+++ b/java/com/android/dialer/theme/res/values-ne/strings.xml
@@ -21,6 +21,7 @@
     <string name="unknown_counter" msgid="7452889151953704159">"<xliff:g id="UNKNOWN">%s</xliff:g> <xliff:g id="ID">%d</xliff:g>"</string>
     <string name="payphone" msgid="7106361320283710387">"पेफोन"</string>
     <string name="launcherActivityLabel" msgid="9034868428899993166">"फोन"</string>
+    <string name="camera_privacy_text" msgid="1318954032109938588">"क्यामेरा सम्बन्धी अनुमतिहरूलाई सक्षम पारियो"</string>
     <string name="video_call" msgid="8914878391104612532">"भिडियो कल"</string>
     <string name="call" msgid="3699617769606114168">"कल गर्नुहोस्"</string>
 </resources>
diff --git a/java/com/android/dialer/theme/res/values-nl/strings.xml b/java/com/android/dialer/theme/res/values-nl/strings.xml
index 36e904c..ab51c97 100644
--- a/java/com/android/dialer/theme/res/values-nl/strings.xml
+++ b/java/com/android/dialer/theme/res/values-nl/strings.xml
@@ -21,6 +21,7 @@
     <string name="unknown_counter" msgid="7452889151953704159">"<xliff:g id="UNKNOWN">%s</xliff:g> <xliff:g id="ID">%d</xliff:g>"</string>
     <string name="payphone" msgid="7106361320283710387">"Telefooncel"</string>
     <string name="launcherActivityLabel" msgid="9034868428899993166">"Telefoon"</string>
+    <string name="camera_privacy_text" msgid="1318954032109938588">"Camerarechten ingeschakeld"</string>
     <string name="video_call" msgid="8914878391104612532">"Videogesprek"</string>
     <string name="call" msgid="3699617769606114168">"Bellen"</string>
 </resources>
diff --git a/java/com/android/dialer/theme/res/values-no/strings.xml b/java/com/android/dialer/theme/res/values-no/strings.xml
index 1a6e593..7587b7e 100644
--- a/java/com/android/dialer/theme/res/values-no/strings.xml
+++ b/java/com/android/dialer/theme/res/values-no/strings.xml
@@ -21,6 +21,7 @@
     <string name="unknown_counter" msgid="7452889151953704159">"<xliff:g id="UNKNOWN">%s</xliff:g> <xliff:g id="ID">%d</xliff:g>"</string>
     <string name="payphone" msgid="7106361320283710387">"Telefonkiosk"</string>
     <string name="launcherActivityLabel" msgid="9034868428899993166">"Telefon"</string>
+    <string name="camera_privacy_text" msgid="1318954032109938588">"Kameratillatelsen er aktivert"</string>
     <string name="video_call" msgid="8914878391104612532">"Videosamtale"</string>
     <string name="call" msgid="3699617769606114168">"Ring"</string>
 </resources>
diff --git a/java/com/android/dialer/theme/res/values-pa/strings.xml b/java/com/android/dialer/theme/res/values-pa/strings.xml
index af263c8..8784bca 100644
--- a/java/com/android/dialer/theme/res/values-pa/strings.xml
+++ b/java/com/android/dialer/theme/res/values-pa/strings.xml
@@ -21,6 +21,7 @@
     <string name="unknown_counter" msgid="7452889151953704159">"<xliff:g id="UNKNOWN">%s</xliff:g> <xliff:g id="ID">%d</xliff:g>"</string>
     <string name="payphone" msgid="7106361320283710387">"ਪੇਫੋਨ"</string>
     <string name="launcherActivityLabel" msgid="9034868428899993166">"ਫੋਨ"</string>
+    <string name="camera_privacy_text" msgid="1318954032109938588">"ਕੈਮਰਾ ਇਜਾਜ਼ਤ ਨੂੰ ਯੋਗ ਬਣਾਇਆ ਗਿਆ ਹੈ"</string>
     <string name="video_call" msgid="8914878391104612532">"ਵੀਡੀਓ ਕਾਲ"</string>
     <string name="call" msgid="3699617769606114168">"ਕਾਲ ਕਰੋ"</string>
 </resources>
diff --git a/java/com/android/dialer/theme/res/values-pl/strings.xml b/java/com/android/dialer/theme/res/values-pl/strings.xml
index a25df0a..246261e 100644
--- a/java/com/android/dialer/theme/res/values-pl/strings.xml
+++ b/java/com/android/dialer/theme/res/values-pl/strings.xml
@@ -21,6 +21,7 @@
     <string name="unknown_counter" msgid="7452889151953704159">"<xliff:g id="UNKNOWN">%s</xliff:g> <xliff:g id="ID">%d</xliff:g>"</string>
     <string name="payphone" msgid="7106361320283710387">"Automat telefoniczny"</string>
     <string name="launcherActivityLabel" msgid="9034868428899993166">"Telefon"</string>
+    <string name="camera_privacy_text" msgid="1318954032109938588">"Uprawnienia do korzystania z aparatu zostały włączone"</string>
     <string name="video_call" msgid="8914878391104612532">"Rozmowa wideo"</string>
     <string name="call" msgid="3699617769606114168">"Zadzwoń"</string>
 </resources>
diff --git a/java/com/android/dialer/theme/res/values-pt-rBR/strings.xml b/java/com/android/dialer/theme/res/values-pt-rBR/strings.xml
index 9f44269..c1356d9 100644
--- a/java/com/android/dialer/theme/res/values-pt-rBR/strings.xml
+++ b/java/com/android/dialer/theme/res/values-pt-rBR/strings.xml
@@ -21,6 +21,7 @@
     <string name="unknown_counter" msgid="7452889151953704159">"<xliff:g id="UNKNOWN">%s</xliff:g> <xliff:g id="ID">%d</xliff:g>"</string>
     <string name="payphone" msgid="7106361320283710387">"Telefone público"</string>
     <string name="launcherActivityLabel" msgid="9034868428899993166">"Telefone"</string>
+    <string name="camera_privacy_text" msgid="1318954032109938588">"Permissão de câmera ativada"</string>
     <string name="video_call" msgid="8914878391104612532">"Videochamada"</string>
     <string name="call" msgid="3699617769606114168">"Ligar"</string>
 </resources>
diff --git a/java/com/android/dialer/theme/res/values-pt-rPT/strings.xml b/java/com/android/dialer/theme/res/values-pt-rPT/strings.xml
index 1b77257..2b46e44 100644
--- a/java/com/android/dialer/theme/res/values-pt-rPT/strings.xml
+++ b/java/com/android/dialer/theme/res/values-pt-rPT/strings.xml
@@ -21,6 +21,7 @@
     <string name="unknown_counter" msgid="7452889151953704159">"<xliff:g id="UNKNOWN">%s</xliff:g> <xliff:g id="ID">%d</xliff:g>"</string>
     <string name="payphone" msgid="7106361320283710387">"Telefone público"</string>
     <string name="launcherActivityLabel" msgid="9034868428899993166">"Telefone"</string>
+    <string name="camera_privacy_text" msgid="1318954032109938588">"Autorização da câmara ativada"</string>
     <string name="video_call" msgid="8914878391104612532">"Videochamada"</string>
     <string name="call" msgid="3699617769606114168">"Telefonar"</string>
 </resources>
diff --git a/java/com/android/dialer/theme/res/values-pt/strings.xml b/java/com/android/dialer/theme/res/values-pt/strings.xml
index 9f44269..c1356d9 100644
--- a/java/com/android/dialer/theme/res/values-pt/strings.xml
+++ b/java/com/android/dialer/theme/res/values-pt/strings.xml
@@ -21,6 +21,7 @@
     <string name="unknown_counter" msgid="7452889151953704159">"<xliff:g id="UNKNOWN">%s</xliff:g> <xliff:g id="ID">%d</xliff:g>"</string>
     <string name="payphone" msgid="7106361320283710387">"Telefone público"</string>
     <string name="launcherActivityLabel" msgid="9034868428899993166">"Telefone"</string>
+    <string name="camera_privacy_text" msgid="1318954032109938588">"Permissão de câmera ativada"</string>
     <string name="video_call" msgid="8914878391104612532">"Videochamada"</string>
     <string name="call" msgid="3699617769606114168">"Ligar"</string>
 </resources>
diff --git a/java/com/android/dialer/theme/res/values-ro/strings.xml b/java/com/android/dialer/theme/res/values-ro/strings.xml
index 1cf8c8c..8978e92 100644
--- a/java/com/android/dialer/theme/res/values-ro/strings.xml
+++ b/java/com/android/dialer/theme/res/values-ro/strings.xml
@@ -21,6 +21,7 @@
     <string name="unknown_counter" msgid="7452889151953704159">"<xliff:g id="UNKNOWN">%s</xliff:g> <xliff:g id="ID">%d</xliff:g>"</string>
     <string name="payphone" msgid="7106361320283710387">"Telefon public"</string>
     <string name="launcherActivityLabel" msgid="9034868428899993166">"Telefon"</string>
+    <string name="camera_privacy_text" msgid="1318954032109938588">"Permisiunea pentru cameră a fost activată."</string>
     <string name="video_call" msgid="8914878391104612532">"Apel video"</string>
     <string name="call" msgid="3699617769606114168">"Apelați"</string>
 </resources>
diff --git a/java/com/android/dialer/theme/res/values-ru/strings.xml b/java/com/android/dialer/theme/res/values-ru/strings.xml
index 8aa6e8f..a155052 100644
--- a/java/com/android/dialer/theme/res/values-ru/strings.xml
+++ b/java/com/android/dialer/theme/res/values-ru/strings.xml
@@ -21,6 +21,7 @@
     <string name="unknown_counter" msgid="7452889151953704159">"<xliff:g id="UNKNOWN">%s</xliff:g> <xliff:g id="ID">%d</xliff:g>"</string>
     <string name="payphone" msgid="7106361320283710387">"Телефон-автомат"</string>
     <string name="launcherActivityLabel" msgid="9034868428899993166">"Телефон"</string>
+    <string name="camera_privacy_text" msgid="1318954032109938588">"Доступ к камере разрешен"</string>
     <string name="video_call" msgid="8914878391104612532">"Видеовызов"</string>
     <string name="call" msgid="3699617769606114168">"Позвонить"</string>
 </resources>
diff --git a/java/com/android/dialer/theme/res/values-si/strings.xml b/java/com/android/dialer/theme/res/values-si/strings.xml
index 04d0468..424a112 100644
--- a/java/com/android/dialer/theme/res/values-si/strings.xml
+++ b/java/com/android/dialer/theme/res/values-si/strings.xml
@@ -21,6 +21,7 @@
     <string name="unknown_counter" msgid="7452889151953704159">"<xliff:g id="UNKNOWN">%s</xliff:g> <xliff:g id="ID">%d</xliff:g>"</string>
     <string name="payphone" msgid="7106361320283710387">"පේෆෝනය"</string>
     <string name="launcherActivityLabel" msgid="9034868428899993166">"දුරකථනය"</string>
+    <string name="camera_privacy_text" msgid="1318954032109938588">"කැමරා අවසර සබල කර ඇත"</string>
     <string name="video_call" msgid="8914878391104612532">"වීඩියෝ ඇමතුම"</string>
     <string name="call" msgid="3699617769606114168">"ඇමතුම"</string>
 </resources>
diff --git a/java/com/android/dialer/theme/res/values-sk/strings.xml b/java/com/android/dialer/theme/res/values-sk/strings.xml
index 9e56e12..411b85e 100644
--- a/java/com/android/dialer/theme/res/values-sk/strings.xml
+++ b/java/com/android/dialer/theme/res/values-sk/strings.xml
@@ -21,6 +21,7 @@
     <string name="unknown_counter" msgid="7452889151953704159">"<xliff:g id="UNKNOWN">%s</xliff:g> <xliff:g id="ID">%d</xliff:g>"</string>
     <string name="payphone" msgid="7106361320283710387">"Telefónny automat"</string>
     <string name="launcherActivityLabel" msgid="9034868428899993166">"Telefón"</string>
+    <string name="camera_privacy_text" msgid="1318954032109938588">"Povolenie pre fotoaparát je aktivované"</string>
     <string name="video_call" msgid="8914878391104612532">"Videohovor"</string>
     <string name="call" msgid="3699617769606114168">"Volať"</string>
 </resources>
diff --git a/java/com/android/dialer/theme/res/values-sl/strings.xml b/java/com/android/dialer/theme/res/values-sl/strings.xml
index 6236535..85a3e2b 100644
--- a/java/com/android/dialer/theme/res/values-sl/strings.xml
+++ b/java/com/android/dialer/theme/res/values-sl/strings.xml
@@ -21,6 +21,7 @@
     <string name="unknown_counter" msgid="7452889151953704159">"<xliff:g id="UNKNOWN">%s</xliff:g> <xliff:g id="ID">%d</xliff:g>"</string>
     <string name="payphone" msgid="7106361320283710387">"Telefonska govorilnica"</string>
     <string name="launcherActivityLabel" msgid="9034868428899993166">"Telefon"</string>
+    <string name="camera_privacy_text" msgid="1318954032109938588">"Dovoljenje za dostop do fotoaparata je omogočeno"</string>
     <string name="video_call" msgid="8914878391104612532">"Videoklic"</string>
     <string name="call" msgid="3699617769606114168">"Pokliči"</string>
 </resources>
diff --git a/java/com/android/dialer/theme/res/values-sq/strings.xml b/java/com/android/dialer/theme/res/values-sq/strings.xml
index 6fecf14..5cbd587 100644
--- a/java/com/android/dialer/theme/res/values-sq/strings.xml
+++ b/java/com/android/dialer/theme/res/values-sq/strings.xml
@@ -21,6 +21,7 @@
     <string name="unknown_counter" msgid="7452889151953704159">"<xliff:g id="UNKNOWN">%s</xliff:g> <xliff:g id="ID">%d</xliff:g>"</string>
     <string name="payphone" msgid="7106361320283710387">"Telefon me pagesë"</string>
     <string name="launcherActivityLabel" msgid="9034868428899993166">"Telefoni"</string>
+    <string name="camera_privacy_text" msgid="1318954032109938588">"Leja e kamerës është aktivizuar"</string>
     <string name="video_call" msgid="8914878391104612532">"Telefonatë me video"</string>
     <string name="call" msgid="3699617769606114168">"Telefono"</string>
 </resources>
diff --git a/java/com/android/dialer/theme/res/values-sr/strings.xml b/java/com/android/dialer/theme/res/values-sr/strings.xml
index 8f91054..310da73 100644
--- a/java/com/android/dialer/theme/res/values-sr/strings.xml
+++ b/java/com/android/dialer/theme/res/values-sr/strings.xml
@@ -21,6 +21,7 @@
     <string name="unknown_counter" msgid="7452889151953704159">"<xliff:g id="UNKNOWN">%s</xliff:g> <xliff:g id="ID">%d</xliff:g>"</string>
     <string name="payphone" msgid="7106361320283710387">"Телефонска говорница"</string>
     <string name="launcherActivityLabel" msgid="9034868428899993166">"Телефон"</string>
+    <string name="camera_privacy_text" msgid="1318954032109938588">"Омогућена је дозвола за камеру"</string>
     <string name="video_call" msgid="8914878391104612532">"Упути видео позив"</string>
     <string name="call" msgid="3699617769606114168">"Позови"</string>
 </resources>
diff --git a/java/com/android/dialer/theme/res/values-sv/strings.xml b/java/com/android/dialer/theme/res/values-sv/strings.xml
index f31a378..af8e5f7 100644
--- a/java/com/android/dialer/theme/res/values-sv/strings.xml
+++ b/java/com/android/dialer/theme/res/values-sv/strings.xml
@@ -21,6 +21,7 @@
     <string name="unknown_counter" msgid="7452889151953704159">"<xliff:g id="UNKNOWN">%s</xliff:g> <xliff:g id="ID">%d</xliff:g>"</string>
     <string name="payphone" msgid="7106361320283710387">"Telefonautomat"</string>
     <string name="launcherActivityLabel" msgid="9034868428899993166">"Telefon"</string>
+    <string name="camera_privacy_text" msgid="1318954032109938588">"Kamerabehörighet har aktiverats"</string>
     <string name="video_call" msgid="8914878391104612532">"Videosamtal"</string>
     <string name="call" msgid="3699617769606114168">"Ring"</string>
 </resources>
diff --git a/java/com/android/dialer/theme/res/values-sw/strings.xml b/java/com/android/dialer/theme/res/values-sw/strings.xml
index c35d560..31615fe 100644
--- a/java/com/android/dialer/theme/res/values-sw/strings.xml
+++ b/java/com/android/dialer/theme/res/values-sw/strings.xml
@@ -21,6 +21,7 @@
     <string name="unknown_counter" msgid="7452889151953704159">"<xliff:g id="UNKNOWN">%s</xliff:g> <xliff:g id="ID">%d</xliff:g>"</string>
     <string name="payphone" msgid="7106361320283710387">"Simu ya kulipia"</string>
     <string name="launcherActivityLabel" msgid="9034868428899993166">"Simu"</string>
+    <string name="camera_privacy_text" msgid="1318954032109938588">"Imewasha ruhusa ya kamera"</string>
     <string name="video_call" msgid="8914878391104612532">"Simu ya video"</string>
     <string name="call" msgid="3699617769606114168">"Piga simu"</string>
 </resources>
diff --git a/java/com/android/dialer/theme/res/values-ta/strings.xml b/java/com/android/dialer/theme/res/values-ta/strings.xml
index 737e43e..ab15f0b 100644
--- a/java/com/android/dialer/theme/res/values-ta/strings.xml
+++ b/java/com/android/dialer/theme/res/values-ta/strings.xml
@@ -21,6 +21,7 @@
     <string name="unknown_counter" msgid="7452889151953704159">"<xliff:g id="UNKNOWN">%s</xliff:g> <xliff:g id="ID">%d</xliff:g>"</string>
     <string name="payphone" msgid="7106361320283710387">"கட்டணத் தொலைபேசி"</string>
     <string name="launcherActivityLabel" msgid="9034868428899993166">"மொபைல்"</string>
+    <string name="camera_privacy_text" msgid="1318954032109938588">"கேமராவிற்கான அனுமதி இயக்கப்பட்டது"</string>
     <string name="video_call" msgid="8914878391104612532">"வீடியோ அழைப்பு"</string>
     <string name="call" msgid="3699617769606114168">"அழை"</string>
 </resources>
diff --git a/java/com/android/dialer/theme/res/values-te/strings.xml b/java/com/android/dialer/theme/res/values-te/strings.xml
index c1a0212..4a6fca1 100644
--- a/java/com/android/dialer/theme/res/values-te/strings.xml
+++ b/java/com/android/dialer/theme/res/values-te/strings.xml
@@ -21,6 +21,7 @@
     <string name="unknown_counter" msgid="7452889151953704159">"<xliff:g id="UNKNOWN">%s</xliff:g> <xliff:g id="ID">%d</xliff:g>"</string>
     <string name="payphone" msgid="7106361320283710387">"పే ఫోన్"</string>
     <string name="launcherActivityLabel" msgid="9034868428899993166">"ఫోన్"</string>
+    <string name="camera_privacy_text" msgid="1318954032109938588">"కెమెరా అనుమతిని ప్రారంభించాము"</string>
     <string name="video_call" msgid="8914878391104612532">"వీడియో కాల్"</string>
     <string name="call" msgid="3699617769606114168">"కాల్ చేయి"</string>
 </resources>
diff --git a/java/com/android/dialer/theme/res/values-th/strings.xml b/java/com/android/dialer/theme/res/values-th/strings.xml
index 0df98d9..51db053 100644
--- a/java/com/android/dialer/theme/res/values-th/strings.xml
+++ b/java/com/android/dialer/theme/res/values-th/strings.xml
@@ -21,6 +21,7 @@
     <string name="unknown_counter" msgid="7452889151953704159">"<xliff:g id="UNKNOWN">%s</xliff:g> <xliff:g id="ID">%d</xliff:g>"</string>
     <string name="payphone" msgid="7106361320283710387">"โทรศัพท์สาธารณะ"</string>
     <string name="launcherActivityLabel" msgid="9034868428899993166">"โทรศัพท์"</string>
+    <string name="camera_privacy_text" msgid="1318954032109938588">"ให้สิทธิ์เข้าถึงกล้องถ่ายรูปแล้ว"</string>
     <string name="video_call" msgid="8914878391104612532">"แฮงเอาท์วิดีโอ"</string>
     <string name="call" msgid="3699617769606114168">"โทร"</string>
 </resources>
diff --git a/java/com/android/dialer/theme/res/values-tl/strings.xml b/java/com/android/dialer/theme/res/values-tl/strings.xml
index 573b6b8..97f69ec 100644
--- a/java/com/android/dialer/theme/res/values-tl/strings.xml
+++ b/java/com/android/dialer/theme/res/values-tl/strings.xml
@@ -21,6 +21,7 @@
     <string name="unknown_counter" msgid="7452889151953704159">"<xliff:g id="UNKNOWN">%s</xliff:g> <xliff:g id="ID">%d</xliff:g>"</string>
     <string name="payphone" msgid="7106361320283710387">"Payphone"</string>
     <string name="launcherActivityLabel" msgid="9034868428899993166">"Telepono"</string>
+    <string name="camera_privacy_text" msgid="1318954032109938588">"Na-enable ang pahintulot sa camera"</string>
     <string name="video_call" msgid="8914878391104612532">"Mag-video call"</string>
     <string name="call" msgid="3699617769606114168">"Tawag"</string>
 </resources>
diff --git a/java/com/android/dialer/theme/res/values-tr/strings.xml b/java/com/android/dialer/theme/res/values-tr/strings.xml
index 21e2889..b38f067 100644
--- a/java/com/android/dialer/theme/res/values-tr/strings.xml
+++ b/java/com/android/dialer/theme/res/values-tr/strings.xml
@@ -21,6 +21,7 @@
     <string name="unknown_counter" msgid="7452889151953704159">"<xliff:g id="UNKNOWN">%s</xliff:g> <xliff:g id="ID">%d</xliff:g>"</string>
     <string name="payphone" msgid="7106361320283710387">"Ankesörlü telefon"</string>
     <string name="launcherActivityLabel" msgid="9034868428899993166">"Telefon"</string>
+    <string name="camera_privacy_text" msgid="1318954032109938588">"Kamera izni etkinleştirildi"</string>
     <string name="video_call" msgid="8914878391104612532">"Görüntülü görüşme"</string>
     <string name="call" msgid="3699617769606114168">"Telefon et"</string>
 </resources>
diff --git a/java/com/android/dialer/theme/res/values-uk/strings.xml b/java/com/android/dialer/theme/res/values-uk/strings.xml
index dab89df..f070277 100644
--- a/java/com/android/dialer/theme/res/values-uk/strings.xml
+++ b/java/com/android/dialer/theme/res/values-uk/strings.xml
@@ -21,6 +21,7 @@
     <string name="unknown_counter" msgid="7452889151953704159">"<xliff:g id="UNKNOWN">%s</xliff:g> <xliff:g id="ID">%d</xliff:g>"</string>
     <string name="payphone" msgid="7106361320283710387">"Таксофон"</string>
     <string name="launcherActivityLabel" msgid="9034868428899993166">"Телефон"</string>
+    <string name="camera_privacy_text" msgid="1318954032109938588">"Камері надано дозвіл"</string>
     <string name="video_call" msgid="8914878391104612532">"Відеодзвінок"</string>
     <string name="call" msgid="3699617769606114168">"Виклик"</string>
 </resources>
diff --git a/java/com/android/dialer/theme/res/values-ur/strings.xml b/java/com/android/dialer/theme/res/values-ur/strings.xml
index 187eb22..e9a4b44 100644
--- a/java/com/android/dialer/theme/res/values-ur/strings.xml
+++ b/java/com/android/dialer/theme/res/values-ur/strings.xml
@@ -21,6 +21,7 @@
     <string name="unknown_counter" msgid="7452889151953704159">"<xliff:g id="UNKNOWN">%s</xliff:g> <xliff:g id="ID">%d</xliff:g>"</string>
     <string name="payphone" msgid="7106361320283710387">"پے فون"</string>
     <string name="launcherActivityLabel" msgid="9034868428899993166">"فون"</string>
+    <string name="camera_privacy_text" msgid="1318954032109938588">"کیمرا کی اجازت فعال ہے"</string>
     <string name="video_call" msgid="8914878391104612532">"ویڈیو کال"</string>
     <string name="call" msgid="3699617769606114168">"کال کریں"</string>
 </resources>
diff --git a/java/com/android/dialer/theme/res/values-uz/strings.xml b/java/com/android/dialer/theme/res/values-uz/strings.xml
index 959ca77..2bbaf20 100644
--- a/java/com/android/dialer/theme/res/values-uz/strings.xml
+++ b/java/com/android/dialer/theme/res/values-uz/strings.xml
@@ -21,6 +21,7 @@
     <string name="unknown_counter" msgid="7452889151953704159">"<xliff:g id="UNKNOWN">%s</xliff:g> <xliff:g id="ID">%d</xliff:g>"</string>
     <string name="payphone" msgid="7106361320283710387">"Taksofon"</string>
     <string name="launcherActivityLabel" msgid="9034868428899993166">"Telefon"</string>
+    <string name="camera_privacy_text" msgid="1318954032109938588">"Kameraga kirishga ruxsat berildi"</string>
     <string name="video_call" msgid="8914878391104612532">"Video suhbat"</string>
     <string name="call" msgid="3699617769606114168">"Chaqirish"</string>
 </resources>
diff --git a/java/com/android/dialer/theme/res/values-vi/strings.xml b/java/com/android/dialer/theme/res/values-vi/strings.xml
index 38bd8ec..fae3180 100644
--- a/java/com/android/dialer/theme/res/values-vi/strings.xml
+++ b/java/com/android/dialer/theme/res/values-vi/strings.xml
@@ -21,6 +21,7 @@
     <string name="unknown_counter" msgid="7452889151953704159">"<xliff:g id="UNKNOWN">%s</xliff:g> <xliff:g id="ID">%d</xliff:g>"</string>
     <string name="payphone" msgid="7106361320283710387">"Điện thoại công cộng"</string>
     <string name="launcherActivityLabel" msgid="9034868428899993166">"Điện thoại"</string>
+    <string name="camera_privacy_text" msgid="1318954032109938588">"Đã bật quyền sử dụng máy ảnh"</string>
     <string name="video_call" msgid="8914878391104612532">"Gọi điện video"</string>
     <string name="call" msgid="3699617769606114168">"Gọi"</string>
 </resources>
diff --git a/java/com/android/dialer/theme/res/values-zh-rCN/strings.xml b/java/com/android/dialer/theme/res/values-zh-rCN/strings.xml
index c80f197..2e60962 100644
--- a/java/com/android/dialer/theme/res/values-zh-rCN/strings.xml
+++ b/java/com/android/dialer/theme/res/values-zh-rCN/strings.xml
@@ -21,6 +21,7 @@
     <string name="unknown_counter" msgid="7452889151953704159">"<xliff:g id="UNKNOWN">%s</xliff:g> <xliff:g id="ID">%d</xliff:g>"</string>
     <string name="payphone" msgid="7106361320283710387">"公用电话"</string>
     <string name="launcherActivityLabel" msgid="9034868428899993166">"电话"</string>
+    <string name="camera_privacy_text" msgid="1318954032109938588">"已启用相机使用权限"</string>
     <string name="video_call" msgid="8914878391104612532">"视频通话"</string>
     <string name="call" msgid="3699617769606114168">"拨打电话"</string>
 </resources>
diff --git a/java/com/android/dialer/theme/res/values-zh-rHK/strings.xml b/java/com/android/dialer/theme/res/values-zh-rHK/strings.xml
index 605089b..7b08024 100644
--- a/java/com/android/dialer/theme/res/values-zh-rHK/strings.xml
+++ b/java/com/android/dialer/theme/res/values-zh-rHK/strings.xml
@@ -21,6 +21,7 @@
     <string name="unknown_counter" msgid="7452889151953704159">"<xliff:g id="UNKNOWN">%s</xliff:g> <xliff:g id="ID">%d</xliff:g>"</string>
     <string name="payphone" msgid="7106361320283710387">"公共電話"</string>
     <string name="launcherActivityLabel" msgid="9034868428899993166">"電話"</string>
+    <string name="camera_privacy_text" msgid="1318954032109938588">"已啟用相機權限"</string>
     <string name="video_call" msgid="8914878391104612532">"視像通話"</string>
     <string name="call" msgid="3699617769606114168">"通話"</string>
 </resources>
diff --git a/java/com/android/dialer/theme/res/values-zh-rTW/strings.xml b/java/com/android/dialer/theme/res/values-zh-rTW/strings.xml
index 7a5604c..57d7fe2 100644
--- a/java/com/android/dialer/theme/res/values-zh-rTW/strings.xml
+++ b/java/com/android/dialer/theme/res/values-zh-rTW/strings.xml
@@ -21,6 +21,7 @@
     <string name="unknown_counter" msgid="7452889151953704159">"<xliff:g id="UNKNOWN">%s</xliff:g> <xliff:g id="ID">%d</xliff:g>"</string>
     <string name="payphone" msgid="7106361320283710387">"公用電話"</string>
     <string name="launcherActivityLabel" msgid="9034868428899993166">"電話"</string>
+    <string name="camera_privacy_text" msgid="1318954032109938588">"已啟用相機權限"</string>
     <string name="video_call" msgid="8914878391104612532">"視訊通話"</string>
     <string name="call" msgid="3699617769606114168">"撥號"</string>
 </resources>
diff --git a/java/com/android/dialer/theme/res/values-zu/strings.xml b/java/com/android/dialer/theme/res/values-zu/strings.xml
index ae07c45..d0dd728 100644
--- a/java/com/android/dialer/theme/res/values-zu/strings.xml
+++ b/java/com/android/dialer/theme/res/values-zu/strings.xml
@@ -21,6 +21,7 @@
     <string name="unknown_counter" msgid="7452889151953704159">"<xliff:g id="UNKNOWN">%s</xliff:g> <xliff:g id="ID">%d</xliff:g>"</string>
     <string name="payphone" msgid="7106361320283710387">"Ucingo olufakwa imali"</string>
     <string name="launcherActivityLabel" msgid="9034868428899993166">"Ifoni"</string>
+    <string name="camera_privacy_text" msgid="1318954032109938588">"Imvume yekhamera inikwe amandla"</string>
     <string name="video_call" msgid="8914878391104612532">"Ikholi yevidiyo"</string>
     <string name="call" msgid="3699617769606114168">"Shaya"</string>
 </resources>
diff --git a/java/com/android/dialer/util/DialerUtils.java b/java/com/android/dialer/util/DialerUtils.java
index 63f870e..f38c650 100644
--- a/java/com/android/dialer/util/DialerUtils.java
+++ b/java/com/android/dialer/util/DialerUtils.java
@@ -38,6 +38,7 @@
 import android.widget.Toast;
 import com.android.dialer.common.Assert;
 import com.android.dialer.common.LogUtil;
+import com.android.dialer.storage.StorageComponent;
 import com.android.dialer.telecom.TelecomUtil;
 import java.io.File;
 import java.util.Iterator;
@@ -233,14 +234,9 @@
   public static SharedPreferences getDefaultSharedPreferenceForDeviceProtectedStorageContext(
       @NonNull Context context) {
     Assert.isNotNull(context);
-    Context deviceProtectedContext =
-        ContextCompat.isDeviceProtectedStorage(context)
-            ? context
-            : ContextCompat.createDeviceProtectedStorageContext(context);
-    // ContextCompat.createDeviceProtectedStorageContext(context) returns null on pre-N, thus fall
-    // back to regular default shared preference for pre-N devices since devices protected context
-    // is not available.
-    return PreferenceManager.getDefaultSharedPreferences(
-        deviceProtectedContext != null ? deviceProtectedContext : context);
+    if (ContextCompat.isDeviceProtectedStorage(context)) {
+      return PreferenceManager.getDefaultSharedPreferences(context);
+    }
+    return StorageComponent.get(context.getApplicationContext()).deviceProtectedSharedPreferences();
   }
 }
diff --git a/java/com/android/dialer/util/IntentUtil.java b/java/com/android/dialer/util/IntentUtil.java
index 2f265b5..f453966 100644
--- a/java/com/android/dialer/util/IntentUtil.java
+++ b/java/com/android/dialer/util/IntentUtil.java
@@ -31,7 +31,8 @@
   }
 
   public static Intent getNewContactIntent() {
-    return new Intent(Intent.ACTION_INSERT, ContactsContract.Contacts.CONTENT_URI);
+    return new Intent(Intent.ACTION_INSERT, ContactsContract.Contacts.CONTENT_URI)
+        .addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
   }
 
   public static Intent getNewContactIntent(CharSequence phoneNumber) {
diff --git a/java/com/android/contacts/common/util/UriUtils.java b/java/com/android/dialer/util/UriUtils.java
similarity index 94%
rename from java/com/android/contacts/common/util/UriUtils.java
rename to java/com/android/dialer/util/UriUtils.java
index 4690942..c4308a8 100644
--- a/java/com/android/contacts/common/util/UriUtils.java
+++ b/java/com/android/dialer/util/UriUtils.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.contacts.common.util;
+package com.android.dialer.util;
 
 import android.net.Uri;
 import android.provider.ContactsContract;
@@ -23,6 +23,8 @@
 /** Utility methods for dealing with URIs. */
 public class UriUtils {
 
+  private static final String LOOKUP_URI_ENCODED = "encoded";
+
   /** Static helper, not instantiable. */
   private UriUtils() {}
 
@@ -58,7 +60,7 @@
     if (lastPathSegment == null) {
       return false;
     }
-    return lastPathSegment.equals(Constants.LOOKUP_URI_ENCODED);
+    return lastPathSegment.equals(LOOKUP_URI_ENCODED);
   }
 
   /**
diff --git a/java/com/android/dialer/util/res/values-af/strings.xml b/java/com/android/dialer/util/res/values-af/strings.xml
index 3b67807..7457e9b 100644
--- a/java/com/android/dialer/util/res/values-af/strings.xml
+++ b/java/com/android/dialer/util/res/values-af/strings.xml
@@ -23,6 +23,4 @@
     <string name="activity_not_available" msgid="8360067109103762211">"Geen program daarvoor op hierdie toestel nie"</string>
     <string name="outgoing_wps_warning" msgid="7505673114152005234">"As jy \'n WPS-oproep maak, sal dit jou huidige oproep afsny."</string>
     <string name="dialog_continue" msgid="4070630558441163574">"Gaan voort"</string>
-    <!-- no translation found for camera_privacy_text (4268584469444688293) -->
-    <skip />
 </resources>
diff --git a/java/com/android/dialer/util/res/values-am/strings.xml b/java/com/android/dialer/util/res/values-am/strings.xml
index d3418b4..18fcb56 100644
--- a/java/com/android/dialer/util/res/values-am/strings.xml
+++ b/java/com/android/dialer/util/res/values-am/strings.xml
@@ -23,6 +23,4 @@
     <string name="activity_not_available" msgid="8360067109103762211">"ለዚያ የሚሆን መተግበሪያ በዚህ መሣሪያ ላይ የለም"</string>
     <string name="outgoing_wps_warning" msgid="7505673114152005234">"የWPS ጥሪ ማድረግ አሁን ያለውን ጥሪዎን ያቋርጠዋል።"</string>
     <string name="dialog_continue" msgid="4070630558441163574">"ቀጥል"</string>
-    <!-- no translation found for camera_privacy_text (4268584469444688293) -->
-    <skip />
 </resources>
diff --git a/java/com/android/dialer/util/res/values-ar/strings.xml b/java/com/android/dialer/util/res/values-ar/strings.xml
index 13a5235..8f25fb5 100644
--- a/java/com/android/dialer/util/res/values-ar/strings.xml
+++ b/java/com/android/dialer/util/res/values-ar/strings.xml
@@ -23,6 +23,4 @@
     <string name="activity_not_available" msgid="8360067109103762211">"لا يوجد تطبيق لإجراء ذلك على هذا الجهاز"</string>
     <string name="outgoing_wps_warning" msgid="7505673114152005234">"‏سيؤدي إجراء مكالمة WPS إلى قطع اتصال مكالماتك الحالية."</string>
     <string name="dialog_continue" msgid="4070630558441163574">"متابعة"</string>
-    <!-- no translation found for camera_privacy_text (4268584469444688293) -->
-    <skip />
 </resources>
diff --git a/java/com/android/dialer/util/res/values-az/strings.xml b/java/com/android/dialer/util/res/values-az/strings.xml
index 3b66741..ffe8ec5 100644
--- a/java/com/android/dialer/util/res/values-az/strings.xml
+++ b/java/com/android/dialer/util/res/values-az/strings.xml
@@ -23,6 +23,4 @@
     <string name="activity_not_available" msgid="8360067109103762211">"Bu cihazda onun üçün heç bir proqram yoxdur"</string>
     <string name="outgoing_wps_warning" msgid="7505673114152005234">"WPS zənginin edilməsi mövcud zənginizi sonlandıracaq."</string>
     <string name="dialog_continue" msgid="4070630558441163574">"Davam edin"</string>
-    <!-- no translation found for camera_privacy_text (4268584469444688293) -->
-    <skip />
 </resources>
diff --git a/java/com/android/dialer/util/res/values-b+sr+Latn/strings.xml b/java/com/android/dialer/util/res/values-b+sr+Latn/strings.xml
index 803c954..8f16f82 100644
--- a/java/com/android/dialer/util/res/values-b+sr+Latn/strings.xml
+++ b/java/com/android/dialer/util/res/values-b+sr+Latn/strings.xml
@@ -23,6 +23,4 @@
     <string name="activity_not_available" msgid="8360067109103762211">"Na ovom uređaju nema aplikacija za to"</string>
     <string name="outgoing_wps_warning" msgid="7505673114152005234">"Ako uputite WPS poziv, prekinućete postojeći poziv."</string>
     <string name="dialog_continue" msgid="4070630558441163574">"Nastavi"</string>
-    <!-- no translation found for camera_privacy_text (4268584469444688293) -->
-    <skip />
 </resources>
diff --git a/java/com/android/dialer/util/res/values-be/strings.xml b/java/com/android/dialer/util/res/values-be/strings.xml
index 120247f..f88ca19 100644
--- a/java/com/android/dialer/util/res/values-be/strings.xml
+++ b/java/com/android/dialer/util/res/values-be/strings.xml
@@ -23,6 +23,4 @@
     <string name="activity_not_available" msgid="8360067109103762211">"На прыладзе няма праграмы для гэтага"</string>
     <string name="outgoing_wps_warning" msgid="7505673114152005234">"Выкананне выкліку WPS прывядзе да раз\'яднання бягучага выкліку."</string>
     <string name="dialog_continue" msgid="4070630558441163574">"Працягнуць"</string>
-    <!-- no translation found for camera_privacy_text (4268584469444688293) -->
-    <skip />
 </resources>
diff --git a/java/com/android/dialer/util/res/values-bg/strings.xml b/java/com/android/dialer/util/res/values-bg/strings.xml
index 3a425ab..44bb00f 100644
--- a/java/com/android/dialer/util/res/values-bg/strings.xml
+++ b/java/com/android/dialer/util/res/values-bg/strings.xml
@@ -23,6 +23,4 @@
     <string name="activity_not_available" msgid="8360067109103762211">"На устройството няма приложение за това действие"</string>
     <string name="outgoing_wps_warning" msgid="7505673114152005234">"Ако извършите обаждане през WPS, текущото ви обаждане ще бъде прекъснато."</string>
     <string name="dialog_continue" msgid="4070630558441163574">"Напред"</string>
-    <!-- no translation found for camera_privacy_text (4268584469444688293) -->
-    <skip />
 </resources>
diff --git a/java/com/android/dialer/util/res/values-bn/strings.xml b/java/com/android/dialer/util/res/values-bn/strings.xml
index 186b341..769c3c2 100644
--- a/java/com/android/dialer/util/res/values-bn/strings.xml
+++ b/java/com/android/dialer/util/res/values-bn/strings.xml
@@ -23,6 +23,4 @@
     <string name="activity_not_available" msgid="8360067109103762211">"এর জন্য এই ডিভাইসে কোনো অ্যাপ্লিকেশান নেই"</string>
     <string name="outgoing_wps_warning" msgid="7505673114152005234">"একটি WPS কল করা হলে তা আপনার বিদ্যমান কলটি কেটে দেবে৷"</string>
     <string name="dialog_continue" msgid="4070630558441163574">"চালিয়ে যান"</string>
-    <!-- no translation found for camera_privacy_text (4268584469444688293) -->
-    <skip />
 </resources>
diff --git a/java/com/android/dialer/util/res/values-bs/strings.xml b/java/com/android/dialer/util/res/values-bs/strings.xml
index e000c5f..a36bd98 100644
--- a/java/com/android/dialer/util/res/values-bs/strings.xml
+++ b/java/com/android/dialer/util/res/values-bs/strings.xml
@@ -23,6 +23,4 @@
     <string name="activity_not_available" msgid="8360067109103762211">"Na ovom uređaju nema aplikacije za to"</string>
     <string name="outgoing_wps_warning" msgid="7505673114152005234">"Upućivanje WPS poziva prekinut će trenutni poziv."</string>
     <string name="dialog_continue" msgid="4070630558441163574">"Nastavi"</string>
-    <!-- no translation found for camera_privacy_text (4268584469444688293) -->
-    <skip />
 </resources>
diff --git a/java/com/android/dialer/util/res/values-ca/strings.xml b/java/com/android/dialer/util/res/values-ca/strings.xml
index 8b6b2da..c2a661f 100644
--- a/java/com/android/dialer/util/res/values-ca/strings.xml
+++ b/java/com/android/dialer/util/res/values-ca/strings.xml
@@ -23,6 +23,4 @@
     <string name="activity_not_available" msgid="8360067109103762211">"No hi ha cap aplicació per a això en aquest dispositiu."</string>
     <string name="outgoing_wps_warning" msgid="7505673114152005234">"En fer una trucada WPS, es desconnectarà la trucada en curs."</string>
     <string name="dialog_continue" msgid="4070630558441163574">"Continua"</string>
-    <!-- no translation found for camera_privacy_text (4268584469444688293) -->
-    <skip />
 </resources>
diff --git a/java/com/android/dialer/util/res/values-cs/strings.xml b/java/com/android/dialer/util/res/values-cs/strings.xml
index 0e74288..d7de840 100644
--- a/java/com/android/dialer/util/res/values-cs/strings.xml
+++ b/java/com/android/dialer/util/res/values-cs/strings.xml
@@ -23,6 +23,4 @@
     <string name="activity_not_available" msgid="8360067109103762211">"Pro tuto akci v zařízení nemáte žádnou aplikaci."</string>
     <string name="outgoing_wps_warning" msgid="7505673114152005234">"Zahájením hovoru WPS odpojíte probíhající hovor."</string>
     <string name="dialog_continue" msgid="4070630558441163574">"Pokračovat"</string>
-    <!-- no translation found for camera_privacy_text (4268584469444688293) -->
-    <skip />
 </resources>
diff --git a/java/com/android/dialer/util/res/values-da/strings.xml b/java/com/android/dialer/util/res/values-da/strings.xml
index d38292f..555bb69 100644
--- a/java/com/android/dialer/util/res/values-da/strings.xml
+++ b/java/com/android/dialer/util/res/values-da/strings.xml
@@ -23,6 +23,4 @@
     <string name="activity_not_available" msgid="8360067109103762211">"Der findes Ingen app til det på denne enhed"</string>
     <string name="outgoing_wps_warning" msgid="7505673114152005234">"Hvis du foretager et WPS-opkald, afsluttes dit nuværende opkald."</string>
     <string name="dialog_continue" msgid="4070630558441163574">"Fortsæt"</string>
-    <!-- no translation found for camera_privacy_text (4268584469444688293) -->
-    <skip />
 </resources>
diff --git a/java/com/android/dialer/util/res/values-de/strings.xml b/java/com/android/dialer/util/res/values-de/strings.xml
index dc23b32..7d154b6 100644
--- a/java/com/android/dialer/util/res/values-de/strings.xml
+++ b/java/com/android/dialer/util/res/values-de/strings.xml
@@ -23,6 +23,4 @@
     <string name="activity_not_available" msgid="8360067109103762211">"Keine entsprechende App auf diesem Gerät"</string>
     <string name="outgoing_wps_warning" msgid="7505673114152005234">"Wenn du jetzt einen Anruf über WPS tätigst, wird deine bestehende Verbindung getrennt."</string>
     <string name="dialog_continue" msgid="4070630558441163574">"Weiter"</string>
-    <!-- no translation found for camera_privacy_text (4268584469444688293) -->
-    <skip />
 </resources>
diff --git a/java/com/android/dialer/util/res/values-el/strings.xml b/java/com/android/dialer/util/res/values-el/strings.xml
index 996cb2a..efbdc4e 100644
--- a/java/com/android/dialer/util/res/values-el/strings.xml
+++ b/java/com/android/dialer/util/res/values-el/strings.xml
@@ -23,6 +23,4 @@
     <string name="activity_not_available" msgid="8360067109103762211">"Δεν υπάρχει εφαρμογή γι\' αυτήν την ενέργεια σε αυτήν τη συσκευή"</string>
     <string name="outgoing_wps_warning" msgid="7505673114152005234">"Η διενέργεια κλήσης μέσω WPS θα αποσυνδέσει την υφιστάμενη κλήση."</string>
     <string name="dialog_continue" msgid="4070630558441163574">"Συνέχεια"</string>
-    <!-- no translation found for camera_privacy_text (4268584469444688293) -->
-    <skip />
 </resources>
diff --git a/java/com/android/dialer/util/res/values-en-rAU/strings.xml b/java/com/android/dialer/util/res/values-en-rAU/strings.xml
index 3cdf170..545a2a8 100644
--- a/java/com/android/dialer/util/res/values-en-rAU/strings.xml
+++ b/java/com/android/dialer/util/res/values-en-rAU/strings.xml
@@ -23,6 +23,4 @@
     <string name="activity_not_available" msgid="8360067109103762211">"No app for that on this device"</string>
     <string name="outgoing_wps_warning" msgid="7505673114152005234">"Placing a WPS call will disconnect your existing call."</string>
     <string name="dialog_continue" msgid="4070630558441163574">"Continue"</string>
-    <!-- no translation found for camera_privacy_text (4268584469444688293) -->
-    <skip />
 </resources>
diff --git a/java/com/android/dialer/util/res/values-en-rGB/strings.xml b/java/com/android/dialer/util/res/values-en-rGB/strings.xml
index 3cdf170..545a2a8 100644
--- a/java/com/android/dialer/util/res/values-en-rGB/strings.xml
+++ b/java/com/android/dialer/util/res/values-en-rGB/strings.xml
@@ -23,6 +23,4 @@
     <string name="activity_not_available" msgid="8360067109103762211">"No app for that on this device"</string>
     <string name="outgoing_wps_warning" msgid="7505673114152005234">"Placing a WPS call will disconnect your existing call."</string>
     <string name="dialog_continue" msgid="4070630558441163574">"Continue"</string>
-    <!-- no translation found for camera_privacy_text (4268584469444688293) -->
-    <skip />
 </resources>
diff --git a/java/com/android/dialer/util/res/values-en-rIN/strings.xml b/java/com/android/dialer/util/res/values-en-rIN/strings.xml
index 3cdf170..545a2a8 100644
--- a/java/com/android/dialer/util/res/values-en-rIN/strings.xml
+++ b/java/com/android/dialer/util/res/values-en-rIN/strings.xml
@@ -23,6 +23,4 @@
     <string name="activity_not_available" msgid="8360067109103762211">"No app for that on this device"</string>
     <string name="outgoing_wps_warning" msgid="7505673114152005234">"Placing a WPS call will disconnect your existing call."</string>
     <string name="dialog_continue" msgid="4070630558441163574">"Continue"</string>
-    <!-- no translation found for camera_privacy_text (4268584469444688293) -->
-    <skip />
 </resources>
diff --git a/java/com/android/dialer/util/res/values-es-rUS/strings.xml b/java/com/android/dialer/util/res/values-es-rUS/strings.xml
index e9c8631..4aa0725 100644
--- a/java/com/android/dialer/util/res/values-es-rUS/strings.xml
+++ b/java/com/android/dialer/util/res/values-es-rUS/strings.xml
@@ -23,6 +23,4 @@
     <string name="activity_not_available" msgid="8360067109103762211">"No hay una aplicación para esa acción en este dispositivo."</string>
     <string name="outgoing_wps_warning" msgid="7505673114152005234">"Realizar una llamada de WPS desconectará tu llamada existente."</string>
     <string name="dialog_continue" msgid="4070630558441163574">"Continuar"</string>
-    <!-- no translation found for camera_privacy_text (4268584469444688293) -->
-    <skip />
 </resources>
diff --git a/java/com/android/dialer/util/res/values-es/strings.xml b/java/com/android/dialer/util/res/values-es/strings.xml
index 0672f65..6c92947 100644
--- a/java/com/android/dialer/util/res/values-es/strings.xml
+++ b/java/com/android/dialer/util/res/values-es/strings.xml
@@ -23,6 +23,4 @@
     <string name="activity_not_available" msgid="8360067109103762211">"No hay aplicaciones para esa acción en este dispositivo"</string>
     <string name="outgoing_wps_warning" msgid="7505673114152005234">"Al hacer una llamada WPS, se finalizará tu llamada actual."</string>
     <string name="dialog_continue" msgid="4070630558441163574">"Continuar"</string>
-    <!-- no translation found for camera_privacy_text (4268584469444688293) -->
-    <skip />
 </resources>
diff --git a/java/com/android/dialer/util/res/values-et/strings.xml b/java/com/android/dialer/util/res/values-et/strings.xml
index 20429fb..465d2b4 100644
--- a/java/com/android/dialer/util/res/values-et/strings.xml
+++ b/java/com/android/dialer/util/res/values-et/strings.xml
@@ -23,6 +23,4 @@
     <string name="activity_not_available" msgid="8360067109103762211">"Seadmes pole selleks sobilikku rakendust"</string>
     <string name="outgoing_wps_warning" msgid="7505673114152005234">"WPS-kõne tegemisel katkestatakse teie praegune kõne."</string>
     <string name="dialog_continue" msgid="4070630558441163574">"Jätka"</string>
-    <!-- no translation found for camera_privacy_text (4268584469444688293) -->
-    <skip />
 </resources>
diff --git a/java/com/android/dialer/util/res/values-eu/strings.xml b/java/com/android/dialer/util/res/values-eu/strings.xml
index 89b35c2..ba434ce 100644
--- a/java/com/android/dialer/util/res/values-eu/strings.xml
+++ b/java/com/android/dialer/util/res/values-eu/strings.xml
@@ -23,6 +23,4 @@
     <string name="activity_not_available" msgid="8360067109103762211">"Ez dago hori egin dezakeen aplikaziorik gailu honetan"</string>
     <string name="outgoing_wps_warning" msgid="7505673114152005234">"WPS dei bat egiten baduzu, eten egingo da uneko deia."</string>
     <string name="dialog_continue" msgid="4070630558441163574">"Jarraitu"</string>
-    <!-- no translation found for camera_privacy_text (4268584469444688293) -->
-    <skip />
 </resources>
diff --git a/java/com/android/dialer/util/res/values-fa/strings.xml b/java/com/android/dialer/util/res/values-fa/strings.xml
index c98fdc9..c22c386 100644
--- a/java/com/android/dialer/util/res/values-fa/strings.xml
+++ b/java/com/android/dialer/util/res/values-fa/strings.xml
@@ -23,6 +23,4 @@
     <string name="activity_not_available" msgid="8360067109103762211">"هیچ برنامه‌ای برای انجام این کار در این دستگاه نصب نیست"</string>
     <string name="outgoing_wps_warning" msgid="7505673114152005234">"‏اگر تماس WPS برقرار کنید، تماس فعلی‌تان قطع می‌شود."</string>
     <string name="dialog_continue" msgid="4070630558441163574">"ادامه"</string>
-    <!-- no translation found for camera_privacy_text (4268584469444688293) -->
-    <skip />
 </resources>
diff --git a/java/com/android/dialer/util/res/values-fi/strings.xml b/java/com/android/dialer/util/res/values-fi/strings.xml
index 58494d1..237232f 100644
--- a/java/com/android/dialer/util/res/values-fi/strings.xml
+++ b/java/com/android/dialer/util/res/values-fi/strings.xml
@@ -23,6 +23,4 @@
     <string name="activity_not_available" msgid="8360067109103762211">"Laitteessa ei ole kyseiseen toimintoon tarvittavaa sovellusta"</string>
     <string name="outgoing_wps_warning" msgid="7505673114152005234">"WPS-puhelun soittaminen katkaisee meneillään olevan puhelun."</string>
     <string name="dialog_continue" msgid="4070630558441163574">"Jatka"</string>
-    <!-- no translation found for camera_privacy_text (4268584469444688293) -->
-    <skip />
 </resources>
diff --git a/java/com/android/dialer/util/res/values-fr-rCA/strings.xml b/java/com/android/dialer/util/res/values-fr-rCA/strings.xml
index e82fb5d..1d73fcf 100644
--- a/java/com/android/dialer/util/res/values-fr-rCA/strings.xml
+++ b/java/com/android/dialer/util/res/values-fr-rCA/strings.xml
@@ -23,6 +23,4 @@
     <string name="activity_not_available" msgid="8360067109103762211">"Cette action ne peut être effectuée par aucune application sur cet appareil."</string>
     <string name="outgoing_wps_warning" msgid="7505673114152005234">"Si vous faites un appel WPS, vous déconnecterez l\'appel en cours."</string>
     <string name="dialog_continue" msgid="4070630558441163574">"Continuer"</string>
-    <!-- no translation found for camera_privacy_text (4268584469444688293) -->
-    <skip />
 </resources>
diff --git a/java/com/android/dialer/util/res/values-fr/strings.xml b/java/com/android/dialer/util/res/values-fr/strings.xml
index 3e411d3..48f1dbb 100644
--- a/java/com/android/dialer/util/res/values-fr/strings.xml
+++ b/java/com/android/dialer/util/res/values-fr/strings.xml
@@ -23,6 +23,4 @@
     <string name="activity_not_available" msgid="8360067109103762211">"Cette action ne peut être effectuée via aucune application sur cet appareil."</string>
     <string name="outgoing_wps_warning" msgid="7505673114152005234">"L\'émission d\'un appel WPS mettra fin à l\'appel en cours."</string>
     <string name="dialog_continue" msgid="4070630558441163574">"Continuer"</string>
-    <!-- no translation found for camera_privacy_text (4268584469444688293) -->
-    <skip />
 </resources>
diff --git a/java/com/android/dialer/util/res/values-gl/strings.xml b/java/com/android/dialer/util/res/values-gl/strings.xml
index c5b5448..8cdcffa 100644
--- a/java/com/android/dialer/util/res/values-gl/strings.xml
+++ b/java/com/android/dialer/util/res/values-gl/strings.xml
@@ -23,6 +23,4 @@
     <string name="activity_not_available" msgid="8360067109103762211">"Non hai ningunha aplicación para esa acción neste dispositivo"</string>
     <string name="outgoing_wps_warning" msgid="7505673114152005234">"Se realizas unha chamada WPS, desconectarase a túa chamada actual."</string>
     <string name="dialog_continue" msgid="4070630558441163574">"Continuar"</string>
-    <!-- no translation found for camera_privacy_text (4268584469444688293) -->
-    <skip />
 </resources>
diff --git a/java/com/android/dialer/util/res/values-gu/strings.xml b/java/com/android/dialer/util/res/values-gu/strings.xml
index e3342b1..ee4b592 100644
--- a/java/com/android/dialer/util/res/values-gu/strings.xml
+++ b/java/com/android/dialer/util/res/values-gu/strings.xml
@@ -23,6 +23,4 @@
     <string name="activity_not_available" msgid="8360067109103762211">"આ ઉપકરણ પર તે માટે કોઈ ઍપ્લિકેશન નથી"</string>
     <string name="outgoing_wps_warning" msgid="7505673114152005234">"WPS કૉલ કરવાનું તમારા અસ્તિત્વમાંના કૉલને ડિસ્કનેક્ટ કરશે."</string>
     <string name="dialog_continue" msgid="4070630558441163574">"ચાલુ રાખો"</string>
-    <!-- no translation found for camera_privacy_text (4268584469444688293) -->
-    <skip />
 </resources>
diff --git a/java/com/android/dialer/util/res/values-hi/strings.xml b/java/com/android/dialer/util/res/values-hi/strings.xml
index 08d52c7..9a1bc35 100644
--- a/java/com/android/dialer/util/res/values-hi/strings.xml
+++ b/java/com/android/dialer/util/res/values-hi/strings.xml
@@ -23,6 +23,4 @@
     <string name="activity_not_available" msgid="8360067109103762211">"उसके लिए इस डिवाइस पर कोई एेप नहीं है"</string>
     <string name="outgoing_wps_warning" msgid="7505673114152005234">"WPS कॉल करने से आपका मौजूदा कॉल डिसकनेक्ट हो जाएगा."</string>
     <string name="dialog_continue" msgid="4070630558441163574">"जारी रखें"</string>
-    <!-- no translation found for camera_privacy_text (4268584469444688293) -->
-    <skip />
 </resources>
diff --git a/java/com/android/dialer/util/res/values-hr/strings.xml b/java/com/android/dialer/util/res/values-hr/strings.xml
index 16964ba..1fc54da 100644
--- a/java/com/android/dialer/util/res/values-hr/strings.xml
+++ b/java/com/android/dialer/util/res/values-hr/strings.xml
@@ -23,6 +23,4 @@
     <string name="activity_not_available" msgid="8360067109103762211">"Na ovom uređaju nema aplikacije za to"</string>
     <string name="outgoing_wps_warning" msgid="7505673114152005234">"Uspostavljanje WPS poziva prekinut će postojeći poziv."</string>
     <string name="dialog_continue" msgid="4070630558441163574">"Nastavi"</string>
-    <!-- no translation found for camera_privacy_text (4268584469444688293) -->
-    <skip />
 </resources>
diff --git a/java/com/android/dialer/util/res/values-hu/strings.xml b/java/com/android/dialer/util/res/values-hu/strings.xml
index 5c50382..ad5f29d 100644
--- a/java/com/android/dialer/util/res/values-hu/strings.xml
+++ b/java/com/android/dialer/util/res/values-hu/strings.xml
@@ -23,6 +23,4 @@
     <string name="activity_not_available" msgid="8360067109103762211">"Nincs megfelelő alkalmazás a művelethez ezen az eszközön"</string>
     <string name="outgoing_wps_warning" msgid="7505673114152005234">"WPS-hívás indításával megszakítja a folyamatban lévő hívást."</string>
     <string name="dialog_continue" msgid="4070630558441163574">"Folytatás"</string>
-    <!-- no translation found for camera_privacy_text (4268584469444688293) -->
-    <skip />
 </resources>
diff --git a/java/com/android/dialer/util/res/values-hy/strings.xml b/java/com/android/dialer/util/res/values-hy/strings.xml
index 8a2c75e..18f2001 100644
--- a/java/com/android/dialer/util/res/values-hy/strings.xml
+++ b/java/com/android/dialer/util/res/values-hy/strings.xml
@@ -23,6 +23,4 @@
     <string name="activity_not_available" msgid="8360067109103762211">"Սարքի վրա համապատասխան հավելված չկա"</string>
     <string name="outgoing_wps_warning" msgid="7505673114152005234">"Եթե WPS-ի միջոցով զանգ կատարեք, ձեր ընթացիկ զանգը կընդհատվի:"</string>
     <string name="dialog_continue" msgid="4070630558441163574">"Շարունակել"</string>
-    <!-- no translation found for camera_privacy_text (4268584469444688293) -->
-    <skip />
 </resources>
diff --git a/java/com/android/dialer/util/res/values-in/strings.xml b/java/com/android/dialer/util/res/values-in/strings.xml
index 8abd5fb..55a5e3e 100644
--- a/java/com/android/dialer/util/res/values-in/strings.xml
+++ b/java/com/android/dialer/util/res/values-in/strings.xml
@@ -23,6 +23,4 @@
     <string name="activity_not_available" msgid="8360067109103762211">"Tidak ada aplikasi untuk tindakan tersebut di perangkat ini"</string>
     <string name="outgoing_wps_warning" msgid="7505673114152005234">"Melakukan panggilan WPS akan mengakhiri panggilan yang ada."</string>
     <string name="dialog_continue" msgid="4070630558441163574">"Lanjutkan"</string>
-    <!-- no translation found for camera_privacy_text (4268584469444688293) -->
-    <skip />
 </resources>
diff --git a/java/com/android/dialer/util/res/values-is/strings.xml b/java/com/android/dialer/util/res/values-is/strings.xml
index 8ba1a2d..e6615e3 100644
--- a/java/com/android/dialer/util/res/values-is/strings.xml
+++ b/java/com/android/dialer/util/res/values-is/strings.xml
@@ -23,6 +23,4 @@
     <string name="activity_not_available" msgid="8360067109103762211">"Ekkert forrit fyrir þetta er í tækinu"</string>
     <string name="outgoing_wps_warning" msgid="7505673114152005234">"Ef þú hringir WPS-símtal slitnar núverandi símtal."</string>
     <string name="dialog_continue" msgid="4070630558441163574">"Áfram"</string>
-    <!-- no translation found for camera_privacy_text (4268584469444688293) -->
-    <skip />
 </resources>
diff --git a/java/com/android/dialer/util/res/values-it/strings.xml b/java/com/android/dialer/util/res/values-it/strings.xml
index 3ef5f83..3ed55c6 100644
--- a/java/com/android/dialer/util/res/values-it/strings.xml
+++ b/java/com/android/dialer/util/res/values-it/strings.xml
@@ -23,6 +23,4 @@
     <string name="activity_not_available" msgid="8360067109103762211">"Sul dispositivo non sono presenti app per tale azione"</string>
     <string name="outgoing_wps_warning" msgid="7505673114152005234">"Se effettui una chiamata WPS, la chiamata esistente verrà disconnessa."</string>
     <string name="dialog_continue" msgid="4070630558441163574">"Continua"</string>
-    <!-- no translation found for camera_privacy_text (4268584469444688293) -->
-    <skip />
 </resources>
diff --git a/java/com/android/dialer/util/res/values-iw/strings.xml b/java/com/android/dialer/util/res/values-iw/strings.xml
index 8863eb6..5a1062d 100644
--- a/java/com/android/dialer/util/res/values-iw/strings.xml
+++ b/java/com/android/dialer/util/res/values-iw/strings.xml
@@ -23,6 +23,4 @@
     <string name="activity_not_available" msgid="8360067109103762211">"אין אפליקציה עבור הפעולה הזו במכשיר הזה"</string>
     <string name="outgoing_wps_warning" msgid="7505673114152005234">"התקשרות באמצעות השירות האלחוטי המועדף תנתק את השיחה הנוכחית."</string>
     <string name="dialog_continue" msgid="4070630558441163574">"המשך"</string>
-    <!-- no translation found for camera_privacy_text (4268584469444688293) -->
-    <skip />
 </resources>
diff --git a/java/com/android/dialer/util/res/values-ja/strings.xml b/java/com/android/dialer/util/res/values-ja/strings.xml
index a447ee9..78986b1 100644
--- a/java/com/android/dialer/util/res/values-ja/strings.xml
+++ b/java/com/android/dialer/util/res/values-ja/strings.xml
@@ -23,6 +23,4 @@
     <string name="activity_not_available" msgid="8360067109103762211">"この操作を行うアプリが端末上にありません"</string>
     <string name="outgoing_wps_warning" msgid="7505673114152005234">"WPS で通話を発信すると現在の通話が切断されます。"</string>
     <string name="dialog_continue" msgid="4070630558441163574">"次へ"</string>
-    <!-- no translation found for camera_privacy_text (4268584469444688293) -->
-    <skip />
 </resources>
diff --git a/java/com/android/dialer/util/res/values-ka/strings.xml b/java/com/android/dialer/util/res/values-ka/strings.xml
index 379e3b3..13e7ad0 100644
--- a/java/com/android/dialer/util/res/values-ka/strings.xml
+++ b/java/com/android/dialer/util/res/values-ka/strings.xml
@@ -23,6 +23,4 @@
     <string name="activity_not_available" msgid="8360067109103762211">"ამ მოწყობილობაზე არ არის შესაბამისი აპლიკაცია"</string>
     <string name="outgoing_wps_warning" msgid="7505673114152005234">"WPS ზარის განხორციელება თქვენს მიმდინარე ზარს გათიშავს."</string>
     <string name="dialog_continue" msgid="4070630558441163574">"გაგრძელება"</string>
-    <!-- no translation found for camera_privacy_text (4268584469444688293) -->
-    <skip />
 </resources>
diff --git a/java/com/android/dialer/util/res/values-kk/strings.xml b/java/com/android/dialer/util/res/values-kk/strings.xml
index 8683b85..49b6091 100644
--- a/java/com/android/dialer/util/res/values-kk/strings.xml
+++ b/java/com/android/dialer/util/res/values-kk/strings.xml
@@ -23,6 +23,4 @@
     <string name="activity_not_available" msgid="8360067109103762211">"Бұл үшін осы құрылғыда қолданба жоқ"</string>
     <string name="outgoing_wps_warning" msgid="7505673114152005234">"WPS қоңырауын шалу қазіргі қоңырауды тоқтатады."</string>
     <string name="dialog_continue" msgid="4070630558441163574">"Жалғастыру"</string>
-    <!-- no translation found for camera_privacy_text (4268584469444688293) -->
-    <skip />
 </resources>
diff --git a/java/com/android/dialer/util/res/values-km/strings.xml b/java/com/android/dialer/util/res/values-km/strings.xml
index 37cd045..f55fdf5 100644
--- a/java/com/android/dialer/util/res/values-km/strings.xml
+++ b/java/com/android/dialer/util/res/values-km/strings.xml
@@ -23,6 +23,4 @@
     <string name="activity_not_available" msgid="8360067109103762211">"មិនមានកម្មវិធីសម្រាប់សកម្មភាពនេះនៅលើឧបករណ៍នេះទេ"</string>
     <string name="outgoing_wps_warning" msgid="7505673114152005234">"ការ​ហៅ​ចេញ​​ដោយ​ប្រើ​សេវា WPS នឹង​ផ្ដាច់​ការ​ហៅ​ដែល​មាន​​របស់​អ្នក។"</string>
     <string name="dialog_continue" msgid="4070630558441163574">"បន្ត"</string>
-    <!-- no translation found for camera_privacy_text (4268584469444688293) -->
-    <skip />
 </resources>
diff --git a/java/com/android/dialer/util/res/values-kn/strings.xml b/java/com/android/dialer/util/res/values-kn/strings.xml
index 8fc851b..d6de0f8 100644
--- a/java/com/android/dialer/util/res/values-kn/strings.xml
+++ b/java/com/android/dialer/util/res/values-kn/strings.xml
@@ -23,6 +23,4 @@
     <string name="activity_not_available" msgid="8360067109103762211">"ಈ ಸಾಧನದಲ್ಲಿ ಅದಕ್ಕಾಗಿ ಯಾವುದೇ ಅಪ್ಲಿಕೇಶನ್‌ಗಳಿಲ್ಲ"</string>
     <string name="outgoing_wps_warning" msgid="7505673114152005234">"WPS ಕರೆ ಅನ್ನು ಮಾಡುವುದರಿಂದ ಅಸ್ತಿತ್ವದಲ್ಲಿರುವ ನಿಮ್ಮ ಕರೆ ಕಡಿತಗೊಳ್ಳುತ್ತದೆ."</string>
     <string name="dialog_continue" msgid="4070630558441163574">"ಮುಂದುವರಿಸಿ"</string>
-    <!-- no translation found for camera_privacy_text (4268584469444688293) -->
-    <skip />
 </resources>
diff --git a/java/com/android/dialer/util/res/values-ko/strings.xml b/java/com/android/dialer/util/res/values-ko/strings.xml
index aa0c138..f7a0679 100644
--- a/java/com/android/dialer/util/res/values-ko/strings.xml
+++ b/java/com/android/dialer/util/res/values-ko/strings.xml
@@ -23,6 +23,4 @@
     <string name="activity_not_available" msgid="8360067109103762211">"이 기기에 작업을 처리할 수 있는 앱이 없습니다."</string>
     <string name="outgoing_wps_warning" msgid="7505673114152005234">"WPS 전화를 걸면 기존 전화 연결이 해제됩니다."</string>
     <string name="dialog_continue" msgid="4070630558441163574">"계속"</string>
-    <!-- no translation found for camera_privacy_text (4268584469444688293) -->
-    <skip />
 </resources>
diff --git a/java/com/android/dialer/util/res/values-ky/strings.xml b/java/com/android/dialer/util/res/values-ky/strings.xml
index 80dea0a..e37ace8 100644
--- a/java/com/android/dialer/util/res/values-ky/strings.xml
+++ b/java/com/android/dialer/util/res/values-ky/strings.xml
@@ -23,6 +23,4 @@
     <string name="activity_not_available" msgid="8360067109103762211">"Бул түзмөктө ал үчүн колдонмо жок"</string>
     <string name="outgoing_wps_warning" msgid="7505673114152005234">"Азыр WPS аркылуу чалсаңыз, учурдагы чалуу үзүлүп калат."</string>
     <string name="dialog_continue" msgid="4070630558441163574">"Улантуу"</string>
-    <!-- no translation found for camera_privacy_text (4268584469444688293) -->
-    <skip />
 </resources>
diff --git a/java/com/android/dialer/util/res/values-lo/strings.xml b/java/com/android/dialer/util/res/values-lo/strings.xml
index a003183..d7c6764 100644
--- a/java/com/android/dialer/util/res/values-lo/strings.xml
+++ b/java/com/android/dialer/util/res/values-lo/strings.xml
@@ -23,6 +23,4 @@
     <string name="activity_not_available" msgid="8360067109103762211">"ບໍ່​ມີ​ແອັ​ບຯ​ສຳ​ລັບ​ສິ່ງນັ້ນ​ຢູ່​ໃນ​ອຸ​ປະ​ກອນ​ນີ້"</string>
     <string name="outgoing_wps_warning" msgid="7505673114152005234">"ການໂທ WPS ຈະຕັດສາຍທີ່ມີຢູ່ແລ້ວຂອງທ່ານ."</string>
     <string name="dialog_continue" msgid="4070630558441163574">"ດຳເນີນການຕໍ່"</string>
-    <!-- no translation found for camera_privacy_text (4268584469444688293) -->
-    <skip />
 </resources>
diff --git a/java/com/android/dialer/util/res/values-lt/strings.xml b/java/com/android/dialer/util/res/values-lt/strings.xml
index 00fd0c1..bf77d5c 100644
--- a/java/com/android/dialer/util/res/values-lt/strings.xml
+++ b/java/com/android/dialer/util/res/values-lt/strings.xml
@@ -23,6 +23,4 @@
     <string name="activity_not_available" msgid="8360067109103762211">"Šiame įrenginyje nėra tam skirtos programos"</string>
     <string name="outgoing_wps_warning" msgid="7505673114152005234">"Pradėjus WPS skambutį bus atjungtas dabartinis skambutis."</string>
     <string name="dialog_continue" msgid="4070630558441163574">"Tęsti"</string>
-    <!-- no translation found for camera_privacy_text (4268584469444688293) -->
-    <skip />
 </resources>
diff --git a/java/com/android/dialer/util/res/values-lv/strings.xml b/java/com/android/dialer/util/res/values-lv/strings.xml
index d29c06a..7b46264 100644
--- a/java/com/android/dialer/util/res/values-lv/strings.xml
+++ b/java/com/android/dialer/util/res/values-lv/strings.xml
@@ -23,6 +23,4 @@
     <string name="activity_not_available" msgid="8360067109103762211">"Šajā ierīcē nav nevienas šai darbībai piemērotas lietotnes."</string>
     <string name="outgoing_wps_warning" msgid="7505673114152005234">"Veicot WPS zvanu, tiks pārtraukts esošais zvans."</string>
     <string name="dialog_continue" msgid="4070630558441163574">"Turpināt"</string>
-    <!-- no translation found for camera_privacy_text (4268584469444688293) -->
-    <skip />
 </resources>
diff --git a/java/com/android/dialer/util/res/values-mk/strings.xml b/java/com/android/dialer/util/res/values-mk/strings.xml
index 5f45fbf..4451d70 100644
--- a/java/com/android/dialer/util/res/values-mk/strings.xml
+++ b/java/com/android/dialer/util/res/values-mk/strings.xml
@@ -23,6 +23,4 @@
     <string name="activity_not_available" msgid="8360067109103762211">"Нема апликација за тоа на уредот"</string>
     <string name="outgoing_wps_warning" msgid="7505673114152005234">"Воспоставувањето повик преку WPS ќе го исклучи вашиот тековен повик."</string>
     <string name="dialog_continue" msgid="4070630558441163574">"Продолжи"</string>
-    <!-- no translation found for camera_privacy_text (4268584469444688293) -->
-    <skip />
 </resources>
diff --git a/java/com/android/dialer/util/res/values-ml/strings.xml b/java/com/android/dialer/util/res/values-ml/strings.xml
index be98289..d861641 100644
--- a/java/com/android/dialer/util/res/values-ml/strings.xml
+++ b/java/com/android/dialer/util/res/values-ml/strings.xml
@@ -23,6 +23,4 @@
     <string name="activity_not_available" msgid="8360067109103762211">"അതിനായി ഈ ഉപകരണത്തിൽ അപ്ലിക്കേഷനുകളൊന്നുമില്ല"</string>
     <string name="outgoing_wps_warning" msgid="7505673114152005234">"ഒരു WPS കോൾ ചെയ്യുന്നത് നിങ്ങളുടെ നിലവിലെ കോൾ വിച്ഛേദിക്കാനിടയാക്കും."</string>
     <string name="dialog_continue" msgid="4070630558441163574">"തുടരുക"</string>
-    <!-- no translation found for camera_privacy_text (4268584469444688293) -->
-    <skip />
 </resources>
diff --git a/java/com/android/dialer/util/res/values-mn/strings.xml b/java/com/android/dialer/util/res/values-mn/strings.xml
index 314db16..51fe7ca 100644
--- a/java/com/android/dialer/util/res/values-mn/strings.xml
+++ b/java/com/android/dialer/util/res/values-mn/strings.xml
@@ -23,6 +23,4 @@
     <string name="activity_not_available" msgid="8360067109103762211">"Энэхүү төхөөрөмж дээр тухайн үйлдлийг гүйцэтгэх апликейшн байхгүй байна."</string>
     <string name="outgoing_wps_warning" msgid="7505673114152005234">"WPS дуудлага хийвэл одоо байгаа дуудлагыг таслах болно."</string>
     <string name="dialog_continue" msgid="4070630558441163574">"Үргэлжлүүлэх"</string>
-    <!-- no translation found for camera_privacy_text (4268584469444688293) -->
-    <skip />
 </resources>
diff --git a/java/com/android/dialer/util/res/values-mr/strings.xml b/java/com/android/dialer/util/res/values-mr/strings.xml
index 37bef29..4cb8230 100644
--- a/java/com/android/dialer/util/res/values-mr/strings.xml
+++ b/java/com/android/dialer/util/res/values-mr/strings.xml
@@ -23,6 +23,4 @@
     <string name="activity_not_available" msgid="8360067109103762211">"या डिव्हाइसवर त्यासाठी कोणताही अॅप नाही"</string>
     <string name="outgoing_wps_warning" msgid="7505673114152005234">"WPS कॉल केल्याने आपला विद्यमान कॉल डिस्कनेक्ट केला जाईल."</string>
     <string name="dialog_continue" msgid="4070630558441163574">"सुरु ठेवा"</string>
-    <!-- no translation found for camera_privacy_text (4268584469444688293) -->
-    <skip />
 </resources>
diff --git a/java/com/android/dialer/util/res/values-ms/strings.xml b/java/com/android/dialer/util/res/values-ms/strings.xml
index fbda09d..d149cc5 100644
--- a/java/com/android/dialer/util/res/values-ms/strings.xml
+++ b/java/com/android/dialer/util/res/values-ms/strings.xml
@@ -23,6 +23,4 @@
     <string name="activity_not_available" msgid="8360067109103762211">"Tiada apl untuk tindakan itu pada peranti ini"</string>
     <string name="outgoing_wps_warning" msgid="7505673114152005234">"Membuat panggilan WPS akan memutuskan panggilan anda yang sedia ada."</string>
     <string name="dialog_continue" msgid="4070630558441163574">"Teruskan"</string>
-    <!-- no translation found for camera_privacy_text (4268584469444688293) -->
-    <skip />
 </resources>
diff --git a/java/com/android/dialer/util/res/values-my/strings.xml b/java/com/android/dialer/util/res/values-my/strings.xml
index 3a5b79f..7ec6501 100644
--- a/java/com/android/dialer/util/res/values-my/strings.xml
+++ b/java/com/android/dialer/util/res/values-my/strings.xml
@@ -23,6 +23,4 @@
     <string name="activity_not_available" msgid="8360067109103762211">"ဒီကိရိယာထဲမှာ အဲဒါ့အတွက် app မရှိပါ"</string>
     <string name="outgoing_wps_warning" msgid="7505673114152005234">"WPS ခေါ်ဆိုပါက သင့်လက်ရှိခေါ်ဆိုမှု ပြတ်တောက်သွားပါမည်။"</string>
     <string name="dialog_continue" msgid="4070630558441163574">"ဆက်လုပ်ရန်"</string>
-    <!-- no translation found for camera_privacy_text (4268584469444688293) -->
-    <skip />
 </resources>
diff --git a/java/com/android/dialer/util/res/values-nb/strings.xml b/java/com/android/dialer/util/res/values-nb/strings.xml
index c1c1b23..52ae935 100644
--- a/java/com/android/dialer/util/res/values-nb/strings.xml
+++ b/java/com/android/dialer/util/res/values-nb/strings.xml
@@ -23,6 +23,4 @@
     <string name="activity_not_available" msgid="8360067109103762211">"Det finnes ingen apper for det på denne enheten"</string>
     <string name="outgoing_wps_warning" msgid="7505673114152005234">"Den pågående samtalen brytes hvis du foretar et WPS-anrop (Wireless Priority Service)."</string>
     <string name="dialog_continue" msgid="4070630558441163574">"Fortsett"</string>
-    <!-- no translation found for camera_privacy_text (4268584469444688293) -->
-    <skip />
 </resources>
diff --git a/java/com/android/dialer/util/res/values-ne/strings.xml b/java/com/android/dialer/util/res/values-ne/strings.xml
index b596a85..aedc538 100644
--- a/java/com/android/dialer/util/res/values-ne/strings.xml
+++ b/java/com/android/dialer/util/res/values-ne/strings.xml
@@ -23,6 +23,4 @@
     <string name="activity_not_available" msgid="8360067109103762211">"यस यन्त्रमा त्यसका लागि कुनै पनि अनुप्रयोग छैन"</string>
     <string name="outgoing_wps_warning" msgid="7505673114152005234">"WPS कल गर्नुले तपाईंको जारी कललाई विच्छेद गर्ने छ।"</string>
     <string name="dialog_continue" msgid="4070630558441163574">"जारी राख्नुहोस्"</string>
-    <!-- no translation found for camera_privacy_text (4268584469444688293) -->
-    <skip />
 </resources>
diff --git a/java/com/android/dialer/util/res/values-nl/strings.xml b/java/com/android/dialer/util/res/values-nl/strings.xml
index d09054c..a9fc32e 100644
--- a/java/com/android/dialer/util/res/values-nl/strings.xml
+++ b/java/com/android/dialer/util/res/values-nl/strings.xml
@@ -23,6 +23,4 @@
     <string name="activity_not_available" msgid="8360067109103762211">"Daarvoor is geen app beschikbaar op dit apparaat"</string>
     <string name="outgoing_wps_warning" msgid="7505673114152005234">"Als je een WPS-oproep plaatst, wordt je huidige gesprek afgebroken."</string>
     <string name="dialog_continue" msgid="4070630558441163574">"Doorgaan"</string>
-    <!-- no translation found for camera_privacy_text (4268584469444688293) -->
-    <skip />
 </resources>
diff --git a/java/com/android/dialer/util/res/values-no/strings.xml b/java/com/android/dialer/util/res/values-no/strings.xml
index c1c1b23..52ae935 100644
--- a/java/com/android/dialer/util/res/values-no/strings.xml
+++ b/java/com/android/dialer/util/res/values-no/strings.xml
@@ -23,6 +23,4 @@
     <string name="activity_not_available" msgid="8360067109103762211">"Det finnes ingen apper for det på denne enheten"</string>
     <string name="outgoing_wps_warning" msgid="7505673114152005234">"Den pågående samtalen brytes hvis du foretar et WPS-anrop (Wireless Priority Service)."</string>
     <string name="dialog_continue" msgid="4070630558441163574">"Fortsett"</string>
-    <!-- no translation found for camera_privacy_text (4268584469444688293) -->
-    <skip />
 </resources>
diff --git a/java/com/android/dialer/util/res/values-pa/strings.xml b/java/com/android/dialer/util/res/values-pa/strings.xml
index dfb47c5..4ad601f 100644
--- a/java/com/android/dialer/util/res/values-pa/strings.xml
+++ b/java/com/android/dialer/util/res/values-pa/strings.xml
@@ -23,6 +23,4 @@
     <string name="activity_not_available" msgid="8360067109103762211">"ਉਸ ਲਈ ਇਸ ਡੀਵਾਈਸ ਤੇ ਕੋਈ ਐਪ ਨਹੀਂ"</string>
     <string name="outgoing_wps_warning" msgid="7505673114152005234">"ਇੱਕ WPS ਕਾਲ ਕਰਨਾ ਤੁਹਾਡੀ ਮੌਜੂਦਾ ਕਾਲ ਨੂੰ ਡਿਸਕਨੈਕਟ ਕਰ ਦੇਵੇਗਾ।"</string>
     <string name="dialog_continue" msgid="4070630558441163574">"ਜਾਰੀ ਰੱਖੋ"</string>
-    <!-- no translation found for camera_privacy_text (4268584469444688293) -->
-    <skip />
 </resources>
diff --git a/java/com/android/dialer/util/res/values-pl/strings.xml b/java/com/android/dialer/util/res/values-pl/strings.xml
index 4ea0d8b..c49c55a 100644
--- a/java/com/android/dialer/util/res/values-pl/strings.xml
+++ b/java/com/android/dialer/util/res/values-pl/strings.xml
@@ -23,6 +23,4 @@
     <string name="activity_not_available" msgid="8360067109103762211">"Na urządzeniu nie ma aplikacji, która mogłaby wykonać tę czynność"</string>
     <string name="outgoing_wps_warning" msgid="7505673114152005234">"Jeśli nawiążesz połączenie WPS, bieżące połączenie zostanie przerwane."</string>
     <string name="dialog_continue" msgid="4070630558441163574">"Dalej"</string>
-    <!-- no translation found for camera_privacy_text (4268584469444688293) -->
-    <skip />
 </resources>
diff --git a/java/com/android/dialer/util/res/values-pt-rBR/strings.xml b/java/com/android/dialer/util/res/values-pt-rBR/strings.xml
index af5ec93..04eb8c6 100644
--- a/java/com/android/dialer/util/res/values-pt-rBR/strings.xml
+++ b/java/com/android/dialer/util/res/values-pt-rBR/strings.xml
@@ -23,6 +23,4 @@
     <string name="activity_not_available" msgid="8360067109103762211">"Nenhum app está disponível para essa ação neste dispositivo"</string>
     <string name="outgoing_wps_warning" msgid="7505673114152005234">"Fazer uma chamada usando o WPS desconectará a chamada atual."</string>
     <string name="dialog_continue" msgid="4070630558441163574">"Continuar"</string>
-    <!-- no translation found for camera_privacy_text (4268584469444688293) -->
-    <skip />
 </resources>
diff --git a/java/com/android/dialer/util/res/values-pt-rPT/strings.xml b/java/com/android/dialer/util/res/values-pt-rPT/strings.xml
index 1626e9e..b902302 100644
--- a/java/com/android/dialer/util/res/values-pt-rPT/strings.xml
+++ b/java/com/android/dialer/util/res/values-pt-rPT/strings.xml
@@ -23,6 +23,4 @@
     <string name="activity_not_available" msgid="8360067109103762211">"Não existe nenhuma aplicação para isso neste dispositivo"</string>
     <string name="outgoing_wps_warning" msgid="7505673114152005234">"Efetuar uma chamada WPS irá desligar a sua chamada atual."</string>
     <string name="dialog_continue" msgid="4070630558441163574">"Continuar"</string>
-    <!-- no translation found for camera_privacy_text (4268584469444688293) -->
-    <skip />
 </resources>
diff --git a/java/com/android/dialer/util/res/values-pt/strings.xml b/java/com/android/dialer/util/res/values-pt/strings.xml
index af5ec93..04eb8c6 100644
--- a/java/com/android/dialer/util/res/values-pt/strings.xml
+++ b/java/com/android/dialer/util/res/values-pt/strings.xml
@@ -23,6 +23,4 @@
     <string name="activity_not_available" msgid="8360067109103762211">"Nenhum app está disponível para essa ação neste dispositivo"</string>
     <string name="outgoing_wps_warning" msgid="7505673114152005234">"Fazer uma chamada usando o WPS desconectará a chamada atual."</string>
     <string name="dialog_continue" msgid="4070630558441163574">"Continuar"</string>
-    <!-- no translation found for camera_privacy_text (4268584469444688293) -->
-    <skip />
 </resources>
diff --git a/java/com/android/dialer/util/res/values-ro/strings.xml b/java/com/android/dialer/util/res/values-ro/strings.xml
index c5d7d3f..40cbc36 100644
--- a/java/com/android/dialer/util/res/values-ro/strings.xml
+++ b/java/com/android/dialer/util/res/values-ro/strings.xml
@@ -23,6 +23,4 @@
     <string name="activity_not_available" msgid="8360067109103762211">"Pe dispozitiv nu există nicio aplicație pentru această acțiune"</string>
     <string name="outgoing_wps_warning" msgid="7505673114152005234">"Dacă inițiați un apel WPS, apelul existent va fi deconectat."</string>
     <string name="dialog_continue" msgid="4070630558441163574">"Continuați"</string>
-    <!-- no translation found for camera_privacy_text (4268584469444688293) -->
-    <skip />
 </resources>
diff --git a/java/com/android/dialer/util/res/values-ru/strings.xml b/java/com/android/dialer/util/res/values-ru/strings.xml
index 837a075..c2908f9 100644
--- a/java/com/android/dialer/util/res/values-ru/strings.xml
+++ b/java/com/android/dialer/util/res/values-ru/strings.xml
@@ -23,6 +23,4 @@
     <string name="activity_not_available" msgid="8360067109103762211">"На устройстве нет подходящего приложения"</string>
     <string name="outgoing_wps_warning" msgid="7505673114152005234">"Если вы начнете WPS-вызов, текущий вызов будет прекращен."</string>
     <string name="dialog_continue" msgid="4070630558441163574">"Продолжить"</string>
-    <!-- no translation found for camera_privacy_text (4268584469444688293) -->
-    <skip />
 </resources>
diff --git a/java/com/android/dialer/util/res/values-si/strings.xml b/java/com/android/dialer/util/res/values-si/strings.xml
index f91ef87..f7404d7 100644
--- a/java/com/android/dialer/util/res/values-si/strings.xml
+++ b/java/com/android/dialer/util/res/values-si/strings.xml
@@ -23,6 +23,4 @@
     <string name="activity_not_available" msgid="8360067109103762211">"මෙම උපාංගයෙහි ඒ සඳහා යෙදුමක් නැත"</string>
     <string name="outgoing_wps_warning" msgid="7505673114152005234">"WPS ඇමතුමක් කිරීමෙන් ඔබේ දැනට පවතින ඇමතුම විසන්ධි කරනු ඇත."</string>
     <string name="dialog_continue" msgid="4070630558441163574">"දිගටම කරගෙන යන්න"</string>
-    <!-- no translation found for camera_privacy_text (4268584469444688293) -->
-    <skip />
 </resources>
diff --git a/java/com/android/dialer/util/res/values-sk/strings.xml b/java/com/android/dialer/util/res/values-sk/strings.xml
index 731abb9..4a1ed02 100644
--- a/java/com/android/dialer/util/res/values-sk/strings.xml
+++ b/java/com/android/dialer/util/res/values-sk/strings.xml
@@ -23,6 +23,4 @@
     <string name="activity_not_available" msgid="8360067109103762211">"Na tomto zariadení nie je aplikácia na vykonanie danej akcie"</string>
     <string name="outgoing_wps_warning" msgid="7505673114152005234">"Uskutočnením hovoru cez WPS prerušíte existujúci hovor."</string>
     <string name="dialog_continue" msgid="4070630558441163574">"Pokračovať"</string>
-    <!-- no translation found for camera_privacy_text (4268584469444688293) -->
-    <skip />
 </resources>
diff --git a/java/com/android/dialer/util/res/values-sl/strings.xml b/java/com/android/dialer/util/res/values-sl/strings.xml
index cde40ea..e18514d 100644
--- a/java/com/android/dialer/util/res/values-sl/strings.xml
+++ b/java/com/android/dialer/util/res/values-sl/strings.xml
@@ -23,6 +23,4 @@
     <string name="activity_not_available" msgid="8360067109103762211">"V tej napravi ni aplikacije za to"</string>
     <string name="outgoing_wps_warning" msgid="7505673114152005234">"Če začnete klic WPS, bo obstoječi klic prekinjen."</string>
     <string name="dialog_continue" msgid="4070630558441163574">"Nadaljuj"</string>
-    <!-- no translation found for camera_privacy_text (4268584469444688293) -->
-    <skip />
 </resources>
diff --git a/java/com/android/dialer/util/res/values-sq/strings.xml b/java/com/android/dialer/util/res/values-sq/strings.xml
index ab53f1e..8046d92 100644
--- a/java/com/android/dialer/util/res/values-sq/strings.xml
+++ b/java/com/android/dialer/util/res/values-sq/strings.xml
@@ -23,6 +23,4 @@
     <string name="activity_not_available" msgid="8360067109103762211">"Nuk ka aplikacion për atë në këtë pajisje"</string>
     <string name="outgoing_wps_warning" msgid="7505673114152005234">"Kryerja e një telefonate WPS do të shkëputë telefonatën tënde ekzistuese."</string>
     <string name="dialog_continue" msgid="4070630558441163574">"Vazhdo"</string>
-    <!-- no translation found for camera_privacy_text (4268584469444688293) -->
-    <skip />
 </resources>
diff --git a/java/com/android/dialer/util/res/values-sr/strings.xml b/java/com/android/dialer/util/res/values-sr/strings.xml
index 5193c6a..d7de552 100644
--- a/java/com/android/dialer/util/res/values-sr/strings.xml
+++ b/java/com/android/dialer/util/res/values-sr/strings.xml
@@ -23,6 +23,4 @@
     <string name="activity_not_available" msgid="8360067109103762211">"На овом уређају нема апликација за то"</string>
     <string name="outgoing_wps_warning" msgid="7505673114152005234">"Ако упутите WPS позив, прекинућете постојећи позив."</string>
     <string name="dialog_continue" msgid="4070630558441163574">"Настави"</string>
-    <!-- no translation found for camera_privacy_text (4268584469444688293) -->
-    <skip />
 </resources>
diff --git a/java/com/android/dialer/util/res/values-sv/strings.xml b/java/com/android/dialer/util/res/values-sv/strings.xml
index 23c34f0..5b17b06 100644
--- a/java/com/android/dialer/util/res/values-sv/strings.xml
+++ b/java/com/android/dialer/util/res/values-sv/strings.xml
@@ -23,6 +23,4 @@
     <string name="activity_not_available" msgid="8360067109103762211">"Det finns ingen app för detta på enheten"</string>
     <string name="outgoing_wps_warning" msgid="7505673114152005234">"Ringer du ett WPS-samtal kopplas det nuvarande samtalet bort."</string>
     <string name="dialog_continue" msgid="4070630558441163574">"Fortsätt"</string>
-    <!-- no translation found for camera_privacy_text (4268584469444688293) -->
-    <skip />
 </resources>
diff --git a/java/com/android/dialer/util/res/values-sw/strings.xml b/java/com/android/dialer/util/res/values-sw/strings.xml
index 6dabc84..8ee6843 100644
--- a/java/com/android/dialer/util/res/values-sw/strings.xml
+++ b/java/com/android/dialer/util/res/values-sw/strings.xml
@@ -23,6 +23,4 @@
     <string name="activity_not_available" msgid="8360067109103762211">"Hakuna programu kwa ajili ya hiyo kwenye kifaa hiki"</string>
     <string name="outgoing_wps_warning" msgid="7505673114152005234">"Ukipiga simu ya WPS, simu inayoendelea sasa itakatwa."</string>
     <string name="dialog_continue" msgid="4070630558441163574">"Endelea"</string>
-    <!-- no translation found for camera_privacy_text (4268584469444688293) -->
-    <skip />
 </resources>
diff --git a/java/com/android/dialer/util/res/values-ta/strings.xml b/java/com/android/dialer/util/res/values-ta/strings.xml
index 4f1b691..ed63669 100644
--- a/java/com/android/dialer/util/res/values-ta/strings.xml
+++ b/java/com/android/dialer/util/res/values-ta/strings.xml
@@ -23,6 +23,4 @@
     <string name="activity_not_available" msgid="8360067109103762211">"சாதனத்தில் இந்தச் செயலைச் செய்வதற்கான பயன்பாடு எதுவும் இல்லை"</string>
     <string name="outgoing_wps_warning" msgid="7505673114152005234">"WPS அழைப்பை மேற்கொண்டால், தற்போது செயலில் உள்ள அழைப்புத் துண்டிக்கப்படும்."</string>
     <string name="dialog_continue" msgid="4070630558441163574">"தொடர்க"</string>
-    <!-- no translation found for camera_privacy_text (4268584469444688293) -->
-    <skip />
 </resources>
diff --git a/java/com/android/dialer/util/res/values-te/strings.xml b/java/com/android/dialer/util/res/values-te/strings.xml
index 3e54163..44c84f5 100644
--- a/java/com/android/dialer/util/res/values-te/strings.xml
+++ b/java/com/android/dialer/util/res/values-te/strings.xml
@@ -23,6 +23,4 @@
     <string name="activity_not_available" msgid="8360067109103762211">"ఈ పరికరంలో దాని కోసం అనువర్తనం ఏదీ లేదు"</string>
     <string name="outgoing_wps_warning" msgid="7505673114152005234">"WPS కాల్ చేయడం వలన మీరు ప్రస్తుతం మాట్లాడుతున్న కాల్ డిస్‌కనెక్ట్ అవుతుంది."</string>
     <string name="dialog_continue" msgid="4070630558441163574">"కొనసాగించు"</string>
-    <!-- no translation found for camera_privacy_text (4268584469444688293) -->
-    <skip />
 </resources>
diff --git a/java/com/android/dialer/util/res/values-th/strings.xml b/java/com/android/dialer/util/res/values-th/strings.xml
index 59341c3..f005573 100644
--- a/java/com/android/dialer/util/res/values-th/strings.xml
+++ b/java/com/android/dialer/util/res/values-th/strings.xml
@@ -23,6 +23,4 @@
     <string name="activity_not_available" msgid="8360067109103762211">"ไม่มีแอปสำหรับการทำงานนั้นบนอุปกรณ์นี้"</string>
     <string name="outgoing_wps_warning" msgid="7505673114152005234">"หากคุณโทรผ่านบริการ WPS ตอนนี้ สายที่โทรอยู่จะตัดการเชื่อมต่อ"</string>
     <string name="dialog_continue" msgid="4070630558441163574">"ต่อไป"</string>
-    <!-- no translation found for camera_privacy_text (4268584469444688293) -->
-    <skip />
 </resources>
diff --git a/java/com/android/dialer/util/res/values-tl/strings.xml b/java/com/android/dialer/util/res/values-tl/strings.xml
index e2a2ed0..73de8b5 100644
--- a/java/com/android/dialer/util/res/values-tl/strings.xml
+++ b/java/com/android/dialer/util/res/values-tl/strings.xml
@@ -23,6 +23,4 @@
     <string name="activity_not_available" msgid="8360067109103762211">"Walang app para doon sa device na ito"</string>
     <string name="outgoing_wps_warning" msgid="7505673114152005234">"Ang paggawa ng WPS na tawag ay puputulin sa koneksyon ang dati mo nang tawag."</string>
     <string name="dialog_continue" msgid="4070630558441163574">"Magpatuloy"</string>
-    <!-- no translation found for camera_privacy_text (4268584469444688293) -->
-    <skip />
 </resources>
diff --git a/java/com/android/dialer/util/res/values-tr/strings.xml b/java/com/android/dialer/util/res/values-tr/strings.xml
index dcd3e83..108b20a 100644
--- a/java/com/android/dialer/util/res/values-tr/strings.xml
+++ b/java/com/android/dialer/util/res/values-tr/strings.xml
@@ -23,6 +23,4 @@
     <string name="activity_not_available" msgid="8360067109103762211">"Bu cihazda bu işlem için uygun uygulama yok"</string>
     <string name="outgoing_wps_warning" msgid="7505673114152005234">"WPS çağrısı yaparsanız, devam eden çağrı sonlandırılır."</string>
     <string name="dialog_continue" msgid="4070630558441163574">"Devam"</string>
-    <!-- no translation found for camera_privacy_text (4268584469444688293) -->
-    <skip />
 </resources>
diff --git a/java/com/android/dialer/util/res/values-uk/strings.xml b/java/com/android/dialer/util/res/values-uk/strings.xml
index 2b5bd38..d57b1de 100644
--- a/java/com/android/dialer/util/res/values-uk/strings.xml
+++ b/java/com/android/dialer/util/res/values-uk/strings.xml
@@ -23,6 +23,4 @@
     <string name="activity_not_available" msgid="8360067109103762211">"На цьому пристрої немає додатка, який може виконати цю дію"</string>
     <string name="outgoing_wps_warning" msgid="7505673114152005234">"Якщо здійснити виклик WPS, буде роз’єднано поточний виклик."</string>
     <string name="dialog_continue" msgid="4070630558441163574">"Продовжити"</string>
-    <!-- no translation found for camera_privacy_text (4268584469444688293) -->
-    <skip />
 </resources>
diff --git a/java/com/android/dialer/util/res/values-ur/strings.xml b/java/com/android/dialer/util/res/values-ur/strings.xml
index 2e3f8a0..7c036d0 100644
--- a/java/com/android/dialer/util/res/values-ur/strings.xml
+++ b/java/com/android/dialer/util/res/values-ur/strings.xml
@@ -23,6 +23,4 @@
     <string name="activity_not_available" msgid="8360067109103762211">"اس آلہ پر اس کیلئے کوئی ایپ نہیں ہے"</string>
     <string name="outgoing_wps_warning" msgid="7505673114152005234">"‏WPS کال کرنے سے آپ کی موجودہ کال غیر منسلک ہو جائے گی۔"</string>
     <string name="dialog_continue" msgid="4070630558441163574">"جاری رکھیں"</string>
-    <!-- no translation found for camera_privacy_text (4268584469444688293) -->
-    <skip />
 </resources>
diff --git a/java/com/android/dialer/util/res/values-uz/strings.xml b/java/com/android/dialer/util/res/values-uz/strings.xml
index ca7c821..0e28bf7 100644
--- a/java/com/android/dialer/util/res/values-uz/strings.xml
+++ b/java/com/android/dialer/util/res/values-uz/strings.xml
@@ -23,6 +23,4 @@
     <string name="activity_not_available" msgid="8360067109103762211">"Qurilmada buni bajaradigan ilova yo‘q"</string>
     <string name="outgoing_wps_warning" msgid="7505673114152005234">"WPS-chaqiruv boshlab yuborilsa, hozirgi qo‘ng‘iroq tugatiladi."</string>
     <string name="dialog_continue" msgid="4070630558441163574">"Davom ettirish"</string>
-    <!-- no translation found for camera_privacy_text (4268584469444688293) -->
-    <skip />
 </resources>
diff --git a/java/com/android/dialer/util/res/values-vi/strings.xml b/java/com/android/dialer/util/res/values-vi/strings.xml
index 8a225a3..925b91e 100644
--- a/java/com/android/dialer/util/res/values-vi/strings.xml
+++ b/java/com/android/dialer/util/res/values-vi/strings.xml
@@ -23,6 +23,4 @@
     <string name="activity_not_available" msgid="8360067109103762211">"Không có ứng dụng nào cho thao tác đó trên thiết bị này"</string>
     <string name="outgoing_wps_warning" msgid="7505673114152005234">"Việc thực hiện cuộc gọi WPS sẽ ngắt kết nối cuộc gọi hiện có của bạn."</string>
     <string name="dialog_continue" msgid="4070630558441163574">"Tiếp tục"</string>
-    <!-- no translation found for camera_privacy_text (4268584469444688293) -->
-    <skip />
 </resources>
diff --git a/java/com/android/dialer/util/res/values-zh-rCN/strings.xml b/java/com/android/dialer/util/res/values-zh-rCN/strings.xml
index 0f2d658..6d3e821 100644
--- a/java/com/android/dialer/util/res/values-zh-rCN/strings.xml
+++ b/java/com/android/dialer/util/res/values-zh-rCN/strings.xml
@@ -23,6 +23,4 @@
     <string name="activity_not_available" msgid="8360067109103762211">"此设备上没有可执行此操作的应用"</string>
     <string name="outgoing_wps_warning" msgid="7505673114152005234">"拨打 WPS 电话会中断现有通话。"</string>
     <string name="dialog_continue" msgid="4070630558441163574">"继续"</string>
-    <!-- no translation found for camera_privacy_text (4268584469444688293) -->
-    <skip />
 </resources>
diff --git a/java/com/android/dialer/util/res/values-zh-rHK/strings.xml b/java/com/android/dialer/util/res/values-zh-rHK/strings.xml
index 873de4d..2193cfa 100644
--- a/java/com/android/dialer/util/res/values-zh-rHK/strings.xml
+++ b/java/com/android/dialer/util/res/values-zh-rHK/strings.xml
@@ -23,6 +23,4 @@
     <string name="activity_not_available" msgid="8360067109103762211">"這部裝置上沒有可用的應用程式"</string>
     <string name="outgoing_wps_warning" msgid="7505673114152005234">"撥打 WPS 電話會掛斷現有通話。"</string>
     <string name="dialog_continue" msgid="4070630558441163574">"繼續"</string>
-    <!-- no translation found for camera_privacy_text (4268584469444688293) -->
-    <skip />
 </resources>
diff --git a/java/com/android/dialer/util/res/values-zh-rTW/strings.xml b/java/com/android/dialer/util/res/values-zh-rTW/strings.xml
index 6af0cd1..1926318 100644
--- a/java/com/android/dialer/util/res/values-zh-rTW/strings.xml
+++ b/java/com/android/dialer/util/res/values-zh-rTW/strings.xml
@@ -23,6 +23,4 @@
     <string name="activity_not_available" msgid="8360067109103762211">"這個裝置未安裝可執行該操作的應用程式"</string>
     <string name="outgoing_wps_warning" msgid="7505673114152005234">"撥打 WPS 電話會中斷你正在進行的通話。"</string>
     <string name="dialog_continue" msgid="4070630558441163574">"繼續"</string>
-    <!-- no translation found for camera_privacy_text (4268584469444688293) -->
-    <skip />
 </resources>
diff --git a/java/com/android/dialer/util/res/values-zu/strings.xml b/java/com/android/dialer/util/res/values-zu/strings.xml
index ea15b7d..cdc7f89 100644
--- a/java/com/android/dialer/util/res/values-zu/strings.xml
+++ b/java/com/android/dialer/util/res/values-zu/strings.xml
@@ -23,6 +23,4 @@
     <string name="activity_not_available" msgid="8360067109103762211">"Alukho uhlelo lokusebenza lalokho kule divayisi"</string>
     <string name="outgoing_wps_warning" msgid="7505673114152005234">"Ukwenza ikholi ye-WPS kuzonqamula ikholi yakho ekhona."</string>
     <string name="dialog_continue" msgid="4070630558441163574">"Qhubeka"</string>
-    <!-- no translation found for camera_privacy_text (4268584469444688293) -->
-    <skip />
 </resources>
diff --git a/java/com/android/dialer/widget/MessageFragment.java b/java/com/android/dialer/widget/MessageFragment.java
index 615ad3b..7a0fcfd 100644
--- a/java/com/android/dialer/widget/MessageFragment.java
+++ b/java/com/android/dialer/widget/MessageFragment.java
@@ -134,10 +134,9 @@
 
   @Override
   public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
-    if (getMessage() == null) {
-      return false;
+    if (!TextUtils.isEmpty(getMessage())) {
+      getListener().onMessageFragmentSendMessage(getMessage());
     }
-    getListener().onMessageFragmentSendMessage(getMessage());
     return true;
   }
 
diff --git a/java/com/android/dialer/widget/res/layout/fragment_message.xml b/java/com/android/dialer/widget/res/layout/fragment_message.xml
index 5b0bab5..bdb85fa 100644
--- a/java/com/android/dialer/widget/res/layout/fragment_message.xml
+++ b/java/com/android/dialer/widget/res/layout/fragment_message.xml
@@ -14,28 +14,36 @@
   ~ See the License for the specific language governing permissions and
   ~ limitations under the License
   -->
-<LinearLayout
+<RelativeLayout
   xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
-  android:orientation="vertical"
-  android:gravity="bottom"
   android:background="@color/background_dialer_white">
 
-  <LinearLayout
-    android:id="@+id/message_container"
-    android:orientation="vertical"
-    android:layout_width="match_parent"
-    android:layout_height="wrap_content"/>
+  <ScrollView
+      android:layout_width="match_parent"
+      android:layout_height="wrap_content"
+      android:layout_above="@+id/divider">
+
+    <LinearLayout
+      android:id="@+id/message_container"
+      android:orientation="vertical"
+      android:layout_width="match_parent"
+      android:layout_height="wrap_content"/>
+  </ScrollView>
 
   <View
+    android:id="@+id/divider"
     android:layout_width="match_parent"
     android:layout_height="@dimen/message_divider_height"
-    android:background="#12000000"/>
+    android:background="#12000000"
+    android:layout_above="@+id/edittext_container"/>
 
   <RelativeLayout
+    android:id="@+id/edittext_container"
     android:layout_width="wrap_content"
-    android:layout_height="wrap_content">
+    android:layout_height="wrap_content"
+    android:layout_alignParentBottom="true">
 
     <EditText
       android:id="@+id/custom_message"
@@ -50,7 +58,7 @@
       android:textCursorDrawable="@drawable/searchedittext_custom_cursor"
       android:layout_toStartOf="@+id/count_and_send_container"
       android:inputType="textShortMessage|textCapSentences"
-      android:imeOptions="actionSend"/>
+      android:imeOptions="flagNoExtractUi|actionSend"/>
 
     <LinearLayout
       android:id="@+id/count_and_send_container"
@@ -80,4 +88,4 @@
         android:textColor="@color/dialer_edit_text_hint_color"/>
     </LinearLayout>
   </RelativeLayout>
-</LinearLayout>
\ No newline at end of file
+</RelativeLayout>
\ No newline at end of file
diff --git a/java/com/android/dialershared/bubble/Bubble.java b/java/com/android/dialershared/bubble/Bubble.java
index f2ba117..9606f5b 100644
--- a/java/com/android/dialershared/bubble/Bubble.java
+++ b/java/com/android/dialershared/bubble/Bubble.java
@@ -61,6 +61,8 @@
 import android.widget.ImageView;
 import android.widget.TextView;
 import android.widget.ViewAnimator;
+import com.android.dialer.logging.DialerImpression;
+import com.android.dialer.logging.Logger;
 import com.android.dialershared.bubble.BubbleInfo.Action;
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
@@ -87,6 +89,8 @@
   private final Context context;
   private final WindowManager windowManager;
 
+  private final Handler handler = new Handler();
+
   private LayoutParams windowParams;
 
   // Initialized in factory method
@@ -100,9 +104,7 @@
   private boolean hideAfterText;
   private int collapseEndAction;
 
-  private final Handler handler = new Handler();
-
-  private ViewHolder viewHolder;
+  @VisibleForTesting ViewHolder viewHolder;
   private ViewPropertyAnimator collapseAnimation;
   private Integer overrideGravity;
   private ViewPropertyAnimator exitAnimator;
@@ -238,47 +240,22 @@
     updatePrimaryIconAnimation();
   }
 
-  /**
-   * Hide the button if visible. Will run a short exit animation before hiding. If the bubble is
-   * currently showing text, will hide after the text is done displaying. If the bubble is not
-   * visible this method does nothing.
-   */
+  /** Hide the bubble. */
   public void hide() {
-    if (visibility == Visibility.HIDDEN || visibility == Visibility.EXITING) {
+    if (hideAfterText) {
+      // hideAndReset() will be called after showing text, do nothing here.
       return;
     }
+    hideHelper(this::defaultAfterHidingAnimation);
+  }
 
-    if (textShowing) {
-      hideAfterText = true;
-      return;
-    }
-
-    if (collapseAnimation != null) {
-      collapseEndAction = CollapseEnd.HIDE;
-      return;
-    }
-
-    if (expanded) {
-      startCollapse(CollapseEnd.HIDE);
-      return;
-    }
-
-    visibility = Visibility.EXITING;
-    exitAnimator =
-        viewHolder
-            .getPrimaryButton()
-            .animate()
-            .setInterpolator(new AnticipateInterpolator())
-            .scaleX(0)
-            .scaleY(0)
-            .withEndAction(
-                () -> {
-                  exitAnimator = null;
-                  windowManager.removeView(viewHolder.getRoot());
-                  visibility = Visibility.HIDDEN;
-                  updatePrimaryIconAnimation();
-                });
-    exitAnimator.start();
+  /** Hide the bubble and reset {@viewHolder} to initial state */
+  public void hideAndReset() {
+    hideHelper(
+        () -> {
+          defaultAfterHidingAnimation();
+          reset();
+        });
   }
 
   /** Returns whether the bubble is currently visible */
@@ -350,8 +327,15 @@
                       public boolean onPreDraw() {
                         primaryButton.getViewTreeObserver().removeOnPreDrawListener(this);
 
-                        // Prepare and capture end values
+                        // Prepare and capture end values, always use the size of primaryText since
+                        // its invisibility makes primaryButton smaller than expected
                         TransitionValues endValues = new TransitionValues();
+                        endValues.values.put(
+                            ChangeOnScreenBounds.PROPNAME_WIDTH,
+                            viewHolder.getPrimaryText().getWidth());
+                        endValues.values.put(
+                            ChangeOnScreenBounds.PROPNAME_HEIGHT,
+                            viewHolder.getPrimaryText().getHeight());
                         endValues.view = primaryButton;
                         transition.addTarget(endValues.view);
                         transition.captureEndValues(endValues);
@@ -377,7 +361,8 @@
         () -> {
           textShowing = false;
           if (hideAfterText) {
-            hide();
+            // Always reset here since text shouldn't keep showing.
+            hideAndReset();
           } else {
             doResize(
                 () -> viewHolder.getPrimaryButton().setDisplayedChild(ViewHolder.CHILD_INDEX_ICON));
@@ -411,6 +396,7 @@
 
   void primaryButtonClick() {
     if (expanded || textShowing || currentInfo.getActions().isEmpty()) {
+      Logger.get(context).logImpression(DialerImpression.Type.BUBBLE_PRIMARY_BUTTON_RETURN_TO_CALL);
       try {
         currentInfo.getPrimaryIntent().send();
       } catch (CanceledException e) {
@@ -419,6 +405,7 @@
       return;
     }
 
+    Logger.get(context).logImpression(DialerImpression.Type.BUBBLE_PRIMARY_BUTTON_EXPAND);
     doResize(
         () -> {
           onLeftRightSwitch(isDrawingFromRight());
@@ -478,6 +465,48 @@
     return viewHolder.getRoot();
   }
 
+  /**
+   * Hide the bubble if visible. Will run a short exit animation and before hiding, and {@code
+   * afterHiding} after hiding. If the bubble is currently showing text, will hide after the text is
+   * done displaying. If the bubble is not visible this method does nothing.
+   */
+  private void hideHelper(Runnable afterHiding) {
+    if (visibility == Visibility.HIDDEN || visibility == Visibility.EXITING) {
+      return;
+    }
+
+    if (textShowing) {
+      hideAfterText = true;
+      return;
+    }
+
+    if (collapseAnimation != null) {
+      collapseEndAction = CollapseEnd.HIDE;
+      return;
+    }
+
+    if (expanded) {
+      startCollapse(CollapseEnd.HIDE);
+      return;
+    }
+
+    visibility = Visibility.EXITING;
+    exitAnimator =
+        viewHolder
+            .getPrimaryButton()
+            .animate()
+            .setInterpolator(new AnticipateInterpolator())
+            .scaleX(0)
+            .scaleY(0)
+            .withEndAction(afterHiding);
+    exitAnimator.start();
+  }
+
+  private void reset() {
+    viewHolder = new ViewHolder(viewHolder.getRoot().getContext());
+    update();
+  }
+
   private void update() {
     RippleDrawable backgroundRipple =
         (RippleDrawable)
@@ -681,7 +710,16 @@
     windowManager.updateViewLayout(getRootView(), windowParams);
   }
 
-  private class ViewHolder {
+  private void defaultAfterHidingAnimation() {
+    exitAnimator = null;
+    windowManager.removeView(viewHolder.getRoot());
+    visibility = Visibility.HIDDEN;
+
+    updatePrimaryIconAnimation();
+  }
+
+  @VisibleForTesting
+  class ViewHolder {
 
     public static final int CHILD_INDEX_ICON = 0;
     public static final int CHILD_INDEX_TEXT = 1;
diff --git a/java/com/android/dialershared/bubble/ChangeOnScreenBounds.java b/java/com/android/dialershared/bubble/ChangeOnScreenBounds.java
index 37c8204..8cd61af 100644
--- a/java/com/android/dialershared/bubble/ChangeOnScreenBounds.java
+++ b/java/com/android/dialershared/bubble/ChangeOnScreenBounds.java
@@ -41,6 +41,9 @@
   @VisibleForTesting(otherwise = VisibleForTesting.PRIVATE)
   static final String PROPNAME_SCREEN_Y = "bubble:changeScreenBounds:screenY";
 
+  static final String PROPNAME_WIDTH = "bubble:changeScreenBounds:width";
+  static final String PROPNAME_HEIGHT = "bubble:changeScreenBounds:height";
+
   private static final Property<ViewBounds, PointF> TOP_LEFT_PROPERTY =
       new Property<ViewBounds, PointF>(PointF.class, "topLeft") {
         @Override
@@ -70,21 +73,32 @@
 
   @Override
   public void captureStartValues(TransitionValues transitionValues) {
-    captureValues(transitionValues);
+    captureValuesWithSize(transitionValues);
   }
 
   @Override
   public void captureEndValues(TransitionValues transitionValues) {
-    captureValues(transitionValues);
+    captureValuesWithSize(transitionValues);
   }
 
-  private void captureValues(TransitionValues values) {
+  /**
+   * Capture location (left and top) from {@code values.view} and size (width and height) from
+   * {@code values.values}. If size is not set, use the size of {@code values.view}.
+   */
+  private void captureValuesWithSize(TransitionValues values) {
     View view = values.view;
 
     if (view.isLaidOut() || view.getWidth() != 0 || view.getHeight() != 0) {
+      Integer width = (Integer) values.values.get(PROPNAME_WIDTH);
+      Integer height = (Integer) values.values.get(PROPNAME_HEIGHT);
+
       values.values.put(
           PROPNAME_BOUNDS,
-          new Rect(view.getLeft(), view.getTop(), view.getRight(), view.getBottom()));
+          new Rect(
+              view.getLeft(),
+              view.getTop(),
+              width == null ? view.getRight() : view.getLeft() + width,
+              height == null ? view.getBottom() : view.getTop() + height));
       values.view.getLocationOnScreen(tempLocation);
       values.values.put(PROPNAME_SCREEN_X, tempLocation[0]);
       values.values.put(PROPNAME_SCREEN_Y, tempLocation[1]);
diff --git a/java/com/android/incallui/CallButtonPresenter.java b/java/com/android/incallui/CallButtonPresenter.java
index 30877ff..4da227c 100644
--- a/java/com/android/incallui/CallButtonPresenter.java
+++ b/java/com/android/incallui/CallButtonPresenter.java
@@ -18,6 +18,7 @@
 
 import android.content.Context;
 import android.os.Bundle;
+import android.os.Trace;
 import android.support.v4.app.Fragment;
 import android.support.v4.os.UserManagerCompat;
 import android.telecom.CallAudioState;
@@ -101,6 +102,7 @@
 
   @Override
   public void onStateChange(InCallState oldState, InCallState newState, CallList callList) {
+    Trace.beginSection("CallButtonPresenter.onStateChange");
     if (newState == InCallState.OUTGOING) {
       mCall = callList.getOutgoingCall();
     } else if (newState == InCallState.INCALL) {
@@ -124,6 +126,7 @@
       mCall = null;
     }
     updateUi(newState, mCall);
+    Trace.endSection();
   }
 
   /**
@@ -365,7 +368,7 @@
   }
 
   private void updateUi(InCallState state, DialerCall call) {
-    LogUtil.v("CallButtonPresenter", "updating call UI for call: ", call);
+    LogUtil.v("CallButtonPresenter", "updating call UI for call: %s", call);
 
     if (mInCallButtonUi == null) {
       return;
diff --git a/java/com/android/incallui/CallCardPresenter.java b/java/com/android/incallui/CallCardPresenter.java
index 67b9177..824d875 100644
--- a/java/com/android/incallui/CallCardPresenter.java
+++ b/java/com/android/incallui/CallCardPresenter.java
@@ -28,6 +28,7 @@
 import android.hardware.display.DisplayManager;
 import android.os.BatteryManager;
 import android.os.Handler;
+import android.os.Trace;
 import android.support.annotation.NonNull;
 import android.support.annotation.Nullable;
 import android.support.v4.app.Fragment;
@@ -51,6 +52,7 @@
 import com.android.dialer.logging.Logger;
 import com.android.dialer.multimedia.MultimediaData;
 import com.android.dialer.oem.MotorolaUtils;
+import com.android.dialer.postcall.PostCall;
 import com.android.incallui.ContactInfoCache.ContactCacheEntry;
 import com.android.incallui.ContactInfoCache.ContactInfoCacheCallback;
 import com.android.incallui.InCallPresenter.InCallDetailsListener;
@@ -60,6 +62,7 @@
 import com.android.incallui.InCallPresenter.IncomingCallListener;
 import com.android.incallui.call.CallList;
 import com.android.incallui.call.DialerCall;
+import com.android.incallui.call.DialerCall.State;
 import com.android.incallui.call.DialerCallListener;
 import com.android.incallui.calllocation.CallLocation;
 import com.android.incallui.calllocation.CallLocationComponent;
@@ -67,6 +70,7 @@
 import com.android.incallui.incall.protocol.InCallScreen;
 import com.android.incallui.incall.protocol.InCallScreenDelegate;
 import com.android.incallui.incall.protocol.PrimaryCallState;
+import com.android.incallui.incall.protocol.PrimaryCallState.ButtonState;
 import com.android.incallui.incall.protocol.PrimaryInfo;
 import com.android.incallui.incall.protocol.SecondaryInfo;
 import com.android.incallui.videotech.utils.SessionModificationState;
@@ -245,8 +249,10 @@
 
   @Override
   public void onStateChange(InCallState oldState, InCallState newState, CallList callList) {
+    Trace.beginSection("CallCardPresenter.onStateChange");
     LogUtil.v("CallCardPresenter.onStateChange", "oldState: %s, newState: %s", oldState, newState);
     if (mInCallScreen == null) {
+      Trace.endSection();
       return;
     }
 
@@ -343,6 +349,7 @@
             callState != DialerCall.State.INCOMING /* animate */);
 
     maybeSendAccessibilityEvent(oldState, newState, primaryChanged);
+    Trace.endSection();
   }
 
   @Override
@@ -472,7 +479,9 @@
                   CallerInfoUtils.isVoiceMailNumber(mContext, mPrimary),
                   mPrimary.isRemotelyHeld(),
                   isBusiness,
-                  supports2ndCallOnHold()));
+                  supports2ndCallOnHold(),
+                  getSwapToSecondaryButtonState(),
+                  mPrimary.isAssistedDialed()));
 
       InCallActivity activity =
           (InCallActivity) (mInCallScreen.getInCallScreenFragment().getActivity());
@@ -482,6 +491,16 @@
     }
   }
 
+  private @ButtonState int getSwapToSecondaryButtonState() {
+    if (mSecondary == null) {
+      return ButtonState.NOT_SUPPORT;
+    }
+    if (mPrimary.getState() == State.ACTIVE) {
+      return ButtonState.ENABLED;
+    }
+    return ButtonState.DISABLED;
+  }
+
   /** Only show the conference call button if we can manage the conference. */
   private void maybeShowManageConferenceCallButton() {
     getUi().showManageConferenceCallButton(shouldShowManageConference());
@@ -570,8 +589,8 @@
     if (call != null) {
       call.getLogState().contactLookupResult = entry.contactLookupResult;
     }
-    if (entry.contactUri != null) {
-      CallerInfoUtils.sendViewNotification(mContext, entry.contactUri);
+    if (entry.lookupUri != null) {
+      CallerInfoUtils.sendViewNotification(mContext, entry.lookupUri);
     }
   }
 
@@ -1000,6 +1019,7 @@
     if (mPrimary != null) {
       mPrimary.disconnect();
     }
+    PostCall.onDisconnectPressed(mContext);
   }
 
   /**
diff --git a/java/com/android/incallui/CallerInfoAsyncQuery.java b/java/com/android/incallui/CallerInfoAsyncQuery.java
index d620d47..858d0f4 100644
--- a/java/com/android/incallui/CallerInfoAsyncQuery.java
+++ b/java/com/android/incallui/CallerInfoAsyncQuery.java
@@ -41,6 +41,7 @@
 import com.android.dialer.phonenumbercache.CachedNumberLookupService.CachedContactInfo;
 import com.android.dialer.phonenumbercache.ContactInfoHelper;
 import com.android.dialer.phonenumbercache.PhoneNumberCache;
+import com.android.dialer.strictmode.DialerStrictMode;
 import java.io.IOException;
 import java.io.InputStream;
 import java.util.ArrayList;
@@ -189,7 +190,7 @@
       CallerInfo info,
       OnQueryCompleteListener listener,
       Object cookie) {
-    long[] directoryIds = getDirectoryIds(context);
+    long[] directoryIds = DialerStrictMode.bypass(() -> getDirectoryIds(context));
     int size = directoryIds.length;
     if (size == 0) {
       return false;
diff --git a/java/com/android/incallui/ConferenceManagerFragment.java b/java/com/android/incallui/ConferenceManagerFragment.java
index cef8a38..bd6cb85 100644
--- a/java/com/android/incallui/ConferenceManagerFragment.java
+++ b/java/com/android/incallui/ConferenceManagerFragment.java
@@ -21,7 +21,7 @@
 import android.view.View;
 import android.view.ViewGroup;
 import android.widget.ListView;
-import com.android.contacts.common.ContactPhotoManager;
+import com.android.dialer.contactphoto.ContactPhotoManager;
 import com.android.dialer.logging.Logger;
 import com.android.dialer.logging.ScreenEvent;
 import com.android.incallui.ConferenceManagerPresenter.ConferenceManagerUi;
diff --git a/java/com/android/incallui/ConferenceParticipantListAdapter.java b/java/com/android/incallui/ConferenceParticipantListAdapter.java
index 712bdef..70cdf24 100644
--- a/java/com/android/incallui/ConferenceParticipantListAdapter.java
+++ b/java/com/android/incallui/ConferenceParticipantListAdapter.java
@@ -31,12 +31,12 @@
 import android.widget.ImageView;
 import android.widget.ListView;
 import android.widget.TextView;
-import com.android.contacts.common.ContactPhotoManager;
-import com.android.contacts.common.ContactPhotoManager.DefaultImageRequest;
 import com.android.contacts.common.compat.PhoneNumberUtilsCompat;
 import com.android.contacts.common.preference.ContactsPreferences;
 import com.android.contacts.common.util.ContactDisplayUtils;
 import com.android.dialer.common.LogUtil;
+import com.android.dialer.contactphoto.ContactPhotoManager;
+import com.android.dialer.contactphoto.ContactPhotoManager.DefaultImageRequest;
 import com.android.incallui.ContactInfoCache.ContactCacheEntry;
 import com.android.incallui.call.CallList;
 import com.android.incallui.call.DialerCall;
diff --git a/java/com/android/incallui/ContactInfoCache.java b/java/com/android/incallui/ContactInfoCache.java
index d50a5c2..3530153 100644
--- a/java/com/android/incallui/ContactInfoCache.java
+++ b/java/com/android/incallui/ContactInfoCache.java
@@ -699,8 +699,6 @@
     // Note in cache entry whether this is a pending async loading action to know whether to
     // wait for its callback or not.
     boolean hasPendingQuery;
-    /** This will be used for the "view" notification. */
-    public Uri contactUri;
     /** Either a display photo or a thumbnail URI. */
     Uri displayPhotoUri;
 
@@ -741,8 +739,6 @@
           + photo
           + ", isSipCall="
           + isSipCall
-          + ", contactUri="
-          + contactUri
           + ", displayPhotoUri="
           + displayPhotoUri
           + ", contactLookupResult="
diff --git a/java/com/android/incallui/DialpadFragment.java b/java/com/android/incallui/DialpadFragment.java
index 7f494aa..c614d84 100644
--- a/java/com/android/incallui/DialpadFragment.java
+++ b/java/com/android/incallui/DialpadFragment.java
@@ -125,7 +125,7 @@
     return this;
   }
 
-  // TODO Adds hardware keyboard listener
+  // TODO(klp) Adds hardware keyboard listener
 
   @Override
   public View onCreateView(
diff --git a/java/com/android/incallui/ExternalCallNotifier.java b/java/com/android/incallui/ExternalCallNotifier.java
index f01a294..ed3c918 100644
--- a/java/com/android/incallui/ExternalCallNotifier.java
+++ b/java/com/android/incallui/ExternalCallNotifier.java
@@ -40,8 +40,8 @@
 import com.android.contacts.common.ContactsUtils;
 import com.android.contacts.common.compat.CallCompat;
 import com.android.contacts.common.preference.ContactsPreferences;
-import com.android.contacts.common.util.BitmapUtil;
 import com.android.contacts.common.util.ContactDisplayUtils;
+import com.android.dialer.contactphoto.BitmapUtil;
 import com.android.dialer.notification.NotificationChannelId;
 import com.android.incallui.call.DialerCall;
 import com.android.incallui.call.DialerCallDelegate;
diff --git a/java/com/android/incallui/InCallActivity.java b/java/com/android/incallui/InCallActivity.java
index c95086c..3ea2b17 100644
--- a/java/com/android/incallui/InCallActivity.java
+++ b/java/com/android/incallui/InCallActivity.java
@@ -21,6 +21,7 @@
 import android.graphics.drawable.GradientDrawable;
 import android.graphics.drawable.GradientDrawable.Orientation;
 import android.os.Bundle;
+import android.os.Trace;
 import android.support.annotation.ColorInt;
 import android.support.annotation.FloatRange;
 import android.support.annotation.NonNull;
@@ -112,6 +113,7 @@
 
   @Override
   protected void onCreate(Bundle icicle) {
+    Trace.beginSection("InCallActivity.onCreate");
     LogUtil.i("InCallActivity.onCreate", "");
     super.onCreate(icicle);
 
@@ -129,6 +131,7 @@
             View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION);
 
     pseudoBlackScreenOverlay = findViewById(R.id.psuedo_black_screen_overlay);
+    Trace.endSection();
   }
 
   @Override
@@ -144,6 +147,7 @@
 
   @Override
   protected void onStart() {
+    Trace.beginSection("InCallActivity.onStart");
     LogUtil.i("InCallActivity.onStart", "");
     super.onStart();
     isVisible = true;
@@ -154,40 +158,49 @@
       // Hide the dialpad because there may not be enough room
       showDialpadFragment(false, false);
     }
+    Trace.endSection();
   }
 
   @Override
   protected void onResume() {
+    Trace.beginSection("InCallActivity.onResume");
     LogUtil.i("InCallActivity.onResume", "");
     super.onResume();
     common.onResume();
     PseudoScreenState pseudoScreenState = InCallPresenter.getInstance().getPseudoScreenState();
     pseudoScreenState.addListener(this);
     onPseudoScreenStateChanged(pseudoScreenState.isOn());
+    Trace.endSection();
   }
 
   /** onPause is guaranteed to be called when the InCallActivity goes in the background. */
   @Override
   protected void onPause() {
+    Trace.beginSection("InCallActivity.onPause");
     LogUtil.i("InCallActivity.onPause", "");
     super.onPause();
     common.onPause();
     InCallPresenter.getInstance().getPseudoScreenState().removeListener(this);
+    Trace.endSection();
   }
 
   @Override
   protected void onStop() {
+    Trace.beginSection("InCallActivity.onStop");
     LogUtil.i("InCallActivity.onStop", "");
     super.onStop();
     common.onStop();
     isVisible = false;
+    Trace.endSection();
   }
 
   @Override
   protected void onDestroy() {
+    Trace.beginSection("InCallActivity.onDestroy");
     LogUtil.i("InCallActivity.onDestroy", "");
     super.onDestroy();
     common.onDestroy();
+    Trace.endSection();
   }
 
   @Override
@@ -476,8 +489,10 @@
   }
 
   public void onPrimaryCallStateChanged() {
+    Trace.beginSection("InCallActivity.onPrimaryCallStateChanged");
     LogUtil.i("InCallActivity.onPrimaryCallStateChanged", "");
     showMainInCallFragment();
+    Trace.endSection();
   }
 
   public void onWiFiToLteHandover(DialerCall call) {
@@ -514,15 +529,18 @@
   }
 
   private void showMainInCallFragment() {
+    Trace.beginSection("InCallActivity.showMainInCallFragment");
     // If the activity's onStart method hasn't been called yet then defer doing any work.
     if (!isVisible) {
       LogUtil.i("InCallActivity.showMainInCallFragment", "not visible yet/anymore");
+      Trace.endSection();
       return;
     }
 
     // Don't let this be reentrant.
     if (isInShowMainInCallFragment) {
       LogUtil.i("InCallActivity.showMainInCallFragment", "already in method, bailing");
+      Trace.endSection();
       return;
     }
 
@@ -560,10 +578,13 @@
     }
 
     if (didChangeInCall || didChangeVideo || didChangeAnswer) {
+      Trace.beginSection("InCallActivity.commitTransaction");
       transaction.commitNow();
+      Trace.endSection();
       Logger.get(this).logScreenView(ScreenEvent.Type.INCALL, this);
     }
     isInShowMainInCallFragment = false;
+    Trace.endSection();
   }
 
   private ShouldShowUiResult getShouldShowAnswerUi() {
diff --git a/java/com/android/incallui/InCallActivityCommon.java b/java/com/android/incallui/InCallActivityCommon.java
index 3a264be..14531e0 100644
--- a/java/com/android/incallui/InCallActivityCommon.java
+++ b/java/com/android/incallui/InCallActivityCommon.java
@@ -21,6 +21,7 @@
 import android.app.ActivityManager.TaskDescription;
 import android.app.AlertDialog;
 import android.app.Dialog;
+import android.app.KeyguardManager;
 import android.content.DialogInterface;
 import android.content.DialogInterface.OnCancelListener;
 import android.content.DialogInterface.OnDismissListener;
@@ -105,6 +106,8 @@
   private boolean animateDialpadOnShow;
   private String dtmfTextToPreopulate;
   @DialpadRequestType private int showDialpadRequest = DIALPAD_REQUEST_NONE;
+  // If activity is going to be recreated. This is usually happening in {@link onNewIntent}.
+  private boolean isRecreating;
 
   private final SelectPhoneAccountListener selectAccountListener =
       new SelectPhoneAccountListener() {
@@ -209,7 +212,8 @@
           }
         });
 
-    if (icicle != null) {
+    // Don't override the value if show dialpad request is true in intent extras.
+    if (icicle != null && showDialpadRequest == DIALPAD_REQUEST_NONE) {
       // If the dialpad was shown before, set variables indicating it should be shown and
       // populated with the previous DTMF text.  The dialpad is actually shown and populated
       // in onResume() to ensure the hosting fragment has been inflated and is ready to receive it.
@@ -319,6 +323,18 @@
   }
 
   public void onStop() {
+    // Disconnects call waiting for account when activity is hidden e.g. user press home button.
+    // This is necessary otherwise the pending call will stuck on account choose and no new call
+    // will be able to create. See b/63600434 for more details.
+    // Skip this on locked screen since the activity may go over life cycle and start again.
+    if (!isRecreating
+        && !inCallActivity.getSystemService(KeyguardManager.class).isKeyguardLocked()) {
+      DialerCall waitingForAccountCall = CallList.getInstance().getWaitingForAccountCall();
+      if (waitingForAccountCall != null) {
+        waitingForAccountCall.disconnect();
+      }
+    }
+
     enableInCallOrientationEventListener(false);
     InCallPresenter.getInstance().updateIsChangingConfigurations();
     InCallPresenter.getInstance().onActivityStopped();
@@ -331,6 +347,7 @@
 
   void onNewIntent(Intent intent, boolean isRecreating) {
     LogUtil.i("InCallActivityCommon.onNewIntent", "");
+    this.isRecreating = isRecreating;
 
     // We're being re-launched with a new Intent.  Since it's possible for a
     // single InCallActivity instance to persist indefinitely (even if we
diff --git a/java/com/android/incallui/InCallPresenter.java b/java/com/android/incallui/InCallPresenter.java
index 563468e..6c08c49 100644
--- a/java/com/android/incallui/InCallPresenter.java
+++ b/java/com/android/incallui/InCallPresenter.java
@@ -21,6 +21,7 @@
 import android.graphics.Point;
 import android.os.Bundle;
 import android.os.Handler;
+import android.os.Trace;
 import android.support.annotation.NonNull;
 import android.support.annotation.Nullable;
 import android.support.annotation.VisibleForTesting;
@@ -41,6 +42,7 @@
 import com.android.dialer.blocking.FilteredNumberCompat;
 import com.android.dialer.blocking.FilteredNumbersUtil;
 import com.android.dialer.common.LogUtil;
+import com.android.dialer.common.concurrent.DefaultDialerExecutorFactory;
 import com.android.dialer.enrichedcall.EnrichedCallComponent;
 import com.android.dialer.location.GeoUtil;
 import com.android.dialer.logging.InteractionEvent;
@@ -323,11 +325,13 @@
       ContactInfoCache contactInfoCache,
       ProximitySensor proximitySensor,
       FilteredNumberAsyncQueryHandler filteredNumberQueryHandler) {
+    Trace.beginSection("InCallPresenter.setUp");
     if (mServiceConnected) {
       LogUtil.i("InCallPresenter.setUp", "New service connection replacing existing one.");
       if (context != mContext || callList != mCallList) {
         throw new IllegalStateException();
       }
+      Trace.endSection();
       return;
     }
 
@@ -362,7 +366,7 @@
     mCallList.addListener(this);
 
     // Create spam call list listener and add it to the list of listeners
-    mSpamCallListListener = new SpamCallListListener(context);
+    mSpamCallListListener = new SpamCallListListener(context, new DefaultDialerExecutorFactory());
     mCallList.addListener(mSpamCallListListener);
 
     VideoPauseController.getInstance().setUp(this);
@@ -373,6 +377,7 @@
         .listen(mPhoneStateListener, PhoneStateListener.LISTEN_CALL_STATE);
 
     LogUtil.d("InCallPresenter.setUp", "Finished InCallPresenter.setUp");
+    Trace.endSection();
   }
 
   /**
@@ -513,6 +518,7 @@
   }
 
   public void onCallAdded(final android.telecom.Call call) {
+    Trace.beginSection("InCallPresenter.onCallAdded");
     LatencyReport latencyReport = new LatencyReport(call);
     if (shouldAttemptBlocking(call)) {
       maybeBlockCall(call, latencyReport);
@@ -528,6 +534,7 @@
     // Since a call has been added we are no longer waiting for Telecom to send us a call.
     setBoundAndWaitingForOutgoingCall(false, null);
     call.registerCallback(mCallCallback);
+    Trace.endSection();
   }
 
   private boolean shouldAttemptBlocking(android.telecom.Call call) {
@@ -690,11 +697,14 @@
    */
   @Override
   public void onCallListChange(CallList callList) {
+    Trace.beginSection("InCallPresenter.onCallListChange");
     if (mInCallActivity != null && mInCallActivity.isInCallScreenAnimating()) {
       mAwaitingCallListUpdate = true;
+      Trace.endSection();
       return;
     }
     if (callList == null) {
+      Trace.endSection();
       return;
     }
 
@@ -744,11 +754,13 @@
           callList.getActiveOrBackgroundCall() != null || callList.getOutgoingCall() != null;
       mInCallActivity.dismissKeyguard(hasCall);
     }
+    Trace.endSection();
   }
 
   /** Called when there is a new incoming call. */
   @Override
   public void onIncomingCall(DialerCall call) {
+    Trace.beginSection("InCallPresenter.onIncomingCall");
     InCallState newState = startOrFinishUi(InCallState.INCOMING);
     InCallState oldState = mInCallState;
 
@@ -764,6 +776,7 @@
       // Re-evaluate which fragment is being shown.
       mInCallActivity.onPrimaryCallStateChanged();
     }
+    Trace.endSection();
   }
 
   @Override
@@ -855,7 +868,7 @@
 
     if (newState == InCallState.NO_CALLS) {
       if (mBoundAndWaitingForOutgoingCall) {
-        return InCallState.OUTGOING;
+        return InCallState.PENDING_OUTGOING;
       }
     }
 
@@ -873,7 +886,7 @@
     mBoundAndWaitingForOutgoingCall = isBound;
     mThemeColorManager.setPendingPhoneAccountHandle(handle);
     if (isBound && mInCallState == InCallState.NO_CALLS) {
-      mInCallState = InCallState.OUTGOING;
+      mInCallState = InCallState.PENDING_OUTGOING;
     }
   }
 
@@ -1064,7 +1077,7 @@
     LogUtil.d("InCallPresenter.onActivityStarted", "onActivityStarted");
     notifyVideoPauseController(true);
     if (mStatusBarNotifier != null) {
-      // TODO - b/36649622: Investigate this redundant call
+      // TODO(maxwelb) - b/36649622: Investigate this redundant call
       mStatusBarNotifier.updateNotification(mCallList);
     }
     applyScreenTimeout();
diff --git a/java/com/android/incallui/InCallServiceImpl.java b/java/com/android/incallui/InCallServiceImpl.java
index d2b0297..a2e2432 100644
--- a/java/com/android/incallui/InCallServiceImpl.java
+++ b/java/com/android/incallui/InCallServiceImpl.java
@@ -19,6 +19,7 @@
 import android.content.Context;
 import android.content.Intent;
 import android.os.IBinder;
+import android.os.Trace;
 import android.telecom.Call;
 import android.telecom.CallAudioState;
 import android.telecom.InCallService;
@@ -45,26 +46,35 @@
 
   @Override
   public void onBringToForeground(boolean showDialpad) {
+    Trace.beginSection("InCallServiceImpl.onBringToForeground");
     InCallPresenter.getInstance().onBringToForeground(showDialpad);
+    Trace.endSection();
   }
 
   @Override
   public void onCallAdded(Call call) {
+    Trace.beginSection("InCallServiceImpl.onCallAdded");
     InCallPresenter.getInstance().onCallAdded(call);
+    Trace.endSection();
   }
 
   @Override
   public void onCallRemoved(Call call) {
+    Trace.beginSection("InCallServiceImpl.onCallRemoved");
     InCallPresenter.getInstance().onCallRemoved(call);
+    Trace.endSection();
   }
 
   @Override
   public void onCanAddCallChanged(boolean canAddCall) {
+    Trace.beginSection("InCallServiceImpl.onCanAddCallChanged");
     InCallPresenter.getInstance().onCanAddCallChanged(canAddCall);
+    Trace.endSection();
   }
 
   @Override
   public IBinder onBind(Intent intent) {
+    Trace.beginSection("InCallServiceImpl.onBind");
     final Context context = getApplicationContext();
     final ContactInfoCache contactInfoCache = ContactInfoCache.getInstance(context);
     InCallPresenter.getInstance()
@@ -85,20 +95,25 @@
       returnToCallController = new ReturnToCallController(this);
     }
 
-    return super.onBind(intent);
+    IBinder iBinder = super.onBind(intent);
+    Trace.endSection();
+    return iBinder;
   }
 
   @Override
   public boolean onUnbind(Intent intent) {
+    Trace.beginSection("InCallServiceImpl.onUnbind");
     super.onUnbind(intent);
 
     InCallPresenter.getInstance().onServiceUnbind();
     tearDown();
 
+    Trace.endSection();
     return false;
   }
 
   private void tearDown() {
+    Trace.beginSection("InCallServiceImpl.tearDown");
     Log.v(this, "tearDown");
     // Tear down the InCall system
     TelecomAdapter.getInstance().clearInCallService();
@@ -107,5 +122,6 @@
       returnToCallController.tearDown();
       returnToCallController = null;
     }
+    Trace.endSection();
   }
 }
diff --git a/java/com/android/incallui/ProximitySensor.java b/java/com/android/incallui/ProximitySensor.java
index 653d85b..db538ab 100644
--- a/java/com/android/incallui/ProximitySensor.java
+++ b/java/com/android/incallui/ProximitySensor.java
@@ -102,7 +102,10 @@
     // sensor during incoming call screen. We check hasLiveCall() because a disconnected call
     // can also put the in-call screen in the INCALL state.
     boolean hasOngoingCall = InCallState.INCALL == newState && callList.hasLiveCall();
-    boolean isOffhook = (InCallState.OUTGOING == newState) || hasOngoingCall;
+    boolean isOffhook =
+        InCallState.PENDING_OUTGOING == newState
+            || InCallState.OUTGOING == newState
+            || hasOngoingCall;
 
     DialerCall activeCall = callList.getActiveCall();
     boolean isVideoCall = activeCall != null && activeCall.isVideoCall();
diff --git a/java/com/android/incallui/ReturnToCallController.java b/java/com/android/incallui/ReturnToCallController.java
index 33154c5..8e4b9cc 100644
--- a/java/com/android/incallui/ReturnToCallController.java
+++ b/java/com/android/incallui/ReturnToCallController.java
@@ -102,6 +102,14 @@
     }
   }
 
+  private void hideAndReset() {
+    if (bubble != null) {
+      bubble.hideAndReset();
+    } else {
+      LogUtil.i("ReturnToCallController.reset", "reset() called without calling show()");
+    }
+  }
+
   private void show() {
     if (bubble == null) {
       bubble = startNewBubble();
@@ -134,12 +142,14 @@
 
   @Override
   public void onDisconnect(DialerCall call) {
-    if (bubble != null && bubble.isVisible()) {
+    boolean hasAnotherCall = CallList.getInstance().getActiveOrBackgroundCall() != null;
+    if (bubble != null
+        && bubble.isVisible()
+        && (!TelecomUtil.isInCall(context) || hasAnotherCall)) {
       bubble.showText(context.getText(R.string.incall_call_ended));
     }
-
-    if (!TelecomUtil.isInCall(context)) {
-      hide();
+    if (!hasAnotherCall) {
+      hideAndReset();
     }
   }
 
diff --git a/java/com/android/incallui/StatusBarNotifier.java b/java/com/android/incallui/StatusBarNotifier.java
index 53017a1..07f179e 100644
--- a/java/com/android/incallui/StatusBarNotifier.java
+++ b/java/com/android/incallui/StatusBarNotifier.java
@@ -60,15 +60,15 @@
 import android.text.style.ForegroundColorSpan;
 import com.android.contacts.common.ContactsUtils;
 import com.android.contacts.common.ContactsUtils.UserType;
-import com.android.contacts.common.lettertiles.LetterTileDrawable;
-import com.android.contacts.common.lettertiles.LetterTileDrawable.ContactType;
 import com.android.contacts.common.preference.ContactsPreferences;
-import com.android.contacts.common.util.BitmapUtil;
 import com.android.contacts.common.util.ContactDisplayUtils;
 import com.android.dialer.common.LogUtil;
 import com.android.dialer.configprovider.ConfigProviderBindings;
+import com.android.dialer.contactphoto.BitmapUtil;
 import com.android.dialer.enrichedcall.EnrichedCallManager;
 import com.android.dialer.enrichedcall.Session;
+import com.android.dialer.lettertile.LetterTileDrawable;
+import com.android.dialer.lettertile.LetterTileDrawable.ContactType;
 import com.android.dialer.multimedia.MultimediaData;
 import com.android.dialer.notification.NotificationChannelId;
 import com.android.dialer.oem.MotorolaUtils;
@@ -155,10 +155,6 @@
   private static int getWorkStringFromPersonalString(int resId) {
     if (resId == R.string.notification_ongoing_call) {
       return R.string.notification_ongoing_work_call;
-    } else if (resId == R.string.notification_ongoing_call_wifi) {
-      return R.string.notification_ongoing_work_call_wifi;
-    } else if (resId == R.string.notification_incoming_call_wifi) {
-      return R.string.notification_incoming_work_call_wifi;
     } else if (resId == R.string.notification_incoming_call) {
       return R.string.notification_incoming_work_call;
     } else {
@@ -696,8 +692,9 @@
     }
 
     int resId = R.string.notification_ongoing_call;
+    String wifiBrand = mContext.getString(R.string.notification_call_wifi_brand);
     if (call.hasProperty(Details.PROPERTY_WIFI)) {
-      resId = R.string.notification_ongoing_call_wifi;
+      resId = R.string.notification_ongoing_call_wifi_template;
     }
 
     if (isIncomingOrWaiting) {
@@ -706,7 +703,8 @@
       } else if (shouldShowEnrichedCallNotification(call.getEnrichedCallSession())) {
         resId = getECIncomingCallText(call.getEnrichedCallSession());
       } else if (call.hasProperty(Details.PROPERTY_WIFI)) {
-        resId = R.string.notification_incoming_call_wifi;
+        resId = R.string.notification_incoming_call_wifi_template;
+
       } else {
         resId = R.string.notification_incoming_call;
       }
@@ -723,6 +721,13 @@
     boolean isWorkCall = call.hasProperty(PROPERTY_ENTERPRISE_CALL);
     if (userType == ContactsUtils.USER_TYPE_WORK || isWorkCall) {
       resId = getWorkStringFromPersonalString(resId);
+      wifiBrand = mContext.getString(R.string.notification_call_wifi_work_brand);
+    }
+
+    if (resId == R.string.notification_incoming_call_wifi_template
+        || resId == R.string.notification_ongoing_call_wifi_template) {
+      // TODO(b/64525903): Potentially apply this template logic everywhere.
+      return mContext.getString(resId, wifiBrand);
     }
 
     return mContext.getString(resId);
diff --git a/java/com/android/incallui/VideoCallPresenter.java b/java/com/android/incallui/VideoCallPresenter.java
index 5b4178d..89cddb9 100644
--- a/java/com/android/incallui/VideoCallPresenter.java
+++ b/java/com/android/incallui/VideoCallPresenter.java
@@ -762,7 +762,7 @@
   /**
    * Adjusts the current video mode by setting up the preview and display surfaces as necessary.
    * Expected to be called whenever the video state associated with a call changes (e.g. a user
-   * turns their camera on or off) to ensure the correct surfaces are shown/hidden. TODO: Need
+   * turns their camera on or off) to ensure the correct surfaces are shown/hidden. TODO(vt): Need
    * to adjust size and orientation of preview surface here.
    */
   private void adjustVideoMode(DialerCall call) {
@@ -844,7 +844,7 @@
     if (!hasCameraPermission) {
       videoCall.setCamera(null);
       mPreviewSurfaceState = PreviewSurfaceState.NONE;
-      // TODO: Inform remote party that the video is off. This is similar to b/30256571.
+      // TODO(wangqi): Inform remote party that the video is off. This is similar to b/30256571.
     } else if (isCameraRequired) {
       InCallCameraManager cameraManager = InCallPresenter.getInstance().getInCallCameraManager();
       videoCall.setCamera(cameraManager.getActiveCameraId());
diff --git a/java/com/android/incallui/answer/impl/AnswerFragment.java b/java/com/android/incallui/answer/impl/AnswerFragment.java
index b5dd117..db6d43d 100644
--- a/java/com/android/incallui/answer/impl/AnswerFragment.java
+++ b/java/com/android/incallui/answer/impl/AnswerFragment.java
@@ -954,7 +954,7 @@
 
   private void showMessageMenu() {
     LogUtil.i("AnswerFragment.showMessageMenu", "Show sms menu.");
-    if (getChildFragmentManager().isDestroyed()) {
+    if (getContext() == null || isDetached() || getChildFragmentManager().isDestroyed()) {
       return;
     }
 
diff --git a/java/com/android/incallui/answer/impl/hint/AnswerHint.java b/java/com/android/incallui/answer/impl/hint/AnswerHint.java
index dd3b822..1e78f50 100644
--- a/java/com/android/incallui/answer/impl/hint/AnswerHint.java
+++ b/java/com/android/incallui/answer/impl/hint/AnswerHint.java
@@ -27,7 +27,7 @@
   /**
    * Inflates the hint's layout into the container.
    *
-   * <p>TODO: if the hint becomes more dependent on other UI elements of the AnswerFragment,
+   * <p>TODO(twyen): if the hint becomes more dependent on other UI elements of the AnswerFragment,
    * should put put and hintText into another data structure.
    */
   void onCreateView(LayoutInflater inflater, ViewGroup container, View puck, TextView hintText);
diff --git a/java/com/android/incallui/answer/impl/hint/PawSecretCodeListener.java b/java/com/android/incallui/answer/impl/hint/PawSecretCodeListener.java
index 204c4e1..871d80c 100644
--- a/java/com/android/incallui/answer/impl/hint/PawSecretCodeListener.java
+++ b/java/com/android/incallui/answer/impl/hint/PawSecretCodeListener.java
@@ -24,7 +24,6 @@
 import android.support.annotation.VisibleForTesting;
 import android.text.TextUtils;
 import android.widget.Toast;
-import com.android.dialer.common.Assert;
 import com.android.dialer.common.LogUtil;
 import com.android.dialer.configprovider.ConfigProviderBindings;
 import com.android.dialer.logging.DialerImpression.Type;
@@ -59,7 +58,9 @@
   @Override
   public void onReceive(Context context, Intent intent) {
     String host = intent.getData().getHost();
-    Assert.checkState(!TextUtils.isEmpty(host));
+    if (TextUtils.isEmpty(host)) {
+      return;
+    }
     String secretCode =
         ConfigProviderBindings.get(context).getString(CONFIG_PAW_SECRET_CODE, "729");
     if (secretCode == null) {
diff --git a/java/com/android/incallui/answerproximitysensor/AnswerProximitySensor.java b/java/com/android/incallui/answerproximitysensor/AnswerProximitySensor.java
index 536a470..16fad8b 100644
--- a/java/com/android/incallui/answerproximitysensor/AnswerProximitySensor.java
+++ b/java/com/android/incallui/answerproximitysensor/AnswerProximitySensor.java
@@ -80,7 +80,7 @@
         .getBoolean(CONFIG_ANSWER_PSEUDO_PROXIMITY_WAKE_LOCK_ENABLED, true)) {
       answerProximityWakeLock = new PseudoProximityWakeLock(context, pseudoScreenState);
     } else {
-      // TODO: choose a wake lock implementation base on framework/device.
+      // TODO(twyen): choose a wake lock implementation base on framework/device.
       // These bugs requires the PseudoProximityWakeLock workaround:
       // b/30439151 Proximity sensor not working on M
       // b/31499931 fautly touch input when screen is off on marlin/sailfish
diff --git a/java/com/android/incallui/autoresizetext/AutoResizeTextView.java b/java/com/android/incallui/autoresizetext/AutoResizeTextView.java
index eedcbe5..5a22b93 100644
--- a/java/com/android/incallui/autoresizetext/AutoResizeTextView.java
+++ b/java/com/android/incallui/autoresizetext/AutoResizeTextView.java
@@ -146,7 +146,7 @@
     float maxTextSize = TypedValue.applyDimension(unit, size, displayMetrics);
     if (this.maxTextSize != maxTextSize) {
       this.maxTextSize = maxTextSize;
-      // TODO: It's not actually necessary to clear the whole cache here. To optimize cache
+      // TODO(tobyj): It's not actually necessary to clear the whole cache here. To optimize cache
       // deletion we'd have to delete all entries in the cache with a value equal or larger than
       // MIN(old_max_size, new_max_size) when changing maxTextSize; and all entries with a value
       // equal or smaller than MAX(old_min_size, new_min_size) when changing minTextSize.
diff --git a/java/com/android/incallui/call/CallList.java b/java/com/android/incallui/call/CallList.java
index 269fcd6..d932c24 100644
--- a/java/com/android/incallui/call/CallList.java
+++ b/java/com/android/incallui/call/CallList.java
@@ -114,7 +114,7 @@
 
   public void onCallAdded(
       final Context context, final android.telecom.Call telecomCall, LatencyReport latencyReport) {
-    Trace.beginSection("onCallAdded");
+    Trace.beginSection("CallList.onCallAdded");
     final DialerCall call =
         new DialerCall(context, this, telecomCall, latencyReport, true /* registerCallback */);
     logSecondIncomingCall(context, call);
@@ -123,6 +123,7 @@
     manager.registerCapabilitiesListener(call);
     manager.registerStateChangedListener(call);
 
+    Trace.beginSection("checkSpam");
     final DialerCallListenerImpl dialerCallListener = new DialerCallListenerImpl(call);
     call.addListener(dialerCallListener);
     LogUtil.d("CallList.onCallAdded", "callState=" + call.getState());
@@ -169,7 +170,9 @@
 
       updateUserMarkedSpamStatus(call, context, number, dialerCallListener);
     }
+    Trace.endSection();
 
+    Trace.beginSection("checkBlock");
     FilteredNumberAsyncQueryHandler filteredNumberAsyncQueryHandler =
         new FilteredNumberAsyncQueryHandler(context);
 
@@ -185,6 +188,7 @@
         },
         call.getNumber(),
         GeoUtil.getCurrentCountryIso(context));
+    Trace.endSection();
 
     if (call.getState() == DialerCall.State.INCOMING
         || call.getState() == DialerCall.State.CALL_WAITING) {
@@ -353,6 +357,7 @@
 
   /** Called when a single call has changed. */
   private void onIncoming(DialerCall call) {
+    Trace.beginSection("CallList.onIncoming");
     if (updateCallInMap(call)) {
       LogUtil.i("CallList.onIncoming", String.valueOf(call));
     }
@@ -360,6 +365,7 @@
     for (Listener listener : mListeners) {
       listener.onIncomingCall(call);
     }
+    Trace.endSection();
   }
 
   public void addListener(@NonNull Listener listener) {
@@ -570,6 +576,7 @@
    */
   @VisibleForTesting
   void onUpdateCall(DialerCall call) {
+    Trace.beginSection("CallList.onUpdateCall");
     LogUtil.d("CallList.onUpdateCall", String.valueOf(call));
     if (!mCallById.containsKey(call.getId()) && call.isExternalCall()) {
       // When a regular call becomes external, it is removed from the call list, and there may be
@@ -582,6 +589,7 @@
     if (updateCallInMap(call)) {
       LogUtil.i("CallList.onUpdateCall", String.valueOf(call));
     }
+    Trace.endSection();
   }
 
   /**
@@ -606,6 +614,7 @@
    * @return false if no call previously existed and no call was added, otherwise true.
    */
   private boolean updateCallInMap(DialerCall call) {
+    Trace.beginSection("CallList.updateCallInMap");
     Objects.requireNonNull(call);
 
     boolean updated = false;
@@ -635,6 +644,7 @@
       updated = true;
     }
 
+    Trace.endSection();
     return updated;
   }
 
@@ -764,7 +774,7 @@
 
     @Override
     public void onDialerCallUpdate() {
-      Trace.beginSection("onUpdate");
+      Trace.beginSection("CallList.onDialerCallUpdate");
       onUpdateCall(mCall);
       notifyGenericListeners();
       Trace.endSection();
diff --git a/java/com/android/incallui/call/DialerCall.java b/java/com/android/incallui/call/DialerCall.java
index 88e0dbb..a954ee9 100644
--- a/java/com/android/incallui/call/DialerCall.java
+++ b/java/com/android/incallui/call/DialerCall.java
@@ -41,13 +41,13 @@
 import android.telephony.PhoneNumberUtils;
 import android.text.TextUtils;
 import com.android.contacts.common.compat.CallCompat;
-import com.android.contacts.common.compat.TelephonyManagerCompat;
 import com.android.contacts.common.compat.telecom.TelecomManagerCompat;
 import com.android.dialer.callintent.CallInitiationType;
 import com.android.dialer.callintent.CallIntentParser;
 import com.android.dialer.callintent.CallSpecificAppData;
 import com.android.dialer.common.Assert;
 import com.android.dialer.common.LogUtil;
+import com.android.dialer.compat.telephony.TelephonyManagerCompat;
 import com.android.dialer.configprovider.ConfigProviderBindings;
 import com.android.dialer.enrichedcall.EnrichedCallCapabilities;
 import com.android.dialer.enrichedcall.EnrichedCallComponent;
@@ -152,6 +152,7 @@
   // Times when a second call is received but AnswerAndRelease button is not shown
   // since it's not supported.
   private int secondCallWithoutAnswerAndReleasedButtonTimes = 0;
+  private VideoTech videoTech;
 
   public static String getNumberFromHandle(Uri handle) {
     return handle == null ? "" : handle.getSchemeSpecificPart();
@@ -194,14 +195,15 @@
 
         @Override
         public void onDetailsChanged(Call call, Call.Details details) {
-          LogUtil.v("TelecomCallCallback.onStateChanged", " call=" + call + " details=" + details);
+          LogUtil.v(
+              "TelecomCallCallback.onDetailsChanged", " call=" + call + " details=" + details);
           update();
         }
 
         @Override
         public void onCannedTextResponsesLoaded(Call call, List<String> cannedTextResponses) {
           LogUtil.v(
-              "TelecomCallCallback.onStateChanged",
+              "TelecomCallCallback.onCannedTextResponsesLoaded",
               "call=" + call + " cannedTextResponses=" + cannedTextResponses);
           for (CannedTextResponsesLoadedListener listener : mCannedTextResponsesLoadedListeners) {
             listener.onCannedTextResponsesLoaded(DialerCall.this);
@@ -211,7 +213,7 @@
         @Override
         public void onPostDialWait(Call call, String remainingPostDialSequence) {
           LogUtil.v(
-              "TelecomCallCallback.onStateChanged",
+              "TelecomCallCallback.onPostDialWait",
               "call=" + call + " remainingPostDialSequence=" + remainingPostDialSequence);
           update();
         }
@@ -219,20 +221,20 @@
         @Override
         public void onVideoCallChanged(Call call, VideoCall videoCall) {
           LogUtil.v(
-              "TelecomCallCallback.onStateChanged", "call=" + call + " videoCall=" + videoCall);
+              "TelecomCallCallback.onVideoCallChanged", "call=" + call + " videoCall=" + videoCall);
           update();
         }
 
         @Override
         public void onCallDestroyed(Call call) {
-          LogUtil.v("TelecomCallCallback.onStateChanged", "call=" + call);
+          LogUtil.v("TelecomCallCallback.onCallDestroyed", "call=" + call);
           unregisterCallback();
         }
 
         @Override
         public void onConferenceableCallsChanged(Call call, List<Call> conferenceableCalls) {
           LogUtil.v(
-              "DialerCall.onConferenceableCallsChanged",
+              "TelecomCallCallback.onConferenceableCallsChanged",
               "call %s, conferenceable calls: %d",
               call,
               conferenceableCalls.size());
@@ -242,7 +244,7 @@
         @Override
         public void onConnectionEvent(android.telecom.Call call, String event, Bundle extras) {
           LogUtil.v(
-              "DialerCall.onConnectionEvent",
+              "TelecomCallCallback.onConnectionEvent",
               "Call: " + call + ", Event: " + event + ", Extras: " + extras);
           switch (event) {
               // The Previous attempt to Merge two calls together has failed in Telecom. We must
@@ -428,8 +430,10 @@
   }
 
   private void update() {
-    Trace.beginSection("Update");
+    Trace.beginSection("DialerCall.update");
     int oldState = getState();
+    // Clear any cache here that could potentially change on update.
+    videoTech = null;
     // We want to potentially register a video call callback here.
     updateFromTelecomCall();
     if (oldState != getState() && getState() == DialerCall.State.DISCONNECTED) {
@@ -441,7 +445,7 @@
           .unregisterCapabilitiesListener(this);
       EnrichedCallComponent.get(mContext)
           .getEnrichedCallManager()
-          .unregisterCapabilitiesListener(this);
+          .unregisterStateChangedListener(this);
     } else {
       for (DialerCallListener listener : mListeners) {
         listener.onDialerCallUpdate();
@@ -451,6 +455,7 @@
   }
 
   private void updateFromTelecomCall() {
+    Trace.beginSection("DialerCall.updateFromTelecomCall");
     LogUtil.v("DialerCall.updateFromTelecomCall", mTelecomCall.toString());
 
     mVideoTechManager.dispatchCallStateChanged(mTelecomCall.getState());
@@ -499,6 +504,7 @@
         }
       }
     }
+    Trace.endSection();
   }
 
   /**
@@ -676,13 +682,23 @@
   }
 
   public void setState(int state) {
-    mState = state;
-    if (mState == State.INCOMING) {
+    if (state == State.INCOMING) {
       mLogState.isIncoming = true;
-    } else if (mState == State.DISCONNECTED) {
-      mLogState.duration =
+    } else if (state == State.DISCONNECTED) {
+      long newDuration =
           getConnectTimeMillis() == 0 ? 0 : System.currentTimeMillis() - getConnectTimeMillis();
+      if (mState != state) {
+        mLogState.duration = newDuration;
+      } else {
+        LogUtil.i(
+            "DialerCall.setState",
+            "ignoring state transition from DISCONNECTED to DISCONNECTED."
+                + " Duration would have changed from %s to %s",
+            mLogState.duration,
+            newDuration);
+      }
     }
+    mState = state;
   }
 
   public int getNumberPresentation() {
@@ -989,6 +1005,13 @@
     return mLogState.isIncoming;
   }
 
+  public boolean isAssistedDialed() {
+    if (getIntentExtras() != null) {
+      return getIntentExtras().getBoolean(TelephonyManagerCompat.IS_ASSISTED_DIALED, false);
+    }
+    return false;
+  }
+
   public LatencyReport getLatencyReport() {
     return mLatencyReport;
   }
@@ -1114,7 +1137,10 @@
   }
 
   public VideoTech getVideoTech() {
-    return mVideoTechManager.getVideoTech();
+    if (videoTech == null) {
+      videoTech = mVideoTechManager.getVideoTech();
+    }
+    return videoTech;
   }
 
   public String getCallbackNumber() {
@@ -1247,6 +1273,11 @@
     updateEnrichedCallSession();
   }
 
+  @Override
+  public void onImpressionLoggingNeeded(DialerImpression.Type impressionType) {
+    Logger.get(mContext).logCallImpression(impressionType, getUniqueCallId(), getTimeAddedMs());
+  }
+
   private void updateEnrichedCallSession() {
     if (getNumber() == null) {
       return;
@@ -1528,6 +1559,7 @@
         if (tech.isAvailable(context)) {
           // Remember the first VideoTech that becomes available and always use it
           savedTech = tech;
+          savedTech.becomePrimary();
           return savedTech;
         }
       }
diff --git a/java/com/android/incallui/calllocation/impl/AndroidManifest.xml b/java/com/android/incallui/calllocation/impl/AndroidManifest.xml
index 550c580..fda9404 100644
--- a/java/com/android/incallui/calllocation/impl/AndroidManifest.xml
+++ b/java/com/android/incallui/calllocation/impl/AndroidManifest.xml
@@ -19,6 +19,7 @@
   package="com.android.incallui.calllocation.impl">
 
   <application>
+
     <meta-data
       android:name="com.google.android.gms.version"
       android:value="@integer/google_play_services_version"/>
diff --git a/java/com/android/incallui/calllocation/impl/DownloadMapImageTask.java b/java/com/android/incallui/calllocation/impl/DownloadMapImageTask.java
index b093a1b..035f5cd 100644
--- a/java/com/android/incallui/calllocation/impl/DownloadMapImageTask.java
+++ b/java/com/android/incallui/calllocation/impl/DownloadMapImageTask.java
@@ -50,9 +50,9 @@
 
     try {
       URL mapUrl = new URL(LocationUrlBuilder.getStaticMapUrl(ui.getContext(), locations[0]));
+      TrafficStats.setThreadStatsTag(TrafficStatsTags.DOWNLOAD_LOCATION_MAP_TAG);
       InputStream content = (InputStream) mapUrl.getContent();
 
-      TrafficStats.setThreadStatsTag(TrafficStatsTags.DOWNLOAD_LOCATION_MAP_TAG);
       return Drawable.createFromStream(content, STATIC_MAP_SRC_NAME);
     } catch (Exception ex) {
       LogUtil.e("DownloadMapImageTask.doInBackground", "Exception!!!", ex);
diff --git a/java/com/android/incallui/calllocation/impl/LocationUrlBuilder.java b/java/com/android/incallui/calllocation/impl/LocationUrlBuilder.java
index a57bdf6..14a9c76 100644
--- a/java/com/android/incallui/calllocation/impl/LocationUrlBuilder.java
+++ b/java/com/android/incallui/calllocation/impl/LocationUrlBuilder.java
@@ -134,7 +134,7 @@
         url += String.format(Locale.US, "(%s)", addressLine1.toString());
       }
     } else {
-      // TODO: i18n
+      // TODO(mdooley): i18n
       url +=
           String.format(
               Locale.US,
diff --git a/java/com/android/incallui/commontheme/res/values/styles.xml b/java/com/android/incallui/commontheme/res/values/styles.xml
index c0a745d..a979cc3 100644
--- a/java/com/android/incallui/commontheme/res/values/styles.xml
+++ b/java/com/android/incallui/commontheme/res/values/styles.xml
@@ -17,6 +17,11 @@
 
 <resources>
 
+  <style name="Dialer.Incall.TextAppearance" parent="android:TextAppearance.Material">
+    <item name="android:textColor">?android:textColorSecondary</item>
+    <item name="android:textSize">18sp</item>
+  </style>
+
   <style name="Dialer.Incall.TextAppearance.Large">
     <item name="android:textColor">?android:textColorPrimary</item>
     <item name="android:textSize">36sp</item>
@@ -28,11 +33,6 @@
     <item name="android:textSize">12sp</item>
   </style>
 
-  <style name="Dialer.Incall.TextAppearance" parent="android:TextAppearance.Material">
-    <item name="android:textColor">?android:textColorSecondary</item>
-    <item name="android:textSize">18sp</item>
-  </style>
-
   <style name="BottomRowIcon">
     <item name="android:layout_height">24dp</item>
     <item name="android:layout_width">24dp</item>
diff --git a/java/com/android/incallui/contactgrid/BottomRow.java b/java/com/android/incallui/contactgrid/BottomRow.java
index 76e0289..6068cc0 100644
--- a/java/com/android/incallui/contactgrid/BottomRow.java
+++ b/java/com/android/incallui/contactgrid/BottomRow.java
@@ -49,6 +49,7 @@
     public final boolean isForwardIconVisible;
     public final boolean isSpamIconVisible;
     public final boolean shouldPopulateAccessibilityEvent;
+    public final boolean isAssistedDialedVisisble;
 
     public Info(
         @Nullable CharSequence label,
@@ -58,7 +59,8 @@
         boolean isHdIconVisible,
         boolean isForwardIconVisible,
         boolean isSpamIconVisible,
-        boolean shouldPopulateAccessibilityEvent) {
+        boolean shouldPopulateAccessibilityEvent,
+        boolean isAssistedDialedVisisble) {
       this.label = label;
       this.isTimerVisible = isTimerVisible;
       this.isWorkIconVisible = isWorkIconVisible;
@@ -67,6 +69,7 @@
       this.isForwardIconVisible = isForwardIconVisible;
       this.isSpamIconVisible = isSpamIconVisible;
       this.shouldPopulateAccessibilityEvent = shouldPopulateAccessibilityEvent;
+      this.isAssistedDialedVisisble = isAssistedDialedVisisble;
     }
   }
 
@@ -81,6 +84,7 @@
     boolean isHdAttemptingIconVisible = state.isHdAttempting;
     boolean isSpamIconVisible = false;
     boolean shouldPopulateAccessibilityEvent = true;
+    boolean isAssistedDialedVisisble = state.isAssistedDialed;
 
     if (isIncoming(state) && primaryInfo.isSpam) {
       label = context.getString(R.string.contact_grid_incoming_suspected_spam);
@@ -117,7 +121,8 @@
         isHdIconVisible,
         isForwardIconVisible,
         isSpamIconVisible,
-        shouldPopulateAccessibilityEvent);
+        shouldPopulateAccessibilityEvent,
+        isAssistedDialedVisisble);
   }
 
   private static CharSequence getLabelForPhoneNumber(PrimaryInfo primaryInfo) {
diff --git a/java/com/android/incallui/contactgrid/ContactGridManager.java b/java/com/android/incallui/contactgrid/ContactGridManager.java
index 708bfab..ddf16e3 100644
--- a/java/com/android/incallui/contactgrid/ContactGridManager.java
+++ b/java/com/android/incallui/contactgrid/ContactGridManager.java
@@ -30,9 +30,9 @@
 import android.widget.TextView;
 import android.widget.ViewAnimator;
 import com.android.contacts.common.compat.PhoneNumberUtilsCompat;
-import com.android.contacts.common.lettertiles.LetterTileDrawable;
 import com.android.dialer.common.Assert;
 import com.android.dialer.common.LogUtil;
+import com.android.dialer.lettertile.LetterTileDrawable;
 import com.android.dialer.util.DrawableConverter;
 import com.android.incallui.incall.protocol.ContactPhotoType;
 import com.android.incallui.incall.protocol.PrimaryCallState;
@@ -60,7 +60,7 @@
   @Nullable private ImageView avatarImageView;
 
   // Row 2: Mobile +1 (650) 253-0000
-  // Row 2: [HD attempting icon]/[HD icon] 00:15
+  // Row 2: [HD attempting icon]/[HD icon] [Assisted Dialing Icon] 00:15
   // Row 2: Call ended
   // Row 2: Hanging up
   // Row 2: [Alert sign] Suspected spam caller
@@ -68,6 +68,7 @@
   private final ImageView workIconImageView;
   private final ImageView hdIconImageView;
   private final ImageView forwardIconImageView;
+  private final ImageView assistedDialingImageView;
   private final TextView forwardedNumberView;
   private final ImageView spamIconImageView;
   private final ViewAnimator bottomTextSwitcher;
@@ -98,6 +99,7 @@
     hdIconImageView = view.findViewById(R.id.contactgrid_hdIcon);
     forwardIconImageView = view.findViewById(R.id.contactgrid_forwardIcon);
     forwardedNumberView = view.findViewById(R.id.contactgrid_forwardNumber);
+    assistedDialingImageView = view.findViewById(R.id.contactgrid_assistedDialingIcon);
     spamIconImageView = view.findViewById(R.id.contactgrid_spamIcon);
     bottomTextSwitcher = view.findViewById(R.id.contactgrid_bottom_text_switcher);
     bottomTextView = view.findViewById(R.id.contactgrid_bottom_text);
@@ -309,6 +311,8 @@
     bottomTextView.setText(info.label);
     bottomTextView.setAllCaps(info.isSpamIconVisible);
     workIconImageView.setVisibility(info.isWorkIconVisible ? View.VISIBLE : View.GONE);
+    assistedDialingImageView.setVisibility(
+        info.isAssistedDialedVisisble ? View.VISIBLE : View.GONE);
     if (hdIconImageView.getVisibility() == View.GONE) {
       if (info.isHdAttemptingIconVisible) {
         hdIconImageView.setVisibility(View.VISIBLE);
diff --git a/java/com/android/incallui/contactgrid/res/layout/incall_contactgrid_bottom_row.xml b/java/com/android/incallui/contactgrid/res/layout/incall_contactgrid_bottom_row.xml
index c74017e..8850dd8 100644
--- a/java/com/android/incallui/contactgrid/res/layout/incall_contactgrid_bottom_row.xml
+++ b/java/com/android/incallui/contactgrid/res/layout/incall_contactgrid_bottom_row.xml
@@ -1,4 +1,19 @@
 <?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ 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
+  -->
 <LinearLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:tools="http://schemas.android.com/tools"
@@ -17,6 +32,10 @@
       android:src="@drawable/asd_hd_icon"
       android:visibility="gone"/>
   <ImageView
+      android:id="@+id/contactgrid_assistedDialingIcon"
+      style="@style/BottomRowIcon"
+      android:src="@drawable/quantum_ic_language_vd_theme_24"/>
+  <ImageView
       android:id="@id/contactgrid_forwardIcon"
       style="@style/BottomRowIcon"
       android:src="@drawable/quantum_ic_forward_vd_theme_24"/>
diff --git a/java/com/android/incallui/contactgrid/res/values-uz/strings.xml b/java/com/android/incallui/contactgrid/res/values-uz/strings.xml
index f4569de..a5ce1ca 100644
--- a/java/com/android/incallui/contactgrid/res/values-uz/strings.xml
+++ b/java/com/android/incallui/contactgrid/res/values-uz/strings.xml
@@ -34,7 +34,7 @@
     <string name="contact_grid_incoming_wifi_video_request" msgid="4516902096577976768">"Bu foydalanuvchi Wi-Fi orqali video suhbatga o‘tishni so‘ramoqda:"</string>
     <string name="contact_grid_incoming_voice_call" msgid="7165853925114955346">"Kimdan qo‘ng‘iroq:"</string>
     <string name="contact_grid_incoming_work_call" msgid="837605505036615004">"Ish telefoniga kimdan qo‘ng‘iroq:"</string>
-    <string name="contact_grid_incoming_via_template" msgid="7747391077955623969">"Kiruvchi chaqiruv (operator: <xliff:g id="PROVIDER_NAME">%s</xliff:g>)"</string>
+    <string name="contact_grid_incoming_via_template" msgid="7747391077955623969">"Kiruvchi qo‘ng‘iroq (operator: <xliff:g id="PROVIDER_NAME">%s</xliff:g>)"</string>
     <string name="contact_grid_incoming_suspected_spam" msgid="285365265897630425">"Shubhali abonent"</string>
     <string name="contact_grid_callback_number" msgid="1284649030313415807">"Teskari qo‘ng‘iroq uchun raqam: <xliff:g id="DARK_NUMBER">%1$s</xliff:g>"</string>
 </resources>
diff --git a/java/com/android/incallui/disconnectdialog/res/values-af/strings.xml b/java/com/android/incallui/disconnectdialog/res/values-af/strings.xml
deleted file mode 100644
index 5f07dfc..0000000
--- a/java/com/android/incallui/disconnectdialog/res/values-af/strings.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  ~ 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
-   -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="incall_enable_wifi_calling_button" msgid="3295230556186542328">"Aktiveer"</string>
-    <string name="video_call_not_available_title" msgid="987490011944013201">"Video-oproepe is nie nou beskikbaar nie"</string>
-    <string name="video_call_not_available_message" msgid="2284146863894603221">"Probeer weer later bel of gaan voort met die oproep as \'n stemoproep."</string>
-    <string name="voice_call" msgid="6748636104112578475">"Stemoproep"</string>
-</resources>
diff --git a/java/com/android/incallui/disconnectdialog/res/values-am/strings.xml b/java/com/android/incallui/disconnectdialog/res/values-am/strings.xml
deleted file mode 100644
index 62a77e4..0000000
--- a/java/com/android/incallui/disconnectdialog/res/values-am/strings.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  ~ 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
-   -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="incall_enable_wifi_calling_button" msgid="3295230556186542328">"አንቃ"</string>
-    <string name="video_call_not_available_title" msgid="987490011944013201">"የቪዲዮ ጥሪ ለጊዜው አይገኝም"</string>
-    <string name="video_call_not_available_message" msgid="2284146863894603221">"በኋላ እንደገና ለመደወል ይሞክሩ ወይም ጥሪውን እንደ የድምጽ ጥሪ ይቀጥሉ።"</string>
-    <string name="voice_call" msgid="6748636104112578475">"የድምጽ ጥሪ"</string>
-</resources>
diff --git a/java/com/android/incallui/disconnectdialog/res/values-ar/strings.xml b/java/com/android/incallui/disconnectdialog/res/values-ar/strings.xml
deleted file mode 100644
index e29ee2f..0000000
--- a/java/com/android/incallui/disconnectdialog/res/values-ar/strings.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  ~ 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
-   -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="incall_enable_wifi_calling_button" msgid="3295230556186542328">"تمكين"</string>
-    <string name="video_call_not_available_title" msgid="987490011944013201">"اتصال الفيديو غير متوفر حاليًا"</string>
-    <string name="video_call_not_available_message" msgid="2284146863894603221">"حاول الاتصال مرة أخرى لاحقًا أو أكمل المكالمة كمكالمة صوتية."</string>
-    <string name="voice_call" msgid="6748636104112578475">"مكالمة صوتية"</string>
-</resources>
diff --git a/java/com/android/incallui/disconnectdialog/res/values-az/strings.xml b/java/com/android/incallui/disconnectdialog/res/values-az/strings.xml
deleted file mode 100644
index 5a72e4c..0000000
--- a/java/com/android/incallui/disconnectdialog/res/values-az/strings.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  ~ 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
-   -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="incall_enable_wifi_calling_button" msgid="3295230556186542328">"Aktiv edin"</string>
-    <string name="video_call_not_available_title" msgid="987490011944013201">"Video zəng hazırda əlçatan deyil"</string>
-    <string name="video_call_not_available_message" msgid="2284146863894603221">"Daha sonra yenidən cəhd edin və ya audio zənglə davam edin."</string>
-    <string name="voice_call" msgid="6748636104112578475">"Video zəng"</string>
-</resources>
diff --git a/java/com/android/incallui/disconnectdialog/res/values-b+sr+Latn/strings.xml b/java/com/android/incallui/disconnectdialog/res/values-b+sr+Latn/strings.xml
deleted file mode 100644
index e782e70..0000000
--- a/java/com/android/incallui/disconnectdialog/res/values-b+sr+Latn/strings.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  ~ 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
-   -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="incall_enable_wifi_calling_button" msgid="3295230556186542328">"Omogući"</string>
-    <string name="video_call_not_available_title" msgid="987490011944013201">"Video poziv trenutno nije dostupan"</string>
-    <string name="video_call_not_available_message" msgid="2284146863894603221">"Probajte ponovo da uputite poziv kasnije ili ga nastavite kao audio poziv."</string>
-    <string name="voice_call" msgid="6748636104112578475">"Audio poziv"</string>
-</resources>
diff --git a/java/com/android/incallui/disconnectdialog/res/values-be/strings.xml b/java/com/android/incallui/disconnectdialog/res/values-be/strings.xml
deleted file mode 100644
index d4cab26..0000000
--- a/java/com/android/incallui/disconnectdialog/res/values-be/strings.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  ~ 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
-   -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="incall_enable_wifi_calling_button" msgid="3295230556186542328">"Уключыць"</string>
-    <string name="video_call_not_available_title" msgid="987490011944013201">"Відэавыклікі зараз недаступныя"</string>
-    <string name="video_call_not_available_message" msgid="2284146863894603221">"Паспрабуйце зрабіць выклік пазней або працягніце выклік як галасавы."</string>
-    <string name="voice_call" msgid="6748636104112578475">"Галасавы выклік"</string>
-</resources>
diff --git a/java/com/android/incallui/disconnectdialog/res/values-bg/strings.xml b/java/com/android/incallui/disconnectdialog/res/values-bg/strings.xml
deleted file mode 100644
index e9211ab..0000000
--- a/java/com/android/incallui/disconnectdialog/res/values-bg/strings.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  ~ 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
-   -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="incall_enable_wifi_calling_button" msgid="3295230556186542328">"Активиране"</string>
-    <string name="video_call_not_available_title" msgid="987490011944013201">"В момента не е възможно видеообаждане"</string>
-    <string name="video_call_not_available_message" msgid="2284146863894603221">"Опитайте да се обадите отново по-късно или продължете обаждането като гласово."</string>
-    <string name="voice_call" msgid="6748636104112578475">"Гласово обаждане"</string>
-</resources>
diff --git a/java/com/android/incallui/disconnectdialog/res/values-bn/strings.xml b/java/com/android/incallui/disconnectdialog/res/values-bn/strings.xml
deleted file mode 100644
index dd0297c..0000000
--- a/java/com/android/incallui/disconnectdialog/res/values-bn/strings.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  ~ 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
-   -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="incall_enable_wifi_calling_button" msgid="3295230556186542328">"সক্ষম করুন"</string>
-    <string name="video_call_not_available_title" msgid="987490011944013201">"ভিডিও কলিং বর্তমানে উপলব্ধ নয়"</string>
-    <string name="video_call_not_available_message" msgid="2284146863894603221">"পরে আবার কল করার চেষ্টা করুন বা কলটিকে একটি ভয়েস কল হিসাবে চালিয়ে যান৷"</string>
-    <string name="voice_call" msgid="6748636104112578475">"ভয়েস কল"</string>
-</resources>
diff --git a/java/com/android/incallui/disconnectdialog/res/values-bs/strings.xml b/java/com/android/incallui/disconnectdialog/res/values-bs/strings.xml
deleted file mode 100644
index 309427a..0000000
--- a/java/com/android/incallui/disconnectdialog/res/values-bs/strings.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  ~ 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
-   -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="incall_enable_wifi_calling_button" msgid="3295230556186542328">"Omogući"</string>
-    <string name="video_call_not_available_title" msgid="987490011944013201">"Videopozivanje trenutno nije dostupno"</string>
-    <string name="video_call_not_available_message" msgid="2284146863894603221">"Pozovite ponovo kasnije ili nastavite poziv kao glasovni poziv."</string>
-    <string name="voice_call" msgid="6748636104112578475">"Glasovni poziv"</string>
-</resources>
diff --git a/java/com/android/incallui/disconnectdialog/res/values-ca/strings.xml b/java/com/android/incallui/disconnectdialog/res/values-ca/strings.xml
deleted file mode 100644
index dca9551..0000000
--- a/java/com/android/incallui/disconnectdialog/res/values-ca/strings.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  ~ 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
-   -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="incall_enable_wifi_calling_button" msgid="3295230556186542328">"Activa"</string>
-    <string name="video_call_not_available_title" msgid="987490011944013201">"Les videotrucades no estan disponibles actualment"</string>
-    <string name="video_call_not_available_message" msgid="2284146863894603221">"Torna-ho a provar més tard o continua com a trucada de veu."</string>
-    <string name="voice_call" msgid="6748636104112578475">"Trucada de veu"</string>
-</resources>
diff --git a/java/com/android/incallui/disconnectdialog/res/values-cs/strings.xml b/java/com/android/incallui/disconnectdialog/res/values-cs/strings.xml
deleted file mode 100644
index 502434a..0000000
--- a/java/com/android/incallui/disconnectdialog/res/values-cs/strings.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  ~ 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
-   -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="incall_enable_wifi_calling_button" msgid="3295230556186542328">"Zapnout"</string>
-    <string name="video_call_not_available_title" msgid="987490011944013201">"Videohovory momentálně nejsou dostupné"</string>
-    <string name="video_call_not_available_message" msgid="2284146863894603221">"Zkuste zavolat později nebo v hovoru pokračujte bez videa."</string>
-    <string name="voice_call" msgid="6748636104112578475">"Hlasový hovor"</string>
-</resources>
diff --git a/java/com/android/incallui/disconnectdialog/res/values-da/strings.xml b/java/com/android/incallui/disconnectdialog/res/values-da/strings.xml
deleted file mode 100644
index 817226e..0000000
--- a/java/com/android/incallui/disconnectdialog/res/values-da/strings.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  ~ 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
-   -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="incall_enable_wifi_calling_button" msgid="3295230556186542328">"Aktivér"</string>
-    <string name="video_call_not_available_title" msgid="987490011944013201">"Det er ikke muligt at foretage videoopkald i øjeblikket"</string>
-    <string name="video_call_not_available_message" msgid="2284146863894603221">"Prøv at ringe igen senere, eller fortsæt med et taleopkald."</string>
-    <string name="voice_call" msgid="6748636104112578475">"Taleopkald"</string>
-</resources>
diff --git a/java/com/android/incallui/disconnectdialog/res/values-de/strings.xml b/java/com/android/incallui/disconnectdialog/res/values-de/strings.xml
deleted file mode 100644
index 8ebc527..0000000
--- a/java/com/android/incallui/disconnectdialog/res/values-de/strings.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  ~ 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
-   -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="incall_enable_wifi_calling_button" msgid="3295230556186542328">"Aktivieren"</string>
-    <string name="video_call_not_available_title" msgid="987490011944013201">"Videoanrufe sind momentan nicht verfügbar"</string>
-    <string name="video_call_not_available_message" msgid="2284146863894603221">"Versuche es später noch einmal oder setze den Anruf als Sprachanruf fort."</string>
-    <string name="voice_call" msgid="6748636104112578475">"Sprachanruf"</string>
-</resources>
diff --git a/java/com/android/incallui/disconnectdialog/res/values-el/strings.xml b/java/com/android/incallui/disconnectdialog/res/values-el/strings.xml
deleted file mode 100644
index 1e182be..0000000
--- a/java/com/android/incallui/disconnectdialog/res/values-el/strings.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  ~ 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
-   -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="incall_enable_wifi_calling_button" msgid="3295230556186542328">"Ενεργοποίηση"</string>
-    <string name="video_call_not_available_title" msgid="987490011944013201">"Η βιντεοκλήσεις δεν είναι προς το παρόν διαθέσιμες"</string>
-    <string name="video_call_not_available_message" msgid="2284146863894603221">"Δοκιμάστε να καλέσετε ξανά αργότερα ή συνεχίστε την κλήση ως φωνητική κλήση."</string>
-    <string name="voice_call" msgid="6748636104112578475">"Φωνητική κλήση"</string>
-</resources>
diff --git a/java/com/android/incallui/disconnectdialog/res/values-en-rAU/strings.xml b/java/com/android/incallui/disconnectdialog/res/values-en-rAU/strings.xml
deleted file mode 100644
index 4665e11..0000000
--- a/java/com/android/incallui/disconnectdialog/res/values-en-rAU/strings.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  ~ 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
-   -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="incall_enable_wifi_calling_button" msgid="3295230556186542328">"Enable"</string>
-    <string name="video_call_not_available_title" msgid="987490011944013201">"Video calling is currently not available"</string>
-    <string name="video_call_not_available_message" msgid="2284146863894603221">"Try calling again later or continue the call as a voice call."</string>
-    <string name="voice_call" msgid="6748636104112578475">"Voice call"</string>
-</resources>
diff --git a/java/com/android/incallui/disconnectdialog/res/values-en-rGB/strings.xml b/java/com/android/incallui/disconnectdialog/res/values-en-rGB/strings.xml
deleted file mode 100644
index 4665e11..0000000
--- a/java/com/android/incallui/disconnectdialog/res/values-en-rGB/strings.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  ~ 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
-   -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="incall_enable_wifi_calling_button" msgid="3295230556186542328">"Enable"</string>
-    <string name="video_call_not_available_title" msgid="987490011944013201">"Video calling is currently not available"</string>
-    <string name="video_call_not_available_message" msgid="2284146863894603221">"Try calling again later or continue the call as a voice call."</string>
-    <string name="voice_call" msgid="6748636104112578475">"Voice call"</string>
-</resources>
diff --git a/java/com/android/incallui/disconnectdialog/res/values-en-rIN/strings.xml b/java/com/android/incallui/disconnectdialog/res/values-en-rIN/strings.xml
deleted file mode 100644
index 4665e11..0000000
--- a/java/com/android/incallui/disconnectdialog/res/values-en-rIN/strings.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  ~ 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
-   -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="incall_enable_wifi_calling_button" msgid="3295230556186542328">"Enable"</string>
-    <string name="video_call_not_available_title" msgid="987490011944013201">"Video calling is currently not available"</string>
-    <string name="video_call_not_available_message" msgid="2284146863894603221">"Try calling again later or continue the call as a voice call."</string>
-    <string name="voice_call" msgid="6748636104112578475">"Voice call"</string>
-</resources>
diff --git a/java/com/android/incallui/disconnectdialog/res/values-es-rUS/strings.xml b/java/com/android/incallui/disconnectdialog/res/values-es-rUS/strings.xml
deleted file mode 100644
index 98afb12..0000000
--- a/java/com/android/incallui/disconnectdialog/res/values-es-rUS/strings.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  ~ 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
-   -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="incall_enable_wifi_calling_button" msgid="3295230556186542328">"Habilitar"</string>
-    <string name="video_call_not_available_title" msgid="987490011944013201">"La videollamada no está disponible en este momento"</string>
-    <string name="video_call_not_available_message" msgid="2284146863894603221">"Prueba llamando de nuevo más tarde o continúa la llamada como una llamada de voz."</string>
-    <string name="voice_call" msgid="6748636104112578475">"Llamada de voz"</string>
-</resources>
diff --git a/java/com/android/incallui/disconnectdialog/res/values-es/strings.xml b/java/com/android/incallui/disconnectdialog/res/values-es/strings.xml
deleted file mode 100644
index 580ac8b..0000000
--- a/java/com/android/incallui/disconnectdialog/res/values-es/strings.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  ~ 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
-   -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="incall_enable_wifi_calling_button" msgid="3295230556186542328">"Habilitar"</string>
-    <string name="video_call_not_available_title" msgid="987490011944013201">"No se pueden hacer videollamadas en estos momentos"</string>
-    <string name="video_call_not_available_message" msgid="2284146863894603221">"Prueba a llamar de nuevo más tarde o haz una llamada de voz."</string>
-    <string name="voice_call" msgid="6748636104112578475">"Llamada de voz"</string>
-</resources>
diff --git a/java/com/android/incallui/disconnectdialog/res/values-et/strings.xml b/java/com/android/incallui/disconnectdialog/res/values-et/strings.xml
deleted file mode 100644
index dae212d..0000000
--- a/java/com/android/incallui/disconnectdialog/res/values-et/strings.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  ~ 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
-   -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="incall_enable_wifi_calling_button" msgid="3295230556186542328">"Luba"</string>
-    <string name="video_call_not_available_title" msgid="987490011944013201">"Vidokõned pole praegu saadaval"</string>
-    <string name="video_call_not_available_message" msgid="2284146863894603221">"Proovige hiljem uuesti helistada või jätkake helistamist häälkõnena."</string>
-    <string name="voice_call" msgid="6748636104112578475">"Häälkõne"</string>
-</resources>
diff --git a/java/com/android/incallui/disconnectdialog/res/values-eu/strings.xml b/java/com/android/incallui/disconnectdialog/res/values-eu/strings.xml
deleted file mode 100644
index c207d39..0000000
--- a/java/com/android/incallui/disconnectdialog/res/values-eu/strings.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  ~ 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
-   -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="incall_enable_wifi_calling_button" msgid="3295230556186542328">"Gaitu"</string>
-    <string name="video_call_not_available_title" msgid="987490011944013201">"Une honetan, bideo-deiak ez daude erabilgarri"</string>
-    <string name="video_call_not_available_message" msgid="2284146863894603221">"Saiatu geroago berriro deitzen, edo aldatu ahots-deira."</string>
-    <string name="voice_call" msgid="6748636104112578475">"Ahots-deia"</string>
-</resources>
diff --git a/java/com/android/incallui/disconnectdialog/res/values-fa/strings.xml b/java/com/android/incallui/disconnectdialog/res/values-fa/strings.xml
deleted file mode 100644
index 73c2a86..0000000
--- a/java/com/android/incallui/disconnectdialog/res/values-fa/strings.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  ~ 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
-   -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="incall_enable_wifi_calling_button" msgid="3295230556186542328">"فعال کردن"</string>
-    <string name="video_call_not_available_title" msgid="987490011944013201">"تماس ویدیویی درحال حاضر امکان‌پذیر نیست"</string>
-    <string name="video_call_not_available_message" msgid="2284146863894603221">"بعداً دوباره تماس بگیرید یا با تماس صوتی ادامه دهید."</string>
-    <string name="voice_call" msgid="6748636104112578475">"تماس صوتی"</string>
-</resources>
diff --git a/java/com/android/incallui/disconnectdialog/res/values-fi/strings.xml b/java/com/android/incallui/disconnectdialog/res/values-fi/strings.xml
deleted file mode 100644
index 93d4cc7..0000000
--- a/java/com/android/incallui/disconnectdialog/res/values-fi/strings.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  ~ 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
-   -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="incall_enable_wifi_calling_button" msgid="3295230556186542328">"Ota käyttöön"</string>
-    <string name="video_call_not_available_title" msgid="987490011944013201">"Videopuhelut ei ole tällä hetkellä saatavilla"</string>
-    <string name="video_call_not_available_message" msgid="2284146863894603221">"Yritä soittaa myöhemmin uudelleen tai jatka puhelua äänipuheluna."</string>
-    <string name="voice_call" msgid="6748636104112578475">"Puhelu"</string>
-</resources>
diff --git a/java/com/android/incallui/disconnectdialog/res/values-fr-rCA/strings.xml b/java/com/android/incallui/disconnectdialog/res/values-fr-rCA/strings.xml
deleted file mode 100644
index e2bd4b1..0000000
--- a/java/com/android/incallui/disconnectdialog/res/values-fr-rCA/strings.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  ~ 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
-   -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="incall_enable_wifi_calling_button" msgid="3295230556186542328">"Activer"</string>
-    <string name="video_call_not_available_title" msgid="987490011944013201">"Les appels vidéo ne sont pas disponibles pour le moment"</string>
-    <string name="video_call_not_available_message" msgid="2284146863894603221">"Essayez de rappeler plus tard ou passez à un appel vocal."</string>
-    <string name="voice_call" msgid="6748636104112578475">"Appel vocal"</string>
-</resources>
diff --git a/java/com/android/incallui/disconnectdialog/res/values-fr/strings.xml b/java/com/android/incallui/disconnectdialog/res/values-fr/strings.xml
deleted file mode 100644
index f9dfdfa..0000000
--- a/java/com/android/incallui/disconnectdialog/res/values-fr/strings.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  ~ 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
-   -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="incall_enable_wifi_calling_button" msgid="3295230556186542328">"Activer"</string>
-    <string name="video_call_not_available_title" msgid="987490011944013201">"La fonction d\'appel vidéo est momentanément indisponible"</string>
-    <string name="video_call_not_available_message" msgid="2284146863894603221">"Réessayez plus tard ou reprenez l\'appel en mode vocal."</string>
-    <string name="voice_call" msgid="6748636104112578475">"Appel vocal"</string>
-</resources>
diff --git a/java/com/android/incallui/disconnectdialog/res/values-gl/strings.xml b/java/com/android/incallui/disconnectdialog/res/values-gl/strings.xml
deleted file mode 100644
index 3313c44..0000000
--- a/java/com/android/incallui/disconnectdialog/res/values-gl/strings.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  ~ 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
-   -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="incall_enable_wifi_calling_button" msgid="3295230556186542328">"Activar"</string>
-    <string name="video_call_not_available_title" msgid="987490011944013201">"As videochamadas non están dispoñibles actualmente"</string>
-    <string name="video_call_not_available_message" msgid="2284146863894603221">"Proba a chamar de novo máis tarde ou continuar a chamada como unha chamada de voz."</string>
-    <string name="voice_call" msgid="6748636104112578475">"Chamada de voz"</string>
-</resources>
diff --git a/java/com/android/incallui/disconnectdialog/res/values-gu/strings.xml b/java/com/android/incallui/disconnectdialog/res/values-gu/strings.xml
deleted file mode 100644
index 28825da..0000000
--- a/java/com/android/incallui/disconnectdialog/res/values-gu/strings.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  ~ 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
-   -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="incall_enable_wifi_calling_button" msgid="3295230556186542328">"સક્ષમ કરો"</string>
-    <string name="video_call_not_available_title" msgid="987490011944013201">"વિડિઓ કૉલિંગ હાલમાં ઉપલબ્ધ નથી"</string>
-    <string name="video_call_not_available_message" msgid="2284146863894603221">"પછીથી ફરી કૉલ કરવાનો પ્રયાસ કરો અથવા કૉલને વૉઇસ કૉલ તરીકે ચાલુ રાખો."</string>
-    <string name="voice_call" msgid="6748636104112578475">"વૉઇસ કૉલ"</string>
-</resources>
diff --git a/java/com/android/incallui/disconnectdialog/res/values-hi/strings.xml b/java/com/android/incallui/disconnectdialog/res/values-hi/strings.xml
deleted file mode 100644
index 8201539..0000000
--- a/java/com/android/incallui/disconnectdialog/res/values-hi/strings.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  ~ 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
-   -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="incall_enable_wifi_calling_button" msgid="3295230556186542328">"सक्षम करें"</string>
-    <string name="video_call_not_available_title" msgid="987490011944013201">"इस समय वीडियो कॉलिंग की सुविधा उपलब्ध नहीं है"</string>
-    <string name="video_call_not_available_message" msgid="2284146863894603221">"बाद में दोबारा कॉल करने की कोशिश करें या कॉल को वॉइस कॉल के रूप में जारी रखें."</string>
-    <string name="voice_call" msgid="6748636104112578475">"वॉइस कॉल"</string>
-</resources>
diff --git a/java/com/android/incallui/disconnectdialog/res/values-hr/strings.xml b/java/com/android/incallui/disconnectdialog/res/values-hr/strings.xml
deleted file mode 100644
index c1b56b7..0000000
--- a/java/com/android/incallui/disconnectdialog/res/values-hr/strings.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  ~ 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
-   -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="incall_enable_wifi_calling_button" msgid="3295230556186542328">"Omogući"</string>
-    <string name="video_call_not_available_title" msgid="987490011944013201">"Videopozivanje trenutačno nije dostupno"</string>
-    <string name="video_call_not_available_message" msgid="2284146863894603221">"Pokušajte ponovno nazvati kasnije ili nastavite poziv kao glasovni."</string>
-    <string name="voice_call" msgid="6748636104112578475">"Glasovni poziv"</string>
-</resources>
diff --git a/java/com/android/incallui/disconnectdialog/res/values-hu/strings.xml b/java/com/android/incallui/disconnectdialog/res/values-hu/strings.xml
deleted file mode 100644
index e1f9bd9..0000000
--- a/java/com/android/incallui/disconnectdialog/res/values-hu/strings.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  ~ 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
-   -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="incall_enable_wifi_calling_button" msgid="3295230556186542328">"Engedélyezés"</string>
-    <string name="video_call_not_available_title" msgid="987490011944013201">"A videohívás jelenleg nem érhető el"</string>
-    <string name="video_call_not_available_message" msgid="2284146863894603221">"Indítson hívást később, vagy folytassa hanghívásként."</string>
-    <string name="voice_call" msgid="6748636104112578475">"Hanghívás"</string>
-</resources>
diff --git a/java/com/android/incallui/disconnectdialog/res/values-hy/strings.xml b/java/com/android/incallui/disconnectdialog/res/values-hy/strings.xml
deleted file mode 100644
index d2c10be..0000000
--- a/java/com/android/incallui/disconnectdialog/res/values-hy/strings.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  ~ 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
-   -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="incall_enable_wifi_calling_button" msgid="3295230556186542328">"Միացնել"</string>
-    <string name="video_call_not_available_title" msgid="987490011944013201">"Տեսազանգը ներկայումս հասանելի չէ"</string>
-    <string name="video_call_not_available_message" msgid="2284146863894603221">"Ավելի ուշ նորից փորձեք զանգել կամ շարունակեք զանգն առանց տեսապատկերի:"</string>
-    <string name="voice_call" msgid="6748636104112578475">"Զանգ"</string>
-</resources>
diff --git a/java/com/android/incallui/disconnectdialog/res/values-in/strings.xml b/java/com/android/incallui/disconnectdialog/res/values-in/strings.xml
deleted file mode 100644
index 8b895bc..0000000
--- a/java/com/android/incallui/disconnectdialog/res/values-in/strings.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  ~ 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
-   -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="incall_enable_wifi_calling_button" msgid="3295230556186542328">"Aktifkan"</string>
-    <string name="video_call_not_available_title" msgid="987490011944013201">"Video call saat ini tidak tersedia"</string>
-    <string name="video_call_not_available_message" msgid="2284146863894603221">"Coba lagi nanti atau lanjutkan sebagai panggilan suara."</string>
-    <string name="voice_call" msgid="6748636104112578475">"Panggilan suara"</string>
-</resources>
diff --git a/java/com/android/incallui/disconnectdialog/res/values-is/strings.xml b/java/com/android/incallui/disconnectdialog/res/values-is/strings.xml
deleted file mode 100644
index b16b431..0000000
--- a/java/com/android/incallui/disconnectdialog/res/values-is/strings.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  ~ 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
-   -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="incall_enable_wifi_calling_button" msgid="3295230556186542328">"Kveikja"</string>
-    <string name="video_call_not_available_title" msgid="987490011944013201">"Myndsímtal er ekki í boði sem stendur"</string>
-    <string name="video_call_not_available_message" msgid="2284146863894603221">"Prófaðu að hringja aftur seinna eða hringdu hefðbundið símtal í staðinn"</string>
-    <string name="voice_call" msgid="6748636104112578475">"Símtal"</string>
-</resources>
diff --git a/java/com/android/incallui/disconnectdialog/res/values-it/strings.xml b/java/com/android/incallui/disconnectdialog/res/values-it/strings.xml
deleted file mode 100644
index 1b862f7..0000000
--- a/java/com/android/incallui/disconnectdialog/res/values-it/strings.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  ~ 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
-   -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="incall_enable_wifi_calling_button" msgid="3295230556186542328">"Abilita"</string>
-    <string name="video_call_not_available_title" msgid="987490011944013201">"Le videochiamate non sono disponibili in questo momento"</string>
-    <string name="video_call_not_available_message" msgid="2284146863894603221">"Prova a chiamare di nuovo più tardi o continua la chiamata come chiamata vocale."</string>
-    <string name="voice_call" msgid="6748636104112578475">"Chiamata vocale"</string>
-</resources>
diff --git a/java/com/android/incallui/disconnectdialog/res/values-iw/strings.xml b/java/com/android/incallui/disconnectdialog/res/values-iw/strings.xml
deleted file mode 100644
index 91af8a9..0000000
--- a/java/com/android/incallui/disconnectdialog/res/values-iw/strings.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  ~ 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
-   -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="incall_enable_wifi_calling_button" msgid="3295230556186542328">"הפעלה"</string>
-    <string name="video_call_not_available_title" msgid="987490011944013201">"לא ניתן לשוחח בשיחת וידאו כרגע"</string>
-    <string name="video_call_not_available_message" msgid="2284146863894603221">"מומלץ לנסות להתקשר מאוחר יותר או להמשיך לשוחח בשיחה קולית."</string>
-    <string name="voice_call" msgid="6748636104112578475">"שיחה קולית"</string>
-</resources>
diff --git a/java/com/android/incallui/disconnectdialog/res/values-ja/strings.xml b/java/com/android/incallui/disconnectdialog/res/values-ja/strings.xml
deleted file mode 100644
index 8e196f2..0000000
--- a/java/com/android/incallui/disconnectdialog/res/values-ja/strings.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  ~ 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
-   -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="incall_enable_wifi_calling_button" msgid="3295230556186542328">"有効にする"</string>
-    <string name="video_call_not_available_title" msgid="987490011944013201">"ビデオハングアウトは現在利用できません"</string>
-    <string name="video_call_not_available_message" msgid="2284146863894603221">"しばらくしてからもう一度試すか、音声通話で続けてください。"</string>
-    <string name="voice_call" msgid="6748636104112578475">"音声通話"</string>
-</resources>
diff --git a/java/com/android/incallui/disconnectdialog/res/values-ka/strings.xml b/java/com/android/incallui/disconnectdialog/res/values-ka/strings.xml
deleted file mode 100644
index 8045979..0000000
--- a/java/com/android/incallui/disconnectdialog/res/values-ka/strings.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  ~ 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
-   -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="incall_enable_wifi_calling_button" msgid="3295230556186542328">"ჩართვა"</string>
-    <string name="video_call_not_available_title" msgid="987490011944013201">"ვიდეოზარი ამჟამად მიუწვდომელია"</string>
-    <string name="video_call_not_available_message" msgid="2284146863894603221">"სცადეთ, დარეკოთ მოგვიანებით ან გააგრძელოთ ხმოვანი ზარით."</string>
-    <string name="voice_call" msgid="6748636104112578475">"ხმოვანი ზარი"</string>
-</resources>
diff --git a/java/com/android/incallui/disconnectdialog/res/values-kk/strings.xml b/java/com/android/incallui/disconnectdialog/res/values-kk/strings.xml
deleted file mode 100644
index 47294f9..0000000
--- a/java/com/android/incallui/disconnectdialog/res/values-kk/strings.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  ~ 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
-   -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="incall_enable_wifi_calling_button" msgid="3295230556186542328">"Қосу"</string>
-    <string name="video_call_not_available_title" msgid="987490011944013201">"Бейне қоңырау қазір қолжетімді емес"</string>
-    <string name="video_call_not_available_message" msgid="2284146863894603221">"Кейінірек қайталап көріңіз немесе дасуыстық қоңырау ретінде жалғастырыңыз."</string>
-    <string name="voice_call" msgid="6748636104112578475">"Дауыстық қоңырау"</string>
-</resources>
diff --git a/java/com/android/incallui/disconnectdialog/res/values-km/strings.xml b/java/com/android/incallui/disconnectdialog/res/values-km/strings.xml
deleted file mode 100644
index 6e1c0fe..0000000
--- a/java/com/android/incallui/disconnectdialog/res/values-km/strings.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  ~ 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
-   -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="incall_enable_wifi_calling_button" msgid="3295230556186542328">"បើក"</string>
-    <string name="video_call_not_available_title" msgid="987490011944013201">"ការហៅ​វីដេអូ​មិន​អាច​ធ្វើ​បាន​ទេ​នៅពេល​នេះ"</string>
-    <string name="video_call_not_available_message" msgid="2284146863894603221">"សាកល្បងហៅ​ម្ដងទៀត​នៅពេលក្រោយ ឬ​បន្ត​ការហៅ​ជា​សំឡេង។"</string>
-    <string name="voice_call" msgid="6748636104112578475">"ការ​ហៅ​ជា​សំឡេង"</string>
-</resources>
diff --git a/java/com/android/incallui/disconnectdialog/res/values-kn/strings.xml b/java/com/android/incallui/disconnectdialog/res/values-kn/strings.xml
deleted file mode 100644
index 384e92b..0000000
--- a/java/com/android/incallui/disconnectdialog/res/values-kn/strings.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  ~ 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
-   -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="incall_enable_wifi_calling_button" msgid="3295230556186542328">"ಸಕ್ರಿಯಗೊಳಿಸಿ"</string>
-    <string name="video_call_not_available_title" msgid="987490011944013201">"ವೀಡಿಯೊ ಕರೆ ಪ್ರಸ್ತುತವಾಗಿ ಲಭ್ಯವಿಲ್ಲ"</string>
-    <string name="video_call_not_available_message" msgid="2284146863894603221">"ನಂತರ ಮತ್ತೆ ಕರೆ ಮಾಡಲು ಪ್ರಯತ್ನಿಸಿ ಅಥವಾ ಧ್ವನಿ ಕರೆಯಂತೆ ಕರೆಯನ್ನು ಮುಂದುವರಿಸಿ."</string>
-    <string name="voice_call" msgid="6748636104112578475">"ಧ್ವನಿ ಕರೆ"</string>
-</resources>
diff --git a/java/com/android/incallui/disconnectdialog/res/values-ko/strings.xml b/java/com/android/incallui/disconnectdialog/res/values-ko/strings.xml
deleted file mode 100644
index 30e1565..0000000
--- a/java/com/android/incallui/disconnectdialog/res/values-ko/strings.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  ~ 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
-   -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="incall_enable_wifi_calling_button" msgid="3295230556186542328">"사용"</string>
-    <string name="video_call_not_available_title" msgid="987490011944013201">"현재 화상 통화를 사용할 수 없음"</string>
-    <string name="video_call_not_available_message" msgid="2284146863894603221">"나중에 다시 전화하거나, 계속하려면 음성 통화를 이용하세요."</string>
-    <string name="voice_call" msgid="6748636104112578475">"음성 통화"</string>
-</resources>
diff --git a/java/com/android/incallui/disconnectdialog/res/values-ky/strings.xml b/java/com/android/incallui/disconnectdialog/res/values-ky/strings.xml
deleted file mode 100644
index 1553169..0000000
--- a/java/com/android/incallui/disconnectdialog/res/values-ky/strings.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  ~ 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
-   -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="incall_enable_wifi_calling_button" msgid="3295230556186542328">"Иштетүү"</string>
-    <string name="video_call_not_available_title" msgid="987490011944013201">"Видео режиминде чалуу учурда жеткиликсиз"</string>
-    <string name="video_call_not_available_message" msgid="2284146863894603221">"Кийинчерээк кайра чалыңыз же үн режиминде чалып көрүңүз."</string>
-    <string name="voice_call" msgid="6748636104112578475">"Үн чалуусу"</string>
-</resources>
diff --git a/java/com/android/incallui/disconnectdialog/res/values-lo/strings.xml b/java/com/android/incallui/disconnectdialog/res/values-lo/strings.xml
deleted file mode 100644
index c3f8b96..0000000
--- a/java/com/android/incallui/disconnectdialog/res/values-lo/strings.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  ~ 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
-   -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="incall_enable_wifi_calling_button" msgid="3295230556186542328">"ເປິດນຳໃຊ້"</string>
-    <string name="video_call_not_available_title" msgid="987490011944013201">"ຕອນນີ້ບໍ່ສາມາດໃຊ້ການໂທວິດີໂອໄດ້"</string>
-    <string name="video_call_not_available_message" msgid="2284146863894603221">"ກະລຸນາລອງໂທໃໝ່ໃນພາຍຫຼັງ ຫຼື ສືບຕໍ່ສາຍເປັນການໂທແບບສຽງ."</string>
-    <string name="voice_call" msgid="6748636104112578475">"ການໂທດ້ວຍສຽງ"</string>
-</resources>
diff --git a/java/com/android/incallui/disconnectdialog/res/values-lt/strings.xml b/java/com/android/incallui/disconnectdialog/res/values-lt/strings.xml
deleted file mode 100644
index 38d6ef8..0000000
--- a/java/com/android/incallui/disconnectdialog/res/values-lt/strings.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  ~ 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
-   -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="incall_enable_wifi_calling_button" msgid="3295230556186542328">"Įgalinti"</string>
-    <string name="video_call_not_available_title" msgid="987490011944013201">"Vaizdo skambučių funkcija šiuo metu nepasiekiama"</string>
-    <string name="video_call_not_available_message" msgid="2284146863894603221">"Vėliau pabandykite skambinti dar kartą arba tęskite skambutį kaip balso skambutį."</string>
-    <string name="voice_call" msgid="6748636104112578475">"Balso skambutis"</string>
-</resources>
diff --git a/java/com/android/incallui/disconnectdialog/res/values-lv/strings.xml b/java/com/android/incallui/disconnectdialog/res/values-lv/strings.xml
deleted file mode 100644
index 279f0f5..0000000
--- a/java/com/android/incallui/disconnectdialog/res/values-lv/strings.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  ~ 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
-   -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="incall_enable_wifi_calling_button" msgid="3295230556186542328">"Iespējot"</string>
-    <string name="video_call_not_available_title" msgid="987490011944013201">"Videozvani pašlaik nav pieejami"</string>
-    <string name="video_call_not_available_message" msgid="2284146863894603221">"Vēlāk mēģiniet zvanīt vēlreiz vai turpiniet sarunu kā balss zvanu."</string>
-    <string name="voice_call" msgid="6748636104112578475">"Balss zvans"</string>
-</resources>
diff --git a/java/com/android/incallui/disconnectdialog/res/values-mk/strings.xml b/java/com/android/incallui/disconnectdialog/res/values-mk/strings.xml
deleted file mode 100644
index 3c061df..0000000
--- a/java/com/android/incallui/disconnectdialog/res/values-mk/strings.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  ~ 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
-   -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="incall_enable_wifi_calling_button" msgid="3295230556186542328">"Овозможи"</string>
-    <string name="video_call_not_available_title" msgid="987490011944013201">"Видеоповикувањето е недостапно во моментов."</string>
-    <string name="video_call_not_available_message" msgid="2284146863894603221">"Обидете се да повикате повторно подоцна или продолжете со гласовен повик."</string>
-    <string name="voice_call" msgid="6748636104112578475">"Гласовен повик"</string>
-</resources>
diff --git a/java/com/android/incallui/disconnectdialog/res/values-ml/strings.xml b/java/com/android/incallui/disconnectdialog/res/values-ml/strings.xml
deleted file mode 100644
index 719d6e8..0000000
--- a/java/com/android/incallui/disconnectdialog/res/values-ml/strings.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  ~ 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
-   -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="incall_enable_wifi_calling_button" msgid="3295230556186542328">"പ്രവർത്തനക്ഷമമാക്കുക"</string>
-    <string name="video_call_not_available_title" msgid="987490011944013201">"വീഡിയോ കോളിംഗ് നിലവിൽ ലഭ്യമല്ല"</string>
-    <string name="video_call_not_available_message" msgid="2284146863894603221">"പിന്നീട് വീണ്ടും വിളിക്കുന്നതോ വോയ്‌സ് കോളായി കോൾ തുടരുന്നതോ പരീക്ഷിക്കൂ."</string>
-    <string name="voice_call" msgid="6748636104112578475">"വോയ്‌സ് കോൾ"</string>
-</resources>
diff --git a/java/com/android/incallui/disconnectdialog/res/values-mn/strings.xml b/java/com/android/incallui/disconnectdialog/res/values-mn/strings.xml
deleted file mode 100644
index fae6708..0000000
--- a/java/com/android/incallui/disconnectdialog/res/values-mn/strings.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  ~ 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
-   -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="incall_enable_wifi_calling_button" msgid="3295230556186542328">"Идэвхжүүлэх"</string>
-    <string name="video_call_not_available_title" msgid="987490011944013201">"Одоогоор видео дуудлага хийх боломжгүй"</string>
-    <string name="video_call_not_available_message" msgid="2284146863894603221">"Дараа дахин залгаж үзэх буюу энгийн дуудлагаар үргэлжлүүлнэ үү."</string>
-    <string name="voice_call" msgid="6748636104112578475">"Дуудлага"</string>
-</resources>
diff --git a/java/com/android/incallui/disconnectdialog/res/values-mr/strings.xml b/java/com/android/incallui/disconnectdialog/res/values-mr/strings.xml
deleted file mode 100644
index 8549785..0000000
--- a/java/com/android/incallui/disconnectdialog/res/values-mr/strings.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  ~ 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
-   -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="incall_enable_wifi_calling_button" msgid="3295230556186542328">"चालू करा"</string>
-    <string name="video_call_not_available_title" msgid="987490011944013201">"व्हिडिओ कॉलिंग सध्या उपलब्ध नाही"</string>
-    <string name="video_call_not_available_message" msgid="2284146863894603221">"नंतर पुन्हा कॉल करून पहा किंवा कॉल व्हॉइस कॉल म्हणून सुरू ठेवा."</string>
-    <string name="voice_call" msgid="6748636104112578475">"व्हॉईस कॉल"</string>
-</resources>
diff --git a/java/com/android/incallui/disconnectdialog/res/values-ms/strings.xml b/java/com/android/incallui/disconnectdialog/res/values-ms/strings.xml
deleted file mode 100644
index efe8799..0000000
--- a/java/com/android/incallui/disconnectdialog/res/values-ms/strings.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  ~ 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
-   -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="incall_enable_wifi_calling_button" msgid="3295230556186542328">"Dayakan"</string>
-    <string name="video_call_not_available_title" msgid="987490011944013201">"Panggilan video tidak tersedia pada masa ini"</string>
-    <string name="video_call_not_available_message" msgid="2284146863894603221">"Cuba hubungi semula kemudian atau teruskan panggilan sebagai panggilan suara."</string>
-    <string name="voice_call" msgid="6748636104112578475">"Panggilan suara"</string>
-</resources>
diff --git a/java/com/android/incallui/disconnectdialog/res/values-my/strings.xml b/java/com/android/incallui/disconnectdialog/res/values-my/strings.xml
deleted file mode 100644
index 04a4f3a..0000000
--- a/java/com/android/incallui/disconnectdialog/res/values-my/strings.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  ~ 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
-   -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="incall_enable_wifi_calling_button" msgid="3295230556186542328">"ဖွင့်ရန်"</string>
-    <string name="video_call_not_available_title" msgid="987490011944013201">"ဗီဒီယိုခေါ်ဆိုမှုကို လက်ရှိတွင် မရရှိနိုင်ပါ"</string>
-    <string name="video_call_not_available_message" msgid="2284146863894603221">"နောက်မှ ထပ်မံခေါ်ဆိုကြည့်ပါ (သို့) အသံခေါ်ဆိုမှု ဆက်လုပ်ကြည့်ပါ။"</string>
-    <string name="voice_call" msgid="6748636104112578475">"အသံခေါ်ဆိုမှု"</string>
-</resources>
diff --git a/java/com/android/incallui/disconnectdialog/res/values-nb/strings.xml b/java/com/android/incallui/disconnectdialog/res/values-nb/strings.xml
deleted file mode 100644
index 14a41fa..0000000
--- a/java/com/android/incallui/disconnectdialog/res/values-nb/strings.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  ~ 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
-   -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="incall_enable_wifi_calling_button" msgid="3295230556186542328">"Slå på"</string>
-    <string name="video_call_not_available_title" msgid="987490011944013201">"Videoanrop er ikke tilgjengelige akkurat nå"</string>
-    <string name="video_call_not_available_message" msgid="2284146863894603221">"Prøv å ringe på nytt senere eller fortsett anropet som taleanrop."</string>
-    <string name="voice_call" msgid="6748636104112578475">"Taleanrop"</string>
-</resources>
diff --git a/java/com/android/incallui/disconnectdialog/res/values-ne/strings.xml b/java/com/android/incallui/disconnectdialog/res/values-ne/strings.xml
deleted file mode 100644
index 9cc63fd..0000000
--- a/java/com/android/incallui/disconnectdialog/res/values-ne/strings.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  ~ 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
-   -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="incall_enable_wifi_calling_button" msgid="3295230556186542328">"सक्षम पार्नुहोस्"</string>
-    <string name="video_call_not_available_title" msgid="987490011944013201">"भिडियो कल हाल उपलब्ध छैन"</string>
-    <string name="video_call_not_available_message" msgid="2284146863894603221">"पछि फेरि कल गर्ने प्रयास गर्नुहोस् वा भ्वाइस कलका रूपमा कल जारी राख्नुहोस्।"</string>
-    <string name="voice_call" msgid="6748636104112578475">"भ्वाइस कल"</string>
-</resources>
diff --git a/java/com/android/incallui/disconnectdialog/res/values-nl/strings.xml b/java/com/android/incallui/disconnectdialog/res/values-nl/strings.xml
deleted file mode 100644
index c3380db..0000000
--- a/java/com/android/incallui/disconnectdialog/res/values-nl/strings.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  ~ 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
-   -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="incall_enable_wifi_calling_button" msgid="3295230556186542328">"Inschakelen"</string>
-    <string name="video_call_not_available_title" msgid="987490011944013201">"Videobellen is momenteel niet beschikbaar"</string>
-    <string name="video_call_not_available_message" msgid="2284146863894603221">"Probeer later opnieuw te bellen of start een spraakoproep."</string>
-    <string name="voice_call" msgid="6748636104112578475">"Spraakoproep"</string>
-</resources>
diff --git a/java/com/android/incallui/disconnectdialog/res/values-no/strings.xml b/java/com/android/incallui/disconnectdialog/res/values-no/strings.xml
deleted file mode 100644
index 14a41fa..0000000
--- a/java/com/android/incallui/disconnectdialog/res/values-no/strings.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  ~ 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
-   -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="incall_enable_wifi_calling_button" msgid="3295230556186542328">"Slå på"</string>
-    <string name="video_call_not_available_title" msgid="987490011944013201">"Videoanrop er ikke tilgjengelige akkurat nå"</string>
-    <string name="video_call_not_available_message" msgid="2284146863894603221">"Prøv å ringe på nytt senere eller fortsett anropet som taleanrop."</string>
-    <string name="voice_call" msgid="6748636104112578475">"Taleanrop"</string>
-</resources>
diff --git a/java/com/android/incallui/disconnectdialog/res/values-pa/strings.xml b/java/com/android/incallui/disconnectdialog/res/values-pa/strings.xml
deleted file mode 100644
index 722183b..0000000
--- a/java/com/android/incallui/disconnectdialog/res/values-pa/strings.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  ~ 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
-   -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="incall_enable_wifi_calling_button" msgid="3295230556186542328">"ਯੋਗ ਬਣਾਓ"</string>
-    <string name="video_call_not_available_title" msgid="987490011944013201">"ਵੀਡੀਓ ਕਾਲਿੰਗ ਇਸ ਵੇਲੇ ਉਪਲਬਧ ਨਹੀਂ ਹੈ"</string>
-    <string name="video_call_not_available_message" msgid="2284146863894603221">"ਬਾਅਦ ਵਿੱਚ ਦੁਬਾਰਾ ਕਾਲ ਕਰਨ ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰੋ ਜਾਂ ਕਾਲ ਨੂੰ ਵੌਇਸ ਕਾਲ ਵਜੋਂ ਜਾਰੀ ਰੱਖੋ।"</string>
-    <string name="voice_call" msgid="6748636104112578475">"ਵੌਇਸ ਕਾਲ"</string>
-</resources>
diff --git a/java/com/android/incallui/disconnectdialog/res/values-pl/strings.xml b/java/com/android/incallui/disconnectdialog/res/values-pl/strings.xml
deleted file mode 100644
index b8307e9..0000000
--- a/java/com/android/incallui/disconnectdialog/res/values-pl/strings.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  ~ 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
-   -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="incall_enable_wifi_calling_button" msgid="3295230556186542328">"Włącz"</string>
-    <string name="video_call_not_available_title" msgid="987490011944013201">"Rozmowy wideo nie są obecnie dostępne"</string>
-    <string name="video_call_not_available_message" msgid="2284146863894603221">"Spróbuj zadzwonić później, aby kontynuować rozmowę w trybie wideo."</string>
-    <string name="voice_call" msgid="6748636104112578475">"Połączenie głosowe"</string>
-</resources>
diff --git a/java/com/android/incallui/disconnectdialog/res/values-pt-rBR/strings.xml b/java/com/android/incallui/disconnectdialog/res/values-pt-rBR/strings.xml
deleted file mode 100644
index ce249f6..0000000
--- a/java/com/android/incallui/disconnectdialog/res/values-pt-rBR/strings.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  ~ 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
-   -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="incall_enable_wifi_calling_button" msgid="3295230556186542328">"Ativar"</string>
-    <string name="video_call_not_available_title" msgid="987490011944013201">"O recurso de videochamada não está disponível no momento"</string>
-    <string name="video_call_not_available_message" msgid="2284146863894603221">"Ligue novamente mais tarde ou continue esta chamada sem o vídeo."</string>
-    <string name="voice_call" msgid="6748636104112578475">"Chamada de voz"</string>
-</resources>
diff --git a/java/com/android/incallui/disconnectdialog/res/values-pt-rPT/strings.xml b/java/com/android/incallui/disconnectdialog/res/values-pt-rPT/strings.xml
deleted file mode 100644
index fb6980a..0000000
--- a/java/com/android/incallui/disconnectdialog/res/values-pt-rPT/strings.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  ~ 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
-   -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="incall_enable_wifi_calling_button" msgid="3295230556186542328">"Ativar"</string>
-    <string name="video_call_not_available_title" msgid="987490011944013201">"Neste momento, não é possível efetuar videochamadas"</string>
-    <string name="video_call_not_available_message" msgid="2284146863894603221">"Experimente efetuar a videochamada mais tarde ou continue a chamada como uma chamada de voz."</string>
-    <string name="voice_call" msgid="6748636104112578475">"Chamada de voz"</string>
-</resources>
diff --git a/java/com/android/incallui/disconnectdialog/res/values-pt/strings.xml b/java/com/android/incallui/disconnectdialog/res/values-pt/strings.xml
deleted file mode 100644
index ce249f6..0000000
--- a/java/com/android/incallui/disconnectdialog/res/values-pt/strings.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  ~ 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
-   -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="incall_enable_wifi_calling_button" msgid="3295230556186542328">"Ativar"</string>
-    <string name="video_call_not_available_title" msgid="987490011944013201">"O recurso de videochamada não está disponível no momento"</string>
-    <string name="video_call_not_available_message" msgid="2284146863894603221">"Ligue novamente mais tarde ou continue esta chamada sem o vídeo."</string>
-    <string name="voice_call" msgid="6748636104112578475">"Chamada de voz"</string>
-</resources>
diff --git a/java/com/android/incallui/disconnectdialog/res/values-ro/strings.xml b/java/com/android/incallui/disconnectdialog/res/values-ro/strings.xml
deleted file mode 100644
index 7836192..0000000
--- a/java/com/android/incallui/disconnectdialog/res/values-ro/strings.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  ~ 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
-   -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="incall_enable_wifi_calling_button" msgid="3295230556186542328">"Activați"</string>
-    <string name="video_call_not_available_title" msgid="987490011944013201">"Apelarea video este indisponibilă momentan"</string>
-    <string name="video_call_not_available_message" msgid="2284146863894603221">"Încercați să apelați din nou mai târziu sau continuați ca apel vocal."</string>
-    <string name="voice_call" msgid="6748636104112578475">"Apel vocal"</string>
-</resources>
diff --git a/java/com/android/incallui/disconnectdialog/res/values-ru/strings.xml b/java/com/android/incallui/disconnectdialog/res/values-ru/strings.xml
deleted file mode 100644
index ffc3f61..0000000
--- a/java/com/android/incallui/disconnectdialog/res/values-ru/strings.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  ~ 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
-   -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="incall_enable_wifi_calling_button" msgid="3295230556186542328">"Включить"</string>
-    <string name="video_call_not_available_title" msgid="987490011944013201">"В настоящее время видеовызовы недоступны"</string>
-    <string name="video_call_not_available_message" msgid="2284146863894603221">"Повторите попытку позже или продолжайте выполнять вызов как голосовой."</string>
-    <string name="voice_call" msgid="6748636104112578475">"Голосовой вызов"</string>
-</resources>
diff --git a/java/com/android/incallui/disconnectdialog/res/values-si/strings.xml b/java/com/android/incallui/disconnectdialog/res/values-si/strings.xml
deleted file mode 100644
index 6948877..0000000
--- a/java/com/android/incallui/disconnectdialog/res/values-si/strings.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  ~ 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
-   -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="incall_enable_wifi_calling_button" msgid="3295230556186542328">"සබල කරන්න"</string>
-    <string name="video_call_not_available_title" msgid="987490011944013201">"වීඩියෝ ඇමතීම දැනට ලබා ගැනීමට නොහැකිය"</string>
-    <string name="video_call_not_available_message" msgid="2284146863894603221">"පසුව නැවත ඇමතීම උත්සාහ කරන්න නැතහොත් ඇමතුම හඬ ඇමතුමක් ලෙස දිගටම කරගෙන යන්න."</string>
-    <string name="voice_call" msgid="6748636104112578475">"හඬ ඇමතීම"</string>
-</resources>
diff --git a/java/com/android/incallui/disconnectdialog/res/values-sk/strings.xml b/java/com/android/incallui/disconnectdialog/res/values-sk/strings.xml
deleted file mode 100644
index 8f4b059..0000000
--- a/java/com/android/incallui/disconnectdialog/res/values-sk/strings.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  ~ 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
-   -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="incall_enable_wifi_calling_button" msgid="3295230556186542328">"Povoliť"</string>
-    <string name="video_call_not_available_title" msgid="987490011944013201">"Videohovor momentálne nie je k dispozícii"</string>
-    <string name="video_call_not_available_message" msgid="2284146863894603221">"Skúste zavolať znova neskôr alebo pokračujte v hovore bez videa."</string>
-    <string name="voice_call" msgid="6748636104112578475">"Hlasový hovor"</string>
-</resources>
diff --git a/java/com/android/incallui/disconnectdialog/res/values-sl/strings.xml b/java/com/android/incallui/disconnectdialog/res/values-sl/strings.xml
deleted file mode 100644
index 6afd14c..0000000
--- a/java/com/android/incallui/disconnectdialog/res/values-sl/strings.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  ~ 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
-   -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="incall_enable_wifi_calling_button" msgid="3295230556186542328">"Omogoči"</string>
-    <string name="video_call_not_available_title" msgid="987490011944013201">"Videoklicanje trenutno ni na voljo"</string>
-    <string name="video_call_not_available_message" msgid="2284146863894603221">"Poskusite klicati znova pozneje ali pa klic nadaljujte kot glasovni klic."</string>
-    <string name="voice_call" msgid="6748636104112578475">"Glasovni klic"</string>
-</resources>
diff --git a/java/com/android/incallui/disconnectdialog/res/values-sq/strings.xml b/java/com/android/incallui/disconnectdialog/res/values-sq/strings.xml
deleted file mode 100644
index cccc83f..0000000
--- a/java/com/android/incallui/disconnectdialog/res/values-sq/strings.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  ~ 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
-   -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="incall_enable_wifi_calling_button" msgid="3295230556186542328">"Aktivizo"</string>
-    <string name="video_call_not_available_title" msgid="987490011944013201">"Telefonatat me video nuk ofrohen aktualisht"</string>
-    <string name="video_call_not_available_message" msgid="2284146863894603221">"Provo të telefonosh përsëri më vonë ose vazhdoje telefonatën si një telefonatë zanore."</string>
-    <string name="voice_call" msgid="6748636104112578475">"Telefonatë me video"</string>
-</resources>
diff --git a/java/com/android/incallui/disconnectdialog/res/values-sr/strings.xml b/java/com/android/incallui/disconnectdialog/res/values-sr/strings.xml
deleted file mode 100644
index 620c39e..0000000
--- a/java/com/android/incallui/disconnectdialog/res/values-sr/strings.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  ~ 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
-   -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="incall_enable_wifi_calling_button" msgid="3295230556186542328">"Омогући"</string>
-    <string name="video_call_not_available_title" msgid="987490011944013201">"Видео позив тренутно није доступан"</string>
-    <string name="video_call_not_available_message" msgid="2284146863894603221">"Пробајте поново да упутите позив касније или га наставите као аудио позив."</string>
-    <string name="voice_call" msgid="6748636104112578475">"Аудио позив"</string>
-</resources>
diff --git a/java/com/android/incallui/disconnectdialog/res/values-sv/strings.xml b/java/com/android/incallui/disconnectdialog/res/values-sv/strings.xml
deleted file mode 100644
index e6be384..0000000
--- a/java/com/android/incallui/disconnectdialog/res/values-sv/strings.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  ~ 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
-   -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="incall_enable_wifi_calling_button" msgid="3295230556186542328">"Aktivera"</string>
-    <string name="video_call_not_available_title" msgid="987490011944013201">"Det går inte att ringa videosamtal just nu"</string>
-    <string name="video_call_not_available_message" msgid="2284146863894603221">"Försök ringa upp igen senare eller fortsätt samtalet som ett röstsamtal"</string>
-    <string name="voice_call" msgid="6748636104112578475">"Röstsamtal"</string>
-</resources>
diff --git a/java/com/android/incallui/disconnectdialog/res/values-sw/strings.xml b/java/com/android/incallui/disconnectdialog/res/values-sw/strings.xml
deleted file mode 100644
index 6d6a6a0..0000000
--- a/java/com/android/incallui/disconnectdialog/res/values-sw/strings.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  ~ 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
-   -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="incall_enable_wifi_calling_button" msgid="3295230556186542328">"Washa"</string>
-    <string name="video_call_not_available_title" msgid="987490011944013201">"Kipengele cha kupiga simu za video hakipatikani kwa sasa"</string>
-    <string name="video_call_not_available_message" msgid="2284146863894603221">"Jaribu kupiga simu ya video tena hapo baadaye au uendelee na mazungumzo kama simu ya sauti."</string>
-    <string name="voice_call" msgid="6748636104112578475">"Simu ya sauti"</string>
-</resources>
diff --git a/java/com/android/incallui/disconnectdialog/res/values-ta/strings.xml b/java/com/android/incallui/disconnectdialog/res/values-ta/strings.xml
deleted file mode 100644
index 626d0d6..0000000
--- a/java/com/android/incallui/disconnectdialog/res/values-ta/strings.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  ~ 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
-   -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="incall_enable_wifi_calling_button" msgid="3295230556186542328">"இயக்கு"</string>
-    <string name="video_call_not_available_title" msgid="987490011944013201">"தற்போது வீடியோவில் அழைக்க முடியாது"</string>
-    <string name="video_call_not_available_message" msgid="2284146863894603221">"பிறகு அழைக்க முயற்சிக்கவும் அல்லது குரல் அழைப்பைச் செய்யவும்."</string>
-    <string name="voice_call" msgid="6748636104112578475">"குரல் அழைப்பு"</string>
-</resources>
diff --git a/java/com/android/incallui/disconnectdialog/res/values-te/strings.xml b/java/com/android/incallui/disconnectdialog/res/values-te/strings.xml
deleted file mode 100644
index 737d677..0000000
--- a/java/com/android/incallui/disconnectdialog/res/values-te/strings.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  ~ 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
-   -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="incall_enable_wifi_calling_button" msgid="3295230556186542328">"ప్రారంభించు"</string>
-    <string name="video_call_not_available_title" msgid="987490011944013201">"ప్రస్తుతం వీడియో కాలింగ్ అందుబాటులో లేదు"</string>
-    <string name="video_call_not_available_message" msgid="2284146863894603221">"మళ్లీ కాల్ చేసి ప్రయత్నించండి లేదా కాల్‌ను వాయిస్ కాల్ వలె కొనసాగించండి."</string>
-    <string name="voice_call" msgid="6748636104112578475">"వాయిస్ కాల్"</string>
-</resources>
diff --git a/java/com/android/incallui/disconnectdialog/res/values-th/strings.xml b/java/com/android/incallui/disconnectdialog/res/values-th/strings.xml
deleted file mode 100644
index a6fa2b1..0000000
--- a/java/com/android/incallui/disconnectdialog/res/values-th/strings.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  ~ 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
-   -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="incall_enable_wifi_calling_button" msgid="3295230556186542328">"เปิดใช้"</string>
-    <string name="video_call_not_available_title" msgid="987490011944013201">"วิดีโอคอลไม่พร้อมใช้งานในตอนนี้"</string>
-    <string name="video_call_not_available_message" msgid="2284146863894603221">"ลองโทรอีกครั้งในภายหลัง หรือโทรด้วยเสียงต่อไป"</string>
-    <string name="voice_call" msgid="6748636104112578475">"การโทรด้วยเสียง"</string>
-</resources>
diff --git a/java/com/android/incallui/disconnectdialog/res/values-tl/strings.xml b/java/com/android/incallui/disconnectdialog/res/values-tl/strings.xml
deleted file mode 100644
index 17f29af..0000000
--- a/java/com/android/incallui/disconnectdialog/res/values-tl/strings.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  ~ 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
-   -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="incall_enable_wifi_calling_button" msgid="3295230556186542328">"I-enable"</string>
-    <string name="video_call_not_available_title" msgid="987490011944013201">"Kasalukuyang hindi available ang pakikipag-video call"</string>
-    <string name="video_call_not_available_message" msgid="2284146863894603221">"Subukang tumawag muli sa ibang pagkakataon o ipagpatuloy ang tawag bilang isang voice call."</string>
-    <string name="voice_call" msgid="6748636104112578475">"Voice call"</string>
-</resources>
diff --git a/java/com/android/incallui/disconnectdialog/res/values-tr/strings.xml b/java/com/android/incallui/disconnectdialog/res/values-tr/strings.xml
deleted file mode 100644
index a0ba4fa..0000000
--- a/java/com/android/incallui/disconnectdialog/res/values-tr/strings.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  ~ 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
-   -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="incall_enable_wifi_calling_button" msgid="3295230556186542328">"Etkinleştir"</string>
-    <string name="video_call_not_available_title" msgid="987490011944013201">"Görüntülü görüşme şu anda kullanılamıyor"</string>
-    <string name="video_call_not_available_message" msgid="2284146863894603221">"Görüntülü görüşme yapmayı daha sonra tekrar deneyin veya görüşmeye sesli arama olarak devam edin."</string>
-    <string name="voice_call" msgid="6748636104112578475">"Sesli arama"</string>
-</resources>
diff --git a/java/com/android/incallui/disconnectdialog/res/values-uk/strings.xml b/java/com/android/incallui/disconnectdialog/res/values-uk/strings.xml
deleted file mode 100644
index 36a3c45..0000000
--- a/java/com/android/incallui/disconnectdialog/res/values-uk/strings.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  ~ 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
-   -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="incall_enable_wifi_calling_button" msgid="3295230556186542328">"Увімкнути"</string>
-    <string name="video_call_not_available_title" msgid="987490011944013201">"Наразі не можна здійснювати відеодзвінки"</string>
-    <string name="video_call_not_available_message" msgid="2284146863894603221">"Спробуйте пізніше або перейдіть у режим голосового дзвінка."</string>
-    <string name="voice_call" msgid="6748636104112578475">"Голосовий дзвінок"</string>
-</resources>
diff --git a/java/com/android/incallui/disconnectdialog/res/values-ur/strings.xml b/java/com/android/incallui/disconnectdialog/res/values-ur/strings.xml
deleted file mode 100644
index 4fa8b50..0000000
--- a/java/com/android/incallui/disconnectdialog/res/values-ur/strings.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  ~ 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
-   -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="incall_enable_wifi_calling_button" msgid="3295230556186542328">"فعال کریں"</string>
-    <string name="video_call_not_available_title" msgid="987490011944013201">"ویڈیو کالنگ فی الحال دستیاب نہیں ہے"</string>
-    <string name="video_call_not_available_message" msgid="2284146863894603221">"بعد میں دوبارہ کال کرنے کی کوشش کریں یا کال کو بطور صوتی کال جاری رکھیں۔"</string>
-    <string name="voice_call" msgid="6748636104112578475">"صوتی کال"</string>
-</resources>
diff --git a/java/com/android/incallui/disconnectdialog/res/values-uz/strings.xml b/java/com/android/incallui/disconnectdialog/res/values-uz/strings.xml
deleted file mode 100644
index 229e6e7..0000000
--- a/java/com/android/incallui/disconnectdialog/res/values-uz/strings.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  ~ 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
-   -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="incall_enable_wifi_calling_button" msgid="3295230556186542328">"Yoqish"</string>
-    <string name="video_call_not_available_title" msgid="987490011944013201">"Video muloqot funksiyasidan hozirgi vaqtda foydalanib bo‘lmaydi."</string>
-    <string name="video_call_not_available_message" msgid="2284146863894603221">"Keyinroq qayta urinib ko‘ring yoki ovozli muloqot rejimida o‘ting."</string>
-    <string name="voice_call" msgid="6748636104112578475">"Ovozli muloqot"</string>
-</resources>
diff --git a/java/com/android/incallui/disconnectdialog/res/values-vi/strings.xml b/java/com/android/incallui/disconnectdialog/res/values-vi/strings.xml
deleted file mode 100644
index 3e49451..0000000
--- a/java/com/android/incallui/disconnectdialog/res/values-vi/strings.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  ~ 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
-   -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="incall_enable_wifi_calling_button" msgid="3295230556186542328">"Bật"</string>
-    <string name="video_call_not_available_title" msgid="987490011944013201">"Hiện không sử dụng được tính năng gọi điện video"</string>
-    <string name="video_call_not_available_message" msgid="2284146863894603221">"Hãy thử gọi lại sau hoặc tiếp tục gọi dưới dạng cuộc gọi thoại."</string>
-    <string name="voice_call" msgid="6748636104112578475">"Cuộc gọi thoại"</string>
-</resources>
diff --git a/java/com/android/incallui/disconnectdialog/res/values-zh-rCN/strings.xml b/java/com/android/incallui/disconnectdialog/res/values-zh-rCN/strings.xml
deleted file mode 100644
index 3f8cd6d..0000000
--- a/java/com/android/incallui/disconnectdialog/res/values-zh-rCN/strings.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  ~ 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
-   -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="incall_enable_wifi_calling_button" msgid="3295230556186542328">"启用"</string>
-    <string name="video_call_not_available_title" msgid="987490011944013201">"当前无法使用视频通话功能"</string>
-    <string name="video_call_not_available_message" msgid="2284146863894603221">"请稍后再试,或者改用语音通话。"</string>
-    <string name="voice_call" msgid="6748636104112578475">"语音通话"</string>
-</resources>
diff --git a/java/com/android/incallui/disconnectdialog/res/values-zh-rHK/strings.xml b/java/com/android/incallui/disconnectdialog/res/values-zh-rHK/strings.xml
deleted file mode 100644
index 605c847..0000000
--- a/java/com/android/incallui/disconnectdialog/res/values-zh-rHK/strings.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  ~ 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
-   -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="incall_enable_wifi_calling_button" msgid="3295230556186542328">"啟用"</string>
-    <string name="video_call_not_available_title" msgid="987490011944013201">"視像通話目前無法使用"</string>
-    <string name="video_call_not_available_message" msgid="2284146863894603221">"請稍後再撥,或是以語音通話的形式繼續通話。"</string>
-    <string name="voice_call" msgid="6748636104112578475">"語音通話"</string>
-</resources>
diff --git a/java/com/android/incallui/disconnectdialog/res/values-zh-rTW/strings.xml b/java/com/android/incallui/disconnectdialog/res/values-zh-rTW/strings.xml
deleted file mode 100644
index 5201a34..0000000
--- a/java/com/android/incallui/disconnectdialog/res/values-zh-rTW/strings.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  ~ 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
-   -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="incall_enable_wifi_calling_button" msgid="3295230556186542328">"啟用"</string>
-    <string name="video_call_not_available_title" msgid="987490011944013201">"目前無法使用視訊通話功能"</string>
-    <string name="video_call_not_available_message" msgid="2284146863894603221">"請稍後再嘗試撥打電話,或以語音方式繼續進行通話。"</string>
-    <string name="voice_call" msgid="6748636104112578475">"語音通話"</string>
-</resources>
diff --git a/java/com/android/incallui/disconnectdialog/res/values-zu/strings.xml b/java/com/android/incallui/disconnectdialog/res/values-zu/strings.xml
deleted file mode 100644
index 1c0dd48..0000000
--- a/java/com/android/incallui/disconnectdialog/res/values-zu/strings.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  ~ 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
-   -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="incall_enable_wifi_calling_button" msgid="3295230556186542328">"Nika amandla"</string>
-    <string name="video_call_not_available_title" msgid="987490011944013201">"Ukushaya kwevidiyo manje akutholakali"</string>
-    <string name="video_call_not_available_message" msgid="2284146863894603221">"Zama ukushaya emuva kwesikhathi noma qhuba ikholi njengekholi yezwi."</string>
-    <string name="voice_call" msgid="6748636104112578475">"Ikholi yezwi"</string>
-</resources>
diff --git a/java/com/android/incallui/incall/impl/ButtonChooser.java b/java/com/android/incallui/incall/impl/ButtonChooser.java
index 55b82f0..095a8be 100644
--- a/java/com/android/incallui/incall/impl/ButtonChooser.java
+++ b/java/com/android/incallui/incall/impl/ButtonChooser.java
@@ -18,6 +18,7 @@
 
 import android.support.annotation.NonNull;
 import com.android.dialer.common.Assert;
+import com.android.incallui.incall.impl.MappedButtonConfig.MappingInfo;
 import com.android.incallui.incall.protocol.InCallButtonIds;
 import java.util.ArrayList;
 import java.util.Collections;
@@ -103,12 +104,29 @@
       if (placedButtons.size() >= numUiButtons) {
         return;
       }
+
       // If the conflict button is allowed but disabled, don't place it since it probably will
       // move when it's enabled.
       if (!allowedButtons.contains(conflict) || disabledButtons.contains(conflict)) {
         continue;
       }
+
+      if (isMutuallyExclusiveButtonAvailable(
+          config.lookupMappingInfo(conflict).getMutuallyExclusiveButton(), allowedButtons)) {
+        continue;
+      }
       placedButtons.add(conflict);
     }
   }
+
+  private boolean isMutuallyExclusiveButtonAvailable(
+      int mutuallyExclusiveButton, @NonNull Set<Integer> allowedButtons) {
+    if (mutuallyExclusiveButton == MappingInfo.NO_MUTUALLY_EXCLUSIVE_BUTTON_SET) {
+      return false;
+    }
+    if (allowedButtons.contains(mutuallyExclusiveButton)) {
+      return true;
+    }
+    return false;
+  }
 }
diff --git a/java/com/android/incallui/incall/impl/ButtonChooserFactory.java b/java/com/android/incallui/incall/impl/ButtonChooserFactory.java
index 99364e2..0f4a95d 100644
--- a/java/com/android/incallui/incall/impl/ButtonChooserFactory.java
+++ b/java/com/android/incallui/incall/impl/ButtonChooserFactory.java
@@ -74,6 +74,12 @@
     mapping.put(
         InCallButtonIds.BUTTON_UPGRADE_TO_VIDEO, MappingInfo.builder(4).setSlotOrder(10).build());
     mapping.put(InCallButtonIds.BUTTON_SWAP, MappingInfo.builder(5).setSlotOrder(0).build());
+    mapping.put(
+        InCallButtonIds.BUTTON_SWITCH_TO_SECONDARY,
+        MappingInfo.builder(5)
+            .setSlotOrder(Integer.MAX_VALUE)
+            .setMutuallyExclusiveButton(InCallButtonIds.BUTTON_SWAP)
+            .build());
 
     return new ButtonChooser(new MappedButtonConfig(mapping));
   }
diff --git a/java/com/android/incallui/incall/impl/InCallFragment.java b/java/com/android/incallui/incall/impl/InCallFragment.java
index 54d01e7..7e39ceb 100644
--- a/java/com/android/incallui/incall/impl/InCallFragment.java
+++ b/java/com/android/incallui/incall/impl/InCallFragment.java
@@ -44,6 +44,7 @@
 import com.android.dialer.logging.DialerImpression;
 import com.android.dialer.logging.Logger;
 import com.android.dialer.multimedia.MultimediaData;
+import com.android.dialer.strictmode.DialerStrictMode;
 import com.android.dialer.widget.LockableViewPager;
 import com.android.incallui.audioroute.AudioRouteSelectorDialogFragment;
 import com.android.incallui.audioroute.AudioRouteSelectorDialogFragment.AudioRouteSelectorPresenter;
@@ -60,6 +61,7 @@
 import com.android.incallui.incall.protocol.InCallScreenDelegate;
 import com.android.incallui.incall.protocol.InCallScreenDelegateFactory;
 import com.android.incallui.incall.protocol.PrimaryCallState;
+import com.android.incallui.incall.protocol.PrimaryCallState.ButtonState;
 import com.android.incallui.incall.protocol.PrimaryInfo;
 import com.android.incallui.incall.protocol.SecondaryInfo;
 import java.util.ArrayList;
@@ -138,7 +140,10 @@
       @Nullable ViewGroup viewGroup,
       @Nullable Bundle bundle) {
     LogUtil.i("InCallFragment.onCreateView", null);
-    final View view = layoutInflater.inflate(R.layout.frag_incall_voice, viewGroup, false);
+    // Bypass to avoid StrictModeResourceMismatchViolation
+    final View view =
+        DialerStrictMode.bypass(
+            () -> layoutInflater.inflate(R.layout.frag_incall_voice, viewGroup, false));
     contactGridManager =
         new ContactGridManager(
             view,
@@ -287,10 +292,6 @@
   @Override
   public void setSecondary(@NonNull SecondaryInfo secondaryInfo) {
     LogUtil.i("InCallFragment.setSecondary", secondaryInfo.toString());
-    getButtonController(InCallButtonIds.BUTTON_SWITCH_TO_SECONDARY)
-        .setEnabled(secondaryInfo.shouldShow);
-    getButtonController(InCallButtonIds.BUTTON_SWITCH_TO_SECONDARY)
-        .setAllowed(secondaryInfo.shouldShow);
     updateButtonStates();
 
     if (!isAdded()) {
@@ -315,6 +316,10 @@
   public void setCallState(@NonNull PrimaryCallState primaryCallState) {
     LogUtil.i("InCallFragment.setCallState", primaryCallState.toString());
     contactGridManager.setCallState(primaryCallState);
+    getButtonController(InCallButtonIds.BUTTON_SWITCH_TO_SECONDARY)
+        .setAllowed(primaryCallState.swapToSecondaryButtonState != ButtonState.NOT_SUPPORT);
+    getButtonController(InCallButtonIds.BUTTON_SWITCH_TO_SECONDARY)
+        .setEnabled(primaryCallState.swapToSecondaryButtonState == ButtonState.ENABLED);
     buttonChooser =
         ButtonChooserFactory.newButtonChooser(voiceNetworkType, primaryCallState.isWifi, phoneType);
     updateButtonStates();
diff --git a/java/com/android/incallui/incall/impl/InCallPagerAdapter.java b/java/com/android/incallui/incall/impl/InCallPagerAdapter.java
index bc0c616..d4b04fe 100644
--- a/java/com/android/incallui/incall/impl/InCallPagerAdapter.java
+++ b/java/com/android/incallui/incall/impl/InCallPagerAdapter.java
@@ -39,7 +39,7 @@
     if (position == getButtonGridPosition()) {
       return InCallButtonGridFragment.newInstance();
     } else {
-      // TODO: handle fragment invalidation for when the data changes.
+      // TODO(calderwoodra): handle fragment invalidation for when the data changes.
       return MultimediaFragment.newInstance(attachments, true, false, false);
     }
   }
diff --git a/java/com/android/incallui/incall/impl/MappedButtonConfig.java b/java/com/android/incallui/incall/impl/MappedButtonConfig.java
index 7229837..67c4137 100644
--- a/java/com/android/incallui/incall/impl/MappedButtonConfig.java
+++ b/java/com/android/incallui/incall/impl/MappedButtonConfig.java
@@ -141,7 +141,7 @@
   }
 
   @NonNull
-  private MappingInfo lookupMappingInfo(@InCallButtonIds int button) {
+  public MappingInfo lookupMappingInfo(@InCallButtonIds int button) {
     MappingInfo info = mapping.get(button);
     if (info == null) {
       throw new IllegalArgumentException(
@@ -154,6 +154,8 @@
   @AutoValue
   abstract static class MappingInfo {
 
+    public static final int NO_MUTUALLY_EXCLUSIVE_BUTTON_SET = -1;
+
     /** The Ui slot into which a given button desires to be placed. */
     public abstract int getSlot();
 
@@ -171,11 +173,20 @@
      */
     public abstract int getConflictOrder();
 
+    /**
+     * Returns an integer representing a button for which the given button conflicts. Defaults to
+     * {@link NO_MUTUALLY_EXCLUSIVE_BUTTON_SET}.
+     *
+     * <p>If the mutually exclusive button is chosen, the associated button should never be chosen.
+     */
+    public abstract @InCallButtonIds int getMutuallyExclusiveButton();
+
     static Builder builder(int slot) {
       return new AutoValue_MappedButtonConfig_MappingInfo.Builder()
           .setSlot(slot)
           .setSlotOrder(Integer.MAX_VALUE)
-          .setConflictOrder(Integer.MAX_VALUE);
+          .setConflictOrder(Integer.MAX_VALUE)
+          .setMutuallyExclusiveButton(NO_MUTUALLY_EXCLUSIVE_BUTTON_SET);
     }
 
     /** Class used to build instances of {@link MappingInfo}. */
@@ -187,6 +198,8 @@
 
       public abstract Builder setConflictOrder(int conflictOrder);
 
+      public abstract Builder setMutuallyExclusiveButton(@InCallButtonIds int button);
+
       public abstract MappingInfo build();
     }
   }
diff --git a/java/com/android/incallui/incall/protocol/PrimaryCallState.java b/java/com/android/incallui/incall/protocol/PrimaryCallState.java
index 26dd388..791f22e 100644
--- a/java/com/android/incallui/incall/protocol/PrimaryCallState.java
+++ b/java/com/android/incallui/incall/protocol/PrimaryCallState.java
@@ -17,13 +17,29 @@
 package com.android.incallui.incall.protocol;
 
 import android.graphics.drawable.Drawable;
+import android.support.annotation.IntDef;
 import android.telecom.DisconnectCause;
 import com.android.incallui.call.DialerCall;
 import com.android.incallui.videotech.utils.SessionModificationState;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
 import java.util.Locale;
 
 /** State of the primary call. */
 public class PrimaryCallState {
+
+  /**
+   * Button state that will be invisible if not supported, visible but invalid if disabled, or
+   * visible if enabled.
+   */
+  @Retention(RetentionPolicy.SOURCE)
+  @IntDef({ButtonState.NOT_SUPPORT, ButtonState.DISABLED, ButtonState.ENABLED})
+  public @interface ButtonState {
+    int NOT_SUPPORT = 0;
+    int DISABLED = 1;
+    int ENABLED = 2;
+  }
+
   public final int state;
   public final boolean isVideoCall;
   @SessionModificationState public final int sessionModificationState;
@@ -45,6 +61,8 @@
   public final boolean isRemotelyHeld;
   public final boolean isBusinessNumber;
   public final boolean supportsCallOnHold;
+  public final @ButtonState int swapToSecondaryButtonState;
+  public final boolean isAssistedDialed;
 
   // TODO: Convert to autovalue. b/34502119
   public static PrimaryCallState createEmptyPrimaryCallState() {
@@ -69,7 +87,9 @@
         false /* isVoiceMailNumber */,
         false /* isRemotelyHeld */,
         false /* isBusinessNumber */,
-        true /* supportsCallOnHold */);
+        true /* supportsCallOnHold */,
+        ButtonState.NOT_SUPPORT /* swapToSecondaryButtonState */,
+        false /* isAssistedDialed */);
   }
 
   public PrimaryCallState(
@@ -93,7 +113,9 @@
       boolean isVoiceMailNumber,
       boolean isRemotelyHeld,
       boolean isBusinessNumber,
-      boolean supportsCallOnHold) {
+      boolean supportsCallOnHold,
+      @ButtonState int swapToSecondaryButtonState,
+      boolean isAssistedDialed) {
     this.state = state;
     this.isVideoCall = isVideoCall;
     this.sessionModificationState = sessionModificationState;
@@ -115,6 +137,8 @@
     this.isRemotelyHeld = isRemotelyHeld;
     this.isBusinessNumber = isBusinessNumber;
     this.supportsCallOnHold = supportsCallOnHold;
+    this.swapToSecondaryButtonState = swapToSecondaryButtonState;
+    this.isAssistedDialed = isAssistedDialed;
   }
 
   @Override
diff --git a/java/com/android/incallui/maps/impl/AndroidManifest.xml b/java/com/android/incallui/maps/impl/AndroidManifest.xml
index 4ad0b3b..bc921e9 100644
--- a/java/com/android/incallui/maps/impl/AndroidManifest.xml
+++ b/java/com/android/incallui/maps/impl/AndroidManifest.xml
@@ -19,6 +19,7 @@
   package="com.android.incallui.maps.impl">
 
   <application>
+
     <meta-data
       android:name="com.google.android.gms.version"
       android:value="@integer/google_play_services_version"/>
diff --git a/java/com/android/incallui/res/drawable/spam_notification_icon.xml b/java/com/android/incallui/res/drawable/spam_notification_icon.xml
index a26e7d4..a414428 100644
--- a/java/com/android/incallui/res/drawable/spam_notification_icon.xml
+++ b/java/com/android/incallui/res/drawable/spam_notification_icon.xml
@@ -22,8 +22,8 @@
     <shape android:shape="oval">
       <solid android:color="@color/incall_call_spam_background_color"/>
       <size
-        android:height="@dimen/notification_large_icon_height"
-        android:width="@dimen/notification_large_icon_width"/>
+        android:height="@android:dimen/notification_large_icon_height"
+        android:width="@android:dimen/notification_large_icon_width"/>
     </shape>
   </item>
 
@@ -31,4 +31,4 @@
     android:drawable="@drawable/quantum_ic_report_white_36"
     android:gravity="center"/>
 
-</layer-list>
\ No newline at end of file
+</layer-list>
diff --git a/java/com/android/incallui/res/drawable/unknown_notification_icon.xml b/java/com/android/incallui/res/drawable/unknown_notification_icon.xml
deleted file mode 100644
index 5ab07ec..0000000
--- a/java/com/android/incallui/res/drawable/unknown_notification_icon.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-
-<!--
-  ~ Copyright (C) 2016 The Android Open Source Project
-  ~
-  ~ Licensed under the Apache License, Version 2.0 (the "License");
-  ~ you may not use this file except in compliance with the License.
-  ~ You may obtain a copy of the License at
-  ~
-  ~      http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License
-  -->
-
-<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
-
-  <item>
-    <shape android:shape="oval">
-      <solid android:color="@color/unknown_number_color"/>
-      <size
-        android:height="@dimen/notification_large_icon_height"
-        android:width="@dimen/notification_large_icon_width"/>
-    </shape>
-  </item>
-
-  <item
-    android:drawable="@drawable/ic_question_mark"
-    android:gravity="center"/>
-
-</layer-list>
\ No newline at end of file
diff --git a/java/com/android/incallui/res/values-pl/strings.xml b/java/com/android/incallui/res/values-pl/strings.xml
index cb27c73..451c8ba 100644
--- a/java/com/android/incallui/res/values-pl/strings.xml
+++ b/java/com/android/incallui/res/values-pl/strings.xml
@@ -76,7 +76,7 @@
     <string name="incall_error_out_of_service" msgid="5027539470868484145">"Sieć komórkowa jest niedostępna."</string>
     <string name="incall_error_no_phone_number_supplied" msgid="293343960362630925">"Aby zadzwonić, wybierz prawidłowy numer."</string>
     <string name="incall_error_call_failed" msgid="5560521345862514733">"Nie można dzwonić."</string>
-    <string name="incall_status_dialed_mmi" msgid="3341365334358686873">"Uruchamiam sekwencję MMI..."</string>
+    <string name="incall_status_dialed_mmi" msgid="3341365334358686873">"Rozpoczynanie sekwencji MMI..."</string>
     <string name="incall_error_supp_service_unknown" msgid="3062751096566282959">"Usługa nie jest obsługiwana."</string>
     <string name="incall_error_supp_service_switch" msgid="759346040980722884">"Nie można przełączyć połączeń."</string>
     <string name="incall_error_supp_service_separate" msgid="5250304200901095519">"Nie można rozdzielić połączenia."</string>
diff --git a/java/com/android/incallui/res/values-uz/strings.xml b/java/com/android/incallui/res/values-uz/strings.xml
index 2341da3..26120f1 100644
--- a/java/com/android/incallui/res/values-uz/strings.xml
+++ b/java/com/android/incallui/res/values-uz/strings.xml
@@ -31,7 +31,7 @@
     <string name="voicemail_settings_number_label" msgid="8935904934161608885">"Ovozli pochta raqami"</string>
     <string name="notification_dialing" msgid="9072177265772083826">"Raqam terilmoqda"</string>
     <string name="notification_missedCallTicker" msgid="238492086972857643">"<xliff:g id="MISSED_CALL_FROM">%s</xliff:g> chaqiruvi javobsiz qoldi"</string>
-    <string name="notification_ongoing_call" msgid="8712641937577776125">"Joriy chaqiruv"</string>
+    <string name="notification_ongoing_call" msgid="8712641937577776125">"Joriy qo‘ng‘iroq"</string>
     <string name="notification_ongoing_work_call" msgid="3189581218078981547">"Chiquvchi ishchi qo‘ng‘irog‘i"</string>
     <string name="notification_ongoing_call_wifi" msgid="4393238962909277019">"Joriy Wi-Fi qo‘ng‘iroq"</string>
     <string name="notification_ongoing_work_call_wifi" msgid="3169378605818323964">"Joriy Wi-Fi qo‘ng‘iroq (ish)"</string>
@@ -55,9 +55,9 @@
     <string name="important_notification_incoming_call_with_photo_message_location" msgid="513692941317253479">"Surat, xabar va joy. ax. ega muhim kiruv. chaqiruv"</string>
     <string name="important_notification_incoming_call_attachments" msgid="4594375776340303751">"Biriktirmalarga ega muhim kiruvchi chaqiruv"</string>
     <string name="notification_incoming_work_call" msgid="5291275092734261918">"Kiruvchi ishchi qo‘ng‘irog‘i"</string>
-    <string name="notification_incoming_call_wifi" msgid="1020138378061234203">"Kiruvchi Wi-Fi chaqiruv"</string>
-    <string name="notification_incoming_work_call_wifi" msgid="3549264481033044684">"Kiruvchi Wi-Fi chaqiruv (ish)"</string>
-    <string name="notification_incoming_spam_call" msgid="7591506944666791937">"Kiruvchi chaqiruv: shubhali spam"</string>
+    <string name="notification_incoming_call_wifi" msgid="1020138378061234203">"Kiruvchi Wi-Fi qo‘ng‘iroq"</string>
+    <string name="notification_incoming_work_call_wifi" msgid="3549264481033044684">"Kiruvchi Wi-Fi qo‘ng‘iroq (ish)"</string>
+    <string name="notification_incoming_spam_call" msgid="7591506944666791937">"Shubhali kiruvchi qo‘ng‘iroq"</string>
     <string name="notification_requesting_video_call" msgid="1807679328811515758">"Kiruvchi video so\'rovi"</string>
     <string name="notification_network_selection_title" msgid="8639159088474275747">"Xizmat mavjud emas"</string>
     <string name="notification_network_selection_text" msgid="7190860774239009625">"Tanlangan tarmoq (<xliff:g id="OPERATOR_NAME">%s</xliff:g>) mavjud emas"</string>
diff --git a/java/com/android/incallui/res/values/strings.xml b/java/com/android/incallui/res/values/strings.xml
index 4113313..22c3c23 100644
--- a/java/com/android/incallui/res/values/strings.xml
+++ b/java/com/android/incallui/res/values/strings.xml
@@ -76,12 +76,21 @@
   <string name="notification_ongoing_call">Ongoing call</string>
   <!-- The "label" of the in-call Notification for an ongoing work call. [CHAR LIMIT=60] -->
   <string name="notification_ongoing_work_call">Ongoing work call</string>
-  <!-- The "label" of the in-call Notification for an ongoing call, which is being made over
-       Wi-Fi. [CHAR LIMIT=60] -->
-  <string name="notification_ongoing_call_wifi">Ongoing Wi\u2011Fi call</string>
-  <!-- The "label" of the in-call Notification for an ongoing work call, which is being made
-       over Wi-Fi. [CHAR LIMIT=60] -->
-  <string name="notification_ongoing_work_call_wifi">Ongoing Wi\u2011Fi work call</string>
+
+  <!-- Template for the label on the in-call Notification for an ongoing call, which is being made
+      over Wi-Fi. The format argument is @string/notification_call_wifi_brand [CHAR LIMIT=20]-->
+  <string name="notification_ongoing_call_wifi_template">Ongoing <xliff:g id="brand_name">%1$s</xliff:g></string>
+
+  <!-- Template for the label of the in-call Notification for an incoming call, which is being made
+      over Wi-Fi. The format argument is @string/notification_call_wifi_brand [CHAR LIMIT=20] -->
+  <string name="notification_incoming_call_wifi_template">Incoming <xliff:g id="brand_name">%1$s</xliff:g></string>
+
+  <!-- "Brand name" for WiFi calls. Will be overridden for specific mcc-mnc combinations [CHAR LIMIT=40]-->
+  <string name="notification_call_wifi_brand">Wi\u2011Fi call</string>
+
+  <!-- "Brand name" for WiFi work calls. Will be overridden for specific mcc-mnc combinations [CHAR LIMIT=40] -->
+  <string name="notification_call_wifi_work_brand">Wi\u2011Fi work call</string>
+
   <!-- The "label" of the in-call Notification for a call that's on hold -->
   <string name="notification_on_hold">On hold</string>
   <!-- The "label" of the in-call Notification for an incoming ringing call. [CHAR LIMIT=60] -->
@@ -124,12 +133,6 @@
 
   <!-- The "label" of the in-call Notification for an incoming ringing call. [CHAR LIMIT=60] -->
   <string name="notification_incoming_work_call">Incoming work call</string>
-  <!-- The "label" of the in-call Notification for an incoming ringing call,
-       which is being made over Wi-Fi. [CHAR LIMIT=60] -->
-  <string name="notification_incoming_call_wifi">Incoming Wi\u2011Fi call</string>
-  <!-- The "label" of the in-call Notification for an incoming ringing work call,
-       which is being made over Wi-Fi. [CHAR LIMIT=60] -->
-  <string name="notification_incoming_work_call_wifi">Incoming Wi\u2011Fi work call</string>
   <!-- The "label" of the in-call Notification for an incoming ringing spam call. -->
   <string name="notification_incoming_spam_call">Incoming suspected spam call</string>
   <!-- The "label" of the in-call Notification for upgrading an existing call to a video call. -->
diff --git a/java/com/android/incallui/spam/NumberInCallHistoryTask.java b/java/com/android/incallui/spam/NumberInCallHistoryTask.java
deleted file mode 100644
index 886933f..0000000
--- a/java/com/android/incallui/spam/NumberInCallHistoryTask.java
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.incallui.spam;
-
-import android.annotation.TargetApi;
-import android.content.Context;
-import android.database.Cursor;
-import android.database.sqlite.SQLiteException;
-import android.os.AsyncTask;
-import android.os.Build.VERSION_CODES;
-import android.provider.CallLog;
-import android.provider.CallLog.Calls;
-import android.support.annotation.NonNull;
-import android.telephony.PhoneNumberUtils;
-import android.text.TextUtils;
-import com.android.dialer.common.LogUtil;
-import com.android.dialer.common.concurrent.AsyncTaskExecutor;
-import com.android.dialer.common.concurrent.AsyncTaskExecutors;
-import com.android.dialer.telecom.TelecomUtil;
-import com.android.dialer.util.PermissionsUtil;
-import com.android.incallui.call.DialerCall;
-import com.android.incallui.call.DialerCall.CallHistoryStatus;
-import java.util.Objects;
-
-/** Checks if the number is in the call history. */
-@TargetApi(VERSION_CODES.M)
-public class NumberInCallHistoryTask extends AsyncTask<Void, Void, Integer> {
-
-  public static final String TASK_ID = "number_in_call_history_status";
-
-  private final Context context;
-  private final Listener listener;
-  private final String number;
-  private final String countryIso;
-
-  public NumberInCallHistoryTask(
-      @NonNull Context context, @NonNull Listener listener, String number, String countryIso) {
-    this.context = Objects.requireNonNull(context);
-    this.listener = Objects.requireNonNull(listener);
-    this.number = number;
-    this.countryIso = countryIso;
-  }
-
-  public void submitTask() {
-    if (!PermissionsUtil.hasPhonePermissions(context)) {
-      return;
-    }
-    AsyncTaskExecutor asyncTaskExecutor = AsyncTaskExecutors.createThreadPoolExecutor();
-    asyncTaskExecutor.submit(TASK_ID, this);
-  }
-
-  @Override
-  @CallHistoryStatus
-  public Integer doInBackground(Void... params) {
-    String numberToQuery = number;
-    String fieldToQuery = Calls.NUMBER;
-    String normalizedNumber = PhoneNumberUtils.formatNumberToE164(number, countryIso);
-
-    // If we can normalize the number successfully, look in "normalized_number"
-    // field instead. Otherwise, look for number in "number" field.
-    if (!TextUtils.isEmpty(normalizedNumber)) {
-      numberToQuery = normalizedNumber;
-      fieldToQuery = Calls.CACHED_NORMALIZED_NUMBER;
-    }
-    try (Cursor cursor =
-        context
-            .getContentResolver()
-            .query(
-                TelecomUtil.getCallLogUri(context),
-                new String[] {CallLog.Calls._ID},
-                fieldToQuery + " = ?",
-                new String[] {numberToQuery},
-                null)) {
-      return cursor != null && cursor.getCount() > 0
-          ? DialerCall.CALL_HISTORY_STATUS_PRESENT
-          : DialerCall.CALL_HISTORY_STATUS_NOT_PRESENT;
-    } catch (SQLiteException e) {
-      LogUtil.e("NumberInCallHistoryTask.doInBackground", "query call log error", e);
-      return DialerCall.CALL_HISTORY_STATUS_UNKNOWN;
-    }
-  }
-
-  @Override
-  public void onPostExecute(@CallHistoryStatus Integer callHistoryStatus) {
-    listener.onComplete(callHistoryStatus);
-  }
-
-  /** Callback for the async task. */
-  public interface Listener {
-
-    void onComplete(@CallHistoryStatus int callHistoryStatus);
-  }
-}
diff --git a/java/com/android/incallui/spam/SpamCallListListener.java b/java/com/android/incallui/spam/SpamCallListListener.java
index b9c70eb..7ca3fbb 100644
--- a/java/com/android/incallui/spam/SpamCallListListener.java
+++ b/java/com/android/incallui/spam/SpamCallListListener.java
@@ -16,14 +16,21 @@
 
 package com.android.incallui.spam;
 
+import android.annotation.TargetApi;
 import android.app.Notification;
 import android.app.Notification.Builder;
 import android.app.NotificationManager;
 import android.app.PendingIntent;
 import android.content.Context;
 import android.content.Intent;
+import android.database.Cursor;
+import android.database.sqlite.SQLiteException;
 import android.graphics.drawable.Icon;
+import android.os.Build.VERSION_CODES;
+import android.provider.CallLog;
+import android.provider.CallLog.Calls;
 import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
 import android.support.v4.os.BuildCompat;
 import android.telecom.DisconnectCause;
 import android.telephony.PhoneNumberUtils;
@@ -31,17 +38,23 @@
 import com.android.contacts.common.compat.PhoneNumberUtilsCompat;
 import com.android.dialer.blocking.FilteredNumberCompat;
 import com.android.dialer.blocking.FilteredNumbersUtil;
+import com.android.dialer.common.Assert;
 import com.android.dialer.common.LogUtil;
+import com.android.dialer.common.concurrent.DialerExecutor.Worker;
+import com.android.dialer.common.concurrent.DialerExecutorFactory;
 import com.android.dialer.location.GeoUtil;
 import com.android.dialer.logging.ContactLookupResult;
 import com.android.dialer.logging.DialerImpression;
 import com.android.dialer.logging.Logger;
 import com.android.dialer.notification.NotificationChannelId;
 import com.android.dialer.spam.Spam;
+import com.android.dialer.telecom.TelecomUtil;
+import com.android.dialer.util.PermissionsUtil;
 import com.android.incallui.R;
 import com.android.incallui.call.CallList;
 import com.android.incallui.call.DialerCall;
 import com.android.incallui.call.DialerCall.CallHistoryStatus;
+import java.util.Arrays;
 import java.util.Random;
 
 /**
@@ -53,15 +66,67 @@
 
   private final Context context;
   private final Random random;
+  private final DialerExecutorFactory dialerExecutorFactory;
 
-  public SpamCallListListener(Context context) {
-    this.context = context;
-    this.random = new Random();
+  public SpamCallListListener(Context context, @NonNull DialerExecutorFactory factory) {
+    this(context, new Random(), factory);
   }
 
-  public SpamCallListListener(Context context, Random rand) {
+  public SpamCallListListener(
+      Context context, Random rand, @NonNull DialerExecutorFactory factory) {
     this.context = context;
     this.random = rand;
+    Assert.isNotNull(factory);
+    this.dialerExecutorFactory = factory;
+  }
+
+  /** Checks if the number is in the call history. */
+  @TargetApi(VERSION_CODES.M)
+  private final class NumberInCallHistoryWorker implements Worker<Void, Integer> {
+
+    private final Context appContext;
+    private final String number;
+    private final String countryIso;
+
+    public NumberInCallHistoryWorker(
+        @NonNull Context appContext, String number, String countryIso) {
+      this.appContext = Assert.isNotNull(appContext);
+      this.number = number;
+      this.countryIso = countryIso;
+    }
+
+    @Override
+    @NonNull
+    @CallHistoryStatus
+    public Integer doInBackground(@Nullable Void input) throws Throwable {
+      String numberToQuery = number;
+      String fieldToQuery = Calls.NUMBER;
+      String normalizedNumber = PhoneNumberUtils.formatNumberToE164(number, countryIso);
+
+      // If we can normalize the number successfully, look in "normalized_number"
+      // field instead. Otherwise, look for number in "number" field.
+      if (!TextUtils.isEmpty(normalizedNumber)) {
+        numberToQuery = normalizedNumber;
+        fieldToQuery = Calls.CACHED_NORMALIZED_NUMBER;
+      }
+
+      try (Cursor cursor =
+          appContext
+              .getContentResolver()
+              .query(
+                  TelecomUtil.getCallLogUri(appContext),
+                  new String[] {CallLog.Calls._ID},
+                  fieldToQuery + " = ?",
+                  new String[] {numberToQuery},
+                  null)) {
+        return cursor != null && cursor.getCount() > 0
+            ? DialerCall.CALL_HISTORY_STATUS_PRESENT
+            : DialerCall.CALL_HISTORY_STATUS_NOT_PRESENT;
+      } catch (SQLiteException e) {
+        LogUtil.e("NumberInCallHistoryWorker.doInBackground", "query call log error", e);
+        return DialerCall.CALL_HISTORY_STATUS_UNKNOWN;
+      }
+    }
   }
 
   @Override
@@ -70,15 +135,24 @@
     if (TextUtils.isEmpty(number)) {
       return;
     }
-    NumberInCallHistoryTask.Listener listener =
-        new NumberInCallHistoryTask.Listener() {
-          @Override
-          public void onComplete(@CallHistoryStatus int callHistoryStatus) {
-            call.setCallHistoryStatus(callHistoryStatus);
-          }
-        };
-    new NumberInCallHistoryTask(context, listener, number, GeoUtil.getCurrentCountryIso(context))
-        .submitTask();
+
+    String[] deniedPhonePermissions =
+        PermissionsUtil.getPermissionsCurrentlyDenied(
+            context, PermissionsUtil.allPhoneGroupPermissionsUsedInDialer);
+    if (deniedPhonePermissions.length > 0) {
+      LogUtil.i(
+          "NumberInCallHistoryWorker.submitTask",
+          "Need phone permissions: " + Arrays.toString(deniedPhonePermissions));
+      return;
+    }
+
+    NumberInCallHistoryWorker historyTask =
+        new NumberInCallHistoryWorker(context, number, GeoUtil.getCurrentCountryIso(context));
+    dialerExecutorFactory
+        .createNonUiTaskBuilder(historyTask)
+        .onSuccess((result) -> call.setCallHistoryStatus(result))
+        .build()
+        .executeParallel(null);
   }
 
   @Override
@@ -197,7 +271,6 @@
   private void showNonSpamCallNotification(DialerCall call) {
     Notification.Builder notificationBuilder =
         createAfterCallNotificationBuilder(call)
-            .setLargeIcon(Icon.createWithResource(context, R.drawable.unknown_notification_icon))
             .setContentText(
                 context.getString(R.string.spam_notification_non_spam_call_collapsed_text))
             .setStyle(
diff --git a/java/com/android/incallui/video/impl/CameraPermissionDialogFragment.java b/java/com/android/incallui/video/impl/CameraPermissionDialogFragment.java
deleted file mode 100644
index 9e5ab3c..0000000
--- a/java/com/android/incallui/video/impl/CameraPermissionDialogFragment.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.incallui.video.impl;
-
-import android.app.AlertDialog;
-import android.app.Dialog;
-import android.content.DialogInterface;
-import android.os.Bundle;
-import android.support.annotation.NonNull;
-import android.support.v4.app.DialogFragment;
-import com.android.dialer.common.FragmentUtils;
-
-/** Dialog fragment to ask for camera permission from user. */
-public class CameraPermissionDialogFragment extends DialogFragment {
-
-  static CameraPermissionDialogFragment newInstance() {
-    CameraPermissionDialogFragment fragment = new CameraPermissionDialogFragment();
-    return fragment;
-  }
-
-  @NonNull
-  @Override
-  public Dialog onCreateDialog(Bundle bundle) {
-    return new AlertDialog.Builder(getContext())
-        .setTitle(R.string.camera_permission_dialog_title)
-        .setMessage(R.string.camera_permission_dialog_message)
-        .setPositiveButton(
-            R.string.camera_permission_dialog_positive_button,
-            new DialogInterface.OnClickListener() {
-              @Override
-              public void onClick(DialogInterface dialog, int which) {
-                CameraPermissionDialogCallback fragment =
-                    FragmentUtils.getParentUnsafe(
-                        CameraPermissionDialogFragment.this, CameraPermissionDialogCallback.class);
-                fragment.onCameraPermissionGranted();
-              }
-            })
-        .setNegativeButton(
-            R.string.camera_permission_dialog_negative_button,
-            new DialogInterface.OnClickListener() {
-              @Override
-              public void onClick(DialogInterface dialog, int which) {
-                dialog.dismiss();
-              }
-            })
-        .create();
-  }
-
-  /** Callback for being granted camera permission. */
-  public interface CameraPermissionDialogCallback {
-    void onCameraPermissionGranted();
-  }
-}
diff --git a/java/com/android/incallui/video/impl/VideoCallFragment.java b/java/com/android/incallui/video/impl/VideoCallFragment.java
index 203710e..b0beb77 100644
--- a/java/com/android/incallui/video/impl/VideoCallFragment.java
+++ b/java/com/android/incallui/video/impl/VideoCallFragment.java
@@ -21,7 +21,6 @@
 import android.content.pm.PackageManager;
 import android.content.res.Resources;
 import android.graphics.Bitmap;
-import android.graphics.Matrix;
 import android.graphics.Outline;
 import android.graphics.Point;
 import android.graphics.drawable.Animatable;
@@ -284,7 +283,7 @@
               int oldRight,
               int oldBottom) {
             LogUtil.i("VideoCallFragment.onLayoutChange", "previewTextureView layout changed");
-            fixPreviewRotation();
+            updatePreviewVideoScaling();
             updatePreviewOffView();
           }
         });
@@ -689,11 +688,13 @@
   @Override
   public void onLocalVideoDimensionsChanged() {
     LogUtil.i("VideoCallFragment.onLocalVideoDimensionsChanged", null);
+    updatePreviewVideoScaling();
   }
 
   @Override
   public void onLocalVideoOrientationChanged() {
     LogUtil.i("VideoCallFragment.onLocalVideoOrientationChanged", null);
+    updatePreviewVideoScaling();
   }
 
   /** Called when the remote video's dimensions change. */
@@ -961,15 +962,31 @@
     // Do nothing
   }
 
-  private void fixPreviewRotation() {
-    int rotationDegrees = getRotationDegrees();
-    if (rotationDegrees == 90 || rotationDegrees == 270) {
-      int viewWidth = previewTextureView.getWidth();
-      int viewHeight = previewTextureView.getHeight();
-      Matrix transform = new Matrix();
-      // Multiplying by -1 prevents the image from being upside down in landscape mode.
-      transform.postRotate(rotationDegrees * -1.0f, viewWidth / 2.0f, viewHeight / 2.0f);
-      previewTextureView.setTransform(transform);
+  private void updatePreviewVideoScaling() {
+    if (previewTextureView.getWidth() == 0 || previewTextureView.getHeight() == 0) {
+      LogUtil.i("VideoCallFragment.updatePreviewVideoScaling", "view layout hasn't finished yet");
+      return;
+    }
+    VideoSurfaceTexture localVideoSurfaceTexture =
+        videoCallScreenDelegate.getLocalVideoSurfaceTexture();
+    Point cameraDimensions = localVideoSurfaceTexture.getSurfaceDimensions();
+    if (cameraDimensions == null) {
+      LogUtil.i(
+          "VideoCallFragment.updatePreviewVideoScaling", "camera dimensions haven't been set");
+      return;
+    }
+    if (isLandscape()) {
+      VideoSurfaceBindings.scaleVideoAndFillView(
+          previewTextureView,
+          cameraDimensions.x,
+          cameraDimensions.y,
+          videoCallScreenDelegate.getDeviceOrientation());
+    } else {
+      VideoSurfaceBindings.scaleVideoAndFillView(
+          previewTextureView,
+          cameraDimensions.y,
+          cameraDimensions.x,
+          videoCallScreenDelegate.getDeviceOrientation());
     }
   }
 
@@ -1006,22 +1023,6 @@
     return rotation == Surface.ROTATION_90 || rotation == Surface.ROTATION_270;
   }
 
-  private int getRotationDegrees() {
-    int rotation = getActivity().getWindowManager().getDefaultDisplay().getRotation();
-    switch (rotation) {
-      case Surface.ROTATION_0:
-        return 0;
-      case Surface.ROTATION_90:
-        return 90;
-      case Surface.ROTATION_180:
-        return 180;
-      case Surface.ROTATION_270:
-        return 270;
-      default:
-        throw Assert.createAssertionFailException("unsupported rotation: " + rotation);
-    }
-  }
-
   private void enterGreenScreenMode() {
     LogUtil.i("VideoCallFragment.enterGreenScreenMode", null);
     RelativeLayout.LayoutParams params =
@@ -1148,12 +1149,12 @@
       return;
     }
 
-    // TODO: When the view is first displayed after a rotation the bitmap is empty
+    // TODO(mdooley): When the view is first displayed after a rotation the bitmap is empty
     // and thus this blur has no effect.
     // This call can take 100 milliseconds.
     blur(getContext(), bitmap, blurRadius);
 
-    // TODO: Figure out why only have to apply the transform in landscape mode
+    // TODO(mdooley): Figure out why only have to apply the transform in landscape mode
     if (width > height) {
       bitmap =
           Bitmap.createBitmap(
diff --git a/java/com/android/incallui/videosurface/impl/VideoSurfaceTextureImpl.java b/java/com/android/incallui/videosurface/impl/VideoSurfaceTextureImpl.java
index 1af7dff..8cac402 100644
--- a/java/com/android/incallui/videosurface/impl/VideoSurfaceTextureImpl.java
+++ b/java/com/android/incallui/videosurface/impl/VideoSurfaceTextureImpl.java
@@ -67,6 +67,9 @@
         "VideoSurfaceTextureImpl.setSurfaceDimensions",
         "surfaceDimensions: " + surfaceDimensions + " " + toString());
     this.surfaceDimensions = surfaceDimensions;
+    if (surfaceDimensions != null && savedSurfaceTexture != null) {
+      savedSurfaceTexture.setDefaultBufferSize(surfaceDimensions.x, surfaceDimensions.y);
+    }
   }
 
   @Override
diff --git a/java/com/android/incallui/videotech/VideoTech.java b/java/com/android/incallui/videotech/VideoTech.java
index 34c3e2c..79a8c60 100644
--- a/java/com/android/incallui/videotech/VideoTech.java
+++ b/java/com/android/incallui/videotech/VideoTech.java
@@ -18,6 +18,7 @@
 
 import android.content.Context;
 import android.support.annotation.Nullable;
+import com.android.dialer.logging.DialerImpression;
 import com.android.incallui.video.protocol.VideoCallScreen;
 import com.android.incallui.video.protocol.VideoCallScreenDelegate;
 import com.android.incallui.videotech.utils.SessionModificationState;
@@ -69,6 +70,12 @@
 
   void setDeviceOrientation(int rotation);
 
+  /**
+   * Called on {@code VideoTechManager.savedTech} when it's first selected and it will always be
+   * used.
+   */
+  void becomePrimary();
+
   /** Listener for video call events. */
   interface VideoTechListener {
 
@@ -83,5 +90,7 @@
     void onVideoUpgradeRequestReceived();
 
     void onUpgradedToVideo(boolean switchToSpeaker);
+
+    void onImpressionLoggingNeeded(DialerImpression.Type impressionType);
   }
 }
diff --git a/java/com/android/incallui/videotech/empty/EmptyVideoTech.java b/java/com/android/incallui/videotech/empty/EmptyVideoTech.java
index 85eb64e..34dd1bf 100644
--- a/java/com/android/incallui/videotech/empty/EmptyVideoTech.java
+++ b/java/com/android/incallui/videotech/empty/EmptyVideoTech.java
@@ -98,4 +98,7 @@
 
   @Override
   public void setDeviceOrientation(int rotation) {}
+
+  @Override
+  public void becomePrimary() {}
 }
diff --git a/java/com/android/incallui/videotech/ims/ImsVideoTech.java b/java/com/android/incallui/videotech/ims/ImsVideoTech.java
index 8fa983a..fec05dc 100644
--- a/java/com/android/incallui/videotech/ims/ImsVideoTech.java
+++ b/java/com/android/incallui/videotech/ims/ImsVideoTech.java
@@ -42,6 +42,7 @@
       SessionModificationState.NO_REQUEST;
   private int previousVideoState = VideoProfile.STATE_AUDIO_ONLY;
   private boolean paused = false;
+  private String savedCameraId;
 
   // Hold onto a flag of whether or not stopTransmission was called but resumeTransmission has not
   // been. This is needed because there is time between calling stopTransmission and
@@ -236,9 +237,25 @@
 
   @Override
   public void pause() {
-    if (canPause() && !paused) {
+    if (call.getState() != Call.STATE_ACTIVE) {
+      LogUtil.i("ImsVideoTech.pause", "not pausing because call is not active");
+      return;
+    }
+
+    if (!isTransmittingOrReceiving()) {
+      LogUtil.i("ImsVideoTech.pause", "not pausing because this is not a video call");
+      return;
+    }
+
+    if (paused) {
+      LogUtil.i("ImsVideoTech.pause", "already paused");
+      return;
+    }
+
+    paused = true;
+
+    if (canPause()) {
       LogUtil.i("ImsVideoTech.pause", "sending pause request");
-      paused = true;
       int pausedVideoState = call.getDetails().getVideoState() | VideoProfile.STATE_PAUSED;
       if (transmissionStopped && VideoProfile.isTransmissionEnabled(pausedVideoState)) {
         LogUtil.i("ImsVideoTech.pause", "overriding TX to false due to user request");
@@ -246,19 +263,33 @@
       }
       call.getVideoCall().sendSessionModifyRequest(new VideoProfile(pausedVideoState));
     } else {
-      LogUtil.i(
-          "ImsVideoTech.pause",
-          "not sending request: canPause: %b, paused: %b",
-          canPause(),
-          paused);
+      // This video call does not support pause so we fall back to disabling the camera
+      LogUtil.i("ImsVideoTech.pause", "disabling camera");
+      call.getVideoCall().setCamera(null);
     }
   }
 
   @Override
   public void unpause() {
-    if (canPause() && paused) {
+    if (call.getState() != Call.STATE_ACTIVE) {
+      LogUtil.i("ImsVideoTech.unpause", "not unpausing because call is not active");
+      return;
+    }
+
+    if (!isTransmittingOrReceiving()) {
+      LogUtil.i("ImsVideoTech.unpause", "not unpausing because this is not a video call");
+      return;
+    }
+
+    if (!paused) {
+      LogUtil.i("ImsVideoTech.unpause", "already unpaused");
+      return;
+    }
+
+    paused = false;
+
+    if (canPause()) {
       LogUtil.i("ImsVideoTech.unpause", "sending unpause request");
-      paused = false;
       int unpausedVideoState = getUnpausedVideoState(call.getDetails().getVideoState());
       if (transmissionStopped && VideoProfile.isTransmissionEnabled(unpausedVideoState)) {
         LogUtil.i("ImsVideoTech.unpause", "overriding TX to false due to user request");
@@ -266,16 +297,15 @@
       }
       call.getVideoCall().sendSessionModifyRequest(new VideoProfile(unpausedVideoState));
     } else {
-      LogUtil.i(
-          "ImsVideoTech.unpause",
-          "not sending request: canPause: %b, paused: %b",
-          canPause(),
-          paused);
+      // This video call does not support pause so we fall back to re-enabling the camera
+      LogUtil.i("ImsVideoTech.pause", "re-enabling camera");
+      setCamera(savedCameraId);
     }
   }
 
   @Override
   public void setCamera(@Nullable String cameraId) {
+    savedCameraId = cameraId;
     call.getVideoCall().setCamera(cameraId);
     call.getVideoCall().requestCameraCapabilities();
   }
@@ -285,10 +315,14 @@
     call.getVideoCall().setDeviceOrientation(rotation);
   }
 
+  @Override
+  public void becomePrimary() {
+    listener.onImpressionLoggingNeeded(
+        DialerImpression.Type.UPGRADE_TO_VIDEO_CALL_BUTTON_SHOWN_FOR_IMS);
+  }
+
   private boolean canPause() {
-    return call.getDetails().can(Details.CAPABILITY_CAN_PAUSE_VIDEO)
-        && call.getState() == Call.STATE_ACTIVE
-        && isTransmittingOrReceiving();
+    return call.getDetails().can(Details.CAPABILITY_CAN_PAUSE_VIDEO);
   }
 
   static int getUnpausedVideoState(int videoState) {
diff --git a/java/com/android/incallui/videotech/lightbringer/LightbringerTech.java b/java/com/android/incallui/videotech/lightbringer/LightbringerTech.java
index 961de9e..26d6347 100644
--- a/java/com/android/incallui/videotech/lightbringer/LightbringerTech.java
+++ b/java/com/android/incallui/videotech/lightbringer/LightbringerTech.java
@@ -26,6 +26,7 @@
 import com.android.dialer.configprovider.ConfigProviderBindings;
 import com.android.dialer.lightbringer.Lightbringer;
 import com.android.dialer.lightbringer.LightbringerListener;
+import com.android.dialer.logging.DialerImpression;
 import com.android.incallui.video.protocol.VideoCallScreen;
 import com.android.incallui.video.protocol.VideoCallScreenDelegate;
 import com.android.incallui.videotech.VideoTech;
@@ -102,6 +103,7 @@
 
   @Override
   public void upgradeToVideo() {
+    listener.onImpressionLoggingNeeded(DialerImpression.Type.LIGHTBRINGER_UPGRADE_REQUESTED);
     lightbringer.requestUpgrade(call);
   }
 
@@ -147,6 +149,12 @@
   }
 
   @Override
+  public void becomePrimary() {
+    listener.onImpressionLoggingNeeded(
+        DialerImpression.Type.UPGRADE_TO_VIDEO_CALL_BUTTON_SHOWN_FOR_LIGHTBRINGER);
+  }
+
+  @Override
   public void setDeviceOrientation(int rotation) {
     throw Assert.createUnsupportedOperationFailException();
   }
diff --git a/java/com/android/voicemail/impl/ActivationTask.java b/java/com/android/voicemail/impl/ActivationTask.java
index 6e27b50..320ea2a 100644
--- a/java/com/android/voicemail/impl/ActivationTask.java
+++ b/java/com/android/voicemail/impl/ActivationTask.java
@@ -36,7 +36,6 @@
 import com.android.voicemail.impl.settings.VisualVoicemailSettingsUtil;
 import com.android.voicemail.impl.sms.StatusMessage;
 import com.android.voicemail.impl.sms.StatusSmsFetcher;
-import com.android.voicemail.impl.sync.OmtpVvmSyncService;
 import com.android.voicemail.impl.sync.SyncTask;
 import com.android.voicemail.impl.sync.VvmAccountManager;
 import com.android.voicemail.impl.utils.LoggerUtils;
@@ -258,7 +257,7 @@
         VoicemailStatus.edit(context, phoneAccountHandle),
         OmtpEvents.CONFIG_REQUEST_STATUS_SUCCESS);
     clearLegacyVoicemailNotification(context, phoneAccountHandle);
-    SyncTask.start(context, phoneAccountHandle, OmtpVvmSyncService.SYNC_FULL_SYNC);
+    SyncTask.start(context, phoneAccountHandle);
   }
 
   /** Sends a broadcast to the dialer UI to clear legacy voicemail notifications if any. */
diff --git a/java/com/android/voicemail/impl/AndroidManifest.xml b/java/com/android/voicemail/impl/AndroidManifest.xml
index 49d93f5..1abc96d 100644
--- a/java/com/android/voicemail/impl/AndroidManifest.xml
+++ b/java/com/android/voicemail/impl/AndroidManifest.xml
@@ -18,7 +18,6 @@
   package="com.android.voicemail.impl">
 
   <application
-    android:allowBackup="false"
     android:supportsRtl="true"
     android:usesCleartextTraffic="true"
     android:defaultToDeviceProtectedStorage="true"
@@ -117,6 +116,13 @@
       android:windowSoftInputMode="stateVisible|adjustResize">
     </activity>
 
+    <receiver android:name="com.android.voicemail.impl.PackageReplacedReceiver"
+        android:exported="false">
+      <intent-filter>
+        <action android:name="android.intent.action.MY_PACKAGE_REPLACED" />
+      </intent-filter>
+    </receiver>
+
     <receiver android:name="com.android.voicemail.impl.CarrierVvmPackageInstalledReceiver"
         android:permission="android.permission.BIND_VISUAL_VOICEMAIL_SERVICE"
         android:exported="true">
diff --git a/java/com/android/voicemail/impl/PackageReplacedReceiver.java b/java/com/android/voicemail/impl/PackageReplacedReceiver.java
new file mode 100644
index 0000000..6a7ca4a
--- /dev/null
+++ b/java/com/android/voicemail/impl/PackageReplacedReceiver.java
@@ -0,0 +1,43 @@
+/*
+ * 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
+ */
+
+package com.android.voicemail.impl;
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.telecom.PhoneAccountHandle;
+import android.telecom.TelecomManager;
+import com.android.voicemail.VoicemailComponent;
+
+/** Receives MY_PACKAGE_REPLACED to trigger VVM activation. */
+public class PackageReplacedReceiver extends BroadcastReceiver {
+
+  @Override
+  public void onReceive(Context context, Intent intent) {
+    VvmLog.i("PackageReplacedReceiver.onReceive", "package replaced, starting activation");
+
+    if (!VoicemailComponent.get(context).getVoicemailClient().isVoicemailModuleEnabled()) {
+      VvmLog.e("PackageReplacedReceiver.onReceive", "module disabled");
+      return;
+    }
+
+    for (PhoneAccountHandle phoneAccountHandle :
+        context.getSystemService(TelecomManager.class).getCallCapablePhoneAccounts()) {
+      ActivationTask.start(context, phoneAccountHandle, null);
+    }
+  }
+}
diff --git a/java/com/android/voicemail/impl/VoicemailBootReceiver.java b/java/com/android/voicemail/impl/VoicemailBootReceiver.java
deleted file mode 100644
index 0a3e61a..0000000
--- a/java/com/android/voicemail/impl/VoicemailBootReceiver.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/**
- * Copyright (C) 2017 The Android Open Source Project
- *
- * <p>Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of the License at
- *
- * <p>http://www.apache.org/licenses/LICENSE-2.0
- *
- * <p>Unless required by applicable law or agreed to in writing, software distributed under the
- * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
- * express or implied. See the License for the specific language governing permissions and
- * limitations under the License
- */
-package com.android.voicemail.impl;
-
-import android.content.BroadcastReceiver;
-import android.content.Context;
-import android.content.Intent;
-import com.android.voicemail.VoicemailComponent;
-
-/** Receives {@link Intent#ACTION_BOOT_COMPLETED} for the voicemail module. */
-public class VoicemailBootReceiver extends BroadcastReceiver {
-
-  @Override
-  public void onReceive(Context context, Intent intent) {
-    if (!VoicemailComponent.get(context).getVoicemailClient().isVoicemailModuleEnabled()) {
-      return;
-    }
-    StatusCheckJobService.schedule(context);
-  }
-}
diff --git a/java/com/android/voicemail/impl/VoicemailStatus.java b/java/com/android/voicemail/impl/VoicemailStatus.java
index ec1ab4e..5553cf5 100644
--- a/java/com/android/voicemail/impl/VoicemailStatus.java
+++ b/java/com/android/voicemail/impl/VoicemailStatus.java
@@ -24,6 +24,7 @@
 import android.provider.VoicemailContract.Status;
 import android.support.annotation.Nullable;
 import android.telecom.PhoneAccountHandle;
+import com.android.dialer.strictmode.DialerStrictMode;
 
 public class VoicemailStatus {
 
@@ -99,7 +100,7 @@
       ContentResolver contentResolver = mContext.getContentResolver();
       Uri statusUri = VoicemailContract.Status.buildSourceUri(mContext.getPackageName());
       try {
-        contentResolver.insert(statusUri, mValues);
+        DialerStrictMode.bypass(() -> contentResolver.insert(statusUri, mValues));
       } catch (IllegalArgumentException iae) {
         VvmLog.e(TAG, "apply :: failed to insert content resolver ", iae);
         mValues.clear();
diff --git a/java/com/android/voicemail/impl/VvmPhoneStateListener.java b/java/com/android/voicemail/impl/VvmPhoneStateListener.java
index 48b7204..00c1358 100644
--- a/java/com/android/voicemail/impl/VvmPhoneStateListener.java
+++ b/java/com/android/voicemail/impl/VvmPhoneStateListener.java
@@ -19,7 +19,6 @@
 import android.telecom.PhoneAccountHandle;
 import android.telephony.PhoneStateListener;
 import android.telephony.ServiceState;
-import com.android.voicemail.impl.sync.OmtpVvmSyncService;
 import com.android.voicemail.impl.sync.SyncTask;
 import com.android.voicemail.impl.sync.VoicemailStatusQueryHelper;
 import com.android.voicemail.impl.sync.VvmAccountManager;
@@ -37,7 +36,7 @@
   private int mPreviousState = -1;
 
   public VvmPhoneStateListener(Context context, PhoneAccountHandle accountHandle) {
-    // TODO: b/32637799 too much trouble to call super constructor through reflection,
+    // TODO(twyen): b/32637799 too much trouble to call super constructor through reflection,
     // just use non-phoneAccountHandle version for now.
     super();
     mContext = context;
@@ -82,7 +81,7 @@
         VvmLog.v(TAG, "Signal returned: requesting resync for " + mPhoneAccount);
         // If the source is already registered, run a full sync in case something was missed
         // while signal was down.
-        SyncTask.start(mContext, mPhoneAccount, OmtpVvmSyncService.SYNC_FULL_SYNC);
+        SyncTask.start(mContext, mPhoneAccount);
       } else {
         VvmLog.v(TAG, "Signal returned: reattempting activation for " + mPhoneAccount);
         // Otherwise initiate an activation because this means that an OMTP source was
diff --git a/java/com/android/voicemail/impl/com/google/internal/communications/voicemailtranscription/v1/VoicemailTranscriptionServiceGrpc.java b/java/com/android/voicemail/impl/com/google/internal/communications/voicemailtranscription/v1/VoicemailTranscriptionServiceGrpc.java
deleted file mode 100644
index 448c693..0000000
--- a/java/com/android/voicemail/impl/com/google/internal/communications/voicemailtranscription/v1/VoicemailTranscriptionServiceGrpc.java
+++ /dev/null
@@ -1,254 +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
- */
-
-package com.google.internal.communications.voicemailtranscription.v1;
-
-import static io.grpc.stub.ClientCalls.asyncUnaryCall;
-import static io.grpc.stub.ClientCalls.asyncServerStreamingCall;
-import static io.grpc.stub.ClientCalls.asyncClientStreamingCall;
-import static io.grpc.stub.ClientCalls.asyncBidiStreamingCall;
-import static io.grpc.stub.ClientCalls.blockingUnaryCall;
-import static io.grpc.stub.ClientCalls.blockingServerStreamingCall;
-import static io.grpc.stub.ClientCalls.futureUnaryCall;
-import static io.grpc.MethodDescriptor.generateFullMethodName;
-import static io.grpc.stub.ServerCalls.asyncUnaryCall;
-import static io.grpc.stub.ServerCalls.asyncServerStreamingCall;
-import static io.grpc.stub.ServerCalls.asyncClientStreamingCall;
-import static io.grpc.stub.ServerCalls.asyncBidiStreamingCall;
-import static io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall;
-import static io.grpc.stub.ServerCalls.asyncUnimplementedStreamingCall;
-
-/**
- * <pre>
- * RPC service for transcribing voicemails.
- * </pre>
- */
-@javax.annotation.Generated(
-    value = "by gRPC proto compiler (version 1.0.3)",
-    comments = "Source: voicemail_transcription.proto")
-public class VoicemailTranscriptionServiceGrpc {
-
-  private VoicemailTranscriptionServiceGrpc() {}
-
-  public static final String SERVICE_NAME = "google.internal.communications.voicemailtranscription.v1.VoicemailTranscriptionService";
-
-  // Static method descriptors that strictly reflect the proto.
-  @io.grpc.ExperimentalApi("https://github.com/grpc/grpc-java/issues/1901")
-  public static final io.grpc.MethodDescriptor<com.google.internal.communications.voicemailtranscription.v1.TranscribeVoicemailRequest,
-      com.google.internal.communications.voicemailtranscription.v1.TranscribeVoicemailResponse> METHOD_TRANSCRIBE_VOICEMAIL =
-      io.grpc.MethodDescriptor.create(
-          io.grpc.MethodDescriptor.MethodType.UNARY,
-          generateFullMethodName(
-              "google.internal.communications.voicemailtranscription.v1.VoicemailTranscriptionService", "TranscribeVoicemail"),
-          io.grpc.protobuf.lite.ProtoLiteUtils.marshaller(com.google.internal.communications.voicemailtranscription.v1.TranscribeVoicemailRequest.getDefaultInstance()),
-          io.grpc.protobuf.lite.ProtoLiteUtils.marshaller(com.google.internal.communications.voicemailtranscription.v1.TranscribeVoicemailResponse.getDefaultInstance()));
-
-  /**
-   * Creates a new async stub that supports all call types for the service
-   */
-  public static VoicemailTranscriptionServiceStub newStub(io.grpc.Channel channel) {
-    return new VoicemailTranscriptionServiceStub(channel);
-  }
-
-  /**
-   * Creates a new blocking-style stub that supports unary and streaming output calls on the service
-   */
-  public static VoicemailTranscriptionServiceBlockingStub newBlockingStub(
-      io.grpc.Channel channel) {
-    return new VoicemailTranscriptionServiceBlockingStub(channel);
-  }
-
-  /**
-   * Creates a new ListenableFuture-style stub that supports unary and streaming output calls on the service
-   */
-  public static VoicemailTranscriptionServiceFutureStub newFutureStub(
-      io.grpc.Channel channel) {
-    return new VoicemailTranscriptionServiceFutureStub(channel);
-  }
-
-  /**
-   * <pre>
-   * RPC service for transcribing voicemails.
-   * </pre>
-   */
-  public static abstract class VoicemailTranscriptionServiceImplBase implements io.grpc.BindableService {
-
-    /**
-     * <pre>
-     * Returns a transcript of the given voicemail.
-     * </pre>
-     */
-    public void transcribeVoicemail(com.google.internal.communications.voicemailtranscription.v1.TranscribeVoicemailRequest request,
-        io.grpc.stub.StreamObserver<com.google.internal.communications.voicemailtranscription.v1.TranscribeVoicemailResponse> responseObserver) {
-      asyncUnimplementedUnaryCall(METHOD_TRANSCRIBE_VOICEMAIL, responseObserver);
-    }
-
-    @java.lang.Override public io.grpc.ServerServiceDefinition bindService() {
-      return io.grpc.ServerServiceDefinition.builder(getServiceDescriptor())
-          .addMethod(
-            METHOD_TRANSCRIBE_VOICEMAIL,
-            asyncUnaryCall(
-              new MethodHandlers<
-                com.google.internal.communications.voicemailtranscription.v1.TranscribeVoicemailRequest,
-                com.google.internal.communications.voicemailtranscription.v1.TranscribeVoicemailResponse>(
-                  this, METHODID_TRANSCRIBE_VOICEMAIL)))
-          .build();
-    }
-  }
-
-  /**
-   * <pre>
-   * RPC service for transcribing voicemails.
-   * </pre>
-   */
-  public static final class VoicemailTranscriptionServiceStub extends io.grpc.stub.AbstractStub<VoicemailTranscriptionServiceStub> {
-    private VoicemailTranscriptionServiceStub(io.grpc.Channel channel) {
-      super(channel);
-    }
-
-    private VoicemailTranscriptionServiceStub(io.grpc.Channel channel,
-        io.grpc.CallOptions callOptions) {
-      super(channel, callOptions);
-    }
-
-    @java.lang.Override
-    protected VoicemailTranscriptionServiceStub build(io.grpc.Channel channel,
-        io.grpc.CallOptions callOptions) {
-      return new VoicemailTranscriptionServiceStub(channel, callOptions);
-    }
-
-    /**
-     * <pre>
-     * Returns a transcript of the given voicemail.
-     * </pre>
-     */
-    public void transcribeVoicemail(com.google.internal.communications.voicemailtranscription.v1.TranscribeVoicemailRequest request,
-        io.grpc.stub.StreamObserver<com.google.internal.communications.voicemailtranscription.v1.TranscribeVoicemailResponse> responseObserver) {
-      asyncUnaryCall(
-          getChannel().newCall(METHOD_TRANSCRIBE_VOICEMAIL, getCallOptions()), request, responseObserver);
-    }
-  }
-
-  /**
-   * <pre>
-   * RPC service for transcribing voicemails.
-   * </pre>
-   */
-  public static final class VoicemailTranscriptionServiceBlockingStub extends io.grpc.stub.AbstractStub<VoicemailTranscriptionServiceBlockingStub> {
-    private VoicemailTranscriptionServiceBlockingStub(io.grpc.Channel channel) {
-      super(channel);
-    }
-
-    private VoicemailTranscriptionServiceBlockingStub(io.grpc.Channel channel,
-        io.grpc.CallOptions callOptions) {
-      super(channel, callOptions);
-    }
-
-    @java.lang.Override
-    protected VoicemailTranscriptionServiceBlockingStub build(io.grpc.Channel channel,
-        io.grpc.CallOptions callOptions) {
-      return new VoicemailTranscriptionServiceBlockingStub(channel, callOptions);
-    }
-
-    /**
-     * <pre>
-     * Returns a transcript of the given voicemail.
-     * </pre>
-     */
-    public com.google.internal.communications.voicemailtranscription.v1.TranscribeVoicemailResponse transcribeVoicemail(com.google.internal.communications.voicemailtranscription.v1.TranscribeVoicemailRequest request) {
-      return blockingUnaryCall(
-          getChannel(), METHOD_TRANSCRIBE_VOICEMAIL, getCallOptions(), request);
-    }
-  }
-
-  /**
-   * <pre>
-   * RPC service for transcribing voicemails.
-   * </pre>
-   */
-  public static final class VoicemailTranscriptionServiceFutureStub extends io.grpc.stub.AbstractStub<VoicemailTranscriptionServiceFutureStub> {
-    private VoicemailTranscriptionServiceFutureStub(io.grpc.Channel channel) {
-      super(channel);
-    }
-
-    private VoicemailTranscriptionServiceFutureStub(io.grpc.Channel channel,
-        io.grpc.CallOptions callOptions) {
-      super(channel, callOptions);
-    }
-
-    @java.lang.Override
-    protected VoicemailTranscriptionServiceFutureStub build(io.grpc.Channel channel,
-        io.grpc.CallOptions callOptions) {
-      return new VoicemailTranscriptionServiceFutureStub(channel, callOptions);
-    }
-
-    /**
-     * <pre>
-     * Returns a transcript of the given voicemail.
-     * </pre>
-     */
-    public com.google.common.util.concurrent.ListenableFuture<com.google.internal.communications.voicemailtranscription.v1.TranscribeVoicemailResponse> transcribeVoicemail(
-        com.google.internal.communications.voicemailtranscription.v1.TranscribeVoicemailRequest request) {
-      return futureUnaryCall(
-          getChannel().newCall(METHOD_TRANSCRIBE_VOICEMAIL, getCallOptions()), request);
-    }
-  }
-
-  private static final int METHODID_TRANSCRIBE_VOICEMAIL = 0;
-
-  private static class MethodHandlers<Req, Resp> implements
-      io.grpc.stub.ServerCalls.UnaryMethod<Req, Resp>,
-      io.grpc.stub.ServerCalls.ServerStreamingMethod<Req, Resp>,
-      io.grpc.stub.ServerCalls.ClientStreamingMethod<Req, Resp>,
-      io.grpc.stub.ServerCalls.BidiStreamingMethod<Req, Resp> {
-    private final VoicemailTranscriptionServiceImplBase serviceImpl;
-    private final int methodId;
-
-    public MethodHandlers(VoicemailTranscriptionServiceImplBase serviceImpl, int methodId) {
-      this.serviceImpl = serviceImpl;
-      this.methodId = methodId;
-    }
-
-    @java.lang.Override
-    @java.lang.SuppressWarnings("unchecked")
-    public void invoke(Req request, io.grpc.stub.StreamObserver<Resp> responseObserver) {
-      switch (methodId) {
-        case METHODID_TRANSCRIBE_VOICEMAIL:
-          serviceImpl.transcribeVoicemail((com.google.internal.communications.voicemailtranscription.v1.TranscribeVoicemailRequest) request,
-              (io.grpc.stub.StreamObserver<com.google.internal.communications.voicemailtranscription.v1.TranscribeVoicemailResponse>) responseObserver);
-          break;
-        default:
-          throw new AssertionError();
-      }
-    }
-
-    @java.lang.Override
-    @java.lang.SuppressWarnings("unchecked")
-    public io.grpc.stub.StreamObserver<Req> invoke(
-        io.grpc.stub.StreamObserver<Resp> responseObserver) {
-      switch (methodId) {
-        default:
-          throw new AssertionError();
-      }
-    }
-  }
-
-  public static io.grpc.ServiceDescriptor getServiceDescriptor() {
-    return new io.grpc.ServiceDescriptor(SERVICE_NAME,
-        METHOD_TRANSCRIBE_VOICEMAIL);
-  }
-
-}
diff --git a/java/com/android/voicemail/impl/configui/ConfigOverrideFragment.java b/java/com/android/voicemail/impl/configui/ConfigOverrideFragment.java
index 18b2b92..1624ce5 100644
--- a/java/com/android/voicemail/impl/configui/ConfigOverrideFragment.java
+++ b/java/com/android/voicemail/impl/configui/ConfigOverrideFragment.java
@@ -35,6 +35,7 @@
 import android.text.TextUtils;
 import com.android.dialer.common.Assert;
 import com.android.dialer.common.concurrent.ThreadUtil;
+import com.android.dialer.strictmode.DialerStrictMode;
 import com.android.voicemail.VoicemailComponent;
 
 /**
@@ -126,8 +127,10 @@
   }
 
   public static boolean isOverridden(Context context) {
-    return PreferenceManager.getDefaultSharedPreferences(context)
-        .getBoolean(context.getString(R.string.vvm_config_override_enabled_key), false);
+    return DialerStrictMode.bypass(
+        () ->
+            PreferenceManager.getDefaultSharedPreferences(context)
+                .getBoolean(context.getString(R.string.vvm_config_override_enabled_key), false));
   }
 
   public static PersistableBundle getConfig(Context context) {
diff --git a/java/com/android/voicemail/impl/configui/res/values-af/strings.xml b/java/com/android/voicemail/impl/configui/res/values-af/strings.xml
deleted file mode 100644
index 826efd3..0000000
--- a/java/com/android/voicemail/impl/configui/res/values-af/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--  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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-</resources>
diff --git a/java/com/android/voicemail/impl/configui/res/values-am/strings.xml b/java/com/android/voicemail/impl/configui/res/values-am/strings.xml
deleted file mode 100644
index 826efd3..0000000
--- a/java/com/android/voicemail/impl/configui/res/values-am/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--  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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-</resources>
diff --git a/java/com/android/voicemail/impl/configui/res/values-ar/strings.xml b/java/com/android/voicemail/impl/configui/res/values-ar/strings.xml
deleted file mode 100644
index 826efd3..0000000
--- a/java/com/android/voicemail/impl/configui/res/values-ar/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--  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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-</resources>
diff --git a/java/com/android/voicemail/impl/configui/res/values-az/strings.xml b/java/com/android/voicemail/impl/configui/res/values-az/strings.xml
deleted file mode 100644
index 826efd3..0000000
--- a/java/com/android/voicemail/impl/configui/res/values-az/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--  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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-</resources>
diff --git a/java/com/android/voicemail/impl/configui/res/values-b+sr+Latn/strings.xml b/java/com/android/voicemail/impl/configui/res/values-b+sr+Latn/strings.xml
deleted file mode 100644
index 826efd3..0000000
--- a/java/com/android/voicemail/impl/configui/res/values-b+sr+Latn/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--  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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-</resources>
diff --git a/java/com/android/voicemail/impl/configui/res/values-be/strings.xml b/java/com/android/voicemail/impl/configui/res/values-be/strings.xml
deleted file mode 100644
index 826efd3..0000000
--- a/java/com/android/voicemail/impl/configui/res/values-be/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--  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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-</resources>
diff --git a/java/com/android/voicemail/impl/configui/res/values-bg/strings.xml b/java/com/android/voicemail/impl/configui/res/values-bg/strings.xml
deleted file mode 100644
index 826efd3..0000000
--- a/java/com/android/voicemail/impl/configui/res/values-bg/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--  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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-</resources>
diff --git a/java/com/android/voicemail/impl/configui/res/values-bn/strings.xml b/java/com/android/voicemail/impl/configui/res/values-bn/strings.xml
deleted file mode 100644
index 826efd3..0000000
--- a/java/com/android/voicemail/impl/configui/res/values-bn/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--  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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-</resources>
diff --git a/java/com/android/voicemail/impl/configui/res/values-bs/strings.xml b/java/com/android/voicemail/impl/configui/res/values-bs/strings.xml
deleted file mode 100644
index 826efd3..0000000
--- a/java/com/android/voicemail/impl/configui/res/values-bs/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--  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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-</resources>
diff --git a/java/com/android/voicemail/impl/configui/res/values-ca/strings.xml b/java/com/android/voicemail/impl/configui/res/values-ca/strings.xml
deleted file mode 100644
index 826efd3..0000000
--- a/java/com/android/voicemail/impl/configui/res/values-ca/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--  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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-</resources>
diff --git a/java/com/android/voicemail/impl/configui/res/values-cs/strings.xml b/java/com/android/voicemail/impl/configui/res/values-cs/strings.xml
deleted file mode 100644
index 826efd3..0000000
--- a/java/com/android/voicemail/impl/configui/res/values-cs/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--  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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-</resources>
diff --git a/java/com/android/voicemail/impl/configui/res/values-da/strings.xml b/java/com/android/voicemail/impl/configui/res/values-da/strings.xml
deleted file mode 100644
index 826efd3..0000000
--- a/java/com/android/voicemail/impl/configui/res/values-da/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--  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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-</resources>
diff --git a/java/com/android/voicemail/impl/configui/res/values-de/strings.xml b/java/com/android/voicemail/impl/configui/res/values-de/strings.xml
deleted file mode 100644
index 826efd3..0000000
--- a/java/com/android/voicemail/impl/configui/res/values-de/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--  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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-</resources>
diff --git a/java/com/android/voicemail/impl/configui/res/values-el/strings.xml b/java/com/android/voicemail/impl/configui/res/values-el/strings.xml
deleted file mode 100644
index 826efd3..0000000
--- a/java/com/android/voicemail/impl/configui/res/values-el/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--  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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-</resources>
diff --git a/java/com/android/voicemail/impl/configui/res/values-en-rAU/strings.xml b/java/com/android/voicemail/impl/configui/res/values-en-rAU/strings.xml
deleted file mode 100644
index 826efd3..0000000
--- a/java/com/android/voicemail/impl/configui/res/values-en-rAU/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--  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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-</resources>
diff --git a/java/com/android/voicemail/impl/configui/res/values-en-rGB/strings.xml b/java/com/android/voicemail/impl/configui/res/values-en-rGB/strings.xml
deleted file mode 100644
index 826efd3..0000000
--- a/java/com/android/voicemail/impl/configui/res/values-en-rGB/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--  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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-</resources>
diff --git a/java/com/android/voicemail/impl/configui/res/values-en-rIN/strings.xml b/java/com/android/voicemail/impl/configui/res/values-en-rIN/strings.xml
deleted file mode 100644
index 826efd3..0000000
--- a/java/com/android/voicemail/impl/configui/res/values-en-rIN/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--  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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-</resources>
diff --git a/java/com/android/voicemail/impl/configui/res/values-es-rUS/strings.xml b/java/com/android/voicemail/impl/configui/res/values-es-rUS/strings.xml
deleted file mode 100644
index 826efd3..0000000
--- a/java/com/android/voicemail/impl/configui/res/values-es-rUS/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--  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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-</resources>
diff --git a/java/com/android/voicemail/impl/configui/res/values-es/strings.xml b/java/com/android/voicemail/impl/configui/res/values-es/strings.xml
deleted file mode 100644
index 826efd3..0000000
--- a/java/com/android/voicemail/impl/configui/res/values-es/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--  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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-</resources>
diff --git a/java/com/android/voicemail/impl/configui/res/values-et/strings.xml b/java/com/android/voicemail/impl/configui/res/values-et/strings.xml
deleted file mode 100644
index 826efd3..0000000
--- a/java/com/android/voicemail/impl/configui/res/values-et/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--  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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-</resources>
diff --git a/java/com/android/voicemail/impl/configui/res/values-eu/strings.xml b/java/com/android/voicemail/impl/configui/res/values-eu/strings.xml
deleted file mode 100644
index 826efd3..0000000
--- a/java/com/android/voicemail/impl/configui/res/values-eu/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--  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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-</resources>
diff --git a/java/com/android/voicemail/impl/configui/res/values-fa/strings.xml b/java/com/android/voicemail/impl/configui/res/values-fa/strings.xml
deleted file mode 100644
index 826efd3..0000000
--- a/java/com/android/voicemail/impl/configui/res/values-fa/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--  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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-</resources>
diff --git a/java/com/android/voicemail/impl/configui/res/values-fi/strings.xml b/java/com/android/voicemail/impl/configui/res/values-fi/strings.xml
deleted file mode 100644
index 826efd3..0000000
--- a/java/com/android/voicemail/impl/configui/res/values-fi/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--  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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-</resources>
diff --git a/java/com/android/voicemail/impl/configui/res/values-fr-rCA/strings.xml b/java/com/android/voicemail/impl/configui/res/values-fr-rCA/strings.xml
deleted file mode 100644
index 826efd3..0000000
--- a/java/com/android/voicemail/impl/configui/res/values-fr-rCA/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--  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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-</resources>
diff --git a/java/com/android/voicemail/impl/configui/res/values-fr/strings.xml b/java/com/android/voicemail/impl/configui/res/values-fr/strings.xml
deleted file mode 100644
index 826efd3..0000000
--- a/java/com/android/voicemail/impl/configui/res/values-fr/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--  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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-</resources>
diff --git a/java/com/android/voicemail/impl/configui/res/values-gl/strings.xml b/java/com/android/voicemail/impl/configui/res/values-gl/strings.xml
deleted file mode 100644
index 826efd3..0000000
--- a/java/com/android/voicemail/impl/configui/res/values-gl/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--  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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-</resources>
diff --git a/java/com/android/voicemail/impl/configui/res/values-gu/strings.xml b/java/com/android/voicemail/impl/configui/res/values-gu/strings.xml
deleted file mode 100644
index 826efd3..0000000
--- a/java/com/android/voicemail/impl/configui/res/values-gu/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--  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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-</resources>
diff --git a/java/com/android/voicemail/impl/configui/res/values-hi/strings.xml b/java/com/android/voicemail/impl/configui/res/values-hi/strings.xml
deleted file mode 100644
index 826efd3..0000000
--- a/java/com/android/voicemail/impl/configui/res/values-hi/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--  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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-</resources>
diff --git a/java/com/android/voicemail/impl/configui/res/values-hr/strings.xml b/java/com/android/voicemail/impl/configui/res/values-hr/strings.xml
deleted file mode 100644
index 826efd3..0000000
--- a/java/com/android/voicemail/impl/configui/res/values-hr/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--  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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-</resources>
diff --git a/java/com/android/voicemail/impl/configui/res/values-hu/strings.xml b/java/com/android/voicemail/impl/configui/res/values-hu/strings.xml
deleted file mode 100644
index 826efd3..0000000
--- a/java/com/android/voicemail/impl/configui/res/values-hu/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--  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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-</resources>
diff --git a/java/com/android/voicemail/impl/configui/res/values-hy/strings.xml b/java/com/android/voicemail/impl/configui/res/values-hy/strings.xml
deleted file mode 100644
index 826efd3..0000000
--- a/java/com/android/voicemail/impl/configui/res/values-hy/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--  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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-</resources>
diff --git a/java/com/android/voicemail/impl/configui/res/values-in/strings.xml b/java/com/android/voicemail/impl/configui/res/values-in/strings.xml
deleted file mode 100644
index 826efd3..0000000
--- a/java/com/android/voicemail/impl/configui/res/values-in/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--  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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-</resources>
diff --git a/java/com/android/voicemail/impl/configui/res/values-is/strings.xml b/java/com/android/voicemail/impl/configui/res/values-is/strings.xml
deleted file mode 100644
index 826efd3..0000000
--- a/java/com/android/voicemail/impl/configui/res/values-is/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--  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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-</resources>
diff --git a/java/com/android/voicemail/impl/configui/res/values-it/strings.xml b/java/com/android/voicemail/impl/configui/res/values-it/strings.xml
deleted file mode 100644
index 826efd3..0000000
--- a/java/com/android/voicemail/impl/configui/res/values-it/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--  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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-</resources>
diff --git a/java/com/android/voicemail/impl/configui/res/values-iw/strings.xml b/java/com/android/voicemail/impl/configui/res/values-iw/strings.xml
deleted file mode 100644
index 826efd3..0000000
--- a/java/com/android/voicemail/impl/configui/res/values-iw/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--  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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-</resources>
diff --git a/java/com/android/voicemail/impl/configui/res/values-ja/strings.xml b/java/com/android/voicemail/impl/configui/res/values-ja/strings.xml
deleted file mode 100644
index 826efd3..0000000
--- a/java/com/android/voicemail/impl/configui/res/values-ja/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--  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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-</resources>
diff --git a/java/com/android/voicemail/impl/configui/res/values-ka/strings.xml b/java/com/android/voicemail/impl/configui/res/values-ka/strings.xml
deleted file mode 100644
index 826efd3..0000000
--- a/java/com/android/voicemail/impl/configui/res/values-ka/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--  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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-</resources>
diff --git a/java/com/android/voicemail/impl/configui/res/values-kk/strings.xml b/java/com/android/voicemail/impl/configui/res/values-kk/strings.xml
deleted file mode 100644
index 826efd3..0000000
--- a/java/com/android/voicemail/impl/configui/res/values-kk/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--  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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-</resources>
diff --git a/java/com/android/voicemail/impl/configui/res/values-km/strings.xml b/java/com/android/voicemail/impl/configui/res/values-km/strings.xml
deleted file mode 100644
index 826efd3..0000000
--- a/java/com/android/voicemail/impl/configui/res/values-km/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--  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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-</resources>
diff --git a/java/com/android/voicemail/impl/configui/res/values-kn/strings.xml b/java/com/android/voicemail/impl/configui/res/values-kn/strings.xml
deleted file mode 100644
index 826efd3..0000000
--- a/java/com/android/voicemail/impl/configui/res/values-kn/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--  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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-</resources>
diff --git a/java/com/android/voicemail/impl/configui/res/values-ko/strings.xml b/java/com/android/voicemail/impl/configui/res/values-ko/strings.xml
deleted file mode 100644
index 826efd3..0000000
--- a/java/com/android/voicemail/impl/configui/res/values-ko/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--  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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-</resources>
diff --git a/java/com/android/voicemail/impl/configui/res/values-ky/strings.xml b/java/com/android/voicemail/impl/configui/res/values-ky/strings.xml
deleted file mode 100644
index 826efd3..0000000
--- a/java/com/android/voicemail/impl/configui/res/values-ky/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--  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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-</resources>
diff --git a/java/com/android/voicemail/impl/configui/res/values-lo/strings.xml b/java/com/android/voicemail/impl/configui/res/values-lo/strings.xml
deleted file mode 100644
index 826efd3..0000000
--- a/java/com/android/voicemail/impl/configui/res/values-lo/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--  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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-</resources>
diff --git a/java/com/android/voicemail/impl/configui/res/values-lt/strings.xml b/java/com/android/voicemail/impl/configui/res/values-lt/strings.xml
deleted file mode 100644
index 826efd3..0000000
--- a/java/com/android/voicemail/impl/configui/res/values-lt/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--  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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-</resources>
diff --git a/java/com/android/voicemail/impl/configui/res/values-lv/strings.xml b/java/com/android/voicemail/impl/configui/res/values-lv/strings.xml
deleted file mode 100644
index 826efd3..0000000
--- a/java/com/android/voicemail/impl/configui/res/values-lv/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--  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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-</resources>
diff --git a/java/com/android/voicemail/impl/configui/res/values-mk/strings.xml b/java/com/android/voicemail/impl/configui/res/values-mk/strings.xml
deleted file mode 100644
index 826efd3..0000000
--- a/java/com/android/voicemail/impl/configui/res/values-mk/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--  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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-</resources>
diff --git a/java/com/android/voicemail/impl/configui/res/values-ml/strings.xml b/java/com/android/voicemail/impl/configui/res/values-ml/strings.xml
deleted file mode 100644
index 826efd3..0000000
--- a/java/com/android/voicemail/impl/configui/res/values-ml/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--  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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-</resources>
diff --git a/java/com/android/voicemail/impl/configui/res/values-mn/strings.xml b/java/com/android/voicemail/impl/configui/res/values-mn/strings.xml
deleted file mode 100644
index 826efd3..0000000
--- a/java/com/android/voicemail/impl/configui/res/values-mn/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--  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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-</resources>
diff --git a/java/com/android/voicemail/impl/configui/res/values-mr/strings.xml b/java/com/android/voicemail/impl/configui/res/values-mr/strings.xml
deleted file mode 100644
index 826efd3..0000000
--- a/java/com/android/voicemail/impl/configui/res/values-mr/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--  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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-</resources>
diff --git a/java/com/android/voicemail/impl/configui/res/values-ms/strings.xml b/java/com/android/voicemail/impl/configui/res/values-ms/strings.xml
deleted file mode 100644
index 826efd3..0000000
--- a/java/com/android/voicemail/impl/configui/res/values-ms/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--  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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-</resources>
diff --git a/java/com/android/voicemail/impl/configui/res/values-my/strings.xml b/java/com/android/voicemail/impl/configui/res/values-my/strings.xml
deleted file mode 100644
index 826efd3..0000000
--- a/java/com/android/voicemail/impl/configui/res/values-my/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--  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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-</resources>
diff --git a/java/com/android/voicemail/impl/configui/res/values-nb/strings.xml b/java/com/android/voicemail/impl/configui/res/values-nb/strings.xml
deleted file mode 100644
index 826efd3..0000000
--- a/java/com/android/voicemail/impl/configui/res/values-nb/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--  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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-</resources>
diff --git a/java/com/android/voicemail/impl/configui/res/values-ne/strings.xml b/java/com/android/voicemail/impl/configui/res/values-ne/strings.xml
deleted file mode 100644
index 826efd3..0000000
--- a/java/com/android/voicemail/impl/configui/res/values-ne/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--  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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-</resources>
diff --git a/java/com/android/voicemail/impl/configui/res/values-nl/strings.xml b/java/com/android/voicemail/impl/configui/res/values-nl/strings.xml
deleted file mode 100644
index 826efd3..0000000
--- a/java/com/android/voicemail/impl/configui/res/values-nl/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--  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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-</resources>
diff --git a/java/com/android/voicemail/impl/configui/res/values-no/strings.xml b/java/com/android/voicemail/impl/configui/res/values-no/strings.xml
deleted file mode 100644
index 826efd3..0000000
--- a/java/com/android/voicemail/impl/configui/res/values-no/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--  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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-</resources>
diff --git a/java/com/android/voicemail/impl/configui/res/values-pa/strings.xml b/java/com/android/voicemail/impl/configui/res/values-pa/strings.xml
deleted file mode 100644
index 826efd3..0000000
--- a/java/com/android/voicemail/impl/configui/res/values-pa/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--  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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-</resources>
diff --git a/java/com/android/voicemail/impl/configui/res/values-pl/strings.xml b/java/com/android/voicemail/impl/configui/res/values-pl/strings.xml
deleted file mode 100644
index 826efd3..0000000
--- a/java/com/android/voicemail/impl/configui/res/values-pl/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--  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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-</resources>
diff --git a/java/com/android/voicemail/impl/configui/res/values-pt-rBR/strings.xml b/java/com/android/voicemail/impl/configui/res/values-pt-rBR/strings.xml
deleted file mode 100644
index 826efd3..0000000
--- a/java/com/android/voicemail/impl/configui/res/values-pt-rBR/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--  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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-</resources>
diff --git a/java/com/android/voicemail/impl/configui/res/values-pt-rPT/strings.xml b/java/com/android/voicemail/impl/configui/res/values-pt-rPT/strings.xml
deleted file mode 100644
index 826efd3..0000000
--- a/java/com/android/voicemail/impl/configui/res/values-pt-rPT/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--  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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-</resources>
diff --git a/java/com/android/voicemail/impl/configui/res/values-pt/strings.xml b/java/com/android/voicemail/impl/configui/res/values-pt/strings.xml
deleted file mode 100644
index 826efd3..0000000
--- a/java/com/android/voicemail/impl/configui/res/values-pt/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--  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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-</resources>
diff --git a/java/com/android/voicemail/impl/configui/res/values-ro/strings.xml b/java/com/android/voicemail/impl/configui/res/values-ro/strings.xml
deleted file mode 100644
index 826efd3..0000000
--- a/java/com/android/voicemail/impl/configui/res/values-ro/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--  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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-</resources>
diff --git a/java/com/android/voicemail/impl/configui/res/values-ru/strings.xml b/java/com/android/voicemail/impl/configui/res/values-ru/strings.xml
deleted file mode 100644
index 826efd3..0000000
--- a/java/com/android/voicemail/impl/configui/res/values-ru/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--  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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-</resources>
diff --git a/java/com/android/voicemail/impl/configui/res/values-si/strings.xml b/java/com/android/voicemail/impl/configui/res/values-si/strings.xml
deleted file mode 100644
index 826efd3..0000000
--- a/java/com/android/voicemail/impl/configui/res/values-si/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--  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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-</resources>
diff --git a/java/com/android/voicemail/impl/configui/res/values-sk/strings.xml b/java/com/android/voicemail/impl/configui/res/values-sk/strings.xml
deleted file mode 100644
index 826efd3..0000000
--- a/java/com/android/voicemail/impl/configui/res/values-sk/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--  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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-</resources>
diff --git a/java/com/android/voicemail/impl/configui/res/values-sl/strings.xml b/java/com/android/voicemail/impl/configui/res/values-sl/strings.xml
deleted file mode 100644
index 826efd3..0000000
--- a/java/com/android/voicemail/impl/configui/res/values-sl/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--  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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-</resources>
diff --git a/java/com/android/voicemail/impl/configui/res/values-sq/strings.xml b/java/com/android/voicemail/impl/configui/res/values-sq/strings.xml
deleted file mode 100644
index 826efd3..0000000
--- a/java/com/android/voicemail/impl/configui/res/values-sq/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--  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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-</resources>
diff --git a/java/com/android/voicemail/impl/configui/res/values-sr/strings.xml b/java/com/android/voicemail/impl/configui/res/values-sr/strings.xml
deleted file mode 100644
index 826efd3..0000000
--- a/java/com/android/voicemail/impl/configui/res/values-sr/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--  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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-</resources>
diff --git a/java/com/android/voicemail/impl/configui/res/values-sv/strings.xml b/java/com/android/voicemail/impl/configui/res/values-sv/strings.xml
deleted file mode 100644
index 826efd3..0000000
--- a/java/com/android/voicemail/impl/configui/res/values-sv/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--  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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-</resources>
diff --git a/java/com/android/voicemail/impl/configui/res/values-sw/strings.xml b/java/com/android/voicemail/impl/configui/res/values-sw/strings.xml
deleted file mode 100644
index 826efd3..0000000
--- a/java/com/android/voicemail/impl/configui/res/values-sw/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--  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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-</resources>
diff --git a/java/com/android/voicemail/impl/configui/res/values-ta/strings.xml b/java/com/android/voicemail/impl/configui/res/values-ta/strings.xml
deleted file mode 100644
index 826efd3..0000000
--- a/java/com/android/voicemail/impl/configui/res/values-ta/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--  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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-</resources>
diff --git a/java/com/android/voicemail/impl/configui/res/values-te/strings.xml b/java/com/android/voicemail/impl/configui/res/values-te/strings.xml
deleted file mode 100644
index 826efd3..0000000
--- a/java/com/android/voicemail/impl/configui/res/values-te/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--  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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-</resources>
diff --git a/java/com/android/voicemail/impl/configui/res/values-th/strings.xml b/java/com/android/voicemail/impl/configui/res/values-th/strings.xml
deleted file mode 100644
index 826efd3..0000000
--- a/java/com/android/voicemail/impl/configui/res/values-th/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--  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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-</resources>
diff --git a/java/com/android/voicemail/impl/configui/res/values-tl/strings.xml b/java/com/android/voicemail/impl/configui/res/values-tl/strings.xml
deleted file mode 100644
index 826efd3..0000000
--- a/java/com/android/voicemail/impl/configui/res/values-tl/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--  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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-</resources>
diff --git a/java/com/android/voicemail/impl/configui/res/values-tr/strings.xml b/java/com/android/voicemail/impl/configui/res/values-tr/strings.xml
deleted file mode 100644
index 826efd3..0000000
--- a/java/com/android/voicemail/impl/configui/res/values-tr/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--  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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-</resources>
diff --git a/java/com/android/voicemail/impl/configui/res/values-uk/strings.xml b/java/com/android/voicemail/impl/configui/res/values-uk/strings.xml
deleted file mode 100644
index 826efd3..0000000
--- a/java/com/android/voicemail/impl/configui/res/values-uk/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--  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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-</resources>
diff --git a/java/com/android/voicemail/impl/configui/res/values-ur/strings.xml b/java/com/android/voicemail/impl/configui/res/values-ur/strings.xml
deleted file mode 100644
index 826efd3..0000000
--- a/java/com/android/voicemail/impl/configui/res/values-ur/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--  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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-</resources>
diff --git a/java/com/android/voicemail/impl/configui/res/values-uz/strings.xml b/java/com/android/voicemail/impl/configui/res/values-uz/strings.xml
deleted file mode 100644
index 826efd3..0000000
--- a/java/com/android/voicemail/impl/configui/res/values-uz/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--  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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-</resources>
diff --git a/java/com/android/voicemail/impl/configui/res/values-vi/strings.xml b/java/com/android/voicemail/impl/configui/res/values-vi/strings.xml
deleted file mode 100644
index 826efd3..0000000
--- a/java/com/android/voicemail/impl/configui/res/values-vi/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--  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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-</resources>
diff --git a/java/com/android/voicemail/impl/configui/res/values-zh-rCN/strings.xml b/java/com/android/voicemail/impl/configui/res/values-zh-rCN/strings.xml
deleted file mode 100644
index 826efd3..0000000
--- a/java/com/android/voicemail/impl/configui/res/values-zh-rCN/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--  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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-</resources>
diff --git a/java/com/android/voicemail/impl/configui/res/values-zh-rHK/strings.xml b/java/com/android/voicemail/impl/configui/res/values-zh-rHK/strings.xml
deleted file mode 100644
index 826efd3..0000000
--- a/java/com/android/voicemail/impl/configui/res/values-zh-rHK/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--  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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-</resources>
diff --git a/java/com/android/voicemail/impl/configui/res/values-zh-rTW/strings.xml b/java/com/android/voicemail/impl/configui/res/values-zh-rTW/strings.xml
deleted file mode 100644
index 826efd3..0000000
--- a/java/com/android/voicemail/impl/configui/res/values-zh-rTW/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--  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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-</resources>
diff --git a/java/com/android/voicemail/impl/configui/res/values-zu/strings.xml b/java/com/android/voicemail/impl/configui/res/values-zu/strings.xml
deleted file mode 100644
index 826efd3..0000000
--- a/java/com/android/voicemail/impl/configui/res/values-zu/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--  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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-</resources>
diff --git a/java/com/android/voicemail/impl/mail/MailTransport.java b/java/com/android/voicemail/impl/mail/MailTransport.java
index 00339f0..c35e414 100644
--- a/java/com/android/voicemail/impl/mail/MailTransport.java
+++ b/java/com/android/voicemail/impl/mail/MailTransport.java
@@ -195,6 +195,8 @@
     } catch (IOException ioe) {
       LogUtils.d(TAG, ioe.toString());
       throw new MessagingException(MessagingException.IOERROR, ioe.toString());
+    } finally {
+      TrafficStats.clearThreadStatsTag();
     }
   }
 
diff --git a/java/com/android/voicemail/impl/proguard.flags b/java/com/android/voicemail/impl/proguard.flags
new file mode 100644
index 0000000..9379df3
--- /dev/null
+++ b/java/com/android/voicemail/impl/proguard.flags
@@ -0,0 +1,4 @@
+-assumenosideeffects class com.android.voicemail.impl.VvmLog {
+    public static void v(...);
+    public static void d(...);
+}
diff --git a/java/com/android/voicemail/impl/res/xml/vvm_config.xml b/java/com/android/voicemail/impl/res/xml/vvm_config.xml
index 2bac66b..c7ed5ca 100644
--- a/java/com/android/voicemail/impl/res/xml/vvm_config.xml
+++ b/java/com/android/voicemail/impl/res/xml/vvm_config.xml
@@ -21,6 +21,7 @@
       <item value="TEST"/>
     </string-array>
   </pbundle_as_map>
+
   <pbundle_as_map>
     <!-- T-Mobile USA-->
     <string-array name="mccmnc">
diff --git a/java/com/android/voicemail/impl/scheduling/TaskSchedulerJobService.java b/java/com/android/voicemail/impl/scheduling/TaskSchedulerJobService.java
index 107234e..baf5804 100644
--- a/java/com/android/voicemail/impl/scheduling/TaskSchedulerJobService.java
+++ b/java/com/android/voicemail/impl/scheduling/TaskSchedulerJobService.java
@@ -30,6 +30,7 @@
 import android.preference.PreferenceManager;
 import android.support.annotation.MainThread;
 import com.android.dialer.constants.ScheduledJobIds;
+import com.android.dialer.strictmode.DialerStrictMode;
 import com.android.voicemail.impl.Assert;
 import com.android.voicemail.impl.VvmLog;
 import java.util.ArrayList;
@@ -58,7 +59,8 @@
   public boolean onStartJob(JobParameters params) {
     int jobId = params.getTransientExtras().getInt(EXTRA_JOB_ID);
     int expectedJobId =
-        PreferenceManager.getDefaultSharedPreferences(this).getInt(EXPECTED_JOB_ID, 0);
+        DialerStrictMode.bypass(
+            () -> PreferenceManager.getDefaultSharedPreferences(this).getInt(EXPECTED_JOB_ID, 0));
     if (jobId != expectedJobId) {
       VvmLog.e(
           TAG, "Job " + jobId + " is not the last scheduled job " + expectedJobId + ", ignoring");
diff --git a/java/com/android/voicemail/impl/sms/OmtpMessageReceiver.java b/java/com/android/voicemail/impl/sms/OmtpMessageReceiver.java
index 1cf3737..4383527 100644
--- a/java/com/android/voicemail/impl/sms/OmtpMessageReceiver.java
+++ b/java/com/android/voicemail/impl/sms/OmtpMessageReceiver.java
@@ -35,7 +35,6 @@
 import com.android.voicemail.impl.VvmLog;
 import com.android.voicemail.impl.protocol.VisualVoicemailProtocol;
 import com.android.voicemail.impl.settings.VisualVoicemailSettingsUtil;
-import com.android.voicemail.impl.sync.OmtpVvmSyncService;
 import com.android.voicemail.impl.sync.SyncOneTask;
 import com.android.voicemail.impl.sync.SyncTask;
 import com.android.voicemail.impl.sync.VoicemailsQueryHelper;
@@ -152,7 +151,7 @@
         }
         break;
       case OmtpConstants.MAILBOX_UPDATE:
-        SyncTask.start(mContext, phone, OmtpVvmSyncService.SYNC_DOWNLOAD_ONLY);
+        SyncTask.start(mContext, phone);
         break;
       case OmtpConstants.GREETINGS_UPDATE:
         // Not implemented in V1
diff --git a/java/com/android/voicemail/impl/sms/OmtpMessageSender.java b/java/com/android/voicemail/impl/sms/OmtpMessageSender.java
index e9d145c..19661e9 100644
--- a/java/com/android/voicemail/impl/sms/OmtpMessageSender.java
+++ b/java/com/android/voicemail/impl/sms/OmtpMessageSender.java
@@ -22,6 +22,7 @@
 import android.telephony.SmsManager;
 import com.android.voicemail.impl.OmtpConstants;
 import com.android.voicemail.impl.TelephonyMangerCompat;
+import com.android.voicemail.impl.VvmLog;
 
 /**
  * Send client originated OMTP messages to the OMTP server.
@@ -75,6 +76,11 @@
   public void requestVvmStatus(@Nullable PendingIntent sentIntent) {}
 
   protected void sendSms(String text, PendingIntent sentIntent) {
+
+    VvmLog.v(
+        TAG,
+        String.format("Sending sms '%s' to %s:%d", text, mDestinationNumber, mApplicationPort));
+
     TelephonyMangerCompat.sendVisualVoicemailSms(
         mContext, mPhoneAccountHandle, mDestinationNumber, mApplicationPort, text, sentIntent);
   }
diff --git a/java/com/android/voicemail/impl/sync/OmtpVvmSyncReceiver.java b/java/com/android/voicemail/impl/sync/OmtpVvmSyncReceiver.java
index b2ec49e..1b59ecc 100644
--- a/java/com/android/voicemail/impl/sync/OmtpVvmSyncReceiver.java
+++ b/java/com/android/voicemail/impl/sync/OmtpVvmSyncReceiver.java
@@ -52,7 +52,7 @@
           VvmLog.i(TAG, "Unactivated account " + phoneAccount + " found, activating");
           ActivationTask.start(context, phoneAccount, null);
         } else {
-          SyncTask.start(context, phoneAccount, OmtpVvmSyncService.SYNC_FULL_SYNC);
+          SyncTask.start(context, phoneAccount);
         }
       }
     }
diff --git a/java/com/android/voicemail/impl/sync/OmtpVvmSyncService.java b/java/com/android/voicemail/impl/sync/OmtpVvmSyncService.java
index 7933883..5b5d6b0 100644
--- a/java/com/android/voicemail/impl/sync/OmtpVvmSyncService.java
+++ b/java/com/android/voicemail/impl/sync/OmtpVvmSyncService.java
@@ -43,6 +43,7 @@
 import com.android.voicemail.impl.sync.VvmNetworkRequest.RequestFailedException;
 import com.android.voicemail.impl.utils.LoggerUtils;
 import com.android.voicemail.impl.utils.VoicemailDatabaseUtil;
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 
@@ -50,22 +51,13 @@
 @TargetApi(VERSION_CODES.O)
 public class OmtpVvmSyncService {
 
-  private static final String TAG = OmtpVvmSyncService.class.getSimpleName();
+  private static final String TAG = "OmtpVvmSyncService";
 
-  /** Signifies a sync with both uploading to the server and downloading from the server. */
-  public static final String SYNC_FULL_SYNC = "full_sync";
-  /** Only upload to the server. */
-  public static final String SYNC_UPLOAD_ONLY = "upload_only";
-  /** Only download from the server. */
-  public static final String SYNC_DOWNLOAD_ONLY = "download_only";
-  /** Only download single voicemail transcription. */
-  public static final String SYNC_DOWNLOAD_ONE_TRANSCRIPTION = "download_one_transcription";
   /** Threshold for whether we should archive and delete voicemails from the remote VM server. */
   private static final float AUTO_DELETE_ARCHIVE_VM_THRESHOLD = 0.75f;
 
   private final Context mContext;
-
-  private VoicemailsQueryHelper mQueryHelper;
+  private final VoicemailsQueryHelper mQueryHelper;
 
   public OmtpVvmSyncService(Context context) {
     mContext = context;
@@ -74,23 +66,21 @@
 
   public void sync(
       BaseTask task,
-      String action,
       PhoneAccountHandle phoneAccount,
       Voicemail voicemail,
       VoicemailStatus.Editor status) {
     Assert.isTrue(phoneAccount != null);
-    VvmLog.v(TAG, "Sync requested: " + action + " - for account: " + phoneAccount);
-    setupAndSendRequest(task, phoneAccount, voicemail, action, status);
+    VvmLog.v(TAG, "Sync requested for account: " + phoneAccount);
+    setupAndSendRequest(task, phoneAccount, voicemail, status);
   }
 
   private void setupAndSendRequest(
       BaseTask task,
       PhoneAccountHandle phoneAccount,
       Voicemail voicemail,
-      String action,
       VoicemailStatus.Editor status) {
     if (!VisualVoicemailSettingsUtil.isEnabled(mContext, phoneAccount)) {
-      VvmLog.v(TAG, "Sync requested for disabled account");
+      VvmLog.e(TAG, "Sync requested for disabled account");
       return;
     }
     if (!VvmAccountManager.isAccountActivated(mContext, phoneAccount)) {
@@ -102,7 +92,7 @@
     LoggerUtils.logImpressionOnMainThread(mContext, DialerImpression.Type.VVM_SYNC_STARTED);
     // DATA_IMAP_OPERATION_STARTED posting should not be deferred. This event clears all data
     // channel errors, which should happen when the task starts, not when it ends. It is the
-    // "Sync in progress..." status.
+    // "Sync in progress..." status, which is currently displayed to the user as no error.
     config.handleEvent(
         VoicemailStatus.edit(mContext, phoneAccount), OmtpEvents.DATA_IMAP_OPERATION_STARTED);
     try (NetworkWrapper network = VvmNetworkRequest.getNetwork(config, phoneAccount, status)) {
@@ -111,7 +101,7 @@
         task.fail();
         return;
       }
-      doSync(task, network.get(), phoneAccount, voicemail, action, status);
+      doSync(task, network.get(), phoneAccount, voicemail, status);
     } catch (RequestFailedException e) {
       config.handleEvent(status, OmtpEvents.DATA_NO_CONNECTION_CELLULAR_REQUIRED);
       task.fail();
@@ -123,14 +113,13 @@
       Network network,
       PhoneAccountHandle phoneAccount,
       Voicemail voicemail,
-      String action,
       VoicemailStatus.Editor status) {
     try (ImapHelper imapHelper = new ImapHelper(mContext, phoneAccount, network, status)) {
       boolean success;
       if (voicemail == null) {
-        success = syncAll(action, imapHelper, phoneAccount);
+        success = syncAll(imapHelper, phoneAccount);
       } else {
-        success = syncOne(imapHelper, voicemail, phoneAccount);
+        success = downloadOneVoicemail(imapHelper, voicemail, phoneAccount);
       }
       if (success) {
         // TODO: b/30569269 failure should interrupt all subsequent task via exceptions
@@ -219,79 +208,33 @@
     }
   }
 
-  private boolean syncAll(String action, ImapHelper imapHelper, PhoneAccountHandle account) {
-    boolean uploadSuccess = true;
-    boolean downloadSuccess = true;
+  private boolean syncAll(ImapHelper imapHelper, PhoneAccountHandle account) {
 
-    if (SYNC_FULL_SYNC.equals(action) || SYNC_UPLOAD_ONLY.equals(action)) {
-      uploadSuccess = upload(account, imapHelper);
-    }
-    if (SYNC_FULL_SYNC.equals(action) || SYNC_DOWNLOAD_ONLY.equals(action)) {
-      downloadSuccess = download(imapHelper, account);
-    }
-
-    VvmLog.v(
-        TAG,
-        "upload succeeded: ["
-            + String.valueOf(uploadSuccess)
-            + "] download succeeded: ["
-            + String.valueOf(downloadSuccess)
-            + "]");
-
-    return uploadSuccess && downloadSuccess;
-  }
-
-  private boolean syncOne(ImapHelper imapHelper, Voicemail voicemail, PhoneAccountHandle account) {
-    if (shouldPerformPrefetch(account, imapHelper)) {
-      VoicemailFetchedCallback callback =
-          new VoicemailFetchedCallback(mContext, voicemail.getUri(), account);
-      imapHelper.fetchVoicemailPayload(callback, voicemail.getSourceData());
-    }
-
-    return imapHelper.fetchTranscription(
-        new TranscriptionFetchedCallback(mContext, voicemail), voicemail.getSourceData());
-  }
-
-  private boolean upload(PhoneAccountHandle phoneAccountHandle, ImapHelper imapHelper) {
-    List<Voicemail> readVoicemails = mQueryHelper.getReadVoicemails(phoneAccountHandle);
-    List<Voicemail> deletedVoicemails = mQueryHelper.getDeletedVoicemails(phoneAccountHandle);
-
-    boolean success = true;
-
-    if (deletedVoicemails.size() > 0) {
-      if (imapHelper.markMessagesAsDeleted(deletedVoicemails)) {
-        // We want to delete selectively instead of all the voicemails for this provider
-        // in case the state changed since the IMAP query was completed.
-        mQueryHelper.deleteFromDatabase(deletedVoicemails);
-      } else {
-        success = false;
-      }
-    }
-
-    if (readVoicemails.size() > 0) {
-      VvmLog.i(TAG, "Marking voicemails as read");
-      if (imapHelper.markMessagesAsRead(readVoicemails)) {
-        VvmLog.i(TAG, "Marking voicemails as clean");
-        mQueryHelper.markCleanInDatabase(readVoicemails);
-      } else {
-        success = false;
-      }
-    }
-
-    return success;
-  }
-
-  private boolean download(ImapHelper imapHelper, PhoneAccountHandle account) {
     List<Voicemail> serverVoicemails = imapHelper.fetchAllVoicemails();
     List<Voicemail> localVoicemails = mQueryHelper.getAllVoicemails(account);
+    List<Voicemail> deletedVoicemails = mQueryHelper.getDeletedVoicemails(account);
+    boolean succeeded = true;
 
     if (localVoicemails == null || serverVoicemails == null) {
       // Null value means the query failed.
+      VvmLog.e(TAG, "syncAll: query failed");
       return false;
     }
 
+    if (deletedVoicemails.size() > 0) {
+      if (imapHelper.markMessagesAsDeleted(deletedVoicemails)) {
+        // Delete only the voicemails that was deleted on the server, in case more are deleted
+        // since the IMAP query was completed.
+        mQueryHelper.deleteFromDatabase(deletedVoicemails);
+      } else {
+        succeeded = false;
+      }
+    }
+
     Map<String, Voicemail> remoteMap = buildMap(serverVoicemails);
 
+    List<Voicemail> localReadVoicemails = new ArrayList<>();
+
     // Go through all the local voicemails and check if they are on the server.
     // They may be read or deleted on the server but not locally. Perform the
     // appropriate local operation if the status differs from the server. Remove
@@ -310,6 +253,8 @@
       } else {
         if (remoteVoicemail.isRead() && !localVoicemail.isRead()) {
           mQueryHelper.markReadInDatabase(localVoicemail);
+        } else if (localVoicemail.isRead() && !remoteVoicemail.isRead()) {
+          localReadVoicemails.add(localVoicemail);
         }
 
         if (!TextUtils.isEmpty(remoteVoicemail.getTranscription())
@@ -321,6 +266,16 @@
       }
     }
 
+    if (localReadVoicemails.size() > 0) {
+      VvmLog.i(TAG, "Marking voicemails as read");
+      if (imapHelper.markMessagesAsRead(localReadVoicemails)) {
+        VvmLog.i(TAG, "Marking voicemails as clean");
+        mQueryHelper.markCleanInDatabase(localReadVoicemails);
+      } else {
+        return false;
+      }
+    }
+
     // The leftover messages are messages that exist on the server but not locally.
     boolean prefetchEnabled = shouldPerformPrefetch(account, imapHelper);
     for (Voicemail remoteVoicemail : remoteMap.values()) {
@@ -336,7 +291,19 @@
       }
     }
 
-    return true;
+    return succeeded;
+  }
+
+  private boolean downloadOneVoicemail(
+      ImapHelper imapHelper, Voicemail voicemail, PhoneAccountHandle account) {
+    if (shouldPerformPrefetch(account, imapHelper)) {
+      VoicemailFetchedCallback callback =
+          new VoicemailFetchedCallback(mContext, voicemail.getUri(), account);
+      imapHelper.fetchVoicemailPayload(callback, voicemail.getSourceData());
+    }
+
+    return imapHelper.fetchTranscription(
+        new TranscriptionFetchedCallback(mContext, voicemail), voicemail.getSourceData());
   }
 
   private boolean shouldPerformPrefetch(PhoneAccountHandle account, ImapHelper imapHelper) {
diff --git a/java/com/android/voicemail/impl/sync/SyncOneTask.java b/java/com/android/voicemail/impl/sync/SyncOneTask.java
index cd2782a..70c6bd8 100644
--- a/java/com/android/voicemail/impl/sync/SyncOneTask.java
+++ b/java/com/android/voicemail/impl/sync/SyncOneTask.java
@@ -39,17 +39,14 @@
   private static final int RETRY_INTERVAL_MILLIS = 5_000;
 
   private static final String EXTRA_PHONE_ACCOUNT_HANDLE = "extra_phone_account_handle";
-  private static final String EXTRA_SYNC_TYPE = "extra_sync_type";
   private static final String EXTRA_VOICEMAIL = "extra_voicemail";
 
   private PhoneAccountHandle mPhone;
-  private String mSyncType;
   private Voicemail mVoicemail;
 
   public static void start(Context context, PhoneAccountHandle phone, Voicemail voicemail) {
     Intent intent = BaseTask.createIntent(context, SyncOneTask.class, phone);
     intent.putExtra(EXTRA_PHONE_ACCOUNT_HANDLE, phone);
-    intent.putExtra(EXTRA_SYNC_TYPE, OmtpVvmSyncService.SYNC_DOWNLOAD_ONE_TRANSCRIPTION);
     intent.putExtra(EXTRA_VOICEMAIL, voicemail);
     context.sendBroadcast(intent);
   }
@@ -63,14 +60,13 @@
   public void onCreate(Context context, Bundle extras) {
     super.onCreate(context, extras);
     mPhone = extras.getParcelable(EXTRA_PHONE_ACCOUNT_HANDLE);
-    mSyncType = extras.getString(EXTRA_SYNC_TYPE);
     mVoicemail = extras.getParcelable(EXTRA_VOICEMAIL);
   }
 
   @Override
   public void onExecuteInBackgroundThread() {
     OmtpVvmSyncService service = new OmtpVvmSyncService(getContext());
-    service.sync(this, mSyncType, mPhone, mVoicemail, VoicemailStatus.edit(getContext(), mPhone));
+    service.sync(this, mPhone, mVoicemail, VoicemailStatus.edit(getContext(), mPhone));
   }
 
   @Override
@@ -78,7 +74,6 @@
     LoggerUtils.logImpressionOnMainThread(getContext(), DialerImpression.Type.VVM_AUTO_RETRY_SYNC);
     Intent intent = super.createRestartIntent();
     intent.putExtra(EXTRA_PHONE_ACCOUNT_HANDLE, mPhone);
-    intent.putExtra(EXTRA_SYNC_TYPE, mSyncType);
     intent.putExtra(EXTRA_VOICEMAIL, mVoicemail);
     return intent;
   }
diff --git a/java/com/android/voicemail/impl/sync/SyncTask.java b/java/com/android/voicemail/impl/sync/SyncTask.java
index 0b3e090..68ce012 100644
--- a/java/com/android/voicemail/impl/sync/SyncTask.java
+++ b/java/com/android/voicemail/impl/sync/SyncTask.java
@@ -37,17 +37,14 @@
   private static final int MINIMAL_INTERVAL_MILLIS = 60_000;
 
   private static final String EXTRA_PHONE_ACCOUNT_HANDLE = "extra_phone_account_handle";
-  private static final String EXTRA_SYNC_TYPE = "extra_sync_type";
 
   private final RetryPolicy mRetryPolicy;
 
   private PhoneAccountHandle mPhone;
-  private String mSyncType;
 
-  public static void start(Context context, PhoneAccountHandle phone, String syncType) {
+  public static void start(Context context, PhoneAccountHandle phone) {
     Intent intent = BaseTask.createIntent(context, SyncTask.class, phone);
     intent.putExtra(EXTRA_PHONE_ACCOUNT_HANDLE, phone);
-    intent.putExtra(EXTRA_SYNC_TYPE, syncType);
     context.sendBroadcast(intent);
   }
 
@@ -62,13 +59,12 @@
   public void onCreate(Context context, Bundle extras) {
     super.onCreate(context, extras);
     mPhone = extras.getParcelable(EXTRA_PHONE_ACCOUNT_HANDLE);
-    mSyncType = extras.getString(EXTRA_SYNC_TYPE);
   }
 
   @Override
   public void onExecuteInBackgroundThread() {
     OmtpVvmSyncService service = new OmtpVvmSyncService(getContext());
-    service.sync(this, mSyncType, mPhone, null, mRetryPolicy.getVoicemailStatusEditor());
+    service.sync(this, mPhone, null, mRetryPolicy.getVoicemailStatusEditor());
   }
 
   @Override
@@ -76,7 +72,6 @@
     LoggerUtils.logImpressionOnMainThread(getContext(), DialerImpression.Type.VVM_AUTO_RETRY_SYNC);
     Intent intent = super.createRestartIntent();
     intent.putExtra(EXTRA_PHONE_ACCOUNT_HANDLE, mPhone);
-    intent.putExtra(EXTRA_SYNC_TYPE, mSyncType);
     return intent;
   }
 }
diff --git a/java/com/android/voicemail/impl/sync/UploadTask.java b/java/com/android/voicemail/impl/sync/UploadTask.java
index f2b2036..d8f06db 100644
--- a/java/com/android/voicemail/impl/sync/UploadTask.java
+++ b/java/com/android/voicemail/impl/sync/UploadTask.java
@@ -63,10 +63,6 @@
       return;
     }
     service.sync(
-        this,
-        OmtpVvmSyncService.SYNC_UPLOAD_ONLY,
-        phoneAccountHandle,
-        null,
-        VoicemailStatus.edit(getContext(), phoneAccountHandle));
+        this, phoneAccountHandle, null, VoicemailStatus.edit(getContext(), phoneAccountHandle));
   }
 }
diff --git a/java/com/android/voicemail/impl/sync/VoicemailsQueryHelper.java b/java/com/android/voicemail/impl/sync/VoicemailsQueryHelper.java
index 9b295db..316e1ca 100644
--- a/java/com/android/voicemail/impl/sync/VoicemailsQueryHelper.java
+++ b/java/com/android/voicemail/impl/sync/VoicemailsQueryHelper.java
@@ -49,8 +49,6 @@
   public static final int DELETED = 3;
   public static final int TRANSCRIPTION = 4;
 
-  static final String READ_SELECTION =
-      Voicemails.DIRTY + "=1 AND " + Voicemails.DELETED + "!=1 AND " + Voicemails.IS_READ + "=1";
   static final String DELETED_SELECTION = Voicemails.DELETED + "=1";
   static final String ARCHIVED_SELECTION = Voicemails.ARCHIVED + "=0";
 
@@ -65,15 +63,6 @@
   }
 
   /**
-   * Get all the local read voicemails that have not been synced to the server.
-   *
-   * @return A list of read voicemails.
-   */
-  public List<Voicemail> getReadVoicemails(@NonNull PhoneAccountHandle phoneAccountHandle) {
-    return getLocalVoicemails(phoneAccountHandle, READ_SELECTION);
-  }
-
-  /**
    * Get all the locally deleted voicemails that have not been synced to the server.
    *
    * @return A list of deleted voicemails.
diff --git a/java/com/android/voicemail/impl/sync/VvmNetworkRequestCallback.java b/java/com/android/voicemail/impl/sync/VvmNetworkRequestCallback.java
index 067eff8..068b19b 100644
--- a/java/com/android/voicemail/impl/sync/VvmNetworkRequestCallback.java
+++ b/java/com/android/voicemail/impl/sync/VvmNetworkRequestCallback.java
@@ -128,7 +128,7 @@
 
   @CallSuper
   public void onUnavailable() {
-    // TODO: b/32637799 this is hidden, do we really need this?
+    // TODO(twyen): b/32637799 this is hidden, do we really need this?
     mResultReceived = true;
     onFailed(NETWORK_REQUEST_FAILED_TIMEOUT);
   }
diff --git a/java/com/android/voicemail/impl/transcribe/TranscriptionService.java b/java/com/android/voicemail/impl/transcribe/TranscriptionService.java
index 3e80a7f..9a781e6 100644
--- a/java/com/android/voicemail/impl/transcribe/TranscriptionService.java
+++ b/java/com/android/voicemail/impl/transcribe/TranscriptionService.java
@@ -24,7 +24,6 @@
 import android.content.Context;
 import android.content.Intent;
 import android.net.Uri;
-import android.os.StrictMode;
 import android.support.annotation.MainThread;
 import android.support.annotation.VisibleForTesting;
 import android.support.v4.os.BuildCompat;
@@ -32,6 +31,7 @@
 import com.android.dialer.common.Assert;
 import com.android.dialer.common.LogUtil;
 import com.android.dialer.constants.ScheduledJobIds;
+import com.android.dialer.strictmode.DialerStrictMode;
 import com.android.voicemail.impl.transcribe.grpc.TranscriptionClientFactory;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
@@ -48,7 +48,6 @@
   private JobParameters jobParameters;
   private TranscriptionClientFactory clientFactory;
   private TranscriptionConfigProvider configProvider;
-  private StrictMode.VmPolicy originalPolicy;
 
   /** Callback used by a task to indicate it has finished processing its work item */
   interface JobCallback {
@@ -111,8 +110,7 @@
       LogUtil.i(
           "TranscriptionService.onStartJob",
           "transcription server address: " + configProvider.getServerAddress());
-      originalPolicy = StrictMode.getVmPolicy();
-      StrictMode.enableDefaults();
+      DialerStrictMode.disableDeathPenalty(); // Re-enabled in cleanup.
       jobParameters = params;
       return checkForWork();
     }
@@ -142,10 +140,7 @@
       executorService.shutdownNow();
       executorService = null;
     }
-    if (originalPolicy != null) {
-      StrictMode.setVmPolicy(originalPolicy);
-      originalPolicy = null;
-    }
+    DialerStrictMode.enableDeathPenalty();
   }
 
   @MainThread
diff --git a/java/com/android/voicemail/impl/transcribe/grpc/voicemail_transcription.proto b/java/com/android/voicemail/impl/transcribe/grpc/voicemail_transcription.proto
index 4b1e19b..dd2170a 100644
--- a/java/com/android/voicemail/impl/transcribe/grpc/voicemail_transcription.proto
+++ b/java/com/android/voicemail/impl/transcribe/grpc/voicemail_transcription.proto
@@ -5,9 +5,10 @@
 package google.internal.communications.voicemailtranscription.v1;
 
 option java_multiple_files = true;
-option java_package = "com.google.internal.communications.voicemailtranscription.v1";
 option optimize_for = LITE_RUNTIME;
 
+option java_package = "com.google.internal.communications.voicemailtranscription.v1";
+
 // Enum that specifies supported audio formats.
 enum AudioFormat {
   // Default but invalid value.