diff options
author | Stefan Niedermann <info@niedermann.it> | 2021-05-26 22:17:30 +0300 |
---|---|---|
committer | Stefan Niedermann <info@niedermann.it> | 2021-05-26 22:17:30 +0300 |
commit | 44f13d27aafb967a42e5fc539992b12055128446 (patch) | |
tree | 6d2a55ec0babce164805546c7d9b093eb909a44c /cross-tab-drag-and-drop | |
parent | 3dd0d1224398857205f6c782cbbe2247ec90ae98 (diff) |
Minor code improvements
Signed-off-by: Stefan Niedermann <info@niedermann.it>
Diffstat (limited to 'cross-tab-drag-and-drop')
4 files changed, 30 insertions, 24 deletions
diff --git a/cross-tab-drag-and-drop/src/main/java/it/niedermann/android/crosstabdnd/CrossTabDragAndDrop.java b/cross-tab-drag-and-drop/src/main/java/it/niedermann/android/crosstabdnd/CrossTabDragAndDrop.java index dcedc584b..e22ad5f17 100644 --- a/cross-tab-drag-and-drop/src/main/java/it/niedermann/android/crosstabdnd/CrossTabDragAndDrop.java +++ b/cross-tab-drag-and-drop/src/main/java/it/niedermann/android/crosstabdnd/CrossTabDragAndDrop.java @@ -6,6 +6,7 @@ import android.view.DragEvent; import android.view.View; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentManager; import androidx.recyclerview.widget.RecyclerView; @@ -21,8 +22,7 @@ import java.util.Set; public class CrossTabDragAndDrop< TabFragment extends Fragment & DragAndDropTab<ItemAdapter>, ItemAdapter extends RecyclerView.Adapter<?> & DragAndDropAdapter<ItemModel>, - ItemModel extends DragAndDropModel - > { + ItemModel extends DragAndDropModel> { private static final String TAG = CrossTabDragAndDrop.class.getCanonicalName(); private static final ScrollHelper SCROLL_HELPER = new ScrollHelper(); @@ -50,8 +50,9 @@ public class CrossTabDragAndDrop< public void register(final ViewPager2 viewPager, TabLayout stackLayout, FragmentManager fm) { viewPager.setOnDragListener((View v, DragEvent dragEvent) -> { - DraggedItemLocalState<TabFragment, ItemAdapter, ItemModel> draggedItemLocalState = (DraggedItemLocalState<TabFragment, ItemAdapter, ItemModel>) dragEvent.getLocalState(); - View draggedView = draggedItemLocalState.getDraggedView(); + //noinspection unchecked + final DraggedItemLocalState<TabFragment, ItemAdapter, ItemModel> draggedItemLocalState = (DraggedItemLocalState<TabFragment, ItemAdapter, ItemModel>) dragEvent.getLocalState(); + final View draggedView = draggedItemLocalState.getDraggedView(); switch (dragEvent.getAction()) { case DragEvent.ACTION_DRAG_STARTED: { draggedView.setVisibility(View.INVISIBLE); @@ -59,12 +60,12 @@ public class CrossTabDragAndDrop< break; } case DragEvent.ACTION_DRAG_LOCATION: { - RecyclerView currentRecyclerView = draggedItemLocalState.getRecyclerView(); - ItemAdapter itemAdapter = draggedItemLocalState.getItemAdapter(); + final RecyclerView currentRecyclerView = draggedItemLocalState.getRecyclerView(); + final ItemAdapter itemAdapter = draggedItemLocalState.getItemAdapter(); - long now = System.currentTimeMillis(); + final long now = System.currentTimeMillis(); if (lastSwap + dragAndDropMsToReact < now) { // don't change Tabs so fast! - int oldTabPosition = viewPager.getCurrentItem(); + final int oldTabPosition = viewPager.getCurrentItem(); boolean shouldSwitchTab = true; @@ -131,7 +132,7 @@ public class CrossTabDragAndDrop< draggedItemLocalState.setInsertedListener(null); view.setVisibility(View.INVISIBLE); draggedItemLocalState.setDraggedView(view); - pushAroundItems(view, recyclerView, dragEvent, itemAdapter, (DraggedItemLocalState<TabFragment, ItemAdapter, ItemModel>) draggedItemLocalState, now); + pushAroundItems(view, recyclerView, dragEvent, itemAdapter, draggedItemLocalState, now); } @Override @@ -141,7 +142,7 @@ public class CrossTabDragAndDrop< recyclerView.addOnChildAttachStateChangeListener(onChildAttachStateChangeListener); //insert item in new tab - View firstVisibleView = recyclerView.getChildAt(0); + @Nullable final View firstVisibleView = recyclerView.getChildAt(0); int positionToInsert = firstVisibleView == null ? 0 : recyclerView.getChildAdapterPosition(firstVisibleView) + 1; itemAdapter.insertItem(draggedItemLocalState.getDraggedItemModel(), positionToInsert); @@ -149,12 +150,12 @@ public class CrossTabDragAndDrop< } private void pushAroundItems(@NonNull View view, RecyclerView recyclerView, DragEvent dragEvent, ItemAdapter itemAdapter, DraggedItemLocalState<TabFragment, ItemAdapter, ItemModel> draggedItemLocalState, long now) { - View viewUnder = recyclerView.findChildViewUnder(dragEvent.getX(), dragEvent.getY()); + @Nullable final View viewUnder = recyclerView.findChildViewUnder(dragEvent.getX(), dragEvent.getY()); if (viewUnder != null) { - int toPositon = recyclerView.getChildAdapterPosition(viewUnder); + final int toPositon = recyclerView.getChildAdapterPosition(viewUnder); if (toPositon != -1) { - int fromPosition = recyclerView.getChildAdapterPosition(view); + final int fromPosition = recyclerView.getChildAdapterPosition(view); if (fromPosition != -1 && fromPosition != toPositon) { recyclerView.post(() -> { itemAdapter.moveItem(fromPosition, toPositon); @@ -171,7 +172,7 @@ public class CrossTabDragAndDrop< } private void detectAndKillDuplicatesInNeighbourTab(ViewPager2 viewPager, ItemModel itemToFind, FragmentManager fm, int oldTabPosition, int newTabPosition) { - int tabPositionToCheck = newTabPosition > oldTabPosition ? newTabPosition + 1 : newTabPosition - 1; + final int tabPositionToCheck = newTabPosition > oldTabPosition ? newTabPosition + 1 : newTabPosition - 1; if (isMovePossible(viewPager, tabPositionToCheck)) { viewPager.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() { @@ -179,15 +180,15 @@ public class CrossTabDragAndDrop< public void onPageSelected(int position) { super.onPageSelected(position); viewPager.unregisterOnPageChangeCallback(this); - ItemAdapter itemAdapter = DragAndDropUtil.<TabFragment>getTabFragment(fm, Objects.requireNonNull(viewPager.getAdapter()).getItemId(tabPositionToCheck)).getAdapter(); + final ItemAdapter itemAdapter = DragAndDropUtil.<TabFragment>getTabFragment(fm, Objects.requireNonNull(viewPager.getAdapter()).getItemId(tabPositionToCheck)).getAdapter(); itemAdapter.registerAdapterDataObserver(new RecyclerView.AdapterDataObserver() { @Override public void onChanged() { super.onChanged(); itemAdapter.unregisterAdapterDataObserver(this); - List<ItemModel> itemList = itemAdapter.getItemList(); + final List<ItemModel> itemList = itemAdapter.getItemList(); for (int i = 0; i < itemList.size(); i++) { - ItemModel c = itemList.get(i); + final ItemModel c = itemList.get(i); if (itemToFind.getComparableId().equals(c.getComparableId())) { itemAdapter.removeItem(i); itemAdapter.notifyItemRemoved(i); @@ -203,15 +204,15 @@ public class CrossTabDragAndDrop< } private void removeItem(RecyclerView currentRecyclerView, View view, ItemAdapter itemAdapter) { - int oldItemPosition = currentRecyclerView.getChildAdapterPosition(view); + final int oldItemPosition = currentRecyclerView.getChildAdapterPosition(view); if (oldItemPosition != -1) { itemAdapter.removeItem(oldItemPosition); } } - private void notifyListeners(DraggedItemLocalState draggedItemLocalState) { - for (ItemMovedByDragListener listener : moveListenerList) { + private void notifyListeners(DraggedItemLocalState<TabFragment, ItemAdapter, ItemModel> draggedItemLocalState) { + for (ItemMovedByDragListener<ItemModel> listener : moveListenerList) { listener.onItemMoved(draggedItemLocalState.getDraggedItemModel(), draggedItemLocalState.getCurrentTabId(), draggedItemLocalState.getPositionInItemAdapter()); } } diff --git a/cross-tab-drag-and-drop/src/main/java/it/niedermann/android/crosstabdnd/DragAndDropUtil.java b/cross-tab-drag-and-drop/src/main/java/it/niedermann/android/crosstabdnd/DragAndDropUtil.java index 677cb4f0c..5077bae82 100644 --- a/cross-tab-drag-and-drop/src/main/java/it/niedermann/android/crosstabdnd/DragAndDropUtil.java +++ b/cross-tab-drag-and-drop/src/main/java/it/niedermann/android/crosstabdnd/DragAndDropUtil.java @@ -12,6 +12,7 @@ public class DragAndDropUtil { // Util class } + @SuppressWarnings("unchecked") protected static <T> T getTabFragment(@NonNull FragmentManager fm, @Nullable Long currentStackId) throws IllegalArgumentException { return (T) fm.findFragmentByTag("f" + currentStackId); } diff --git a/cross-tab-drag-and-drop/src/main/java/it/niedermann/android/crosstabdnd/DraggedItemLocalState.java b/cross-tab-drag-and-drop/src/main/java/it/niedermann/android/crosstabdnd/DraggedItemLocalState.java index b1f0ed535..f8658706c 100644 --- a/cross-tab-drag-and-drop/src/main/java/it/niedermann/android/crosstabdnd/DraggedItemLocalState.java +++ b/cross-tab-drag-and-drop/src/main/java/it/niedermann/android/crosstabdnd/DraggedItemLocalState.java @@ -2,6 +2,7 @@ package it.niedermann.android.crosstabdnd; import android.view.View; +import androidx.annotation.NonNull; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentManager; import androidx.recyclerview.widget.RecyclerView; @@ -14,7 +15,7 @@ public class DraggedItemLocalState< TabFragment extends Fragment & DragAndDropTab<ItemAdapter>, ItemAdapter extends RecyclerView.Adapter<?> & DragAndDropAdapter<ItemModel>, ItemModel> { - private ItemModel draggedCard; + private final ItemModel draggedCard; /** The original dragged view */ private final View originalDraggedView; /** The currently dragged view (can change when the tab changes */ @@ -33,18 +34,19 @@ public class DraggedItemLocalState< this.positionInCardAdapter = positionInCardAdapter; } - protected void onDragStart(ViewPager2 viewPager, FragmentManager fm) { + protected void onDragStart(@NonNull ViewPager2 viewPager, @NonNull FragmentManager fm) { this.currentTabId = Objects.requireNonNull(viewPager.getAdapter()).getItemId(viewPager.getCurrentItem()); this.recyclerView = DragAndDropUtil.<TabFragment>getTabFragment(fm, currentTabId).getRecyclerView(); } - protected void onTabChanged(ViewPager2 viewPager, FragmentManager fm) { + protected void onTabChanged(@NonNull ViewPager2 viewPager, @NonNull FragmentManager fm) { if (insertedListener != null) { this.recyclerView.removeOnChildAttachStateChangeListener(insertedListener); this.insertedListener = null; } this.currentTabId = Objects.requireNonNull(viewPager.getAdapter()).getItemId(viewPager.getCurrentItem()); this.recyclerView = DragAndDropUtil.<TabFragment>getTabFragment(fm, currentTabId).getRecyclerView(); + //noinspection unchecked this.itemAdapter = (ItemAdapter) recyclerView.getAdapter(); } diff --git a/cross-tab-drag-and-drop/src/main/java/it/niedermann/android/crosstabdnd/ScrollHelper.java b/cross-tab-drag-and-drop/src/main/java/it/niedermann/android/crosstabdnd/ScrollHelper.java index 29ce3c35a..566eca5cd 100644 --- a/cross-tab-drag-and-drop/src/main/java/it/niedermann/android/crosstabdnd/ScrollHelper.java +++ b/cross-tab-drag-and-drop/src/main/java/it/niedermann/android/crosstabdnd/ScrollHelper.java @@ -2,6 +2,8 @@ package it.niedermann.android.crosstabdnd; import android.os.Handler; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import androidx.recyclerview.widget.RecyclerView; @SuppressWarnings("WeakerAccess") @@ -19,7 +21,7 @@ public class ScrollHelper implements Runnable { private RecyclerView currentRecyclerView; private final Handler handler = new Handler(); - public void startScroll(RecyclerView recyclerView, ScrollDirection scrollDirection) { + public void startScroll(@NonNull RecyclerView recyclerView, @Nullable ScrollDirection scrollDirection) { this.scrollDirection = scrollDirection; this.currentRecyclerView = recyclerView; if (!shouldScroll) { |