Browse Source

save, load and display favourites

tags/v1.0.0
Robin Thoni 7 years ago
parent
commit
8f3f16dbcb

+ 38
- 0
app/src/main/java/com/rthoni/stssaguenay/business/STSBusiness.java View File

1
 package com.rthoni.stssaguenay.business;
1
 package com.rthoni.stssaguenay.business;
2
 
2
 
3
+import android.content.Context;
4
+
3
 import com.luticate.utils.dbo.LuDataAccessConfigDbo;
5
 import com.luticate.utils.dbo.LuDataAccessConfigDbo;
6
+import com.rthoni.stssaguenay.dataaccess.STSDataAccess;
7
+import com.rthoni.stssaguenay.dbo.FavouriteStopDbo;
8
+
9
+import org.json.JSONArray;
10
+import org.json.JSONException;
11
+import org.json.JSONObject;
12
+
13
+import java.util.List;
14
+import java.util.Vector;
4
 
15
 
5
 /**
16
 /**
6
  * Created by robin on 9/29/16.
17
  * Created by robin on 9/29/16.
17
         }
28
         }
18
         return _config;
29
         return _config;
19
     }
30
     }
31
+
32
+    public static List<FavouriteStopDbo> getFavouriteStops(Context ctx)
33
+    {
34
+        String str = STSDataAccess.getFavouriteStopsJson(ctx);
35
+        List<FavouriteStopDbo> dbos = new Vector<>();
36
+        JSONArray json;
37
+        try {
38
+            json = new JSONArray(str);
39
+            for (int i = 0; i < json.length(); ++i) {
40
+                FavouriteStopDbo dbo = new FavouriteStopDbo();
41
+                dbo.fromJson(json.getJSONObject(i));
42
+                dbos.add(dbo);
43
+            }
44
+        } catch (JSONException e) {
45
+            e.printStackTrace();
46
+        }
47
+        return dbos;
48
+    }
49
+
50
+    public static void setFavouriteStops(Context ctx, List<FavouriteStopDbo> favourites)
51
+    {
52
+        JSONArray json = new JSONArray();
53
+        for (FavouriteStopDbo favouriteStopDbo : favourites) {
54
+            json.put(new JSONObject(favouriteStopDbo.toArray()));
55
+        }
56
+        STSDataAccess.setFavouriteStopsJson(ctx, json.toString());
57
+    }
20
 }
58
 }

+ 30
- 0
app/src/main/java/com/rthoni/stssaguenay/dataaccess/STSDataAccess.java View File

1
+package com.rthoni.stssaguenay.dataaccess;
2
+
3
+import android.content.Context;
4
+import android.content.SharedPreferences;
5
+
6
+/**
7
+ * Created by robin on 10/1/16.
8
+ */
9
+
10
+public class STSDataAccess {
11
+
12
+    public static String SHARED_PREF_NAME = "sts-saguenay";
13
+
14
+    public static String SHARED_PREF_FAVOURITE_STOPS = "favourites-stops";
15
+
16
+    public static SharedPreferences getSharedPref(Context ctx)
17
+    {
18
+        return ctx.getSharedPreferences(SHARED_PREF_NAME, Context.MODE_PRIVATE);
19
+    }
20
+
21
+    public static String getFavouriteStopsJson(Context ctx)
22
+    {
23
+        return getSharedPref(ctx).getString(SHARED_PREF_FAVOURITE_STOPS, "[]");
24
+    }
25
+
26
+    public static void setFavouriteStopsJson(Context ctx, String str)
27
+    {
28
+        getSharedPref(ctx).edit().putString(SHARED_PREF_FAVOURITE_STOPS, str).apply();
29
+    }
30
+}

