From 29b95403e0997f58e0030e638dcdaf209319f282 Mon Sep 17 00:00:00 2001 From: calderwoodra Date: Thu, 17 May 2018 16:15:40 -0700 Subject: Fixed various speed dial issues. X. Pinned contacts are now saved onPause 4. Large display size no longer crops images 14. If ViLTE is disabled, IMS_VIDEO channels won't be added. Bug: 78491298,79876391,79876661 Test: manual PiperOrigin-RevId: 197068627 Change-Id: I642a11d684c648b7f6579792313b09eabb09a9fa --- .../dialer/speeddial/SpeedDialFragment.java | 1 + .../android/dialer/speeddial/SquareImageView.java | 36 ---------------------- .../dialer/speeddial/loader/SpeedDialUiItem.java | 9 ++++-- .../speeddial/loader/SpeedDialUiItemMutator.java | 33 ++++++++++++++++++-- .../speeddial/res/layout/favorite_item_layout.xml | 9 +++--- 5 files changed, 43 insertions(+), 45 deletions(-) delete mode 100644 java/com/android/dialer/speeddial/SquareImageView.java diff --git a/java/com/android/dialer/speeddial/SpeedDialFragment.java b/java/com/android/dialer/speeddial/SpeedDialFragment.java index fc80d23da..c118f9601 100644 --- a/java/com/android/dialer/speeddial/SpeedDialFragment.java +++ b/java/com/android/dialer/speeddial/SpeedDialFragment.java @@ -183,6 +183,7 @@ public class SpeedDialFragment extends Fragment { super.onPause(); favoritesListener.hideMenu(); suggestedListener.onPause(); + onHidden(); } @Override diff --git a/java/com/android/dialer/speeddial/SquareImageView.java b/java/com/android/dialer/speeddial/SquareImageView.java deleted file mode 100644 index a12f4d426..000000000 --- a/java/com/android/dialer/speeddial/SquareImageView.java +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright (C) 2017 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.dialer.speeddial; - -import android.content.Context; -import android.support.annotation.Nullable; -import android.util.AttributeSet; -import android.widget.QuickContactBadge; - -/** A square {@link android.widget.ImageView} constrained on width. */ -public class SquareImageView extends QuickContactBadge { - - public SquareImageView(Context context, @Nullable AttributeSet attrs) { - super(context, attrs); - setClickable(false); - } - - @Override - protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { - super.onMeasure(widthMeasureSpec, widthMeasureSpec); - } -} diff --git a/java/com/android/dialer/speeddial/loader/SpeedDialUiItem.java b/java/com/android/dialer/speeddial/loader/SpeedDialUiItem.java index 2b056bbfc..9e227553b 100644 --- a/java/com/android/dialer/speeddial/loader/SpeedDialUiItem.java +++ b/java/com/android/dialer/speeddial/loader/SpeedDialUiItem.java @@ -18,6 +18,7 @@ package com.android.dialer.speeddial.loader; import android.content.res.Resources; import android.database.Cursor; +import android.os.Trace; import android.provider.ContactsContract.CommonDataKinds.Phone; import android.provider.ContactsContract.Contacts; import android.provider.ContactsContract.Data; @@ -105,7 +106,9 @@ public abstract class SpeedDialUiItem { *

