Page Menu
Home
GitPull.it
Search
Configure Global Search
Log In
Files
F15144391
D266.1792503285.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Award Token
Flag For Later
Authored By
Unknown
Size
21 KB
Referenced Files
None
Subscribers
None
D266.1792503285.diff
View Options
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">
- <activity
- android:name=".ActivityBackup"
- android:label="@string/backup_restore"
- android:parentActivityName=".ActivityPrincipal"
- android:theme="@style/BackupTheme"
- android:exported="false"/>
- <activity
- android:name=".ActivityIntro"
- android:exported="false"
- android:theme="@style/AppThemeIntro"
- />
- <activity
- android:name=".ActivityExperiments"
- android:label="@string/experiments"
- android:theme="@style/MapTheme">
- </activity>
<activity
android:name=".ActivityPrincipal"
android:exported="true"
+ android:launchMode="singleTop"
android:label="@string/app_name"
android:screenOrientation="portrait"
android:windowSoftInputMode="adjustResize">
@@ -74,7 +59,7 @@
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
- <intent-filter>
+ <intent-filter android:autoVerify="true">
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>
@@ -84,6 +69,22 @@
<data android:pathPrefix="/cms/percorari/arrivi" />
</intent-filter>
</activity>
+ <activity
+ android:name=".ActivityBackup"
+ android:label="@string/backup_restore"
+ android:parentActivityName=".ActivityPrincipal"
+ android:theme="@style/BackupTheme"
+ android:exported="false"/>
+ <activity
+ android:name=".ActivityIntro"
+ android:exported="false"
+ android:theme="@style/AppThemeIntro"
+ />
+ <activity
+ android:name=".ActivityExperiments"
+ android:label="@string/experiments"
+ android:theme="@style/MapTheme">
+ </activity>
<activity
android:name=".ActivityAbout"
android:label="@string/about_activity"
diff --git a/app/src/main/java/it/reyboz/bustorino/ActivityAbout.kt b/app/src/main/java/it/reyboz/bustorino/ActivityAbout.kt
--- a/app/src/main/java/it/reyboz/bustorino/ActivityAbout.kt
+++ b/app/src/main/java/it/reyboz/bustorino/ActivityAbout.kt
@@ -35,8 +35,9 @@
import androidx.core.view.updatePadding
import it.reyboz.bustorino.backend.utils
import it.reyboz.bustorino.middleware.BarcodeScanUtils
+import it.reyboz.bustorino.middleware.GeneralActivity
-class ActivityAbout : AppCompatActivity() {
+class ActivityAbout : GeneralActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_about)
diff --git a/app/src/main/java/it/reyboz/bustorino/ActivityBackup.kt b/app/src/main/java/it/reyboz/bustorino/ActivityBackup.kt
--- a/app/src/main/java/it/reyboz/bustorino/ActivityBackup.kt
+++ b/app/src/main/java/it/reyboz/bustorino/ActivityBackup.kt
@@ -1,14 +1,17 @@
package it.reyboz.bustorino
import android.os.Bundle
+import android.view.MenuItem
import android.view.View
import androidx.appcompat.widget.Toolbar
+import androidx.core.app.NavUtils
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
import androidx.core.view.updatePadding
import it.reyboz.bustorino.fragments.BackupImportFragment
import it.reyboz.bustorino.middleware.GeneralActivity
+
class ActivityBackup : GeneralActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
@@ -18,10 +21,8 @@
setSupportActionBar(mToolbar)
val actionBar = supportActionBar
- if (actionBar != null) {
- actionBar.setDisplayHomeAsUpEnabled(true)
- //actionBar.setIcon(R.drawable.ic_launcher)
- }
+ actionBar?.setDisplayHomeAsUpEnabled(true)
+
if (savedInstanceState == null) {
supportFragmentManager.beginTransaction()
.setReorderingAllowed(true)
diff --git a/app/src/main/java/it/reyboz/bustorino/ActivityPrincipal.java b/app/src/main/java/it/reyboz/bustorino/ActivityPrincipal.java
--- a/app/src/main/java/it/reyboz/bustorino/ActivityPrincipal.java
+++ b/app/src/main/java/it/reyboz/bustorino/ActivityPrincipal.java
@@ -118,7 +118,10 @@
R.id.drawer_action_info, () ->
startActivity(new Intent(this, ActivityAbout.class)),
- R.id.nav_nearby, this::openNearbyStopsFragment
+ R.id.nav_nearby, this::openNearbyStopsFragment,
+ R.id.drawer_action_backup, () ->
+ 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<String>()
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<String>?,
+ desiredKeyRegex: Regex?,
+ mergeSetKeys: Set<String>
+ ): 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<String>()
+ 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<String?, *> = 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 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="36dp"
+ android:height="36dp"
+ android:viewportWidth="36"
+ android:viewportHeight="36">
+ <path
+ android:pathData="M2,24v6a2,2 0,0 0,2 2h28a2,2 0,0 0,2 -2v-6ZM30,29h-4v-2h4Z"
+ android:fillColor="#000"/>
+ <path
+ android:pathData="M30.84,13.37A1.94,1.94 0,0 0,28.93 12H21v6a3,3 0,1 1,-6 0v-6H7.07a1.92,1.92 0,0 0,-1.9 1.32c-2.31,6.36 -2.93,8.11 -3.1,8.68h31.86c-0.16,-0.57 -0.79,-2.31 -3.09,-8.63"
+ android:fillColor="#000"/>
+ <path
+ android:pathData="M13,9.92L17,6v12a1,1 0,1 0,2 0V6l4,3.95a1,1 0,1 0,1.38 -1.45L18,2.16L11.61,8.5A1,1 0,0 0,13 9.92"
+ android:fillColor="#000"/>
+</vector>
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 @@
<?xml version="1.0" encoding="utf-8"?>
-<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".fragments.BackupImportFragment"
- android:padding="10dp"
- android:paddingEnd="5dp"
- android:paddingStart="5dp"
+ android:padding="10dp"
+ android:paddingEnd="2dp"
+ android:paddingStart="2dp"
+ android:orientation="vertical"
>
- <androidx.cardview.widget.CardView
+ <com.google.android.material.card.MaterialCardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:id="@+id/topPartCardView"
- app:cardElevation="5dp"
+ app:cardBackgroundColor="@color/card_background"
app:cardCornerRadius="10dp"
- android:layout_alignParentStart="true"
- android:layout_alignParentEnd="true"
- android:layout_margin="5dp"
+ app:strokeColor="@color/card_border"
+ app:strokeWidth="1dp"
+ app:cardElevation="3dp"
+ android:layout_marginStart="5dp"
+ android:layout_marginEnd="5dp"
+ android:layout_marginTop="5dp"
android:layout_marginBottom="10dp"
>
<androidx.constraintlayout.widget.ConstraintLayout
@@ -30,7 +34,10 @@
android:layout_height="wrap_content"
android:fontFamily="@font/lato_bold"
android:text="@string/backup_title"
- android:textSize="22sp"
+ android:textSize="24sp"
+ android:layout_marginStart="20dp"
+ android:layout_marginEnd="20dp"
+ android:layout_marginTop="5dp"
android:id="@+id/backupTitleText"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
@@ -55,19 +62,25 @@
/>
</androidx.constraintlayout.widget.ConstraintLayout>
- </androidx.cardview.widget.CardView>
+ </com.google.android.material.card.MaterialCardView>
- <androidx.cardview.widget.CardView
+ <com.google.android.material.card.MaterialCardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/bottomPartCardview"
android:layout_below="@id/topPartCardView"
android:layout_alignParentStart="true"
android:layout_alignParentEnd="true"
- app:cardElevation="2dp"
+ app:cardBackgroundColor="@color/card_background"
app:cardCornerRadius="10dp"
- android:layout_margin="5dp"
+ app:strokeColor="@color/card_border"
+ app:strokeWidth="1dp"
+ app:cardElevation="3dp"
+ android:layout_marginStart="5dp"
+ android:layout_marginEnd="5dp"
+ android:layout_marginTop="5dp"
+ android:layout_marginBottom="10dp"
>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
@@ -78,7 +91,10 @@
android:layout_height="wrap_content"
android:fontFamily="@font/lato_bold"
android:text="@string/restore_title"
- android:textSize="22sp"
+ android:textSize="24sp"
+ android:layout_marginTop="5dp"
+ android:layout_marginStart="20dp"
+ android:layout_marginEnd="20dp"
android:id="@+id/restoreTitleText"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
@@ -90,29 +106,30 @@
<CheckBox
android:text="@string/load_file_favorites"
- android:layout_width="wrap_content"
+ android:layout_width="0dp"
android:checked="true"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/restoreTitleText"
app:layout_constraintBottom_toTopOf="@id/preferencesCheckBox"
app:layout_constraintHorizontal_bias="0.0"
- android:layout_marginStart="15dp"
android:minHeight="48dp"
+ android:layout_marginStart="10dp"
+ android:layout_marginEnd="10dp"
android:layout_height="wrap_content"
android:id="@+id/favoritesCheckBox"/>
<CheckBox
android:text="@string/load_preferences"
- android:layout_width="wrap_content"
+ android:layout_width="0dp"
android:checked="true"
app:layout_constraintTop_toBottomOf="@id/favoritesCheckBox"
app:layout_constraintBottom_toTopOf="@id/loadDataButton"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintHorizontal_bias="0.0"
- android:layout_marginStart="15dp"
android:minHeight="48dp"
android:layout_marginTop="8dp"
-
+ android:layout_marginStart="10dp"
+ android:layout_marginEnd="10dp"
android:layout_height="wrap_content" android:id="@+id/preferencesCheckBox"/>
<Button
android:text="@string/btn_load_backup_message"
@@ -129,6 +146,6 @@
/>
</androidx.constraintlayout.widget.ConstraintLayout>
- </androidx.cardview.widget.CardView>
+ </com.google.android.material.card.MaterialCardView>
-</RelativeLayout>
\ No newline at end of file
+</LinearLayout>
\ No newline at end of file
diff --git a/app/src/main/res/menu/drawer_main.xml b/app/src/main/res/menu/drawer_main.xml
--- a/app/src/main/res/menu/drawer_main.xml
+++ b/app/src/main/res/menu/drawer_main.xml
@@ -25,6 +25,11 @@
/>
</group>
+ <item android:id="@+id/drawer_action_backup"
+ android:icon="@drawable/ic_backup_solid"
+ android:title="@string/backup_restore"
+ />
+
<item android:id="@+id/drawer_action_settings"
android:title="@string/action_settings"
android:icon="@drawable/ic_baseline_settings_24"
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
@@ -230,8 +230,8 @@
<string name="btn_load_backup_message">Importa i dati dal backup</string>
<string name="data_imported_backup">Backup importato</string>
<string name="message_check_at_least_one">Seleziona almeno un elemento da importare!</string>
- <string name="load_file_favorites">Importa preferiti dal backup</string>
- <string name="load_preferences">Importa preferenze dal backup</string>
+ <string name="load_file_favorites">Importa fermate e linee preferite dal backup</string>
+ <string name="load_preferences">Importa tutte le impostazioni dal backup</string>
<string name="no_map_app_to_show_stop">Nessuna app disponibile per mostrare la fermata!</string>
<string name="destination_unknown">Destinazione sconosciuta</string>
<string name="showing_same_direction">Direzione già selezionata</string>
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
@@ -387,8 +387,8 @@
<string name="btn_load_backup_message">Import data from backup</string>
<string name="data_imported_backup">Backup has been imported</string>
<string name="message_check_at_least_one">Check at least one item to import!</string>
- <string name="load_file_favorites">Import favorites from backup</string>
- <string name="load_preferences">Import preferences from backup</string>
+ <string name="load_file_favorites">Import favorites stops and lines from backup</string>
+ <string name="load_preferences">Import all preferences from backup</string>
<!-- TODO: Remove or change this placeholder text -->
<string name="hello_blank_fragment">Hello blank fragment</string>
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Tue, Oct 20, 15:34 (7 h, 1 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
2256055
Default Alt Text
D266.1792503285.diff (21 KB)
Attached To
Mode
D266: Improve design of backup screen, fix issues with child activities
Attached
Detach File
Event Timeline