package de.devland.masterpassword;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.res.Configuration;
import java.util.ArrayList;
import java.util.Locale;
import de.devland.esperandro.Esperandro;
import de.devland.masterpassword.base.BaseApp;
import de.devland.masterpassword.base.util.Utils;
import de.devland.masterpassword.model.Category;
import de.devland.masterpassword.prefs.DefaultPrefs;
import de.devland.masterpassword.prefs.InputStickPrefs;
import de.devland.masterpassword.util.UpgradeManager;
import lombok.SneakyThrows;
/**
* Created by David Kunzler on 23.08.2014.
*/
public class App extends BaseApp {
private Locale targetLocale;
@Override
@SneakyThrows(PackageManager.NameNotFoundException.class)
public void onCreate() {
super.onCreate();
DefaultPrefs defaultPrefs = Esperandro.getPreferences(DefaultPrefs.class, this);
InputStickPrefs inputStickPrefs = Esperandro.getPreferences(InputStickPrefs.class, this);
PackageInfo pInfo = getPackageManager().getPackageInfo(getPackageName(), 0);
if (pInfo.versionCode != defaultPrefs.versionCode()) {
UpgradeManager upgradeManager = new UpgradeManager(this);
upgradeManager.onUpgrade(defaultPrefs.versionCode(), pInfo.versionCode);
}
defaultPrefs.versionName(pInfo.versionName);
defaultPrefs.versionCode(pInfo.versionCode);
defaultPrefs.versionString(String.format("%s (%d)", pInfo.versionName, pInfo.versionCode));
defaultPrefs.initDefaults();
inputStickPrefs.initDefaults();
if (defaultPrefs.categories() == null) {
defaultPrefs.categories(new ArrayList<Category>());
}
if (defaultPrefs.firstStart()) {
defaultPrefs.firstStart(false);
}
// Theme
Utils.setThemeModeFromName(defaultPrefs.defaultThemeMode());
// http://stackoverflow.com/questions/2264874/changing-locale-within-the-app-itself
Configuration config = getBaseContext().getResources().getConfiguration();
String lang = defaultPrefs.language();
if (!"".equals(lang) && !config.locale.getLanguage().equals(lang)) {
targetLocale = new Locale(lang);
Locale.setDefault(targetLocale);
config = new Configuration(config);
config.locale = targetLocale;
getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());
}
}
// http://stackoverflow.com/questions/2264874/changing-locale-within-the-app-itself
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
if (targetLocale != null) {
newConfig = new Configuration(newConfig);
newConfig.locale = targetLocale;
Locale.setDefault(targetLocale);
getBaseContext().getResources().updateConfiguration(newConfig, getBaseContext().getResources().getDisplayMetrics());
}
}
}