summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorHuiWang <huiwan@codeaurora.org>2013-12-19 15:48:19 +0800
committeremancebo <emancebo@cyngn.com>2014-09-02 15:42:29 -0700
commitbc89a360292949f1b3deb3d230106eb14e9ec28b (patch)
treec1e0603e1e256f77a1b5eaab3794aeb344ef1064 /src
parenta18534b4461e2911e74bc8bd01414d9d67639df2 (diff)
downloadpackages_apps_InCallUI-bc89a360292949f1b3deb3d230106eb14e9ec28b.tar.gz
packages_apps_InCallUI-bc89a360292949f1b3deb3d230106eb14e9ec28b.tar.bz2
packages_apps_InCallUI-bc89a360292949f1b3deb3d230106eb14e9ec28b.zip
InCallUI: add volume boost UI in call UI.
Add volume boost UI in calling screen to enable volume boost and volume enhancement function during calling. Conflicts: res/layout/primary_call_info.xml res/values-zh-rCN/strings.xml res/values/strings.xml src/com/android/incallui/CallCardFragment.java Change-Id: Ic42d8a24602939038c60e6a1a2812a4125200c99
Diffstat (limited to 'src')
-rw-r--r--src/com/android/incallui/CallCardFragment.java102
-rw-r--r--src/com/android/incallui/CallHandlerService.java20
2 files changed, 122 insertions, 0 deletions
diff --git a/src/com/android/incallui/CallCardFragment.java b/src/com/android/incallui/CallCardFragment.java
index b46fe229..ea2acf4f 100644
--- a/src/com/android/incallui/CallCardFragment.java
+++ b/src/com/android/incallui/CallCardFragment.java
@@ -23,10 +23,12 @@ package com.android.incallui;
import android.animation.LayoutTransition;
import android.content.Context;
import android.graphics.drawable.Drawable;
+import android.media.AudioManager;
import android.os.Bundle;
import static android.telephony.TelephonyManager.SIM_STATE_ABSENT;
import android.telephony.MSimTelephonyManager;
import android.os.SystemProperties;
+import android.provider.Settings;
import android.text.TextUtils;
import android.text.format.DateUtils;
import android.util.AttributeSet;
@@ -37,8 +39,10 @@ import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.ViewStub;
import android.view.accessibility.AccessibilityEvent;
+import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
+import android.widget.Toast;
import com.android.services.telephony.common.AudioMode;
import com.android.services.telephony.common.Call;
@@ -65,6 +69,10 @@ public class CallCardFragment extends BaseFragment<CallCardPresenter, CallCardPr
private TextView mSubscriptionId;
private ViewGroup mSupplementaryInfoContainer;
private TextView mCallRecordingTimer;
+ private Button mVBButton;
+ private AudioManager mAudioManager;
+ private Toast mVBNotify;
+ private int mVBToastPosition;
// Secondary caller info
private ViewStub mSecondaryCallInfo;
@@ -84,6 +92,8 @@ public class CallCardFragment extends BaseFragment<CallCardPresenter, CallCardPr
private static final int IMS_AUDIO_OUTPUT_DEFAULT = 0;
private static final int IMS_AUDIO_OUTPUT_DISABLE_SPEAKER = 1;
+ private static final String VOLUME_BOOST = "volume_boost";
+
/**
* Controls audio route for VT calls.
* 0 - Use the default audio routing strategy.
@@ -157,6 +167,12 @@ public class CallCardFragment extends BaseFragment<CallCardPresenter, CallCardPr
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
+
+ mVBToastPosition = Integer.parseInt(
+ getResources().getString(R.string.volume_boost_toast_position));
+
+ mAudioManager = (AudioManager) getActivity()
+ .getSystemService(Context.AUDIO_SERVICE);
}
@@ -208,6 +224,11 @@ public class CallCardFragment extends BaseFragment<CallCardPresenter, CallCardPr
transition.enableTransitionType(LayoutTransition.CHANGING);
transition.setAnimateParentHierarchy(false);
transition.setDuration(200);
+
+ mVBButton = (Button) view.findViewById(R.id.volumeBoost);
+ if (null != mVBButton) {
+ mVBButton.setOnClickListener(mVBListener);
+ }
}
@Override
@@ -372,6 +393,8 @@ public class CallCardFragment extends BaseFragment<CallCardPresenter, CallCardPr
// States other than disconnected not yet supported
callStateLabel = getCallStateLabelFromState(state, cause, isWaitingForRemoteSide);
+ updateVBbyCall(state);
+
Log.v(this, "setCallState " + callStateLabel);
Log.v(this, "DisconnectCause " + cause);
Log.v(this, "bluetooth on " + bluetoothOn);
@@ -815,4 +838,83 @@ public class CallCardFragment extends BaseFragment<CallCardPresenter, CallCardPr
private void loge(String msg) {
Log.e(this, msg);
}
+
+ private OnClickListener mVBListener = new OnClickListener() {
+ @Override
+ public void onClick(View arg0) {
+ if (isVBAvailable()) {
+ switchVBStatus();
+ }
+
+ updateVBButton();
+ showVBNotify();
+ }
+ };
+
+ private boolean isVBAvailable() {
+ int mode = AudioModeProvider.getInstance().getAudioMode();
+
+ return (mode == AudioMode.EARPIECE || mode == AudioMode.SPEAKER);
+ }
+
+ 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.volume_in_boost_sel);
+ } else if (isVBAvailable()
+ && !(mAudioManager.getParameters(VOLUME_BOOST).contains("=on"))) {
+
+ mVBButton.setBackgroundResource(R.drawable.volume_in_boost_nor);
+ } else {
+ mVBButton.setBackgroundResource(R.drawable.volume_in_boost_unavailable);
+ }
+ }
+
+ 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().existsLiveCall()
+ && mAudioManager.getParameters(VOLUME_BOOST).contains("=on")) {
+ mVBButton.setVisibility(View.INVISIBLE);
+
+ mAudioManager.setParameters(VOLUME_BOOST + "=off");
+ }
+ }
+ }
}
diff --git a/src/com/android/incallui/CallHandlerService.java b/src/com/android/incallui/CallHandlerService.java
index b1ff2c6c..ca1f5814 100644
--- a/src/com/android/incallui/CallHandlerService.java
+++ b/src/com/android/incallui/CallHandlerService.java
@@ -17,7 +17,9 @@
package com.android.incallui;
import android.app.Service;
+import android.content.Context;
import android.content.Intent;
+import android.media.AudioManager;
import android.os.Handler;
import android.os.IBinder;
import android.os.Message;
@@ -54,7 +56,9 @@ public class CallHandlerService extends Service {
private static final int LARGEST_MSG_ID = ON_SUPP_SERVICE_FAIL;
+ private static final String VOLUME_BOOST = "volume_boost";
+ private AudioManager mAudioManager;
private CallList mCallList;
private Handler mMainHandler;
private Object mHandlerInitLock = new Object();
@@ -68,6 +72,7 @@ public class CallHandlerService extends Service {
public void onCreate() {
Log.i(TAG, "onCreate");
super.onCreate();
+ mAudioManager = (AudioManager) getSystemService (Context.AUDIO_SERVICE);
synchronized(mHandlerInitLock) {
if (mMainHandler == null) {
@@ -322,12 +327,17 @@ public class CallHandlerService extends Service {
case ON_AUDIO_MODE:
Log.i(TAG, "ON_AUDIO_MODE: " +
AudioMode.toString(msg.arg1) + ", muted (" + (msg.arg2 == 1) + ")");
+
+ updateVBStatus(msg.arg1);
+
mAudioModeProvider.onAudioModeChange(msg.arg1, msg.arg2 == 1);
break;
case ON_SUPPORTED_AUDIO_MODE:
Log.i(TAG, "ON_SUPPORTED_AUDIO_MODE: " + AudioMode.toString(
msg.arg1));
+ updateVBStatus(msg.arg1);
+
mAudioModeProvider.onSupportedAudioModeChange(msg.arg1);
break;
case ON_BRING_TO_FOREGROUND:
@@ -360,4 +370,14 @@ public class CallHandlerService extends Service {
break;
}
}
+
+ /**
+ * Whenever call audio device change, turn off volume boost function.
+ * */
+ private void updateVBStatus(int newMode) {
+ if (newMode != mAudioModeProvider.getAudioMode()
+ && mAudioManager.getParameters(VOLUME_BOOST).contains("=on")) {
+ mAudioManager.setParameters(VOLUME_BOOST + "=off");
+ }
+ }
}