Commit d6373926 authored by Mygod's avatar Mygod

Add helper method MainActivity.snackbar

parent 795c9c86
...@@ -22,9 +22,8 @@ package com.github.shadowsocks ...@@ -22,9 +22,8 @@ package com.github.shadowsocks
import android.os.Build import android.os.Build
import android.os.Bundle import android.os.Bundle
import com.google.android.material.snackbar.Snackbar
import androidx.preference.SwitchPreference
import androidx.preference.Preference import androidx.preference.Preference
import androidx.preference.SwitchPreference
import com.github.shadowsocks.App.Companion.app import com.github.shadowsocks.App.Companion.app
import com.github.shadowsocks.bg.BaseService import com.github.shadowsocks.bg.BaseService
import com.github.shadowsocks.preference.DataStore import com.github.shadowsocks.preference.DataStore
...@@ -54,8 +53,7 @@ class GlobalSettingsPreferenceFragment : PreferenceFragmentCompat() { ...@@ -54,8 +53,7 @@ class GlobalSettingsPreferenceFragment : PreferenceFragmentCompat() {
tfo.isChecked = TcpFastOpen.sendEnabled tfo.isChecked = TcpFastOpen.sendEnabled
tfo.setOnPreferenceChangeListener { _, value -> tfo.setOnPreferenceChangeListener { _, value ->
val result = TcpFastOpen.enabled(value as Boolean) val result = TcpFastOpen.enabled(value as Boolean)
if (result != null && result != "Success.") if (result != null && result != "Success.") (activity as MainActivity).snackbar(result).show()
Snackbar.make(requireActivity().findViewById(R.id.snackbar), result, Snackbar.LENGTH_LONG).show()
value == TcpFastOpen.sendEnabled value == TcpFastOpen.sendEnabled
} }
if (!TcpFastOpen.supported) { if (!TcpFastOpen.supported) {
......
...@@ -95,6 +95,8 @@ class MainActivity : AppCompatActivity(), ShadowsocksConnection.Interface, OnPre ...@@ -95,6 +95,8 @@ class MainActivity : AppCompatActivity(), ShadowsocksConnection.Interface, OnPre
private lateinit var rxText: TextView private lateinit var rxText: TextView
private lateinit var txRateText: TextView private lateinit var txRateText: TextView
private lateinit var rxRateText: TextView private lateinit var rxRateText: TextView
val snackbar by lazy { findViewById<View>(R.id.snackbar) }
fun snackbar(text: CharSequence = "") = Snackbar.make(snackbar, text, Snackbar.LENGTH_LONG)
private val customTabsIntent by lazy { private val customTabsIntent by lazy {
CustomTabsIntent.Builder() CustomTabsIntent.Builder()
...@@ -128,10 +130,7 @@ class MainActivity : AppCompatActivity(), ShadowsocksConnection.Interface, OnPre ...@@ -128,10 +130,7 @@ class MainActivity : AppCompatActivity(), ShadowsocksConnection.Interface, OnPre
BaseService.CONNECTED -> statusText.setText(R.string.vpn_connected) BaseService.CONNECTED -> statusText.setText(R.string.vpn_connected)
BaseService.STOPPING -> statusText.setText(R.string.stopping) BaseService.STOPPING -> statusText.setText(R.string.stopping)
else -> { else -> {
if (msg != null) { if (msg != null) snackbar(getString(R.string.vpn_error).format(Locale.ENGLISH, msg)).show()
Snackbar.make(findViewById(R.id.snackbar),
getString(R.string.vpn_error).format(Locale.ENGLISH, msg), Snackbar.LENGTH_LONG).show()
}
statusText.setText(R.string.not_connected) statusText.setText(R.string.not_connected)
} }
} }
...@@ -183,7 +182,7 @@ class MainActivity : AppCompatActivity(), ShadowsocksConnection.Interface, OnPre ...@@ -183,7 +182,7 @@ class MainActivity : AppCompatActivity(), ShadowsocksConnection.Interface, OnPre
if (testCount == id) app.handler.post { if (testCount == id) app.handler.post {
if (success) statusText.text = result else { if (success) statusText.text = result else {
statusText.setText(R.string.connection_test_fail) statusText.setText(R.string.connection_test_fail)
Snackbar.make(findViewById(R.id.snackbar), result, Snackbar.LENGTH_LONG).show() snackbar(result).show()
} }
} }
} }
...@@ -202,7 +201,7 @@ class MainActivity : AppCompatActivity(), ShadowsocksConnection.Interface, OnPre ...@@ -202,7 +201,7 @@ class MainActivity : AppCompatActivity(), ShadowsocksConnection.Interface, OnPre
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
if (resultCode == Activity.RESULT_OK) app.startService() else { if (resultCode == Activity.RESULT_OK) app.startService() else {
Snackbar.make(findViewById(R.id.snackbar), R.string.vpn_permission_denied, Snackbar.LENGTH_LONG).show() snackbar().setText(R.string.vpn_permission_denied).show()
Crashlytics.log(Log.ERROR, TAG, "Failed to start VpnService from onActivityResult: $data") Crashlytics.log(Log.ERROR, TAG, "Failed to start VpnService from onActivityResult: $data")
} }
} }
...@@ -275,7 +274,7 @@ class MainActivity : AppCompatActivity(), ShadowsocksConnection.Interface, OnPre ...@@ -275,7 +274,7 @@ class MainActivity : AppCompatActivity(), ShadowsocksConnection.Interface, OnPre
if (sharedStr.isNullOrEmpty()) return if (sharedStr.isNullOrEmpty()) return
val profiles = Profile.findAll(sharedStr).toList() val profiles = Profile.findAll(sharedStr).toList()
if (profiles.isEmpty()) { if (profiles.isEmpty()) {
Snackbar.make(findViewById(R.id.snackbar), R.string.profile_invalid_input, Snackbar.LENGTH_LONG).show() snackbar().setText(R.string.profile_invalid_input).show()
return return
} }
AlertDialog.Builder(this) AlertDialog.Builder(this)
......
...@@ -26,15 +26,14 @@ import android.content.Intent ...@@ -26,15 +26,14 @@ import android.content.Intent
import android.os.Build import android.os.Build
import android.os.Bundle import android.os.Bundle
import android.os.UserManager import android.os.UserManager
import com.google.android.material.snackbar.Snackbar import android.view.MenuItem
import androidx.preference.SwitchPreference
import androidx.appcompat.app.AlertDialog import androidx.appcompat.app.AlertDialog
import androidx.preference.Preference
import androidx.preference.PreferenceDataStore
import androidx.appcompat.widget.Toolbar import androidx.appcompat.widget.Toolbar
import android.view.MenuItem
import androidx.core.content.getSystemService import androidx.core.content.getSystemService
import androidx.core.os.bundleOf import androidx.core.os.bundleOf
import androidx.preference.Preference
import androidx.preference.PreferenceDataStore
import androidx.preference.SwitchPreference
import com.github.shadowsocks.App.Companion.app import com.github.shadowsocks.App.Companion.app
import com.github.shadowsocks.database.Profile import com.github.shadowsocks.database.Profile
import com.github.shadowsocks.database.ProfileManager import com.github.shadowsocks.database.ProfileManager
...@@ -95,7 +94,7 @@ class ProfileConfigFragment : PreferenceFragmentCompat(), Toolbar.OnMenuItemClic ...@@ -95,7 +94,7 @@ class ProfileConfigFragment : PreferenceFragmentCompat(), Toolbar.OnMenuItemClic
pluginConfigure.isEnabled = newValue.isNotEmpty() pluginConfigure.isEnabled = newValue.isNotEmpty()
pluginConfigure.text = pluginConfiguration.selectedOptions.toString() pluginConfigure.text = pluginConfiguration.selectedOptions.toString()
if (PluginManager.fetchPlugins()[newValue]?.trusted == false) if (PluginManager.fetchPlugins()[newValue]?.trusted == false)
Snackbar.make(view!!, R.string.plugin_untrusted, Snackbar.LENGTH_LONG).show() (activity as MainActivity).snackbar().setText(R.string.plugin_untrusted).show()
true true
} }
pluginConfigure.onPreferenceChangeListener = this pluginConfigure.onPreferenceChangeListener = this
...@@ -145,7 +144,7 @@ class ProfileConfigFragment : PreferenceFragmentCompat(), Toolbar.OnMenuItemClic ...@@ -145,7 +144,7 @@ class ProfileConfigFragment : PreferenceFragmentCompat(), Toolbar.OnMenuItemClic
DataStore.dirty = true DataStore.dirty = true
true true
} catch (exc: IllegalArgumentException) { } catch (exc: IllegalArgumentException) {
Snackbar.make(view!!, exc.localizedMessage, Snackbar.LENGTH_LONG).show() (activity as MainActivity).snackbar(exc.localizedMessage).show()
false false
} }
......
...@@ -29,16 +29,17 @@ import android.nfc.NdefMessage ...@@ -29,16 +29,17 @@ import android.nfc.NdefMessage
import android.nfc.NdefRecord import android.nfc.NdefRecord
import android.nfc.NfcAdapter import android.nfc.NfcAdapter
import android.os.Bundle import android.os.Bundle
import com.google.android.material.snackbar.Snackbar
import androidx.fragment.app.DialogFragment
import androidx.appcompat.widget.*
import android.text.format.Formatter import android.text.format.Formatter
import android.view.* import android.view.*
import android.widget.ImageView import android.widget.ImageView
import android.widget.LinearLayout import android.widget.LinearLayout
import android.widget.TextView import android.widget.TextView
import androidx.appcompat.widget.PopupMenu
import androidx.appcompat.widget.Toolbar
import androidx.appcompat.widget.TooltipCompat
import androidx.core.content.getSystemService import androidx.core.content.getSystemService
import androidx.core.os.bundleOf import androidx.core.os.bundleOf
import androidx.fragment.app.DialogFragment
import androidx.recyclerview.widget.* import androidx.recyclerview.widget.*
import com.github.shadowsocks.App.Companion.app import com.github.shadowsocks.App.Companion.app
import com.github.shadowsocks.bg.BaseService import com.github.shadowsocks.bg.BaseService
...@@ -329,7 +330,7 @@ class ProfilesFragment : ToolbarFragment(), Toolbar.OnMenuItemClickListener { ...@@ -329,7 +330,7 @@ class ProfilesFragment : ToolbarFragment(), Toolbar.OnMenuItemClickListener {
profilesList.itemAnimator = animator profilesList.itemAnimator = animator
profilesList.adapter = profilesAdapter profilesList.adapter = profilesAdapter
instance = this instance = this
undoManager = UndoSnackbarManager(requireActivity().findViewById(R.id.snackbar), undoManager = UndoSnackbarManager((activity as MainActivity).snackbar,
profilesAdapter::undo, profilesAdapter::commit) profilesAdapter::undo, profilesAdapter::commit)
ItemTouchHelper(object : ItemTouchHelper.SimpleCallback(ItemTouchHelper.UP or ItemTouchHelper.DOWN, ItemTouchHelper(object : ItemTouchHelper.SimpleCallback(ItemTouchHelper.UP or ItemTouchHelper.DOWN,
ItemTouchHelper.START or ItemTouchHelper.END) { ItemTouchHelper.START or ItemTouchHelper.END) {
...@@ -367,15 +368,13 @@ class ProfilesFragment : ToolbarFragment(), Toolbar.OnMenuItemClickListener { ...@@ -367,15 +368,13 @@ class ProfilesFragment : ToolbarFragment(), Toolbar.OnMenuItemClickListener {
val profiles = Profile.findAll(clipboard.primaryClip!!.getItemAt(0).text).toList() val profiles = Profile.findAll(clipboard.primaryClip!!.getItemAt(0).text).toList()
if (profiles.isNotEmpty()) { if (profiles.isNotEmpty()) {
profiles.forEach { ProfileManager.createProfile(it) } profiles.forEach { ProfileManager.createProfile(it) }
Snackbar.make(requireActivity().findViewById(R.id.snackbar), R.string.action_import_msg, (activity as MainActivity).snackbar().setText(R.string.action_import_msg).show()
Snackbar.LENGTH_LONG).show()
return true return true
} }
} catch (exc: Exception) { } catch (exc: Exception) {
exc.printStackTrace() exc.printStackTrace()
} }
Snackbar.make(requireActivity().findViewById(R.id.snackbar), R.string.action_import_err, (activity as MainActivity).snackbar().setText(R.string.action_import_err).show()
Snackbar.LENGTH_LONG).show()
true true
} }
R.id.action_manual_settings -> { R.id.action_manual_settings -> {
...@@ -384,10 +383,10 @@ class ProfilesFragment : ToolbarFragment(), Toolbar.OnMenuItemClickListener { ...@@ -384,10 +383,10 @@ class ProfilesFragment : ToolbarFragment(), Toolbar.OnMenuItemClickListener {
} }
R.id.action_export -> { R.id.action_export -> {
val profiles = ProfileManager.getAllProfiles() val profiles = ProfileManager.getAllProfiles()
Snackbar.make(requireActivity().findViewById(R.id.snackbar), if (profiles != null) { (activity as MainActivity).snackbar().setText(if (profiles != null) {
clipboard.primaryClip = ClipData.newPlainText(null, profiles.joinToString("\n")) clipboard.primaryClip = ClipData.newPlainText(null, profiles.joinToString("\n"))
R.string.action_export_msg R.string.action_export_msg
} else R.string.action_export_err, Snackbar.LENGTH_LONG).show() } else R.string.action_export_err).show()
true true
} }
else -> false else -> false
......
...@@ -26,9 +26,9 @@ import android.content.Intent ...@@ -26,9 +26,9 @@ import android.content.Intent
import android.content.IntentFilter import android.content.IntentFilter
import android.net.VpnService import android.net.VpnService
import android.os.Bundle import android.os.Bundle
import com.google.android.material.snackbar.Snackbar
import androidx.appcompat.app.AppCompatActivity
import android.util.Log import android.util.Log
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import androidx.core.content.getSystemService import androidx.core.content.getSystemService
import com.crashlytics.android.Crashlytics import com.crashlytics.android.Crashlytics
import com.github.shadowsocks.App.Companion.app import com.github.shadowsocks.App.Companion.app
...@@ -64,7 +64,7 @@ class VpnRequestActivity : AppCompatActivity(), ShadowsocksConnection.Interface ...@@ -64,7 +64,7 @@ class VpnRequestActivity : AppCompatActivity(), ShadowsocksConnection.Interface
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
if (resultCode == RESULT_OK) app.startService() else { if (resultCode == RESULT_OK) app.startService() else {
Snackbar.make(findViewById(R.id.snackbar), R.string.vpn_permission_denied, Snackbar.LENGTH_LONG).show() Toast.makeText(this, R.string.vpn_permission_denied, Toast.LENGTH_LONG).show()
Crashlytics.log(Log.ERROR, TAG, "Failed to start VpnService from onActivityResult: $data") Crashlytics.log(Log.ERROR, TAG, "Failed to start VpnService from onActivityResult: $data")
} }
finish() finish()
......
...@@ -25,27 +25,29 @@ import android.content.ClipboardManager ...@@ -25,27 +25,29 @@ import android.content.ClipboardManager
import android.content.res.Configuration import android.content.res.Configuration
import android.os.Build import android.os.Build
import android.os.Bundle import android.os.Bundle
import com.google.android.material.snackbar.Snackbar
import com.google.android.material.textfield.TextInputLayout
import androidx.core.content.ContextCompat
import androidx.appcompat.app.AlertDialog
import androidx.recyclerview.widget.DefaultItemAnimator
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import androidx.appcompat.widget.Toolbar
import androidx.recyclerview.widget.ItemTouchHelper
import android.text.Editable import android.text.Editable
import android.text.TextWatcher import android.text.TextWatcher
import android.view.* import android.view.*
import android.widget.* import android.widget.*
import androidx.appcompat.app.AlertDialog
import androidx.appcompat.widget.Toolbar
import androidx.core.content.ContextCompat
import androidx.core.content.getSystemService import androidx.core.content.getSystemService
import androidx.recyclerview.widget.DefaultItemAnimator
import androidx.recyclerview.widget.ItemTouchHelper
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.github.shadowsocks.App.Companion.app import com.github.shadowsocks.App.Companion.app
import com.github.shadowsocks.MainActivity import com.github.shadowsocks.MainActivity
import com.github.shadowsocks.R import com.github.shadowsocks.R
import com.github.shadowsocks.ToolbarFragment import com.github.shadowsocks.ToolbarFragment
import com.github.shadowsocks.bg.BaseService import com.github.shadowsocks.bg.BaseService
import com.github.shadowsocks.utils.* import com.github.shadowsocks.utils.Subnet
import com.github.shadowsocks.utils.asIterable
import com.github.shadowsocks.utils.printLog
import com.github.shadowsocks.utils.resolveResourceId
import com.github.shadowsocks.widget.UndoSnackbarManager import com.github.shadowsocks.widget.UndoSnackbarManager
import com.google.android.material.textfield.TextInputLayout
import java.net.IDN import java.net.IDN
import java.net.MalformedURLException import java.net.MalformedURLException
import java.net.URL import java.net.URL
...@@ -366,12 +368,12 @@ class CustomRulesFragment : ToolbarFragment(), Toolbar.OnMenuItemClickListener, ...@@ -366,12 +368,12 @@ class CustomRulesFragment : ToolbarFragment(), Toolbar.OnMenuItemClickListener,
toolbar.setTitle(R.string.custom_rules) toolbar.setTitle(R.string.custom_rules)
toolbar.inflateMenu(R.menu.custom_rules_menu) toolbar.inflateMenu(R.menu.custom_rules_menu)
toolbar.setOnMenuItemClickListener(this) toolbar.setOnMenuItemClickListener(this)
val activity = requireActivity() val activity = activity as MainActivity
list = view.findViewById(R.id.list) list = view.findViewById(R.id.list)
list.layoutManager = LinearLayoutManager(activity, RecyclerView.VERTICAL, false) list.layoutManager = LinearLayoutManager(activity, RecyclerView.VERTICAL, false)
list.itemAnimator = DefaultItemAnimator() list.itemAnimator = DefaultItemAnimator()
list.adapter = adapter list.adapter = adapter
undoManager = UndoSnackbarManager(activity.findViewById(R.id.snackbar), adapter::undo) undoManager = UndoSnackbarManager(activity.snackbar, adapter::undo)
ItemTouchHelper(object : ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.START or ItemTouchHelper.END) { ItemTouchHelper(object : ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.START or ItemTouchHelper.END) {
override fun getSwipeDirs(recyclerView: RecyclerView, viewHolder: RecyclerView.ViewHolder): Int = override fun getSwipeDirs(recyclerView: RecyclerView, viewHolder: RecyclerView.ViewHolder): Int =
if (isEnabled && selectedItems.isEmpty()) super.getSwipeDirs(recyclerView, viewHolder) else 0 if (isEnabled && selectedItems.isEmpty()) super.getSwipeDirs(recyclerView, viewHolder) else 0
...@@ -422,8 +424,7 @@ class CustomRulesFragment : ToolbarFragment(), Toolbar.OnMenuItemClickListener, ...@@ -422,8 +424,7 @@ class CustomRulesFragment : ToolbarFragment(), Toolbar.OnMenuItemClickListener,
try { try {
check(adapter.addToProxy(clipboard.primaryClip!!.getItemAt(0).text.toString()) != null) check(adapter.addToProxy(clipboard.primaryClip!!.getItemAt(0).text.toString()) != null)
} catch (exc: Exception) { } catch (exc: Exception) {
Snackbar.make(requireActivity().findViewById(R.id.snackbar), R.string.action_import_err, (activity as MainActivity).snackbar().setText(R.string.action_import_err).show()
Snackbar.LENGTH_LONG).show()
printLog(exc) printLog(exc)
} }
true true
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment