Multiple select actions

pull/146/head
M66B 7 years ago
parent 77fabb2d37
commit 991d68112d

@ -74,6 +74,7 @@ public class FragmentMessages extends FragmentEx {
private ImageButton ibHintActions; private ImageButton ibHintActions;
private TextView tvNoEmail; private TextView tvNoEmail;
private RecyclerView rvMessage; private RecyclerView rvMessage;
private BottomNavigationView multiple;
private BottomNavigationView bottom_navigation; private BottomNavigationView bottom_navigation;
private ProgressBar pbWait; private ProgressBar pbWait;
private Group grpSupport; private Group grpSupport;
@ -95,10 +96,9 @@ public class FragmentMessages extends FragmentEx {
private List<Long> trashes = new ArrayList<>(); private List<Long> trashes = new ArrayList<>();
private AdapterMessage.ViewType viewType; private AdapterMessage.ViewType viewType;
private SelectionTracker<Long> selectionTracker = null;
private LiveData<PagedList<TupleMessageEx>> messages = null; private LiveData<PagedList<TupleMessageEx>> messages = null;
private SelectionTracker<Long> selectionTracker;
private int autoCount = 0; private int autoCount = 0;
private boolean autoExpand = true; private boolean autoExpand = true;
private List<Long> expanded = new ArrayList<>(); private List<Long> expanded = new ArrayList<>();
@ -149,6 +149,7 @@ public class FragmentMessages extends FragmentEx {
ibHintActions = view.findViewById(R.id.ibHintActions); ibHintActions = view.findViewById(R.id.ibHintActions);
tvNoEmail = view.findViewById(R.id.tvNoEmail); tvNoEmail = view.findViewById(R.id.tvNoEmail);
rvMessage = view.findViewById(R.id.rvFolder); rvMessage = view.findViewById(R.id.rvFolder);
multiple = view.findViewById(R.id.multiple);
bottom_navigation = view.findViewById(R.id.bottom_navigation); bottom_navigation = view.findViewById(R.id.bottom_navigation);
pbWait = view.findViewById(R.id.pbWait); pbWait = view.findViewById(R.id.pbWait);
grpSupport = view.findViewById(R.id.grpSupport); grpSupport = view.findViewById(R.id.grpSupport);
@ -233,6 +234,7 @@ public class FragmentMessages extends FragmentEx {
}); });
rvMessage.setAdapter(adapter); rvMessage.setAdapter(adapter);
if (viewType == AdapterMessage.ViewType.FOLDER) {
selectionTracker = new SelectionTracker.Builder<>( selectionTracker = new SelectionTracker.Builder<>(
"messages-selection", "messages-selection",
rvMessage, rvMessage,
@ -246,8 +248,10 @@ public class FragmentMessages extends FragmentEx {
selectionTracker.addObserver(new SelectionTracker.SelectionObserver() { selectionTracker.addObserver(new SelectionTracker.SelectionObserver() {
@Override @Override
public void onSelectionChanged() { public void onSelectionChanged() {
multiple.setVisibility(selectionTracker.hasSelection() ? View.VISIBLE : View.GONE);
} }
}); });
}
new ItemTouchHelper(new ItemTouchHelper.Callback() { new ItemTouchHelper(new ItemTouchHelper.Callback() {
@Override @Override
@ -518,6 +522,7 @@ public class FragmentMessages extends FragmentEx {
// Initialize // Initialize
tvNoEmail.setVisibility(View.GONE); tvNoEmail.setVisibility(View.GONE);
multiple.setVisibility(View.GONE);
bottom_navigation.setVisibility(View.GONE); bottom_navigation.setVisibility(View.GONE);
grpReady.setVisibility(View.GONE); grpReady.setVisibility(View.GONE);
pbWait.setVisibility(View.VISIBLE); pbWait.setVisibility(View.VISIBLE);
@ -535,6 +540,7 @@ public class FragmentMessages extends FragmentEx {
outState.putLongArray("expanded", Helper.toLongArray(expanded)); outState.putLongArray("expanded", Helper.toLongArray(expanded));
outState.putLongArray("headers", Helper.toLongArray(headers)); outState.putLongArray("headers", Helper.toLongArray(headers));
outState.putLongArray("images", Helper.toLongArray(images)); outState.putLongArray("images", Helper.toLongArray(images));
if (selectionTracker != null)
selectionTracker.onSaveInstanceState(outState); selectionTracker.onSaveInstanceState(outState);
} }
@ -548,6 +554,7 @@ public class FragmentMessages extends FragmentEx {
expanded = Helper.fromLongArray(savedInstanceState.getLongArray("expanded")); expanded = Helper.fromLongArray(savedInstanceState.getLongArray("expanded"));
headers = Helper.fromLongArray(savedInstanceState.getLongArray("headers")); headers = Helper.fromLongArray(savedInstanceState.getLongArray("headers"));
images = Helper.fromLongArray(savedInstanceState.getLongArray("images")); images = Helper.fromLongArray(savedInstanceState.getLongArray("images"));
if (selectionTracker != null)
selectionTracker.onRestoreInstanceState(savedInstanceState); selectionTracker.onRestoreInstanceState(savedInstanceState);
} }
@ -637,6 +644,8 @@ public class FragmentMessages extends FragmentEx {
} }
}); });
multiple.setVisibility(selectionTracker != null && selectionTracker.hasSelection() ? View.VISIBLE : View.GONE);
if (viewType == AdapterMessage.ViewType.THREAD) { if (viewType == AdapterMessage.ViewType.THREAD) {
// Navigation // Navigation
ViewModelMessages model = ViewModelProviders.of(getActivity()).get(ViewModelMessages.class); ViewModelMessages model = ViewModelProviders.of(getActivity()).get(ViewModelMessages.class);

@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24.0"
android:viewportHeight="24.0"
android:tint="?attr/colorControlNormal">
<path
android:fillColor="@android:color/white"
android:pathData="M15.73,3L8.27,3L3,8.27v7.46L8.27,21h7.46L21,15.73L21,8.27L15.73,3zM12,17.3c-0.72,0 -1.3,-0.58 -1.3,-1.3 0,-0.72 0.58,-1.3 1.3,-1.3 0.72,0 1.3,0.58 1.3,1.3 0,0.72 -0.58,1.3 -1.3,1.3zM13,13h-2L11,7h2v6z"/>
</vector>

@ -6,6 +6,11 @@
android:layout_height="match_parent" android:layout_height="match_parent"
tools:context=".ActivityView"> tools:context=".ActivityView">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@+id/multiple">
<androidx.constraintlayout.widget.ConstraintLayout <androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent"> android:layout_height="match_parent">
@ -99,7 +104,7 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="@string/title_no_messages" android:text="@string/title_no_messages"
android:textAppearance="@style/TextAppearance.AppCompat.Medium" android:textAppearance="@style/TextAppearance.AppCompat.Medium"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toTopOf="@+id/bottom_navigation"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" /> app:layout_constraintTop_toTopOf="parent" />
@ -121,7 +126,7 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:indeterminate="true" android:indeterminate="true"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toTopOf="@+id/bottom_navigation"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" /> app:layout_constraintTop_toTopOf="parent" />
@ -163,6 +168,7 @@
android:layout_height="0dp" android:layout_height="0dp"
app:constraint_referenced_ids="rvFolder" /> app:constraint_referenced_ids="rvFolder" />
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>
</FrameLayout>
<com.google.android.material.floatingactionbutton.FloatingActionButton <com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/fab" android:id="@+id/fab"
@ -172,7 +178,16 @@
android:layout_margin="16dp" android:layout_margin="16dp"
android:src="@drawable/baseline_edit_24" android:src="@drawable/baseline_edit_24"
android:tint="@color/colorActionForeground" android:tint="@color/colorActionForeground"
app:backgroundTint="?attr/colorAccent" app:backgroundTint="?attr/colorAccent" />
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" /> <com.google.android.material.bottomnavigation.BottomNavigationView
android:id="@+id/multiple"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:background="@color/colorPrimary"
app:itemIconTint="@color/bottomnav_background"
app:itemTextColor="@color/bottomnav_background"
app:labelVisibilityMode="labeled"
app:menu="@menu/action_multiple" />
</androidx.coordinatorlayout.widget.CoordinatorLayout> </androidx.coordinatorlayout.widget.CoordinatorLayout>

@ -1,16 +1,13 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" <menu xmlns:android="http://schemas.android.com/apk/res/android">
xmlns:app="http://schemas.android.com/apk/res-auto">
<item <item
android:id="@+id/action_delete" android:id="@+id/action_delete"
android:icon="@drawable/baseline_delete_24" android:icon="@drawable/baseline_delete_24"
android:title="@string/title_delete" android:title="@string/title_delete" />
app:showAsAction="ifRoom" />
<item <item
android:id="@+id/action_save" android:id="@+id/action_save"
android:icon="@drawable/baseline_save_alt_24" android:icon="@drawable/baseline_save_alt_24"
android:title="@string/title_save" android:title="@string/title_save" />
app:showAsAction="ifRoom" />
</menu> </menu>

@ -1,22 +1,18 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" <menu xmlns:android="http://schemas.android.com/apk/res/android">
xmlns:app="http://schemas.android.com/apk/res-auto">
<item <item
android:id="@+id/action_delete" android:id="@+id/action_delete"
android:icon="@drawable/baseline_delete_24" android:icon="@drawable/baseline_delete_24"
android:title="@string/title_discard" android:title="@string/title_discard" />
app:showAsAction="ifRoom" />
<item <item
android:id="@+id/action_save" android:id="@+id/action_save"
android:icon="@drawable/baseline_save_alt_24" android:icon="@drawable/baseline_save_alt_24"
android:title="@string/title_save" android:title="@string/title_save" />
app:showAsAction="ifRoom" />
<item <item
android:id="@+id/action_send" android:id="@+id/action_send"
android:icon="@drawable/baseline_send_24" android:icon="@drawable/baseline_send_24"
android:title="@string/title_send" android:title="@string/title_send" />
app:showAsAction="ifRoom" />
</menu> </menu>

@ -1,34 +1,28 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" <menu xmlns:android="http://schemas.android.com/apk/res/android">
xmlns:app="http://schemas.android.com/apk/res-auto">
<item <item
android:id="@+id/action_more" android:id="@+id/action_more"
android:icon="@drawable/baseline_more_vert_24" android:icon="@drawable/baseline_more_vert_24"
android:title="@string/title_more" android:title="@string/title_more" />
app:showAsAction="ifRoom" />
<item <item
android:id="@+id/action_delete" android:id="@+id/action_delete"
android:icon="@drawable/baseline_delete_24" android:icon="@drawable/baseline_delete_24"
android:title="@string/title_trash" android:title="@string/title_trash" />
app:showAsAction="ifRoom" />
<item <item
android:id="@+id/action_move" android:id="@+id/action_move"
android:icon="@drawable/baseline_folder_24" android:icon="@drawable/baseline_folder_24"
android:title="@string/title_move" android:title="@string/title_move" />
app:showAsAction="ifRoom" />
<item <item
android:id="@+id/action_archive" android:id="@+id/action_archive"
android:icon="@drawable/baseline_archive_24" android:icon="@drawable/baseline_archive_24"
android:title="@string/title_archive" android:title="@string/title_archive" />
app:showAsAction="ifRoom" />
<item <item
android:id="@+id/action_reply" android:id="@+id/action_reply"
android:icon="@drawable/baseline_reply_24" android:icon="@drawable/baseline_reply_24"
android:title="@string/title_reply" android:title="@string/title_reply" />
app:showAsAction="ifRoom" />
</menu> </menu>

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/menu_junk"
android:icon="@drawable/baseline_report_24"
android:title="@string/title_spam" />
<item
android:id="@+id/action_delete"
android:icon="@drawable/baseline_delete_24"
android:title="@string/title_trash" />
<item
android:id="@+id/action_move"
android:icon="@drawable/baseline_folder_24"
android:title="@string/title_move" />
<item
android:id="@+id/action_archive"
android:icon="@drawable/baseline_archive_24"
android:title="@string/title_archive" />
</menu>
Loading…
Cancel
Save