If the cursor started at row X, this method will advance to row Y s.t. rows X, X + 1, ... Y * - 1 all belong to the same contact (that is, share the same contact id and lookup key). */ - public static SpeedDialUiItem fromCursor(Resources resources, Cursor cursor) { + public static SpeedDialUiItem fromCursor( + Resources resources, Cursor cursor, boolean isImsEnabled) { + Trace.beginSection("fromCursor"); Assert.checkArgument(cursor != null); Assert.checkArgument(cursor.getCount() != 0); String lookupKey = cursor.getString(LOOKUP_KEY); @@ -141,7 +144,8 @@ public abstract class SpeedDialUiItem { .build(); channels.add(channel); - if ((cursor.getInt(CARRIER_PRESENCE) & Data.CARRIER_PRESENCE_VT_CAPABLE) == 1) { + if (isImsEnabled + && (cursor.getInt(CARRIER_PRESENCE) & Data.CARRIER_PRESENCE_VT_CAPABLE) == 1) { // Add another channel if the number is ViLTE reachable channels.add(channel.toBuilder().setTechnology(Channel.IMS_VIDEO).build()); } @@ -149,6 +153,7 @@ public abstract class SpeedDialUiItem { } while (cursor.moveToNext() && Objects.equals(lookupKey, cursor.getString(LOOKUP_KEY))); builder.setChannels(ImmutableList.copyOf(channels)); + Trace.endSection(); return builder.build(); } diff --git a/java/com/android/dialer/speeddial/loader/SpeedDialUiItemMutator.java b/java/com/android/dialer/speeddial/loader/SpeedDialUiItemMutator.java index 1ad37dc2a..998793e6e 100644 --- a/java/com/android/dialer/speeddial/loader/SpeedDialUiItemMutator.java +++ b/java/com/android/dialer/speeddial/loader/SpeedDialUiItemMutator.java @@ -25,6 +25,7 @@ import android.database.Cursor; import android.net.Uri; import android.os.Build.VERSION_CODES; import android.os.RemoteException; +import android.os.Trace; import android.provider.ContactsContract; import android.provider.ContactsContract.CommonDataKinds.Phone; import android.provider.ContactsContract.Contacts; @@ -46,6 +47,7 @@ import com.android.dialer.speeddial.database.SpeedDialEntry; import com.android.dialer.speeddial.database.SpeedDialEntry.Channel; import com.android.dialer.speeddial.database.SpeedDialEntryDao; import com.android.dialer.speeddial.database.SpeedDialEntryDatabaseHelper; +import com.android.dialer.util.CallUtil; import com.google.common.base.Optional; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; @@ -205,7 +207,9 @@ public final class SpeedDialUiItemMutator { return loadSpeedDialUiItemsInternal(); } Assert.checkArgument(cursor.moveToFirst(), "Cursor should never be empty"); - SpeedDialUiItem item = SpeedDialUiItem.fromCursor(appContext.getResources(), cursor); + SpeedDialUiItem item = + SpeedDialUiItem.fromCursor( + appContext.getResources(), cursor, CallUtil.isVideoEnabled(appContext)); // Star the contact if it isn't starred already, then return. if (!item.isStarred()) { @@ -228,9 +232,12 @@ public final class SpeedDialUiItemMutator { @WorkerThread private ImmutableList loadSpeedDialUiItemsInternal() { + Trace.beginSection("loadSpeedDialUiItemsInternal"); Assert.isWorkerThread(); contactsPreferences.refreshValue(ContactsPreferences.DISPLAY_ORDER_KEY); + Trace.beginSection("getAllEntries"); SpeedDialEntryDao db = getSpeedDialEntryDao(); + Trace.endSection(); // getAllEntries // This is the list of contacts that we will display to the user List speedDialUiItems = new ArrayList<>(); @@ -251,6 +258,7 @@ public final class SpeedDialUiItemMutator { "Updated entries are incomplete: " + entries.size() + " != " + entriesToUiItems.size()); // Mark the SpeedDialEntries to be updated or deleted + Trace.beginSection("updateOrDeleteEntries"); for (SpeedDialEntry entry : entries) { SpeedDialUiItem contact = entriesToUiItems.get(entry); // Remove contacts that no longer exist or are no longer starred @@ -271,12 +279,14 @@ public final class SpeedDialUiItemMutator { // These are our existing starred entries speedDialUiItems.add(contact); } + Trace.endSection(); // updateOrDeleteEntries // Get all Strequent Contacts List strequentContacts = getStrequentContacts(); // For each contact, if it isn't starred, add it as a suggestion. // If it is starred and not already accounted for above, then insert into the SpeedDialEntry DB. + Trace.beginSection("addSuggestions"); for (SpeedDialUiItem contact : strequentContacts) { if (!contact.isStarred()) { // Add this contact as a suggestion @@ -291,12 +301,16 @@ public final class SpeedDialUiItemMutator { speedDialUiItems.add(contact); } } + Trace.endSection(); // addSuggestions + Trace.beginSection("insertUpdateAndDelete"); ImmutableMap insertedEntriesToIdsMap = db.insertUpdateAndDelete( ImmutableList.copyOf(entriesToInsert), ImmutableList.copyOf(entriesToUpdate), ImmutableList.copyOf(entriesToDelete)); + Trace.endSection(); // insertUpdateAndDelete + Trace.endSection(); // loadSpeedDialUiItemsInternal return speedDialUiItemsWithUpdatedIds(speedDialUiItems, insertedEntriesToIdsMap); } @@ -388,11 +402,13 @@ public final class SpeedDialUiItemMutator { @WorkerThread private Map getSpeedDialUiItemsFromEntries( List entries) { + Trace.beginSection("getSpeedDialUiItemsFromEntries"); Assert.isWorkerThread(); // Fetch the contact ids from the SpeedDialEntries Set contactIds = new ArraySet<>(); entries.forEach(entry -> contactIds.add(Long.toString(entry.contactId()))); if (contactIds.isEmpty()) { + Trace.endSection(); return new ArrayMap<>(); } @@ -410,7 +426,9 @@ public final class SpeedDialUiItemMutator { null)) { Map map = new ArrayMap<>(); for (cursor.moveToFirst(); !cursor.isAfterLast(); /* Iterate in the loop */ ) { - SpeedDialUiItem item = SpeedDialUiItem.fromCursor(appContext.getResources(), cursor); + SpeedDialUiItem item = + SpeedDialUiItem.fromCursor( + appContext.getResources(), cursor, CallUtil.isVideoEnabled(appContext)); for (SpeedDialEntry entry : entries) { if (entry.contactId() == item.contactId()) { // Update the id and pinned position to match it's corresponding SpeedDialEntry. @@ -442,6 +460,7 @@ public final class SpeedDialUiItemMutator { for (SpeedDialEntry entry : entries) { map.putIfAbsent(entry, null); } + Trace.endSection(); return map; } } @@ -467,6 +486,7 @@ public final class SpeedDialUiItemMutator { @WorkerThread private List getStrequentContacts() { + Trace.beginSection("getStrequentContacts"); Assert.isWorkerThread(); Set contactIds = new ArraySet<>(); @@ -482,9 +502,11 @@ public final class SpeedDialUiItemMutator { .query(strequentUri, new String[] {Phone.CONTACT_ID}, null, null, null)) { if (cursor == null) { LogUtil.e("SpeedDialUiItemMutator.getStrequentContacts", "null cursor"); + Trace.endSection(); return new ArrayList<>(); } if (cursor.getCount() == 0) { + Trace.endSection(); return new ArrayList<>(); } for (cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()) { @@ -507,14 +529,19 @@ public final class SpeedDialUiItemMutator { List contacts = new ArrayList<>(); if (cursor == null) { LogUtil.e("SpeedDialUiItemMutator.getStrequentContacts", "null cursor"); + Trace.endSection(); return new ArrayList<>(); } if (cursor.getCount() == 0) { + Trace.endSection(); return contacts; } for (cursor.moveToFirst(); !cursor.isAfterLast(); /* Iterate in the loop */ ) { - contacts.add(SpeedDialUiItem.fromCursor(appContext.getResources(), cursor)); + contacts.add( + SpeedDialUiItem.fromCursor( + appContext.getResources(), cursor, CallUtil.isVideoEnabled(appContext))); } + Trace.endSection(); return contacts; } } diff --git a/java/com/android/dialer/speeddial/res/layout/favorite_item_layout.xml b/java/com/android/dialer/speeddial/res/layout/favorite_item_layout.xml index 134196da7..a0bbfbd36 100644 --- a/java/com/android/dialer/speeddial/res/layout/favorite_item_layout.xml +++ b/java/com/android/dialer/speeddial/res/layout/favorite_item_layout.xml @@ -27,14 +27,15 @@ android:layout_width="wrap_content" android:layout_height="104dp" android:layout_gravity="center_horizontal" - android:layout_marginBottom="8dp"> + android:layout_marginBottom="8dp" + android:minWidth="128dp"> - + android:layout_gravity="center_horizontal" + android:clickable="false"/>