Simplify result transfer

pull/194/merge
M66B 3 years ago
parent e78602db93
commit d79b578222

@ -73,13 +73,10 @@ public class FragmentBase extends Fragment {
private CharSequence subtitle = " "; private CharSequence subtitle = " ";
private boolean finish = false; private boolean finish = false;
private boolean finished = false; private boolean finished = false;
private String requestKey = null;
private int scrollToResid = 0; private int scrollToResid = 0;
private int scrollToOffset = 0; private int scrollToOffset = 0;
private static int requestSequence = 0;
private static final int REQUEST_ATTACHMENT = 51; private static final int REQUEST_ATTACHMENT = 51;
private static final int REQUEST_ATTACHMENTS = 52; private static final int REQUEST_ATTACHMENTS = 52;
private static final int REQUEST_RECOVERABLE_PERMISSION = 53; private static final int REQUEST_RECOVERABLE_PERMISSION = 53;
@ -201,7 +198,6 @@ public class FragmentBase extends Fragment {
int before = Helper.getSize(outState); int before = Helper.getSize(outState);
outState.putCharSequence("fair:title", title); outState.putCharSequence("fair:title", title);
outState.putCharSequence("fair:subtitle", subtitle); outState.putCharSequence("fair:subtitle", subtitle);
outState.putString("fair:requestKey", requestKey);
super.onSaveInstanceState(outState); super.onSaveInstanceState(outState);
int after = Helper.getSize(outState); int after = Helper.getSize(outState);
Log.d("Saved instance " + this + " size=" + before + "/" + after); Log.d("Saved instance " + this + " size=" + before + "/" + after);
@ -222,9 +218,7 @@ public class FragmentBase extends Fragment {
} }
public String getRequestKey() { public String getRequestKey() {
if (requestKey == null) return getClass().getName() + ":result";
requestKey = getClass().getName() + "_" + (++requestSequence);
return requestKey;
} }
@Override @Override
@ -239,11 +233,13 @@ public class FragmentBase extends Fragment {
} else { } else {
title = savedInstanceState.getCharSequence("fair:title"); title = savedInstanceState.getCharSequence("fair:title");
subtitle = savedInstanceState.getCharSequence("fair:subtitle"); subtitle = savedInstanceState.getCharSequence("fair:subtitle");
requestKey = savedInstanceState.getString("fair:requestKey");
} }
// https://developer.android.com/training/basics/fragments/pass-data-between // 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 @Override
public void onFragmentResult(@NonNull String requestKey, @NonNull Bundle result) { public void onFragmentResult(@NonNull String requestKey, @NonNull Bundle result) {
try { try {
@ -251,11 +247,15 @@ public class FragmentBase extends Fragment {
int requestCode = result.getInt("requestCode"); int requestCode = result.getInt("requestCode");
int resultCode = result.getInt("resultCode"); int resultCode = result.getInt("resultCode");
EntityLog.log(getContext(), "Received key=" + requestKey +
" request=" + requestCode +
" result=" + resultCode);
Intent data = new Intent(); Intent data = new Intent();
data.putExtra("args", result); data.putExtra("args", result);
onActivityResult(requestCode, resultCode, data); onActivityResult(requestCode, resultCode, data);
} catch (Throwable ex) { } catch (Throwable ex) {
Log.w(ex); Log.e(ex);
/* /*
android.os.BadParcelableException: ClassNotFoundException when unmarshalling: eu.faircode.email.FragmentMessages$MessageTarget android.os.BadParcelableException: ClassNotFoundException when unmarshalling: eu.faircode.email.FragmentMessages$MessageTarget
at android.os.Parcel.readParcelableCreator(Parcel.java:2839) at android.os.Parcel.readParcelableCreator(Parcel.java:2839)

@ -40,16 +40,11 @@ public class FragmentDialogBase extends DialogFragment {
private boolean once = false; private boolean once = false;
private LifecycleOwner owner; private LifecycleOwner owner;
private LifecycleRegistry registry; private LifecycleRegistry registry;
private String requestKey = null;
private String targetRequestKey; private String targetRequestKey;
private int targetRequestCode; private int targetRequestCode;
private static int requestSequence = 0;
public String getRequestKey() { public String getRequestKey() {
if (requestKey == null) return getClass().getName() + ":result";
requestKey = getClass().getName() + "_" + (++requestSequence);
return requestKey;
} }
@Override @Override
@ -67,12 +62,14 @@ public class FragmentDialogBase extends DialogFragment {
registry.setCurrentState(Lifecycle.State.CREATED); registry.setCurrentState(Lifecycle.State.CREATED);
if (savedInstanceState != null) { if (savedInstanceState != null) {
requestKey = savedInstanceState.getString("fair:request");
targetRequestKey = savedInstanceState.getString("fair:key"); targetRequestKey = savedInstanceState.getString("fair:key");
targetRequestCode = savedInstanceState.getInt("fair:code"); 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 @Override
public void onFragmentResult(@NonNull String requestKey, @NonNull Bundle result) { public void onFragmentResult(@NonNull String requestKey, @NonNull Bundle result) {
try { try {
@ -84,7 +81,7 @@ public class FragmentDialogBase extends DialogFragment {
data.putExtra("args", result); data.putExtra("args", result);
onActivityResult(requestCode, resultCode, data); onActivityResult(requestCode, resultCode, data);
} catch (Throwable ex) { } catch (Throwable ex) {
Log.w(ex); Log.e(ex);
} }
} }
}); });
@ -94,7 +91,6 @@ public class FragmentDialogBase extends DialogFragment {
@Override @Override
public void onSaveInstanceState(@NonNull Bundle outState) { public void onSaveInstanceState(@NonNull Bundle outState) {
outState.putString("fair:request", requestKey);
outState.putString("fair:key", targetRequestKey); outState.putString("fair:key", targetRequestKey);
outState.putInt("fair:code", targetRequestCode); outState.putInt("fair:code", targetRequestCode);
super.onSaveInstanceState(outState); super.onSaveInstanceState(outState);
@ -182,14 +178,20 @@ public class FragmentDialogBase extends DialogFragment {
Log.e("setTargetFragment=" + fragment.getClass().getName()); Log.e("setTargetFragment=" + fragment.getClass().getName());
throw new IllegalArgumentException(); throw new IllegalArgumentException();
} }
once = false;
targetRequestCode = requestCode; targetRequestCode = requestCode;
Log.i("Set target " + this + " " + fragment + " request=" + requestCode);
} }
protected void sendResult(int resultCode) { protected void sendResult(int resultCode) {
EntityLog.log(getContext(), "Sending key=" + targetRequestKey +
" request=" + targetRequestCode +
" result=" + resultCode +
" once=" + once);
if (!once) { if (!once) {
once = true; once = true;
Log.i("Dialog key=" + targetRequestKey + " result=" + resultCode);
if (targetRequestKey != null) { if (targetRequestKey != null) {
Bundle args = getArguments(); Bundle args = getArguments();
if (args == null) // onDismiss if (args == null) // onDismiss

Loading…
Cancel
Save