diff options
author | roldenburg <roldenburg@google.com> | 2017-07-11 17:23:21 -0700 |
---|---|---|
committer | Eric Erfanian <erfanian@google.com> | 2017-07-13 17:20:41 +0000 |
commit | b4b4b08f2232c686f93e899bacdbfd8600ff78e4 (patch) | |
tree | c0da4d86d4cefd1f285e146748d6612240158da7 | |
parent | f715de6b08e428ba45d1076e4133fe9b7f6b9a7d (diff) |
Fix Call button text alignment in expanded call log item
The Call button may have two lines of text. We were not properly setting the
second to GONE in all cases.
Note: We don't need to require Google Dialer being the default Dialer for the Duo integration to work. I added this check so removing it doesn't go against any previous well-considered decision. It also enables the Espresso test work without needing a flag to override.
Before: https://screenshot.googleplex.com/3YXaZdbQk7k
After: https://drive.google.com/open?id=0B7uuA4cyYX0xNThETTJWdTVQQWM
Bug: 63062360
Test: GoogleDialtactsActivityTest
PiperOrigin-RevId: 161606497
Change-Id: I7526a4fc60b84906cc04563b635eaad9f348415e
3 files changed, 37 insertions, 6 deletions
diff --git a/java/com/android/contacts/common/database/NoNullCursorAsyncQueryHandler.java b/java/com/android/contacts/common/database/NoNullCursorAsyncQueryHandler.java index d5e61354a..5d10720b5 100644 --- a/java/com/android/contacts/common/database/NoNullCursorAsyncQueryHandler.java +++ b/java/com/android/contacts/common/database/NoNullCursorAsyncQueryHandler.java @@ -20,6 +20,9 @@ import android.content.AsyncQueryHandler; import android.content.ContentResolver; import android.database.Cursor; import android.net.Uri; +import android.support.annotation.Nullable; +import android.support.annotation.VisibleForTesting; +import java.util.concurrent.atomic.AtomicInteger; /** * An {@AsyncQueryHandler} that will never return a null cursor. @@ -27,6 +30,8 @@ import android.net.Uri; * <p>Instead, will return a {@link Cursor} with 0 records. */ public abstract class NoNullCursorAsyncQueryHandler extends AsyncQueryHandler { + private static final AtomicInteger pendingQueryCount = new AtomicInteger(); + @Nullable private static PendingQueryCountChangedListener pendingQueryCountChangedListener; public NoNullCursorAsyncQueryHandler(ContentResolver cr) { super(cr); @@ -41,6 +46,11 @@ public abstract class NoNullCursorAsyncQueryHandler extends AsyncQueryHandler { String selection, String[] selectionArgs, String orderBy) { + pendingQueryCount.getAndIncrement(); + if (pendingQueryCountChangedListener != null) { + pendingQueryCountChangedListener.onPendingQueryCountChanged(); + } + final CookieWithProjection projectionCookie = new CookieWithProjection(cookie, projection); super.startQuery(token, projectionCookie, uri, projection, selection, selectionArgs, orderBy); } @@ -55,10 +65,31 @@ public abstract class NoNullCursorAsyncQueryHandler extends AsyncQueryHandler { cursor = new EmptyCursor(projectionCookie.projection); } onNotNullableQueryComplete(token, projectionCookie.originalCookie, cursor); + + pendingQueryCount.getAndDecrement(); + if (pendingQueryCountChangedListener != null) { + pendingQueryCountChangedListener.onPendingQueryCountChanged(); + } } protected abstract void onNotNullableQueryComplete(int token, Object cookie, Cursor cursor); + @VisibleForTesting(otherwise = VisibleForTesting.NONE) + public static void setPendingQueryCountChangedListener( + @Nullable PendingQueryCountChangedListener listener) { + pendingQueryCountChangedListener = listener; + } + + @VisibleForTesting(otherwise = VisibleForTesting.NONE) + public static int getPendingQueryCount() { + return pendingQueryCount.get(); + } + + /** Callback to listen for changes in the number of queries that have not completed. */ + public interface PendingQueryCountChangedListener { + void onPendingQueryCountChanged(); + } + /** Class to add projection to an existing cookie. */ private static class CookieWithProjection { diff --git a/java/com/android/dialer/app/calllog/CallLogListItemViewHolder.java b/java/com/android/dialer/app/calllog/CallLogListItemViewHolder.java index 884d07d50..6b97bd694 100644 --- a/java/com/android/dialer/app/calllog/CallLogListItemViewHolder.java +++ b/java/com/android/dialer/app/calllog/CallLogListItemViewHolder.java @@ -581,12 +581,16 @@ public final class CallLogListItemViewHolder extends RecyclerView.ViewHolder return; } + TextView callTypeOrLocationView = + ((TextView) callButtonView.findViewById(R.id.call_type_or_location_text)); + if (canPlaceCallToNumber) { // Set up the call button but hide it by default (the primary action is to call so it is // redundant). We then set it to be visible when appropriate below. This saves us having to // remember to set it to GONE in multiple places. callButtonView.setTag(IntentProvider.getReturnCallIntentProvider(number)); callButtonView.setVisibility(View.GONE); + callTypeOrLocationView.setVisibility(View.GONE); } if (!TextUtils.isEmpty(voicemailUri) && canPlaceCallToNumber) { @@ -595,13 +599,10 @@ public final class CallLogListItemViewHolder extends RecyclerView.ViewHolder TextUtils.expandTemplate( mContext.getString(R.string.call_log_action_call), nameOrNumber == null ? "" : nameOrNumber)); - TextView callTypeOrLocationView = - ((TextView) callButtonView.findViewById(R.id.call_type_or_location_text)); + if (callType == Calls.VOICEMAIL_TYPE && !TextUtils.isEmpty(callTypeOrLocation)) { callTypeOrLocationView.setText(callTypeOrLocation); callTypeOrLocationView.setVisibility(View.VISIBLE); - } else { - callTypeOrLocationView.setVisibility(View.GONE); } callButtonView.setVisibility(View.VISIBLE); } diff --git a/java/com/android/dialer/app/res/layout/call_log_list_item_actions.xml b/java/com/android/dialer/app/res/layout/call_log_list_item_actions.xml index 504638348..ec9e5a00e 100644 --- a/java/com/android/dialer/app/res/layout/call_log_list_item_actions.xml +++ b/java/com/android/dialer/app/res/layout/call_log_list_item_actions.xml @@ -35,8 +35,7 @@ <LinearLayout android:id="@+id/call_action" - style="@style/CallLogActionStyle" - android:paddingTop="@dimen/call_log_actions_top_padding"> + style="@style/CallLogActionStyle"> <ImageView style="@style/CallLogActionIconStyle" |