From 2740e852c722b5bb39a19ea41c4a734aeaea7979 Mon Sep 17 00:00:00 2001 From: Patrick Zedler Date: Sat, 28 Sep 2024 14:17:26 +0200 Subject: [PATCH] Unify navigation transitions --- .../patrick/grocy/activity/MainActivity.java | 4 +- .../patrick/grocy/fragment/BaseFragment.java | 165 ++++++------------ .../grocy/fragment/OverviewStartFragment.java | 12 ++ .../zedler/patrick/grocy/util/NavUtil.java | 30 ++-- app/src/main/res/layout/fragment_about.xml | 2 +- .../res/layout/fragment_choose_product.xml | 3 +- .../fragment_chore_entry_reschedule.xml | 2 +- app/src/main/res/layout/fragment_chores.xml | 2 +- app/src/main/res/layout/fragment_consume.xml | 2 +- .../main/res/layout/fragment_editor_html.xml | 2 +- .../res/layout/fragment_overview_start.xml | 8 +- .../res/layout/fragment_stock_overview.xml | 2 +- app/src/main/res/values/themes.xml | 2 +- 13 files changed, 97 insertions(+), 139 deletions(-) diff --git a/app/src/main/java/xyz/zedler/patrick/grocy/activity/MainActivity.java b/app/src/main/java/xyz/zedler/patrick/grocy/activity/MainActivity.java index 52147c9e3..bcbd78ca9 100644 --- a/app/src/main/java/xyz/zedler/patrick/grocy/activity/MainActivity.java +++ b/app/src/main/java/xyz/zedler/patrick/grocy/activity/MainActivity.java @@ -560,9 +560,7 @@ public void updateGrocyApi() { @NonNull public BaseFragment getCurrentFragment() { - Fragment navHostFragment = fragmentManager.findFragmentById(R.id.fragment_main_nav_host); - assert navHostFragment != null; - return (BaseFragment) navHostFragment.getChildFragmentManager().getFragments().get(0); + return navUtil.getCurrentFragment(); } private void replaceFabIcon(Drawable icon, String tag, boolean animated) { diff --git a/app/src/main/java/xyz/zedler/patrick/grocy/fragment/BaseFragment.java b/app/src/main/java/xyz/zedler/patrick/grocy/fragment/BaseFragment.java index 502fbb24a..5a0477076 100644 --- a/app/src/main/java/xyz/zedler/patrick/grocy/fragment/BaseFragment.java +++ b/app/src/main/java/xyz/zedler/patrick/grocy/fragment/BaseFragment.java @@ -58,7 +58,6 @@ import xyz.zedler.patrick.grocy.util.NavUtil; import xyz.zedler.patrick.grocy.util.ViewUtil; -@SuppressWarnings("EmptyMethod") public class BaseFragment extends Fragment { private MainActivity activity; @@ -112,19 +111,17 @@ public boolean dispatchTouchEvent(MotionEvent event) { return false; } - public void getActivityResult(int requestCode, int resultCode, @Nullable Intent data) { + public void getActivityResult(int requestCode, int resultCode, @Nullable Intent data) {} - } + public void updateUi(boolean animated) {} public boolean isSearchVisible() { return false; } - public void dismissSearch() { - } + public void dismissSearch() {} - public void onBottomSheetDismissed() { - } + public void onBottomSheetDismissed() {} public boolean onBackPressed() { return false; @@ -138,160 +135,110 @@ public boolean onKeyUp(int keyCode, KeyEvent event) { return false; } - public void editObject(Object object) { - } + public void editObject(Object object) {} - public void copyProduct(Product product) { - } + public void copyProduct(Product product) {} - public void deleteObject(int objectId) { - } + public void deleteObject(int objectId) {} - public void deleteShoppingList(ShoppingList shoppingList) { - } + public void deleteShoppingList(ShoppingList shoppingList) {} - public void clearShoppingList(ShoppingList shoppingList, boolean onlyDoneItems) { - } + public void clearShoppingList(ShoppingList shoppingList, boolean onlyDoneItems) {} - public void toggleDoneStatus(ShoppingListItem shoppingListItem) { - } + public void toggleDoneStatus(ShoppingListItem shoppingListItem) {} - public void purchaseItem(ShoppingListItem shoppingListItem) { - } + public void purchaseItem(ShoppingListItem shoppingListItem) {} - public void deleteItem(ShoppingListItem shoppingListItem) { - } + public void deleteItem(ShoppingListItem shoppingListItem) {} - public void editItem(ShoppingListItem shoppingListItem) { - } + public void editItem(ShoppingListItem shoppingListItem) {} - public void trackNextChoreSchedule(ChoreEntry choreEntry) { - } + public void trackNextChoreSchedule(ChoreEntry choreEntry) {} - public void skipNextChoreSchedule(ChoreEntry choreEntry) { - } + public void skipNextChoreSchedule(ChoreEntry choreEntry) {} - public void trackChoreExecutionNow(ChoreEntry choreEntry) { - } + public void trackChoreExecutionNow(ChoreEntry choreEntry) {} - public void rescheduleNextExecution(ChoreEntry choreEntry) { - } + public void rescheduleNextExecution(ChoreEntry choreEntry) {} - public void toggleDoneStatus(Task task) { - } + public void toggleDoneStatus(Task task) {} - public void deleteTask(Task task) { - } + public void deleteTask(Task task) {} - public void editTask(Task task) { - } + public void editTask(Task task) {} - public void deleteRecipePosition(int recipePositionId) { - } + public void deleteRecipePosition(int recipePositionId) {} @Nullable public MutableLiveData getSelectedShoppingListIdLive() { return null; } - public void updateConnectivity(boolean isOnline) { - } + public void updateConnectivity(boolean isOnline) {} - public void selectShoppingList(ShoppingList shoppingList) { - } + public void selectShoppingList(ShoppingList shoppingList) {} - public void selectProduct(Product product) { - } + public void selectProduct(Product product) {} - public void createQuantityUnit(Bundle argsBundle) { - } + public void createQuantityUnit(Bundle argsBundle) {} - public void selectQuantityUnit(QuantityUnit quantityUnit) { - } + public void selectQuantityUnit(QuantityUnit quantityUnit) {} - public void selectQuantityUnit(QuantityUnit quantityUnit, Bundle argsBundle) { - } + public void selectQuantityUnit(QuantityUnit quantityUnit, Bundle argsBundle) {} - public void selectPurchasedDate(String purchasedDate) { - } + public void selectPurchasedDate(String purchasedDate) {} - public void selectDueDate(String dueDate) { - } + public void selectDueDate(String dueDate) {} - public void selectStockLocation(StockLocation stockLocation) { - } + public void selectStockLocation(StockLocation stockLocation) {} - public void selectStockEntry(StockEntry stockEntry) { - } + public void selectStockEntry(StockEntry stockEntry) {} - public void createProductGroup() { - } + public void createProductGroup() {} - public void selectProductGroup(ProductGroup productGroup) { - } + public void selectProductGroup(ProductGroup productGroup) {} - public void createLocation(Bundle args) { - } + public void createLocation(Bundle args) {} - public void selectLocation(Location location) { - } + public void selectLocation(Location location) {} - public void selectLocation(Location location, Bundle argsBundle) { - } + public void selectLocation(Location location, Bundle argsBundle) {} - public void selectStore(Store store) { - } + public void selectStore(Store store) {} - public void selectStore(Store store, boolean pinClicked) { - } + public void selectStore(Store store, boolean pinClicked) {} - public void selectTaskCategory(TaskCategory taskCategory) { - } + public void selectTaskCategory(TaskCategory taskCategory) {} - public void selectUser(User user) { - } + public void selectUser(User user) {} - public void setLanguage(Language language) { - } + public void setLanguage(Language language) {} - public void addBarcodeToNewProduct(String barcode) { - } + public void addBarcodeToNewProduct(String barcode) {} - public void addBarcodeToExistingProduct(String barcode) { - } + public void addBarcodeToExistingProduct(String barcode) {} - public void saveText(Spanned spanned) { - } + public void saveText(Spanned spanned) {} - public void saveInput(String text, Bundle argsBundle) { - } + public void saveInput(String text, Bundle argsBundle) {} - public void performAction(String action, StockItem stockItem) { - } + public void performAction(String action, StockItem stockItem) {} - public void performAction(String action, StockEntry stockEntry) { - } + public void performAction(String action, StockEntry stockEntry) {} - public void updateShortcuts() { - } + public void updateShortcuts() {} - public void updateBarcodeFormats() { - } + public void updateBarcodeFormats() {} - public void startTransaction() { - } + public void startTransaction() {} - public void startTransaction(boolean open) { - } + public void startTransaction(boolean open) {} - public void interruptCurrentProductFlow() { - } + public void interruptCurrentProductFlow() {} - public void enableLoginButtons() { - } + public void enableLoginButtons() {} - public void login(boolean checkVersion) { - } + public void login(boolean checkVersion) {} @NonNull public NavController findNavController() { @@ -406,11 +353,9 @@ NavDestination getPreviousDestination() { return backStackEntry.getDestination(); } - public void setOption(Object value, String option) { - } + public void setOption(Object value, String option) {} interface ObserverListener { - void onChange(Object value); } } diff --git a/app/src/main/java/xyz/zedler/patrick/grocy/fragment/OverviewStartFragment.java b/app/src/main/java/xyz/zedler/patrick/grocy/fragment/OverviewStartFragment.java index 12ad8d9d0..05ff9ab6e 100644 --- a/app/src/main/java/xyz/zedler/patrick/grocy/fragment/OverviewStartFragment.java +++ b/app/src/main/java/xyz/zedler/patrick/grocy/fragment/OverviewStartFragment.java @@ -20,6 +20,7 @@ package xyz.zedler.patrick.grocy.fragment; +import android.animation.LayoutTransition; import android.os.Bundle; import android.os.Handler; import android.os.Looper; @@ -98,6 +99,17 @@ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceStat systemBarBehavior.setUp(); activity.setSystemBarBehavior(systemBarBehavior); + binding.relative.post(() -> { + LayoutTransition transition = new LayoutTransition(); + transition.enableTransitionType(LayoutTransition.CHANGING); + binding.relative.setLayoutTransition(transition); + }); + binding.linearContainer.post(() -> { + LayoutTransition transition = new LayoutTransition(); + transition.enableTransitionType(LayoutTransition.CHANGING); + binding.linearContainer.setLayoutTransition(transition); + }); + ViewUtil.setOnlyOverScrollStretchEnabled(binding.scrollHorizActionsStockOverview); binding.scrollHorizActionsStockOverview.post( () -> { diff --git a/app/src/main/java/xyz/zedler/patrick/grocy/util/NavUtil.java b/app/src/main/java/xyz/zedler/patrick/grocy/util/NavUtil.java index d3243f739..92b5693d9 100644 --- a/app/src/main/java/xyz/zedler/patrick/grocy/util/NavUtil.java +++ b/app/src/main/java/xyz/zedler/patrick/grocy/util/NavUtil.java @@ -30,7 +30,12 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.StringRes; +import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentManager; +import androidx.fragment.app.FragmentManager.OnBackStackChangedListener; +import androidx.lifecycle.Lifecycle; +import androidx.lifecycle.LifecycleObserver; +import androidx.lifecycle.OnLifecycleEvent; import androidx.navigation.NavController; import androidx.navigation.NavController.OnDestinationChangedListener; import androidx.navigation.NavDirections; @@ -44,13 +49,14 @@ import xyz.zedler.patrick.grocy.Constants; import xyz.zedler.patrick.grocy.R; import xyz.zedler.patrick.grocy.activity.MainActivity; +import xyz.zedler.patrick.grocy.fragment.BaseFragment; public class NavUtil { private final String TAG; private final MainActivity activity; - private NavController navController; - private final FragmentManager fragmentManager; + private final NavController navController; + private final NavHostFragment navHostFragment; private final SharedPreferences sharedPrefs; public NavUtil( @@ -60,9 +66,10 @@ public NavUtil( String tag ) { this.activity = mainActivity; - this.fragmentManager = mainActivity.getSupportFragmentManager(); - NavHostFragment navHostFragment = (NavHostFragment) fragmentManager - .findFragmentById(R.id.fragment_main_nav_host); + FragmentManager fragmentManager = mainActivity.getSupportFragmentManager(); + navHostFragment = (NavHostFragment) fragmentManager.findFragmentById( + R.id.fragment_main_nav_host + ); assert navHostFragment != null; navController = navHostFragment.getNavController(); navController.addOnDestinationChangedListener(destinationListener); @@ -70,6 +77,11 @@ public NavUtil( this.TAG = tag; } + @NonNull + public BaseFragment getCurrentFragment() { + return (BaseFragment) navHostFragment.getChildFragmentManager().getFragments().get(0); + } + public void updateStartDestination() { NavInflater navInflater = navController.getNavInflater(); NavGraph graph = navInflater.inflate(R.navigation.navigation_main); @@ -133,19 +145,11 @@ public void navigate(NavDirections directions, @NonNull Navigator.Extras navigat } public void navigateUp() { - if (navController == null) { - NavHostFragment navHostFragment = (NavHostFragment) fragmentManager.findFragmentById( - R.id.fragment_main_nav_host - ); - assert navHostFragment != null; - navController = navHostFragment.getNavController(); - } navController.navigateUp(); activity.binding.bottomAppBar.performShow(); activity.hideKeyboard(); } - @Deprecated public void navigate(@IdRes int destination, @Nullable Bundle arguments) { if (navController == null ) { Log.e(TAG, "navigateFragment: controller is null"); diff --git a/app/src/main/res/layout/fragment_about.xml b/app/src/main/res/layout/fragment_about.xml index 632136664..7697d3b5c 100644 --- a/app/src/main/res/layout/fragment_about.xml +++ b/app/src/main/res/layout/fragment_about.xml @@ -36,7 +36,7 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" - android:background="?attr/colorSurface"> + android:transitionGroup="true"> + android:layout_height="match_parent" + android:transitionGroup="true"> + android:transitionGroup="true"> diff --git a/app/src/main/res/layout/fragment_consume.xml b/app/src/main/res/layout/fragment_consume.xml index 2a8a5ac4c..92f109837 100644 --- a/app/src/main/res/layout/fragment_consume.xml +++ b/app/src/main/res/layout/fragment_consume.xml @@ -44,7 +44,7 @@ + android:transitionGroup="true"> + android:transitionGroup="true"> + android:transitionGroup="true"> diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml index c997c51cc..f6cfbdd8a 100644 --- a/app/src/main/res/values/themes.xml +++ b/app/src/main/res/values/themes.xml @@ -24,7 +24,7 @@