Issue #903 - Display undo layout when moving elements
This commit is contained in:
parent
50e91b373c
commit
1e5e9e98d9
|
@ -42,6 +42,7 @@ import fr.gouv.etalab.mastodon.helper.Helper;
|
||||||
import fr.gouv.etalab.mastodon.helper.itemtouchhelper.ItemTouchHelperAdapter;
|
import fr.gouv.etalab.mastodon.helper.itemtouchhelper.ItemTouchHelperAdapter;
|
||||||
import fr.gouv.etalab.mastodon.helper.itemtouchhelper.ItemTouchHelperViewHolder;
|
import fr.gouv.etalab.mastodon.helper.itemtouchhelper.ItemTouchHelperViewHolder;
|
||||||
import fr.gouv.etalab.mastodon.helper.itemtouchhelper.OnStartDragListener;
|
import fr.gouv.etalab.mastodon.helper.itemtouchhelper.OnStartDragListener;
|
||||||
|
import fr.gouv.etalab.mastodon.helper.itemtouchhelper.OnUndoListener;
|
||||||
import fr.gouv.etalab.mastodon.sqlite.Sqlite;
|
import fr.gouv.etalab.mastodon.sqlite.Sqlite;
|
||||||
import fr.gouv.etalab.mastodon.sqlite.TimelinesDAO;
|
import fr.gouv.etalab.mastodon.sqlite.TimelinesDAO;
|
||||||
|
|
||||||
|
@ -59,12 +60,14 @@ public class ReorderTabAdapter extends RecyclerView.Adapter<ReorderTabAdapter.It
|
||||||
private List<ManageTimelines> mItems;
|
private List<ManageTimelines> mItems;
|
||||||
|
|
||||||
private final OnStartDragListener mDragStartListener;
|
private final OnStartDragListener mDragStartListener;
|
||||||
|
private final OnUndoListener mUndoListener;
|
||||||
|
|
||||||
private Context context;
|
private Context context;
|
||||||
private SharedPreferences sharedpreferences;
|
private SharedPreferences sharedpreferences;
|
||||||
|
|
||||||
public ReorderTabAdapter(Context context, List<ManageTimelines> manageTimelines, OnStartDragListener dragStartListener) {
|
public ReorderTabAdapter(Context context, List<ManageTimelines> manageTimelines, OnStartDragListener dragStartListener, OnUndoListener undoListener) {
|
||||||
this. mDragStartListener = dragStartListener;
|
this. mDragStartListener = dragStartListener;
|
||||||
|
this.mUndoListener = undoListener;
|
||||||
this.mItems = manageTimelines;
|
this.mItems = manageTimelines;
|
||||||
this.context = context;
|
this.context = context;
|
||||||
sharedpreferences = context.getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE);
|
sharedpreferences = context.getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE);
|
||||||
|
@ -197,11 +200,9 @@ public class ReorderTabAdapter extends RecyclerView.Adapter<ReorderTabAdapter.It
|
||||||
@Override
|
@Override
|
||||||
public void onItemDismiss(int position) {
|
public void onItemDismiss(int position) {
|
||||||
ManageTimelines item = mItems.get(position);
|
ManageTimelines item = mItems.get(position);
|
||||||
mItems.get(position).setDisplayed(false);
|
mUndoListener.onUndo(item, position);
|
||||||
mItems.remove(position);
|
mItems.remove(position);
|
||||||
notifyItemRemoved(position);
|
notifyItemRemoved(position);
|
||||||
mItems.add(item);
|
|
||||||
notifyItemInserted((mItems.size()-1));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -246,8 +247,7 @@ public class ReorderTabAdapter extends RecyclerView.Adapter<ReorderTabAdapter.It
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onItemSelected() {
|
public void onItemSelected() {
|
||||||
int theme = sharedpreferences.getInt(Helper.SET_THEME, Helper.THEME_DARK);
|
itemView.setBackgroundColor(ContextCompat.getColor(context, R.color.mastodonC3));
|
||||||
itemView.setBackgroundColor(Color.LTGRAY);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -16,8 +16,10 @@ package fr.gouv.etalab.mastodon.fragments;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.database.sqlite.SQLiteDatabase;
|
import android.database.sqlite.SQLiteDatabase;
|
||||||
|
import android.graphics.Paint;
|
||||||
import android.os.AsyncTask;
|
import android.os.AsyncTask;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
import android.os.Handler;
|
||||||
import android.support.annotation.NonNull;
|
import android.support.annotation.NonNull;
|
||||||
import android.support.v4.app.Fragment;
|
import android.support.v4.app.Fragment;
|
||||||
import android.support.v7.widget.LinearLayoutManager;
|
import android.support.v7.widget.LinearLayoutManager;
|
||||||
|
@ -26,6 +28,8 @@ import android.support.v7.widget.helper.ItemTouchHelper;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
|
import android.widget.RelativeLayout;
|
||||||
|
import android.widget.TextView;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
@ -35,6 +39,7 @@ import fr.gouv.etalab.mastodon.asynctasks.SyncTimelinesAsyncTask;
|
||||||
import fr.gouv.etalab.mastodon.client.Entities.ManageTimelines;
|
import fr.gouv.etalab.mastodon.client.Entities.ManageTimelines;
|
||||||
import fr.gouv.etalab.mastodon.drawers.ReorderTabAdapter;
|
import fr.gouv.etalab.mastodon.drawers.ReorderTabAdapter;
|
||||||
import fr.gouv.etalab.mastodon.helper.itemtouchhelper.OnStartDragListener;
|
import fr.gouv.etalab.mastodon.helper.itemtouchhelper.OnStartDragListener;
|
||||||
|
import fr.gouv.etalab.mastodon.helper.itemtouchhelper.OnUndoListener;
|
||||||
import fr.gouv.etalab.mastodon.helper.itemtouchhelper.SimpleItemTouchHelperCallback;
|
import fr.gouv.etalab.mastodon.helper.itemtouchhelper.SimpleItemTouchHelperCallback;
|
||||||
import fr.gouv.etalab.mastodon.sqlite.Sqlite;
|
import fr.gouv.etalab.mastodon.sqlite.Sqlite;
|
||||||
import fr.gouv.etalab.mastodon.sqlite.TimelinesDAO;
|
import fr.gouv.etalab.mastodon.sqlite.TimelinesDAO;
|
||||||
|
@ -44,12 +49,16 @@ import fr.gouv.etalab.mastodon.sqlite.TimelinesDAO;
|
||||||
* Created by Thomas on 31/03/2019.
|
* Created by Thomas on 31/03/2019.
|
||||||
* Fragment to display tags
|
* Fragment to display tags
|
||||||
*/
|
*/
|
||||||
public class DisplayReorderTabFragment extends Fragment implements OnStartDragListener {
|
public class DisplayReorderTabFragment extends Fragment implements OnStartDragListener, OnUndoListener {
|
||||||
|
|
||||||
|
|
||||||
private Context context;
|
private Context context;
|
||||||
public static boolean updated;
|
public static boolean updated;
|
||||||
private ItemTouchHelper touchHelper;
|
private ItemTouchHelper touchHelper;
|
||||||
|
private RelativeLayout undo_container;
|
||||||
|
private TextView undo_action;
|
||||||
|
private List<ManageTimelines> timelines;
|
||||||
|
private ReorderTabAdapter adapter;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public View onCreateView(@NonNull LayoutInflater inflater, final ViewGroup container, Bundle savedInstanceState) {
|
public View onCreateView(@NonNull LayoutInflater inflater, final ViewGroup container, Bundle savedInstanceState) {
|
||||||
|
@ -60,14 +69,15 @@ public class DisplayReorderTabFragment extends Fragment implements OnStartDragLi
|
||||||
RecyclerView lv_reorder_tabs = rootView.findViewById(R.id.lv_reorder_tabs);
|
RecyclerView lv_reorder_tabs = rootView.findViewById(R.id.lv_reorder_tabs);
|
||||||
|
|
||||||
SQLiteDatabase db = Sqlite.getInstance(context, Sqlite.DB_NAME, null, Sqlite.DB_VERSION).open();
|
SQLiteDatabase db = Sqlite.getInstance(context, Sqlite.DB_NAME, null, Sqlite.DB_VERSION).open();
|
||||||
List<ManageTimelines> timelines = new TimelinesDAO(context, db).getAllTimelines();
|
timelines = new TimelinesDAO(context, db).getAllTimelines();
|
||||||
ReorderTabAdapter adapter = new ReorderTabAdapter(context, timelines, DisplayReorderTabFragment.this);
|
adapter = new ReorderTabAdapter(context, timelines, DisplayReorderTabFragment.this, DisplayReorderTabFragment.this);
|
||||||
|
|
||||||
ItemTouchHelper.Callback callback =
|
ItemTouchHelper.Callback callback =
|
||||||
new SimpleItemTouchHelperCallback(adapter);
|
new SimpleItemTouchHelperCallback(adapter);
|
||||||
touchHelper = new ItemTouchHelper(callback);
|
touchHelper = new ItemTouchHelper(callback);
|
||||||
touchHelper.attachToRecyclerView(lv_reorder_tabs);
|
touchHelper.attachToRecyclerView(lv_reorder_tabs);
|
||||||
|
undo_action = rootView.findViewById(R.id.undo_action);
|
||||||
|
undo_container = rootView.findViewById(R.id.undo_container);
|
||||||
lv_reorder_tabs.setAdapter(adapter);
|
lv_reorder_tabs.setAdapter(adapter);
|
||||||
LinearLayoutManager mLayoutManager = new LinearLayoutManager(context);
|
LinearLayoutManager mLayoutManager = new LinearLayoutManager(context);
|
||||||
lv_reorder_tabs.setLayoutManager(mLayoutManager);
|
lv_reorder_tabs.setLayoutManager(mLayoutManager);
|
||||||
|
@ -91,4 +101,27 @@ public class DisplayReorderTabFragment extends Fragment implements OnStartDragLi
|
||||||
public void onStartDrag(RecyclerView.ViewHolder viewHolder) {
|
public void onStartDrag(RecyclerView.ViewHolder viewHolder) {
|
||||||
touchHelper.startDrag(viewHolder);
|
touchHelper.startDrag(viewHolder);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onUndo(ManageTimelines manageTimelines, int position) {
|
||||||
|
undo_container.setVisibility(View.VISIBLE);
|
||||||
|
undo_action.setPaintFlags(undo_action.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);
|
||||||
|
undo_action.setOnClickListener(new View.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
timelines.add(position, manageTimelines);
|
||||||
|
adapter.notifyItemInserted(position);
|
||||||
|
undo_container.setVisibility(View.GONE);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
final Handler handler = new Handler();
|
||||||
|
handler.postDelayed(new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
undo_container.setVisibility(View.GONE);
|
||||||
|
}
|
||||||
|
}, 2000);
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,34 @@
|
||||||
|
package fr.gouv.etalab.mastodon.helper.itemtouchhelper;
|
||||||
|
|
||||||
|
/* Copyright 2019 Thomas Schneider
|
||||||
|
*
|
||||||
|
* This file is a part of Mastalab
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify it under the terms of the
|
||||||
|
* GNU General Public License as published by the Free Software Foundation; either version 3 of the
|
||||||
|
* License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* Mastalab is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even
|
||||||
|
* the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
|
||||||
|
* Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along with Mastalab; if not,
|
||||||
|
* see <http://www.gnu.org/licenses>. */
|
||||||
|
|
||||||
|
|
||||||
|
import fr.gouv.etalab.mastodon.client.Entities.ManageTimelines;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Listener for manual initiation of a undo.
|
||||||
|
*/
|
||||||
|
public interface OnUndoListener {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called when an item is removed
|
||||||
|
*
|
||||||
|
* @param timelines The timeline ManageTimelines
|
||||||
|
* @param position The position of the item in tablayout
|
||||||
|
*/
|
||||||
|
void onUndo(ManageTimelines timelines, int position);
|
||||||
|
|
||||||
|
}
|
|
@ -28,5 +28,32 @@
|
||||||
android:scrollbars="none"
|
android:scrollbars="none"
|
||||||
>
|
>
|
||||||
</android.support.v7.widget.RecyclerView>
|
</android.support.v7.widget.RecyclerView>
|
||||||
|
|
||||||
|
<RelativeLayout
|
||||||
|
android:id="@+id/undo_container"
|
||||||
|
android:visibility="gone"
|
||||||
|
android:background="@color/mastodonC3"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="50dp"
|
||||||
|
android:layout_alignParentBottom="true"
|
||||||
|
android:layout_marginBottom="0dp">
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/undo_action"
|
||||||
|
android:paddingLeft="20dp"
|
||||||
|
android:paddingRight="20dp"
|
||||||
|
android:paddingTop="5dp"
|
||||||
|
android:paddingBottom="5dp"
|
||||||
|
android:layout_alignParentEnd="true"
|
||||||
|
android:layout_centerInParent="true"
|
||||||
|
android:layout_marginEnd="10dp"
|
||||||
|
android:layout_marginRight="10dp"
|
||||||
|
android:textColor="@color/mastodonC4"
|
||||||
|
android:textAllCaps="true"
|
||||||
|
android:text="@string/undo"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:textSize="18sp"
|
||||||
|
android:layout_alignParentRight="true" />
|
||||||
|
</RelativeLayout>
|
||||||
</RelativeLayout>
|
</RelativeLayout>
|
||||||
|
|
||||||
|
|
|
@ -927,6 +927,7 @@
|
||||||
<string name="move_timeline">Move timeline</string>
|
<string name="move_timeline">Move timeline</string>
|
||||||
<string name="hide_timeline">Hide timeline</string>
|
<string name="hide_timeline">Hide timeline</string>
|
||||||
<string name="reorder_timelines">Reorder timelines</string>
|
<string name="reorder_timelines">Reorder timelines</string>
|
||||||
|
<string name="undo">Undo</string>
|
||||||
|
|
||||||
<plurals name="number_of_vote">
|
<plurals name="number_of_vote">
|
||||||
<item quantity="one">%d vote</item>
|
<item quantity="one">%d vote</item>
|
||||||
|
|
Loading…
Reference in New Issue