From 0efaddff23a1fe890b4b602c2d64a6dbffe4bbf4 Mon Sep 17 00:00:00 2001 From: Viktor De Pasquale Date: Thu, 11 Apr 2019 21:17:54 +0200 Subject: [PATCH] Added binding between navigation view and navigation components Removed bunch of code focusing on the hamburger not being stationary --- .../magisk/model/navigation/Navigation.kt | 4 + .../com/topjohnwu/magisk/ui/MainActivity.kt | 143 +++--------------- .../com/topjohnwu/magisk/ui/MainViewModel.kt | 7 +- .../magisk/utils/DataBindingAdapters.kt | 11 ++ app/src/main/res/drawable/ic_menu.xml | 10 ++ app/src/main/res/layout/activity_main.xml | 1 + .../main/res/layout/activity_main_content.xml | 10 +- app/src/main/res/menu/drawer.xml | 12 +- 8 files changed, 70 insertions(+), 128 deletions(-) create mode 100644 app/src/main/java/com/topjohnwu/magisk/utils/DataBindingAdapters.kt create mode 100644 app/src/main/res/drawable/ic_menu.xml diff --git a/app/src/main/java/com/topjohnwu/magisk/model/navigation/Navigation.kt b/app/src/main/java/com/topjohnwu/magisk/model/navigation/Navigation.kt index a1893db53..7a971e5f5 100644 --- a/app/src/main/java/com/topjohnwu/magisk/model/navigation/Navigation.kt +++ b/app/src/main/java/com/topjohnwu/magisk/model/navigation/Navigation.kt @@ -31,4 +31,8 @@ object Navigation { navDirections { destination = R.id.logFragment } } + + object Main { + const val OPEN_NAV = 1 + } } diff --git a/app/src/main/java/com/topjohnwu/magisk/ui/MainActivity.kt b/app/src/main/java/com/topjohnwu/magisk/ui/MainActivity.kt index 3dd4d1b08..de80683ad 100644 --- a/app/src/main/java/com/topjohnwu/magisk/ui/MainActivity.kt +++ b/app/src/main/java/com/topjohnwu/magisk/ui/MainActivity.kt @@ -1,44 +1,26 @@ package com.topjohnwu.magisk.ui import android.content.Intent -import android.os.Build import android.os.Bundle -import android.os.Handler -import android.view.MenuItem -import android.view.View -import androidx.appcompat.app.ActionBarDrawerToggle -import androidx.fragment.app.Fragment -import com.google.android.material.navigation.NavigationView +import androidx.core.view.GravityCompat +import androidx.navigation.ui.setupWithNavController import com.topjohnwu.magisk.ClassMap import com.topjohnwu.magisk.Config -import com.topjohnwu.magisk.Const import com.topjohnwu.magisk.R import com.topjohnwu.magisk.databinding.ActivityMainBinding +import com.topjohnwu.magisk.model.navigation.Navigation import com.topjohnwu.magisk.ui.base.MagiskActivity -import com.topjohnwu.magisk.ui.hide.MagiskHideFragment -import com.topjohnwu.magisk.ui.home.MagiskFragment -import com.topjohnwu.magisk.ui.log.LogFragment -import com.topjohnwu.magisk.ui.module.ModulesFragment -import com.topjohnwu.magisk.ui.module.ReposFragment -import com.topjohnwu.magisk.ui.settings.SettingsFragment -import com.topjohnwu.magisk.ui.superuser.SuperuserFragment import com.topjohnwu.magisk.utils.Utils import com.topjohnwu.net.Networking import com.topjohnwu.superuser.Shell -import kotlinx.android.synthetic.main.toolbar.* import org.koin.androidx.viewmodel.ext.android.viewModel -open class MainActivity : MagiskActivity(), - NavigationView.OnNavigationItemSelectedListener { +open class MainActivity : MagiskActivity() { override val layoutRes: Int = R.layout.activity_main override val viewModel: MainViewModel by viewModel() override val navHostId: Int = R.id.main_nav_host - private val mDrawerHandler = Handler() - private var mDrawerItem: Int = 0 - private var toolbarElevation: Float = 0.toFloat() - /*override fun getDarkTheme(): Int { return R.style.AppTheme_Dark }*/ @@ -51,118 +33,39 @@ open class MainActivity : MagiskActivity(), super.onCreate(savedInstanceState) checkHideSection() - setSupportActionBar(toolbar) + setSupportActionBar(binding.mainInclude.mainToolbar) - val toggle = object : - ActionBarDrawerToggle( - this, - binding.drawerLayout, - toolbar, - R.string.magisk, - R.string.magisk - ) { - override fun onDrawerOpened(drawerView: View) { - super.onDrawerOpened(drawerView) - super.onDrawerSlide(drawerView, 0f) // this disables the arrow @ completed tate - } - - override fun onDrawerSlide(drawerView: View, slideOffset: Float) { - super.onDrawerSlide(drawerView, 0f) // this disables the animation - } - } - - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { - toolbarElevation = toolbar!!.elevation - } - - binding.drawerLayout.addDrawerListener(toggle) - toggle.syncState() - - if (savedInstanceState == null) { - val section = intent.getStringExtra(Const.Key.OPEN_SECTION) - fromShortcut = section != null - navigate(section) - } - - binding.navView.setNavigationItemSelectedListener(this) + binding.navView.setupWithNavController(navController) } override fun onBackPressed() { if (binding.drawerLayout.isDrawerOpen(binding.navView)) { binding.drawerLayout.closeDrawer(binding.navView) - } else if (mDrawerItem != R.id.magisk && !fromShortcut) { - navigate(R.id.magisk) } else { - finish() + super.onBackPressed() } } - override fun onNavigationItemSelected(menuItem: MenuItem): Boolean { - mDrawerHandler.removeCallbacksAndMessages(null) - mDrawerHandler.postDelayed({ navigate(menuItem.itemId) }, 250) - binding.drawerLayout.closeDrawer(binding.navView) - return true + override fun onSimpleEventDispatched(event: Int) { + super.onSimpleEventDispatched(event) + when (event) { + Navigation.Main.OPEN_NAV -> openNav() + } } + private fun openNav() = binding.drawerLayout.openDrawer(GravityCompat.START) + fun checkHideSection() { val menu = binding.navView.menu - menu.findItem(R.id.magiskhide).isVisible = + menu.findItem(R.id.magiskHideFragment).isVisible = Shell.rootAccess() && Config.get(Config.Key.MAGISKHIDE) as Boolean - menu.findItem(R.id.modules).isVisible = Shell.rootAccess() && Config.magiskVersionCode >= 0 - menu.findItem(R.id.downloads).isVisible = (Networking.checkNetworkStatus(this) - && Shell.rootAccess() && Config.magiskVersionCode >= 0) - menu.findItem(R.id.log).isVisible = Shell.rootAccess() - menu.findItem(R.id.superuser).isVisible = Utils.showSuperUser() - } - - @Deprecated("Will be replaced by navigation components") - fun navigate(item: String?) { - var itemId = R.id.magisk - if (item != null) { - when (item) { - "superuser" -> itemId = R.id.superuser - "modules" -> itemId = R.id.modules - "downloads" -> itemId = R.id.downloads - "magiskhide" -> itemId = R.id.magiskhide - "log" -> itemId = R.id.log - "settings" -> itemId = R.id.settings - } - } - navigate(itemId) - } - - @Deprecated("Will be replaced by navigation components") - fun navigate(itemId: Int) { - mDrawerItem = itemId - binding.navView.setCheckedItem(itemId) - when (itemId) { - R.id.magisk -> { - fromShortcut = false - displayFragment(MagiskFragment(), true) - } - R.id.superuser -> displayFragment(SuperuserFragment(), true) - R.id.modules -> displayFragment(ModulesFragment(), true) - R.id.downloads -> displayFragment(ReposFragment(), true) - R.id.magiskhide -> displayFragment(MagiskHideFragment(), true) - R.id.log -> displayFragment(LogFragment(), false) - R.id.settings -> displayFragment(SettingsFragment(), true) - } - } - - @Deprecated("") - private fun displayFragment(navFragment: Fragment, setElevation: Boolean) { - /*supportInvalidateOptionsMenu(); - getSupportFragmentManager() - .beginTransaction() - .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN) - .replace(R.id.content_frame, navFragment) - .commitNow(); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { - toolbar.setElevation(setElevation ? toolbarElevation : 0); - }*/ - } - - companion object { - private var fromShortcut = false + menu.findItem(R.id.modulesFragment).isVisible = + Shell.rootAccess() && Config.magiskVersionCode >= 0 + menu.findItem(R.id.reposFragment).isVisible = + (Networking.checkNetworkStatus(this) && Shell.rootAccess() && Config.magiskVersionCode >= 0) + menu.findItem(R.id.logFragment).isVisible = + Shell.rootAccess() + menu.findItem(R.id.superuserFragment).isVisible = + Utils.showSuperUser() } } diff --git a/app/src/main/java/com/topjohnwu/magisk/ui/MainViewModel.kt b/app/src/main/java/com/topjohnwu/magisk/ui/MainViewModel.kt index c77002d3e..883adca5f 100644 --- a/app/src/main/java/com/topjohnwu/magisk/ui/MainViewModel.kt +++ b/app/src/main/java/com/topjohnwu/magisk/ui/MainViewModel.kt @@ -1,6 +1,11 @@ package com.topjohnwu.magisk.ui +import com.topjohnwu.magisk.model.navigation.Navigation import com.topjohnwu.magisk.ui.base.MagiskViewModel -class MainViewModel : MagiskViewModel() +class MainViewModel : MagiskViewModel() { + + fun navPressed() = Navigation.Main.OPEN_NAV.publish() + +} diff --git a/app/src/main/java/com/topjohnwu/magisk/utils/DataBindingAdapters.kt b/app/src/main/java/com/topjohnwu/magisk/utils/DataBindingAdapters.kt new file mode 100644 index 000000000..f160e46ba --- /dev/null +++ b/app/src/main/java/com/topjohnwu/magisk/utils/DataBindingAdapters.kt @@ -0,0 +1,11 @@ +package com.topjohnwu.magisk.utils + +import android.view.View +import androidx.appcompat.widget.Toolbar +import androidx.databinding.BindingAdapter + + +@BindingAdapter("onNavigationClick") +fun setOnNavigationClickedListener(view: Toolbar, listener: View.OnClickListener) { + view.setNavigationOnClickListener(listener) +} diff --git a/app/src/main/res/drawable/ic_menu.xml b/app/src/main/res/drawable/ic_menu.xml new file mode 100644 index 000000000..d1bac8735 --- /dev/null +++ b/app/src/main/res/drawable/ic_menu.xml @@ -0,0 +1,10 @@ + + + + diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 702fc71b1..d21d436b5 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -19,6 +19,7 @@ tools:openDrawer="start"> diff --git a/app/src/main/res/layout/activity_main_content.xml b/app/src/main/res/layout/activity_main_content.xml index b86eafce2..da5318b8e 100644 --- a/app/src/main/res/layout/activity_main_content.xml +++ b/app/src/main/res/layout/activity_main_content.xml @@ -19,7 +19,15 @@ android:layout_width="match_parent" android:layout_height="wrap_content"> - + diff --git a/app/src/main/res/menu/drawer.xml b/app/src/main/res/menu/drawer.xml index 40a26c32b..6710d2ddc 100644 --- a/app/src/main/res/menu/drawer.xml +++ b/app/src/main/res/menu/drawer.xml @@ -6,17 +6,17 @@ android:id="@+id/main_group"> @@ -28,13 +28,13 @@ android:id="@+id/second_group"> @@ -45,7 +45,7 @@ android:id="@+id/third_group">