commit d1331b8bb483caddf3231f8ab77821bd1661169a
parent 5d8498fc623be0f3c33e81b7f4ca96c87165f113
Author: William Lindholm <william_lindholm@outlook.com>
Date: Wed, 10 May 2023 15:32:17 +0200
Now saving and loading filter/sorting as preference.
Diffstat:
1 file changed, 51 insertions(+), 3 deletions(-)
diff --git a/app/src/main/java/com/example/project_assignment/MainActivity.java b/app/src/main/java/com/example/project_assignment/MainActivity.java
@@ -103,6 +103,7 @@ public class MainActivity extends AppCompatActivity implements JsonTask.JsonTask
Log.d("Meteorite: ", m.toString());
}
+
RecyclerView recyclerView = findViewById(R.id.recyclerView);
adapter = new RecyclerViewAdapter(this, meteorites);
@@ -165,6 +166,7 @@ public class MainActivity extends AppCompatActivity implements JsonTask.JsonTask
}
}
+
//remove meteorites that did not match the filter settings.
for (Meteorite m : toRemove) {
meteorites.remove(m);
@@ -173,17 +175,25 @@ public class MainActivity extends AppCompatActivity implements JsonTask.JsonTask
switch (selectedSortingButton) {
case R.id.radioButtonSortLocation:
Collections.sort(meteorites, new SortByLocation());
- System.out.println("sorting location");
+ preferenceEditor.putString("sort", "location");
break;
case R.id.radioButtonSortWeight:
Collections.sort(meteorites, new SortByWeight());
- System.out.println("Sort by mass");
+ preferenceEditor.putString("sort", "mass");
break;
default:
Collections.sort(meteorites, new SortByName());
- System.out.println("sort by name");
+ preferenceEditor.putString("name", "name");
}
+ //save filter options.
+ preferenceEditor.putInt("minMass", intMinMass);
+ preferenceEditor.putInt("maxMass", intMaxMass);
+ preferenceEditor.putInt("minYear", intMinYear);
+ preferenceEditor.putInt("maxYear", intMaxYear);
+ preferenceEditor.putInt("distance", distance);
+ preferenceEditor.apply();
+
adapter.notifyDataSetChanged();
@@ -246,6 +256,44 @@ public class MainActivity extends AppCompatActivity implements JsonTask.JsonTask
m.generateDistanceFrom(location.getLatitude(), location.getLongitude());
distanceSet = true;
}
+ filterMeteorites();
+ }
+
+ public void filterMeteorites() {
+ //if there are saved filter settings, load them.
+ if (preference.contains("minMass")) {
+ Toast.makeText(MainActivity.this, "Loaded stored filter", Toast.LENGTH_SHORT).show();
+ ArrayList<Meteorite> toRemove = new ArrayList<>();
+
+ for (Meteorite m : meteorites) {
+ boolean matchingFilter = m.matchingFilter(
+ preference.getInt("minMass", 0),
+ preference.getInt("maxMass", 0),
+ preference.getInt("minYear", 0),
+ preference.getInt("maxYear", 0),
+ preference.getInt("distance", 0)
+ );
+ if (!matchingFilter) {
+ toRemove.add(m);
+ }
+ }
+ //remove meteorites that did not match the filter settings.
+ for (Meteorite m : toRemove) {
+ meteorites.remove(m);
+ }
+
+ switch (preference.getString("sort", "")) {
+ case "location":
+ Collections.sort(meteorites, new SortByLocation());
+ break;
+ case "mass":
+ Collections.sort(meteorites, new SortByWeight());
+ break;
+ default:
+ Collections.sort(meteorites, new SortByName());
+ }
+ adapter.notifyDataSetChanged();
+ }
}
}