Skip to content

Commit 675dd92

Browse files
committed
Retain GPX instance
1 parent d20c679 commit 675dd92

File tree

4 files changed

+57
-42
lines changed

4 files changed

+57
-42
lines changed

app/src/main/java/org/nitri/opentopo/GpxDetailFragment.java

Lines changed: 36 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,10 @@
99
import androidx.constraintlayout.widget.ConstraintLayout;
1010
import androidx.fragment.app.Fragment;
1111
import androidx.core.content.res.ResourcesCompat;
12+
import androidx.lifecycle.Lifecycle;
13+
import androidx.lifecycle.LifecycleObserver;
14+
import androidx.lifecycle.OnLifecycleEvent;
15+
import androidx.lifecycle.ViewModelProvider;
1216
import androidx.recyclerview.widget.LinearLayoutManager;
1317
import androidx.recyclerview.widget.RecyclerView;
1418
import android.text.TextUtils;
@@ -31,6 +35,7 @@
3135

3236
import org.nitri.opentopo.adapter.WayPointListAdapter;
3337
import org.nitri.opentopo.domain.DistancePoint;
38+
import org.nitri.opentopo.model.GpxViewModel;
3439
import org.nitri.opentopo.model.WayPointHeaderItem;
3540
import org.nitri.opentopo.model.WayPointItem;
3641
import org.nitri.opentopo.model.WayPointListItem;
@@ -49,7 +54,6 @@
4954
public class GpxDetailFragment extends Fragment implements WayPointListAdapter.OnItemClickListener, WayPointDetailDialogFragment.Callback {
5055

5156
private OnFragmentInteractionListener mListener;
52-
private Gpx mGpx;
5357
private List<DistancePoint> mTrackDistanceLine;
5458
private double mDistance;
5559
private boolean mElevation;
@@ -66,6 +70,8 @@ public class GpxDetailFragment extends Fragment implements WayPointListAdapter.O
6670
private WayPointListAdapter mWayPointListAdapter;
6771
private WebView wvDescription;
6872
private int mSelectedIndex;
73+
private GpxViewModel mGpxViewModel;
74+
private ConstraintLayout chartContainer;
6975

7076

7177
public GpxDetailFragment() {
@@ -74,25 +80,13 @@ public GpxDetailFragment() {
7480

7581

7682
public static GpxDetailFragment newInstance() {
77-
GpxDetailFragment fragment = new GpxDetailFragment();
78-
return fragment;
83+
return new GpxDetailFragment();
7984
}
8085

8186
@Override
8287
public void onCreate(Bundle savedInstanceState) {
8388
super.onCreate(savedInstanceState);
8489
setHasOptionsMenu(true);
85-
setRetainInstance(true);
86-
mGpx = mListener.getGpx();
87-
if (mGpx != null && mGpx.getTracks() != null) {
88-
for (Track track : mGpx.getTracks()) {
89-
buildTrackDistanceLine(track);
90-
}
91-
if (getActivity() != null) {
92-
mTfRegular = Typeface.createFromAsset(getActivity().getAssets(), "OpenSans-Regular.ttf");
93-
mTfLight = Typeface.createFromAsset(getActivity().getAssets(), "OpenSans-Light.ttf");
94-
}
95-
}
9690
mWayPointListAdapter = new WayPointListAdapter(mWayPointListItems, this);
9791
}
9892

@@ -105,35 +99,41 @@ public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container,
10599
wvDescription = rootView.findViewById(R.id.wvDescription);
106100
wvDescription.setBackgroundColor(Color.TRANSPARENT);
107101
tvLength = rootView.findViewById(R.id.tvLength);
108-
ConstraintLayout chartContainer = rootView.findViewById(R.id.chartContainer);
102+
chartContainer = rootView.findViewById(R.id.chartContainer);
109103
mElevationChart = rootView.findViewById(R.id.elevationChart);
110104
RecyclerView wayPointRecyclerView = rootView.findViewById(R.id.way_point_recycler_view);
111105
wayPointRecyclerView.setNestedScrollingEnabled(false);
112106
wayPointRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
113107
wayPointRecyclerView.setAdapter(mWayPointListAdapter);
114108

115109

116-
if (mElevation) {
117-
setUpElevationChart();
118-
setChartData();
119-
} else {
120-
chartContainer.setVisibility(View.GONE);
121-
}
122110
return rootView;
123111
}
124112

125113
@Override
126114
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
127115
super.onViewCreated(view, savedInstanceState);
128116

117+
mGpxViewModel = new ViewModelProvider(requireActivity()).get(GpxViewModel.class);
118+
119+
if (mGpxViewModel.gpx != null && mGpxViewModel.gpx.getTracks() != null) {
120+
for (Track track : mGpxViewModel.gpx.getTracks()) {
121+
buildTrackDistanceLine(track);
122+
}
123+
/* if (getActivity() != null) {
124+
mTfRegular = Typeface.createFromAsset(getActivity().getAssets(), "OpenSans-Regular.ttf");
125+
mTfLight = Typeface.createFromAsset(getActivity().getAssets(), "OpenSans-Light.ttf");
126+
}*/
127+
}
128+
129129
// For now, use title and description of first track
130-
if (mGpx != null && mGpx.getTracks() != null && mGpx.getTracks().get(0) != null) {
131-
if (TextUtils.isEmpty(mGpx.getTracks().get(0).getTrackName())) {
130+
if (mGpxViewModel.gpx != null && mGpxViewModel.gpx.getTracks() != null && mGpxViewModel.gpx.getTracks().get(0) != null) {
131+
if (TextUtils.isEmpty(mGpxViewModel.gpx.getTracks().get(0).getTrackName())) {
132132
tvName.setVisibility(View.GONE);
133133
} else {
134-
tvName.setText(mGpx.getTracks().get(0).getTrackName());
134+
tvName.setText(mGpxViewModel.gpx.getTracks().get(0).getTrackName());
135135
}
136-
String description = mGpx.getTracks().get(0).getTrackDesc();
136+
String description = mGpxViewModel.gpx.getTracks().get(0).getTrackDesc();
137137
if (TextUtils.isEmpty(description)) {
138138
tvDescription.setVisibility(View.GONE);
139139
wvDescription.setVisibility(View.GONE);
@@ -151,13 +151,20 @@ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceStat
151151
}
152152
}
153153

154+
if (mElevation) {
155+
setUpElevationChart();
156+
setChartData();
157+
} else {
158+
chartContainer.setVisibility(View.GONE);
159+
}
160+
154161
if (mDistance > 0) {
155162
tvLength.setText(String.format(Locale.getDefault(), "%.2f km", mDistance / 1000f));
156163
} else {
157164
tvLength.setVisibility(View.GONE);
158165
}
159166

160-
if (mGpx != null && mGpx.getWayPoints() != null) {
167+
if (mGpxViewModel.gpx != null && mGpxViewModel.gpx.getWayPoints() != null) {
161168
buildWayPointList();
162169
mWayPointListAdapter.notifyDataSetChanged();
163170
}
@@ -201,10 +208,10 @@ private void buildWayPointList() {
201208
String defaultType = getString(R.string.poi);
202209
List<WayPoint> wayPoints;
203210
mWayPointListItems.clear();
204-
for (String type : Util.getWayPointTypes(mGpx, defaultType)) {
205-
wayPoints = Util.getWayPointsByType(mGpx, type);
211+
for (String type : Util.getWayPointTypes(mGpxViewModel.gpx, defaultType)) {
212+
wayPoints = Util.getWayPointsByType(mGpxViewModel.gpx, type);
206213
if (type.equals(defaultType))
207-
wayPoints.addAll(Util.getWayPointsByType(mGpx, null));
214+
wayPoints.addAll(Util.getWayPointsByType(mGpxViewModel.gpx, null));
208215
if (wayPoints.size() > 0) {
209216
mWayPointListItems.add(new WayPointHeaderItem(type));
210217
for (WayPoint wayPoint : wayPoints) {

app/src/main/java/org/nitri/opentopo/MainActivity.java

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,9 @@
1515
import androidx.appcompat.app.AppCompatActivity;
1616
import androidx.core.app.ActivityCompat;
1717
import androidx.fragment.app.Fragment;
18+
import androidx.lifecycle.ViewModelProvider;
1819

19-
import net.danlew.android.joda.JodaTimeAndroid;
20-
20+
import org.nitri.opentopo.model.GpxViewModel;
2121
import org.nitri.opentopo.nearby.NearbyFragment;
2222
import org.nitri.opentopo.nearby.entity.NearbyItem;
2323
import org.osmdroid.util.GeoPoint;
@@ -49,10 +49,10 @@ public class MainActivity extends AppCompatActivity implements MapFragment.OnFra
4949
private GeoPointDto mGeoPointFromIntent;
5050
private String mGpxUriString;
5151
private Uri mGpxUri;
52-
private Gpx mGpx;
5352
private boolean mZoomToGpx;
5453
private NearbyItem mSelectedNearbyPlace;
5554
private Fragment mMapFragment;
55+
private GpxViewModel mGpxViewModel;
5656

5757
@Override
5858
protected void onCreate(Bundle savedInstanceState) {
@@ -62,14 +62,14 @@ protected void onCreate(Bundle savedInstanceState) {
6262
mGpxUriString = savedInstanceState.getString(GPX_URI_STATE);
6363
}
6464

65+
mGpxViewModel = new ViewModelProvider(this).get(GpxViewModel.class);
66+
6567
Intent intent = getIntent();
6668

6769
if (intent != null && intent.getData() != null) {
6870
handleIntent(intent);
6971
}
7072

71-
//JodaTimeAndroid.init(this);
72-
7373
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
7474
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, REQUEST_LOCATION_PERMISSION);
7575
} else {
@@ -220,10 +220,10 @@ private void parseGpx(Uri uri) {
220220
try {
221221
InputStream inputStream = contentResolver.openInputStream(uri);
222222
if (inputStream != null) {
223-
mGpx = parser.parse(inputStream);
223+
mGpxViewModel.gpx = parser.parse(inputStream);
224224
MapFragment mapFragment = (MapFragment) getSupportFragmentManager().findFragmentByTag(MAP_FRAGMENT_TAG);
225-
if (mapFragment != null && mGpx != null) {
226-
mapFragment.setGpx(mGpx, mZoomToGpx);
225+
if (mapFragment != null && mGpxViewModel.gpx != null) {
226+
mapFragment.setGpx(mGpxViewModel.gpx, mZoomToGpx);
227227
mGpxUriString = uri.toString();
228228
mZoomToGpx = false;
229229
}
@@ -250,7 +250,7 @@ private GeoPointDto getGeoPointDtoFromIntent(Intent intent) {
250250

251251
@Override
252252
public Gpx getGpx() {
253-
return mGpx;
253+
return mGpxViewModel.gpx;
254254
}
255255

256256
@Override
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package org.nitri.opentopo.model;
2+
3+
import androidx.lifecycle.ViewModel;
4+
5+
import io.ticofab.androidgpxparser.parser.domain.Gpx;
6+
7+
public class GpxViewModel extends ViewModel {
8+
9+
public Gpx gpx;
10+
11+
}

app/src/main/java/org/nitri/opentopo/nearby/viewmodel/NearbyViewModel.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,12 @@ public class NearbyViewModel extends ViewModel {
1616

1717
private NearbyRepository mRepository;
1818

19-
private LiveData<List<NearbyItem>> mItems;
20-
2119
public void setRepository(NearbyRepository repository) {
2220
mRepository = repository;
2321
}
2422

2523
public LiveData<List<NearbyItem>> getItems() {
26-
mItems = mRepository.loadNearbyItems();
27-
return mItems;
24+
return mRepository.loadNearbyItems();
2825
}
2926

3027
}

0 commit comments

Comments
 (0)