mirror of
https://github.com/yggdrasil-network/yggdrasil-android.git
synced 2025-04-27 21:55:08 +03:00
Settings screen, display fixes
This commit is contained in:
parent
8f3ee30e74
commit
fa9532fb97
7 changed files with 354 additions and 7 deletions
|
@ -11,7 +11,7 @@ android {
|
||||||
applicationId "eu.neilalexander.yggdrasil"
|
applicationId "eu.neilalexander.yggdrasil"
|
||||||
minSdkVersion 21
|
minSdkVersion 21
|
||||||
targetSdkVersion 29
|
targetSdkVersion 29
|
||||||
versionCode 3
|
versionCode 4
|
||||||
versionName "0.1"
|
versionName "0.1"
|
||||||
|
|
||||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
package eu.neilalexander.yggdrasil
|
package eu.neilalexander.yggdrasil
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
|
import android.provider.Settings
|
||||||
import mobile.Mobile
|
import mobile.Mobile
|
||||||
import org.json.JSONObject
|
import org.json.JSONObject
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
@ -21,6 +22,12 @@ object ConfigurationProxy {
|
||||||
return this
|
return this
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun resetJSON() {
|
||||||
|
val conf = Mobile.generateConfigJSON()
|
||||||
|
file.writeBytes(conf)
|
||||||
|
fix()
|
||||||
|
}
|
||||||
|
|
||||||
fun updateJSON(fn: (JSONObject) -> Unit) {
|
fun updateJSON(fn: (JSONObject) -> Unit) {
|
||||||
json = JSONObject(file.readText(Charsets.UTF_8))
|
json = JSONObject(file.readText(Charsets.UTF_8))
|
||||||
fn(json)
|
fn(json)
|
||||||
|
|
|
@ -8,6 +8,7 @@ import android.os.Bundle
|
||||||
import android.text.Layout
|
import android.text.Layout
|
||||||
import android.util.AttributeSet
|
import android.util.AttributeSet
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
|
import android.view.ContextThemeWrapper
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.widget.*
|
import android.widget.*
|
||||||
|
@ -67,7 +68,7 @@ class PeersActivity : AppCompatActivity() {
|
||||||
addPeerButton.setOnClickListener {
|
addPeerButton.setOnClickListener {
|
||||||
var view = inflater.inflate(R.layout.dialog_addpeer, null)
|
var view = inflater.inflate(R.layout.dialog_addpeer, null)
|
||||||
var input = view.findViewById<TextInputEditText>(R.id.addPeerInput)
|
var input = view.findViewById<TextInputEditText>(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.setTitle("Add Configured Peer")
|
||||||
builder.setView(view)
|
builder.setView(view)
|
||||||
builder.setPositiveButton("Add") { dialog, _ ->
|
builder.setPositiveButton("Add") { dialog, _ ->
|
||||||
|
|
|
@ -1,11 +1,71 @@
|
||||||
package eu.neilalexander.yggdrasil
|
package eu.neilalexander.yggdrasil
|
||||||
|
|
||||||
|
import android.app.AlertDialog
|
||||||
import androidx.appcompat.app.AppCompatActivity
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
import android.os.Bundle
|
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() {
|
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?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
setContentView(R.layout.activity_settings)
|
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")
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -346,8 +346,7 @@
|
||||||
android:paddingStart="4pt"
|
android:paddingStart="4pt"
|
||||||
android:paddingTop="6pt"
|
android:paddingTop="6pt"
|
||||||
android:paddingEnd="4pt"
|
android:paddingEnd="4pt"
|
||||||
android:paddingBottom="6pt"
|
android:paddingBottom="6pt">
|
||||||
android:visibility="gone">
|
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/settingsLabel"
|
android:id="@+id/settingsLabel"
|
||||||
|
|
|
@ -1,9 +1,267 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
xmlns:tools="http://schemas.android.com/tools"
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
tools:context=".SettingsActivity">
|
tools:context=".PeersActivity">
|
||||||
|
|
||||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
<FrameLayout
|
||||||
|
android:id="@+id/settings"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent">
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:dividerPadding="4pt"
|
||||||
|
android:orientation="vertical">
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="horizontal">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_margin="8pt"
|
||||||
|
android:text="Settings"
|
||||||
|
android:textColor="?attr/textDefault"
|
||||||
|
android:textSize="24sp"
|
||||||
|
android:textStyle="bold" />
|
||||||
|
|
||||||
|
<Space
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_weight="1" />
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="16pt"
|
||||||
|
android:layout_marginLeft="16pt"
|
||||||
|
android:layout_marginTop="8pt"
|
||||||
|
android:layout_marginEnd="8pt"
|
||||||
|
android:layout_marginRight="8pt"
|
||||||
|
android:layout_marginBottom="2pt"
|
||||||
|
android:alpha="0.7"
|
||||||
|
android:text="Node Info"
|
||||||
|
android:textAllCaps="true"
|
||||||
|
android:textAppearance="@style/TextAppearance.AppCompat.Small"
|
||||||
|
android:textSize="12sp" />
|
||||||
|
|
||||||
|
<TableLayout
|
||||||
|
android:id="@+id/nodeInfoTableLayout"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="8pt"
|
||||||
|
android:layout_marginLeft="8pt"
|
||||||
|
android:layout_marginEnd="8pt"
|
||||||
|
android:layout_marginRight="8pt"
|
||||||
|
android:background="@drawable/rounded"
|
||||||
|
android:divider="#46878787"
|
||||||
|
android:dividerPadding="4pt"
|
||||||
|
android:paddingLeft="4pt"
|
||||||
|
android:paddingTop="2pt"
|
||||||
|
android:paddingRight="4pt"
|
||||||
|
android:paddingBottom="2pt"
|
||||||
|
android:showDividers="middle" >
|
||||||
|
|
||||||
|
<TableRow
|
||||||
|
android:id="@+id/deviceNameTableRow"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:clickable="true"
|
||||||
|
android:paddingStart="4pt"
|
||||||
|
android:paddingTop="4pt"
|
||||||
|
android:paddingEnd="4pt"
|
||||||
|
android:paddingBottom="4pt">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:gravity="center"
|
||||||
|
android:text="Device Name"
|
||||||
|
android:textColor="?attr/textDefault" />
|
||||||
|
|
||||||
|
<EditText
|
||||||
|
android:id="@+id/deviceNameEntry"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:background="@null"
|
||||||
|
android:ems="10"
|
||||||
|
android:hint="Tap to edit"
|
||||||
|
android:inputType="textPersonName"
|
||||||
|
android:padding="0pt"
|
||||||
|
android:textAlignment="textEnd"
|
||||||
|
android:textSize="14sp" />
|
||||||
|
|
||||||
|
</TableRow>
|
||||||
|
</TableLayout>
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/textView6"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="16pt"
|
||||||
|
android:layout_marginLeft="16pt"
|
||||||
|
android:layout_marginTop="2pt"
|
||||||
|
android:layout_marginEnd="8pt"
|
||||||
|
android:layout_marginRight="8pt"
|
||||||
|
android:layout_marginBottom="4pt"
|
||||||
|
android:alpha="0.7"
|
||||||
|
android:paddingRight="8pt"
|
||||||
|
android:text="Information entered here is public and may be shown on network maps."
|
||||||
|
android:textAllCaps="false"
|
||||||
|
android:textAppearance="@style/TextAppearance.AppCompat.Small"
|
||||||
|
android:textSize="12sp" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="16pt"
|
||||||
|
android:layout_marginLeft="16pt"
|
||||||
|
android:layout_marginTop="8pt"
|
||||||
|
android:layout_marginEnd="8pt"
|
||||||
|
android:layout_marginRight="8pt"
|
||||||
|
android:layout_marginBottom="2pt"
|
||||||
|
android:alpha="0.7"
|
||||||
|
android:paddingRight="8pt"
|
||||||
|
android:text="Public Key"
|
||||||
|
android:textAllCaps="true"
|
||||||
|
android:textAppearance="@style/TextAppearance.AppCompat.Small"
|
||||||
|
android:textSize="12sp" />
|
||||||
|
|
||||||
|
<TableLayout
|
||||||
|
android:id="@+id/publicKeyTableLayout"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="8pt"
|
||||||
|
android:layout_marginLeft="8pt"
|
||||||
|
android:layout_marginEnd="8pt"
|
||||||
|
android:layout_marginRight="8pt"
|
||||||
|
android:background="@drawable/rounded"
|
||||||
|
android:divider="#46878787"
|
||||||
|
android:dividerPadding="4pt"
|
||||||
|
android:paddingLeft="4pt"
|
||||||
|
android:paddingTop="2pt"
|
||||||
|
android:paddingRight="4pt"
|
||||||
|
android:paddingBottom="2pt"
|
||||||
|
android:showDividers="middle" >
|
||||||
|
|
||||||
|
<TableRow
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:layout_marginLeft="4pt"
|
||||||
|
android:layout_marginTop="4pt"
|
||||||
|
android:layout_marginRight="4pt"
|
||||||
|
android:layout_marginBottom="4pt">
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:orientation="horizontal">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/publicKeyLabel"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:fontFamily="monospace"
|
||||||
|
android:text="Public Key"
|
||||||
|
android:textSize="14sp" />
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
</TableRow>
|
||||||
|
</TableLayout>
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="16pt"
|
||||||
|
android:layout_marginLeft="16pt"
|
||||||
|
android:layout_marginTop="2pt"
|
||||||
|
android:layout_marginEnd="8pt"
|
||||||
|
android:layout_marginRight="8pt"
|
||||||
|
android:layout_marginBottom="4pt"
|
||||||
|
android:alpha="0.7"
|
||||||
|
android:paddingRight="8pt"
|
||||||
|
android:text="Your public key forms your identity on the network. It is safe to be shared."
|
||||||
|
android:textAllCaps="false"
|
||||||
|
android:textAppearance="@style/TextAppearance.AppCompat.Small"
|
||||||
|
android:textSize="12sp" />
|
||||||
|
|
||||||
|
<Space
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="32px" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="16pt"
|
||||||
|
android:layout_marginLeft="16pt"
|
||||||
|
android:layout_marginEnd="8pt"
|
||||||
|
android:layout_marginRight="8pt"
|
||||||
|
android:layout_marginBottom="2pt"
|
||||||
|
android:alpha="0.7"
|
||||||
|
android:paddingRight="8pt"
|
||||||
|
android:text="Reset"
|
||||||
|
android:textAllCaps="true"
|
||||||
|
android:textAppearance="@style/TextAppearance.AppCompat.Small"
|
||||||
|
android:textSize="12sp" />
|
||||||
|
|
||||||
|
<TableLayout
|
||||||
|
android:id="@+id/backupTableLayout"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="8pt"
|
||||||
|
android:layout_marginLeft="8pt"
|
||||||
|
android:layout_marginEnd="8pt"
|
||||||
|
android:layout_marginRight="8pt"
|
||||||
|
android:background="@drawable/rounded"
|
||||||
|
android:clickable="true"
|
||||||
|
android:divider="#46878787"
|
||||||
|
android:dividerPadding="4pt"
|
||||||
|
android:paddingLeft="4pt"
|
||||||
|
android:paddingTop="2pt"
|
||||||
|
android:paddingRight="4pt"
|
||||||
|
android:paddingBottom="2pt"
|
||||||
|
android:showDividers="middle">
|
||||||
|
|
||||||
|
<TableRow
|
||||||
|
android:id="@+id/resetConfigurationRow"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:background="?android:attr/selectableItemBackground"
|
||||||
|
android:clickable="true"
|
||||||
|
android:padding="4pt">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="Reset configuration"
|
||||||
|
android:textColor="@android:color/holo_red_dark" />
|
||||||
|
</TableRow>
|
||||||
|
</TableLayout>
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="16pt"
|
||||||
|
android:layout_marginLeft="16pt"
|
||||||
|
android:layout_marginTop="2pt"
|
||||||
|
android:layout_marginEnd="8pt"
|
||||||
|
android:layout_marginRight="8pt"
|
||||||
|
android:alpha="0.7"
|
||||||
|
android:paddingRight="8pt"
|
||||||
|
android:text="Resetting will overwrite with newly generated configuration. Your public keys and IP address on the network will change."
|
||||||
|
android:textAllCaps="false"
|
||||||
|
android:textAppearance="@style/TextAppearance.AppCompat.Small"
|
||||||
|
android:textSize="12sp" />
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
</FrameLayout>
|
||||||
|
</LinearLayout>
|
||||||
|
|
22
app/src/main/res/layout/dialog_resetconfig.xml
Normal file
22
app/src/main/res/layout/dialog_resetconfig.xml
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent">
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="vertical"
|
||||||
|
android:paddingLeft="10pt"
|
||||||
|
android:paddingTop="4pt"
|
||||||
|
android:paddingRight="10pt"
|
||||||
|
android:paddingBottom="4pt">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/textView2"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="This operation will reset your configuration and generate new keys. This is not reversible. Changes will not take effect until the next time Yggdrasil is started." />
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
</FrameLayout>
|
Loading…
Add table
Add a link
Reference in a new issue