davidliu
Committed by GitHub

Add e2ee options to compose example (#263)

... ... @@ -44,7 +44,7 @@ class CallViewModel(
private fun getE2EEOptions(): E2EEOptions? {
var e2eeOptions: E2EEOptions? = null
if(e2ee && e2eeKey != null) {
if (e2ee && e2eeKey != null) {
e2eeOptions = E2EEOptions()
}
e2eeOptions?.keyProvider?.setKey(e2eeKey!!, null, 0)
... ...
... ... @@ -13,7 +13,7 @@ class MainViewModel(application: Application) : AndroidViewModel(application) {
fun getSavedUrl() = preferences.getString(PREFERENCES_KEY_URL, URL) as String
fun getSavedToken() = preferences.getString(PREFERENCES_KEY_TOKEN, TOKEN) as String
fun getE2EEOptionsOn() = preferences.getBoolean(PREFERENCES_KEY_E2EE_ON, false)
fun getSavedE2EEKey() = preferences.getString(PREFERENCES_KEY_E2EE_KEY, "12345678") as String
fun getSavedE2EEKey() = preferences.getString(PREFERENCES_KEY_E2EE_KEY, E2EE_KEY) as String
fun setSavedUrl(url: String) {
preferences.edit {
... ... @@ -51,5 +51,6 @@ class MainViewModel(application: Application) : AndroidViewModel(application) {
const val URL = BuildConfig.DEFAULT_URL
const val TOKEN = BuildConfig.DEFAULT_TOKEN
const val E2EE_KEY = "12345678"
}
}
\ No newline at end of file
... ...
... ... @@ -40,7 +40,13 @@ class CallActivity : AppCompatActivity() {
private val viewModel: CallViewModel by viewModelByFactory {
val args = intent.getParcelableExtra<BundleArgs>(KEY_ARGS)
?: throw NullPointerException("args is null!")
CallViewModel(args.url, args.token, application)
CallViewModel(
url = args.url,
token = args.token,
e2ee = args.e2eeOn,
e2eeKey = args.e2eeKey,
application = application
)
}
private val screenCaptureIntentLauncher =
... ... @@ -446,5 +452,10 @@ class CallActivity : AppCompatActivity() {
}
@Parcelize
data class BundleArgs(val url: String, val token: String) : Parcelable
data class BundleArgs(
val url: String,
val token: String,
val e2eeKey: String,
val e2eeOn: Boolean
) : Parcelable
}
\ No newline at end of file
... ...
... ... @@ -7,11 +7,29 @@ import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.activity.viewModels
import androidx.compose.foundation.Image
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.defaultMinSize
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.verticalScroll
import androidx.compose.material.*
import androidx.compose.runtime.*
import androidx.compose.material.Button
import androidx.compose.material.MaterialTheme
import androidx.compose.material.OutlinedTextField
import androidx.compose.material.Surface
import androidx.compose.material.Switch
import androidx.compose.material.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.painterResource
... ... @@ -34,21 +52,27 @@ class MainActivity : ComponentActivity() {
MainContent(
defaultUrl = viewModel.getSavedUrl(),
defaultToken = viewModel.getSavedToken(),
onConnect = { url, token ->
defaultE2eeKey = viewModel.getSavedE2EEKey(),
defaultE2eeOn = viewModel.getE2EEOptionsOn(),
onConnect = { url, token, e2eeKey, e2eeOn ->
val intent = Intent(this@MainActivity, CallActivity::class.java).apply {
putExtra(
CallActivity.KEY_ARGS,
CallActivity.BundleArgs(
url,
token
token,
e2eeKey,
e2eeOn,
)
)
}
startActivity(intent)
},
onSave = { url, token ->
onSave = { url, token, e2eeKey, e2eeOn ->
viewModel.setSavedUrl(url)
viewModel.setSavedToken(token)
viewModel.setSavedE2EEKey(e2eeKey)
viewModel.setSavedE2EEOn(e2eeOn)
Toast.makeText(
this@MainActivity,
... ... @@ -76,13 +100,17 @@ class MainActivity : ComponentActivity() {
fun MainContent(
defaultUrl: String = MainViewModel.URL,
defaultToken: String = MainViewModel.TOKEN,
onConnect: (url: String, token: String) -> Unit = { _, _ -> },
onSave: (url: String, token: String) -> Unit = { _, _ -> },
defaultE2eeKey: String = MainViewModel.E2EE_KEY,
defaultE2eeOn: Boolean = false,
onConnect: (url: String, token: String, e2eeKey: String, e2eeOn: Boolean) -> Unit = { _, _, _, _ -> },
onSave: (url: String, token: String, e2eeKey: String, e2eeOn: Boolean) -> Unit = { _, _, _, _ -> },
onReset: () -> Unit = {},
) {
AppTheme {
var url by remember { mutableStateOf(defaultUrl) }
var token by remember { mutableStateOf(defaultToken) }
var e2eeKey by remember { mutableStateOf(defaultE2eeKey) }
var e2eeOn by remember { mutableStateOf(defaultE2eeOn) }
val scrollState = rememberScrollState()
// A surface container using the 'background' color from the theme
Surface(
... ... @@ -119,13 +147,38 @@ class MainActivity : ComponentActivity() {
modifier = Modifier.fillMaxWidth(),
)
if (e2eeOn) {
Spacer(modifier = Modifier.height(20.dp))
Button(onClick = { onConnect(url, token) }) {
OutlinedTextField(
value = e2eeKey,
onValueChange = { e2eeKey = it },
label = { Text("E2EE Key") },
modifier = Modifier.fillMaxWidth(),
enabled = e2eeOn
)
}
Spacer(modifier = Modifier.height(20.dp))
Row(
horizontalArrangement = Arrangement.SpaceBetween,
verticalAlignment = Alignment.CenterVertically,
modifier = Modifier.fillMaxWidth()
) {
Text("Enable E2EE")
Switch(
checked = e2eeOn,
onCheckedChange = { e2eeOn = it },
modifier = Modifier.defaultMinSize(minHeight = 100.dp)
)
}
Spacer(modifier = Modifier.height(20.dp))
Button(onClick = { onConnect(url, token, e2eeKey, e2eeOn) }) {
Text("Connect")
}
Spacer(modifier = Modifier.height(20.dp))
Button(onClick = { onSave(url, token) }) {
Button(onClick = { onSave(url, token, e2eeKey, e2eeOn) }) {
Text("Save Values")
}
... ...