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