diff --git a/app/src/main/java/fr/free/nrw/commons/auth/AuthenticatedActivity.java b/app/src/main/java/fr/free/nrw/commons/auth/AuthenticatedActivity.java index e39528252..19fabf7d2 100644 --- a/app/src/main/java/fr/free/nrw/commons/auth/AuthenticatedActivity.java +++ b/app/src/main/java/fr/free/nrw/commons/auth/AuthenticatedActivity.java @@ -4,8 +4,13 @@ import android.os.Bundle; import javax.inject.Inject; +import fr.free.nrw.commons.R; import fr.free.nrw.commons.mwapi.MediaWikiApi; import fr.free.nrw.commons.theme.NavigationBaseActivity; +import fr.free.nrw.commons.utils.ViewUtil; +import io.reactivex.Observable; +import io.reactivex.android.schedulers.AndroidSchedulers; +import io.reactivex.schedulers.Schedulers; import static fr.free.nrw.commons.auth.AccountUtil.AUTH_COOKIE; @@ -34,6 +39,8 @@ public abstract class AuthenticatedActivity extends NavigationBaseActivity { if (savedInstanceState != null) { authCookie = savedInstanceState.getString(AUTH_COOKIE); } + + showBlockStatus(); } @Override @@ -45,4 +52,16 @@ public abstract class AuthenticatedActivity extends NavigationBaseActivity { protected abstract void onAuthCookieAcquired(String authCookie); protected abstract void onAuthFailure(); + + protected void showBlockStatus() + { + Observable.fromCallable(() -> mediaWikiApi.isUserBlocked()) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .filter(result -> result) + .subscribe(result -> { + ViewUtil.showSnackbar(findViewById(android.R.id.content), R.string.block_notification); + } + ); + } } diff --git a/app/src/main/java/fr/free/nrw/commons/auth/LoginActivity.java b/app/src/main/java/fr/free/nrw/commons/auth/LoginActivity.java index b19d70a4e..339af96d7 100644 --- a/app/src/main/java/fr/free/nrw/commons/auth/LoginActivity.java +++ b/app/src/main/java/fr/free/nrw/commons/auth/LoginActivity.java @@ -162,6 +162,7 @@ public class LoginActivity extends AccountAuthenticatorActivity { if (sessionManager.getCurrentAccount() != null && sessionManager.isUserLoggedIn() && sessionManager.getCachedAuthCookie() != null) { + sessionManager.revalidateAuthToken(); startMainActivity(); } } diff --git a/app/src/main/java/fr/free/nrw/commons/mwapi/ApacheHttpClientMediaWikiApi.java b/app/src/main/java/fr/free/nrw/commons/mwapi/ApacheHttpClientMediaWikiApi.java index e962bdaf3..13eb77e83 100644 --- a/app/src/main/java/fr/free/nrw/commons/mwapi/ApacheHttpClientMediaWikiApi.java +++ b/app/src/main/java/fr/free/nrw/commons/mwapi/ApacheHttpClientMediaWikiApi.java @@ -615,6 +615,26 @@ public class ApacheHttpClientMediaWikiApi implements MediaWikiApi { }); } + @Override + public boolean isUserBlocked() { + boolean userBlocked = false; + try { + ApiResult result = api.action("query") + .param("action", "query") + .param("format", "xml") + .param("meta", "userinfo") + .param("uiprop", "blockinfo") + .get(); + if(result != null) { + userBlocked = !result.getString("/api/query/userinfo/@blockexpiry").isEmpty(); + } + } catch (Exception e) { + e.printStackTrace(); + } + + return userBlocked; + } + private Date parseMWDate(String mwDate) { SimpleDateFormat isoFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'", Locale.ENGLISH); // Assuming MW always gives me UTC try { diff --git a/app/src/main/java/fr/free/nrw/commons/mwapi/MediaWikiApi.java b/app/src/main/java/fr/free/nrw/commons/mwapi/MediaWikiApi.java index c0bd2fd87..6ba1f9158 100644 --- a/app/src/main/java/fr/free/nrw/commons/mwapi/MediaWikiApi.java +++ b/app/src/main/java/fr/free/nrw/commons/mwapi/MediaWikiApi.java @@ -75,6 +75,8 @@ public interface MediaWikiApi { @NonNull Single getUploadCount(String userName); + boolean isUserBlocked(); + interface ProgressListener { void onProgress(long transferred, long total); } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index d3e3902e5..6828af2c3 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -282,6 +282,7 @@ Share App Coordinates were not specified during image selection Error fetching nearby places. + You are blocked from editing commons Set wallpaper Wallpaper set successfully!