diff options
author | Xin Li <delphij@google.com> | 2019-08-14 12:04:07 -0700 |
---|---|---|
committer | Xin Li <delphij@google.com> | 2019-08-14 12:04:07 -0700 |
commit | f6167a627d370fe6376ebe63acef77b6091e0ff1 (patch) | |
tree | cf14dae4f78428217400aeea089d937f131d5624 | |
parent | f39d95c600d4f53cf48603b4750433235c0a8c12 (diff) | |
parent | 3f5e111502eced3f737247fe5a3aa5b0627fe227 (diff) | |
download | Dialer-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.xml | 24 | ||||
-rw-r--r-- | res/layout/phone_number_list_item.xml | 3 | ||||
-rw-r--r-- | res/values/dimens.xml | 3 | ||||
-rw-r--r-- | res/values/strings.xml | 12 | ||||
-rw-r--r-- | src/com/android/car/dialer/ui/contact/ContactListViewModel.java | 16 | ||||
-rw-r--r-- | src/com/android/car/dialer/widget/WorkerExecutor.java | 28 | ||||
-rwxr-xr-x | tests/checkresources.py | 8 | ||||
-rw-r--r-- | tests/robotests/src/com/android/car/dialer/ui/contact/ContactListViewHolderTest.java | 26 |
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); |