Эх сурвалжийг харах

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>
Marcel Hibbe 3 жил өмнө
parent
commit
51df0e67f4

+ 11 - 7
app/src/main/java/com/nextcloud/talk/activities/CallActivity.java

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

+ 29 - 3
app/src/main/java/com/nextcloud/talk/ui/dialog/AudioOutputDialog.kt

@@ -43,22 +43,37 @@ class AudioOutputDialog(val callActivity: CallActivity) : BottomSheetDialog(call
         window?.setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)
 
         updateOutputDeviceList()
-        highlightActiveOutputChannel()
         initClickListeners()
     }
 
     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
         } else {
             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
         } else {
             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() {
@@ -98,6 +113,17 @@ class AudioOutputDialog(val callActivity: CallActivity) : BottomSheetDialog(call
                 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")
         }
     }

+ 10 - 0
app/src/main/res/drawable/ic_baseline_headset_mic_24.xml

@@ -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>

+ 33 - 0
app/src/main/res/layout/dialog_audio_output.xml

@@ -138,4 +138,37 @@
 
     </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>

+ 1 - 0
app/src/main/res/values/strings.xml

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