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