add UI logic for wired headset

if wired headset is plugged in hide earpiece and speaker icons

if wired headset is plugged out show earpiece and speaker icons

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
This commit is contained in:
Marcel Hibbe 2022-02-01 19:12:48 +01:00
parent a34eb89570
commit 51df0e67f4
No known key found for this signature in database
GPG Key ID: C793F8B59F43CE7B
5 changed files with 84 additions and 10 deletions

View File

@ -475,6 +475,10 @@ public class CallActivity extends CallBaseActivity {
binding.audioOutputButton.getHierarchy().setPlaceholderImage( binding.audioOutputButton.getHierarchy().setPlaceholderImage(
AppCompatResources.getDrawable(context, R.drawable.ic_baseline_phone_in_talk_24)); AppCompatResources.getDrawable(context, R.drawable.ic_baseline_phone_in_talk_24));
break; break;
case WIRED_HEADSET:
binding.audioOutputButton.getHierarchy().setPlaceholderImage(
AppCompatResources.getDrawable(context, R.drawable.ic_baseline_headset_mic_24));
break;
default: default:
Log.e(TAG, "Icon for audio output not available"); Log.e(TAG, "Icon for audio output not available");
break; break;
@ -745,14 +749,14 @@ public class CallActivity extends CallBaseActivity {
} }
private void onAudioManagerDevicesChanged( private void onAudioManagerDevicesChanged(
final MagicAudioManager.AudioDevice device, final MagicAudioManager.AudioDevice currentDevice,
final Set<MagicAudioManager.AudioDevice> availableDevices) { final Set<MagicAudioManager.AudioDevice> availableDevices) {
Log.d(TAG, "onAudioManagerDevicesChanged: " + availableDevices + ", " Log.d(TAG, "onAudioManagerDevicesChanged: " + availableDevices + ", "
+ "result: " + device); + "currentDevice: " + currentDevice);
final boolean shouldDisableProximityLock = (device.equals(MagicAudioManager.AudioDevice.WIRED_HEADSET) final boolean shouldDisableProximityLock = (currentDevice.equals(MagicAudioManager.AudioDevice.WIRED_HEADSET)
|| device.equals(MagicAudioManager.AudioDevice.SPEAKER_PHONE) || currentDevice.equals(MagicAudioManager.AudioDevice.SPEAKER_PHONE)
|| device.equals(MagicAudioManager.AudioDevice.BLUETOOTH)); || currentDevice.equals(MagicAudioManager.AudioDevice.BLUETOOTH));
if (shouldDisableProximityLock) { if (shouldDisableProximityLock) {
powerManagerUtils.updatePhoneState(PowerManagerUtils.PhoneState.WITHOUT_PROXIMITY_SENSOR_LOCK); powerManagerUtils.updatePhoneState(PowerManagerUtils.PhoneState.WITHOUT_PROXIMITY_SENSOR_LOCK);
@ -760,10 +764,10 @@ public class CallActivity extends CallBaseActivity {
powerManagerUtils.updatePhoneState(PowerManagerUtils.PhoneState.WITH_PROXIMITY_SENSOR_LOCK); powerManagerUtils.updatePhoneState(PowerManagerUtils.PhoneState.WITH_PROXIMITY_SENSOR_LOCK);
} }
if (audioOutputDialog != null){ if (audioOutputDialog != null) {
audioOutputDialog.updateOutputDeviceList(); audioOutputDialog.updateOutputDeviceList();
} }
updateAudioOutputButton(device); updateAudioOutputButton(currentDevice);
} }

View File

@ -43,22 +43,37 @@ class AudioOutputDialog(val callActivity: CallActivity) : BottomSheetDialog(call
window?.setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT) window?.setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)
updateOutputDeviceList() updateOutputDeviceList()
highlightActiveOutputChannel()
initClickListeners() initClickListeners()
} }
fun updateOutputDeviceList() { fun updateOutputDeviceList() {
if (callActivity.audioManager?.audioDevices?.contains(MagicAudioManager.AudioDevice.BLUETOOTH) == false){ if (callActivity.audioManager?.audioDevices?.contains(MagicAudioManager.AudioDevice.BLUETOOTH) == false) {
dialogAudioOutputBinding.audioOutputBluetooth.visibility = View.GONE dialogAudioOutputBinding.audioOutputBluetooth.visibility = View.GONE
} else { } else {
dialogAudioOutputBinding.audioOutputBluetooth.visibility = View.VISIBLE dialogAudioOutputBinding.audioOutputBluetooth.visibility = View.VISIBLE
} }
if (callActivity.audioManager?.audioDevices?.contains(MagicAudioManager.AudioDevice.EARPIECE) == false){ if (callActivity.audioManager?.audioDevices?.contains(MagicAudioManager.AudioDevice.EARPIECE) == false) {
dialogAudioOutputBinding.audioOutputEarspeaker.visibility = View.GONE dialogAudioOutputBinding.audioOutputEarspeaker.visibility = View.GONE
} else { } else {
dialogAudioOutputBinding.audioOutputEarspeaker.visibility = View.VISIBLE dialogAudioOutputBinding.audioOutputEarspeaker.visibility = View.VISIBLE
} }
if (callActivity.audioManager?.audioDevices?.contains(MagicAudioManager.AudioDevice.SPEAKER_PHONE) == false) {
dialogAudioOutputBinding.audioOutputSpeaker.visibility = View.GONE
} else {
dialogAudioOutputBinding.audioOutputSpeaker.visibility = View.VISIBLE
}
if (callActivity.audioManager?.currentAudioDevice?.equals(MagicAudioManager.AudioDevice.WIRED_HEADSET) == true) {
dialogAudioOutputBinding.audioOutputEarspeaker.visibility = View.GONE
dialogAudioOutputBinding.audioOutputSpeaker.visibility = View.GONE
dialogAudioOutputBinding.audioOutputWiredHeadset.visibility = View.VISIBLE
} else {
dialogAudioOutputBinding.audioOutputWiredHeadset.visibility = View.GONE
}
highlightActiveOutputChannel()
} }
private fun highlightActiveOutputChannel() { private fun highlightActiveOutputChannel() {
@ -98,6 +113,17 @@ class AudioOutputDialog(val callActivity: CallActivity) : BottomSheetDialog(call
dialogAudioOutputBinding.audioOutputEarspeakerText.setTextColor(callActivity.resources.getColor(R.color.colorPrimary)) dialogAudioOutputBinding.audioOutputEarspeakerText.setTextColor(callActivity.resources.getColor(R.color.colorPrimary))
} }
MagicAudioManager.AudioDevice.WIRED_HEADSET -> {
dialogAudioOutputBinding.audioOutputWiredHeadsetIcon.setColorFilter(
ContextCompat.getColor(
context,
R.color.colorPrimary
), android.graphics.PorterDuff.Mode.SRC_IN
)
dialogAudioOutputBinding.audioOutputWiredHeadsetText.setTextColor(callActivity.resources.getColor(R.color
.colorPrimary))
}
else -> Log.d(TAG, "AudioOutputDialog doesn't know this AudioDevice") else -> Log.d(TAG, "AudioOutputDialog doesn't know this AudioDevice")
} }
} }

