From 268ed75fc0f298fa689b832ee30b49ad709008d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?jos=C3=A9=20m?= Date: Sat, 23 Dec 2023 20:09:00 +0000 Subject: Translated using Weblate (Galician) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Currently translated at 100.0% (1183 of 1183 strings) Co-authored-by: josé m Translate-URL: https://hosted.weblate.org/projects/fedilab/strings/gl/ Translation: Fedilab/Strings --- app/src/main/res/values-gl/strings.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/res/values-gl/strings.xml b/app/src/main/res/values-gl/strings.xml index e2b37deaf..1516d4122 100644 --- a/app/src/main/res/values-gl/strings.xml +++ b/app/src/main/res/values-gl/strings.xml @@ -1067,4 +1067,5 @@ Copiar información Subliñar os elementos clicables Xa segues ese cancelo! + Mostrar barra de desprazamento nas cronoloxías \ No newline at end of file -- cgit v1.2.3 From 60301948b0687d46a35797ee2fd193d2c8f49cf3 Mon Sep 17 00:00:00 2001 From: ButterflyOfFire Date: Fri, 29 Dec 2023 08:10:20 +0100 Subject: Translated using Weblate (French) Currently translated at 98.9% (1170 of 1183 strings) Translated using Weblate (Arabic) Currently translated at 82.7% (979 of 1183 strings) Co-authored-by: ButterflyOfFire Translate-URL: https://hosted.weblate.org/projects/fedilab/strings/ar/ Translate-URL: https://hosted.weblate.org/projects/fedilab/strings/fr/ Translation: Fedilab/Strings --- app/src/main/res/values-ar/strings.xml | 44 +++++++++++++++++++++++----------- app/src/main/res/values-fr/strings.xml | 2 +- 2 files changed, 31 insertions(+), 15 deletions(-) diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index 3e152a0d0..c1fbee6f1 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -43,8 +43,8 @@ المفضلة متابِعون جدد الإشارات - الترقيات - عرض الترقيات + المعاد نشرها + عرض المعاد نشرها عرض الردود افتح في المتصفح ترجمة @@ -208,12 +208,12 @@ عدد الرسائل التي يتم تحميلها كل مرة تعطيل الصور الرمزية المتحركة تنبيهي عندما يتبعني أحدهم - تنبيهي عندما يقوم أحدهم بترقية منشوري + إشعاري عندما يقوم أحدهم بإعادة نشر منشوري إخطاري عندما يُعجَب أحدهم بأحد منشوراتي إخطاري عندما يُشار إليّ أرسل إشعاراً عند انتهاء استطلاع الرأي إشعار بالمشاركات الجديدة - عرض مربع حوار للتأكيد قبل ترقية أي تبويق + عرض مربع حوار للتأكيد قبل إعادة نشر أي منشور عرض مربع حوار للتأكيد قبل إضافة أي تبويق إلى المفضلة هل تود الإشعار؟ كتم الاشعارات @@ -258,7 +258,7 @@ الكلمات المفتاحية الكلمات المفتاحية… - العمومية + للعامة غير المدرجة الخاصة المباشرة @@ -291,16 +291,16 @@ متابعة مثيل الخادم إنّك مُتابِع لمثيل الخادم هذا! الشراكات - إخفاء ترقيات %s + إخفاء المعاد نشرها مِن طرف %s أوصِ به على صفحتك - إظهار ترقيات %s + إظهار المعاد نشرها مِن %s إلغاء التوصية مِن صفحتك رسالة مباشِرة عوامل التصفية ليس هناك أي عامل تصفية بعدُ. يمكنك إنشاء واحد بالنقر على زر \"+\". كلمة مفتاحية أو عبارة الخط الزمني الرئيسي - الخطوط الزمنية العمومية + الخطوط الزمنية العامة الإشعارات المحادثات سوف يتم العثور عليه بغض النظر عن حالة الأحرف في النص أو حتى و إن كان في الرسالة تحذير عن المحتوى @@ -316,7 +316,7 @@ لم تقم بعد بإنشاء قائمة. اضغط على زر \"+\" لإنشاء قائمة. توسيع الوسائط المخفية تلقائيًا مُتابِع جديد - ترقية جديدة + إعادة نشر جديدة مفضلة جديدة إشارة جديدة انتهى استطلاع الرأي @@ -340,9 +340,9 @@ عرض المزيد اعرض أقل الوسم موجود مِن قَبل! - برمجة الترقية - تمت برمجة الترقية! - ليس هناك أية برمجة للترقية للعرض! + برمجة إعادة نشر + تمت برمجة إعادة النشر! + ليس هناك أية إعادة نشر للعرض! فتح القائمة الصورة الشخصية رأسية الصفحة الشخصية @@ -581,7 +581,7 @@ تم التحقق منه عبر %1$s (%2$s) الإجراء مُعطّل إلغاء المتابعة - حدث خطأ ما، الرجاء التحقق من مسار التحميلات في الإعدادات. + حدث خطأ ما، الرجاء التحقق من مسار التنزيلات في الإعدادات. الإعلانات ليس هناك إعلانات! إضافة ردة فعل @@ -699,7 +699,7 @@ إضافة حقل غير مقفَل مُقفَل - مُبَرمَج + المُبَرمَجة القائمة الدنيا تعديل القائمة اختر حُلة @@ -865,4 +865,20 @@ موزع الإشعارات أخبرنا ما الخَطب مع هذا المنشور وصف إلزامي للوسائط + الاقتراحات + لم تقم بحجب أي نطاق بعد + المُتابَعون + قِسمة الرسائل الطويلة في الردود + يقوم بكتم كافة الحسابات على الخيط الرئيس. + قَسِّم الرسالة + إلغاء كتمه على الخيط الرئيس + الوسوم المتابَعة + تخصيص الألوان + لا تقم بتقسيمها + إدارة الوسوم + ميزات إضافية + النطاقات المحظورة + أتريد تقسيم هذه الرسائل في الردود؟ + دليل الحسابات + كتمه على الخيط الرئيس \ No newline at end of file diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index cc58ad2dc..b7c04249d 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -948,7 +948,7 @@ Bulle Visibilité des réponses Liste - Suivant + Abonnements Visibilité des icônes Traducteur Traducteur -- cgit v1.2.3 From 951b3bcb06c66e2c4d660b808f1e66721c35b558 Mon Sep 17 00:00:00 2001 From: Software In Interlingua Date: Fri, 29 Dec 2023 08:10:21 +0100 Subject: Translated using Weblate (Interlingua) Currently translated at 21.5% (255 of 1183 strings) Co-authored-by: Software In Interlingua Translate-URL: https://hosted.weblate.org/projects/fedilab/strings/ia/ Translation: Fedilab/Strings --- app/src/main/res/values-ia/strings.xml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/src/main/res/values-ia/strings.xml b/app/src/main/res/values-ia/strings.xml index 93132f6c9..30633cbb5 100644 --- a/app/src/main/res/values-ia/strings.xml +++ b/app/src/main/res/values-ia/strings.xml @@ -40,4 +40,7 @@ Favoritos Compartir con Adder un conto + Le information ha essite copiate al area de transferentia + Compartite per Fedilab + Camera \ No newline at end of file -- cgit v1.2.3 From 36e258adb33519d9e1b6ae66f600885ff6bf4e36 Mon Sep 17 00:00:00 2001 From: Thomas Date: Fri, 29 Dec 2023 10:29:22 +0100 Subject: Fix a crash with media --- .../fedilab/android/mastodon/ui/fragment/media/FragmentMedia.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/app/fedilab/android/mastodon/ui/fragment/media/FragmentMedia.java b/app/src/main/java/app/fedilab/android/mastodon/ui/fragment/media/FragmentMedia.java index b1649b326..41f81f07b 100644 --- a/app/src/main/java/app/fedilab/android/mastodon/ui/fragment/media/FragmentMedia.java +++ b/app/src/main/java/app/fedilab/android/mastodon/ui/fragment/media/FragmentMedia.java @@ -110,9 +110,13 @@ public class FragmentMedia extends Fragment { enableSliding(true); } }); - binding.mediaPicture.setOnClickListener(v -> ((MediaActivity) requireActivity()).toogleFullScreen()); + binding.mediaPicture.setOnClickListener(v -> { + if(isAdded()){((MediaActivity) requireActivity()).toogleFullScreen();} + }); - binding.mediaVideo.setOnClickListener(v -> ((MediaActivity) requireActivity()).toogleFullScreen()); + binding.mediaVideo.setOnClickListener(v -> { + if(isAdded()) {((MediaActivity) requireActivity()).toogleFullScreen();} + }); String type = attachment.type; String preview_url = attachment.preview_url; -- cgit v1.2.3 From e16bfcbe1a18538bc2c85b01bcfb9f4bf3b9174f Mon Sep 17 00:00:00 2001 From: Poesty Li Date: Mon, 1 Jan 2024 06:08:30 +0100 Subject: Translated using Weblate (Chinese (Simplified)) Currently translated at 99.5% (1178 of 1183 strings) Co-authored-by: Poesty Li Translate-URL: https://hosted.weblate.org/projects/fedilab/strings/zh_Hans/ Translation: Fedilab/Strings --- app/src/main/res/values-zh-rCN/strings.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 1852ebf72..01924364c 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -1066,4 +1066,5 @@ 缩略图 消息将分为几个回复,以满足您所在实例的最大字数。 是否将长消息分为回复? + 信息已复制到剪贴板 \ No newline at end of file -- cgit v1.2.3 From 6d7173a487e0270d0888f521876ad010a19eca10 Mon Sep 17 00:00:00 2001 From: Weblate Date: Tue, 2 Jan 2024 00:11:06 +0100 Subject: Added translation using Weblate (Bulgarian) Co-authored-by: Weblate --- app/src/main/res/values-bg/strings.xml | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 app/src/main/res/values-bg/strings.xml diff --git a/app/src/main/res/values-bg/strings.xml b/app/src/main/res/values-bg/strings.xml new file mode 100644 index 000000000..a6b3daec9 --- /dev/null +++ b/app/src/main/res/values-bg/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file -- cgit v1.2.3 From 57c66b541eaa0899ce4ee573b5a7d2508545000b Mon Sep 17 00:00:00 2001 From: Salif Mehmed Date: Wed, 3 Jan 2024 00:06:47 +0100 Subject: Translated using Weblate (Bulgarian) Currently translated at 4.0% (2 of 49 strings) Co-authored-by: Salif Mehmed Translate-URL: https://hosted.weblate.org/projects/fedilab/description/bg/ Translation: Fedilab/description --- src/fdroid/fastlane/metadata/android/bg/short_description.txt | 1 + src/fdroid/fastlane/metadata/android/bg/title.txt | 1 + 2 files changed, 2 insertions(+) create mode 100644 src/fdroid/fastlane/metadata/android/bg/short_description.txt create mode 100644 src/fdroid/fastlane/metadata/android/bg/title.txt diff --git a/src/fdroid/fastlane/metadata/android/bg/short_description.txt b/src/fdroid/fastlane/metadata/android/bg/short_description.txt new file mode 100644 index 000000000..6f1832ed1 --- /dev/null +++ b/src/fdroid/fastlane/metadata/android/bg/short_description.txt @@ -0,0 +1 @@ +Федилаб - многофункционален клиент за достъп до Федивселената. diff --git a/src/fdroid/fastlane/metadata/android/bg/title.txt b/src/fdroid/fastlane/metadata/android/bg/title.txt new file mode 100644 index 000000000..6a39a36a9 --- /dev/null +++ b/src/fdroid/fastlane/metadata/android/bg/title.txt @@ -0,0 +1 @@ +Федилаб -- cgit v1.2.3 From 310f3f5eda867a15d54c4718e3d0f19c3b97961e Mon Sep 17 00:00:00 2001 From: claleb Date: Wed, 3 Jan 2024 05:07:40 +0000 Subject: Translated using Weblate (German) Currently translated at 100.0% (1183 of 1183 strings) Co-authored-by: claleb Translate-URL: https://hosted.weblate.org/projects/fedilab/strings/de/ Translation: Fedilab/Strings --- app/src/main/res/values-de/strings.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index c82e4c75c..31f8bf873 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -1042,8 +1042,8 @@ Folgeanfrage gestellt Vor dem Teilen warnen, falls der Beitrag keine Medienbeschreibung hat Diesem Beitrag fehlt die Medienbeschreibung. Dennoch teilen\? - Automatisches Abrufen entfernter Medien, wenn diese nicht verfügbar sind - Rufe Beiträge ab + Automatisch entfernte Medien abrufen, wenn diese nicht verfügbar sind + Beiträge abrufen Beschreibung hinzufügen Entferntes Konto abrufen! Beenden @@ -1065,7 +1065,7 @@ Teile lange Beiträge in Antworten auf Den Beitrag aufteilen Nicht aufteilen - Vorschau + Vorschaubild Der Beitrag wird in mehrere Antworten aufgeteilt, um die maximale Zeichenanzahl Ihrer Instanz einzuhalten. Diese Beiträge in Antworten aufteilen? Informationen wurden in die Zwischenablage kopiert -- cgit v1.2.3 From 0a14ea4b2fc7ee098e6c2cb2777b2d5e4a5cc5c4 Mon Sep 17 00:00:00 2001 From: Salif Mehmed Date: Wed, 3 Jan 2024 05:07:41 +0000 Subject: Translated using Weblate (Bulgarian) Currently translated at 20.2% (239 of 1183 strings) Co-authored-by: Salif Mehmed Translate-URL: https://hosted.weblate.org/projects/fedilab/strings/bg/ Translation: Fedilab/Strings --- app/src/main/res/values-bg/strings.xml | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/app/src/main/res/values-bg/strings.xml b/app/src/main/res/values-bg/strings.xml index a6b3daec9..b1beecd14 100644 --- a/app/src/main/res/values-bg/strings.xml +++ b/app/src/main/res/values-bg/strings.xml @@ -1,2 +1,30 @@ - \ No newline at end of file + + Затваряне + Отваряне в браузъра + Кеш + Относно + Парола + Излизане + Акаунти + Превеждане + Не + Поверителност + Тагове + Да + Сваляне на %1$s + Инстанция: mastodon.social + Споменавания + Инстанция + Съобщения + Сваляне + Относно инстанцията + Отмяна + Мултимедия + Отговори + Камера + Начало + Споделяне с + Добавяне на акаунт + Нови последователи + \ No newline at end of file -- cgit v1.2.3 From ad3be928906dab2e12282bdd6843e0f2b4596588 Mon Sep 17 00:00:00 2001 From: Salif Mehmed Date: Mon, 8 Jan 2024 03:06:16 +0000 Subject: Translated using Weblate (Bulgarian) Currently translated at 24.9% (295 of 1183 strings) Co-authored-by: Salif Mehmed Translate-URL: https://hosted.weblate.org/projects/fedilab/strings/bg/ Translation: Fedilab/Strings --- app/src/main/res/values-bg/strings.xml | 70 ++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) diff --git a/app/src/main/res/values-bg/strings.xml b/app/src/main/res/values-bg/strings.xml index b1beecd14..2d6bf70ca 100644 --- a/app/src/main/res/values-bg/strings.xml +++ b/app/src/main/res/values-bg/strings.xml @@ -27,4 +27,74 @@ Споделяне с Добавяне на акаунт Нови последователи + Изтриване на всички + Размер на текста + Следващо + Предишно + Отваряне чрез + Потвърждаване + Споделяне чрез Федилаб + Потребителско име + Чернови + Любими + Показване на отговори + Заглушени потребители + Блокирани потребители + Известия + Заявки за последване + Няма съобщения за показване + Заглушаване + Блокиране + Докладване + Изтриване + Копиране + Отметки + %d сек + %d мин + %d ч + %d д + + %d секунда + %d секунди + + + %d минута + %d минути + + + %d час + %d часа + + + %d ден + %d дни + + Няма чернови! + Избиране на акаунт + Изтриване на черновата? + Разработчик: + Лиценз: + GNU GPL V3 + Програмен код: + Търсене на инстанции: + Няма заявка за последване + Съобщения +\n %1$s + Отхвърляне + и + Заглушаване + Мултимедията е запазена + Файл: %1$s + Е-поща + Запазване + Съдържанието на съобщението е копирано в клипборда + Информацията е копирана в клипборда + Между + Последване + s + Размер на иконките + Настройки + Вмъкване на емоджи + Споделяне + Споменаване \ No newline at end of file -- cgit v1.2.3 From 8040a06300c25bbe7a913df63e05879fe6a86b5d Mon Sep 17 00:00:00 2001 From: Thomas Date: Mon, 8 Jan 2024 11:51:19 +0100 Subject: Prepare db for caching bundle + logic to pass/get data --- .../mastodon/client/entities/app/CachedBundle.java | 228 +++++++++++++++++++++ .../fedilab/android/mastodon/helper/Helper.java | 2 + .../timeline/FragmentMastodonTimeline.java | 192 ++++++++--------- .../java/app/fedilab/android/sqlite/Sqlite.java | 14 +- 4 files changed, 343 insertions(+), 93 deletions(-) create mode 100644 app/src/main/java/app/fedilab/android/mastodon/client/entities/app/CachedBundle.java diff --git a/app/src/main/java/app/fedilab/android/mastodon/client/entities/app/CachedBundle.java b/app/src/main/java/app/fedilab/android/mastodon/client/entities/app/CachedBundle.java new file mode 100644 index 000000000..87e7163ce --- /dev/null +++ b/app/src/main/java/app/fedilab/android/mastodon/client/entities/app/CachedBundle.java @@ -0,0 +1,228 @@ +package app.fedilab.android.mastodon.client.entities.app; +/* Copyright 2024 Thomas Schneider + * + * This file is a part of Fedilab + * + * This program is free software; you can redistribute it and/or modify it under the terms of the + * GNU General Public License as published by the Free Software Foundation; either version 3 of the + * License, or (at your option) any later version. + * + * Fedilab is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even + * the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General + * Public License for more details. + * + * You should have received a copy of the GNU General Public License along with Fedilab; if not, + * see . */ + +import android.content.ContentValues; +import android.content.Context; +import android.database.Cursor; +import android.database.sqlite.SQLiteDatabase; +import android.os.Bundle; +import android.os.Handler; +import android.os.Looper; +import android.os.Parcel; +import android.util.Base64; + +import java.io.BufferedOutputStream; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.util.Date; +import java.util.zip.GZIPInputStream; +import java.util.zip.GZIPOutputStream; + +import app.fedilab.android.mastodon.exception.DBException; +import app.fedilab.android.mastodon.helper.Helper; +import app.fedilab.android.sqlite.Sqlite; + +/** + * Class that manages Bundle of Intent from database + */ +public class CachedBundle { + + public String id; + public Bundle bundle; + public Date created_at; + + private SQLiteDatabase db; + + private transient Context context; + + public CachedBundle() {} + public CachedBundle(Context context) { + //Creation of the DB with tables + this.context = context; + this.db = Sqlite.getInstance(context.getApplicationContext(), Sqlite.DB_NAME, null, Sqlite.DB_VERSION).open(); + } + + + /** + * Insert a bundle in db + * + * @param bundle {@link Bundle} + * @return long - db id + * @throws DBException exception with database + */ + private long insertIntent(Bundle bundle) throws DBException { + if (db == null) { + throw new DBException("db is null. Wrong initialization."); + } + ContentValues values = new ContentValues(); + values.put(Sqlite.COL_BUNDLE, serializeBundle(bundle)); + values.put(Sqlite.COL_CREATED_AT, Helper.dateToString(new Date())); + //Inserts token + try { + return db.insertOrThrow(Sqlite.TABLE_INTENT, null, values); + } catch (Exception e) { + e.printStackTrace(); + return -1; + } + } + + public interface BundleCallback{ + public void get(Bundle bundle); + } + + public interface BundleInsertCallback{ + public void inserted(long bundleId); + } + + public void getBundle(long id, BundleCallback callback) { + new Thread(()->{ + Bundle bundle = null; + try { + CachedBundle cachedBundle = getCachedBundle(String.valueOf(id)); + if (cachedBundle != null) { + bundle = cachedBundle.bundle; + } + removeIntent(String.valueOf(id)); + } catch (DBException ignored) {} + Handler mainHandler = new Handler(Looper.getMainLooper()); + Bundle finalBundle = bundle; + Runnable myRunnable = () -> callback.get(finalBundle); + mainHandler.post(myRunnable); + }).start(); + } + + public void insertBundle(Bundle bundle, BundleInsertCallback callback) { + new Thread(()->{ + long dbBundleId = -1; + try { + dbBundleId = insertIntent(bundle); + } catch (DBException ignored) {} + Handler mainHandler = new Handler(Looper.getMainLooper()); + long finalDbBundleId = dbBundleId; + Runnable myRunnable = () -> callback.inserted(finalDbBundleId); + mainHandler.post(myRunnable); + }).start(); + } + + /** + * Returns a bundle by its ID + * + * @param id String + * @return CachedBundle {@link CachedBundle} + */ + private CachedBundle getCachedBundle(String id) throws DBException { + if (db == null) { + throw new DBException("db is null. Wrong initialization."); + } + try { + Cursor c = db.query(Sqlite.TABLE_INTENT, null, Sqlite.COL_ID + " = \"" + id + "\"", null, null, null, null, "1"); + return cursorToCachedBundle(c); + } catch (Exception e) { + return null; + } + } + + /** + * Remove a bundle from db + * + * @param id - intent id + */ + private void removeIntent(String id) throws DBException { + if (db == null) { + throw new DBException("db is null. Wrong initialization."); + } + db.delete(Sqlite.TABLE_INTENT, Sqlite.COL_ID + " = '" + id + "'", null); + } + + + + /*** + * Method to hydrate an CachedBundle from database + * @param c Cursor + * @return CachedBundle {@link CachedBundle} + */ + private CachedBundle cursorToCachedBundle(Cursor c) { + //No element found + if (c.getCount() == 0) { + c.close(); + return null; + } + //Take the first element + c.moveToFirst(); + //New user + CachedBundle account = convertCursorToCachedBundle(c); + //Close the cursor + c.close(); + return account; + } + + /** + * Read cursor and hydrate without closing it + * + * @param c - Cursor + * @return BaseAccount + */ + private CachedBundle convertCursorToCachedBundle(Cursor c) { + CachedBundle cachedBundle = new CachedBundle(); + cachedBundle.id = c.getString(c.getColumnIndexOrThrow(Sqlite.COL_ID)); + cachedBundle.bundle = deserializeBundle(c.getString(c.getColumnIndexOrThrow(Sqlite.COL_BUNDLE))); + cachedBundle.created_at = Helper.stringToDate(context, c.getString(c.getColumnIndexOrThrow(Sqlite.COL_CREATED_AT))); + return cachedBundle; + } + + private String serializeBundle(final Bundle bundle) { + String base64 = null; + final Parcel parcel = Parcel.obtain(); + try { + parcel.writeBundle(bundle); + final ByteArrayOutputStream bos = new ByteArrayOutputStream(); + final GZIPOutputStream zos = new GZIPOutputStream(new BufferedOutputStream(bos)); + zos.write(parcel.marshall()); + zos.close(); + base64 = Base64.encodeToString(bos.toByteArray(), 0); + } catch(IOException e) { + e.printStackTrace(); + } finally { + parcel.recycle(); + } + return base64; + } + + private Bundle deserializeBundle(final String base64) { + Bundle bundle = null; + final Parcel parcel = Parcel.obtain(); + try { + final ByteArrayOutputStream byteBuffer = new ByteArrayOutputStream(); + final byte[] buffer = new byte[1024]; + final GZIPInputStream zis = new GZIPInputStream(new ByteArrayInputStream(Base64.decode(base64, 0))); + int len; + while ((len = zis.read(buffer)) != -1) { + byteBuffer.write(buffer, 0, len); + } + zis.close(); + parcel.unmarshall(byteBuffer.toByteArray(), 0, byteBuffer.size()); + parcel.setDataPosition(0); + bundle = parcel.readBundle(getClass().getClassLoader()); + } catch (IOException e) { + e.printStackTrace(); + } finally { + parcel.recycle(); + } + return bundle; + } + +} diff --git a/app/src/main/java/app/fedilab/android/mastodon/helper/Helper.java b/app/src/main/java/app/fedilab/android/mastodon/helper/Helper.java index b2069db7c..e2e7a122e 100644 --- a/app/src/main/java/app/fedilab/android/mastodon/helper/Helper.java +++ b/app/src/main/java/app/fedilab/android/mastodon/helper/Helper.java @@ -210,6 +210,8 @@ public class Helper { public static final String RECEIVE_REDRAW_PROFILE = "RECEIVE_REDRAW_PROFILE"; public static final String ARG_TIMELINE_TYPE = "ARG_TIMELINE_TYPE"; + + public static final String ARG_INTENT_ID = "ARG_INTENT_ID"; public static final String ARG_PEERTUBE_NAV_REMOTE = "ARG_PEERTUBE_NAV_REMOTE"; public static final String ARG_REMOTE_INSTANCE_STRING = "ARG_REMOTE_INSTANCE_STRING"; diff --git a/app/src/main/java/app/fedilab/android/mastodon/ui/fragment/timeline/FragmentMastodonTimeline.java b/app/src/main/java/app/fedilab/android/mastodon/ui/fragment/timeline/FragmentMastodonTimeline.java index 64ee72688..90e1166ae 100644 --- a/app/src/main/java/app/fedilab/android/mastodon/ui/fragment/timeline/FragmentMastodonTimeline.java +++ b/app/src/main/java/app/fedilab/android/mastodon/ui/fragment/timeline/FragmentMastodonTimeline.java @@ -57,10 +57,12 @@ import app.fedilab.android.mastodon.client.entities.api.Pagination; import app.fedilab.android.mastodon.client.entities.api.Status; import app.fedilab.android.mastodon.client.entities.api.Statuses; import app.fedilab.android.mastodon.client.entities.app.BubbleTimeline; +import app.fedilab.android.mastodon.client.entities.app.CachedBundle; import app.fedilab.android.mastodon.client.entities.app.PinnedTimeline; import app.fedilab.android.mastodon.client.entities.app.RemoteInstance; import app.fedilab.android.mastodon.client.entities.app.TagTimeline; import app.fedilab.android.mastodon.client.entities.app.Timeline; +import app.fedilab.android.mastodon.exception.DBException; import app.fedilab.android.mastodon.helper.CrossActionHelper; import app.fedilab.android.mastodon.helper.GlideApp; import app.fedilab.android.mastodon.helper.Helper; @@ -346,29 +348,12 @@ public class FragmentMastodonTimeline extends Fragment implements StatusAdapter. @Override public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); - timelinesVM = new ViewModelProvider(FragmentMastodonTimeline.this).get(viewModelKey, TimelinesVM.class); - accountsVM = new ViewModelProvider(FragmentMastodonTimeline.this).get(viewModelKey, AccountsVM.class); - initialStatuses = null; - lockForResumeCall = 0; binding.loader.setVisibility(View.VISIBLE); binding.recyclerView.setVisibility(View.GONE); - SharedPreferences sharedpreferences = PreferenceManager.getDefaultSharedPreferences(requireActivity()); - max_id = statusReport != null ? statusReport.id : null; - offset = 0; - - rememberPosition = sharedpreferences.getBoolean(getString(R.string.SET_REMEMBER_POSITION), true); - //Inner marker are only for pinned timelines and main timelines, they have isViewInitialized set to false - if (max_id == null && !isViewInitialized && rememberPosition) { - max_id = sharedpreferences.getString(getString(R.string.SET_INNER_MARKER) + BaseMainActivity.currentUserID + BaseMainActivity.currentInstance + slug, null); - } if (search != null) { binding.swipeContainer.setRefreshing(false); binding.swipeContainer.setEnabled(false); } - //Only fragment in main view pager should not have the view initialized - //AND Only the first fragment will initialize its view - flagLoading = false; - } @Override @@ -378,91 +363,114 @@ public class FragmentMastodonTimeline extends Fragment implements StatusAdapter. public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + timelinesVM = new ViewModelProvider(FragmentMastodonTimeline.this).get(viewModelKey, TimelinesVM.class); + accountsVM = new ViewModelProvider(FragmentMastodonTimeline.this).get(viewModelKey, AccountsVM.class); + initialStatuses = null; + lockForResumeCall = 0; timelineType = Timeline.TimeLineEnum.HOME; canBeFederated = true; retry_for_home_done = false; - if (getArguments() != null) { - timelineType = (Timeline.TimeLineEnum) getArguments().get(Helper.ARG_TIMELINE_TYPE); - lemmy_post_id = getArguments().getString(Helper.ARG_LEMMY_POST_ID, null); - list_id = getArguments().getString(Helper.ARG_LIST_ID, null); - search = getArguments().getString(Helper.ARG_SEARCH_KEYWORD, null); - searchCache = getArguments().getString(Helper.ARG_SEARCH_KEYWORD_CACHE, null); - pinnedTimeline = (PinnedTimeline) getArguments().getSerializable(Helper.ARG_REMOTE_INSTANCE); - if (pinnedTimeline != null && pinnedTimeline.remoteInstance != null) { - if (pinnedTimeline.remoteInstance.type != RemoteInstance.InstanceType.NITTER) { - remoteInstance = pinnedTimeline.remoteInstance.host; - } else { - SharedPreferences sharedpreferences = PreferenceManager.getDefaultSharedPreferences(requireActivity()); - remoteInstance = sharedpreferences.getString(getString(R.string.SET_NITTER_HOST), getString(R.string.DEFAULT_NITTER_HOST)).toLowerCase(); - canBeFederated = false; - } - } - if (timelineType == Timeline.TimeLineEnum.TREND_MESSAGE_PUBLIC) { - canBeFederated = false; - } - publicTrendsDomain = getArguments().getString(Helper.ARG_REMOTE_INSTANCE_STRING, null); - isViewInitialized = getArguments().getBoolean(Helper.ARG_INITIALIZE_VIEW, true); - isNotPinnedTimeline = isViewInitialized; - tagTimeline = (TagTimeline) getArguments().getSerializable(Helper.ARG_TAG_TIMELINE); - bubbleTimeline = (BubbleTimeline) getArguments().getSerializable(Helper.ARG_BUBBLE_TIMELINE); - accountTimeline = (Account) getArguments().getSerializable(Helper.ARG_ACCOUNT); - exclude_replies = !getArguments().getBoolean(Helper.ARG_SHOW_REPLIES, true); - checkRemotely = getArguments().getBoolean(Helper.ARG_CHECK_REMOTELY, false); - show_pinned = getArguments().getBoolean(Helper.ARG_SHOW_PINNED, false); - exclude_reblogs = !getArguments().getBoolean(Helper.ARG_SHOW_REBLOGS, true); - media_only = getArguments().getBoolean(Helper.ARG_SHOW_MEDIA_ONY, false); - viewModelKey = getArguments().getString(Helper.ARG_VIEW_MODEL_KEY, ""); - minified = getArguments().getBoolean(Helper.ARG_MINIFIED, false); - statusReport = (Status) getArguments().getSerializable(Helper.ARG_STATUS_REPORT); - initialStatus = (Status) getArguments().getSerializable(Helper.ARG_STATUS); - } - - - //When visiting a profile without being authenticated - if (checkRemotely) { - String[] acctArray = accountTimeline.acct.split("@"); - if (acctArray.length > 1) { - remoteInstance = acctArray[1]; - } - if (remoteInstance != null && remoteInstance.equalsIgnoreCase(currentInstance)) { - checkRemotely = false; - } else if (remoteInstance == null) { - checkRemotely = false; - } - } - if (tagTimeline != null) { - ident = "@T@" + tagTimeline.name; - if (tagTimeline.isART) { - timelineType = Timeline.TimeLineEnum.ART; - } - } else if (bubbleTimeline != null) { - ident = "@B@Bubble"; - } else if (list_id != null) { - ident = "@l@" + list_id; - } else if (remoteInstance != null && !checkRemotely) { - if (pinnedTimeline.remoteInstance.type == RemoteInstance.InstanceType.NITTER) { - ident = "@R@" + pinnedTimeline.remoteInstance.host; - } else { - ident = "@R@" + remoteInstance; - } - } else if (search != null) { - ident = "@S@" + search; - } else { - ident = null; - } - if (timelineType != null) { - slug = timelineType != Timeline.TimeLineEnum.ART ? timelineType.getValue() + (ident != null ? "|" + ident : "") : Timeline.TimeLineEnum.TAG.getValue() + (ident != null ? "|" + ident : ""); - } - - - ContextCompat.registerReceiver(requireActivity(), receive_action, new IntentFilter(Helper.RECEIVE_STATUS_ACTION), ContextCompat.RECEIVER_NOT_EXPORTED); binding = FragmentPaginationBinding.inflate(inflater, container, false); SharedPreferences sharedpreferences = PreferenceManager.getDefaultSharedPreferences(requireActivity()); + max_id = statusReport != null ? statusReport.id : null; + offset = 0; + rememberPosition = sharedpreferences.getBoolean(getString(R.string.SET_REMEMBER_POSITION), true); + //Inner marker are only for pinned timelines and main timelines, they have isViewInitialized set to false + if (max_id == null && !isViewInitialized && rememberPosition) { + max_id = sharedpreferences.getString(getString(R.string.SET_INNER_MARKER) + BaseMainActivity.currentUserID + BaseMainActivity.currentInstance + slug, null); + } + //Only fragment in main view pager should not have the view initialized + //AND Only the first fragment will initialize its view + flagLoading = false; + if (getArguments() != null) { + long bundleId = getArguments().getLong(Helper.ARG_INTENT_ID, -1); + new CachedBundle(requireActivity()).getBundle(bundleId, this::initializeAfterBundle); + } boolean displayScrollBar = sharedpreferences.getBoolean(getString(R.string.SET_TIMELINE_SCROLLBAR), false); binding.recyclerView.setVerticalScrollBarEnabled(displayScrollBar); return binding.getRoot(); } + private void initializeAfterBundle(Bundle bundle) { + new Thread(()->{ + if (bundle != null) { + timelineType = (Timeline.TimeLineEnum) bundle.get(Helper.ARG_TIMELINE_TYPE); + lemmy_post_id = bundle.getString(Helper.ARG_LEMMY_POST_ID, null); + list_id = bundle.getString(Helper.ARG_LIST_ID, null); + search = bundle.getString(Helper.ARG_SEARCH_KEYWORD, null); + searchCache = bundle.getString(Helper.ARG_SEARCH_KEYWORD_CACHE, null); + pinnedTimeline = (PinnedTimeline) bundle.getSerializable(Helper.ARG_REMOTE_INSTANCE); + if (pinnedTimeline != null && pinnedTimeline.remoteInstance != null) { + if (pinnedTimeline.remoteInstance.type != RemoteInstance.InstanceType.NITTER) { + remoteInstance = pinnedTimeline.remoteInstance.host; + } else { + SharedPreferences sharedpreferences = PreferenceManager.getDefaultSharedPreferences(requireActivity()); + remoteInstance = sharedpreferences.getString(getString(R.string.SET_NITTER_HOST), getString(R.string.DEFAULT_NITTER_HOST)).toLowerCase(); + canBeFederated = false; + } + } + if (timelineType == Timeline.TimeLineEnum.TREND_MESSAGE_PUBLIC) { + canBeFederated = false; + } + publicTrendsDomain = bundle.getString(Helper.ARG_REMOTE_INSTANCE_STRING, null); + isViewInitialized = bundle.getBoolean(Helper.ARG_INITIALIZE_VIEW, true); + isNotPinnedTimeline = isViewInitialized; + tagTimeline = (TagTimeline) bundle.getSerializable(Helper.ARG_TAG_TIMELINE); + bubbleTimeline = (BubbleTimeline) bundle.getSerializable(Helper.ARG_BUBBLE_TIMELINE); + accountTimeline = (Account) bundle.getSerializable(Helper.ARG_ACCOUNT); + exclude_replies = !bundle.getBoolean(Helper.ARG_SHOW_REPLIES, true); + checkRemotely = bundle.getBoolean(Helper.ARG_CHECK_REMOTELY, false); + show_pinned = bundle.getBoolean(Helper.ARG_SHOW_PINNED, false); + exclude_reblogs = !bundle.getBoolean(Helper.ARG_SHOW_REBLOGS, true); + media_only = bundle.getBoolean(Helper.ARG_SHOW_MEDIA_ONY, false); + viewModelKey = bundle.getString(Helper.ARG_VIEW_MODEL_KEY, ""); + minified = bundle.getBoolean(Helper.ARG_MINIFIED, false); + statusReport = (Status) bundle.getSerializable(Helper.ARG_STATUS_REPORT); + initialStatus = (Status) bundle.getSerializable(Helper.ARG_STATUS); + } + Handler mainHandler = new Handler(Looper.getMainLooper()); + Runnable myRunnable = () -> { + //When visiting a profile without being authenticated + if (checkRemotely) { + String[] acctArray = accountTimeline.acct.split("@"); + if (acctArray.length > 1) { + remoteInstance = acctArray[1]; + } + if (remoteInstance != null && remoteInstance.equalsIgnoreCase(currentInstance)) { + checkRemotely = false; + } else if (remoteInstance == null) { + checkRemotely = false; + } + } + if (tagTimeline != null) { + ident = "@T@" + tagTimeline.name; + if (tagTimeline.isART) { + timelineType = Timeline.TimeLineEnum.ART; + } + } else if (bubbleTimeline != null) { + ident = "@B@Bubble"; + } else if (list_id != null) { + ident = "@l@" + list_id; + } else if (remoteInstance != null && !checkRemotely) { + if (pinnedTimeline.remoteInstance.type == RemoteInstance.InstanceType.NITTER) { + ident = "@R@" + pinnedTimeline.remoteInstance.host; + } else { + ident = "@R@" + remoteInstance; + } + } else if (search != null) { + ident = "@S@" + search; + } else { + ident = null; + } + if (timelineType != null) { + slug = timelineType != Timeline.TimeLineEnum.ART ? timelineType.getValue() + (ident != null ? "|" + ident : "") : Timeline.TimeLineEnum.TAG.getValue() + (ident != null ? "|" + ident : ""); + } + ContextCompat.registerReceiver(requireActivity(), receive_action, new IntentFilter(Helper.RECEIVE_STATUS_ACTION), ContextCompat.RECEIVER_NOT_EXPORTED); + }; + mainHandler.post(myRunnable); + }).start(); + } + /** * Update view and pagination when scrolling down * diff --git a/app/src/main/java/app/fedilab/android/sqlite/Sqlite.java b/app/src/main/java/app/fedilab/android/sqlite/Sqlite.java index bb5029b8d..66cc9d530 100644 --- a/app/src/main/java/app/fedilab/android/sqlite/Sqlite.java +++ b/app/src/main/java/app/fedilab/android/sqlite/Sqlite.java @@ -23,7 +23,7 @@ import android.database.sqlite.SQLiteOpenHelper; public class Sqlite extends SQLiteOpenHelper { - public static final int DB_VERSION = 11; + public static final int DB_VERSION = 12; public static final String DB_NAME = "fedilab_db"; //Table of owned accounts @@ -105,6 +105,9 @@ public class Sqlite extends SQLiteOpenHelper { public static final String COL_TAG = "TAG"; public static final String TABLE_TIMELINE_CACHE_LOGS = "TIMELINE_CACHE_LOGS"; + public static final String TABLE_INTENT = "INTENT"; + + public static final String COL_BUNDLE = "BUNDLE"; private static final String CREATE_TABLE_USER_ACCOUNT = "CREATE TABLE " + TABLE_USER_ACCOUNT + " (" @@ -233,6 +236,12 @@ public class Sqlite extends SQLiteOpenHelper { + COL_TYPE + " TEXT NOT NULL, " + COL_CREATED_AT + " TEXT NOT NULL)"; + private final String CREATE_TABLE_INTENT = "CREATE TABLE " + + TABLE_INTENT + "(" + + COL_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + + COL_BUNDLE + " TEXT NOT NULL, " + + COL_CREATED_AT + " TEXT NOT NULL)"; + public Sqlite(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) { super(context, name, factory, version); @@ -263,6 +272,7 @@ public class Sqlite extends SQLiteOpenHelper { db.execSQL(CREATE_TABLE_STORED_INSTANCES); db.execSQL(CREATE_TABLE_CACHE_TAGS); db.execSQL(CREATE_TABLE_TIMELINE_CACHE_LOGS); + db.execSQL(CREATE_TABLE_INTENT); } @Override @@ -295,6 +305,8 @@ public class Sqlite extends SQLiteOpenHelper { db.execSQL(CREATE_TABLE_CACHE_TAGS); case 10: db.execSQL(CREATE_TABLE_TIMELINE_CACHE_LOGS); + case 11: + db.execSQL(CREATE_TABLE_INTENT); default: break; } -- cgit v1.2.3 From 2e20e78b7f40a1010348c03bffc2f1c68c48783e Mon Sep 17 00:00:00 2001 From: Thomas Date: Tue, 9 Jan 2024 11:39:09 +0100 Subject: Apply changes when serializing accounts --- .../java/app/fedilab/android/BaseMainActivity.java | 54 ++- .../fedilab/android/activities/AboutActivity.java | 13 +- .../mastodon/activities/AccountReportActivity.java | 25 +- .../mastodon/activities/ActionActivity.java | 24 +- .../mastodon/activities/ComposeActivity.java | 539 +++++++++++---------- .../mastodon/activities/EditProfileActivity.java | 20 +- .../mastodon/activities/PartnerShipActivity.java | 13 +- .../mastodon/activities/ProfileActivity.java | 109 +++-- .../mastodon/activities/ReportActivity.java | 73 +-- .../activities/SearchResultTabActivity.java | 15 +- .../mastodon/activities/TimelineActivity.java | 21 +- .../activities/admin/AdminAccountActivity.java | 27 +- .../activities/admin/AdminReportActivity.java | 36 +- .../android/mastodon/helper/CrossActionHelper.java | 92 ++-- .../fedilab/android/mastodon/helper/Helper.java | 13 +- .../android/mastodon/helper/SpannableHelper.java | 55 ++- .../android/mastodon/ui/drawer/AccountAdapter.java | 27 +- .../ui/drawer/AccountFollowRequestAdapter.java | 14 +- .../ui/drawer/AccountsSearchTopBarAdapter.java | 18 +- .../mastodon/ui/drawer/NotificationAdapter.java | 67 ++- .../android/mastodon/ui/drawer/StatusAdapter.java | 77 +-- .../mastodon/ui/drawer/SuggestionAdapter.java | 14 +- .../ui/drawer/admin/AdminAccountAdapter.java | 15 +- .../ui/fragment/media/FragmentMediaProfile.java | 14 +- .../fragment/timeline/FragmentMastodonAccount.java | 43 +- .../timeline/FragmentMastodonTimeline.java | 6 +- .../fragment/timeline/FragmentProfileTimeline.java | 45 +- .../ui/pageadapter/FedilabProfilePageAdapter.java | 15 +- .../pageadapter/FedilabProfileTLPageAdapter.java | 13 +- .../FragmentLoginPickInstanceMastodon.java | 12 +- 30 files changed, 896 insertions(+), 613 deletions(-) diff --git a/app/src/main/java/app/fedilab/android/BaseMainActivity.java b/app/src/main/java/app/fedilab/android/BaseMainActivity.java index 850de4dec..ff07e4b1e 100644 --- a/app/src/main/java/app/fedilab/android/BaseMainActivity.java +++ b/app/src/main/java/app/fedilab/android/BaseMainActivity.java @@ -163,6 +163,7 @@ import app.fedilab.android.mastodon.client.entities.api.Tag; import app.fedilab.android.mastodon.client.entities.app.Account; import app.fedilab.android.mastodon.client.entities.app.BaseAccount; import app.fedilab.android.mastodon.client.entities.app.BottomMenu; +import app.fedilab.android.mastodon.client.entities.app.CachedBundle; import app.fedilab.android.mastodon.client.entities.app.MutedAccounts; import app.fedilab.android.mastodon.client.entities.app.Pinned; import app.fedilab.android.mastodon.client.entities.app.PinnedTimeline; @@ -659,16 +660,26 @@ public abstract class BaseMainActivity extends BaseActivity implements NetworkSt Status status = (Status) bundle.getSerializable(Helper.INTENT_TARGETED_STATUS); if (account != null) { Intent intentAccount = new Intent(activity, ProfileActivity.class); - Bundle b = new Bundle(); - b.putSerializable(Helper.ARG_ACCOUNT, account); - intentAccount.putExtras(b); - intentAccount.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - activity.startActivity(intentAccount); + Bundle args = new Bundle(); + args.putSerializable(Helper.ARG_ACCOUNT, account); + new CachedBundle(activity).insertBundle(args, bundleId -> { + Bundle bundleCached = new Bundle(); + bundleCached.putLong(Helper.ARG_INTENT_ID, bundleId); + intentAccount.putExtras(bundleCached); + intentAccount.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + activity.startActivity(intentAccount); + }); } else if (status != null) { Intent intentContext = new Intent(activity, ContextActivity.class); - intentContext.putExtra(Helper.ARG_STATUS, status); - intentContext.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - activity.startActivity(intentContext); + Bundle args = new Bundle(); + args.putSerializable(Helper.ARG_STATUS, status); + new CachedBundle(activity).insertBundle(args, bundleId -> { + Bundle bundleCached = new Bundle(); + bundleCached.putLong(Helper.ARG_INTENT_ID, bundleId); + intentContext.putExtras(bundleCached); + intentContext.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + activity.startActivity(intentContext); + }); } } final Handler handler = new Handler(); @@ -1035,11 +1046,15 @@ public abstract class BaseMainActivity extends BaseActivity implements NetworkSt public void federatedAccount(app.fedilab.android.mastodon.client.entities.api.Account account) { if (account != null) { Intent intent = new Intent(activity, ProfileActivity.class); - Bundle b = new Bundle(); - b.putSerializable(Helper.ARG_ACCOUNT, account); - intent.putExtras(b); - intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - activity.startActivity(intent); + Bundle args = new Bundle(); + args.putSerializable(Helper.ARG_ACCOUNT, account); + new CachedBundle(activity).insertBundle(args, bundleId -> { + Bundle bundle = new Bundle(); + bundle.putLong(Helper.ARG_INTENT_ID, bundleId); + intent.putExtras(bundle); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + activity.startActivity(intent); + }); } else { Toasty.error(activity, activity.getString(R.string.toast_error), Toasty.LENGTH_SHORT).show(); } @@ -1418,10 +1433,15 @@ public abstract class BaseMainActivity extends BaseActivity implements NetworkSt headerMainBinding.instanceInfo.setOnClickListener(v -> (new InstanceHealthActivity()).show(getSupportFragmentManager(), null)); headerMainBinding.accountProfilePicture.setOnClickListener(v -> { Intent intent = new Intent(BaseMainActivity.this, ProfileActivity.class); - Bundle b = new Bundle(); - b.putSerializable(Helper.ARG_ACCOUNT, currentAccount.mastodon_account); - intent.putExtras(b); - startActivity(intent); + Bundle args = new Bundle(); + args.putSerializable(Helper.ARG_ACCOUNT, currentAccount.mastodon_account); + new CachedBundle(BaseMainActivity.this).insertBundle(args, bundleId -> { + Bundle bundle = new Bundle(); + bundle.putLong(Helper.ARG_INTENT_ID, bundleId); + intent.putExtras(bundle); + startActivity(intent); + }); + }); headerMainBinding.accountAcc.setOnClickListener(v -> headerMainBinding.changeAccount.callOnClick()); diff --git a/app/src/main/java/app/fedilab/android/activities/AboutActivity.java b/app/src/main/java/app/fedilab/android/activities/AboutActivity.java index 209351fc8..ee6862df3 100644 --- a/app/src/main/java/app/fedilab/android/activities/AboutActivity.java +++ b/app/src/main/java/app/fedilab/android/activities/AboutActivity.java @@ -40,6 +40,7 @@ import app.fedilab.android.mastodon.activities.BaseBarActivity; import app.fedilab.android.mastodon.activities.ProfileActivity; import app.fedilab.android.mastodon.client.entities.api.Account; import app.fedilab.android.mastodon.client.entities.api.Status; +import app.fedilab.android.mastodon.client.entities.app.CachedBundle; import app.fedilab.android.mastodon.helper.CrossActionHelper; import app.fedilab.android.mastodon.helper.Helper; import app.fedilab.android.mastodon.helper.MastodonHelper; @@ -119,10 +120,14 @@ public class AboutActivity extends BaseBarActivity { binding.accountUn.setText(account.acct); binding.accountPp.setOnClickListener(v -> { Intent intent = new Intent(AboutActivity.this, ProfileActivity.class); - Bundle b = new Bundle(); - b.putSerializable(Helper.ARG_ACCOUNT, account); - intent.putExtras(b); - startActivity(intent); + Bundle args = new Bundle(); + args.putSerializable(Helper.ARG_ACCOUNT, account); + new CachedBundle(AboutActivity.this).insertBundle(args, bundleId -> { + Bundle bundle = new Bundle(); + bundle.putLong(Helper.ARG_INTENT_ID, bundleId); + intent.putExtras(bundle); + startActivity(intent); + }); }); AccountsVM accountsVM = new ViewModelProvider(AboutActivity.this).get(AccountsVM.class); List ids = new ArrayList<>(); diff --git a/app/src/main/java/app/fedilab/android/mastodon/activities/AccountReportActivity.java b/app/src/main/java/app/fedilab/android/mastodon/activities/AccountReportActivity.java index 8a1b2b083..46c3e9d3a 100644 --- a/app/src/main/java/app/fedilab/android/mastodon/activities/AccountReportActivity.java +++ b/app/src/main/java/app/fedilab/android/mastodon/activities/AccountReportActivity.java @@ -35,6 +35,7 @@ import app.fedilab.android.databinding.ActivityAdminReportBinding; import app.fedilab.android.mastodon.client.entities.api.Status; import app.fedilab.android.mastodon.client.entities.api.admin.AdminAccount; import app.fedilab.android.mastodon.client.entities.api.admin.AdminReport; +import app.fedilab.android.mastodon.client.entities.app.CachedBundle; import app.fedilab.android.mastodon.helper.Helper; import app.fedilab.android.m