diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro new file mode 100644 index 0000000000000000000000000000000000000000..f1b424510da51fd82143bc74a0a801ae5a1e2fcd --- /dev/null +++ b/app/proguard-rules.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 29171d2ac1e9ded2c627bc33d9a15a8bad892613..f98b411f83d0084f82afb28811b999d4f40bd210 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,30 +1,31 @@ <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:tools="http://schemas.android.com/tools" 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 location permissions for the 'MyLocation' functionality. --> - <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.INTERNET" /> - <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> + <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> + <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> + <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" /> + <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> + <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> + <uses-permission + android:name="android.permission.WRITE_SETTINGS" + tools:ignore="ProtectedPermissions" /> <application android:allowBackup="true" android:fullBackupContent="@xml/backup_descriptor" - android:icon="@mipmap/ic_launcher" + android:icon="@mipmap/app_icon" android:label="@string/app_name" - android:roundIcon="@mipmap/ic_launcher_round" + android:roundIcon="@mipmap/app_icon" 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/MyLocationListener.java b/app/src/main/java/de/itstall/freifunkfranken/controller/MyLocationListener.java deleted file mode 100644 index 96201ccaba3ea1e407cdbfdaf4e0d823fa0b902c..0000000000000000000000000000000000000000 --- a/app/src/main/java/de/itstall/freifunkfranken/controller/MyLocationListener.java +++ /dev/null @@ -1,106 +0,0 @@ -package de.itstall.freifunkfranken.controller; - -import android.Manifest; -import android.app.Activity; -import android.content.Context; -import android.content.pm.PackageManager; -import android.location.Location; -import android.location.LocationListener; -import android.location.LocationManager; -import android.os.Bundle; -import android.util.Log; -import android.view.View; - -import androidx.core.app.ActivityCompat; - -import de.itstall.freifunkfranken.view.MainActivity; - -public class MyLocationListener { - public static LocationManager locationManager; - public static Location myLocation; - public static double longitude; - public static double latitude; - private static Location gps_loc; - private static Location network_loc; - private static Location final_loc; - private MainActivity mainActivity; - - public MyLocationListener(MainActivity mainActivity) { - this.mainActivity = mainActivity; - locationManager = (LocationManager) mainActivity.getSystemService(Context.LOCATION_SERVICE); - myLocation = getLocation(); - } - - public Location getLocation() { - if (ActivityCompat.checkSelfPermission(mainActivity, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED - && 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); - network_loc = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER); - } catch (Exception e) { - e.printStackTrace(); - } - - if (gps_loc != null) { - final_loc = gps_loc; - latitude = final_loc.getLatitude(); - longitude = final_loc.getLongitude(); - } else if (network_loc != null) { - final_loc = network_loc; - latitude = final_loc.getLatitude(); - longitude = final_loc.getLongitude(); - } else { - latitude = 0.0; - longitude = 0.0; - } - - - //locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, mLocationListener); - //locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, mLocationListener); - - Location gpsLocation = new Location(""); - gpsLocation.setLatitude(latitude); - gpsLocation.setLongitude(longitude); - - return gpsLocation; - } - - private final LocationListener mLocationListener = new LocationListener() { - @Override - public void onLocationChanged(final Location location) { - //your code here - if(MyLocationListener.latitude != location.getLatitude() && MyLocationListener.longitude != location.getLongitude()) { - MyLocationListener.latitude = location.getLatitude(); - MyLocationListener.longitude = location.getLongitude(); - Log.v("LOCATION UPDATE", "IN ON LOCATION CHANGE, lat=" + location.getLatitude() + ", lon=" + location.getLongitude()); - } - - /* - LatLng userPosition = new LatLng(location.getLatitude(),location.getLongitude()); - - googleMap.addMarker(new MarkerOptions() - .position(userPosition) - .icon(BitmapDescriptorFactory.fromResource(R.drawable.ic_pin_fill)) - .title("Test Pin"));*/ - } - - @Override - public void onStatusChanged(String provider, int status, Bundle extras) { - - } - - @Override - public void onProviderEnabled(String provider) { - - } - - @Override - public void onProviderDisabled(String provider) { - - } - }; -} 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 3311304fa7215baec13bf48f562aaa4ce806c864..207a9d9532e5f52e8bb098d3cad415b8c5fa5062 100644 --- a/app/src/main/java/de/itstall/freifunkfranken/controller/NextApAdapter.java +++ b/app/src/main/java/de/itstall/freifunkfranken/controller/NextApAdapter.java @@ -9,8 +9,6 @@ import android.widget.TextView; import androidx.annotation.NonNull; import androidx.recyclerview.widget.RecyclerView; -import java.util.Collections; -import java.util.Comparator; import java.util.List; import de.itstall.freifunkfranken.R; @@ -26,7 +24,7 @@ public class NextApAdapter extends RecyclerView.Adapter<NextApAdapter.ViewHolder @NonNull @Override public NextApAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { - @SuppressLint("InflateParams") View viewApsItem = LayoutInflater.from(parent.getContext()).inflate(R.layout.aps_item, null); + @SuppressLint("InflateParams") View viewApsItem = LayoutInflater.from(parent.getContext()).inflate(R.layout.nextap_item, null); return new ViewHolder(viewApsItem); } diff --git a/app/src/main/java/de/itstall/freifunkfranken/controller/RequestAps.java b/app/src/main/java/de/itstall/freifunkfranken/controller/RequestAps.java index c804304ae8763b06732289f696c47237e0c71eed..a6d79c21507e3dee04a54f07a4479e9721c9e2f5 100644 --- a/app/src/main/java/de/itstall/freifunkfranken/controller/RequestAps.java +++ b/app/src/main/java/de/itstall/freifunkfranken/controller/RequestAps.java @@ -45,7 +45,6 @@ public class RequestAps { AccessPoint ap; for (int i = 0; i < nodes.length(); i++) { node = nodes.getJSONObject(i); - Log.i("node: ", node.getString("name")); ap = new AccessPoint( node.getString("name"), node.getDouble("lat"), diff --git a/app/src/main/java/de/itstall/freifunkfranken/controller/RequestSsids.java b/app/src/main/java/de/itstall/freifunkfranken/controller/RequestSsids.java index 62efd11beaa103c9a359252d3bda7f791a85408b..c708e01edcffdfe4905f21fc0378f17f87cc811f 100644 --- a/app/src/main/java/de/itstall/freifunkfranken/controller/RequestSsids.java +++ b/app/src/main/java/de/itstall/freifunkfranken/controller/RequestSsids.java @@ -1,30 +1,19 @@ package de.itstall.freifunkfranken.controller; -import android.app.ProgressDialog; import android.content.Context; -import android.content.DialogInterface; import android.util.Log; -import androidx.recyclerview.widget.DefaultItemAnimator; - import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; -import java.io.BufferedInputStream; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.net.HttpURLConnection; -import java.net.URL; import java.util.ArrayList; import java.util.List; import java.util.Objects; -import de.itstall.freifunkfranken.controller.SsidsAdapter; import de.itstall.freifunkfranken.model.Ssid; public class RequestSsids { diff --git a/app/src/main/java/de/itstall/freifunkfranken/controller/SsidsFragmentListener.java b/app/src/main/java/de/itstall/freifunkfranken/controller/SsidsFragmentListener.java new file mode 100644 index 0000000000000000000000000000000000000000..6bc3324573bdcccdb10773e302f6dc45458502e5 --- /dev/null +++ b/app/src/main/java/de/itstall/freifunkfranken/controller/SsidsFragmentListener.java @@ -0,0 +1,143 @@ +package de.itstall.freifunkfranken.controller; + +import android.Manifest; +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; +import android.net.ConnectivityManager; +import android.net.NetworkCapabilities; +import android.net.NetworkRequest; +import android.net.Uri; +import android.net.wifi.WifiConfiguration; +import android.net.wifi.WifiManager; +import android.net.wifi.WifiNetworkSpecifier; +import android.net.wifi.WifiNetworkSuggestion; +import android.os.Build; +import android.provider.Settings; +import android.util.Log; +import android.view.View; +import android.widget.Toast; + +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; + +import de.itstall.freifunkfranken.view.SsidsFragment; + +import static android.content.Context.WIFI_SERVICE; + +public class SsidsFragmentListener implements View.OnClickListener { + private static final String TAG = SsidsFragmentListener.class.getSimpleName(); + private View view; + private SsidsFragment ssidsFragment; + + public SsidsFragmentListener(SsidsFragment ssidsFragment) { + this.ssidsFragment = ssidsFragment; + } + + @Override + public void onClick(View view) { + this.view = view; + ssidsFragment.checkPermission(Manifest.permission.ACCESS_WIFI_STATE, ssidsFragment.REQUEST_ID_ACCESS_WIFI_STATE); + ssidsFragment.checkPermission(Manifest.permission.CHANGE_WIFI_STATE, ssidsFragment.REQUEST_ID_CHANGE_WIFI_STATE); + ssidsFragment.checkPermission(Manifest.permission.WRITE_SETTINGS, ssidsFragment.REQUEST_ID_WRITE_SETTINGS); + try { + if(checkSystemWritePermission()) { + Log.d(TAG, "Allow modify system settings is on"); + addSsidsToMobile(); + } else { + Log.d(TAG, "Allow modify system settings is off"); + Toast.makeText(view.getContext(), "Allow modify system settings => ON", Toast.LENGTH_SHORT).show(); + } + } catch (Exception e) { + Log.i(TAG, e.toString()); + Toast.makeText(view.getContext(), "unable to set SSIDs", Toast.LENGTH_LONG).show(); + } + } + + private boolean checkSystemWritePermission() { + if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + if(Settings.System.canWrite(view.getContext())) { + return true; + } else { + openAndroidPermissionsMenu(); + } + } + return false; + } + + private void openAndroidPermissionsMenu() { + if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + Intent intent = new Intent(Settings.ACTION_MANAGE_WRITE_SETTINGS); + intent.setData(Uri.parse("package:" + view.getContext().getPackageName())); + view.getContext().startActivity(intent); + } + } + + private void addSsidsToMobile() { + WifiConfiguration wifiConfig; + WifiManager wifiManager; + WifiNetworkSpecifier wifiNetworkSpecifier; + NetworkRequest networkRequest; + ConnectivityManager connectivityManager; + WifiNetworkSuggestion wifiNetworkSuggestion; + final List<WifiNetworkSuggestion> suggestionList = new ArrayList<>(); + int netId; + + for(int i = 0; i < SsidsFragment.ssidList.size(); i++) { + if (Build.VERSION.SDK_INT >= 29) { + /*wifiNetworkSpecifier = new WifiNetworkSpecifier.Builder() + .setSsid(SsidsFragment.ssidList.get(i).getSsid()) + .build(); + networkRequest = new NetworkRequest.Builder() + .addTransportType(NetworkCapabilities.TRANSPORT_WIFI) + .setNetworkSpecifier(wifiNetworkSpecifier) + .build(); + connectivityManager = (ConnectivityManager) view.getContext().getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE); + assert connectivityManager != null; + connectivityManager.requestNetwork(networkRequest, new ConnectivityManager.NetworkCallback());*/ + wifiNetworkSuggestion = new WifiNetworkSuggestion.Builder() + .setSsid(SsidsFragment.ssidList.get(i).getSsid()) + .setIsAppInteractionRequired(false) + .build(); + + suggestionList.add(wifiNetworkSuggestion); + } else { + wifiConfig = new WifiConfiguration(); + wifiConfig.SSID = String.format("\"%s\"", SsidsFragment.ssidList.get(i).getSsid()); + wifiConfig.preSharedKey = String.format("\"%s\"", SsidsFragment.ssidList.get(i).getKey()); + wifiConfig.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE); + + wifiManager = (WifiManager) view.getContext().getApplicationContext().getSystemService(WIFI_SERVICE); + //remember id + assert wifiManager != null; + // Turn wifi connection on + wifiManager.setWifiEnabled(true); + netId = wifiManager.addNetwork(wifiConfig); + Log.e(TAG, "adding ssid:" + SsidsFragment.ssidList.get(i).getSsid() + " returned netId: " + netId); + } + } + if(Build.VERSION.SDK_INT >= 29) { + Log.d(TAG, "Array size: " + suggestionList.size()); + wifiManager = (WifiManager) view.getContext().getApplicationContext().getSystemService(WIFI_SERVICE); + assert wifiManager != null; + final int status = wifiManager.addNetworkSuggestions(suggestionList); + if(status != WifiManager.STATUS_NETWORK_SUGGESTIONS_SUCCESS) { + Log.e(TAG, "Add wifi suggestion list failed " + status); + } + + final IntentFilter intentFilter = new IntentFilter(WifiManager.ACTION_WIFI_NETWORK_SUGGESTION_POST_CONNECTION); + final BroadcastReceiver broadcastReceiver = new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + if(!Objects.equals(intent.getAction(), WifiManager.ACTION_WIFI_NETWORK_SUGGESTION_POST_CONNECTION)) return; + } + }; + view.getContext().registerReceiver(broadcastReceiver, intentFilter); + } + /*wifiManager.disconnect(); + wifiManager.enableNetwork(netId, true); + wifiManager.reconnect();*/ + } +} diff --git a/app/src/main/java/de/itstall/freifunkfranken/model/MyLocationProvider.java b/app/src/main/java/de/itstall/freifunkfranken/model/MyLocationProvider.java new file mode 100644 index 0000000000000000000000000000000000000000..a80eed8b1517eec17e580c8fa83130951770285a --- /dev/null +++ b/app/src/main/java/de/itstall/freifunkfranken/model/MyLocationProvider.java @@ -0,0 +1,107 @@ +package de.itstall.freifunkfranken.model; + +import android.app.Activity; +import android.content.Context; +import android.content.IntentSender; +import android.location.Location; +import android.os.Bundle; +import android.util.Log; + +import com.google.android.gms.common.ConnectionResult; +import com.google.android.gms.common.api.GoogleApiClient; +import com.google.android.gms.location.LocationListener; +import com.google.android.gms.location.LocationRequest; +import com.google.android.gms.location.LocationServices; + +public class MyLocationProvider implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener, LocationListener { + + public static final String TAG = MyLocationProvider.class.getSimpleName(); + /* + * Define a request code to send to Google Play services This code is returned in + * Activity.onActivityResult + */ + private final static int CONNECTION_FAILURE_RESOLUTION_REQUEST = 9000; + private LocationCallback mLocationCallback; + private Context mContext; + private GoogleApiClient mGoogleApiClient; + private LocationRequest mLocationRequest; + public MyLocationProvider(Context context, LocationCallback callback) { + mGoogleApiClient = new GoogleApiClient.Builder(context) + .addConnectionCallbacks(this) + .addOnConnectionFailedListener(this) + .addApi(LocationServices.API) + .build(); + + mLocationCallback = callback; + + // Create the LocationRequest object + mLocationRequest = LocationRequest.create() + .setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY) + .setInterval(10 * 1000) // 10 seconds, in milliseconds + .setFastestInterval(1 * 1000); // 1 second, in milliseconds + + mContext = context; + } + + public void connect() { + Log.i(TAG, "connect: " + mContext.getClass().getSimpleName()); + mGoogleApiClient.connect(); + } + + public void disconnect() { + if (mGoogleApiClient.isConnected()) { + LocationServices.FusedLocationApi.removeLocationUpdates(mGoogleApiClient, this); + mGoogleApiClient.disconnect(); + } + } + + @Override + public void onConnected(Bundle bundle) { + Log.i(TAG, "Location services connected."); + + Location location = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient); + if (location == null) { + LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, this); + } else { + mLocationCallback.handleNewLocation(location); + } + } + + @Override + public void onConnectionSuspended(int i) { + + } + + @Override + public void onConnectionFailed(ConnectionResult connectionResult) { + /* + * Google Play services can resolve some errors it detects. + * If the error has a resolution, try sending an Intent to + * start a Google Play services activity that can resolve + * error. + */ + if (connectionResult.hasResolution() && mContext instanceof Activity) { + try { + Activity activity = (Activity) mContext; + // Start an Activity that tries to resolve the error + connectionResult.startResolutionForResult(activity, CONNECTION_FAILURE_RESOLUTION_REQUEST); + // Thrown if Google Play services canceled the original PendingIntent + } catch (IntentSender.SendIntentException e) { + // Log the error + e.printStackTrace(); + } + } else { + // If no resolution is available, display a dialog to the user with the error. + Log.i(TAG, "Location services connection failed with code " + connectionResult.getErrorCode()); + } + } + + @Override + public void onLocationChanged(Location location) { + mLocationCallback.handleNewLocation(location); + } + + public abstract interface LocationCallback { + public void handleNewLocation(Location location); + } +} \ No newline at end of file diff --git a/app/src/main/java/de/itstall/freifunkfranken/model/Ssid.java b/app/src/main/java/de/itstall/freifunkfranken/model/Ssid.java index 33b866f7e562b05ae09dc37f9044ea6c937a888f..7ca26cbd9dc035221598303e2e5cc4d3faf8e6f1 100644 --- a/app/src/main/java/de/itstall/freifunkfranken/model/Ssid.java +++ b/app/src/main/java/de/itstall/freifunkfranken/model/Ssid.java @@ -2,12 +2,23 @@ package de.itstall.freifunkfranken.model; public class Ssid { private String ssid; + private String key; public Ssid(String ssid) { this.ssid = ssid; + this.key = ""; + } + + public Ssid(String ssid, String key) { + this.ssid = ssid; + this.key = key; } public String getSsid() { return ssid; } + + public String getKey() { + return key; + } } diff --git a/app/src/main/java/de/itstall/freifunkfranken/view/AboutActivity.java b/app/src/main/java/de/itstall/freifunkfranken/view/AboutActivity.java index 5546cdae7a1b118efbf1827f6fa3c96eb8fb71a8..ebb7ca48d4cea713345d238cc9155330f7a818fc 100644 --- a/app/src/main/java/de/itstall/freifunkfranken/view/AboutActivity.java +++ b/app/src/main/java/de/itstall/freifunkfranken/view/AboutActivity.java @@ -1,20 +1,30 @@ package de.itstall.freifunkfranken.view; +import android.annotation.SuppressLint; import android.os.Bundle; +import android.text.Html; +import android.text.method.LinkMovementMethod; import android.view.View; import android.widget.Button; +import android.widget.TextView; import androidx.appcompat.app.AppCompatActivity; import de.itstall.freifunkfranken.R; public class AboutActivity extends AppCompatActivity { + @SuppressLint("ResourceType") @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_about); - Button aboutBtnClose = (Button) findViewById(R.id.AboutBtnClose); + Button aboutBtnClose = findViewById(R.id.AboutBtnClose); + TextView aboutTvLizencesApp = findViewById(R.id.aboutTvLizencesApp); + + aboutTvLizencesApp.setText(Html.fromHtml(getResources().getString(R.string.aboutTvAppLizence))); + aboutTvLizencesApp.setMovementMethod(LinkMovementMethod.getInstance()); + aboutBtnClose.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { 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 4596c03e6a3e4af6382a22fc94ef68974751fcf7..388d725a9b4bed5c53d45fc53b0ef048d1459be6 100644 --- a/app/src/main/java/de/itstall/freifunkfranken/view/MainActivity.java +++ b/app/src/main/java/de/itstall/freifunkfranken/view/MainActivity.java @@ -3,6 +3,7 @@ package de.itstall.freifunkfranken.view; import android.content.Intent; import android.location.Location; import android.os.Bundle; +import android.util.Log; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; @@ -12,18 +13,21 @@ import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentManager; import androidx.fragment.app.FragmentTransaction; +import com.google.android.gms.maps.model.LatLng; import com.google.android.material.tabs.TabLayout; import java.util.Objects; import de.itstall.freifunkfranken.R; import de.itstall.freifunkfranken.controller.FileDownloader; +import de.itstall.freifunkfranken.model.MyLocationProvider; -public class MainActivity extends AppCompatActivity { +public class MainActivity extends AppCompatActivity implements MyLocationProvider.LocationCallback { + public static final String TAG = MainActivity.class.getSimpleName(); public Fragment fragment = null; public boolean downloadDone = false; TabLayout tabLayout; - public static Location myLocation; + private MyLocationProvider mLocationProvider; @Override protected void onCreate(Bundle savedInstanceState) { @@ -68,6 +72,8 @@ public class MainActivity extends AppCompatActivity { } }); + //mLocationProvider = new MyLocationProvider(this, this); + downloadFiles(); } @@ -110,5 +116,20 @@ public class MainActivity extends AppCompatActivity { super.onResume(); Objects.requireNonNull(tabLayout.getTabAt(1)).select(); Objects.requireNonNull(tabLayout.getTabAt(0)).select(); + //mLocationProvider.connect(); + } + + @Override + protected void onPause() { + super.onPause(); + //mLocationProvider.disconnect(); + } + + public void handleNewLocation(Location location) { + Log.d(TAG, location.toString()); + + double currentLatitude = location.getLatitude(); + double currentLongitude = location.getLongitude(); + LatLng latLng = new LatLng(currentLatitude, currentLongitude); } } 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 c8a6d7c5047756cc78d3799f6fbfa129912b6864..6c33fc0e7c3a9ce17cdc396e027ab1362043f46f 100644 --- a/app/src/main/java/de/itstall/freifunkfranken/view/MapsFragment.java +++ b/app/src/main/java/de/itstall/freifunkfranken/view/MapsFragment.java @@ -1,12 +1,18 @@ package de.itstall.freifunkfranken.view; +import android.Manifest; import android.content.SharedPreferences; +import android.content.pm.PackageManager; +import android.location.Location; import android.os.Bundle; +import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Toast; +import androidx.core.app.ActivityCompat; +import androidx.core.content.ContextCompat; import androidx.fragment.app.Fragment; import com.google.android.gms.maps.CameraUpdateFactory; @@ -21,14 +27,18 @@ import java.util.List; import java.util.Objects; import de.itstall.freifunkfranken.R; -import de.itstall.freifunkfranken.model.AccessPoint; import de.itstall.freifunkfranken.controller.RequestAps; +import de.itstall.freifunkfranken.model.AccessPoint; +import de.itstall.freifunkfranken.model.MyLocationProvider; -public class MapsFragment extends Fragment implements OnMapReadyCallback { +public class MapsFragment extends Fragment implements OnMapReadyCallback, MyLocationProvider.LocationCallback { private static final String TAG = MapsFragment.class.getSimpleName(); private GoogleMap mMap; private View rootView; private SharedPreferences sharedPreferences; + //private MyLocationProvider mLocationProvider; + public static final int REQUEST_ID_ACCESS_FINE_LOCATION = 100; + public static final int REQUEST_ID_ACCESS_COARSE_LOCATION = 101; @Override public void onCreate(Bundle savedInstanceState) { @@ -39,12 +49,17 @@ 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); - SupportMapFragment mapFragment = (SupportMapFragment) getChildFragmentManager().findFragmentById(R.id.mapFragment); if (mapFragment != null) mapFragment.getMapAsync(this); sharedPreferences = rootView.getContext().getSharedPreferences("FreifunkFrankenApp", 0); + //mLocationProvider = new MyLocationProvider(this.getContext(), this); + //mLocationProvider.connect(); + + checkPermission(Manifest.permission.ACCESS_FINE_LOCATION, REQUEST_ID_ACCESS_COARSE_LOCATION); + checkPermission(Manifest.permission.ACCESS_COARSE_LOCATION, REQUEST_ID_ACCESS_COARSE_LOCATION); + return rootView; } @@ -52,16 +67,13 @@ public class MapsFragment extends Fragment implements OnMapReadyCallback { public void onMapReady(GoogleMap googleMap) { mMap = googleMap; - updateLocationUI(); - getDeviceLocation(); - - LatLng schonungen = new LatLng(50.0544, 10.3128); - mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(schonungen, 10)); + LatLng latLng = new LatLng(50.0544, 10.3128); + mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(latLng, 10)); mMap.setOnCameraIdleListener(new GoogleMap.OnCameraIdleListener() { @Override public void onCameraIdle() { LatLng latLng = mMap.getCameraPosition().target; - Toast.makeText(rootView.getContext(), latLng.latitude + "+" + latLng.longitude, Toast.LENGTH_SHORT).show(); + //Toast.makeText(rootView.getContext(), latLng.latitude + "+" + latLng.longitude, Toast.LENGTH_SHORT).show(); } }); showApsOnMap(); @@ -79,11 +91,76 @@ public class MapsFragment extends Fragment implements OnMapReadyCallback { } } - private void getDeviceLocation() { + @Override + public void handleNewLocation(Location location) { + Log.d(TAG, location.toString()); + double currentLatitude = location.getLatitude(); + double currentLongitude = location.getLongitude(); + LatLng latLng = new LatLng(currentLatitude, currentLongitude); + mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(latLng, 10)); } - private void updateLocationUI() { + public void checkPermission(String permission, int requestCode) { + // Checking if permission is not granted + if (ContextCompat.checkSelfPermission( + rootView.getContext(), + permission) == PackageManager.PERMISSION_DENIED) { + ActivityCompat.requestPermissions( + Objects.requireNonNull(getActivity()), + new String[]{permission}, + requestCode); + } else { + Toast.makeText( + rootView.getContext(), + "Permission already granted", + Toast.LENGTH_SHORT) + .show(); + } + } + @Override + public void onRequestPermissionsResult(int requestCode, + String[] permissions, + int[] grantResults) { + super.onRequestPermissionsResult(requestCode, permissions, grantResults); + + switch (requestCode) { + case REQUEST_ID_ACCESS_FINE_LOCATION: + // Checking whether user granted the permission or not. + if (grantResults.length > 0 + && grantResults[0] == PackageManager.PERMISSION_GRANTED) { + // Showing the toast message + Toast.makeText( + getActivity(), + "Fine Location Permission Granted", + Toast.LENGTH_SHORT) + .show(); + } else { + Toast.makeText(getActivity(), + "Fine Location Permission Denied", + Toast.LENGTH_SHORT) + .show(); + } + break; + + case REQUEST_ID_ACCESS_COARSE_LOCATION: + // Checking whether user granted the permission or not. + if (grantResults.length > 0 + && grantResults[0] == PackageManager.PERMISSION_GRANTED) { + // Showing the toast message + Toast.makeText( + getActivity(), + "Coarse Location Permission Granted", + Toast.LENGTH_SHORT) + .show(); + } else { + Toast.makeText(getActivity(), + "Coarse Location Permission Denied", + Toast.LENGTH_SHORT) + .show(); + } + break; + } } } 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 af991a56b31463075893f7653fadac1b1d5accbc..f95227a16dc79ac9a29db8dad6418bde13f1967f 100644 --- a/app/src/main/java/de/itstall/freifunkfranken/view/SettingsActivity.java +++ b/app/src/main/java/de/itstall/freifunkfranken/view/SettingsActivity.java @@ -24,12 +24,12 @@ public class SettingsActivity extends AppCompatActivity { setContentView(R.layout.activity_settings); sharedPreferences = getApplicationContext().getSharedPreferences("FreifunkFrankenApp", 0); - settingsSwOfflineRouter = (Switch) findViewById(R.id.settingsSwOfflineRouter); - settingsSwMapOfflineRouter = (Switch) findViewById(R.id.settingsSwMapOfflineRouter); - settingsTxtRouterCount = (EditText) findViewById(R.id.settingsTxtRouterCount); + settingsSwOfflineRouter = findViewById(R.id.settingsSwOfflineRouter); + settingsSwMapOfflineRouter = findViewById(R.id.settingsSwMapOfflineRouter); + settingsTxtRouterCount = findViewById(R.id.settingsTxtRouterCount); settingsTxtRouterCount.setText(String.valueOf(sharedPreferences.getInt("RouterCount", 10))); - settingsBtnClose = (Button) findViewById(R.id.SettingsBtnClose); + settingsBtnClose = findViewById(R.id.SettingsBtnClose); settingsSwOfflineRouter.setChecked(sharedPreferences.getBoolean("OfflineRouter", false)); settingsSwMapOfflineRouter.setChecked(sharedPreferences.getBoolean("MapOfflineRouter", false)); settingsBtnClose.setOnClickListener(new View.OnClickListener() { 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 419965c40e1092ca7b73f6ef5a7db91054a09de6..86d43e519bbde685179e7680b45884a034899df7 100644 --- a/app/src/main/java/de/itstall/freifunkfranken/view/SsidsFragment.java +++ b/app/src/main/java/de/itstall/freifunkfranken/view/SsidsFragment.java @@ -1,10 +1,16 @@ package de.itstall.freifunkfranken.view; +import android.content.pm.PackageManager; import android.os.Bundle; +import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.widget.Button; +import android.widget.Toast; +import androidx.core.app.ActivityCompat; +import androidx.core.content.ContextCompat; import androidx.recyclerview.widget.DefaultItemAnimator; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -13,13 +19,20 @@ import java.util.List; import java.util.Objects; import de.itstall.freifunkfranken.R; -import de.itstall.freifunkfranken.controller.SsidsAdapter; import de.itstall.freifunkfranken.controller.RequestSsids; +import de.itstall.freifunkfranken.controller.SsidsAdapter; +import de.itstall.freifunkfranken.controller.SsidsFragmentListener; import de.itstall.freifunkfranken.model.Ssid; public class SsidsFragment extends androidx.fragment.app.Fragment { + private static final String TAG = SsidsFragment.class.getSimpleName(); + public static List<Ssid> ssidList; private RecyclerView rvSsids; private View rootView; + private SsidsFragmentListener ssidsFragmentListener; + public static final int REQUEST_ID_ACCESS_WIFI_STATE = 102; + public static final int REQUEST_ID_CHANGE_WIFI_STATE = 103; + public static final int REQUEST_ID_WRITE_SETTINGS = 104; @Override public void onCreate(Bundle savedInstanceState) { @@ -32,17 +45,100 @@ public class SsidsFragment extends androidx.fragment.app.Fragment { rvSsids = rootView.findViewById(R.id.rvSsids); rvSsids.setLayoutManager(new LinearLayoutManager(getActivity())); - /*RequestSsids requestSsids = new RequestSsids(this); - AsyncTask runner = requestSsids.execute();*/ + ssidsFragmentListener = new SsidsFragmentListener(this); + + Button ssidsFragmentBtnAddAll = rootView.findViewById(R.id.ssidsFragmentBtnAddAll); + ssidsFragmentBtnAddAll.setOnClickListener(ssidsFragmentListener); - List<Ssid> ssidList = new RequestSsids(Objects.requireNonNull(this.getContext())).getSsidList(); + ssidList = new RequestSsids(Objects.requireNonNull(this.getContext())).getSsidList(); showSsidList(ssidList); return rootView; } + private void showSsidList(List<Ssid> ssidList) { SsidsAdapter ssidsAdapter = new SsidsAdapter(ssidList); rvSsids.setAdapter(ssidsAdapter); rvSsids.setItemAnimator(new DefaultItemAnimator()); } + + public void checkPermission(String permission, int requestCode) { + // Checking if permission is not granted + if (ContextCompat.checkSelfPermission( + rootView.getContext(), + permission) == PackageManager.PERMISSION_DENIED) { + ActivityCompat.requestPermissions( + Objects.requireNonNull(getActivity()), + new String[]{permission}, + requestCode); + } else { + Log.d(TAG, "Permission " + permission + " already granted"); + } + } + + @Override + public void onRequestPermissionsResult(int requestCode, + String[] permissions, + int[] grantResults) { + super.onRequestPermissionsResult(requestCode, permissions, grantResults); + + switch (requestCode) { + case REQUEST_ID_ACCESS_WIFI_STATE: + // Checking whether user granted the permission or not. + if (grantResults.length > 0 + && grantResults[0] == PackageManager.PERMISSION_GRANTED) { + Log.d(TAG, "Permission " + permissions[requestCode] + " granted"); + Toast.makeText( + getActivity(), + "Access Wifi state Permission Granted", + Toast.LENGTH_SHORT) + .show(); + } else { + Log.d(TAG, "Permission " + permissions[requestCode] + " denied"); + Toast.makeText(getActivity(), + "Access Wifi state Permission Denied", + Toast.LENGTH_SHORT) + .show(); + } + break; + + case REQUEST_ID_CHANGE_WIFI_STATE: + // Checking whether user granted the permission or not. + if (grantResults.length > 0 + && grantResults[0] == PackageManager.PERMISSION_GRANTED) { + Log.d(TAG, "Permission " + permissions[requestCode] + " granted"); + Toast.makeText( + getActivity(), + "Change Wifi Permission Granted", + Toast.LENGTH_SHORT) + .show(); + } else { + Log.d(TAG, "Permission " + permissions[requestCode] + " denied"); + Toast.makeText(getActivity(), + "Change Wifi Permission Denied", + Toast.LENGTH_SHORT) + .show(); + } + break; + + case REQUEST_ID_WRITE_SETTINGS: + // Checking whether user granted the permission or not. + if (grantResults.length > 0 + && grantResults[0] == PackageManager.PERMISSION_GRANTED) { + Log.d(TAG, "Permission " + permissions[requestCode] + " granted"); + Toast.makeText( + getActivity(), + "Write Settings Permission Granted", + Toast.LENGTH_SHORT) + .show(); + } else { + Log.d(TAG, "Permission " + permissions[requestCode] + " denied"); + Toast.makeText(getActivity(), + "Write Settings Permission Denied", + Toast.LENGTH_SHORT) + .show(); + } + break; + } + } } \ No newline at end of file diff --git a/app/src/main/res/layout/activity_about.xml b/app/src/main/res/layout/activity_about.xml index a6c0d205527b62c67b04220614cdbde7e4d8f927..a1e8dcc14acbeaff230bd78d613afb3ebfbdc575 100644 --- a/app/src/main/res/layout/activity_about.xml +++ b/app/src/main/res/layout/activity_about.xml @@ -7,46 +7,40 @@ tools:context=".view.AboutActivity"> <TextView - android:id="@+id/textView2" + android:id="@+id/aboutTvAppName" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="16dp" android:layout_marginTop="24dp" - android:text="Freifunk Franken App" + android:text="@string/aboutTvTitle" + 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/textView3" + android:id="@+id/aboutTvLizences" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="16dp" android:layout_marginTop="16dp" - android:text="Lizenzen:" + android:text="@string/aboutTvLizences" + android:textColor="@color/freifunk_blau" + android:textStyle="bold" app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toBottomOf="@+id/textView2" + app:layout_constraintTop_toBottomOf="@+id/aboutTvAppName" tools:ignore="MissingConstraints" /> <TextView - android:id="@+id/textView4" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_marginStart="16dp" - android:layout_marginTop="8dp" - android:text="Diese APP ist unter GNU GPLv3 lizenziert." - app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toBottomOf="@+id/textView3" /> - - <TextView - android:id="@+id/textView5" + android:id="@+id/aboutTvLizencesApp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="16dp" android:layout_marginTop="8dp" - android:text="Freifunk Logo von freifunk.net lizenziert unter CC BY-SA 3.0" + android:textSize="12sp" app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toBottomOf="@+id/textView4" /> + app:layout_constraintTop_toBottomOf="@+id/aboutTvLizences" /> <Button android:id="@+id/AboutBtnClose" diff --git a/app/src/main/res/layout/maps_fragment.xml b/app/src/main/res/layout/maps_fragment.xml index 91c6a777ee0fe72e5ef23ec190ec1d1340231cb0..9ba373033bddde75ef466bc6abc7f099e89d5287 100644 --- a/app/src/main/res/layout/maps_fragment.xml +++ b/app/src/main/res/layout/maps_fragment.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8"?> -<fragment xmlns:android="http://schemas.android.com/apk/res/android" +<androidx.fragment.app.FragmentContainerView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/mapFragment" android:name="com.google.android.gms.maps.SupportMapFragment" android:layout_width="match_parent" diff --git a/app/src/main/res/layout/aps_item.xml b/app/src/main/res/layout/nextap_item.xml similarity index 100% rename from app/src/main/res/layout/aps_item.xml rename to app/src/main/res/layout/nextap_item.xml diff --git a/app/src/main/res/layout/ssids_fragment.xml b/app/src/main/res/layout/ssids_fragment.xml index 3245f384f0f68e3a0f765f1aaeaac2932ac7d0ee..539928778af6e3f8c8a8f2446d7c16b578e0fcf5 100644 --- a/app/src/main/res/layout/ssids_fragment.xml +++ b/app/src/main/res/layout/ssids_fragment.xml @@ -8,7 +8,7 @@ android:id="@+id/rvSsids" android:layout_width="match_parent" android:layout_height="0dp" - app:layout_constraintBottom_toTopOf="@+id/button" + app:layout_constraintBottom_toTopOf="@+id/ssidsFragmentBtnAddAll" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.0" app:layout_constraintStart_toStartOf="parent" @@ -18,7 +18,7 @@ </androidx.recyclerview.widget.RecyclerView> <Button - android:id="@+id/button" + android:id="@+id/ssidsFragmentBtnAddAll" android:layout_width="0dp" android:layout_height="wrap_content" android:background="@color/freifunk_magenta" diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml deleted file mode 100644 index eca70cfe52eac1ba66ba280a68ca7be8fcf88a16..0000000000000000000000000000000000000000 --- a/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml +++ /dev/null @@ -1,5 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android"> - <background android:drawable="@drawable/ic_launcher_background" /> - <foreground android:drawable="@drawable/ic_launcher_foreground" /> -</adaptive-icon> \ No newline at end of file diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml deleted file mode 100644 index eca70cfe52eac1ba66ba280a68ca7be8fcf88a16..0000000000000000000000000000000000000000 --- a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml +++ /dev/null @@ -1,5 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android"> - <background android:drawable="@drawable/ic_launcher_background" /> - <foreground android:drawable="@drawable/ic_launcher_foreground" /> -</adaptive-icon> \ No newline at end of file diff --git a/app/src/main/res/mipmap-hdpi/app_icon.png b/app/src/main/res/mipmap-hdpi/app_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..2ee1f32996dd5b5fe93c3c519efc7a096db2e368 Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/app_icon.png differ diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher.png b/app/src/main/res/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index a571e60098c92c2baca8a5df62f2929cbff01b52..0000000000000000000000000000000000000000 Binary files a/app/src/main/res/mipmap-hdpi/ic_launcher.png and /dev/null differ diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_round.png b/app/src/main/res/mipmap-hdpi/ic_launcher_round.png deleted file mode 100644 index 61da551c5594a1f9d26193983d2cd69189014603..0000000000000000000000000000000000000000 Binary files a/app/src/main/res/mipmap-hdpi/ic_launcher_round.png and /dev/null differ diff --git a/app/src/main/res/mipmap-mdpi/app_icon.png b/app/src/main/res/mipmap-mdpi/app_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..2c1e39443df0a3808f98f333112304fcfd0914e2 Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/app_icon.png differ diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher.png b/app/src/main/res/mipmap-mdpi/ic_launcher.png deleted file mode 100644 index c41dd28531901b2c23927768c84bb6765ebcc1db..0000000000000000000000000000000000000000 Binary files a/app/src/main/res/mipmap-mdpi/ic_launcher.png and /dev/null differ diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher_round.png b/app/src/main/res/mipmap-mdpi/ic_launcher_round.png deleted file mode 100644 index db5080a752731b34d38d7c634732b2cd999125d0..0000000000000000000000000000000000000000 Binary files a/app/src/main/res/mipmap-mdpi/ic_launcher_round.png and /dev/null differ diff --git a/app/src/main/res/mipmap-xhdpi/app_icon.png b/app/src/main/res/mipmap-xhdpi/app_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..c9652686ca2510734ef38cfef73c6e1e8d779e77 Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/app_icon.png differ diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/app/src/main/res/mipmap-xhdpi/ic_launcher.png deleted file mode 100644 index 6dba46dab19242bf475ddf2e0a10042de6a0be16..0000000000000000000000000000000000000000 Binary files a/app/src/main/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png deleted file mode 100644 index da31a871c8dc461a1ea114510bfac640307b0a90..0000000000000000000000000000000000000000 Binary files a/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png and /dev/null differ diff --git a/app/src/main/res/mipmap-xxhdpi/app_icon.png b/app/src/main/res/mipmap-xxhdpi/app_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..a9c69e3583f8f13665d9f2d5a4982061b986687d Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/app_icon.png differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher.png deleted file mode 100644 index 15ac681720f3df43c647bf0c081f0314ee34eae1..0000000000000000000000000000000000000000 Binary files a/app/src/main/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png deleted file mode 100644 index b216f2d313cc673d8b8c4da591c174ebed52795c..0000000000000000000000000000000000000000 Binary files a/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png and /dev/null differ diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png deleted file mode 100644 index f25a419744727fb48b4b4137b6c6a3a8f2620d51..0000000000000000000000000000000000000000 Binary files a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png deleted file mode 100644 index e96783ccce844001359f968f5cd9d85b341bd3fb..0000000000000000000000000000000000000000 Binary files a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png and /dev/null differ diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 0cfb320abfa1d79a8c1e1a0e55363344f85e1bfc..fd7f8f290eba17f56a5ef17bcbdc68d87949b8e4 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -11,16 +11,9 @@ <string name="menuItemAbout">Info</string> <!-- TODO: Remove or change this placeholder text --> - <string name="hello_blank_fragment">Hello blank fragment</string> <string name="title_activity_settings">SettingsActivity</string> <!-- Strings used for fragments for navigation --> - <string name="first_fragment_label">First Fragment</string> - <string name="second_fragment_label">Second Fragment</string> - <string name="next">Next</string> - <string name="previous">Previous</string> - <string name="hello_first_fragment">Hello first fragment</string> - <string name="hello_second_fragment">Hello second fragment. Arg: %1$s</string> <string name="btnClose">Schließen</string> <string name="settingsTvOfflineRouter">Zeige offline Router an</string> <string name="settingsTvRouterCount">Anzahl der anzuzeigenden Router</string> @@ -28,4 +21,16 @@ <string name="settingsTvNextRouter">Nächste Router</string> <string name="settingsSwMapOfflineRouter">Zeige offline Router an</string> <string name="settingsTvMap">Karte</string> + <string name="aboutTvLizences">Lizenzen:</string> + <string name="aboutTvAppLizence"> + <ul> + <li> + &nbsp;&copy; 2020 Dennis Eisold, lizensiert unter GNU GPLv3<br/> + &nbsp;Quellcode auf <a href="https://www.gitrepo.de/freifunk/freifunkfrankenapp">gitrepo.de</a> + </li> + <li>&nbsp;Freifunk Logo von <a href="https://wiki.freifunk.net/Freifunk-Styles#Logo">freifunk.net</a> lizenziert unter CC BY-SA 3.0</li> + </ul> + </string> + <string name="aboutTvTitle">Über die Freifunk Franken App</string> + <string name="popupWritePermissionFragmentTitle">Zugriff benötigt</string> </resources> diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..f6b961fd5a86aa5fbfe90f707c3138408be7c718 Binary files /dev/null and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000000000000000000000000000000000000..82d85f4764f3fb9cb08e4979622ae554b0252450 --- /dev/null +++ b/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,6 @@ +#Mon Mar 23 20:01:44 CET 2020 +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.4-all.zip