From d79b5782222759efe6bc821451b7c9a1dc1c9113 Mon Sep 17 00:00:00 2001 From: M66B Date: Sun, 26 Dec 2021 09:13:33 +0100 Subject: [PATCH] Simplify result transfer --- .../java/eu/faircode/email/FragmentBase.java | 20 +++++++------- .../eu/faircode/email/FragmentDialogBase.java | 26 ++++++++++--------- 2 files changed, 24 insertions(+), 22 deletions(-) diff --git a/app/src/main/java/eu/faircode/email/FragmentBase.java b/app/src/main/java/eu/faircode/email/FragmentBase.java index b52d9e7b66..212eaad1a8 100644 --- a/app/src/main/java/eu/faircode/email/FragmentBase.java +++ b/app/src/main/java/eu/faircode/email/FragmentBase.java @@ -73,13 +73,10 @@ public class FragmentBase extends Fragment { private CharSequence subtitle = " "; private boolean finish = false; private boolean finished = false; - private String requestKey = null; private int scrollToResid = 0; private int scrollToOffset = 0; - private static int requestSequence = 0; - private static final int REQUEST_ATTACHMENT = 51; private static final int REQUEST_ATTACHMENTS = 52; private static final int REQUEST_RECOVERABLE_PERMISSION = 53; @@ -201,7 +198,6 @@ public class FragmentBase extends Fragment { int before = Helper.getSize(outState); outState.putCharSequence("fair:title", title); outState.putCharSequence("fair:subtitle", subtitle); - outState.putString("fair:requestKey", requestKey); super.onSaveInstanceState(outState); int after = Helper.getSize(outState); Log.d("Saved instance " + this + " size=" + before + "/" + after); @@ -222,9 +218,7 @@ public class FragmentBase extends Fragment { } public String getRequestKey() { - if (requestKey == null) - requestKey = getClass().getName() + "_" + (++requestSequence); - return requestKey; + return getClass().getName() + ":result"; } @Override @@ -239,11 +233,13 @@ public class FragmentBase extends Fragment { } else { title = savedInstanceState.getCharSequence("fair:title"); subtitle = savedInstanceState.getCharSequence("fair:subtitle"); - requestKey = savedInstanceState.getString("fair:requestKey"); } // https://developer.android.com/training/basics/fragments/pass-data-between - getParentFragmentManager().setFragmentResultListener(getRequestKey(), this, new FragmentResultListener() { + String requestKey = getRequestKey(); + if (!BuildConfig.PLAY_STORE_RELEASE) + EntityLog.log(getContext(), "Listing key=" + requestKey); + getParentFragmentManager().setFragmentResultListener(requestKey, this, new FragmentResultListener() { @Override public void onFragmentResult(@NonNull String requestKey, @NonNull Bundle result) { try { @@ -251,11 +247,15 @@ public class FragmentBase extends Fragment { int requestCode = result.getInt("requestCode"); int resultCode = result.getInt("resultCode"); + EntityLog.log(getContext(), "Received key=" + requestKey + + " request=" + requestCode + + " result=" + resultCode); + Intent data = new Intent(); data.putExtra("args", result); onActivityResult(requestCode, resultCode, data); } catch (Throwable ex) { - Log.w(ex); + Log.e(ex); /* android.os.BadParcelableException: ClassNotFoundException when unmarshalling: eu.faircode.email.FragmentMessages$MessageTarget at android.os.Parcel.readParcelableCreator(Parcel.java:2839) diff --git a/app/src/main/java/eu/faircode/email/FragmentDialogBase.java b/app/src/main/java/eu/faircode/email/FragmentDialogBase.java index 6ae5a0e735..f15df77b70 100644 --- a/app/src/main/java/eu/faircode/email/FragmentDialogBase.java +++ b/app/src/main/java/eu/faircode/email/FragmentDialogBase.java @@ -40,16 +40,11 @@ public class FragmentDialogBase extends DialogFragment { private boolean once = false; private LifecycleOwner owner; private LifecycleRegistry registry; - private String requestKey = null; private String targetRequestKey; private int targetRequestCode; - private static int requestSequence = 0; - public String getRequestKey() { - if (requestKey == null) - requestKey = getClass().getName() + "_" + (++requestSequence); - return requestKey; + return getClass().getName() + ":result"; } @Override @@ -67,12 +62,14 @@ public class FragmentDialogBase extends DialogFragment { registry.setCurrentState(Lifecycle.State.CREATED); if (savedInstanceState != null) { - requestKey = savedInstanceState.getString("fair:request"); targetRequestKey = savedInstanceState.getString("fair:key"); targetRequestCode = savedInstanceState.getInt("fair:code"); } - getParentFragmentManager().setFragmentResultListener(getRequestKey(), this, new FragmentResultListener() { + String requestKey = getRequestKey(); + if (!BuildConfig.PLAY_STORE_RELEASE) + EntityLog.log(getContext(), "Listing key=" + requestKey); + getParentFragmentManager().setFragmentResultListener(requestKey, this, new FragmentResultListener() { @Override public void onFragmentResult(@NonNull String requestKey, @NonNull Bundle result) { try { @@ -84,7 +81,7 @@ public class FragmentDialogBase extends DialogFragment { data.putExtra("args", result); onActivityResult(requestCode, resultCode, data); } catch (Throwable ex) { - Log.w(ex); + Log.e(ex); } } }); @@ -94,7 +91,6 @@ public class FragmentDialogBase extends DialogFragment { @Override public void onSaveInstanceState(@NonNull Bundle outState) { - outState.putString("fair:request", requestKey); outState.putString("fair:key", targetRequestKey); outState.putInt("fair:code", targetRequestCode); super.onSaveInstanceState(outState); @@ -182,14 +178,20 @@ public class FragmentDialogBase extends DialogFragment { Log.e("setTargetFragment=" + fragment.getClass().getName()); throw new IllegalArgumentException(); } + + once = false; targetRequestCode = requestCode; - Log.i("Set target " + this + " " + fragment + " request=" + requestCode); } protected void sendResult(int resultCode) { + EntityLog.log(getContext(), "Sending key=" + targetRequestKey + + " request=" + targetRequestCode + + " result=" + resultCode + + " once=" + once); + if (!once) { once = true; - Log.i("Dialog key=" + targetRequestKey + " result=" + resultCode); + if (targetRequestKey != null) { Bundle args = getArguments(); if (args == null) // onDismiss