diff --git a/mastodon/src/main/java/org/joinmastodon/android/OAuthActivity.java b/mastodon/src/main/java/org/joinmastodon/android/OAuthActivity.java index 553074599..f239bf3f0 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/OAuthActivity.java +++ b/mastodon/src/main/java/org/joinmastodon/android/OAuthActivity.java @@ -61,6 +61,9 @@ public class OAuthActivity extends Activity{ @Override public void onSuccess(Token token){ new GetOwnAccount() + // in case the instance (looking at pixelfed) wants to redirect to a + // website, we need to pass a context so we can launch a browser + .setContext(OAuthActivity.this) .setCallback(new Callback<>(){ @Override public void onSuccess(Account account){ diff --git a/mastodon/src/main/java/org/joinmastodon/android/api/MastodonAPIController.java b/mastodon/src/main/java/org/joinmastodon/android/api/MastodonAPIController.java index 32b7cad8d..b941a485f 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/api/MastodonAPIController.java +++ b/mastodon/src/main/java/org/joinmastodon/android/api/MastodonAPIController.java @@ -17,6 +17,7 @@ import org.joinmastodon.android.api.gson.IsoInstantTypeAdapter; import org.joinmastodon.android.api.gson.IsoLocalDateTypeAdapter; import org.joinmastodon.android.api.session.AccountSession; import org.joinmastodon.android.model.Status; +import org.joinmastodon.android.ui.utils.UiUtils; import java.io.BufferedReader; import java.io.IOException; @@ -161,6 +162,11 @@ public class MastodonAPIController{ respObj=gson.fromJson(reader, req.respClass); } }catch(JsonIOException|JsonSyntaxException x){ + if (req.context != null && response.body().contentType().subtype().equals("html")) { + UiUtils.launchWebBrowser(req.context, response.request().url().toString()); + req.cancel(); + return; + } if(BuildConfig.DEBUG) Log.w(TAG, "["+(session==null ? "no-auth" : session.getID())+"] "+response+" error parsing or reading body", x); req.onError(x.getLocalizedMessage(), response.code(), x); diff --git a/mastodon/src/main/java/org/joinmastodon/android/api/MastodonAPIRequest.java b/mastodon/src/main/java/org/joinmastodon/android/api/MastodonAPIRequest.java index f9dd1ee72..b6d624588 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/api/MastodonAPIRequest.java +++ b/mastodon/src/main/java/org/joinmastodon/android/api/MastodonAPIRequest.java @@ -2,6 +2,7 @@ package org.joinmastodon.android.api; import android.app.Activity; import android.app.ProgressDialog; +import android.content.Context; import android.net.Uri; import android.util.Log; import android.util.Pair; @@ -50,6 +51,7 @@ public abstract class MastodonAPIRequest extends APIRequest{ Map headers; private ProgressDialog progressDialog; protected boolean removeUnsupportedItems; + @Nullable Context context; public MastodonAPIRequest(HttpMethod method, String path, Class respClass){ this.path=path; @@ -181,6 +183,16 @@ public abstract class MastodonAPIRequest extends APIRequest{ return this; } + public MastodonAPIRequest setContext(Context context) { + this.context = context; + return this; + } + + @Nullable + public Context getContext() { + return context; + } + @CallSuper public void validateAndPostprocessResponse(T respObj, Response httpResponse) throws IOException{ if(respObj instanceof BaseModel){