diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -47,25 +47,10 @@
android:networkSecurityConfig="@xml/networks_security_config"
android:roundIcon="@mipmap/ic_launcher_round"
android:theme="@style/AppThemeDayNight.NoActionBar">
-
-
-
-
@@ -74,7 +59,7 @@
-
+
@@ -84,6 +69,22 @@
+
+
+
+
startActivity(new Intent(this, ActivityAbout.class)),
R.id.nav_nearby, this::openNearbyStopsFragment
+ /*R.id.drawer_action_backup, () -> //this was for another action
+ startActivity(new Intent(this, ActivityBackup.class))*/
+
);
diff --git a/app/src/main/java/it/reyboz/bustorino/ActivitySettings.java b/app/src/main/java/it/reyboz/bustorino/ActivitySettings.java
--- a/app/src/main/java/it/reyboz/bustorino/ActivitySettings.java
+++ b/app/src/main/java/it/reyboz/bustorino/ActivitySettings.java
@@ -1,7 +1,6 @@
package it.reyboz.bustorino;
import android.os.Bundle;
-import android.view.ViewGroup;
import androidx.appcompat.widget.Toolbar;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
@@ -9,7 +8,6 @@
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction;
import androidx.appcompat.app.ActionBar;
-import androidx.appcompat.app.AppCompatActivity;
import android.util.Log;
import it.reyboz.bustorino.fragments.SettingsFragment;
import it.reyboz.bustorino.middleware.GeneralActivity;
diff --git a/app/src/main/java/it/reyboz/bustorino/fragments/BackupImportFragment.kt b/app/src/main/java/it/reyboz/bustorino/fragments/BackupImportFragment.kt
--- a/app/src/main/java/it/reyboz/bustorino/fragments/BackupImportFragment.kt
+++ b/app/src/main/java/it/reyboz/bustorino/fragments/BackupImportFragment.kt
@@ -34,6 +34,7 @@
import de.siegmar.fastcsv.writer.CsvWriter
import it.reyboz.bustorino.R
import it.reyboz.bustorino.data.PreferencesHolder
+import it.reyboz.bustorino.data.PreferencesHolder.PREF_FAVORITE_LINES
import it.reyboz.bustorino.data.UserDB
import it.reyboz.bustorino.util.ImportExport
import java.io.*
@@ -240,8 +241,12 @@
val pref = PreferencesHolder.getMainSharedPreferences(context)
//In the future, if we move the favorite lines to a different file,
// We should check here if the key is in the jsonObject, and copy it to the other file
- ImportExport.importJsonToSharedPreferences(pref, jsonString, PreferencesHolder.IGNORE_KEYS_LOAD_MAIN, null,
- PreferencesHolder.KEYS_MERGE_SET)
+ //ImportExport.importJsonToSharedPreferences(pref, jsonString, PreferencesHolder.IGNORE_KEYS_LOAD_MAIN, null,
+ // PreferencesHolder.KEYS_MERGE_SET)
+ val mSet = setOf(PREF_FAVORITE_LINES)
+ ImportExport.importJsonToPreferencesWhitelist(pref, jsonString,
+ mSet, null,mSet
+ )
} catch (e: Exception){
Log.e(DEBUG_TAG, "Cannot read main preferences from file")
e.printStackTrace()
diff --git a/app/src/main/java/it/reyboz/bustorino/util/ImportExport.kt b/app/src/main/java/it/reyboz/bustorino/util/ImportExport.kt
--- a/app/src/main/java/it/reyboz/bustorino/util/ImportExport.kt
+++ b/app/src/main/java/it/reyboz/bustorino/util/ImportExport.kt
@@ -122,7 +122,7 @@
is JSONArray -> { // Handle arrays
val set = mutableSetOf()
if (mergeSetKeys.contains(key))
- sharedPreferences.getStringSet(key, mutableSetOf())?.let { set.addAll(it) }
+ sharedPreferences.getStringSet(key, null)?.let { set.addAll(it) }
for (i in 0 until value.length()) {
set.add(value.optString(i))
}
@@ -140,6 +140,57 @@
return 0
}
+ fun importJsonToPreferencesWhitelist(sharedPreferences: SharedPreferences,
+ allJsonAsString: String,
+ desiredKeys: Set?,
+ desiredKeyRegex: Regex?,
+ mergeSetKeys: Set
+ ): Int {
+ val jsonObject = JSONObject(allJsonAsString)
+
+ try {
+ val editor = sharedPreferences.edit()
+ jsonObject.keys().forEach { key ->
+ // Logica di inclusione:
+ // Se entrambi i filtri sono null, consideriamo tutte le chiavi desiderate.
+ // Altrimenti, la chiave deve trovarsi nel set oppure corrispondere alla regex.
+ val isDesired = when {
+ desiredKeys == null && desiredKeyRegex == null -> true
+ desiredKeys?.contains(key) == true -> true
+ desiredKeyRegex?.containsMatchIn(key) == true -> true
+ else -> false
+ }
+
+ if (!isDesired) return@forEach
+
+ val value = jsonObject.opt(key)
+ when (value) {
+ is Boolean -> editor.putBoolean(key, value)
+ is Int -> editor.putInt(key, value)
+ is Long -> editor.putLong(key, value)
+ is Float -> editor.putFloat(key, value)
+ is String -> editor.putString(key, value)
+ is JSONArray -> {
+ val set = mutableSetOf()
+ if (mergeSetKeys.contains(key)) {
+ sharedPreferences.getStringSet(key, null)?.let { set.addAll(it) }
+ }
+ for (i in 0 until value.length()) {
+ set.add(value.optString(i))
+ }
+ editor.putStringSet(key, set)
+ }
+ }
+ }
+ editor.apply()
+ } catch (e: Exception) {
+ Log.e(TAG, "Cannot write sharedPreferences")
+ e.printStackTrace()
+ return -1
+ }
+ return 0
+ }
+
fun writeSharedPreferencesIntoJSON(sharedPreferences: SharedPreferences): JSONObject{
val allEntries: Map = sharedPreferences.all
diff --git a/app/src/main/res/drawable/ic_backup_solid.xml b/app/src/main/res/drawable/ic_backup_solid.xml
new file mode 100644
--- /dev/null
+++ b/app/src/main/res/drawable/ic_backup_solid.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
diff --git a/app/src/main/res/layout/fragment_backup.xml b/app/src/main/res/layout/fragment_backup.xml
--- a/app/src/main/res/layout/fragment_backup.xml
+++ b/app/src/main/res/layout/fragment_backup.xml
@@ -1,24 +1,28 @@
-
-
+
-
+
-
-
+
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml
--- a/app/src/main/res/values-it/strings.xml
+++ b/app/src/main/res/values-it/strings.xml
@@ -223,6 +223,7 @@
Backup e ripristinoDati salvatiBackup
+ Salva tutte le impostazioni con le fermate e le linee preferite in un file locale, come backup oppure per condivisione tra dispositivi o con altri utenti.RipristinoBackup completatoSalva o ripristina i dati
@@ -230,8 +231,8 @@
Importa i dati dal backupBackup importatoSeleziona almeno un elemento da importare!
- Importa preferiti dal backup
- Importa preferenze dal backup
+ Importa fermate e linee preferite dal backup
+ Importa tutte le impostazioni dal backupNessuna app disponibile per mostrare la fermata!Destinazione sconosciutaDirezione giĆ selezionata
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -381,14 +381,15 @@
RestoreBackup or restore data
+ Save all the application settings and favorites into a local zip file, to do a backup or share with others.Data savedBackup completedBackup to fileImport data from backupBackup has been importedCheck at least one item to import!
- Import favorites from backup
- Import preferences from backup
+ Import favorites stops and lines from backup
+ Import all preferences from backupHello blank fragment