/*
- * Copyright © 2020 Damyan Ivanov.
+ * Copyright © 2021 Damyan Ivanov.
* This file is part of MoLe.
* MoLe is free software: you can distribute it and/or modify it
* under the term of the GNU General Public License as published by
package net.ktnx.mobileledger;
import android.app.Application;
+import android.content.SharedPreferences;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.database.sqlite.SQLiteDatabase;
import android.util.Log;
+import net.ktnx.mobileledger.db.DB;
import net.ktnx.mobileledger.model.Data;
-import net.ktnx.mobileledger.model.MobileLedgerProfile;
+import net.ktnx.mobileledger.ui.profiles.ProfileDetailModel;
+import net.ktnx.mobileledger.utils.Colors;
import net.ktnx.mobileledger.utils.Globals;
import net.ktnx.mobileledger.utils.Logger;
import net.ktnx.mobileledger.utils.MobileLedgerDatabase;
import java.util.Locale;
public class App extends Application {
+ public static final String PREF_NAME = "MoLe";
+ public static final String PREF_THEME_HUE = "theme-hue";
+ public static final String PREF_PROFILE_ID = "profile-id";
public static App instance;
+ private static ProfileDetailModel profileModel;
private MobileLedgerDatabase dbHelper;
private boolean monthNamesPrepared = false;
public static SQLiteDatabase getDatabase() {
public static void prepareMonthNames() {
instance.prepareMonthNames(false);
}
+ public static void setAuthenticationDataFromProfileModel(ProfileDetailModel model) {
+ profileModel = model;
+ }
+ public static void resetAuthenticationData() {
+ profileModel = null;
+ }
+ public static void storeStartupProfileAndTheme(long currentProfileId, int currentTheme) {
+ SharedPreferences prefs = instance.getSharedPreferences(PREF_NAME, MODE_PRIVATE);
+ SharedPreferences.Editor editor = prefs.edit();
+ editor.putLong(PREF_PROFILE_ID, currentProfileId);
+ editor.putInt(PREF_THEME_HUE, currentTheme);
+ editor.apply();
+ }
+ public static long getStartupProfile() {
+ SharedPreferences prefs = instance.getSharedPreferences(PREF_NAME, MODE_PRIVATE);
+ return prefs.getLong(PREF_PROFILE_ID, -1);
+ }
+ public static int getStartupTheme() {
+ SharedPreferences prefs = instance.getSharedPreferences(PREF_NAME, MODE_PRIVATE);
+ return prefs.getInt(PREF_THEME_HUE, Colors.DEFAULT_HUE_DEG);
+ }
+ private String getAuthURL() {
+ if (profileModel != null)
+ return profileModel.getUrl();
+ return Data.getProfile()
+ .getUrl();
+ }
+ private String getAuthUserName() {
+ if (profileModel != null)
+ return profileModel.getAuthUserName();
+ return Data.getProfile()
+ .getAuthUser();
+ }
+ private String getAuthPassword() {
+ if (profileModel != null)
+ return profileModel.getAuthPassword();
+ return Data.getProfile()
+ .getAuthPassword();
+ }
+ private boolean getAuthEnabled() {
+ if (profileModel != null)
+ return profileModel.getUseAuthentication();
+ return Data.getProfile()
+ .useAuthentication();
+ }
@Override
public void onCreate() {
Logger.debug("flow", "App onCreate()");
Authenticator.setDefault(new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
- MobileLedgerProfile p = Data.getProfile();
- if (p.isAuthEnabled()) {
+ if (getAuthEnabled()) {
try {
- final URL url = new URL(p.getUrl());
+ final URL url = new URL(getAuthURL());
final String requestingHost = getRequestingHost();
final String expectedHost = url.getHost();
if (requestingHost.equalsIgnoreCase(expectedHost))
- return new PasswordAuthentication(p.getAuthUserName(),
- p.getAuthPassword()
- .toCharArray());
+ return new PasswordAuthentication(getAuthUserName(),
+ getAuthPassword().toCharArray());
else
Log.w("http-auth",
String.format("Requesting host [%s] differs from expected [%s]",
if (dbHelper != null)
return;
+ // Let Room do any possible migrations
+ // this method may be removed when all DB access is made via Room
+ DB.get()
+ .compileStatement("select count(*) from profiles");
dbHelper = new MobileLedgerDatabase(this);
}
}