diff --git a/app/src/main/java/ru/vtosters/lite/ui/adapters/CategorizedAdapter.java b/app/src/main/java/ru/vtosters/lite/ui/adapters/CategorizedAdapter.java index cc4165378..933552b61 100644 --- a/app/src/main/java/ru/vtosters/lite/ui/adapters/CategorizedAdapter.java +++ b/app/src/main/java/ru/vtosters/lite/ui/adapters/CategorizedAdapter.java @@ -18,6 +18,7 @@ import ru.vtosters.lite.utils.AndroidUtils; import ru.vtosters.lite.utils.LayoutUtils; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collections; import java.util.List; @@ -35,6 +36,7 @@ public class CategorizedAdapter extends RecyclerView.Adapter mSelectedItems; private final List mDisabledItems; private final List mUnmovedItems; + final private List< T > mExceptions=new ArrayList<>(); private final IViewHolderBinder mBinder; // Min and max counts @@ -48,6 +50,12 @@ public class CategorizedAdapter extends RecyclerView.Adapter extends RecyclerView.Adapter { - if (getTabType(toPosition) == DISABLED_STATE - && mSelectedItems.size() == mMinSelectedItems) + if((getTabType(toPosition) == DISABLED_STATE + && mSelectedItems.size() == mMinSelectedItems)) return false; if (getItemViewType(toPosition) == CATEGORY_TITLE) - mDisabledItems.add(0, mSelectedItems.remove(fromPosition - 1)); - else - Collections.swap(mSelectedItems, fromPosition - 1, toPosition - 1); + { + if(mExceptions.size()>0) + { + int q=0; + for(var ex:mExceptions) + if(mSelectedItems.contains(ex))++q; + if(q==1)return false; + } + mDisabledItems.add(0,mSelectedItems.remove(fromPosition-1)); + } + else Collections.swap(mSelectedItems, fromPosition - 1, toPosition - 1); } case DISABLED_STATE -> { if (getTabType(toPosition) == SELECTED_STATE @@ -198,7 +213,6 @@ public class CategorizedAdapter extends RecyclerView.Adapter DockBarTab.valuesOf( "tab_news", diff --git a/app/src/main/java/ru/vtosters/lite/ui/fragments/DockBarEditorFragment.java b/app/src/main/java/ru/vtosters/lite/ui/fragments/DockBarEditorFragment.java index a5c07655e..4c5f6cd43 100644 --- a/app/src/main/java/ru/vtosters/lite/ui/fragments/DockBarEditorFragment.java +++ b/app/src/main/java/ru/vtosters/lite/ui/fragments/DockBarEditorFragment.java @@ -82,6 +82,9 @@ public class DockBarEditorFragment extends BaseToolbarFragment { holder.bindMovingItem(tab.iconID, tab.titleID); }); adapter.setMinAndMaxCounts(DockBarEditorManager.MIN_SELECTED_TABS, DockBarEditorManager.MAX_SELECTED_TABS); + adapter.setExceptions( + DockBarEditorManager.getTabByTag("tab_profile"), + DockBarEditorManager.getTabByTag("")/*settings*/); var recyclerView = new RecyclerView(requireContext()); recyclerView.setLayoutManager(new LinearLayoutManager(getContext())); diff --git a/app/src/main/java/ru/vtosters/lite/ui/items/DockBarTab.java b/app/src/main/java/ru/vtosters/lite/ui/items/DockBarTab.java index be1e00f98..66f7e8ed4 100644 --- a/app/src/main/java/ru/vtosters/lite/ui/items/DockBarTab.java +++ b/app/src/main/java/ru/vtosters/lite/ui/items/DockBarTab.java @@ -2,7 +2,8 @@ package ru.vtosters.lite.ui.items; import com.vk.core.fragments.FragmentImpl; -public class DockBarTab { +public class DockBarTab +{ public String tag; public int iconID; @@ -31,4 +32,10 @@ public class DockBarTab { Class fragmentClass) { return new DockBarTab(tag, iconID, titleID, resID, fragmentClass); } + + @Override + public boolean equals(Object arg) + { + return this.id==((DockBarTab)arg).id; + } } diff --git a/app/src/main/java/ru/vtosters/lite/ui/items/SuperAppItem.java b/app/src/main/java/ru/vtosters/lite/ui/items/SuperAppItem.java index b83b270c9..4ad31d802 100644 --- a/app/src/main/java/ru/vtosters/lite/ui/items/SuperAppItem.java +++ b/app/src/main/java/ru/vtosters/lite/ui/items/SuperAppItem.java @@ -1,6 +1,9 @@ package ru.vtosters.lite.ui.items; -public class SuperAppItem { +import ru.vtosters.lite.ui.adapters.CategorizedAdapter; + +public class SuperAppItem +{ public String type; public String title; @@ -13,4 +16,11 @@ public class SuperAppItem { public static SuperAppItem valuesOf(String type, String title) { return new SuperAppItem(type, title); } + + @Override + public boolean equals(Object arg) + { + var item=(SuperAppItem)arg; + return this.type.equals(item.type)&&this.title.equals(item.title); + } }