Use Navigation Rail in MainActivity in landscape mode.

This commit is contained in:
Docile-Alligator 2022-06-18 22:54:26 +08:00
parent e0da948d1f
commit 42a935981d
7 changed files with 439 additions and 67 deletions

View File

@ -7,7 +7,6 @@ import android.app.Activity;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.SharedPreferences; import android.content.SharedPreferences;
import android.content.res.ColorStateList;
import android.graphics.Color; import android.graphics.Color;
import android.os.Build; import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
@ -23,8 +22,6 @@ import android.view.Window;
import android.view.WindowManager; import android.view.WindowManager;
import android.view.inputmethod.EditorInfo; import android.view.inputmethod.EditorInfo;
import android.view.inputmethod.InputMethodManager; import android.view.inputmethod.InputMethodManager;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.Toast; import android.widget.Toast;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
@ -51,9 +48,7 @@ import androidx.work.WorkManager;
import com.google.android.material.appbar.AppBarLayout; import com.google.android.material.appbar.AppBarLayout;
import com.google.android.material.appbar.CollapsingToolbarLayout; import com.google.android.material.appbar.CollapsingToolbarLayout;
import com.google.android.material.appbar.MaterialToolbar; import com.google.android.material.appbar.MaterialToolbar;
import com.google.android.material.bottomappbar.BottomAppBar;
import com.google.android.material.dialog.MaterialAlertDialogBuilder; import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
import com.google.android.material.navigation.NavigationView; import com.google.android.material.navigation.NavigationView;
import com.google.android.material.tabs.TabLayout; import com.google.android.material.tabs.TabLayout;
import com.google.android.material.tabs.TabLayoutMediator; import com.google.android.material.tabs.TabLayoutMediator;
@ -98,6 +93,7 @@ import ml.docilealligator.infinityforreddit.bottomsheetfragments.SortTimeBottomS
import ml.docilealligator.infinityforreddit.bottomsheetfragments.SortTypeBottomSheetFragment; import ml.docilealligator.infinityforreddit.bottomsheetfragments.SortTypeBottomSheetFragment;
import ml.docilealligator.infinityforreddit.customtheme.CustomThemeWrapper; import ml.docilealligator.infinityforreddit.customtheme.CustomThemeWrapper;
import ml.docilealligator.infinityforreddit.customviews.LinearLayoutManagerBugFixed; import ml.docilealligator.infinityforreddit.customviews.LinearLayoutManagerBugFixed;
import ml.docilealligator.infinityforreddit.customviews.NavigationWrapper;
import ml.docilealligator.infinityforreddit.events.ChangeDisableSwipingBetweenTabsEvent; import ml.docilealligator.infinityforreddit.events.ChangeDisableSwipingBetweenTabsEvent;
import ml.docilealligator.infinityforreddit.events.ChangeInboxCountEvent; import ml.docilealligator.infinityforreddit.events.ChangeInboxCountEvent;
import ml.docilealligator.infinityforreddit.events.ChangeLockBottomAppBarEvent; import ml.docilealligator.infinityforreddit.events.ChangeLockBottomAppBarEvent;
@ -164,7 +160,7 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb
RecyclerView navDrawerRecyclerView; RecyclerView navDrawerRecyclerView;
@BindView(R.id.tab_layout_main_activity) @BindView(R.id.tab_layout_main_activity)
TabLayout tabLayout; TabLayout tabLayout;
@BindView(R.id.bottom_app_bar_bottom_app_bar) /*@BindView(R.id.bottom_app_bar_bottom_app_bar)
BottomAppBar bottomAppBar; BottomAppBar bottomAppBar;
@BindView(R.id.linear_layout_bottom_app_bar) @BindView(R.id.linear_layout_bottom_app_bar)
LinearLayout linearLayoutBottomAppBar; LinearLayout linearLayoutBottomAppBar;
@ -175,9 +171,9 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb
@BindView(R.id.option_3_bottom_app_bar) @BindView(R.id.option_3_bottom_app_bar)
ImageView option3BottomAppBar; ImageView option3BottomAppBar;
@BindView(R.id.option_4_bottom_app_bar) @BindView(R.id.option_4_bottom_app_bar)
ImageView option4BottomAppBar; ImageView option4BottomAppBar;*/
@BindView(R.id.fab_main_activity) /*@BindView(R.id.fab_main_activity)
FloatingActionButton fab; FloatingActionButton fab;*/
MultiRedditViewModel multiRedditViewModel; MultiRedditViewModel multiRedditViewModel;
SubscribedSubredditViewModel subscribedSubredditViewModel; SubscribedSubredditViewModel subscribedSubredditViewModel;
AccountViewModel accountViewModel; AccountViewModel accountViewModel;
@ -242,6 +238,8 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb
private int fabOption; private int fabOption;
private int inboxCount; private int inboxCount;
private NavigationWrapper navigationWrapper;
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
((Infinity) getApplication()).getAppComponent().inject(this); ((Infinity) getApplication()).getAppComponent().inject(this);
@ -256,6 +254,14 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb
ButterKnife.bind(this); ButterKnife.bind(this);
showBottomAppBar = mSharedPreferences.getBoolean(SharedPreferencesUtils.BOTTOM_APP_BAR_KEY, false);
navigationWrapper = new NavigationWrapper(findViewById(R.id.bottom_app_bar_bottom_app_bar), findViewById(R.id.linear_layout_bottom_app_bar),
findViewById(R.id.option_1_bottom_app_bar), findViewById(R.id.option_2_bottom_app_bar),
findViewById(R.id.option_3_bottom_app_bar), findViewById(R.id.option_4_bottom_app_bar),
findViewById(R.id.fab_main_activity),
findViewById(R.id.navigation_rail), showBottomAppBar);
EventBus.getDefault().register(this); EventBus.getDefault().register(this);
applyCustomTheme(); applyCustomTheme();
@ -279,11 +285,15 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb
int navBarHeight = getNavBarHeight(); int navBarHeight = getNavBarHeight();
if (navBarHeight > 0) { if (navBarHeight > 0) {
CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) fab.getLayoutParams(); if (navigationWrapper.navigationRailView == null) {
params.bottomMargin += navBarHeight; CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) navigationWrapper.floatingActionButton.getLayoutParams();
fab.setLayoutParams(params); params.bottomMargin += navBarHeight;
linearLayoutBottomAppBar.setPadding(0, navigationWrapper.floatingActionButton.setLayoutParams(params);
linearLayoutBottomAppBar.getPaddingTop(), 0, navBarHeight); }
if (navigationWrapper.linearLayoutBottomAppBar != null) {
navigationWrapper.linearLayoutBottomAppBar.setPadding(0,
navigationWrapper.linearLayoutBottomAppBar.getPaddingTop(), 0, navBarHeight);
}
navDrawerRecyclerView.setPadding(0, 0, 0, navBarHeight); navDrawerRecyclerView.setPadding(0, 0, 0, navBarHeight);
} }
} else { } else {
@ -308,7 +318,6 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb
}); });
toggle.syncState(); toggle.syncState();
showBottomAppBar = mSharedPreferences.getBoolean(SharedPreferencesUtils.BOTTOM_APP_BAR_KEY, false);
mBackButtonAction = Integer.parseInt(mSharedPreferences.getString(SharedPreferencesUtils.MAIN_PAGE_BACK_BUTTON_ACTION, "0")); mBackButtonAction = Integer.parseInt(mSharedPreferences.getString(SharedPreferencesUtils.MAIN_PAGE_BACK_BUTTON_ACTION, "0"));
mLockBottomAppBar = mSharedPreferences.getBoolean(SharedPreferencesUtils.LOCK_BOTTOM_APP_BAR, false); mLockBottomAppBar = mSharedPreferences.getBoolean(SharedPreferencesUtils.LOCK_BOTTOM_APP_BAR, false);
mDisableSwipingBetweenTabs = mSharedPreferences.getBoolean(SharedPreferencesUtils.DISABLE_SWIPING_BETWEEN_TABS, false); mDisableSwipingBetweenTabs = mSharedPreferences.getBoolean(SharedPreferencesUtils.DISABLE_SWIPING_BETWEEN_TABS, false);
@ -348,15 +357,16 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb
int backgroundColor = mCustomThemeWrapper.getBackgroundColor(); int backgroundColor = mCustomThemeWrapper.getBackgroundColor();
drawer.setBackgroundColor(backgroundColor); drawer.setBackgroundColor(backgroundColor);
int bottomAppBarIconColor = mCustomThemeWrapper.getBottomAppBarIconColor(); int bottomAppBarIconColor = mCustomThemeWrapper.getBottomAppBarIconColor();
option1BottomAppBar.setColorFilter(bottomAppBarIconColor, android.graphics.PorterDuff.Mode.SRC_IN); navigationWrapper.applyCustomTheme(bottomAppBarIconColor, mCustomThemeWrapper.getBottomAppBarBackgroundColor());
/*option1BottomAppBar.setColorFilter(bottomAppBarIconColor, android.graphics.PorterDuff.Mode.SRC_IN);
option2BottomAppBar.setColorFilter(bottomAppBarIconColor, android.graphics.PorterDuff.Mode.SRC_IN); option2BottomAppBar.setColorFilter(bottomAppBarIconColor, android.graphics.PorterDuff.Mode.SRC_IN);
option3BottomAppBar.setColorFilter(bottomAppBarIconColor, android.graphics.PorterDuff.Mode.SRC_IN); option3BottomAppBar.setColorFilter(bottomAppBarIconColor, android.graphics.PorterDuff.Mode.SRC_IN);
option4BottomAppBar.setColorFilter(bottomAppBarIconColor, android.graphics.PorterDuff.Mode.SRC_IN); option4BottomAppBar.setColorFilter(bottomAppBarIconColor, android.graphics.PorterDuff.Mode.SRC_IN);*/
navigationView.setBackgroundColor(backgroundColor); navigationView.setBackgroundColor(backgroundColor);
applyAppBarLayoutAndCollapsingToolbarLayoutAndToolbarTheme(appBarLayout, collapsingToolbarLayout, toolbar); applyAppBarLayoutAndCollapsingToolbarLayoutAndToolbarTheme(appBarLayout, collapsingToolbarLayout, toolbar);
applyTabLayoutTheme(tabLayout); applyTabLayoutTheme(tabLayout);
bottomAppBar.setBackgroundTint(ColorStateList.valueOf(mCustomThemeWrapper.getBottomAppBarBackgroundColor())); //bottomAppBar.setBackgroundTint(ColorStateList.valueOf());
applyFABTheme(fab); applyFABTheme(navigationWrapper.floatingActionButton);
} }
private void initializeNotificationAndBindView() { private void initializeNotificationAndBindView() {
@ -577,100 +587,140 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb
int option1 = mBottomAppBarSharedPreference.getInt((mAccessToken == null ? "-" : "") + SharedPreferencesUtils.MAIN_ACTIVITY_BOTTOM_APP_BAR_OPTION_1, SharedPreferencesUtils.MAIN_ACTIVITY_BOTTOM_APP_BAR_OPTION_SUBSCRIPTIONS); int option1 = mBottomAppBarSharedPreference.getInt((mAccessToken == null ? "-" : "") + SharedPreferencesUtils.MAIN_ACTIVITY_BOTTOM_APP_BAR_OPTION_1, SharedPreferencesUtils.MAIN_ACTIVITY_BOTTOM_APP_BAR_OPTION_SUBSCRIPTIONS);
int option2 = mBottomAppBarSharedPreference.getInt((mAccessToken == null ? "-" : "") + SharedPreferencesUtils.MAIN_ACTIVITY_BOTTOM_APP_BAR_OPTION_2, SharedPreferencesUtils.MAIN_ACTIVITY_BOTTOM_APP_BAR_OPTION_MULTIREDDITS); int option2 = mBottomAppBarSharedPreference.getInt((mAccessToken == null ? "-" : "") + SharedPreferencesUtils.MAIN_ACTIVITY_BOTTOM_APP_BAR_OPTION_2, SharedPreferencesUtils.MAIN_ACTIVITY_BOTTOM_APP_BAR_OPTION_MULTIREDDITS);
bottomAppBar.setVisibility(View.VISIBLE); //bottomAppBar.setVisibility(View.VISIBLE);
if (optionCount == 2) { if (optionCount == 2) {
linearLayoutBottomAppBar.setWeightSum(3); navigationWrapper.bindOptionDrawableResource(getBottomAppBarOptionDrawableResource(option1), getBottomAppBarOptionDrawableResource(option2));
/*linearLayoutBottomAppBar.setWeightSum(3);
option1BottomAppBar.setVisibility(View.GONE); option1BottomAppBar.setVisibility(View.GONE);
option3BottomAppBar.setVisibility(View.GONE); option3BottomAppBar.setVisibility(View.GONE);
option2BottomAppBar.setImageResource(getBottomAppBarOptionDrawableResource(option1)); option2BottomAppBar.setImageResource(getBottomAppBarOptionDrawableResource(option1));
option4BottomAppBar.setImageResource(getBottomAppBarOptionDrawableResource(option2)); option4BottomAppBar.setImageResource(getBottomAppBarOptionDrawableResource(option2));*/
option2BottomAppBar.setOnClickListener(view -> { if (navigationWrapper.navigationRailView == null) {
bottomAppBarOptionAction(option1); navigationWrapper.option2BottomAppBar.setOnClickListener(view -> {
}); bottomAppBarOptionAction(option1);
});
option4BottomAppBar.setOnClickListener(view -> { navigationWrapper.option4BottomAppBar.setOnClickListener(view -> {
bottomAppBarOptionAction(option2); bottomAppBarOptionAction(option2);
}); });
} else {
navigationWrapper.navigationRailView.setOnItemSelectedListener(item -> {
int itemId = item.getItemId();
if (itemId == R.id.navigation_rail_option_1) {
bottomAppBarOptionAction(option1);
return true;
} else if (itemId == R.id.navigation_rail_option_2) {
bottomAppBarOptionAction(option2);
return true;
}
return false;
});
}
} else { } else {
int option3 = mBottomAppBarSharedPreference.getInt((mAccessToken == null ? "-" : "") + SharedPreferencesUtils.MAIN_ACTIVITY_BOTTOM_APP_BAR_OPTION_3, mAccessToken == null ? SharedPreferencesUtils.MAIN_ACTIVITY_BOTTOM_APP_BAR_OPTION_REFRESH : SharedPreferencesUtils.MAIN_ACTIVITY_BOTTOM_APP_BAR_OPTION_INBOX); int option3 = mBottomAppBarSharedPreference.getInt((mAccessToken == null ? "-" : "") + SharedPreferencesUtils.MAIN_ACTIVITY_BOTTOM_APP_BAR_OPTION_3, mAccessToken == null ? SharedPreferencesUtils.MAIN_ACTIVITY_BOTTOM_APP_BAR_OPTION_REFRESH : SharedPreferencesUtils.MAIN_ACTIVITY_BOTTOM_APP_BAR_OPTION_INBOX);
int option4 = mBottomAppBarSharedPreference.getInt((mAccessToken == null ? "-" : "") + SharedPreferencesUtils.MAIN_ACTIVITY_BOTTOM_APP_BAR_OPTION_4, mAccessToken == null ? SharedPreferencesUtils.MAIN_ACTIVITY_BOTTOM_APP_BAR_OPTION_CHANGE_SORT_TYPE : SharedPreferencesUtils.MAIN_ACTIVITY_BOTTOM_APP_BAR_OPTION_PROFILE); int option4 = mBottomAppBarSharedPreference.getInt((mAccessToken == null ? "-" : "") + SharedPreferencesUtils.MAIN_ACTIVITY_BOTTOM_APP_BAR_OPTION_4, mAccessToken == null ? SharedPreferencesUtils.MAIN_ACTIVITY_BOTTOM_APP_BAR_OPTION_CHANGE_SORT_TYPE : SharedPreferencesUtils.MAIN_ACTIVITY_BOTTOM_APP_BAR_OPTION_PROFILE);
option1BottomAppBar.setImageResource(getBottomAppBarOptionDrawableResource(option1)); navigationWrapper.bindOptionDrawableResource(getBottomAppBarOptionDrawableResource(option1),
option2BottomAppBar.setImageResource(getBottomAppBarOptionDrawableResource(option2)); getBottomAppBarOptionDrawableResource(option2), getBottomAppBarOptionDrawableResource(option3),
option3BottomAppBar.setImageResource(getBottomAppBarOptionDrawableResource(option3)); getBottomAppBarOptionDrawableResource(option4));
option4BottomAppBar.setImageResource(getBottomAppBarOptionDrawableResource(option4));
option1BottomAppBar.setOnClickListener(view -> { /*navigationWrapper.option1BottomAppBar.setImageResource(getBottomAppBarOptionDrawableResource(option1));
bottomAppBarOptionAction(option1); navigationWrapper.option2BottomAppBar.setImageResource(getBottomAppBarOptionDrawableResource(option2));
}); navigationWrapper.option3BottomAppBar.setImageResource(getBottomAppBarOptionDrawableResource(option3));
navigationWrapper.option4BottomAppBar.setImageResource(getBottomAppBarOptionDrawableResource(option4));*/
option2BottomAppBar.setOnClickListener(view -> { if (navigationWrapper.navigationRailView == null) {
bottomAppBarOptionAction(option2); navigationWrapper.option1BottomAppBar.setOnClickListener(view -> {
}); bottomAppBarOptionAction(option1);
});
option3BottomAppBar.setOnClickListener(view -> { navigationWrapper.option2BottomAppBar.setOnClickListener(view -> {
bottomAppBarOptionAction(option3); bottomAppBarOptionAction(option2);
}); });
option4BottomAppBar.setOnClickListener(view -> { navigationWrapper.option3BottomAppBar.setOnClickListener(view -> {
bottomAppBarOptionAction(option4); bottomAppBarOptionAction(option3);
}); });
navigationWrapper.option4BottomAppBar.setOnClickListener(view -> {
bottomAppBarOptionAction(option4);
});
} else {
navigationWrapper.navigationRailView.setOnItemSelectedListener(item -> {
int itemId = item.getItemId();
if (itemId == R.id.navigation_rail_option_1) {
bottomAppBarOptionAction(option1);
return true;
} else if (itemId == R.id.navigation_rail_option_2) {
bottomAppBarOptionAction(option2);
return true;
} else if (itemId == R.id.navigation_rail_option_3) {
bottomAppBarOptionAction(option3);
return true;
} else if (itemId == R.id.navigation_rail_option_4) {
bottomAppBarOptionAction(option4);
return true;
}
return false;
});
}
} }
} else { } else {
CoordinatorLayout.LayoutParams lp = (CoordinatorLayout.LayoutParams) fab.getLayoutParams(); CoordinatorLayout.LayoutParams lp = (CoordinatorLayout.LayoutParams) navigationWrapper.floatingActionButton.getLayoutParams();
lp.setAnchorId(View.NO_ID); lp.setAnchorId(View.NO_ID);
lp.gravity = Gravity.END | Gravity.BOTTOM; lp.gravity = Gravity.END | Gravity.BOTTOM;
fab.setLayoutParams(lp); navigationWrapper.floatingActionButton.setLayoutParams(lp);
} }
fabOption = mBottomAppBarSharedPreference.getInt((mAccessToken == null ? "-" : "") + SharedPreferencesUtils.MAIN_ACTIVITY_BOTTOM_APP_BAR_FAB, fabOption = mBottomAppBarSharedPreference.getInt((mAccessToken == null ? "-" : "") + SharedPreferencesUtils.MAIN_ACTIVITY_BOTTOM_APP_BAR_FAB,
SharedPreferencesUtils.MAIN_ACTIVITY_BOTTOM_APP_BAR_FAB_SUBMIT_POSTS); SharedPreferencesUtils.MAIN_ACTIVITY_BOTTOM_APP_BAR_FAB_SUBMIT_POSTS);
switch (fabOption) { switch (fabOption) {
case SharedPreferencesUtils.MAIN_ACTIVITY_BOTTOM_APP_BAR_FAB_REFRESH: case SharedPreferencesUtils.MAIN_ACTIVITY_BOTTOM_APP_BAR_FAB_REFRESH:
fab.setImageResource(R.drawable.ic_refresh_24dp); navigationWrapper.floatingActionButton.setImageResource(R.drawable.ic_refresh_24dp);
break; break;
case SharedPreferencesUtils.MAIN_ACTIVITY_BOTTOM_APP_BAR_FAB_CHANGE_SORT_TYPE: case SharedPreferencesUtils.MAIN_ACTIVITY_BOTTOM_APP_BAR_FAB_CHANGE_SORT_TYPE:
fab.setImageResource(R.drawable.ic_sort_toolbar_24dp); navigationWrapper.floatingActionButton.setImageResource(R.drawable.ic_sort_toolbar_24dp);
break; break;
case SharedPreferencesUtils.MAIN_ACTIVITY_BOTTOM_APP_BAR_FAB_CHANGE_POST_LAYOUT: case SharedPreferencesUtils.MAIN_ACTIVITY_BOTTOM_APP_BAR_FAB_CHANGE_POST_LAYOUT:
fab.setImageResource(R.drawable.ic_post_layout_24dp); navigationWrapper.floatingActionButton.setImageResource(R.drawable.ic_post_layout_24dp);
break; break;
case SharedPreferencesUtils.MAIN_ACTIVITY_BOTTOM_APP_BAR_FAB_SEARCH: case SharedPreferencesUtils.MAIN_ACTIVITY_BOTTOM_APP_BAR_FAB_SEARCH:
fab.setImageResource(R.drawable.ic_search_24dp); navigationWrapper.floatingActionButton.setImageResource(R.drawable.ic_search_24dp);
break; break;
case SharedPreferencesUtils.MAIN_ACTIVITY_BOTTOM_APP_BAR_FAB_GO_TO_SUBREDDIT: case SharedPreferencesUtils.MAIN_ACTIVITY_BOTTOM_APP_BAR_FAB_GO_TO_SUBREDDIT:
fab.setImageResource(R.drawable.ic_subreddit_24dp); navigationWrapper.floatingActionButton.setImageResource(R.drawable.ic_subreddit_24dp);
break; break;
case SharedPreferencesUtils.MAIN_ACTIVITY_BOTTOM_APP_BAR_FAB_GO_TO_USER: case SharedPreferencesUtils.MAIN_ACTIVITY_BOTTOM_APP_BAR_FAB_GO_TO_USER:
fab.setImageResource(R.drawable.ic_user_24dp); navigationWrapper.floatingActionButton.setImageResource(R.drawable.ic_user_24dp);
break; break;
case SharedPreferencesUtils.MAIN_ACTIVITY_BOTTOM_APP_BAR_FAB_RANDOM: case SharedPreferencesUtils.MAIN_ACTIVITY_BOTTOM_APP_BAR_FAB_RANDOM:
fab.setImageResource(R.drawable.ic_random_24dp); navigationWrapper.floatingActionButton.setImageResource(R.drawable.ic_random_24dp);
break; break;
case SharedPreferencesUtils.MAIN_ACTIVITY_BOTTOM_APP_BAR_FAB_HIDE_READ_POSTS: case SharedPreferencesUtils.MAIN_ACTIVITY_BOTTOM_APP_BAR_FAB_HIDE_READ_POSTS:
if (mAccessToken == null) { if (mAccessToken == null) {
fab.setImageResource(R.drawable.ic_filter_24dp); navigationWrapper.floatingActionButton.setImageResource(R.drawable.ic_filter_24dp);
fabOption = SharedPreferencesUtils.MAIN_ACTIVITY_BOTTOM_APP_BAR_FAB_FILTER_POSTS; fabOption = SharedPreferencesUtils.MAIN_ACTIVITY_BOTTOM_APP_BAR_FAB_FILTER_POSTS;
} else { } else {
fab.setImageResource(R.drawable.ic_hide_read_posts_24dp); navigationWrapper.floatingActionButton.setImageResource(R.drawable.ic_hide_read_posts_24dp);
} }
break; break;
case SharedPreferencesUtils.MAIN_ACTIVITY_BOTTOM_APP_BAR_FAB_FILTER_POSTS: case SharedPreferencesUtils.MAIN_ACTIVITY_BOTTOM_APP_BAR_FAB_FILTER_POSTS:
fab.setImageResource(R.drawable.ic_filter_24dp); navigationWrapper.floatingActionButton.setImageResource(R.drawable.ic_filter_24dp);
break; break;
default: default:
if (mAccessToken == null) { if (mAccessToken == null) {
fab.setImageResource(R.drawable.ic_filter_24dp); navigationWrapper.floatingActionButton.setImageResource(R.drawable.ic_filter_24dp);
fabOption = SharedPreferencesUtils.MAIN_ACTIVITY_BOTTOM_APP_BAR_FAB_FILTER_POSTS; fabOption = SharedPreferencesUtils.MAIN_ACTIVITY_BOTTOM_APP_BAR_FAB_FILTER_POSTS;
} else { } else {
fab.setImageResource(R.drawable.ic_add_day_night_24dp); navigationWrapper.floatingActionButton.setImageResource(R.drawable.ic_add_day_night_24dp);
} }
break; break;
} }
fab.setOnClickListener(view -> { navigationWrapper.floatingActionButton.setOnClickListener(view -> {
switch (fabOption) { switch (fabOption) {
case SharedPreferencesUtils.MAIN_ACTIVITY_BOTTOM_APP_BAR_FAB_REFRESH: { case SharedPreferencesUtils.MAIN_ACTIVITY_BOTTOM_APP_BAR_FAB_REFRESH: {
if (sectionsPagerAdapter != null) { if (sectionsPagerAdapter != null) {
@ -717,7 +767,7 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb
break; break;
} }
}); });
fab.setOnLongClickListener(view -> { navigationWrapper.floatingActionButton.setOnLongClickListener(view -> {
FABMoreOptionsBottomSheetFragment fabMoreOptionsBottomSheetFragment= new FABMoreOptionsBottomSheetFragment(); FABMoreOptionsBottomSheetFragment fabMoreOptionsBottomSheetFragment= new FABMoreOptionsBottomSheetFragment();
Bundle bundle = new Bundle(); Bundle bundle = new Bundle();
bundle.putBoolean(FABMoreOptionsBottomSheetFragment.EXTRA_ANONYMOUS_MODE, mAccessToken == null); bundle.putBoolean(FABMoreOptionsBottomSheetFragment.EXTRA_ANONYMOUS_MODE, mAccessToken == null);
@ -725,7 +775,7 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb
fabMoreOptionsBottomSheetFragment.show(getSupportFragmentManager(), fabMoreOptionsBottomSheetFragment.getTag()); fabMoreOptionsBottomSheetFragment.show(getSupportFragmentManager(), fabMoreOptionsBottomSheetFragment.getTag());
return true; return true;
}); });
fab.setVisibility(View.VISIBLE); navigationWrapper.floatingActionButton.setVisibility(View.VISIBLE);
adapter = new NavigationDrawerRecyclerViewMergedAdapter(this, mSharedPreferences, adapter = new NavigationDrawerRecyclerViewMergedAdapter(this, mSharedPreferences,
mNsfwAndSpoilerSharedPreferences, mNavigationDrawerSharedPreferences, mSecuritySharedPreferences, mNsfwAndSpoilerSharedPreferences, mNavigationDrawerSharedPreferences, mSecuritySharedPreferences,
@ -893,10 +943,11 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb
public void onPageSelected(int position) { public void onPageSelected(int position) {
if (mAccessToken != null) { if (mAccessToken != null) {
if (showBottomAppBar) { if (showBottomAppBar) {
bottomAppBar.performShow(); navigationWrapper.showNavigation();
} }
} }
fab.show(); //fab.show();
navigationWrapper.showFab();
sectionsPagerAdapter.displaySortTypeInToolbar(); sectionsPagerAdapter.displaySortTypeInToolbar();
} }
}); });
@ -1179,20 +1230,24 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb
@Override @Override
public void contentScrollUp() { public void contentScrollUp() {
if (showBottomAppBar && !mLockBottomAppBar) { if (showBottomAppBar && !mLockBottomAppBar) {
bottomAppBar.performShow(); //bottomAppBar.performShow();
navigationWrapper.showNavigation();
} }
if (!(showBottomAppBar && mLockBottomAppBar)) { if (!(showBottomAppBar && mLockBottomAppBar)) {
fab.show(); //fab.show();
navigationWrapper.showFab();
} }
} }
@Override @Override
public void contentScrollDown() { public void contentScrollDown() {
if (!(showBottomAppBar && mLockBottomAppBar)) { if (!(showBottomAppBar && mLockBottomAppBar)) {
fab.hide(); //fab.hide();
navigationWrapper.hideFab();
} }
if (showBottomAppBar && !mLockBottomAppBar) { if (showBottomAppBar && !mLockBottomAppBar) {
bottomAppBar.performHide(); //bottomAppBar.performHide();
navigationWrapper.hideNavigation();
} }
} }

View File

@ -0,0 +1,142 @@
package ml.docilealligator.infinityforreddit.customviews;
import android.content.res.ColorStateList;
import android.graphics.drawable.Drawable;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import androidx.appcompat.view.menu.MenuItemImpl;
import androidx.core.graphics.drawable.DrawableCompat;
import com.google.android.material.bottomappbar.BottomAppBar;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
import com.google.android.material.navigationrail.NavigationRailView;
import ml.docilealligator.infinityforreddit.R;
public class NavigationWrapper {
public BottomAppBar bottomAppBar;
public LinearLayout linearLayoutBottomAppBar;
public ImageView option1BottomAppBar;
public ImageView option2BottomAppBar;
public ImageView option3BottomAppBar;
public ImageView option4BottomAppBar;
public NavigationRailView navigationRailView;
public FloatingActionButton floatingActionButton;
public NavigationWrapper(BottomAppBar bottomAppBar, LinearLayout linearLayoutBottomAppBar,
ImageView option1BottomAppBar, ImageView option2BottomAppBar,
ImageView option3BottomAppBar, ImageView option4BottomAppBar,
FloatingActionButton floatingActionButton, NavigationRailView navigationRailView,
boolean showBottomAppBar) {
this.bottomAppBar = bottomAppBar;
this.linearLayoutBottomAppBar = linearLayoutBottomAppBar;
this.option1BottomAppBar = option1BottomAppBar;
this.option2BottomAppBar = option2BottomAppBar;
this.option3BottomAppBar = option3BottomAppBar;
this.option4BottomAppBar = option4BottomAppBar;
this.navigationRailView = navigationRailView;
if (navigationRailView != null) {
if (showBottomAppBar) {
this.floatingActionButton = (FloatingActionButton) navigationRailView.getHeaderView();
} else {
navigationRailView.setVisibility(View.GONE);
this.floatingActionButton = floatingActionButton;
}
} else {
this.floatingActionButton = floatingActionButton;
}
}
public void applyCustomTheme(int bottomAppBarIconColor, int bottomAppBarBackgroundColor) {
if (navigationRailView == null) {
option1BottomAppBar.setColorFilter(bottomAppBarIconColor, android.graphics.PorterDuff.Mode.SRC_IN);
option2BottomAppBar.setColorFilter(bottomAppBarIconColor, android.graphics.PorterDuff.Mode.SRC_IN);
option3BottomAppBar.setColorFilter(bottomAppBarIconColor, android.graphics.PorterDuff.Mode.SRC_IN);
option4BottomAppBar.setColorFilter(bottomAppBarIconColor, android.graphics.PorterDuff.Mode.SRC_IN);
bottomAppBar.setBackgroundTint(ColorStateList.valueOf(bottomAppBarBackgroundColor));
} else {
navigationRailView.setBackgroundColor(bottomAppBarBackgroundColor);
applyMenuItemTheme(navigationRailView.getMenu(), bottomAppBarIconColor);
}
}
private void applyMenuItemTheme(Menu menu, int bottomAppBarIconColor) {
for (int i = 0; i < menu.size(); i++) {
MenuItem item = menu.getItem(i);
if (((MenuItemImpl) item).requestsActionButton()) {
Drawable drawable = item.getIcon();
if (drawable != null) {
DrawableCompat.setTint(drawable, bottomAppBarIconColor);
item.setIcon(drawable);
}
}
}
}
public void bindOptionDrawableResource(int... imageResources) {
if (navigationRailView == null) {
bottomAppBar.setVisibility(View.VISIBLE);
} else {
navigationRailView.setVisibility(View.VISIBLE);
}
if (imageResources.length == 2) {
if (navigationRailView == null) {
linearLayoutBottomAppBar.setWeightSum(3);
option1BottomAppBar.setVisibility(View.GONE);
option3BottomAppBar.setVisibility(View.GONE);
option2BottomAppBar.setImageResource(imageResources[0]);
option4BottomAppBar.setImageResource(imageResources[1]);
} else {
Menu menu = navigationRailView.getMenu();
menu.findItem(R.id.navigation_rail_option_1).setIcon(imageResources[0]);
menu.findItem(R.id.navigation_rail_option_2).setIcon(imageResources[1]);
menu.findItem(R.id.navigation_rail_option_3).setVisible(false);
menu.findItem(R.id.navigation_rail_option_4).setVisible(false);
}
} else {
if (navigationRailView == null) {
option1BottomAppBar.setImageResource(imageResources[0]);
option2BottomAppBar.setImageResource(imageResources[1]);
option3BottomAppBar.setImageResource(imageResources[2]);
option4BottomAppBar.setImageResource(imageResources[3]);
} else {
Menu menu = navigationRailView.getMenu();
menu.findItem(R.id.navigation_rail_option_1).setIcon(imageResources[0]);
menu.findItem(R.id.navigation_rail_option_2).setIcon(imageResources[1]);
menu.findItem(R.id.navigation_rail_option_3).setIcon(imageResources[2]);
menu.findItem(R.id.navigation_rail_option_4).setIcon(imageResources[3]);
}
}
}
public void showNavigation() {
if (bottomAppBar != null) {
bottomAppBar.performShow();
}
}
public void hideNavigation() {
if (bottomAppBar != null) {
bottomAppBar.performHide();
}
}
public void showFab() {
if (navigationRailView == null) {
floatingActionButton.show();
}
}
public void hideFab() {
if (navigationRailView == null) {
floatingActionButton.hide();
}
}
}

View File

@ -0,0 +1,76 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/coordinator_layout_main_activity"
tools:application="ml.docilealligator.infinityforreddit.activities.MainActivity">
<com.google.android.material.appbar.AppBarLayout
android:id="@+id/appbar_layout_main_activity"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/AppTheme.AppBarOverlay">
<com.google.android.material.appbar.CollapsingToolbarLayout
android:id="@+id/collapsing_toolbar_layout_main_activity"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_scrollFlags="scroll|enterAlways"
app:titleEnabled="false"
app:toolbarId="@+id/toolbar">
<com.google.android.material.appbar.MaterialToolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="?attr/actionBarSize"
app:layout_collapseMode="pin"
app:layout_scrollFlags="scroll|enterAlways"
app:popupTheme="@style/AppTheme.PopupOverlay" />
</com.google.android.material.appbar.CollapsingToolbarLayout>
<com.google.android.material.tabs.TabLayout
android:id="@+id/tab_layout_main_activity"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
app:layout_scrollFlags="scroll|enterAlways"
app:tabGravity="fill"
app:tabIndicatorHeight="3dp"
app:tabRippleColor="?attr/colorControlHighlight"
app:tabUnboundedRipple="false" />
</com.google.android.material.appbar.AppBarLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior" >
<com.google.android.material.navigationrail.NavigationRailView
android:id="@+id/navigation_rail"
android:layout_width="80dp"
android:layout_height="match_parent"
app:headerLayout="@layout/floating_action_button"
app:menu="@menu/navigation_rail_menu"
app:labelVisibilityMode="unlabeled"
app:itemActiveIndicatorStyle="@style/App.Custom.Indicator" />
<androidx.viewpager2.widget.ViewPager2
android:id="@+id/view_pager_main_activity"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/fab_main_activity"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="@dimen/fab_margin"
android:visibility="gone" />
</androidx.coordinatorlayout.widget.CoordinatorLayout>

View File

@ -0,0 +1,76 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/coordinator_layout_main_activity"
tools:application="ml.docilealligator.infinityforreddit.activities.MainActivity">
<com.google.android.material.appbar.AppBarLayout
android:id="@+id/appbar_layout_main_activity"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/AppTheme.AppBarOverlay">
<com.google.android.material.appbar.CollapsingToolbarLayout
android:id="@+id/collapsing_toolbar_layout_main_activity"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_scrollFlags="scroll|enterAlways"
app:titleEnabled="false"
app:toolbarId="@+id/toolbar">
<com.google.android.material.appbar.MaterialToolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="?attr/actionBarSize"
app:layout_collapseMode="pin"
app:layout_scrollFlags="scroll|enterAlways"
app:popupTheme="@style/AppTheme.PopupOverlay" />
</com.google.android.material.appbar.CollapsingToolbarLayout>
<com.google.android.material.tabs.TabLayout
android:id="@+id/tab_layout_main_activity"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
app:layout_scrollFlags="scroll|enterAlways"
app:tabGravity="fill"
app:tabIndicatorHeight="3dp"
app:tabRippleColor="?attr/colorControlHighlight"
app:tabUnboundedRipple="false" />
</com.google.android.material.appbar.AppBarLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior" >
<com.google.android.material.navigationrail.NavigationRailView
android:id="@+id/navigation_rail"
android:layout_width="80dp"
android:layout_height="match_parent"
app:headerLayout="@layout/floating_action_button"
app:menu="@menu/navigation_rail_menu"
app:labelVisibilityMode="unlabeled"
app:itemActiveIndicatorStyle="@style/App.Custom.Indicator" />
<androidx.viewpager2.widget.ViewPager2
android:id="@+id/view_pager_main_activity"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/fab_main_activity"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="@dimen/fab_margin"
android:visibility="gone" />
</androidx.coordinatorlayout.widget.CoordinatorLayout>

View File

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<com.google.android.material.floatingactionbutton.FloatingActionButton xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />

View File

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/navigation_rail_option_1"
android:enabled="true"/>
<item
android:id="@+id/navigation_rail_option_2"
android:enabled="true"/>
<item
android:id="@+id/navigation_rail_option_3"
android:enabled="true"/>
<item
android:id="@+id/navigation_rail_option_4"
android:enabled="true"/>
</menu>

View File

@ -140,6 +140,10 @@
<item name="colorOnSurface">@color/colorPrimary</item> <item name="colorOnSurface">@color/colorPrimary</item>
<item name="colorPrimary">@color/primaryTextColor</item> <item name="colorPrimary">@color/primaryTextColor</item>
</style> </style>
<style name="App.Custom.Indicator" parent="Widget.Material3.BottomNavigationView.ActiveIndicator">
<item name="android:color">#00000000</item>
</style>
<style name="FontStyle" /> <style name="FontStyle" />