View File

@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24"
android:tint="?attr/colorControlNormal">
<path
android:fillColor="@android:color/white"
android:pathData="M12,1c-4.97,0 -9,4.03 -9,9v7c0,1.66 1.34,3 3,3h3v-8H5v-2c0,-3.87 3.13,-7 7,-7s7,3.13 7,7v2h-4v8h4v1h-7v2h6c1.66,0 3,-1.34 3,-3V10c0,-4.97 -4.03,-9 -9,-9z"/>
</vector>

View File

@ -138,4 +138,37 @@
</LinearLayout> </LinearLayout>
<LinearLayout
android:id="@+id/audio_output_wired_headset"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?android:attr/selectableItemBackground"
android:orientation="horizontal"
android:paddingLeft="@dimen/standard_padding"
android:paddingTop="@dimen/standard_half_padding"
android:paddingRight="@dimen/standard_padding"
android:paddingBottom="@dimen/standard_half_padding"
tools:ignore="UseCompoundDrawables">
<ImageView
android:id="@+id/audio_output_wired_headset_icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="@null"
android:src="@drawable/ic_baseline_headset_mic_24"
app:tint="#99ffffff" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/audio_output_wired_headset_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="start|center_vertical"
android:layout_marginStart="@dimen/standard_margin"
android:text="@string/audio_output_wired_headset"
android:textAlignment="viewStart"
android:textColor="#99ffffff"
android:textSize="@dimen/bottom_sheet_text_size" />
</LinearLayout>
</LinearLayout> </LinearLayout>

View File

@ -498,5 +498,6 @@
<string name="audio_output_speaker">Speaker</string> <string name="audio_output_speaker">Speaker</string>
<string name="audio_output_phone">Phone</string> <string name="audio_output_phone">Phone</string>
<string name="audio_output_dialog_headline">Audio output</string> <string name="audio_output_dialog_headline">Audio output</string>
<string name="audio_output_wired_headset">Wired headset</string>
</resources> </resources>