diff options
author | Danny Baumann <dannybaumann@web.de> | 2015-04-12 13:39:21 +0200 |
---|---|---|
committer | Roman Birg <roman@cyngn.com> | 2015-04-15 10:51:40 -0700 |
commit | b772e5c675dcdcc45a41941436319b75bba9cd12 (patch) | |
tree | 7a0fc047b68ff561d535bf53ee7da922ccc769cf | |
parent | a42ce0603f4bdb272289ec8b9e5ea09cf910e7bc (diff) | |
download | packages_apps_InCallUI-b772e5c675dcdcc45a41941436319b75bba9cd12.tar.gz packages_apps_InCallUI-b772e5c675dcdcc45a41941436319b75bba9cd12.tar.bz2 packages_apps_InCallUI-b772e5c675dcdcc45a41941436319b75bba9cd12.zip |
Clean up volume boost button logic.
Change-Id: Id96b5085bf4fe810fa2d05326ff01a91450f0e09
-rw-r--r-- | res/values/cm_strings.xml | 5 | ||||
-rw-r--r-- | src/com/android/incallui/AudioModeProvider.java | 9 | ||||
-rw-r--r-- | src/com/android/incallui/CallCardFragment.java | 146 | ||||
-rw-r--r-- | src/com/android/incallui/CallCardPresenter.java | 86 | ||||
-rw-r--r-- | src/com/android/incallui/InCallActivity.java | 4 |
5 files changed, 104 insertions, 146 deletions
diff --git a/res/values/cm_strings.xml b/res/values/cm_strings.xml index aff0d7f1..b2baa165 100644 --- a/res/values/cm_strings.xml +++ b/res/values/cm_strings.xml @@ -66,11 +66,6 @@ <!-- Message indicating unknown call session event --> <string name="unknown_call_session_event">Unknown call session event</string> - <string name="volume_boost_notify_enabled">Volume boost is enabled</string> - <string name="volume_boost_notify_disabled">Volume boost is disabled</string> - <string name="volume_boost_notify_unavailable">Extra volume is not available when using a headset</string> - <string name="volume_boost_toast_position" translatable="false">600</string> - <string name="onscreenCallRecordText">Start and stop call recording</string> <string name="onscreenAddToBlacklistText">Add caller to blacklist</string> <string name="menu_start_record">Record call</string> diff --git a/src/com/android/incallui/AudioModeProvider.java b/src/com/android/incallui/AudioModeProvider.java index 7a91731b..0f8358c3 100644 --- a/src/com/android/incallui/AudioModeProvider.java +++ b/src/com/android/incallui/AudioModeProvider.java @@ -36,7 +36,6 @@ import java.util.List; private int mSupportedModes = AudioState.ROUTE_ALL; private final List<AudioModeListener> mListeners = Lists.newArrayList(); private Phone mPhone; - private InCallActivity mInCallActivity; private Phone.Listener mPhoneListener = new Phone.Listener() { @Override @@ -66,10 +65,6 @@ import java.util.List; if (mAudioMode != newMode) { mAudioMode = newMode; - if (mInCallActivity != null && mInCallActivity.getCallCardFragment() != null) { - mInCallActivity.getCallCardFragment().updateVBbyAudioMode(newMode); - } - for (AudioModeListener l : mListeners) { l.onAudioMode(mAudioMode); } @@ -123,8 +118,4 @@ import java.util.List; void onMute(boolean muted); void onSupportedAudioMode(int modeMask); } - - public void setInCallActivity(InCallActivity activity) { - mInCallActivity = activity; - } } diff --git a/src/com/android/incallui/CallCardFragment.java b/src/com/android/incallui/CallCardFragment.java index d799cf02..3197356b 100644 --- a/src/com/android/incallui/CallCardFragment.java +++ b/src/com/android/incallui/CallCardFragment.java @@ -32,11 +32,9 @@ import android.content.res.Configuration; import android.graphics.Point; import android.graphics.drawable.AnimationDrawable; import android.graphics.drawable.Drawable; -import android.media.AudioManager; import android.os.Bundle; import android.os.Handler; import android.os.Message; -import android.provider.Settings; import android.telecom.DisconnectCause; import android.telecom.TelecomManager; import android.telecom.VideoProfile; @@ -52,7 +50,6 @@ import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; import android.view.View; -import android.view.View.OnClickListener; import android.view.View.OnLayoutChangeListener; import android.view.ViewAnimationUtils; import android.view.ViewGroup; @@ -67,8 +64,6 @@ import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast; -import android.telecom.AudioState; - import com.android.contacts.common.util.MaterialColorMapUtils.MaterialPalette; import com.android.contacts.common.widget.FloatingActionButtonController; import com.android.incallui.service.PhoneNumberService; @@ -111,9 +106,6 @@ public class CallCardFragment extends BaseFragment<CallCardPresenter, CallCardPr private ViewGroup mPrimaryCallInfo; private View mCallButtonsContainer; private ImageButton mVBButton; - private AudioManager mAudioManager; - private Toast mVBNotify; - private int mVBToastPosition; private TextView mRecordingTimeLabel; private TextView mRecordingIcon; private View mDetailedCallInfo; @@ -180,8 +172,6 @@ public class CallCardFragment extends BaseFragment<CallCardPresenter, CallCardPr } }; - private static final String VOLUME_BOOST = "volume_boost"; - private static final String RECORD_STATE_CHANGED = "com.qualcomm.qti.phonefeature.RECORD_STATE_CHANGED"; private static final String PREFS_KEY_DETAILED_INFO = "detailed_incall_info"; @@ -216,12 +206,6 @@ public class CallCardFragment extends BaseFragment<CallCardPresenter, CallCardPr mFabSmallDiameter = getResources().getDimensionPixelOffset( R.dimen.end_call_floating_action_button_small_diameter); - mVBToastPosition = Integer.parseInt( - getResources().getString(R.string.volume_boost_toast_position)); - - mAudioManager = (AudioManager) getActivity() - .getSystemService(Context.AUDIO_SERVICE); - IntentFilter filter = new IntentFilter(); filter.addAction(RECORD_STATE_CHANGED); @@ -320,9 +304,15 @@ public class CallCardFragment extends BaseFragment<CallCardPresenter, CallCardPr mCallStateLabel.setElegantTextHeight(false); mVBButton = (ImageButton) view.findViewById(R.id.volumeBoost); - if (null != mVBButton) { - mVBButton.setOnClickListener(mVBListener); + if (mVBButton != null) { + mVBButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + getPresenter().volumeBoostClicked(); + } + }); } + mRecordingTimeLabel = (TextView) view.findViewById(R.id.recordingTime); mRecordingIcon = (TextView) view.findViewById(R.id.recordingIcon); @@ -352,6 +342,19 @@ public class CallCardFragment extends BaseFragment<CallCardPresenter, CallCardPr mProgressSpinner.setVisibility(visible ? View.VISIBLE : View.GONE); } + @Override + public void setVolumeBoostButtonState(boolean visible, boolean on) { + if (mVBButton == null) { + return; + } + if (visible) { + mVBButton.setVisibility(View.VISIBLE); + mVBButton.setBackgroundResource(on ? R.drawable.vb_active : R.drawable.vb_normal); + } else { + mVBButton.setVisibility(View.GONE); + } + } + /** * Sets the visibility of the primary call card. * Ensures that when the primary call card is hidden, the video surface slides over to fill the @@ -597,8 +600,6 @@ public class CallCardFragment extends BaseFragment<CallCardPresenter, CallCardPr sessionModificationState, disconnectCause, connectionLabel, isGatewayCall, isWaitingForRemoteSide); - updateVBbyCall(state); - Log.v(this, "setCallState " + callStateLabel); Log.v(this, "DisconnectCause " + disconnectCause.toString()); Log.v(this, "gateway " + connectionLabel + gatewayNumber); @@ -1230,111 +1231,6 @@ public class CallCardFragment extends BaseFragment<CallCardPresenter, CallCardPr } } - private OnClickListener mVBListener = new OnClickListener() { - @Override - public void onClick(View arg0) { - if (isVBAvailable()) { - switchVBStatus(); - } - - updateVBButton(); - showVBNotify(); - } - }; - - private boolean isVBAvailable() { - int mode = AudioModeProvider.getInstance().getAudioMode(); - final Activity activity = getActivity(); - - int settingsTtyMode; - - if (activity != null) { - settingsTtyMode = Settings.Secure.getInt(activity.getContentResolver(), - Settings.Secure.PREFERRED_TTY_MODE, TelecomManager.TTY_MODE_OFF); - } else { - settingsTtyMode = TelecomManager.TTY_MODE_OFF; - } - - return (mode == AudioState.ROUTE_EARPIECE || mode == AudioState.ROUTE_SPEAKER - || settingsTtyMode == TelecomManager.TTY_MODE_HCO); - } - - private void switchVBStatus() { - if (mAudioManager.getParameters(VOLUME_BOOST).contains("=on")) { - mAudioManager.setParameters(VOLUME_BOOST + "=off"); - } else { - mAudioManager.setParameters(VOLUME_BOOST + "=on"); - } - } - - private void updateVBButton() { - if (isVBAvailable() - && mAudioManager.getParameters(VOLUME_BOOST).contains("=on")) { - - mVBButton.setBackgroundResource(R.drawable.vb_active); - } else if (isVBAvailable() - && !(mAudioManager.getParameters(VOLUME_BOOST).contains("=on"))) { - - mVBButton.setBackgroundResource(R.drawable.vb_normal); - } else { - mVBButton.setBackgroundResource(R.drawable.vb_disable); - } - } - - private void showVBNotify() { - if (mVBNotify != null) { - mVBNotify.cancel(); - } - - if (isVBAvailable() - && mAudioManager.getParameters(VOLUME_BOOST).contains("=on")) { - - mVBNotify = Toast.makeText(getView().getContext(), - R.string.volume_boost_notify_enabled, Toast.LENGTH_SHORT); - } else if (isVBAvailable() - && !(mAudioManager.getParameters(VOLUME_BOOST).contains("=on"))) { - - mVBNotify = Toast.makeText(getView().getContext(), - R.string.volume_boost_notify_disabled, Toast.LENGTH_SHORT); - } else { - mVBNotify = Toast.makeText(getView().getContext(), - R.string.volume_boost_notify_unavailable, Toast.LENGTH_SHORT); - } - - mVBNotify.setGravity(Gravity.TOP, 0, mVBToastPosition); - mVBNotify.show(); - } - - private void updateVBbyCall(int state) { - updateVBButton(); - - if (Call.State.ACTIVE == state) { - mVBButton.setVisibility(View.VISIBLE); - } else if (Call.State.DISCONNECTED == state) { - if (!CallList.getInstance().hasAnyLiveCall() - && mAudioManager.getParameters(VOLUME_BOOST).contains("=on")) { - mVBButton.setVisibility(View.INVISIBLE); - - mAudioManager.setParameters(VOLUME_BOOST + "=off"); - } - } - } - - public void updateVBbyAudioMode(int newMode) { - if (!(newMode == AudioState.ROUTE_EARPIECE - || newMode == AudioState.ROUTE_BLUETOOTH - || newMode == AudioState.ROUTE_WIRED_HEADSET - || newMode == AudioState.ROUTE_SPEAKER)) { - return; - } - - if (mAudioManager != null && mAudioManager.getParameters(VOLUME_BOOST).contains("=on")) { - mAudioManager.setParameters(VOLUME_BOOST + "=off"); - } - - updateVBButton(); - } - @Override public void onDestroy() { super.onDestroy(); diff --git a/src/com/android/incallui/CallCardPresenter.java b/src/com/android/incallui/CallCardPresenter.java index e9b0ce4c..cbeb6cf2 100644 --- a/src/com/android/incallui/CallCardPresenter.java +++ b/src/com/android/incallui/CallCardPresenter.java @@ -22,8 +22,11 @@ import android.content.Intent; import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.graphics.drawable.Drawable; +import android.media.AudioManager; import android.net.Uri; import android.os.Bundle; +import android.provider.Settings; +import android.telecom.AudioState; import android.telecom.DisconnectCause; import android.telecom.PhoneAccount; import android.telecom.PhoneAccountHandle; @@ -35,6 +38,7 @@ import android.telephony.SubscriptionManager; import android.telephony.TelephonyManager; import android.text.TextUtils; +import com.android.incallui.AudioModeProvider.AudioModeListener; import com.android.incallui.ContactInfoCache.ContactCacheEntry; import com.android.incallui.ContactInfoCache.ContactInfoCacheCallback; import com.android.incallui.InCallPresenter.InCallDetailsListener; @@ -53,9 +57,9 @@ import com.google.common.base.Preconditions; * <p> * This class listens for changes to InCallState and passes it along to the fragment. */ -public class CallCardPresenter extends Presenter<CallCardPresenter.CallCardUi> - implements InCallStateListener, IncomingCallListener, InCallDetailsListener, - InCallEventListener { +public class CallCardPresenter extends Presenter<CallCardPresenter.CallCardUi> implements + InCallStateListener, IncomingCallListener, InCallDetailsListener, + InCallEventListener, AudioModeListener { private static final String TAG = CallCardPresenter.class.getSimpleName(); private static final long CALL_TIME_UPDATE_INTERVAL_MS = 1000; @@ -65,12 +69,15 @@ public class CallCardPresenter extends Presenter<CallCardPresenter.CallCardUi> private static final String IDP_ZERO = "0"; private static final String IDP_PREFIX = "01033"; + private static final String VOLUME_BOOST_PARAMETER = "volume_boost"; + private Call mPrimary; private Call mSecondary; private ContactCacheEntry mPrimaryContactInfo; private ContactCacheEntry mSecondaryContactInfo; private CallTimer mCallTimer; private Context mContext; + private AudioManager mAudioManager; public static class ContactLookupCallback implements ContactInfoCacheCallback { private final WeakReference<CallCardPresenter> mCallCardPresenter; @@ -111,6 +118,7 @@ public class CallCardPresenter extends Presenter<CallCardPresenter.CallCardUi> public void init(Context context, Call call) { mContext = Preconditions.checkNotNull(context); + mAudioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); // Call may be null if disconnect happened already. if (call != null) { @@ -139,6 +147,7 @@ public class CallCardPresenter extends Presenter<CallCardPresenter.CallCardUi> InCallPresenter.getInstance().addIncomingCallListener(this); InCallPresenter.getInstance().addDetailsListener(this); InCallPresenter.getInstance().addInCallEventListener(this); + AudioModeProvider.getInstance().addListener(this); } @Override @@ -150,6 +159,7 @@ public class CallCardPresenter extends Presenter<CallCardPresenter.CallCardUi> InCallPresenter.getInstance().removeIncomingCallListener(this); InCallPresenter.getInstance().removeDetailsListener(this); InCallPresenter.getInstance().removeInCallEventListener(this); + AudioModeProvider.getInstance().removeListener(this); mPrimary = null; mPrimaryContactInfo = null; @@ -254,6 +264,11 @@ public class CallCardPresenter extends Presenter<CallCardPresenter.CallCardUi> false); } + if (!callList.hasAnyLiveCall() && isVolumeBoostEnabled()) { + setVolumeBoost(false); + } + updateVBButton(); + // Hide/show the contact photo based on the video state. // If the primary call is a video call on hold, still show the contact photo. // If the primary call is an active video call, hide the contact photo. @@ -296,6 +311,28 @@ public class CallCardPresenter extends Presenter<CallCardPresenter.CallCardUi> } } + @Override + public void onAudioMode(int mode) { + if (mAudioManager == null) { + return; + } + if (mode == AudioState.ROUTE_EARPIECE || mode == AudioState.ROUTE_BLUETOOTH + || mode == AudioState.ROUTE_WIRED_HEADSET || mode == AudioState.ROUTE_SPEAKER) { + setVolumeBoost(false); + updateVBButton(); + } + } + + @Override + public void onSupportedAudioMode(int mask) { + // ignored + } + + @Override + public void onMute(boolean muted) { + // ignored + } + private String getSubscriptionNumber() { // If it's an emergency call, and they're not populating the callback number, // then try to fall back to the phone sub info (to hopefully get the SIM's @@ -758,6 +795,48 @@ public class CallCardPresenter extends Presenter<CallCardPresenter.CallCardUi> TelecomAdapter.getInstance().disconnectCall(mPrimary.getId()); } + public void volumeBoostClicked() { + if (isVBAvailable()) { + setVolumeBoost(!isVolumeBoostEnabled()); + } + + updateVBButton(); + } + + private boolean isVBAvailable() { + if (mPrimary == null || mPrimary.getState() != Call.State.ACTIVE) { + return false; + } + + int mode = AudioModeProvider.getInstance().getAudioMode(); + int settingsTtyMode = Settings.Secure.getInt(mContext.getContentResolver(), + Settings.Secure.PREFERRED_TTY_MODE, TelecomManager.TTY_MODE_OFF); + + if (mode != AudioState.ROUTE_EARPIECE && mode != AudioState.ROUTE_SPEAKER + && settingsTtyMode != TelecomManager.TTY_MODE_HCO) { + return false; + } + + return !TextUtils.isEmpty(mAudioManager.getParameters(VOLUME_BOOST_PARAMETER)); + } + + private boolean isVolumeBoostEnabled() { + return mAudioManager.getParameters(VOLUME_BOOST_PARAMETER).contains("=on"); + } + + private void setVolumeBoost(boolean on) { + final String value = on ? "=on" : "=off"; + mAudioManager.setParameters(VOLUME_BOOST_PARAMETER + value); + } + + private void updateVBButton() { + boolean show = isVBAvailable(); + boolean on = show && isVolumeBoostEnabled(); + if (getUi() != null) { + getUi().setVolumeBoostButtonState(show, on); + } + } + private String getNumberFromHandle(Uri handle) { return handle == null ? "" : handle.getSchemeSpecificPart(); } @@ -818,6 +897,7 @@ public class CallCardPresenter extends Presenter<CallCardPresenter.CallCardUi> void setCallbackNumber(String number, boolean isEmergencyCalls); void setPhotoVisible(boolean isVisible); void setProgressSpinnerVisible(boolean visible); + void setVolumeBoostButtonState(boolean visible, boolean on); void showManageConferenceCallButton(boolean visible); boolean isManageConferenceVisible(); } diff --git a/src/com/android/incallui/InCallActivity.java b/src/com/android/incallui/InCallActivity.java index 12faf2af..6d4733da 100644 --- a/src/com/android/incallui/InCallActivity.java +++ b/src/com/android/incallui/InCallActivity.java @@ -661,10 +661,6 @@ public class InCallActivity extends Activity { .findFragmentById(R.id.conferenceManagerFragment); mConferenceManagerFragment.getView().setVisibility(View.INVISIBLE); } - - if (AudioModeProvider.getInstance() != null) { - AudioModeProvider.getInstance().setInCallActivity(this); - } } /** |