Commit 0efaddff authored by Viktor De Pasquale's avatar Viktor De Pasquale

Added binding between navigation view and navigation components

Removed bunch of code focusing on the hamburger not being stationary
parent 94ba7cb0
...@@ -31,4 +31,8 @@ object Navigation { ...@@ -31,4 +31,8 @@ object Navigation {
navDirections { destination = R.id.logFragment } navDirections { destination = R.id.logFragment }
} }
object Main {
const val OPEN_NAV = 1
}
} }
package com.topjohnwu.magisk.ui package com.topjohnwu.magisk.ui
import android.content.Intent import android.content.Intent
import android.os.Build
import android.os.Bundle import android.os.Bundle
import android.os.Handler import androidx.core.view.GravityCompat
import android.view.MenuItem import androidx.navigation.ui.setupWithNavController
import android.view.View
import androidx.appcompat.app.ActionBarDrawerToggle
import androidx.fragment.app.Fragment
import com.google.android.material.navigation.NavigationView
import com.topjohnwu.magisk.ClassMap import com.topjohnwu.magisk.ClassMap
import com.topjohnwu.magisk.Config import com.topjohnwu.magisk.Config
import com.topjohnwu.magisk.Const
import com.topjohnwu.magisk.R import com.topjohnwu.magisk.R
import com.topjohnwu.magisk.databinding.ActivityMainBinding 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.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.magisk.utils.Utils
import com.topjohnwu.net.Networking import com.topjohnwu.net.Networking
import com.topjohnwu.superuser.Shell import com.topjohnwu.superuser.Shell
import kotlinx.android.synthetic.main.toolbar.*
import org.koin.androidx.viewmodel.ext.android.viewModel import org.koin.androidx.viewmodel.ext.android.viewModel
open class MainActivity : MagiskActivity<MainViewModel, ActivityMainBinding>(), open class MainActivity : MagiskActivity<MainViewModel, ActivityMainBinding>() {
NavigationView.OnNavigationItemSelectedListener {
override val layoutRes: Int = R.layout.activity_main override val layoutRes: Int = R.layout.activity_main
override val viewModel: MainViewModel by viewModel() override val viewModel: MainViewModel by viewModel()
override val navHostId: Int = R.id.main_nav_host 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 { /*override fun getDarkTheme(): Int {
return R.style.AppTheme_Dark return R.style.AppTheme_Dark
}*/ }*/
...@@ -51,118 +33,39 @@ open class MainActivity : MagiskActivity<MainViewModel, ActivityMainBinding>(), ...@@ -51,118 +33,39 @@ open class MainActivity : MagiskActivity<MainViewModel, ActivityMainBinding>(),
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
checkHideSection() 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) binding.navView.setupWithNavController(navController)
toggle.syncState()
if (savedInstanceState == null) {
val section = intent.getStringExtra(Const.Key.OPEN_SECTION)
fromShortcut = section != null
navigate(section)
}
binding.navView.setNavigationItemSelectedListener(this)
} }
override fun onBackPressed() { override fun onBackPressed() {
if (binding.drawerLayout.isDrawerOpen(binding.navView)) { if (binding.drawerLayout.isDrawerOpen(binding.navView)) {
binding.drawerLayout.closeDrawer(binding.navView) binding.drawerLayout.closeDrawer(binding.navView)
} else if (mDrawerItem != R.id.magisk && !fromShortcut) {
navigate(R.id.magisk)
} else { } else {
finish() super.onBackPressed()
} }
} }
override fun onNavigationItemSelected(menuItem: MenuItem): Boolean { override fun onSimpleEventDispatched(event: Int) {
mDrawerHandler.removeCallbacksAndMessages(null) super.onSimpleEventDispatched(event)
mDrawerHandler.postDelayed({ navigate(menuItem.itemId) }, 250) when (event) {
binding.drawerLayout.closeDrawer(binding.navView) Navigation.Main.OPEN_NAV -> openNav()
return true }
} }
private fun openNav() = binding.drawerLayout.openDrawer(GravityCompat.START)
fun checkHideSection() { fun checkHideSection() {
val menu = binding.navView.menu val menu = binding.navView.menu
menu.findItem(R.id.magiskhide).isVisible = menu.findItem(R.id.magiskHideFragment).isVisible =
Shell.rootAccess() && Config.get<Any>(Config.Key.MAGISKHIDE) as Boolean Shell.rootAccess() && Config.get<Any>(Config.Key.MAGISKHIDE) as Boolean
menu.findItem(R.id.modules).isVisible = Shell.rootAccess() && Config.magiskVersionCode >= 0 menu.findItem(R.id.modulesFragment).isVisible =
menu.findItem(R.id.downloads).isVisible = (Networking.checkNetworkStatus(this) Shell.rootAccess() && Config.magiskVersionCode >= 0
&& Shell.rootAccess() && Config.magiskVersionCode >= 0) menu.findItem(R.id.reposFragment).isVisible =
menu.findItem(R.id.log).isVisible = Shell.rootAccess() (Networking.checkNetworkStatus(this) && Shell.rootAccess() && Config.magiskVersionCode >= 0)
menu.findItem(R.id.superuser).isVisible = Utils.showSuperUser() menu.findItem(R.id.logFragment).isVisible =
} Shell.rootAccess()
menu.findItem(R.id.superuserFragment).isVisible =
@Deprecated("Will be replaced by navigation components") Utils.showSuperUser()
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
} }
} }
package com.topjohnwu.magisk.ui package com.topjohnwu.magisk.ui
import com.topjohnwu.magisk.model.navigation.Navigation
import com.topjohnwu.magisk.ui.base.MagiskViewModel import com.topjohnwu.magisk.ui.base.MagiskViewModel
class MainViewModel : MagiskViewModel() class MainViewModel : MagiskViewModel() {
fun navPressed() = Navigation.Main.OPEN_NAV.publish()
}
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)
}
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="#fff"
android:pathData="M3,6H21V8H3V6M3,11H21V13H3V11M3,16H21V18H3V16Z" />
</vector>
...@@ -19,6 +19,7 @@ ...@@ -19,6 +19,7 @@
tools:openDrawer="start"> tools:openDrawer="start">
<include <include
android:id="@+id/main_include"
layout="@layout/activity_main_content" layout="@layout/activity_main_content"
viewModel="@{viewModel}" /> viewModel="@{viewModel}" />
......
...@@ -19,7 +19,15 @@ ...@@ -19,7 +19,15 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content"> android:layout_height="wrap_content">
<include layout="@layout/toolbar" /> <androidx.appcompat.widget.Toolbar
android:id="@+id/main_toolbar"
onNavigationClick="@{() -> viewModel.navPressed()}"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="@color/primary"
app:navigationIcon="@drawable/ic_menu"
app:title="@string/magisk"
app:titleTextColor="@android:color/white" />
</com.google.android.material.appbar.AppBarLayout> </com.google.android.material.appbar.AppBarLayout>
......
...@@ -6,17 +6,17 @@ ...@@ -6,17 +6,17 @@
android:id="@+id/main_group"> android:id="@+id/main_group">
<item <item
android:id="@+id/magisk" android:id="@+id/magiskFragment"
android:icon="@drawable/ic_magisk_outline" android:icon="@drawable/ic_magisk_outline"
android:title="@string/magisk"/> android:title="@string/magisk"/>
<item <item
android:id="@+id/superuser" android:id="@+id/superuserFragment"
android:icon="@drawable/ic_superuser" android:icon="@drawable/ic_superuser"
android:title="@string/superuser" android:title="@string/superuser"
android:visible="false"/> android:visible="false"/>
<item <item
android:id="@+id/magiskhide" android:id="@+id/magiskHideFragment"
android:icon="@drawable/ic_magiskhide" android:icon="@drawable/ic_magiskhide"
android:title="@string/magiskhide" android:title="@string/magiskhide"
android:visible="false"/> android:visible="false"/>
...@@ -28,13 +28,13 @@ ...@@ -28,13 +28,13 @@
android:id="@+id/second_group"> android:id="@+id/second_group">
<item <item
android:id="@+id/modules" android:id="@+id/modulesFragment"
android:icon="@drawable/ic_extension" android:icon="@drawable/ic_extension"
android:title="@string/modules" android:title="@string/modules"
android:visible="false"/> android:visible="false"/>
<item <item
android:id="@+id/downloads" android:id="@+id/reposFragment"
android:icon="@drawable/ic_cloud_download" android:icon="@drawable/ic_cloud_download"
android:title="@string/downloads"/> android:title="@string/downloads"/>
...@@ -45,7 +45,7 @@ ...@@ -45,7 +45,7 @@
android:id="@+id/third_group"> android:id="@+id/third_group">
<item <item
android:id="@+id/log" android:id="@+id/logFragment"
android:icon="@drawable/ic_bug_report" android:icon="@drawable/ic_bug_report"
android:title="@string/log" /> android:title="@string/log" />
......
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