From 709506deb28c5c94b12fbcc21d5d79e783651454 Mon Sep 17 00:00:00 2001 From: M66B Date: Mon, 27 May 2019 12:15:25 +0200 Subject: [PATCH] Prevent crash --- .../eu/faircode/email/ActivityBilling.java | 2 +- .../eu/faircode/email/ActivityCompose.java | 39 ++++++ .../java/eu/faircode/email/ActivitySetup.java | 22 ++- .../java/eu/faircode/email/ActivityView.java | 17 +-- .../eu/faircode/email/FragmentAccount.java | 37 +++-- .../eu/faircode/email/FragmentCompose.java | 80 ++++++----- .../eu/faircode/email/FragmentIdentity.java | 33 ++--- .../eu/faircode/email/FragmentMessages.java | 131 +++++++++--------- .../java/eu/faircode/email/FragmentRule.java | 7 +- 9 files changed, 196 insertions(+), 172 deletions(-) diff --git a/app/src/main/java/eu/faircode/email/ActivityBilling.java b/app/src/main/java/eu/faircode/email/ActivityBilling.java index c90c5678ed..c2fa7b1e14 100644 --- a/app/src/main/java/eu/faircode/email/ActivityBilling.java +++ b/app/src/main/java/eu/faircode/email/ActivityBilling.java @@ -133,7 +133,7 @@ abstract class ActivityBilling extends ActivityBase implements PurchasesUpdatedL return Helper.sha256(BuildConfig.APPLICATION_ID + getChallenge()); } - BroadcastReceiver receiver = new BroadcastReceiver() { + private BroadcastReceiver receiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { if (ACTION_PURCHASE.equals(intent.getAction())) diff --git a/app/src/main/java/eu/faircode/email/ActivityCompose.java b/app/src/main/java/eu/faircode/email/ActivityCompose.java index bea78cd4e0..da1169a2c8 100644 --- a/app/src/main/java/eu/faircode/email/ActivityCompose.java +++ b/app/src/main/java/eu/faircode/email/ActivityCompose.java @@ -19,7 +19,10 @@ package eu.faircode.email; Copyright 2018-2019 by Marcel Bokhorst (M66B) */ +import android.content.BroadcastReceiver; +import android.content.Context; import android.content.Intent; +import android.content.IntentFilter; import android.net.MailTo; import android.net.Uri; import android.os.Bundle; @@ -31,6 +34,7 @@ import androidx.core.app.TaskStackBuilder; import androidx.fragment.app.FragmentManager; import androidx.fragment.app.FragmentTransaction; import androidx.lifecycle.Lifecycle; +import androidx.localbroadcastmanager.content.LocalBroadcastManager; import org.jsoup.Jsoup; import org.jsoup.safety.Whitelist; @@ -52,6 +56,8 @@ public class ActivityCompose extends ActivityBilling implements FragmentManager. static final int PI_REPLY = 1; + static final String ACTION_SHOW_PRO = BuildConfig.APPLICATION_ID + ".SHOW_PRO"; + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -214,4 +220,37 @@ public class ActivityCompose extends ActivityBilling implements FragmentManager. return false; } } + + @Override + protected void onResume() { + super.onResume(); + LocalBroadcastManager lbm = LocalBroadcastManager.getInstance(this); + IntentFilter iff = new IntentFilter(); + iff.addAction(ACTION_SHOW_PRO); + lbm.registerReceiver(receiver, iff); + } + + @Override + protected void onPause() { + super.onPause(); + LocalBroadcastManager lbm = LocalBroadcastManager.getInstance(this); + lbm.unregisterReceiver(receiver); + } + + private BroadcastReceiver receiver = new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + if (ACTION_SHOW_PRO.equals(intent.getAction())) + onShowPro(intent); + } + }; + + private void onShowPro(Intent intent) { + if (getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.RESUMED)) + getSupportFragmentManager().popBackStack("pro", FragmentManager.POP_BACK_STACK_INCLUSIVE); + + FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); + fragmentTransaction.replace(R.id.content_frame, new FragmentPro()).addToBackStack("pro"); + fragmentTransaction.commit(); + } } diff --git a/app/src/main/java/eu/faircode/email/ActivitySetup.java b/app/src/main/java/eu/faircode/email/ActivitySetup.java index 811d8b3421..63588c6889 100644 --- a/app/src/main/java/eu/faircode/email/ActivitySetup.java +++ b/app/src/main/java/eu/faircode/email/ActivitySetup.java @@ -367,19 +367,15 @@ public class ActivitySetup extends ActivityBilling implements FragmentManager.On } private void onMenuExport() { - if (Helper.isPro(this)) - try { - askPassword(true); - } catch (Throwable ex) { - Helper.unexpectedError(this, this, ex); - } - else { - if (getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.RESUMED)) - getSupportFragmentManager().popBackStack("pro", FragmentManager.POP_BACK_STACK_INCLUSIVE); + if (!Helper.isPro(this)) { + onShowPro(null); + return; + } - FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); - fragmentTransaction.replace(R.id.content_frame, new FragmentPro()).addToBackStack("pro"); - fragmentTransaction.commit(); + try { + askPassword(true); + } catch (Throwable ex) { + Helper.unexpectedError(this, this, ex); } } @@ -921,7 +917,7 @@ public class ActivitySetup extends ActivityBilling implements FragmentManager.On fragmentTransaction.commit(); } - BroadcastReceiver receiver = new BroadcastReceiver() { + private BroadcastReceiver receiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { if (ACTION_EDIT_ACCOUNT.equals(intent.getAction())) diff --git a/app/src/main/java/eu/faircode/email/ActivityView.java b/app/src/main/java/eu/faircode/email/ActivityView.java index 879e0c2223..eeabf15a11 100644 --- a/app/src/main/java/eu/faircode/email/ActivityView.java +++ b/app/src/main/java/eu/faircode/email/ActivityView.java @@ -344,7 +344,7 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB @Override public void run() { drawerLayout.closeDrawer(drawerContainer); - onMenuPro(); + onShowPro(null); } })); @@ -930,15 +930,6 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB fragmentTransaction.commit(); } - private void onMenuPro() { - if (getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.RESUMED)) - getSupportFragmentManager().popBackStack("pro", FragmentManager.POP_BACK_STACK_INCLUSIVE); - - FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); - fragmentTransaction.replace(R.id.content_frame, new FragmentPro()).addToBackStack("pro"); - fragmentTransaction.commit(); - } - private void onMenuInvite() { startActivity(getIntentInvite()); } @@ -1008,7 +999,7 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB fragmentTransaction.commit(); } - BroadcastReceiver receiver = new BroadcastReceiver() { + private BroadcastReceiver receiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { if (getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.RESUMED)) { @@ -1182,9 +1173,7 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB private void onColor(final Intent intent) { if (!Helper.isPro(this)) { - FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); - fragmentTransaction.replace(R.id.content_frame, new FragmentPro()).addToBackStack("pro"); - fragmentTransaction.commit(); + onShowPro(null); return; } diff --git a/app/src/main/java/eu/faircode/email/FragmentAccount.java b/app/src/main/java/eu/faircode/email/FragmentAccount.java index 8d7e4280c8..f0287ead66 100644 --- a/app/src/main/java/eu/faircode/email/FragmentAccount.java +++ b/app/src/main/java/eu/faircode/email/FragmentAccount.java @@ -61,8 +61,8 @@ import android.widget.TextView; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.constraintlayout.widget.Group; -import androidx.fragment.app.FragmentTransaction; import androidx.lifecycle.Lifecycle; +import androidx.localbroadcastmanager.content.LocalBroadcastManager; import com.android.colorpicker.ColorPickerDialog; import com.android.colorpicker.ColorPickerSwatch; @@ -327,22 +327,22 @@ public class FragmentAccount extends FragmentBase { btnColor.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - if (Helper.isPro(getContext())) { - int[] colors = getContext().getResources().getIntArray(R.array.colorPicker); - ColorPickerDialog colorPickerDialog = new ColorPickerDialog(); - colorPickerDialog.initialize(R.string.title_account_color, colors, color, 4, colors.length); - colorPickerDialog.setOnColorSelectedListener(new ColorPickerSwatch.OnColorSelectedListener() { - @Override - public void onColorSelected(int color) { - setColor(color); - } - }); - colorPickerDialog.show(getFragmentManager(), "colorpicker"); - } else { - FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction(); - fragmentTransaction.replace(R.id.content_frame, new FragmentPro()).addToBackStack("pro"); - fragmentTransaction.commit(); + if (!Helper.isPro(getContext())) { + LocalBroadcastManager lbm = LocalBroadcastManager.getInstance(getContext()); + lbm.sendBroadcast(new Intent(ActivitySetup.ACTION_SHOW_PRO)); + return; } + + int[] colors = getContext().getResources().getIntArray(R.array.colorPicker); + ColorPickerDialog colorPickerDialog = new ColorPickerDialog(); + colorPickerDialog.initialize(R.string.title_account_color, colors, color, 4, colors.length); + colorPickerDialog.setOnColorSelectedListener(new ColorPickerSwatch.OnColorSelectedListener() { + @Override + public void onColorSelected(int color) { + setColor(color); + } + }); + colorPickerDialog.show(getFragmentManager(), "colorpicker"); } }); @@ -399,9 +399,8 @@ public class FragmentAccount extends FragmentBase { if (isChecked && !Helper.isPro(getContext())) { cbNotify.setChecked(false); - FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction(); - fragmentTransaction.replace(R.id.content_frame, new FragmentPro()).addToBackStack("pro"); - fragmentTransaction.commit(); + LocalBroadcastManager lbm = LocalBroadcastManager.getInstance(getContext()); + lbm.sendBroadcast(new Intent(ActivitySetup.ACTION_SHOW_PRO)); } } }); diff --git a/app/src/main/java/eu/faircode/email/FragmentCompose.java b/app/src/main/java/eu/faircode/email/FragmentCompose.java index 92a9827bda..eaeb83717d 100644 --- a/app/src/main/java/eu/faircode/email/FragmentCompose.java +++ b/app/src/main/java/eu/faircode/email/FragmentCompose.java @@ -98,9 +98,9 @@ import androidx.constraintlayout.widget.Group; import androidx.core.content.FileProvider; import androidx.cursoradapter.widget.SimpleCursorAdapter; import androidx.exifinterface.media.ExifInterface; -import androidx.fragment.app.FragmentTransaction; import androidx.lifecycle.Lifecycle; import androidx.lifecycle.Observer; +import androidx.localbroadcastmanager.content.LocalBroadcastManager; import androidx.preference.PreferenceManager; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -1019,11 +1019,11 @@ public class FragmentCompose extends FragmentBase { private void onMenuAnswer() { if (!Helper.isPro(getContext())) { - FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction(); - fragmentTransaction.replace(R.id.content_frame, new FragmentPro()).addToBackStack("pro"); - fragmentTransaction.commit(); + LocalBroadcastManager lbm = LocalBroadcastManager.getInstance(getContext()); + lbm.sendBroadcast(new Intent(ActivityCompose.ACTION_SHOW_PRO)); return; } + new SimpleTask>() { @Override protected List onExecute(Context context, Bundle args) { @@ -1075,6 +1075,12 @@ public class FragmentCompose extends FragmentBase { new DialogDuration.IDialogDuration() { @Override public void onDurationSelected(long duration, long time) { + if (!Helper.isPro(getContext())) { + LocalBroadcastManager lbm = LocalBroadcastManager.getInstance(getContext()); + lbm.sendBroadcast(new Intent(ActivityCompose.ACTION_SHOW_PRO)); + return; + } + Bundle args = new Bundle(); args.putLong("id", working); args.putLong("wakeup", time); @@ -1307,42 +1313,42 @@ public class FragmentCompose extends FragmentBase { } private void onEncrypt() { - if (Helper.isPro(getContext())) { - if (pgpService.isBound()) - try { - String to = etTo.getText().toString(); - InternetAddress ato[] = (TextUtils.isEmpty(to) ? new InternetAddress[0] : InternetAddress.parse(to)); - if (ato.length == 0) - throw new IllegalArgumentException(getString(R.string.title_to_missing)); + if (!Helper.isPro(getContext())) { + LocalBroadcastManager lbm = LocalBroadcastManager.getInstance(getContext()); + lbm.sendBroadcast(new Intent(ActivityCompose.ACTION_SHOW_PRO)); + return; + } - String[] tos = new String[ato.length]; - for (int i = 0; i < ato.length; i++) - tos[i] = ato[i].getAddress(); + if (pgpService.isBound()) + try { + String to = etTo.getText().toString(); + InternetAddress ato[] = (TextUtils.isEmpty(to) ? new InternetAddress[0] : InternetAddress.parse(to)); + if (ato.length == 0) + throw new IllegalArgumentException(getString(R.string.title_to_missing)); - Intent intent = new Intent(OpenPgpApi.ACTION_GET_KEY_IDS); - intent.putExtra(OpenPgpApi.EXTRA_USER_IDS, tos); - doPgp(intent); - } catch (Throwable ex) { - if (ex instanceof IllegalArgumentException) - Snackbar.make(view, ex.getMessage(), Snackbar.LENGTH_LONG).show(); - else - Helper.unexpectedError(getContext(), getViewLifecycleOwner(), ex); - } - else { - Snackbar snackbar = Snackbar.make(view, R.string.title_no_openpgp, Snackbar.LENGTH_LONG); - if (Helper.getIntentOpenKeychain().resolveActivity(getContext().getPackageManager()) != null) - snackbar.setAction(R.string.title_fix, new View.OnClickListener() { - @Override - public void onClick(View v) { - startActivity(Helper.getIntentOpenKeychain()); - } - }); - snackbar.show(); + String[] tos = new String[ato.length]; + for (int i = 0; i < ato.length; i++) + tos[i] = ato[i].getAddress(); + + Intent intent = new Intent(OpenPgpApi.ACTION_GET_KEY_IDS); + intent.putExtra(OpenPgpApi.EXTRA_USER_IDS, tos); + doPgp(intent); + } catch (Throwable ex) { + if (ex instanceof IllegalArgumentException) + Snackbar.make(view, ex.getMessage(), Snackbar.LENGTH_LONG).show(); + else + Helper.unexpectedError(getContext(), getViewLifecycleOwner(), ex); } - } else { - FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction(); - fragmentTransaction.replace(R.id.content_frame, new FragmentPro()).addToBackStack("pro"); - fragmentTransaction.commit(); + else { + Snackbar snackbar = Snackbar.make(view, R.string.title_no_openpgp, Snackbar.LENGTH_LONG); + if (Helper.getIntentOpenKeychain().resolveActivity(getContext().getPackageManager()) != null) + snackbar.setAction(R.string.title_fix, new View.OnClickListener() { + @Override + public void onClick(View v) { + startActivity(Helper.getIntentOpenKeychain()); + } + }); + snackbar.show(); } } diff --git a/app/src/main/java/eu/faircode/email/FragmentIdentity.java b/app/src/main/java/eu/faircode/email/FragmentIdentity.java index 909fcf9f4a..a6904aec15 100644 --- a/app/src/main/java/eu/faircode/email/FragmentIdentity.java +++ b/app/src/main/java/eu/faircode/email/FragmentIdentity.java @@ -21,6 +21,7 @@ package eu.faircode.email; import android.content.Context; import android.content.DialogInterface; +import android.content.Intent; import android.graphics.Color; import android.graphics.drawable.GradientDrawable; import android.os.Bundle; @@ -50,7 +51,7 @@ import android.widget.TextView; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.constraintlayout.widget.Group; -import androidx.fragment.app.FragmentTransaction; +import androidx.localbroadcastmanager.content.LocalBroadcastManager; import com.android.colorpicker.ColorPickerDialog; import com.android.colorpicker.ColorPickerSwatch; @@ -276,22 +277,22 @@ public class FragmentIdentity extends FragmentBase { btnColor.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - if (Helper.isPro(getContext())) { - int[] colors = getContext().getResources().getIntArray(R.array.colorPicker); - ColorPickerDialog colorPickerDialog = new ColorPickerDialog(); - colorPickerDialog.initialize(R.string.title_account_color, colors, color, 4, colors.length); - colorPickerDialog.setOnColorSelectedListener(new ColorPickerSwatch.OnColorSelectedListener() { - @Override - public void onColorSelected(int color) { - setColor(color); - } - }); - colorPickerDialog.show(getFragmentManager(), "colorpicker"); - } else { - FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction(); - fragmentTransaction.replace(R.id.content_frame, new FragmentPro()).addToBackStack("pro"); - fragmentTransaction.commit(); + if (!Helper.isPro(getContext())) { + LocalBroadcastManager lbm = LocalBroadcastManager.getInstance(getContext()); + lbm.sendBroadcast(new Intent(ActivitySetup.ACTION_SHOW_PRO)); + return; } + + int[] colors = getContext().getResources().getIntArray(R.array.colorPicker); + ColorPickerDialog colorPickerDialog = new ColorPickerDialog(); + colorPickerDialog.initialize(R.string.title_account_color, colors, color, 4, colors.length); + colorPickerDialog.setOnColorSelectedListener(new ColorPickerSwatch.OnColorSelectedListener() { + @Override + public void onColorSelected(int color) { + setColor(color); + } + }); + colorPickerDialog.show(getFragmentManager(), "colorpicker"); } }); diff --git a/app/src/main/java/eu/faircode/email/FragmentMessages.java b/app/src/main/java/eu/faircode/email/FragmentMessages.java index a9e60f2366..677b8a71ae 100644 --- a/app/src/main/java/eu/faircode/email/FragmentMessages.java +++ b/app/src/main/java/eu/faircode/email/FragmentMessages.java @@ -299,9 +299,8 @@ public class FragmentMessages extends FragmentBase { tvSupport.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction(); - fragmentTransaction.replace(R.id.content_frame, new FragmentPro()).addToBackStack("pro"); - fragmentTransaction.commit(); + LocalBroadcastManager lbm = LocalBroadcastManager.getInstance(getContext()); + lbm.sendBroadcast(new Intent(ActivityView.ACTION_SHOW_PRO)); } }); @@ -1544,56 +1543,56 @@ public class FragmentMessages extends FragmentBase { new DialogDuration.IDialogDuration() { @Override public void onDurationSelected(long duration, long time) { - if (Helper.isPro(getContext())) { - Bundle args = new Bundle(); - args.putLongArray("ids", getSelection()); - args.putLong("wakeup", duration == 0 ? -1 : time); + if (!Helper.isPro(getContext())) { + LocalBroadcastManager lbm = LocalBroadcastManager.getInstance(getContext()); + lbm.sendBroadcast(new Intent(ActivityView.ACTION_SHOW_PRO)); + return; + } - selectionTracker.clearSelection(); + Bundle args = new Bundle(); + args.putLongArray("ids", getSelection()); + args.putLong("wakeup", duration == 0 ? -1 : time); - new SimpleTask() { - @Override - protected Void onExecute(Context context, Bundle args) { - long[] ids = args.getLongArray("ids"); - Long wakeup = args.getLong("wakeup"); - if (wakeup < 0) - wakeup = null; + selectionTracker.clearSelection(); - DB db = DB.getInstance(context); - try { - db.beginTransaction(); + new SimpleTask() { + @Override + protected Void onExecute(Context context, Bundle args) { + long[] ids = args.getLongArray("ids"); + Long wakeup = args.getLong("wakeup"); + if (wakeup < 0) + wakeup = null; - for (long id : ids) { - EntityMessage message = db.message().getMessage(id); - if (message != null) { - List messages = db.message().getMessageByThread( - message.account, message.thread, threading ? null : id, message.folder); - for (EntityMessage threaded : messages) { - db.message().setMessageSnoozed(threaded.id, wakeup); - EntityMessage.snooze(context, threaded.id, wakeup); - EntityOperation.queue(context, threaded, EntityOperation.SEEN, true); - } + DB db = DB.getInstance(context); + try { + db.beginTransaction(); + + for (long id : ids) { + EntityMessage message = db.message().getMessage(id); + if (message != null) { + List messages = db.message().getMessageByThread( + message.account, message.thread, threading ? null : id, message.folder); + for (EntityMessage threaded : messages) { + db.message().setMessageSnoozed(threaded.id, wakeup); + EntityMessage.snooze(context, threaded.id, wakeup); + EntityOperation.queue(context, threaded, EntityOperation.SEEN, true); } } - - db.setTransactionSuccessful(); - } finally { - db.endTransaction(); } - return null; + db.setTransactionSuccessful(); + } finally { + db.endTransaction(); } - @Override - protected void onException(Bundle args, Throwable ex) { - Helper.unexpectedError(getContext(), getViewLifecycleOwner(), ex); - } - }.execute(FragmentMessages.this, args, "messages:snooze"); - } else { - FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction(); - fragmentTransaction.replace(R.id.content_frame, new FragmentPro()).addToBackStack("pro"); - fragmentTransaction.commit(); - } + return null; + } + + @Override + protected void onException(Bundle args, Throwable ex) { + Helper.unexpectedError(getContext(), getViewLifecycleOwner(), ex); + } + }.execute(FragmentMessages.this, args, "messages:snooze"); } @Override @@ -1649,9 +1648,8 @@ public class FragmentMessages extends FragmentBase { private void onActionFlagColorSelection() { if (!Helper.isPro(getContext())) { - FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction(); - fragmentTransaction.replace(R.id.content_frame, new FragmentPro()).addToBackStack("pro"); - fragmentTransaction.commit(); + LocalBroadcastManager lbm = LocalBroadcastManager.getInstance(getContext()); + lbm.sendBroadcast(new Intent(ActivityView.ACTION_SHOW_PRO)); return; } @@ -3258,29 +3256,26 @@ public class FragmentMessages extends FragmentBase { static void search( final Context context, final LifecycleOwner owner, final FragmentManager manager, long folder, boolean server, String query) { - if (Helper.isPro(context)) { - if (owner.getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.RESUMED)) - manager.popBackStack("search", FragmentManager.POP_BACK_STACK_INCLUSIVE); - - Bundle args = new Bundle(); - args.putLong("folder", folder); - args.putBoolean("server", server); - args.putString("query", query); - - FragmentMessages fragment = new FragmentMessages(); - fragment.setArguments(args); - - FragmentTransaction fragmentTransaction = manager.beginTransaction(); - fragmentTransaction.replace(R.id.content_frame, fragment).addToBackStack("search"); - fragmentTransaction.commit(); - } else { - if (owner.getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.RESUMED)) - manager.popBackStack("pro", FragmentManager.POP_BACK_STACK_INCLUSIVE); - - FragmentTransaction fragmentTransaction = manager.beginTransaction(); - fragmentTransaction.replace(R.id.content_frame, new FragmentPro()).addToBackStack("pro"); - fragmentTransaction.commit(); + if (!Helper.isPro(context)) { + LocalBroadcastManager lbm = LocalBroadcastManager.getInstance(context); + lbm.sendBroadcast(new Intent(ActivityView.ACTION_SHOW_PRO)); + return; } + + if (owner.getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.RESUMED)) + manager.popBackStack("search", FragmentManager.POP_BACK_STACK_INCLUSIVE); + + Bundle args = new Bundle(); + args.putLong("folder", folder); + args.putBoolean("server", server); + args.putString("query", query); + + FragmentMessages fragment = new FragmentMessages(); + fragment.setArguments(args); + + FragmentTransaction fragmentTransaction = manager.beginTransaction(); + fragmentTransaction.replace(R.id.content_frame, fragment).addToBackStack("search"); + fragmentTransaction.commit(); } private class MoreResult { diff --git a/app/src/main/java/eu/faircode/email/FragmentRule.java b/app/src/main/java/eu/faircode/email/FragmentRule.java index 908c6b9578..a7277e3771 100644 --- a/app/src/main/java/eu/faircode/email/FragmentRule.java +++ b/app/src/main/java/eu/faircode/email/FragmentRule.java @@ -48,7 +48,7 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.constraintlayout.widget.ConstraintLayout; import androidx.constraintlayout.widget.Group; -import androidx.fragment.app.FragmentTransaction; +import androidx.localbroadcastmanager.content.LocalBroadcastManager; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -666,9 +666,8 @@ public class FragmentRule extends FragmentBase { private void onActionSave() { if (!Helper.isPro(getContext())) { - FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction(); - fragmentTransaction.replace(R.id.content_frame, new FragmentPro()).addToBackStack("pro"); - fragmentTransaction.commit(); + LocalBroadcastManager lbm = LocalBroadcastManager.getInstance(getContext()); + lbm.sendBroadcast(new Intent(ActivityView.ACTION_SHOW_PRO)); return; }