Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,8 @@ android {
}

dependencies {
implementation project(':navigation')
implementation project(':navigation-conductor')
implementation project(':navigation-fragmentx')
implementation Deps.archNavigationFragment
Deps.supportLibs.each { implementation it }

Expand Down
17 changes: 12 additions & 5 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,6 @@
android:launchMode="singleTask"
android:theme="@style/AppTheme"
android:windowSoftInputMode="adjustResize">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<nav-graph android:value="@navigation/controller" />
</activity>

Expand All @@ -31,5 +26,17 @@
android:windowSoftInputMode="adjustResize">
<nav-graph android:value="@navigation/fragment" />
</activity>
<activity
android:name=".FragmentXActivity"
android:label="@string/app_name"
android:launchMode="singleTask"
android:theme="@style/AppTheme"
android:windowSoftInputMode="adjustResize">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package com.prolificinteractive.conductornav

import android.os.Bundle
import android.support.v7.app.AppCompatActivity
import androidx.appcompat.app.AppCompatActivity
import kotlinx.android.synthetic.main.activity_controller.*

class ControllerActivity : AppCompatActivity() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import com.prolificinteractive.conductornav.util.findNavController
import kotlinx.android.extensions.CacheImplementation
import kotlinx.android.extensions.ContainerOptions
import kotlinx.android.extensions.LayoutContainer
import kotlinx.android.synthetic.main.controller_navigation_demo.toolbar as toolbar
import kotlinx.android.synthetic.main.controller_navigation_demo.*

@ContainerOptions(cache = CacheImplementation.NO_CACHE)
Expand All @@ -37,7 +38,7 @@ class DemoController(args: Bundle) : Controller(args), LayoutContainer {
}

view.setBackgroundColor(ColorUtil.getMaterialColor(resources!!, index))
midText.text = resources!!.getString(R.string.navigation_title, index)
midText.text = resources!!.getString(R.string.navigation_title, "View ", index)

nextBtn.setOnClickListener {
navController.navigate(DemoControllerDirections
Expand All @@ -50,7 +51,7 @@ class DemoController(args: Bundle) : Controller(args), LayoutContainer {
}

popToRootBtn.setOnClickListener {
navController.popBackStack(R.id.firstController, true)
navController.popBackStack(R.id.firstController, false)
}

toolbar.title = resources!!.getString(R.string.controller_title)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
package com.prolificinteractive.conductornav

import android.os.Bundle
import android.support.v4.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.navigation.NavController
import androidx.navigation.fragment.NavHostFragment.findNavController
import androidx.navigation.ui.onNavDestinationSelected
Expand Down Expand Up @@ -41,7 +41,7 @@ class DemoFragment : Fragment() {
}

popToRootBtn.setOnClickListener {
navController.popBackStack(R.id.firstController, true)
navController.popBackStack(R.id.firstFragment, false)
}

toolbar.title = resources.getString(R.string.fragment_title)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package com.prolificinteractive.conductornav

import android.os.Bundle
import android.support.v7.app.AppCompatActivity
import androidx.appcompat.app.AppCompatActivity

class FragmentActivity : AppCompatActivity() {

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
package com.prolificinteractive.conductornav

import android.os.Bundle
import android.util.Log
import android.view.MenuItem
import androidx.appcompat.app.AppCompatActivity
import androidx.navigation.NavController
import androidx.navigation.NavOptions
import androidx.navigation.findNavController
import kotlinx.android.synthetic.main.activity_fragmentx.*

class FragmentXActivity : AppCompatActivity() {

private val navController: NavController by lazy { findNavController(R.id.navHost) }

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)

setContentView(R.layout.activity_fragmentx)

bottom_navigation.setOnNavigationItemSelectedListener { item ->
onNavDestinationSelected(item, navController, false)
}

navController.addOnNavigatedListener { _, destination ->
val destinationId = destination.id
val menu = bottom_navigation.menu
var h = 0
val size = menu.size()
while (h < size) {
val item = menu.getItem(h)
if (item.itemId == destinationId) {
item.isChecked = true
}
h++
}
}
}

override fun onBackPressed() {
if (!navController.popBackStack()) {
super.onBackPressed()
}
}

companion object {
internal fun onNavDestinationSelected(item: MenuItem,
navController: NavController, popUp: Boolean): Boolean {
val builder = NavOptions.Builder()
.setLaunchSingleTop(true)
.setEnterAnim(androidx.navigation.ui.R.anim.nav_default_enter_anim)
.setExitAnim(androidx.navigation.ui.R.anim.nav_default_exit_anim)
.setPopEnterAnim(androidx.navigation.ui.R.anim.nav_default_pop_enter_anim)
.setPopExitAnim(androidx.navigation.ui.R.anim.nav_default_pop_exit_anim)
if (popUp) {
builder.setPopUpTo(navController.graph.startDestination, false)
}
val options = builder.build()
return try {
//TODO provide proper API instead of using Exceptions as Control-Flow.
navController.navigate(item.itemId, null, options)
true
} catch (e: IllegalArgumentException) {
Log.e("FragmentXActivity", e.message, e)
false
}
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
package com.prolificinteractive.conductornav.fragments

import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.navigation.NavController
import androidx.navigation.NavDirections
import androidx.navigation.fragment.NavHostFragment
import com.prolificinteractive.conductornav.R
import com.prolificinteractive.conductornav.util.ColorUtil
import kotlinx.android.synthetic.main.fragment_main.*

abstract class BaseFragment : Fragment() {

internal var index = 0

abstract val nextDirections: NavDirections

abstract val rootId: Int

val navController: NavController by lazy { NavHostFragment.findNavController(this) }

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val args = arguments
if (args != null) {
index = args.getInt(ARGS_INSTANCE)
}
}

override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
return inflater.inflate(R.layout.fragment_main, container, false)
}

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)

val color = ColorUtil.getMaterialColor(resources, index)

view.setBackgroundColor(color)
toolbar.setBackgroundColor(color)
toolbar.inflateMenu(R.menu.fragmentx)
toolbar.setOnMenuItemClickListener { navController.navigate(it.itemId); true }

midText.text = resources.getString(R.string.navigation_title, this::class.java.simpleName, index)

upBtn.setOnClickListener {
navController.popBackStack()
}

nextBtn.setOnClickListener {
navController.navigate(nextDirections)
}

popToRootBtn.setOnClickListener {
navController.popBackStack(rootId, false)
}
}

companion object {
val ARGS_INSTANCE = "com.ncapdevi.sample.argsInstance"
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package com.prolificinteractive.conductornav.fragments

import androidx.navigation.NavDirections
import com.prolificinteractive.conductornav.R

class FavoritesFragment : BaseFragment() {
override val nextDirections: NavDirections
get() = FavoritesFragmentDirections.toNextFavoritesFragment()
.setComNcapdeviSampleArgsInstance(index + 1)

override val rootId: Int
get() = R.id.favoritesFragment
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package com.prolificinteractive.conductornav.fragments

import androidx.navigation.NavDirections
import com.prolificinteractive.conductornav.R

class FoodFragment : BaseFragment() {
override val nextDirections: NavDirections
get() = FoodFragmentDirections.toNextFoodFragment()
.setComNcapdeviSampleArgsInstance(index + 1)

override val rootId: Int
get() = R.id.foodFragment
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package com.prolificinteractive.conductornav.fragments

import androidx.navigation.NavDirections
import com.prolificinteractive.conductornav.R

class FriendsFragment : BaseFragment() {

override val nextDirections: NavDirections
get() = FriendsFragmentDirections.toNextFriendsFragment()
.setComNcapdeviSampleArgsInstance(index + 1)

override val rootId: Int
get() = R.id.friendsFragment

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package com.prolificinteractive.conductornav.fragments

import androidx.navigation.NavDirections
import com.prolificinteractive.conductornav.R

class NearbyFragment : BaseFragment() {

override val nextDirections: NavDirections
get() = NearbyFragmentDirections.toNextNearbyFragment()
.setComNcapdeviSampleArgsInstance(index + 1)

override val rootId: Int
get() = R.id.nearbyFragment
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package com.prolificinteractive.conductornav.fragments

import androidx.navigation.NavDirections
import com.prolificinteractive.conductornav.R

class RecentsFragment : BaseFragment() {

override val nextDirections: NavDirections
get() = RecentsFragmentDirections.toNextRecentsFragment()
.setComNcapdeviSampleArgsInstance(index + 1)

override val rootId: Int
get() = R.id.recentsFragment

}
9 changes: 9 additions & 0 deletions app/src/main/res/drawable/ic_favorites.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
android:fillColor="#FF000000"
android:pathData="M12,21.35l-1.45,-1.32C5.4,15.36 2,12.28 2,8.5 2,5.42 4.42,3 7.5,3c1.74,0 3.41,0.81 4.5,2.09C13.09,3.81 14.76,3 16.5,3 19.58,3 22,5.42 22,8.5c0,3.78 -3.4,6.86 -8.55,11.54L12,21.35z"/>
</vector>
9 changes: 9 additions & 0 deletions app/src/main/res/drawable/ic_food.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
android:fillColor="#FF000000"
android:pathData="M8.1,13.34l2.83,-2.83L3.91,3.5c-1.56,1.56 -1.56,4.09 0,5.66l4.19,4.18zM14.88,11.53c1.53,0.71 3.68,0.21 5.27,-1.38 1.91,-1.91 2.28,-4.65 0.81,-6.12 -1.46,-1.46 -4.2,-1.1 -6.12,0.81 -1.59,1.59 -2.09,3.74 -1.38,5.27L3.7,19.87l1.41,1.41L12,14.41l6.88,6.88 1.41,-1.41L13.41,13l1.47,-1.47z"/>
</vector>
9 changes: 9 additions & 0 deletions app/src/main/res/drawable/ic_nearby.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
android:fillColor="#FF000000"
android:pathData="M12,2C8.13,2 5,5.13 5,9c0,5.25 7,13 7,13s7,-7.75 7,-13c0,-3.87 -3.13,-7 -7,-7zM12,11.5c-1.38,0 -2.5,-1.12 -2.5,-2.5s1.12,-2.5 2.5,-2.5 2.5,1.12 2.5,2.5 -1.12,2.5 -2.5,2.5z"/>
</vector>
9 changes: 9 additions & 0 deletions app/src/main/res/drawable/ic_people.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
android:fillColor="#FF000000"
android:pathData="M12,12c2.21,0 4,-1.79 4,-4s-1.79,-4 -4,-4 -4,1.79 -4,4 1.79,4 4,4zM12,14c-2.67,0 -8,1.34 -8,4v2h16v-2c0,-2.66 -5.33,-4 -8,-4z"/>
</vector>
9 changes: 9 additions & 0 deletions app/src/main/res/drawable/ic_recents.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
android:fillColor="#FF000000"
android:pathData="M13,3c-4.97,0 -9,4.03 -9,9L1,12l3.89,3.89 0.07,0.14L9,12L6,12c0,-3.87 3.13,-7 7,-7s7,3.13 7,7 -3.13,7 -7,7c-1.93,0 -3.68,-0.79 -4.94,-2.06l-1.42,1.42C8.27,19.99 10.51,21 13,21c4.97,0 9,-4.03 9,-9s-4.03,-9 -9,-9zM12,8v5l4.28,2.54 0.72,-1.21 -3.5,-2.08L13.5,8L12,8z"/>
</vector>
30 changes: 30 additions & 0 deletions app/src/main/res/layout/activity_fragmentx.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true">

<com.prolificinteractive.fragmentx.archnavigation.NavHostLayout
android:id="@+id/navHost"
android:layout_width="0dp"
android:layout_height="0dp"
app:defaultNavHost="true"
app:layout_constraintBottom_toTopOf="@+id/bottom_navigation"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:navGraph="@navigation/fragmentx" />

<com.google.android.material.bottomnavigation.BottomNavigationView
android:id="@+id/bottom_navigation"
android:layout_width="match_parent"
android:layout_height="60dp"
app:itemBackground="@android:color/white"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:menu="@menu/fragmentx_menu" />

</androidx.constraintlayout.widget.ConstraintLayout>
Loading