diff options
| author | DennySPB <dennyspb@gmail.com> | 2017-12-22 11:05:20 +0300 |
|---|---|---|
| committer | Semavi Ulusoy <doc.divxm@gmail.com> | 2022-09-13 10:46:08 +0300 |
| commit | b37e296ec3fc8b8f24396cbf444db022da6b8279 (patch) | |
| tree | e473222edd2c213a03457212993d33e4e643f9b7 | |
| parent | bfc8367ef8f57e45f82a15035921ea9e9005d089 (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.xml | 4 | ||||
| -rw-r--r-- | java/com/android/dialer/app/res/xml/speaker_settings.xml | 6 | ||||
| -rw-r--r-- | java/com/android/incallui/ProximitySensor.java | 44 |
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); |
