From 161c24f78c5d52b77075ee1753a4999e02130a20 Mon Sep 17 00:00:00 2001
From: "de@itstall.de" <de@itstall.de>
Date: Mon, 30 Mar 2020 20:58:49 +0200
Subject: [PATCH] More Settings; LocationService

---
 app/build.gradle                                |  1 +
 app/src/main/AndroidManifest.xml                |  6 ++++++
 .../controller/MainActivityListener.java        | 17 -----------------
 .../controller/MyLocationListener.java          |  2 +-
 .../{model => controller}/RequestAps.java       | 14 +++++++++++---
 .../{model => controller}/RequestSsids.java     |  3 ++-
 .../freifunkfranken/view/MainActivity.java      | 13 ++-----------
 .../freifunkfranken/view/MapsFragment.java      |  6 ++----
 .../freifunkfranken/view/NextApFragment.java    |  5 ++---
 .../freifunkfranken/view/SsidsFragment.java     |  3 +--
 10 files changed, 28 insertions(+), 42 deletions(-)
 delete mode 100644 app/src/main/java/de/itstall/freifunkfranken/controller/MainActivityListener.java
 rename app/src/main/java/de/itstall/freifunkfranken/{model => controller}/RequestAps.java (85%)
 rename app/src/main/java/de/itstall/freifunkfranken/{model => controller}/RequestSsids.java (95%)

diff --git a/app/build.gradle b/app/build.gradle
index 07beea8..f5ca286 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -36,4 +36,5 @@ dependencies {
     androidTestImplementation 'androidx.test.ext:junit:1.1.1'
     androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
     implementation 'com.google.android.material:material:1.1.0'
+    implementation 'com.google.android.gms:play-services-location:17.0.0'
 }
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 8222f44..29171d2 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -1,6 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="de.itstall.freifunkfranken">
+
     <!--
          The ACCESS_COARSE/FINE_LOCATION permissions are not required to use
          Google Maps Android API v2, but you must specify either coarse or fine
@@ -19,6 +20,11 @@
         android:roundIcon="@mipmap/ic_launcher_round"
         android:supportsRtl="true"
         android:theme="@style/AppTheme">
+        <service
+            android:name=".LocationService"
+            android:enabled="true"
+            android:exported="true"></service>
+
         <activity android:name=".view.AboutActivity" />
         <activity android:name=".view.SettingsActivity" />
         <!--
