summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThomas <tschneider.ac@gmail.com>2024-01-17 14:12:56 +0100
committerThomas <tschneider.ac@gmail.com>2024-01-17 14:12:56 +0100
commita1a6005ca0e2e886f12a3d96d1a66b4ea3fb6463 (patch)
tree67e74ab33782e5d21b3123b8a5316ab5cb6ded66
parent886b74c171f3e92f9bb394150a1ce99cf3491d76 (diff)
Fix potential crashes when clicking on notifications
-rw-r--r--app/src/main/java/app/fedilab/android/BaseMainActivity.java55
-rw-r--r--app/src/main/java/app/fedilab/android/mastodon/activities/MediaActivity.java12
-rw-r--r--app/src/main/java/app/fedilab/android/mastodon/activities/SearchResultTabActivity.java1
-rw-r--r--app/src/main/java/app/fedilab/android/mastodon/helper/NotificationsHelper.java67
-rw-r--r--app/src/main/java/app/fedilab/android/mastodon/ui/drawer/StatusAdapter.java20
5 files changed, 88 insertions, 67 deletions
diff --git a/app/src/main/java/app/fedilab/android/BaseMainActivity.java b/app/src/main/java/app/fedilab/android/BaseMainActivity.java
index 9b5af2dae..68170ca85 100644
--- a/app/src/main/java/app/fedilab/android/BaseMainActivity.java
+++ b/app/src/main/java/app/fedilab/android/BaseMainActivity.java
@@ -675,32 +675,35 @@ public abstract class BaseMainActivity extends BaseActivity implements NetworkSt
*/
private static void openNotifications(Activity activity, Intent intent) {
if (intent != null && intent.getExtras() != null) {
- Bundle bundle = intent.getExtras();
- app.fedilab.android.mastodon.client.entities.api.Account account = (app.fedilab.android.mastodon.client.entities.api.Account) bundle.getSerializable(Helper.INTENT_TARGETED_ACCOUNT);
- Status status = (Status) bundle.getSerializable(Helper.INTENT_TARGETED_STATUS);
- if (account != null) {
- Intent intentAccount = new Intent(activity, ProfileActivity.class);
- Bundle args = new Bundle();
- args.putSerializable(Helper.ARG_ACCOUNT, account);
- new CachedBundle(activity).insertBundle(args, currentAccount, 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);
- Bundle args = new Bundle();
- args.putSerializable(Helper.ARG_STATUS, status);
- new CachedBundle(activity).insertBundle(args, currentAccount, 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);
- });
- }
+ Bundle args = intent.getExtras();
+ long bundleId = args.getLong(Helper.ARG_INTENT_ID, -1);
+ new CachedBundle(activity).getBundle(bundleId, currentAccount, bundle -> {
+ app.fedilab.android.mastodon.client.entities.api.Account account = (app.fedilab.android.mastodon.client.entities.api.Account) bundle.getSerializable(Helper.INTENT_TARGETED_ACCOUNT);
+ Status status = (Status) bundle.getSerializable(Helper.INTENT_TARGETED_STATUS);
+ if (account != null) {
+ Intent intentAccount = new Intent(activity, ProfileActivity.class);
+ Bundle args2 = new Bundle();
+ args2.putSerializable(Helper.ARG_ACCOUNT, account);
+ new CachedBundle(activity).insertBundle(args2, currentAccount, bundleId2 -> {
+ Bundle bundleCached = new Bundle();
+ bundleCached.putLong(Helper.ARG_INTENT_ID, bundleId2);
+ intentAccount.putExtras(bundleCached);
+ intentAccount.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ activity.startActivity(intentAccount);
+ });
+ } else if (status != null) {
+ Intent intentContext = new Intent(activity, ContextActivity.class);
+ Bundle args2 = new Bundle();
+ args2.putSerializable(Helper.ARG_STATUS, status);
+ new CachedBundle(activity).insertBundle(args2, currentAccount, bundleId2 -> {
+ Bundle bundleCached = new Bundle();
+ bundleCached.putLong(Helper.ARG_INTENT_ID, bundleId2);
+ intentContext.putExtras(bundleCached);
+ intentContext.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ activity.startActivity(intentContext);
+ });
+ }
+ });
}
final Handler handler = new Handler();
handler.postDelayed(() -> {
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 8c9dae7f3..9dd9dad8d 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
@@ -171,9 +171,15 @@ public class MediaActivity extends BaseTransparentActivity implements OnDownload
if (attachments.get(mediaPosition - 1).status != null) {
binding.originalMessage.setOnClickListener(v -> {
Intent intentContext = new Intent(MediaActivity.this, ContextActivity.class);
- intentContext.putExtra(Helper.ARG_STATUS, attachments.get(mediaPosition - 1).status);
- intentContext.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- startActivity(intentContext);
+ Bundle args = new Bundle();
+ args.putSerializable(Helper.ARG_STATUS, attachments.get(mediaPosition - 1).status);
+ new CachedBundle(MediaActivity.this).insertBundle(args, currentAccount, bundleId -> {
+ Bundle bundleCached = new Bundle();
+ bundleCached.putLong(Helper.ARG_INTENT_ID, bundleId);
+ intentContext.putExtras(bundleCached);
+ intentContext.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ startActivity(intentContext);
+ });
});
}
diff --git a/app/src/main/java/app/fedilab/android/mastodon/activities/SearchResultTabActivity.java b/app/src/main/java/app/fedilab/android/mastodon/activities/SearchResultTabActivity.java
index 50a8ec4dd..438eb3271 100644
--- a/app/src/main/java/app/fedilab/android/mastodon/activities/SearchResultTabActivity.java
+++ b/app/src/main/java/app/fedilab/android/mastodon/activities/SearchResultTabActivity.java
@@ -82,7 +82,6 @@ public class SearchResultTabActivity extends BaseBarActivity {
Bundle b = getIntent().getExtras();
if (b != null) {
search = b.getString(Helper.ARG_SEARCH_KEYWORD, null);
-
}
if (search == null) {
Toasty.error(SearchResultTabActivity.this, getString(R.string.toast_error_search), Toast.LENGTH_LONG).show();
diff --git a/app/src/main/java/app/fedilab/android/mastodon/helper/NotificationsHelper.java b/app/src/main/java/app/fedilab/android/mastodon/helper/NotificationsHelper.java
index a39c165a0..2a3bf919d 100644
--- a/app/src/main/java/app/fedilab/android/mastodon/helper/NotificationsHelper.java
+++ b/app/src/main/java/app/fedilab/android/mastodon/helper/NotificationsHelper.java
@@ -54,6 +54,7 @@ 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.Account;
import app.fedilab.android.mastodon.client.entities.app.BaseAccount;
+import app.fedilab.android.mastodon.client.entities.app.CachedBundle;
import app.fedilab.android.mastodon.exception.DBException;
import app.fedilab.android.mastodon.ui.drawer.StatusAdapter;
import okhttp3.OkHttpClient;
@@ -398,48 +399,48 @@ public class NotificationsHelper {
//Some others notification
final Intent intent = new Intent(context, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
+ Bundle args = new Bundle();
intent.putExtra(Helper.INTENT_ACTION, Helper.NOTIFICATION_INTENT);
intent.putExtra(Helper.PREF_USER_ID, account.user_id);
if (targeted_account != null) {
- Bundle bundle = new Bundle();
- bundle.putSerializable(Helper.INTENT_TARGETED_ACCOUNT, targeted_account);
- intent.putExtras(bundle);
+ args.putSerializable(Helper.INTENT_TARGETED_ACCOUNT, targeted_account);
} else if (targeted_status != null) {
+ args.putSerializable(Helper.INTENT_TARGETED_STATUS, targeted_status);
+ }
+ String finalMessage1 = message;
+ String finalTitle1 = title;
+ Helper.NotifType finalNotifType1 = notifType;
+ new CachedBundle(context).insertBundle(args, account, bundleId -> {
Bundle bundle = new Bundle();
- bundle.putSerializable(Helper.INTENT_TARGETED_STATUS, targeted_status);
+ bundle.putLong(Helper.ARG_INTENT_ID, bundleId);
intent.putExtras(bundle);
- }
- intent.putExtra(Helper.PREF_USER_INSTANCE, account.instance);
- notificationUrl = notification.account.avatar;
- Handler mainHandler = new Handler(Looper.getMainLooper());
- final String finalNotificationUrl = notificationUrl;
- Helper.NotifType finalNotifType = notifType;
- String finalMessage = message;
- String finalTitle = title;
- StatusAdapter.sendAction(context, Helper.RECEIVE_REFRESH_NOTIFICATIONS_ACTION, null, null);
- Runnable myRunnable = () -> Glide.with(context)
- .asBitmap()
- .load(finalNotificationUrl != null ? finalNotificationUrl : R.drawable.fedilab_logo_bubbles)
- .into(new CustomTarget<Bitmap>() {
- @Override
- public void onResourceReady(@NonNull Bitmap resource, Transition<? super Bitmap> transition) {
- Helper.notify_user(context, account, intent, resource, finalNotifType, finalTitle, finalMessage);
- }
-
- @Override
- public void onLoadFailed(@Nullable Drawable errorDrawable) {
- super.onLoadFailed(errorDrawable);
- Helper.notify_user(context, account, intent, BitmapFactory.decodeResource(context.getResources(),
- getMainLogo(context)), finalNotifType, finalTitle, finalMessage);
- }
+ intent.putExtra(Helper.PREF_USER_INSTANCE, account.instance);
+ Handler mainHandler = new Handler(Looper.getMainLooper());
+ final String finalNotificationUrl = notification.account.avatar;
+ StatusAdapter.sendAction(context, Helper.RECEIVE_REFRESH_NOTIFICATIONS_ACTION, null, null);
+ Runnable myRunnable = () -> Glide.with(context)
+ .asBitmap()
+ .load(finalNotificationUrl != null ? finalNotificationUrl : R.drawable.fedilab_logo_bubbles)
+ .into(new CustomTarget<Bitmap>() {
+ @Override
+ public void onResourceReady(@NonNull Bitmap resource, Transition<? super Bitmap> transition) {
+ Helper.notify_user(context, account, intent, resource, finalNotifType1, finalTitle1, finalMessage1);
+ }
- @Override
- public void onLoadCleared(@Nullable Drawable placeholder) {
+ @Override
+ public void onLoadFailed(@Nullable Drawable errorDrawable) {
+ super.onLoadFailed(errorDrawable);
+ Helper.notify_user(context, account, intent, BitmapFactory.decodeResource(context.getResources(),
+ getMainLogo(context)), finalNotifType1, finalTitle1, finalMessage1);
+ }
- }
- });
- mainHandler.post(myRunnable);
+ @Override
+ public void onLoadCleared(@Nullable Drawable placeholder) {
+ }
+ });
+ mainHandler.post(myRunnable);
+ });
}
}
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 984e69022..2efefba82 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
@@ -2225,8 +2225,14 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
MastodonHelper.scheduleBoost(context, MastodonHelper.ScheduleType.BOOST, statusToDeal, null, null);
} else if (itemId == R.id.action_admin) {
Intent intent = new Intent(context, AdminAccountActivity.class);
- intent.putExtra(Helper.ARG_ACCOUNT_ID, statusToDeal.account.id);
- context.startActivity(intent);
+ Bundle args = new Bundle();
+ args.putString(Helper.ARG_ACCOUNT_ID, statusToDeal.account.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 if (itemId == R.id.action_open_browser) {
Helper.openBrowser(context, statusToDeal.url);
} else if (itemId == R.id.action_remove) {
@@ -2487,8 +2493,14 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
});
holder.binding.actionButtonQuote.setOnClickListener(v -> {
Intent intent = new Intent(context, ComposeActivity.class);
- intent.putExtra(Helper.ARG_QUOTED_MESSAGE, statusToDeal);
- context.startActivity(intent);
+ Bundle args = new Bundle();
+ args.putSerializable(Helper.ARG_QUOTED_MESSAGE, 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);
+ });
});
holder.binding.actionButtonReply.setOnClickListener(v -> {
if (remote) {