Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mapsme/omim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Zatsepin <az@mapswithme.com>2018-05-21 20:21:22 +0300
committeryoksnod <donskdmitry@mail.ru>2018-05-21 21:36:44 +0300
commit254c86de23c16b40ffebcf1068a4b98f808bb612 (patch)
treeb3ceba398bb8b8a823556891c3b178cefb8cd0c7
parentbb08d1a694cb13e6be2f3f86dfd26ecd29d92407 (diff)
[android] Fixed crach in SocialAuthDialogFragment regarding incorrect setting result to target fragment due to issue in fragment managerios-store-826android-gr-826
-rw-r--r--android/src/com/mapswithme/maps/auth/Authorizer.java17
-rw-r--r--android/src/com/mapswithme/maps/auth/BaseMwmAuthorizationFragment.java8
-rw-r--r--android/src/com/mapswithme/maps/auth/Constants.java1
-rw-r--r--android/src/com/mapswithme/maps/auth/PassportAuthDialogFragment.java17
-rw-r--r--android/src/com/mapswithme/maps/auth/SocialAuthDialogFragment.java21
-rw-r--r--android/src/com/mapswithme/maps/bookmarks/BookmarkBackupController.java4
-rw-r--r--android/src/com/mapswithme/maps/bookmarks/BookmarkCategoriesFragment.java17
7 files changed, 49 insertions, 36 deletions
diff --git a/android/src/com/mapswithme/maps/auth/Authorizer.java b/android/src/com/mapswithme/maps/auth/Authorizer.java
index d3191649bc..fb13f51ddd 100644
--- a/android/src/com/mapswithme/maps/auth/Authorizer.java
+++ b/android/src/com/mapswithme/maps/auth/Authorizer.java
@@ -63,16 +63,14 @@ public class Authorizer implements AuthorizationListener
String name = SocialAuthDialogFragment.class.getName();
DialogFragment fragment = (DialogFragment) Fragment.instantiate(mFragment.getContext(), name);
- fragment.setTargetFragment(mFragment, Constants.REQ_CODE_GET_SOCIAL_TOKEN);
- fragment.show(mFragment.getActivity().getSupportFragmentManager(), name);
+ // A communication with the SocialAuthDialogFragment is implemented via getParentFragment method
+ // because of 'setTargetFragment' paradigm doesn't survive the activity configuration change
+ // due to this issue https://issuetracker.google.com/issues/36969568
+ fragment.show(mFragment.getChildFragmentManager(), name);
}
- public final void onActivityResult(int requestCode, int resultCode, @Nullable Intent data)
+ public final void onSocialTokenResult(int resultCode, @Nullable Intent data)
{
-
- if (requestCode != Constants.REQ_CODE_GET_SOCIAL_TOKEN)
- return;
-
if (data == null)
return;
@@ -139,4 +137,9 @@ public class Authorizer implements AuthorizationListener
void onSocialAuthenticationCancel(@Framework.AuthTokenType int type);
void onSocialAuthenticationError(@Framework.AuthTokenType int type, @Nullable String error);
}
+
+ public interface SocialAuthCallback
+ {
+ void onSocialTokenResult(int resultCode, @Nullable Intent data);
+ }
}
diff --git a/android/src/com/mapswithme/maps/auth/BaseMwmAuthorizationFragment.java b/android/src/com/mapswithme/maps/auth/BaseMwmAuthorizationFragment.java
index 1b07e30e71..028a49485e 100644
--- a/android/src/com/mapswithme/maps/auth/BaseMwmAuthorizationFragment.java
+++ b/android/src/com/mapswithme/maps/auth/BaseMwmAuthorizationFragment.java
@@ -3,6 +3,7 @@ package com.mapswithme.maps.auth;
import android.content.Intent;
import android.support.annotation.CallSuper;
import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
import com.mapswithme.maps.base.BaseMwmToolbarFragment;
@@ -12,7 +13,7 @@ import com.mapswithme.maps.base.BaseMwmToolbarFragment;
* to get user authorized for the MapsMe server (Passport).
*/
public abstract class BaseMwmAuthorizationFragment extends BaseMwmToolbarFragment
- implements Authorizer.Callback
+ implements Authorizer.Callback, Authorizer.SocialAuthCallback
{
@NonNull
private final Authorizer mAuthorizer = new Authorizer(this);
@@ -39,9 +40,8 @@ public abstract class BaseMwmAuthorizationFragment extends BaseMwmToolbarFragmen
}
@Override
- public void onActivityResult(int requestCode, int resultCode, Intent data)
+ public void onSocialTokenResult(int resultCode, @Nullable Intent data)
{
- super.onActivityResult(requestCode, resultCode, data);
- mAuthorizer.onActivityResult(requestCode, resultCode, data);
+ mAuthorizer.onSocialTokenResult(resultCode, data);
}
}
diff --git a/android/src/com/mapswithme/maps/auth/Constants.java b/android/src/com/mapswithme/maps/auth/Constants.java
index 3670f3a01e..6c975a3015 100644
--- a/android/src/com/mapswithme/maps/auth/Constants.java
+++ b/android/src/com/mapswithme/maps/auth/Constants.java
@@ -5,7 +5,6 @@ import java.util.List;
class Constants
{
- static final int REQ_CODE_GET_SOCIAL_TOKEN = 101;
static final int REQ_CODE_PHONE_AUTH_RESULT = 102;
static final int REQ_CODE_GOOGLE_SIGN_IN = 103;
static final String EXTRA_SOCIAL_TOKEN = "extra_social_token";
diff --git a/android/src/com/mapswithme/maps/auth/PassportAuthDialogFragment.java b/android/src/com/mapswithme/maps/auth/PassportAuthDialogFragment.java
index 82998f9792..49a417a7b6 100644
--- a/android/src/com/mapswithme/maps/auth/PassportAuthDialogFragment.java
+++ b/android/src/com/mapswithme/maps/auth/PassportAuthDialogFragment.java
@@ -15,6 +15,7 @@ import com.mapswithme.maps.base.BaseMwmDialogFragment;
import com.mapswithme.util.statistics.Statistics;
public class PassportAuthDialogFragment extends BaseMwmDialogFragment
+ implements Authorizer.SocialAuthCallback
{
@NonNull
private final Authorizer mAuthorizer = new Authorizer(this);
@@ -33,15 +34,6 @@ public class PassportAuthDialogFragment extends BaseMwmDialogFragment
}
@Override
- public void onActivityResult(int requestCode, int resultCode, Intent data)
- {
- super.onActivityResult(requestCode, resultCode, data);
-
- mAuthorizer.onActivityResult(requestCode, resultCode, data);
- dismiss();
- }
-
- @Override
@CallSuper
public void onStart()
{
@@ -57,6 +49,13 @@ public class PassportAuthDialogFragment extends BaseMwmDialogFragment
mAuthorizer.detach();
}
+ @Override
+ public void onSocialTokenResult(int resultCode, @Nullable Intent data)
+ {
+ mAuthorizer.onSocialTokenResult(resultCode, data);
+ dismiss();
+ }
+
private class AuthCallback implements Authorizer.Callback
{
@Override
diff --git a/android/src/com/mapswithme/maps/auth/SocialAuthDialogFragment.java b/android/src/com/mapswithme/maps/auth/SocialAuthDialogFragment.java
index 65459f5a1e..d4b7a70d93 100644
--- a/android/src/com/mapswithme/maps/auth/SocialAuthDialogFragment.java
+++ b/android/src/com/mapswithme/maps/auth/SocialAuthDialogFragment.java
@@ -8,7 +8,6 @@ import android.os.Bundle;
import android.support.annotation.IdRes;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
-import android.support.v4.app.Fragment;
import android.text.TextUtils;
import android.text.method.LinkMovementMethod;
import android.view.LayoutInflater;
@@ -83,6 +82,8 @@ public class SocialAuthDialogFragment extends BaseMwmDialogFragment
@SuppressWarnings("NullableProblems")
@NonNull
private CheckBox mPromoCheck;
+ @Nullable
+ private Authorizer.SocialAuthCallback mTargetCallback;
@NonNull
@Override
@@ -97,6 +98,7 @@ public class SocialAuthDialogFragment extends BaseMwmDialogFragment
public void onCreate(@Nullable Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
+ setTargetCallback();
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestIdToken(PrivateVariables.googleWebClientId())
.requestEmail()
@@ -104,6 +106,18 @@ public class SocialAuthDialogFragment extends BaseMwmDialogFragment
mGoogleSignInClient = GoogleSignIn.getClient(getActivity(), gso);
}
+ private void setTargetCallback()
+ {
+ try
+ {
+ mTargetCallback = (Authorizer.SocialAuthCallback) getParentFragment();
+ }
+ catch (ClassCastException e)
+ {
+ throw new ClassCastException("Caller must implement SocialAuthCallback interface!");
+ }
+ }
+
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container,
@@ -170,8 +184,7 @@ public class SocialAuthDialogFragment extends BaseMwmDialogFragment
@Framework.AuthTokenType int type, @Nullable String error,
boolean isCancel)
{
- Fragment caller = getTargetFragment();
- if (caller == null || !caller.isAdded())
+ if (mTargetCallback == null)
return;
Intent data = new Intent();
@@ -182,7 +195,7 @@ public class SocialAuthDialogFragment extends BaseMwmDialogFragment
data.putExtra(Constants.EXTRA_PRIVACY_POLICY_ACCEPTED, mPrivacyPolicyCheck.isChecked());
data.putExtra(Constants.EXTRA_TERMS_OF_USE_ACCEPTED, mTermOfUseCheck.isChecked());
data.putExtra(Constants.EXTRA_PROMO_ACCEPTED, mPromoCheck.isChecked());
- caller.onActivityResult(Constants.REQ_CODE_GET_SOCIAL_TOKEN, resultCode, data);
+ mTargetCallback.onSocialTokenResult(resultCode, data);
}
@Override
diff --git a/android/src/com/mapswithme/maps/bookmarks/BookmarkBackupController.java b/android/src/com/mapswithme/maps/bookmarks/BookmarkBackupController.java
index 2de9d15133..a73f422144 100644
--- a/android/src/com/mapswithme/maps/bookmarks/BookmarkBackupController.java
+++ b/android/src/com/mapswithme/maps/bookmarks/BookmarkBackupController.java
@@ -207,9 +207,9 @@ public class BookmarkBackupController implements Authorizer.Callback,
SharedPropertiesUtils.setBackupWidgetExpanded(mBackupView.getExpanded());
}
- public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data)
+ public void onSocialTokenResult(int resultCode, @Nullable Intent data)
{
- mAuthorizer.onActivityResult(requestCode, resultCode, data);
+ mAuthorizer.onSocialTokenResult(resultCode, data);
}
@Override
diff --git a/android/src/com/mapswithme/maps/bookmarks/BookmarkCategoriesFragment.java b/android/src/com/mapswithme/maps/bookmarks/BookmarkCategoriesFragment.java
index d7a9f3b3e7..6af5f2d0a7 100644
--- a/android/src/com/mapswithme/maps/bookmarks/BookmarkCategoriesFragment.java
+++ b/android/src/com/mapswithme/maps/bookmarks/BookmarkCategoriesFragment.java
@@ -32,7 +32,7 @@ public class BookmarkCategoriesFragment extends BaseMwmRecyclerFragment
BookmarkManager.BookmarksLoadingListener,
BookmarkManager.BookmarksSharingListener,
BookmarkCategoriesAdapter.CategoryListInterface,
- KmlImportController.ImportKmlCallback
+ KmlImportController.ImportKmlCallback, Authorizer.SocialAuthCallback
{
private static final int MAX_CATEGORY_NAME_LENGTH = 60;
private long mSelectedCatId;
@@ -287,14 +287,6 @@ public class BookmarkCategoriesFragment extends BaseMwmRecyclerFragment
}
@Override
- public void onActivityResult(int requestCode, int resultCode, Intent data)
- {
- super.onActivityResult(requestCode, resultCode, data);
- if (mBackupController != null)
- mBackupController.onActivityResult(requestCode, resultCode, data);
- }
-
- @Override
public void onFinishKmlImport()
{
if (getAdapter() != null)
@@ -321,6 +313,13 @@ public class BookmarkCategoriesFragment extends BaseMwmRecyclerFragment
return new CategoryValidator();
}
+ @Override
+ public void onSocialTokenResult(int resultCode, @Nullable Intent data)
+ {
+ if (mBackupController != null)
+ mBackupController.onSocialTokenResult(resultCode, data);
+ }
+
interface CategoryEditor
{
void commit(@NonNull String newName);