Commit bf1961aa authored by Mygod's avatar Mygod

Request bandwidth update on switching tab

parent 7d5197e2
...@@ -84,10 +84,9 @@ class ShadowsocksConnection(private val handler: Handler = Handler(), ...@@ -84,10 +84,9 @@ class ShadowsocksConnection(private val handler: Handler = Handler(),
var bandwidthTimeout = 0L var bandwidthTimeout = 0L
set(value) { set(value) {
val service = service try {
if (bandwidthTimeout != value && service != null) try { if (value > 0) service?.startListeningForBandwidth(serviceCallback, value)
if (value > 0) service.startListeningForBandwidth(serviceCallback, value) else service?.stopListeningForBandwidth(serviceCallback)
else service.stopListeningForBandwidth(serviceCallback)
} catch (_: RemoteException) { } } catch (_: RemoteException) { }
field = value field = value
} }
......
...@@ -149,9 +149,7 @@ object BaseService { ...@@ -149,9 +149,7 @@ object BaseService {
override fun startListeningForBandwidth(cb: IShadowsocksServiceCallback, timeout: Long) { override fun startListeningForBandwidth(cb: IShadowsocksServiceCallback, timeout: Long) {
launch { launch {
val wasEmpty = bandwidthListeners.isEmpty() if (bandwidthListeners.isEmpty() and (bandwidthListeners.put(cb.asBinder(), timeout) == null)) {
if (bandwidthListeners.put(cb.asBinder(), timeout) == null) {
if (wasEmpty) {
check(looper == null) check(looper == null)
looper = launch { loop() } looper = launch { loop() }
} }
...@@ -176,7 +174,6 @@ object BaseService { ...@@ -176,7 +174,6 @@ object BaseService {
cb.trafficUpdated(0, sum) cb.trafficUpdated(0, sum)
} }
} }
}
override fun stopListeningForBandwidth(cb: IShadowsocksServiceCallback) { override fun stopListeningForBandwidth(cb: IShadowsocksServiceCallback) {
launch { launch {
......
...@@ -101,7 +101,7 @@ class MainActivity : AppCompatActivity(), ShadowsocksConnection.Callback, OnPref ...@@ -101,7 +101,7 @@ class MainActivity : AppCompatActivity(), ShadowsocksConnection.Callback, OnPref
if (profileId == 0L) this@MainActivity.stats.updateTraffic( if (profileId == 0L) this@MainActivity.stats.updateTraffic(
stats.txRate, stats.rxRate, stats.txTotal, stats.rxTotal) stats.txRate, stats.rxRate, stats.txTotal, stats.rxTotal)
if (state != BaseService.State.Stopping) { if (state != BaseService.State.Stopping) {
(supportFragmentManager.findFragmentById(R.id.fragment_holder) as? ToolbarFragment) (supportFragmentManager.findFragmentById(R.id.fragment_holder) as? ProfilesFragment)
?.onTrafficUpdated(profileId, stats) ?.onTrafficUpdated(profileId, stats)
} }
} }
...@@ -201,7 +201,10 @@ class MainActivity : AppCompatActivity(), ShadowsocksConnection.Callback, OnPref ...@@ -201,7 +201,10 @@ class MainActivity : AppCompatActivity(), ShadowsocksConnection.Callback, OnPref
override fun onNavigationItemSelected(item: MenuItem): Boolean { override fun onNavigationItemSelected(item: MenuItem): Boolean {
if (item.isChecked) drawer.closeDrawers() else { if (item.isChecked) drawer.closeDrawers() else {
when (item.itemId) { when (item.itemId) {
R.id.profiles -> displayFragment(ProfilesFragment()) R.id.profiles -> {
displayFragment(ProfilesFragment())
connection.bandwidthTimeout = connection.bandwidthTimeout // request stats update
}
R.id.globalSettings -> displayFragment(GlobalSettingsFragment()) R.id.globalSettings -> displayFragment(GlobalSettingsFragment())
R.id.about -> { R.id.about -> {
Core.analytics.logEvent("about", Bundle()) Core.analytics.logEvent("about", Bundle())
......
...@@ -461,7 +461,7 @@ class ProfilesFragment : ToolbarFragment(), Toolbar.OnMenuItemClickListener { ...@@ -461,7 +461,7 @@ class ProfilesFragment : ToolbarFragment(), Toolbar.OnMenuItemClickListener {
} }
} }
override fun onTrafficUpdated(profileId: Long, stats: TrafficStats) { fun onTrafficUpdated(profileId: Long, stats: TrafficStats) {
if (profileId != 0L) { // ignore aggregate stats if (profileId != 0L) { // ignore aggregate stats
statsCache.put(profileId, stats) statsCache.put(profileId, stats)
profilesAdapter.refreshId(profileId) profilesAdapter.refreshId(profileId)
......
...@@ -25,7 +25,6 @@ import android.view.View ...@@ -25,7 +25,6 @@ import android.view.View
import androidx.appcompat.widget.Toolbar import androidx.appcompat.widget.Toolbar
import androidx.core.view.GravityCompat import androidx.core.view.GravityCompat
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import com.github.shadowsocks.aidl.TrafficStats
/** /**
* @author Mygod * @author Mygod
...@@ -40,7 +39,5 @@ open class ToolbarFragment : Fragment() { ...@@ -40,7 +39,5 @@ open class ToolbarFragment : Fragment() {
toolbar.setNavigationOnClickListener { (activity as MainActivity).drawer.openDrawer(GravityCompat.START) } toolbar.setNavigationOnClickListener { (activity as MainActivity).drawer.openDrawer(GravityCompat.START) }
} }
open fun onTrafficUpdated(profileId: Long, stats: TrafficStats) { }
open fun onBackPressed(): Boolean = false open fun onBackPressed(): Boolean = false
} }
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