+ 63
- 0
app/src/main/java/com/rthoni/stssaguenay/dbo/FavouriteStopDbo.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/1/16.
15
+ */
16
+
17
+public class FavouriteStopDbo extends LuDbo {
18
+
19
+    protected StopsDbo _stop;
20
+
21
+    protected List<RoutesDbo> _routes;
22
+
23
+    @Override
24
+    public void fromJson(JSONObject json) throws JSONException {
25
+        _stop = new StopsDbo();
26
+        _stop.fromJson(json.getJSONObject("stop"));
27
+        _routes = new Vector<>();
28
+        JSONArray routes = json.getJSONArray("routes");
29
+        for (int i = 0; i < routes.length(); ++i) {
30
+            RoutesDbo route = new RoutesDbo();
31
+            route.fromJson(routes.getJSONObject(i));
32
+            _routes.add(route);
33
+        }
34
+    }
35
+
36
+    @Override
37
+    public HashMap<String, Object> toArray() {
38
+        HashMap<String, Object> map = new HashMap<>();
39
+        map.put("stop", _stop.toArray());
40
+        List<Object> routes = new Vector<>();
41
+        for (RoutesDbo route : _routes) {
42
+            routes.add(route.toArray());
43
+        }
44
+        map.put("routes", routes);
45
+        return map;
46
+    }
47
+
48
+    public StopsDbo getStop() {
49
+        return _stop;
50
+    }
51
+
52
+    public void setStop(StopsDbo stop) {
53
+        _stop = stop;
54
+    }
55
+
56
+    public List<RoutesDbo> getRoutes() {
57
+        return _routes;
58
+    }
59
+
60
+    public void setRoutes(List<RoutesDbo> routes) {
61
+        _routes = routes;
62
+    }
63
+}

+ 6
- 1
app/src/main/java/com/rthoni/stssaguenay/dbo/RoutesDbo.java View File

36
 
36
 
37
     @Override
37
     @Override
38
     public HashMap<String, Object> toArray() {
38
     public HashMap<String, Object> toArray() {
39
-        return null;
39
+        HashMap<String, Object> map = new HashMap<>();
40
+        map.put("id", _id);
41
+        map.put("name", _name);
42
+        map.put("bgColor", _bgColor);
43
+        map.put("fgColor", _fgColor);
44
+        return map;
40
     }
45
     }
41
 
46
 
42
     public String getId() {
47
     public String getId() {

+ 7
- 1
app/src/main/java/com/rthoni/stssaguenay/dbo/StopsDbo.java View File

37
 
37
 
38
     @Override
38
     @Override
39
     public HashMap<String, Object> toArray() {
39
     public HashMap<String, Object> toArray() {
40
-        return null;
40
+        HashMap<String, Object> map = new HashMap<>();
41
+        map.put("name", _name);
42
+        map.put("routes", _routes);
43
+        map.put("id", _id);
44
+        map.put("posX", _posX);
45
+        map.put("posY", _posY);
46
+        return map;
41
     }
47
     }
42
 
48
 
43
     protected String _name;
49
     protected String _name;

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

9
 
9
 
10
 import com.luticate.utils.business.LuRequest;
10
 import com.luticate.utils.business.LuRequest;
11
 import com.rthoni.stssaguenay.R;
11
 import com.rthoni.stssaguenay.R;
12
+import com.rthoni.stssaguenay.business.STSBusiness;
13
+import com.rthoni.stssaguenay.dbo.FavouriteStopDbo;
12
 import com.rthoni.stssaguenay.ui.fragments.HomeFragment;
14
 import com.rthoni.stssaguenay.ui.fragments.HomeFragment;
13
 
15
 
16
+import org.json.JSONException;
17
+import org.json.JSONObject;
18
+
19
+import java.util.List;
20
+
14
 import butterknife.BindView;
21
 import butterknife.BindView;
15
 import butterknife.ButterKnife;
22
 import butterknife.ButterKnife;
16
 
23
 
17
 public class MainActivity extends AppCompatActivity {
24
 public class MainActivity extends AppCompatActivity {
18
 
25
 
26
+    public static int ADD_FAVOURITE_STOP_REQUEST_CODE = 1;
27
+
28
+    private boolean _goToHome = false;
29
+
19
     @BindView(R.id.fab)
30
     @BindView(R.id.fab)
20
     FloatingActionButton _fab;
31
     FloatingActionButton _fab;
21
 
32
 
36
                 goToAddStop();
47
                 goToAddStop();
37
             }
48
             }
38
         });
49
         });
39
-//        _fab.hide();
50
+
40
         goToHome();
51
         goToHome();
41
     }
52
     }
42
 
53
 
54
+    @Override
55
+    protected void onResume() {
56
+        if (_goToHome) {
57
+            _goToHome = false;
58
+            goToHome();
59
+        }
60
+        super.onResume();
61
+    }
62
+
43
     public void goToHome()
63
     public void goToHome()
