Commit d6373926 authored by Mygod's avatar Mygod

Add helper method MainActivity.snackbar

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