diff --git a/app/src/main/java/de/itstall/freifunkfranken/controller/MainActivityListener.java b/app/src/main/java/de/itstall/freifunkfranken/controller/MainActivityListener.java
deleted file mode 100644
index d7dfbb7..0000000
--- a/app/src/main/java/de/itstall/freifunkfranken/controller/MainActivityListener.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package de.itstall.freifunkfranken.controller;
-
-import android.view.View;
-
-import de.itstall.freifunkfranken.R;
-
-public class MainActivityListener implements View.OnClickListener {
-    @Override
-    public void onClick(View v) {
-        switch (v.getId()) {
-            case R.id.AboutBtnClose:
-                break;
-            case R.id.SettingsBtnClose:
-                break;
-        }
-    }
-}
diff --git a/app/src/main/java/de/itstall/freifunkfranken/controller/MyLocationListener.java b/app/src/main/java/de/itstall/freifunkfranken/controller/MyLocationListener.java
index ac6580b..96201cc 100644
--- a/app/src/main/java/de/itstall/freifunkfranken/controller/MyLocationListener.java
+++ b/app/src/main/java/de/itstall/freifunkfranken/controller/MyLocationListener.java
@@ -36,6 +36,7 @@ public class MyLocationListener {
                 && ActivityCompat.checkSelfPermission(mainActivity, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED
                 && ActivityCompat.checkSelfPermission(mainActivity, Manifest.permission.ACCESS_NETWORK_STATE) != PackageManager.PERMISSION_GRANTED) {
         }
+        ActivityCompat.requestPermissions(mainActivity, new String[] { Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_NETWORK_STATE }, 1);
 
         try {
             gps_loc = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
@@ -57,7 +58,6 @@ public class MyLocationListener {
             longitude = 0.0;
         }
 
-        ActivityCompat.requestPermissions(mainActivity, new String[] { Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_NETWORK_STATE }, 1);
 
         //locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, mLocationListener);
         //locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, mLocationListener);
diff --git a/app/src/main/java/de/itstall/freifunkfranken/model/RequestAps.java b/app/src/main/java/de/itstall/freifunkfranken/controller/RequestAps.java
similarity index 85%
rename from app/src/main/java/de/itstall/freifunkfranken/model/RequestAps.java
rename to app/src/main/java/de/itstall/freifunkfranken/controller/RequestAps.java
index 9417def..c804304 100644
--- a/app/src/main/java/de/itstall/freifunkfranken/model/RequestAps.java
+++ b/app/src/main/java/de/itstall/freifunkfranken/controller/RequestAps.java
@@ -1,4 +1,4 @@
-package de.itstall.freifunkfranken.model;
+package de.itstall.freifunkfranken.controller;
 
 import android.content.Context;
 import android.util.Log;
@@ -16,6 +16,8 @@ import java.util.Comparator;
 import java.util.List;
 import java.util.Objects;
 
+import de.itstall.freifunkfranken.model.AccessPoint;
+
 public class RequestAps {
     private List<AccessPoint> accessPointList = new ArrayList<>();
 
@@ -57,17 +59,23 @@ public class RequestAps {
         }
     }
 
-    public List<AccessPoint> getSortedList(boolean showOffline) {
+    public List<AccessPoint> getSortedList(boolean showOffline, int routerCount) {
         List<AccessPoint> newList = new ArrayList<>();
+        int counter = 0;
 
         for (AccessPoint ap : accessPointList) {
             if(showOffline) {
                 //float distance = NextApFragment.myLocationListener.myLocation.distanceTo(ap.getLocation()) / 1000;
                 //ap.setDistance((int) distance / 1000);
                 newList.add(ap);
+                counter++;
             } else {
-                if(ap.isOnline()) newList.add(ap);
+                if(ap.isOnline()) {
+                    newList.add(ap);
+                    counter++;
+                }
             }
+            if(routerCount > 0 && counter == routerCount) break;
         }
 
         Collections.sort(newList, new Comparator<AccessPoint>() {
diff --git a/app/src/main/java/de/itstall/freifunkfranken/model/RequestSsids.java b/app/src/main/java/de/itstall/freifunkfranken/controller/RequestSsids.java
similarity index 95%
rename from app/src/main/java/de/itstall/freifunkfranken/model/RequestSsids.java
rename to app/src/main/java/de/itstall/freifunkfranken/controller/RequestSsids.java
index 0ca9408..62efd11 100644
--- a/app/src/main/java/de/itstall/freifunkfranken/model/RequestSsids.java
+++ b/app/src/main/java/de/itstall/freifunkfranken/controller/RequestSsids.java
@@ -1,4 +1,4 @@
-package de.itstall.freifunkfranken.model;
+package de.itstall.freifunkfranken.controller;
 
 import android.app.ProgressDialog;
 import android.content.Context;
@@ -25,6 +25,7 @@ import java.util.List;
 import java.util.Objects;
 
 import de.itstall.freifunkfranken.controller.SsidsAdapter;
+import de.itstall.freifunkfranken.model.Ssid;
 
 public class RequestSsids {
     private List<Ssid> ssidList = new ArrayList<>();
diff --git a/app/src/main/java/de/itstall/freifunkfranken/view/MainActivity.java b/app/src/main/java/de/itstall/freifunkfranken/view/MainActivity.java
index 20adf51..4596c03 100644
--- a/app/src/main/java/de/itstall/freifunkfranken/view/MainActivity.java
+++ b/app/src/main/java/de/itstall/freifunkfranken/view/MainActivity.java
@@ -1,11 +1,11 @@
 package de.itstall.freifunkfranken.view;
 
 import android.content.Intent;
+import android.location.Location;
 import android.os.Bundle;
 import android.view.Menu;
 import android.view.MenuInflater;
 import android.view.MenuItem;
-import android.widget.Button;
 
 import androidx.appcompat.app.AppCompatActivity;
 import androidx.fragment.app.Fragment;
@@ -18,15 +18,12 @@ import java.util.Objects;
 
 import de.itstall.freifunkfranken.R;
 import de.itstall.freifunkfranken.controller.FileDownloader;
-import de.itstall.freifunkfranken.controller.MyLocationListener;
 
 public class MainActivity extends AppCompatActivity {
     public Fragment fragment = null;
     public boolean downloadDone = false;
     TabLayout tabLayout;
-    MyLocationListener myLocationListener;
-    Button btnAboutClose;
-    //MainActivityListener mainActivityListener;
+    public static Location myLocation;
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
@@ -71,10 +68,6 @@ public class MainActivity extends AppCompatActivity {
             }
         });
 
-
-        //btnAboutClose = findViewById(R.id.AboutBtnClose);
-        //btnAboutClose.setOnClickListener(mainActivityListener);
-
         downloadFiles();
     }
 
@@ -110,8 +103,6 @@ public class MainActivity extends AppCompatActivity {
         fragmentTransaction.replace(R.id.frameLayout, fragment);
         fragmentTransaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
         fragmentTransaction.commit();
-        //myLocationListener = new MyLocationListener(this);
-        //myLocationListener.getLocation();
     }
 
     @Override
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 242bee5..c8a6d7c 100644
--- a/app/src/main/java/de/itstall/freifunkfranken/view/MapsFragment.java
+++ b/app/src/main/java/de/itstall/freifunkfranken/view/MapsFragment.java
@@ -11,7 +11,6 @@ import androidx.fragment.app.Fragment;
 
 import com.google.android.gms.maps.CameraUpdateFactory;
 import com.google.android.gms.maps.GoogleMap;
-import com.google.android.gms.maps.MapFragment;
 import com.google.android.gms.maps.OnMapReadyCallback;
 import com.google.android.gms.maps.SupportMapFragment;
 import com.google.android.gms.maps.model.BitmapDescriptorFactory;
@@ -22,9 +21,8 @@ import java.util.List;
 import java.util.Objects;
 
 import de.itstall.freifunkfranken.R;
-import de.itstall.freifunkfranken.controller.MyLocationListener;
 import de.itstall.freifunkfranken.model.AccessPoint;
-import de.itstall.freifunkfranken.model.RequestAps;
+import de.itstall.freifunkfranken.controller.RequestAps;
 
 public class MapsFragment extends Fragment implements OnMapReadyCallback {
     private static final String TAG = MapsFragment.class.getSimpleName();
@@ -70,7 +68,7 @@ public class MapsFragment extends Fragment implements OnMapReadyCallback {
     }
 
     private void showApsOnMap() {
-        List<AccessPoint> accessPointList = new RequestAps(Objects.requireNonNull(this.getContext())).getSortedList(sharedPreferences.getBoolean("MapOfflineRouter", false));
+        List<AccessPoint> accessPointList = new RequestAps(Objects.requireNonNull(this.getContext())).getSortedList(sharedPreferences.getBoolean("MapOfflineRouter", false), 0);
 
         for(int i = 0; i < accessPointList.size(); i++) {
             LatLng ap = new LatLng(accessPointList.get(i).getLat(), accessPointList.get(i).getLon());
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 7c3bb8f..1dcab18 100644
--- a/app/src/main/java/de/itstall/freifunkfranken/view/NextApFragment.java
+++ b/app/src/main/java/de/itstall/freifunkfranken/view/NextApFragment.java
@@ -16,10 +16,9 @@ import java.util.List;
 import java.util.Objects;
 
 import de.itstall.freifunkfranken.R;
-import de.itstall.freifunkfranken.controller.MyLocationListener;
 import de.itstall.freifunkfranken.controller.NextApAdapter;
 import de.itstall.freifunkfranken.model.AccessPoint;
-import de.itstall.freifunkfranken.model.RequestAps;
+import de.itstall.freifunkfranken.controller.RequestAps;
 
 public class NextApFragment extends Fragment {
     private RecyclerView rvAps;
@@ -43,7 +42,7 @@ public class NextApFragment extends Fragment {
         rvAps.setLayoutManager(new LinearLayoutManager(getActivity()));
         tvTemp = rootView.findViewById(R.id.tvTemp);
 
-        List<AccessPoint> accessPointList = new RequestAps(Objects.requireNonNull(this.getContext())).getSortedList(sharedPreferences.getBoolean("OfflineRouter", false));
+        List<AccessPoint> accessPointList = new RequestAps(Objects.requireNonNull(this.getContext())).getSortedList(sharedPreferences.getBoolean("OfflineRouter", false), sharedPreferences.getInt("RouterCount", 10));
         showApList(accessPointList);
 
         return rootView;
diff --git a/app/src/main/java/de/itstall/freifunkfranken/view/SsidsFragment.java b/app/src/main/java/de/itstall/freifunkfranken/view/SsidsFragment.java
index 5c5b33d..419965c 100644
--- a/app/src/main/java/de/itstall/freifunkfranken/view/SsidsFragment.java
+++ b/app/src/main/java/de/itstall/freifunkfranken/view/SsidsFragment.java
@@ -13,9 +13,8 @@ import java.util.List;
 import java.util.Objects;
 
 import de.itstall.freifunkfranken.R;
-import de.itstall.freifunkfranken.controller.NextApAdapter;
 import de.itstall.freifunkfranken.controller.SsidsAdapter;
-import de.itstall.freifunkfranken.model.RequestSsids;
+import de.itstall.freifunkfranken.controller.RequestSsids;
 import de.itstall.freifunkfranken.model.Ssid;
 
 public class SsidsFragment extends androidx.fragment.app.Fragment {
-- 
GitLab