diff --git a/app/src/main/java/eu/faircode/email/AdapterContact.java b/app/src/main/java/eu/faircode/email/AdapterContact.java index f19d70bb5e..7a33801878 100644 --- a/app/src/main/java/eu/faircode/email/AdapterContact.java +++ b/app/src/main/java/eu/faircode/email/AdapterContact.java @@ -49,13 +49,12 @@ public class AdapterContact extends RecyclerView.Adapter all = new ArrayList<>(); - private List filtered = new ArrayList<>(); + private List items = new ArrayList<>(); private static NumberFormat nf = NumberFormat.getNumberInstance(); public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnLongClickListener { - private View itemView; + private View view; private ImageView ivType; private ImageView ivAvatar; private TextView tvName; @@ -67,7 +66,7 @@ public class AdapterContact extends RecyclerView.Adapter() { @Override protected Void onExecute(Context context, Bundle args) { long id = args.getLong("id"); - boolean favorite = args.getBoolean("favorite"); + int state = args.getInt("state"); DB db = DB.getInstance(context); - db.contact().setContactFavorite(id, favorite); + db.contact().setContactState(id, state); return null; } @@ -143,7 +148,7 @@ public class AdapterContact extends RecyclerView.Adapter contacts) { Log.i("Set contacts=" + contacts.size()); - all = contacts; + DiffUtil.DiffResult diff = DiffUtil.calculateDiff(new DiffCallback(items, contacts)); - DiffUtil.DiffResult diff = DiffUtil.calculateDiff(new DiffCallback(filtered, all)); - - filtered.clear(); - filtered.addAll(all); + items = contacts; + diff.dispatchUpdatesTo(this); diff.dispatchUpdatesTo(new ListUpdateCallback() { @Override public void onInserted(int position, int count) { @@ -224,16 +227,15 @@ public class AdapterContact extends RecyclerView.Adapter prev; - private List next; + private List prev = new ArrayList<>(); + private List next = new ArrayList<>(); DiffCallback(List prev, List next) { - this.prev = prev; - this.next = next; + this.prev.addAll(prev); + this.next.addAll(next); } @Override @@ -263,12 +265,12 @@ public class AdapterContact extends RecyclerView.Adapter getContacts(); @Query("SELECT * FROM contact" + - " ORDER BY favorite DESC, times_contacted DESC, last_contacted DESC") + " ORDER BY" + + " CASE WHEN favorite = 1 THEN 0 ELSE 1 END" + + ", times_contacted DESC" + + ", last_contacted DESC") LiveData> liveContacts(); @Query("SELECT * FROM contact" + + " WHERE favorite <> 2" + " ORDER BY favorite DESC, times_contacted DESC, last_contacted DESC" + " LIMIT :count") List getFrequentlyContacted(int count); @@ -66,8 +70,8 @@ public interface DaoContact { @Update int updateContact(EntityContact contact); - @Query("UPDATE contact SET favorite = :favorite WHERE id = :id") - int setContactFavorite(long id, boolean favorite); + @Query("UPDATE contact SET favorite = :state WHERE id = :id") + int setContactState(long id, int state); @Query("DELETE FROM contact WHERE id= :id") int deleteContact(long id); diff --git a/app/src/main/java/eu/faircode/email/EntityContact.java b/app/src/main/java/eu/faircode/email/EntityContact.java index 4fc687fe0c..bebeaaf200 100644 --- a/app/src/main/java/eu/faircode/email/EntityContact.java +++ b/app/src/main/java/eu/faircode/email/EntityContact.java @@ -27,6 +27,7 @@ import java.util.Objects; import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import androidx.room.ColumnInfo; import androidx.room.Entity; import androidx.room.Index; import androidx.room.PrimaryKey; @@ -64,7 +65,8 @@ public class EntityContact implements Serializable { public Integer times_contacted; public Long last_contacted; @NonNull - public Boolean favorite = false; + @ColumnInfo(name = "favorite") + public Integer state = 0; public JSONObject toJSON() throws JSONException { JSONObject json = new JSONObject(); @@ -75,7 +77,7 @@ public class EntityContact implements Serializable { json.put("avatar", avatar); json.put("times_contacted", times_contacted); json.put("last_contacted", last_contacted); - json.put("favorite", favorite); + json.put("state", state); return json; } @@ -100,7 +102,9 @@ public class EntityContact implements Serializable { contact.last_contacted = json.getLong("last_contacted"); if (json.has("favorite")) - contact.favorite = json.getBoolean("favorite"); + contact.state = (json.getBoolean("favorite") ? 1 : 0); + if (json.has("state")) + contact.state = json.getInt("state"); return contact; } @@ -113,9 +117,9 @@ public class EntityContact implements Serializable { this.email.equals(other.email) && Objects.equals(this.name, other.name) && Objects.equals(this.avatar, other.avatar) && - this.times_contacted == other.times_contacted && + this.times_contacted.equals(other.times_contacted) && Objects.equals(this.last_contacted, other.last_contacted) && - this.favorite == other.favorite); + this.state.equals(other.state)); } else return false; diff --git a/app/src/main/res/layout/item_contact.xml b/app/src/main/res/layout/item_contact.xml index 2798ce4abd..5186100ddf 100644 --- a/app/src/main/res/layout/item_contact.xml +++ b/app/src/main/res/layout/item_contact.xml @@ -1,89 +1,93 @@ - - + android:layout_height="wrap_content"> - - - - - + android:padding="3dp"> - + - + - + - - \ No newline at end of file + + + + + + + + + \ No newline at end of file