ソースを参照

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 年 前
コミット
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(
                 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)
-            || 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) {
         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);
     }
     }
 
 
 
 

+ 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)
         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")
         }
         }
     }
     }

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

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

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