Browse Source

settings backup/restore

tags/v1.0.0
Robin Thoni 7 years ago
parent
commit
55712cb490

+ 1
- 0
app/build.gradle View File

33
     compile 'net.danlew:android.joda:2.9.4.2'
33
     compile 'net.danlew:android.joda:2.9.4.2'
34
     compile 'com.google.firebase:firebase-ads:9.6.1'
34
     compile 'com.google.firebase:firebase-ads:9.6.1'
35
     compile 'com.facebook.android:facebook-android-sdk:4.5.0'
35
     compile 'com.facebook.android:facebook-android-sdk:4.5.0'
36
+    compile 'com.github.simbiose:Encryption:1.4.0'
36
 }
37
 }
37
 
38
 
38
 apply plugin: 'com.google.gms.google-services'
39
 apply plugin: 'com.google.gms.google-services'

+ 19
- 6
app/src/main/java/com/rthoni/stssaguenay/business/STSBusiness.java View File

4
 
4
 
5
 import com.luticate.utils.dbo.LuDataAccessConfigDbo;
5
 import com.luticate.utils.dbo.LuDataAccessConfigDbo;
6
 import com.rthoni.stssaguenay.dataaccess.STSDataAccess;
6
 import com.rthoni.stssaguenay.dataaccess.STSDataAccess;
7
-import com.rthoni.stssaguenay.dbo.FavouriteStopDbo;
7
+import com.rthoni.stssaguenay.dbo.UserFavouriteStopsDbo;
8
 import com.rthoni.stssaguenay.dbo.UserDbo;
8
 import com.rthoni.stssaguenay.dbo.UserDbo;
9
+import com.rthoni.stssaguenay.dbo.UsersSettingsDbo;
9
 
10
 
10
 import org.json.JSONArray;
11
 import org.json.JSONArray;
11
 import org.json.JSONException;
12
 import org.json.JSONException;
30
         return _config;
31
         return _config;
31
     }
32
     }
32
 
33
 
33
-    public static List<FavouriteStopDbo> getFavouriteStops(Context ctx)
34
+    public static List<UserFavouriteStopsDbo> getFavouriteStops(Context ctx)
34
     {
35
     {
35
         String str = STSDataAccess.getFavouriteStopsJson(ctx);
36
         String str = STSDataAccess.getFavouriteStopsJson(ctx);
36
-        List<FavouriteStopDbo> dbos = new Vector<>();
37
+        List<UserFavouriteStopsDbo> dbos = new Vector<>();
37
         JSONArray json;
38
         JSONArray json;
38
         try {
39
         try {
39
             json = new JSONArray(str);
40
             json = new JSONArray(str);
40
             for (int i = 0; i < json.length(); ++i) {
41
             for (int i = 0; i < json.length(); ++i) {
41
-                FavouriteStopDbo dbo = new FavouriteStopDbo();
42
+                UserFavouriteStopsDbo dbo = new UserFavouriteStopsDbo();
42
                 dbo.fromJson(json.getJSONObject(i));
43
                 dbo.fromJson(json.getJSONObject(i));
43
                 dbos.add(dbo);
44
                 dbos.add(dbo);
44
             }
45
             }
48
         return dbos;
49
         return dbos;
49
     }
50
     }
50
 
51
 
51
-    public static void setFavouriteStops(Context ctx, List<FavouriteStopDbo> favourites)
52
+    public static void setFavouriteStops(Context ctx, List<UserFavouriteStopsDbo> favourites)
52
     {
53
     {
53
         JSONArray json = new JSONArray();
54
         JSONArray json = new JSONArray();
54
-        for (FavouriteStopDbo favouriteStopDbo : favourites) {
55
+        for (UserFavouriteStopsDbo favouriteStopDbo : favourites) {
55
             json.put(new JSONObject(favouriteStopDbo.toArray()));
56
             json.put(new JSONObject(favouriteStopDbo.toArray()));
56
         }
57
         }
57
         STSDataAccess.setFavouriteStopsJson(ctx, json.toString());
58
         STSDataAccess.setFavouriteStopsJson(ctx, json.toString());
81
             STSDataAccess.setLoggedUserJson(ctx, user.toString());
82
             STSDataAccess.setLoggedUserJson(ctx, user.toString());
82
         }
83
         }
83
     }
84
     }
85
+
86
+    public static UsersSettingsDbo getUserSettings(Context ctx)
87
+    {
88
+        UsersSettingsDbo settingsDbo = new UsersSettingsDbo();
89
+        settingsDbo.setFavouriteStops(getFavouriteStops(ctx));
90
+        return settingsDbo;
91
+    }
92
+
93
+    public static void setUserSettings(Context ctx, UsersSettingsDbo settingsDbo)
94
+    {
95
+        setFavouriteStops(ctx, settingsDbo.getFavouriteStops());
96
+    }
84
 }
97
 }

+ 2
- 2
app/src/main/java/com/rthoni/stssaguenay/business/SchedulesBusiness.java View File

3
 import com.luticate.utils.business.LuPromise;
3
 import com.luticate.utils.business.LuPromise;
4
 import com.luticate.utils.dbo.LuDataAccessConfigDbo;
4
 import com.luticate.utils.dbo.LuDataAccessConfigDbo;
5
 import com.rthoni.stssaguenay.dataaccess.SchedulesDataAccess;
5
 import com.rthoni.stssaguenay.dataaccess.SchedulesDataAccess;
6
-import com.rthoni.stssaguenay.dbo.FavouriteStopDbo;
6
+import com.rthoni.stssaguenay.dbo.UserFavouriteStopsDbo;
7
 import com.rthoni.stssaguenay.dbo.SchedulesDbo;
7
 import com.rthoni.stssaguenay.dbo.SchedulesDbo;
