Merge pull request #856 from Bluesir9/issue_848_logout_contributions_redirect_issue

Added callback when removing accounts on logout
This commit is contained in:
Yusuke Matsubara 2017-09-03 20:34:31 +09:00 committed by GitHub
commit 7c956e803c
2 changed files with 65 additions and 20 deletions

View file

@ -2,6 +2,8 @@ package fr.free.nrw.commons;
import android.accounts.Account; import android.accounts.Account;
import android.accounts.AccountManager; import android.accounts.AccountManager;
import android.accounts.AccountManagerCallback;
import android.accounts.AccountManagerFuture;
import android.accounts.AuthenticatorException; import android.accounts.AuthenticatorException;
import android.accounts.OperationCanceledException; import android.accounts.OperationCanceledException;
import android.app.Application; import android.app.Application;
@ -11,6 +13,7 @@ import android.content.pm.PackageManager;
import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteDatabase;
import android.preference.PreferenceManager; import android.preference.PreferenceManager;
import android.support.v4.util.LruCache; import android.support.v4.util.LruCache;
import android.util.Log;
import com.facebook.drawee.backends.pipeline.Fresco; import com.facebook.drawee.backends.pipeline.Fresco;
import com.facebook.stetho.Stetho; 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.ApacheHttpClientMediaWikiApi;
import fr.free.nrw.commons.mwapi.MediaWikiApi; import fr.free.nrw.commons.mwapi.MediaWikiApi;
import fr.free.nrw.commons.nearby.NearbyPlaces; import fr.free.nrw.commons.nearby.NearbyPlaces;
import fr.free.nrw.commons.theme.NavigationBaseActivity;
import fr.free.nrw.commons.utils.FileUtils; import fr.free.nrw.commons.utils.FileUtils;
import timber.log.Timber; import timber.log.Timber;
@ -186,7 +190,7 @@ public class CommonsApplication extends Application {
pm.hasSystemFeature(PackageManager.FEATURE_CAMERA_FRONT); pm.hasSystemFeature(PackageManager.FEATURE_CAMERA_FRONT);
} }
public void clearApplicationData(Context context) { public void clearApplicationData(Context context, NavigationBaseActivity.LogoutListener logoutListener) {
File cacheDirectory = context.getCacheDir(); File cacheDirectory = context.getCacheDir();
File applicationDirectory = new File(cacheDirectory.getParent()); File applicationDirectory = new File(cacheDirectory.getParent());
if (applicationDirectory.exists()) { if (applicationDirectory.exists()) {
@ -200,19 +204,53 @@ public class CommonsApplication extends Application {
AccountManager accountManager = AccountManager.get(this); AccountManager accountManager = AccountManager.get(this);
Account[] allAccounts = accountManager.getAccountsByType(AccountUtil.accountType()); Account[] allAccounts = accountManager.getAccountsByType(AccountUtil.accountType());
for (Account allAccount : allAccounts) {
accountManager.removeAccount(allAccount, null, null);
}
//TODO: fix preference manager AccountManagerCallback<Boolean> amCallback = new AccountManagerCallback<Boolean>() {
PreferenceManager.getDefaultSharedPreferences(getInstance()).edit().clear().commit();
SharedPreferences preferences = context private int index = 0;
.getSharedPreferences("fr.free.nrw.commons", MODE_PRIVATE);
preferences.edit().clear().commit(); void setIndex(int index) {
context.getSharedPreferences("prefs", Context.MODE_PRIVATE).edit().clear().commit(); this.index = index;
preferences.edit().putBoolean("firstrun", false).apply(); }
updateAllDatabases();
currentAccount = null; int getIndex() {
return index;
}
@Override
public void run(AccountManagerFuture<Boolean> accountManagerFuture) {
setIndex(getIndex() + 1);
try {
if (accountManagerFuture != null) {
if (accountManagerFuture.getResult()) {
Timber.d("Account removed successfully.");
}
}
} catch (OperationCanceledException | IOException | AuthenticatorException e) {
e.printStackTrace();
}
if (getIndex() == 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;
logoutListener.onLogoutComplete();
}
}
};
for (Account account : allAccounts) {
accountManager.removeAccount(account, amCallback, null);
}
} }
/** /**

View file

@ -22,6 +22,7 @@ import fr.free.nrw.commons.auth.LoginActivity;
import fr.free.nrw.commons.contributions.ContributionsActivity; import fr.free.nrw.commons.contributions.ContributionsActivity;
import fr.free.nrw.commons.nearby.NearbyActivity; import fr.free.nrw.commons.nearby.NearbyActivity;
import fr.free.nrw.commons.settings.SettingsActivity; import fr.free.nrw.commons.settings.SettingsActivity;
import timber.log.Timber;
public class NavigationBaseActivity extends BaseActivity public class NavigationBaseActivity extends BaseActivity
implements NavigationView.OnNavigationItemSelectedListener { implements NavigationView.OnNavigationItemSelectedListener {
@ -121,13 +122,15 @@ public class NavigationBaseActivity extends BaseActivity
.setCancelable(false) .setCancelable(false)
.setPositiveButton(R.string.yes, (dialog, which) -> { .setPositiveButton(R.string.yes, (dialog, which) -> {
((CommonsApplication) getApplicationContext()) ((CommonsApplication) getApplicationContext())
.clearApplicationData(NavigationBaseActivity.this); .clearApplicationData(NavigationBaseActivity.this, () -> {
Intent nearbyIntent = new Intent( Timber.d("Logout complete callback received.");
NavigationBaseActivity.this, LoginActivity.class); Intent nearbyIntent = new Intent(
nearbyIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK); NavigationBaseActivity.this, LoginActivity.class);
nearbyIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); nearbyIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(nearbyIntent); nearbyIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
finish(); startActivity(nearbyIntent);
finish();
});
}) })
.setNegativeButton(R.string.no, (dialog, which) -> dialog.cancel()) .setNegativeButton(R.string.no, (dialog, which) -> dialog.cancel())
.show(); .show();
@ -136,4 +139,8 @@ public class NavigationBaseActivity extends BaseActivity
return false; return false;
} }
} }
public interface LogoutListener {
void onLogoutComplete();
}
} }