mirror of
https://codeberg.org/comaps/comaps
synced 2025-12-19 13:03:36 +00:00
[android][sdk] Fix StackedButtonDialogFragment usage in sdk
Signed-off-by: Andrei Shkrob <github@shkrob.dev>
This commit is contained in:
committed by
Konstantin Pastbin
parent
c6cd23fb24
commit
886d569895
@@ -11,14 +11,17 @@ import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.core.view.ViewCompat;
|
||||
import androidx.core.view.WindowInsetsCompat;
|
||||
import androidx.fragment.app.FragmentManager;
|
||||
import app.organicmaps.R;
|
||||
import app.organicmaps.base.BaseMwmToolbarFragment;
|
||||
import app.organicmaps.sdk.editor.OsmOAuth;
|
||||
import app.organicmaps.sdk.util.NetworkPolicy;
|
||||
import app.organicmaps.sdk.util.concurrency.ThreadPool;
|
||||
import app.organicmaps.sdk.util.concurrency.UiThread;
|
||||
import app.organicmaps.util.UiUtils;
|
||||
import app.organicmaps.util.Utils;
|
||||
import app.organicmaps.util.WindowInsetUtils;
|
||||
import app.organicmaps.widget.StackedButtonDialogFragment;
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
|
||||
import com.google.android.material.imageview.ShapeableImageView;
|
||||
import com.google.android.material.textview.MaterialTextView;
|
||||
@@ -26,6 +29,24 @@ import java.text.NumberFormat;
|
||||
|
||||
public class ProfileFragment extends BaseMwmToolbarFragment
|
||||
{
|
||||
@NonNull
|
||||
private static final NetworkPolicy.DialogPresenter mDialogPresenter = new NetworkPolicy.DialogPresenter() {
|
||||
@Override
|
||||
public void showDialogIfNeeded(@NonNull FragmentManager fragmentManager,
|
||||
@NonNull NetworkPolicy.NetworkPolicyListener listener, @NonNull NetworkPolicy policy,
|
||||
boolean isToday)
|
||||
{
|
||||
StackedButtonDialogFragment.showDialogIfNeeded(fragmentManager, listener, policy, isToday);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void showDialog(@NonNull FragmentManager fragmentManager,
|
||||
@NonNull NetworkPolicy.NetworkPolicyListener listener)
|
||||
{
|
||||
StackedButtonDialogFragment.showDialog(fragmentManager, listener);
|
||||
}
|
||||
};
|
||||
|
||||
private View mUserInfoBlock;
|
||||
private MaterialTextView mEditsSent;
|
||||
private MaterialTextView mProfileName;
|
||||
@@ -84,7 +105,7 @@ public class ProfileFragment extends BaseMwmToolbarFragment
|
||||
UiUtils.show(mProfileInfoLoading);
|
||||
UiUtils.hide(mUserInfoBlock);
|
||||
}
|
||||
final int profileEditCount = OsmOAuth.getOsmChangesetsCount(getParentFragmentManager());
|
||||
final int profileEditCount = OsmOAuth.getOsmChangesetsCount(mDialogPresenter, getParentFragmentManager());
|
||||
final String profileUsername = OsmOAuth.getUsername();
|
||||
final Bitmap profilePicture = OsmOAuth.getProfilePicture();
|
||||
|
||||
|
||||
@@ -130,10 +130,11 @@ public final class OsmOAuth
|
||||
private static native int nativeGetOsmChangesetsCount(String oauthToken);
|
||||
|
||||
@WorkerThread
|
||||
public static int getOsmChangesetsCount(@NonNull FragmentManager fm)
|
||||
public static int getOsmChangesetsCount(@NonNull NetworkPolicy.DialogPresenter dialogPresenter,
|
||||
@NonNull FragmentManager fm)
|
||||
{
|
||||
final int[] editsCount = {-1};
|
||||
NetworkPolicy.checkNetworkPolicy(fm, policy -> {
|
||||
NetworkPolicy.checkNetworkPolicy(dialogPresenter, fm, policy -> {
|
||||
if (!policy.canUseNetwork())
|
||||
return;
|
||||
|
||||
|
||||
@@ -3,7 +3,6 @@ package app.organicmaps.sdk.util;
|
||||
import androidx.annotation.Keep;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.fragment.app.FragmentManager;
|
||||
import app.organicmaps.widget.StackedButtonDialogFragment;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
@Keep
|
||||
@@ -15,14 +14,14 @@ public final class NetworkPolicy
|
||||
|
||||
ALWAYS() {
|
||||
@Override
|
||||
public void check(@NonNull FragmentManager fragmentManager, @NonNull NetworkPolicyListener listener,
|
||||
boolean isDialogAllowed)
|
||||
public void check(@NonNull DialogPresenter dialogPresenter, @NonNull FragmentManager fragmentManager,
|
||||
@NonNull NetworkPolicyListener listener, boolean isDialogAllowed)
|
||||
{
|
||||
boolean nowInRoaming = ConnectionState.INSTANCE.isInRoaming();
|
||||
boolean acceptedInRoaming = Config.getMobileDataRoaming();
|
||||
|
||||
if (nowInRoaming && !acceptedInRoaming)
|
||||
showDialog(fragmentManager, listener);
|
||||
dialogPresenter.showDialog(fragmentManager, listener);
|
||||
else
|
||||
listener.onResult(new NetworkPolicy(true));
|
||||
}
|
||||
@@ -30,11 +29,11 @@ public final class NetworkPolicy
|
||||
|
||||
NEVER() {
|
||||
@Override
|
||||
public void check(@NonNull FragmentManager fragmentManager, @NonNull NetworkPolicyListener listener,
|
||||
boolean isDialogAllowed)
|
||||
public void check(@NonNull DialogPresenter dialogPresenter, @NonNull FragmentManager fragmentManager,
|
||||
@NonNull NetworkPolicyListener listener, boolean isDialogAllowed)
|
||||
{
|
||||
if (isDialogAllowed)
|
||||
showDialog(fragmentManager, listener);
|
||||
dialogPresenter.showDialog(fragmentManager, listener);
|
||||
else
|
||||
listener.onResult(new NetworkPolicy(false));
|
||||
}
|
||||
@@ -42,43 +41,42 @@ public final class NetworkPolicy
|
||||
|
||||
NOT_TODAY() {
|
||||
@Override
|
||||
public void check(@NonNull FragmentManager fragmentManager, @NonNull NetworkPolicyListener listener,
|
||||
boolean isDialogAllowed)
|
||||
public void check(@NonNull DialogPresenter dialogPresenter, @NonNull FragmentManager fragmentManager,
|
||||
@NonNull NetworkPolicyListener listener, boolean isDialogAllowed)
|
||||
{
|
||||
if (isDialogAllowed)
|
||||
showDialog(fragmentManager, listener);
|
||||
dialogPresenter.showDialog(fragmentManager, listener);
|
||||
else
|
||||
showDialogIfNeeded(fragmentManager, listener, new NetworkPolicy(false));
|
||||
dialogPresenter.showDialogIfNeeded(fragmentManager, listener, new NetworkPolicy(false), isToday());
|
||||
}
|
||||
},
|
||||
|
||||
TODAY() {
|
||||
@Override
|
||||
public void check(@NonNull FragmentManager fragmentManager, @NonNull NetworkPolicyListener listener,
|
||||
boolean isDialogAllowed)
|
||||
public void check(@NonNull DialogPresenter dialogPresenter, @NonNull FragmentManager fragmentManager,
|
||||
@NonNull NetworkPolicyListener listener, boolean isDialogAllowed)
|
||||
{
|
||||
boolean nowInRoaming = ConnectionState.INSTANCE.isInRoaming();
|
||||
boolean acceptedInRoaming = Config.getMobileDataRoaming();
|
||||
|
||||
if (nowInRoaming && !acceptedInRoaming)
|
||||
showDialog(fragmentManager, listener);
|
||||
dialogPresenter.showDialog(fragmentManager, listener);
|
||||
else
|
||||
showDialogIfNeeded(fragmentManager, listener, new NetworkPolicy(true));
|
||||
dialogPresenter.showDialogIfNeeded(fragmentManager, listener, new NetworkPolicy(true), isToday());
|
||||
}
|
||||
};
|
||||
|
||||
public void check(@NonNull FragmentManager fragmentManager, @NonNull final NetworkPolicyListener listener,
|
||||
boolean isDialogAllowed)
|
||||
public void check(@NonNull DialogPresenter dialogPresenter, @NonNull FragmentManager fragmentManager,
|
||||
@NonNull final NetworkPolicyListener listener, boolean isDialogAllowed)
|
||||
{
|
||||
showDialog(fragmentManager, listener);
|
||||
dialogPresenter.showDialog(fragmentManager, listener);
|
||||
}
|
||||
}
|
||||
|
||||
public static final int NONE = -1;
|
||||
|
||||
private static final String TAG_NETWORK_POLICY = "network_policy";
|
||||
|
||||
public static void checkNetworkPolicy(@NonNull FragmentManager fragmentManager,
|
||||
public static void checkNetworkPolicy(@NonNull DialogPresenter dialogPresenter,
|
||||
@NonNull FragmentManager fragmentManager,
|
||||
@NonNull final NetworkPolicyListener listener, boolean isDialogAllowed)
|
||||
{
|
||||
if (ConnectionState.INSTANCE.isWifiConnected())
|
||||
@@ -94,13 +92,14 @@ public final class NetworkPolicy
|
||||
}
|
||||
|
||||
Type type = Config.getUseMobileDataSettings();
|
||||
type.check(fragmentManager, listener, isDialogAllowed);
|
||||
type.check(dialogPresenter, fragmentManager, listener, isDialogAllowed);
|
||||
}
|
||||
|
||||
public static void checkNetworkPolicy(@NonNull FragmentManager fragmentManager,
|
||||
public static void checkNetworkPolicy(@NonNull DialogPresenter dialogPresenter,
|
||||
@NonNull FragmentManager fragmentManager,
|
||||
@NonNull final NetworkPolicyListener listener)
|
||||
{
|
||||
checkNetworkPolicy(fragmentManager, listener, false);
|
||||
checkNetworkPolicy(dialogPresenter, fragmentManager, listener, false);
|
||||
}
|
||||
|
||||
// Called from JNI.
|
||||
@@ -129,37 +128,9 @@ public final class NetworkPolicy
|
||||
return TimeUnit.MILLISECONDS.toDays(System.currentTimeMillis() - timestamp) < 1;
|
||||
}
|
||||
|
||||
private static void showDialogIfNeeded(@NonNull FragmentManager fragmentManager,
|
||||
@NonNull NetworkPolicyListener listener, @NonNull NetworkPolicy policy)
|
||||
{
|
||||
if (isToday())
|
||||
{
|
||||
listener.onResult(policy);
|
||||
return;
|
||||
}
|
||||
showDialog(fragmentManager, listener);
|
||||
}
|
||||
|
||||
private static void showDialog(@NonNull FragmentManager fragmentManager, @NonNull NetworkPolicyListener listener)
|
||||
{
|
||||
StackedButtonDialogFragment dialog =
|
||||
(StackedButtonDialogFragment) fragmentManager.findFragmentByTag(TAG_NETWORK_POLICY);
|
||||
if (dialog != null)
|
||||
dialog.dismiss();
|
||||
|
||||
dialog = new StackedButtonDialogFragment();
|
||||
dialog.setListener(listener);
|
||||
dialog.show(fragmentManager, TAG_NETWORK_POLICY);
|
||||
}
|
||||
|
||||
public static NetworkPolicy newInstance(boolean canUse)
|
||||
{
|
||||
return new NetworkPolicy(canUse);
|
||||
}
|
||||
|
||||
private final boolean mCanUseNetwork;
|
||||
|
||||
private NetworkPolicy(boolean canUse)
|
||||
public NetworkPolicy(boolean canUse)
|
||||
{
|
||||
mCanUseNetwork = canUse;
|
||||
}
|
||||
@@ -176,4 +147,13 @@ public final class NetworkPolicy
|
||||
{
|
||||
void onResult(@NonNull NetworkPolicy policy);
|
||||
}
|
||||
|
||||
public interface DialogPresenter
|
||||
{
|
||||
void showDialogIfNeeded(@NonNull FragmentManager fragmentManager,
|
||||
@NonNull NetworkPolicy.NetworkPolicyListener listener, @NonNull NetworkPolicy policy,
|
||||
boolean isToday);
|
||||
|
||||
void showDialog(@NonNull FragmentManager fragmentManager, @NonNull NetworkPolicy.NetworkPolicyListener listener);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,6 +13,8 @@ import app.organicmaps.sdk.util.NetworkPolicy;
|
||||
|
||||
public class StackedButtonDialogFragment extends DialogFragment
|
||||
{
|
||||
private static final String TAG_NETWORK_POLICY = "network_policy";
|
||||
|
||||
@Nullable
|
||||
private NetworkPolicy.NetworkPolicyListener mListener;
|
||||
|
||||
@@ -43,7 +45,7 @@ public class StackedButtonDialogFragment extends DialogFragment
|
||||
{
|
||||
Config.setUseMobileDataSettings(type);
|
||||
if (mListener != null)
|
||||
mListener.onResult(NetworkPolicy.newInstance(canUse));
|
||||
mListener.onResult(new NetworkPolicy(canUse));
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -58,4 +60,29 @@ public class StackedButtonDialogFragment extends DialogFragment
|
||||
{
|
||||
mListener = listener;
|
||||
}
|
||||
|
||||
public static void showDialogIfNeeded(@NonNull FragmentManager fragmentManager,
|
||||
@NonNull NetworkPolicy.NetworkPolicyListener listener,
|
||||
@NonNull NetworkPolicy policy, boolean isToday)
|
||||
{
|
||||
if (isToday)
|
||||
{
|
||||
listener.onResult(policy);
|
||||
return;
|
||||
}
|
||||
showDialog(fragmentManager, listener);
|
||||
}
|
||||
|
||||
public static void showDialog(@NonNull FragmentManager fragmentManager,
|
||||
@NonNull NetworkPolicy.NetworkPolicyListener listener)
|
||||
{
|
||||
StackedButtonDialogFragment dialog =
|
||||
(StackedButtonDialogFragment) fragmentManager.findFragmentByTag(TAG_NETWORK_POLICY);
|
||||
if (dialog != null)
|
||||
dialog.dismiss();
|
||||
|
||||
dialog = new StackedButtonDialogFragment();
|
||||
dialog.setListener(listener);
|
||||
dialog.show(fragmentManager, TAG_NETWORK_POLICY);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user