8
 
8
 
9
 import org.joda.time.LocalDateTime;
9
 import org.joda.time.LocalDateTime;
16
 
16
 
17
 public class SchedulesBusiness {
17
 public class SchedulesBusiness {
18
 
18
 
19
-    public static LuPromise<List<SchedulesDbo>> getMultiple(LuDataAccessConfigDbo config, List<FavouriteStopDbo> favouriteStopDbos, LocalDateTime date, int count)
19
+    public static LuPromise<List<SchedulesDbo>> getMultiple(LuDataAccessConfigDbo config, List<UserFavouriteStopsDbo> favouriteStopDbos, LocalDateTime date, int count)
20
     {
20
     {
21
         return SchedulesDataAccess.getMultiple(config, favouriteStopDbos, date, count);
21
         return SchedulesDataAccess.getMultiple(config, favouriteStopDbos, date, count);
22
     }
22
     }

+ 49
- 0
app/src/main/java/com/rthoni/stssaguenay/business/UsersSettingsBusiness.java View File

1
+package com.rthoni.stssaguenay.business;
2
+
3
+import com.luticate.utils.business.LuPromise;
4
+import com.luticate.utils.dbo.LuDataAccessConfigDbo;
5
+import com.luticate.utils.dbo.LuVoidDbo;
6
+import com.rthoni.stssaguenay.dataaccess.UsersSettingsDataAccess;
7
+import com.rthoni.stssaguenay.dbo.UsersSettingsDbo;
8
+
9
+import org.json.JSONException;
10
+import org.json.JSONObject;
11
+
12
+/**
13
+ * Created by robin on 10/3/16.
14
+ */
15
+
16
+public class UsersSettingsBusiness {
17
+
18
+    public static String encryptSettings(UsersSettingsDbo settingsDbo, String password)
19
+    {
20
+        return UsersSettingsDataAccess.encryptSettings(settingsDbo.toString(), password);
21
+    }
22
+
23
+    public static UsersSettingsDbo decryptSettings(String data, String password)
24
+    {
25
+        data = UsersSettingsDataAccess.decryptSettings(data, password);
26
+        if (data == null) {
27
+            return null;
28
+        }
29
+
30
+        UsersSettingsDbo settings = new UsersSettingsDbo();
31
+        try {
32
+            settings.fromJson(new JSONObject(data));
33
+        } catch (JSONException e) {
34
+            e.printStackTrace();
35
+            return null;
36
+        }
37
+        return settings;
38
+    }
39
+
40
+    public static LuPromise<String> get(LuDataAccessConfigDbo config, String id)
41
+    {
42
+        return UsersSettingsDataAccess.get(config, id);
43
+    }
44
+
45
+    public static LuPromise<LuVoidDbo> put(LuDataAccessConfigDbo config, String data, String id)
46
+    {
47
+        return UsersSettingsDataAccess.put(config, data, id);
48
+    }
49
+}

+ 3
- 3
app/src/main/java/com/rthoni/stssaguenay/dataaccess/SchedulesDataAccess.java View File

3
 import com.luticate.utils.business.LuPromise;
3
 import com.luticate.utils.business.LuPromise;
4
 import com.luticate.utils.business.LuRequest;
4
 import com.luticate.utils.business.LuRequest;
5
 import com.luticate.utils.dbo.LuDataAccessConfigDbo;
5
 import com.luticate.utils.dbo.LuDataAccessConfigDbo;
6
-import com.rthoni.stssaguenay.dbo.FavouriteStopDbo;
6
+import com.rthoni.stssaguenay.dbo.UserFavouriteStopsDbo;
7
 import com.rthoni.stssaguenay.dbo.RoutesDbo;
7
 import com.rthoni.stssaguenay.dbo.RoutesDbo;
8
 import com.rthoni.stssaguenay.dbo.SchedulesDbo;
8
 import com.rthoni.stssaguenay.dbo.SchedulesDbo;
9
 
9
 
21
 
21
 
22
 public class SchedulesDataAccess {
22
 public class SchedulesDataAccess {
23
 
23
 
24
-    public static LuPromise<List<SchedulesDbo>> getMultiple(LuDataAccessConfigDbo config, List<FavouriteStopDbo> favouriteStopDbos, LocalDateTime date, int count)
24
+    public static LuPromise<List<SchedulesDbo>> getMultiple(LuDataAccessConfigDbo config, List<UserFavouriteStopsDbo> favouriteStopDbos, LocalDateTime date, int count)
25
     {
25
     {
26
         HashMap<String, String> map = new HashMap<>();
26
         HashMap<String, String> map = new HashMap<>();
27
         map.put("count", Integer.toString(count));
27
         map.put("count", Integer.toString(count));
28
         map.put("date", JSONObject.quote(date.toString("y-M-d HH:mm:ss")));
28
         map.put("date", JSONObject.quote(date.toString("y-M-d HH:mm:ss")));
29
 
29
 
30
         JSONArray stops = new JSONArray();
30
         JSONArray stops = new JSONArray();
31
-        for (FavouriteStopDbo dbo : favouriteStopDbos) {
31
+        for (UserFavouriteStopsDbo dbo : favouriteStopDbos) {
32
             for (RoutesDbo routesDbo : dbo.getRoutes()) {
32
             for (RoutesDbo routesDbo : dbo.getRoutes()) {
33
                 JSONObject obj = new JSONObject();
33
                 JSONObject obj = new JSONObject();
34
                 try {
34
                 try {

+ 63
- 0
app/src/main/java/com/rthoni/stssaguenay/dataaccess/UsersSettingsDataAccess.java View File

1
+package com.rthoni.stssaguenay.dataaccess;
2
+
3
+import com.luticate.utils.business.LuPromise;
4
+import com.luticate.utils.business.LuRequest;
5
+import com.luticate.utils.dbo.LuBoolDbo;
6
+import com.luticate.utils.dbo.LuDataAccessConfigDbo;
7
+import com.luticate.utils.dbo.LuStringDbo;
8
+import com.luticate.utils.dbo.LuVoidDbo;
9
+
10
+import org.json.JSONObject;
11
+
12
+import java.util.HashMap;
13
+
14
+import se.simbio.encryption.Encryption;
15
+
16
+/**
17
+ * Created by robin on 10/3/16.
18
+ */
19
+
20
+public class UsersSettingsDataAccess {
21
+
22
+    public static Encryption getEncryption(String password)
23
+    {
24
+        return Encryption.getLowIteration(password, "9oCpOJ", "mCX36TazPeC70LfN".getBytes());
25
+    }
26
+
27
+    public static String encryptSettings(String settings, String password)
28
+    {
29
+        return getEncryption(password).encryptOrNull(settings);
30
+    }
31
+
32
+    public static String decryptSettings(String data, String password)
33
+    {
34
+        return getEncryption(password).decryptOrNull(data);
35
+    }
36
+
37
+    public static LuPromise<String> get(LuDataAccessConfigDbo config, String id)
38
+    {
39
+        HashMap<String, String> map = new HashMap<>();
40
+        map.put("id", JSONObject.quote(id));
41
+        return LuRequest.get(config, LuStringDbo.class, "users/settings", map)
42
+                .map(new LuPromise.LuConverter<LuStringDbo, String>() {
43
+                    @Override
44
+                    public String convert(LuStringDbo data) {
45
+                        return data.getString();
46
+                    }
47
+                });
48
+    }
49
+
50
+    public static LuPromise<LuVoidDbo> put(LuDataAccessConfigDbo config, String data, String id)
51
+    {
52
+        HashMap<String, String> map = new HashMap<>();
53
+        map.put("id", JSONObject.quote(id));
54
+        map.put("settings", JSONObject.quote(data));
55
+        return LuRequest.post(config, LuBoolDbo.class, "users/settings", map)
56
+                .map(new LuPromise.LuConverter<LuBoolDbo, LuVoidDbo>() {
57
+                    @Override
58
+                    public LuVoidDbo convert(LuBoolDbo data) {
59
+                        return new LuVoidDbo();
60
+                    }
61
+                });
62
+    }
63
+}

app/src/main/java/com/rthoni/stssaguenay/dbo/FavouriteStopDbo.java → app/src/main/java/com/rthoni/stssaguenay/dbo/UserFavouriteStopsDbo.java View File

14
  * Created by robin on 10/1/16.
14
  * Created by robin on 10/1/16.
15
  */
15
  */
16
 
16
 
17
-public class FavouriteStopDbo extends LuDbo {
17
+public class UserFavouriteStopsDbo extends LuDbo {
18
 
18
 
19
     protected StopsDbo _stop;
19
     protected StopsDbo _stop;
20
 
20
 
21
     protected List<RoutesDbo> _routes;
21
     protected List<RoutesDbo> _routes;
22
 
22
 
23
+    protected String _name;
24
+
23
     @Override
25
     @Override
24
     public void fromJson(JSONObject json) throws JSONException {
26
     public void fromJson(JSONObject json) throws JSONException {
25
         _stop = new StopsDbo();
27
         _stop = new StopsDbo();
31
             route.fromJson(routes.getJSONObject(i));
33
             route.fromJson(routes.getJSONObject(i));
32
             _routes.add(route);
34
             _routes.add(route);
33
         }
35
         }
36
+        _name = json.getString("name");
34
     }
37
     }
35
 
38
 
36
     @Override
39
     @Override
42
             routes.add(route.toArray());
45
             routes.add(route.toArray());
43
         }
46
         }
44
         map.put("routes", routes);
47
         map.put("routes", routes);
48
+        map.put("name", _name);
45
         return map;
49
         return map;
46
     }
50
     }
47
 
51
 
60
     public void setRoutes(List<RoutesDbo> routes) {
64
     public void setRoutes(List<RoutesDbo> routes) {
61
         _routes = routes;
65
         _routes = routes;
62
     }
66
     }
67
+
68
+    public String getName() {
69
+        return _name;
70
+    }
71
+
72
+    public void setName(String name) {
73
+        _name = name;
74
+    }
75
+
76
+    public String getCustomName()
77
+    {
78
+        if (_name != null && !_name.isEmpty()) {
79
+            return _name;
80
+        }
81
+        return _stop.getName();
82
+    }
63
 }
83
 }

+ 49
- 0
app/src/main/java/com/rthoni/stssaguenay/dbo/UsersSettingsDbo.java View File

1
+package com.rthoni.stssaguenay.dbo;
2
+
3
+import com.luticate.utils.dbo.LuDbo;
4
+
5
+import org.json.JSONArray;
6
+import org.json.JSONException;
7
+import org.json.JSONObject;
8
+
9
+import java.util.HashMap;
10
+import java.util.List;
11
+import java.util.Vector;
12
+
13
+/**
14
+ * Created by robin on 10/3/16.
15
+ */
16
+
17
+public class UsersSettingsDbo extends LuDbo {
18
+    protected List<UserFavouriteStopsDbo> _favouriteStops;
19
+
20
+    @Override
21
+    public void fromJson(JSONObject json) throws JSONException {
22
+        _favouriteStops = new Vector<>();
23
+        JSONArray stops = json.getJSONArray("favouriteStops");
24
+        for (int i = 0; i < stops.length(); ++i) {
25
+            UserFavouriteStopsDbo stop = new UserFavouriteStopsDbo();
26
+            stop.fromJson(stops.getJSONObject(i));
27
+            _favouriteStops.add(stop);
28
+        }
29
+    }
30
+
31
+    @Override
32
+    public HashMap<String, Object> toArray() {
33
+        HashMap<String, Object> map = new HashMap<>();
34
+        List<HashMap<String, Object>> stops = new Vector<>();
35
+        for (UserFavouriteStopsDbo stop : _favouriteStops) {
36
+            stops.add(stop.toArray());
37
+        }
38
+        map.put("favouriteStops", stops);
39
+        return map;
40
+    }
41
+
42
+    public List<UserFavouriteStopsDbo> getFavouriteStops() {
43
+        return _favouriteStops;
44
+    }
45
+
46
+    public void setFavouriteStops(List<UserFavouriteStopsDbo> favouriteStops) {
47
+        _favouriteStops = favouriteStops;
48
+    }
49
+}

+ 127
- 5
app/src/main/java/com/rthoni/stssaguenay/ui/activities/MainActivity.java View File

1
 package com.rthoni.stssaguenay.ui.activities;
1
 package com.rthoni.stssaguenay.ui.activities;
2
 
2
 
3
+import android.app.ProgressDialog;
4
+import android.content.DialogInterface;
3
 import android.content.Intent;
5
 import android.content.Intent;
4
 import android.os.Bundle;
6
 import android.os.Bundle;
5
 import android.support.design.widget.FloatingActionButton;
7
 import android.support.design.widget.FloatingActionButton;
6
 import android.support.design.widget.NavigationView;
8
 import android.support.design.widget.NavigationView;
7
 import android.support.v4.widget.DrawerLayout;
9
 import android.support.v4.widget.DrawerLayout;
8
 import android.support.v7.app.ActionBarDrawerToggle;
10
 import android.support.v7.app.ActionBarDrawerToggle;
11
+import android.support.v7.app.AlertDialog;
9
 import android.support.v7.app.AppCompatActivity;
12
 import android.support.v7.app.AppCompatActivity;
10
 import android.support.v7.widget.Toolbar;
13
 import android.support.v7.widget.Toolbar;
14
+import android.text.InputType;
11
 import android.view.Menu;
15
 import android.view.Menu;
12
 import android.view.MenuItem;
16
 import android.view.MenuItem;
13
 import android.view.View;
17
 import android.view.View;
18
+import android.widget.EditText;
14
 import android.widget.TextView;
19
 import android.widget.TextView;
15
 import android.widget.Toast;
20
 import android.widget.Toast;
16
 
21
 
26
 import com.google.android.gms.ads.AdRequest;
31
 import com.google.android.gms.ads.AdRequest;
27
 import com.google.android.gms.ads.AdView;
32
 import com.google.android.gms.ads.AdView;
28
 import com.google.android.gms.ads.MobileAds;
33
 import com.google.android.gms.ads.MobileAds;
34
+import com.luticate.utils.business.LuPromise;
29
 import com.luticate.utils.business.LuRequest;
35
 import com.luticate.utils.business.LuRequest;
36
+import com.luticate.utils.dbo.LuVoidDbo;
30
 import com.rthoni.stssaguenay.R;
37
 import com.rthoni.stssaguenay.R;
31
 import com.rthoni.stssaguenay.business.STSBusiness;
38
 import com.rthoni.stssaguenay.business.STSBusiness;
32
-import com.rthoni.stssaguenay.dbo.FavouriteStopDbo;
39
+import com.rthoni.stssaguenay.business.UsersSettingsBusiness;
40
+import com.rthoni.stssaguenay.dbo.UserFavouriteStopsDbo;
33
 import com.rthoni.stssaguenay.dbo.UserDbo;
41
 import com.rthoni.stssaguenay.dbo.UserDbo;
42
+import com.rthoni.stssaguenay.dbo.UsersSettingsDbo;
34
 import com.rthoni.stssaguenay.ui.fragments.HomeFragment;
43
 import com.rthoni.stssaguenay.ui.fragments.HomeFragment;
35
 
44
 
36
 import org.json.JSONException;
45
 import org.json.JSONException;
175
     @Override
184
     @Override
176
     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
185
     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
177
         if (requestCode == ADD_FAVOURITE_STOP_REQUEST_CODE && resultCode == RESULT_OK) {
186
         if (requestCode == ADD_FAVOURITE_STOP_REQUEST_CODE && resultCode == RESULT_OK) {
178
-            FavouriteStopDbo favouriteStopDbo = new FavouriteStopDbo();
187
+            UserFavouriteStopsDbo favouriteStopDbo = new UserFavouriteStopsDbo();
179
             try {
188
             try {
180
                 JSONObject obj = new JSONObject(data.getStringExtra(StopPickerActivity.STOP_EXTRA_NAME));
189
                 JSONObject obj = new JSONObject(data.getStringExtra(StopPickerActivity.STOP_EXTRA_NAME));
181
                 favouriteStopDbo.fromJson(obj);
190
                 favouriteStopDbo.fromJson(obj);
183
                 e.printStackTrace();
192
                 e.printStackTrace();
184
                 return;
193
                 return;
185
             }
194
             }
186
-            List<FavouriteStopDbo> favouriteStopDbos = STSBusiness.getFavouriteStops(this);
195
+            List<UserFavouriteStopsDbo> favouriteStopDbos = STSBusiness.getFavouriteStops(this);
187
             favouriteStopDbos.add(favouriteStopDbo);
196
             favouriteStopDbos.add(favouriteStopDbo);
188
             STSBusiness.setFavouriteStops(this, favouriteStopDbos);
197
             STSBusiness.setFavouriteStops(this, favouriteStopDbos);
189
             _goToHome = true;
198
             _goToHome = true;
196
 
205
 
197
     @Override
206
     @Override
198
     public boolean onNavigationItemSelected(MenuItem item) {
207
     public boolean onNavigationItemSelected(MenuItem item) {
199
-        if (item.getItemId() == R.id.nav_logout) {
208
+        if (item.getItemId() == R.id.nav_restore) {
209
+            restoreSettings();
210
+        }
211
+        else if (item.getItemId() == R.id.nav_backup) {
212
+            backupSettings();
213
+        }
214
+        else if (item.getItemId() == R.id.nav_logout) {
200
             LoginManager.getInstance().logOut();
215
             LoginManager.getInstance().logOut();
201
             STSBusiness.setLoggedUser(this, null);
216
             STSBusiness.setLoggedUser(this, null);
202
             updateLoginState();
217
             updateLoginState();
203
         }
218
         }
204
-        return false;
219
+        else {
220
+            return false;
221
+        }
222
+        return true;
205
     }
223
     }
206
 
224
 
207
     public void updateLoginState()
225
     public void updateLoginState()
224
         STSBusiness.setLoggedUser(this, userDbo);
242
         STSBusiness.setLoggedUser(this, userDbo);
225
         updateLoginState();
243
         updateLoginState();
226
     }
244
     }
245
+
246
+    public LuPromise<String> askPassword(boolean encrypt)
247
+    {
248
+        final LuPromise<String> promise = new LuPromise<>();
249
+
250
+        AlertDialog.Builder builder = new AlertDialog.Builder(this);
251
+        builder.setTitle(R.string.encryption_password);
252
+        builder.setMessage(encrypt ? R.string.encryption_password_encrypt : R.string.encryption_password_decrypt);
253
+
254
+        final EditText input = new EditText(this);
255
+        input.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
256
+        builder.setView(input);
257
+
258
+        builder.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
259
+            @Override
260
+            public void onClick(DialogInterface dialog, int which) {
261
+                promise.resolve(input.getText().toString());
262
+            }
263
+        });
264
+        builder.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() {
265
+            @Override
266
+            public void onClick(DialogInterface dialog, int which) {
267
+                dialog.cancel();
268
+            }
269
+        });
270
+
271
+        builder.show();
272
+        return promise;
273
+    }
274
+
275
+    public void restoreSettings()
276
+    {
277
+        final ProgressDialog progressDialog = new ProgressDialog(MainActivity.this);
278
+        progressDialog.setIndeterminate(true);
279
+        progressDialog.setCancelable(false);
280
+        progressDialog.show();
281
+        progressDialog.setTitle(R.string.loading);
282
+        progressDialog.setMessage(getString(R.string.settings_restoring));
283
+
284
+        UserDbo user = STSBusiness.getLoggedUser(MainActivity.this);
285
+        UsersSettingsBusiness.get(STSBusiness.getConfig(), user.getId())
286
+                .then(new LuPromise.LuConsumer<String>() {
287
+                    @Override
288
+                    public void execute(final String data) {
289
+                        progressDialog.dismiss();
290
+                        if (data == null) {
291
+                            Toast.makeText(MainActivity.this, R.string.encryption_empty, Toast.LENGTH_LONG).show();
292
+                            return;
293
+                        }
294
+                        askPassword(false).then(new LuPromise.LuConsumer<String>() {
295
+                            @Override
296
+                            public void execute(String password) {
297
+                                UsersSettingsDbo settingsDbo = UsersSettingsBusiness.decryptSettings(data, password);
298
+                                if (settingsDbo == null) {
299
+                                    Toast.makeText(MainActivity.this, R.string.encryption_bad_password, Toast.LENGTH_LONG).show();
300
+                                }
301
+                                else {
302
+                                    Toast.makeText(MainActivity.this, R.string.settings_restored, Toast.LENGTH_LONG).show();
303
+                                    STSBusiness.setUserSettings(MainActivity.this, settingsDbo);
304
+                                    goToHome();
305
+                                }
306
+                            }
307
+                        });
308
+                    }
309
+                }, new LuPromise.LuConsumer<LuPromise.LuPromiseError>() {
310
+                    @Override
311
+                    public void execute(LuPromise.LuPromiseError data) {
312
+                        progressDialog.dismiss();
313
+                        Toast.makeText(MainActivity.this, data.toString(), Toast.LENGTH_LONG).show();
314
+                    }
315
+                });
316
+    }
317
+
318
+    public void backupSettings()
319
+    {
320
+        askPassword(true).then(new LuPromise.LuConsumer<String>() {
321
+            @Override
322
+            public void execute(String password) {
323
+                UserDbo user = STSBusiness.getLoggedUser(MainActivity.this);
324
+                UsersSettingsDbo settingsDbo = STSBusiness.getUserSettings(MainActivity.this);
325
+                String data = UsersSettingsBusiness.encryptSettings(settingsDbo, password);
326
+                final ProgressDialog progressDialog = new ProgressDialog(MainActivity.this);
327
+                progressDialog.setIndeterminate(true);
328
+                progressDialog.setCancelable(false);
329
+                progressDialog.show();
330
+                progressDialog.setTitle(R.string.loading);
331
+                progressDialog.setMessage(getString(R.string.settings_backing_up));
332
+                UsersSettingsBusiness.put(STSBusiness.getConfig(), data, user.getId())
333
+                        .then(new LuPromise.LuConsumer<LuVoidDbo>() {
334
+                            @Override
335
+                            public void execute(LuVoidDbo data) {
336
+                                progressDialog.dismiss();
337
+                                Toast.makeText(MainActivity.this, R.string.settings_backed_up, Toast.LENGTH_LONG).show();
338
+                            }
339
+                        }, new LuPromise.LuConsumer<LuPromise.LuPromiseError>() {
340
+                            @Override
341
+                            public void execute(LuPromise.LuPromiseError data) {
342
+                                progressDialog.dismiss();
343
+                                Toast.makeText(MainActivity.this, data.toString(), Toast.LENGTH_LONG).show();
344
+                            }
345
+                        });
346
+            }
347
+        });
348
+    }
227
 }
349
 }

+ 4
- 7
app/src/main/java/com/rthoni/stssaguenay/ui/activities/StopPickerActivity.java View File

10
 import com.google.android.gms.ads.MobileAds;
10
 import com.google.android.gms.ads.MobileAds;
11
 import com.luticate.utils.business.LuPromise;
11
 import com.luticate.utils.business.LuPromise;
12
 import com.rthoni.stssaguenay.R;
12
 import com.rthoni.stssaguenay.R;
13
-import com.rthoni.stssaguenay.dbo.FavouriteStopDbo;
14
-import com.rthoni.stssaguenay.dbo.RoutesDbo;
13
+import com.rthoni.stssaguenay.dbo.UserFavouriteStopsDbo;
15
 import com.rthoni.stssaguenay.dbo.StopsDbo;
14
 import com.rthoni.stssaguenay.dbo.StopsDbo;
16
 import com.rthoni.stssaguenay.ui.fragments.StopPickerFragment;
15
 import com.rthoni.stssaguenay.ui.fragments.StopPickerFragment;
17
 import com.rthoni.stssaguenay.ui.fragments.StopRoutesPickerFragment;
16
 import com.rthoni.stssaguenay.ui.fragments.StopRoutesPickerFragment;
18
 
17
 
19
-import java.util.List;
20
-
21
 public class StopPickerActivity extends AppCompatActivity {
18
 public class StopPickerActivity extends AppCompatActivity {
22
 
19
 
23
     public static String STOP_EXTRA_NAME = "STOP_EXTRA";
20
     public static String STOP_EXTRA_NAME = "STOP_EXTRA";
68
     {
65
     {
69
         StopRoutesPickerFragment f = new StopRoutesPickerFragment();
66
         StopRoutesPickerFragment f = new StopRoutesPickerFragment();
70
         f.setStopsDbo(stopDbo);
67
         f.setStopsDbo(stopDbo);
71
-        f.setOnRoutesSelected(new LuPromise.LuConsumer<FavouriteStopDbo>() {
68
+        f.setOnRoutesSelected(new LuPromise.LuConsumer<UserFavouriteStopsDbo>() {
72
             @Override
69
             @Override
73
-            public void execute(FavouriteStopDbo data) {
70
+            public void execute(UserFavouriteStopsDbo data) {
74
                 saveStop(data);
71
                 saveStop(data);
75
             }
72
             }
76
         });
73
         });
81
                 .commit();
78
                 .commit();
82
     }
79
     }
83
 
80
 
84
-    public void saveStop(FavouriteStopDbo favouriteStopDbo)
81
+    public void saveStop(UserFavouriteStopsDbo favouriteStopDbo)
85
     {
82
     {
86
         Intent result = new Intent();
83
         Intent result = new Intent();
87
         result.putExtra(STOP_EXTRA_NAME, favouriteStopDbo.toString());
84
         result.putExtra(STOP_EXTRA_NAME, favouriteStopDbo.toString());

+ 9
- 15
app/src/main/java/com/rthoni/stssaguenay/ui/fragments/HomeFragment.java View File

18
 import com.rthoni.stssaguenay.R;
18
 import com.rthoni.stssaguenay.R;
19
 import com.rthoni.stssaguenay.business.STSBusiness;
19
 import com.rthoni.stssaguenay.business.STSBusiness;
20
 import com.rthoni.stssaguenay.business.SchedulesBusiness;
20
 import com.rthoni.stssaguenay.business.SchedulesBusiness;
21
-import com.rthoni.stssaguenay.dbo.FavouriteStopDbo;
21
+import com.rthoni.stssaguenay.dbo.UserFavouriteStopsDbo;
22
 import com.rthoni.stssaguenay.dbo.SchedulesDbo;
22
 import com.rthoni.stssaguenay.dbo.SchedulesDbo;
23
 
23
 
24
-import org.joda.time.DateTime;
25
 import org.joda.time.DateTimeZone;
24
 import org.joda.time.DateTimeZone;
26
 import org.joda.time.LocalDateTime;
25
 import org.joda.time.LocalDateTime;
27
-import org.joda.time.format.DateTimeFormat;
28
-import org.joda.time.format.DateTimeFormatter;
29
 
26
 
30
-import java.util.Collection;
31
 import java.util.Collections;
27
 import java.util.Collections;
32
-import java.util.Comparator;
33
-import java.util.Date;
34
 import java.util.List;
28
 import java.util.List;
35
 import java.util.TimeZone;
29
 import java.util.TimeZone;
36
 import java.util.Vector;
30
 import java.util.Vector;
63
 
57
 
64
     public class FavouriteStopsAdapter extends RecyclerView.Adapter<ViewHolder> {
58
     public class FavouriteStopsAdapter extends RecyclerView.Adapter<ViewHolder> {
65
 
59
 
66
-        private List<FavouriteStopDbo> _favourites;
60
+        private List<UserFavouriteStopsDbo> _favourites;
67
 
61
 
68
         private List<SchedulesDbo> _schedules;
62
         private List<SchedulesDbo> _schedules;
69
 
63
 
79
 
73
 
80
         @Override
74
         @Override
81
         public void onBindViewHolder(ViewHolder holder, int position) {
75
         public void onBindViewHolder(ViewHolder holder, int position) {
82
-            final FavouriteStopDbo favouriteStopDbo = _favourites.get(position);
76
+            final UserFavouriteStopsDbo favouriteStopDbo = _favourites.get(position);
83
             holder._textView.setText(favouriteStopDbo.getStop().getFullName());
77
             holder._textView.setText(favouriteStopDbo.getStop().getFullName());
84
             holder._parentView.setOnClickListener(new View.OnClickListener() {
78
             holder._parentView.setOnClickListener(new View.OnClickListener() {
85
                 @Override
79
                 @Override
127
             return _favourites == null ? 0 : _favourites.size();
121
             return _favourites == null ? 0 : _favourites.size();
128
         }
122
         }
129
 
123
 
130
-        public void setFavourites(List<FavouriteStopDbo> favourites) {
124
+        public void setFavourites(List<UserFavouriteStopsDbo> favourites) {
131
             _favourites = favourites;
125
             _favourites = favourites;
132
             _schedules = null;
126
             _schedules = null;
133
             notifyDataSetChanged();
127
             notifyDataSetChanged();
134
         }
128
         }
135
 
129
 
136
-        public List<FavouriteStopDbo> getFavourites() {
130
+        public List<UserFavouriteStopsDbo> getFavourites() {
137
             return _favourites;
131
             return _favourites;
138
         }
132
         }
139
 
133
 
171
 
165
 
172
     public void loadFavourites()
166
     public void loadFavourites()
173
     {
167
     {
174
-        List<FavouriteStopDbo> favourites = STSBusiness.getFavouriteStops(getContext());
168
+        List<UserFavouriteStopsDbo> favourites = STSBusiness.getFavouriteStops(getContext());
175
         _adapter.setFavourites(favourites);
169
         _adapter.setFavourites(favourites);
176
         loadSchedules();
170
         loadSchedules();
177
     }
171
     }
178
 
172
 
179
-    public void onFavouriteClicked(FavouriteStopDbo favouriteStopDbo)
173
+    public void onFavouriteClicked(UserFavouriteStopsDbo favouriteStopDbo)
180
     {
174
     {
181
     }
175
     }
182
 
176
 
183
-    public void onFavouriteLongClicked(final FavouriteStopDbo favouriteStopDbo)
177
+    public void onFavouriteLongClicked(final UserFavouriteStopsDbo favouriteStopDbo)
184
     {
178
     {
185
         new AlertDialog.Builder(getContext())
179
         new AlertDialog.Builder(getContext())
186
                 .setIcon(android.R.drawable.ic_dialog_alert)
180
                 .setIcon(android.R.drawable.ic_dialog_alert)
191
                     @Override
185
                     @Override
192
                     public void onClick(DialogInterface dialog, int which) {
186
                     public void onClick(DialogInterface dialog, int which) {
193
 
187
 
194
-                        List<FavouriteStopDbo> favouriteStopDbos = _adapter.getFavourites();
188
+                        List<UserFavouriteStopsDbo> favouriteStopDbos = _adapter.getFavourites();
195
                         favouriteStopDbos.remove(favouriteStopDbo);
189
                         favouriteStopDbos.remove(favouriteStopDbo);
196
                         STSBusiness.setFavouriteStops(getContext(), favouriteStopDbos);
190
                         STSBusiness.setFavouriteStops(getContext(), favouriteStopDbos);
197
 
191
 

+ 4
- 4
app/src/main/java/com/rthoni/stssaguenay/ui/fragments/StopRoutesPickerFragment.java View File

20
 import com.rthoni.stssaguenay.R;
20
 import com.rthoni.stssaguenay.R;
21
 import com.rthoni.stssaguenay.business.RoutesBusiness;
21
 import com.rthoni.stssaguenay.business.RoutesBusiness;
22
 import com.rthoni.stssaguenay.business.STSBusiness;
22
 import com.rthoni.stssaguenay.business.STSBusiness;
23
-import com.rthoni.stssaguenay.dbo.FavouriteStopDbo;
23
+import com.rthoni.stssaguenay.dbo.UserFavouriteStopsDbo;
24
 import com.rthoni.stssaguenay.dbo.RoutesDbo;
24
 import com.rthoni.stssaguenay.dbo.RoutesDbo;
25
 import com.rthoni.stssaguenay.dbo.StopsDbo;
25
 import com.rthoni.stssaguenay.dbo.StopsDbo;
26
 
26
 
48
 
48
 
49
     private RoutesAdapter _routesAdapter;
49
     private RoutesAdapter _routesAdapter;
50
 
50
 
51
-    private LuPromise.LuConsumer<FavouriteStopDbo> _onRoutesSelected;
51
+    private LuPromise.LuConsumer<UserFavouriteStopsDbo> _onRoutesSelected;
52
 
52
 
53
     public static class ViewHolder extends RecyclerView.ViewHolder {
53
     public static class ViewHolder extends RecyclerView.ViewHolder {
54
         public ImageView _imageView;
54
         public ImageView _imageView;
177
     public void save()
177
     public void save()
178
     {
178
     {
179
         if (_onRoutesSelected != null) {
179
         if (_onRoutesSelected != null) {
180
-            FavouriteStopDbo favourite = new FavouriteStopDbo();
180
+            UserFavouriteStopsDbo favourite = new UserFavouriteStopsDbo();
181
             favourite.setStop(_stopsDbo);
181
             favourite.setStop(_stopsDbo);
182
             favourite.setRoutes(_routesAdapter.getSelectRoutes());
182
             favourite.setRoutes(_routesAdapter.getSelectRoutes());
183
             _onRoutesSelected.execute(favourite);
183
             _onRoutesSelected.execute(favourite);
184
         }
184
         }
185
     }
185
     }
186
 
186
 
187
-    public void setOnRoutesSelected(LuPromise.LuConsumer<FavouriteStopDbo> onRoutesSelected) {
187
+    public void setOnRoutesSelected(LuPromise.LuConsumer<UserFavouriteStopsDbo> onRoutesSelected) {
188
         _onRoutesSelected = onRoutesSelected;
188
         _onRoutesSelected = onRoutesSelected;
189
     }
189
     }
190
 }
190
 }

+ 18
- 0
app/src/main/res/values/strings.xml View File

7
 
7
 
8
     <string name="navigation_drawer_open">Open navigation drawer</string>
8
     <string name="navigation_drawer_open">Open navigation drawer</string>
9
     <string name="navigation_drawer_close">Close navigation drawer</string>
9
     <string name="navigation_drawer_close">Close navigation drawer</string>
10
+
10
     <string name="app_name">STS Saguenay</string>
11
     <string name="app_name">STS Saguenay</string>
12
+
11
     <string name="title_activity_stop_picker">Pick a stop - STS Saguenay</string>
13
     <string name="title_activity_stop_picker">Pick a stop - STS Saguenay</string>
12
     <string name="favourites_stops">Favourites stops:</string>
14
     <string name="favourites_stops">Favourites stops:</string>
13
     <string name="search_stop">Search a stop</string>
15
     <string name="search_stop">Search a stop</string>
14
     <string name="pick_routes">Pick your routes for stop %1$s:</string>
16
     <string name="pick_routes">Pick your routes for stop %1$s:</string>
15
     <string name="save">Save</string>
17
     <string name="save">Save</string>
18
+    <string name="error_try_again">Error. Please try again.</string>
19
+
16
     <string name="loading">Loading&#8230;</string>
20
     <string name="loading">Loading&#8230;</string>
17
     <string name="loading_schedules">Loading schedules&#8230;</string>
21
     <string name="loading_schedules">Loading schedules&#8230;</string>
18
     <string name="loading_routes">Loading schedules&#8230;</string>
22
     <string name="loading_routes">Loading schedules&#8230;</string>
19
     <string name="loading_stops">Loading stops&#8230;</string>
23
     <string name="loading_stops">Loading stops&#8230;</string>
24
+
20
     <string name="favourite_remove">Remove favourite</string>
25
     <string name="favourite_remove">Remove favourite</string>
21
     <string name="favourite_remove_confirm">Do you really want to remove %1$s?</string>
26
     <string name="favourite_remove_confirm">Do you really want to remove %1$s?</string>
22
     <string name="favourite_removed">%1$s has been removed</string>
27
     <string name="favourite_removed">%1$s has been removed</string>
28
+
23
     <string name="drawer_help_message">Log in to access more features</string>
29
     <string name="drawer_help_message">Log in to access more features</string>
30
+
24
     <string name="logout">Logout</string>
31
     <string name="logout">Logout</string>
25
     <string name="restore">Restore settings</string>
32
     <string name="restore">Restore settings</string>
26
     <string name="backup">Backup settings</string>
33
     <string name="backup">Backup settings</string>
34
+
35
+    <string name="encryption_password">Encryption password</string>
36
+    <string name="encryption_password_encrypt">Please enter an encryption password (you do not need to enter the same as a previous backup):</string>
37
+    <string name="encryption_password_decrypt">Please enter the password your entered when you did the backup:</string>
38
+    <string name="encryption_bad_password">Bad encryption password</string>
39
+    <string name="encryption_empty">No data to restore</string>
40
+
41
+    <string name="settings_backed_up">Settings have been backed up</string>
42
+    <string name="settings_backing_up">Backing up settings&#8230;</string>
43
+    <string name="settings_restoring">Restoring settings&#8230;</string>
44
+    <string name="settings_restored">Settings have been restored</string>
27
 </resources>
45
 </resources>

+ 3
- 0
build.gradle View File

21
 allprojects {
21
 allprojects {
22
     repositories {
22
     repositories {
23
         jcenter()
23
         jcenter()
24
+        maven {
25
+            url 'https://jitpack.io'
26
+        }
24
     }
27
     }
25
 }
28
 }
26
 
29
 

+ 1
- 1
luticateutils/src/main/java/com/luticate/utils/business/LuRequest.java View File

42
                     try {
42
                     try {
43
                         JSONObject json = new JSONObject(response);
43
                         JSONObject json = new JSONObject(response);
44
                         JSONObject obj = null;
44
                         JSONObject obj = null;
45
-                        if (!json.isNull("data")) {
45
+                        if (json.has("data")) {
46
                             obj = json.optJSONObject("data");
46
                             obj = json.optJSONObject("data");
47
                             if (obj == null) {
47
                             if (obj == null) {
48
                                 obj = new JSONObject();
48
                                 obj = new JSONObject();

+ 38
- 0
luticateutils/src/main/java/com/luticate/utils/dbo/LuStringDbo.java View File

1
+package com.luticate.utils.dbo;
2
+
3
+import org.json.JSONException;
4
+import org.json.JSONObject;
5
+
6
+import java.util.HashMap;
7
+
8
+/**
9
+ * Created by robin on 11/27/15.
10
+ */
11
+public class LuStringDbo extends LuDbo {
12
+    public String getString() {
13
+        return _value;
14
+    }
15
+
16
+    public void setString(String value) {
17
+        _value = value;
18
+    }
19
+
20
+    private String _value;
21
+
22
+    @Override
23
+    public void fromJson(JSONObject json) throws JSONException {
24
+        if (json.isNull("value")) {
25
+            _value = null;
26
+        }
27
+        else {
28
+            _value = json.getString("value");
29
+        }
30
+    }
31
+
32
+    @Override
33
+    public HashMap<String, Object> toArray() {
34
+        HashMap<String, Object> array = new HashMap<>();
35
+        array.put("value", _value);
36
+        return array;
37
+    }
38
+}

Loading…
Cancel
Save