diff --git a/app/src/main/java/ru/karasevm/privatednstoggle/AddServerDialogFragment.kt b/app/src/main/java/ru/karasevm/privatednstoggle/AddServerDialogFragment.kt index 9ed5238..a4cdb34 100644 --- a/app/src/main/java/ru/karasevm/privatednstoggle/AddServerDialogFragment.kt +++ b/app/src/main/java/ru/karasevm/privatednstoggle/AddServerDialogFragment.kt @@ -28,7 +28,7 @@ class AddServerDialogFragment : DialogFragment() { * implement this interface in order to receive event callbacks. * Each method passes the DialogFragment in case the host needs to query it. */ interface NoticeDialogListener { - fun onDialogPositiveClick(dialog: DialogFragment, server: String) + fun onDialogPositiveClick(server: String) } // Override the Fragment.onAttach() method to instantiate the NoticeDialogListener @@ -62,14 +62,15 @@ class AddServerDialogFragment : DialogFragment() { builder.setTitle(R.string.add_server) .setView(view) // Add action buttons - .setPositiveButton(R.string.menu_add + .setPositiveButton( + R.string.menu_add ) { _, _ -> listener.onDialogPositiveClick( - this, binding.editTextServerAddr.text.toString().trim() ) } - .setNegativeButton(R.string.cancel + .setNegativeButton( + R.string.cancel ) { _, _ -> dialog?.cancel() } @@ -79,7 +80,6 @@ class AddServerDialogFragment : DialogFragment() { override fun onStart() { super.onStart() - val button = ((dialog) as AlertDialog).getButton(DialogInterface.BUTTON_POSITIVE) binding.editTextServerAddr.addTextChangedListener(object : TextWatcher { override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {} diff --git a/app/src/main/java/ru/karasevm/privatednstoggle/DeleteServerDialogFragment.kt b/app/src/main/java/ru/karasevm/privatednstoggle/DeleteServerDialogFragment.kt index 0488650..b69ce1d 100644 --- a/app/src/main/java/ru/karasevm/privatednstoggle/DeleteServerDialogFragment.kt +++ b/app/src/main/java/ru/karasevm/privatednstoggle/DeleteServerDialogFragment.kt @@ -7,7 +7,7 @@ import androidx.fragment.app.DialogFragment import com.google.android.material.dialog.MaterialAlertDialogBuilder -class DeleteServerDialogFragment(private val position: Int): DialogFragment() { +class DeleteServerDialogFragment(private val position: Int) : DialogFragment() { // Use this instance of the interface to deliver action events private lateinit var listener: NoticeDialogListener @@ -15,7 +15,7 @@ class DeleteServerDialogFragment(private val position: Int): DialogFragment() { * implement this interface in order to receive event callbacks. * Each method passes the DialogFragment in case the host needs to query it. */ interface NoticeDialogListener { - fun onDialogPositiveClick(dialog: DialogFragment, position: Int) + fun onDialogPositiveClick(position: Int) } // Override the Fragment.onAttach() method to instantiate the NoticeDialogListener @@ -27,21 +27,26 @@ class DeleteServerDialogFragment(private val position: Int): DialogFragment() { listener = context as NoticeDialogListener } catch (e: ClassCastException) { // The activity doesn't implement the interface, throw exception - throw ClassCastException((context.toString() + - " must implement NoticeDialogListener")) + throw ClassCastException( + (context.toString() + + " must implement NoticeDialogListener") + ) } } + override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { return activity?.let { val builder = MaterialAlertDialogBuilder(it) builder.setTitle(R.string.delete_question) .setMessage(R.string.delete_message) - .setPositiveButton(R.string.delete + .setPositiveButton( + R.string.delete ) { _, _ -> - listener.onDialogPositiveClick(this, position) + listener.onDialogPositiveClick(position) } - .setNegativeButton(R.string.cancel + .setNegativeButton( + R.string.cancel ) { _, _ -> dialog?.cancel() } diff --git a/app/src/main/java/ru/karasevm/privatednstoggle/DnsTileService.kt b/app/src/main/java/ru/karasevm/privatednstoggle/DnsTileService.kt index 1ec6111..ad16ece 100644 --- a/app/src/main/java/ru/karasevm/privatednstoggle/DnsTileService.kt +++ b/app/src/main/java/ru/karasevm/privatednstoggle/DnsTileService.kt @@ -210,7 +210,7 @@ class DnsTileService : TileService() { val index = items.indexOf(currentAddress) if (index == -1 || currentAddress == null) { - return items[0] + return items[0] } if (index == items.size - 1) { return null diff --git a/app/src/main/java/ru/karasevm/privatednstoggle/MainActivity.kt b/app/src/main/java/ru/karasevm/privatednstoggle/MainActivity.kt index 3556302..84c3b63 100644 --- a/app/src/main/java/ru/karasevm/privatednstoggle/MainActivity.kt +++ b/app/src/main/java/ru/karasevm/privatednstoggle/MainActivity.kt @@ -14,7 +14,6 @@ import android.util.Log import android.view.Menu import android.widget.Toast import androidx.appcompat.app.AppCompatActivity -import androidx.fragment.app.DialogFragment import androidx.recyclerview.widget.LinearLayoutManager import org.lsposed.hiddenapibypass.HiddenApiBypass import rikka.shizuku.Shizuku @@ -67,7 +66,10 @@ class MainActivity : AppCompatActivity(), AddServerDialogFragment.NoticeDialogLi binding.topAppBar.setOnMenuItemClickListener { item -> when (item.itemId) { R.id.privacy_policy -> { - val browserIntent = Intent(Intent.ACTION_VIEW, Uri.parse("https://karasevm.github.io/PrivateDNSAndroid/privacy_policy")) + val browserIntent = Intent( + Intent.ACTION_VIEW, + Uri.parse("https://karasevm.github.io/PrivateDNSAndroid/privacy_policy") + ) startActivity(browserIntent) true } @@ -128,7 +130,7 @@ class MainActivity : AppCompatActivity(), AddServerDialogFragment.NoticeDialogLi Shizuku.removeRequestPermissionResultListener(this::onRequestPermissionResult) } - override fun onDialogPositiveClick(dialog: DialogFragment, server: String) { + override fun onDialogPositiveClick(server: String) { if (server.isEmpty()) { Toast.makeText(this, R.string.server_length_error, Toast.LENGTH_SHORT).show() return @@ -139,7 +141,7 @@ class MainActivity : AppCompatActivity(), AddServerDialogFragment.NoticeDialogLi sharedPrefs.dns_servers = items } - override fun onDialogPositiveClick(dialog: DialogFragment,position: Int) { + override fun onDialogPositiveClick(position: Int) { items.removeAt(position) adapter.setData(items.toMutableList()) adapter.notifyItemRemoved(position) @@ -194,7 +196,9 @@ class MainActivity : AppCompatActivity(), AddServerDialogFragment.NoticeDialogLi finish() } } + } + @SuppressLint("PrivateApi") override fun onRequestPermissionResult(requestCode: Int, grantResult: Int) { val isGranted = grantResult == PackageManager.PERMISSION_GRANTED @@ -202,7 +206,10 @@ class MainActivity : AppCompatActivity(), AddServerDialogFragment.NoticeDialogLi if (isGranted) { grantPermissionWithShizuku() } else if (checkSelfPermission(Manifest.permission.WRITE_SECURE_SETTINGS) != PackageManager.PERMISSION_GRANTED) { - val browserIntent = Intent(Intent.ACTION_VIEW, Uri.parse("https://karasevm.github.io/PrivateDNSAndroid/")) + val browserIntent = Intent( + Intent.ACTION_VIEW, + Uri.parse("https://karasevm.github.io/PrivateDNSAndroid/") + ) startActivity(browserIntent) finish() } diff --git a/app/src/main/java/ru/karasevm/privatednstoggle/RecyclerAdapter.kt b/app/src/main/java/ru/karasevm/privatednstoggle/RecyclerAdapter.kt index e0949a8..03bdda4 100644 --- a/app/src/main/java/ru/karasevm/privatednstoggle/RecyclerAdapter.kt +++ b/app/src/main/java/ru/karasevm/privatednstoggle/RecyclerAdapter.kt @@ -1,19 +1,19 @@ package ru.karasevm.privatednstoggle -import android.content.Context import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.TextView import androidx.recyclerview.widget.RecyclerView -import java.util.* -class RecyclerAdapter(val items: MutableList): RecyclerView.Adapter() { +class RecyclerAdapter(private val items: MutableList) : + RecyclerView.Adapter() { var onItemClick: ((Int) -> Unit)? = null override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerAdapter.ViewHolder { - val view = LayoutInflater.from(parent.context).inflate(R.layout.recyclerview_row, parent, false) + val view = + LayoutInflater.from(parent.context).inflate(R.layout.recyclerview_row, parent, false) val vh = ViewHolder(view) return vh } @@ -30,15 +30,16 @@ class RecyclerAdapter(val items: MutableList): RecyclerView.Adapter) { items.run { clear() diff --git a/app/src/main/java/ru/karasevm/privatednstoggle/utils/PrivateDNSUtils.kt b/app/src/main/java/ru/karasevm/privatednstoggle/utils/PrivateDNSUtils.kt index fccef98..5f9459d 100644 --- a/app/src/main/java/ru/karasevm/privatednstoggle/utils/PrivateDNSUtils.kt +++ b/app/src/main/java/ru/karasevm/privatednstoggle/utils/PrivateDNSUtils.kt @@ -9,6 +9,7 @@ import android.widget.Toast import androidx.core.content.ContextCompat.checkSelfPermission import ru.karasevm.privatednstoggle.R +@Suppress("unused") object PrivateDNSUtils { const val DNS_MODE_OFF = "off" const val DNS_MODE_AUTO = "opportunistic" diff --git a/app/src/main/res/drawable-anydpi/ic_tile_default.xml b/app/src/main/res/drawable-anydpi/ic_tile_default.xml deleted file mode 100644 index 2af57be..0000000 --- a/app/src/main/res/drawable-anydpi/ic_tile_default.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - diff --git a/app/src/main/res/drawable-hdpi/ic_tile_default.png b/app/src/main/res/drawable-hdpi/ic_tile_default.png deleted file mode 100644 index 9809f36..0000000 Binary files a/app/src/main/res/drawable-hdpi/ic_tile_default.png and /dev/null differ diff --git a/app/src/main/res/drawable-mdpi/ic_tile_default.png b/app/src/main/res/drawable-mdpi/ic_tile_default.png deleted file mode 100644 index cb09290..0000000 Binary files a/app/src/main/res/drawable-mdpi/ic_tile_default.png and /dev/null differ diff --git a/app/src/main/res/drawable-xhdpi/ic_tile_default.png b/app/src/main/res/drawable-xhdpi/ic_tile_default.png deleted file mode 100644 index 5564007..0000000 Binary files a/app/src/main/res/drawable-xhdpi/ic_tile_default.png and /dev/null differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_tile_default.png b/app/src/main/res/drawable-xxhdpi/ic_tile_default.png deleted file mode 100644 index 35f5c5f..0000000 Binary files a/app/src/main/res/drawable-xxhdpi/ic_tile_default.png and /dev/null differ diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 2a4e3e9..3b78639 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -10,17 +10,17 @@ android:id="@+id/topAppBarLayout" android:layout_width="match_parent" android:layout_height="wrap_content" - app:layout_constraintTop_toTopOf="parent" app:layout_constraintLeft_toRightOf="parent" - app:layout_constraintRight_toLeftOf="parent"> + app:layout_constraintRight_toLeftOf="parent" + app:layout_constraintTop_toTopOf="parent"> + app:menu="@menu/menu_main" + app:title="@string/app_name" /> diff --git a/app/src/main/res/layout/dialog_add.xml b/app/src/main/res/layout/dialog_add.xml index 1cec0bd..9b34d93 100644 --- a/app/src/main/res/layout/dialog_add.xml +++ b/app/src/main/res/layout/dialog_add.xml @@ -8,21 +8,20 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="16dp" + android:hint="@string/add_edittext_hint" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toTopOf="parent" - android:hint="@string/add_edittext_hint"> + app:layout_constraintTop_toTopOf="parent"> + android:inputType="textNoSuggestions" + android:maxLines="1" /> \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_options.xml b/app/src/main/res/layout/dialog_options.xml index 7971dd4..efe0048 100644 --- a/app/src/main/res/layout/dialog_options.xml +++ b/app/src/main/res/layout/dialog_options.xml @@ -4,8 +4,8 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:paddingStart="17dp" - android:paddingEnd="17dp" - android:paddingTop="10dp"> + android:paddingTop="10dp" + android:paddingEnd="17dp"> + android:focusable="true" + android:foreground="?android:attr/selectableItemBackground"> + app:layout_constraintTop_toTopOf="parent" /> \ No newline at end of file diff --git a/app/src/main/res/layout/sheet_dns_selector.xml b/app/src/main/res/layout/sheet_dns_selector.xml index 2c1eb13..bbe5b42 100644 --- a/app/src/main/res/layout/sheet_dns_selector.xml +++ b/app/src/main/res/layout/sheet_dns_selector.xml @@ -7,10 +7,10 @@ + android:layout_height="wrap_content" + android:orientation="vertical" + app:layout_behavior="com.google.android.material.bottomsheet.BottomSheetBehavior"> - - + + - \ No newline at end of file + diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 6b40555..3643757 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -1,8 +1,8 @@ - + #498EE8 - #6750A4 + #6750A4 #6750A4 #625B71 #7D5260 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index e0987b3..5fe367e 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -8,9 +8,7 @@ Add Server Add Privacy Policy - Enable auto Select Server - Automatic (opportunistic) DNS mode will now be available in the tile Done Cancel Delete