mirror of
https://github.com/yggdrasil-network/crispa-android.git
synced 2024-11-09 12:01:01 +00:00
2. added new DNS functionality
This commit is contained in:
parent
f8875455be
commit
21c70cb0f7
@ -1,15 +1,11 @@
|
||||
package io.github.chronosx88.yggdrasil
|
||||
|
||||
import android.app.Activity
|
||||
import android.content.DialogInterface
|
||||
import android.content.Intent
|
||||
import android.os.Build
|
||||
import android.os.Bundle
|
||||
import android.text.Html
|
||||
import android.view.*
|
||||
import android.widget.Button
|
||||
import android.widget.ListView
|
||||
import android.widget.TextView
|
||||
import android.widget.Toast
|
||||
import android.widget.*
|
||||
import androidx.appcompat.app.AlertDialog
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import com.google.android.material.floatingactionbutton.FloatingActionButton
|
||||
@ -18,7 +14,7 @@ import io.github.chronosx88.yggdrasil.models.config.SelectDNSInfoListAdapter
|
||||
import io.github.chronosx88.yggdrasil.models.config.Utils.Companion.deserializeStringList2DNSInfoSet
|
||||
import io.github.chronosx88.yggdrasil.models.config.Utils.Companion.ping
|
||||
import io.github.chronosx88.yggdrasil.models.config.Utils.Companion.serializeDNSInfoSet2StringList
|
||||
import kotlinx.coroutines.Runnable
|
||||
import kotlinx.coroutines.*
|
||||
import java.net.InetAddress
|
||||
import kotlin.concurrent.thread
|
||||
|
||||
@ -50,7 +46,7 @@ class DNSListActivity : AppCompatActivity() {
|
||||
setContentView(R.layout.activity_dns_list)
|
||||
setSupportActionBar(findViewById(R.id.toolbar))
|
||||
findViewById<FloatingActionButton>(R.id.fab).setOnClickListener { view ->
|
||||
|
||||
addNewDNS()
|
||||
}
|
||||
var extras = intent.extras
|
||||
var dnsList = findViewById<ListView>(R.id.dnsList)
|
||||
@ -86,6 +82,43 @@ class DNSListActivity : AppCompatActivity() {
|
||||
}
|
||||
}
|
||||
|
||||
private fun addNewDNS() {
|
||||
val view: View = LayoutInflater.from(this).inflate(R.layout.new_dns_dialog, null)
|
||||
val countryCode: String = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
|
||||
this.resources.configuration.locales[0].country
|
||||
} else {
|
||||
this.resources.configuration.locale.country
|
||||
}
|
||||
|
||||
var ccp = view.findViewById<com.hbb20.CountryCodePicker>(R.id.ccp)
|
||||
ccp.setCountryForNameCode(countryCode)
|
||||
val ab: AlertDialog.Builder = AlertDialog.Builder(this)
|
||||
ab.setCancelable(true).setView(view)
|
||||
var ad = ab.show()
|
||||
var addButton = view.findViewById<Button>(R.id.add)
|
||||
addButton.setOnClickListener{
|
||||
var ipInput = view.findViewById<TextView>(R.id.ipInput)
|
||||
var ccpInput = view.findViewById<com.hbb20.CountryCodePicker>(R.id.ccp)
|
||||
var ip = ipInput.text.toString().toLowerCase()
|
||||
var ccp = ccpInput.selectedCountryNameCode
|
||||
GlobalScope.launch {
|
||||
var di = DNSInfo(InetAddress.getByName("["+ip+"]"), ccp, "User DNS")
|
||||
try {
|
||||
var ping = ping(di.address, 53)
|
||||
di.ping = ping
|
||||
} catch(e: Throwable){
|
||||
di.ping = Int.MAX_VALUE
|
||||
}
|
||||
withContext(Dispatchers.Main) {
|
||||
var selectAdapter = (findViewById<ListView>(R.id.peerList).adapter as SelectDNSInfoListAdapter)
|
||||
selectAdapter.addItem(0, di)
|
||||
selectAdapter.notifyDataSetChanged()
|
||||
ad.dismiss()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
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)
|
||||
|
@ -28,10 +28,8 @@ import kotlinx.coroutines.GlobalScope
|
||||
import kotlinx.coroutines.launch
|
||||
import kotlinx.coroutines.withContext
|
||||
import java.io.ByteArrayOutputStream
|
||||
import java.io.IOException
|
||||
import java.lang.reflect.Type
|
||||
import java.net.InetAddress
|
||||
import java.net.SocketTimeoutException
|
||||
import java.net.URI
|
||||
import java.net.URL
|
||||
import java.nio.charset.Charset
|
||||
@ -55,7 +53,7 @@ class PeerListActivity : AppCompatActivity() {
|
||||
|
||||
var isLoading = true;
|
||||
|
||||
var popupAddress: PopupWindow? = null
|
||||
var popup: PopupWindow? = null
|
||||
var adapter: DropDownAdapter? = null
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
@ -181,7 +179,7 @@ class PeerListActivity : AppCompatActivity() {
|
||||
}
|
||||
|
||||
private fun getAddressListPopup(): PopupWindow? {
|
||||
return popupAddress
|
||||
return popup
|
||||
}
|
||||
|
||||
private fun getPopupWindow(
|
||||
@ -209,7 +207,7 @@ class PeerListActivity : AppCompatActivity() {
|
||||
popupWindow.height = WindowManager.LayoutParams.WRAP_CONTENT
|
||||
// set the list view as pop up window content
|
||||
popupWindow.contentView = listView
|
||||
popupAddress = popupWindow
|
||||
popup = popupWindow
|
||||
return popupWindow
|
||||
}
|
||||
|
||||
|
@ -30,8 +30,6 @@ import mobile.Mobile
|
||||
import mobile.Yggdrasil
|
||||
import java.io.*
|
||||
import java.net.Inet6Address
|
||||
import kotlin.concurrent.thread
|
||||
|
||||
|
||||
class YggdrasilTunService : VpnService() {
|
||||
|
||||
@ -39,7 +37,7 @@ class YggdrasilTunService : VpnService() {
|
||||
private var isClosed = false
|
||||
|
||||
/** Maximum packet size is constrained by the MTU, which is given as a signed short - 256 */
|
||||
private val MAX_PACKET_SIZE = Short.MAX_VALUE-256
|
||||
private val MAX_PACKET_SIZE = Short.MAX_VALUE/2
|
||||
|
||||
companion object {
|
||||
private const val TAG = "Yggdrasil-service"
|
||||
|
@ -78,6 +78,10 @@ class SelectDNSInfoListAdapter(
|
||||
allDNS.add(peerInfo)
|
||||
}
|
||||
|
||||
fun addItem(index: Int, peerInfo: DNSInfo){
|
||||
allDNS.add(index, peerInfo)
|
||||
}
|
||||
|
||||
fun sort(){
|
||||
allDNS = ArrayList(allDNS.sortedWith(compareBy { it.ping }))
|
||||
this.notifyDataSetChanged()
|
||||
|
@ -35,6 +35,6 @@
|
||||
app:elevation="6dp"
|
||||
app:fabSize="normal"
|
||||
app:srcCompat="@android:drawable/ic_input_add"
|
||||
android:visibility="gone"/>
|
||||
/>
|
||||
|
||||
</androidx.coordinatorlayout.widget.CoordinatorLayout>
|
63
app/src/main/res/layout/new_dns_dialog.xml
Normal file
63
app/src/main/res/layout/new_dns_dialog.xml
Normal file
@ -0,0 +1,63 @@
|
||||
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_width="match_parent"
|
||||
android:padding="10dp"
|
||||
android:background="@color/grey">
|
||||
|
||||
<com.google.android.material.textfield.TextInputLayout
|
||||
android:id="@+id/ip"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
android:layout_margin="10dp"
|
||||
app:boxBackgroundMode="none"
|
||||
android:background="@drawable/edit_text_rounded_corner"
|
||||
android:textColorHint="@color/white"
|
||||
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="0,1,2,3,4,5,6,7,8,9,:"
|
||||
android:hint="IPv6"
|
||||
android:inputType="textNoSuggestions"
|
||||
android:textColor="@color/white"
|
||||
android:textCursorDrawable="@null"
|
||||
/>
|
||||
</com.google.android.material.textfield.TextInputLayout>
|
||||
|
||||
<com.hbb20.CountryCodePicker
|
||||
android:id="@+id/ccp"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="60dp"
|
||||
android:gravity="center_vertical"
|
||||
android:layout_margin="10dp"
|
||||
app:ccp_contentColor="@color/white"
|
||||
app:ccp_showFullName="true"
|
||||
app:ccp_showPhoneCode="false"
|
||||
app:ccp_showNameCode="false"
|
||||
app:ccpDialog_backgroundColor="@color/grey"
|
||||
app:ccpDialog_textColor="@color/white"
|
||||
app:layout_constraintEnd_toEndOf="@+id/ip"
|
||||
app:layout_constraintTop_toBottomOf="@+id/ip"
|
||||
android:background="@drawable/edit_text_rounded_corner"/>
|
||||
|
||||
<Button
|
||||
android:id="@+id/add"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="60dp"
|
||||
android:layout_marginTop="20dp"
|
||||
android:layout_marginBottom="10dp"
|
||||
android:layout_marginLeft="10dp"
|
||||
android:layout_marginRight="10dp"
|
||||
app:layout_constraintEnd_toEndOf="@+id/schema"
|
||||
app:layout_constraintTop_toBottomOf="@+id/ccp"
|
||||
android:background="@drawable/button_selector"
|
||||
app:backgroundTint="@null"
|
||||
android:text="ADD"
|
||||
android:textColor="@color/white"/>
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
Loading…
Reference in New Issue
Block a user