From b460c06d1b85b77851384839152c6dd1bdd748fe Mon Sep 17 00:00:00 2001 From: M66B Date: Sun, 5 Aug 2018 06:18:43 +0000 Subject: [PATCH] Progress bar for attachment downloads --- .../eu/faircode/email/AdapterAttachment.java | 83 ++++++++++--------- .../java/eu/faircode/email/DaoAttachment.java | 12 ++- .../java/eu/faircode/email/DaoFolder.java | 3 + .../eu/faircode/email/FragmentMessage.java | 4 +- .../java/eu/faircode/email/MessageHelper.java | 1 - .../eu/faircode/email/ServiceSynchronize.java | 8 +- .../eu/faircode/email/TupleAttachment.java | 19 +++++ app/src/main/res/layout/fragment_message.xml | 3 +- app/src/main/res/layout/item_attachment.xml | 26 +++--- 9 files changed, 98 insertions(+), 61 deletions(-) create mode 100644 app/src/main/java/eu/faircode/email/TupleAttachment.java diff --git a/app/src/main/java/eu/faircode/email/AdapterAttachment.java b/app/src/main/java/eu/faircode/email/AdapterAttachment.java index f8afe75843..bbda80caa6 100644 --- a/app/src/main/java/eu/faircode/email/AdapterAttachment.java +++ b/app/src/main/java/eu/faircode/email/AdapterAttachment.java @@ -35,6 +35,7 @@ import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; +import android.widget.ProgressBar; import android.widget.TextView; import android.widget.Toast; @@ -51,15 +52,15 @@ public class AdapterAttachment extends RecyclerView.Adapter all = new ArrayList<>(); - private List filtered = new ArrayList<>(); + private List all = new ArrayList<>(); + private List filtered = new ArrayList<>(); public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { View itemView; TextView tvName; TextView tvSize; - TextView tvProgress; ImageView ivStatus; + ProgressBar progressbar; ViewHolder(View itemView) { super(itemView); @@ -67,8 +68,8 @@ public class AdapterAttachment extends RecyclerView.Adapter attachments) { + public void set(List attachments) { Log.i(Helper.TAG, "Set attachments=" + attachments.size()); - Collections.sort(attachments, new Comparator() { + Collections.sort(attachments, new Comparator() { @Override - public int compare(EntityAttachment a1, EntityAttachment a2) { + public int compare(TupleAttachment a1, TupleAttachment a2) { return a1.sequence.compareTo(a2.sequence); } }); @@ -202,10 +207,10 @@ public class AdapterAttachment extends RecyclerView.Adapter prev; - private List next; + private List prev; + private List next; - MessageDiffCallback(List prev, List next) { + MessageDiffCallback(List prev, List next) { this.prev = prev; this.next = next; } @@ -222,15 +227,15 @@ public class AdapterAttachment extends RecyclerView.Adapter> liveAttachments(long message); + @Query("SELECT id,message,sequence,name,type,size,progress" + + ", (NOT content IS NULL) as content" + + " FROM attachment WHERE message = :message") + LiveData> liveAttachments(long message); @Query("SELECT * FROM attachment WHERE message = :message AND sequence = :sequence") EntityAttachment getAttachment(long message, int sequence); + @Query("UPDATE attachment SET progress = :progress WHERE id = :id") + void setProgress(long id, int progress); + + @Query("SELECT content FROM attachment WHERE id = :id") + byte[] getContent(long id); + @Insert(onConflict = OnConflictStrategy.REPLACE) long insertAttachment(EntityAttachment attachment); diff --git a/app/src/main/java/eu/faircode/email/DaoFolder.java b/app/src/main/java/eu/faircode/email/DaoFolder.java index 823c43e7d9..a7cfb13029 100644 --- a/app/src/main/java/eu/faircode/email/DaoFolder.java +++ b/app/src/main/java/eu/faircode/email/DaoFolder.java @@ -30,6 +30,9 @@ import java.util.List; @Dao public interface DaoFolder { + @Query("SELECT * FROM folder WHERE account = :account") + List getFolders(long account); + @Query("SELECT * FROM folder WHERE account = :account AND synchronize = :synchronize") List getFolders(long account, boolean synchronize); diff --git a/app/src/main/java/eu/faircode/email/FragmentMessage.java b/app/src/main/java/eu/faircode/email/FragmentMessage.java index a184fb58ec..d0062e07d3 100644 --- a/app/src/main/java/eu/faircode/email/FragmentMessage.java +++ b/app/src/main/java/eu/faircode/email/FragmentMessage.java @@ -237,9 +237,9 @@ public class FragmentMessage extends Fragment { DB.getInstance(getContext()).attachment().liveAttachments(id).removeObservers(FragmentMessage.this); DB.getInstance(getContext()).attachment().liveAttachments(id).observe(FragmentMessage.this, - new Observer>() { + new Observer>() { @Override - public void onChanged(@Nullable List attachments) { + public void onChanged(@Nullable List attachments) { adapter.set(attachments); grpAttachments.setVisibility(attachments.size() > 0 ? View.VISIBLE : View.GONE); } diff --git a/app/src/main/java/eu/faircode/email/MessageHelper.java b/app/src/main/java/eu/faircode/email/MessageHelper.java index 3f2fbf9c77..eae30ea9d8 100644 --- a/app/src/main/java/eu/faircode/email/MessageHelper.java +++ b/app/src/main/java/eu/faircode/email/MessageHelper.java @@ -310,7 +310,6 @@ public class MessageHelper { if (Part.ATTACHMENT.equalsIgnoreCase(part.getDisposition()) || !TextUtils.isEmpty(part.getFileName())) { ContentType ct = new ContentType(part.getContentType()); EntityAttachment attachment = new EntityAttachment(); - attachment.sequence = result.size() + 1; attachment.name = part.getFileName(); attachment.type = ct.getBaseType(); attachment.size = part.getSize(); diff --git a/app/src/main/java/eu/faircode/email/ServiceSynchronize.java b/app/src/main/java/eu/faircode/email/ServiceSynchronize.java index 0f3c6b0af2..e6bea5202a 100644 --- a/app/src/main/java/eu/faircode/email/ServiceSynchronize.java +++ b/app/src/main/java/eu/faircode/email/ServiceSynchronize.java @@ -338,7 +338,7 @@ public class ServiceSynchronize extends LifecycleService { LocalBroadcastManager lbm = LocalBroadcastManager.getInstance(ServiceSynchronize.this); lbm.registerReceiver(processReceiver, new IntentFilter(ACTION_PROCESS_FOLDER)); Log.i(Helper.TAG, "listen process folder"); - for (final EntityFolder folder : db.folder().getFolders(account.id, false)) + for (final EntityFolder folder : db.folder().getFolders(account.id)) if (!EntityFolder.TYPE_OUTBOX.equals(folder.type)) lbm.sendBroadcast(new Intent(ACTION_PROCESS_FOLDER).putExtra("folder", folder.id)); @@ -1002,9 +1002,13 @@ public class ServiceSynchronize extends LifecycleService { message.id = db.message().insertMessage(message); Log.i(Helper.TAG, folder.name + " added id=" + message.id); + int sequence = 0; for (EntityAttachment attachment : helper.getAttachments()) { - Log.i(Helper.TAG, "attachment name=" + attachment.name + " type=" + attachment.type); + sequence++; + Log.i(Helper.TAG, "attachment seq=" + sequence + + " name=" + attachment.name + " type=" + attachment.type); attachment.message = message.id; + attachment.sequence = sequence; attachment.id = db.attachment().insertAttachment(attachment); } diff --git a/app/src/main/java/eu/faircode/email/TupleAttachment.java b/app/src/main/java/eu/faircode/email/TupleAttachment.java new file mode 100644 index 0000000000..3b73f3d1e4 --- /dev/null +++ b/app/src/main/java/eu/faircode/email/TupleAttachment.java @@ -0,0 +1,19 @@ +package eu.faircode.email; + +import android.support.annotation.NonNull; + +public class TupleAttachment { + @NonNull + public Long id; + @NonNull + public Long message; + @NonNull + public Integer sequence; + public String name; + @NonNull + public String type; + public Integer size; + public Integer progress; + @NonNull + public boolean content; +} diff --git a/app/src/main/res/layout/fragment_message.xml b/app/src/main/res/layout/fragment_message.xml index b5e2514c03..e579f30f17 100644 --- a/app/src/main/res/layout/fragment_message.xml +++ b/app/src/main/res/layout/fragment_message.xml @@ -153,10 +153,11 @@ android:layout_marginEnd="6dp" android:layout_marginStart="6dp" android:layout_marginTop="3dp" - android:maxHeight="90dp" android:scrollbarStyle="outsideOverlay" android:scrollbars="vertical" + app:layout_constrainedHeight="true" app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintHeight_max="150dp" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/vSeparatorAttachments" /> diff --git a/app/src/main/res/layout/item_attachment.xml b/app/src/main/res/layout/item_attachment.xml index a448aac9fc..d34923c4d6 100644 --- a/app/src/main/res/layout/item_attachment.xml +++ b/app/src/main/res/layout/item_attachment.xml @@ -36,20 +36,8 @@ android:text="10 kB" android:textAppearance="@style/TextAppearance.AppCompat.Small" app:layout_constraintBottom_toBottomOf="@id/ivAttachments" - app:layout_constraintEnd_toStartOf="@+id/tvProgress" - app:layout_constraintStart_toEndOf="@id/tvName" - app:layout_constraintTop_toTopOf="@id/ivAttachments" /> - - + + \ No newline at end of file