Merge tag 'android-14.0.0_r50' into staging/lineage-21.0_merge-android-14.0.0_r50
Android 14.0.0 Release 50 (AP2A.240605.024)
# -----BEGIN PGP SIGNATURE-----
#
# iF0EABECAB0WIQRDQNE1cO+UXoOBCWTorT+BmrEOeAUCZmdzpgAKCRDorT+BmrEO
# eCa4AJ9SmR95oYqsQOdeej1x5Xy9oUmhIwCfRT779cg1ojwL8Vb1FMabjUVD1xg=
# =QeIl
# -----END PGP SIGNATURE-----
# gpg: Signature made Tue Jun 11 00:44:06 2024 EEST
# gpg: using DSA key 4340D13570EF945E83810964E8AD3F819AB10E78
# gpg: Good signature from "The Android Open Source Project <initial-contribution@android.com>" [marginal]
# gpg: initial-contribution@android.com: Verified 2499 signatures in the past
# 2 years. Encrypted 4 messages in the past 2 years.
# gpg: WARNING: This key is not certified with sufficiently trusted signatures!
# gpg: It is not certain that the signature belongs to the owner.
# Primary key fingerprint: 4340 D135 70EF 945E 8381 0964 E8AD 3F81 9AB1 0E78
# By Bill Yi (27) and others
# Via Automerger Merge Worker (24) and others
* tag 'android-14.0.0_r50': (31 commits)
Import translations. DO NOT MERGE ANYWHERE
Import translations. DO NOT MERGE ANYWHERE
Import translations. DO NOT MERGE ANYWHERE
Import translations. DO NOT MERGE ANYWHERE
Import translations. DO NOT MERGE ANYWHERE
Import translations. DO NOT MERGE ANYWHERE
Import translations. DO NOT MERGE ANYWHERE
Import translations. DO NOT MERGE ANYWHERE
Import translations. DO NOT MERGE ANYWHERE
Import translations. DO NOT MERGE ANYWHERE
Import translations. DO NOT MERGE ANYWHERE
Import translations. DO NOT MERGE ANYWHERE
Import translations. DO NOT MERGE ANYWHERE
Import translations. DO NOT MERGE ANYWHERE
Import translations. DO NOT MERGE ANYWHERE
Move Im and SipAddress to legacy field
Import translations. DO NOT MERGE ANYWHERE
Import translations. DO NOT MERGE ANYWHERE
Import translations. DO NOT MERGE ANYWHERE
Baseline NewApi issues
...
Conflicts:
res/values/ids.xml
Change-Id: If5eda69021478c41ab67fca7505f7090e3fca6a9
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 66d5767..e98eed4 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -67,8 +67,9 @@
<application
android:name="com.android.contacts.ContactsApplication"
android:hardwareAccelerated="true"
- android:icon="@mipmap/ic_contacts_launcher"
+ android:icon="@mipmap/ic_launcher"
android:label="@string/applicationLabel"
+ android:appCategory="social"
android:supportsRtl="true"
android:taskAffinity="android.task.contacts"
android:usesCleartextTraffic="false">
diff --git a/res/drawable-hdpi/product_logo_contacts_color_144.png b/res/drawable-hdpi/product_logo_contacts_color_144.png
index 293a85e..0a10e41 100644
--- a/res/drawable-hdpi/product_logo_contacts_color_144.png
+++ b/res/drawable-hdpi/product_logo_contacts_color_144.png
Binary files differ
diff --git a/res/drawable-hdpi/product_logo_contacts_color_192.png b/res/drawable-hdpi/product_logo_contacts_color_192.png
index 04a5a10..eb9744c 100644
--- a/res/drawable-hdpi/product_logo_contacts_color_192.png
+++ b/res/drawable-hdpi/product_logo_contacts_color_192.png
Binary files differ
diff --git a/res/drawable-mdpi/product_logo_contacts_color_144.png b/res/drawable-mdpi/product_logo_contacts_color_144.png
index 27c571e..bdbdc7f 100644
--- a/res/drawable-mdpi/product_logo_contacts_color_144.png
+++ b/res/drawable-mdpi/product_logo_contacts_color_144.png
Binary files differ
diff --git a/res/drawable-mdpi/product_logo_contacts_color_192.png b/res/drawable-mdpi/product_logo_contacts_color_192.png
index 6e79412..26980ae 100644
--- a/res/drawable-mdpi/product_logo_contacts_color_192.png
+++ b/res/drawable-mdpi/product_logo_contacts_color_192.png
Binary files differ
diff --git a/res/drawable-night/quantum_launchscreen_contacts.xml b/res/drawable-night/quantum_launchscreen_contacts.xml
new file mode 100644
index 0000000..14aaaf0
--- /dev/null
+++ b/res/drawable-night/quantum_launchscreen_contacts.xml
@@ -0,0 +1,27 @@
+<?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.
+-->
+
+<layer-list xmlns:android="http://schemas.android.com/apk/res/android"
+ android:opacity="opaque">
+ <item android:drawable="@android:color/system_neutral1_900" />
+ <item
+ android:id="@+id/launchscreens_product_logo"
+ android:bottom="@dimen/launchscreens_product_logo_bottom">
+ <bitmap
+ android:gravity="center"
+ android:src="@drawable/product_logo_contacts_color_144" />
+ </item>
+</layer-list>
diff --git a/res/drawable-sw600dp-night/quantum_launchscreen_contacts.xml b/res/drawable-sw600dp-night/quantum_launchscreen_contacts.xml
new file mode 100644
index 0000000..16ac0d7
--- /dev/null
+++ b/res/drawable-sw600dp-night/quantum_launchscreen_contacts.xml
@@ -0,0 +1,27 @@
+<?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.
+-->
+
+<layer-list xmlns:android="http://schemas.android.com/apk/res/android"
+ android:opacity="opaque">
+ <item android:drawable="@color/background_material_dark" />
+ <item
+ android:id="@+id/launchscreens_product_logo"
+ android:bottom="@dimen/launchscreens_product_logo_bottom">
+ <bitmap
+ android:gravity="center"
+ android:src="@drawable/product_logo_contacts_color_192" />
+ </item>
+</layer-list>
diff --git a/res/drawable-xhdpi/product_logo_contacts_color_144.png b/res/drawable-xhdpi/product_logo_contacts_color_144.png
index 04a5a10..eb9744c 100644
--- a/res/drawable-xhdpi/product_logo_contacts_color_144.png
+++ b/res/drawable-xhdpi/product_logo_contacts_color_144.png
Binary files differ
diff --git a/res/drawable-xhdpi/product_logo_contacts_color_192.png b/res/drawable-xhdpi/product_logo_contacts_color_192.png
index 35d80e4..f4e2fe6 100644
--- a/res/drawable-xhdpi/product_logo_contacts_color_192.png
+++ b/res/drawable-xhdpi/product_logo_contacts_color_192.png
Binary files differ
diff --git a/res/drawable-xxhdpi/product_logo_contacts_color_144.png b/res/drawable-xxhdpi/product_logo_contacts_color_144.png
index 12c582b..7f215c3 100644
--- a/res/drawable-xxhdpi/product_logo_contacts_color_144.png
+++ b/res/drawable-xxhdpi/product_logo_contacts_color_144.png
Binary files differ
diff --git a/res/drawable-xxhdpi/product_logo_contacts_color_192.png b/res/drawable-xxhdpi/product_logo_contacts_color_192.png
index baa0003..56150d5 100644
--- a/res/drawable-xxhdpi/product_logo_contacts_color_192.png
+++ b/res/drawable-xxhdpi/product_logo_contacts_color_192.png
Binary files differ
diff --git a/res/drawable-xxxhdpi/product_logo_contacts_color_144.png b/res/drawable-xxxhdpi/product_logo_contacts_color_144.png
index baa0003..8cced06 100644
--- a/res/drawable-xxxhdpi/product_logo_contacts_color_144.png
+++ b/res/drawable-xxxhdpi/product_logo_contacts_color_144.png
Binary files differ
diff --git a/res/drawable-xxxhdpi/product_logo_contacts_color_192.png b/res/drawable-xxxhdpi/product_logo_contacts_color_192.png
index f1a62e6..df9c41e 100644
--- a/res/drawable-xxxhdpi/product_logo_contacts_color_192.png
+++ b/res/drawable-xxxhdpi/product_logo_contacts_color_192.png
Binary files differ
diff --git a/res/drawable/dialog_background.xml b/res/drawable/dialog_background.xml
new file mode 100644
index 0000000..119b08b
--- /dev/null
+++ b/res/drawable/dialog_background.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<!--
+ ~ Copyright (C) 2014 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License
+ -->
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+ android:shape="rectangle">
+ <solid android:color="?android:attr/colorBackgroundFloating"/>
+ <corners android:radius="16dp"/>
+</shape>
diff --git a/res/drawable/fab_bg.xml b/res/drawable/fab_bg.xml
new file mode 100644
index 0000000..a652678
--- /dev/null
+++ b/res/drawable/fab_bg.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ SPDX-FileCopyrightText: The LineageOS Project
+ SPDX-License-Identifier: Apache-2.0
+-->
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+ android:shape="oval">
+ <solid android:color="@color/fab_color"/>
+</shape>
diff --git a/res/drawable/ic_launcher_background.xml b/res/drawable/ic_launcher_background.xml
new file mode 100644
index 0000000..fc48230
--- /dev/null
+++ b/res/drawable/ic_launcher_background.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ SPDX-FileCopyrightText: 2022 The LineageOS Project
+ SPDX-License-Identifier: Apache-2.0
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="108dp"
+ android:height="108dp"
+ android:viewportWidth="108"
+ android:viewportHeight="108">
+ <path
+ android:pathData="M0,0h108v108h-108z"
+ android:fillColor="#ffffff"/>
+ <path
+ android:pathData="M77,51C77,59.837 70,63 61,63C52,63 45,59.837 45,51C45,38.163 52,31 61,31C70,31 77,38.163 77,51Z"
+ android:fillColor="#4D84E9"/>
+ <path
+ android:pathData="M71,49C68.569,50.255 64.821,51 61,51C57.179,51 53.431,50.255 51,49C52.093,52.47 54.333,57 61,57C67.667,57 69.907,52.47 71,49Z"
+ android:fillColor="#ffffff"/>
+</vector>
diff --git a/res/drawable/ic_launcher_foreground.xml b/res/drawable/ic_launcher_foreground.xml
new file mode 100644
index 0000000..686ffa2
--- /dev/null
+++ b/res/drawable/ic_launcher_foreground.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ SPDX-FileCopyrightText: 2022 The LineageOS Project
+ SPDX-License-Identifier: Apache-2.0
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:aapt="http://schemas.android.com/aapt"
+ android:width="108dp"
+ android:height="108dp"
+ android:viewportWidth="108"
+ android:viewportHeight="108">
+ <group>
+ <clip-path
+ android:pathData="M0,0h108v108h-108z"/>
+ <path
+ android:pathData="M64,64C64,72.837 57,76 48,76C39,76 32,72.837 32,64C32,51.163 39,44 48,44C57,44 64,51.163 64,64Z"
+ android:fillColor="#193057"/>
+ <path
+ android:pathData="M58,62C55.569,63.255 51.821,64 48,64C44.179,64 40.431,63.255 38,62C39.093,65.47 41.333,70 48,70C54.667,70 56.907,65.47 58,62Z"
+ android:fillColor="#ffffff"/>
+ <path
+ android:pathData="M28.54,28.54m-72,0a72,72 0,1 1,144 0a72,72 0,1 1,-144 0"
+ android:fillAlpha="0.6">
+ <aapt:attr name="android:fillColor">
+ <gradient
+ android:gradientRadius="72"
+ android:centerX="28.54"
+ android:centerY="28.54"
+ android:type="radial">
+ <item android:offset="0" android:color="#19FFFFFF"/>
+ <item android:offset="1" android:color="#00FFFFFF"/>
+ </gradient>
+ </aapt:attr>
+ </path>
+ </group>
+</vector>
diff --git a/res/drawable/ic_launcher_monochrome.xml b/res/drawable/ic_launcher_monochrome.xml
new file mode 100644
index 0000000..fc64ec0
--- /dev/null
+++ b/res/drawable/ic_launcher_monochrome.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ SPDX-FileCopyrightText: 2022 The LineageOS Project
+ SPDX-License-Identifier: Apache-2.0
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="108dp"
+ android:height="108dp"
+ android:viewportWidth="108"
+ android:viewportHeight="108">
+ <path
+ android:pathData="M70.724,57.809C72.696,56.509 74,54.485 74,51C74,45.112 72.398,40.856 70.086,38.125C67.803,35.43 64.654,34 61,34C57.346,34 54.197,35.43 51.915,38.125C51.199,38.97 50.551,39.962 49.998,41.102C49.341,41.034 48.674,41 48,41C47.579,41 47.161,41.013 46.747,41.04C49.369,34.518 54.693,31 61,31C70,31 77,38.163 77,51C77,57.753 72.912,61.193 66.967,62.439C66.924,61.405 66.836,60.4 66.706,59.425C68.305,59.057 69.654,58.515 70.724,57.809ZM64.076,50.84C64.882,52.37 65.53,54.051 66.009,55.867C68.942,54.302 70.245,51.398 71,49C69.23,49.914 66.762,50.557 64.076,50.84Z"
+ android:fillColor="#ffffffff"
+ android:fillType="evenOdd"/>
+ <path
+ android:pathData="M48,76C57,76 64,72.837 64,64C64,51.163 57,44 48,44C39,44 32,51.163 32,64C32,72.837 39,76 48,76ZM48,64C51.821,64 55.569,63.255 58,62C56.907,65.47 54.667,70 48,70C41.333,70 39.093,65.47 38,62C40.431,63.255 44.179,64 48,64Z"
+ android:fillColor="#ffffffff"
+ android:fillType="evenOdd"/>
+</vector>
diff --git a/res/drawable/quantum_ic_drawer_emergency_info_24.xml b/res/drawable/quantum_ic_drawer_emergency_info_24.xml
new file mode 100644
index 0000000..6b6a143
--- /dev/null
+++ b/res/drawable/quantum_ic_drawer_emergency_info_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:pathData="M9.6,2v5.6l-5,-3L2,9l5,3l-5,3l2.3,4l5.3,-2.7v5.6h4.6v-5.6l5.3,2.7l2.3,-4l-5.6,-2.7L21.9,9l-2.3,-4l-5.3,3V2H9.6z"
+ android:fillColor="#FFFFFF"/>
+</vector>
diff --git a/res/drawable/quantum_ic_drawer_my_info_32.xml b/res/drawable/quantum_ic_drawer_my_info_32.xml
new file mode 100644
index 0000000..4e310cb
--- /dev/null
+++ b/res/drawable/quantum_ic_drawer_my_info_32.xml
@@ -0,0 +1,19 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="32dp"
+ android:height="32dp"
+ android:viewportWidth="32.0"
+ android:viewportHeight="32.0">
+ <path
+ android:pathData="M15.8,1C7.5,1 0.9,7.7 1,16c0.1,8.3 6.9,15 15.2,15S31.1,24.3 31,16C30.9,7.7 24.1,1 15.8,1z"
+ android:fillColor="#4185F3"/>
+ <path
+ android:pathData="M16,12.3m-3.8,0a3.8,3.8 0,1 1,7.6 0a3.8,3.8 0,1 1,-7.6 0"
+ android:fillAlpha="0.2"
+ android:fillColor="#FFFFFF"
+ android:strokeAlpha="0.2"/>
+ <path
+ android:pathData="M23.5,23.5h-15v-1.9c0,-2.5 5,-3.8 7.5,-3.8s7.5,1.3 7.5,3.8V23.5z"
+ android:fillAlpha="0.2"
+ android:fillColor="#FFFFFF"
+ android:strokeAlpha="0.2"/>
+</vector>
diff --git a/res/drawable/quantum_launchscreen_contacts.xml b/res/drawable/quantum_launchscreen_contacts.xml
index 276b2da..4cb718c 100755
--- a/res/drawable/quantum_launchscreen_contacts.xml
+++ b/res/drawable/quantum_launchscreen_contacts.xml
@@ -16,7 +16,7 @@
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"
android:opacity="opaque">
- <item android:drawable="@android:color/white" />
+ <item android:drawable="@android:color/system_neutral1_0" />
<item
android:id="@+id/launchscreens_product_logo"
android:bottom="@dimen/launchscreens_product_logo_bottom">
diff --git a/res/layout/contact_list_content.xml b/res/layout/contact_list_content.xml
index 901e04c..f728d36 100644
--- a/res/layout/contact_list_content.xml
+++ b/res/layout/contact_list_content.xml
@@ -89,6 +89,7 @@
android:paddingTop="?attr/list_item_padding_top"
android:clipToPadding="false"
android:fastScrollEnabled="true"
+ android:forceDarkAllowed="false"
android:visibility="gone"
android:fadingEdge="none" />
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
diff --git a/res/layout/contact_picker_content.xml b/res/layout/contact_picker_content.xml
index 382121a..6bc7419 100644
--- a/res/layout/contact_picker_content.xml
+++ b/res/layout/contact_picker_content.xml
@@ -31,7 +31,8 @@
android:layout_marginEnd="?attr/contact_browser_list_padding_right"
android:paddingTop="@dimen/contact_browser_list_item_padding_top_or_bottom"
android:clipToPadding="false"
- android:fastScrollEnabled="true"/>
+ android:fastScrollEnabled="true"
+ android:forceDarkAllowed="false"/>
<TextView android:id="@android:id/empty"
android:layout_width="wrap_content"
diff --git a/res/layout/drawer_secondline_item.xml b/res/layout/drawer_secondline_item.xml
new file mode 100644
index 0000000..4749940
--- /dev/null
+++ b/res/layout/drawer_secondline_item.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<LinearLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ style="@style/DrawerItemStyle">
+
+ <ImageView
+ android:id="@+id/icon"
+ style="@style/DrawerItemIconStyle"/>
+
+ <LinearLayout
+ android:id="@+id/secondline_container"
+ android:layout_width="0dp"
+ android:layout_height="wrap_content"
+ android:layout_weight="1"
+ android:layout_gravity="center_vertical"
+ android:orientation="vertical">
+
+ <TextView
+ android:id="@+id/title"
+ android:textAlignment="viewStart"
+ style="@style/DrawerSecondLineTitleTextStyle" />
+
+ <TextView
+ android:id="@+id/summary"
+ android:textAlignment="viewStart"
+ style="@style/DrawerSecondLineSummaryTextStyle" />
+
+ </LinearLayout>
+
+</LinearLayout>
diff --git a/res/layout/floating_action_button.xml b/res/layout/floating_action_button.xml
index a31512f..9f954b2 100644
--- a/res/layout/floating_action_button.xml
+++ b/res/layout/floating_action_button.xml
@@ -26,7 +26,7 @@
android:layout_gravity="bottom|end"
android:layout_marginBottom="@dimen/floating_action_button_margin_bottom"
android:layout_marginEnd="@dimen/floating_action_button_margin_right"
- android:background="@drawable/fab_pink"
+ android:background="@drawable/fab_bg"
android:elevation="@dimen/design_fab_elevation"
app:layout_dodgeInsetEdges="bottom" >
@@ -37,5 +37,5 @@
android:background="@drawable/floating_action_button"
android:contentDescription="@string/action_menu_add_new_contact_button"
android:src="@drawable/quantum_ic_add_vd_theme_24"
- android:tint="@color/floating_action_button_icon_color"/>
-</FrameLayout>
\ No newline at end of file
+ app:tint="@color/floating_action_button_icon_color" />
+</FrameLayout>
diff --git a/res/layout/join_contact_picker_list_content.xml b/res/layout/join_contact_picker_list_content.xml
index 04b0556..2313de7 100644
--- a/res/layout/join_contact_picker_list_content.xml
+++ b/res/layout/join_contact_picker_list_content.xml
@@ -51,6 +51,7 @@
android:layout_marginStart="?attr/contact_browser_list_padding_left"
android:layout_marginEnd="?attr/contact_browser_list_padding_right"
android:fastScrollEnabled="true"
+ android:forceDarkAllowed="false"
android:scrollbarStyle="outsideOverlay" />
</FrameLayout>
</LinearLayout>
diff --git a/res/mipmap-anydpi/ic_launcher.xml b/res/mipmap-anydpi/ic_launcher.xml
new file mode 100644
index 0000000..b58c81f
--- /dev/null
+++ b/res/mipmap-anydpi/ic_launcher.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ SPDX-FileCopyrightText: 2022 The LineageOS Project
+ SPDX-License-Identifier: Apache-2.0
+-->
+<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
+ <background android:drawable="@drawable/ic_launcher_background"/>
+ <foreground android:drawable="@drawable/ic_launcher_foreground"/>
+ <monochrome android:drawable="@drawable/ic_launcher_monochrome"/>
+</adaptive-icon>
diff --git a/res/mipmap-hdpi/ic_contacts_launcher.png b/res/mipmap-hdpi/ic_contacts_launcher.png
deleted file mode 100644
index 64eff00..0000000
--- a/res/mipmap-hdpi/ic_contacts_launcher.png
+++ /dev/null
Binary files differ
diff --git a/res/mipmap-mdpi/ic_contacts_launcher.png b/res/mipmap-mdpi/ic_contacts_launcher.png
deleted file mode 100644
index b4ee821..0000000
--- a/res/mipmap-mdpi/ic_contacts_launcher.png
+++ /dev/null
Binary files differ
diff --git a/res/mipmap-xhdpi/ic_contacts_launcher.png b/res/mipmap-xhdpi/ic_contacts_launcher.png
deleted file mode 100644
index 6feeadf..0000000
--- a/res/mipmap-xhdpi/ic_contacts_launcher.png
+++ /dev/null
Binary files differ
diff --git a/res/mipmap-xxhdpi/ic_contacts_launcher.png b/res/mipmap-xxhdpi/ic_contacts_launcher.png
deleted file mode 100644
index 01a3fde..0000000
--- a/res/mipmap-xxhdpi/ic_contacts_launcher.png
+++ /dev/null
Binary files differ
diff --git a/res/mipmap-xxxhdpi/ic_contacts_launcher.png b/res/mipmap-xxxhdpi/ic_contacts_launcher.png
deleted file mode 100644
index 328e067..0000000
--- a/res/mipmap-xxxhdpi/ic_contacts_launcher.png
+++ /dev/null
Binary files differ
diff --git a/res/values-ar/lineage_strings.xml b/res/values-ar/lineage_strings.xml
new file mode 100644
index 0000000..fa6a70a
--- /dev/null
+++ b/res/values-ar/lineage_strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2018 The LineageOS Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR 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 name="menu_emergency_information_txt">معلومات الطوارئ</string>
+ <string name="call_via_template">الاتصال عبر <xliff:g id="account">%1$s</xliff:g></string>
+</resources>
diff --git a/res/values-ast-rES/lineage_strings.xml b/res/values-ast-rES/lineage_strings.xml
new file mode 100644
index 0000000..a062513
--- /dev/null
+++ b/res/values-ast-rES/lineage_strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2018 The LineageOS Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR 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 name="menu_emergency_information_txt">Información d\'emerxencia</string>
+ <string name="call_via_template">Llamar per «<xliff:g id="account">%1$s</xliff:g>»</string>
+</resources>
diff --git a/res/values-az/lineage_strings.xml b/res/values-az/lineage_strings.xml
new file mode 100644
index 0000000..5db3e1a
--- /dev/null
+++ b/res/values-az/lineage_strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2018 The LineageOS Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR 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 name="menu_emergency_information_txt">Fövqəladə hal məlumatı</string>
+ <string name="call_via_template"><xliff:g id="account">%1$s</xliff:g> ilə zəng et</string>
+</resources>
diff --git a/res/values-be/lineage_strings.xml b/res/values-be/lineage_strings.xml
new file mode 100644
index 0000000..9cdea74
--- /dev/null
+++ b/res/values-be/lineage_strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2018 The LineageOS Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR 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 name="menu_emergency_information_txt">Інфармацыя для экстранных сітуацый</string>
+ <string name="call_via_template">Выклікаць праз <xliff:g id="name">%1$s</xliff:g></string>
+</resources>
diff --git a/res/values-bg/lineage_strings.xml b/res/values-bg/lineage_strings.xml
new file mode 100644
index 0000000..0d0a2c7
--- /dev/null
+++ b/res/values-bg/lineage_strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2018 The LineageOS Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR 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 name="menu_emergency_information_txt">Информация за спешни случаи</string>
+ <string name="call_via_template">Обадете се чрез <xliff:g id="account">%1$s</xliff:g></string>
+</resources>
diff --git a/res/values-bn/lineage_strings.xml b/res/values-bn/lineage_strings.xml
new file mode 100644
index 0000000..7061163
--- /dev/null
+++ b/res/values-bn/lineage_strings.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2018 The LineageOS Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR 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 name="menu_emergency_information_txt">জরুরি তথ্য</string>
+</resources>
diff --git a/res/values-bs/lineage_strings.xml b/res/values-bs/lineage_strings.xml
new file mode 100644
index 0000000..bf4069d
--- /dev/null
+++ b/res/values-bs/lineage_strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2018 The LineageOS Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR 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 name="menu_emergency_information_txt">Informacije za hitne slučajeve</string>
+ <string name="call_via_template">Pozovi sa <xliff:g id="account">%1$s</xliff:g></string>
+</resources>
diff --git a/res/values-ca/lineage_strings.xml b/res/values-ca/lineage_strings.xml
new file mode 100644
index 0000000..9c24670
--- /dev/null
+++ b/res/values-ca/lineage_strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2018 The LineageOS Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR 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 name="menu_emergency_information_txt">Informació d\'emergència</string>
+ <string name="call_via_template">Truca utilitzant <xliff:g id="name">%1$s</xliff:g></string>
+</resources>
diff --git a/res/values-cs/lineage_strings.xml b/res/values-cs/lineage_strings.xml
new file mode 100644
index 0000000..28b4923
--- /dev/null
+++ b/res/values-cs/lineage_strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2018 The LineageOS Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR 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 name="menu_emergency_information_txt">Nouzové informace</string>
+ <string name="call_via_template">Volat pomocí <xliff:g id="account">%1$s</xliff:g></string>
+</resources>
diff --git a/res/values-cy/lineage_strings.xml b/res/values-cy/lineage_strings.xml
new file mode 100644
index 0000000..9be4aa1
--- /dev/null
+++ b/res/values-cy/lineage_strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2018 The LineageOS Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR 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 name="menu_emergency_information_txt">Gwybodaeth mewn argyfwng</string>
+ <string name="call_via_template">Galw trwy <xliff:g id="account">%1$s</xliff:g></string>
+</resources>
diff --git a/res/values-da/lineage_strings.xml b/res/values-da/lineage_strings.xml
new file mode 100644
index 0000000..78123dd
--- /dev/null
+++ b/res/values-da/lineage_strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2018 The LineageOS Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR 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 name="menu_emergency_information_txt">Info til nødsituationer</string>
+ <string name="call_via_template">Ring via <xliff:g id="account">%1$s</xliff:g></string>
+</resources>
diff --git a/res/values-de/lineage_strings.xml b/res/values-de/lineage_strings.xml
new file mode 100644
index 0000000..c5a46f6
--- /dev/null
+++ b/res/values-de/lineage_strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2018 The LineageOS Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR 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 name="menu_emergency_information_txt">Notfallinformationen</string>
+ <string name="call_via_template">Anruf über <xliff:g id="account">%1$s</xliff:g></string>
+</resources>
diff --git a/res/values-el/lineage_strings.xml b/res/values-el/lineage_strings.xml
new file mode 100644
index 0000000..6e7fd58
--- /dev/null
+++ b/res/values-el/lineage_strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2018 The LineageOS Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR 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 name="menu_emergency_information_txt">Πληροφορίες έκτακτης ανάγκης</string>
+ <string name="call_via_template">Κλήση μέσω <xliff:g id="account">%1$s</xliff:g></string>
+</resources>
diff --git a/res/values-en-rAU/lineage_strings.xml b/res/values-en-rAU/lineage_strings.xml
new file mode 100644
index 0000000..0de968a
--- /dev/null
+++ b/res/values-en-rAU/lineage_strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2018 The LineageOS Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR 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 name="menu_emergency_information_txt">Emergency information</string>
+ <string name="call_via_template">Call via <xliff:g id="account">%1$s</xliff:g></string>
+</resources>
diff --git a/res/values-en-rCA/lineage_strings.xml b/res/values-en-rCA/lineage_strings.xml
new file mode 100644
index 0000000..0de968a
--- /dev/null
+++ b/res/values-en-rCA/lineage_strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2018 The LineageOS Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR 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 name="menu_emergency_information_txt">Emergency information</string>
+ <string name="call_via_template">Call via <xliff:g id="account">%1$s</xliff:g></string>
+</resources>
diff --git a/res/values-en-rGB/lineage_strings.xml b/res/values-en-rGB/lineage_strings.xml
new file mode 100644
index 0000000..0de968a
--- /dev/null
+++ b/res/values-en-rGB/lineage_strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2018 The LineageOS Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR 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 name="menu_emergency_information_txt">Emergency information</string>
+ <string name="call_via_template">Call via <xliff:g id="account">%1$s</xliff:g></string>
+</resources>
diff --git a/res/values-en-rIN/lineage_strings.xml b/res/values-en-rIN/lineage_strings.xml
new file mode 100644
index 0000000..0de968a
--- /dev/null
+++ b/res/values-en-rIN/lineage_strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2018 The LineageOS Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR 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 name="menu_emergency_information_txt">Emergency information</string>
+ <string name="call_via_template">Call via <xliff:g id="account">%1$s</xliff:g></string>
+</resources>
diff --git a/res/values-es-rMX/lineage_strings.xml b/res/values-es-rMX/lineage_strings.xml
new file mode 100644
index 0000000..50147c7
--- /dev/null
+++ b/res/values-es-rMX/lineage_strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2018 The LineageOS Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR 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 name="menu_emergency_information_txt">Información de emergencia</string>
+ <string name="call_via_template">Llamar usando <xliff:g id="account">%1$s</xliff:g></string>
+</resources>
diff --git a/res/values-es-rUS/lineage_strings.xml b/res/values-es-rUS/lineage_strings.xml
new file mode 100644
index 0000000..50147c7
--- /dev/null
+++ b/res/values-es-rUS/lineage_strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2018 The LineageOS Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR 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 name="menu_emergency_information_txt">Información de emergencia</string>
+ <string name="call_via_template">Llamar usando <xliff:g id="account">%1$s</xliff:g></string>
+</resources>
diff --git a/res/values-et/lineage_strings.xml b/res/values-et/lineage_strings.xml
new file mode 100644
index 0000000..1dee821
--- /dev/null
+++ b/res/values-et/lineage_strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2018 The LineageOS Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR 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 name="menu_emergency_information_txt">Hädaabiteave</string>
+ <string name="call_via_template">Helista läbi <xliff:g id="account">%1$s</xliff:g></string>
+</resources>
diff --git a/res/values-eu/lineage_strings.xml b/res/values-eu/lineage_strings.xml
new file mode 100644
index 0000000..909d9c0
--- /dev/null
+++ b/res/values-eu/lineage_strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2018 The LineageOS Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR 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 name="menu_emergency_information_txt">Larrialdietarako informazioa</string>
+ <string name="call_via_template">Deitu <xliff:g id="account">%1$s</xliff:g> bidez</string>
+</resources>
diff --git a/res/values-fi/lineage_strings.xml b/res/values-fi/lineage_strings.xml
new file mode 100644
index 0000000..a8ec71d
--- /dev/null
+++ b/res/values-fi/lineage_strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2018 The LineageOS Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR 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 name="menu_emergency_information_txt">Hätätilannetiedot</string>
+ <string name="call_via_template">Soita käyttäen <xliff:g id="account">%1$s</xliff:g></string>
+</resources>
diff --git a/res/values-fr/lineage_strings.xml b/res/values-fr/lineage_strings.xml
new file mode 100644
index 0000000..5243825
--- /dev/null
+++ b/res/values-fr/lineage_strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2018 The LineageOS Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR 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 name="menu_emergency_information_txt">Informations d\'urgence</string>
+ <string name="call_via_template">Appeler via <xliff:g id="account">%1$s</xliff:g></string>
+</resources>
diff --git a/res/values-fur-rIT/lineage_strings.xml b/res/values-fur-rIT/lineage_strings.xml
new file mode 100644
index 0000000..f203d4c
--- /dev/null
+++ b/res/values-fur-rIT/lineage_strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2018 The LineageOS Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR 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 name="menu_emergency_information_txt">Informazions di emergjence</string>
+ <string name="call_via_template">Clame cun <xliff:g id="account">%1$s</xliff:g></string>
+</resources>
diff --git a/res/values-fy-rNL/lineage_strings.xml b/res/values-fy-rNL/lineage_strings.xml
new file mode 100644
index 0000000..41a2cd2
--- /dev/null
+++ b/res/values-fy-rNL/lineage_strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2018 The LineageOS Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR 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 name="menu_emergency_information_txt">Ynformaasje by needgefallen</string>
+ <string name="call_via_template">Belle fia <xliff:g id="account">%1$s</xliff:g></string>
+</resources>
diff --git a/res/values-gd/lineage_strings.xml b/res/values-gd/lineage_strings.xml
new file mode 100644
index 0000000..4d45f4c
--- /dev/null
+++ b/res/values-gd/lineage_strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2018 The LineageOS Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR 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 name="menu_emergency_information_txt">Fiosrachadh èiginn</string>
+ <string name="call_via_template">Gairm slighe <xliff:g id="account">%1$s</xliff:g></string>
+</resources>
diff --git a/res/values-gl/lineage_strings.xml b/res/values-gl/lineage_strings.xml
new file mode 100644
index 0000000..ff56be7
--- /dev/null
+++ b/res/values-gl/lineage_strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2018 The LineageOS Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR 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 name="menu_emergency_information_txt">Información de emerxencia</string>
+ <string name="call_via_template">Chamar a través de <xliff:g id="name">%1$s</xliff:g></string>
+</resources>
diff --git a/res/values-hu/lineage_strings.xml b/res/values-hu/lineage_strings.xml
new file mode 100644
index 0000000..71da02a
--- /dev/null
+++ b/res/values-hu/lineage_strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2018 The LineageOS Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR 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 name="menu_emergency_information_txt">Segélyhívási információk</string>
+ <string name="call_via_template">Hívás ezzel <xliff:g id="account">%1$s</xliff:g></string>
+</resources>
diff --git a/res/values-in/lineage_strings.xml b/res/values-in/lineage_strings.xml
new file mode 100644
index 0000000..97238e0
--- /dev/null
+++ b/res/values-in/lineage_strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2018 The LineageOS Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR 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 name="menu_emergency_information_txt">Informasi darurat</string>
+ <string name="call_via_template">Panggilan melalui <xliff:g id="account">%1$s</xliff:g></string>
+</resources>
diff --git a/res/values-is/lineage_strings.xml b/res/values-is/lineage_strings.xml
new file mode 100644
index 0000000..f745445
--- /dev/null
+++ b/res/values-is/lineage_strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2018 The LineageOS Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR 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 name="menu_emergency_information_txt">Neyðarupplýsingar</string>
+ <string name="call_via_template">Hringja í gegnum <xliff:g id="account">%1$s</xliff:g></string>
+</resources>
diff --git a/res/values-it/lineage_strings.xml b/res/values-it/lineage_strings.xml
new file mode 100644
index 0000000..1fb437b
--- /dev/null
+++ b/res/values-it/lineage_strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2018 The LineageOS Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR 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 name="menu_emergency_information_txt">Informazioni di emergenza</string>
+ <string name="call_via_template">Chiama con <xliff:g id="account">%1$s</xliff:g></string>
+</resources>
diff --git a/res/values-iw/lineage_strings.xml b/res/values-iw/lineage_strings.xml
new file mode 100644
index 0000000..0dbdb92
--- /dev/null
+++ b/res/values-iw/lineage_strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2018 The LineageOS Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR 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 name="menu_emergency_information_txt">מידע למקרה חירום</string>
+ <string name="call_via_template">חיוג באמצעות <xliff:g id="account">%1$s</xliff:g></string>
+</resources>
diff --git a/res/values-ja/lineage_strings.xml b/res/values-ja/lineage_strings.xml
new file mode 100644
index 0000000..4805af0
--- /dev/null
+++ b/res/values-ja/lineage_strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2018 The LineageOS Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR 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 name="menu_emergency_information_txt">緊急時の情報</string>
+ <string name="call_via_template"><xliff:g id="account">%1$s</xliff:g>経由で発信</string>
+</resources>
diff --git a/res/values-ka/lineage_strings.xml b/res/values-ka/lineage_strings.xml
new file mode 100644
index 0000000..6c67fd9
--- /dev/null
+++ b/res/values-ka/lineage_strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2018 The LineageOS Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR 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 name="menu_emergency_information_txt">საგანგებო ინფორმაცია</string>
+ <string name="call_via_template">დარეკვა <xliff:g id="account">%1$s</xliff:g> ანგარიშით</string>
+</resources>
diff --git a/res/values-kn/lineage_strings.xml b/res/values-kn/lineage_strings.xml
new file mode 100644
index 0000000..c62a4c2
--- /dev/null
+++ b/res/values-kn/lineage_strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2018 The LineageOS Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR 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 name="menu_emergency_information_txt">ತುರ್ತುಸ್ಥಿತಿ ಮಾಹಿತಿ</string>
+ <string name="call_via_template"><xliff:g id="account">%1$s</xliff:g> ಮುಖೇನ ಕರೆಮಾಡು</string>
+</resources>
diff --git a/res/values-ko/lineage_strings.xml b/res/values-ko/lineage_strings.xml
new file mode 100644
index 0000000..7ba7339
--- /dev/null
+++ b/res/values-ko/lineage_strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2018 The LineageOS Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR 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 name="menu_emergency_information_txt">긴급 상황 정보</string>
+ <string name="call_via_template"><xliff:g id="account">%1$s</xliff:g>으(로) 전화</string>
+</resources>
diff --git a/res/values-my/lineage_strings.xml b/res/values-my/lineage_strings.xml
new file mode 100644
index 0000000..f9a7d3f
--- /dev/null
+++ b/res/values-my/lineage_strings.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2018 The LineageOS Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR 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 name="menu_emergency_information_txt">အရေးပေါ်အချက်အလက်</string>
+</resources>
diff --git a/res/values-night/colors.xml b/res/values-night/colors.xml
new file mode 100644
index 0000000..fc5bb30
--- /dev/null
+++ b/res/values-night/colors.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ * SPDX-License-Identifier: Apache-2.0
+ * Copyright (C) 2020 The LineageOS Project
+-->
+<resources>
+ <!-- Background color of pinned header items. -->
+ <color name="list_item_pinned_header_color">@*android:color/system_neutral1_900</color>
+
+ <!-- Color of contact name in list. -->
+ <color name="contact_list_name_text_color">#dadada</color>
+
+ <!-- Color of the background of the contact detail and editor pages -->
+ <color name="background_primary">@*android:color/system_neutral1_900</color>
+ <color name="contact_all_list_background_color">@*android:color/system_neutral1_900</color>
+
+ <color name="fab_color">@android:color/system_accent1_100</color>
+</resources>
diff --git a/res/values-nl/lineage_strings.xml b/res/values-nl/lineage_strings.xml
new file mode 100644
index 0000000..1bbddf0
--- /dev/null
+++ b/res/values-nl/lineage_strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2018 The LineageOS Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR 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 name="menu_emergency_information_txt">Informatie bij noodgevallen</string>
+ <string name="call_via_template">Bellen via <xliff:g id="account">%1$s</xliff:g></string>
+</resources>
diff --git a/res/values-pl/lineage_strings.xml b/res/values-pl/lineage_strings.xml
new file mode 100644
index 0000000..b6e6c8d
--- /dev/null
+++ b/res/values-pl/lineage_strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2018 The LineageOS Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR 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 name="menu_emergency_information_txt">Informacje alarmowe</string>
+ <string name="call_via_template">Zadzwoń przez <xliff:g id="account">%1$s</xliff:g></string>
+</resources>
diff --git a/res/values-pt-rBR/lineage_strings.xml b/res/values-pt-rBR/lineage_strings.xml
new file mode 100644
index 0000000..f105d9c
--- /dev/null
+++ b/res/values-pt-rBR/lineage_strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2018 The LineageOS Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR 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 name="menu_emergency_information_txt">Informações de emergência</string>
+ <string name="call_via_template">Chamar via <xliff:g id="account">%1$s</xliff:g></string>
+</resources>
diff --git a/res/values-pt-rPT/lineage_strings.xml b/res/values-pt-rPT/lineage_strings.xml
new file mode 100644
index 0000000..785c578
--- /dev/null
+++ b/res/values-pt-rPT/lineage_strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2018 The LineageOS Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR 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 name="menu_emergency_information_txt">Informações de emergência</string>
+ <string name="call_via_template">Chamar através de <xliff:g id="account">%1$s</xliff:g></string>
+</resources>
diff --git a/res/values-ro/lineage_strings.xml b/res/values-ro/lineage_strings.xml
new file mode 100644
index 0000000..81d197b
--- /dev/null
+++ b/res/values-ro/lineage_strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2018 The LineageOS Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR 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 name="menu_emergency_information_txt">Informații de urgență</string>
+ <string name="call_via_template">Apel prin <xliff:g id="account">%1$s</xliff:g></string>
+</resources>
diff --git a/res/values-ru/lineage_strings.xml b/res/values-ru/lineage_strings.xml
new file mode 100644
index 0000000..4ab2c17
--- /dev/null
+++ b/res/values-ru/lineage_strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2018 The LineageOS Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR 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 name="menu_emergency_information_txt">Данные для экстренных ситуаций</string>
+ <string name="call_via_template">Позвонить через <xliff:g id="account">%1$s</xliff:g></string>
+</resources>
diff --git a/res/values-sk/lineage_strings.xml b/res/values-sk/lineage_strings.xml
new file mode 100644
index 0000000..829a7fa
--- /dev/null
+++ b/res/values-sk/lineage_strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2018 The LineageOS Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR 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 name="menu_emergency_information_txt">Informácie pre prípad núdze</string>
+ <string name="call_via_template">Hovor pomocou <xliff:g id="name">%1$s </xliff:g></string>
+</resources>
diff --git a/res/values-sl/lineage_strings.xml b/res/values-sl/lineage_strings.xml
new file mode 100644
index 0000000..bd389f4
--- /dev/null
+++ b/res/values-sl/lineage_strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2018 The LineageOS Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR 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 name="menu_emergency_information_txt">Podatki za nujne primere</string>
+ <string name="call_via_template">Kliči prek <xliff:g id="account">%1$s</xliff:g></string>
+</resources>
diff --git a/res/values-sq/lineage_strings.xml b/res/values-sq/lineage_strings.xml
new file mode 100644
index 0000000..c48885c
--- /dev/null
+++ b/res/values-sq/lineage_strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2018 The LineageOS Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR 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 name="menu_emergency_information_txt">Informacion rreth urgjencës</string>
+ <string name="call_via_template">Telefono nga <xliff:g id="account">%1$s</xliff:g></string>
+</resources>
diff --git a/res/values-sv/lineage_strings.xml b/res/values-sv/lineage_strings.xml
new file mode 100644
index 0000000..83c9af0
--- /dev/null
+++ b/res/values-sv/lineage_strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2018 The LineageOS Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR 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 name="menu_emergency_information_txt">Krisinformation</string>
+ <string name="call_via_template">Ring via <xliff:g id="account">%1$s</xliff:g></string>
+</resources>
diff --git a/res/values-th/lineage_strings.xml b/res/values-th/lineage_strings.xml
new file mode 100644
index 0000000..a2fae88
--- /dev/null
+++ b/res/values-th/lineage_strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2018 The LineageOS Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR 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 name="menu_emergency_information_txt">ข้อมูลฉุกเฉิน</string>
+ <string name="call_via_template">โทรผ่าน <xliff:g id="account">%1$s</xliff:g></string>
+</resources>
diff --git a/res/values-tr/lineage_strings.xml b/res/values-tr/lineage_strings.xml
new file mode 100644
index 0000000..6b9e049
--- /dev/null
+++ b/res/values-tr/lineage_strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2018 The LineageOS Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR 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 name="menu_emergency_information_txt">Acil durum bilgisi</string>
+ <string name="call_via_template"><xliff:g id="account">%1$s</xliff:g> ile ara</string>
+</resources>
diff --git a/res/values-uk/lineage_strings.xml b/res/values-uk/lineage_strings.xml
new file mode 100644
index 0000000..b1ffe20
--- /dev/null
+++ b/res/values-uk/lineage_strings.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2018 The LineageOS Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR 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 name="menu_emergency_information_txt">Дані для екстр. випадків</string>
+</resources>
diff --git a/res/values-v27/styles.xml b/res/values-v27/styles.xml
new file mode 100644
index 0000000..e821cc1
--- /dev/null
+++ b/res/values-v27/styles.xml
@@ -0,0 +1,126 @@
+<resources>
+
+ <style name="PeopleTheme" parent="@android:style/Theme.Material.Light.DarkActionBar">
+ <item name="android:forceDarkAllowed">true</item>
+ <item name="android:actionBarStyle">@style/ContactsActionBarStyle</item>
+ <!-- Style for the overflow button in the actionbar. -->
+ <item name="android:actionOverflowButtonStyle">@style/ContactsActionBarOverflowQP</item>
+ <item name="android:actionModeCloseDrawable">@drawable/quantum_ic_close_vd_theme_24</item>
+ <item name="android:textColorPrimary">@color/primary_text_color</item>
+ <item name="android:textColorSecondary">@color/secondary_text_color</item>
+ <item name="android:icon">@android:color/transparent</item>
+ <item name="android:listViewStyle">@style/ListViewStyle</item>
+ <item name="android:windowBackground">@color/background_primary</item>
+ <item name="android:colorPrimaryDark">@color/primary_color_dark</item>
+ <item name="android:colorPrimary">@color/primary_color</item>
+ <item name="android:colorAccent">@color/primary_color</item>
+ <item name="android:alertDialogTheme">@style/ContactsAlertDialogTheme</item>
+ <item name="list_item_height">@dimen/contact_browser_list_item_height</item>
+ <item name="list_section_header_height">24dip</item>
+ <item name="list_item_padding_top">
+ @dimen/contact_browser_list_item_padding_top_or_bottom
+ </item>
+ <item name="list_item_padding_right">32dp</item>
+ <item name="list_item_padding_bottom">
+ @dimen/contact_browser_list_item_padding_top_or_bottom
+ </item>
+ <item name="list_item_padding_left">0dp</item>
+ <item name="list_item_gap_between_image_and_text">
+ @dimen/contact_browser_list_item_gap_between_image_and_text
+ </item>
+ <item name="list_item_gap_between_label_and_data">5dip</item>
+ <item name="list_item_presence_icon_margin">4dip</item>
+ <item name="list_item_presence_icon_size">16dip</item>
+ <item name="list_item_photo_size">@dimen/contact_browser_list_item_photo_size</item>
+ <item name="list_item_profile_photo_size">70dip</item>
+ <item name="list_item_prefix_highlight_color">@color/people_app_theme_color</item>
+ <item name="list_item_background_color">@color/list_item_pinned_header_color</item>
+ <item name="list_item_header_text_color">@color/people_app_theme_color</item>
+ <item name="list_item_header_text_size">14sp</item>
+ <item name="list_item_header_height">30dip</item>
+ <item name="list_item_header_text_indent">8dip</item>
+ <item name="contact_browser_list_padding_left">0dip</item>
+ <item name="contact_browser_list_padding_right">0dip</item>
+ <item name="contact_browser_background">@color/background_primary</item>
+ <item name="list_item_text_indent">@dimen/contact_browser_list_item_text_indent</item>
+ <item name="list_item_text_offset_top">-2dp</item>
+ <item name="list_item_avatar_offset_top">-1dp</item>
+ <!-- Favorites -->
+ <item name="favorites_padding_bottom">0dip</item>
+ <!-- Popup menu -->
+ <item name="android:popupMenuStyle">@style/PopupMenuStyle</item>
+ <item name="android:navigationBarColor">@color/navigation_bar_bg</item>
+ <item name="android:navigationBarDividerColor">@color/navigation_bar_divider</item>
+ <item name="android:windowLightNavigationBar">true</item>
+ </style>
+
+ <style name="PeopleThemeAppCompat" parent="Theme.AppCompat.Light.DarkActionBar">
+ <item name="android:forceDarkAllowed">true</item>
+ <!-- Styles that require AppCompat compatibility, remember to update both sets -->
+ <item name="android:actionBarStyle">@style/ContactsActionBarStyleAppCompat</item>
+ <item name="actionBarStyle">@style/ContactsActionBarStyleAppCompat</item>
+ <item name="android:actionButtonStyle">@style/ContactsActionButtonStyle</item>
+ <item name="actionButtonStyle">@style/ContactsActionButtonStyle</item>
+ <!-- Style for the overflow button in the actionbar. -->
+ <item name="android:actionOverflowButtonStyle">@style/ContactsActionBarOverflowQP</item>
+ <item name="actionOverflowButtonStyle">@style/ContactsActionBarOverflowQP</item>
+ <item name="toolbarNavigationButtonStyle">@style/ContactToolbarNavigationButtonStyle</item>
+ <item name="android:actionModeCloseDrawable">@drawable/quantum_ic_close_vd_theme_24</item>
+ <item name="android:textColorPrimary">@color/primary_text_color</item>
+ <item name="android:textColorSecondary">@color/secondary_text_color</item>
+ <item name="android:icon">@android:color/transparent</item>
+ <item name="android:listViewStyle">@style/ListViewStyle</item>
+ <item name="android:windowBackground">@color/background_primary</item>
+ <item name="android:colorPrimaryDark">@color/primary_color_dark</item>
+ <item name="colorPrimaryDark">@color/primary_color_dark</item>
+ <item name="android:colorPrimary">@color/primary_color</item>
+ <item name="colorPrimary">@color/primary_color</item>
+ <item name="android:colorAccent">@color/primary_color</item>
+ <item name="colorAccent">@color/primary_color</item>
+ <item name="android:alertDialogTheme">@style/ContactsAlertDialogThemeAppCompat</item>
+ <item name="alertDialogTheme">@style/ContactsAlertDialogThemeAppCompat</item>
+ <item name="list_item_height">@dimen/contact_browser_list_item_height</item>
+ <item name="list_section_header_height">24dip</item>
+ <item name="list_item_padding_top">
+ @dimen/contact_browser_list_item_padding_top_or_bottom
+ </item>
+ <item name="list_item_padding_right">32dp</item>
+ <item name="list_item_padding_bottom">
+ @dimen/contact_browser_list_item_padding_top_or_bottom
+ </item>
+ <item name="list_item_padding_left">0dp</item>
+ <item name="list_item_gap_between_image_and_text">
+ @dimen/contact_browser_list_item_gap_between_image_and_text
+ </item>
+ <item name="list_item_gap_between_indexer_and_image">
+ @dimen/contact_browser_list_item_gap_between_indexer_and_image
+ </item>
+ <item name="list_item_gap_between_label_and_data">5dip</item>
+ <item name="list_item_presence_icon_margin">4dip</item>
+ <item name="list_item_presence_icon_size">16dip</item>
+ <item name="list_item_photo_size">@dimen/contact_browser_list_item_photo_size</item>
+ <item name="list_item_profile_photo_size">70dip</item>
+ <item name="list_item_prefix_highlight_color">@color/people_app_theme_color</item>
+ <item name="list_item_background_color">@color/list_item_pinned_header_color</item>
+ <item name="list_item_header_text_color">@color/people_app_theme_color</item>
+ <item name="list_item_header_text_size">14sp</item>
+ <item name="list_item_header_height">30dip</item>
+ <item name="list_item_header_text_indent">8dip</item>
+ <item name="contact_browser_list_padding_left">0dip</item>
+ <item name="contact_browser_list_padding_right">0dip</item>
+ <item name="contact_browser_background">@color/background_primary</item>
+ <item name="list_item_text_indent">@dimen/contact_browser_list_item_text_indent</item>
+ <item name="list_item_text_offset_top">-2dp</item>
+ <item name="list_item_avatar_offset_top">-1dp</item>
+ <!-- Favorites -->
+ <item name="favorites_padding_bottom">0dip</item>
+ <item name="drawerArrowStyle">@style/DrawerArrowStyle</item>
+ <!-- Popup menu -->
+ <item name="android:popupMenuStyle">@style/PopupMenuStyleAppCompat</item>
+ <item name="popupMenuStyle">@style/PopupMenuStyleAppCompat</item>
+ <item name="android:navigationBarColor">@color/navigation_bar_bg</item>
+ <item name="android:navigationBarDividerColor">@color/navigation_bar_divider</item>
+ <item name="android:windowLightNavigationBar">true</item>
+ </style>
+
+</resources>
diff --git a/res/values-vi/lineage_strings.xml b/res/values-vi/lineage_strings.xml
new file mode 100644
index 0000000..28206f7
--- /dev/null
+++ b/res/values-vi/lineage_strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2018 The LineageOS Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR 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 name="menu_emergency_information_txt">Thông tin khẩn cấp</string>
+ <string name="call_via_template">Gọi qua <xliff:g id="account">%1$s</xliff:g></string>
+</resources>
diff --git a/res/values-zh-rCN/lineage_strings.xml b/res/values-zh-rCN/lineage_strings.xml
new file mode 100644
index 0000000..0509d14
--- /dev/null
+++ b/res/values-zh-rCN/lineage_strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2018 The LineageOS Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR 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 name="menu_emergency_information_txt">急救信息</string>
+ <string name="call_via_template">通过 <xliff:g id="account">%1$s</xliff:g> 呼叫</string>
+</resources>
diff --git a/res/values-zh-rTW/lineage_strings.xml b/res/values-zh-rTW/lineage_strings.xml
new file mode 100644
index 0000000..6e1d87a
--- /dev/null
+++ b/res/values-zh-rTW/lineage_strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2018 The LineageOS Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR 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 name="menu_emergency_information_txt">緊急資訊</string>
+ <string name="call_via_template">使用 <xliff:g id="account">%1$s</xliff:g> 撥打</string>
+</resources>
diff --git a/res/values/colors.xml b/res/values/colors.xml
index aeba877..429695e 100644
--- a/res/values/colors.xml
+++ b/res/values/colors.xml
@@ -28,7 +28,7 @@
<color name="quickcontact_entry_sub_header_text_color">#737373</color>
<color name="quickcontact_entry_header_text_color">#202020</color>
- <color name="action_bar_background">#2a56c6</color>
+ <color name="action_bar_background">@*android:color/system_accent1_600</color>
<color name="nav_item_selected_background">#0f000000</color>
@@ -40,19 +40,20 @@
<!-- Color of the status bar above the contextual selection bar. -->
<color name="contextual_selection_bar_status_bar_color">#bababa</color>
- <color name="primary_color_dark">#1c3aa9</color>
- <color name="primary_color">#2a56c6</color>
+ <color name="primary_color_dark">@*android:color/system_accent1_700</color>
+ <color name="primary_color">@*android:color/system_accent1_600</color>
- <color name="group_primary_color_dark">#546E7A</color>
- <color name="group_primary_color">#607D8B</color>
+ <color name="group_primary_color_dark">@*android:color/system_neutral1_900</color>
+ <color name="group_primary_color">@*android:color/system_neutral1_800</color>
<!-- Color of the selected tab underline -->
- <color name="contacts_accent_color">#FFFFFF</color>
+ <color name="contacts_accent_color">@*android:color/system_neutral1_0</color>
<color name="floating_action_button_icon_color">@color/contacts_accent_color</color>
+ <color name="fab_color">@android:color/system_accent1_600</color>
<!-- Horizontal separator line should be 12% dark in the light theme. -->
- <color name="divider_line_color_light">#e0e0e0</color>
+ <color name="divider_line_color_light">@*android:color/transparent</color>
<!-- Color of the text on an ExpandingEntryCard button -->
<color name="expanding_entry_card_button_text_color">@android:color/black</color>
@@ -87,12 +88,6 @@
<!-- Color of background of all empty states. -->
<color name="empty_state_background">#efefef</color>
- <!-- Colors of swipeRefreshLayout's spinning circle. -->
- <color name="swipe_refresh_color1">#0f9d58</color>
- <color name="swipe_refresh_color2">#dd4b37</color>
- <color name="swipe_refresh_color3">#4285f4</color>
- <color name="swipe_refresh_color4">#f4b400</color>
-
<!-- Color of ripples used for views with dark backgrounds -->
<color name="ripple_material_dark">#a0ffffff</color>
@@ -105,10 +100,10 @@
<color name="section_header_text_color">@color/dialtacts_theme_color</color>
<!-- Color of the theme of the People app -->
- <color name="people_app_theme_color">#363636</color>
+ <color name="people_app_theme_color">@*android:color/system_neutral1_800</color>
<!-- Color of the theme of the Dialer app -->
- <color name="dialtacts_theme_color">#2a56c6</color>
+ <color name="dialtacts_theme_color">@*android:color/system_accent1_600</color>
<!-- Color of image view placeholder. -->
<color name="image_placeholder">#DDDDDD</color>
@@ -132,39 +127,35 @@
These colors are also used by MaterialColorMapUtils to generate primary activity colors.
-->
<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>
+ <item>@*android:color/system_accent1_300</item>
+ <item>@*android:color/system_accent2_300</item>
+ <item>@*android:color/system_accent3_300</item>
+ <item>@*android:color/system_accent1_400</item>
+ <item>@*android:color/system_accent2_400</item>
+ <item>@*android:color/system_accent3_400</item>
+ <item>@*android:color/system_accent1_500</item>
+ <item>@*android:color/system_accent2_500</item>
+ <item>@*android:color/system_accent3_500</item>
+ <item>@*android:color/system_accent1_600</item>
+ <item>@*android:color/system_accent2_600</item>
+ <item>@*android:color/system_accent3_600</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">
- <item>#C53929</item>
- <item>#C2185B</item>
- <item>#7B1FA2</item>
- <item>#512DA8</item>
- <item>#303F9F</item>
- <item>#3367D6</item>
- <item>#0277BD</item>
- <item>#006064</item>
- <item>#00796B</item>
- <item>#0B8043</item>
- <item>#33691E</item>
- <item>#E65100</item>
- <item>#E64A19</item>
- <item>#424242</item>
+ <item>@*android:color/system_accent1_500</item>
+ <item>@*android:color/system_accent2_500</item>
+ <item>@*android:color/system_accent3_500</item>
+ <item>@*android:color/system_accent1_600</item>
+ <item>@*android:color/system_accent2_600</item>
+ <item>@*android:color/system_accent3_600</item>
+ <item>@*android:color/system_accent1_700</item>
+ <item>@*android:color/system_accent2_700</item>
+ <item>@*android:color/system_accent3_700</item>
+ <item>@*android:color/system_accent1_800</item>
+ <item>@*android:color/system_accent2_800</item>
+ <item>@*android:color/system_accent3_800</item>
</array>
<!-- The default color used for tinting photos when no color can be extracted via Palette,
@@ -205,8 +196,8 @@
<color name="search_shortcut_icon_color">@color/dialtacts_theme_color</color>
<!-- Color of the background of the contact detail and editor pages -->
- <color name="background_primary">#f9f9f9</color>
- <color name="contact_all_list_background_color">#FFFFFF</color>
+ <color name="background_primary">@*android:color/system_neutral1_50</color>
+ <color name="contact_all_list_background_color">@*android:color/system_neutral1_0</color>
<!-- Text color used for character counter when the max limit has been exceeded -->
<color name="call_subject_limit_exceeded">#d1041c</color>
@@ -233,7 +224,7 @@
<color name="account_filter_text_color">@color/actionbar_text_color_black</color>
<color name="custom_filter_divider">#dbdbdb</color>
- <color name="material_star_pink">#f50057</color>
+ <color name="material_star_pink">@color/primary_color</color>
<!-- Primary text color in Contacts app -->
<color name="contacts_text_color">#333333</color>
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index 6d100ac..9bd8bbe 100644
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -125,7 +125,7 @@
<dimen name="first_card_marginTop">12dp</dimen>
<!-- Elevation of an ExpandingEntryCard, for the sake of shadow casting -->
- <dimen name="expanding_entry_card_elevation">2dp</dimen>
+ <dimen name="expanding_entry_card_elevation">0dp</dimen>
<!-- Elevation of the QuickContact's Toolbar, for the sake of shadow casting -->
<dimen name="quick_contact_toolbar_elevation">4.5dp</dimen>
@@ -160,7 +160,7 @@
<dimen name="expanding_entry_card_item_icon_margin_right">12dp</dimen>
<dimen name="expanding_entry_card_item_header_only_margin_top">6dp</dimen>
- <dimen name="expanding_entry_card_card_corner_radius">2dp</dimen>
+ <dimen name="expanding_entry_card_card_corner_radius">28dp</dimen>
<dimen name="expanding_entry_card_header_margin_bottom">2dp</dimen>
<!-- The top margin when the sub header and text views are both gone -->
<dimen name="expanding_entry_card_item_header_only_margin_bottom">2dp</dimen>
diff --git a/res/values/ids.xml b/res/values/ids.xml
index f22eaba..dce82b6 100644
--- a/res/values/ids.xml
+++ b/res/values/ids.xml
@@ -47,6 +47,9 @@
<!-- An ID to be used for tagging text for copy in legacy fields. -->
<item name="text_to_copy" type="id"/>
+ <!-- Menu ID for profile item -->
+ <item type="id" name="nav_myprofile" />
+
<!-- Menu group ID for settings and help & feedback -->
<item type="id" name="nav_misc" />
@@ -71,6 +74,9 @@
<!-- Menu ID for each filter menu item -->
<item type="id" name="nav_filter" />
+ <!-- Menu ID for ice item -->
+ <item type="id" name="nav_emergency" />
+
<!-- Menu ID for Settings menu -->
<item type="id" name="nav_settings" />
diff --git a/res/values/lineage_colors.xml b/res/values/lineage_colors.xml
new file mode 100644
index 0000000..6aee4d2
--- /dev/null
+++ b/res/values/lineage_colors.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2018 The LineageOS Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<resources>
+ <color name="navigation_bar_bg">@android:color/white</color>
+ <color name="navigation_bar_divider">#1f000000</color>
+</resources>
diff --git a/res/values/lineage_strings.xml b/res/values/lineage_strings.xml
new file mode 100644
index 0000000..97ccb8e
--- /dev/null
+++ b/res/values/lineage_strings.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2018 The LineageOS Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR 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">
+
+ <!--Explanation with icon of Drawer in Contacts. Your medical information ie. Date of birth, Bloodtype, allergic details can be recorded for reference. -->
+ <string name="menu_emergency_information_txt">Emergency information</string>
+
+ <string name="call_via_template">Call via <xliff:g id="account">%1$s</xliff:g></string>
+
+</resources>
\ No newline at end of file
diff --git a/res/values/styles.xml b/res/values/styles.xml
index ffd800f..d31ce80 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -89,14 +89,14 @@
<item name="android:popupMenuStyle">@style/PopupMenuStyle</item>
</style>
- <style name="LaunchScreenTheme" parent="Theme.AppCompat.Light.DarkActionBar">
+ <style name="LaunchScreenTheme" parent="Theme.AppCompat.DayNight.DarkActionBar">
<item name="android:windowBackground">@drawable/quantum_launchscreen_contacts</item>
- <!-- Ensure the status bar color matches the background (grey 500) -->
- <!-- TODO(yaolu): Switch to use quantum_grey if in Google3 -->
- <item name="android:colorPrimaryDark">#9e9e9e</item>
+ <item name="colorPrimaryDark">@color/primary_color_dark</item>
+ <item name="colorPrimary">@color/primary_color</item>
</style>
<style name="PeopleActivityTheme" parent="@style/PeopleThemeAppCompat">
+ <item name="android:forceDarkAllowed">true</item>
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
<item name="android:listSelector">?android:attr/listChoiceBackgroundIndicator</item>
@@ -338,11 +338,13 @@
since the Alert dialog is private. They are identical anyway. -->
<style name="ContactsAlertDialogTheme" parent="@android:style/Theme.Material.Light.Dialog">
<item name="android:colorAccent">@color/primary_color</item>
+ <item name="android:windowBackground">@drawable/dialog_background</item>
</style>
<style name="ContactsAlertDialogThemeAppCompat" parent="Theme.AppCompat.Light.Dialog.MinWidth">
<item name="android:colorAccent">@color/primary_color</item>
<item name="colorAccent">@color/primary_color</item>
+ <item name="android:windowBackground">@drawable/dialog_background</item>
</style>
<style name="EditKindIconStyle">
@@ -593,4 +595,13 @@
<item name="android:paddingStart">@dimen/drawer_side_padding</item>
<item name="android:paddingEnd">@dimen/drawer_label_header_end_padding</item>
</style>
+
+ <style name="DrawerSecondLineTitleTextStyle" parent="DrawerItemTextStyle">
+ <item name="android:layout_width">match_parent</item>
+ </style>
+
+ <style name="DrawerSecondLineSummaryTextStyle" parent="DrawerItemTextStyle">
+ <item name="android:textColor">@color/quantum_black_secondary_text</item>
+ <item name="android:layout_width">match_parent</item>
+ </style>
</resources>
diff --git a/src/com/android/contacts/CallUtil.java b/src/com/android/contacts/CallUtil.java
index 0f09df9..d4d80df 100644
--- a/src/com/android/contacts/CallUtil.java
+++ b/src/com/android/contacts/CallUtil.java
@@ -38,6 +38,7 @@
import com.android.contactsbind.experiments.Flags;
import com.android.phone.common.PhoneConstants;
+import java.util.ArrayList;
import java.util.List;
/**
@@ -189,6 +190,26 @@
}
/**
+ * Returns a list of phone accounts that are able to call to numbers with the supplied scheme
+ */
+ public static List<PhoneAccount> getCallCapablePhoneAccounts(Context context, String scheme) {
+ if (!PermissionsUtil.hasPermission(context,
+ android.Manifest.permission.READ_PHONE_STATE)) {
+ return null;
+ }
+ TelecomManager tm = (TelecomManager) context.getSystemService(Context.TELECOM_SERVICE);
+ final ArrayList<PhoneAccount> accounts = new ArrayList<>();
+
+ for (PhoneAccountHandle handle : tm.getCallCapablePhoneAccounts()) {
+ final PhoneAccount account = tm.getPhoneAccount(handle);
+ if (account != null && account.supportsUriScheme(scheme)) {
+ accounts.add(account);
+ }
+ }
+ return accounts;
+ }
+
+ /**
* Determines if one of the call capable phone accounts defined supports calling with a subject
* specified.
*
diff --git a/src/com/android/contacts/activities/PeopleActivity.java b/src/com/android/contacts/activities/PeopleActivity.java
index ceb3d59..62dc48e 100644
--- a/src/com/android/contacts/activities/PeopleActivity.java
+++ b/src/com/android/contacts/activities/PeopleActivity.java
@@ -1214,6 +1214,34 @@
onFilterMenuItemClicked(intent);
}
+ /*
+ * Behavior when select MyInfo on Navigation drawer.
+ * Launch in the same way as from Settings->MyInfo.
+ * Refer to DisplayOptionsPreferenceFragment's onPreferenceClick.
+ */
+ @Override
+ public void onProfileViewSelected(long profileContactId) {
+ if (profileContactId != -1) {
+ final Uri uri = ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI,
+ profileContactId);
+ ImplicitIntentsUtil.startQuickContact(this, uri, ScreenType.ME_CONTACT);
+ } else {
+ final Intent intent = new Intent(Intent.ACTION_INSERT,
+ ContactsContract.Contacts.CONTENT_URI);
+ intent.putExtra(ContactEditorFragment.INTENT_EXTRA_NEW_LOCAL_PROFILE, true);
+ ImplicitIntentsUtil.startActivityInApp(this, intent);
+ }
+ }
+
+ /*
+ * Behavior when select Emergency information on Navigation drawer.
+ */
+ @Override
+ public void onEmergencyViewSelected() {
+ ImplicitIntentsUtil.startActivityOutsideApp(this,
+ ImplicitIntentsUtil.getIntentForEmergencyInfo(this));
+ }
+
public boolean isGroupView() {
return mCurrentView == ContactsView.GROUP_VIEW;
}
diff --git a/src/com/android/contacts/drawer/DrawerAdapter.java b/src/com/android/contacts/drawer/DrawerAdapter.java
index b5a1ea7..f6898b5 100644
--- a/src/com/android/contacts/drawer/DrawerAdapter.java
+++ b/src/com/android/contacts/drawer/DrawerAdapter.java
@@ -18,6 +18,8 @@
import android.app.Activity;
import android.graphics.PorterDuff;
+import android.net.Uri;
+import android.provider.ContactsContract.DisplayNameSources;
import androidx.annotation.LayoutRes;
import android.view.LayoutInflater;
import android.view.View;
@@ -26,12 +28,15 @@
import android.widget.ImageView;
import android.widget.TextView;
+import com.android.contacts.ContactPhotoManager;
import com.android.contacts.R;
import com.android.contacts.activities.PeopleActivity.ContactsView;
import com.android.contacts.group.GroupListItem;
import com.android.contacts.list.ContactListFilter;
import com.android.contacts.model.account.AccountDisplayInfo;
import com.android.contacts.model.account.AccountDisplayInfoFactory;
+import com.android.contacts.profile.ProfileItem;
+import com.android.contacts.util.ImplicitIntentsUtil;
import com.android.contacts.util.SharedPreferenceUtil;
import com.android.contactsbind.HelpUtils;
import com.android.contactsbind.ObjectFactory;
@@ -49,9 +54,11 @@
private static final int VIEW_TYPE_CREATE_LABEL = 5;
private static final int VIEW_TYPE_NAV_SPACER = 6;
private static final int VIEW_TYPE_NAV_DIVIDER = 7;
+ private static final int VIEW_TYPE_PROFILE_ENTRY = 8;
+ private static final int VIEW_TYPE_EMERGENCY_ITEM = 9;
// This count must be updated if we add more view types.
- private static final int VIEW_TYPE_COUNT = 9;
+ private static final int VIEW_TYPE_COUNT = 11;
private static final int TYPEFACE_STYLE_ACTIVATE = R.style.DrawerItemTextActiveStyle;
private static final int TYPEFACE_STYLE_INACTIVE = R.style.DrawerItemTextInactiveStyle;
@@ -67,21 +74,28 @@
// Adapter elements, ordered in this way mItemsList. The ordering is based on:
// [Navigation spacer item]
+ // [Profile Entry item]
// [Primary items] (Contacts, Suggestions)
// [Group Header]
// [Groups]
// [Create Label button]
// [Account Header]
// [Accounts]
+ // [Emergency information]
+ // [Emergency information spacer item]
// [Misc items] (a divider, Settings, Help & Feedback)
// [Navigation spacer item]
private NavSpacerItem mNavSpacerItem = null;
+ private ProfileEntryItem mProfileEntryItem = null;
+ private DividerItem mProfileEntryItemDivider = null;
private List<PrimaryItem> mPrimaryItems = new ArrayList<>();
private HeaderItem mGroupHeader = null;
private List<GroupEntryItem> mGroupEntries = new ArrayList<>();
private BaseDrawerItem mCreateLabelButton = null;
private HeaderItem mAccountHeader = null;
private List<AccountEntryItem> mAccountEntries = new ArrayList<>();
+ private BaseDrawerItem mEmergencyItem = null;
+ private DividerItem mEmergencyItemDivider = null;
private List<BaseDrawerItem> mMiscItems = new ArrayList<>();
private List<BaseDrawerItem> mItemsList = new ArrayList<>();
@@ -97,6 +111,7 @@
private void initializeDrawerMenuItems() {
// Spacer item for dividing sections in drawer
mNavSpacerItem = new NavSpacerItem(R.id.nav_drawer_spacer);
+ mProfileEntryItemDivider = new DividerItem();
// Primary items
mPrimaryItems.add(new PrimaryItem(R.id.nav_all_contacts, R.string.contactsList,
R.drawable.quantum_ic_account_circle_vd_theme_24, ContactsView.ALL_CONTACTS));
@@ -111,6 +126,11 @@
// Create Label Button
mCreateLabelButton = new BaseDrawerItem(VIEW_TYPE_CREATE_LABEL, R.id.nav_create_label,
R.string.menu_new_group_action_bar, R.drawable.quantum_ic_add_vd_theme_24);
+ // Emergency information Item
+ mEmergencyItem = new BaseDrawerItem(VIEW_TYPE_EMERGENCY_ITEM, R.id.nav_emergency,
+ R.string.menu_emergency_information_txt,
+ R.drawable.quantum_ic_drawer_emergency_info_24);
+ mEmergencyItemDivider = new DividerItem();
// Misc Items
mMiscItems.add(new DividerItem());
mMiscItems.add(new MiscItem(R.id.nav_settings, R.string.menu_settings,
@@ -125,6 +145,10 @@
private void rebuildItemsList() {
mItemsList.clear();
mItemsList.add(mNavSpacerItem);
+ if (mProfileEntryItem != null) {
+ mItemsList.add(mProfileEntryItem);
+ mItemsList.add(mProfileEntryItemDivider);
+ }
mItemsList.addAll(mPrimaryItems);
if (mAreGroupWritableAccountsAvailable || !mGroupEntries.isEmpty()) {
mItemsList.add(mGroupHeader);
@@ -137,10 +161,19 @@
mItemsList.add(mAccountHeader);
}
mItemsList.addAll(mAccountEntries);
+ if (ImplicitIntentsUtil.getIntentForEmergencyInfo(mActivity) != null) {
+ mItemsList.add(mEmergencyItemDivider);
+ mItemsList.add(mEmergencyItem);
+ }
mItemsList.addAll(mMiscItems);
mItemsList.add(mNavSpacerItem);
}
+ public void setProfile(ProfileItem profileItem) {
+ mProfileEntryItem = new ProfileEntryItem(R.id.nav_myprofile, profileItem);
+ notifyChangeAndRebuildList();
+ }
+
public void setGroups(List<GroupListItem> groupListItems, boolean areGroupWritable) {
final ArrayList<GroupEntryItem> groupEntries = new ArrayList<GroupEntryItem>();
for (GroupListItem group : groupListItems) {
@@ -188,6 +221,8 @@
public View getView(int position, View view, ViewGroup viewGroup) {
final BaseDrawerItem drawerItem = getItem(position);
switch (drawerItem.viewType) {
+ case VIEW_TYPE_PROFILE_ENTRY:
+ return getProfileEntryView((ProfileEntryItem) drawerItem, view, viewGroup);
case VIEW_TYPE_PRIMARY_ITEM:
return getPrimaryItemView((PrimaryItem) drawerItem, view, viewGroup);
case VIEW_TYPE_HEADER_ITEM:
@@ -204,6 +239,8 @@
return getBaseItemView(R.layout.nav_drawer_spacer, view, viewGroup);
case VIEW_TYPE_NAV_DIVIDER:
return getBaseItemView(R.layout.drawer_horizontal_divider, view, viewGroup);
+ case VIEW_TYPE_EMERGENCY_ITEM:
+ return getDrawerItemView(drawerItem, view, viewGroup);
}
throw new IllegalStateException("Unknown drawer item " + drawerItem);
}
@@ -243,6 +280,52 @@
return result;
}
+ private View getProfileEntryView(ProfileEntryItem item, View result, ViewGroup parent) {
+ if (result == null) {
+ result = mInflater.inflate(R.layout.drawer_secondline_item, parent, false);
+ result.setId(item.id);
+ }
+
+ final ProfileItem profile = item.profile;
+
+ final ImageView icon = (ImageView) result.findViewById(R.id.icon);
+ icon.setScaleType(ImageView.ScaleType.CENTER);
+ if (profile.HasProfile()) {
+ if (profile.getPhotoId() != 0) {
+ icon.setScaleType(ImageView.ScaleType.FIT_CENTER);
+ getPhotoLoader().loadThumbnail(icon, profile.getPhotoId(), false, true, null);
+ } else if (profile.getPhotoUri() != null) {
+ icon.setScaleType(ImageView.ScaleType.FIT_CENTER);
+ getPhotoLoader().loadDirectoryPhoto(icon, Uri.parse(profile.getPhotoUri()), false,
+ true, null);
+ } else {
+ // There are cases where the image cache may remain, so update once by default.
+ getPhotoLoader().loadDirectoryPhoto(icon, null, false, true, null);
+ icon.setImageResource(R.drawable.quantum_ic_drawer_my_info_32);
+ }
+ } else {
+ // There are cases where the image cache may remain, so update once by default.
+ getPhotoLoader().loadDirectoryPhoto(icon, null, false, true, null);
+ icon.setImageResource(R.drawable.quantum_ic_drawer_my_info_32);
+ }
+
+ final TextView title = (TextView) result.findViewById(R.id.title);
+ title.setText(mActivity.getString(R.string.settings_my_info_title));
+ final TextView summary = (TextView) result.findViewById(R.id.summary);
+ if (profile.HasProfile()) {
+ summary.setText(profile.getDisplayName());
+ if (profile.getDisplayNameSource() == DisplayNameSources.PHONE) {
+ summary.setTextDirection(TextView.TEXT_DIRECTION_LTR);
+ }
+ } else {
+ summary.setText(mActivity.getString(R.string.set_up_profile));
+ }
+ // Apply setTextAppearance to title only.
+ updateSelectedStatus(title, icon, false);
+ result.setTag(profile.HasProfile() ? profile.getContactId() : -1);
+ return result;
+ }
+
private View getGroupEntryView(GroupEntryItem item, View result, ViewGroup parent) {
if (result == null || !(result.getTag() instanceof GroupEntryItem)) {
result = mInflater.inflate(R.layout.drawer_item, parent, false);
@@ -274,7 +357,8 @@
final AccountDisplayInfo displayableAccount =
mAccountDisplayFactory.getAccountDisplayInfoFor(item.account);
final TextView textView = ((TextView) result.findViewById(R.id.title));
- textView.setText(displayableAccount.getNameLabel());
+ textView.setText(mActivity.getPackageName().equals(account.accountType) ?
+ mActivity.getString(R.string.account_phone) : displayableAccount.getNameLabel());
final boolean activated = account.equals(mSelectedAccount)
&& mSelectedView == ContactsView.ACCOUNT_VIEW;
textView.setTextAppearance(mActivity, activated
@@ -412,6 +496,16 @@
}
}
+ // Navigation drawer item for a profile.
+ public static class ProfileEntryItem extends BaseDrawerItem {
+ private final ProfileItem profile;
+
+ public ProfileEntryItem(int id, ProfileItem profileItem) {
+ super(VIEW_TYPE_PROFILE_ENTRY, id, /* textResId */ 0, /* iconResId */ 0);
+ this.profile = profileItem;
+ }
+ }
+
// Navigation drawer item for a group.
public static class GroupEntryItem extends BaseDrawerItem {
private final GroupListItem group;
@@ -431,4 +525,8 @@
this.account = account;
}
}
+
+ private ContactPhotoManager getPhotoLoader() {
+ return ContactPhotoManager.getInstance(mActivity);
+ }
}
diff --git a/src/com/android/contacts/drawer/DrawerFragment.java b/src/com/android/contacts/drawer/DrawerFragment.java
index 485513a..2bcfa25 100644
--- a/src/com/android/contacts/drawer/DrawerFragment.java
+++ b/src/com/android/contacts/drawer/DrawerFragment.java
@@ -26,6 +26,8 @@
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
+import android.provider.ContactsContract.DisplayNameSources;
+import android.text.TextUtils;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
@@ -46,6 +48,8 @@
import com.android.contacts.model.account.AccountInfo;
import com.android.contacts.model.account.AccountsLoader;
import com.android.contacts.model.account.AccountsLoader.AccountsListener;
+import com.android.contacts.profile.ProfileLoader;
+import com.android.contacts.profile.ProfileLoader.ProfileQuery;
import com.android.contacts.util.AccountFilterUtil;
import com.android.contactsbind.ObjectFactory;
@@ -58,6 +62,7 @@
private static final int LOADER_GROUPS = 1;
private static final int LOADER_ACCOUNTS = 2;
private static final int LOADER_FILTERS = 3;
+ private static final int LOADER_PROFILE = 4;
private static final String KEY_CONTACTS_VIEW = "contactsView";
private static final String KEY_SELECTED_GROUP = "selectedGroup";
@@ -142,6 +147,25 @@
}
};
+ private final LoaderManager.LoaderCallbacks<Cursor> mProfileLoaderListener =
+ new LoaderManager.LoaderCallbacks<Cursor>() {
+ @Override
+ public CursorLoader onCreateLoader(int id, Bundle args) {
+ return new ProfileLoader(getActivity(),
+ ProfileLoader.getProjection(getActivity()));
+ }
+
+ @Override
+ public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
+ // Sending MyInfo information to DrawerAdapter
+ // when MyInfo exists(User registered MyInfo) or not.
+ mDrawerAdapter.setProfile(ProfileLoader.getProfileItem(getActivity(), data));
+ }
+
+ public void onLoaderReset(Loader<Cursor> loader) {
+ }
+ };
+
public DrawerFragment() {}
@Override
@@ -221,6 +245,7 @@
AccountsLoader.loadAccounts(this, LOADER_ACCOUNTS,
AccountTypeManager.AccountFilter.GROUPS_WRITABLE);
getLoaderManager().initLoader(LOADER_GROUPS, null, mGroupListLoaderListener);
+ getLoaderManager().initLoader(LOADER_PROFILE, null, mProfileLoaderListener);
}
@Override
@@ -236,7 +261,10 @@
return;
}
final int viewId = v.getId();
- if (viewId == R.id.nav_all_contacts) {
+ if (viewId == R.id.nav_myprofile) {
+ final long profileContactId = (long) v.getTag();
+ mListener.onProfileViewSelected(profileContactId);
+ } else if (viewId == R.id.nav_all_contacts) {
mListener.onContactsViewSelected(ContactsView.ALL_CONTACTS);
setNavigationItemChecked(ContactsView.ALL_CONTACTS);
} else if (viewId == R.id.nav_assistant) {
@@ -254,6 +282,8 @@
setNavigationItemChecked(ContactsView.ACCOUNT_VIEW);
} else if (viewId == R.id.nav_create_label) {
mListener.onCreateLabelButtonClicked();
+ } else if (viewId == R.id.nav_emergency) {
+ mListener.onEmergencyViewSelected();
} else if (viewId == R.id.nav_settings) {
mListener.onOpenSettings();
} else if (viewId == R.id.nav_help) {
@@ -313,6 +343,8 @@
void onCreateLabelButtonClicked();
void onOpenSettings();
void onLaunchHelpFeedback();
+ void onProfileViewSelected(long profileContactId);
+ void onEmergencyViewSelected();
}
private class WindowInsetsListener implements View.OnApplyWindowInsetsListener {
diff --git a/src/com/android/contacts/lettertiles/LetterTileDrawable.java b/src/com/android/contacts/lettertiles/LetterTileDrawable.java
index b80fd4f..e5ef2ca 100644
--- a/src/com/android/contacts/lettertiles/LetterTileDrawable.java
+++ b/src/com/android/contacts/lettertiles/LetterTileDrawable.java
@@ -160,7 +160,6 @@
sPaint.getTextBounds(sFirstChar, 0, 1, sRect);
sPaint.setTypeface(Typeface.create("sans-serif", Typeface.NORMAL));
sPaint.setColor(sTileFontColor);
- sPaint.setAlpha(ALPHA);
// Draw the letter in the canvas, vertically shifted up or down by the user-defined
// offset
diff --git a/src/com/android/contacts/list/AccountFilterActivity.java b/src/com/android/contacts/list/AccountFilterActivity.java
index 6559489..e693f3d 100644
--- a/src/com/android/contacts/list/AccountFilterActivity.java
+++ b/src/com/android/contacts/list/AccountFilterActivity.java
@@ -62,6 +62,7 @@
mListView = (ListView) findViewById(android.R.id.list);
mListView.setOnItemClickListener(this);
+ mListView.setDivider(null);
ActionBar actionBar = getActionBar();
if (actionBar != null) {
diff --git a/src/com/android/contacts/list/DefaultContactBrowseListFragment.java b/src/com/android/contacts/list/DefaultContactBrowseListFragment.java
index 2aacabe..fd6fc8c 100644
--- a/src/com/android/contacts/list/DefaultContactBrowseListFragment.java
+++ b/src/com/android/contacts/list/DefaultContactBrowseListFragment.java
@@ -593,11 +593,7 @@
.getInteger(Experiments.PULL_TO_REFRESH_CANCEL_REFRESH_MILLIS));
}
});
- mSwipeRefreshLayout.setColorSchemeResources(
- R.color.swipe_refresh_color1,
- R.color.swipe_refresh_color2,
- R.color.swipe_refresh_color3,
- R.color.swipe_refresh_color4);
+ mSwipeRefreshLayout.setColorSchemeResources(R.color.primary_color);
mSwipeRefreshLayout.setDistanceToTriggerSync(
(int) getResources().getDimension(R.dimen.pull_to_refresh_distance));
}
diff --git a/src/com/android/contacts/list/PhoneNumberListAdapter.java b/src/com/android/contacts/list/PhoneNumberListAdapter.java
index d459d47..c7b754c 100644
--- a/src/com/android/contacts/list/PhoneNumberListAdapter.java
+++ b/src/com/android/contacts/list/PhoneNumberListAdapter.java
@@ -19,6 +19,7 @@
import android.content.Context;
import android.content.CursorLoader;
import android.database.Cursor;
+import android.database.MatrixCursor;
import android.net.Uri;
import android.net.Uri.Builder;
import android.provider.ContactsContract;
@@ -28,6 +29,7 @@
import android.provider.ContactsContract.Contacts;
import android.provider.ContactsContract.Data;
import android.provider.ContactsContract.Directory;
+import android.telephony.PhoneNumberUtils;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
@@ -47,6 +49,7 @@
import com.android.contacts.preference.ContactsPreferences;
import com.android.contacts.util.Constants;
+import com.android.contacts.util.CursorUtils;
import com.google.common.collect.Lists;
import java.util.ArrayList;
@@ -654,4 +657,27 @@
public void setListener(Listener listener) {
mListener = listener;
}
+
+ @Override
+ public void changeCursor(int partitionIndex, Cursor cursor) {
+ String previousNumber = "";
+ long previousContactId = -1;
+ MatrixCursor matrixCursor = new MatrixCursor(cursor.getColumnNames());
+ try {
+ while (cursor.moveToNext()) {
+ long currentContactId = cursor.getLong(PhoneQuery.CONTACT_ID);
+ String currentNumber = cursor.getString(PhoneQuery.PHONE_NUMBER);
+ currentNumber = PhoneNumberUtils.normalizeNumber(currentNumber);
+ if (currentContactId == previousContactId && currentNumber.equals(previousNumber)) {
+ continue;
+ }
+ previousNumber = currentNumber;
+ previousContactId = currentContactId;
+ matrixCursor.addRow(CursorUtils.getObjectFromCursor(cursor));
+ }
+ } finally {
+ cursor.close();
+ }
+ super.changeCursor(partitionIndex, matrixCursor);
+ }
}
diff --git a/src/com/android/contacts/model/AccountTypeManager.java b/src/com/android/contacts/model/AccountTypeManager.java
index 75beb1c..253097b 100644
--- a/src/com/android/contacts/model/AccountTypeManager.java
+++ b/src/com/android/contacts/model/AccountTypeManager.java
@@ -80,6 +80,7 @@
public static final String BROADCAST_ACCOUNTS_CHANGED = AccountTypeManager.class.getName() +
".AccountsChanged";
+ public static final String DEVICE_ACCOUNT_NAME = "DEVICE";
public enum AccountFilter implements Predicate<AccountInfo> {
ALL {
@@ -398,7 +399,7 @@
*/
public AccountTypeManagerImpl(Context context) {
mContext = context;
- mLocalAccountLocator = new DeviceLocalAccountLocator(context, AccountManager.get(context));
+ mLocalAccountLocator = new DeviceLocalAccountLocator(context);
mTypeProvider = new AccountTypeProvider(context);
mFallbackAccountType = new FallbackAccountType(context);
@@ -629,16 +630,24 @@
private List<AccountWithDataSet> getAccountsWithDataSets(Account[] accounts,
AccountTypeProvider typeProvider) {
List<AccountWithDataSet> result = new ArrayList<>();
+ // add local device account
+ populateAccountsDataSet(typeProvider, new Account(DEVICE_ACCOUNT_NAME,
+ mContext.getPackageName()), result);
for (Account account : accounts) {
- final List<AccountType> types = typeProvider.getAccountTypes(account.type);
- for (AccountType type : types) {
- result.add(new AccountWithDataSet(
- account.name, account.type, type.dataSet));
- }
+ populateAccountsDataSet(typeProvider, account, result);
}
return result;
}
+ private void populateAccountsDataSet(AccountTypeProvider typeProvider, Account account,
+ List<AccountWithDataSet> result) {
+ final List<AccountType> types = typeProvider.getAccountTypes(account.type);
+ for (AccountType type : types) {
+ result.add(new AccountWithDataSet(
+ account.name, account.type, type.dataSet));
+ }
+ }
+
/**
* Returns the default google account specified in preferences, the first google account
* if it is not specified in preferences or is no longer on the device, and null otherwise.
diff --git a/src/com/android/contacts/model/DeviceLocalAccountLocator.java b/src/com/android/contacts/model/DeviceLocalAccountLocator.java
index e8a2ba0..89f1ce2 100644
--- a/src/com/android/contacts/model/DeviceLocalAccountLocator.java
+++ b/src/com/android/contacts/model/DeviceLocalAccountLocator.java
@@ -21,7 +21,6 @@
import android.provider.ContactsContract;
import com.android.contacts.model.account.AccountWithDataSet;
-import com.android.contacts.model.account.GoogleAccountType;
import java.util.Collections;
import java.util.List;
@@ -32,12 +31,10 @@
public final class DeviceLocalAccountLocator {
private final Context mContext;
- private final AccountManager mAccountManager;
private final List<AccountWithDataSet> mLocalAccount;
- public DeviceLocalAccountLocator(Context context, AccountManager accountManager) {
+ public DeviceLocalAccountLocator(Context context) {
mContext = context;
- mAccountManager = accountManager;
mLocalAccount = Collections.singletonList(AccountWithDataSet.getLocalAccount(context));
}
@@ -45,10 +42,7 @@
* Returns a list of device local accounts
*/
public List<AccountWithDataSet> getDeviceLocalAccounts() {
- @SuppressWarnings("MissingPermission") final Account[] accounts = mAccountManager
- .getAccountsByType(GoogleAccountType.ACCOUNT_TYPE);
-
- if (accounts.length > 0 && !mLocalAccount.get(0).hasData(mContext)) {
+ if (!mLocalAccount.get(0).hasData(mContext)) {
return Collections.emptyList();
} else {
return mLocalAccount;
diff --git a/src/com/android/contacts/model/account/AccountTypeProvider.java b/src/com/android/contacts/model/account/AccountTypeProvider.java
index 2888dfa..95b998c 100644
--- a/src/com/android/contacts/model/account/AccountTypeProvider.java
+++ b/src/com/android/contacts/model/account/AccountTypeProvider.java
@@ -82,6 +82,9 @@
* </p>
*/
public List<AccountType> getAccountTypes(String accountType) {
+ if (mContext.getPackageName().equals(accountType)) {
+ accountType = null;
+ }
// ConcurrentHashMap doesn't support null keys
if (accountType == null || mLocalAccountTypeFactory.classifyAccount(accountType)
== DeviceLocalAccountTypeFactory.TYPE_SIM) {
diff --git a/src/com/android/contacts/model/account/BaseAccountType.java b/src/com/android/contacts/model/account/BaseAccountType.java
index 59ad742..1e94e45 100644
--- a/src/com/android/contacts/model/account/BaseAccountType.java
+++ b/src/com/android/contacts/model/account/BaseAccountType.java
@@ -122,7 +122,7 @@
this.accountType = null;
this.dataSet = null;
this.titleRes = R.string.account_phone;
- this.iconRes = R.mipmap.ic_contacts_launcher;
+ this.iconRes = R.mipmap.ic_launcher;
}
protected static EditType buildPhoneType(int type) {
diff --git a/src/com/android/contacts/model/account/DeviceLocalAccountType.java b/src/com/android/contacts/model/account/DeviceLocalAccountType.java
index c6c7d07..ac190af 100644
--- a/src/com/android/contacts/model/account/DeviceLocalAccountType.java
+++ b/src/com/android/contacts/model/account/DeviceLocalAccountType.java
@@ -15,14 +15,34 @@
*/
package com.android.contacts.model.account;
+import android.content.ContentValues;
import android.content.Context;
+import android.provider.ContactsContract.CommonDataKinds.Event;
+import android.provider.ContactsContract.CommonDataKinds.Relation;
+
+import com.android.contacts.R;
+import com.android.contacts.model.dataitem.DataKind;
+import com.android.contacts.util.CommonDateUtils;
+import com.android.contactsbind.FeedbackHelper;
+
+import com.google.common.collect.Lists;
public class DeviceLocalAccountType extends FallbackAccountType {
+ private static final String TAG = "DeviceLocalAccountType";
+
private final boolean mGroupsEditable;
public DeviceLocalAccountType(Context context, boolean groupsEditable) {
super(context);
+
+ try {
+ addDataKindRelation(context);
+ addDataKindEvent(context);
+ } catch (DefinitionException e) {
+ FeedbackHelper.sendFeedback(context, TAG, "Failed to build fallback account type", e);
+ }
+
mGroupsEditable = groupsEditable;
}
@@ -43,4 +63,64 @@
new AccountDisplayInfo(account, getDisplayLabel(context), getDisplayLabel(context),
getDisplayIcon(context), true), this);
}
+
+ private DataKind addDataKindRelation(Context context) throws DefinitionException {
+ DataKind kind = addKind(new DataKind(Relation.CONTENT_ITEM_TYPE,
+ R.string.relationLabelsGroup, Weight.RELATIONSHIP, true));
+ kind.actionHeader = new RelationActionInflater();
+ kind.actionBody = new SimpleInflater(Relation.NAME);
+
+ kind.typeColumn = Relation.TYPE;
+ kind.typeList = Lists.newArrayList();
+ kind.typeList.add(buildRelationType(Relation.TYPE_ASSISTANT));
+ kind.typeList.add(buildRelationType(Relation.TYPE_BROTHER));
+ kind.typeList.add(buildRelationType(Relation.TYPE_CHILD));
+ kind.typeList.add(buildRelationType(Relation.TYPE_DOMESTIC_PARTNER));
+ kind.typeList.add(buildRelationType(Relation.TYPE_FATHER));
+ kind.typeList.add(buildRelationType(Relation.TYPE_FRIEND));
+ kind.typeList.add(buildRelationType(Relation.TYPE_MANAGER));
+ kind.typeList.add(buildRelationType(Relation.TYPE_MOTHER));
+ kind.typeList.add(buildRelationType(Relation.TYPE_PARENT));
+ kind.typeList.add(buildRelationType(Relation.TYPE_PARTNER));
+ kind.typeList.add(buildRelationType(Relation.TYPE_REFERRED_BY));
+ kind.typeList.add(buildRelationType(Relation.TYPE_RELATIVE));
+ kind.typeList.add(buildRelationType(Relation.TYPE_SISTER));
+ kind.typeList.add(buildRelationType(Relation.TYPE_SPOUSE));
+ kind.typeList.add(buildRelationType(Relation.TYPE_CUSTOM).setSecondary(true)
+ .setCustomColumn(Relation.LABEL));
+
+ kind.defaultValues = new ContentValues();
+ kind.defaultValues.put(Relation.TYPE, Relation.TYPE_SPOUSE);
+
+ kind.fieldList = Lists.newArrayList();
+ kind.fieldList.add(new EditField(Relation.DATA, R.string.relationLabelsGroup,
+ FLAGS_RELATION));
+
+ return kind;
+ }
+
+ private DataKind addDataKindEvent(Context context) throws DefinitionException {
+ DataKind kind = addKind(new DataKind(Event.CONTENT_ITEM_TYPE,
+ R.string.eventLabelsGroup, Weight.EVENT, true));
+ kind.actionHeader = new EventActionInflater();
+ kind.actionBody = new SimpleInflater(Event.START_DATE);
+
+ kind.typeColumn = Event.TYPE;
+ kind.typeList = Lists.newArrayList();
+ kind.dateFormatWithoutYear = CommonDateUtils.NO_YEAR_DATE_FORMAT;
+ kind.dateFormatWithYear = CommonDateUtils.FULL_DATE_FORMAT;
+ kind.typeList.add(buildEventType(Event.TYPE_BIRTHDAY, true).setSpecificMax(1));
+ kind.typeList.add(buildEventType(Event.TYPE_ANNIVERSARY, false));
+ kind.typeList.add(buildEventType(Event.TYPE_OTHER, false));
+ kind.typeList.add(buildEventType(Event.TYPE_CUSTOM, false).setSecondary(true)
+ .setCustomColumn(Event.LABEL));
+
+ kind.defaultValues = new ContentValues();
+ kind.defaultValues.put(Event.TYPE, Event.TYPE_BIRTHDAY);
+
+ kind.fieldList = Lists.newArrayList();
+ kind.fieldList.add(new EditField(Event.DATA, R.string.eventLabelsGroup, FLAGS_EVENT));
+
+ return kind;
+ }
}
diff --git a/src/com/android/contacts/model/account/FallbackAccountType.java b/src/com/android/contacts/model/account/FallbackAccountType.java
index d7ea37a..cbd101a 100644
--- a/src/com/android/contacts/model/account/FallbackAccountType.java
+++ b/src/com/android/contacts/model/account/FallbackAccountType.java
@@ -20,6 +20,8 @@
import android.content.Context;
import android.graphics.PorterDuff;
import android.graphics.drawable.Drawable;
+import android.provider.ContactsContract.CommonDataKinds.Email;
+import android.provider.ContactsContract.CommonDataKinds.Phone;
import androidx.core.content.ContextCompat;
import androidx.core.content.res.ResourcesCompat;
@@ -27,6 +29,8 @@
import com.android.contacts.model.dataitem.DataKind;
import com.android.contactsbind.FeedbackHelper;
+import com.google.common.collect.Lists;
+
public class FallbackAccountType extends BaseAccountType {
private static final String TAG = "FallbackAccountType";
@@ -107,4 +111,45 @@
new AccountDisplayInfo(account, account.name,
getDisplayLabel(context), getDisplayIcon(context), false), this);
}
+
+ @Override
+ protected DataKind addDataKindPhone(Context context) throws DefinitionException {
+ final DataKind kind = super.addDataKindPhone(context);
+
+ kind.typeColumn = Phone.TYPE;
+ kind.typeList = Lists.newArrayList();
+ kind.typeList.add(buildPhoneType(Phone.TYPE_MOBILE));
+ kind.typeList.add(buildPhoneType(Phone.TYPE_WORK));
+ kind.typeList.add(buildPhoneType(Phone.TYPE_HOME));
+ kind.typeList.add(buildPhoneType(Phone.TYPE_MAIN));
+ kind.typeList.add(buildPhoneType(Phone.TYPE_FAX_WORK).setSecondary(true));
+ kind.typeList.add(buildPhoneType(Phone.TYPE_FAX_HOME).setSecondary(true));
+ kind.typeList.add(buildPhoneType(Phone.TYPE_PAGER).setSecondary(true));
+ kind.typeList.add(buildPhoneType(Phone.TYPE_OTHER));
+ kind.typeList.add(buildPhoneType(Phone.TYPE_CUSTOM).setSecondary(true)
+ .setCustomColumn(Phone.LABEL));
+
+ kind.fieldList = Lists.newArrayList();
+ kind.fieldList.add(new EditField(Phone.NUMBER, R.string.phoneLabelsGroup, FLAGS_PHONE));
+
+ return kind;
+ }
+
+ @Override
+ protected DataKind addDataKindEmail(Context context) throws DefinitionException {
+ final DataKind kind = super.addDataKindEmail(context);
+
+ kind.typeColumn = Email.TYPE;
+ kind.typeList = Lists.newArrayList();
+ kind.typeList.add(buildEmailType(Email.TYPE_HOME));
+ kind.typeList.add(buildEmailType(Email.TYPE_WORK));
+ kind.typeList.add(buildEmailType(Email.TYPE_OTHER));
+ kind.typeList.add(buildEmailType(Email.TYPE_CUSTOM).setSecondary(true).setCustomColumn(
+ Email.LABEL));
+
+ kind.fieldList = Lists.newArrayList();
+ kind.fieldList.add(new EditField(Email.DATA, R.string.emailLabelsGroup, FLAGS_EMAIL));
+
+ return kind;
+ }
}
diff --git a/src/com/android/contacts/preference/DisplayOptionsPreferenceFragment.java b/src/com/android/contacts/preference/DisplayOptionsPreferenceFragment.java
index 7097be3..f11fcbd 100644
--- a/src/com/android/contacts/preference/DisplayOptionsPreferenceFragment.java
+++ b/src/com/android/contacts/preference/DisplayOptionsPreferenceFragment.java
@@ -51,6 +51,7 @@
import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;
+import android.widget.ListView;
import com.android.contacts.ContactsUtils;
import com.android.contacts.R;
@@ -216,6 +217,11 @@
LocalBroadcastManager.getInstance(getActivity()).registerReceiver(
mSaveServiceListener,
new IntentFilter(SimImportService.BROADCAST_SIM_IMPORT_COMPLETE));
+
+ ListView lv = view.findViewById(android.R.id.list);
+ if (lv != null) {
+ lv.setDivider(null);
+ }
}
@Override
diff --git a/src/com/android/contacts/profile/ProfileItem.java b/src/com/android/contacts/profile/ProfileItem.java
new file mode 100644
index 0000000..fcf43d1
--- /dev/null
+++ b/src/com/android/contacts/profile/ProfileItem.java
@@ -0,0 +1,48 @@
+package com.android.contacts.profile;
+
+/**
+ * Meta-data for a contact profile.
+ */
+public final class ProfileItem {
+
+ private final String mDisplayName;
+ private final long mContactId;
+ private final long mPhotoId;
+ private final String mPhotoUri;
+ private final int mDisplayNameSource;
+ private final boolean mHasProfile;
+
+ public ProfileItem(String displayName, long contactId, long photoId, String photoUri,
+ int displayNameSource, boolean hasProfile) {
+ mDisplayName = displayName;
+ mContactId = contactId;
+ mPhotoId = photoId;
+ mPhotoUri = photoUri;
+ mDisplayNameSource = displayNameSource;
+ mHasProfile = hasProfile;
+ }
+
+ public String getDisplayName() {
+ return mDisplayName;
+ }
+
+ public long getContactId() {
+ return mContactId;
+ }
+
+ public long getPhotoId() {
+ return mPhotoId;
+ }
+
+ public String getPhotoUri() {
+ return mPhotoUri;
+ }
+
+ public int getDisplayNameSource() {
+ return mDisplayNameSource;
+ }
+
+ public boolean HasProfile() {
+ return mHasProfile;
+ }
+}
\ No newline at end of file
diff --git a/src/com/android/contacts/profile/ProfileLoader.java b/src/com/android/contacts/profile/ProfileLoader.java
new file mode 100644
index 0000000..68c5a6b
--- /dev/null
+++ b/src/com/android/contacts/profile/ProfileLoader.java
@@ -0,0 +1,107 @@
+package com.android.contacts.profile;
+
+import android.content.Context;
+import android.content.CursorLoader;
+import android.database.Cursor;
+import android.provider.ContactsContract.Contacts;
+import android.provider.ContactsContract.DisplayNameSources;
+import android.provider.ContactsContract.Profile;
+import android.text.TextUtils;
+import com.android.contacts.R;
+import com.android.contacts.preference.ContactsPreferences;
+
+/**
+ * Load MyProfile information for display on the navigation drawer.
+ */
+public final class ProfileLoader extends CursorLoader {
+
+ /**
+ * The projections that are used to obtain user profile
+ */
+ public static final class ProfileQuery {
+ /**
+ * Not instantiable.
+ */
+ private ProfileQuery() {}
+
+ public static final String[] PROFILE_PROJECTION_PRIMARY = new String[] {
+ Contacts._ID, // 0
+ Contacts.DISPLAY_NAME_PRIMARY, // 1
+ Contacts.IS_USER_PROFILE, // 2
+ Contacts.PHOTO_ID, // 3
+ Contacts.PHOTO_THUMBNAIL_URI, // 4
+ Contacts.DISPLAY_NAME_SOURCE // 5
+ };
+
+ public static final String[] PROFILE_PROJECTION_ALTERNATIVE = new String[] {
+ Contacts._ID, // 0
+ Contacts.DISPLAY_NAME_ALTERNATIVE, // 1
+ Contacts.IS_USER_PROFILE, // 2
+ Contacts.PHOTO_ID, // 3
+ Contacts.PHOTO_THUMBNAIL_URI, // 4
+ Contacts.DISPLAY_NAME_SOURCE // 5
+ };
+
+ public static final int CONTACT_ID = 0;
+ public static final int CONTACT_DISPLAY_NAME = 1;
+ public static final int CONTACT_IS_USER_PROFILE = 2;
+ public static final int CONTACT_PHOTO_ID = 3;
+ public static final int CONTACT_PHOTO_URI = 4;
+ public static final int DISPLAY_NAME_SOURCE = 5;
+ }
+
+ /*
+ * Apply the Name format setting(First name first/Last name first)
+ * to the display name of MyInfo at the navigation drawer.
+ * Settings->MyInfo also behaves the same.
+ */
+ public static String[] getProjection(Context context) {
+ final ContactsPreferences contactsPrefs = new ContactsPreferences(context);
+ final int displayOrder = contactsPrefs.getDisplayOrder();
+ if (displayOrder == ContactsPreferences.DISPLAY_ORDER_PRIMARY) {
+ return ProfileQuery.PROFILE_PROJECTION_PRIMARY;
+ }
+ return ProfileQuery.PROFILE_PROJECTION_ALTERNATIVE;
+ }
+
+ /** Returns a {@link ProfileItem} read from the given cursor */
+ public static ProfileItem getProfileItem(Context context, Cursor cursor) {
+ boolean hasProfile = false;
+ String displayName = null;
+ long contactId = -1;
+ long photoId = 0;
+ String photoUri = null;
+ int displayNameSource = DisplayNameSources.UNDEFINED;
+ if (cursor != null && cursor.moveToFirst()) {
+ hasProfile = cursor.getInt(ProfileQuery.CONTACT_IS_USER_PROFILE) == 1;
+ displayName = cursor.getString(ProfileQuery.CONTACT_DISPLAY_NAME);
+ contactId = cursor.getLong(ProfileQuery.CONTACT_ID);
+ photoId = cursor.getLong(ProfileQuery.CONTACT_PHOTO_ID);
+ photoUri = cursor.getString(ProfileQuery.CONTACT_PHOTO_URI);
+ displayNameSource = cursor.getInt(ProfileQuery.DISPLAY_NAME_SOURCE);
+ }
+ if (hasProfile && TextUtils.isEmpty(displayName)) {
+ displayName = context.getResources().getString(R.string.missing_name);
+ }
+ return new ProfileItem(displayName, contactId, photoId, photoUri, displayNameSource,
+ hasProfile);
+ }
+
+ public ProfileLoader(Context context, String[] projection) {
+ super(context,
+ Profile.CONTENT_URI,
+ projection,
+ null,
+ null,
+ null);
+ }
+
+ @Override
+ public Cursor loadInBackground() {
+ try {
+ return super.loadInBackground();
+ } catch (RuntimeException e) {
+ return null;
+ }
+ }
+}
diff --git a/src/com/android/contacts/quickcontact/QuickContactActivity.java b/src/com/android/contacts/quickcontact/QuickContactActivity.java
index 35fc2cc..c738301 100644
--- a/src/com/android/contacts/quickcontact/QuickContactActivity.java
+++ b/src/com/android/contacts/quickcontact/QuickContactActivity.java
@@ -113,6 +113,7 @@
import com.android.contacts.compat.CompatUtils;
import com.android.contacts.compat.EventCompat;
import com.android.contacts.compat.MultiWindowCompat;
+import com.android.contacts.compat.PhoneNumberUtilsCompat;
import com.android.contacts.detail.ContactDisplayUtils;
import com.android.contacts.dialog.CallSubjectDialog;
import com.android.contacts.editor.ContactEditorFragment;
@@ -430,6 +431,7 @@
static final int COPY_TEXT = 0;
static final int CLEAR_DEFAULT = 1;
static final int SET_DEFAULT = 2;
+ static final int CALL_VIA = 3;
}
private final OnCreateContextMenuListener mEntryContextMenuListener =
@@ -440,7 +442,13 @@
return;
}
final EntryContextMenuInfo info = (EntryContextMenuInfo) menuInfo;
+ final String selectedMimeType = info.getMimeType();
menu.setHeaderTitle(info.getCopyText());
+
+ if (Phone.CONTENT_ITEM_TYPE.equals(selectedMimeType)) {
+ addPhoneAccountsToMenu(QuickContactActivity.this, menu, info);
+ }
+
menu.add(ContextMenu.NONE, ContextMenuIds.COPY_TEXT,
ContextMenu.NONE, getString(R.string.copy_text));
@@ -449,8 +457,6 @@
return;
}
- final String selectedMimeType = info.getMimeType();
-
// Defaults to true will only enable the detail to be copied to the clipboard.
boolean onlyOneOfMimeType = true;
@@ -470,6 +476,25 @@
ContextMenu.NONE, getString(R.string.set_default));
}
}
+
+ private void addPhoneAccountsToMenu(Context context,
+ Menu menu, EntryContextMenuInfo info) {
+ final String number = PhoneNumberUtilsCompat.normalizeNumber(info.getCopyText());
+ final List<PhoneAccount> accounts = CallUtil.getCallCapablePhoneAccounts(context,
+ PhoneAccount.SCHEME_TEL);
+ if (accounts == null || accounts.size() <= 1) {
+ return;
+ }
+
+ for (PhoneAccount account : accounts) {
+ final String text = context.getString(R.string.call_via_template,
+ account.getLabel());
+ final Intent intent = CallUtil.getCallWithSubjectIntent(number,
+ account.getAccountHandle(), null);
+ menu.add(ContextMenu.NONE, ContextMenuIds.CALL_VIA, ContextMenu.NONE, text)
+ .setIntent(intent);
+ }
+ }
};
@Override
@@ -497,6 +522,9 @@
menuInfo.getId());
this.startService(clearIntent);
return true;
+ case ContextMenuIds.CALL_VIA:
+ startActivity(item.getIntent());
+ return true;
default:
throw new IllegalArgumentException("Unknown menu option " + item.getItemId());
}
diff --git a/src/com/android/contacts/util/AccountSelectionUtil.java b/src/com/android/contacts/util/AccountSelectionUtil.java
index bfe8a08..2b226d0 100644
--- a/src/com/android/contacts/util/AccountSelectionUtil.java
+++ b/src/com/android/contacts/util/AccountSelectionUtil.java
@@ -126,6 +126,8 @@
text1.setText(accountType.getDisplayLabel(context));
text2.setText(account.name);
+ text2.setVisibility(context.getPackageName().equals(account.type) ?
+ View.GONE : View.VISIBLE);
icon.setImageDrawable(accountType.getDisplayIcon(getContext()));
return convertView;
diff --git a/src/com/android/contacts/util/AccountsListAdapter.java b/src/com/android/contacts/util/AccountsListAdapter.java
index 2bcc68b..cc80b79 100644
--- a/src/com/android/contacts/util/AccountsListAdapter.java
+++ b/src/com/android/contacts/util/AccountsListAdapter.java
@@ -95,6 +95,8 @@
text1.setText(mAccounts.get(position).getTypeLabel());
text2.setText(mAccounts.get(position).getNameLabel());
+ text2.setVisibility(mAccounts.get(position).getNameLabel().equals(
+ mAccounts.get(position).getTypeLabel()) ? View.GONE : View.VISIBLE);
icon.setImageDrawable(mAccounts.get(position).getIcon());
diff --git a/src/com/android/contacts/util/CursorUtils.java b/src/com/android/contacts/util/CursorUtils.java
new file mode 100644
index 0000000..139d6e5
--- /dev/null
+++ b/src/com/android/contacts/util/CursorUtils.java
@@ -0,0 +1,45 @@
+/*
+ * SPDX-FileCopyrightText: 2023 The LineageOS Project
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+package com.android.contacts.util;
+
+import android.database.Cursor;
+
+import androidx.annotation.NonNull;
+
+public class CursorUtils {
+
+ private CursorUtils() {
+ // Do not instantiate
+ }
+
+ public static Object[] getObjectFromCursor(@NonNull Cursor cursor) {
+ Object[] values = new Object[cursor.getColumnCount()];
+ for (int i = 0; i < cursor.getColumnCount(); i++) {
+ int fieldType = cursor.getType(i);
+ switch (fieldType) {
+ case Cursor.FIELD_TYPE_BLOB:
+ values[i] = cursor.getBlob(i);
+ break;
+ case Cursor.FIELD_TYPE_FLOAT:
+ values[i] = cursor.getDouble(i);
+ break;
+ case Cursor.FIELD_TYPE_INTEGER:
+ values[i] = cursor.getLong(i);
+ break;
+ case Cursor.FIELD_TYPE_STRING:
+ values[i] = cursor.getString(i);
+ break;
+ case Cursor.FIELD_TYPE_NULL:
+ values[i] = null;
+ break;
+ default:
+ throw new IllegalStateException(
+ "Unknown fieldType (" + fieldType + ") for column: " + i);
+ }
+ }
+ return values;
+ }
+}
diff --git a/src/com/android/contacts/util/ImplicitIntentsUtil.java b/src/com/android/contacts/util/ImplicitIntentsUtil.java
index a1ab896..e101534 100644
--- a/src/com/android/contacts/util/ImplicitIntentsUtil.java
+++ b/src/com/android/contacts/util/ImplicitIntentsUtil.java
@@ -179,6 +179,23 @@
}
/**
+ * Returns an Intent to launch Emergency Information
+ */
+ public static Intent getIntentForEmergencyInfo(Context context) {
+ if (context == null || context.getPackageManager() == null) {
+ return null;
+ }
+ Intent intent = new Intent("android.settings.EDIT_EMERGENCY_INFO")
+ .setPackage("com.android.emergency");
+ List<ResolveInfo> list = context.getPackageManager().queryIntentActivities(intent,
+ PackageManager.MATCH_DEFAULT_ONLY);
+ if (list != null && !list.isEmpty()) {
+ return intent;
+ }
+ return null;
+ }
+
+ /**
* Returns a copy of {@param intent} with a class name set, if a class inside this app
* has a corresponding intent filter.
*/
diff --git a/src/com/android/contacts/vcard/ImportProcessor.java b/src/com/android/contacts/vcard/ImportProcessor.java
index c6fcccb..9471fd9 100644
--- a/src/com/android/contacts/vcard/ImportProcessor.java
+++ b/src/com/android/contacts/vcard/ImportProcessor.java
@@ -30,6 +30,7 @@
import com.android.vcard.VCardParser;
import com.android.vcard.VCardParser_V21;
import com.android.vcard.VCardParser_V30;
+import com.android.vcard.VCardParser_V40;
import com.android.vcard.exception.VCardException;
import com.android.vcard.exception.VCardNotSupportedException;
import com.android.vcard.exception.VCardVersionException;
@@ -135,7 +136,8 @@
*/
possibleVCardVersions = new int[] {
ImportVCardActivity.VCARD_VERSION_V21,
- ImportVCardActivity.VCARD_VERSION_V30
+ ImportVCardActivity.VCARD_VERSION_V30,
+ ImportVCardActivity.VCARD_VERSION_V40
};
} else {
possibleVCardVersions = new int[] {
@@ -231,9 +233,16 @@
// In the worst case, a user may call cancel() just before creating
// mVCardParser.
synchronized (this) {
- mVCardParser = (vcardVersion == ImportVCardActivity.VCARD_VERSION_V30 ?
- new VCardParser_V30(vcardType) :
- new VCardParser_V21(vcardType));
+ switch (vcardVersion) {
+ case ImportVCardActivity.VCARD_VERSION_V40:
+ mVCardParser = new VCardParser_V40(vcardType);
+ break;
+ case ImportVCardActivity.VCARD_VERSION_V30:
+ mVCardParser = new VCardParser_V30(vcardType);
+ break;
+ default:
+ mVCardParser = new VCardParser_V21(vcardType);
+ }
if (isCancelled()) {
Log.i(LOG_TAG, "ImportProcessor already recieves cancel request, so " +
"send cancel request to vCard parser too.");
diff --git a/src/com/android/contacts/vcard/ImportVCardActivity.java b/src/com/android/contacts/vcard/ImportVCardActivity.java
index 3eb7bdb..7ff6320 100644
--- a/src/com/android/contacts/vcard/ImportVCardActivity.java
+++ b/src/com/android/contacts/vcard/ImportVCardActivity.java
@@ -49,6 +49,7 @@
import com.android.vcard.VCardParser;
import com.android.vcard.VCardParser_V21;
import com.android.vcard.VCardParser_V30;
+import com.android.vcard.VCardParser_V40;
import com.android.vcard.VCardSourceDetector;
import com.android.vcard.exception.VCardException;
import com.android.vcard.exception.VCardNestedException;
@@ -83,6 +84,7 @@
/* package */ final static int VCARD_VERSION_AUTO_DETECT = 0;
/* package */ final static int VCARD_VERSION_V21 = 1;
/* package */ final static int VCARD_VERSION_V30 = 2;
+ /* package */ final static int VCARD_VERSION_V40 = 3;
private static final int REQUEST_OPEN_DOCUMENT = 100;
@@ -321,6 +323,7 @@
int vcardVersion = VCARD_VERSION_V21;
try {
boolean shouldUseV30 = false;
+ boolean shouldUseV40 = false;
InputStream is;
if (data != null) {
is = new ByteArrayInputStream(data);
@@ -354,7 +357,28 @@
mVCardParser.addInterpreter(detector);
mVCardParser.parse(is);
} catch (VCardVersionException e2) {
- throw new VCardException("vCard with unspported version.");
+ try {
+ is.close();
+ } catch (IOException e) {
+
+ }
+
+ shouldUseV40 = true;
+ if (data != null) {
+ is = new ByteArrayInputStream(data);
+ } else {
+ is = resolver.openInputStream(localDataUri);
+ }
+ mVCardParser = new VCardParser_V40();
+ try {
+ counter = new VCardEntryCounter();
+ detector = new VCardSourceDetector();
+ mVCardParser.addInterpreter(counter);
+ mVCardParser.addInterpreter(detector);
+ mVCardParser.parse(is);
+ } catch (VCardVersionException e3) {
+ throw new VCardException("vCard with unspported version.");
+ }
}
} finally {
if (is != null) {
@@ -365,7 +389,13 @@
}
}
- vcardVersion = shouldUseV30 ? VCARD_VERSION_V30 : VCARD_VERSION_V21;
+ if (shouldUseV40) {
+ vcardVersion = VCARD_VERSION_V40;
+ } else if (shouldUseV30) {
+ vcardVersion = VCARD_VERSION_V30;
+ } else {
+ vcardVersion = VCARD_VERSION_V21;
+ }
} catch (VCardNestedException e) {
Log.w(LOG_TAG, "Nested Exception is found (it may be false-positive).");
// Go through without throwing the Exception, as we may be able to detect the