From 16487556dcc02ac0eb3376823d4d5c172bd5cd4a Mon Sep 17 00:00:00 2001 From: Vishan Seru Date: Fri, 25 Aug 2017 11:42:17 +0530 Subject: [PATCH 1/3] Added callback when removing accounts on logout to ensure that post logout screen transition happens only after complete logout procedure is complete. --- .../free/nrw/commons/CommonsApplication.java | 55 ++++++++++++++----- .../commons/theme/NavigationBaseActivity.java | 21 ++++--- 2 files changed, 56 insertions(+), 20 deletions(-) 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 8d6332c6a..c8e7c7fa8 100644 --- a/app/src/main/java/fr/free/nrw/commons/CommonsApplication.java +++ b/app/src/main/java/fr/free/nrw/commons/CommonsApplication.java @@ -2,6 +2,8 @@ package fr.free.nrw.commons; import android.accounts.Account; import android.accounts.AccountManager; +import android.accounts.AccountManagerCallback; +import android.accounts.AccountManagerFuture; import android.accounts.AuthenticatorException; import android.accounts.OperationCanceledException; import android.app.Application; @@ -11,6 +13,7 @@ import android.content.pm.PackageManager; import android.database.sqlite.SQLiteDatabase; import android.preference.PreferenceManager; import android.support.v4.util.LruCache; +import android.util.Log; import com.facebook.drawee.backends.pipeline.Fresco; import com.facebook.stetho.Stetho; @@ -32,6 +35,7 @@ import fr.free.nrw.commons.modifications.ModifierSequence; import fr.free.nrw.commons.mwapi.ApacheHttpClientMediaWikiApi; import fr.free.nrw.commons.mwapi.MediaWikiApi; import fr.free.nrw.commons.nearby.NearbyPlaces; +import fr.free.nrw.commons.theme.NavigationBaseActivity; import fr.free.nrw.commons.utils.FileUtils; import timber.log.Timber; @@ -190,7 +194,7 @@ public class CommonsApplication extends Application { pm.hasSystemFeature(PackageManager.FEATURE_CAMERA_FRONT); } - public void clearApplicationData(Context context) { + public void clearApplicationData(Context context, NavigationBaseActivity.LogoutCompleteListener logoutCompleteListener) { File cacheDirectory = context.getCacheDir(); File applicationDirectory = new File(cacheDirectory.getParent()); if (applicationDirectory.exists()) { @@ -204,19 +208,44 @@ public class CommonsApplication extends Application { AccountManager accountManager = AccountManager.get(this); Account[] allAccounts = accountManager.getAccountsByType(AccountUtil.accountType()); - for (Account allAccount : allAccounts) { - accountManager.removeAccount(allAccount, null, null); - } - //TODO: fix preference manager - PreferenceManager.getDefaultSharedPreferences(getInstance()).edit().clear().commit(); - SharedPreferences preferences = context - .getSharedPreferences("fr.free.nrw.commons", MODE_PRIVATE); - preferences.edit().clear().commit(); - context.getSharedPreferences("prefs", Context.MODE_PRIVATE).edit().clear().commit(); - preferences.edit().putBoolean("firstrun", false).apply(); - updateAllDatabases(); - currentAccount = null; + AccountManagerCallback accountManagerCallback = new AccountManagerCallback() { + int index = 0; + @Override + public void run(AccountManagerFuture accountManagerFuture) { + index++; + + try { + if(accountManagerFuture.getResult()) + { + Timber.d("Account removed successfully."); + } + } + catch (OperationCanceledException | NullPointerException | IOException | AuthenticatorException e) { + e.printStackTrace(); + } + + if(index == allAccounts.length) + { + Timber.d("All accounts have been removed"); + //TODO: fix preference manager + PreferenceManager.getDefaultSharedPreferences(getInstance()).edit().clear().commit(); + SharedPreferences preferences = context + .getSharedPreferences("fr.free.nrw.commons", MODE_PRIVATE); + preferences.edit().clear().commit(); + context.getSharedPreferences("prefs", Context.MODE_PRIVATE).edit().clear().commit(); + preferences.edit().putBoolean("firstrun", false).apply(); + updateAllDatabases(); + currentAccount = null; + + logoutCompleteListener.onLogoutComplete(); + } + } + }; + + for (Account account : allAccounts) { + accountManager.removeAccount(account, accountManagerCallback, null); + } } /** diff --git a/app/src/main/java/fr/free/nrw/commons/theme/NavigationBaseActivity.java b/app/src/main/java/fr/free/nrw/commons/theme/NavigationBaseActivity.java index 6710b6367..41e9a40a9 100644 --- a/app/src/main/java/fr/free/nrw/commons/theme/NavigationBaseActivity.java +++ b/app/src/main/java/fr/free/nrw/commons/theme/NavigationBaseActivity.java @@ -25,6 +25,7 @@ import fr.free.nrw.commons.auth.LoginActivity; import fr.free.nrw.commons.contributions.ContributionsActivity; import fr.free.nrw.commons.nearby.NearbyActivity; import fr.free.nrw.commons.settings.SettingsActivity; +import timber.log.Timber; public class NavigationBaseActivity extends BaseActivity implements NavigationView.OnNavigationItemSelectedListener { @@ -132,13 +133,15 @@ public class NavigationBaseActivity extends BaseActivity .setCancelable(false) .setPositiveButton(R.string.yes, (dialog, which) -> { ((CommonsApplication) getApplicationContext()) - .clearApplicationData(NavigationBaseActivity.this); - Intent nearbyIntent = new Intent( - NavigationBaseActivity.this, LoginActivity.class); - nearbyIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK); - nearbyIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - startActivity(nearbyIntent); - finish(); + .clearApplicationData(NavigationBaseActivity.this, () -> { + Timber.d("Logout complete callback received."); + Intent nearbyIntent = new Intent( + NavigationBaseActivity.this, LoginActivity.class); + nearbyIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK); + nearbyIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + startActivity(nearbyIntent); + finish(); + }); }) .setNegativeButton(R.string.no, (dialog, which) -> dialog.cancel()) .show(); @@ -147,4 +150,8 @@ public class NavigationBaseActivity extends BaseActivity return false; } } + + public interface LogoutCompleteListener { + void onLogoutComplete(); + } } From b094d502d64c2f971bd663a89f38a96cd50ca966 Mon Sep 17 00:00:00 2001 From: Vishan Seru Date: Mon, 28 Aug 2017 12:27:03 +0530 Subject: [PATCH 2/3] Took care of some issues pointed out by codacy in relation to the coding guidelines followed specifically to the changes made in this branch --- .../free/nrw/commons/CommonsApplication.java | 35 ++++++++++++------- .../commons/theme/NavigationBaseActivity.java | 2 +- 2 files changed, 23 insertions(+), 14 deletions(-) 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 c8e7c7fa8..51e139e2b 100644 --- a/app/src/main/java/fr/free/nrw/commons/CommonsApplication.java +++ b/app/src/main/java/fr/free/nrw/commons/CommonsApplication.java @@ -194,7 +194,7 @@ public class CommonsApplication extends Application { pm.hasSystemFeature(PackageManager.FEATURE_CAMERA_FRONT); } - public void clearApplicationData(Context context, NavigationBaseActivity.LogoutCompleteListener logoutCompleteListener) { + public void clearApplicationData(Context context, NavigationBaseActivity.LogoutListener logoutListener) { File cacheDirectory = context.getCacheDir(); File applicationDirectory = new File(cacheDirectory.getParent()); if (applicationDirectory.exists()) { @@ -209,24 +209,33 @@ public class CommonsApplication extends Application { AccountManager accountManager = AccountManager.get(this); Account[] allAccounts = accountManager.getAccountsByType(AccountUtil.accountType()); - AccountManagerCallback accountManagerCallback = new AccountManagerCallback() { - int index = 0; + AccountManagerCallback amCallback = new AccountManagerCallback() { + + private int index = 0; + + void setIndex(int index) { + this.index = index; + } + + int getIndex() { + return index; + } + @Override public void run(AccountManagerFuture accountManagerFuture) { - index++; + setIndex(index++); try { - if(accountManagerFuture.getResult()) - { - Timber.d("Account removed successfully."); + if (accountManagerFuture != null) { + if (accountManagerFuture.getResult()) { + Timber.d("Account removed successfully."); + } } - } - catch (OperationCanceledException | NullPointerException | IOException | AuthenticatorException e) { + } catch (OperationCanceledException | IOException | AuthenticatorException e) { e.printStackTrace(); } - if(index == allAccounts.length) - { + if (getIndex() == allAccounts.length) { Timber.d("All accounts have been removed"); //TODO: fix preference manager PreferenceManager.getDefaultSharedPreferences(getInstance()).edit().clear().commit(); @@ -238,13 +247,13 @@ public class CommonsApplication extends Application { updateAllDatabases(); currentAccount = null; - logoutCompleteListener.onLogoutComplete(); + logoutListener.onLogoutComplete(); } } }; for (Account account : allAccounts) { - accountManager.removeAccount(account, accountManagerCallback, null); + accountManager.removeAccount(account, amCallback, null); } } diff --git a/app/src/main/java/fr/free/nrw/commons/theme/NavigationBaseActivity.java b/app/src/main/java/fr/free/nrw/commons/theme/NavigationBaseActivity.java index 41e9a40a9..8f86f08ab 100644 --- a/app/src/main/java/fr/free/nrw/commons/theme/NavigationBaseActivity.java +++ b/app/src/main/java/fr/free/nrw/commons/theme/NavigationBaseActivity.java @@ -151,7 +151,7 @@ public class NavigationBaseActivity extends BaseActivity } } - public interface LogoutCompleteListener { + public interface LogoutListener { void onLogoutComplete(); } } From 35fdb4350a8c9eba2074b1b4441306f1887768cb Mon Sep 17 00:00:00 2001 From: Vishan Seru Date: Mon, 28 Aug 2017 12:44:19 +0530 Subject: [PATCH 3/3] Fixed small bug when incrementing counter in AccountManagerCallback --- app/src/main/java/fr/free/nrw/commons/CommonsApplication.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 51e139e2b..02506b679 100644 --- a/app/src/main/java/fr/free/nrw/commons/CommonsApplication.java +++ b/app/src/main/java/fr/free/nrw/commons/CommonsApplication.java @@ -223,7 +223,7 @@ public class CommonsApplication extends Application { @Override public void run(AccountManagerFuture accountManagerFuture) { - setIndex(index++); + setIndex(getIndex() + 1); try { if (accountManagerFuture != null) {