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 83c68d6df..6dc138a0f 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 @@ -1,16 +1,12 @@ package fr.free.nrw.commons.auth; -import android.Manifest; import android.accounts.Account; import android.accounts.AccountManager; import android.accounts.AccountManagerFuture; import android.accounts.AuthenticatorException; import android.accounts.OperationCanceledException; -import android.content.pm.PackageManager; import android.os.AsyncTask; import android.os.Bundle; -import android.support.annotation.Nullable; -import android.support.v4.app.ActivityCompat; import java.io.IOException; @@ -24,24 +20,23 @@ public abstract class AuthenticatedActivity extends BaseAppCompatActivity { CommonsApplication app; private String authCookie; - + public AuthenticatedActivity(String accountType) { - this.accountType = accountType; + this.accountType = accountType; } - + private class GetAuthCookieTask extends AsyncTask { private Account account; private AccountManager accountManager; - public GetAuthCookieTask(Account account, AccountManager accountManager) { this.account = account; this.accountManager = accountManager; } - + @Override protected void onPostExecute(String result) { super.onPostExecute(result); - if (result != null) { + if(result != null) { authCookie = result; onAuthCookieAcquired(result); } else { @@ -65,19 +60,19 @@ public abstract class AuthenticatedActivity extends BaseAppCompatActivity { } } } - + private class AddAccountTask extends AsyncTask { private AccountManager accountManager; - public AddAccountTask(AccountManager accountManager) { this.accountManager = accountManager; } - + @Override protected void onPostExecute(String result) { super.onPostExecute(result); - if (result != null) { - Account curAccount = getCurrentAccount(); + if(result != null) { + Account[] allAccounts =accountManager.getAccountsByType(accountType); + Account curAccount = allAccounts[0]; GetAuthCookieTask getCookieTask = new GetAuthCookieTask(curAccount, accountManager); getCookieTask.execute(); } else { @@ -85,18 +80,6 @@ public abstract class AuthenticatedActivity extends BaseAppCompatActivity { } } - @Nullable - private Account getCurrentAccount() { - if (ActivityCompat.checkSelfPermission(AuthenticatedActivity.this, Manifest.permission.GET_ACCOUNTS) != PackageManager.PERMISSION_GRANTED) { - return null; - } - Account[] allAccounts = accountManager.getAccountsByType(accountType); - if (allAccounts == null) { - return null; - } - return allAccounts[0]; - } - @Override protected String doInBackground(Void... params) { AccountManagerFuture resultFuture = accountManager.addAccount(accountType, null, null, null, AuthenticatedActivity.this, null, null); 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 9b76fb627..c66c82910 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 @@ -50,11 +50,11 @@ public class LoginActivity extends AccountAuthenticatorActivity { Button signupButton; EditText usernameEdit; EditText passwordEdit; + ProgressDialog dialog; private class LoginTask extends AsyncTask { Activity context; - ProgressDialog dialog; String username; String password; @@ -69,7 +69,9 @@ public class LoginActivity extends AccountAuthenticatorActivity { .log(); if (result.equals("Success")) { - dialog.dismiss(); + if (dialog != null && dialog.isShowing()) { + dialog.dismiss(); + } Toast successToast = Toast.makeText(context, R.string.login_success, Toast.LENGTH_SHORT); successToast.show(); Account account = new Account(username, WikiAccountAuthenticator.COMMONS_ACCOUNT_TYPE); @@ -219,6 +221,20 @@ public class LoginActivity extends AccountAuthenticatorActivity { } } + + @Override + protected void onDestroy() { + try { + // To prevent leaked window when finish() is called, see http://stackoverflow.com/questions/32065854/activity-has-leaked-window-at-alertdialog-show-method + if (dialog != null && dialog.isShowing()) { + dialog.dismiss(); + } + } catch (Exception e) { + e.printStackTrace(); + } + super.onDestroy(); + } + private void performLogin() { String username = usernameEdit.getText().toString(); // Because Mediawiki is upercase-first-char-then-case-sensitive :)