From 2c78ee88bc53fe68408efcc98afc4d8b21f307b7 Mon Sep 17 00:00:00 2001 From: Geoffroy Bonneville Date: Thu, 21 Dec 2023 16:22:52 +0100 Subject: [PATCH] Remove unused room code and references Remove set and get retain instances since bug seems fixed Update Settings activity Code cleanup --- app/build.gradle | 11 ---- app/src/main/AndroidManifest.xml | 3 + .../com/wismna/geoffroy/donext/DoNext.java | 7 --- .../donext/activities/SettingsActivity.java | 16 +++--- .../adapters/TaskListRecyclerViewAdapter.java | 48 +++++++--------- .../adapters/TaskRecyclerViewAdapter.java | 28 ++++------ .../geoffroy/donext/data/AppDatabase.java | 32 ----------- .../geoffroy/donext/data/Converters.java | 17 ------ .../geoffroy/donext/data/Migrations.java | 33 ----------- .../com/wismna/geoffroy/donext/data/Task.java | 53 ------------------ .../wismna/geoffroy/donext/data/TaskDao.java | 55 ------------------- .../wismna/geoffroy/donext/data/TaskList.java | 25 --------- .../geoffroy/donext/data/TaskListDao.java | 27 --------- .../geoffroy/donext/data/TodayTask.java | 20 ------- .../geoffroy/donext/data/TodayTasksView.java | 20 ------- .../donext/database/TaskDataAccess.java | 8 --- .../fragments/ConfirmDialogFragment.java | 11 ++-- .../fragments/DynamicDialogFragment.java | 23 ++++---- .../fragments/TaskFormDialogFragment.java | 1 - .../fragments/TaskListsDialogFragment.java | 3 +- .../donext/fragments/TasksFragment.java | 11 ++-- .../fragments/TodayFormDialogFragment.java | 2 - .../donext/helpers/TaskListTouchHelper.java | 2 +- 23 files changed, 67 insertions(+), 389 deletions(-) delete mode 100644 app/src/main/java/com/wismna/geoffroy/donext/data/AppDatabase.java delete mode 100644 app/src/main/java/com/wismna/geoffroy/donext/data/Converters.java delete mode 100644 app/src/main/java/com/wismna/geoffroy/donext/data/Migrations.java delete mode 100644 app/src/main/java/com/wismna/geoffroy/donext/data/Task.java delete mode 100644 app/src/main/java/com/wismna/geoffroy/donext/data/TaskDao.java delete mode 100644 app/src/main/java/com/wismna/geoffroy/donext/data/TaskList.java delete mode 100644 app/src/main/java/com/wismna/geoffroy/donext/data/TaskListDao.java delete mode 100644 app/src/main/java/com/wismna/geoffroy/donext/data/TodayTask.java delete mode 100644 app/src/main/java/com/wismna/geoffroy/donext/data/TodayTasksView.java diff --git a/app/build.gradle b/app/build.gradle index ff0d208..74d584c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,11 +9,6 @@ android { targetSdkVersion 34 versionCode 30 versionName "1.9" - javaCompileOptions { - annotationProcessorOptions { - arguments = ["room.schemaLocation": "$projectDir/schemas".toString()] - } - } } buildTypes { release { @@ -55,12 +50,6 @@ dependencies { implementation "com.microsoft.appcenter:appcenter-analytics:${appCenterSdkVersion}" implementation "com.microsoft.appcenter:appcenter-crashes:${appCenterSdkVersion}" - // Room components - def roomVersion = "2.6.1" - implementation "androidx.room:room-runtime:$roomVersion" - annotationProcessor "androidx.room:room-compiler:$roomVersion" - testImplementation "androidx.room:room-testing:$roomVersion" - // Lifecycle components def lifecycleVersion = '2.6.2' implementation "androidx.lifecycle:lifecycle-viewmodel:$lifecycleVersion" diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index d22c56b..f30e950 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -12,6 +12,7 @@ @@ -31,6 +32,7 @@ { + if (event.getAction() == MotionEvent.ACTION_DOWN) { + mListener.onStartDrag(holder); } + return false; }); // Handle inline name change - holder.mTaskNameView.setOnFocusChangeListener(new View.OnFocusChangeListener() { - @Override - public void onFocusChange(View v, boolean hasFocus) { - EditText editText = (EditText) v; - String name = editText.getText().toString(); + holder.mTaskNameView.setOnFocusChangeListener((v, hasFocus) -> { + EditText editText = (EditText) v; + String name = editText.getText().toString(); - if (!hasFocus && !holder.mItem.getName().matches(name)) { - holder.mItem.setName(name); + if (!hasFocus && !holder.mItem.getName().matches(name)) { + holder.mItem.setName(name); - update(holder.mItem, holder.getAdapterPosition()); - mListener.onEditTextLoseFocus(holder.mItem); - } + update(holder.mItem, holder.getBindingAdapterPosition()); + mListener.onEditTextLoseFocus(holder.mItem); } }); // Handle click on delete button - holder.mTaskDeleteButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - // Disable the OnFocusChanged listener as it is now pointless and harmful - holder.mTaskNameView.setOnFocusChangeListener(null); + holder.mTaskDeleteButton.setOnClickListener(v -> { + // Disable the OnFocusChanged listener as it is now pointless and harmful + holder.mTaskNameView.setOnFocusChangeListener(null); - //remove(position); - mListener.onClickDeleteButton(holder.getAdapterPosition(), holder.mItem.getId()); - } + //remove(position); + mListener.onClickDeleteButton(holder.getBindingAdapterPosition(), holder.mItem.getId()); }); } @@ -136,7 +128,7 @@ public class TaskListRecyclerViewAdapter extends RecyclerView.Adapter { private List mValues; - private boolean mIsToday; - private boolean mIsHistory; + private final boolean mIsToday; + private final boolean mIsHistory; public TaskRecyclerViewAdapter(List items, boolean isToday, boolean isHistory) { mValues = items; @@ -56,17 +58,10 @@ public class TaskRecyclerViewAdapter extends RecyclerView.Adapter holder.mIconView.setImageResource(R.drawable.ic_low_priority_lightgray_24dp); + case 2 -> holder.mIconView.setImageResource(R.drawable.ic_priority_high_red_24dp); + default -> holder.mIconView.setImageDrawable(null); } // Additional information will not be displayed in Today view @@ -121,6 +116,7 @@ public class TaskRecyclerViewAdapter extends RecyclerView.Adapter tasks) { this.mValues = tasks; notifyDataSetChanged(); @@ -130,7 +126,7 @@ public class TaskRecyclerViewAdapter extends RecyclerView.Adapter> getAllTasks(); - - @Query("SELECT * FROM tasks WHERE list = :id AND done = 0 AND deleted = 0") - LiveData> getAllTasksFromList(long id); - - @Query("SELECT * FROM tasks WHERE list = :id AND done = 1 OR deleted = 1") - LiveData> getAllTasksFromHistoryList(long id); - - // TODO: replace query with view - //@Query("SELECT * FROM todaytasksview WHERE done = 0 AND deleted = 0") - @Query("SELECT * FROM tasks WHERE todaydate = date('now','localtime') AND done = 0 AND deleted = 0") - LiveData> getTodayTasks(); - - // TODO: replace this with item count from recycle view - @Query("SELECT MAX(displayorder) FROM tasks WHERE list = :id") - int getMaxOrder(long id); - - @Query("UPDATE tasks SET displayorder = displayorder - 1" + - " WHERE displayorder > (SELECT displayorder FROM tasks WHERE _id = :id)") - void updateRemainingRowsOrder(long id); - - @Query("UPDATE tasks SET todayorder = todayorder - 1" + - " WHERE todayorder > (SELECT todayorder FROM tasks WHERE _id = :id)") - void updateRemainingRowsTodayOrder(long id); - - @Query("UPDATE tasks SET deleted = 1 WHERE list = :id") - void deleteAllTasks(long id); -} diff --git a/app/src/main/java/com/wismna/geoffroy/donext/data/TaskList.java b/app/src/main/java/com/wismna/geoffroy/donext/data/TaskList.java deleted file mode 100644 index f9f3eb9..0000000 --- a/app/src/main/java/com/wismna/geoffroy/donext/data/TaskList.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.wismna.geoffroy.donext.data; - -import androidx.annotation.NonNull; -import androidx.room.ColumnInfo; -import androidx.room.Entity; -import androidx.room.PrimaryKey; - -@Entity(tableName = "tasklist") -public class TaskList { - - @PrimaryKey(autoGenerate = true) - public long _id; - - @ColumnInfo(name = "name") - public String name; - - @ColumnInfo(name = "visible") - public boolean visible = true; - - @ColumnInfo(name = "displayorder") - public int order; - - //@ColumnInfo(name = "taskcount") - public int taskCount; -} diff --git a/app/src/main/java/com/wismna/geoffroy/donext/data/TaskListDao.java b/app/src/main/java/com/wismna/geoffroy/donext/data/TaskListDao.java deleted file mode 100644 index c974574..0000000 --- a/app/src/main/java/com/wismna/geoffroy/donext/data/TaskListDao.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.wismna.geoffroy.donext.data; - -import java.util.List; - -import androidx.lifecycle.LiveData; -import androidx.room.Dao; -import androidx.room.Insert; -import androidx.room.Query; -import androidx.room.Update; - -@Dao -public interface TaskListDao { - - @Insert() - void createTaskList(TaskList taskList); - - @Update() - void updateTaskList(TaskList taskList); - - @Query("SELECT *,(SELECT COUNT(*) FROM tasks WHERE tasks.list = tasklist._id) AS taskcount" + - " FROM tasklist WHERE visible = 1 ORDER BY displayorder ASC ") - LiveData> getVisibleTaskLists(); - - @Query("SELECT *, (SELECT COUNT(*) FROM tasks WHERE tasks.list = tasklist._id AND (tasks.deleted = 1 OR tasks.done = 1)) AS taskcount" + - " FROM tasklist WHERE visible = 0 OR taskcount > 0 ORDER BY displayorder ASC ") - LiveData> getInvisibleTaskLists(); -} diff --git a/app/src/main/java/com/wismna/geoffroy/donext/data/TodayTask.java b/app/src/main/java/com/wismna/geoffroy/donext/data/TodayTask.java deleted file mode 100644 index 83f9741..0000000 --- a/app/src/main/java/com/wismna/geoffroy/donext/data/TodayTask.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.wismna.geoffroy.donext.data; - -import org.joda.time.LocalDate; - -import androidx.room.ColumnInfo; -import androidx.room.PrimaryKey; - -public class TodayTask { - @PrimaryKey() - public long _id; - - @ColumnInfo(name = "name") - public String name; - - @ColumnInfo(name = "todaydate") - public LocalDate todayDate; - - @ColumnInfo(name = "tasklistname") - public String taskListName; -} diff --git a/app/src/main/java/com/wismna/geoffroy/donext/data/TodayTasksView.java b/app/src/main/java/com/wismna/geoffroy/donext/data/TodayTasksView.java deleted file mode 100644 index e054496..0000000 --- a/app/src/main/java/com/wismna/geoffroy/donext/data/TodayTasksView.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.wismna.geoffroy.donext.data; - -import org.joda.time.LocalDate; - -import androidx.room.DatabaseView; - -@DatabaseView("SELECT * FROM tasks WHERE todaydate = date('now','localtime')") -public class TodayTasksView extends Task { - /*public long _id; - public String name; - public String description; - public int cycle; - public int priority; - public boolean done; - public boolean deleted; - public int order; - public int todayOrder; - public long taskList; - public LocalDate dueDate;*/ -} diff --git a/app/src/main/java/com/wismna/geoffroy/donext/database/TaskDataAccess.java b/app/src/main/java/com/wismna/geoffroy/donext/database/TaskDataAccess.java index 42619db..fee2fab 100644 --- a/app/src/main/java/com/wismna/geoffroy/donext/database/TaskDataAccess.java +++ b/app/src/main/java/com/wismna/geoffroy/donext/database/TaskDataAccess.java @@ -117,14 +117,6 @@ public class TaskDataAccess implements AutoCloseable { } public List getAllTasksFromList(long id, boolean isHistory) { - - // REMOVE THIS - /*ContentValues contentValues = new ContentValues(); - contentValues.put(DatabaseHelper.COLUMN_ORDER, 0); - database.update(DatabaseHelper.TASKS_TABLE_NAME, contentValues, - null, null);*/ - // -- - int history = isHistory ? 1 : 0; Cursor cursor = database.query(DatabaseHelper.TASKS_TABLE_NAME, taskColumns, DatabaseHelper.TASKS_COLUMN_LIST + " = " + id + diff --git a/app/src/main/java/com/wismna/geoffroy/donext/fragments/ConfirmDialogFragment.java b/app/src/main/java/com/wismna/geoffroy/donext/fragments/ConfirmDialogFragment.java index e754a15..a6d74d2 100644 --- a/app/src/main/java/com/wismna/geoffroy/donext/fragments/ConfirmDialogFragment.java +++ b/app/src/main/java/com/wismna/geoffroy/donext/fragments/ConfirmDialogFragment.java @@ -13,6 +13,8 @@ import androidx.fragment.app.DialogFragment; import com.wismna.geoffroy.donext.R; +import java.util.Objects; + public class ConfirmDialogFragment extends DialogFragment { interface ConfirmDialogListener { void onConfirmDialogClick(DialogFragment dialog, ButtonEvent event); @@ -27,7 +29,6 @@ public class ConfirmDialogFragment extends DialogFragment { public static ConfirmDialogFragment newInstance(ConfirmDialogListener confirmDialogListener) { ConfirmDialogFragment fragment = new ConfirmDialogFragment(); fragment.confirmDialogListener = confirmDialogListener; - fragment.setRetainInstance(true); return fragment; } @@ -45,7 +46,7 @@ public class ConfirmDialogFragment extends DialogFragment { AlertDialog.Builder builder = new AlertDialog.Builder(requireActivity()); Bundle args = getArguments(); - LayoutInflater inflater = getActivity().getLayoutInflater(); + LayoutInflater inflater = requireActivity().getLayoutInflater(); // No need for a parent in a Dialog Fragment View view = inflater.inflate(R.layout.fragment_task_confirmation, null); assert args != null; @@ -53,7 +54,7 @@ public class ConfirmDialogFragment extends DialogFragment { .setPositiveButton(args.getInt("button"), (dialog, id) -> confirmDialogListener.onConfirmDialogClick(ConfirmDialogFragment.this, ButtonEvent.YES)) .setNegativeButton(R.string.task_confirmation_no_button, (dialog, id) -> { // User cancelled the dialog - ConfirmDialogFragment.this.getDialog().cancel(); + Objects.requireNonNull(ConfirmDialogFragment.this.getDialog()).cancel(); }) .setOnKeyListener((dialog, keyCode, event) -> keyCode != KeyEvent.KEYCODE_BACK); // Create the AlertDialog object and return it @@ -65,9 +66,7 @@ public class ConfirmDialogFragment extends DialogFragment { @Override public void onDestroyView() { Dialog dialog = getDialog(); - // Stop the dialog from being dismissed on rotation, due to a bug with the compatibility library - // https://code.google.com/p/android/issues/detail?id=17423 - if (dialog != null && getRetainInstance()) { + if (dialog != null) { dialog.setDismissMessage(null); } super.onDestroyView(); diff --git a/app/src/main/java/com/wismna/geoffroy/donext/fragments/DynamicDialogFragment.java b/app/src/main/java/com/wismna/geoffroy/donext/fragments/DynamicDialogFragment.java index 452106c..4cc68f5 100644 --- a/app/src/main/java/com/wismna/geoffroy/donext/fragments/DynamicDialogFragment.java +++ b/app/src/main/java/com/wismna/geoffroy/donext/fragments/DynamicDialogFragment.java @@ -5,14 +5,6 @@ import android.app.AlertDialog; import android.app.Dialog; import android.content.Context; import android.os.Bundle; -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.fragment.app.DialogFragment; -import androidx.fragment.app.FragmentManager; -import androidx.fragment.app.FragmentTransaction; -import androidx.appcompat.app.ActionBar; -import androidx.appcompat.app.AppCompatActivity; -import androidx.appcompat.widget.Toolbar; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; @@ -22,6 +14,15 @@ import android.view.ViewGroup; import android.view.inputmethod.InputMethodManager; import android.widget.FrameLayout; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.appcompat.app.ActionBar; +import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.widget.Toolbar; +import androidx.fragment.app.DialogFragment; +import androidx.fragment.app.FragmentManager; +import androidx.fragment.app.FragmentTransaction; + import com.wismna.geoffroy.donext.R; import java.util.Objects; @@ -162,9 +163,7 @@ public abstract class DynamicDialogFragment extends DialogFragment { @Override public void onDestroyView() { Dialog dialog = getDialog(); - // Stop the dialog from being dismissed on rotation, due to a bug with the compatibility library - // https://code.google.com/p/android/issues/detail?id=17423 - if (dialog != null && getRetainInstance()) { + if (dialog != null) { dialog.setDismissMessage(null); } super.onDestroyView(); @@ -188,7 +187,7 @@ public abstract class DynamicDialogFragment extends DialogFragment { /** Helper function to get a View, without having to worry about the fact that is a Dialog or not*/ protected T findViewById(int id) { - if (getShowsDialog()) return getDialog().findViewById(id); + if (getShowsDialog()) return Objects.requireNonNull(getDialog()).findViewById(id); return requireView().findViewById(id); } diff --git a/app/src/main/java/com/wismna/geoffroy/donext/fragments/TaskFormDialogFragment.java b/app/src/main/java/com/wismna/geoffroy/donext/fragments/TaskFormDialogFragment.java index bc37a88..89c47fe 100644 --- a/app/src/main/java/com/wismna/geoffroy/donext/fragments/TaskFormDialogFragment.java +++ b/app/src/main/java/com/wismna/geoffroy/donext/fragments/TaskFormDialogFragment.java @@ -53,7 +53,6 @@ public class TaskFormDialogFragment extends DynamicDialogFragment { fragment.mTask = task; fragment.taskLists = taskLists; fragment.mListener = newTaskListener; - fragment.setRetainInstance(true); return fragment; } diff --git a/app/src/main/java/com/wismna/geoffroy/donext/fragments/TaskListsDialogFragment.java b/app/src/main/java/com/wismna/geoffroy/donext/fragments/TaskListsDialogFragment.java index ea8d079..3652e05 100644 --- a/app/src/main/java/com/wismna/geoffroy/donext/fragments/TaskListsDialogFragment.java +++ b/app/src/main/java/com/wismna/geoffroy/donext/fragments/TaskListsDialogFragment.java @@ -23,6 +23,7 @@ import com.wismna.geoffroy.donext.helpers.TaskListTouchHelper; import com.wismna.geoffroy.donext.utils.TaskRunner; import java.util.List; +import java.util.Objects; import java.util.concurrent.Callable; /** @@ -174,7 +175,7 @@ public class TaskListsDialogFragment extends DynamicDialogFragment implements @Override public void onConfirmDialogClick(DialogFragment dialog, ConfirmDialogFragment.ButtonEvent event) { // Handle never ask again checkbox - CheckBox neverAskAgainCheckBox = dialog.getDialog().findViewById(R.id.task_confirmation_never); + CheckBox neverAskAgainCheckBox = Objects.requireNonNull(dialog.getDialog()).findViewById(R.id.task_confirmation_never); if (neverAskAgainCheckBox.isChecked()) { SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(requireContext()); diff --git a/app/src/main/java/com/wismna/geoffroy/donext/fragments/TasksFragment.java b/app/src/main/java/com/wismna/geoffroy/donext/fragments/TasksFragment.java index 56e5493..57e344d 100644 --- a/app/src/main/java/com/wismna/geoffroy/donext/fragments/TasksFragment.java +++ b/app/src/main/java/com/wismna/geoffroy/donext/fragments/TasksFragment.java @@ -78,7 +78,6 @@ public class TasksFragment extends Fragment implements Bundle args = new Bundle(); args.putLong(TASK_LIST_ID, taskListId); fragment.setArguments(args); - fragment.setRetainInstance(true); return fragment; } @@ -130,7 +129,7 @@ public class TasksFragment extends Fragment implements recyclerView.addOnItemTouchListener( new RecyclerItemClickListener(context, (view, position) -> { boolean isLargeLayout = resources.getBoolean(R.bool.large_layout); - SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(getContext()); + SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(requireContext()); Bundle args = new Bundle(); args.putBoolean("today", sharedPref.getBoolean("pref_conf_today_enable", false)); args.putInt("button_count", isHistory ? 1 : 3); @@ -222,10 +221,10 @@ public class TasksFragment extends Fragment implements int direction = args.getInt("Direction"); // Handle never ask again checkbox - CheckBox neverAskAgainCheckBox = dialog.getDialog().findViewById(R.id.task_confirmation_never); + CheckBox neverAskAgainCheckBox = Objects.requireNonNull(dialog.getDialog()).findViewById(R.id.task_confirmation_never); if (neverAskAgainCheckBox.isChecked()) { - SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(getContext()); + SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(requireContext()); SharedPreferences.Editor editor = sharedPref.edit(); // Set system settings @@ -315,7 +314,7 @@ public class TasksFragment extends Fragment implements @Override public void onNewTaskDialogNeutralClick(DialogFragment dialog) { - SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(getContext()); + SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(requireContext()); boolean showDialog = sharedPref.getBoolean("pref_conf_del", true); Bundle args = dialog.getArguments(); @@ -343,7 +342,7 @@ public class TasksFragment extends Fragment implements @Override public void onItemSwiped(int itemPosition, int direction) { - SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(getContext()); + SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(requireContext()); String title = ""; boolean showDialog = false; int buttonLabel = -1; diff --git a/app/src/main/java/com/wismna/geoffroy/donext/fragments/TodayFormDialogFragment.java b/app/src/main/java/com/wismna/geoffroy/donext/fragments/TodayFormDialogFragment.java index 3e846c0..a4e5909 100644 --- a/app/src/main/java/com/wismna/geoffroy/donext/fragments/TodayFormDialogFragment.java +++ b/app/src/main/java/com/wismna/geoffroy/donext/fragments/TodayFormDialogFragment.java @@ -42,7 +42,6 @@ public class TodayFormDialogFragment extends DynamicDialogFragment { TodayFormDialogFragment fragment = new TodayFormDialogFragment(); fragment.mListener = todayTaskListener; - fragment.setRetainInstance(true); return fragment; } @@ -54,7 +53,6 @@ public class TodayFormDialogFragment extends DynamicDialogFragment { mNegativeButtonString = getString(R.string.new_task_cancel); mContentLayoutId = R.layout.content_today_form; // Load the tasks asynchronously - //new LoadTasks(this).execute(getActivity()); TaskRunner taskRunner = new TaskRunner(); taskRunner.executeAsync(new LoadTasks(getContext()), this::setLayoutValues); } diff --git a/app/src/main/java/com/wismna/geoffroy/donext/helpers/TaskListTouchHelper.java b/app/src/main/java/com/wismna/geoffroy/donext/helpers/TaskListTouchHelper.java index 82e4215..3b7aadb 100644 --- a/app/src/main/java/com/wismna/geoffroy/donext/helpers/TaskListTouchHelper.java +++ b/app/src/main/java/com/wismna/geoffroy/donext/helpers/TaskListTouchHelper.java @@ -24,7 +24,7 @@ public class TaskListTouchHelper extends ItemTouchHelper.SimpleCallback { @Override public boolean onMove(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder, @NonNull RecyclerView.ViewHolder target) { - return mAdapter.onItemMove(viewHolder.getAdapterPosition(), target.getAdapterPosition()); + return mAdapter.onItemMove(viewHolder.getAbsoluteAdapterPosition(), target.getAbsoluteAdapterPosition()); } @Override