From 7ed17e75b733355063c5ed635d6a4218b94e0547 Mon Sep 17 00:00:00 2001 From: ChronosX88 Date: Sun, 3 Jan 2021 18:48:07 +0300 Subject: [PATCH] Refactor Node Info activity to RecyclerView, make visual consistency of style of Node Info activity --- .../yggdrasil/CopyLocalNodeInfoActivity.kt | 30 ++++++--- .../models/config/CopyInfoAdapter.kt | 67 ------------------- .../models/config/NodeInfoListAdapter.kt | 60 +++++++++++++++++ app/src/main/res/layout/content_main.xml | 14 ++-- app/src/main/res/layout/content_node_info.xml | 24 +++++-- .../res/layout/copy_node_info_list_item.xml | 52 -------------- app/src/main/res/layout/node_info_row.xml | 35 ++++++++++ 7 files changed, 145 insertions(+), 137 deletions(-) delete mode 100644 app/src/main/java/io/github/chronosx88/yggdrasil/models/config/CopyInfoAdapter.kt create mode 100644 app/src/main/java/io/github/chronosx88/yggdrasil/models/config/NodeInfoListAdapter.kt delete mode 100644 app/src/main/res/layout/copy_node_info_list_item.xml create mode 100644 app/src/main/res/layout/node_info_row.xml diff --git a/app/src/main/java/io/github/chronosx88/yggdrasil/CopyLocalNodeInfoActivity.kt b/app/src/main/java/io/github/chronosx88/yggdrasil/CopyLocalNodeInfoActivity.kt index 9652325..6304b25 100644 --- a/app/src/main/java/io/github/chronosx88/yggdrasil/CopyLocalNodeInfoActivity.kt +++ b/app/src/main/java/io/github/chronosx88/yggdrasil/CopyLocalNodeInfoActivity.kt @@ -1,12 +1,12 @@ package io.github.chronosx88.yggdrasil import android.os.Bundle -import android.widget.ListView +import android.view.MenuItem import androidx.appcompat.app.AppCompatActivity import androidx.preference.PreferenceManager -import io.github.chronosx88.yggdrasil.models.NodeInfo -import io.github.chronosx88.yggdrasil.models.config.CopyInfoAdapter -import io.github.chronosx88.yggdrasil.models.config.SelectDNSInfoListAdapter +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import io.github.chronosx88.yggdrasil.models.config.NodeInfoListAdapter class CopyLocalNodeInfoActivity: AppCompatActivity() { @@ -17,12 +17,24 @@ class CopyLocalNodeInfoActivity: AppCompatActivity() { val preferences = PreferenceManager.getDefaultSharedPreferences(this.baseContext) val ipv6Address = intent.extras!!.getString(MainActivity.IPv6, "") - val signingPublicKey = preferences.getString(MainActivity.signingPublicKey, "") - val encryptionPublicKey = preferences.getString(MainActivity.encryptionPublicKey, "") - var nodeInfoListView = findViewById(R.id.nodeInfoList) - val nodeInfoList = listOf(NodeInfo("IP address", ipv6Address!!), NodeInfo("Encryption Public Key", encryptionPublicKey!!), NodeInfo("Signing Public Key", signingPublicKey!!)); - var adapter = CopyInfoAdapter(this, nodeInfoList) + val signingPublicKey = preferences.getString(MainActivity.signingPublicKey, "***") + val encryptionPublicKey = preferences.getString(MainActivity.encryptionPublicKey, "***") + var nodeInfoListView = findViewById(R.id.node_info_list) + val nodeInfoList = listOf>(Pair("IP address", ipv6Address!!), Pair("Encryption Public Key", encryptionPublicKey!!), Pair("Signing Public Key", signingPublicKey!!)); + val adapter = + NodeInfoListAdapter( + this, + nodeInfoList.toTypedArray() + ) nodeInfoListView.adapter = adapter + nodeInfoListView.layoutManager = LinearLayoutManager(this) + + getSupportActionBar()?.setDisplayHomeAsUpEnabled(true); + getSupportActionBar()?.setDisplayShowHomeEnabled(true); } + override fun onSupportNavigateUp(): Boolean { + onBackPressed() + return true + } } \ No newline at end of file diff --git a/app/src/main/java/io/github/chronosx88/yggdrasil/models/config/CopyInfoAdapter.kt b/app/src/main/java/io/github/chronosx88/yggdrasil/models/config/CopyInfoAdapter.kt deleted file mode 100644 index 4cfa94e..0000000 --- a/app/src/main/java/io/github/chronosx88/yggdrasil/models/config/CopyInfoAdapter.kt +++ /dev/null @@ -1,67 +0,0 @@ -package io.github.chronosx88.yggdrasil.models.config - -import android.content.ClipData -import android.content.ClipboardManager -import android.content.Context -import android.view.Gravity -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import android.widget.* -import io.github.chronosx88.yggdrasil.R -import io.github.chronosx88.yggdrasil.models.NodeInfo - -class CopyInfoAdapter( - context: Context, - nodeInfoList: List, -) : ArrayAdapter (context, 0, nodeInfoList) { - - private val mContext: Context = context - private var nodeInfoList: MutableList = nodeInfoList as MutableList - - override fun getItem(position: Int): NodeInfo? { - return nodeInfoList[position] - } - - override fun getCount(): Int { - return nodeInfoList.size - } - - override fun getView(position: Int, convertView: View?, parent: ViewGroup): View { - var copyNodeInfoHolder = CopyInfoHolder() - var listItem: View? = convertView - if (listItem == null) { - listItem = LayoutInflater.from(mContext).inflate(R.layout.copy_node_info_list_item, parent, false) - copyNodeInfoHolder.copyButton = listItem.findViewById(R.id.nodeInfoButton) as Button - copyNodeInfoHolder.nodeInfoText = listItem.findViewById(R.id.nodeInfoText) as TextView - copyNodeInfoHolder.nodeInfoKey = listItem.findViewById(R.id.nodeInfoKey) as TextView - listItem.tag = copyNodeInfoHolder - } else { - copyNodeInfoHolder = listItem.tag as CopyInfoHolder - } - copyNodeInfoHolder.nodeInfoKey.text = nodeInfoList[position].key - copyNodeInfoHolder.nodeInfoText.text = nodeInfoList[position].value - copyNodeInfoHolder.copyButton.setOnClickListener{ _ -> - val clipboard: ClipboardManager = - context.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager - val clip = - ClipData.newPlainText(nodeInfoList[position].key, nodeInfoList[position].value) - clipboard.setPrimaryClip(clip) - showToast(nodeInfoList[position].key + " " + context.getString(R.string.node_info_copied)) - } - return listItem!! - } - - private fun showToast(text: String){ - val duration = Toast.LENGTH_SHORT - val toast = Toast.makeText(context, text, duration) - toast.setGravity(Gravity.CENTER, 0, 0) - toast.show() - } - - class CopyInfoHolder { - lateinit var nodeInfoKey: TextView - lateinit var nodeInfoText: TextView - lateinit var copyButton: Button - } -} \ No newline at end of file diff --git a/app/src/main/java/io/github/chronosx88/yggdrasil/models/config/NodeInfoListAdapter.kt b/app/src/main/java/io/github/chronosx88/yggdrasil/models/config/NodeInfoListAdapter.kt new file mode 100644 index 0000000..8c20a2d --- /dev/null +++ b/app/src/main/java/io/github/chronosx88/yggdrasil/models/config/NodeInfoListAdapter.kt @@ -0,0 +1,60 @@ +package io.github.chronosx88.yggdrasil.models.config + +import android.content.ClipData +import android.content.ClipboardManager +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import android.widget.Toast +import androidx.recyclerview.widget.RecyclerView +import io.github.chronosx88.yggdrasil.R + +class NodeInfoListAdapter(private val context: Context, private val infoSet: Array>) : + RecyclerView.Adapter() { + + class ViewHolder(private val context: Context, view: View) : RecyclerView.ViewHolder(view) { + val key: TextView + val value: TextView + + init { + key = view.findViewById(R.id.node_info_key) + value = view.findViewById(R.id.node_info_value) + + value.setOnClickListener { + val clipboard: ClipboardManager = + context.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager + val clip = + ClipData.newPlainText(key.text, value.text) + clipboard.setPrimaryClip(clip) + Toast.makeText(context, key.text.toString() + " " + context.getString(R.string.node_info_copied), Toast.LENGTH_LONG).show() + } + } + } + + // Create new views (invoked by the layout manager) + override fun onCreateViewHolder(viewGroup: ViewGroup, viewType: Int): ViewHolder { + // Create a new view, which defines the UI of the list item + val view = LayoutInflater.from(viewGroup.context) + .inflate(R.layout.node_info_row, viewGroup, false) + + return ViewHolder( + context, + view + ) + } + + // Replace the contents of a view (invoked by the layout manager) + override fun onBindViewHolder(viewHolder: ViewHolder, position: Int) { + + // Get element from your dataset at this position and replace the + // contents of the view with that element + viewHolder.key.text = infoSet[position].first + viewHolder.value.text = infoSet[position].second + } + + // Return the size of your dataset (invoked by the layout manager) + override fun getItemCount() = infoSet.size + +} diff --git a/app/src/main/res/layout/content_main.xml b/app/src/main/res/layout/content_main.xml index 020a2b9..962c8b0 100644 --- a/app/src/main/res/layout/content_main.xml +++ b/app/src/main/res/layout/content_main.xml @@ -16,7 +16,8 @@ android:orientation="vertical" app:layout_constraintTop_toTopOf="parent" android:animateLayoutChanges="true" - android:visibility="gone"> + android:visibility="gone" + android:elevation="8dp"> + android:textColor="@color/white" + android:layout_marginRight="5dp" /> + app:layout_constraintTop_toBottomOf="@id/ipLayout" + android:elevation="8dp"> + app:layout_constraintTop_toBottomOf="@id/peerLayout" + android:elevation="8dp"> - + android:layout_height="wrap_content" + android:layout_margin="20dp" + android:background="@drawable/info_panel_rounded_corner" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" + android:elevation="8dp"> + + \ No newline at end of file diff --git a/app/src/main/res/layout/copy_node_info_list_item.xml b/app/src/main/res/layout/copy_node_info_list_item.xml deleted file mode 100644 index 0d6222d..0000000 --- a/app/src/main/res/layout/copy_node_info_list_item.xml +++ /dev/null @@ -1,52 +0,0 @@ - - - - - - - - - - -