davidliu

Fill in missing controls for view based example

... ... @@ -16,6 +16,8 @@ import com.xwray.groupie.GroupieAdapter
import io.livekit.android.room.track.Track
import io.livekit.android.room.track.VideoTrack
import io.livekit.android.sample.databinding.CallActivityBinding
import io.livekit.android.sample.dialog.showDebugMenuDialog
import io.livekit.android.sample.dialog.showSelectAudioDeviceDialog
import io.livekit.android.util.flow
import kotlinx.coroutines.flow.*
import kotlinx.parcelize.Parcelize
... ... @@ -177,6 +179,24 @@ class CallActivity : AppCompatActivity() {
}
binding.exit.setOnClickListener { finish() }
// Controls row 2
binding.audioSelect.setOnClickListener {
showSelectAudioDeviceDialog(viewModel)
}
lifecycleScope.launchWhenCreated {
viewModel.permissionAllowed.collect { allowed ->
val resource = if (allowed) R.drawable.account_cancel_outline else R.drawable.account_cancel
binding.permissions.setImageResource(resource)
}
}
binding.permissions.setOnClickListener {
viewModel.toggleSubscriptionPermissions()
}
binding.debugMenu.setOnClickListener {
showDebugMenuDialog(viewModel)
}
}
override fun onResume() {
... ...
package io.livekit.android.sample.dialog
import android.R
import android.app.Activity
import android.app.AlertDialog
import android.widget.ArrayAdapter
import io.livekit.android.sample.CallViewModel
fun Activity.showDebugMenuDialog(callViewModel: CallViewModel) {
val builder = with(AlertDialog.Builder(this)) {
setTitle("Debug Menu")
val arrayAdapter = ArrayAdapter<String>(this@showDebugMenuDialog, R.layout.select_dialog_item)
arrayAdapter.add("Simulate Migration")
arrayAdapter.add("Reconnect to Room")
setAdapter(arrayAdapter) { dialog, index ->
when (index) {
0 -> callViewModel.simulateMigration()
1 -> callViewModel.reconnect()
}
dialog.dismiss()
}
}
builder.show()
}
\ No newline at end of file
... ...
package io.livekit.android.sample.dialog
import android.R
import android.app.Activity
import android.app.AlertDialog
import android.widget.ArrayAdapter
import io.livekit.android.sample.CallViewModel
fun Activity.showSelectAudioDeviceDialog(callViewModel: CallViewModel) {
val builder = with(AlertDialog.Builder(this)) {
setTitle("Select Audio Device")
val audioHandler = callViewModel.audioHandler
val audioDevices = audioHandler.availableAudioDevices
val arrayAdapter = ArrayAdapter<String>(this@showSelectAudioDeviceDialog, R.layout.select_dialog_item)
arrayAdapter.addAll(audioDevices.map { it.name })
setAdapter(arrayAdapter) { dialog, index ->
audioHandler.selectDevice(audioDevices[index])
dialog.dismiss()
}
}
builder.show()
}
\ No newline at end of file
... ...
... ... @@ -70,54 +70,105 @@
android:layout_height="60dp"
android:gravity="center"
android:orientation="horizontal"
app:layout_constraintBottom_toBottomOf="parent">
app:layout_constraintBottom_toTopOf="@id/controls_box2">
<ImageView
android:id="@+id/camera"
android:layout_width="@dimen/control_size"
android:layout_height="@dimen/control_size"
android:layout_weight="1"
android:background="?android:attr/selectableItemBackground"
android:padding="@dimen/control_padding"
android:src="@drawable/outline_videocam_24" />
android:src="@drawable/outline_videocam_24"
app:tint="@android:color/white" />
<ImageView
android:id="@+id/mic"
android:layout_width="@dimen/control_size"
android:layout_height="@dimen/control_size"
android:layout_weight="1"
android:background="?android:attr/selectableItemBackground"
android:padding="@dimen/control_padding"
android:src="@drawable/outline_mic_24" />
android:src="@drawable/outline_mic_24"
app:tint="@android:color/white" />
<ImageView
android:id="@+id/flip_camera"
android:layout_width="@dimen/control_size"
android:layout_height="@dimen/control_size"
android:layout_weight="1"
android:background="?android:attr/selectableItemBackground"
android:padding="@dimen/control_padding"
android:src="@drawable/outline_flip_camera_android_24" />
android:src="@drawable/outline_flip_camera_android_24"
app:tint="@android:color/white" />
<ImageView
android:id="@+id/screen_share"
android:layout_width="@dimen/control_size"
android:layout_height="@dimen/control_size"
android:layout_weight="1"
android:background="?android:attr/selectableItemBackground"
android:padding="@dimen/control_padding"
android:src="@drawable/baseline_cast_24" />
android:src="@drawable/baseline_cast_24"
app:tint="@android:color/white" />
<ImageView
android:id="@+id/message"
android:layout_width="@dimen/control_size"
android:layout_height="@dimen/control_size"
android:layout_weight="1"
android:background="?android:attr/selectableItemBackground"
android:padding="@dimen/control_padding"
android:src="@drawable/baseline_chat_24" />
android:src="@drawable/baseline_chat_24"
app:tint="@android:color/white" />
<ImageView
android:id="@+id/exit"
android:layout_width="@dimen/control_size"
android:layout_height="@dimen/control_size"
android:layout_weight="1"
android:background="?android:attr/selectableItemBackground"
android:padding="@dimen/control_padding"
android:src="@drawable/ic_baseline_cancel_24"
app:tint="@android:color/white" />
</LinearLayout>
<LinearLayout
android:id="@+id/controls_box2"
android:layout_width="match_parent"
android:layout_height="60dp"
android:gravity="center"
android:orientation="horizontal"
app:layout_constraintBottom_toBottomOf="parent">
<ImageView
android:id="@+id/audio_select"
android:layout_width="@dimen/control_size"
android:layout_height="@dimen/control_size"
android:layout_weight="1"
android:background="?android:attr/selectableItemBackground"
android:padding="@dimen/control_padding"
android:src="@drawable/volume_up_48px"
app:tint="@android:color/white" />
<ImageView
android:id="@+id/permissions"
android:layout_width="@dimen/control_size"
android:layout_height="@dimen/control_size"
android:layout_weight="1"
android:background="?android:attr/selectableItemBackground"
android:padding="@dimen/control_padding"
android:src="@drawable/account_cancel_outline"
app:tint="@android:color/white" />
<ImageView
android:id="@+id/debug_menu"
android:layout_width="@dimen/control_size"
android:layout_height="@dimen/control_size"
android:layout_weight="1"
android:background="?android:attr/selectableItemBackground"
android:padding="@dimen/control_padding"
android:src="@drawable/ic_baseline_cancel_24" />
android:src="@drawable/dots_horizontal_circle_outline"
app:tint="@android:color/white" />
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
... ...
<?xml version="1.0" encoding="utf-8"?>
<Button xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@android:id/text1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="marquee"
android:gravity="center"
android:minHeight="?android:attr/listPreferredItemHeight"
android:textAppearance="?android:attr/textAppearanceLarge"
android:textColor="?android:attr/textColorAlertDialogListItem"
tools:text="Button" />
... ...