@@ -2,29 +2,16 @@ package com.kelsos.mbrc
22
33import android.content.Context
44import android.content.Intent
5- import android.content.res.Configuration
65import android.os.Bundle
76import android.os.Debug
87import android.view.KeyEvent
9- import android.view.MenuItem
108import android.view.WindowManager
11- import android.widget.ImageView
12- import android.widget.TextView
13- import androidx.annotation.ColorRes
14- import androidx.annotation.StringRes
15- import androidx.appcompat.app.ActionBarDrawerToggle
9+ import androidx.activity.compose.setContent
1610import androidx.appcompat.app.AppCompatActivity
17- import androidx.core.content.ContextCompat
18- import androidx.drawerlayout.widget.DrawerLayout
1911import androidx.lifecycle.lifecycleScope
20- import androidx.navigation.NavController
21- import androidx.navigation.findNavController
22- import androidx.navigation.fragment.NavHostFragment
23- import androidx.navigation.ui.NavigationUI.setupWithNavController
2412import arrow.core.firstOrNone
13+ import com.kelsos.mbrc.app.RemoteApp
2514import com.kelsos.mbrc.common.ui.BaseFragment
26- import com.kelsos.mbrc.databinding.ActivityNavigationBinding
27- import com.kelsos.mbrc.databinding.NavHeaderMainBinding
2815import com.kelsos.mbrc.networking.connections.ConnectionStatus
2916import kotlinx.coroutines.flow.collect
3017import org.koin.androidx.fragment.android.setupKoinFragmentFactory
@@ -33,114 +20,14 @@ import org.koin.core.KoinExperimentalAPI
3320import timber.log.Timber
3421
3522class NavigationActivity : AppCompatActivity () {
36- private lateinit var binding: ActivityNavigationBinding
37-
38- private lateinit var connectText: TextView
39- private lateinit var connect: ImageView
40- private lateinit var drawerToggle: ActionBarDrawerToggle
4123
4224 private val viewmodel: NavigationViewModel by viewModel()
4325
44- private val onNavigatedListener: NavController .OnDestinationChangedListener =
45- NavController .OnDestinationChangedListener { _, destination, _ ->
46- supportActionBar?.title = destination.label
47- val destinationId = destination.id
48-
49- Timber .v(" dest: $destinationId ${destination.label} " )
50-
51- val displayHome = when (destinationId) {
52- R .id.settings_fragment,
53- R .id.help_fragment,
54- R .id.connection_manager_fragment,
55- R .id.genre_artists_fragment,
56- R .id.artist_albums_fragment,
57- R .id.album_tracks_fragment -> false
58- else -> true
59- }
60-
61- drawerToggle.run {
62- syncState()
63- isDrawerIndicatorEnabled = displayHome
64- }
65-
66- val lockMode = if (! displayHome) {
67- DrawerLayout .LOCK_MODE_LOCKED_CLOSED
68- } else {
69- DrawerLayout .LOCK_MODE_UNLOCKED
70- }
71- binding.drawerLayout.setDrawerLockMode(lockMode)
72- }
73-
74- private fun onConnection (connectionStatus : ConnectionStatus ) {
75- Timber .v(" Handling new connection status $connectionStatus " )
76-
77- @StringRes val resId: Int
78- @ColorRes val colorId: Int
79- when (connectionStatus) {
80- ConnectionStatus .Off -> {
81- resId = R .string.drawer__connection__off
82- colorId = R .color.black
83- }
84- ConnectionStatus .On -> {
85- resId = R .string.drawer__connection__on
86- colorId = R .color.accent
87- }
88- ConnectionStatus .Active -> {
89- resId = R .string.drawer__connection__active
90- colorId = R .color.power_on
91- }
92- }
93-
94- connectText.setText(resId)
95- connect.setColorFilter(ContextCompat .getColor(this , colorId))
96- }
97-
98- private fun setupConnectionIndicator () {
99- val header = binding.navView.getHeaderView(0 )
100- val binding = NavHeaderMainBinding .bind(header)
101- connectText = binding.navConnectText
102- connect = binding.connectButton.apply {
103- setOnClickListener {
104- viewmodel.connect()
105- }
106- setOnLongClickListener {
107- viewmodel.connect()
108- true
109- }
110- }
111- }
112-
113- private fun setupToolbar () {
114- setSupportActionBar(binding.toolbar)
115- supportActionBar?.run {
116- setDisplayHomeAsUpEnabled(true )
117- setHomeButtonEnabled(true )
118- }
119- }
120-
121- private fun setupNavigationDrawer () {
122- drawerToggle = ActionBarDrawerToggle (
123- this ,
124- binding.drawerLayout,
125- R .string.drawer_open,
126- R .string.drawer_close
127- )
128- binding.drawerLayout.addDrawerListener(drawerToggle)
129- val navHostFragment = supportFragmentManager.findFragmentById(
130- R .id.main_navigation_fragment
131- ) as NavHostFragment
132- val navController = navHostFragment.navController
133- setupWithNavController(binding.navView, navController)
134- navController.addOnDestinationChangedListener(onNavigatedListener)
135- }
136-
13726 override fun onPostCreate (savedInstanceState : Bundle ? ) {
13827 super .onPostCreate(savedInstanceState)
139- drawerToggle.syncState()
14028 var auto = true
14129 lifecycleScope.launchWhenStarted {
14230 viewmodel.connection.collect { status ->
143- onConnection(status)
14431 if (auto && status != ConnectionStatus .Active ) {
14532 auto = false
14633 viewmodel.connect()
@@ -151,8 +38,14 @@ class NavigationActivity : AppCompatActivity() {
15138
15239 override fun onKeyUp (keyCode : Int , event : KeyEvent ): Boolean {
15340 return when (keyCode) {
154- KeyEvent .KEYCODE_VOLUME_UP -> true
155- KeyEvent .KEYCODE_VOLUME_DOWN -> true
41+ KeyEvent .KEYCODE_VOLUME_UP -> {
42+ viewmodel.incrementVolume()
43+ true
44+ }
45+ KeyEvent .KEYCODE_VOLUME_DOWN -> {
46+ viewmodel.descrementVolume()
47+ true
48+ }
15649 else -> super .onKeyUp(keyCode, event)
15750 }
15851 }
@@ -161,11 +54,9 @@ class NavigationActivity : AppCompatActivity() {
16154 override fun onCreate (savedInstanceState : Bundle ? ) {
16255 setupKoinFragmentFactory()
16356 super .onCreate(savedInstanceState)
164- binding = ActivityNavigationBinding .inflate(layoutInflater)
165- setContentView(binding.root)
166- setupToolbar()
167- setupNavigationDrawer()
168- setupConnectionIndicator()
57+ setContent {
58+ RemoteApp (viewmodel)
59+ }
16960 viewmodel.startService()
17061 }
17162
@@ -185,16 +76,6 @@ class NavigationActivity : AppCompatActivity() {
18576 }
18677 }
18778
188- override fun onNavigateUp (): Boolean {
189- return findNavController(R .id.main_navigation_fragment).navigateUp()
190- }
191-
192- override fun onDestroy () {
193- val navController = findNavController(R .id.main_navigation_fragment)
194- navController.removeOnDestinationChangedListener(onNavigatedListener)
195- super .onDestroy()
196- }
197-
19879 override fun onKeyDown (keyCode : Int , event : KeyEvent ): Boolean {
19980 return when (keyCode) {
20081 KeyEvent .KEYCODE_VOLUME_UP -> {
@@ -209,26 +90,6 @@ class NavigationActivity : AppCompatActivity() {
20990 }
21091 }
21192
212- override fun onOptionsItemSelected (item : MenuItem ): Boolean {
213- // The action bar home/up action should open or close the drawer.
214- // [ActionBarDrawerToggle] will take care of this.
215- if (! drawerToggle.isDrawerIndicatorEnabled) {
216- return findNavController(R .id.main_navigation_fragment).navigateUp()
217- }
218-
219- if (drawerToggle.onOptionsItemSelected(item)) {
220- return true
221- }
222-
223- return super .onOptionsItemSelected(item)
224- }
225-
226- override fun onConfigurationChanged (newConfig : Configuration ) {
227- super .onConfigurationChanged(newConfig)
228- // Pass any configuration change to the drawer toggle.
229- drawerToggle.onConfigurationChanged(newConfig)
230- }
231-
23293 override fun onBackPressed () {
23394 val fragments = supportFragmentManager.fragments
23495
0 commit comments