diff options
Diffstat (limited to 'java')
6 files changed, 43 insertions, 9 deletions
diff --git a/java/com/android/dialer/glidephotomanager/impl/GlidePhotoManagerImpl.java b/java/com/android/dialer/glidephotomanager/impl/GlidePhotoManagerImpl.java index 562177c48..515a3ccbb 100644 --- a/java/com/android/dialer/glidephotomanager/impl/GlidePhotoManagerImpl.java +++ b/java/com/android/dialer/glidephotomanager/impl/GlidePhotoManagerImpl.java @@ -62,6 +62,10 @@ public class GlidePhotoManagerImpl implements GlidePhotoManager { @Override public void loadContactPhoto(ImageView imageView, PhotoInfo photoInfo) { Assert.isMainThread(); + imageView.setContentDescription( + appContext.getString( + com.android.dialer.contactphoto.R.string.description_quick_contact_for, + photoInfo.getName())); GlideRequest<Drawable> request = buildRequest(GlideApp.with(imageView), photoInfo); request.into(imageView); } diff --git a/java/com/android/dialer/speeddial/FavoritesViewHolder.java b/java/com/android/dialer/speeddial/FavoritesViewHolder.java index 474516ef2..f06672d8d 100644 --- a/java/com/android/dialer/speeddial/FavoritesViewHolder.java +++ b/java/com/android/dialer/speeddial/FavoritesViewHolder.java @@ -68,10 +68,15 @@ public class FavoritesViewHolder extends RecyclerView.ViewHolder Assert.checkArgument(speedDialUiItem.isStarred()); nameView.setText(speedDialUiItem.name()); - if (speedDialUiItem.defaultChannel() != null) { - phoneType.setText(speedDialUiItem.defaultChannel().label()); - videoCallIcon.setVisibility( - speedDialUiItem.defaultChannel().isVideoTechnology() ? View.VISIBLE : View.GONE); + + Channel channel = speedDialUiItem.defaultChannel(); + if (channel == null) { + channel = speedDialUiItem.getDefaultVoiceChannel(); + } + + if (channel != null) { + phoneType.setText(channel.label()); + videoCallIcon.setVisibility(channel.isVideoTechnology() ? View.VISIBLE : View.GONE); } else { phoneType.setText(""); videoCallIcon.setVisibility(View.GONE); diff --git a/java/com/android/dialer/speeddial/loader/SpeedDialUiItem.java b/java/com/android/dialer/speeddial/loader/SpeedDialUiItem.java index 325af238a..731c8c641 100644 --- a/java/com/android/dialer/speeddial/loader/SpeedDialUiItem.java +++ b/java/com/android/dialer/speeddial/loader/SpeedDialUiItem.java @@ -16,6 +16,7 @@ package com.android.dialer.speeddial.loader; +import android.content.res.Resources; import android.database.Cursor; import android.provider.ContactsContract.CommonDataKinds.Phone; import android.provider.ContactsContract.Contacts; @@ -102,7 +103,7 @@ public abstract class SpeedDialUiItem { * <p>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(Cursor cursor) { + public static SpeedDialUiItem fromCursor(Resources resources, Cursor cursor) { Assert.checkArgument(cursor != null); Assert.checkArgument(cursor.getCount() != 0); String lookupKey = cursor.getString(LOOKUP_KEY); @@ -125,7 +126,7 @@ public abstract class SpeedDialUiItem { Channel.builder() .setNumber(cursor.getString(NUMBER)) .setPhoneType(cursor.getInt(TYPE)) - .setLabel(TextUtils.isEmpty(cursor.getString(LABEL)) ? "" : cursor.getString(LABEL)) + .setLabel(getLabel(resources, cursor)) .setTechnology(Channel.VOICE) .build(); channels.add(channel); @@ -141,6 +142,17 @@ public abstract class SpeedDialUiItem { return builder.build(); } + private static String getLabel(Resources resources, Cursor cursor) { + int numberType = cursor.getInt(TYPE); + String numberLabel = cursor.getString(LABEL); + + // Returns empty label instead of "custom" if the custom label is empty. + if (numberType == Phone.TYPE_CUSTOM && TextUtils.isEmpty(numberLabel)) { + return ""; + } + return (String) Phone.getTypeLabel(resources, numberType, numberLabel); + } + public PhotoInfo getPhotoInfo() { return PhotoInfo.newBuilder() .setPhotoId(photoId()) diff --git a/java/com/android/dialer/speeddial/loader/SpeedDialUiItemMutator.java b/java/com/android/dialer/speeddial/loader/SpeedDialUiItemMutator.java index 0a2a241b3..1ad37dc2a 100644 --- a/java/com/android/dialer/speeddial/loader/SpeedDialUiItemMutator.java +++ b/java/com/android/dialer/speeddial/loader/SpeedDialUiItemMutator.java @@ -205,7 +205,7 @@ public final class SpeedDialUiItemMutator { return loadSpeedDialUiItemsInternal(); } Assert.checkArgument(cursor.moveToFirst(), "Cursor should never be empty"); - SpeedDialUiItem item = SpeedDialUiItem.fromCursor(cursor); + SpeedDialUiItem item = SpeedDialUiItem.fromCursor(appContext.getResources(), cursor); // Star the contact if it isn't starred already, then return. if (!item.isStarred()) { @@ -410,7 +410,7 @@ public final class SpeedDialUiItemMutator { null)) { Map<SpeedDialEntry, SpeedDialUiItem> map = new ArrayMap<>(); for (cursor.moveToFirst(); !cursor.isAfterLast(); /* Iterate in the loop */ ) { - SpeedDialUiItem item = SpeedDialUiItem.fromCursor(cursor); + SpeedDialUiItem item = SpeedDialUiItem.fromCursor(appContext.getResources(), cursor); for (SpeedDialEntry entry : entries) { if (entry.contactId() == item.contactId()) { // Update the id and pinned position to match it's corresponding SpeedDialEntry. @@ -513,7 +513,7 @@ public final class SpeedDialUiItemMutator { return contacts; } for (cursor.moveToFirst(); !cursor.isAfterLast(); /* Iterate in the loop */ ) { - contacts.add(SpeedDialUiItem.fromCursor(cursor)); + contacts.add(SpeedDialUiItem.fromCursor(appContext.getResources(), cursor)); } return contacts; } diff --git a/java/com/android/incallui/AndroidManifest.xml b/java/com/android/incallui/AndroidManifest.xml index 7286b0db7..b3d60d473 100644 --- a/java/com/android/incallui/AndroidManifest.xml +++ b/java/com/android/incallui/AndroidManifest.xml @@ -43,6 +43,9 @@ <!-- Set Bluetooth device --> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/> + <!-- Set audio selector window type TYPE_APPLICATION_OVERLAY --> + <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/> + <!-- Set android:taskAffinity="com.android.incallui" for all activities to ensure proper navigation. Otherwise system could bring up DialtactsActivity instead, e.g. when user unmerge a call. diff --git a/java/com/android/incallui/audioroute/AudioRouteSelectorDialogFragment.java b/java/com/android/incallui/audioroute/AudioRouteSelectorDialogFragment.java index cd17c25da..8d0c9525e 100644 --- a/java/com/android/incallui/audioroute/AudioRouteSelectorDialogFragment.java +++ b/java/com/android/incallui/audioroute/AudioRouteSelectorDialogFragment.java @@ -24,8 +24,10 @@ import android.content.DialogInterface; import android.content.res.ColorStateList; import android.graphics.PorterDuff.Mode; import android.os.Bundle; +import android.provider.Settings; import android.support.annotation.Nullable; import android.support.design.widget.BottomSheetDialogFragment; +import android.support.v4.os.BuildCompat; import android.telecom.CallAudioState; import android.view.LayoutInflater; import android.view.View; @@ -76,6 +78,14 @@ public class AudioRouteSelectorDialogFragment extends BottomSheetDialogFragment LogUtil.i("AudioRouteSelectorDialogFragment.onCreateDialog", null); Dialog dialog = super.onCreateDialog(savedInstanceState); dialog.getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED); + if (Settings.canDrawOverlays(getContext())) { + dialog + .getWindow() + .setType( + BuildCompat.isAtLeastO() + ? WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY + : WindowManager.LayoutParams.TYPE_PHONE); + } return dialog; } |