mirror of
https://github.com/yggdrasil-network/yggdrasil-android.git
synced 2025-04-27 13:45:09 +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"
|
||||
minSdkVersion 21
|
||||
targetSdkVersion 29
|
||||
versionCode 3
|
||||
versionCode 4
|
||||
versionName "0.1"
|
||||
|
||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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<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.setView(view)
|
||||
builder.setPositiveButton("Add") { dialog, _ ->
|
||||
|
|
|
@ -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")
|
||||
}
|
||||
}
|
|
@ -346,8 +346,7 @@
|
|||
android:paddingStart="4pt"
|
||||
android:paddingTop="6pt"
|
||||
android:paddingEnd="4pt"
|
||||
android:paddingBottom="6pt"
|
||||
android:visibility="gone">
|
||||
android:paddingBottom="6pt">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/settingsLabel"
|
||||
|
|
|
@ -1,9 +1,267 @@
|
|||
<?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:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="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