From 2c1f20f1fd7488382ef443b0171644c35daa85bd Mon Sep 17 00:00:00 2001 From: Ram Gudivada Date: Sat, 11 Nov 2017 00:43:37 -0800 Subject: [PATCH 1/5] Issue-944: Fix for same activity getting instantiated multiple times This is happening because the finish() method on current activity is not called before switching to the new activity --- .../commons/theme/NavigationBaseActivity.java | 20 +++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) 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 e1a6c5905..dd0269f1c 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 @@ -91,35 +91,36 @@ public abstract class NavigationBaseActivity extends BaseActivity @Override public boolean onNavigationItemSelected(@NonNull final MenuItem item) { - switch (item.getItemId()) { + final int itemId = item.getItemId(); + switch (itemId) { case R.id.action_home: drawerLayout.closeDrawer(navigationView); if (!(this instanceof ContributionsActivity)) { ContributionsActivity.startYourself(this); } - return true; + break; case R.id.action_nearby: drawerLayout.closeDrawer(navigationView); if (!(this instanceof NearbyActivity)) { NearbyActivity.startYourself(this); } - return true; + break; case R.id.action_about: drawerLayout.closeDrawer(navigationView); if (!(this instanceof AboutActivity)) { AboutActivity.startYourself(this); } - return true; + break; case R.id.action_settings: drawerLayout.closeDrawer(navigationView); if (!(this instanceof SettingsActivity)) { SettingsActivity.startYourself(this); } - return true; + break; case R.id.action_introduction: drawerLayout.closeDrawer(navigationView); WelcomeActivity.startYourself(this); - return true; + break; case R.id.action_feedback: drawerLayout.closeDrawer(navigationView); Intent feedbackIntent = new Intent(Intent.ACTION_SEND); @@ -134,7 +135,7 @@ public abstract class NavigationBaseActivity extends BaseActivity } catch (ActivityNotFoundException e) { Toast.makeText(this, R.string.no_email_client, Toast.LENGTH_SHORT).show(); } - return true; + break; case R.id.action_logout: new AlertDialog.Builder(this) .setMessage(R.string.logout_verification) @@ -146,10 +147,13 @@ public abstract class NavigationBaseActivity extends BaseActivity }) .setNegativeButton(R.string.no, (dialog, which) -> dialog.cancel()) .show(); - return true; + break; default: + Timber.e("Unknown option [%s] selected from the navigation menu", itemId); return false; } + this.finish(); + return true; } private class BaseLogoutListener implements CommonsApplication.LogoutListener { From 5548cec02eaee826c3a7cebce87df58e536e515f Mon Sep 17 00:00:00 2001 From: Ram Gudivada Date: Sat, 11 Nov 2017 01:19:51 -0800 Subject: [PATCH 2/5] Removed finish() method for tutorial/feedback and logout menu options. --- .../commons/theme/NavigationBaseActivity.java | 21 +++++++++++-------- 1 file changed, 12 insertions(+), 9 deletions(-) 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 dd0269f1c..461fe89c6 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 @@ -97,30 +97,35 @@ public abstract class NavigationBaseActivity extends BaseActivity drawerLayout.closeDrawer(navigationView); if (!(this instanceof ContributionsActivity)) { ContributionsActivity.startYourself(this); + this.finish(); } - break; + return true; case R.id.action_nearby: drawerLayout.closeDrawer(navigationView); if (!(this instanceof NearbyActivity)) { NearbyActivity.startYourself(this); + this.finish(); } - break; + return true; case R.id.action_about: drawerLayout.closeDrawer(navigationView); if (!(this instanceof AboutActivity)) { AboutActivity.startYourself(this); + this.finish(); } - break; + this.finish(); + return true; case R.id.action_settings: drawerLayout.closeDrawer(navigationView); if (!(this instanceof SettingsActivity)) { SettingsActivity.startYourself(this); + this.finish(); } - break; + return true; case R.id.action_introduction: drawerLayout.closeDrawer(navigationView); WelcomeActivity.startYourself(this); - break; + return true; case R.id.action_feedback: drawerLayout.closeDrawer(navigationView); Intent feedbackIntent = new Intent(Intent.ACTION_SEND); @@ -135,7 +140,7 @@ public abstract class NavigationBaseActivity extends BaseActivity } catch (ActivityNotFoundException e) { Toast.makeText(this, R.string.no_email_client, Toast.LENGTH_SHORT).show(); } - break; + return true; case R.id.action_logout: new AlertDialog.Builder(this) .setMessage(R.string.logout_verification) @@ -147,13 +152,11 @@ public abstract class NavigationBaseActivity extends BaseActivity }) .setNegativeButton(R.string.no, (dialog, which) -> dialog.cancel()) .show(); - break; + return true; default: Timber.e("Unknown option [%s] selected from the navigation menu", itemId); return false; } - this.finish(); - return true; } private class BaseLogoutListener implements CommonsApplication.LogoutListener { From 03517de9a3dd4094352a414073d7778d09d980b0 Mon Sep 17 00:00:00 2001 From: Ram Gudivada Date: Sat, 11 Nov 2017 01:21:33 -0800 Subject: [PATCH 3/5] Removed unnecessary finish() call for about option in menu. --- .../java/fr/free/nrw/commons/theme/NavigationBaseActivity.java | 1 - 1 file changed, 1 deletion(-) 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 461fe89c6..7ad13b29e 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 @@ -113,7 +113,6 @@ public abstract class NavigationBaseActivity extends BaseActivity AboutActivity.startYourself(this); this.finish(); } - this.finish(); return true; case R.id.action_settings: drawerLayout.closeDrawer(navigationView); From 3c9b325e58a7e465ec92ae2e466bc8bac368a007 Mon Sep 17 00:00:00 2001 From: Ram Gudivada Date: Mon, 20 Nov 2017 21:37:10 -0800 Subject: [PATCH 4/5] Changed activity creation logic - for home activity it will reuse existing activity from back stack and also clears all current activities - for nearby, about and settings, it will use the existing activity from back stack --- .../fr/free/nrw/commons/AboutActivity.java | 5 --- .../free/nrw/commons/auth/LoginActivity.java | 3 +- .../contributions/ContributionsActivity.java | 5 --- .../nrw/commons/nearby/NearbyActivity.java | 5 --- .../commons/settings/SettingsActivity.java | 5 --- .../commons/theme/NavigationBaseActivity.java | 31 +++++++++---------- 6 files changed, 17 insertions(+), 37 deletions(-) diff --git a/app/src/main/java/fr/free/nrw/commons/AboutActivity.java b/app/src/main/java/fr/free/nrw/commons/AboutActivity.java index 96c1cf200..06d02aab2 100644 --- a/app/src/main/java/fr/free/nrw/commons/AboutActivity.java +++ b/app/src/main/java/fr/free/nrw/commons/AboutActivity.java @@ -27,9 +27,4 @@ public class AboutActivity extends NavigationBaseActivity { versionText.setText(BuildConfig.VERSION_NAME); initDrawer(); } - - public static void startYourself(Context context) { - Intent settingsIntent = new Intent(context, AboutActivity.class); - context.startActivity(settingsIntent); - } } \ No newline at end of file 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 9e3423928..f581de832 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 @@ -30,6 +30,7 @@ import fr.free.nrw.commons.R; import fr.free.nrw.commons.Utils; import fr.free.nrw.commons.WelcomeActivity; import fr.free.nrw.commons.contributions.ContributionsActivity; +import fr.free.nrw.commons.theme.NavigationBaseActivity; import timber.log.Timber; import static android.view.KeyEvent.KEYCODE_ENTER; @@ -176,7 +177,7 @@ public class LoginActivity extends AccountAuthenticatorActivity { } public void startMainActivity() { - ContributionsActivity.startYourself(this); + NavigationBaseActivity.startActivityWithFlags(this, ContributionsActivity.class, Intent.FLAG_ACTIVITY_CLEAR_TOP); finish(); } diff --git a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsActivity.java b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsActivity.java index 330baaf58..e429f32b4 100644 --- a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsActivity.java +++ b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsActivity.java @@ -343,9 +343,4 @@ public class ContributionsActivity extends AuthenticatedActivity public void refreshSource() { getSupportLoaderManager().restartLoader(0, null, this); } - - public static void startYourself(Context context) { - context.startActivity(new Intent(context, ContributionsActivity.class)); - } - } diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyActivity.java b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyActivity.java index 94b6b5f19..7a1588d06 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyActivity.java +++ b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyActivity.java @@ -350,9 +350,4 @@ public class NearbyActivity extends NavigationBaseActivity { fragmentTransaction.replace(R.id.container, fragment); fragmentTransaction.commitAllowingStateLoss(); } - - public static void startYourself(Context context) { - Intent settingsIntent = new Intent(context, NearbyActivity.class); - context.startActivity(settingsIntent); - } } diff --git a/app/src/main/java/fr/free/nrw/commons/settings/SettingsActivity.java b/app/src/main/java/fr/free/nrw/commons/settings/SettingsActivity.java index 5814ec904..4b46ff401 100644 --- a/app/src/main/java/fr/free/nrw/commons/settings/SettingsActivity.java +++ b/app/src/main/java/fr/free/nrw/commons/settings/SettingsActivity.java @@ -54,9 +54,4 @@ public class SettingsActivity extends NavigationBaseActivity { return super.onOptionsItemSelected(item); } } - - public static void startYourself(Context context) { - Intent settingsIntent = new Intent(context, SettingsActivity.class); - context.startActivity(settingsIntent); - } } \ No newline at end of file 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 7ad13b29e..c27182f67 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 @@ -3,6 +3,7 @@ package fr.free.nrw.commons.theme; import android.accounts.Account; import android.accounts.AccountManager; import android.content.ActivityNotFoundException; +import android.content.Context; import android.content.Intent; import android.support.annotation.NonNull; import android.support.design.widget.NavigationView; @@ -95,31 +96,21 @@ public abstract class NavigationBaseActivity extends BaseActivity switch (itemId) { case R.id.action_home: drawerLayout.closeDrawer(navigationView); - if (!(this instanceof ContributionsActivity)) { - ContributionsActivity.startYourself(this); - this.finish(); - } + startActivityWithFlags( + this, ContributionsActivity.class, Intent.FLAG_ACTIVITY_CLEAR_TOP, + Intent.FLAG_ACTIVITY_SINGLE_TOP); return true; case R.id.action_nearby: drawerLayout.closeDrawer(navigationView); - if (!(this instanceof NearbyActivity)) { - NearbyActivity.startYourself(this); - this.finish(); - } + startActivityWithFlags(this, NearbyActivity.class, Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); return true; case R.id.action_about: drawerLayout.closeDrawer(navigationView); - if (!(this instanceof AboutActivity)) { - AboutActivity.startYourself(this); - this.finish(); - } + startActivityWithFlags(this, AboutActivity.class, Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); return true; case R.id.action_settings: drawerLayout.closeDrawer(navigationView); - if (!(this instanceof SettingsActivity)) { - SettingsActivity.startYourself(this); - this.finish(); - } + startActivityWithFlags(this, SettingsActivity.class, Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); return true; case R.id.action_introduction: drawerLayout.closeDrawer(navigationView); @@ -170,4 +161,12 @@ public abstract class NavigationBaseActivity extends BaseActivity finish(); } } + + public static void startActivityWithFlags(Context context, Class cls, int... flags) { + Intent intent = new Intent(context, cls); + for (int flag: flags) { + intent.addFlags(flag); + } + context.startActivity(intent); + } } From 2af7e7fe95191724560a1a62705907316463bac6 Mon Sep 17 00:00:00 2001 From: "translatewiki.net" Date: Thu, 23 Nov 2017 07:31:45 +0100 Subject: [PATCH 5/5] Localisation updates from https://translatewiki.net. --- app/src/main/res/values-iw/strings.xml | 2 ++ app/src/main/res/values-ru/strings.xml | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/app/src/main/res/values-iw/strings.xml b/app/src/main/res/values-iw/strings.xml index f49382806..ddc29c35d 100644 --- a/app/src/main/res/values-iw/strings.xml +++ b/app/src/main/res/values-iw/strings.xml @@ -195,5 +195,7 @@ לתת הרשאה להשתמש באחסון חיצוני שמירת תמונות שצולמו באמצעות מצלמה בתוך היישום במכשיר שלך + שליחת קובץ יומן + שליחת קובץ יומן למפתחים בדואר אלקטרוני כניסה לחשבון שלך diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 50d626b99..918c760b7 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -8,7 +8,7 @@ Зарегистрироваться Вход в систему Пожалуйста, подождите… - Вход выполнен успешно. + Вход выполнен успешно! Ошибка входа в систему! Файл не найден. Попробуйте другой файл. Ошибка аутентификации!