diff --git a/mobile/src/main/java/be/mygod/vpnhotspot/manage/TetheringFragment.kt b/mobile/src/main/java/be/mygod/vpnhotspot/manage/TetheringFragment.kt index 9f859cd7..a4911964 100644 --- a/mobile/src/main/java/be/mygod/vpnhotspot/manage/TetheringFragment.kt +++ b/mobile/src/main/java/be/mygod/vpnhotspot/manage/TetheringFragment.kt @@ -25,6 +25,7 @@ import be.mygod.vpnhotspot.net.TetheringManager.localOnlyTetheredIfaces import be.mygod.vpnhotspot.net.TetheringManager.tetheredIfaces import be.mygod.vpnhotspot.util.ServiceForegroundConnector import be.mygod.vpnhotspot.util.broadcastReceiver +import be.mygod.vpnhotspot.util.isNotGone import kotlinx.android.synthetic.main.activity_main.* import timber.log.Timber import java.net.NetworkInterface @@ -95,18 +96,11 @@ class TetheringFragment : Fragment(), ServiceConnection, MenuItem.OnMenuItemClic } private fun updateMonitorList(canMonitor: List = emptyList()) { - val toolbar = requireActivity().toolbar - val menu = toolbar.menu - if (canMonitor.isEmpty()) menu.removeItem(R.id.monitor) else { - var item = menu.findItem(R.id.monitor) - if (item == null) { - toolbar.inflateMenu(R.menu.toolbar_monitor) - item = menu.findItem(R.id.monitor)!! - } - item.subMenu.apply { - clear() - canMonitor.sorted().forEach { add(it).setOnMenuItemClickListener(this@TetheringFragment) } - } + val item = requireActivity().toolbar.menu.findItem(R.id.monitor) ?: return // assuming no longer foreground + item.isNotGone = canMonitor.isNotEmpty() + item.subMenu.apply { + clear() + canMonitor.sorted().forEach { add(it).setOnMenuItemClickListener(this@TetheringFragment) } } } override fun onMenuItemClick(item: MenuItem?): Boolean { @@ -123,9 +117,15 @@ class TetheringFragment : Fragment(), ServiceConnection, MenuItem.OnMenuItemClic binding.interfaces.adapter = adapter adapter.update(emptyList(), emptyList(), emptyList()) ServiceForegroundConnector(this, this, TetheringService::class) + requireActivity().toolbar.inflateMenu(R.menu.toolbar_tethering) return binding.root } + override fun onDestroyView() { + super.onDestroyView() + requireActivity().toolbar.menu.clear() + } + override fun onResume() { super.onResume() if (Build.VERSION.SDK_INT >= 27) ManageBar.Data.notifyChange() @@ -163,9 +163,4 @@ class TetheringFragment : Fragment(), ServiceConnection, MenuItem.OnMenuItemClic binder = null requireContext().unregisterReceiver(receiver) } - - override fun onDestroy() { - updateMonitorList() - super.onDestroy() - } } diff --git a/mobile/src/main/java/be/mygod/vpnhotspot/util/Utils.kt b/mobile/src/main/java/be/mygod/vpnhotspot/util/Utils.kt index b3365485..42f174ef 100644 --- a/mobile/src/main/java/be/mygod/vpnhotspot/util/Utils.kt +++ b/mobile/src/main/java/be/mygod/vpnhotspot/util/Utils.kt @@ -5,6 +5,7 @@ import android.os.Build import android.text.Spannable import android.text.SpannableString import android.text.SpannableStringBuilder +import android.view.MenuItem import android.view.View import android.widget.ImageView import androidx.annotation.DrawableRes @@ -91,6 +92,13 @@ fun Context.stopAndUnbind(connection: ServiceConnection) { unbindService(connection) } +var MenuItem.isNotGone: Boolean + get() = isVisible || isEnabled + set(value) { + isVisible = value + isEnabled = value + } + fun MutableMap.computeIfAbsentCompat(key: K, value: () -> V) = if (Build.VERSION.SDK_INT >= 24) computeIfAbsent(key) { value() } else this[key] ?: value().also { put(key, it) } fun MutableMap.putIfAbsentCompat(key: K, value: V) = if (Build.VERSION.SDK_INT >= 24) diff --git a/mobile/src/main/res/menu/toolbar_monitor.xml b/mobile/src/main/res/menu/toolbar_tethering.xml similarity index 84% rename from mobile/src/main/res/menu/toolbar_monitor.xml rename to mobile/src/main/res/menu/toolbar_tethering.xml index 74c1b8d8..e1799d11 100644 --- a/mobile/src/main/res/menu/toolbar_monitor.xml +++ b/mobile/src/main/res/menu/toolbar_tethering.xml @@ -4,6 +4,8 @@