diff --git a/DailyHelper/app/build.gradle b/DailyHelper/app/build.gradle
index b96ba25..1e427ec 100644
--- a/DailyHelper/app/build.gradle
+++ b/DailyHelper/app/build.gradle
@@ -19,11 +19,17 @@ android {
}
dependencies {
- implementation fileTree(dir: 'libs', include: ['*.jar'])
+ implementation fileTree(include: ['*.jar'], dir: 'libs')
implementation 'com.android.support:appcompat-v7:28.0.0'
+ implementation 'com.android.support:support-media-compat:28.0.0'
implementation 'com.android.support:design:28.0.0'
- implementation 'com.android.support.constraint:constraint-layout:1.1.3'
+ implementation 'com.android.support:support-v4:28.0.0'
+ implementation 'android.arch.persistence.room:runtime:1.1.1'
+ implementation 'com.google.android.gms:play-services-location:16.0.0'
+ implementation 'com.google.android.gms:play-services-maps:16.1.0'
+ annotationProcessor 'android.arch.persistence.room:compiler:1.1.1'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
+ implementation 'com.google.maps.android:android-maps-utils:0.5+'
}
diff --git a/DailyHelper/app/src/main/AndroidManifest.xml b/DailyHelper/app/src/main/AndroidManifest.xml
index 0c67ca2..187c725 100644
--- a/DailyHelper/app/src/main/AndroidManifest.xml
+++ b/DailyHelper/app/src/main/AndroidManifest.xml
@@ -2,13 +2,22 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/DailyHelper/app/src/main/java/at/fhj/swd/dailyhelper/DailyHelperApplikation.java b/DailyHelper/app/src/main/java/at/fhj/swd/dailyhelper/DailyHelperApplikation.java
new file mode 100644
index 0000000..60c6976
--- /dev/null
+++ b/DailyHelper/app/src/main/java/at/fhj/swd/dailyhelper/DailyHelperApplikation.java
@@ -0,0 +1,24 @@
+package at.fhj.swd.dailyhelper;
+
+import android.app.Application;
+import android.app.NotificationChannel;
+import android.app.NotificationManager;
+import android.os.Build;
+
+public class DailyHelperApplikation extends Application {
+
+ public static final String CHANNEL_ID = "location_service_channel";
+ @Override
+ public void onCreate() {
+ super.onCreate();
+
+ if (Build.VERSION.SDK_INT > Build.VERSION_CODES.O) {
+ NotificationChannel locationServiceChannel = new NotificationChannel(
+ CHANNEL_ID,
+ "Location Service Channel",
+ NotificationManager.IMPORTANCE_LOW);
+ NotificationManager manager = getSystemService(NotificationManager.class);
+ manager.createNotificationChannel(locationServiceChannel);
+ }
+ }
+}
diff --git a/DailyHelper/app/src/main/java/at/fhj/swd/dailyhelper/service/LocationService.java b/DailyHelper/app/src/main/java/at/fhj/swd/dailyhelper/service/LocationService.java
new file mode 100644
index 0000000..4bd3c4d
--- /dev/null
+++ b/DailyHelper/app/src/main/java/at/fhj/swd/dailyhelper/service/LocationService.java
@@ -0,0 +1,109 @@
+package at.fhj.swd.dailyhelper.service;
+
+import android.Manifest;
+import android.app.Notification;
+import android.app.PendingIntent;
+import android.app.Service;
+import android.content.Intent;
+import android.content.SharedPreferences;
+import android.content.pm.PackageManager;
+import android.os.IBinder;
+import android.preference.PreferenceManager;
+import android.support.v4.app.ActivityCompat;
+import android.support.v4.app.NotificationCompat;
+import android.util.Log;
+
+import com.google.android.gms.location.FusedLocationProviderClient;
+import com.google.android.gms.location.LocationCallback;
+import com.google.android.gms.location.LocationRequest;
+import com.google.android.gms.location.LocationResult;
+import com.google.android.gms.location.LocationServices;
+
+import at.fhj.swd.dailyhelper.R;
+import at.fhj.swd.dailyhelper.ui.activity.MainActivity;
+
+import static at.fhj.swd.dailyhelper.DailyHelperApplikation.CHANNEL_ID;
+
+public class LocationService extends Service {
+
+ private static final String TAG = "LocationService";
+
+ private Notification notification;
+
+ private FusedLocationProviderClient fusedLocationProviderClient;
+ private LocationCallback locationCallback;
+
+ @Override
+ public void onCreate() {
+ super.onCreate();
+ setupNotification();
+ Log.d(TAG, "service created");
+ fusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(this);
+ locationCallback = new LocationCallback() {
+ @Override
+ public void onLocationResult(LocationResult locationResult) {
+ if(locationResult.getLocations().size() != 0){
+
+ SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(LocationService.this);
+ preferences.edit()
+ .putFloat("latitude", (float) locationResult.getLocations().get(0).getLatitude())
+ .putFloat("longitude", (float) locationResult.getLocations().get(0).getLongitude())
+ .putFloat("altitude", (float) locationResult.getLocations().get(0).getAltitude())
+ .putFloat("accuracy", (float) locationResult.getLocations().get(0).getAccuracy())
+ .putFloat("speed", locationResult.getLocations().get(0).getSpeed()).apply();
+
+ }
+ }
+ };
+
+ }
+
+ public void startLocationUpdate() {
+ LocationRequest request = new LocationRequest();
+ request.setInterval(5000);
+ request.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
+
+ if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
+ fusedLocationProviderClient.requestLocationUpdates(request, locationCallback, null);
+ }
+
+ }
+
+ public void stopLocationUpdate() {
+ fusedLocationProviderClient.removeLocationUpdates(locationCallback);
+ }
+
+
+ @Override
+ public int onStartCommand(Intent intent, int flags, int startId) {
+ Log.d(TAG, "service started");
+ startForeground(4545, notification);
+ startLocationUpdate();
+ return START_STICKY;
+
+ }
+
+ @Override
+ public void onDestroy() {
+ stopLocationUpdate();
+ super.onDestroy();
+ Log.d(TAG, "service destroyed");
+ }
+
+ @Override
+ public IBinder onBind(Intent intent) {
+ return null;
+ }
+
+ private void setupNotification() {
+ Intent notificationIntent = new Intent(this, MainActivity.class);
+ PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);
+
+ notification = new NotificationCompat.Builder(this, CHANNEL_ID)
+ .setContentText("Updating location")
+ .setContentTitle("DailyHelper Location Service")
+ .setSmallIcon(R.drawable.ic_star)
+ .setContentIntent(pendingIntent).build();
+ }
+
+}
diff --git a/DailyHelper/app/src/main/java/at/fhj/swd/dailyhelper/ui/activity/MainActivity.java b/DailyHelper/app/src/main/java/at/fhj/swd/dailyhelper/ui/activity/MainActivity.java
index 0449c5d..18de12a 100644
--- a/DailyHelper/app/src/main/java/at/fhj/swd/dailyhelper/ui/activity/MainActivity.java
+++ b/DailyHelper/app/src/main/java/at/fhj/swd/dailyhelper/ui/activity/MainActivity.java
@@ -1,6 +1,11 @@
package at.fhj.swd.dailyhelper.ui.activity;
+import android.Manifest;
+import android.content.Intent;
+import android.content.pm.PackageManager;
import android.os.Bundle;
+import android.support.annotation.NonNull;
+import android.support.v4.app.ActivityCompat;
import android.support.v4.view.GravityCompat;
import android.support.v7.app.ActionBarDrawerToggle;
import android.view.MenuItem;
@@ -12,6 +17,7 @@ import android.support.v7.widget.Toolbar;
import android.view.Menu;
import at.fhj.swd.dailyhelper.R;
+import at.fhj.swd.dailyhelper.service.LocationService;
import at.fhj.swd.dailyhelper.ui.fragemnt.HomeFragment;
import at.fhj.swd.dailyhelper.ui.fragemnt.MapFragment;
import at.fhj.swd.dailyhelper.ui.fragemnt.WeatherFragment;
@@ -57,6 +63,30 @@ public class MainActivity extends AppCompatActivity
}
}
+ private void startLocationService(){
+
+ if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
+ Intent intent = new Intent(this, LocationService.class);
+ startService(intent);
+ } else {
+ ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 12435 );
+ }
+ }
+
+ @Override
+ public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
+ if(requestCode == 12435){
+ if(grantResults[0] == PackageManager.PERMISSION_GRANTED){
+ startLocationService();
+ }
+ }
+ }
+
+ private void stopLocationService(){
+ Intent intent = new Intent(this, LocationService.class);
+ stopService(intent);
+ }
+
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
@@ -64,20 +94,6 @@ public class MainActivity extends AppCompatActivity
return true;
}
- @Override
- public boolean onOptionsItemSelected(MenuItem item) {
- // Handle action bar item clicks here. The action bar will
- // automatically handle clicks on the Home/Up button, so long
- // as you specify a parent activity in AndroidManifest.xml.
- int id = item.getItemId();
-
- //noinspection SimplifiableIfStatement
- if (id == R.id.action_settings) {
- return true;
- }
-
- return super.onOptionsItemSelected(item);
- }
@Override
public boolean onNavigationItemSelected(MenuItem item) {
@@ -98,4 +114,27 @@ public class MainActivity extends AppCompatActivity
return true;
}
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ switch (item.getItemId()){
+
+ case R.id.action_service_on:
+ startLocationService();
+ return true;
+
+ case R.id.action_service_off:
+ stopLocationService();
+ return true;
+
+ case R.id.action_refresh:
+ // fetchLocations();
+ return true;
+
+
+ default:
+ return false;
+ }
+
+ }
+
}
diff --git a/DailyHelper/app/src/main/res/drawable-v21/ic_location_off.xml b/DailyHelper/app/src/main/res/drawable-v21/ic_location_off.xml
new file mode 100644
index 0000000..a1e7c4a
--- /dev/null
+++ b/DailyHelper/app/src/main/res/drawable-v21/ic_location_off.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/DailyHelper/app/src/main/res/drawable-v21/ic_location_on.xml b/DailyHelper/app/src/main/res/drawable-v21/ic_location_on.xml
new file mode 100644
index 0000000..07d6e46
--- /dev/null
+++ b/DailyHelper/app/src/main/res/drawable-v21/ic_location_on.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/DailyHelper/app/src/main/res/drawable-v21/ic_refresh_black_24dp.xml b/DailyHelper/app/src/main/res/drawable-v21/ic_refresh_black_24dp.xml
new file mode 100644
index 0000000..8229a9a
--- /dev/null
+++ b/DailyHelper/app/src/main/res/drawable-v21/ic_refresh_black_24dp.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/DailyHelper/app/src/main/res/drawable-v21/ic_star.xml b/DailyHelper/app/src/main/res/drawable-v21/ic_star.xml
new file mode 100644
index 0000000..2f9cd1e
--- /dev/null
+++ b/DailyHelper/app/src/main/res/drawable-v21/ic_star.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/DailyHelper/app/src/main/res/drawable/border.xml b/DailyHelper/app/src/main/res/drawable/border.xml
new file mode 100644
index 0000000..6ac7039
--- /dev/null
+++ b/DailyHelper/app/src/main/res/drawable/border.xml
@@ -0,0 +1,7 @@
+
+
+
+
\ No newline at end of file
diff --git a/DailyHelper/app/src/main/res/layout/fragment_home.xml b/DailyHelper/app/src/main/res/layout/fragment_home.xml
index f58e512..433925b 100644
--- a/DailyHelper/app/src/main/res/layout/fragment_home.xml
+++ b/DailyHelper/app/src/main/res/layout/fragment_home.xml
@@ -2,12 +2,87 @@
-
+ android:layout_height="wrap_content"
+ android:orientation="vertical"
+ android:layout_margin="20dp"
+ android:padding="20dp"
+ android:background="@drawable/border">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/DailyHelper/app/src/main/res/menu/main.xml b/DailyHelper/app/src/main/res/menu/main.xml
index a2411e3..b61087a 100644
--- a/DailyHelper/app/src/main/res/menu/main.xml
+++ b/DailyHelper/app/src/main/res/menu/main.xml
@@ -1,9 +1,9 @@
diff --git a/DailyHelper/app/src/main/res/values/strings.xml b/DailyHelper/app/src/main/res/values/strings.xml
index a9d06e6..3e41329 100644
--- a/DailyHelper/app/src/main/res/values/strings.xml
+++ b/DailyHelper/app/src/main/res/values/strings.xml
@@ -12,4 +12,7 @@
Karte
Wasserwaage
+
+ AIzaSyBQhcmDlyP01yNwTd4RTlatQIAJH3wJHw0
+