80 lines
3.2 KiB
Kotlin
80 lines
3.2 KiB
Kotlin
package be.mygod.vpnhotspot
|
|
|
|
import android.content.ComponentName
|
|
import android.content.ServiceConnection
|
|
import android.databinding.DataBindingUtil
|
|
import android.os.Bundle
|
|
import android.os.IBinder
|
|
import android.support.design.internal.BottomNavigationMenuView
|
|
import android.support.design.widget.BottomNavigationView
|
|
import android.support.v4.app.Fragment
|
|
import android.support.v4.content.ContextCompat
|
|
import android.support.v7.app.AppCompatActivity
|
|
import android.view.Gravity
|
|
import android.view.MenuItem
|
|
import be.mygod.vpnhotspot.client.ClientMonitorService
|
|
import be.mygod.vpnhotspot.client.ClientsFragment
|
|
import be.mygod.vpnhotspot.databinding.ActivityMainBinding
|
|
import be.mygod.vpnhotspot.manage.TetheringFragment
|
|
import be.mygod.vpnhotspot.util.ServiceForegroundConnector
|
|
import q.rorbin.badgeview.QBadgeView
|
|
|
|
class MainActivity : AppCompatActivity(), BottomNavigationView.OnNavigationItemSelectedListener, ServiceConnection {
|
|
private lateinit var binding: ActivityMainBinding
|
|
private lateinit var badge: QBadgeView
|
|
private var clients: ClientMonitorService.Binder? = null
|
|
|
|
override fun onCreate(savedInstanceState: Bundle?) {
|
|
super.onCreate(savedInstanceState)
|
|
binding = DataBindingUtil.setContentView(this, R.layout.activity_main)
|
|
binding.navigation.setOnNavigationItemSelectedListener(this)
|
|
if (savedInstanceState == null) displayFragment(TetheringFragment())
|
|
badge = QBadgeView(this)
|
|
badge.bindTarget((binding.navigation.getChildAt(0) as BottomNavigationMenuView).getChildAt(1))
|
|
badge.badgeBackgroundColor = ContextCompat.getColor(this, R.color.colorAccent)
|
|
badge.badgeTextColor = ContextCompat.getColor(this, R.color.primary_text_default_material_light)
|
|
badge.badgeGravity = Gravity.TOP or Gravity.CENTER_HORIZONTAL
|
|
badge.setGravityOffset(16f, 0f, true)
|
|
ServiceForegroundConnector(this, this, ClientMonitorService::class)
|
|
}
|
|
|
|
override fun onNavigationItemSelected(item: MenuItem) = when (item.itemId) {
|
|
R.id.navigation_clients -> {
|
|
if (!item.isChecked) {
|
|
item.isChecked = true
|
|
displayFragment(ClientsFragment())
|
|
}
|
|
true
|
|
}
|
|
R.id.navigation_tethering -> {
|
|
if (!item.isChecked) {
|
|
item.isChecked = true
|
|
displayFragment(TetheringFragment())
|
|
}
|
|
true
|
|
}
|
|
R.id.navigation_settings -> {
|
|
if (!item.isChecked) {
|
|
item.isChecked = true
|
|
displayFragment(SettingsPreferenceFragment())
|
|
}
|
|
true
|
|
}
|
|
else -> false
|
|
}
|
|
|
|
override fun onServiceConnected(name: ComponentName?, service: IBinder?) {
|
|
clients = service as ClientMonitorService.Binder
|
|
service.clientsChanged[this] = { badge.badgeNumber = it.size }
|
|
}
|
|
|
|
override fun onServiceDisconnected(name: ComponentName?) {
|
|
val clients = clients ?: return
|
|
this.clients = null
|
|
clients.clientsChanged -= this
|
|
}
|
|
|
|
private fun displayFragment(fragment: Fragment) =
|
|
supportFragmentManager.beginTransaction().replace(R.id.fragmentHolder, fragment).commitAllowingStateLoss()
|
|
}
|