From 798fd04be3cc5e0554cb9bafb1c4b1be5788fbb9 Mon Sep 17 00:00:00 2001 From: Luke Zhang Date: Sun, 28 Apr 2019 17:09:36 -0400 Subject: [PATCH] Added fragment ordering option transcation option builder --- .../sample/activities/BottomTabsActivity.kt | 12 ++++++-- .../sample/activities/NavDrawerActivity.kt | 3 +- .../ncapdevi/sample/fragments/BaseFragment.kt | 2 +- .../sample/fragments/FavoritesFragment.kt | 28 ++++++++++++++++++- app/src/main/res/layout/fragment_main.xml | 3 ++ .../com/ncapdevi/fragnav/FragNavController.kt | 2 ++ .../fragnav/FragNavTransactionOptions.kt | 8 +++++- 7 files changed, 52 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/com/ncapdevi/sample/activities/BottomTabsActivity.kt b/app/src/main/java/com/ncapdevi/sample/activities/BottomTabsActivity.kt index 667211d0..59804e04 100644 --- a/app/src/main/java/com/ncapdevi/sample/activities/BottomTabsActivity.kt +++ b/app/src/main/java/com/ncapdevi/sample/activities/BottomTabsActivity.kt @@ -5,6 +5,7 @@ import androidx.fragment.app.Fragment import androidx.appcompat.app.AppCompatActivity import android.util.Log import android.view.MenuItem +import android.view.View import com.ncapdevi.fragnav.FragNavController import com.ncapdevi.fragnav.FragNavLogger import com.ncapdevi.fragnav.FragNavSwitchController @@ -79,8 +80,15 @@ class BottomTabsActivity : AppCompatActivity(), BaseFragment.FragmentNavigation, } - override fun pushFragment(fragment: Fragment) { - fragNavController.pushFragment(fragment) + override fun pushFragment(fragment: Fragment, sharedElementList: List>?) { + val options = FragNavTransactionOptions.newBuilder() + options.reordering = true + sharedElementList?.let { + it.forEach { pair -> + options.addSharedElement(pair) + } + } + fragNavController.pushFragment(fragment, options.build()) } diff --git a/app/src/main/java/com/ncapdevi/sample/activities/NavDrawerActivity.kt b/app/src/main/java/com/ncapdevi/sample/activities/NavDrawerActivity.kt index ea8ed4a9..e22b8759 100644 --- a/app/src/main/java/com/ncapdevi/sample/activities/NavDrawerActivity.kt +++ b/app/src/main/java/com/ncapdevi/sample/activities/NavDrawerActivity.kt @@ -9,6 +9,7 @@ import androidx.appcompat.app.ActionBarDrawerToggle import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.widget.Toolbar import android.view.MenuItem +import android.view.View import com.ncapdevi.fragnav.FragNavController import com.ncapdevi.fragnav.FragNavTransactionOptions import com.ncapdevi.sample.R @@ -95,7 +96,7 @@ class NavDrawerActivity : AppCompatActivity(), NavigationView.OnNavigationItemSe return true } - override fun pushFragment(fragment: Fragment) { + override fun pushFragment(fragment: Fragment, sharedList: List>?) { fragNavController.pushFragment(fragment) } } diff --git a/app/src/main/java/com/ncapdevi/sample/fragments/BaseFragment.kt b/app/src/main/java/com/ncapdevi/sample/fragments/BaseFragment.kt index 2c72f25b..2bc43316 100644 --- a/app/src/main/java/com/ncapdevi/sample/fragments/BaseFragment.kt +++ b/app/src/main/java/com/ncapdevi/sample/fragments/BaseFragment.kt @@ -42,7 +42,7 @@ open class BaseFragment : Fragment() { } interface FragmentNavigation { - fun pushFragment(fragment: Fragment) + fun pushFragment(fragment: Fragment, sharedElementList: List>?= null) } companion object { diff --git a/app/src/main/java/com/ncapdevi/sample/fragments/FavoritesFragment.kt b/app/src/main/java/com/ncapdevi/sample/fragments/FavoritesFragment.kt index 9284b35c..20600f91 100644 --- a/app/src/main/java/com/ncapdevi/sample/fragments/FavoritesFragment.kt +++ b/app/src/main/java/com/ncapdevi/sample/fragments/FavoritesFragment.kt @@ -1,8 +1,13 @@ package com.ncapdevi.sample.fragments import android.annotation.SuppressLint +import android.os.Build import android.os.Bundle +import android.transition.TransitionInflater import android.view.View +import android.widget.CheckBox +import android.widget.EditText +import com.ncapdevi.sample.R /** * Created by niccapdevila on 3/26/16. @@ -12,8 +17,29 @@ class FavoritesFragment : BaseFragment() { @SuppressLint("SetTextI18n") override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + sharedElementEnterTransition = TransitionInflater.from(context).inflateTransition( + android.R.transition.fade + ) + } + } + + val et = view.findViewById(R.id.edit_text) + val cb = view.findViewById(R.id.checkbox) + + val list = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + listOf>( + Pair(et, et.transitionName), + Pair(cb, cb.transitionName) + ) + } else { + listOf() + } + btn.setOnClickListener { - mFragmentNavigation.pushFragment(FavoritesFragment.newInstance(mInt + 1)) + mFragmentNavigation.pushFragment(newInstance(mInt + 1), list) } btn.text = """${javaClass.simpleName} $mInt""" } diff --git a/app/src/main/res/layout/fragment_main.xml b/app/src/main/res/layout/fragment_main.xml index 34bc408f..5e114948 100644 --- a/app/src/main/res/layout/fragment_main.xml +++ b/app/src/main/res/layout/fragment_main.xml @@ -13,12 +13,15 @@ android:layout_height="wrap_content" /> diff --git a/frag-nav/src/main/java/com/ncapdevi/fragnav/FragNavController.kt b/frag-nav/src/main/java/com/ncapdevi/fragnav/FragNavController.kt index 31ac8b54..5caafc74 100644 --- a/frag-nav/src/main/java/com/ncapdevi/fragnav/FragNavController.kt +++ b/frag-nav/src/main/java/com/ncapdevi/fragnav/FragNavController.kt @@ -684,6 +684,8 @@ class FragNavController constructor(private val fragmentManger: FragmentManager, options.breadCrumbTitle != null -> setBreadCrumbTitle(options.breadCrumbTitle) options.breadCrumbShortTitle != null -> setBreadCrumbShortTitle(options.breadCrumbShortTitle) } + + setReorderingAllowed(options.reordering) } } } diff --git a/frag-nav/src/main/java/com/ncapdevi/fragnav/FragNavTransactionOptions.kt b/frag-nav/src/main/java/com/ncapdevi/fragnav/FragNavTransactionOptions.kt index 0c79b7cd..0d0fe1b8 100644 --- a/frag-nav/src/main/java/com/ncapdevi/fragnav/FragNavTransactionOptions.kt +++ b/frag-nav/src/main/java/com/ncapdevi/fragnav/FragNavTransactionOptions.kt @@ -23,7 +23,7 @@ class FragNavTransactionOptions private constructor(builder: Builder) { val breadCrumbTitle: String? = builder.breadCrumbTitle val breadCrumbShortTitle: String? = builder.breadCrumbShortTitle val allowStateLoss: Boolean = builder.allowStateLoss - + val reordering: Boolean = builder.reordering class Builder { var sharedElements: MutableList> = mutableListOf() @@ -36,6 +36,7 @@ class FragNavTransactionOptions private constructor(builder: Builder) { var breadCrumbTitle: String? = null var breadCrumbShortTitle: String? = null var allowStateLoss = false + var reordering = false fun addSharedElement(element: Pair): Builder { sharedElements.add(element) @@ -85,6 +86,11 @@ class FragNavTransactionOptions private constructor(builder: Builder) { return this } + fun allowReordering(reorder: Boolean): Builder { + reordering = reorder + return this + } + fun build(): FragNavTransactionOptions { return FragNavTransactionOptions(this) }