diff --git a/app/src/main/java/eu/faircode/email/ActivityView.java b/app/src/main/java/eu/faircode/email/ActivityView.java index 74b29c9741..2310be3f10 100644 --- a/app/src/main/java/eu/faircode/email/ActivityView.java +++ b/app/src/main/java/eu/faircode/email/ActivityView.java @@ -35,6 +35,7 @@ import android.net.NetworkCapabilities; import android.net.NetworkInfo; import android.net.Uri; import android.os.Bundle; +import android.os.Handler; import android.os.ParcelFileDescriptor; import android.preference.PreferenceManager; import android.text.TextUtils; @@ -325,6 +326,8 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB if (savedInstanceState != null) drawerToggle.setDrawerIndicatorEnabled(savedInstanceState.getBoolean("toggle")); + new Handler().post(checkIntent); + checkFirst(); checkCrash(); if (!Helper.isPlayStoreInstall(this)) @@ -334,6 +337,83 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB pgpService.bindToService(); } + private Runnable checkIntent = new Runnable() { + @Override + public void run() { + Intent intent = getIntent(); + String action = intent.getAction(); + Log.i(Helper.TAG, "View intent=" + intent + " action=" + action); + if (action != null) { + intent.setAction(null); + setIntent(intent); + + if ("unified".equals(action)) + getSupportFragmentManager().popBackStack("unified", 0); + + else if ("error".equals(action)) + onDebugInfo(); + + else if (action.startsWith("thread")) { + ViewModelMessages model = ViewModelProviders.of(ActivityView.this).get(ViewModelMessages.class); + model.setMessages(null); + + intent.putExtra("thread", action.split(":", 2)[1]); + onViewThread(intent); + } + } + + if (getIntent().hasExtra(Intent.EXTRA_PROCESS_TEXT)) { + String search = getIntent().getCharSequenceExtra(Intent.EXTRA_PROCESS_TEXT).toString(); + + intent.removeExtra(Intent.EXTRA_PROCESS_TEXT); + setIntent(intent); + + if (Helper.isPro(ActivityView.this)) { + Bundle args = new Bundle(); + args.putString("search", search); + + new SimpleTask() { + @Override + protected Long onLoad(Context context, Bundle args) { + DB db = DB.getInstance(context); + + EntityFolder archive = db.folder().getPrimaryArchive(); + if (archive == null) + throw new IllegalArgumentException(getString(R.string.title_no_primary_archive)); + + db.message().resetSearch(); + + return archive.id; + } + + @Override + protected void onLoaded(Bundle args, Long archive) { + Bundle sargs = new Bundle(); + sargs.putLong("folder", archive); + sargs.putString("search", args.getString("search")); + + FragmentMessages fragment = new FragmentMessages(); + fragment.setArguments(sargs); + + FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); + fragmentTransaction.replace(R.id.content_frame, fragment).addToBackStack("search"); + fragmentTransaction.commit(); + } + + @Override + protected void onException(Bundle args, Throwable ex) { + Helper.unexpectedError(ActivityView.this, ActivityView.this, ex); + } + }.load(ActivityView.this, args); + } else { + FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); + fragmentTransaction.replace(R.id.content_frame, new FragmentPro()).addToBackStack("pro"); + fragmentTransaction.commit(); + } + } + } + }; + @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); @@ -350,6 +430,7 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB protected void onNewIntent(Intent intent) { super.onNewIntent(intent); setIntent(intent); + new Handler().post(checkIntent); } @Override @@ -371,78 +452,6 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB if (!pgpService.isBound()) pgpService.bindToService(); - - Intent intent = getIntent(); - String action = intent.getAction(); - Log.i(Helper.TAG, "View intent=" + intent + " action=" + action); - if (action != null) { - intent.setAction(null); - setIntent(intent); - - if ("unified".equals(action)) - getSupportFragmentManager().popBackStack("unified", 0); - - else if ("error".equals(action)) - onDebugInfo(); - - else if (action.startsWith("thread")) { - ViewModelMessages model = ViewModelProviders.of(this).get(ViewModelMessages.class); - model.setMessages(null); - - intent.putExtra("thread", action.split(":", 2)[1]); - onViewThread(intent); - } - } - - if (getIntent().hasExtra(Intent.EXTRA_PROCESS_TEXT)) { - String search = getIntent().getCharSequenceExtra(Intent.EXTRA_PROCESS_TEXT).toString(); - - intent.removeExtra(Intent.EXTRA_PROCESS_TEXT); - setIntent(intent); - - if (Helper.isPro(this)) { - Bundle args = new Bundle(); - args.putString("search", search); - - new SimpleTask() { - @Override - protected Long onLoad(Context context, Bundle args) { - DB db = DB.getInstance(context); - - EntityFolder archive = db.folder().getPrimaryArchive(); - if (archive == null) - throw new IllegalArgumentException(getString(R.string.title_no_primary_archive)); - - db.message().resetSearch(); - - return archive.id; - } - - @Override - protected void onLoaded(Bundle args, Long archive) { - Bundle sargs = new Bundle(); - sargs.putLong("folder", archive); - sargs.putString("search", args.getString("search")); - - FragmentMessages fragment = new FragmentMessages(); - fragment.setArguments(sargs); - - FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); - fragmentTransaction.replace(R.id.content_frame, fragment).addToBackStack("search"); - fragmentTransaction.commit(); - } - - @Override - protected void onException(Bundle args, Throwable ex) { - Helper.unexpectedError(ActivityView.this, ActivityView.this, ex); - } - }.load(this, args); - } else { - FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); - fragmentTransaction.replace(R.id.content_frame, new FragmentPro()).addToBackStack("pro"); - fragmentTransaction.commit(); - } - } } @Override