[android] Added the network dialogs

This commit is contained in:
Dmitry Donskoy 2019-09-02 12:57:49 +03:00 committed by Aleksandr Zatsepin
parent e639edacb1
commit 38f41c2ced
5 changed files with 84 additions and 7 deletions

View file

@ -18,6 +18,7 @@
android:id="@+id/content_view"
android:layout_height="match_parent"
android:layout_width="match_parent"
android:visibility="gone"
android:fillViewport="true">
<LinearLayout
android:orientation="vertical"

View file

@ -476,7 +476,7 @@ public class AlertDialog extends BaseMwmDialogFragment
}
@NonNull
private ResolveFragmentManagerStrategy getValue()
public ResolveFragmentManagerStrategy getValue()
{
return mStrategy;
}

View file

@ -5,7 +5,7 @@ import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
interface ResolveFragmentManagerStrategy
public interface ResolveFragmentManagerStrategy
{
@NonNull
FragmentManager resolve(@NonNull Fragment baseFragment);

View file

@ -4,6 +4,8 @@ import android.app.Activity;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v7.widget.CardView;
import android.view.LayoutInflater;
import android.view.View;
@ -17,7 +19,10 @@ import com.mapswithme.maps.PrivateVariables;
import com.mapswithme.maps.R;
import com.mapswithme.maps.base.BaseAuthFragment;
import com.mapswithme.maps.bookmarks.data.BookmarkManager;
import com.mapswithme.maps.dialog.AlertDialog;
import com.mapswithme.maps.dialog.AlertDialogCallback;
import com.mapswithme.maps.dialog.ResolveFragmentManagerStrategy;
import com.mapswithme.util.ConnectionState;
import com.mapswithme.util.Utils;
import com.mapswithme.util.log.Logger;
import com.mapswithme.util.log.LoggerFactory;
@ -34,6 +39,8 @@ public class BookmarkSubscriptionFragment extends BaseAuthFragment
private final static String EXTRA_CURRENT_STATE = "extra_current_state";
private final static String EXTRA_PRODUCT_DETAILS = "extra_product_details";
private static final int DEF_ELEVATION = 0;
private static final int REQ_CODE_NO_NETWORK_CONNECTION_DIALOG = 102;
private static final String NO_NETWORK_CONNECTION_DIALOG_TAG = "no_network_connection_dialog_tag";
@SuppressWarnings("NullableProblems")
@NonNull
@ -49,6 +56,10 @@ public class BookmarkSubscriptionFragment extends BaseAuthFragment
private boolean mValidationResult;
private boolean mPingingResult;
@SuppressWarnings("NullableProblems")
@NonNull
private View mContentView;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
@ -61,6 +72,7 @@ public class BookmarkSubscriptionFragment extends BaseAuthFragment
mPingCallback.attach(this);
BookmarkManager.INSTANCE.addCatalogPingListener(mPingCallback);
View root = inflater.inflate(R.layout.bookmark_subscription_fragment, container, false);
mContentView = root.findViewById(R.id.content_view);
CardView annualPriceCard = root.findViewById(R.id.annual_price_card);
CardView monthlyPriceCard = root.findViewById(R.id.monthly_price_card);
AnnualCardClickListener annualCardListener = new AnnualCardClickListener(monthlyPriceCard,
@ -127,7 +139,7 @@ public class BookmarkSubscriptionFragment extends BaseAuthFragment
return;
}
activateState(BookmarkSubscriptionPaymentState.PRODUCT_DETAILS_LOADING);
activateState(BookmarkSubscriptionPaymentState.CHECK_NETWORK_CONNECTION);
}
void queryProductDetails()
@ -215,19 +227,24 @@ public class BookmarkSubscriptionFragment extends BaseAuthFragment
@Override
public void onAlertDialogPositiveClick(int requestCode, int which)
{
// TODO: coming soon.
if (requestCode == REQ_CODE_NO_NETWORK_CONNECTION_DIALOG && ConnectionState.isConnected())
onNetworkCheckPassed();
else if (requestCode == REQ_CODE_NO_NETWORK_CONNECTION_DIALOG)
showNoConnectionDialog();
}
@Override
public void onAlertDialogNegativeClick(int requestCode, int which)
{
// TODO: coming soon.
if (requestCode == REQ_CODE_NO_NETWORK_CONNECTION_DIALOG)
requireActivity().finish();
}
@Override
public void onAlertDialogCancel(int requestCode)
{
// TODO: coming soon.
if (requestCode == REQ_CODE_NO_NETWORK_CONNECTION_DIALOG)
requireActivity().finish();
}
private void handleActivationResult(boolean result)
@ -314,6 +331,39 @@ public class BookmarkSubscriptionFragment extends BaseAuthFragment
LOGGER.w(TAG, "Social authentication error = " + error + ", auth type = " + type);
}
public void onNetworkCheckPassed()
{
mContentView.setVisibility(View.VISIBLE);
activateState(BookmarkSubscriptionPaymentState.PRODUCT_DETAILS_LOADING);
}
public void showNoConnectionDialog()
{
AlertDialog.FragManagerStrategyType fragManagerStrategyType =
AlertDialog.FragManagerStrategyType.ACTIVITY_FRAGMENT_MANAGER;
ResolveFragmentManagerStrategy strategy = fragManagerStrategyType.getValue();
FragmentManager manager = strategy.resolve(this);
Fragment outdatedInstance = manager.findFragmentByTag(NO_NETWORK_CONNECTION_DIALOG_TAG);
if (outdatedInstance != null)
{
manager.beginTransaction().remove(outdatedInstance).commitAllowingStateLoss();
manager.executePendingTransactions();
}
AlertDialog dialog = new AlertDialog.Builder()
.setTitleId(R.string.common_check_internet_connection_dialog_title)
.setMessageId(R.string.common_check_internet_connection_dialog)
.setPositiveBtnId(R.string.try_again)
.setNegativeBtnId(R.string.cancel)
.setFragManagerStrategyType(fragManagerStrategyType)
.setReqCode(REQ_CODE_NO_NETWORK_CONNECTION_DIALOG)
.build();
dialog.setTargetFragment(this, REQ_CODE_NO_NETWORK_CONNECTION_DIALOG);
dialog.show(this, NO_NETWORK_CONNECTION_DIALOG_TAG);
}
private class AnnualCardClickListener implements View.OnClickListener
{
@NonNull

View file

@ -3,6 +3,8 @@ package com.mapswithme.maps.purchase;
import android.support.annotation.NonNull;
import com.mapswithme.maps.R;
import com.mapswithme.util.ConnectionState;
import com.mapswithme.util.NetworkPolicy;
import com.mapswithme.util.UiUtils;
public enum BookmarkSubscriptionPaymentState
@ -82,7 +84,31 @@ public enum BookmarkSubscriptionPaymentState
BookmarkSubscriptionPaymentState.hideButtonProgress(fragment);
fragment.finishPinging();
}
};
},
CHECK_NETWORK_CONNECTION
{
@Override
void activate(@NonNull BookmarkSubscriptionFragment fragment)
{
if (ConnectionState.isConnected())
NetworkPolicy.checkNetworkPolicy(fragment.requireFragmentManager(),
policy -> onNetworkPolicyResult(policy, fragment), true);
else
fragment.showNoConnectionDialog();
}
private void onNetworkPolicyResult(@NonNull NetworkPolicy policy,
@NonNull BookmarkSubscriptionFragment fragment)
{
if (policy.canUseNetwork())
fragment.onNetworkCheckPassed();
else
fragment.requireActivity().finish();
}
}
;
private static void showProgress(@NonNull BookmarkSubscriptionFragment fragment)
{