44
     {
64
     {
45
         _fab.show();
65
         _fab.show();
56
     public void goToAddStop()
76
     public void goToAddStop()
57
     {
77
     {
58
         Intent intent = new Intent(this, StopPickerActivity.class);
78
         Intent intent = new Intent(this, StopPickerActivity.class);
59
-        startActivity(intent);
79
+        startActivityForResult(intent, ADD_FAVOURITE_STOP_REQUEST_CODE);
60
     }
80
     }
61
 
81
 
62
-//    @Override
82
+    @Override
83
+    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
84
+        if (requestCode == ADD_FAVOURITE_STOP_REQUEST_CODE && resultCode == RESULT_OK) {
85
+            FavouriteStopDbo favouriteStopDbo = new FavouriteStopDbo();
86
+            try {
87
+                JSONObject obj = new JSONObject(data.getStringExtra(StopPickerActivity.STOP_EXTRA_NAME));
88
+                favouriteStopDbo.fromJson(obj);
89
+            } catch (JSONException e) {
90
+                e.printStackTrace();
91
+                return;
92
+            }
93
+            List<FavouriteStopDbo> favouriteStopDbos = STSBusiness.getFavouriteStops(this);
94
+            favouriteStopDbos.add(favouriteStopDbo);
95
+            STSBusiness.setFavouriteStops(this, favouriteStopDbos);
96
+            _goToHome = true;
97
+        }
98
+        super.onActivityResult(requestCode, resultCode, data);
99
+    }
100
+
101
+    //    @Override
63
 //    public boolean onCreateOptionsMenu(Menu menu) {
102
 //    public boolean onCreateOptionsMenu(Menu menu) {
64
 //        // Inflate the menu; this adds items to the action bar if it is present.
103
 //        // Inflate the menu; this adds items to the action bar if it is present.
65
 //        getMenuInflater().inflate(R.menu.menu_main, menu);
104
 //        getMenuInflater().inflate(R.menu.menu_main, menu);

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

1
 package com.rthoni.stssaguenay.ui.activities;
1
 package com.rthoni.stssaguenay.ui.activities;
2
 
2
 
3
+import android.app.Activity;
4
+import android.content.Intent;
3
 import android.os.Bundle;
5
 import android.os.Bundle;
4
 import android.support.v7.app.AppCompatActivity;
6
 import android.support.v7.app.AppCompatActivity;
5
 
7
 
6
 import com.luticate.utils.business.LuPromise;
8
 import com.luticate.utils.business.LuPromise;
7
 import com.rthoni.stssaguenay.R;
9
 import com.rthoni.stssaguenay.R;
10
+import com.rthoni.stssaguenay.dbo.FavouriteStopDbo;
11
+import com.rthoni.stssaguenay.dbo.RoutesDbo;
8
 import com.rthoni.stssaguenay.dbo.StopsDbo;
12
 import com.rthoni.stssaguenay.dbo.StopsDbo;
9
 import com.rthoni.stssaguenay.ui.fragments.StopPickerFragment;
13
 import com.rthoni.stssaguenay.ui.fragments.StopPickerFragment;
10
 import com.rthoni.stssaguenay.ui.fragments.StopRoutesPickerFragment;
14
 import com.rthoni.stssaguenay.ui.fragments.StopRoutesPickerFragment;
11
 
15
 
16
+import java.util.List;
17
+
12
 public class StopPickerActivity extends AppCompatActivity {
18
 public class StopPickerActivity extends AppCompatActivity {
13
 
19
 
20
+    public static String STOP_EXTRA_NAME = "STOP_EXTRA";
21
+
14
     private StopPickerFragment _stopPickerFragment;
22
     private StopPickerFragment _stopPickerFragment;
15
 
23
 
16
     @Override
24
     @Override
47
                 .commit();
55
                 .commit();
48
     }
56
     }
49
 
57
 
50
-    public void goToRoutes(StopsDbo stopDbo)
58
+    public void goToRoutes(final StopsDbo stopDbo)
51
     {
59
     {
52
         StopRoutesPickerFragment f = new StopRoutesPickerFragment();
60
         StopRoutesPickerFragment f = new StopRoutesPickerFragment();
53
         f.setStopsDbo(stopDbo);
61
         f.setStopsDbo(stopDbo);
62
+        f.setOnRoutesSelected(new LuPromise.LuConsumer<FavouriteStopDbo>() {
63
+            @Override
64
+            public void execute(FavouriteStopDbo data) {
65
+                saveStop(data);
66
+            }
67
+        });
54
         getSupportFragmentManager()
68
         getSupportFragmentManager()
55
                 .beginTransaction()
69
                 .beginTransaction()
56
                 .replace(R.id.container, f)
70
                 .replace(R.id.container, f)
57
                 .addToBackStack("StopRoutesPickerFragment")
71
                 .addToBackStack("StopRoutesPickerFragment")
58
                 .commit();
72
                 .commit();
59
     }
73
     }
74
+
75
+    public void saveStop(FavouriteStopDbo favouriteStopDbo)
76
+    {
77
+        Intent result = new Intent();
78
+        result.putExtra(STOP_EXTRA_NAME, favouriteStopDbo.toString());
79
+        setResult(Activity.RESULT_OK, result);
80
+        finish();
81
+    }
60
 }
