SWADroid/SWADroid/src/main/java/es/ugr/swad/swadroid/preferences/Preferences.java
Marown dcd264adb4
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/tag Build is passing
Add support for background notification download when power save mode is enabled (#411)
## What changes were proposed in this pull request?

* Add support for background notification download when power save mode is enabled (Fixes #408)
* Remove social links

## How was this patch tested?

Manually.

Co-authored-by: Amab <juanmi1982@gmail.com>
Reviewed-on: #411
2022-12-18 14:48:17 +01:00

491 lines
13 KiB
Java

/*
* This file is part of SWADroid.
*
* Copyright (C) 2010 Juan Miguel Boyero Corral <juanmi1982@gmail.com>
*
* SWADroid is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* SWADroid is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with SWADroid. If not, see <http://www.gnu.org/licenses/>.
*/
package es.ugr.swad.swadroid.preferences;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.os.Bundle;
import android.util.Log;
import com.google.gson.Gson;
import java.security.NoSuchAlgorithmException;
import java.util.List;
import es.ugr.swad.swadroid.Constants;
import es.ugr.swad.swadroid.database.DataBaseHelper;
import es.ugr.swad.swadroid.model.LoginInfo;
import es.ugr.swad.swadroid.modules.courses.Courses;
import es.ugr.swad.swadroid.modules.login.Login;
import es.ugr.swad.swadroid.sync.SyncUtils;
import es.ugr.swad.swadroid.utils.Crypto;
/**
* Class for store the application preferences
*
* @author Juan Miguel Boyero Corral <juanmi1982@gmail.com>
*/
public class Preferences {
/**
* Login tag name for Logcat
*/
public static final String TAG = Constants.APP_TAG + " Preferences";
/**
* Preferences name
*/
public static final String PREFS_NAME = "es.ugr.swad.swadroid_preferences";
/**
* Application preferences
*/
private static SharedPreferences prefs = null;
/**
* Preferences editor
*/
private static Editor editor;
/**
* User identifier preference name
*/
public static final String USERIDPREF = "userIDPref";
/**
* User password preference name
*/
public static final String USERPASSWORDPREF = "userPasswordPref";
/**
* Last application version preference name
*/
public static final String LASTVERSIONPREF = "lastVersionPref";
/**
* Current application version preference name
*/
public static final String CURRENTVERSIONPREF = "currentVersionPref";
/**
* Last course selected preference name
*/
public static final String LASTCOURSESELECTEDPREF = "lastCourseSelectedPref";
/**
* Rate preference name
*/
public static final String RATEPREF = "ratePref";
/**
* Share preference name
*/
public static final String SHAREPREF = "sharePref";
/**
* Privacy policy preference name
*/
public static final String PRIVACYPOLICYPREF = "privacyPolicyPref";
/**
* Server preference name
*/
public static final String SERVERPREF = "serverPref";
/**
* Logout prefecence name
*/
public static final String LOGOUTPREF = "logOutPref";
/**
* Database passphrase preference name
*/
public static final String DBKEYPREF = "DBKeyPref";
/**
* Synchronization time preference name
*/
public static final String SYNCTIMEPREF = "prefSyncTime";
/**
* Synchronization enable preference name
*/
public static final String SYNCENABLEPREF = "prefSyncEnable";
/**
* Last synchronization time preference name
*/
public static final String LASTSYNCTIMEPREF = "lastSyncTimeLimit";
/**
* Changelog preference name
*/
public static final String CHANGELOGPREF = "changelogPref";
/**
* Authors preference name
*/
public static final String AUTHORSPREF = "authorsPref";
/**
* Authors preference name
*/
public static final String LOGININFOPREF = "loginInfoPref";
/**
* Database Helper.
*/
private static DataBaseHelper dbHelper;
/**
* Indicates if there are changes on preferences
*/
private static boolean preferencesChanged = false;
/**
* Synchronization time preference for location
*/
public static final String SYNCLOCATIONTIMEPREF = "prefSyncLocationTime";
/*
* Sharing location preference
*/
public static String SHARELOCATION = "prefShareLocation";
/**
* Gets application preferences
* @param ctx Application context
*/
private static void getPreferences(Context ctx) {
/*
* If Android API >= 11 (HONEYCOMB) enable access to SharedPreferences from all processes
* of the application
*/
prefs = ctx.getSharedPreferences(PREFS_NAME, Context.MODE_MULTI_PROCESS);
Log.i(TAG, "Android API >= 11 (HONEYCOMB). Enabling MODE_MULTI_PROCESS explicitly");
}
/**
* Constructor
*/
public Preferences(Context ctx) {
getPreferences(ctx);
editor = prefs.edit();
if(dbHelper == null) {
try {
dbHelper = new DataBaseHelper(ctx);
} catch (Exception e) {
Log.e(TAG, e.getMessage());
}
}
}
/**
* Gets user identifier
*
* @return User identifier
*/
public static String getUserID() {
return prefs.getString(USERIDPREF, "");
}
/**
* Sets user id
*/
public static void setUserID(String userID) {
editor = editor.putString(USERIDPREF, userID);
editor.commit();
}
/**
* Gets User password
*
* @return User password
*/
public static String getUserPassword() {
return prefs.getString(USERPASSWORDPREF, "");
}
/**
* Sets user password
*/
public static void setUserPassword(String userPassword) {
editor = editor.putString(USERPASSWORDPREF, userPassword);
editor.commit();
}
/**
* Gets server URL
*
* @return Server URL
*/
public static String getServer() {
return prefs.getString(SERVERPREF, null);
}
/**
* Sets server URL
*
* @param server Server URL
*/
public static void setServer(String server) {
editor = editor.putString(SERVERPREF, server);
editor.commit();
}
/**
* Gets last application version
*
* @return returns last application version
*/
public static int getLastVersion() {
return prefs.getInt(LASTVERSIONPREF, 0);
}
/**
* Sets last application version
*/
public static void setLastVersion(int lv) {
editor = editor.putInt(LASTVERSIONPREF, lv);
editor.commit();
}
/**
* Gets last course selected
*
* @return Last course selected
*/
public static int getLastCourseSelected() {
return prefs.getInt(LASTCOURSESELECTEDPREF, 0);
}
/**
* Sets last course selected
*/
public static void setLastCourseSelected(int lcs) {
editor = editor.putInt(LASTCOURSESELECTEDPREF, lcs);
editor.commit();
}
/**
* Gets the database passphrase
*
* @return The database passphrase
*/
public static String getDBKey() {
return prefs.getString(DBKEYPREF, "");
}
/**
* Gets the synchronization time
*
* @return The synchronization time
*/
public static String getSyncTime() {
return prefs.getString(SYNCTIMEPREF, "0");
}
/**
* Sets the synchronization time
*
* @param syncTime The synchronization time
*/
public static void setSyncTime(String syncTime) {
editor = editor.putString(SYNCTIMEPREF, syncTime);
editor.commit();
}
/**
* Gets the last synchronization time
*
* @return The last synchronization time
*/
public static long getLastSyncTime() {
return prefs.getLong(LASTSYNCTIMEPREF, 0);
}
/**
* Sets the last synchronization time
*
* @param time The last synchronization time
*/
public static void setLastSyncTime(long time) {
editor = editor.putLong(LASTSYNCTIMEPREF, time);
editor.commit();
}
/**
*Checks if automatic synchronization is enabled
*
* @return true if automatic synchronization is enabled
* false otherwise
*/
public static boolean isSyncEnabled() {
return prefs.getBoolean(SYNCENABLEPREF, true);
}
/**
* Sets the sync enabled flag
*
* @param syncEnabled true if automatic synchronization is enabled
* false otherwise
*/
public static void setSyncEnabled(boolean syncEnabled) {
editor = editor.putBoolean(SYNCENABLEPREF, syncEnabled);
editor.commit();
}
/**
* Sets the database passphrase
*
* @param key The database passphrase
*/
public static void setDBKey(String key) {
editor = editor.putString(DBKEYPREF, key);
editor.commit();
}
/**
* Gets the login data
*
* @return The login data
*/
public static LoginInfo getLoginInfo() {
Gson gson = new Gson();
String json = prefs.getString(LOGININFOPREF, null);
return gson.fromJson(json, LoginInfo.class);
}
/**
* Sets the login data
*
* @param loginInfo The login data
*/
public static void setLoginInfo(LoginInfo loginInfo) {
Gson gson = new Gson();
String json = gson.toJson(loginInfo);
editor = editor.putString(LOGININFOPREF, json);
editor.commit();
}
/**
* Removes the login data
*/
public static void removeLoginInfo() {
editor = editor.remove(LOGININFOPREF);
editor.commit();
}
/**
* Upgrade password encryption
*
* @throws NoSuchAlgorithmException
*/
public static void upgradeCredentials() throws NoSuchAlgorithmException {
String userPassword = getUserPassword();
setUserPassword(Crypto.encryptPassword(userPassword));
}
/**
* Clean data of all tables from database. Removes users photos from external storage
*/
private static void cleanDatabase() {
List<String> tablenames = dbHelper.getAllTablenames();
//Empty all tables except DB_TABLE_FREQUENT_RECIPIENTS
dbHelper.beginTransaction();
for(String table : tablenames) {
if(!DataBaseHelper.DB_TABLE_FREQUENT_RECIPIENTS.equals(table)) {
dbHelper.emptyTable(table);
}
}
dbHelper.endTransaction(true);
Preferences.setLastCourseSelected(0);
DataBaseHelper.setDbCleaned(true);
Log.i(TAG, "Database has been cleaned");
}
public static void logoutClean(Context context, String key) {
Login.getLoginInfo().setLogged(false);
removeLoginInfo();
initializeSelectedCourse();
cleanDatabase();
setPreferencesChanged();
if(isSyncEnabled()) {
SyncUtils.removePeriodicSync(Constants.AUTHORITY, Bundle.EMPTY, context);
}
Log.i(TAG, "Forced logout due to " + key + " change in preferences");
}
public static void initializeSelectedCourse() {
Courses.setSelectedCourseCode(-1);
Courses.setSelectedCourseShortName("");
Courses.setSelectedCourseFullName("");
Login.setCurrentUserRole(-1);
Preferences.setLastCourseSelected(-1);
Log.i(TAG, "Initialized selected course to -1");
}
public static boolean isPreferencesChanged() {
return preferencesChanged;
}
/**
* Set the fact that the preferences has changed
*/
public static void setPreferencesChanged() {
preferencesChanged = true;
}
/**
* Indicates if the preferences has changed
*
* @param newState - true when the preferences has changed and it was not handled it
* - false if the preferences has not changed
*/
public static void setPreferencesChanged(boolean newState) {
preferencesChanged = newState;
}
/**
* Gets the synchronization time
*
* @return The synchronization time
*/
public static String getSyncLocationTime() {
return prefs.getString(SYNCLOCATIONTIMEPREF, "1");
}
/**
* Sets the synchronization time for location
*
* @param syncLocationTime The synchronization time for location
*/
public static void setSyncLocationTime(String syncLocationTime) {
editor = editor.putString(SYNCLOCATIONTIMEPREF, syncLocationTime);
editor.commit();
}
/**
* Gets sharing location preference
*
* @return share location preference
*/
public static boolean getShareLocation() {
return prefs.getBoolean(SHARELOCATION, false);
}
/**
* Sets the SHARELOCATION preference
*
* @param shareLocation The preference for sharing location
*/
public static void setShareLocation(boolean shareLocation) {
editor = editor.putBoolean(SHARELOCATION, shareLocation);
editor.commit();
}
}