From 561623e936d7fd77ca3096b61a00b4bce08bb8f3 Mon Sep 17 00:00:00 2001
From: "de@itstall.de" <de@itstall.de>
Date: Mon, 30 Mar 2020 19:51:05 +0200
Subject: [PATCH] Settings working

---
 .../controller/NextApAdapter.java             | 18 +------
 .../freifunkfranken/model/RequestAps.java     | 25 ++++++++-
 .../freifunkfranken/view/MapsFragment.java    | 24 ++++-----
 .../freifunkfranken/view/NextApFragment.java  |  8 +--
 .../view/SettingsActivity.java                | 28 +++++++++-
 app/src/main/res/layout/activity_settings.xml | 53 +++++++++++++++----
 app/src/main/res/values/strings.xml           |  3 ++
 7 files changed, 114 insertions(+), 45 deletions(-)

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 fa64643..3311304 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 6037fed..9417def 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 3acbff0..242bee5 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 1c71eae..7c3bb8f 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 23c0cd5..af991a5 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 0e8d4cc..851d375 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 1bf15f8..0cfb320 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>
-- 
GitLab