diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..94a25f7
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 945a1ed..e88b8f9 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -11,8 +11,8 @@ android {
applicationId "github.arash.kotlin.proxychecker"
minSdkVersion 21
targetSdkVersion 30
- versionCode 1
- versionName "1.0"
+ versionCode 2
+ versionName "1.1"
archivesBaseName = "ProxyChecker - v$versionCode"
diff --git a/app/src/main/java/github/arash/kotlin/proxychecker/G.java b/app/src/main/java/github/arash/kotlin/proxychecker/G.java
deleted file mode 100644
index 9fe9f66..0000000
--- a/app/src/main/java/github/arash/kotlin/proxychecker/G.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package github.arash.kotlin.proxychecker;
-
-public class G {
-
- public static String SaveCredential_SharedPreferencesKey = "SaveCredentialP";
-
- public static String ProxyAddress_SharedPreferencesKey = "ProxyAddressP";
- public static String PortNumber_SharedPreferencesKey = "PortNumberP";
- public static String Username_SharedPreferencesKey = "UsernameP";
- public static String Password_SharedPreferencesKey = "PasswordP";
-}
diff --git a/app/src/main/java/github/arash/kotlin/proxychecker/G.kt b/app/src/main/java/github/arash/kotlin/proxychecker/G.kt
new file mode 100644
index 0000000..d12cab8
--- /dev/null
+++ b/app/src/main/java/github/arash/kotlin/proxychecker/G.kt
@@ -0,0 +1,11 @@
+package github.arash.kotlin.proxychecker
+
+class G {
+ companion object {
+ const val SaveCredential_SharedPreferencesKey: String = "SaveCredentialP"
+ const val ProxyAddress_SharedPreferencesKey = "ProxyAddressP"
+ const val PortNumber_SharedPreferencesKey = "PortNumberP"
+ const val Username_SharedPreferencesKey = "UsernameP"
+ const val Password_SharedPreferencesKey = "PasswordP"
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/github/arash/kotlin/proxychecker/MainActivity.kt b/app/src/main/java/github/arash/kotlin/proxychecker/MainActivity.kt
index eabdb10..a2d899e 100644
--- a/app/src/main/java/github/arash/kotlin/proxychecker/MainActivity.kt
+++ b/app/src/main/java/github/arash/kotlin/proxychecker/MainActivity.kt
@@ -1,21 +1,19 @@
package github.arash.kotlin.proxychecker
import android.app.AlertDialog
+import android.content.ClipData
+import android.content.ClipboardManager
import android.content.Context
import android.content.Intent
import android.net.ConnectivityManager
import android.net.Uri
import android.os.Bundle
+import android.os.StrictMode
import android.util.Log
-import android.view.LayoutInflater
-import android.view.Menu
-import android.view.MenuItem
-import android.view.View
+import android.view.*
import android.view.View.GONE
import android.view.View.VISIBLE
-import android.widget.CompoundButton
import android.widget.TextView
-import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.app.AppCompatDelegate
import com.androidnetworking.AndroidNetworking
@@ -23,12 +21,11 @@ import com.androidnetworking.error.ANError
import com.androidnetworking.interfaces.JSONObjectRequestListener
import com.google.android.material.bottomsheet.BottomSheetBehavior
import com.google.android.material.bottomsheet.BottomSheetDialog
+import com.google.android.material.snackbar.Snackbar
import github.arash.kotlin.proxychecker.databinding.ActivityMainBinding
-import github.arash.kotlin.proxychecker.databinding.DesignSettingBtmBinding
import github.arash.kotlin.proxychecker.databinding.DesignTelegramInputDialogBinding
import okhttp3.OkHttpClient
import org.json.JSONObject
-import java.lang.Exception
import java.net.Authenticator
import java.net.InetSocketAddress
import java.net.PasswordAuthentication
@@ -48,26 +45,15 @@ class MainActivity : AppCompatActivity() {
AndroidNetworking.initialize(this)
PreferenceHelper.initialize(this)
- binding.ProxyAddress.setText(
- PreferenceHelper.getInstance().getString(G.ProxyAddress_SharedPreferencesKey, "")
- )
- binding.ProxyPort.setText(
- PreferenceHelper.getInstance().getString(G.PortNumber_SharedPreferencesKey, "")
- )
- binding.ProxyUsername.setText(
- PreferenceHelper.getInstance().getString(G.Username_SharedPreferencesKey, "")
- )
- binding.ProxyPassword.setText(
- PreferenceHelper.getInstance().getString(G.Password_SharedPreferencesKey, "")
- )
-
- PreferenceHelper.getInstance().getString(G.PortNumber_SharedPreferencesKey, "")
- PreferenceHelper.getInstance().getString(G.Username_SharedPreferencesKey, "")
- PreferenceHelper.getInstance().getString(G.Password_SharedPreferencesKey, "")
-
-
- val connectivityManager: ConnectivityManager =
- getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
+ StrictMode.setThreadPolicy(StrictMode.ThreadPolicy.Builder().permitAll().build())
+
+ //Enter data from SharedPreferences
+ binding.ProxyAddress.setText(PreferenceHelper.getInstance().getString(G.ProxyAddress_SharedPreferencesKey, ""))
+ binding.ProxyPort.setText(PreferenceHelper.getInstance().getString(G.PortNumber_SharedPreferencesKey, ""))
+ binding.ProxyUsername.setText(PreferenceHelper.getInstance().getString(G.Username_SharedPreferencesKey, ""))
+ binding.ProxyPassword.setText(PreferenceHelper.getInstance().getString(G.Password_SharedPreferencesKey, ""))
+
+ val connectivityManager: ConnectivityManager = getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
if (connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_VPN)!!.isConnectedOrConnecting)
binding.vpnAlertTV.visibility = VISIBLE
@@ -79,36 +65,21 @@ class MainActivity : AppCompatActivity() {
//Proxy Type
if (binding.ProxyTypeToggleGroup.checkedButtonId == R.id.ProxyTypeHTTPS)
- okHttpClient = OkHttpClient.Builder()
- .proxy(
- Proxy(
- Proxy.Type.HTTP, InetSocketAddress(
- binding.ProxyAddress.text.toString(),
- binding.ProxyPort.text.toString().toInt()
- )
- )
- ).build()
+ okHttpClient = OkHttpClient.Builder().proxy(Proxy(Proxy.Type.HTTP,
+ InetSocketAddress(binding.ProxyAddress.text.toString(),
+ binding.ProxyPort.text.toString().toInt()))).build()
else
- okHttpClient = OkHttpClient.Builder().proxy(
- Proxy(
- Proxy.Type.SOCKS, InetSocketAddress(
- binding.ProxyAddress.text.toString(),
- binding.ProxyPort.text.toString().toInt()
- )
- )
- ).build()
+ okHttpClient = OkHttpClient.Builder().proxy(Proxy(Proxy.Type.SOCKS,
+ InetSocketAddress(binding.ProxyAddress.text.toString(),
+ binding.ProxyPort.text.toString().toInt()))).build()
//Proxy Credential
Authenticator.setDefault(object : Authenticator() {
override fun getPasswordAuthentication(): PasswordAuthentication? {
- if (requestingHost.equals(
- binding.ProxyAddress.text.toString(),
- )
- ) if (binding.ProxyPort.text.toString()
- .toInt() == requestingPort
- ) return PasswordAuthentication(
- binding.ProxyUsername.text.toString(),
- binding.ProxyPassword.text.toString().toCharArray()
+ if (requestingHost.equals(binding.ProxyAddress.text.toString()))
+ if (requestingPort == binding.ProxyPort.text.toString().toInt())
+ return PasswordAuthentication(binding.ProxyUsername.text.toString(),
+ binding.ProxyPassword.text.toString().toCharArray()
)
return null
}
@@ -150,29 +121,33 @@ class MainActivity : AppCompatActivity() {
binding.ProgressBar.visibility = GONE
binding.StartTheTestButton.text = "Test The Proxy"
binding.StartTheTestButton.isEnabled = true
+ Snackbar.make(binding.root, "Connection failed", Snackbar.LENGTH_LONG)
+ .setAction("Copy info") {
+ val clipboard = getSystemService(CLIPBOARD_SERVICE) as ClipboardManager
+ val clip = ClipData.newPlainText("Copied Text", anError?.message.toString())
+ clipboard.setPrimaryClip(clip)
+ }.show()
}
})
- PreferenceHelper.getInstance().setString(
- G.ProxyAddress_SharedPreferencesKey,
- binding.ProxyAddress.text.toString()
- )
- PreferenceHelper.getInstance()
- .setString(G.PortNumber_SharedPreferencesKey, binding.ProxyPort.text.toString())
+ PreferenceHelper.getInstance().setString(G.ProxyAddress_SharedPreferencesKey, binding.ProxyAddress.text.toString())
+ PreferenceHelper.getInstance().setString(G.PortNumber_SharedPreferencesKey, binding.ProxyPort.text.toString())
if (PreferenceHelper.getInstance().getBoolean(G.SaveCredential_SharedPreferencesKey)) {
PreferenceHelper.getInstance()
- .setString(
- G.Username_SharedPreferencesKey,
- binding.ProxyUsername.text.toString()
- )
+ .setString(G.Username_SharedPreferencesKey, binding.ProxyUsername.text.toString())
PreferenceHelper.getInstance()
- .setString(
- G.Password_SharedPreferencesKey,
- binding.ProxyPassword.text.toString()
- )
+ .setString(G.Password_SharedPreferencesKey, binding.ProxyPassword.text.toString())
}
}
+
+ binding.SaveCredentialCheckBox.isChecked =
+ PreferenceHelper.getInstance().getBoolean(G.SaveCredential_SharedPreferencesKey)
+ binding.SaveCredentialCheckBox.setOnCheckedChangeListener { _, isChecked ->
+ PreferenceHelper.getInstance()
+ .setBoolean(G.SaveCredential_SharedPreferencesKey, isChecked)
+ }
+
}
override fun onCreateOptionsMenu(menu: Menu?): Boolean {
@@ -184,38 +159,13 @@ class MainActivity : AppCompatActivity() {
override fun onOptionsItemSelected(item: MenuItem): Boolean {
when (item.itemId) {
R.id.Action_Github ->
- startActivity(
- Intent(
- Intent.ACTION_VIEW,
- Uri.parse("https://github.com/MrArashAzizi/Proxy-Checking-Tool")
- )
- )
- R.id.Action_Setting -> settingBottomSheetDialog()
+ startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(getString(R.string.github_address))))
R.id.Action_ImportTelegramProxy -> importTelegramProxy()
}
return super.onOptionsItemSelected(item)
}
- private fun settingBottomSheetDialog() {
- val settingBTM = BottomSheetDialog(this)
- val inflater: LayoutInflater = getSystemService(LAYOUT_INFLATER_SERVICE) as LayoutInflater
- val view: View = inflater.inflate(R.layout.design_setting_btm, null)
- val settingBottomSheetBinding: DesignSettingBtmBinding =
- DesignSettingBtmBinding.bind(view)
-
- settingBottomSheetBinding.SettingSaveCredential.isChecked =
- PreferenceHelper.getInstance().getBoolean(G.SaveCredential_SharedPreferencesKey)
- settingBottomSheetBinding.SettingSaveCredential.setOnCheckedChangeListener { _, isChecked ->
- PreferenceHelper.getInstance()
- .setBoolean(G.SaveCredential_SharedPreferencesKey, isChecked)
- }
-
- settingBTM.setContentView(view)
- settingBTM.behavior.state = BottomSheetBehavior.STATE_EXPANDED
- settingBTM.show()
- }
-
private fun importTelegramProxy() {
val inputDialog: AlertDialog = AlertDialog.Builder(this@MainActivity).create()
val inflater: LayoutInflater = getSystemService(LAYOUT_INFLATER_SERVICE) as LayoutInflater
@@ -223,19 +173,26 @@ class MainActivity : AppCompatActivity() {
val telegramProxyInputBinding: DesignTelegramInputDialogBinding =
DesignTelegramInputDialogBinding.bind(view)
- telegramProxyInputBinding.btnOK.setOnClickListener {
- try {
-
- val myURI: Uri = Uri.parse(telegramProxyInputBinding.TelegramProxy.text.toString())
- binding.ProxyAddress.setText(myURI.getQueryParameter("server").toString())
- binding.ProxyPort.setText(myURI.getQueryParameter("port").toString())
+ telegramProxyInputBinding.TelegramProxy.requestFocus()
+ inputDialog.window?.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE)
- if (myURI.equals("username")) {
- binding.ProxyUsername.setText(myURI.getQueryParameter("user").toString())
- binding.ProxyPassword.setText(myURI.getQueryParameter("pass").toString())
+ telegramProxyInputBinding.btnOK.setOnClickListener {
+ if (telegramProxyInputBinding.TelegramProxy.text?.length!! < 5)
+ telegramProxyInputBinding.TelegramProxyLayout.error = "Enter the proxy"
+ else {
+ try {
+ val myURI: Uri =
+ Uri.parse(telegramProxyInputBinding.TelegramProxy.text.toString())
+ binding.ProxyAddress.setText(myURI.getQueryParameter("server").toString())
+ binding.ProxyPort.setText(myURI.getQueryParameter("port").toString())
+
+ if (myURI.equals("username")) {
+ binding.ProxyUsername.setText(myURI.getQueryParameter("user").toString())
+ binding.ProxyPassword.setText(myURI.getQueryParameter("pass").toString())
+ }
+ inputDialog.dismiss()
+ } catch (ex: Exception) {
}
- inputDialog.dismiss()
- } catch (ex: Exception) {
}
}
telegramProxyInputBinding.btnCancel.setOnClickListener { inputDialog.dismiss() }
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index 5a9ca90..85ca1c2 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -179,7 +179,6 @@
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:layout_marginBottom="4dp"
android:orientation="vertical"
app:passwordToggleEnabled="true">
@@ -195,6 +194,13 @@
android:textSize="17sp" />
+
+
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/layout/design_telegram_input_dialog.xml b/app/src/main/res/layout/design_telegram_input_dialog.xml
index 17d85c8..dfe29dc 100644
--- a/app/src/main/res/layout/design_telegram_input_dialog.xml
+++ b/app/src/main/res/layout/design_telegram_input_dialog.xml
@@ -5,7 +5,6 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/white"
- android:layoutDirection="rtl"
android:orientation="vertical">
diff --git a/app/src/main/res/menu/toolbar_menu.xml b/app/src/main/res/menu/toolbar_menu.xml
index a2cb64e..ac28273 100644
--- a/app/src/main/res/menu/toolbar_menu.xml
+++ b/app/src/main/res/menu/toolbar_menu.xml
@@ -15,11 +15,4 @@
android:orderInCategory="100"
android:title="Github"
app:showAsAction="never" />
-
-
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 1226c26..f16f4b1 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -1,3 +1,4 @@
ProxyChecker
+ https://github.com/MrArashAzizi/ProxyChecker
\ No newline at end of file