added state changing by swipe for unmoved items to adapter
This commit is contained in:
@@ -18,6 +18,7 @@ import android.widget.TextView;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
@@ -36,6 +37,7 @@ public class CategorizedAdapter extends RecyclerView.Adapter<CategorizedAdapter.
|
||||
|
||||
private List mSelectedItems;
|
||||
private List mDisabledItems;
|
||||
private List mUnmovedItems;
|
||||
private IViewHolderBinder mBinder;
|
||||
|
||||
private int mMinSelectedItems = -1;
|
||||
@@ -44,6 +46,7 @@ public class CategorizedAdapter extends RecyclerView.Adapter<CategorizedAdapter.
|
||||
public CategorizedAdapter(List selectedItems, List disabledItems, IViewHolderBinder binder) {
|
||||
this.mSelectedItems = selectedItems;
|
||||
this.mDisabledItems = disabledItems;
|
||||
this.mUnmovedItems = new ArrayList();
|
||||
this.mBinder = binder;
|
||||
}
|
||||
|
||||
@@ -52,6 +55,10 @@ public class CategorizedAdapter extends RecyclerView.Adapter<CategorizedAdapter.
|
||||
this.mMaxSelectedItems = max;
|
||||
}
|
||||
|
||||
public void addUnmovedItem(Object item) {
|
||||
mUnmovedItems.add(item);
|
||||
}
|
||||
|
||||
public int getItemViewType(int i) {
|
||||
return i == 0 || mSelectedItems.size() + 1 == i ? CATEGORY_TITLE : MOVING_ITEM;
|
||||
}
|
||||
@@ -60,6 +67,20 @@ public class CategorizedAdapter extends RecyclerView.Adapter<CategorizedAdapter.
|
||||
return i <= mSelectedItems.size() ? SELECTED_STATE : DISABLED_STATE;
|
||||
}
|
||||
|
||||
public boolean isUnmovedItem(int index) {
|
||||
if (getItemViewType(index) == MOVING_ITEM) {
|
||||
Object curr;
|
||||
if (getTabType(index) == SELECTED_STATE) {
|
||||
curr = mSelectedItems.get(index - 1);
|
||||
return mUnmovedItems.contains(curr);
|
||||
} else {
|
||||
curr = mDisabledItems.get(index - mSelectedItems.size() - 2);
|
||||
return mUnmovedItems.contains(curr);
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
public CategorizedViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
|
||||
@@ -146,12 +167,28 @@ public class CategorizedAdapter extends RecyclerView.Adapter<CategorizedAdapter.
|
||||
|
||||
@Override
|
||||
public void onItemDismiss(int index) {
|
||||
|
||||
if (getItemViewType(index) == MOVING_ITEM ) {
|
||||
Object curr;
|
||||
if (getTabType(index) == SELECTED_STATE) {
|
||||
curr = mSelectedItems.get(index - 1);
|
||||
if (!mUnmovedItems.contains(curr)) return;
|
||||
mSelectedItems.remove(curr);
|
||||
mDisabledItems.add(0, curr);
|
||||
notifyItemMoved(index, mSelectedItems.size() + 1);
|
||||
} else {
|
||||
curr = mDisabledItems.get(index - mSelectedItems.size() - 2);
|
||||
if (!mUnmovedItems.contains(curr)) return;
|
||||
mDisabledItems.remove(curr);
|
||||
mSelectedItems.add(0, curr);
|
||||
notifyItemRemoved(index);
|
||||
notifyItemInserted(1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onItemMove(int fromPosition, int toPosition) {
|
||||
if (toPosition == 0)
|
||||
if (toPosition == 0 || isUnmovedItem(toPosition))
|
||||
return false;
|
||||
|
||||
Object curr;
|
||||
@@ -160,16 +197,13 @@ public class CategorizedAdapter extends RecyclerView.Adapter<CategorizedAdapter.
|
||||
if (getTabType(toPosition) == DISABLED_STATE && min)
|
||||
return false;
|
||||
curr = mSelectedItems.get(fromPosition - 1);
|
||||
if (mUnmovedItems.contains(curr))
|
||||
return false;
|
||||
if (getItemViewType(toPosition) == CATEGORY_TITLE) {
|
||||
if (min)
|
||||
return false;
|
||||
mSelectedItems.remove(fromPosition - 1);
|
||||
mDisabledItems.add(curr);
|
||||
for (int i = mDisabledItems.size() - 2; i >= 0; i--) {
|
||||
var tmp = mDisabledItems.get(i + 1);
|
||||
mDisabledItems.set(i + 1, mDisabledItems.get(i));
|
||||
mDisabledItems.set(i, tmp);
|
||||
}
|
||||
mDisabledItems.add(0, curr);
|
||||
} else {
|
||||
Collections.swap(mSelectedItems, fromPosition - 1, toPosition - 1);
|
||||
}
|
||||
@@ -178,6 +212,8 @@ public class CategorizedAdapter extends RecyclerView.Adapter<CategorizedAdapter.
|
||||
if (getTabType(toPosition) == SELECTED_STATE && max)
|
||||
return false;
|
||||
curr = mDisabledItems.get(fromPosition - mSelectedItems.size() - 2);
|
||||
if (mUnmovedItems.contains(curr))
|
||||
return false;
|
||||
if (getItemViewType(toPosition) == CATEGORY_TITLE) {
|
||||
if (max)
|
||||
return false;
|
||||
|
||||
@@ -20,8 +20,8 @@ public class ItemMovingCallback extends ItemTouchHelper.Callback {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isItemViewSwipeEnabled(){
|
||||
return false;
|
||||
public boolean isItemViewSwipeEnabled() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -29,12 +29,16 @@ public class ItemMovingCallback extends ItemTouchHelper.Callback {
|
||||
int dragFlags = mAdapter.getItemViewType(viewHolder.getAdapterPosition()) == CategorizedAdapter.MOVING_ITEM
|
||||
? ItemTouchHelper.UP | ItemTouchHelper.DOWN
|
||||
: 0;
|
||||
return makeMovementFlags(dragFlags, 0);
|
||||
int swipeFlags = mAdapter.getItemViewType(viewHolder.getAdapterPosition()) == CategorizedAdapter.MOVING_ITEM
|
||||
&& mAdapter.isUnmovedItem(viewHolder.getAdapterPosition())
|
||||
? ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT
|
||||
: 0;
|
||||
return makeMovementFlags(dragFlags, swipeFlags);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction){
|
||||
mAdapter.onItemDismiss(viewHolder.getItemViewType());
|
||||
public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
|
||||
mAdapter.onItemDismiss(viewHolder.getAdapterPosition());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -24,6 +24,8 @@ import ru.vtosters.lite.ui.adapters.CategorizedAdapter;
|
||||
import ru.vtosters.lite.ui.components.ItemMovingCallback;
|
||||
import ru.vtosters.lite.ui.components.SuperAppEditorManager;
|
||||
import ru.vtosters.lite.utils.Globals;
|
||||
import ru.vtosters.lite.utils.LayoutHelper;
|
||||
import ru.vtosters.lite.utils.Themes;
|
||||
|
||||
public class SuperAppEditorFragment extends BaseToolbarFragment {
|
||||
|
||||
@@ -38,6 +40,19 @@ public class SuperAppEditorFragment extends BaseToolbarFragment {
|
||||
container.setOrientation(LinearLayout.VERTICAL);
|
||||
content.addView(container, new FrameLayout.LayoutParams(-1, -1));
|
||||
|
||||
TextView message = new TextView(getContext());
|
||||
message.setText(Globals.getString("superapp_editor_message"));
|
||||
message.setTextSize(16.0f);
|
||||
message.setTextAlignment(View.TEXT_ALIGNMENT_CENTER);
|
||||
message.setTextColor(Themes.getTextAttr());
|
||||
message.setPadding(
|
||||
Globals.convertDpToPixel(10),
|
||||
Globals.convertDpToPixel(10),
|
||||
Globals.convertDpToPixel(10),
|
||||
0
|
||||
);
|
||||
container.addView(message, LayoutHelper.createLinear(-1, -2));
|
||||
|
||||
LinearLayout buttonsContainer = new LinearLayout(getContext());
|
||||
buttonsContainer.setPadding(
|
||||
convertDpToPixel(13),
|
||||
@@ -79,6 +94,14 @@ public class SuperAppEditorFragment extends BaseToolbarFragment {
|
||||
: manager.getDisabledTabs().get(pos - manager.getSelectedTabs().size() - 2);
|
||||
holder.bindMovingItem(item.title);
|
||||
});
|
||||
manager.getSelectedTabs().forEach(item -> {
|
||||
if (item.type.equals("menu"))
|
||||
adapter.addUnmovedItem(item);
|
||||
});
|
||||
manager.getDisabledTabs().forEach(item -> {
|
||||
if (item.type.equals("menu"))
|
||||
adapter.addUnmovedItem(item);
|
||||
});
|
||||
|
||||
var recyclerView = new RecyclerView(getContext());
|
||||
recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
|
||||
|
||||
@@ -5419,6 +5419,7 @@
|
||||
<string name="docknumbers">Счётчики в докбаре</string>
|
||||
<string name="docknumberssum">Отключение не работает в интерфейсе для планшетов</string>
|
||||
<string name="dockbar_tab_titles">Показ заголовков вкладок в докбаре</string>
|
||||
<string name="superapp_editor_message">Для отключения/включения неподвижного элемента проведите по нему вправо или влево</string>
|
||||
<string name="fcmtokenfixed">Уведомления были восстановлены!</string>
|
||||
<string name="fcmtokenget">FCM токен получен</string>
|
||||
<string name="fcmtokenrem">FCM токен удален</string>
|
||||
|
||||
@@ -5571,6 +5571,7 @@ Warning! It can cause long downloads of user lists if there are a lot of users i
|
||||
<string name="docknumbers">Counters in dockbar</string>
|
||||
<string name="docknumberssum">"Disabling doesn't work in the tablet interface"</string>
|
||||
<string name="dockbar_tab_titles">Show dockbar item titles</string>
|
||||
<string name="superapp_editor_message">For activate/disable unmoved element, swipe it to right or left, please</string>
|
||||
<string name="fcmtokenfixed">Notifications have been restored!</string>
|
||||
<string name="fcmtokenget">FCM token received</string>
|
||||
<string name="fcmtokenrem">FCM token deleted</string>
|
||||
|
||||
Reference in New Issue
Block a user