From 7a61b871a9ceb0a339722a08ce0722046ae2279a Mon Sep 17 00:00:00 2001 From: Azalea Gui Date: Mon, 23 Jan 2023 20:39:13 -0500 Subject: [PATCH] [O] Preference by delegate --- app/build.gradle | 5 ++- .../java/org/hydev/wearsync/ActivityScan.kt | 4 +- .../java/org/hydev/wearsync/Extensions.kt | 40 +++++++++++++++++-- .../java/org/hydev/wearsync/MainActivity.kt | 19 +++++---- 4 files changed, 51 insertions(+), 17 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index c8e6bb9..f9d3537 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -42,6 +42,10 @@ dependencies { implementation 'androidx.constraintlayout:constraintlayout:2.1.4' implementation 'androidx.navigation:navigation-fragment-ktx:2.5.3' implementation 'androidx.navigation:navigation-ui-ktx:2.5.3' + implementation 'androidx.preference:preference:1.2.0' + + // https://mvnrepository.com/artifact/org.jetbrains.kotlin/kotlin-reflect + implementation "org.jetbrains.kotlin:kotlin-reflect:1.8.0" // Logger implementation 'com.jakewharton.timber:timber:5.0.1' @@ -51,7 +55,6 @@ dependencies { // Database library implementation "com.influxdb:influxdb-client-kotlin:6.3.0" - implementation 'androidx.preference:preference:1.2.0' testImplementation 'junit:junit:4.13.2' androidTestImplementation 'androidx.test.ext:junit:1.1.5' diff --git a/app/src/main/java/org/hydev/wearsync/ActivityScan.kt b/app/src/main/java/org/hydev/wearsync/ActivityScan.kt index c76f7dc..05c4435 100644 --- a/app/src/main/java/org/hydev/wearsync/ActivityScan.kt +++ b/app/src/main/java/org/hydev/wearsync/ActivityScan.kt @@ -31,7 +31,7 @@ class ActivityScan : AppCompatActivity() { println("OnCreate called, Initializing...") // Device exists - chosenDevice?.let { addr -> + prefs.chosenDevice?.let { addr -> ble.connectAddress(addr) { connected(addr) } return } @@ -86,7 +86,7 @@ class ActivityScan : AppCompatActivity() { fun connected(address: String) { view.snack("✅ Connected.") - chosenDevice = address + prefs.chosenDevice = address finish() } } \ No newline at end of file diff --git a/app/src/main/java/org/hydev/wearsync/Extensions.kt b/app/src/main/java/org/hydev/wearsync/Extensions.kt index a8c856e..1f49c89 100644 --- a/app/src/main/java/org/hydev/wearsync/Extensions.kt +++ b/app/src/main/java/org/hydev/wearsync/Extensions.kt @@ -6,7 +6,12 @@ import android.content.Context import android.content.Intent import android.view.View import androidx.core.content.edit +import androidx.preference.PreferenceManager import com.google.android.material.snackbar.Snackbar +import com.influxdb.client.kotlin.InfluxDBClientKotlin +import com.influxdb.client.kotlin.InfluxDBClientKotlinFactory +import kotlin.reflect.KProperty + fun View.snack(msg: String) = Snackbar.make(this, msg, Snackbar.LENGTH_LONG) .setAction("Action", null).show() @@ -14,9 +19,36 @@ fun View.snack(msg: String) = Snackbar.make(this, msg, Snackbar.LENGTH_LONG) inline fun Context.getSysServ() = getSystemService(T::class.java) as T fun Context.blueMan() = getSysServ() -val Context.pref get() = getSharedPreferences("settings", Context.MODE_PRIVATE) -var Context.chosenDevice: String? - get() = pref.getString("mac", null) - set(value) = pref.edit { putString("mac", value) } + + +interface Prefs { + var chosenDevice: String? + + var infUrl: String? + var infOrg: String? + var infBucket: String? + var infToken: String? + + fun createInflux(): InfluxDBClientKotlin +} + +val Context.pref get() = PreferenceManager.getDefaultSharedPreferences(this) +val Context.prefs get() = object : Prefs { + inner class PrefDelegate { + operator fun getValue(thisRef: Any?, property: KProperty<*>) = pref.getString(property.name, null) + operator fun setValue(thisRef: Any?, property: KProperty<*>, value: String?) { + pref.edit { putString(property.name, value) } + } + } + + override var chosenDevice by PrefDelegate() + override var infUrl by PrefDelegate() + override var infOrg by PrefDelegate() + override var infBucket by PrefDelegate() + override var infToken by PrefDelegate() + + override fun createInflux() = InfluxDBClientKotlinFactory + .create(infUrl ?: "", (infToken ?: "").toCharArray(), infOrg ?: "", infBucket ?: "") +} inline fun Context.act() = startActivity(Intent(this, T::class.java)) diff --git a/app/src/main/java/org/hydev/wearsync/MainActivity.kt b/app/src/main/java/org/hydev/wearsync/MainActivity.kt index 2a32dad..92d9308 100644 --- a/app/src/main/java/org/hydev/wearsync/MainActivity.kt +++ b/app/src/main/java/org/hydev/wearsync/MainActivity.kt @@ -8,6 +8,8 @@ import android.view.Menu import android.view.MenuItem import androidx.activity.result.contract.ActivityResultContracts import androidx.appcompat.app.AppCompatActivity +import com.influxdb.client.domain.WritePrecision +import com.influxdb.client.kotlin.InfluxDBClientKotlinFactory import kotlinx.coroutines.* import kotlinx.coroutines.flow.consumeAsFlow import org.hydev.wearsync.ActivityPermissions.Companion.hasPermissions @@ -23,15 +25,9 @@ class MainActivity : AppCompatActivity() { lateinit var binding: ActivityMainBinding - val enableBluetoothRequest = - registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { - if (it.resultCode == RESULT_OK) { - // Bluetooth has been enabled - } else { - // Bluetooth has not been enabled, try again - ensureBluetooth() - } - } + val enableBluetoothRequest = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { + if (it.resultCode != RESULT_OK) ensureBluetooth() + } fun ensureBluetooth() { if (blueMan().adapter?.isEnabled == false) @@ -73,7 +69,10 @@ class MainActivity : AppCompatActivity() { return when (item.itemId) { - R.id.action_settings -> true + R.id.action_settings -> { + act() + true + } R.id.action_scan -> { act() true