From cce8c27a66c8e3a2a08997c950daa8ec11abfca3 Mon Sep 17 00:00:00 2001 From: Neslihan Date: Tue, 16 May 2017 15:52:05 +0300 Subject: [PATCH] Add logout action --- .../free/nrw/commons/CommonsApplication.java | 64 +++++++++++++++++++ .../hamburger/NavigationBaseFragment.java | 29 +++++++++ app/src/main/res/values/strings.xml | 1 + 3 files changed, 94 insertions(+) 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 bc815b9b7..ac40d9190 100644 --- a/app/src/main/java/fr/free/nrw/commons/CommonsApplication.java +++ b/app/src/main/java/fr/free/nrw/commons/CommonsApplication.java @@ -5,9 +5,13 @@ import android.accounts.AccountManager; import android.accounts.AuthenticatorException; import android.accounts.OperationCanceledException; import android.app.Application; +import android.content.Context; +import android.content.SharedPreferences; import android.content.pm.PackageManager; +import android.database.sqlite.SQLiteDatabase; import android.graphics.Bitmap; import android.os.Build; +import android.preference.PreferenceManager; import android.support.v4.util.LruCache; import com.android.volley.RequestQueue; @@ -35,9 +39,14 @@ import org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager; import org.apache.http.params.BasicHttpParams; import org.apache.http.params.CoreProtocolPNames; +import java.io.File; import java.io.IOException; import fr.free.nrw.commons.caching.CacheController; +import fr.free.nrw.commons.category.Category; +import fr.free.nrw.commons.contributions.Contribution; +import fr.free.nrw.commons.data.DBOpenHelper; +import fr.free.nrw.commons.modifications.ModifierSequence; import timber.log.Timber; // TODO: Use ProGuard to rip out reporting when publishing @@ -217,4 +226,59 @@ public class CommonsApplication extends Application { return pm.hasSystemFeature(PackageManager.FEATURE_CAMERA) || pm.hasSystemFeature(PackageManager.FEATURE_CAMERA_FRONT); } + + public void clearApplicationData(Context context) { + File cacheDirectory = context.getCacheDir(); + File applicationDirectory = new File(cacheDirectory.getParent()); + if (applicationDirectory.exists()) { + String[] fileNames = applicationDirectory.list(); + for (String fileName : fileNames) { + if (!fileName.equals("lib")) { + deleteFile(new File(applicationDirectory, fileName)); + } + } + } + + AccountManager accountManager = AccountManager.get(this); + Account[] allAccounts = accountManager.getAccountsByType(AccountUtil.accountType()); + for (int index = 0; index < allAccounts.length; index++) { + accountManager.removeAccount(allAccounts[index], null, null); + } + + //TODO: fix preference manager + PreferenceManager.getDefaultSharedPreferences(app).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(context); + currentAccount = null; + } + + public void updateAllDatabases(Context context) + { + DBOpenHelper dbOpenHelper = DBOpenHelper.getInstance(context); + dbOpenHelper.getReadableDatabase().close(); + SQLiteDatabase db = dbOpenHelper.getWritableDatabase(); + + ModifierSequence.Table.onDelete(db); + Category.Table.onDelete(db); + Contribution.Table.onDelete(db); + } + + public static boolean deleteFile(File file) { + boolean deletedAll = true; + if (file != null) { + if (file.isDirectory()) { + String[] children = file.list(); + for (int i = 0; i < children.length; i++) { + deletedAll = deleteFile(new File(file, children[i])) && deletedAll; + } + } else { + deletedAll = file.delete(); + } + } + + return deletedAll; + } } diff --git a/app/src/main/java/fr/free/nrw/commons/hamburger/NavigationBaseFragment.java b/app/src/main/java/fr/free/nrw/commons/hamburger/NavigationBaseFragment.java index ddfc88d73..4190dcfbd 100644 --- a/app/src/main/java/fr/free/nrw/commons/hamburger/NavigationBaseFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/hamburger/NavigationBaseFragment.java @@ -1,11 +1,13 @@ package fr.free.nrw.commons.hamburger; import android.content.ActivityNotFoundException; +import android.content.DialogInterface; import android.content.Intent; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.widget.DrawerLayout; import android.support.v7.app.ActionBarDrawerToggle; +import android.support.v7.app.AlertDialog; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -21,6 +23,7 @@ import fr.free.nrw.commons.AboutActivity; import fr.free.nrw.commons.BuildConfig; import fr.free.nrw.commons.CommonsApplication; import fr.free.nrw.commons.R; +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; @@ -120,6 +123,32 @@ public class NavigationBaseFragment extends Fragment { } } + @OnClick(R.id.logout_item) + protected void onLogoutItemClicked() { + AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(getActivity()); + alertDialogBuilder.setMessage(R.string.logout_verification) + .setCancelable(false) + .setPositiveButton(R.string.yes, + new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int id) { + ((CommonsApplication)getActivity().getApplicationContext()).clearApplicationData(getContext()); + Intent nearbyIntent = new Intent(getActivity(), LoginActivity.class); + nearbyIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK); + nearbyIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + startActivity(nearbyIntent); + getActivity().finish(); + } + }); + alertDialogBuilder.setNegativeButton(R.string.no, + new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int id) { + dialog.cancel(); + } + }); + AlertDialog alert = alertDialogBuilder.create(); + alert.show(); + } + private void closeDrawer() { if (drawerLayout != null) { drawerLayout.closeDrawer(drawerPane); diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index c38710449..5930cbc36 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -183,6 +183,7 @@ Tap this message (or hit back) to skip this step. Unable to display more than 500 Set Recent Upload Limit Two factor authentication is currently not supported. + Do you really want to logout? Cancel Open