diff --git a/app/src/main/java/app/fedilab/android/BaseMainActivity.java b/app/src/main/java/app/fedilab/android/BaseMainActivity.java index c16fccb0d..6531aa633 100644 --- a/app/src/main/java/app/fedilab/android/BaseMainActivity.java +++ b/app/src/main/java/app/fedilab/android/BaseMainActivity.java @@ -79,6 +79,7 @@ import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentManager; import androidx.fragment.app.FragmentTransaction; import androidx.lifecycle.ViewModelProvider; +import androidx.multidex.BuildConfig; import androidx.navigation.NavController; import androidx.navigation.Navigation; import androidx.navigation.ui.AppBarConfiguration; @@ -220,24 +221,34 @@ public abstract class BaseMainActivity extends BaseActivity implements NetworkSt private final BroadcastReceiver broadcast_error_message = new BroadcastReceiver() { @Override public void onReceive(android.content.Context context, Intent intent) { - Bundle b = intent.getExtras(); - if (b != null) { - if (b.getBoolean(Helper.RECEIVE_COMPOSE_ERROR_MESSAGE, false)) { - String errorMessage = b.getString(Helper.RECEIVE_ERROR_MESSAGE); - StatusDraft statusDraft = (StatusDraft) b.getSerializable(Helper.ARG_STATUS_DRAFT); - Snackbar snackbar = Snackbar.make(binding.getRoot(), errorMessage, 5000); - View snackbarView = snackbar.getView(); - TextView textView = snackbarView.findViewById(com.google.android.material.R.id.snackbar_text); - textView.setMaxLines(5); - snackbar - .setAction(getString(R.string.open_draft), view -> { - Intent intentCompose = new Intent(context, ComposeActivity.class); - intentCompose.putExtra(Helper.ARG_STATUS_DRAFT, statusDraft); - intentCompose.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - context.startActivity(intentCompose); - }) - .show(); - } + Bundle args = intent.getExtras(); + if (args != null) { + long bundleId = args.getLong(Helper.ARG_INTENT_ID, -1); + new CachedBundle(BaseMainActivity.this).getBundle(bundleId, currentAccount, bundle -> { + if (bundle.getBoolean(Helper.RECEIVE_COMPOSE_ERROR_MESSAGE, false)) { + String errorMessage = bundle.getString(Helper.RECEIVE_ERROR_MESSAGE); + StatusDraft statusDraft = (StatusDraft) bundle.getSerializable(Helper.ARG_STATUS_DRAFT); + Snackbar snackbar = Snackbar.make(binding.getRoot(), errorMessage, 5000); + View snackbarView = snackbar.getView(); + TextView textView = snackbarView.findViewById(com.google.android.material.R.id.snackbar_text); + textView.setMaxLines(5); + snackbar + .setAction(getString(R.string.open_draft), view -> { + Intent intentCompose = new Intent(context, ComposeActivity.class); + Bundle args2 = new Bundle(); + args2.putSerializable(Helper.ARG_STATUS_DRAFT, statusDraft); + new CachedBundle(BaseMainActivity.this).insertBundle(args2, currentAccount, bundleId2 -> { + Bundle bundle2 = new Bundle(); + bundle2.putLong(Helper.ARG_INTENT_ID, bundleId2); + intentCompose.putExtras(bundle2); + intentCompose.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + context.startActivity(intentCompose); + }); + }) + .show(); + } + }); + } } }; @@ -246,94 +257,98 @@ public abstract class BaseMainActivity extends BaseActivity implements NetworkSt private final BroadcastReceiver broadcast_data = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { - Bundle b = intent.getExtras(); - if (b != null) { - if (b.getBoolean(Helper.RECEIVE_REDRAW_TOPBAR, false)) { - List mastodonLists = (List) b.getSerializable(Helper.RECEIVE_MASTODON_LIST); - redrawPinned(mastodonLists); - } - if (b.getBoolean(Helper.RECEIVE_REDRAW_BOTTOM, false)) { - bottomMenu = new BottomMenu(BaseMainActivity.this).hydrate(currentAccount, binding.bottomNavView); - if (bottomMenu != null) { - //ManageClick on bottom menu items - if (binding.bottomNavView.findViewById(R.id.nav_home) != null) { - binding.bottomNavView.findViewById(R.id.nav_home).setOnLongClickListener(view -> { - int position = BottomMenu.getPosition(bottomMenu, R.id.nav_home); - if (position >= 0) { - manageFilters(position); - } - return false; - }); - } - if (binding.bottomNavView.findViewById(R.id.nav_local) != null) { - binding.bottomNavView.findViewById(R.id.nav_local).setOnLongClickListener(view -> { - int position = BottomMenu.getPosition(bottomMenu, R.id.nav_local); - if (position >= 0) { - manageFilters(position); - } - return false; - }); - } - if (binding.bottomNavView.findViewById(R.id.nav_public) != null) { - binding.bottomNavView.findViewById(R.id.nav_public).setOnLongClickListener(view -> { - int position = BottomMenu.getPosition(bottomMenu, R.id.nav_public); - if (position >= 0) { - manageFilters(position); - } - return false; - }); - } - binding.bottomNavView.setOnItemSelectedListener(item -> { - int itemId = item.getItemId(); - int position = BottomMenu.getPosition(bottomMenu, itemId); - if (position >= 0) { - if (binding.viewPager.getCurrentItem() == position) { - scrollToTop(); - } else { - binding.viewPager.setCurrentItem(position, false); - } - } - return true; - }); + Bundle args = intent.getExtras(); + if (args != null) { + long bundleId = args.getLong(Helper.ARG_INTENT_ID, -1); + new CachedBundle(BaseMainActivity.this).getBundle(bundleId, currentAccount, bundle -> { + if (bundle.getBoolean(Helper.RECEIVE_REDRAW_TOPBAR, false)) { + List mastodonLists = (List) bundle.getSerializable(Helper.RECEIVE_MASTODON_LIST); + redrawPinned(mastodonLists); } - } else if (b.getBoolean(Helper.RECEIVE_RECREATE_ACTIVITY, false)) { - recreate(); - } else if (b.getBoolean(Helper.RECEIVE_NEW_MESSAGE, false)) { - Status statusSent = (Status) b.getSerializable(Helper.RECEIVE_STATUS_ACTION); - String statusEditId = b.getString(Helper.ARG_EDIT_STATUS_ID, null); - Snackbar.make(binding.displaySnackBar, getString(R.string.message_has_been_sent), Snackbar.LENGTH_LONG) - .setAction(getString(R.string.display), view -> { - Intent intentContext = new Intent(BaseMainActivity.this, ContextActivity.class); - Bundle args = new Bundle(); - args.putSerializable(Helper.ARG_STATUS, statusSent); - new CachedBundle(BaseMainActivity.this).insertBundle(args, currentAccount, bundleId -> { - Bundle bundle = new Bundle(); - bundle.putLong(Helper.ARG_INTENT_ID, bundleId); - intentContext.putExtras(bundle); - intentContext.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - startActivity(intentContext); + if (bundle.getBoolean(Helper.RECEIVE_REDRAW_BOTTOM, false)) { + bottomMenu = new BottomMenu(BaseMainActivity.this).hydrate(currentAccount, binding.bottomNavView); + if (bottomMenu != null) { + //ManageClick on bottom menu items + if (binding.bottomNavView.findViewById(R.id.nav_home) != null) { + binding.bottomNavView.findViewById(R.id.nav_home).setOnLongClickListener(view -> { + int position = BottomMenu.getPosition(bottomMenu, R.id.nav_home); + if (position >= 0) { + manageFilters(position); + } + return false; }); - }) - .show(); - //The message was edited, we need to update the timeline - if (statusEditId != null) { - //Update message in cache - new Thread(() -> { - StatusCache statusCache = new StatusCache(); - statusCache.instance = BaseMainActivity.currentInstance; - statusCache.user_id = BaseMainActivity.currentUserID; - statusCache.status = statusSent; - statusCache.status_id = statusEditId; - try { - new StatusCache(BaseMainActivity.this).updateIfExists(statusCache); - } catch (DBException e) { - e.printStackTrace(); } - }).start(); - //Update timelines - sendAction(context, Helper.ARG_STATUS_UPDATED, statusSent, null); + if (binding.bottomNavView.findViewById(R.id.nav_local) != null) { + binding.bottomNavView.findViewById(R.id.nav_local).setOnLongClickListener(view -> { + int position = BottomMenu.getPosition(bottomMenu, R.id.nav_local); + if (position >= 0) { + manageFilters(position); + } + return false; + }); + } + if (binding.bottomNavView.findViewById(R.id.nav_public) != null) { + binding.bottomNavView.findViewById(R.id.nav_public).setOnLongClickListener(view -> { + int position = BottomMenu.getPosition(bottomMenu, R.id.nav_public); + if (position >= 0) { + manageFilters(position); + } + return false; + }); + } + binding.bottomNavView.setOnItemSelectedListener(item -> { + int itemId = item.getItemId(); + int position = BottomMenu.getPosition(bottomMenu, itemId); + if (position >= 0) { + if (binding.viewPager.getCurrentItem() == position) { + scrollToTop(); + } else { + binding.viewPager.setCurrentItem(position, false); + } + } + return true; + }); + } + } else if (bundle.getBoolean(Helper.RECEIVE_RECREATE_ACTIVITY, false)) { + recreate(); + } else if (bundle.getBoolean(Helper.RECEIVE_NEW_MESSAGE, false)) { + Status statusSent = (Status) bundle.getSerializable(Helper.RECEIVE_STATUS_ACTION); + String statusEditId = bundle.getString(Helper.ARG_EDIT_STATUS_ID, null); + Snackbar.make(binding.displaySnackBar, getString(R.string.message_has_been_sent), Snackbar.LENGTH_LONG) + .setAction(getString(R.string.display), view -> { + Intent intentContext = new Intent(BaseMainActivity.this, ContextActivity.class); + Bundle args2 = new Bundle(); + args2.putSerializable(Helper.ARG_STATUS, statusSent); + new CachedBundle(BaseMainActivity.this).insertBundle(args2, currentAccount, bundleId2 -> { + Bundle bundle2 = new Bundle(); + bundle.putLong(Helper.ARG_INTENT_ID, bundleId2); + intentContext.putExtras(bundle2); + intentContext.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + startActivity(intentContext); + }); + }) + .show(); + //The message was edited, we need to update the timeline + if (statusEditId != null) { + //Update message in cache + new Thread(() -> { + StatusCache statusCache = new StatusCache(); + statusCache.instance = BaseMainActivity.currentInstance; + statusCache.user_id = BaseMainActivity.currentUserID; + statusCache.status = statusSent; + statusCache.status_id = statusEditId; + try { + new StatusCache(BaseMainActivity.this).updateIfExists(statusCache); + } catch (DBException e) { + e.printStackTrace(); + } + }).start(); + //Update timelines + sendAction(context, Helper.ARG_STATUS_UPDATED, statusSent, null); + } } - } + }); + } } }; @@ -707,12 +722,17 @@ public abstract class BaseMainActivity extends BaseActivity implements NetworkSt } viewPager.setCurrentItem(position); } - Bundle b = new Bundle(); - b.putBoolean(ARG_REFRESH_NOTFICATION, true); + Bundle args = new Bundle(); + args.putBoolean(ARG_REFRESH_NOTFICATION, true); Intent intentBC = new Intent(Helper.RECEIVE_STATUS_ACTION); intentBC.setPackage(BuildConfig.APPLICATION_ID); - intentBC.putExtras(b); - activity.sendBroadcast(intentBC); + new CachedBundle(activity).insertBundle(args, currentAccount, bundleId -> { + Bundle bundle = new Bundle(); + bundle.putLong(Helper.ARG_INTENT_ID, bundleId); + intentBC.putExtras(bundle); + activity.sendBroadcast(intentBC); + }); + } }, 1000); intent.removeExtra(Helper.INTENT_ACTION); diff --git a/app/src/main/java/app/fedilab/android/mastodon/activities/ComposeActivity.java b/app/src/main/java/app/fedilab/android/mastodon/activities/ComposeActivity.java index 3b0893428..6e5dc8e04 100644 --- a/app/src/main/java/app/fedilab/android/mastodon/activities/ComposeActivity.java +++ b/app/src/main/java/app/fedilab/android/mastodon/activities/ComposeActivity.java @@ -120,26 +120,31 @@ public class ComposeActivity extends BaseActivity implements ComposeAdapter.Mana private final BroadcastReceiver imageReceiver = new BroadcastReceiver() { @Override public void onReceive(android.content.Context context, Intent intent) { - String imgpath = intent.getStringExtra("imgpath"); - float focusX = intent.getFloatExtra("focusX", -2); - float focusY = intent.getFloatExtra("focusY", -2); - if (imgpath != null) { - int position = 0; - for (Status status : statusList) { - if (status.media_attachments != null && status.media_attachments.size() > 0) { - for (Attachment attachment : status.media_attachments) { - if (attachment.local_path != null && attachment.local_path.equalsIgnoreCase(imgpath)) { - if (focusX != -2) { - attachment.focus = focusX + "," + focusY; + Bundle args = intent.getExtras(); + if (args != null) { + long bundleId = args.getLong(Helper.ARG_INTENT_ID, -1); + new CachedBundle(ComposeActivity.this).getBundle(bundleId, currentAccount, bundle -> { + String imgpath = bundle.getString("imgpath"); + float focusX = bundle.getFloat("focusX", -2); + float focusY = bundle.getFloat("focusY", -2); + if (imgpath != null) { + int position = 0; + for (Status status : statusList) { + if (status.media_attachments != null && status.media_attachments.size() > 0) { + for (Attachment attachment : status.media_attachments) { + if (attachment.local_path != null && attachment.local_path.equalsIgnoreCase(imgpath)) { + if (focusX != -2) { + attachment.focus = focusX + "," + focusY; + } + composeAdapter.notifyItemChanged(position); + break; + } } - - composeAdapter.notifyItemChanged(position); - break; } + position++; } } - position++; - } + }); } } }; diff --git a/app/src/main/java/app/fedilab/android/mastodon/activities/HashTagActivity.java b/app/src/main/java/app/fedilab/android/mastodon/activities/HashTagActivity.java index 94d8b0e92..8cf93a411 100644 --- a/app/src/main/java/app/fedilab/android/mastodon/activities/HashTagActivity.java +++ b/app/src/main/java/app/fedilab/android/mastodon/activities/HashTagActivity.java @@ -41,6 +41,7 @@ import app.fedilab.android.activities.MainActivity; import app.fedilab.android.databinding.ActivityHashtagBinding; import app.fedilab.android.mastodon.client.entities.api.Filter; import app.fedilab.android.mastodon.client.entities.api.Status; +import app.fedilab.android.mastodon.client.entities.app.CachedBundle; import app.fedilab.android.mastodon.client.entities.app.Pinned; import app.fedilab.android.mastodon.client.entities.app.PinnedTimeline; import app.fedilab.android.mastodon.client.entities.app.StatusDraft; @@ -158,10 +159,14 @@ public class HashTagActivity extends BaseActivity { List statuses = new ArrayList<>(); statuses.add(status); statusDraft.statusDraftList = statuses; - Bundle _b = new Bundle(); - _b.putSerializable(Helper.ARG_STATUS_DRAFT, statusDraft); - intentToot.putExtras(_b); - startActivity(intentToot); + Bundle args = new Bundle(); + args.putSerializable(Helper.ARG_STATUS_DRAFT, statusDraft); + new CachedBundle(HashTagActivity.this).insertBundle(args, currentAccount, bundleId -> { + Bundle bundleCached = new Bundle(); + bundleCached.putLong(Helper.ARG_INTENT_ID, bundleId); + intentToot.putExtras(bundleCached); + startActivity(intentToot); + }); }); } @@ -188,13 +193,18 @@ public class HashTagActivity extends BaseActivity { } pinnedTag = false; invalidateOptionsMenu(); - Bundle b = new Bundle(); - b.putBoolean(Helper.RECEIVE_REDRAW_TOPBAR, true); + Bundle args = new Bundle(); + args.putBoolean(Helper.RECEIVE_REDRAW_TOPBAR, true); Intent intentBD = new Intent(Helper.BROADCAST_DATA); - intentBD.putExtras(b); - intentBD.setPackage(BuildConfig.APPLICATION_ID); - sendBroadcast(intentBD); - dialog.dismiss(); + new CachedBundle(HashTagActivity.this).insertBundle(args, currentAccount, bundleId -> { + Bundle bundle = new Bundle(); + bundle.putLong(Helper.ARG_INTENT_ID, bundleId); + intentBD.putExtras(bundle); + intentBD.setPackage(BuildConfig.APPLICATION_ID); + sendBroadcast(intentBD); + dialog.dismiss(); + }); + }); unpinConfirm.show(); } else { @@ -243,12 +253,16 @@ public class HashTagActivity extends BaseActivity { } else { new Pinned(HashTagActivity.this).insertPinned(pinned); } - Bundle b = new Bundle(); - b.putBoolean(Helper.RECEIVE_REDRAW_TOPBAR, true); + Bundle args = new Bundle(); + args.putBoolean(Helper.RECEIVE_REDRAW_TOPBAR, true); Intent intentBD = new Intent(Helper.BROADCAST_DATA); - intentBD.putExtras(b); - intentBD.setPackage(BuildConfig.APPLICATION_ID); - sendBroadcast(intentBD); + new CachedBundle(HashTagActivity.this).insertBundle(args, currentAccount, bundleId -> { + Bundle bundle = new Bundle(); + bundle.putLong(Helper.ARG_INTENT_ID, bundleId); + intentBD.putExtras(bundle); + intentBD.setPackage(BuildConfig.APPLICATION_ID); + sendBroadcast(intentBD); + }); pinnedTag = true; invalidateOptionsMenu(); } catch (DBException e) { diff --git a/app/src/main/java/app/fedilab/android/mastodon/activities/MastodonListActivity.java b/app/src/main/java/app/fedilab/android/mastodon/activities/MastodonListActivity.java index 2e4873742..929b80385 100644 --- a/app/src/main/java/app/fedilab/android/mastodon/activities/MastodonListActivity.java +++ b/app/src/main/java/app/fedilab/android/mastodon/activities/MastodonListActivity.java @@ -15,6 +15,8 @@ package app.fedilab.android.mastodon.activities; * see . */ +import static app.fedilab.android.BaseMainActivity.currentAccount; + import android.annotation.SuppressLint; import android.content.Intent; import android.os.Bundle; @@ -45,12 +47,12 @@ import java.util.Objects; import app.fedilab.android.BaseMainActivity; import app.fedilab.android.BuildConfig; import app.fedilab.android.R; -import app.fedilab.android.activities.MainActivity; import app.fedilab.android.databinding.ActivityListBinding; import app.fedilab.android.databinding.PopupAddListBinding; import app.fedilab.android.databinding.PopupManageAccountsListBinding; import app.fedilab.android.mastodon.client.entities.api.Account; import app.fedilab.android.mastodon.client.entities.api.MastodonList; +import app.fedilab.android.mastodon.client.entities.app.CachedBundle; import app.fedilab.android.mastodon.client.entities.app.Pinned; import app.fedilab.android.mastodon.client.entities.app.PinnedTimeline; import app.fedilab.android.mastodon.client.entities.app.Timeline; @@ -175,7 +177,7 @@ public class MastodonListActivity extends BaseBarActivity implements MastodonLis timelinesVM.getAccountsInList(BaseMainActivity.currentInstance, BaseMainActivity.currentToken, mastodonList.id, null, null, 0) .observe(MastodonListActivity.this, accounts -> { if (accounts != null && accounts.size() > 0) { - accountsVM.muteAccountsHome(MainActivity.currentAccount, accounts); + accountsVM.muteAccountsHome(currentAccount, accounts); } }); dialog.dismiss(); @@ -307,13 +309,17 @@ public class MastodonListActivity extends BaseBarActivity implements MastodonLis } else { binding.notContent.setVisibility(View.GONE); } - Bundle b = new Bundle(); - b.putBoolean(Helper.RECEIVE_REDRAW_TOPBAR, true); + Bundle args = new Bundle(); + args.putBoolean(Helper.RECEIVE_REDRAW_TOPBAR, true); Intent intentBD = new Intent(Helper.BROADCAST_DATA); - b.putSerializable(Helper.RECEIVE_MASTODON_LIST, mastodonListList); - intentBD.putExtras(b); - intentBD.setPackage(BuildConfig.APPLICATION_ID); - sendBroadcast(intentBD); + args.putSerializable(Helper.RECEIVE_MASTODON_LIST, mastodonListList); + new CachedBundle(MastodonListActivity.this).insertBundle(args, currentAccount, bundleId -> { + Bundle bundle = new Bundle(); + bundle.putLong(Helper.ARG_INTENT_ID, bundleId); + intentBD.putExtras(bundle); + intentBD.setPackage(BuildConfig.APPLICATION_ID); + sendBroadcast(intentBD); + }); }); alt_bld.setNegativeButton(R.string.cancel, (dialog, id) -> dialog.dismiss()); AlertDialog alert = alt_bld.create(); @@ -343,13 +349,17 @@ public class MastodonListActivity extends BaseBarActivity implements MastodonLis } else { Toasty.error(MastodonListActivity.this, getString(R.string.toast_error), Toasty.LENGTH_LONG).show(); } - Bundle b = new Bundle(); - b.putBoolean(Helper.RECEIVE_REDRAW_TOPBAR, true); + Bundle args = new Bundle(); + args.putBoolean(Helper.RECEIVE_REDRAW_TOPBAR, true); Intent intentBD = new Intent(Helper.BROADCAST_DATA); - b.putSerializable(Helper.RECEIVE_MASTODON_LIST, mastodonListList); - intentBD.putExtras(b); - intentBD.setPackage(BuildConfig.APPLICATION_ID); - sendBroadcast(intentBD); + args.putSerializable(Helper.RECEIVE_MASTODON_LIST, mastodonListList); + new CachedBundle(MastodonListActivity.this).insertBundle(args, currentAccount, bundleId -> { + Bundle bundle = new Bundle(); + bundle.putLong(Helper.ARG_INTENT_ID, bundleId); + intentBD.putExtras(bundle); + intentBD.setPackage(BuildConfig.APPLICATION_ID); + sendBroadcast(intentBD); + }); }); dialog.dismiss(); } else { @@ -392,12 +402,16 @@ public class MastodonListActivity extends BaseBarActivity implements MastodonLis new Thread(() -> { try { new Pinned(MastodonListActivity.this).updatePinned(pinned); - Bundle b = new Bundle(); - b.putBoolean(Helper.RECEIVE_REDRAW_TOPBAR, true); + Bundle args = new Bundle(); + args.putBoolean(Helper.RECEIVE_REDRAW_TOPBAR, true); Intent intentBD = new Intent(Helper.BROADCAST_DATA); - intentBD.putExtras(b); - intentBD.setPackage(BuildConfig.APPLICATION_ID); - sendBroadcast(intentBD); + new CachedBundle(MastodonListActivity.this).insertBundle(args, currentAccount, bundleId -> { + Bundle bundle = new Bundle(); + bundle.putLong(Helper.ARG_INTENT_ID, bundleId); + intentBD.putExtras(bundle); + intentBD.setPackage(BuildConfig.APPLICATION_ID); + sendBroadcast(intentBD); + }); } catch ( DBException e) { e.printStackTrace(); diff --git a/app/src/main/java/app/fedilab/android/mastodon/activities/MediaActivity.java b/app/src/main/java/app/fedilab/android/mastodon/activities/MediaActivity.java index 718081abc..8c9dae7f3 100644 --- a/app/src/main/java/app/fedilab/android/mastodon/activities/MediaActivity.java +++ b/app/src/main/java/app/fedilab/android/mastodon/activities/MediaActivity.java @@ -84,10 +84,10 @@ public class MediaActivity extends BaseTransparentActivity implements OnDownload private final BroadcastReceiver onDownloadComplete = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { + long id = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, -1); if (downloadID == id) { DownloadManager manager = (DownloadManager) context.getSystemService(DOWNLOAD_SERVICE); - assert manager != null; Uri uri = manager.getUriForDownloadedFile(downloadID); Intent shareIntent = new Intent(Intent.ACTION_SEND); shareIntent.putExtra(Intent.EXTRA_STREAM, uri); diff --git a/app/src/main/java/app/fedilab/android/mastodon/activities/ProfileActivity.java b/app/src/main/java/app/fedilab/android/mastodon/activities/ProfileActivity.java index 44240c6f4..9be0b1ee7 100644 --- a/app/src/main/java/app/fedilab/android/mastodon/activities/ProfileActivity.java +++ b/app/src/main/java/app/fedilab/android/mastodon/activities/ProfileActivity.java @@ -135,23 +135,14 @@ public class ProfileActivity extends BaseActivity { Bundle args = intent.getExtras(); if (args != null) { long bundleId = args.getLong(Helper.ARG_INTENT_ID, -1); - if (bundleId != -1) { - new CachedBundle(ProfileActivity.this).getBundle(bundleId, currentAccount, bundle -> { - Account accountReceived = (Account) bundle.getSerializable(Helper.ARG_ACCOUNT); - if (bundle.getBoolean(Helper.RECEIVE_REDRAW_PROFILE, false) && accountReceived != null) { - if (account != null && accountReceived.id != null && account.id != null && accountReceived.id.equalsIgnoreCase(account.id)) { - initializeView(accountReceived); - } - } - }); - } else { - Account accountReceived = (Account) args.getSerializable(Helper.ARG_ACCOUNT); - if (args.getBoolean(Helper.RECEIVE_REDRAW_PROFILE, false) && accountReceived != null) { + new CachedBundle(ProfileActivity.this).getBundle(bundleId, currentAccount, bundle -> { + Account accountReceived = (Account) bundle.getSerializable(Helper.ARG_ACCOUNT); + if (bundle.getBoolean(Helper.RECEIVE_REDRAW_PROFILE, false) && accountReceived != null) { if (account != null && accountReceived.id != null && account.id != null && accountReceived.id.equalsIgnoreCase(account.id)) { initializeView(accountReceived); } } - } + }); } } }; @@ -926,12 +917,16 @@ public class ProfileActivity extends BaseActivity { new Pinned(ProfileActivity.this).insertPinned(finalPinned); } runOnUiThread(() -> { - Bundle b = new Bundle(); - b.putBoolean(Helper.RECEIVE_REDRAW_TOPBAR, true); + Bundle args = new Bundle(); + args.putBoolean(Helper.RECEIVE_REDRAW_TOPBAR, true); Intent intentBD = new Intent(Helper.BROADCAST_DATA); - intentBD.putExtras(b); - intentBD.setPackage(BuildConfig.APPLICATION_ID); - sendBroadcast(intentBD); + new CachedBundle(ProfileActivity.this).insertBundle(args, currentAccount, bundleId -> { + Bundle bundle = new Bundle(); + bundle.putLong(Helper.ARG_INTENT_ID, bundleId); + intentBD.putExtras(bundle); + intentBD.setPackage(BuildConfig.APPLICATION_ID); + sendBroadcast(intentBD); + }); }); } catch (DBException e) { e.printStackTrace(); diff --git a/app/src/main/java/app/fedilab/android/mastodon/activities/ReorderTimelinesActivity.java b/app/src/main/java/app/fedilab/android/mastodon/activities/ReorderTimelinesActivity.java index 53a8263be..b298ea21b 100644 --- a/app/src/main/java/app/fedilab/android/mastodon/activities/ReorderTimelinesActivity.java +++ b/app/src/main/java/app/fedilab/android/mastodon/activities/ReorderTimelinesActivity.java @@ -15,6 +15,8 @@ package app.fedilab.android.mastodon.activities; * see . */ +import static app.fedilab.android.BaseMainActivity.currentAccount; + import android.content.Intent; import android.content.SharedPreferences; import android.os.Bundle; @@ -48,6 +50,7 @@ import app.fedilab.android.activities.MainActivity; import app.fedilab.android.databinding.ActivityReorderTabsBinding; import app.fedilab.android.databinding.PopupSearchInstanceBinding; 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.InstanceSocial; import app.fedilab.android.mastodon.client.entities.app.Pinned; import app.fedilab.android.mastodon.client.entities.app.PinnedTimeline; @@ -284,12 +287,16 @@ public class ReorderTimelinesActivity extends BaseBarActivity implements OnStart } } reorderTabAdapter.notifyItemInserted(pinned.pinnedTimelines.size()); - Bundle b = new Bundle(); - b.putBoolean(Helper.RECEIVE_REDRAW_TOPBAR, true); + Bundle args = new Bundle(); + args.putBoolean(Helper.RECEIVE_REDRAW_TOPBAR, true); Intent intentBD = new Intent(Helper.BROADCAST_DATA); - intentBD.putExtras(b); - intentBD.setPackage(BuildConfig.APPLICATION_ID); - sendBroadcast(intentBD); + new CachedBundle(ReorderTimelinesActivity.this).insertBundle(args, currentAccount, bundleId -> { + Bundle bundle = new Bundle(); + bundle.putLong(Helper.ARG_INTENT_ID, bundleId); + intentBD.putExtras(bundle); + intentBD.setPackage(BuildConfig.APPLICATION_ID); + sendBroadcast(intentBD); + }); }); } else { runOnUiThread(() -> Toasty.warning(ReorderTimelinesActivity.this, getString(R.string.toast_instance_unavailable), Toast.LENGTH_LONG).show()); @@ -373,20 +380,29 @@ public class ReorderTimelinesActivity extends BaseBarActivity implements OnStart super.onPause(); if (changes) { //Update menu - Bundle b = new Bundle(); - b.putBoolean(Helper.RECEIVE_REDRAW_TOPBAR, true); + Bundle args = new Bundle(); + args.putBoolean(Helper.RECEIVE_REDRAW_TOPBAR, true); Intent intentBD = new Intent(Helper.BROADCAST_DATA); - intentBD.putExtras(b); - intentBD.setPackage(BuildConfig.APPLICATION_ID); - sendBroadcast(intentBD); + new CachedBundle(ReorderTimelinesActivity.this).insertBundle(args, currentAccount, bundleId -> { + Bundle bundle = new Bundle(); + bundle.putLong(Helper.ARG_INTENT_ID, bundleId); + intentBD.putExtras(bundle); + intentBD.setPackage(BuildConfig.APPLICATION_ID); + sendBroadcast(intentBD); + }); + } if (bottomChanges) { - Bundle b = new Bundle(); - b.putBoolean(Helper.RECEIVE_REDRAW_BOTTOM, true); + Bundle args = new Bundle(); + args.putBoolean(Helper.RECEIVE_REDRAW_BOTTOM, true); Intent intentBD = new Intent(Helper.BROADCAST_DATA); - intentBD.putExtras(b); - intentBD.setPackage(BuildConfig.APPLICATION_ID); - sendBroadcast(intentBD); + new CachedBundle(ReorderTimelinesActivity.this).insertBundle(args, currentAccount, bundleId -> { + Bundle bundle = new Bundle(); + bundle.putLong(Helper.ARG_INTENT_ID, bundleId); + intentBD.putExtras(bundle); + intentBD.setPackage(BuildConfig.APPLICATION_ID); + sendBroadcast(intentBD); + }); } } diff --git a/app/src/main/java/app/fedilab/android/mastodon/activities/admin/AdminActionActivity.java b/app/src/main/java/app/fedilab/android/mastodon/activities/admin/AdminActionActivity.java index b84354b90..d78d756d4 100644 --- a/app/src/main/java/app/fedilab/android/mastodon/activities/admin/AdminActionActivity.java +++ b/app/src/main/java/app/fedilab/android/mastodon/activities/admin/AdminActionActivity.java @@ -14,6 +14,7 @@ package app.fedilab.android.mastodon.activities.admin; * You should have received a copy of the GNU General Public License along with Fedilab; if not, * see . */ +import static app.fedilab.android.BaseMainActivity.currentAccount; import static app.fedilab.android.mastodon.activities.admin.AdminActionActivity.AdminEnum.ACCOUNT; import static app.fedilab.android.mastodon.activities.admin.AdminActionActivity.AdminEnum.DOMAIN; import static app.fedilab.android.mastodon.activities.admin.AdminActionActivity.AdminEnum.REPORT; @@ -43,6 +44,7 @@ import app.fedilab.android.databinding.PopupAdminFilterAccountsBinding; import app.fedilab.android.databinding.PopupAdminFilterReportsBinding; import app.fedilab.android.mastodon.activities.BaseBarActivity; import app.fedilab.android.mastodon.client.entities.api.admin.AdminDomainBlock; +import app.fedilab.android.mastodon.client.entities.app.CachedBundle; import app.fedilab.android.mastodon.helper.Helper; import app.fedilab.android.mastodon.helper.ThemeHelper; import app.fedilab.android.mastodon.ui.fragment.admin.FragmentAdminAccount; @@ -63,18 +65,21 @@ public class AdminActionActivity extends BaseBarActivity { private final BroadcastReceiver mReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { - Bundle b = intent.getExtras(); - if (b != null) { - AdminDomainBlock adminDomainBlock = (AdminDomainBlock) b.getSerializable(Helper.ARG_ADMIN_DOMAINBLOCK); - AdminDomainBlock adminDomainBlockDelete = (AdminDomainBlock) b.getSerializable(Helper.ARG_ADMIN_DOMAINBLOCK_DELETE); - if (adminDomainBlock != null && adminDomainBlock.domain != null && fragmentAdminDomain != null) { - fragmentAdminDomain.update(adminDomainBlock); - } - if (adminDomainBlockDelete != null && fragmentAdminDomain != null) { - fragmentAdminDomain.delete(adminDomainBlockDelete); - } - } + Bundle args = intent.getExtras(); + if (args != null) { + long bundleId = args.getLong(Helper.ARG_INTENT_ID, -1); + new CachedBundle(AdminActionActivity.this).getBundle(bundleId, currentAccount, bundle -> { + AdminDomainBlock adminDomainBlock = (AdminDomainBlock) bundle.getSerializable(Helper.ARG_ADMIN_DOMAINBLOCK); + AdminDomainBlock adminDomainBlockDelete = (AdminDomainBlock) bundle.getSerializable(Helper.ARG_ADMIN_DOMAINBLOCK_DELETE); + if (adminDomainBlock != null && adminDomainBlock.domain != null && fragmentAdminDomain != null) { + fragmentAdminDomain.update(adminDomainBlock); + } + if (adminDomainBlockDelete != null && fragmentAdminDomain != null) { + fragmentAdminDomain.delete(adminDomainBlockDelete); + } + }); + } } }; diff --git a/app/src/main/java/app/fedilab/android/mastodon/activities/admin/AdminDomainBlockActivity.java b/app/src/main/java/app/fedilab/android/mastodon/activities/admin/AdminDomainBlockActivity.java index 0bd4cc07a..d99f20a04 100644 --- a/app/src/main/java/app/fedilab/android/mastodon/activities/admin/AdminDomainBlockActivity.java +++ b/app/src/main/java/app/fedilab/android/mastodon/activities/admin/AdminDomainBlockActivity.java @@ -15,6 +15,8 @@ package app.fedilab.android.mastodon.activities.admin; * see . */ +import static app.fedilab.android.BaseMainActivity.currentAccount; + import android.content.Intent; import android.os.Bundle; import android.view.Menu; @@ -37,6 +39,7 @@ import app.fedilab.android.activities.MainActivity; import app.fedilab.android.databinding.ActivityAdminDomainblockBinding; import app.fedilab.android.mastodon.activities.BaseBarActivity; import app.fedilab.android.mastodon.client.entities.api.admin.AdminDomainBlock; +import app.fedilab.android.mastodon.client.entities.app.CachedBundle; import app.fedilab.android.mastodon.helper.Helper; import app.fedilab.android.mastodon.viewmodel.mastodon.AdminVM; import es.dmoral.toasty.Toasty; @@ -109,10 +112,17 @@ public class AdminDomainBlockActivity extends BaseBarActivity { } else { Toasty.error(AdminDomainBlockActivity.this, getString(R.string.toast_error), Toasty.LENGTH_SHORT).show(); } - Intent intent = new Intent(Helper.BROADCAST_DATA).putExtra(Helper.ARG_ADMIN_DOMAINBLOCK, adminDomainBlockResult); - intent.setPackage(BuildConfig.APPLICATION_ID); - sendBroadcast(intent); - finish(); + Intent intent = new Intent(Helper.BROADCAST_DATA); + Bundle args = new Bundle(); + args.putSerializable(Helper.ARG_ADMIN_DOMAINBLOCK, adminDomainBlockResult); + new CachedBundle(AdminDomainBlockActivity.this).insertBundle(args, currentAccount, bundleId -> { + Bundle bundle = new Bundle(); + bundle.putLong(Helper.ARG_INTENT_ID, bundleId); + intent.putExtras(bundle); + intent.setPackage(BuildConfig.APPLICATION_ID); + sendBroadcast(intent); + finish(); + }); } ); }); @@ -138,10 +148,18 @@ public class AdminDomainBlockActivity extends BaseBarActivity { .setPositiveButton(R.string.unblock_domain, (dialog, which) -> { adminVM.deleteDomain(MainActivity.currentInstance, MainActivity.currentToken, adminDomainBlock.id) .observe(AdminDomainBlockActivity.this, adminDomainBlockResult -> { - Intent intent = new Intent(Helper.BROADCAST_DATA).putExtra(Helper.ARG_ADMIN_DOMAINBLOCK_DELETE, adminDomainBlock); - intent.setPackage(BuildConfig.APPLICATION_ID); - sendBroadcast(intent); - finish(); + Intent intent = new Intent(Helper.BROADCAST_DATA); + Bundle args = new Bundle(); + args.putSerializable(Helper.ARG_ADMIN_DOMAINBLOCK_DELETE, adminDomainBlock); + new CachedBundle(AdminDomainBlockActivity.this).insertBundle(args, currentAccount, bundleId -> { + Bundle bundle = new Bundle(); + bundle.putLong(Helper.ARG_INTENT_ID, bundleId); + intent.putExtras(bundle); + intent.setPackage(BuildConfig.APPLICATION_ID); + sendBroadcast(intent); + finish(); + }); + } ); dialog.dismiss(); 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 c40ff7928..fa445643e 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 @@ -872,13 +872,17 @@ public class Helper { */ public static void sendToastMessage(Context context, String type, String content) { Intent intentBC = new Intent(context, ToastMessage.class); - Bundle b = new Bundle(); - b.putString(RECEIVE_TOAST_TYPE, type); - b.putString(RECEIVE_TOAST_CONTENT, content); + Bundle args = new Bundle(); + args.putString(RECEIVE_TOAST_TYPE, type); + args.putString(RECEIVE_TOAST_CONTENT, content); intentBC.setAction(Helper.RECEIVE_TOAST_MESSAGE); - intentBC.putExtras(b); - intentBC.setPackage(BuildConfig.APPLICATION_ID); - context.sendBroadcast(intentBC); + new CachedBundle(context).insertBundle(args, currentAccount, bundleId -> { + Bundle bundle = new Bundle(); + bundle.putLong(Helper.ARG_INTENT_ID, bundleId); + intentBC.putExtras(bundle); + intentBC.setPackage(BuildConfig.APPLICATION_ID); + context.sendBroadcast(intentBC); + }); } /** @@ -1514,12 +1518,16 @@ public class Helper { * @param activity - Activity */ public static void recreateMainActivity(Activity activity) { - Bundle b = new Bundle(); - b.putBoolean(Helper.RECEIVE_RECREATE_ACTIVITY, true); + Bundle args = new Bundle(); + args.putBoolean(Helper.RECEIVE_RECREATE_ACTIVITY, true); Intent intentBD = new Intent(Helper.BROADCAST_DATA); - intentBD.putExtras(b); - intentBD.setPackage(BuildConfig.APPLICATION_ID); - activity.sendBroadcast(intentBD); + new CachedBundle(activity).insertBundle(args, currentAccount, bundleId -> { + Bundle bundle = new Bundle(); + bundle.putLong(Helper.ARG_INTENT_ID, bundleId); + intentBD.putExtras(bundle); + intentBD.setPackage(BuildConfig.APPLICATION_ID); + activity.sendBroadcast(intentBD); + }); } public static void showKeyboard(Context context, View view) { diff --git a/app/src/main/java/app/fedilab/android/mastodon/imageeditor/EditImageActivity.java b/app/src/main/java/app/fedilab/android/mastodon/imageeditor/EditImageActivity.java index 192128bcd..4d97631ee 100644 --- a/app/src/main/java/app/fedilab/android/mastodon/imageeditor/EditImageActivity.java +++ b/app/src/main/java/app/fedilab/android/mastodon/imageeditor/EditImageActivity.java @@ -1,6 +1,8 @@ package app.fedilab.android.mastodon.imageeditor; +import static app.fedilab.android.BaseMainActivity.currentAccount; + import android.Manifest; import android.content.Intent; import android.content.pm.PackageManager; @@ -41,6 +43,7 @@ import java.io.InputStream; import app.fedilab.android.BuildConfig; import app.fedilab.android.R; import app.fedilab.android.databinding.ActivityEditImageBinding; +import app.fedilab.android.mastodon.client.entities.app.CachedBundle; import app.fedilab.android.mastodon.helper.CirclesDrawingView; import app.fedilab.android.mastodon.helper.Helper; import app.fedilab.android.mastodon.imageeditor.base.BaseActivity; @@ -283,7 +286,8 @@ public class EditImageActivity extends BaseActivity implements OnPhotoEditorList binding.photoEditorView.getSource().setImageURI(Uri.fromFile(new File(imagePath))); if (exit) { Intent intentImage = new Intent(Helper.INTENT_SEND_MODIFIED_IMAGE); - intentImage.putExtra("imgpath", imagePath); + Bundle args = new Bundle(); + args.putString("imgpath", imagePath); CirclesDrawingView.CircleArea circleArea = binding.focusCircle.getTouchedCircle(); if (circleArea != null) { //Dimension of the editor containing the image @@ -323,13 +327,16 @@ public class EditImageActivity extends BaseActivity implements OnPhotoEditorList } else if (focusY < -1) { focusY = -1; } - intentImage.putExtra("focusX", focusX); - intentImage.putExtra("focusY", focusY); - + args.putFloat("focusX", focusX); + args.putFloat("focusY", focusY); } - intentImage.setPackage(BuildConfig.APPLICATION_ID); - sendBroadcast(intentImage); - finish(); + new CachedBundle(EditImageActivity.this).insertBundle(args, currentAccount, bundleId -> { + intentImage.putExtras(args); + intentImage.setPackage(BuildConfig.APPLICATION_ID); + sendBroadcast(intentImage); + finish(); + }); + } } diff --git a/app/src/main/java/app/fedilab/android/mastodon/jobs/ComposeWorker.java b/app/src/main/java/app/fedilab/android/mastodon/jobs/ComposeWorker.java index fd5658bc9..e8ddb9d48 100644 --- a/app/src/main/java/app/fedilab/android/mastodon/jobs/ComposeWorker.java +++ b/app/src/main/java/app/fedilab/android/mastodon/jobs/ComposeWorker.java @@ -60,6 +60,7 @@ import app.fedilab.android.mastodon.client.entities.api.ScheduledStatus; import app.fedilab.android.mastodon.client.entities.api.Status; 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.CachedBundle; import app.fedilab.android.mastodon.client.entities.app.CamelTag; import app.fedilab.android.mastodon.client.entities.app.PostState; import app.fedilab.android.mastodon.client.entities.app.StatusDraft; @@ -223,14 +224,24 @@ public class ComposeWorker extends Worker { } Call statusCall; if (error) { - Bundle b = new Bundle(); - b.putBoolean(Helper.RECEIVE_COMPOSE_ERROR_MESSAGE, true); + Bundle args = new Bundle(); + args.putBoolean(Helper.RECEIVE_COMPOSE_ERROR_MESSAGE, true); Intent intentBD = new Intent(Helper.INTENT_COMPOSE_ERROR_MESSAGE); - b.putSerializable(Helper.RECEIVE_ERROR_MESSAGE, context.getString(R.string.media_cannot_be_uploaded)); - b.putSerializable(Helper.ARG_STATUS_DRAFT, dataPost.statusDraft); - intentBD.putExtras(b); - intentBD.setPackage(BuildConfig.APPLICATION_ID); - context.sendBroadcast(intentBD); + args.putSerializable(Helper.RECEIVE_ERROR_MESSAGE, context.getString(R.string.media_cannot_be_uploaded)); + args.putSerializable(Helper.ARG_STATUS_DRAFT, dataPost.statusDraft); + BaseAccount account = null; + try { + account = new Account(context).getAccountByToken(dataPost.token); + } catch (DBException e) { + e.printStackTrace(); + } + new CachedBundle(context).insertBundle(args, account, bundleId -> { + Bundle bundle = new Bundle(); + bundle.putLong(Helper.ARG_INTENT_ID, bundleId); + intentBD.putExtras(bundle); + intentBD.setPackage(BuildConfig.APPLICATION_ID); + context.sendBroadcast(intentBD); + }); return; } if (statuses.get(i).local_only) { @@ -304,30 +315,51 @@ public class ComposeWorker extends Worker { } } } else if (statusResponse.errorBody() != null) { - Bundle b = new Bundle(); - b.putBoolean(Helper.RECEIVE_COMPOSE_ERROR_MESSAGE, true); + Bundle args = new Bundle(); + args.putBoolean(Helper.RECEIVE_COMPOSE_ERROR_MESSAGE, true); Intent intentBD = new Intent(Helper.INTENT_COMPOSE_ERROR_MESSAGE); - b.putSerializable(Helper.ARG_STATUS_DRAFT, dataPost.statusDraft); + args.putSerializable(Helper.ARG_STATUS_DRAFT, dataPost.statusDraft); String err = statusResponse.errorBody().string(); if (err.contains("{\"error\":\"")) { err = err.replaceAll("\\{\"error\":\"(.*)\"\\}", "$1"); } - b.putSerializable(Helper.RECEIVE_ERROR_MESSAGE, err); - intentBD.putExtras(b); - intentBD.setPackage(BuildConfig.APPLICATION_ID); - context.sendBroadcast(intentBD); + args.putSerializable(Helper.RECEIVE_ERROR_MESSAGE, err); + + BaseAccount account = null; + try { + account = new Account(context).getAccountByToken(dataPost.token); + } catch (DBException e) { + e.printStackTrace(); + } + new CachedBundle(context).insertBundle(args, account, bundleId -> { + Bundle bundle = new Bundle(); + bundle.putLong(Helper.ARG_INTENT_ID, bundleId); + intentBD.putExtras(bundle); + intentBD.setPackage(BuildConfig.APPLICATION_ID); + context.sendBroadcast(intentBD); + }); return; } } catch (IOException e) { e.printStackTrace(); - Bundle b = new Bundle(); - b.putBoolean(Helper.RECEIVE_COMPOSE_ERROR_MESSAGE, true); - b.putSerializable(Helper.ARG_STATUS_DRAFT, dataPost.statusDraft); + Bundle args = new Bundle(); + args.putBoolean(Helper.RECEIVE_COMPOSE_ERROR_MESSAGE, true); + args.putSerializable(Helper.ARG_STATUS_DRAFT, dataPost.statusDraft); Intent intentBD = new Intent(Helper.INTENT_COMPOSE_ERROR_MESSAGE); - b.putSerializable(Helper.RECEIVE_ERROR_MESSAGE, e.getMessage()); - intentBD.putExtras(b); - intentBD.setPackage(BuildConfig.APPLICATION_ID); - context.sendBroadcast(intentBD); + args.putSerializable(Helper.RECEIVE_ERROR_MESSAGE, e.getMessage()); + BaseAccount account = null; + try { + account = new Account(context).getAccountByToken(dataPost.token); + } catch (DBException e2) { + e2.printStackTrace(); + } + new CachedBundle(context).insertBundle(args, account, bundleId -> { + Bundle bundle = new Bundle(); + bundle.putLong(Helper.ARG_INTENT_ID, bundleId); + intentBD.putExtras(bundle); + intentBD.setPackage(BuildConfig.APPLICATION_ID); + context.sendBroadcast(intentBD); + }); return; } } else { @@ -375,14 +407,24 @@ public class ComposeWorker extends Worker { } if (dataPost.scheduledDate == null && dataPost.token != null && firstSendMessage != null) { - Bundle b = new Bundle(); - b.putBoolean(Helper.RECEIVE_NEW_MESSAGE, true); - b.putString(Helper.ARG_EDIT_STATUS_ID, dataPost.statusEditId); + Bundle args = new Bundle(); + args.putBoolean(Helper.RECEIVE_NEW_MESSAGE, true); + args.putString(Helper.ARG_EDIT_STATUS_ID, dataPost.statusEditId); Intent intentBD = new Intent(Helper.BROADCAST_DATA); - b.putSerializable(Helper.RECEIVE_STATUS_ACTION, firstSendMessage); - intentBD.putExtras(b); - intentBD.setPackage(BuildConfig.APPLICATION_ID); - context.sendBroadcast(intentBD); + args.putSerializable(Helper.RECEIVE_STATUS_ACTION, firstSendMessage); + BaseAccount account = null; + try { + account = new Account(context).getAccountByToken(dataPost.token); + } catch (DBException e2) { + e2.printStackTrace(); + } + new CachedBundle(context).insertBundle(args, account, bundleId -> { + Bundle bundle = new Bundle(); + bundle.putLong(Helper.ARG_INTENT_ID, bundleId); + intentBD.putExtras(bundle); + intentBD.setPackage(BuildConfig.APPLICATION_ID); + context.sendBroadcast(intentBD); + }); } } diff --git a/app/src/main/java/app/fedilab/android/mastodon/ui/drawer/StatusAdapter.java b/app/src/main/java/app/fedilab/android/mastodon/ui/drawer/StatusAdapter.java index 87216663f..aeaf80d6b 100644 --- a/app/src/main/java/app/fedilab/android/mastodon/ui/drawer/StatusAdapter.java +++ b/app/src/main/java/app/fedilab/android/mastodon/ui/drawer/StatusAdapter.java @@ -2171,9 +2171,15 @@ public class StatusAdapter extends RecyclerView.Adapter } statusDeleted.id = null; statusDraft.statusDraftList.add(statusDeleted); - intent.putExtra(Helper.ARG_STATUS_DRAFT, statusDraft); - intent.putExtra(Helper.ARG_STATUS_REPLY_ID, statusDeleted.in_reply_to_id); - context.startActivity(intent); + Bundle args = new Bundle(); + args.putSerializable(Helper.ARG_STATUS_DRAFT, statusDraft); + args.putSerializable(Helper.ARG_STATUS_REPLY_ID, statusDeleted.in_reply_to_id); + new CachedBundle(context).insertBundle(args, currentAccount, bundleId -> { + Bundle bundle = new Bundle(); + bundle.putLong(Helper.ARG_INTENT_ID, bundleId); + intent.putExtras(bundle); + context.startActivity(intent); + }); sendAction(context, Helper.ARG_STATUS_DELETED, statusToDeal, null); }); } @@ -2194,10 +2200,16 @@ public class StatusAdapter extends RecyclerView.Adapter statusToDeal.spoilerChecked = true; } statusDraft.statusDraftList.add(statusToDeal); - intent.putExtra(Helper.ARG_STATUS_DRAFT, statusDraft); - intent.putExtra(Helper.ARG_EDIT_STATUS_ID, statusToDeal.id); - intent.putExtra(Helper.ARG_STATUS_REPLY_ID, statusToDeal.in_reply_to_id); - context.startActivity(intent); + Bundle args = new Bundle(); + args.putSerializable(Helper.ARG_STATUS_DRAFT, statusDraft); + args.putString(Helper.ARG_EDIT_STATUS_ID, statusToDeal.id); + args.putString(Helper.ARG_STATUS_REPLY_ID, statusToDeal.in_reply_to_id); + new CachedBundle(context).insertBundle(args, currentAccount, bundleId -> { + Bundle bundle = new Bundle(); + bundle.putLong(Helper.ARG_INTENT_ID, bundleId); + intent.putExtras(bundle); + context.startActivity(intent); + }); } else { Toasty.error(context, context.getString(R.string.toast_error), Toasty.LENGTH_SHORT).show(); } @@ -2372,10 +2384,14 @@ public class StatusAdapter extends RecyclerView.Adapter }); } else if (itemId == R.id.action_mention) { Intent intent = new Intent(context, ComposeActivity.class); - Bundle b = new Bundle(); - b.putSerializable(Helper.ARG_STATUS_MENTION, statusToDeal); - intent.putExtras(b); - context.startActivity(intent); + Bundle args = new Bundle(); + args.putSerializable(Helper.ARG_STATUS_MENTION, statusToDeal); + new CachedBundle(context).insertBundle(args, currentAccount, bundleId -> { + Bundle bundle = new Bundle(); + bundle.putLong(Helper.ARG_INTENT_ID, bundleId); + intent.putExtras(bundle); + context.startActivity(intent); + }); } else if (itemId == R.id.action_open_with) { new Thread(() -> { try { @@ -2475,19 +2491,31 @@ public class StatusAdapter extends RecyclerView.Adapter if (results != null && results.statuses != null && results.statuses.size() > 0) { Status fetchedStatus = results.statuses.get(0); Intent intent = new Intent(context, ComposeActivity.class); - intent.putExtra(Helper.ARG_STATUS_REPLY, fetchedStatus); - context.startActivity(intent); + Bundle args = new Bundle(); + args.putSerializable(Helper.ARG_STATUS_REPLY, fetchedStatus); + new CachedBundle(context).insertBundle(args, currentAccount, bundleId -> { + Bundle bundle = new Bundle(); + bundle.putLong(Helper.ARG_INTENT_ID, bundleId); + intent.putExtras(bundle); + context.startActivity(intent); + }); } else { Toasty.info(context, context.getString(R.string.toast_error_search), Toasty.LENGTH_SHORT).show(); } }); } else { Intent intent = new Intent(context, ComposeActivity.class); - intent.putExtra(Helper.ARG_STATUS_REPLY, statusToDeal); + Bundle args = new Bundle(); + args.putSerializable(Helper.ARG_STATUS_REPLY, statusToDeal); if (status.reblog != null) { - intent.putExtra(Helper.ARG_MENTION_BOOSTER, status.account); + args.putSerializable(Helper.ARG_MENTION_BOOSTER, status.account); } - context.startActivity(intent); + new CachedBundle(context).insertBundle(args, currentAccount, bundleId -> { + Bundle bundle = new Bundle(); + bundle.putLong(Helper.ARG_INTENT_ID, bundleId); + intent.putExtras(bundle); + context.startActivity(intent); + }); } }); //For reports @@ -2811,20 +2839,24 @@ public class StatusAdapter extends RecyclerView.Adapter * @param id - Id of an account (can be null) */ public static void sendAction(@NonNull Context context, @NonNull String type, @Nullable Status status, @Nullable String id) { - Bundle b = new Bundle(); + Bundle args = new Bundle(); if (status != null) { - b.putSerializable(type, status); + args.putSerializable(type, status); } if (id != null) { - b.putString(type, id); + args.putString(type, id); } if (type.equals(ARG_TIMELINE_REFRESH_ALL)) { - b.putBoolean(ARG_TIMELINE_REFRESH_ALL, true); + args.putBoolean(ARG_TIMELINE_REFRESH_ALL, true); } Intent intentBC = new Intent(Helper.RECEIVE_STATUS_ACTION); - intentBC.putExtras(b); - intentBC.setPackage(BuildConfig.APPLICATION_ID); - context.sendBroadcast(intentBC); + new CachedBundle(context).insertBundle(args, currentAccount, bundleId -> { + Bundle bundle = new Bundle(); + bundle.putLong(Helper.ARG_INTENT_ID, bundleId); + intentBC.putExtras(bundle); + intentBC.setPackage(BuildConfig.APPLICATION_ID); + context.sendBroadcast(intentBC); + }); } diff --git a/app/src/main/java/app/fedilab/android/mastodon/ui/drawer/StatusDraftAdapter.java b/app/src/main/java/app/fedilab/android/mastodon/ui/drawer/StatusDraftAdapter.java index bb8a90c85..40dcfd799 100644 --- a/app/src/main/java/app/fedilab/android/mastodon/ui/drawer/StatusDraftAdapter.java +++ b/app/src/main/java/app/fedilab/android/mastodon/ui/drawer/StatusDraftAdapter.java @@ -15,9 +15,12 @@ package app.fedilab.android.mastodon.ui.drawer; * see . */ +import static app.fedilab.android.BaseMainActivity.currentAccount; + import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; +import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -39,6 +42,7 @@ import app.fedilab.android.databinding.DrawerStatusDraftBinding; import app.fedilab.android.mastodon.activities.ComposeActivity; import app.fedilab.android.mastodon.client.entities.api.Attachment; import app.fedilab.android.mastodon.client.entities.api.Status; +import app.fedilab.android.mastodon.client.entities.app.CachedBundle; import app.fedilab.android.mastodon.client.entities.app.StatusDraft; import app.fedilab.android.mastodon.exception.DBException; import app.fedilab.android.mastodon.helper.Helper; @@ -100,11 +104,16 @@ public class StatusDraftAdapter extends RecyclerView.Adapter { Intent intent = new Intent(context, ComposeActivity.class); - intent.putExtra(Helper.ARG_STATUS_DRAFT, statusDraft); - context.startActivity(intent); + Bundle args = new Bundle(); + args.putSerializable(Helper.ARG_STATUS_DRAFT, statusDraft); + new CachedBundle(context).insertBundle(args, currentAccount, bundleId -> { + Bundle bundle = new Bundle(); + bundle.putLong(Helper.ARG_INTENT_ID, bundleId); + intent.putExtras(bundle); + context.startActivity(intent); + }); }); - holder.binding.delete.setOnClickListener(v -> { AlertDialog.Builder unfollowConfirm = new MaterialAlertDialogBuilder(context); unfollowConfirm.setMessage(context.getString(R.string.remove_draft)); diff --git a/app/src/main/java/app/fedilab/android/mastodon/ui/drawer/StatusScheduledAdapter.java b/app/src/main/java/app/fedilab/android/mastodon/ui/drawer/StatusScheduledAdapter.java index 96648818e..14334b898 100644 --- a/app/src/main/java/app/fedilab/android/mastodon/ui/drawer/StatusScheduledAdapter.java +++ b/app/src/main/java/app/fedilab/android/mastodon/ui/drawer/StatusScheduledAdapter.java @@ -16,10 +16,12 @@ package app.fedilab.android.mastodon.ui.drawer; import static androidx.core.text.HtmlCompat.FROM_HTML_MODE_LEGACY; +import static app.fedilab.android.BaseMainActivity.currentAccount; import android.content.Context; import android.content.Intent; import android.os.Build; +import android.os.Bundle; import android.text.Html; import android.text.SpannableString; import android.view.LayoutInflater; @@ -44,6 +46,7 @@ import app.fedilab.android.R; import app.fedilab.android.databinding.DrawerStatusScheduledBinding; import app.fedilab.android.mastodon.activities.ComposeActivity; import app.fedilab.android.mastodon.client.entities.api.ScheduledStatus; +import app.fedilab.android.mastodon.client.entities.app.CachedBundle; import app.fedilab.android.mastodon.client.entities.app.ScheduledBoost; import app.fedilab.android.mastodon.client.entities.app.StatusDraft; import app.fedilab.android.mastodon.exception.DBException; @@ -126,10 +129,15 @@ public class StatusScheduledAdapter extends RecyclerView.Adapter { if (statusDraft != null) { Intent intent = new Intent(context, ComposeActivity.class); - intent.putExtra(Helper.ARG_STATUS_DRAFT, statusDraft); - context.startActivity(intent); + Bundle args = new Bundle(); + args.putSerializable(Helper.ARG_STATUS_DRAFT, statusDraft); + new CachedBundle(context).insertBundle(args, currentAccount, bundleId -> { + Bundle bundle = new Bundle(); + bundle.putLong(Helper.ARG_INTENT_ID, bundleId); + intent.putExtras(bundle); + context.startActivity(intent); + }); } - }); holder.binding.delete.setOnClickListener(v -> { AlertDialog.Builder unfollowConfirm = new MaterialAlertDialogBuilder(context); diff --git a/app/src/main/java/app/fedilab/android/mastodon/ui/fragment/timeline/FragmentMastodonContext.java b/app/src/main/java/app/fedilab/android/mastodon/ui/fragment/timeline/FragmentMastodonContext.java index 31cc9f6a5..e8d6bc388 100644 --- a/app/src/main/java/app/fedilab/android/mastodon/ui/fragment/timeline/FragmentMastodonContext.java +++ b/app/src/main/java/app/fedilab/android/mastodon/ui/fragment/timeline/FragmentMastodonContext.java @@ -63,67 +63,71 @@ public class FragmentMastodonContext extends Fragment { private final BroadcastReceiver receive_action = new BroadcastReceiver() { @Override public void onReceive(android.content.Context context, Intent intent) { - Bundle b = intent.getExtras(); - if (b != null) { - Status receivedStatus = (Status) b.getSerializable(Helper.ARG_STATUS_ACTION); - String delete_statuses_for_user = b.getString(Helper.ARG_STATUS_ACCOUNT_ID_DELETED); - Status status_to_delete = (Status) b.getSerializable(Helper.ARG_STATUS_DELETED); - Status statusPosted = (Status) b.getSerializable(Helper.ARG_STATUS_POSTED); - Status status_to_update = (Status) b.getSerializable(Helper.ARG_STATUS_UPDATED); - if (receivedStatus != null && statusAdapter != null) { - int position = getPosition(receivedStatus); - if (position >= 0) { - statuses.get(position).reblog = receivedStatus.reblog; - statuses.get(position).reblogged = receivedStatus.reblogged; - statuses.get(position).favourited = receivedStatus.favourited; - statuses.get(position).bookmarked = receivedStatus.bookmarked; - statuses.get(position).reblogs_count = receivedStatus.reblogs_count; - statuses.get(position).favourites_count = receivedStatus.favourites_count; - statusAdapter.notifyItemChanged(position); - } - } else if (delete_statuses_for_user != null && statusAdapter != null) { - List statusesToRemove = new ArrayList<>(); - for (Status status : statuses) { - if (status.account.id.equals(delete_statuses_for_user)) { - statusesToRemove.add(status); + Bundle args = intent.getExtras(); + if (args != null) { + long bundleId = args.getLong(Helper.ARG_INTENT_ID, -1); + new CachedBundle(requireActivity()).getBundle(bundleId, currentAccount, bundle -> { + Status receivedStatus = (Status) bundle.getSerializable(Helper.ARG_STATUS_ACTION); + String delete_statuses_for_user = bundle.getString(Helper.ARG_STATUS_ACCOUNT_ID_DELETED); + Status status_to_delete = (Status) bundle.getSerializable(Helper.ARG_STATUS_DELETED); + Status statusPosted = (Status) bundle.getSerializable(Helper.ARG_STATUS_POSTED); + Status status_to_update = (Status) bundle.getSerializable(Helper.ARG_STATUS_UPDATED); + if (receivedStatus != null && statusAdapter != null) { + int position = getPosition(receivedStatus); + if (position >= 0) { + statuses.get(position).reblog = receivedStatus.reblog; + statuses.get(position).reblogged = receivedStatus.reblogged; + statuses.get(position).favourited = receivedStatus.favourited; + statuses.get(position).bookmarked = receivedStatus.bookmarked; + statuses.get(position).reblogs_count = receivedStatus.reblogs_count; + statuses.get(position).favourites_count = receivedStatus.favourites_count; + statusAdapter.notifyItemChanged(position); } - } - for (Status statusToRemove : statusesToRemove) { - int position = getPosition(statusToRemove); + } else if (delete_statuses_for_user != null && statusAdapter != null) { + List statusesToRemove = new ArrayList<>(); + for (Status status : statuses) { + if (status.account.id.equals(delete_statuses_for_user)) { + statusesToRemove.add(status); + } + } + for (Status statusToRemove : statusesToRemove) { + int position = getPosition(statusToRemove); + if (position >= 0) { + statuses.remove(position); + statusAdapter.notifyItemRemoved(position); + } + } + } else if (status_to_delete != null && statusAdapter != null) { + int position = getPosition(status_to_delete); if (position >= 0) { statuses.remove(position); statusAdapter.notifyItemRemoved(position); } - } - } else if (status_to_delete != null && statusAdapter != null) { - int position = getPosition(status_to_delete); - if (position >= 0) { - statuses.remove(position); - statusAdapter.notifyItemRemoved(position); - } - } else if (status_to_update != null && statusAdapter != null) { - int position = getPosition(status_to_update); - if (position >= 0) { - statuses.set(position, status_to_update); - statusAdapter.notifyItemChanged(position); - } - } else if (statusPosted != null && statusAdapter != null) { - if (requireActivity() instanceof ContextActivity) { - int i = 0; - for (Status status : statuses) { - if (status.id.equals(statusPosted.in_reply_to_id)) { - statuses.add((i + 1), statusPosted); - statusAdapter.notifyItemInserted((i + 1)); - if (requireActivity() instanceof ContextActivity) { - //Redraw decorations - statusAdapter.notifyItemRangeChanged(0, statuses.size()); + } else if (status_to_update != null && statusAdapter != null) { + int position = getPosition(status_to_update); + if (position >= 0) { + statuses.set(position, status_to_update); + statusAdapter.notifyItemChanged(position); + } + } else if (statusPosted != null && statusAdapter != null) { + if (requireActivity() instanceof ContextActivity) { + int i = 0; + for (Status status : statuses) { + if (status.id.equals(statusPosted.in_reply_to_id)) { + statuses.add((i + 1), statusPosted); + statusAdapter.notifyItemInserted((i + 1)); + if (requireActivity() instanceof ContextActivity) { + //Redraw decorations + statusAdapter.notifyItemRangeChanged(0, statuses.size()); + } + break; } - break; + i++; } - i++; } } - } + }); + } } }; diff --git a/app/src/main/java/app/fedilab/android/mastodon/ui/fragment/timeline/FragmentMastodonDirectMessage.java b/app/src/main/java/app/fedilab/android/mastodon/ui/fragment/timeline/FragmentMastodonDirectMessage.java index 36eeeacfa..0459e1194 100644 --- a/app/src/main/java/app/fedilab/android/mastodon/ui/fragment/timeline/FragmentMastodonDirectMessage.java +++ b/app/src/main/java/app/fedilab/android/mastodon/ui/fragment/timeline/FragmentMastodonDirectMessage.java @@ -112,17 +112,19 @@ public class FragmentMastodonDirectMessage extends Fragment { private final BroadcastReceiver broadcast_data = new BroadcastReceiver() { @Override public void onReceive(android.content.Context context, Intent intent) { - Bundle b = intent.getExtras(); - if (b != null) { - - if (b.getBoolean(Helper.RECEIVE_NEW_MESSAGE, false)) { - Status statusReceived = (Status) b.getSerializable(Helper.RECEIVE_STATUS_ACTION); - if (statusReceived != null) { - statuses.add(statusReceived); - statusDirectMessageAdapter.notifyItemInserted(statuses.size() - 1); - initiliazeStatus(); + Bundle args = intent.getExtras(); + if (args != null) { + long bundleId = args.getLong(Helper.ARG_INTENT_ID, -1); + new CachedBundle(requireActivity()).getBundle(bundleId, currentAccount, bundle -> { + if (bundle.getBoolean(Helper.RECEIVE_NEW_MESSAGE, false)) { + Status statusReceived = (Status) bundle.getSerializable(Helper.RECEIVE_STATUS_ACTION); + if (statusReceived != null) { + statuses.add(statusReceived); + statusDirectMessageAdapter.notifyItemInserted(statuses.size() - 1); + initiliazeStatus(); + } } - } + }); } } }; diff --git a/app/src/main/java/app/fedilab/android/mastodon/ui/fragment/timeline/FragmentMastodonNotification.java b/app/src/main/java/app/fedilab/android/mastodon/ui/fragment/timeline/FragmentMastodonNotification.java index 971ae01c5..f9fbaf8b6 100644 --- a/app/src/main/java/app/fedilab/android/mastodon/ui/fragment/timeline/FragmentMastodonNotification.java +++ b/app/src/main/java/app/fedilab/android/mastodon/ui/fragment/timeline/FragmentMastodonNotification.java @@ -14,6 +14,8 @@ package app.fedilab.android.mastodon.ui.fragment.timeline; * You should have received a copy of the GNU General Public License along with Fedilab; if not, * see . */ +import static app.fedilab.android.BaseMainActivity.currentAccount; + import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; @@ -47,6 +49,7 @@ import app.fedilab.android.databinding.FragmentPaginationBinding; import app.fedilab.android.mastodon.client.entities.api.Notification; import app.fedilab.android.mastodon.client.entities.api.Notifications; import app.fedilab.android.mastodon.client.entities.api.Status; +import app.fedilab.android.mastodon.client.entities.app.CachedBundle; import app.fedilab.android.mastodon.client.entities.app.StatusCache; import app.fedilab.android.mastodon.client.entities.app.Timeline; import app.fedilab.android.mastodon.exception.DBException; @@ -71,43 +74,46 @@ public class FragmentMastodonNotification extends Fragment implements Notificati private final BroadcastReceiver receive_action = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { - Bundle b = intent.getExtras(); - if (b != null) { - Status receivedStatus = (Status) b.getSerializable(Helper.ARG_STATUS_ACTION); - String delete_all_for_account_id = b.getString(Helper.ARG_DELETE_ALL_FOR_ACCOUNT_ID); - boolean refreshNotifications = b.getBoolean(Helper.ARG_REFRESH_NOTFICATION, false); - if (refreshNotifications) { - scrollToTop(); - } else if (receivedStatus != null && notificationAdapter != null) { - int position = getPosition(receivedStatus); - if (position >= 0) { - if (notificationList.get(position).status != null) { - notificationList.get(position).status.reblog = receivedStatus.reblog; - notificationList.get(position).status.reblogged = receivedStatus.reblogged; - notificationList.get(position).status.favourited = receivedStatus.favourited; - notificationList.get(position).status.bookmarked = receivedStatus.bookmarked; - notificationList.get(position).status.favourites_count = receivedStatus.favourites_count; - notificationList.get(position).status.reblogs_count = receivedStatus.reblogs_count; - notificationAdapter.notifyItemChanged(position); + Bundle args = intent.getExtras(); + if (args != null) { + long bundleId = args.getLong(Helper.ARG_INTENT_ID, -1); + new CachedBundle(requireActivity()).getBundle(bundleId, currentAccount, bundle -> { + Status receivedStatus = (Status) bundle.getSerializable(Helper.ARG_STATUS_ACTION); + String delete_all_for_account_id = bundle.getString(Helper.ARG_DELETE_ALL_FOR_ACCOUNT_ID); + boolean refreshNotifications = bundle.getBoolean(Helper.ARG_REFRESH_NOTFICATION, false); + if (refreshNotifications) { + scrollToTop(); + } else if (receivedStatus != null && notificationAdapter != null) { + int position = getPosition(receivedStatus); + if (position >= 0) { + if (notificationList.get(position).status != null) { + notificationList.get(position).status.reblog = receivedStatus.reblog; + notificationList.get(position).status.reblogged = receivedStatus.reblogged; + notificationList.get(position).status.favourited = receivedStatus.favourited; + notificationList.get(position).status.bookmarked = receivedStatus.bookmarked; + notificationList.get(position).status.favourites_count = receivedStatus.favourites_count; + notificationList.get(position).status.reblogs_count = receivedStatus.reblogs_count; + notificationAdapter.notifyItemChanged(position); + } } - } - } else if (delete_all_for_account_id != null) { - List toRemove = new ArrayList<>(); - if (notificationList != null) { - for (int position = 0; position < notificationList.size(); position++) { - if (notificationList.get(position).account.id.equals(delete_all_for_account_id)) { - toRemove.add(notificationList.get(position)); + } else if (delete_all_for_account_id != null) { + List toRemove = new ArrayList<>(); + if (notificationList != null) { + for (int position = 0; position < notificationList.size(); position++) { + if (notificationList.get(position).account.id.equals(delete_all_for_account_id)) { + toRemove.add(notificationList.get(position)); + } + } + } + if (toRemove.size() > 0) { + for (int i = 0; i < toRemove.size(); i++) { + int position = getPosition(toRemove.get(i)); + notificationList.remove(position); + notificationAdapter.notifyItemRemoved(position); } } } - if (toRemove.size() > 0) { - for (int i = 0; i < toRemove.size(); i++) { - int position = getPosition(toRemove.get(i)); - notificationList.remove(position); - notificationAdapter.notifyItemRemoved(position); - } - } - } + }); } } }; 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 bd7809960..21093873a 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 @@ -94,88 +94,91 @@ public class FragmentMastodonTimeline extends Fragment implements StatusAdapter. private final BroadcastReceiver receive_action = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { - Bundle b = intent.getExtras(); - if (b != null) { - Status receivedStatus = (Status) b.getSerializable(Helper.ARG_STATUS_ACTION); - String delete_statuses_for_user = b.getString(Helper.ARG_STATUS_ACCOUNT_ID_DELETED); - String delete_all_for_account_id = b.getString(Helper.ARG_DELETE_ALL_FOR_ACCOUNT_ID); - Status status_to_delete = (Status) b.getSerializable(Helper.ARG_STATUS_DELETED); - Status status_to_update = (Status) b.getSerializable(Helper.ARG_STATUS_UPDATED); - Status statusPosted = (Status) b.getSerializable(Helper.ARG_STATUS_DELETED); - boolean refreshAll = b.getBoolean(Helper.ARG_TIMELINE_REFRESH_ALL, false); - if (receivedStatus != null && statusAdapter != null) { - int position = getPosition(receivedStatus); - if (position >= 0) { - if (receivedStatus.reblog != null) { - timelineStatuses.get(position).reblog = receivedStatus.reblog; - } - if (timelineStatuses.get(position).reblog != null) { - timelineStatuses.get(position).reblog.reblogged = receivedStatus.reblogged; - timelineStatuses.get(position).reblog.favourited = receivedStatus.favourited; - timelineStatuses.get(position).reblog.bookmarked = receivedStatus.bookmarked; - timelineStatuses.get(position).reblog.reblogs_count = receivedStatus.reblogs_count; - timelineStatuses.get(position).reblog.favourites_count = receivedStatus.favourites_count; - } else { - timelineStatuses.get(position).reblogged = receivedStatus.reblogged; - timelineStatuses.get(position).favourited = receivedStatus.favourited; - timelineStatuses.get(position).bookmarked = receivedStatus.bookmarked; - timelineStatuses.get(position).reblogs_count = receivedStatus.reblogs_count; - timelineStatuses.get(position).favourites_count = receivedStatus.favourites_count; - } - - - statusAdapter.notifyItemChanged(position); - } - } else if (delete_statuses_for_user != null && statusAdapter != null) { - List statusesToRemove = new ArrayList<>(); - for (Status status : timelineStatuses) { - if (status != null && status.account != null && status.account.id != null && status.account.id.equals(delete_statuses_for_user)) { - statusesToRemove.add(status); - } - } - for (Status statusToRemove : statusesToRemove) { - int position = getPosition(statusToRemove); + Bundle args = intent.getExtras(); + if (args != null) { + long bundleId = args.getLong(Helper.ARG_INTENT_ID, -1); + new CachedBundle(requireActivity()).getBundle(bundleId, currentAccount, bundle -> { + Status receivedStatus = (Status) bundle.getSerializable(Helper.ARG_STATUS_ACTION); + String delete_statuses_for_user = bundle.getString(Helper.ARG_STATUS_ACCOUNT_ID_DELETED); + String delete_all_for_account_id = bundle.getString(Helper.ARG_DELETE_ALL_FOR_ACCOUNT_ID); + Status status_to_delete = (Status) bundle.getSerializable(Helper.ARG_STATUS_DELETED); + Status status_to_update = (Status) bundle.getSerializable(Helper.ARG_STATUS_UPDATED); + Status statusPosted = (Status) bundle.getSerializable(Helper.ARG_STATUS_DELETED); + boolean refreshAll = bundle.getBoolean(Helper.ARG_TIMELINE_REFRESH_ALL, false); + if (receivedStatus != null && statusAdapter != null) { + int position = getPosition(receivedStatus); if (position >= 0) { - timelineStatuses.remove(position); - statusAdapter.notifyItemRemoved(position); + if (receivedStatus.reblog != null) { + timelineStatuses.get(position).reblog = receivedStatus.reblog; + } + if (timelineStatuses.get(position).reblog != null) { + timelineStatuses.get(position).reblog.reblogged = receivedStatus.reblogged; + timelineStatuses.get(position).reblog.favourited = receivedStatus.favourited; + timelineStatuses.get(position).reblog.bookmarked = receivedStatus.bookmarked; + timelineStatuses.get(position).reblog.reblogs_count = receivedStatus.reblogs_count; + timelineStatuses.get(position).reblog.favourites_count = receivedStatus.favourites_count; + } else { + timelineStatuses.get(position).reblogged = receivedStatus.reblogged; + timelineStatuses.get(position).favourited = receivedStatus.favourited; + timelineStatuses.get(position).bookmarked = receivedStatus.bookmarked; + timelineStatuses.get(position).reblogs_count = receivedStatus.reblogs_count; + timelineStatuses.get(position).favourites_count = receivedStatus.favourites_count; + } + + + statusAdapter.notifyItemChanged(position); } - } - } else if (status_to_delete != null && statusAdapter != null) { - int position = getPosition(status_to_delete); - if (position >= 0) { - timelineStatuses.remove(position); - statusAdapter.notifyItemRemoved(position); - } - } else if (status_to_update != null && statusAdapter != null) { - int position = getPosition(status_to_update); - if (position >= 0) { - timelineStatuses.set(position, status_to_update); - statusAdapter.notifyItemChanged(position); - } - } else if (statusPosted != null && statusAdapter != null && timelineType == Timeline.TimeLineEnum.HOME) { - timelineStatuses.add(0, statusPosted); - statusAdapter.notifyItemInserted(0); - } else if (delete_all_for_account_id != null) { - List toRemove = new ArrayList<>(); - if (timelineStatuses != null) { - for (int position = 0; position < timelineStatuses.size(); position++) { - if (timelineStatuses.get(position).account.id.equals(delete_all_for_account_id)) { - toRemove.add(timelineStatuses.get(position)); + } else if (delete_statuses_for_user != null && statusAdapter != null) { + List statusesToRemove = new ArrayList<>(); + for (Status status : timelineStatuses) { + if (status != null && status.account != null && status.account.id != null && status.account.id.equals(delete_statuses_for_user)) { + statusesToRemove.add(status); } } - } - if (toRemove.size() > 0) { - for (int i = 0; i < toRemove.size(); i++) { - int position = getPosition(toRemove.get(i)); + for (Status statusToRemove : statusesToRemove) { + int position = getPosition(statusToRemove); if (position >= 0) { timelineStatuses.remove(position); statusAdapter.notifyItemRemoved(position); } } + } else if (status_to_delete != null && statusAdapter != null) { + int position = getPosition(status_to_delete); + if (position >= 0) { + timelineStatuses.remove(position); + statusAdapter.notifyItemRemoved(position); + } + } else if (status_to_update != null && statusAdapter != null) { + int position = getPosition(status_to_update); + if (position >= 0) { + timelineStatuses.set(position, status_to_update); + statusAdapter.notifyItemChanged(position); + } + } else if (statusPosted != null && statusAdapter != null && timelineType == Timeline.TimeLineEnum.HOME) { + timelineStatuses.add(0, statusPosted); + statusAdapter.notifyItemInserted(0); + } else if (delete_all_for_account_id != null) { + List toRemove = new ArrayList<>(); + if (timelineStatuses != null) { + for (int position = 0; position < timelineStatuses.size(); position++) { + if (timelineStatuses.get(position).account.id.equals(delete_all_for_account_id)) { + toRemove.add(timelineStatuses.get(position)); + } + } + } + if (toRemove.size() > 0) { + for (int i = 0; i < toRemove.size(); i++) { + int position = getPosition(toRemove.get(i)); + if (position >= 0) { + timelineStatuses.remove(position); + statusAdapter.notifyItemRemoved(position); + } + } + } + } else if (refreshAll) { + refreshAllAdapters(); } - } else if (refreshAll) { - refreshAllAdapters(); - } + }); } } };