mirror of
https://github.com/yggdrasil-network/crispa-android.git
synced 2024-11-09 12:01:01 +00:00
2. completed schema dropdown
This commit is contained in:
parent
f00d8b8af9
commit
aa00e9aeb4
@ -1,15 +1,15 @@
|
||||
package io.github.chronosx88.yggdrasil
|
||||
|
||||
import android.app.Activity
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.os.Build
|
||||
import android.os.Bundle
|
||||
import android.view.LayoutInflater
|
||||
import android.view.Menu
|
||||
import android.view.MenuItem
|
||||
import android.view.View
|
||||
import android.view.*
|
||||
import android.widget.Button
|
||||
import android.widget.ListView
|
||||
import android.widget.PopupWindow
|
||||
import android.widget.TextView
|
||||
import androidx.appcompat.app.AlertDialog
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import com.google.android.material.floatingactionbutton.FloatingActionButton
|
||||
@ -18,6 +18,7 @@ import com.google.gson.reflect.TypeToken
|
||||
import com.hbb20.CCPCountry
|
||||
import io.github.chronosx88.yggdrasil.models.PeerInfo
|
||||
import io.github.chronosx88.yggdrasil.models.Status
|
||||
import io.github.chronosx88.yggdrasil.models.config.DropDownAdapter
|
||||
import io.github.chronosx88.yggdrasil.models.config.SelectPeerInfoListAdapter
|
||||
import io.github.chronosx88.yggdrasil.models.config.Utils.Companion.deserializeStringList2PeerInfoSet
|
||||
import io.github.chronosx88.yggdrasil.models.config.Utils.Companion.ping
|
||||
@ -52,6 +53,9 @@ class PeerListActivity : AppCompatActivity() {
|
||||
|
||||
var isLoading = true;
|
||||
|
||||
var popupAddress: PopupWindow? = null
|
||||
var adapter: DropDownAdapter? = null
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
setContentView(R.layout.activity_peer_list)
|
||||
@ -128,12 +132,58 @@ class PeerListActivity : AppCompatActivity() {
|
||||
} else {
|
||||
this.resources.configuration.locale.country
|
||||
}
|
||||
var schemaInput = view.findViewById<TextView>(R.id.schemaInput)
|
||||
schemaInput.setOnFocusChangeListener { v, b ->
|
||||
if(schemaInput.isFocused) {
|
||||
val height = -1 * v.height +30
|
||||
getAddressListPopup()?.showAsDropDown(v, -10, height)
|
||||
}
|
||||
}
|
||||
getPopupWindow(R.layout.spinner_item, resources.getStringArray(R.array.schemas), schemaInput, getString(R.string.schema));
|
||||
view.findViewById<com.hbb20.CountryCodePicker>(R.id.ccp).setCountryForNameCode(countryCode)
|
||||
val ab: AlertDialog.Builder = AlertDialog.Builder(this)
|
||||
ab.setCancelable(true).setView(view)
|
||||
ab.show()
|
||||
}
|
||||
|
||||
fun onClickSchemaList(v: View) {
|
||||
val height = -1 * v.height +30
|
||||
getAddressListPopup()?.showAsDropDown(v, -10, height)
|
||||
}
|
||||
|
||||
private fun getAddressListPopup(): PopupWindow? {
|
||||
return popupAddress
|
||||
}
|
||||
|
||||
private fun getPopupWindow(
|
||||
textViewResourceId: Int,
|
||||
objects: Array<String>,
|
||||
editText: TextView,
|
||||
hint: String?
|
||||
): PopupWindow? {
|
||||
// initialize a pop up window type
|
||||
val popupWindow = PopupWindow(this)
|
||||
// the drop down list is a list view
|
||||
val listView = ListView(this)
|
||||
listView.dividerHeight = 0
|
||||
// set our adapter and pass our pop up window contents
|
||||
adapter = DropDownAdapter(this, textViewResourceId, objects, popupWindow, editText)
|
||||
listView.adapter = adapter
|
||||
// set the item click listener
|
||||
listView.onItemClickListener = adapter
|
||||
// some other visual settings
|
||||
popupWindow.isFocusable = true
|
||||
//popupWindow.setWidth(400);
|
||||
val display: Display =
|
||||
(this.getSystemService(Context.WINDOW_SERVICE) as WindowManager).getDefaultDisplay()
|
||||
popupWindow.width = display.getWidth() - 230
|
||||
popupWindow.height = WindowManager.LayoutParams.WRAP_CONTENT
|
||||
// set the list view as pop up window content
|
||||
popupWindow.contentView = listView
|
||||
popupAddress = popupWindow
|
||||
return popupWindow
|
||||
}
|
||||
|
||||
override fun onCreateOptionsMenu(menu: Menu): Boolean {
|
||||
// Inflate the menu; this adds items to the action bar if it is present.
|
||||
menuInflater.inflate(R.menu.save, menu)
|
||||
|
@ -0,0 +1,69 @@
|
||||
package io.github.chronosx88.yggdrasil.models.config
|
||||
|
||||
import android.content.Context
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.view.animation.Animation
|
||||
import android.view.animation.AnimationUtils
|
||||
import android.widget.AdapterView
|
||||
import android.widget.AdapterView.OnItemClickListener
|
||||
import android.widget.ArrayAdapter
|
||||
import android.widget.PopupWindow
|
||||
import android.widget.TextView
|
||||
import io.github.chronosx88.yggdrasil.R
|
||||
|
||||
|
||||
class DropDownAdapter(
|
||||
context: Context,
|
||||
textViewResourceId: Int,
|
||||
objects: Array<String>,
|
||||
popup: PopupWindow,
|
||||
editText: TextView
|
||||
) :
|
||||
ArrayAdapter<String?>(context, textViewResourceId, objects), OnItemClickListener {
|
||||
|
||||
private val objects: Array<String>
|
||||
private val popup: PopupWindow
|
||||
private val editText: TextView
|
||||
override fun getDropDownView(position: Int, convertView: View?, parent: ViewGroup?): View? {
|
||||
return getCustomView(position, convertView, parent)
|
||||
}
|
||||
|
||||
override fun getView(position: Int, convertView: View?, parent: ViewGroup): View {
|
||||
return getCustomView(position, convertView, parent)
|
||||
}
|
||||
|
||||
fun getCustomView(position: Int, convertView: View?, parent: ViewGroup?): View {
|
||||
var convertView: View? = convertView
|
||||
if (convertView == null) {
|
||||
convertView =
|
||||
LayoutInflater.from(context).inflate(R.layout.dropdown_item, parent, false)
|
||||
}
|
||||
val sub = convertView?.findViewById(R.id.sub) as TextView
|
||||
val address = objects[position]
|
||||
sub.text = address
|
||||
return convertView!!
|
||||
}
|
||||
|
||||
override fun onItemClick(arg0: AdapterView<*>?, v: View, arg2: Int, arg3: Long) {
|
||||
|
||||
// get the context and main activity to access variables
|
||||
// add some animation when a list item was clicked
|
||||
val fadeInAnimation: Animation =
|
||||
AnimationUtils.loadAnimation(context, android.R.anim.fade_in)
|
||||
fadeInAnimation.duration = 10
|
||||
v.startAnimation(fadeInAnimation)
|
||||
val text: View = v.findViewById(R.id.sub) ?: return
|
||||
val address = (text as TextView).text.toString()
|
||||
// dismiss the pop up
|
||||
popup.dismiss()
|
||||
editText.text = address
|
||||
}
|
||||
|
||||
init {
|
||||
this.objects = objects
|
||||
this.popup = popup
|
||||
this.editText = editText
|
||||
}
|
||||
}
|
29
app/src/main/res/layout/dropdown_item.xml
Normal file
29
app/src/main/res/layout/dropdown_item.xml
Normal file
@ -0,0 +1,29 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingLeft="15dp"
|
||||
android:paddingRight="15dp"
|
||||
android:paddingTop="12dp"
|
||||
android:paddingBottom="12dp"
|
||||
android:background="@drawable/info_panel_rounded_corner">
|
||||
<LinearLayout
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center_vertical">
|
||||
<ImageView
|
||||
android:id="@+id/icon"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content" />
|
||||
<TextView
|
||||
android:id="@+id/sub"
|
||||
android:padding="10dp"
|
||||
android:textColor="@color/white"
|
||||
android:textSize="14dp"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:hint="Schema"
|
||||
android:ellipsize="middle"
|
||||
android:singleLine="true"/>
|
||||
</LinearLayout>
|
||||
</RelativeLayout>
|
@ -2,7 +2,6 @@
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_width="match_parent"
|
||||
xmlns:mask="http://schemas.android.com/tools"
|
||||
android:padding="10dp"
|
||||
android:background="@color/grey">
|
||||
|
||||
@ -18,12 +17,14 @@
|
||||
android:textColorHint="@color/white"
|
||||
style="@style/EditText.OutlinedBox">
|
||||
<com.google.android.material.textfield.TextInputEditText
|
||||
android:id="@+id/schemaInput"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:hint="Schema"
|
||||
android:textColor="@color/white"
|
||||
android:inputType="text"
|
||||
android:textCursorDrawable="@null"/>
|
||||
android:textCursorDrawable="@null"
|
||||
android:onClick="onClickSchemaList"/>
|
||||
</com.google.android.material.textfield.TextInputLayout>
|
||||
|
||||
<com.google.android.material.textfield.TextInputLayout
|
||||
@ -39,6 +40,7 @@
|
||||
style="@style/EditText.OutlinedBox">
|
||||
|
||||
<com.google.android.material.textfield.TextInputEditText
|
||||
android:id="@+id/ipInput"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:digits="0123456789."
|
||||
@ -61,6 +63,7 @@
|
||||
style="@style/EditText.OutlinedBox">
|
||||
|
||||
<com.google.android.material.textfield.TextInputEditText
|
||||
android:id="@+id/portInput"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:digits="0123456789"
|
||||
|
14
app/src/main/res/layout/spinner_item.xml
Normal file
14
app/src/main/res/layout/spinner_item.xml
Normal file
@ -0,0 +1,14 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<TextView
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingLeft="20dp"
|
||||
android:paddingRight="20dp"
|
||||
android:paddingTop="15dp"
|
||||
android:paddingBottom="15dp"
|
||||
android:textSize="20dp"
|
||||
android:gravity="left"
|
||||
android:textColor="@color/white"
|
||||
/>
|
7
app/src/main/res/values/arrays.xml
Normal file
7
app/src/main/res/values/arrays.xml
Normal file
@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string-array name="schemas">
|
||||
<item>TCP</item>
|
||||
<item>TLS</item>
|
||||
</string-array>
|
||||
</resources>
|
@ -6,4 +6,5 @@
|
||||
<string name="title_activity_peer_list">Edit peers</string>
|
||||
<string name="title_activity_dns_list">Edit DNS</string>
|
||||
<string name="address_copied">Address copied</string>
|
||||
<string name="schema">Schema</string>
|
||||
</resources>
|
||||
|
Loading…
Reference in New Issue
Block a user