diff --git a/mastodon/build.gradle b/mastodon/build.gradle index 18684e10..3145761a 100644 --- a/mastodon/build.gradle +++ b/mastodon/build.gradle @@ -13,7 +13,7 @@ android { applicationId "org.joinmastodon.android" minSdk 23 targetSdk 33 - versionCode 97 + versionCode 98 versionName "2.5.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } diff --git a/mastodon/src/main/java/org/joinmastodon/android/api/requests/catalog/GetDonationCampaigns.java b/mastodon/src/main/java/org/joinmastodon/android/api/requests/catalog/GetDonationCampaigns.java index 0291d293..ebeda3f7 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/api/requests/catalog/GetDonationCampaigns.java +++ b/mastodon/src/main/java/org/joinmastodon/android/api/requests/catalog/GetDonationCampaigns.java @@ -7,6 +7,7 @@ import org.joinmastodon.android.model.donations.DonationCampaign; public class GetDonationCampaigns extends MastodonAPIRequest{ private final String locale, seed; + private boolean staging; public GetDonationCampaigns(String locale, String seed){ super(HttpMethod.GET, null, DonationCampaign.class); @@ -15,6 +16,10 @@ public class GetDonationCampaigns extends MastodonAPIRequest{ setCacheable(); } + public void setStaging(boolean staging){ + this.staging=staging; + } + @Override public Uri getURL(){ Uri.Builder builder=new Uri.Builder() @@ -24,6 +29,8 @@ public class GetDonationCampaigns extends MastodonAPIRequest{ .appendQueryParameter("platform", "android") .appendQueryParameter("locale", locale) .appendQueryParameter("seed", seed); + if(staging) + builder.appendQueryParameter("environment", "staging"); return builder.build(); } } diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/HomeTimelineFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/HomeTimelineFragment.java index 2310721a..bc19dec6 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/HomeTimelineFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/HomeTimelineFragment.java @@ -5,6 +5,7 @@ import android.animation.AnimatorListenerAdapter; import android.animation.AnimatorSet; import android.animation.ObjectAnimator; import android.app.Activity; +import android.content.Context; import android.content.res.Configuration; import android.os.Bundle; import android.text.SpannableStringBuilder; @@ -32,6 +33,7 @@ import android.widget.Toolbar; import com.squareup.otto.Subscribe; +import org.joinmastodon.android.BuildConfig; import org.joinmastodon.android.E; import org.joinmastodon.android.R; import org.joinmastodon.android.api.MastodonAPIRequest; @@ -110,8 +112,11 @@ public class HomeTimelineFragment extends StatusListFragment implements ToolbarD // TODO how often do we do this request? Maybe cache something somewhere? if(AccountSessionManager.get(accountID).isEligibleForDonations()){ - new GetDonationCampaigns(Locale.getDefault().toLanguageTag().replace('-', '_'), String.valueOf(AccountSessionManager.get(accountID).getDonationSeed())) - .setCallback(new Callback<>(){ + GetDonationCampaigns req=new GetDonationCampaigns(Locale.getDefault().toLanguageTag().replace('-', '_'), String.valueOf(AccountSessionManager.get(accountID).getDonationSeed())); + if(BuildConfig.DEBUG && getActivity().getSharedPreferences("debug", Context.MODE_PRIVATE).getBoolean("donationsStaging", false)){ + req.setStaging(true); + } + req.setCallback(new Callback<>(){ @Override public void onSuccess(DonationCampaign result){ if(result==null) diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/settings/SettingsDebugFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/settings/SettingsDebugFragment.java index 35b9554d..ce6e0add 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/settings/SettingsDebugFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/settings/SettingsDebugFragment.java @@ -1,5 +1,7 @@ package org.joinmastodon.android.fragments.settings; +import android.content.Context; +import android.content.SharedPreferences; import android.os.Bundle; import android.widget.Toast; @@ -9,6 +11,7 @@ import org.joinmastodon.android.api.session.AccountSession; import org.joinmastodon.android.api.session.AccountSessionManager; import org.joinmastodon.android.fragments.HomeFragment; import org.joinmastodon.android.fragments.onboarding.AccountActivationFragment; +import org.joinmastodon.android.model.viewmodel.CheckableListItem; import org.joinmastodon.android.model.viewmodel.ListItem; import org.joinmastodon.android.ui.utils.DiscoverInfoBannerHelper; import org.joinmastodon.android.updater.GithubSelfUpdater; @@ -18,6 +21,8 @@ import java.util.List; import me.grishka.appkit.Nav; public class SettingsDebugFragment extends BaseSettingsFragment{ + private CheckableListItem donationsStagingItem; + @Override public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); @@ -29,7 +34,8 @@ public class SettingsDebugFragment extends BaseSettingsFragment{ resetUpdateItem=new ListItem<>("Reset self-updater", null, this::onResetUpdaterClick), new ListItem<>("Reset search info banners", null, this::onResetDiscoverBannersClick), new ListItem<>("Reset pre-reply sheets", null, this::onResetPreReplySheetsClick), - new ListItem<>("Clear dismissed donation campaigns", null, this::onClearDismissedCampaignsClick) + new ListItem<>("Clear dismissed donation campaigns", null, this::onClearDismissedCampaignsClick), + donationsStagingItem=new CheckableListItem<>("Use staging environment for donations", null, CheckableListItem.Style.SWITCH, getPrefs().getBoolean("donationsStaging", false), this::toggleCheckableItem) )); if(!GithubSelfUpdater.needSelfUpdating()){ resetUpdateItem.isEnabled=selfUpdateItem.isEnabled=false; @@ -40,6 +46,12 @@ public class SettingsDebugFragment extends BaseSettingsFragment{ @Override protected void doLoadData(int offset, int count){} + @Override + public void onStop(){ + super.onStop(); + getPrefs().edit().putBoolean("donationsStaging", donationsStagingItem.checked).apply(); + } + private void onTestEmailConfirmClick(ListItem item){ AccountSession sess=AccountSessionManager.getInstance().getAccount(accountID); sess.activated=false; @@ -81,4 +93,8 @@ public class SettingsDebugFragment extends BaseSettingsFragment{ args.putString("account", accountID); Nav.goClearingStack(getActivity(), HomeFragment.class, args); } + + private SharedPreferences getPrefs(){ + return getActivity().getSharedPreferences("debug", Context.MODE_PRIVATE); + } }