mirror of
				https://github.com/yggdrasil-network/yggdrasil-android.git
				synced 2025-10-31 09:15:07 +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
	
	 Neil Alexander
						Neil Alexander