82
 }

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

3
 import android.os.Bundle;
3
 import android.os.Bundle;
4
 import android.support.annotation.Nullable;
4
 import android.support.annotation.Nullable;
5
 import android.support.v4.app.Fragment;
5
 import android.support.v4.app.Fragment;
6
+import android.support.v7.widget.LinearLayoutManager;
6
 import android.support.v7.widget.RecyclerView;
7
 import android.support.v7.widget.RecyclerView;
7
 import android.view.LayoutInflater;
8
 import android.view.LayoutInflater;
8
 import android.view.View;
9
 import android.view.View;
9
 import android.view.ViewGroup;
10
 import android.view.ViewGroup;
11
+import android.widget.TextView;
10
 
12
 
11
 import com.rthoni.stssaguenay.R;
13
 import com.rthoni.stssaguenay.R;
14
+import com.rthoni.stssaguenay.business.STSBusiness;
15
+import com.rthoni.stssaguenay.dbo.FavouriteStopDbo;
16
+
17
+import java.util.List;
12
 
18
 
13
 import butterknife.BindView;
19
 import butterknife.BindView;
14
 import butterknife.ButterKnife;
20
 import butterknife.ButterKnife;
19
 public class HomeFragment extends Fragment {
25
 public class HomeFragment extends Fragment {
20
 
26
 
21
     @BindView(R.id.listFavouritesStops)
27
     @BindView(R.id.listFavouritesStops)
22
-    RecyclerView _favouritesStops;
28
+    RecyclerView _favouritesStopsList;
29
+
30
+    FavouriteStopsAdapter _adapter;
31
+
32
+    public static class ViewHolder extends RecyclerView.ViewHolder {
33
+        public View _parentView;
34
+        public TextView _textView;
35
+        public ViewHolder(View v) {
36
+            super(v);
37
+            _parentView = v;
38
+        }
39
+    }
40
+
41
+    public class FavouriteStopsAdapter extends RecyclerView.Adapter<ViewHolder> {
42
+
43
+        private List<FavouriteStopDbo> _favourites;
44
+
45
+        @Override
46
+        public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
47
+            View v = LayoutInflater.from(parent.getContext())
48
+                    .inflate(R.layout.favourite_stop_recycler_view_item, parent, false);
49
+            ViewHolder vh = new ViewHolder(v);
50
+            vh._textView = (TextView) v.findViewById(R.id.textView);
51
+            return vh;
52
+        }
53
+
54
+        @Override
55
+        public void onBindViewHolder(ViewHolder holder, int position) {
56
+            final FavouriteStopDbo favouriteStopDbo = _favourites.get(position);
57
+            holder._textView.setText(favouriteStopDbo.getStop().getFullName());
58
+            holder._parentView.setOnClickListener(new View.OnClickListener() {
59
+                @Override
60
+                public void onClick(View v) {
61
+                    onFavouriteClicked(favouriteStopDbo);
62
+                }
63
+            });
64
+        }
65
+
66
+        @Override
67
+        public int getItemCount() {
68
+            return _favourites == null ? 0 : _favourites.size();
69
+        }
70
+
71
+        public void setFavourites(List<FavouriteStopDbo> favourites) {
72
+            _favourites = favourites;
73
+            notifyDataSetChanged();
74
+        }
75
+    }
23
 
76
 
24
     @Nullable
77
     @Nullable
25
     @Override
78
     @Override
26
     public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
79
     public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
27
         View v = inflater.inflate(R.layout.fragment_home, container, false);
80
         View v = inflater.inflate(R.layout.fragment_home, container, false);
28
         ButterKnife.bind(this, v);
81
         ButterKnife.bind(this, v);
82
+
83
+        _adapter = new FavouriteStopsAdapter();
84
+        _favouritesStopsList.setAdapter(_adapter);
85
+        _favouritesStopsList.setLayoutManager(new LinearLayoutManager(getContext()));
86
+
87
+        loadFavourites();
88
+
29
         return v;
89
         return v;
30
     }
