diff --git a/app/src/main/java/de/itstall/freifunkfranken/controller/NextApAdapter.java b/app/src/main/java/de/itstall/freifunkfranken/controller/NextApAdapter.java index fa64643dc9eaae96abfdfffeca29b5fefafcfe15..3311304fa7215baec13bf48f562aaa4ce806c864 100644 --- a/app/src/main/java/de/itstall/freifunkfranken/controller/NextApAdapter.java +++ b/app/src/main/java/de/itstall/freifunkfranken/controller/NextApAdapter.java @@ -20,23 +20,7 @@ public class NextApAdapter extends RecyclerView.Adapter<NextApAdapter.ViewHolder private List<AccessPoint> accessPointList; public NextApAdapter(List<AccessPoint> aps) { - this.accessPointList = sortApList(aps); - } - - private List<AccessPoint> sortApList(List<AccessPoint> apList) { - for (AccessPoint ap : apList) { - //float distance = NextApFragment.myLocationListener.myLocation.distanceTo(ap.getLocation()) / 1000; - //ap.setDistance((int) distance / 1000); - } - - Collections.sort(apList, new Comparator<AccessPoint>() { - @Override - public int compare(AccessPoint o1, AccessPoint o2) { - return Integer.compare(o1.getDistance(), o2.getDistance()); - } - }); - - return apList; + this.accessPointList = aps; } @NonNull diff --git a/app/src/main/java/de/itstall/freifunkfranken/model/RequestAps.java b/app/src/main/java/de/itstall/freifunkfranken/model/RequestAps.java index 6037feddb00d133a8256461d1bc1f493aa14e98a..9417def38a5d3f32a4d6cbb7e576d81286e0da28 100644 --- a/app/src/main/java/de/itstall/freifunkfranken/model/RequestAps.java +++ b/app/src/main/java/de/itstall/freifunkfranken/model/RequestAps.java @@ -11,6 +11,8 @@ import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; import java.util.List; import java.util.Objects; @@ -55,7 +57,26 @@ public class RequestAps { } } - public List<AccessPoint> getAccessPointList() { - return accessPointList; + public List<AccessPoint> getSortedList(boolean showOffline) { + List<AccessPoint> newList = new ArrayList<>(); + + for (AccessPoint ap : accessPointList) { + if(showOffline) { + //float distance = NextApFragment.myLocationListener.myLocation.distanceTo(ap.getLocation()) / 1000; + //ap.setDistance((int) distance / 1000); + newList.add(ap); + } else { + if(ap.isOnline()) newList.add(ap); + } + } + + Collections.sort(newList, new Comparator<AccessPoint>() { + @Override + public int compare(AccessPoint o1, AccessPoint o2) { + return Integer.compare(o1.getDistance(), o2.getDistance()); + } + }); + + return newList; } } diff --git a/app/src/main/java/de/itstall/freifunkfranken/view/MapsFragment.java b/app/src/main/java/de/itstall/freifunkfranken/view/MapsFragment.java index 3acbff063b150a0d6bb9e68e841f9c488b6c94c6..242bee597e52c82984aacf9dbae8698d6eb8c673 100644 --- a/app/src/main/java/de/itstall/freifunkfranken/view/MapsFragment.java +++ b/app/src/main/java/de/itstall/freifunkfranken/view/MapsFragment.java @@ -1,5 +1,6 @@ package de.itstall.freifunkfranken.view; +import android.content.SharedPreferences; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; @@ -27,9 +28,9 @@ import de.itstall.freifunkfranken.model.RequestAps; public class MapsFragment extends Fragment implements OnMapReadyCallback { private static final String TAG = MapsFragment.class.getSimpleName(); - static MyLocationListener myLocationListener; private GoogleMap mMap; private View rootView; + private SharedPreferences sharedPreferences; @Override public void onCreate(Bundle savedInstanceState) { @@ -40,12 +41,12 @@ public class MapsFragment extends Fragment implements OnMapReadyCallback { public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { rootView = inflater.inflate(R.layout.maps_fragment, container, false); - //myLocationListener = new MyLocationListener(rootView); - //myLocationListener.getLocation(); SupportMapFragment mapFragment = (SupportMapFragment) getChildFragmentManager().findFragmentById(R.id.mapFragment); if (mapFragment != null) mapFragment.getMapAsync(this); + sharedPreferences = rootView.getContext().getSharedPreferences("FreifunkFrankenApp", 0); + return rootView; } @@ -53,14 +54,10 @@ public class MapsFragment extends Fragment implements OnMapReadyCallback { public void onMapReady(GoogleMap googleMap) { mMap = googleMap; - // Turn on the My Location layer and the related control on the map. updateLocationUI(); - - // Get the current location of the device and set the position of the map. getDeviceLocation(); LatLng schonungen = new LatLng(50.0544, 10.3128); - mMap.addMarker(new MarkerOptions().position(schonungen).title("Marker in Schonungen")); mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(schonungen, 10)); mMap.setOnCameraIdleListener(new GoogleMap.OnCameraIdleListener() { @Override @@ -73,13 +70,14 @@ public class MapsFragment extends Fragment implements OnMapReadyCallback { } private void showApsOnMap() { - List<AccessPoint> accessPointList = new RequestAps(Objects.requireNonNull(this.getContext())).getAccessPointList(); + List<AccessPoint> accessPointList = new RequestAps(Objects.requireNonNull(this.getContext())).getSortedList(sharedPreferences.getBoolean("MapOfflineRouter", false)); + for(int i = 0; i < accessPointList.size(); i++) { - if(accessPointList.get(i).isOnline()) { - LatLng ap = new LatLng(accessPointList.get(i).getLat(), accessPointList.get(i).getLon()); - MarkerOptions markerOptions = new MarkerOptions().position(ap).title(accessPointList.get(i).getName()); - mMap.addMarker(markerOptions); - } + LatLng ap = new LatLng(accessPointList.get(i).getLat(), accessPointList.get(i).getLon()); + MarkerOptions markerOptions = new MarkerOptions().position(ap).title(accessPointList.get(i).getName()); + if(accessPointList.get(i).isOnline()) markerOptions.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_GREEN)); + else markerOptions.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED)); + mMap.addMarker(markerOptions); } } diff --git a/app/src/main/java/de/itstall/freifunkfranken/view/NextApFragment.java b/app/src/main/java/de/itstall/freifunkfranken/view/NextApFragment.java index 1c71eaee4478be27f172449a460a5cdf1ee8f1b1..7c3bb8ffab7d6ae92619045fb8a527013eb2f54b 100644 --- a/app/src/main/java/de/itstall/freifunkfranken/view/NextApFragment.java +++ b/app/src/main/java/de/itstall/freifunkfranken/view/NextApFragment.java @@ -1,5 +1,6 @@ package de.itstall.freifunkfranken.view; +import android.content.SharedPreferences; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; @@ -24,7 +25,7 @@ public class NextApFragment extends Fragment { private RecyclerView rvAps; private View rootView; private TextView tvTemp; - //public MyLocationListener myLocationListener; + private SharedPreferences sharedPreferences; @Override public void onCreate(Bundle savedInstanceState) { @@ -35,13 +36,14 @@ public class NextApFragment extends Fragment { public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { rootView = inflater.inflate(R.layout.nextap_fragment, container, false); - //myLocationListener = new MyLocationListener(rootView); + sharedPreferences = rootView.getContext().getSharedPreferences("FreifunkFrankenApp", 0); + rvAps = rootView.findViewById(R.id.rvAps); rvAps.setLayoutManager(new LinearLayoutManager(getActivity())); tvTemp = rootView.findViewById(R.id.tvTemp); - List<AccessPoint> accessPointList = new RequestAps(Objects.requireNonNull(this.getContext())).getAccessPointList(); + List<AccessPoint> accessPointList = new RequestAps(Objects.requireNonNull(this.getContext())).getSortedList(sharedPreferences.getBoolean("OfflineRouter", false)); showApList(accessPointList); return rootView; diff --git a/app/src/main/java/de/itstall/freifunkfranken/view/SettingsActivity.java b/app/src/main/java/de/itstall/freifunkfranken/view/SettingsActivity.java index 23c0cd5bd77403e451a8a10ca3eb8bff96a2dbb8..af991a56b31463075893f7653fadac1b1d5accbc 100644 --- a/app/src/main/java/de/itstall/freifunkfranken/view/SettingsActivity.java +++ b/app/src/main/java/de/itstall/freifunkfranken/view/SettingsActivity.java @@ -1,25 +1,51 @@ package de.itstall.freifunkfranken.view; +import android.content.SharedPreferences; +import android.content.SharedPreferences.Editor; import android.os.Bundle; import android.view.View; import android.widget.Button; +import android.widget.EditText; +import android.widget.Switch; import androidx.appcompat.app.AppCompatActivity; import de.itstall.freifunkfranken.R; public class SettingsActivity extends AppCompatActivity { + SharedPreferences sharedPreferences; + Switch settingsSwOfflineRouter, settingsSwMapOfflineRouter; + EditText settingsTxtRouterCount; + Button settingsBtnClose; + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_settings); - Button settingsBtnClose = (Button) findViewById(R.id.SettingsBtnClose); + sharedPreferences = getApplicationContext().getSharedPreferences("FreifunkFrankenApp", 0); + settingsSwOfflineRouter = (Switch) findViewById(R.id.settingsSwOfflineRouter); + settingsSwMapOfflineRouter = (Switch) findViewById(R.id.settingsSwMapOfflineRouter); + settingsTxtRouterCount = (EditText) findViewById(R.id.settingsTxtRouterCount); + + settingsTxtRouterCount.setText(String.valueOf(sharedPreferences.getInt("RouterCount", 10))); + settingsBtnClose = (Button) findViewById(R.id.SettingsBtnClose); + settingsSwOfflineRouter.setChecked(sharedPreferences.getBoolean("OfflineRouter", false)); + settingsSwMapOfflineRouter.setChecked(sharedPreferences.getBoolean("MapOfflineRouter", false)); settingsBtnClose.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { + saveSettings(); finish(); } }); } + + public void saveSettings() { + Editor editor = sharedPreferences.edit(); + editor.putBoolean("OfflineRouter", settingsSwOfflineRouter.isChecked()); + editor.putBoolean("MapOfflineRouter", settingsSwMapOfflineRouter.isChecked()); + editor.putInt("RouterCount", Integer.parseInt(settingsTxtRouterCount.getText().toString())); + editor.apply(); + } } \ No newline at end of file diff --git a/app/src/main/res/layout/activity_settings.xml b/app/src/main/res/layout/activity_settings.xml index 0e8d4cc1a29f80f8bbc61953aec6c6aec91a55b9..851d375ab37e77e880b28c575324cc733b33c671 100644 --- a/app/src/main/res/layout/activity_settings.xml +++ b/app/src/main/res/layout/activity_settings.xml @@ -13,34 +13,69 @@ android:layout_marginStart="16dp" android:layout_marginTop="16dp" android:text="@string/menuItemSettings" + android:textColor="@color/freifunk_magenta" android:textSize="24sp" android:textStyle="bold" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> <TextView - android:id="@+id/textView8" + android:id="@+id/textView7" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="16dp" android:layout_marginTop="16dp" + android:text="@string/settingsTvNextRouter" + android:textColor="@color/freifunk_blau" + android:textStyle="bold" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@+id/textView6" /> + + <Switch + android:id="@+id/settingsSwOfflineRouter" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginStart="16dp" + android:layout_marginTop="8dp" + android:text="@string/settingsTvOfflineRouter" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@+id/textView7" /> + + <TextView + android:id="@+id/textView8" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginStart="16dp" + android:layout_marginTop="8dp" android:text="@string/settingsTvRouterCount" app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toBottomOf="@+id/switch1" /> + app:layout_constraintTop_toBottomOf="@+id/settingsSwOfflineRouter" /> <EditText - android:id="@+id/editText" + android:id="@+id/settingsTxtRouterCount" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="8dp" - android:layout_marginTop="98dp" + android:layout_marginTop="116dp" android:ems="10" android:hint="@string/count" - android:inputType="textPersonName" + android:inputType="number" android:textSize="12sp" app:layout_constraintStart_toEndOf="@+id/textView8" app:layout_constraintTop_toTopOf="parent" /> + <TextView + android:id="@+id/textView9" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginStart="16dp" + android:layout_marginTop="16dp" + android:text="@string/settingsTvMap" + android:textColor="@color/freifunk_blau" + android:textStyle="bold" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@+id/textView8" /> + <Button android:id="@+id/SettingsBtnClose" android:layout_width="0dp" @@ -53,12 +88,12 @@ app:layout_constraintStart_toStartOf="parent" /> <Switch - android:id="@+id/switch1" + android:id="@+id/settingsSwMapOfflineRouter" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="16dp" - android:layout_marginTop="16dp" - android:text="@string/settingsTvOfflineRouter" + android:layout_marginTop="8dp" + android:text="@string/settingsSwMapOfflineRouter" app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toBottomOf="@+id/textView6" /> + app:layout_constraintTop_toBottomOf="@+id/textView9" /> </androidx.constraintlayout.widget.ConstraintLayout> \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 1bf15f8e6f6ac123f611aa63bb66fe8e2c69dc88..0cfb320abfa1d79a8c1e1a0e55363344f85e1bfc 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -25,4 +25,7 @@ <string name="settingsTvOfflineRouter">Zeige offline Router an</string> <string name="settingsTvRouterCount">Anzahl der anzuzeigenden Router</string> <string name="count">Anzahl</string> + <string name="settingsTvNextRouter">Nächste Router</string> + <string name="settingsSwMapOfflineRouter">Zeige offline Router an</string> + <string name="settingsTvMap">Karte</string> </resources>