diff options
author | Treehugger Robot <treehugger-gerrit@google.com> | 2018-03-29 01:04:55 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2018-03-29 01:04:55 +0000 |
commit | 1b3cf4d73e692182efc3a87e1582505438309283 (patch) | |
tree | b7b71bea6349e97306c9cecc200240c89a167eef | |
parent | d72585b40d67560cb868c2ac4d6fbda2ed27454b (diff) | |
parent | 57751c35a0d4f25a817378b0a4b1d14336a0d4e8 (diff) |
Merge changes Ib658efa6,I0f84f15c
* changes:
Create a common widget (ContactPhotoView) for a contact photo and its optional badge.
Remove unnecessary call to StatusBarNotifier.updateNotification().
-rw-r--r-- | java/com/android/dialer/calllog/ui/NewCallLogViewHolder.java | 21 | ||||
-rw-r--r-- | java/com/android/dialer/calllog/ui/res/layout/new_call_log_entry.xml | 50 | ||||
-rw-r--r-- | java/com/android/dialer/widget/ContactPhotoView.java | 97 | ||||
-rw-r--r-- | java/com/android/dialer/widget/res/drawable/contact_photo_badge_background.xml (renamed from java/com/android/dialer/calllog/ui/res/drawable/contact_photo_badge_background.xml) | 0 | ||||
-rw-r--r-- | java/com/android/dialer/widget/res/layout/contact_photo_view.xml | 50 | ||||
-rw-r--r-- | java/com/android/incallui/InCallActivity.java | 3 | ||||
-rw-r--r-- | java/com/android/incallui/InCallPresenter.java | 17 |
7 files changed, 162 insertions, 76 deletions
diff --git a/java/com/android/dialer/calllog/ui/NewCallLogViewHolder.java b/java/com/android/dialer/calllog/ui/NewCallLogViewHolder.java index aa71ec4e1..9809d97f5 100644 --- a/java/com/android/dialer/calllog/ui/NewCallLogViewHolder.java +++ b/java/com/android/dialer/calllog/ui/NewCallLogViewHolder.java @@ -24,9 +24,7 @@ import android.support.annotation.DrawableRes; import android.support.v7.widget.RecyclerView; import android.text.TextUtils; import android.view.View; -import android.widget.FrameLayout; import android.widget.ImageView; -import android.widget.QuickContactBadge; import android.widget.TextView; import com.android.dialer.calllog.model.CoalescedRow; import com.android.dialer.calllog.ui.menu.NewCallLogMenu; @@ -39,6 +37,7 @@ import com.android.dialer.compat.telephony.TelephonyManagerCompat; import com.android.dialer.glidephotomanager.GlidePhotoManager; import com.android.dialer.oem.MotorolaUtils; import com.android.dialer.time.Clock; +import com.android.dialer.widget.ContactPhotoView; import com.google.common.util.concurrent.FutureCallback; import com.google.common.util.concurrent.Futures; import java.util.Locale; @@ -48,11 +47,10 @@ import java.util.concurrent.ExecutorService; final class NewCallLogViewHolder extends RecyclerView.ViewHolder { private final Context context; + private final ContactPhotoView contactPhotoView; private final TextView primaryTextView; private final TextView callCountTextView; private final TextView secondaryTextView; - private final QuickContactBadge contactPhoto; - private final FrameLayout contactBadgeContainer; private final ImageView callTypeIcon; private final ImageView hdIcon; private final ImageView wifiIcon; @@ -75,11 +73,10 @@ final class NewCallLogViewHolder extends RecyclerView.ViewHolder { GlidePhotoManager glidePhotoManager) { super(view); this.context = view.getContext(); + contactPhotoView = view.findViewById(R.id.contact_photo_view); primaryTextView = view.findViewById(R.id.primary_text); callCountTextView = view.findViewById(R.id.call_count); secondaryTextView = view.findViewById(R.id.secondary_text); - contactPhoto = view.findViewById(R.id.quick_contact_photo); - contactBadgeContainer = view.findViewById(R.id.contact_badge_container); callTypeIcon = view.findViewById(R.id.call_type_icon); hdIcon = view.findViewById(R.id.hd_icon); wifiIcon = view.findViewById(R.id.wifi_icon); @@ -154,20 +151,12 @@ final class NewCallLogViewHolder extends RecyclerView.ViewHolder { } private void setPhoto(CoalescedRow row) { - glidePhotoManager.loadQuickContactBadge( - contactPhoto, + contactPhotoView.setPhoto( NumberAttributesConverter.toPhotoInfoBuilder(row.getNumberAttributes()) .setFormattedNumber(row.getFormattedNumber()) + .setIsVideo((row.getFeatures() & Calls.FEATURES_VIDEO) == Calls.FEATURES_VIDEO) .setIsVoicemail(row.getIsVoicemailCall()) .build()); - - contactBadgeContainer.setVisibility( - shouldShowVideoCallIcon(row) ? View.VISIBLE : View.INVISIBLE); - } - - private static boolean shouldShowVideoCallIcon(CoalescedRow row) { - return (row.getFeatures() & Calls.FEATURES_VIDEO) == Calls.FEATURES_VIDEO - && !row.getNumberAttributes().getIsSpam(); } private void setFeatureIcons(CoalescedRow row) { diff --git a/java/com/android/dialer/calllog/ui/res/layout/new_call_log_entry.xml b/java/com/android/dialer/calllog/ui/res/layout/new_call_log_entry.xml index 22854311d..672a9a35e 100644 --- a/java/com/android/dialer/calllog/ui/res/layout/new_call_log_entry.xml +++ b/java/com/android/dialer/calllog/ui/res/layout/new_call_log_entry.xml @@ -21,43 +21,13 @@ android:layout_height="wrap_content" android:minHeight="72dp"> - <!-- Contact photo (including the optional video icon) --> - <FrameLayout - android:id="@+id/contact_photo_container" - android:layout_width="52dp" - android:layout_height="44dp" - android:layout_marginStart="10dp" - android:layout_marginEnd="10dp" - android:layout_centerVertical="true" - android:focusable="false"> - - <QuickContactBadge - android:id="@+id/quick_contact_photo" - android:layout_width="40dp" - android:layout_height="40dp" - android:layout_gravity="center" - android:focusable="true"/> - - <FrameLayout - android:id="@+id/contact_badge_container" - android:layout_width="22dp" - android:layout_height="22dp" - android:layout_gravity="bottom|end"> - - <ImageView - android:id="@+id/contact_badge_background" - android:layout_width="match_parent" - android:layout_height="match_parent" - android:src="@drawable/contact_photo_badge_background"/> - - <ImageView - android:id="@+id/video_call_icon" - android:layout_width="13dp" - android:layout_height="13dp" - android:layout_gravity="center" - android:src="@drawable/quantum_ic_videocam_vd_white_24"/> - </FrameLayout> - </FrameLayout> + <com.android.dialer.widget.ContactPhotoView + android:id="@+id/contact_photo_view" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginStart="10dp" + android:layout_marginEnd="10dp" + android:layout_centerVertical="true"/> <!-- The frame layout is necessary to avoid clipping the icons and ellipsize the text when the content is too wide to fit. @@ -66,7 +36,7 @@ android:id="@+id/primary_row" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_toEndOf="@+id/contact_photo_container" + android:layout_toEndOf="@+id/contact_photo_view" android:layout_toStartOf="@+id/menu_button"> <LinearLayout @@ -127,7 +97,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/primary_row" - android:layout_toEndOf="@+id/contact_photo_container" + android:layout_toEndOf="@+id/contact_photo_view" android:orientation="horizontal"> <ImageView @@ -153,7 +123,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/secondary_row" - android:layout_toEndOf="@+id/contact_photo_container" + android:layout_toEndOf="@+id/contact_photo_view" android:ellipsize="end" android:singleLine="true" android:visibility="gone"/> diff --git a/java/com/android/dialer/widget/ContactPhotoView.java b/java/com/android/dialer/widget/ContactPhotoView.java new file mode 100644 index 000000000..6fcc89ab0 --- /dev/null +++ b/java/com/android/dialer/widget/ContactPhotoView.java @@ -0,0 +1,97 @@ +/* + * Copyright (C) 2018 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.widget; + +import android.content.Context; +import android.support.annotation.Nullable; +import android.util.AttributeSet; +import android.view.LayoutInflater; +import android.view.View; +import android.widget.FrameLayout; +import android.widget.ImageView; +import android.widget.QuickContactBadge; +import com.android.dialer.common.Assert; +import com.android.dialer.glidephotomanager.GlidePhotoManager; +import com.android.dialer.glidephotomanager.GlidePhotoManagerComponent; +import com.android.dialer.glidephotomanager.PhotoInfo; + +/** + * A {@link FrameLayout} for displaying a contact photo and its optional badge (such as one for a + * video call). + */ +public final class ContactPhotoView extends FrameLayout { + private final QuickContactBadge contactPhoto; + private final FrameLayout contactBadgeContainer; + private final ImageView videoCallBadge; + + private final GlidePhotoManager glidePhotoManager; + + public ContactPhotoView(Context context) { + this(context, /* attrs = */ null); + } + + public ContactPhotoView(Context context, @Nullable AttributeSet attrs) { + this(context, attrs, /* defStyleAttr = */ 0); + } + + public ContactPhotoView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { + this(context, attrs, defStyleAttr, /* defStyleRes = */ 0); + } + + public ContactPhotoView( + Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) { + super(context, attrs, defStyleAttr, defStyleRes); + + inflateLayout(); + + contactPhoto = findViewById(R.id.quick_contact_photo); + contactBadgeContainer = findViewById(R.id.contact_badge_container); + videoCallBadge = findViewById(R.id.video_call_badge); + + glidePhotoManager = GlidePhotoManagerComponent.get(context).glidePhotoManager(); + + hideBadge(); // Hide badges by default. + } + + private void inflateLayout() { + LayoutInflater inflater = Assert.isNotNull(getContext().getSystemService(LayoutInflater.class)); + inflater.inflate(R.layout.contact_photo_view, /* root = */ this); + } + + private void hideBadge() { + contactBadgeContainer.setVisibility(View.INVISIBLE); + videoCallBadge.setVisibility(View.INVISIBLE); + } + + /** Sets the contact photo and its badge to be displayed. */ + public void setPhoto(PhotoInfo photoInfo) { + glidePhotoManager.loadQuickContactBadge(contactPhoto, photoInfo); + setBadge(photoInfo); + } + + private void setBadge(PhotoInfo photoInfo) { + // No badge for spam numbers. + if (photoInfo.getIsSpam()) { + return; + } + + if (photoInfo.getIsVideo()) { + contactBadgeContainer.setVisibility(View.VISIBLE); + videoCallBadge.setVisibility(View.VISIBLE); + } + } +} diff --git a/java/com/android/dialer/calllog/ui/res/drawable/contact_photo_badge_background.xml b/java/com/android/dialer/widget/res/drawable/contact_photo_badge_background.xml index 4dcc7057e..4dcc7057e 100644 --- a/java/com/android/dialer/calllog/ui/res/drawable/contact_photo_badge_background.xml +++ b/java/com/android/dialer/widget/res/drawable/contact_photo_badge_background.xml diff --git a/java/com/android/dialer/widget/res/layout/contact_photo_view.xml b/java/com/android/dialer/widget/res/layout/contact_photo_view.xml new file mode 100644 index 000000000..e505e5866 --- /dev/null +++ b/java/com/android/dialer/widget/res/layout/contact_photo_view.xml @@ -0,0 +1,50 @@ +<!-- + ~ Copyright (C) 2018 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 + --> + +<!-- A FrameLayout for displaying a contact photo and its optional badge --> +<FrameLayout + xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="52dp" + android:layout_height="44dp" + android:focusable="false"> + + <QuickContactBadge + android:id="@+id/quick_contact_photo" + android:layout_width="40dp" + android:layout_height="40dp" + android:layout_gravity="center" + android:focusable="true"/> + + <FrameLayout + android:id="@+id/contact_badge_container" + android:layout_width="22dp" + android:layout_height="22dp" + android:layout_gravity="bottom|end"> + + <ImageView + android:id="@+id/contact_badge_background" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:src="@drawable/contact_photo_badge_background"/> + + <ImageView + android:id="@+id/video_call_badge" + android:layout_width="13dp" + android:layout_height="13dp" + android:layout_gravity="center" + android:src="@drawable/quantum_ic_videocam_vd_white_24"/> + </FrameLayout> +</FrameLayout>
\ No newline at end of file diff --git a/java/com/android/incallui/InCallActivity.java b/java/com/android/incallui/InCallActivity.java index 8144ddb10..9d08dc4b6 100644 --- a/java/com/android/incallui/InCallActivity.java +++ b/java/com/android/incallui/InCallActivity.java @@ -476,7 +476,6 @@ public class InCallActivity extends TransactionSafeFragmentActivity if (!InCallPresenter.getInstance().isReadyForTearDown()) { updateTaskDescription(); - InCallPresenter.getInstance().updateNotification(); } // If there is a pending request to show or hide the dialpad, handle that now. @@ -534,8 +533,6 @@ public class InCallActivity extends TransactionSafeFragmentActivity dialpadFragment.onDialerKeyUp(null); } - InCallPresenter.getInstance().updateNotification(); - InCallPresenter.getInstance().getPseudoScreenState().removeListener(this); Trace.endSection(); } diff --git a/java/com/android/incallui/InCallPresenter.java b/java/com/android/incallui/InCallPresenter.java index a4b90f1a6..2e98a969d 100644 --- a/java/com/android/incallui/InCallPresenter.java +++ b/java/com/android/incallui/InCallPresenter.java @@ -1050,14 +1050,6 @@ public class InCallPresenter implements CallList.Listener, AudioModeProvider.Aud "updateIsChangingConfigurations = " + isChangingConfigurations); } - void updateNotification() { - // We need to update the notification bar when we leave the UI because that - // could trigger it to show again. - if (statusBarNotifier != null) { - statusBarNotifier.updateNotification(); - } - } - /** Called when the activity goes in/out of the foreground. */ public void onUiShowing(boolean showing) { if (proximitySensor != null) { @@ -1316,11 +1308,6 @@ public class InCallPresenter implements CallList.Listener, AudioModeProvider.Aud // know that start-up is complete. // // [ AND NOW YOU'RE IN THE CALL. voila! ] - // - // Our app is started using a fullScreen notification. We need to do this whenever - // we get an incoming call. Depending on the current context of the device, either a - // incoming call HUN or the actual InCallActivity will be shown. - final boolean startIncomingCallSequence = (InCallState.INCOMING == newState); // A dialog to show on top of the InCallUI to select a PhoneAccount final boolean showAccountPicker = (InCallState.WAITING_FOR_ACCOUNT == newState); @@ -1387,10 +1374,6 @@ public class InCallPresenter implements CallList.Listener, AudioModeProvider.Aud if (showCallUi || showAccountPicker) { LogUtil.i("InCallPresenter.startOrFinishUi", "Start in call UI"); showInCall(false /* showDialpad */, !showAccountPicker /* newOutgoingCall */); - } else if (startIncomingCallSequence) { - LogUtil.i("InCallPresenter.startOrFinishUi", "Start Full Screen in call UI"); - - statusBarNotifier.updateNotification(); } else if (newState == InCallState.NO_CALLS) { // The new state is the no calls state. Tear everything down. attemptFinishActivity(); |