90
     }
91
+
92
+    public void loadFavourites()
93
+    {
94
+        List<FavouriteStopDbo> favourites = STSBusiness.getFavouriteStops(getContext());
95
+        _adapter.setFavourites(favourites);
96
+    }
97
+
98
+    public void onFavouriteClicked(FavouriteStopDbo favouriteStopDbo)
99
+    {
100
+
101
+    }
31
 }
102
 }

+ 2
- 0
app/src/main/java/com/rthoni/stssaguenay/ui/fragments/StopPickerFragment.java View File

173
         final ProgressDialog progressDialog = new ProgressDialog(getContext());
173
         final ProgressDialog progressDialog = new ProgressDialog(getContext());
174
         progressDialog.setIndeterminate(true);
174
         progressDialog.setIndeterminate(true);
175
         progressDialog.show();
175
         progressDialog.show();
176
+        progressDialog.setTitle(R.string.loading);
177
+        progressDialog.setMessage(getString(R.string.loading_stops));
176
 
178
 
177
         StopsBusiness.getAll(STSBusiness.getConfig())
179
         StopsBusiness.getAll(STSBusiness.getConfig())
178
                 .then(new LuPromise.LuConsumer<List<StopsDbo>>() {
180
                 .then(new LuPromise.LuConsumer<List<StopsDbo>>() {

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

10
 import android.view.LayoutInflater;
10
 import android.view.LayoutInflater;
11
 import android.view.View;
11
 import android.view.View;
12
 import android.view.ViewGroup;
12
 import android.view.ViewGroup;
13
+import android.widget.Button;
13
 import android.widget.ImageView;
14
 import android.widget.ImageView;
14
 import android.widget.TextView;
15
 import android.widget.TextView;
15
 import android.widget.Toast;
16
 import android.widget.Toast;
19
 import com.rthoni.stssaguenay.R;
20
 import com.rthoni.stssaguenay.R;
20
 import com.rthoni.stssaguenay.business.RoutesBusiness;
21
 import com.rthoni.stssaguenay.business.RoutesBusiness;
21
 import com.rthoni.stssaguenay.business.STSBusiness;
22
 import com.rthoni.stssaguenay.business.STSBusiness;
23
+import com.rthoni.stssaguenay.dbo.FavouriteStopDbo;
22
 import com.rthoni.stssaguenay.dbo.RoutesDbo;
24
 import com.rthoni.stssaguenay.dbo.RoutesDbo;
23
 import com.rthoni.stssaguenay.dbo.StopsDbo;
25
 import com.rthoni.stssaguenay.dbo.StopsDbo;
24
 
26
 
39
     @BindView(R.id.listRoutes)
41
     @BindView(R.id.listRoutes)
40
     RecyclerView _listRoutes;
42
     RecyclerView _listRoutes;
41
 
43
 
44
+    @BindView(R.id.btnSave)
45
+    Button _btnSave;
46
+
42
     private StopsDbo _stopsDbo;
47
     private StopsDbo _stopsDbo;
43
 
48
 
44
     private RoutesAdapter _routesAdapter;
49
     private RoutesAdapter _routesAdapter;
45
 
50
 
51
+    private LuPromise.LuConsumer<FavouriteStopDbo> _onRoutesSelected;
52
+
46
     public static class ViewHolder extends RecyclerView.ViewHolder {
53
     public static class ViewHolder extends RecyclerView.ViewHolder {
47
         public ImageView _imageView;
54
         public ImageView _imageView;
48
         public TextView _textView;
55
         public TextView _textView;
57
 
64
 
58
         private List<RoutesDbo> _routes;
65
         private List<RoutesDbo> _routes;
59
 
66
 
67
+        private List<RoutesDbo> _selectRoutes;
68
+
60
         @Override
69
         @Override
61
         public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
70
         public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
62
             View v = LayoutInflater.from(parent.getContext())
71
             View v = LayoutInflater.from(parent.getContext())
80
             holder._view.setOnClickListener(new View.OnClickListener() {
89
             holder._view.setOnClickListener(new View.OnClickListener() {
81
                 @Override
90
                 @Override
82
                 public void onClick(View v) {
91
                 public void onClick(View v) {
83
-                    v.setSelected(!v.isSelected());
92
+                    if (_selectRoutes.contains(routeDbo)) {
93
+                        _selectRoutes.remove(routeDbo);
94
+                        v.setSelected(false);
95
+                    }
96
+                    else {
97
+                        _selectRoutes.add(routeDbo);
98
+                        v.setSelected(true);
99
+                    }
100
+                    _btnSave.setEnabled(_selectRoutes.size() != 0);
84
                 }
101
                 }
85
             });
102
             });
86
         }
103
         }
92
 
109
 
93
         public void setRoutes(List<RoutesDbo> routes) {
110
         public void setRoutes(List<RoutesDbo> routes) {
94
             _routes = routes;
111
             _routes = routes;
112
+            _selectRoutes = new Vector<>();
95
             notifyDataSetChanged();
113
             notifyDataSetChanged();
96
         }
114
         }
115
+
116
+        public List<RoutesDbo> getSelectRoutes() {
117
+            return _selectRoutes;
118
+        }
97
     }
119
     }
98
 
120
 
99
     @Nullable
121
     @Nullable
109
         _listRoutes.setLayoutManager(new LinearLayoutManager(getContext()));
131
         _listRoutes.setLayoutManager(new LinearLayoutManager(getContext()));
110
         _listRoutes.setHasFixedSize(true);
132
         _listRoutes.setHasFixedSize(true);
111
 
133
 
134
+        _btnSave.setOnClickListener(new View.OnClickListener() {
135
+            @Override
136
+            public void onClick(View v) {
137
+                save();
138
+            }
139
+        });
140
+
112
         loadRoutes();
141
         loadRoutes();
113
 
142
 
114
         return v;
143
         return v;
115
     }
144
     }
