From eb58a847b1a5b0112c075abf4569016335843eab Mon Sep 17 00:00:00 2001 From: addshore Date: Sun, 14 May 2017 13:32:48 +0200 Subject: [PATCH] Create AccountUtil class --- .../free/nrw/commons/CommonsApplication.java | 9 ++- .../fr/free/nrw/commons/auth/AccountUtil.java | 61 +++++++++++++++++++ .../commons/auth/AuthenticatedActivity.java | 4 +- .../fr/free/nrw/commons/auth/LoginTask.java | 28 ++------- .../auth/WikiAccountAuthenticator.java | 6 +- .../contributions/ContributionsActivity.java | 5 -- .../commons/upload/MultipleShareActivity.java | 5 -- .../nrw/commons/upload/ShareActivity.java | 5 -- 8 files changed, 77 insertions(+), 46 deletions(-) create mode 100644 app/src/main/java/fr/free/nrw/commons/auth/AccountUtil.java diff --git a/app/src/main/java/fr/free/nrw/commons/CommonsApplication.java b/app/src/main/java/fr/free/nrw/commons/CommonsApplication.java index 5e45d97df..d830334e4 100644 --- a/app/src/main/java/fr/free/nrw/commons/CommonsApplication.java +++ b/app/src/main/java/fr/free/nrw/commons/CommonsApplication.java @@ -19,6 +19,7 @@ import com.nostra13.universalimageloader.core.ImageLoader; import com.nostra13.universalimageloader.core.ImageLoaderConfiguration; import com.nostra13.universalimageloader.utils.StorageUtils; +import fr.free.nrw.commons.auth.AccountUtil; import org.acra.ACRA; import org.acra.ReportingInteractionMode; import org.acra.annotation.ReportsCrashes; @@ -35,7 +36,6 @@ import org.apache.http.params.CoreProtocolPNames; import java.io.IOException; -import fr.free.nrw.commons.auth.WikiAccountAuthenticator; import fr.free.nrw.commons.caching.CacheController; import timber.log.Timber; @@ -73,6 +73,8 @@ public class CommonsApplication extends Application { public CacheController cacheData; + public static CommonsApplication app; + public static AbstractHttpClient createHttpClient() { BasicHttpParams params = new BasicHttpParams(); SchemeRegistry schemeRegistry = new SchemeRegistry(); @@ -91,6 +93,7 @@ public class CommonsApplication extends Application { @Override public void onCreate() { super.onCreate(); + app = this; Timber.plant(new Timber.DebugTree()); @@ -167,7 +170,7 @@ public class CommonsApplication extends Application { public Account getCurrentAccount() { if(currentAccount == null) { AccountManager accountManager = AccountManager.get(this); - Account[] allAccounts = accountManager.getAccountsByType(WikiAccountAuthenticator.COMMONS_ACCOUNT_TYPE); + Account[] allAccounts = accountManager.getAccountsByType(AccountUtil.accountType()); if(allAccounts.length != 0) { currentAccount = allAccounts[0]; } @@ -183,7 +186,7 @@ public class CommonsApplication extends Application { return false; // This should never happen } - accountManager.invalidateAuthToken(WikiAccountAuthenticator.COMMONS_ACCOUNT_TYPE, api.getAuthCookie()); + accountManager.invalidateAuthToken(AccountUtil.accountType(), api.getAuthCookie()); try { String authCookie = accountManager.blockingGetAuthToken(curAccount, "", false); api.setAuthCookie(authCookie); diff --git a/app/src/main/java/fr/free/nrw/commons/auth/AccountUtil.java b/app/src/main/java/fr/free/nrw/commons/auth/AccountUtil.java new file mode 100644 index 000000000..29f6fcf91 --- /dev/null +++ b/app/src/main/java/fr/free/nrw/commons/auth/AccountUtil.java @@ -0,0 +1,61 @@ +package fr.free.nrw.commons.auth; + +import android.accounts.Account; +import android.accounts.AccountAuthenticatorResponse; +import android.accounts.AccountManager; +import android.content.ContentResolver; +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; +import fr.free.nrw.commons.CommonsApplication; +import fr.free.nrw.commons.contributions.ContributionsContentProvider; +import fr.free.nrw.commons.modifications.ModificationsContentProvider; +import timber.log.Timber; + +public class AccountUtil { + + public static void createAccount(@Nullable AccountAuthenticatorResponse response, + String username, String password) { + + Account account = new Account(username, accountType()); + boolean created = accountManager().addAccountExplicitly(account, password, null); + + Timber.d("account creation " + (created ? "successful" : "failure")); + + if (created) { + if (response != null) { + Bundle bundle = new Bundle(); + bundle.putString(AccountManager.KEY_ACCOUNT_NAME, username); + bundle.putString(AccountManager.KEY_ACCOUNT_TYPE, accountType()); + + + response.onResult(bundle); + } + + } else { + if (response != null) { + response.onError(AccountManager.ERROR_CODE_REMOTE_EXCEPTION, ""); + } + Timber.d("account creation failure"); + } + + // FIXME: If the user turns it off, it shouldn't be auto turned back on + ContentResolver.setSyncAutomatically(account, ContributionsContentProvider.AUTHORITY, true); // Enable sync by default! + ContentResolver.setSyncAutomatically(account, ModificationsContentProvider.AUTHORITY, true); // Enable sync by default! + } + + @NonNull + public static String accountType() { + return "fr.free.nrw.commons"; + } + + private static AccountManager accountManager() { + return AccountManager.get(app()); + } + + @NonNull + private static CommonsApplication app() { + return CommonsApplication.app; + } + +} 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 6925699a1..5fddb0034 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 @@ -20,8 +20,8 @@ public abstract class AuthenticatedActivity extends BaseActivity { private String authCookie; - public AuthenticatedActivity(String accountType) { - this.accountType = accountType; + public AuthenticatedActivity() { + this.accountType = AccountUtil.accountType(); } private class GetAuthCookieTask extends AsyncTask { diff --git a/app/src/main/java/fr/free/nrw/commons/auth/LoginTask.java b/app/src/main/java/fr/free/nrw/commons/auth/LoginTask.java index 63e77878a..4c8487174 100644 --- a/app/src/main/java/fr/free/nrw/commons/auth/LoginTask.java +++ b/app/src/main/java/fr/free/nrw/commons/auth/LoginTask.java @@ -1,10 +1,8 @@ package fr.free.nrw.commons.auth; -import android.accounts.Account; import android.accounts.AccountAuthenticatorResponse; import android.accounts.AccountManager; import android.app.ProgressDialog; -import android.content.ContentResolver; import android.content.Intent; import android.os.AsyncTask; import android.os.Bundle; @@ -12,8 +10,6 @@ import fr.free.nrw.commons.CommonsApplication; import fr.free.nrw.commons.EventLog; import fr.free.nrw.commons.R; import fr.free.nrw.commons.contributions.ContributionsActivity; -import fr.free.nrw.commons.contributions.ContributionsContentProvider; -import fr.free.nrw.commons.modifications.ModificationsContentProvider; import timber.log.Timber; import java.io.IOException; @@ -79,33 +75,21 @@ class LoginTask extends AsyncTask { private void handlePassResult() { loginActivity.showSuccessToastAndDismissDialog(); - Account account = new Account(username, WikiAccountAuthenticator.COMMONS_ACCOUNT_TYPE); - - - boolean accountCreated = AccountManager.get(loginActivity).addAccount(account, password, null); - - - boolean accountCreated = AccountManager.get(loginActivity).addAccountExplicitly(account, password, null); + AccountAuthenticatorResponse response = null; Bundle extras = loginActivity.getIntent().getExtras(); - if (extras != null) { Timber.d("Bundle of extras: %s", extras); - if (accountCreated) { // Pass the new account back to the account manager - AccountAuthenticatorResponse response = extras.getParcelable(AccountManager.KEY_ACCOUNT_AUTHENTICATOR_RESPONSE); + response = extras.getParcelable(AccountManager.KEY_ACCOUNT_AUTHENTICATOR_RESPONSE); + if (response != null) { Bundle authResult = new Bundle(); authResult.putString(AccountManager.KEY_ACCOUNT_NAME, username); - authResult.putString(AccountManager.KEY_ACCOUNT_TYPE, WikiAccountAuthenticator.COMMONS_ACCOUNT_TYPE); - - if (response != null) { - response.onResult(authResult); - } + authResult.putString(AccountManager.KEY_ACCOUNT_TYPE, AccountUtil.accountType()); + response.onResult(authResult); } } - // FIXME: If the user turns it off, it shouldn't be auto turned back on - ContentResolver.setSyncAutomatically(account, ContributionsContentProvider.AUTHORITY, true); // Enable sync by default! - ContentResolver.setSyncAutomatically(account, ModificationsContentProvider.AUTHORITY, true); // Enable sync by default! + AccountUtil.createAccount( response, username, password ); Intent intent = new Intent(loginActivity, ContributionsActivity.class); loginActivity.startActivity(intent); diff --git a/app/src/main/java/fr/free/nrw/commons/auth/WikiAccountAuthenticator.java b/app/src/main/java/fr/free/nrw/commons/auth/WikiAccountAuthenticator.java index 295de0f8c..7233b6be8 100644 --- a/app/src/main/java/fr/free/nrw/commons/auth/WikiAccountAuthenticator.java +++ b/app/src/main/java/fr/free/nrw/commons/auth/WikiAccountAuthenticator.java @@ -18,8 +18,6 @@ import fr.free.nrw.commons.MWApi; public class WikiAccountAuthenticator extends AbstractAccountAuthenticator { - public static final String COMMONS_ACCOUNT_TYPE = "fr.free.nrw.commons"; - private Context context; public WikiAccountAuthenticator(Context context) { @@ -38,7 +36,7 @@ public class WikiAccountAuthenticator extends AbstractAccountAuthenticator { } private boolean supportedAccountType(@Nullable String type) { - return COMMONS_ACCOUNT_TYPE.equals(type); + return AccountUtil.accountType().equals(type); } @Override @@ -104,7 +102,7 @@ public class WikiAccountAuthenticator extends AbstractAccountAuthenticator { if (authCookie != null) { final Bundle result = new Bundle(); result.putString(AccountManager.KEY_ACCOUNT_NAME, account.name); - result.putString(AccountManager.KEY_ACCOUNT_TYPE, COMMONS_ACCOUNT_TYPE); + result.putString(AccountManager.KEY_ACCOUNT_TYPE, AccountUtil.accountType()); result.putString(AccountManager.KEY_AUTHTOKEN, authCookie); return result; } diff --git a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsActivity.java b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsActivity.java index 7900151c7..9210cc015 100644 --- a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsActivity.java +++ b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsActivity.java @@ -30,7 +30,6 @@ import fr.free.nrw.commons.HandlerService; import fr.free.nrw.commons.Media; import fr.free.nrw.commons.R; import fr.free.nrw.commons.auth.AuthenticatedActivity; -import fr.free.nrw.commons.auth.WikiAccountAuthenticator; import fr.free.nrw.commons.media.MediaDetailPagerFragment; import fr.free.nrw.commons.settings.Prefs; import fr.free.nrw.commons.upload.UploadService; @@ -63,10 +62,6 @@ public class ContributionsActivity */ private String CONTRIBUTION_SORT = Contribution.Table.COLUMN_STATE + " DESC, " + Contribution.Table.COLUMN_UPLOADED + " DESC , (" + Contribution.Table.COLUMN_TIMESTAMP + " * " + Contribution.Table.COLUMN_STATE + ")"; - public ContributionsActivity() { - super(WikiAccountAuthenticator.COMMONS_ACCOUNT_TYPE); - } - private ServiceConnection uploadServiceConnection = new ServiceConnection() { @Override public void onServiceConnected(ComponentName componentName, IBinder binder) { diff --git a/app/src/main/java/fr/free/nrw/commons/upload/MultipleShareActivity.java b/app/src/main/java/fr/free/nrw/commons/upload/MultipleShareActivity.java index 27ab99e07..aae338516 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/MultipleShareActivity.java +++ b/app/src/main/java/fr/free/nrw/commons/upload/MultipleShareActivity.java @@ -27,7 +27,6 @@ import fr.free.nrw.commons.EventLog; import fr.free.nrw.commons.Media; import fr.free.nrw.commons.R; import fr.free.nrw.commons.auth.AuthenticatedActivity; -import fr.free.nrw.commons.auth.WikiAccountAuthenticator; import fr.free.nrw.commons.category.CategorizationFragment; import fr.free.nrw.commons.contributions.Contribution; import fr.free.nrw.commons.media.MediaDetailPagerFragment; @@ -53,10 +52,6 @@ public class MultipleShareActivity private UploadController uploadController; - public MultipleShareActivity() { - super(WikiAccountAuthenticator.COMMONS_ACCOUNT_TYPE); - } - @Override public Media getMediaAtPosition(int i) { return photosList.get(i); diff --git a/app/src/main/java/fr/free/nrw/commons/upload/ShareActivity.java b/app/src/main/java/fr/free/nrw/commons/upload/ShareActivity.java index 2ead068ac..8cc9246d2 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/ShareActivity.java +++ b/app/src/main/java/fr/free/nrw/commons/upload/ShareActivity.java @@ -30,7 +30,6 @@ import fr.free.nrw.commons.EventLog; import fr.free.nrw.commons.R; import fr.free.nrw.commons.Utils; import fr.free.nrw.commons.auth.AuthenticatedActivity; -import fr.free.nrw.commons.auth.WikiAccountAuthenticator; import fr.free.nrw.commons.category.CategorizationFragment; import fr.free.nrw.commons.contributions.Contribution; import fr.free.nrw.commons.modifications.CategoryModifier; @@ -77,10 +76,6 @@ public class ShareActivity private String description; private Snackbar snackbar; - public ShareActivity() { - super(WikiAccountAuthenticator.COMMONS_ACCOUNT_TYPE); - } - /** * Called when user taps the submit button */