diff options
author | linyuh <linyuh@google.com> | 2018-03-28 16:32:54 -0700 |
---|---|---|
committer | Copybara-Service <copybara-piper@google.com> | 2018-03-28 17:16:26 -0700 |
commit | 57751c35a0d4f25a817378b0a4b1d14336a0d4e8 (patch) | |
tree | b7b71bea6349e97306c9cecc200240c89a167eef /java/com/android/dialer/widget | |
parent | 32643ee1b0af99ae67dfd4641c4c163b699fe011 (diff) |
Create a common widget (ContactPhotoView) for a contact photo and its optional badge.
Bug: 70988682
Test: ContactPhotoViewTest
PiperOrigin-RevId: 190855440
Change-Id: Ib658efa6486b66548c710804049517905dc67b13
Diffstat (limited to 'java/com/android/dialer/widget')
3 files changed, 170 insertions, 0 deletions
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/widget/res/drawable/contact_photo_badge_background.xml b/java/com/android/dialer/widget/res/drawable/contact_photo_badge_background.xml new file mode 100644 index 000000000..4dcc7057e --- /dev/null +++ b/java/com/android/dialer/widget/res/drawable/contact_photo_badge_background.xml @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + ~ 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 + --> +<shape + xmlns:android="http://schemas.android.com/apk/res/android" + android:shape="oval"> + + <solid android:color="@color/dialer_theme_color"/> + <stroke android:color="@color/background_dialer_white" android:width="2dp"/> +</shape>
\ No newline at end of file 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 |