kopia lustrzana https://github.com/meshtastic/Meshtastic-Android
begin letting users edit ownername
rodzic
8a7de21814
commit
91cf6b7253
|
@ -23,11 +23,9 @@ import com.geeksville.mesh.model.UIState
|
|||
import com.geeksville.mesh.service.*
|
||||
import com.geeksville.mesh.ui.MeshApp
|
||||
import com.geeksville.mesh.ui.ScanState
|
||||
import com.geeksville.mesh.ui.getInitials
|
||||
import com.geeksville.util.exceptionReporter
|
||||
import com.google.android.gms.auth.api.signin.GoogleSignIn
|
||||
import com.google.android.gms.auth.api.signin.GoogleSignInAccount
|
||||
import com.google.android.gms.common.api.ApiException
|
||||
import com.google.android.gms.tasks.Task
|
||||
import java.nio.charset.Charset
|
||||
|
||||
|
@ -153,12 +151,6 @@ class MainActivity : AppCompatActivity(), Logging,
|
|||
}
|
||||
|
||||
|
||||
private fun setOwner() {
|
||||
// Note: we are careful to not set a new unique ID
|
||||
val name = UIState.ownerName.value
|
||||
UIState.meshService!!.setOwner(null, name, getInitials(name))
|
||||
}
|
||||
|
||||
private fun sendTestPackets() {
|
||||
exceptionReporter {
|
||||
val m = UIState.meshService!!
|
||||
|
@ -182,9 +174,8 @@ class MainActivity : AppCompatActivity(), Logging,
|
|||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
|
||||
setContent {
|
||||
MeshApp()
|
||||
}
|
||||
val prefs = getSharedPreferences("ui-prefs", Context.MODE_PRIVATE)
|
||||
UIState.ownerName = prefs.getString("owner", "Unknown Owner")!!
|
||||
|
||||
// Ensures Bluetooth is available on the device and it is enabled. If not,
|
||||
// displays a dialog requesting user permission to enable Bluetooth.
|
||||
|
@ -200,6 +191,10 @@ class MainActivity : AppCompatActivity(), Logging,
|
|||
|
||||
requestPermission()
|
||||
|
||||
setContent {
|
||||
MeshApp()
|
||||
}
|
||||
|
||||
/* not yet working
|
||||
// Configure sign-in to request the user's ID, email address, and basic
|
||||
// profile. ID and basic profile are included in DEFAULT_SIGN_IN.
|
||||
|
@ -229,7 +224,7 @@ class MainActivity : AppCompatActivity(), Logging,
|
|||
|
||||
// Result returned from launching the Intent from GoogleSignInClient.getSignInIntent(...);
|
||||
// Result returned from launching the Intent from GoogleSignInClient.getSignInIntent(...);
|
||||
if (requestCode === RC_SIGN_IN) {
|
||||
if (requestCode == RC_SIGN_IN) {
|
||||
// The Task returned from this call is always completed, no need to attach
|
||||
// a listener.
|
||||
val task: Task<GoogleSignInAccount> =
|
||||
|
@ -239,16 +234,16 @@ class MainActivity : AppCompatActivity(), Logging,
|
|||
}
|
||||
|
||||
private fun handleSignInResult(completedTask: Task<GoogleSignInAccount>) {
|
||||
/*
|
||||
try {
|
||||
val account =
|
||||
completedTask.getResult(ApiException::class.java)
|
||||
val account = completedTask.getResult(ApiException::class.java)
|
||||
// Signed in successfully, show authenticated UI.
|
||||
//updateUI(account)
|
||||
} catch (e: ApiException) { // The ApiException status code indicates the detailed failure reason.
|
||||
// Please refer to the GoogleSignInStatusCodes class reference for more information.
|
||||
warn("signInResult:failed code=" + e.statusCode)
|
||||
//updateUI(null)
|
||||
}
|
||||
} */
|
||||
}
|
||||
|
||||
private var receiverRegistered = false
|
||||
|
@ -289,7 +284,7 @@ class MainActivity : AppCompatActivity(), Logging,
|
|||
readRadioConfig()
|
||||
|
||||
// everytime the radio reconnects, we slam in our current owner data, the radio is smart enough to only broadcast if needed
|
||||
setOwner()
|
||||
UIState.setOwner(this)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,9 +1,12 @@
|
|||
package com.geeksville.mesh.model
|
||||
|
||||
import android.content.Context
|
||||
import android.util.Base64
|
||||
import androidx.compose.mutableStateOf
|
||||
import androidx.core.content.edit
|
||||
import com.geeksville.mesh.IMeshService
|
||||
import com.geeksville.mesh.MeshProtos
|
||||
import com.geeksville.mesh.ui.getInitials
|
||||
|
||||
/// FIXME - figure out how to merge this staate with the AppStatus Model
|
||||
object UIState {
|
||||
|
@ -21,7 +24,7 @@ object UIState {
|
|||
|
||||
/// our name in hte radio
|
||||
/// Note, we generate owner initials automatically for now
|
||||
val ownerName = mutableStateOf("fixme readfromprefs")
|
||||
var ownerName: String = "fixme readfromprefs"
|
||||
|
||||
/// Return an URL that represents the current channel values
|
||||
val channelUrl
|
||||
|
@ -31,4 +34,19 @@ object UIState {
|
|||
|
||||
return "https://www.meshtastic.org/c/$enc"
|
||||
}
|
||||
|
||||
// clean up all this nasty owner state management FIXME
|
||||
fun setOwner(context: Context, s: String? = null) {
|
||||
|
||||
if (s != null) {
|
||||
ownerName = s
|
||||
val prefs = context.getSharedPreferences("ui-prefs", Context.MODE_PRIVATE)
|
||||
prefs.edit(commit = true) {
|
||||
putString("owner", s)
|
||||
}
|
||||
}
|
||||
|
||||
// Note: we are careful to not set a new unique ID
|
||||
meshService!!.setOwner(null, ownerName, getInitials(ownerName))
|
||||
}
|
||||
}
|
||||
|
|
|
@ -42,6 +42,7 @@ object ScanState : Logging {
|
|||
if (callback != null) {
|
||||
debug("stopping scan")
|
||||
scanner!!.stopScan(callback)
|
||||
callback = null
|
||||
} else
|
||||
debug("not stopping bt scanner")
|
||||
}
|
||||
|
@ -59,7 +60,7 @@ fun BTScanScreen() {
|
|||
|
||||
/// Note: may be null on platforms without a bluetooth driver (ie. the emulator)
|
||||
val bluetoothAdapter =
|
||||
(context.getSystemService(Context.BLUETOOTH_SERVICE) as BluetoothManager)?.adapter
|
||||
(context.getSystemService(Context.BLUETOOTH_SERVICE) as BluetoothManager?)?.adapter
|
||||
|
||||
onActive {
|
||||
ScanUIState.selectedMacAddr = RadioInterfaceService.getBondedDeviceAddress(context)
|
||||
|
@ -67,6 +68,7 @@ fun BTScanScreen() {
|
|||
val scanCallback = object : ScanCallback() {
|
||||
override fun onScanFailed(errorCode: Int) {
|
||||
val msg = "Unexpected bluetooth scan failure: $errorCode"
|
||||
// error code2 seeems to be indicate hung bluetooth stack
|
||||
ScanUIState.errorText = msg
|
||||
ScanState.reportError(msg)
|
||||
}
|
||||
|
|
|
@ -130,9 +130,12 @@ private fun AppContent(openDrawer: () -> Unit) {
|
|||
|
||||
// VerticalScroller breaks flexible layouts - because verticalscrollers have 'infinite' height
|
||||
// VerticalScroller(modifier = LayoutFlexible(1f)) {
|
||||
//if (screen != Screen.settings)
|
||||
// ScanState.stopScan() // Nasty hack to teardown the bt scanner
|
||||
|
||||
when (screen) {
|
||||
Screen.messages -> MessagesContent()
|
||||
Screen.settings -> BTScanScreen()
|
||||
Screen.settings -> SettingsContent()
|
||||
Screen.users -> HomeContent()
|
||||
Screen.channel -> ChannelContent()
|
||||
else -> TODO()
|
||||
|
|
|
@ -0,0 +1,32 @@
|
|||
package com.geeksville.mesh.ui
|
||||
|
||||
import androidx.compose.Composable
|
||||
import androidx.ui.layout.Column
|
||||
import androidx.ui.layout.LayoutPadding
|
||||
import androidx.ui.layout.LayoutSize
|
||||
import androidx.ui.material.MaterialTheme
|
||||
import androidx.ui.tooling.preview.Preview
|
||||
import androidx.ui.unit.dp
|
||||
import com.geeksville.android.Logging
|
||||
|
||||
|
||||
object SettingsLog : Logging
|
||||
|
||||
@Composable
|
||||
fun SettingsContent() {
|
||||
val typography = MaterialTheme.typography()
|
||||
|
||||
Column(modifier = LayoutSize.Fill + LayoutPadding(16.dp)) {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Preview
|
||||
@Composable
|
||||
fun previewSettings() {
|
||||
// another bug? It seems modaldrawerlayout not yet supported in preview
|
||||
MaterialTheme(colors = palette) {
|
||||
SettingsContent()
|
||||
}
|
||||
}
|
Ładowanie…
Reference in New Issue