From fa9532fb978f4d3900eeecbd73903b7902c9ca1e Mon Sep 17 00:00:00 2001 From: Neil Alexander Date: Thu, 24 Jun 2021 18:12:16 +0100 Subject: [PATCH] Settings screen, display fixes --- app/build.gradle | 2 +- .../yggdrasil/ConfigurationProxy.kt | 7 + .../neilalexander/yggdrasil/PeersActivity.kt | 3 +- .../yggdrasil/SettingsActivity.kt | 60 ++++ app/src/main/res/layout/activity_main.xml | 3 +- app/src/main/res/layout/activity_settings.xml | 264 +++++++++++++++++- .../main/res/layout/dialog_resetconfig.xml | 22 ++ 7 files changed, 354 insertions(+), 7 deletions(-) create mode 100644 app/src/main/res/layout/dialog_resetconfig.xml diff --git a/app/build.gradle b/app/build.gradle index e47faa6..2529a90 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,7 +11,7 @@ android { applicationId "eu.neilalexander.yggdrasil" minSdkVersion 21 targetSdkVersion 29 - versionCode 3 + versionCode 4 versionName "0.1" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" diff --git a/app/src/main/java/eu/neilalexander/yggdrasil/ConfigurationProxy.kt b/app/src/main/java/eu/neilalexander/yggdrasil/ConfigurationProxy.kt index e0a38a9..cd7af46 100644 --- a/app/src/main/java/eu/neilalexander/yggdrasil/ConfigurationProxy.kt +++ b/app/src/main/java/eu/neilalexander/yggdrasil/ConfigurationProxy.kt @@ -1,6 +1,7 @@ package eu.neilalexander.yggdrasil import android.content.Context +import android.provider.Settings import mobile.Mobile import org.json.JSONObject import java.io.File @@ -21,6 +22,12 @@ object ConfigurationProxy { return this } + fun resetJSON() { + val conf = Mobile.generateConfigJSON() + file.writeBytes(conf) + fix() + } + fun updateJSON(fn: (JSONObject) -> Unit) { json = JSONObject(file.readText(Charsets.UTF_8)) fn(json) diff --git a/app/src/main/java/eu/neilalexander/yggdrasil/PeersActivity.kt b/app/src/main/java/eu/neilalexander/yggdrasil/PeersActivity.kt index 5cbccb1..1c0ece1 100644 --- a/app/src/main/java/eu/neilalexander/yggdrasil/PeersActivity.kt +++ b/app/src/main/java/eu/neilalexander/yggdrasil/PeersActivity.kt @@ -8,6 +8,7 @@ import android.os.Bundle import android.text.Layout import android.util.AttributeSet import android.util.Log +import android.view.ContextThemeWrapper import android.view.LayoutInflater import android.view.View import android.widget.* @@ -67,7 +68,7 @@ class PeersActivity : AppCompatActivity() { addPeerButton.setOnClickListener { var view = inflater.inflate(R.layout.dialog_addpeer, null) var input = view.findViewById(R.id.addPeerInput) - val builder: AlertDialog.Builder = AlertDialog.Builder(this) + val builder: AlertDialog.Builder = AlertDialog.Builder(ContextThemeWrapper(this, R.style.Theme_MaterialComponents_DayNight_Dialog)) builder.setTitle("Add Configured Peer") builder.setView(view) builder.setPositiveButton("Add") { dialog, _ -> diff --git a/app/src/main/java/eu/neilalexander/yggdrasil/SettingsActivity.kt b/app/src/main/java/eu/neilalexander/yggdrasil/SettingsActivity.kt index 5c3382f..9ad3e25 100644 --- a/app/src/main/java/eu/neilalexander/yggdrasil/SettingsActivity.kt +++ b/app/src/main/java/eu/neilalexander/yggdrasil/SettingsActivity.kt @@ -1,11 +1,71 @@ package eu.neilalexander.yggdrasil +import android.app.AlertDialog import androidx.appcompat.app.AppCompatActivity import android.os.Bundle +import android.view.ContextThemeWrapper +import android.view.LayoutInflater +import android.widget.* +import androidx.core.view.setPadding +import androidx.core.widget.doOnTextChanged +import org.json.JSONObject class SettingsActivity : AppCompatActivity() { + private lateinit var config: ConfigurationProxy + private lateinit var inflater: LayoutInflater + + private lateinit var deviceNameEntry: EditText + private lateinit var publicKeyLabel: TextView + private lateinit var resetConfigurationRow: TableRow + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_settings) + + config = ConfigurationProxy(applicationContext) + inflater = LayoutInflater.from(this) + + deviceNameEntry = findViewById(R.id.deviceNameEntry) + publicKeyLabel = findViewById(R.id.publicKeyLabel) + resetConfigurationRow = findViewById(R.id.resetConfigurationRow) + + deviceNameEntry.doOnTextChanged { text, _, _, _ -> + config.updateJSON { cfg -> + var nodeinfo = cfg.optJSONObject("NodeInfo") + if (nodeinfo == null) { + cfg.put("NodeInfo", JSONObject("{}")) + } + cfg.getJSONObject("NodeInfo").put("name", text) + } + } + + resetConfigurationRow.setOnClickListener { + var view = inflater.inflate(R.layout.dialog_resetconfig, null) + val builder: AlertDialog.Builder = AlertDialog.Builder(ContextThemeWrapper(this, R.style.Theme_MaterialComponents_DayNight_Dialog)) + builder.setTitle("Warning") + builder.setView(view) + builder.setPositiveButton("Reset") { dialog, _ -> + config.resetJSON() + updateView() + dialog.dismiss() + } + builder.setNegativeButton("Cancel") { dialog, _ -> + dialog.cancel() + } + builder.show() + } + + updateView() + } + + fun updateView() { + val nodeinfo = config.getJSON().optJSONObject("NodeInfo") + if (nodeinfo != null) { + deviceNameEntry.setText(nodeinfo.getString("name"), TextView.BufferType.EDITABLE) + } else { + deviceNameEntry.setText("", TextView.BufferType.EDITABLE) + } + + publicKeyLabel.text = config.getJSON().getString("PublicKey") } } \ No newline at end of file diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index bfc0ff4..c065936 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -346,8 +346,7 @@ android:paddingStart="4pt" android:paddingTop="6pt" android:paddingEnd="4pt" - android:paddingBottom="6pt" - android:visibility="gone"> + android:paddingBottom="6pt"> - + tools:context=".PeersActivity"> - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/dialog_resetconfig.xml b/app/src/main/res/layout/dialog_resetconfig.xml new file mode 100644 index 0000000..92e00b9 --- /dev/null +++ b/app/src/main/res/layout/dialog_resetconfig.xml @@ -0,0 +1,22 @@ + + + + + + + + + \ No newline at end of file