Add cleanup conversations option

Stephen Paul Weber created

Change summary

src/main/java/eu/siacs/conversations/entities/Conversation.java    |  2 
src/main/java/eu/siacs/conversations/ui/ConversationsActivity.java | 14 
src/main/res/menu/activity_conversations.xml                       |  8 
3 files changed, 22 insertions(+), 2 deletions(-)

Detailed changes

src/main/java/eu/siacs/conversations/entities/Conversation.java 🔗

@@ -695,7 +695,7 @@ public class Conversation extends AbstractEntity implements Blockable, Comparabl
                 .result();
     }
 
-    private long getSortableTime() {
+    public long getSortableTime() {
         Draft draft = getDraft();
         long messageTime = getLatestMessage().getTimeReceived();
         if (draft == null) {

src/main/java/eu/siacs/conversations/ui/ConversationsActivity.java 🔗

@@ -62,6 +62,8 @@ import androidx.databinding.DataBindingUtil;
 
 import com.cheogram.android.DownloadDefaultStickers;
 
+import com.google.common.collect.ImmutableList;
+
 import org.openintents.openpgp.util.OpenPgpApi;
 
 import java.util.Arrays;
@@ -626,6 +628,18 @@ public class ConversationsActivity extends XmppActivity implements OnConversatio
             case R.id.action_scan_qr_code:
                 UriHandlerActivity.scan(this);
                 return true;
+            case R.id.action_cleanup:
+                for (Conversation c : ImmutableList.copyOf(xmppConnectionService.getConversations())) {
+                    c.trim();
+                    if (c.getDraftMessage() != null) continue;
+                    if (c.getReplyTo() != null) continue;
+                    if (c.getMode() == Conversation.MODE_MULTI) continue;
+                    if (c.getBooleanAttribute(Conversation.ATTRIBUTE_PINNED_ON_TOP, false)) continue;
+                    if (c.unreadCount() > 0) continue;
+                    if (c.getSortableTime() > System.currentTimeMillis() - 600000) continue;
+                    xmppConnectionService.archiveConversation(c);
+                }
+                break;
             case R.id.action_search_all_conversations:
                 startActivity(new Intent(this, SearchActivity.class));
                 return true;

src/main/res/menu/activity_conversations.xml 🔗

@@ -22,4 +22,10 @@
         android:title="@string/scan_qr_code"
         android:visible="@bool/show_qr_code_scan"
         app:showAsAction="always" />
-</menu>
+    <item
+        android:id="@+id/action_cleanup"
+        android:orderInCategory="15"
+        android:title="Cleanup Conversations"
+        android:visible="true"
+        app:showAsAction="never" />
+</menu>