From cc7e5a7a71ecd3037802668be19935270f9c0216 Mon Sep 17 00:00:00 2001 From: Brandon Maxwell Date: Fri, 29 Jan 2016 17:03:04 -0800 Subject: Refactored dialer Ringtone code in prep for call waiting + Created class that is responsible for determining if a ringtone should be played. + This class will also have the code to play call waiting tones Change-Id: Ie8fb633c8a233cc6b54beeb09b3fd6b62c9cb76c --- .../com/android/incallui/StatusBarNotifier.java | 29 +++-------- .../incallui/ringtone/DialerRingtoneManager.java | 60 ++++++++++++++++++++++ 2 files changed, 68 insertions(+), 21 deletions(-) create mode 100644 InCallUI/src/com/android/incallui/ringtone/DialerRingtoneManager.java (limited to 'InCallUI/src/com') diff --git a/InCallUI/src/com/android/incallui/StatusBarNotifier.java b/InCallUI/src/com/android/incallui/StatusBarNotifier.java index e0bca4446..48e0b1c34 100644 --- a/InCallUI/src/com/android/incallui/StatusBarNotifier.java +++ b/InCallUI/src/com/android/incallui/StatusBarNotifier.java @@ -45,13 +45,13 @@ import android.text.TextUtils; import com.android.contacts.common.ContactsUtils; import com.android.contacts.common.ContactsUtils.UserType; -import com.android.contacts.common.compat.CompatUtils; import com.android.contacts.common.preference.ContactsPreferences; import com.android.contacts.common.util.BitmapUtil; import com.android.contacts.common.util.ContactDisplayUtils; import com.android.incallui.ContactInfoCache.ContactCacheEntry; import com.android.incallui.ContactInfoCache.ContactInfoCacheCallback; import com.android.incallui.InCallPresenter.InCallState; +import com.android.incallui.ringtone.DialerRingtoneManager; import java.util.Objects; @@ -61,11 +61,6 @@ import java.util.Objects; public class StatusBarNotifier implements InCallPresenter.InCallStateListener, CallList.CallUpdateListener { - /* - * Flag used to determine if the Dialer is responsible for playing ringtones for incoming calls. - */ - private static final boolean IS_DIALER_RINGING_ENABLED = false; - // Notification types // Indicates that no notification is currently showing. private static final int NOTIFICATION_NONE = 0; @@ -80,6 +75,7 @@ public class StatusBarNotifier implements InCallPresenter.InCallStateListener, private final ContactsPreferences mContactsPreferences; private final ContactInfoCache mContactInfoCache; private final NotificationManager mNotificationManager; + private final DialerRingtoneManager mDialerRingtoneManager; private int mCurrentNotification = NOTIFICATION_NONE; private int mCallState = Call.State.INVALID; private int mSavedIcon = 0; @@ -97,6 +93,7 @@ public class StatusBarNotifier implements InCallPresenter.InCallStateListener, mContactInfoCache = contactInfoCache; mNotificationManager = (NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE); + mDialerRingtoneManager = new DialerRingtoneManager(); mCurrentNotification = NOTIFICATION_NONE; } @@ -233,7 +230,7 @@ public class StatusBarNotifier implements InCallPresenter.InCallStateListener, return; } - final int state = call.getState(); + final int callState = call.getState(); // Check if data has changed; if nothing is different, don't issue another notification. final int iconResId = getIconToDisplay(call); @@ -243,13 +240,13 @@ public class StatusBarNotifier implements InCallPresenter.InCallStateListener, final String contentTitle = getContentTitle(contactInfo, call); final int notificationType; - if (state == Call.State.INCOMING || state == Call.State.CALL_WAITING) { + if (callState == Call.State.INCOMING || callState == Call.State.CALL_WAITING) { notificationType = NOTIFICATION_INCOMING_CALL; } else { notificationType = NOTIFICATION_IN_CALL; } - if (!checkForChangeAndSaveData(iconResId, content, largeIcon, contentTitle, state, + if (!checkForChangeAndSaveData(iconResId, content, largeIcon, contentTitle, callState, notificationType, contactInfo.contactRingtoneUri)) { return; } @@ -289,7 +286,7 @@ public class StatusBarNotifier implements InCallPresenter.InCallStateListener, addDismissUpgradeRequestAction(builder); addAcceptUpgradeRequestAction(builder); } else { - createIncomingCallNotification(call, state, builder); + createIncomingCallNotification(call, callState, builder); } addPersonReference(builder, contactInfo, call); @@ -299,7 +296,7 @@ public class StatusBarNotifier implements InCallPresenter.InCallStateListener, */ Notification notification = builder.build(); - if (shouldNotificationPlayRingtone(notificationType, contactInfo.contactRingtoneUri)) { + if (mDialerRingtoneManager.shouldPlayRingtone(callState, contactInfo.contactRingtoneUri)) { notification.flags |= Notification.FLAG_INSISTENT; notification.sound = contactInfo.contactRingtoneUri; AudioAttributes.Builder audioAttributes = new AudioAttributes.Builder(); @@ -318,16 +315,6 @@ public class StatusBarNotifier implements InCallPresenter.InCallStateListener, mCurrentNotification = notificationType; } - /* - * The Notification should only play the ringtone once it's had a chance to look up the contact. - * Until the lookup is complete, the ringtone Uri is null - */ - private boolean shouldNotificationPlayRingtone(int notificationType, Uri ringtoneUri) { - return CompatUtils.isNCompatible() && IS_DIALER_RINGING_ENABLED - && notificationType == NOTIFICATION_INCOMING_CALL - && ringtoneUri != null; - } - private void createIncomingCallNotification( Call call, int state, Notification.Builder builder) { if (state == Call.State.ACTIVE) { diff --git a/InCallUI/src/com/android/incallui/ringtone/DialerRingtoneManager.java b/InCallUI/src/com/android/incallui/ringtone/DialerRingtoneManager.java new file mode 100644 index 000000000..ad580cb0d --- /dev/null +++ b/InCallUI/src/com/android/incallui/ringtone/DialerRingtoneManager.java @@ -0,0 +1,60 @@ +/* + * Copyright (C) 2016 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.incallui.ringtone; + +import android.net.Uri; +import android.support.annotation.Nullable; + +import com.android.contacts.common.compat.CompatUtils; +import com.android.contacts.common.testing.NeededForTesting; +import com.android.incallui.Call.State; + +/** + * Class that determines when ringtones should be played and can play the call waiting tone when + * necessary. + */ +public class DialerRingtoneManager { + + /* + * Flag used to determine if the Dialer is responsible for playing ringtones for incoming calls. + */ + private static final boolean IS_DIALER_RINGING_ENABLED = false; + private boolean mForceDialerRingingEnabled = false; + + /** + * Determines if a ringtone should be played for the given call state (see {@link State}) and + * {@link Uri}. + * + * @param callState the call state for the call being checked. + * @param ringtoneUri the ringtone to potentially play. + * @return {@code true} if the ringtone should be played, {@code false} otherwise. + */ + public boolean shouldPlayRingtone(int callState, @Nullable Uri ringtoneUri) { + return CompatUtils.isNCompatible() + && isDialerRingingEnabled() + && callState == State.INCOMING + && ringtoneUri != null; + } + + private boolean isDialerRingingEnabled() { + return mForceDialerRingingEnabled || IS_DIALER_RINGING_ENABLED; + } + + @NeededForTesting + void forceDialerRingingEnabled() { + mForceDialerRingingEnabled = true; + } +} -- cgit v1.2.3 From 249c755441938ead47c01d27c168c4096e0d9769 Mon Sep 17 00:00:00 2001 From: Brandon Maxwell Date: Fri, 29 Jan 2016 17:49:28 -0800 Subject: Adding method to check if call waiting tone should be played + This method will be used in StatusBarNotifier to determine when call waiting tones should be played instead of the standard ringtone Change-Id: I4ad55f3870de5e63d03f4a5e8534680fa24556bd --- InCallUI/src/com/android/incallui/StatusBarNotifier.java | 3 +++ .../android/incallui/ringtone/DialerRingtoneManager.java | 13 +++++++++++++ 2 files changed, 16 insertions(+) (limited to 'InCallUI/src/com') diff --git a/InCallUI/src/com/android/incallui/StatusBarNotifier.java b/InCallUI/src/com/android/incallui/StatusBarNotifier.java index 48e0b1c34..985c88565 100644 --- a/InCallUI/src/com/android/incallui/StatusBarNotifier.java +++ b/InCallUI/src/com/android/incallui/StatusBarNotifier.java @@ -305,6 +305,9 @@ public class StatusBarNotifier implements InCallPresenter.InCallStateListener, notification.audioAttributes = audioAttributes.build(); notification.vibrate = VIBRATE_PATTERN; } + if (mDialerRingtoneManager.shouldPlayCallWaitingTone(callState)) { + // TODO (maxwelb) play call waiting + } if (mCurrentNotification != notificationType && mCurrentNotification != NOTIFICATION_NONE) { Log.i(this, "Previous notification already showing - cancelling " + mCurrentNotification); diff --git a/InCallUI/src/com/android/incallui/ringtone/DialerRingtoneManager.java b/InCallUI/src/com/android/incallui/ringtone/DialerRingtoneManager.java index ad580cb0d..8d4d068e1 100644 --- a/InCallUI/src/com/android/incallui/ringtone/DialerRingtoneManager.java +++ b/InCallUI/src/com/android/incallui/ringtone/DialerRingtoneManager.java @@ -53,6 +53,19 @@ public class DialerRingtoneManager { return mForceDialerRingingEnabled || IS_DIALER_RINGING_ENABLED; } + /** + * Determines if a call waiting tone should be played for the the given call state + * (see {@link State}). + * + * @param callState the call state for the call being checked. + * @return {@code true} if the call waiting tone should be played, {@code false} otherwise. + */ + public boolean shouldPlayCallWaitingTone(int callState) { + return CompatUtils.isNCompatible() + && isDialerRingingEnabled() + && callState == State.CALL_WAITING; + } + @NeededForTesting void forceDialerRingingEnabled() { mForceDialerRingingEnabled = true; -- cgit v1.2.3