116
 
145
 
117
-    public StopsDbo getStopsDbo() {
118
-        return _stopsDbo;
119
-    }
120
-
121
     public void setStopsDbo(StopsDbo stopsDbo) {
146
     public void setStopsDbo(StopsDbo stopsDbo) {
122
         _stopsDbo = stopsDbo;
147
         _stopsDbo = stopsDbo;
123
     }
148
     }
127
         final ProgressDialog progressDialog = new ProgressDialog(getContext());
152
         final ProgressDialog progressDialog = new ProgressDialog(getContext());
128
         progressDialog.setIndeterminate(true);
153
         progressDialog.setIndeterminate(true);
129
         progressDialog.show();
154
         progressDialog.show();
155
+        progressDialog.setTitle(R.string.loading);
156
+        progressDialog.setMessage(getString(R.string.loading_routes));
130
 
157
 
131
         RoutesBusiness.getAll(STSBusiness.getConfig())
158
         RoutesBusiness.getAll(STSBusiness.getConfig())
132
                 .then(new LuPromise.LuConsumer<List<RoutesDbo>>() {
159
                 .then(new LuPromise.LuConsumer<List<RoutesDbo>>() {
145
                     }
172
                     }
146
                 });
173
                 });
147
     }
174
     }
175
+
176
+    public void save()
177
+    {
178
+        if (_onRoutesSelected != null) {
179
+            FavouriteStopDbo favourite = new FavouriteStopDbo();
180
+            favourite.setStop(_stopsDbo);
181
+            favourite.setRoutes(_routesAdapter.getSelectRoutes());
182
+            _onRoutesSelected.execute(favourite);
183
+        }
184
+    }
185
+
186
+    public void setOnRoutesSelected(LuPromise.LuConsumer<FavouriteStopDbo> onRoutesSelected) {
187
+        _onRoutesSelected = onRoutesSelected;
188
+    }
148
 }
189
 }

+ 33
- 0
app/src/main/res/layout/favourite_stop_recycler_view_item.xml View File

