|
1 | 1 | package com.androidvip.sysctlgui.ui.main |
2 | 2 |
|
3 | | -import android.content.Intent |
4 | 3 | import android.os.Bundle |
5 | | -import android.text.method.LinkMovementMethod |
6 | | -import android.view.Menu |
7 | 4 | import android.view.MenuItem |
8 | 5 | import androidx.appcompat.app.AppCompatActivity |
9 | 6 | import androidx.core.view.WindowCompat |
| 7 | +import androidx.navigation.fragment.NavHostFragment |
| 8 | +import androidx.navigation.ui.AppBarConfiguration |
| 9 | +import androidx.navigation.ui.setupWithNavController |
10 | 10 | import com.androidvip.sysctlgui.R |
11 | | -import com.androidvip.sysctlgui.data.models.SettingsItem |
12 | | -import com.androidvip.sysctlgui.data.utils.RootUtils |
13 | | -import com.androidvip.sysctlgui.databinding.ActivityMainBinding |
14 | | -import com.androidvip.sysctlgui.domain.repository.AppPrefs |
15 | | -import com.androidvip.sysctlgui.domain.usecase.PerformDatabaseMigrationUseCase |
16 | | -import com.androidvip.sysctlgui.helpers.OnSettingsItemClickedListener |
17 | | -import com.androidvip.sysctlgui.ui.export.ExportOptionsActivity |
18 | | -import com.androidvip.sysctlgui.ui.params.list.KernelParamListActivity |
19 | | -import com.androidvip.sysctlgui.ui.params.user.ManageFavoritesParamsActivity |
20 | | -import com.androidvip.sysctlgui.ui.settings.SettingsActivity |
21 | | -import org.koin.android.ext.android.inject |
22 | | -import org.koin.androidx.viewmodel.ext.android.viewModel |
| 11 | +import com.androidvip.sysctlgui.databinding.ActivityMain2Binding |
| 12 | +import com.androidvip.sysctlgui.helpers.Actions |
23 | 13 |
|
24 | | -class MainActivity : AppCompatActivity(), OnSettingsItemClickedListener { |
25 | | - private lateinit var binding: ActivityMainBinding |
26 | | - private val rootUtils: RootUtils by inject() |
27 | | - private val viewModel: MainViewModel by viewModel() |
28 | | - private val prefs: AppPrefs by inject() |
29 | | - private val performDatabaseMigrationUseCase: PerformDatabaseMigrationUseCase by inject() |
| 14 | +class MainActivity : AppCompatActivity() { |
| 15 | + private lateinit var binding: ActivityMain2Binding |
30 | 16 |
|
31 | 17 | override fun onCreate(savedInstanceState: Bundle?) { |
32 | 18 | super.onCreate(savedInstanceState) |
33 | 19 | WindowCompat.setDecorFitsSystemWindows(window, false) |
34 | 20 |
|
35 | | - binding = ActivityMainBinding.inflate(layoutInflater) |
| 21 | + binding = ActivityMain2Binding.inflate(layoutInflater) |
36 | 22 | setContentView(binding.root) |
37 | 23 | setSupportActionBar(binding.toolbar) |
38 | 24 |
|
39 | | - val adapter = HomeItemAdapter(this) |
40 | | - binding.content.recyclerView.adapter = adapter |
41 | | - adapter.submitList(viewModel.getHomeItems()) |
42 | | - |
43 | | - observeUi() |
44 | | - |
45 | | - binding.content.mainAppDescription.movementMethod = LinkMovementMethod.getInstance() |
46 | | - } |
47 | | - |
48 | | - override fun onCreateOptionsMenu(menu: Menu): Boolean { |
49 | | - menuInflater.inflate(R.menu.menu_main, menu) |
50 | | - |
51 | | - return true |
| 25 | + setUpNavigation() |
| 26 | + navigateFromIntent() |
52 | 27 | } |
53 | 28 |
|
54 | 29 | override fun onOptionsItemSelected(item: MenuItem): Boolean { |
55 | 30 | when (item.itemId) { |
56 | 31 | android.R.id.home -> finish() |
57 | 32 |
|
58 | | - R.id.action_settings -> viewModel.doWhenSettingsPressed() |
59 | | - |
60 | 33 | R.id.action_exit -> { |
61 | 34 | moveTaskToBack(true) |
62 | 35 | finish() |
63 | 36 | } |
64 | 37 | } |
65 | 38 |
|
66 | | - return true |
| 39 | + return false // Let fragments have a chance to consume it |
67 | 40 | } |
68 | 41 |
|
69 | | - override fun onDestroy() { |
70 | | - rootUtils.finishProcess() |
71 | | - super.onDestroy() |
| 42 | + override fun onSupportNavigateUp(): Boolean { |
| 43 | + return navHost.navController.navigateUp() || super.onSupportNavigateUp() |
72 | 44 | } |
73 | 45 |
|
74 | | - override fun onSettingsItemClicked(item: SettingsItem, position: Int) { |
75 | | - when (position) { |
76 | | - 0 -> viewModel.doWhenListPressed() |
77 | | - 1 -> viewModel.doWhenBrowsePressed() |
78 | | - 2 -> viewModel.doWhenImportPressed() |
79 | | - 3 -> viewModel.doWhenFavoritesPressed() |
80 | | - } |
81 | | - } |
| 46 | + private fun setUpNavigation() = with(binding) { |
| 47 | + val navController = navHost.navController |
| 48 | + val defaultIds = setOf(R.id.navigationBrowse, R.id.navigationExport, R.id.navigationSettings) |
| 49 | + val appBarConfiguration = AppBarConfiguration(defaultIds) |
82 | 50 |
|
83 | | - private fun observeUi() = viewModel.viewEffect.observe(this) { viewEffect -> |
84 | | - when (viewEffect) { |
85 | | - is MainViewEffect.NavigateToKernelList -> startActivity( |
86 | | - Intent(this, KernelParamListActivity::class.java) |
87 | | - ) |
| 51 | + toolbarLayout.setupWithNavController(toolbar, navController, appBarConfiguration) |
| 52 | + navView.setupWithNavController(navController) |
| 53 | + } |
88 | 54 |
|
89 | | - is MainViewEffect.ExportParams -> { |
90 | | - startActivity(Intent(this, ExportOptionsActivity::class.java)) |
91 | | - } |
| 55 | + private fun navigateFromIntent() { |
| 56 | + val fragmentName = intent.getStringExtra(EXTRA_DESTINATION) ?: return |
| 57 | + when (fragmentName) { |
| 58 | + Actions.BrowseParams.name -> R.id.navigationBrowse |
| 59 | + Actions.ExportParams.name -> R.id.navigationExport |
| 60 | + Actions.OpenSettings.name -> R.id.navigationSettings |
| 61 | + else -> null |
| 62 | + }?.let { id -> |
| 63 | + navHost.navController.navigate(id) |
| 64 | + } |
| 65 | + } |
92 | 66 |
|
93 | | - is MainViewEffect.NavigateToFavorites -> startActivity( |
94 | | - Intent(this, ManageFavoritesParamsActivity::class.java) |
95 | | - ) |
| 67 | + private val navHost: NavHostFragment |
| 68 | + get() = supportFragmentManager.findFragmentById(R.id.navHostFragment) as NavHostFragment |
96 | 69 |
|
97 | | - is MainViewEffect.NavigateToSettings -> { |
98 | | - startActivity(Intent(this, SettingsActivity::class.java)) |
99 | | - } |
100 | | - else -> {} |
101 | | - } |
| 70 | + companion object { |
| 71 | + internal const val EXTRA_DESTINATION = "destination" |
102 | 72 | } |
103 | 73 | } |
0 commit comments