summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorXin Li <delphij@google.com>2019-08-14 12:04:07 -0700
committerXin Li <delphij@google.com>2019-08-14 12:04:07 -0700
commitf6167a627d370fe6376ebe63acef77b6091e0ff1 (patch)
treecf14dae4f78428217400aeea089d937f131d5624
parentf39d95c600d4f53cf48603b4750433235c0a8c12 (diff)
parent3f5e111502eced3f737247fe5a3aa5b0627fe227 (diff)
downloadDialer-f6167a627d370fe6376ebe63acef77b6091e0ff1.tar.gz
DO NOT MERGE - Merge qt-dev-plus-aosp-without-vendor (5713463) into stage-aosp-mastertemp_140451723
Bug: 134405016 Change-Id: I65d6ba590b9d944663c7eb54863635c099e57070
-rw-r--r--res/drawable/ic_message.xml24
-rw-r--r--res/layout/phone_number_list_item.xml3
-rw-r--r--res/values/dimens.xml3
-rw-r--r--res/values/strings.xml12
-rw-r--r--src/com/android/car/dialer/ui/contact/ContactListViewModel.java16
-rw-r--r--src/com/android/car/dialer/widget/WorkerExecutor.java28
-rwxr-xr-xtests/checkresources.py8
-rw-r--r--tests/robotests/src/com/android/car/dialer/ui/contact/ContactListViewHolderTest.java26
8 files changed, 40 insertions, 80 deletions
diff --git a/res/drawable/ic_message.xml b/res/drawable/ic_message.xml
deleted file mode 100644
index 741ca1b5..00000000
--- a/res/drawable/ic_message.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2019 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
- android:viewportWidth="48"
- android:viewportHeight="48"
- android:width="@dimen/primary_icon_size"
- android:height="@dimen/primary_icon_size">
- <path
- android:pathData="M40 4H8C5.79 4 4.02 5.79 4.02 8L4 44l8-8h28c2.21 0 4-1.79 4-4V8c0-2.21-1.79-4-4-4zm-4 24H12v-4h24v4zm0-6H12v-4h24v4zm0-6H12v-4h24v4z"
- android:fillColor="#000000" />
-</vector>
diff --git a/res/layout/phone_number_list_item.xml b/res/layout/phone_number_list_item.xml
index ce167f0b..04e1b61b 100644
--- a/res/layout/phone_number_list_item.xml
+++ b/res/layout/phone_number_list_item.xml
@@ -24,7 +24,8 @@
android:id="@+id/phone_number_checkbox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:layout_centerVertical="true"/>
+ android:layout_centerVertical="true"
+ android:layout_marginEnd="@dimen/phone_number_radio_list_padding"/>
<TextView
android:id="@+id/phone_number"
android:layout_width="match_parent"
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index cd8bff5d..2a9f5c42 100644
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -36,7 +36,6 @@
<dimen name="contact_details_avatar_margin_top">@*android:dimen/car_padding_4</dimen>
<dimen name="contact_details_title_margin_top">@*android:dimen/car_padding_4</dimen>
<dimen name="contact_details_title_margin_bottom">48dp</dimen>
- <dimen name="contact_details_quick_actions_margin_bottom">@*android:dimen/car_padding_5</dimen>
<dimen name="contact_details_avatar_size">@dimen/primary_icon_size</dimen>
<dimen name="contact_details_item_height">@dimen/list_item_height</dimen>
<dimen name="contact_details_number_padding_start">@*android:dimen/car_keyline_1</dimen>
@@ -137,9 +136,9 @@
<dimen name="inline_icon_size">24dp</dimen>
<dimen name="preference_list_margin">@*android:dimen/car_margin</dimen>
<dimen name="hero_button_corner_radius">38dp</dimen>
- <dimen name="hero_button_separator">@*android:dimen/car_padding_4</dimen>
<dimen name="contact_avatar_corner_radius_percent" format="float">0.5</dimen>
<dimen name="touch_target_width">156dp</dimen>
+ <dimen name="phone_number_radio_list_padding">@*android:dimen/car_padding_2</dimen>
<!-- Toolbar -->
<!-- Half of the difference between car_margin and touch_target_size-->
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 685f9072..bc7996ab 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -24,8 +24,6 @@
<string name="bluetooth_disabled">To make or receive calls, turn Bluetooth on.</string>
<!-- Error text shown on the dialer facet for when bluetooth is not paired -->
<string name="bluetooth_unpaired">To make or receive calls, pair your phone with the car.</string>
- <!-- Toast text when sending a text failed because there is no app to compose texts [CHAR LIMIT=80] -->
- <string name="error_no_text_intent_handler">To send texts, you will need to install a messaging app.</string>
<!-- Button text for connecting to Bluetooth [CHAR LIMIT=40] -->
<string name="connect_bluetooth_button_text">Connect to Bluetooth</string>
<!-- Button text for making emergency call [CHAR LIMIT=40] -->
@@ -67,16 +65,6 @@
<!-- Toolbar title for tabbed pages -->
<string name="default_toolbar_title" translatable="false"></string>
- <!-- Button to quickly call a number. The string is the label of the phone. [CHAR LIMIT=30] -->
- <string name="contact_details_call_number_button_with_label">Call <xliff:g id="label" example="Mobile">%1$s</xliff:g></string>
- <!-- Button to quickly text a number. This string is the label of the phone. [CHAR LIMIT=30] -->
- <string name="contact_details_text_number_button_with_label">Text <xliff:g id="label" example="Mobile">%1$s</xliff:g></string>
-
- <!-- Button to quickly call a number, when the user must first select a number. [CHAR LIMIT=30] -->
- <string name="contact_details_call_number_button">Call</string>
- <!-- Button to quickly text a number, when the user must first select a number. [CHAR LIMIT=30] -->
- <string name="contact_details_text_number_button">Text</string>
-
<!-- Button to add start choosing a contact to add as a new favorite [CHAR_LIMIT=50] -->
<string name="add_favorite_button">Add a favorite</string>
<!-- Error message shown when on the favorites page without any favorites added [CHAR_LIMIT=80] -->
diff --git a/src/com/android/car/dialer/ui/contact/ContactListViewModel.java b/src/com/android/car/dialer/ui/contact/ContactListViewModel.java
index a0dbca86..d1938313 100644
--- a/src/com/android/car/dialer/ui/contact/ContactListViewModel.java
+++ b/src/com/android/car/dialer/ui/contact/ContactListViewModel.java
@@ -33,6 +33,7 @@ import com.android.car.telephony.common.InMemoryPhoneBook;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
+import java.util.concurrent.Future;
/**
* View model for {@link ContactListFragment}.
@@ -67,7 +68,7 @@ public class ContactListViewModel extends AndroidViewModel {
private final SharedPreferencesLiveData mPreferencesLiveData;
private final Context mContext;
- private Runnable mRunnable;
+ private Future<?> mRunnableFuture;
/**
* Sort by the default display order of a name. For western names it will be "Given Family".
@@ -123,22 +124,23 @@ public class ContactListViewModel extends AndroidViewModel {
// SingleThreadPoolExecutor is used here to avoid multiple threads sorting the list
// at the same time.
- if (mRunnable != null) {
- WorkerExecutor.getInstance().getSingleThreadPoolExecutor().remove(mRunnable);
+ if (mRunnableFuture != null) {
+ mRunnableFuture.cancel(true);
}
- mRunnable = () -> {
+ Runnable runnable = () -> {
Collections.sort(contactList, comparator);
postValue(contactList);
};
- WorkerExecutor.getInstance().getSingleThreadPoolExecutor().execute(mRunnable);
+ mRunnableFuture = WorkerExecutor.getInstance().getSingleThreadExecutor().submit(
+ runnable);
}
@Override
protected void onInactive() {
super.onInactive();
- if (mRunnable != null) {
- WorkerExecutor.getInstance().getSingleThreadPoolExecutor().remove(mRunnable);
+ if (mRunnableFuture != null) {
+ mRunnableFuture.cancel(true);
}
}
}
diff --git a/src/com/android/car/dialer/widget/WorkerExecutor.java b/src/com/android/car/dialer/widget/WorkerExecutor.java
index bfc92744..59b3bf16 100644
--- a/src/com/android/car/dialer/widget/WorkerExecutor.java
+++ b/src/com/android/car/dialer/widget/WorkerExecutor.java
@@ -16,21 +16,19 @@
package com.android.car.dialer.widget;
+import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
-import java.util.concurrent.ThreadPoolExecutor;
/**
- * WorkerExecutor is a singleton tied to the application to provide
- * ThreadPoolExecutor for Dialer.
+ * WorkerExecutor is a singleton tied to the application to provide {@link ExecutorService} for
+ * Dialer to run tasks in background.
*/
public class WorkerExecutor {
private static WorkerExecutor sWorkerExecutor;
- private ThreadPoolExecutor mSingleThreadPoolExecutor;
+ private ExecutorService mSingleThreadExecutor;
- /**
- * Get the singleton WorkerExecutor for the application
- */
+ /** Returns the singleton WorkerExecutor for the application. */
public static WorkerExecutor getInstance() {
if (sWorkerExecutor == null) {
sWorkerExecutor = new WorkerExecutor();
@@ -39,21 +37,17 @@ public class WorkerExecutor {
}
private WorkerExecutor() {
- mSingleThreadPoolExecutor = (ThreadPoolExecutor) Executors.newSingleThreadExecutor();
+ mSingleThreadExecutor = Executors.newSingleThreadExecutor();
}
- /**
- * Returns the ThreadPoolExecutor.
- */
- public ThreadPoolExecutor getSingleThreadPoolExecutor() {
- return mSingleThreadPoolExecutor;
+ /** Returns the single thread executor. */
+ public ExecutorService getSingleThreadExecutor() {
+ return mSingleThreadExecutor;
}
- /**
- * Tears down the singleton WorkerExecutor for the application
- */
+ /** Tears down the singleton WorkerExecutor for the application */
public void tearDown() {
- mSingleThreadPoolExecutor.shutdown();
+ mSingleThreadExecutor.shutdown();
sWorkerExecutor = null;
}
}
diff --git a/tests/checkresources.py b/tests/checkresources.py
index 27ad701e..8469bcac 100755
--- a/tests/checkresources.py
+++ b/tests/checkresources.py
@@ -7,12 +7,12 @@ process = subprocess.Popen(['lint', '--check', 'UnusedResources', sys.argv[1]],
stderr=subprocess.PIPE)
stdout, stderr = process.communicate()
-stdout = stdout.decode('utf-8')
+lines = stdout.decode('utf-8').split('\n')
results = []
-for line in stdout.split('\n'):
- if '[UnusedResources]' in line:
- results.append(line)
+for i in range(len(lines)-1):
+ if '[UnusedResources]' in lines[i] and 'msgid=' not in lines[i+1]:
+ results.append(lines[i])
if len(results) > 0:
print('\n'.join(results))
diff --git a/tests/robotests/src/com/android/car/dialer/ui/contact/ContactListViewHolderTest.java b/tests/robotests/src/com/android/car/dialer/ui/contact/ContactListViewHolderTest.java
index 55bc9718..982991da 100644
--- a/tests/robotests/src/com/android/car/dialer/ui/contact/ContactListViewHolderTest.java
+++ b/tests/robotests/src/com/android/car/dialer/ui/contact/ContactListViewHolderTest.java
@@ -88,7 +88,7 @@ public class ContactListViewHolderTest {
@Test
public void testLabel_withOnlyOneNumber_showLabel() {
PhoneNumber phoneNumber = PhoneNumber.newInstance(mContext, PHONE_NUMBER_1, 0, LABEL_1,
- false, 0, 0);
+ false, 0, null, null, 0);
when(mMockContact.getNumbers()).thenReturn(Arrays.asList(phoneNumber));
mContactListViewHolder.onBind(mMockContact);
@@ -98,7 +98,7 @@ public class ContactListViewHolderTest {
@Test
public void testLabel_withOneNumberAndNumberHasNullLabel_showTypeLabel() {
PhoneNumber phoneNumber = PhoneNumber.newInstance(mContext, PHONE_NUMBER_1, TYPE, null,
- false, 0, 0);
+ false, 0, null, null, 0);
when(mMockContact.getNumbers()).thenReturn(Arrays.asList(phoneNumber));
mContactListViewHolder.onBind(mMockContact);
@@ -122,9 +122,9 @@ public class ContactListViewHolderTest {
@Test
public void testLabel_withMultipleNumbersAndNoPrimaryNumber_showMultipleLabel() {
PhoneNumber phoneNumber1 = PhoneNumber.newInstance(mContext, PHONE_NUMBER_1, 0, LABEL_1,
- false, 0, 0);
+ false, 0, null, null, 0);
PhoneNumber phoneNumber2 = PhoneNumber.newInstance(mContext, PHONE_NUMBER_2, 0, LABEL_2,
- false, 0, 0);
+ false, 0, null, null, 0);
when(mMockContact.getNumbers()).thenReturn(Arrays.asList(phoneNumber1, phoneNumber2));
when(mMockContact.hasPrimaryPhoneNumber()).thenReturn(false);
mContactListViewHolder.onBind(mMockContact);
@@ -136,9 +136,9 @@ public class ContactListViewHolderTest {
@Test
public void testLabel_withMultipleNumbersAndHasPrimaryNumber_showPrimaryNumberLabel() {
PhoneNumber phoneNumber1 = PhoneNumber.newInstance(mContext, PHONE_NUMBER_1, 0, LABEL_1,
- false, 0, 0);
+ false, 0, null, null, 0);
PhoneNumber phoneNumber2 = PhoneNumber.newInstance(mContext, PHONE_NUMBER_2, 0, LABEL_2,
- false, 0, 0);
+ false, 0, null, null, 0);
when(mMockContact.getNumbers()).thenReturn(Arrays.asList(phoneNumber1, phoneNumber2));
when(mMockContact.hasPrimaryPhoneNumber()).thenReturn(true);
when(mMockContact.getPrimaryPhoneNumber()).thenReturn(phoneNumber2);
@@ -151,9 +151,9 @@ public class ContactListViewHolderTest {
@Test
public void testLabel_HasPrimaryNumberAndPrimaryNumberHasNullLabel_showPrimaryNumberLabel() {
PhoneNumber phoneNumber1 = PhoneNumber.newInstance(mContext, PHONE_NUMBER_1, 0, LABEL_1,
- false, 0, 0);
+ false, 0, null, null, 0);
PhoneNumber phoneNumber2 = PhoneNumber.newInstance(mContext, PHONE_NUMBER_2, TYPE, null,
- false, 0, 0);
+ false, 0, null, null, 0);
when(mMockContact.getNumbers()).thenReturn(Arrays.asList(phoneNumber1, phoneNumber2));
when(mMockContact.hasPrimaryPhoneNumber()).thenReturn(true);
when(mMockContact.getPrimaryPhoneNumber()).thenReturn(phoneNumber2);
@@ -186,7 +186,7 @@ public class ContactListViewHolderTest {
public void testClickCallActionButton_ContactHasOneNumber_placeCall() {
UiCallManager.set(mMockUiCallManager);
PhoneNumber phoneNumber = PhoneNumber.newInstance(mContext, PHONE_NUMBER_1, 0, LABEL_1,
- false, 0, 0);
+ false, 0, null, null, 0);
when(mMockContact.getNumbers()).thenReturn(Arrays.asList(phoneNumber));
mContactListViewHolder.onBind(mMockContact);
@@ -204,9 +204,9 @@ public class ContactListViewHolderTest {
public void testClickCallActionButton_HasMultipleNumbersAndNoPrimaryNumber_showAlertDialog() {
UiCallManager.set(mMockUiCallManager);
PhoneNumber phoneNumber1 = PhoneNumber.newInstance(mContext, PHONE_NUMBER_1, 0, LABEL_1,
- false, 0, 0);
+ false, 0, null, null, 0);
PhoneNumber phoneNumber2 = PhoneNumber.newInstance(mContext, PHONE_NUMBER_2, 0, LABEL_2,
- false, 0, 0);
+ false, 0, null, null, 0);
when(mMockContact.getNumbers()).thenReturn(Arrays.asList(phoneNumber1, phoneNumber2));
when(mMockContact.hasPrimaryPhoneNumber()).thenReturn(false);
mContactListViewHolder.onBind(mMockContact);
@@ -223,9 +223,9 @@ public class ContactListViewHolderTest {
public void testClickCallActionButton_HasMultipleNumbersAndPrimaryNumber_callPrimaryNumber() {
UiCallManager.set(mMockUiCallManager);
PhoneNumber phoneNumber1 = PhoneNumber.newInstance(mContext, PHONE_NUMBER_1, 0, LABEL_1,
- false, 0, 0);
+ false, 0, null, null, 0);
PhoneNumber phoneNumber2 = PhoneNumber.newInstance(mContext, PHONE_NUMBER_2, 0, LABEL_2,
- false, 0, 0);
+ false, 0, null, null, 0);
when(mMockContact.getNumbers()).thenReturn(Arrays.asList(phoneNumber1, phoneNumber2));
when(mMockContact.hasPrimaryPhoneNumber()).thenReturn(true);
when(mMockContact.getPrimaryPhoneNumber()).thenReturn(phoneNumber2);