1
+<?xml version="1.0" encoding="utf-8"?>
2
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
3
+              xmlns:tools="http://schemas.android.com/tools"
4
+              android:orientation="vertical"
5
+              android:layout_width="match_parent"
6
+              android:layout_height="wrap_content"
7
+              android:clickable="true"
8
+              android:foreground="?android:attr/selectableItemBackground"
9
+              android:minHeight="?android:attr/listPreferredItemHeightSmall"
10
+              android:weightSum="1">
11
+
12
+    <TextView
13
+        android:layout_width="match_parent"
14
+        android:layout_height="wrap_content"
15
+        android:textAppearance="?android:attr/textAppearanceListItemSmall"
16
+        android:id="@+id/textView"
17
+        android:clickable="false"
18
+        android:focusable="false"
19
+        tools:text="Stop name"
20
+        android:gravity="center_vertical"
21
+        android:layout_weight="1.0"/>
22
+
23
+    <TextView
24
+        android:layout_width="match_parent"
25
+        android:layout_height="wrap_content"
26
+        android:id="@+id/textView2"
27
+        android:clickable="false"
28
+        android:focusable="false"
29
+        tools:text="09h42 10h12"
30
+        android:gravity="center_vertical"
31
+        android:text="@string/loading_schedules"
32
+        android:layout_weight="1.0"/>
33
+</LinearLayout>

+ 27
- 14
app/src/main/res/layout/fragment_stop_route_picker.xml View File

3
                 android:layout_width="match_parent"
3
                 android:layout_width="match_parent"
4
                 android:layout_height="match_parent">
4
                 android:layout_height="match_parent">
5
 
5
 
6
-    <TextView
7
-        android:layout_width="wrap_content"
8
-        android:layout_height="wrap_content"
9
-        android:textAppearance="?android:attr/textAppearanceMedium"
10
-        android:text="@string/pick_routes"
11
-        android:id="@+id/textView"
6
+    <LinearLayout
7
+        android:orientation="vertical"
8
+        android:layout_width="match_parent"
9
+        android:layout_height="match_parent"
12
         android:layout_alignParentTop="true"
10
         android:layout_alignParentTop="true"
13
         android:layout_alignParentLeft="true"
11
         android:layout_alignParentLeft="true"
14
         android:layout_alignParentStart="true"
12
         android:layout_alignParentStart="true"
15
-        android:layout_alignParentRight="true"
16
-        android:layout_alignParentEnd="true"/>
13
+        android:layout_above="@+id/btnSave">
14
+
15
+        <TextView
16
+            android:layout_width="match_parent"
17
+            android:layout_height="wrap_content"
18
+            android:textAppearance="?android:attr/textAppearanceMedium"
19
+            android:text="@string/pick_routes"
20
+            android:id="@+id/textView"/>
21
+
22
+        <android.support.v7.widget.RecyclerView
23
+            android:layout_width="match_parent"
24
+            android:layout_height="match_parent"
25
+            android:id="@+id/listRoutes"
26
+            android:scrollbars="vertical"
27
+            android:fadeScrollbars="true"/>
28
+
29
+    </LinearLayout>
30
+
17
 
31
 
18
-    <android.support.v7.widget.RecyclerView
32
+    <Button
33
+        android:text="@string/save"
19
         android:layout_width="wrap_content"
34
         android:layout_width="wrap_content"
20
         android:layout_height="wrap_content"
35
         android:layout_height="wrap_content"
21
-        android:id="@+id/listRoutes"
22
-        android:scrollbars="vertical"
23
-        android:fadeScrollbars="true"
24
-        android:layout_below="@id/textView"
36
+        android:id="@+id/btnSave"
37
+        android:layout_alignParentBottom="true"
25
         android:layout_alignParentLeft="true"
38
         android:layout_alignParentLeft="true"
26
         android:layout_alignParentStart="true"
39
         android:layout_alignParentStart="true"
27
         android:layout_alignParentRight="true"
40
         android:layout_alignParentRight="true"
28
         android:layout_alignParentEnd="true"
41
         android:layout_alignParentEnd="true"
29
-        android:layout_alignParentBottom="true"/>
42
+        android:enabled="false"/>
30
 
43
 
31
 </RelativeLayout>
44
 </RelativeLayout>

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

4
     <string name="favourites_stops">Favourites stops:</string>
4
     <string name="favourites_stops">Favourites stops:</string>
5
     <string name="search_stop">Search a stop</string>
5
     <string name="search_stop">Search a stop</string>
6
     <string name="pick_routes">Pick your routes for stop %1$s:</string>
6
     <string name="pick_routes">Pick your routes for stop %1$s:</string>
7
+    <string name="save">Save</string>
8
+    <string name="loading">Loading&#8230;</string>
9
+    <string name="loading_schedules">Loading schedules&#8230;</string>
10
+    <string name="loading_routes">Loading schedules&#8230;</string>
11
+    <string name="loading_stops">Loading stops&#8230;</string>
7
 </resources>
12
 </resources>

Loading…
Cancel
Save