Compare commits

...

4 Commits

Author SHA1 Message Date
Sebastian Kürten
8a94a1708f Try fixing the localization issues 2021-02-12 16:57:14 +01:00
akwizgran
9d96ce6db0 Bump version numbers for 1.2.9 release. 2020-07-04 22:40:58 +01:00
akwizgran
45fb5bb445 Merge branch 'expiry-overflow-bug' into 'master'
Fix overflow in expiry warning code, bypass expiry code in release builds

See merge request briar/briar!1259
2020-07-04 21:38:22 +00:00
akwizgran
0756d92ca1 Fix overflow in expiry warning code, bypass code in release builds. 2020-07-04 22:23:06 +01:00
9 changed files with 47 additions and 18 deletions

View File

@@ -11,8 +11,8 @@ android {
defaultConfig { defaultConfig {
minSdkVersion 16 minSdkVersion 16
targetSdkVersion 28 targetSdkVersion 28
versionCode 10208 versionCode 10209
versionName "1.2.8" versionName "1.2.9"
consumerProguardFiles 'proguard-rules.txt' consumerProguardFiles 'proguard-rules.txt'
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"

View File

@@ -22,8 +22,8 @@ android {
defaultConfig { defaultConfig {
minSdkVersion 16 minSdkVersion 16
targetSdkVersion 28 targetSdkVersion 28
versionCode 10208 versionCode 10209
versionName "1.2.8" versionName "1.2.9"
applicationId "org.briarproject.briar.android" applicationId "org.briarproject.briar.android"
buildConfigField "String", "GitHash", buildConfigField "String", "GitHash",
"\"${getStdout(['git', 'rev-parse', '--short=7', 'HEAD'], 'No commit hash')}\"" "\"${getStdout(['git', 'rev-parse', '--short=7', 'HEAD'], 'No commit hash')}\""

View File

@@ -10,6 +10,7 @@ import android.os.StrictMode;
import android.os.StrictMode.ThreadPolicy; import android.os.StrictMode.ThreadPolicy;
import android.os.StrictMode.VmPolicy; import android.os.StrictMode.VmPolicy;
import android.preference.PreferenceManager; import android.preference.PreferenceManager;
import android.util.Log;
import com.vanniktech.emoji.EmojiManager; import com.vanniktech.emoji.EmojiManager;
import com.vanniktech.emoji.google.GoogleEmojiProvider; import com.vanniktech.emoji.google.GoogleEmojiProvider;
@@ -96,6 +97,7 @@ public class BriarApplicationImpl extends Application
Localizer.initialize(prefs); Localizer.initialize(prefs);
super.attachBaseContext( super.attachBaseContext(
Localizer.getInstance().setLocale(base)); Localizer.getInstance().setLocale(base));
Localizer.getInstance().setLocale(this);
setTheme(base, prefs); setTheme(base, prefs);
ACRA.init(this); ACRA.init(this);
} }
@@ -145,6 +147,7 @@ public class BriarApplicationImpl extends Application
@Override @Override
public void onConfigurationChanged(Configuration newConfig) { public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig); super.onConfigurationChanged(newConfig);
Log.d("language", "BriarApplicationImpl#onConfigurationChanged()");
Localizer.getInstance().setLocale(this); Localizer.getInstance().setLocale(this);
} }

View File

@@ -13,6 +13,7 @@ import android.content.IntentFilter;
import android.content.ServiceConnection; import android.content.ServiceConnection;
import android.os.Binder; import android.os.Binder;
import android.os.IBinder; import android.os.IBinder;
import android.util.Log;
import org.briarproject.bramble.api.account.AccountManager; import org.briarproject.bramble.api.account.AccountManager;
import org.briarproject.bramble.api.crypto.SecretKey; import org.briarproject.bramble.api.crypto.SecretKey;
@@ -160,7 +161,9 @@ public class BriarService extends Service {
@Override @Override
protected void attachBaseContext(Context base) { protected void attachBaseContext(Context base) {
Log.d("language", "BriarService#attachBaseContext()");
super.attachBaseContext(Localizer.getInstance().setLocale(base)); super.attachBaseContext(Localizer.getInstance().setLocale(base));
Localizer.getInstance().setLocale(this);
} }
private void showStartupFailureNotification(StartResult result) { private void showStartupFailureNotification(StartResult result) {

View File

@@ -4,6 +4,7 @@ import android.content.Context;
import android.content.SharedPreferences; import android.content.SharedPreferences;
import android.content.res.Configuration; import android.content.res.Configuration;
import android.content.res.Resources; import android.content.res.Resources;
import android.util.Log;
import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
@@ -26,22 +27,29 @@ public class Localizer {
private Localizer(SharedPreferences sharedPreferences) { private Localizer(SharedPreferences sharedPreferences) {
this(Locale.getDefault(), getLocaleFromTag( this(Locale.getDefault(), getLocaleFromTag(
sharedPreferences.getString(LANGUAGE, "default"))); sharedPreferences.getString(LANGUAGE, "default")));
Log.d("language", "preference: " +
sharedPreferences.getString(LANGUAGE, "default"));
} }
private Localizer(Locale systemLocale, @Nullable Locale userLocale) { private Localizer(Locale systemLocale, @Nullable Locale userLocale) {
this.systemLocale = systemLocale; this.systemLocale = systemLocale;
if (userLocale == null) locale = systemLocale; if (userLocale == null) locale = systemLocale;
else locale = userLocale; else locale = userLocale;
Log.d("language", "Localizer() system locale: " + systemLocale);
Log.d("language", "Localizer() current locale: " + locale);
} }
// Instantiate the Localizer. // Instantiate the Localizer.
public static synchronized void initialize(SharedPreferences prefs) { public static synchronized void initialize(SharedPreferences prefs) {
Log.d("language", "Localizer#initialize()");
Log.d("language", "sdk: " + SDK_INT);
if (INSTANCE == null) if (INSTANCE == null)
INSTANCE = new Localizer(prefs); INSTANCE = new Localizer(prefs);
} }
// Reinstantiate the Localizer with the system locale // Reinstantiate the Localizer with the system locale
public static synchronized void reinitialize() { public static synchronized void reinitialize() {
Log.d("language", "Localizer#reinitialize()");
if (INSTANCE != null) if (INSTANCE != null)
INSTANCE = new Localizer(INSTANCE.systemLocale, null); INSTANCE = new Localizer(INSTANCE.systemLocale, null);
} }
@@ -72,17 +80,20 @@ public class Localizer {
public Context setLocale(Context context) { public Context setLocale(Context context) {
Resources res = context.getResources(); Resources res = context.getResources();
Configuration conf = res.getConfiguration(); Configuration conf = res.getConfiguration();
Locale currentLocale; Locale currentLocale;
if (SDK_INT >= 24) { if (SDK_INT >= 24) {
currentLocale = conf.getLocales().get(0); currentLocale = conf.getLocales().get(0);
} else } else
currentLocale = conf.locale; currentLocale = conf.locale;
Log.d("language", "current locale: " + currentLocale);
if (locale.equals(currentLocale)) if (locale.equals(currentLocale))
return context; return context;
Log.d("language", "set locale: " + locale);
Locale.setDefault(locale); Locale.setDefault(locale);
if (SDK_INT >= 17) { if (SDK_INT >= 17) {
conf.setLocale(locale); conf.setLocale(locale);
context.createConfigurationContext(conf); context = context.createConfigurationContext(conf);
} else } else
conf.locale = locale; conf.locale = locale;
//noinspection deprecation //noinspection deprecation

View File

@@ -2,6 +2,7 @@ package org.briarproject.briar.android.activity;
import android.content.Context; import android.content.Context;
import android.os.Bundle; import android.os.Bundle;
import android.util.Log;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams; import android.view.ViewGroup.LayoutParams;
@@ -36,6 +37,7 @@ import javax.inject.Inject;
import androidx.annotation.LayoutRes; import androidx.annotation.LayoutRes;
import androidx.annotation.UiThread; import androidx.annotation.UiThread;
import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.view.ContextThemeWrapper;
import androidx.appcompat.widget.Toolbar; import androidx.appcompat.widget.Toolbar;
import androidx.fragment.app.Fragment; import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager; import androidx.fragment.app.FragmentManager;
@@ -106,12 +108,24 @@ public abstract class BaseActivity extends AppCompatActivity
for (ActivityLifecycleController alc : lifecycleControllers) { for (ActivityLifecycleController alc : lifecycleControllers) {
alc.onActivityCreate(this); alc.onActivityCreate(this);
} }
Log.d("language", "BaseActivity#onCreate()");
Context baseContext = getBaseContext();
Log.d("language", "Context: " + getBaseContext().toString());
if (baseContext instanceof ContextThemeWrapper) {
ContextThemeWrapper wrapper = (ContextThemeWrapper) baseContext;
Context wrapped = wrapper.getBaseContext();
Log.d("language", "Wrapped: " + wrapped.toString());
}
} }
@Override @Override
protected void attachBaseContext(Context base) { protected void attachBaseContext(Context base) {
Log.d("language", "BaseActivity#attachBaseContext()");
Log.d("language", "Context: " + base.toString());
super.attachBaseContext( super.attachBaseContext(
Localizer.getInstance().setLocale(base)); Localizer.getInstance().setLocale(base));
Localizer.getInstance().setLocale(this);
} }
public ActivityComponent getActivityComponent() { public ActivityComponent getActivityComponent() {

View File

@@ -71,6 +71,7 @@ import static org.briarproject.bramble.api.plugin.Plugin.State.ACTIVE;
import static org.briarproject.bramble.api.plugin.Plugin.State.ENABLING; import static org.briarproject.bramble.api.plugin.Plugin.State.ENABLING;
import static org.briarproject.bramble.api.plugin.Plugin.State.STARTING_STOPPING; import static org.briarproject.bramble.api.plugin.Plugin.State.STARTING_STOPPING;
import static org.briarproject.briar.android.BriarService.EXTRA_STARTUP_FAILED; import static org.briarproject.briar.android.BriarService.EXTRA_STARTUP_FAILED;
import static org.briarproject.briar.android.TestingConstants.IS_DEBUG_BUILD;
import static org.briarproject.briar.android.activity.RequestCodes.REQUEST_PASSWORD; import static org.briarproject.briar.android.activity.RequestCodes.REQUEST_PASSWORD;
import static org.briarproject.briar.android.navdrawer.IntentRouter.handleExternalIntent; import static org.briarproject.briar.android.navdrawer.IntentRouter.handleExternalIntent;
import static org.briarproject.briar.android.util.UiUtils.getDaysUntilExpiry; import static org.briarproject.briar.android.util.UiUtils.getDaysUntilExpiry;
@@ -128,8 +129,10 @@ public class NavDrawerActivity extends BriarActivity implements
navDrawerViewModel = provider.get(NavDrawerViewModel.class); navDrawerViewModel = provider.get(NavDrawerViewModel.class);
pluginViewModel = provider.get(PluginViewModel.class); pluginViewModel = provider.get(PluginViewModel.class);
navDrawerViewModel.showExpiryWarning() if (IS_DEBUG_BUILD) {
.observe(this, this::showExpiryWarning); navDrawerViewModel.showExpiryWarning()
.observe(this, this::showExpiryWarning);
}
navDrawerViewModel.shouldAskForDozeWhitelisting().observe(this, ask -> { navDrawerViewModel.shouldAskForDozeWhitelisting().observe(this, ask -> {
if (ask) showDozeDialog(getString(R.string.setup_doze_intro)); if (ask) showDozeDialog(getString(R.string.setup_doze_intro));
}); });
@@ -171,7 +174,7 @@ public class NavDrawerActivity extends BriarActivity implements
public void onStart() { public void onStart() {
super.onStart(); super.onStart();
lockManager.checkIfLockable(); lockManager.checkIfLockable();
navDrawerViewModel.checkExpiryWarning(); if (IS_DEBUG_BUILD) navDrawerViewModel.checkExpiryWarning();
} }
@Override @Override
@@ -350,7 +353,7 @@ public class NavDrawerActivity extends BriarActivity implements
} }
private void showExpiryWarning(boolean show) { private void showExpiryWarning(boolean show) {
int daysUntilExpiry = getDaysUntilExpiry(); long daysUntilExpiry = getDaysUntilExpiry();
if (daysUntilExpiry < 0) { if (daysUntilExpiry < 0) {
signOut(); signOut();
return; return;
@@ -362,7 +365,8 @@ public class NavDrawerActivity extends BriarActivity implements
TextView expiryWarningText = TextView expiryWarningText =
expiryWarning.findViewById(R.id.expiryWarningText); expiryWarning.findViewById(R.id.expiryWarningText);
String text = getResources().getQuantityString( String text = getResources().getQuantityString(
R.plurals.expiry_warning, daysUntilExpiry, daysUntilExpiry); R.plurals.expiry_warning, (int) daysUntilExpiry,
(int) daysUntilExpiry);
expiryWarningText.setText(text); expiryWarningText.setText(text);
// make close button functional // make close button functional
ImageView expiryWarningClose = ImageView expiryWarningClose =

View File

@@ -23,7 +23,6 @@ import static java.util.logging.Level.WARNING;
import static java.util.logging.Logger.getLogger; import static java.util.logging.Logger.getLogger;
import static org.briarproject.bramble.util.LogUtils.logException; import static org.briarproject.bramble.util.LogUtils.logException;
import static org.briarproject.briar.android.TestingConstants.EXPIRY_DATE; import static org.briarproject.briar.android.TestingConstants.EXPIRY_DATE;
import static org.briarproject.briar.android.TestingConstants.IS_DEBUG_BUILD;
import static org.briarproject.briar.android.controller.BriarControllerImpl.DOZE_ASK_AGAIN; import static org.briarproject.briar.android.controller.BriarControllerImpl.DOZE_ASK_AGAIN;
import static org.briarproject.briar.android.settings.SettingsFragment.SETTINGS_NAMESPACE; import static org.briarproject.briar.android.settings.SettingsFragment.SETTINGS_NAMESPACE;
import static org.briarproject.briar.android.util.UiUtils.needsDozeWhitelisting; import static org.briarproject.briar.android.util.UiUtils.needsDozeWhitelisting;
@@ -59,10 +58,6 @@ public class NavDrawerViewModel extends AndroidViewModel {
@UiThread @UiThread
void checkExpiryWarning() { void checkExpiryWarning() {
if (!IS_DEBUG_BUILD) {
showExpiryWarning.setValue(false);
return;
}
dbExecutor.execute(() -> { dbExecutor.execute(() -> {
try { try {
Settings settings = Settings settings =

View File

@@ -159,10 +159,9 @@ public class UiUtils {
return DateUtils.formatDateTime(ctx, time, flags); return DateUtils.formatDateTime(ctx, time, flags);
} }
public static int getDaysUntilExpiry() { public static long getDaysUntilExpiry() {
long now = System.currentTimeMillis(); long now = System.currentTimeMillis();
long daysBeforeExpiry = (EXPIRY_DATE - now) / DAYS.toMillis(1); return (EXPIRY_DATE - now) / DAYS.toMillis(1);
return (int) daysBeforeExpiry;
} }
public static SpannableStringBuilder getTeaser(Context ctx, Spanned text) { public static SpannableStringBuilder getTeaser(Context ctx, Spanned text) {