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