From 8cdac35f2aa80d1732dfc5fdaee1a21035a1bfcb Mon Sep 17 00:00:00 2001 From: Andrew Lee Date: Mon, 2 Feb 2015 17:18:14 -0800 Subject: Show icon and network label when using Wifi. + Add Wifi icon and network label, to be shown when CAPABILITY_WIFI is present on the primary call. Assume we can infer the network label from the connection info returned by the WifiManager, supposing that the phone can only be connected to one wifi network. + Add helper to strip quotation marks from wifi network name. + Reposition HD audio icon beneath the name, and to the left of the number/location information. + Adjust assets and layout of call state and hd audio icons, to center them in a more visually pleasing way in the view. Bug: 19151850 Change-Id: Ic23d1e744960e80b65bc34a8e709266af508fe21 --- InCallUI/res/drawable-hdpi/ic_hd_18dp.png | Bin 0 -> 207 bytes InCallUI/res/drawable-hdpi/ic_hd_audio.png | Bin 386 -> 0 bytes .../drawable-hdpi/ic_signal_wifi_4_bar_18dp.png | Bin 0 -> 290 bytes InCallUI/res/drawable-mdpi/ic_hd_18dp.png | Bin 0 -> 182 bytes InCallUI/res/drawable-mdpi/ic_hd_audio.png | Bin 312 -> 0 bytes .../drawable-mdpi/ic_signal_wifi_4_bar_18dp.png | Bin 0 -> 204 bytes InCallUI/res/drawable-xhdpi/ic_hd_18dp.png | Bin 0 -> 236 bytes InCallUI/res/drawable-xhdpi/ic_hd_audio.png | Bin 407 -> 0 bytes .../drawable-xhdpi/ic_signal_wifi_4_bar_18dp.png | Bin 0 -> 339 bytes InCallUI/res/drawable-xxhdpi/ic_hd_18dp.png | Bin 0 -> 309 bytes InCallUI/res/drawable-xxhdpi/ic_hd_audio.png | Bin 564 -> 0 bytes .../drawable-xxhdpi/ic_signal_wifi_4_bar_18dp.png | Bin 0 -> 474 bytes InCallUI/res/drawable-xxxhdpi/ic_hd_18dp.png | Bin 0 -> 290 bytes InCallUI/res/drawable-xxxhdpi/ic_hd_audio.png | Bin 638 -> 0 bytes .../drawable-xxxhdpi/ic_signal_wifi_4_bar_18dp.png | Bin 0 -> 619 bytes InCallUI/res/layout/primary_call_info.xml | 57 +++++++------ .../src/com/android/incallui/CallCardFragment.java | 12 +++ .../com/android/incallui/CallCardPresenter.java | 88 ++++++++++++++++----- 18 files changed, 112 insertions(+), 45 deletions(-) create mode 100644 InCallUI/res/drawable-hdpi/ic_hd_18dp.png delete mode 100644 InCallUI/res/drawable-hdpi/ic_hd_audio.png create mode 100644 InCallUI/res/drawable-hdpi/ic_signal_wifi_4_bar_18dp.png create mode 100644 InCallUI/res/drawable-mdpi/ic_hd_18dp.png delete mode 100644 InCallUI/res/drawable-mdpi/ic_hd_audio.png create mode 100644 InCallUI/res/drawable-mdpi/ic_signal_wifi_4_bar_18dp.png create mode 100644 InCallUI/res/drawable-xhdpi/ic_hd_18dp.png delete mode 100644 InCallUI/res/drawable-xhdpi/ic_hd_audio.png create mode 100644 InCallUI/res/drawable-xhdpi/ic_signal_wifi_4_bar_18dp.png create mode 100644 InCallUI/res/drawable-xxhdpi/ic_hd_18dp.png delete mode 100644 InCallUI/res/drawable-xxhdpi/ic_hd_audio.png create mode 100644 InCallUI/res/drawable-xxhdpi/ic_signal_wifi_4_bar_18dp.png create mode 100644 InCallUI/res/drawable-xxxhdpi/ic_hd_18dp.png delete mode 100644 InCallUI/res/drawable-xxxhdpi/ic_hd_audio.png create mode 100644 InCallUI/res/drawable-xxxhdpi/ic_signal_wifi_4_bar_18dp.png diff --git a/InCallUI/res/drawable-hdpi/ic_hd_18dp.png b/InCallUI/res/drawable-hdpi/ic_hd_18dp.png new file mode 100644 index 000000000..ade1788c1 Binary files /dev/null and b/InCallUI/res/drawable-hdpi/ic_hd_18dp.png differ diff --git a/InCallUI/res/drawable-hdpi/ic_hd_audio.png b/InCallUI/res/drawable-hdpi/ic_hd_audio.png deleted file mode 100644 index cccaf4949..000000000 Binary files a/InCallUI/res/drawable-hdpi/ic_hd_audio.png and /dev/null differ diff --git a/InCallUI/res/drawable-hdpi/ic_signal_wifi_4_bar_18dp.png b/InCallUI/res/drawable-hdpi/ic_signal_wifi_4_bar_18dp.png new file mode 100644 index 000000000..d7b98055e Binary files /dev/null and b/InCallUI/res/drawable-hdpi/ic_signal_wifi_4_bar_18dp.png differ diff --git a/InCallUI/res/drawable-mdpi/ic_hd_18dp.png b/InCallUI/res/drawable-mdpi/ic_hd_18dp.png new file mode 100644 index 000000000..82c972646 Binary files /dev/null and b/InCallUI/res/drawable-mdpi/ic_hd_18dp.png differ diff --git a/InCallUI/res/drawable-mdpi/ic_hd_audio.png b/InCallUI/res/drawable-mdpi/ic_hd_audio.png deleted file mode 100644 index 6353b7acf..000000000 Binary files a/InCallUI/res/drawable-mdpi/ic_hd_audio.png and /dev/null differ diff --git a/InCallUI/res/drawable-mdpi/ic_signal_wifi_4_bar_18dp.png b/InCallUI/res/drawable-mdpi/ic_signal_wifi_4_bar_18dp.png new file mode 100644 index 000000000..d537ab469 Binary files /dev/null and b/InCallUI/res/drawable-mdpi/ic_signal_wifi_4_bar_18dp.png differ diff --git a/InCallUI/res/drawable-xhdpi/ic_hd_18dp.png b/InCallUI/res/drawable-xhdpi/ic_hd_18dp.png new file mode 100644 index 000000000..35bf51a4f Binary files /dev/null and b/InCallUI/res/drawable-xhdpi/ic_hd_18dp.png differ diff --git a/InCallUI/res/drawable-xhdpi/ic_hd_audio.png b/InCallUI/res/drawable-xhdpi/ic_hd_audio.png deleted file mode 100644 index 6d05d45f5..000000000 Binary files a/InCallUI/res/drawable-xhdpi/ic_hd_audio.png and /dev/null differ diff --git a/InCallUI/res/drawable-xhdpi/ic_signal_wifi_4_bar_18dp.png b/InCallUI/res/drawable-xhdpi/ic_signal_wifi_4_bar_18dp.png new file mode 100644 index 000000000..5a5319212 Binary files /dev/null and b/InCallUI/res/drawable-xhdpi/ic_signal_wifi_4_bar_18dp.png differ diff --git a/InCallUI/res/drawable-xxhdpi/ic_hd_18dp.png b/InCallUI/res/drawable-xxhdpi/ic_hd_18dp.png new file mode 100644 index 000000000..510aa6e8b Binary files /dev/null and b/InCallUI/res/drawable-xxhdpi/ic_hd_18dp.png differ diff --git a/InCallUI/res/drawable-xxhdpi/ic_hd_audio.png b/InCallUI/res/drawable-xxhdpi/ic_hd_audio.png deleted file mode 100644 index 44294ba05..000000000 Binary files a/InCallUI/res/drawable-xxhdpi/ic_hd_audio.png and /dev/null differ diff --git a/InCallUI/res/drawable-xxhdpi/ic_signal_wifi_4_bar_18dp.png b/InCallUI/res/drawable-xxhdpi/ic_signal_wifi_4_bar_18dp.png new file mode 100644 index 000000000..b627198f5 Binary files /dev/null and b/InCallUI/res/drawable-xxhdpi/ic_signal_wifi_4_bar_18dp.png differ diff --git a/InCallUI/res/drawable-xxxhdpi/ic_hd_18dp.png b/InCallUI/res/drawable-xxxhdpi/ic_hd_18dp.png new file mode 100644 index 000000000..dd08bbbec Binary files /dev/null and b/InCallUI/res/drawable-xxxhdpi/ic_hd_18dp.png differ diff --git a/InCallUI/res/drawable-xxxhdpi/ic_hd_audio.png b/InCallUI/res/drawable-xxxhdpi/ic_hd_audio.png deleted file mode 100644 index 459cd8f46..000000000 Binary files a/InCallUI/res/drawable-xxxhdpi/ic_hd_audio.png and /dev/null differ diff --git a/InCallUI/res/drawable-xxxhdpi/ic_signal_wifi_4_bar_18dp.png b/InCallUI/res/drawable-xxxhdpi/ic_signal_wifi_4_bar_18dp.png new file mode 100644 index 000000000..f4105ec8d Binary files /dev/null and b/InCallUI/res/drawable-xxxhdpi/ic_signal_wifi_4_bar_18dp.png differ diff --git a/InCallUI/res/layout/primary_call_info.xml b/InCallUI/res/layout/primary_call_info.xml index 71369d479..8f0c0e24d 100644 --- a/InCallUI/res/layout/primary_call_info.xml +++ b/InCallUI/res/layout/primary_call_info.xml @@ -43,22 +43,21 @@ + + - - - + + + @@ -127,7 +135,6 @@ android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" - android:layout_centerVertical="true" android:textAlignment="viewEnd" android:textAppearance="?android:attr/textAppearanceSmall" android:textColor="@color/incall_call_banner_subtext_color" diff --git a/InCallUI/src/com/android/incallui/CallCardFragment.java b/InCallUI/src/com/android/incallui/CallCardFragment.java index 81b9ff78c..814876105 100644 --- a/InCallUI/src/com/android/incallui/CallCardFragment.java +++ b/InCallUI/src/com/android/incallui/CallCardFragment.java @@ -79,6 +79,7 @@ public class CallCardFragment extends BaseFragment private ContactCacheEntry mPrimaryContactInfo; private ContactCacheEntry mSecondaryContactInfo; private CallTimer mCallTimer; + private Context mContext; + private WifiManager mWifiManager; public static class ContactLookupCallback implements ContactInfoCacheCallback { private final WeakReference mCallCardPresenter; @@ -105,6 +109,7 @@ public class CallCardPresenter extends Presenter public void init(Context context, Call call) { mContext = Preconditions.checkNotNull(context); + mWifiManager = (WifiManager) mContext.getSystemService(Context.WIFI_SERVICE); // Call may be null if disconnect happened already. if (call != null) { @@ -219,7 +224,7 @@ public class CallCardPresenter extends Presenter } // Start/stop timers. - if (mPrimary != null && mPrimary.getState() == Call.State.ACTIVE) { + if (isPrimaryCallActive()) { Log.d(this, "Starting the calltime timer"); mCallTimer.start(CALL_TIME_UPDATE_INTERVAL_MS); } else { @@ -242,6 +247,7 @@ public class CallCardPresenter extends Presenter null, null, null); + getUi().showHdAudioIndicator(false); } // Hide/show the contact photo based on the video state. @@ -262,13 +268,11 @@ public class CallCardPresenter extends Presenter } @Override - public void onDetailsChanged(Call call, android.telecom.Call.Details details) { + public void onDetailsChanged(Call call, Details details) { updatePrimaryCallState(); - if (call.can(android.telecom.Call.Details.CAPABILITY_MANAGE_CONFERENCE) != - android.telecom.Call.Details.can( - details.getCallCapabilities(), - android.telecom.Call.Details.CAPABILITY_MANAGE_CONFERENCE)) { + if (call.can(Details.CAPABILITY_MANAGE_CONFERENCE) != + Details.can(details.getCallCapabilities(), Details.CAPABILITY_MANAGE_CONFERENCE)) { maybeShowManageConferenceCallButton(); } } @@ -298,6 +302,11 @@ public class CallCardPresenter extends Presenter getConnectionLabel(), getCallStateIcon(), getGatewayNumber()); + + boolean showHdAudioIndicator = + isPrimaryCallActive() && primaryCallCan(Details.CAPABILITY_HIGH_DEF_AUDIO); + getUi().showHdAudioIndicator(showHdAudioIndicator); + setCallbackNumber(); } } @@ -320,7 +329,7 @@ public class CallCardPresenter extends Presenter return false; } - return mPrimary.can(android.telecom.Call.Details.CAPABILITY_MANAGE_CONFERENCE); + return mPrimary.can(Details.CAPABILITY_MANAGE_CONFERENCE); } private void setCallbackNumber() { @@ -353,10 +362,10 @@ public class CallCardPresenter extends Presenter public void updateCallTime() { final CallCardUi ui = getUi(); - if (ui == null || mPrimary == null || mPrimary.getState() != Call.State.ACTIVE) { - if (ui != null) { - ui.setPrimaryCallElapsedTime(false, 0); - } + if (ui == null) { + mCallTimer.cancel(); + } else if (!isPrimaryCallActive()) { + ui.setPrimaryCallElapsedTime(false, 0); mCallTimer.cancel(); } else { final long callStart = mPrimary.getConnectTimeMillis(); @@ -591,6 +600,13 @@ public class CallCardPresenter extends Presenter return statusHints.getLabel().toString(); } + // Assume the SSID of the connection reported by the WifiManager is the name of the wifi + // network used for calling, since currently a phone only connects to a single wifi network. + if (isPrimaryCallActive() && primaryCallCan(Details.CAPABILITY_WIFI) + && mWifiManager.getConnectionInfo() != null) { + return formatWifiSSID(mWifiManager.getConnectionInfo().getSSID()); + } + if (hasOutgoingGatewayCall() && getUi() != null) { // Return the label for the gateway app on outgoing calls. final PackageManager pm = mContext.getPackageManager(); @@ -616,11 +632,8 @@ public class CallCardPresenter extends Presenter } } - // Return high definition audio icon if the capability is indicated. - if (mPrimary.getTelecommCall().getDetails().can( - android.telecom.Call.Details.CAPABILITY_HIGH_DEF_AUDIO) - && mPrimary.getState() == Call.State.ACTIVE) { - return mContext.getResources().getDrawable(R.drawable.ic_hd_audio); + if (isPrimaryCallActive() && primaryCallCan(Details.CAPABILITY_WIFI)) { + return mContext.getResources().getDrawable(R.drawable.ic_signal_wifi_4_bar_18dp); } return null; @@ -700,9 +713,16 @@ public class CallCardPresenter extends Presenter ui.setCallCardVisible(!isFullScreenVideo); } + private boolean isPrimaryCallActive() { + return mPrimary != null && mPrimary.getState() == Call.State.ACTIVE; + } + + private boolean primaryCallCan(int capability) { + return mPrimary.getTelecommCall().getDetails().can(capability); + } + private String getConferenceString(Call call) { - boolean isGenericConference = call.can( - android.telecom.Call.Details.CAPABILITY_GENERIC_CONFERENCE); + boolean isGenericConference = call.can(Details.CAPABILITY_GENERIC_CONFERENCE); Log.v(this, "getConferenceString: " + isGenericConference); final int resId = isGenericConference @@ -711,8 +731,7 @@ public class CallCardPresenter extends Presenter } private Drawable getConferencePhoto(Call call) { - boolean isGenericConference = call.can( - android.telecom.Call.Details.CAPABILITY_GENERIC_CONFERENCE); + boolean isGenericConference = call.can(Details.CAPABILITY_GENERIC_CONFERENCE); Log.v(this, "getConferencePhoto: " + isGenericConference); final int resId = isGenericConference @@ -722,6 +741,34 @@ public class CallCardPresenter extends Presenter return photo; } + /** + * Strip quotations off the outside of a Wifi SSID identifier. For example, \"GoogleGuest\" + * becomes GoogleGuest. + * + * TODO: Move into utility class. + * TODO: Add unit tests. + * + * @param ssid The ssid of the wifi network. + */ + private String formatWifiSSID(String ssid) { + if (TextUtils.isEmpty(ssid)) { + return ""; + } + + // Trim quotation if first character. + if (ssid.charAt(0) == '\"') { + ssid = ssid.substring(1); + } + + // Trim quotation if last character. + int lastIndex = ssid.length() - 1; + if (lastIndex >= 0 && ssid.charAt(lastIndex) == '\"') { + ssid = ssid.substring(0, lastIndex); + } + + return ssid; + } + public interface CallCardUi extends Ui { void setVisible(boolean on); void setCallCardVisible(boolean visible); @@ -741,6 +788,7 @@ public class CallCardPresenter extends Presenter void setCallbackNumber(String number, boolean isEmergencyCalls); void setPhotoVisible(boolean isVisible); void setProgressSpinnerVisible(boolean visible); + void showHdAudioIndicator(boolean visible); void showManageConferenceCallButton(boolean visible); boolean isManageConferenceVisible(); } -- cgit v1.2.3