diff options
author | Brandon Maxwell <maxwelb@google.com> | 2016-02-01 17:48:52 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2016-02-01 17:48:52 +0000 |
commit | f68dac28d412c277a83db1e81147651c75cd22ef (patch) | |
tree | 1ad4087006d42d040b30d8806f465e9579010554 /InCallUI/src/com | |
parent | b9904dfe67fdc7b3f0b826463c8c5ca35b3951bc (diff) | |
parent | 249c755441938ead47c01d27c168c4096e0d9769 (diff) |
Merge changes I4ad55f38,Ie8fb633c
* changes:
Adding method to check if call waiting tone should be played
Refactored dialer Ringtone code in prep for call waiting
Diffstat (limited to 'InCallUI/src/com')
-rw-r--r-- | InCallUI/src/com/android/incallui/StatusBarNotifier.java | 32 | ||||
-rw-r--r-- | InCallUI/src/com/android/incallui/ringtone/DialerRingtoneManager.java | 73 |
2 files changed, 84 insertions, 21 deletions
diff --git a/InCallUI/src/com/android/incallui/StatusBarNotifier.java b/InCallUI/src/com/android/incallui/StatusBarNotifier.java index e0bca4446..985c88565 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(); @@ -308,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); @@ -318,16 +318,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..8d4d068e1 --- /dev/null +++ b/InCallUI/src/com/android/incallui/ringtone/DialerRingtoneManager.java @@ -0,0 +1,73 @@ +/* + * 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; + } + + /** + * 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; + } +} |