From cce8c27a66c8e3a2a08997c950daa8ec11abfca3 Mon Sep 17 00:00:00 2001 From: Neslihan Date: Tue, 16 May 2017 15:52:05 +0300 Subject: [PATCH 1/3] 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 From aec4300a2e79490082396c732ac0df3b3e8009f5 Mon Sep 17 00:00:00 2001 From: Neslihan Date: Tue, 16 May 2017 16:01:29 +0300 Subject: [PATCH 2/3] Logout thing --- .../main/java/fr/free/nrw/commons/CommonsApplication.java | 3 +-- app/src/main/java/fr/free/nrw/commons/category/Category.java | 5 +++++ .../java/fr/free/nrw/commons/contributions/Contribution.java | 5 +++++ .../fr/free/nrw/commons/modifications/ModifierSequence.java | 5 +++++ 4 files changed, 16 insertions(+), 2 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 ac40d9190..b0ef462dc 100644 --- a/app/src/main/java/fr/free/nrw/commons/CommonsApplication.java +++ b/app/src/main/java/fr/free/nrw/commons/CommonsApplication.java @@ -255,8 +255,7 @@ public class CommonsApplication extends Application { currentAccount = null; } - public void updateAllDatabases(Context context) - { + public void updateAllDatabases(Context context) { DBOpenHelper dbOpenHelper = DBOpenHelper.getInstance(context); dbOpenHelper.getReadableDatabase().close(); SQLiteDatabase db = dbOpenHelper.getWritableDatabase(); diff --git a/app/src/main/java/fr/free/nrw/commons/category/Category.java b/app/src/main/java/fr/free/nrw/commons/category/Category.java index 645b10afc..f290dd741 100644 --- a/app/src/main/java/fr/free/nrw/commons/category/Category.java +++ b/app/src/main/java/fr/free/nrw/commons/category/Category.java @@ -115,6 +115,11 @@ public class Category { db.execSQL(CREATE_TABLE_STATEMENT); } + public static void onDelete(SQLiteDatabase db) { + db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME); + onCreate(db); + } + public static void onUpdate(SQLiteDatabase db, int from, int to) { if(from == to) { return; diff --git a/app/src/main/java/fr/free/nrw/commons/contributions/Contribution.java b/app/src/main/java/fr/free/nrw/commons/contributions/Contribution.java index c39298810..e58be04e1 100644 --- a/app/src/main/java/fr/free/nrw/commons/contributions/Contribution.java +++ b/app/src/main/java/fr/free/nrw/commons/contributions/Contribution.java @@ -331,6 +331,11 @@ public class Contribution extends Media { db.execSQL(CREATE_TABLE_STATEMENT); } + public static void onDelete(SQLiteDatabase db) { + db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME); + onCreate(db); + } + public static void onUpdate(SQLiteDatabase db, int from, int to) { if(from == to) { return; diff --git a/app/src/main/java/fr/free/nrw/commons/modifications/ModifierSequence.java b/app/src/main/java/fr/free/nrw/commons/modifications/ModifierSequence.java index b660c0a72..67152f85b 100644 --- a/app/src/main/java/fr/free/nrw/commons/modifications/ModifierSequence.java +++ b/app/src/main/java/fr/free/nrw/commons/modifications/ModifierSequence.java @@ -142,5 +142,10 @@ public class ModifierSequence { db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME); onCreate(db); } + + public static void onDelete(SQLiteDatabase db) { + db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME); + onCreate(db); + } } } From be2b944276f3a3d96bdd87265b9661cad44be4f9 Mon Sep 17 00:00:00 2001 From: Neslihan Date: Tue, 16 May 2017 16:12:16 +0300 Subject: [PATCH 3/3] Fix codacy --- .../free/nrw/commons/CommonsApplication.java | 39 +++++++------------ .../hamburger/NavigationBaseFragment.java | 6 ++- .../fr/free/nrw/commons/utils/FileUtils.java | 23 +++++++++++ 3 files changed, 42 insertions(+), 26 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 b0ef462dc..32d8b89f9 100644 --- a/app/src/main/java/fr/free/nrw/commons/CommonsApplication.java +++ b/app/src/main/java/fr/free/nrw/commons/CommonsApplication.java @@ -24,7 +24,13 @@ import com.nostra13.universalimageloader.core.ImageLoader; import com.nostra13.universalimageloader.core.ImageLoaderConfiguration; import com.nostra13.universalimageloader.utils.StorageUtils; +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 fr.free.nrw.commons.auth.AccountUtil; + import org.acra.ACRA; import org.acra.ReportingInteractionMode; import org.acra.annotation.ReportsCrashes; @@ -42,11 +48,7 @@ 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 fr.free.nrw.commons.utils.FileUtils; import timber.log.Timber; // TODO: Use ProGuard to rip out reporting when publishing @@ -234,7 +236,7 @@ public class CommonsApplication extends Application { String[] fileNames = applicationDirectory.list(); for (String fileName : fileNames) { if (!fileName.equals("lib")) { - deleteFile(new File(applicationDirectory, fileName)); + FileUtils.deleteFile(new File(applicationDirectory, fileName)); } } } @@ -247,14 +249,19 @@ public class CommonsApplication extends Application { //TODO: fix preference manager PreferenceManager.getDefaultSharedPreferences(app).edit().clear().commit(); - SharedPreferences preferences = context.getSharedPreferences("fr.free.nrw.commons", MODE_PRIVATE); + SharedPreferences preferences = context + .getSharedPreferences("fr.free.nrw.commons", MODE_PRIVATE); preferences.edit().clear().commit(); - context.getSharedPreferences("prefs", Context.MODE_PRIVATE).edit().clear().commit();; + context.getSharedPreferences("prefs", Context.MODE_PRIVATE).edit().clear().commit(); preferences.edit().putBoolean("firstrun", false).apply(); updateAllDatabases(context); currentAccount = null; } + /** + * Deletes all tables and re-creates them. + * @param context context + */ public void updateAllDatabases(Context context) { DBOpenHelper dbOpenHelper = DBOpenHelper.getInstance(context); dbOpenHelper.getReadableDatabase().close(); @@ -264,20 +271,4 @@ public class CommonsApplication extends Application { 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 4190dcfbd..146e72961 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 @@ -131,8 +131,10 @@ public class NavigationBaseFragment extends Fragment { .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); + ((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); diff --git a/app/src/main/java/fr/free/nrw/commons/utils/FileUtils.java b/app/src/main/java/fr/free/nrw/commons/utils/FileUtils.java index 158c13da0..3df50b31f 100644 --- a/app/src/main/java/fr/free/nrw/commons/utils/FileUtils.java +++ b/app/src/main/java/fr/free/nrw/commons/utils/FileUtils.java @@ -3,6 +3,7 @@ package fr.free.nrw.commons.utils; import android.content.Context; import java.io.BufferedReader; +import java.io.File; import java.io.IOException; import java.io.InputStreamReader; @@ -32,4 +33,26 @@ public class FileUtils { } return stringBuilder; } + + /** + * Deletes files. + * @param file context + */ + 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; + } + + }