summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDennySPB <dennyspb@gmail.com>2017-12-22 11:05:20 +0300
committerSemavi Ulusoy <doc.divxm@gmail.com>2022-09-13 10:46:08 +0300
commitb37e296ec3fc8b8f24396cbf444db022da6b8279 (patch)
treee473222edd2c213a03457212993d33e4e643f9b7
parentbfc8367ef8f57e45f82a15035921ea9e9005d089 (diff)
Add back proximity autoanswer feature
Forward port to P Forward port to 10 by @eyosen: * switch from settings provider to sharedprefs * sensorManager instead of sensor Change-Id: I613986b63adc6a3ba73ace208bc0ac0589435b8d
-rw-r--r--java/com/android/dialer/app/res/values/aicp_strings.xml4
-rw-r--r--java/com/android/dialer/app/res/xml/speaker_settings.xml6
-rw-r--r--java/com/android/incallui/ProximitySensor.java44
3 files changed, 49 insertions, 5 deletions
diff --git a/java/com/android/dialer/app/res/values/aicp_strings.xml b/java/com/android/dialer/app/res/values/aicp_strings.xml
index 6511529cf..d0a76524f 100644
--- a/java/com/android/dialer/app/res/values/aicp_strings.xml
+++ b/java/com/android/dialer/app/res/values/aicp_strings.xml
@@ -78,4 +78,8 @@
<!-- Disable proximity sensor -->
<string name="disable_proximity_sensor_title">Disable proximity sensor</string>
<string name="disable_proximity_sensor_summary">Do not turn off touchscreen and display in call based on proximity sensor</string>
+
+ <!-- proximity autoanswer feature -->
+ <string name="prox_auto_answer_incall_only_title">Auto answer</string>
+ <string name="prox_auto_answer_incall_only_summary">Use proximity sensor for autoanswer</string>
</resources>
diff --git a/java/com/android/dialer/app/res/xml/speaker_settings.xml b/java/com/android/dialer/app/res/xml/speaker_settings.xml
index 77015d2e0..9571f9b11 100644
--- a/java/com/android/dialer/app/res/xml/speaker_settings.xml
+++ b/java/com/android/dialer/app/res/xml/speaker_settings.xml
@@ -39,4 +39,10 @@
android:defaultValue="false"
android:dependency="proximity_auto_speaker" />
+ <SwitchPreference
+ android:key="proximity_auto_answer_incall_only"
+ android:title="@string/prox_auto_answer_incall_only_title"
+ android:summary="@string/prox_auto_answer_incall_only_summary"
+ android:persistent="false"
+ android:defaultValue="false" />
</PreferenceScreen>
diff --git a/java/com/android/incallui/ProximitySensor.java b/java/com/android/incallui/ProximitySensor.java
index b825b2371..8a30734b8 100644
--- a/java/com/android/incallui/ProximitySensor.java
+++ b/java/com/android/incallui/ProximitySensor.java
@@ -30,6 +30,7 @@ import android.os.Trace;
import android.preference.PreferenceManager;
import android.support.annotation.NonNull;
import android.telecom.CallAudioState;
+import android.telecom.TelecomManager;
import android.view.Display;
import com.android.dialer.common.LogUtil;
import com.android.incallui.InCallPresenter.InCallState;
@@ -40,7 +41,6 @@ import com.android.incallui.audiomode.AudioModeProvider.AudioModeListener;
import com.android.incallui.call.CallList;
import com.android.incallui.call.DialerCall;
import com.android.dialer.app.settings.OtherSettingsFragment;
-import android.preference.PreferenceManager;
/**
* Class manages the proximity sensor for the in-call UI. We enable the proximity sensor while the
@@ -54,6 +54,8 @@ public class ProximitySensor
private static final String TAG = ProximitySensor.class.getSimpleName();
private static final String PREF_KEY_DISABLE_PROXI_SENSOR = "disable_proximity_sensor_key";
+ private static final String PREF_PROXIMITY_AUTO_ANSWER_INCALL_ONLY = "proximity_auto_answer_incall_only";
+ private static final int SENSOR_SENSITIVITY = 4;
private final PowerManager powerManager;
private final PowerManager.WakeLock proximityWakeLock;
@@ -62,12 +64,15 @@ public class ProximitySensor
private final AudioModeProvider audioModeProvider;
private final AccelerometerListener accelerometerListener;
private final ProximityDisplayListener displayListener;
+ private final TelecomManager telecomManager;
private int orientation = AccelerometerListener.ORIENTATION_UNKNOWN;
private boolean uiShowing = false;
private boolean hasIncomingCall = false;
private boolean isPhoneOffhook = false;
private boolean isPhoneOutgoing = false;
+ private boolean isPhoneRinging = false;
private boolean proximitySpeaker = false;
+ private boolean isProxSensorNear = false;
private boolean isProxSensorFar = true;
private int proxSpeakerDelay = 3000;
private boolean dialpadVisible;
@@ -80,10 +85,11 @@ public class ProximitySensor
private final Handler handler = new Handler();
private final Runnable activateSpeaker = new Runnable() {
- @Override
- public void run() {
- TelecomAdapter.getInstance().setAudioRoute(CallAudioState.ROUTE_SPEAKER);
- }
+
+ @Override
+ public void run() {
+ TelecomAdapter.getInstance().setAudioRoute(CallAudioState.ROUTE_SPEAKER);
+ }
};
public ProximitySensor(
@@ -93,6 +99,7 @@ public class ProximitySensor
Trace.beginSection("ProximitySensor.Constructor");
this.context = context;
powerManager = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
+ telecomManager = (TelecomManager) context.getSystemService(Context.TELECOM_SERVICE);
mPrefs = PreferenceManager.getDefaultSharedPreferences(context);
final boolean mIsProximitySensorDisabled = mPrefs.getBoolean(PREF_KEY_DISABLE_PROXI_SENSOR, false);
@@ -193,6 +200,8 @@ public class ProximitySensor
}
if (hasIncomingCall) {
+ updateProxRing();
+ answerProx(isProxSensorNear);
updateProximitySensorMode();
}
}
@@ -211,9 +220,15 @@ public class ProximitySensor
isProxSensorFar = false;
} else {
isProxSensorFar = true;
+ isProxSensorNear = false;
}
+ if (event.values[0] <= SENSOR_SENSITIVITY ) {
+ isProxSensorNear = true;
+ }
+ Log.i(this, "Proximity sensor changed");
setProxSpeaker(isProxSensorFar);
+ answerProx(isProxSensorNear);
}
@Override
@@ -365,6 +380,25 @@ public class ProximitySensor
}
}
+ private void updateProxRing() {
+ if (sensorManager != null && proxSensor != null) {
+ if (hasIncomingCall) {
+ sensorManager.registerListener(this, proxSensor,
+ SensorManager.SENSOR_DELAY_NORMAL);
+ } else {
+ sensorManager.unregisterListener(this);
+ }
+ }
+ }
+
+ private void answerProx(boolean isNear) {
+ final boolean proxIncallAnswPref =
+ mPrefs.getBoolean(PREF_PROXIMITY_AUTO_ANSWER_INCALL_ONLY, false);
+ if (isNear && telecomManager != null && !isScreenReallyOff() && proxIncallAnswPref) {
+ telecomManager.acceptRingingCall();
+ }
+ }
+
private void setProxSpeaker(final boolean speaker) {
// remove any pending audio changes scheduled
handler.removeCallbacks(activateSpeaker);