正在显示
5 个修改的文件
包含
140 行增加
和
7 行删除
| @@ -16,6 +16,8 @@ import com.xwray.groupie.GroupieAdapter | @@ -16,6 +16,8 @@ import com.xwray.groupie.GroupieAdapter | ||
| 16 | import io.livekit.android.room.track.Track | 16 | import io.livekit.android.room.track.Track |
| 17 | import io.livekit.android.room.track.VideoTrack | 17 | import io.livekit.android.room.track.VideoTrack |
| 18 | import io.livekit.android.sample.databinding.CallActivityBinding | 18 | import io.livekit.android.sample.databinding.CallActivityBinding |
| 19 | +import io.livekit.android.sample.dialog.showDebugMenuDialog | ||
| 20 | +import io.livekit.android.sample.dialog.showSelectAudioDeviceDialog | ||
| 19 | import io.livekit.android.util.flow | 21 | import io.livekit.android.util.flow |
| 20 | import kotlinx.coroutines.flow.* | 22 | import kotlinx.coroutines.flow.* |
| 21 | import kotlinx.parcelize.Parcelize | 23 | import kotlinx.parcelize.Parcelize |
| @@ -177,6 +179,24 @@ class CallActivity : AppCompatActivity() { | @@ -177,6 +179,24 @@ class CallActivity : AppCompatActivity() { | ||
| 177 | } | 179 | } |
| 178 | 180 | ||
| 179 | binding.exit.setOnClickListener { finish() } | 181 | binding.exit.setOnClickListener { finish() } |
| 182 | + | ||
| 183 | + // Controls row 2 | ||
| 184 | + binding.audioSelect.setOnClickListener { | ||
| 185 | + showSelectAudioDeviceDialog(viewModel) | ||
| 186 | + } | ||
| 187 | + lifecycleScope.launchWhenCreated { | ||
| 188 | + viewModel.permissionAllowed.collect { allowed -> | ||
| 189 | + val resource = if (allowed) R.drawable.account_cancel_outline else R.drawable.account_cancel | ||
| 190 | + binding.permissions.setImageResource(resource) | ||
| 191 | + } | ||
| 192 | + } | ||
| 193 | + binding.permissions.setOnClickListener { | ||
| 194 | + viewModel.toggleSubscriptionPermissions() | ||
| 195 | + } | ||
| 196 | + | ||
| 197 | + binding.debugMenu.setOnClickListener { | ||
| 198 | + showDebugMenuDialog(viewModel) | ||
| 199 | + } | ||
| 180 | } | 200 | } |
| 181 | 201 | ||
| 182 | override fun onResume() { | 202 | override fun onResume() { |
| 1 | +package io.livekit.android.sample.dialog | ||
| 2 | + | ||
| 3 | +import android.R | ||
| 4 | +import android.app.Activity | ||
| 5 | +import android.app.AlertDialog | ||
| 6 | +import android.widget.ArrayAdapter | ||
| 7 | +import io.livekit.android.sample.CallViewModel | ||
| 8 | + | ||
| 9 | + | ||
| 10 | +fun Activity.showDebugMenuDialog(callViewModel: CallViewModel) { | ||
| 11 | + val builder = with(AlertDialog.Builder(this)) { | ||
| 12 | + setTitle("Debug Menu") | ||
| 13 | + | ||
| 14 | + val arrayAdapter = ArrayAdapter<String>(this@showDebugMenuDialog, R.layout.select_dialog_item) | ||
| 15 | + arrayAdapter.add("Simulate Migration") | ||
| 16 | + arrayAdapter.add("Reconnect to Room") | ||
| 17 | + setAdapter(arrayAdapter) { dialog, index -> | ||
| 18 | + when (index) { | ||
| 19 | + 0 -> callViewModel.simulateMigration() | ||
| 20 | + 1 -> callViewModel.reconnect() | ||
| 21 | + } | ||
| 22 | + dialog.dismiss() | ||
| 23 | + } | ||
| 24 | + } | ||
| 25 | + builder.show() | ||
| 26 | +} |
| 1 | +package io.livekit.android.sample.dialog | ||
| 2 | + | ||
| 3 | +import android.R | ||
| 4 | +import android.app.Activity | ||
| 5 | +import android.app.AlertDialog | ||
| 6 | +import android.widget.ArrayAdapter | ||
| 7 | +import io.livekit.android.sample.CallViewModel | ||
| 8 | + | ||
| 9 | + | ||
| 10 | +fun Activity.showSelectAudioDeviceDialog(callViewModel: CallViewModel) { | ||
| 11 | + val builder = with(AlertDialog.Builder(this)) { | ||
| 12 | + setTitle("Select Audio Device") | ||
| 13 | + | ||
| 14 | + val audioHandler = callViewModel.audioHandler | ||
| 15 | + val audioDevices = audioHandler.availableAudioDevices | ||
| 16 | + val arrayAdapter = ArrayAdapter<String>(this@showSelectAudioDeviceDialog, R.layout.select_dialog_item) | ||
| 17 | + arrayAdapter.addAll(audioDevices.map { it.name }) | ||
| 18 | + setAdapter(arrayAdapter) { dialog, index -> | ||
| 19 | + audioHandler.selectDevice(audioDevices[index]) | ||
| 20 | + dialog.dismiss() | ||
| 21 | + } | ||
| 22 | + } | ||
| 23 | + builder.show() | ||
| 24 | +} |
| @@ -70,54 +70,105 @@ | @@ -70,54 +70,105 @@ | ||
| 70 | android:layout_height="60dp" | 70 | android:layout_height="60dp" |
| 71 | android:gravity="center" | 71 | android:gravity="center" |
| 72 | android:orientation="horizontal" | 72 | android:orientation="horizontal" |
| 73 | - app:layout_constraintBottom_toBottomOf="parent"> | 73 | + app:layout_constraintBottom_toTopOf="@id/controls_box2"> |
| 74 | 74 | ||
| 75 | <ImageView | 75 | <ImageView |
| 76 | android:id="@+id/camera" | 76 | android:id="@+id/camera" |
| 77 | android:layout_width="@dimen/control_size" | 77 | android:layout_width="@dimen/control_size" |
| 78 | android:layout_height="@dimen/control_size" | 78 | android:layout_height="@dimen/control_size" |
| 79 | + android:layout_weight="1" | ||
| 79 | android:background="?android:attr/selectableItemBackground" | 80 | android:background="?android:attr/selectableItemBackground" |
| 80 | android:padding="@dimen/control_padding" | 81 | android:padding="@dimen/control_padding" |
| 81 | - android:src="@drawable/outline_videocam_24" /> | 82 | + android:src="@drawable/outline_videocam_24" |
| 83 | + app:tint="@android:color/white" /> | ||
| 82 | 84 | ||
| 83 | <ImageView | 85 | <ImageView |
| 84 | android:id="@+id/mic" | 86 | android:id="@+id/mic" |
| 85 | android:layout_width="@dimen/control_size" | 87 | android:layout_width="@dimen/control_size" |
| 86 | android:layout_height="@dimen/control_size" | 88 | android:layout_height="@dimen/control_size" |
| 89 | + android:layout_weight="1" | ||
| 87 | android:background="?android:attr/selectableItemBackground" | 90 | android:background="?android:attr/selectableItemBackground" |
| 88 | android:padding="@dimen/control_padding" | 91 | android:padding="@dimen/control_padding" |
| 89 | - android:src="@drawable/outline_mic_24" /> | 92 | + android:src="@drawable/outline_mic_24" |
| 93 | + app:tint="@android:color/white" /> | ||
| 90 | 94 | ||
| 91 | <ImageView | 95 | <ImageView |
| 92 | android:id="@+id/flip_camera" | 96 | android:id="@+id/flip_camera" |
| 93 | android:layout_width="@dimen/control_size" | 97 | android:layout_width="@dimen/control_size" |
| 94 | android:layout_height="@dimen/control_size" | 98 | android:layout_height="@dimen/control_size" |
| 99 | + android:layout_weight="1" | ||
| 95 | android:background="?android:attr/selectableItemBackground" | 100 | android:background="?android:attr/selectableItemBackground" |
| 96 | android:padding="@dimen/control_padding" | 101 | android:padding="@dimen/control_padding" |
| 97 | - android:src="@drawable/outline_flip_camera_android_24" /> | 102 | + android:src="@drawable/outline_flip_camera_android_24" |
| 103 | + app:tint="@android:color/white" /> | ||
| 98 | 104 | ||
| 99 | <ImageView | 105 | <ImageView |
| 100 | android:id="@+id/screen_share" | 106 | android:id="@+id/screen_share" |
| 101 | android:layout_width="@dimen/control_size" | 107 | android:layout_width="@dimen/control_size" |
| 102 | android:layout_height="@dimen/control_size" | 108 | android:layout_height="@dimen/control_size" |
| 109 | + android:layout_weight="1" | ||
| 103 | android:background="?android:attr/selectableItemBackground" | 110 | android:background="?android:attr/selectableItemBackground" |
| 104 | android:padding="@dimen/control_padding" | 111 | android:padding="@dimen/control_padding" |
| 105 | - android:src="@drawable/baseline_cast_24" /> | 112 | + android:src="@drawable/baseline_cast_24" |
| 113 | + app:tint="@android:color/white" /> | ||
| 106 | 114 | ||
| 107 | <ImageView | 115 | <ImageView |
| 108 | android:id="@+id/message" | 116 | android:id="@+id/message" |
| 109 | android:layout_width="@dimen/control_size" | 117 | android:layout_width="@dimen/control_size" |
| 110 | android:layout_height="@dimen/control_size" | 118 | android:layout_height="@dimen/control_size" |
| 119 | + android:layout_weight="1" | ||
| 111 | android:background="?android:attr/selectableItemBackground" | 120 | android:background="?android:attr/selectableItemBackground" |
| 112 | android:padding="@dimen/control_padding" | 121 | android:padding="@dimen/control_padding" |
| 113 | - android:src="@drawable/baseline_chat_24" /> | 122 | + android:src="@drawable/baseline_chat_24" |
| 123 | + app:tint="@android:color/white" /> | ||
| 114 | 124 | ||
| 115 | <ImageView | 125 | <ImageView |
| 116 | android:id="@+id/exit" | 126 | android:id="@+id/exit" |
| 117 | android:layout_width="@dimen/control_size" | 127 | android:layout_width="@dimen/control_size" |
| 118 | android:layout_height="@dimen/control_size" | 128 | android:layout_height="@dimen/control_size" |
| 129 | + android:layout_weight="1" | ||
| 130 | + android:background="?android:attr/selectableItemBackground" | ||
| 131 | + android:padding="@dimen/control_padding" | ||
| 132 | + android:src="@drawable/ic_baseline_cancel_24" | ||
| 133 | + app:tint="@android:color/white" /> | ||
| 134 | + </LinearLayout> | ||
| 135 | + | ||
| 136 | + <LinearLayout | ||
| 137 | + android:id="@+id/controls_box2" | ||
| 138 | + android:layout_width="match_parent" | ||
| 139 | + android:layout_height="60dp" | ||
| 140 | + android:gravity="center" | ||
| 141 | + android:orientation="horizontal" | ||
| 142 | + app:layout_constraintBottom_toBottomOf="parent"> | ||
| 143 | + | ||
| 144 | + <ImageView | ||
| 145 | + android:id="@+id/audio_select" | ||
| 146 | + android:layout_width="@dimen/control_size" | ||
| 147 | + android:layout_height="@dimen/control_size" | ||
| 148 | + android:layout_weight="1" | ||
| 149 | + android:background="?android:attr/selectableItemBackground" | ||
| 150 | + android:padding="@dimen/control_padding" | ||
| 151 | + android:src="@drawable/volume_up_48px" | ||
| 152 | + app:tint="@android:color/white" /> | ||
| 153 | + | ||
| 154 | + <ImageView | ||
| 155 | + android:id="@+id/permissions" | ||
| 156 | + android:layout_width="@dimen/control_size" | ||
| 157 | + android:layout_height="@dimen/control_size" | ||
| 158 | + android:layout_weight="1" | ||
| 159 | + android:background="?android:attr/selectableItemBackground" | ||
| 160 | + android:padding="@dimen/control_padding" | ||
| 161 | + android:src="@drawable/account_cancel_outline" | ||
| 162 | + app:tint="@android:color/white" /> | ||
| 163 | + | ||
| 164 | + <ImageView | ||
| 165 | + android:id="@+id/debug_menu" | ||
| 166 | + android:layout_width="@dimen/control_size" | ||
| 167 | + android:layout_height="@dimen/control_size" | ||
| 168 | + android:layout_weight="1" | ||
| 119 | android:background="?android:attr/selectableItemBackground" | 169 | android:background="?android:attr/selectableItemBackground" |
| 120 | android:padding="@dimen/control_padding" | 170 | android:padding="@dimen/control_padding" |
| 121 | - android:src="@drawable/ic_baseline_cancel_24" /> | 171 | + android:src="@drawable/dots_horizontal_circle_outline" |
| 172 | + app:tint="@android:color/white" /> | ||
| 122 | </LinearLayout> | 173 | </LinearLayout> |
| 123 | </androidx.constraintlayout.widget.ConstraintLayout> | 174 | </androidx.constraintlayout.widget.ConstraintLayout> |
| 1 | +<?xml version="1.0" encoding="utf-8"?> | ||
| 2 | +<Button xmlns:android="http://schemas.android.com/apk/res/android" | ||
| 3 | + xmlns:tools="http://schemas.android.com/tools" | ||
| 4 | + android:id="@android:id/text1" | ||
| 5 | + android:layout_width="match_parent" | ||
| 6 | + android:layout_height="wrap_content" | ||
| 7 | + android:ellipsize="marquee" | ||
| 8 | + android:gravity="center" | ||
| 9 | + android:minHeight="?android:attr/listPreferredItemHeight" | ||
| 10 | + android:textAppearance="?android:attr/textAppearanceLarge" | ||
| 11 | + android:textColor="?android:attr/textColorAlertDialogListItem" | ||
| 12 | + tools:text="Button" /> |
-
请 注册 或 登录 后发表评论