From 6d7b3128ebbbbbcecd2be02d26cd3df33b75f8fe Mon Sep 17 00:00:00 2001 From: M66B Date: Sat, 3 Apr 2021 09:41:42 +0200 Subject: [PATCH] Folder favorite improvements --- .../java/eu/faircode/email/DaoFolder.java | 5 +- .../eu/faircode/email/EntityOperation.java | 4 -- .../faircode/email/FragmentDialogFolder.java | 66 ++++++++++++++++--- .../eu/faircode/email/FragmentOptions.java | 1 + .../faircode/email/FragmentOptionsMisc.java | 14 ---- .../main/res/layout/dialog_folder_select.xml | 18 +++-- 6 files changed, 76 insertions(+), 32 deletions(-) diff --git a/app/src/main/java/eu/faircode/email/DaoFolder.java b/app/src/main/java/eu/faircode/email/DaoFolder.java index 32cebc6ddd..5b371b887f 100644 --- a/app/src/main/java/eu/faircode/email/DaoFolder.java +++ b/app/src/main/java/eu/faircode/email/DaoFolder.java @@ -211,8 +211,9 @@ public interface DaoFolder { int increaseSelectedCount(long id, long last); @Query("UPDATE folder" + - " SET selected_last = 0, selected_count = 0") - int resetSelectedCount(); + " SET selected_last = 0, selected_count = 0" + + " WHERE account = :account") + int resetSelectedCount(long account); @Query("SELECT * FROM folder WHERE id = :id") EntityFolder getFolder(Long id); diff --git a/app/src/main/java/eu/faircode/email/EntityOperation.java b/app/src/main/java/eu/faircode/email/EntityOperation.java index e3a43f52a6..777cbd2f4d 100644 --- a/app/src/main/java/eu/faircode/email/EntityOperation.java +++ b/app/src/main/java/eu/faircode/email/EntityOperation.java @@ -239,10 +239,6 @@ public class EntityOperation { EntityMessage.snooze(context, message.id, null); } - if (source.account.equals(target.account) && - EntityFolder.USER.equals(target.type)) - db.folder().increaseSelectedCount(target.id, new Date().getTime()); - if (EntityFolder.JUNK.equals(source.type) && EntityFolder.INBOX.equals(target.type)) { List rules = db.rule().getRules(target.id); for (EntityRule rule : rules) diff --git a/app/src/main/java/eu/faircode/email/FragmentDialogFolder.java b/app/src/main/java/eu/faircode/email/FragmentDialogFolder.java index 782f3a4969..25921d52b8 100644 --- a/app/src/main/java/eu/faircode/email/FragmentDialogFolder.java +++ b/app/src/main/java/eu/faircode/email/FragmentDialogFolder.java @@ -22,7 +22,6 @@ package eu.faircode.email; import android.app.Dialog; import android.content.Context; import android.content.SharedPreferences; -import android.graphics.Paint; import android.os.Bundle; import android.text.Editable; import android.text.TextWatcher; @@ -47,7 +46,9 @@ import org.json.JSONArray; import org.json.JSONException; import java.util.ArrayList; +import java.util.Date; import java.util.List; +import java.util.concurrent.ExecutorService; import static android.app.Activity.RESULT_OK; @@ -56,6 +57,9 @@ public class FragmentDialogFolder extends FragmentDialogBase { private static final int MAX_SELECTED_FOLDERS = 5; + private static final ExecutorService executor = + Helper.getBackgroundExecutor(1, "folder"); + @NonNull @Override public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) { @@ -84,6 +88,7 @@ public class FragmentDialogFolder extends FragmentDialogBase { final TextView tvFavorite1 = dview.findViewById(R.id.tvFavorite1); final TextView tvFavorite2 = dview.findViewById(R.id.tvFavorite2); final TextView tvFavorite3 = dview.findViewById(R.id.tvFavorite3); + final ImageButton ibResetFavorites = dview.findViewById(R.id.ibResetFavorites); final RecyclerView rvFolder = dview.findViewById(R.id.rvFolder); final ContentLoadingProgressBar pbWait = dview.findViewById(R.id.pbWait); final Group grpReady = dview.findViewById(R.id.grpReady); @@ -136,6 +141,8 @@ public class FragmentDialogFolder extends FragmentDialogBase { JSONArray jarray = new JSONArray(selected_folders); prefs.edit().putString("selected_folders", jarray.toString()).apply(); + increaseSelectedCount(folder.id, context); + Bundle args = getArguments(); args.putLong("folder", folder.id); @@ -147,10 +154,7 @@ public class FragmentDialogFolder extends FragmentDialogBase { tvFavorite1.setVisibility(View.GONE); tvFavorite2.setVisibility(View.GONE); tvFavorite3.setVisibility(View.GONE); - - tvFavorite1.setPaintFlags(tvFavorite1.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG); - tvFavorite2.setPaintFlags(tvFavorite2.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG); - tvFavorite3.setPaintFlags(tvFavorite3.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG); + ibResetFavorites.setVisibility(View.GONE); View.OnClickListener listener = new View.OnClickListener() { @Override @@ -159,6 +163,8 @@ public class FragmentDialogFolder extends FragmentDialogBase { if (id == null) return; + increaseSelectedCount(id, context); + Bundle args = getArguments(); args.putLong("folder", id); @@ -170,6 +176,29 @@ public class FragmentDialogFolder extends FragmentDialogBase { tvFavorite2.setOnClickListener(listener); tvFavorite3.setOnClickListener(listener); + ibResetFavorites.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + tvFavorite1.setVisibility(View.GONE); + tvFavorite2.setVisibility(View.GONE); + tvFavorite3.setVisibility(View.GONE); + ibResetFavorites.setVisibility(View.GONE); + + final DB db = DB.getInstance(context); + + executor.submit(new Runnable() { + @Override + public void run() { + try { + db.folder().resetSelectedCount(account); + } catch (Throwable ex) { + Log.e(ex); + } + } + }); + } + }); + rvFolder.setAdapter(adapter); etSearch.addTextChangedListener(new TextWatcher() { @@ -264,9 +293,7 @@ public class FragmentDialogFolder extends FragmentDialogBase { if (data.folders == null || data.folders.size() == 0) tvNoFolder.setVisibility(View.VISIBLE); else { - adapter.setDisabled(Helper.fromLongArray(disabled)); - adapter.set(data.folders); - if (data.favorites != null) { + if (data.favorites != null && data.favorites.size() > 0) { TextView[] tv = new TextView[]{tvFavorite1, tvFavorite2, tvFavorite3}; for (int i = 0; i < data.favorites.size(); i++) { EntityFolder favorite = data.favorites.get(i); @@ -274,7 +301,13 @@ public class FragmentDialogFolder extends FragmentDialogBase { tv[i].setText(favorite.getDisplayName(context)); tv[i].setVisibility(View.VISIBLE); } + + ibResetFavorites.setVisibility(View.VISIBLE); } + + adapter.setDisabled(Helper.fromLongArray(disabled)); + adapter.set(data.folders); + grpReady.setVisibility(View.VISIBLE); } } @@ -293,6 +326,23 @@ public class FragmentDialogFolder extends FragmentDialogBase { .create(); } + private static void increaseSelectedCount(Long id, Context context) { + final DB db = DB.getInstance(context); + + executor.submit(new Runnable() { + @Override + public void run() { + try { + EntityFolder folder = db.folder().getFolder(id); + if (folder != null && EntityFolder.USER.equals(folder.type)) + db.folder().increaseSelectedCount(folder.id, new Date().getTime()); + } catch (Throwable ex) { + Log.e(ex); + } + } + }); + } + private static class Data { private List folders; private List favorites; diff --git a/app/src/main/java/eu/faircode/email/FragmentOptions.java b/app/src/main/java/eu/faircode/email/FragmentOptions.java index 798066731b..32c6093e3f 100644 --- a/app/src/main/java/eu/faircode/email/FragmentOptions.java +++ b/app/src/main/java/eu/faircode/email/FragmentOptions.java @@ -350,6 +350,7 @@ public class FragmentOptions extends FragmentBase { for (String option : options) editor.remove(option); editor.apply(); + ToastEx.makeText(context, R.string.title_setup_done, Toast.LENGTH_LONG).show(); } }) diff --git a/app/src/main/java/eu/faircode/email/FragmentOptionsMisc.java b/app/src/main/java/eu/faircode/email/FragmentOptionsMisc.java index eb8bcf2f98..56cb76ab51 100644 --- a/app/src/main/java/eu/faircode/email/FragmentOptionsMisc.java +++ b/app/src/main/java/eu/faircode/email/FragmentOptionsMisc.java @@ -835,20 +835,6 @@ public class FragmentOptionsMisc extends FragmentBase implements SharedPreferenc editor.remove(key); editor.apply(); - new SimpleTask() { - @Override - protected Void onExecute(Context context, Bundle args) { - DB db = DB.getInstance(context); - db.folder().resetSelectedCount(); - return null; - } - - @Override - protected void onException(Bundle args, Throwable ex) { - Log.unexpectedError(getParentFragmentManager(), ex); - } - }.execute(this, new Bundle(), "reset:questions"); - ToastEx.makeText(getContext(), R.string.title_setup_done, Toast.LENGTH_LONG).show(); } diff --git a/app/src/main/res/layout/dialog_folder_select.xml b/app/src/main/res/layout/dialog_folder_select.xml index af85de4a7f..bb6b0f659a 100644 --- a/app/src/main/res/layout/dialog_folder_select.xml +++ b/app/src/main/res/layout/dialog_folder_select.xml @@ -50,7 +50,7 @@ android:singleLine="true" android:text="favorite1" android:textAlignment="center" - android:textAppearance="@style/TextAppearance.AppCompat.Medium" + android:textAppearance="@style/TextAppearance.AppCompat.Small" android:textColor="?android:attr/textColorLink" android:textStyle="bold" app:layout_constraintEnd_toStartOf="@+id/tvFavorite2" @@ -67,7 +67,7 @@ android:singleLine="true" android:text="favorite2" android:textAlignment="center" - android:textAppearance="@style/TextAppearance.AppCompat.Medium" + android:textAppearance="@style/TextAppearance.AppCompat.Small" android:textColor="?android:attr/textColorLink" android:textStyle="bold" app:layout_constraintEnd_toStartOf="@+id/tvFavorite3" @@ -84,14 +84,24 @@ android:singleLine="true" android:text="favorite3" android:textAlignment="center" - android:textAppearance="@style/TextAppearance.AppCompat.Medium" + android:textAppearance="@style/TextAppearance.AppCompat.Small" android:textColor="?android:attr/textColorLink" android:textStyle="bold" - app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintEnd_toStartOf="@+id/ibResetFavorites" app:layout_constraintHorizontal_chainStyle="spread" app:layout_constraintStart_toEndOf="@id/tvFavorite2" app:layout_constraintTop_toBottomOf="@id/tvNoFolder" /> + +