diff --git a/mobile/src/main/java/be/mygod/vpnhotspot/MainActivity.kt b/mobile/src/main/java/be/mygod/vpnhotspot/MainActivity.kt index dd798de5..47b0b862 100644 --- a/mobile/src/main/java/be/mygod/vpnhotspot/MainActivity.kt +++ b/mobile/src/main/java/be/mygod/vpnhotspot/MainActivity.kt @@ -10,6 +10,7 @@ import android.os.IBinder import android.support.customtabs.CustomTabsIntent import android.support.design.internal.BottomNavigationMenuView import android.support.design.widget.BottomNavigationView +import android.support.design.widget.Snackbar import android.support.v4.app.Fragment import android.support.v4.content.ContextCompat import android.support.v7.app.AppCompatActivity @@ -32,6 +33,7 @@ class MainActivity : AppCompatActivity(), BottomNavigationView.OnNavigationItemS .build() } fun launchUrl(url: Uri) = customTabsIntent.launchUrl(this, url) + fun snackbar(text: CharSequence = "") = Snackbar.make(binding.fragmentHolder, text, Snackbar.LENGTH_LONG) override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) diff --git a/mobile/src/main/java/be/mygod/vpnhotspot/SettingsPreferenceFragment.kt b/mobile/src/main/java/be/mygod/vpnhotspot/SettingsPreferenceFragment.kt index 5349b723..360aad82 100644 --- a/mobile/src/main/java/be/mygod/vpnhotspot/SettingsPreferenceFragment.kt +++ b/mobile/src/main/java/be/mygod/vpnhotspot/SettingsPreferenceFragment.kt @@ -7,7 +7,6 @@ import android.os.Build import android.os.Bundle import android.support.v4.content.FileProvider import android.support.v7.preference.Preference -import android.widget.Toast import be.mygod.vpnhotspot.App.Companion.app import be.mygod.vpnhotspot.net.Routing import be.mygod.vpnhotspot.net.UpstreamMonitor @@ -27,10 +26,10 @@ class SettingsPreferenceFragment : PreferenceFragmentCompat() { override fun onCreatePreferencesFix(savedInstanceState: Bundle?, rootKey: String?) { preferenceManager.preferenceDataStore = SharedPreferenceDataStore(app.pref) addPreferencesFromResource(R.xml.pref_settings) + val mainActivity = activity as MainActivity findPreference("service.clean").setOnPreferenceClickListener { - if (Routing.clean() == null) { - Toast.makeText(requireContext(), R.string.root_unavailable, Toast.LENGTH_SHORT).show() - } else app.cleanRoutings() + if (Routing.clean() == null) mainActivity.snackbar().setText(R.string.root_unavailable).show() + else app.cleanRoutings() true } findPreference("misc.logcat").setOnPreferenceClickListener { @@ -90,7 +89,7 @@ class SettingsPreferenceFragment : PreferenceFragmentCompat() { true } findPreference("misc.source").setOnPreferenceClickListener { - (activity as MainActivity).launchUrl(Uri.parse("https://github.com/Mygod/VPNHotspot")) + mainActivity.launchUrl(Uri.parse("https://github.com/Mygod/VPNHotspot")) true } findPreference("misc.donate").setOnPreferenceClickListener { diff --git a/mobile/src/main/java/be/mygod/vpnhotspot/manage/RepeaterManager.kt b/mobile/src/main/java/be/mygod/vpnhotspot/manage/RepeaterManager.kt index 76e47fdd..7074f7d3 100644 --- a/mobile/src/main/java/be/mygod/vpnhotspot/manage/RepeaterManager.kt +++ b/mobile/src/main/java/be/mygod/vpnhotspot/manage/RepeaterManager.kt @@ -16,11 +16,8 @@ import android.support.v7.widget.RecyclerView import android.view.WindowManager import android.widget.EditText import android.widget.Toast -import be.mygod.vpnhotspot.App +import be.mygod.vpnhotspot.* import be.mygod.vpnhotspot.App.Companion.app -import be.mygod.vpnhotspot.BR -import be.mygod.vpnhotspot.R -import be.mygod.vpnhotspot.RepeaterService import be.mygod.vpnhotspot.databinding.ListitemRepeaterBinding import be.mygod.vpnhotspot.net.wifi.P2pSupplicantConfiguration import be.mygod.vpnhotspot.net.wifi.WifiP2pDialog @@ -104,21 +101,23 @@ class RepeaterManager(private val parent: TetheringFragment) : Manager(), Servic val binder = binder val group = binder?.service?.group val ssid = group?.networkName - val context = parent.requireContext() + val mainActivity = parent.activity as MainActivity if (ssid != null) { val wifi = WifiConfiguration() val conf = P2pSupplicantConfiguration() wifi.SSID = ssid wifi.preSharedKey = group.passphrase - if (wifi.preSharedKey == null) wifi.preSharedKey = conf.readPsk() + if (wifi.preSharedKey == null) { + wifi.preSharedKey = conf.readPsk { mainActivity.snackbar(it.message.toString()).show() } + } if (wifi.preSharedKey != null) { var dialog: WifiP2pDialog? = null - dialog = WifiP2pDialog(context, DialogInterface.OnClickListener { _, which -> + dialog = WifiP2pDialog(mainActivity, DialogInterface.OnClickListener { _, which -> when (which) { DialogInterface.BUTTON_POSITIVE -> when (conf.update(dialog!!.config!!)) { - true -> App.app.handler.postDelayed(binder::requestGroupUpdate, 1000) - false -> Toast.makeText(context, R.string.noisy_su_failure, Toast.LENGTH_SHORT).show() - null -> Toast.makeText(context, R.string.root_unavailable, Toast.LENGTH_SHORT).show() + true -> app.handler.postDelayed(binder::requestGroupUpdate, 1000) + false -> mainActivity.snackbar().setText(R.string.noisy_su_failure).show() + null -> mainActivity.snackbar().setText(R.string.root_unavailable).show() } DialogInterface.BUTTON_NEUTRAL -> binder.resetCredentials() } @@ -127,7 +126,7 @@ class RepeaterManager(private val parent: TetheringFragment) : Manager(), Servic return } } - Toast.makeText(context, R.string.repeater_configure_failure, Toast.LENGTH_LONG).show() + mainActivity.snackbar().setText(R.string.repeater_configure_failure).show() } } diff --git a/mobile/src/main/java/be/mygod/vpnhotspot/manage/TetherManager.kt b/mobile/src/main/java/be/mygod/vpnhotspot/manage/TetherManager.kt index 8ee992dd..27933436 100644 --- a/mobile/src/main/java/be/mygod/vpnhotspot/manage/TetherManager.kt +++ b/mobile/src/main/java/be/mygod/vpnhotspot/manage/TetherManager.kt @@ -14,8 +14,8 @@ import android.provider.Settings import android.support.annotation.RequiresApi import android.support.v7.widget.RecyclerView import android.view.View -import android.widget.Toast import be.mygod.vpnhotspot.App.Companion.app +import be.mygod.vpnhotspot.MainActivity import be.mygod.vpnhotspot.R import be.mygod.vpnhotspot.databinding.ListitemInterfaceBinding import be.mygod.vpnhotspot.net.TetherType @@ -43,10 +43,10 @@ abstract class TetherManager private constructor(protected val parent: Tethering override fun onClick(v: View?) { val manager = manager!! - val context = manager.parent.requireContext() - if (Build.VERSION.SDK_INT >= 23 && !Settings.System.canWrite(context)) try { + val mainActivity = manager.parent.activity as MainActivity + if (Build.VERSION.SDK_INT >= 23 && !Settings.System.canWrite(mainActivity)) try { manager.parent.startActivity(Intent(Settings.ACTION_MANAGE_WRITE_SETTINGS, - Uri.parse("package:${context.packageName}"))) + Uri.parse("package:${mainActivity.packageName}"))) return } catch (exc: ActivityNotFoundException) { exc.printStackTrace() @@ -62,7 +62,7 @@ abstract class TetherManager private constructor(protected val parent: Tethering while (cause != null) { cause = cause.cause if (cause != null && cause !is InvocationTargetException) { - Toast.makeText(context, cause.message, Toast.LENGTH_LONG).show() + mainActivity.snackbar(cause.message.toString()).show() ManageBar.start(itemView.context) break } @@ -90,11 +90,8 @@ abstract class TetherManager private constructor(protected val parent: Tethering protected abstract fun stop() override fun onTetheringStarted() = data.notifyChange() - override fun onTetheringFailed() { - app.handler.post { - Toast.makeText(parent.requireContext(), R.string.tethering_manage_failed, Toast.LENGTH_SHORT).show() - } - } + override fun onTetheringFailed() = + (parent.activity as MainActivity).snackbar().setText(R.string.tethering_manage_failed).show() override fun bindTo(viewHolder: RecyclerView.ViewHolder) { (viewHolder as ViewHolder).manager = this diff --git a/mobile/src/main/java/be/mygod/vpnhotspot/net/wifi/P2pSupplicantConfiguration.kt b/mobile/src/main/java/be/mygod/vpnhotspot/net/wifi/P2pSupplicantConfiguration.kt index 44c50802..1cbd98d1 100644 --- a/mobile/src/main/java/be/mygod/vpnhotspot/net/wifi/P2pSupplicantConfiguration.kt +++ b/mobile/src/main/java/be/mygod/vpnhotspot/net/wifi/P2pSupplicantConfiguration.kt @@ -3,7 +3,6 @@ package be.mygod.vpnhotspot.net.wifi import android.net.wifi.WifiConfiguration import android.os.Build import android.util.Log -import android.widget.Toast import be.mygod.vpnhotspot.App.Companion.app import be.mygod.vpnhotspot.util.loggerSu import be.mygod.vpnhotspot.util.noisySu @@ -28,7 +27,7 @@ class P2pSupplicantConfiguration { private val content by lazy { loggerSu("cat /data/misc/wifi/p2p_supplicant.conf") } - fun readPsk(): String? { + fun readPsk(handler: ((RuntimeException) -> Unit)? = null): String? { return try { val match = pskParser.findAll(content ?: return null).single() if (match.groups[2] == null && match.groups[3] == null) "" else { @@ -37,13 +36,13 @@ class P2pSupplicantConfiguration { result } } catch (e: NoSuchElementException) { - Toast.makeText(app, e.message, Toast.LENGTH_LONG).show() + handler?.invoke(e) null } catch (e: RuntimeException) { Crashlytics.log(Log.WARN, TAG, content) e.printStackTrace() Crashlytics.logException(e) - Toast.makeText(app, e.message, Toast.LENGTH_LONG).show() + handler?.invoke(e) null } } diff --git a/mobile/src/main/res/layout/activity_main.xml b/mobile/src/main/res/layout/activity_main.xml index f34b3a4e..ec060fba 100644 --- a/mobile/src/main/res/layout/activity_main.xml +++ b/mobile/src/main/res/layout/activity_main.xml @@ -16,14 +16,20 @@ app:title="@string/app_name" android:id="@+id/toolbar"/> - + app:layout_constraintTop_toBottomOf="@+id/toolbar"> + + + +