diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index c5863db..f8e71b7 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -9,6 +9,7 @@
+
{
+ String itemName = (String) item.getTitle();
+ Intent launchIntent;
+ if (itemName.equals("Whitelist")) {
+ /* launchIntent = new Intent(getApplicationContext(), WhitelistActivity.class);
+ startActivity(launchIntent);*/
+ } else if (itemName.equals("Blacklist")) {
+ /* launchIntent = new Intent(getApplicationContext(), BlacklistActivity.class);
+ startActivity(launchIntent);*/
+ } else if (itemName.equals("Profile")) {
+ /* launchIntent = new Intent(getApplicationContext(), ProfileActivity.class);
+ startActivity(launchIntent);*/
+ } else if (itemName.equals("Settings")) {
+ launchIntent = new Intent(getApplicationContext(), SettingsActivity.class);
+ startActivity(launchIntent);
- } else if (itemName.equals("Log out")) {
- PrefUtils.cleanUserLocalStorage(getApplicationContext());
- Intent i = getBaseContext().getPackageManager()
- .getLaunchIntentForPackage(getBaseContext().getPackageName());
- if (i != null) {
- i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
- }
- startActivity(i);
- finish();
+ } else if (itemName.equals("Log out")) {
+ stopBackgroundLocalizationTask();
+
+ PrefUtils.cleanUserLocalStorage(getApplicationContext());
+ Intent i = getBaseContext().getPackageManager()
+ .getLaunchIntentForPackage(getBaseContext().getPackageName());
+ if (i != null) {
+ i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
}
+ startActivity(i);
+ finish();
- sideDrawer.closeDrawers();
-
- return true;
}
+
+ sideDrawer.closeDrawers();
+
+ return true;
}
);
+
navigationView = findViewById(R.id.navigation);
navigationView.setOnNavigationItemSelectedListener(this);
sharingFragment = new SharingFragment();
@@ -102,6 +105,30 @@ public abstract class BaseActivity
}
+ public void stopBackgroundLocalizationTask() {
+ Intent stopIntent = new Intent(getApplicationContext(), BackgroundLocalizationService.class);
+ stopIntent.putExtra("request_stop", true);
+ startService(stopIntent);
+ }
+
+ public void startBackgroundLocalizationTask() {
+ Intent startIntent = new Intent(getApplicationContext(), BackgroundLocalizationService.class);
+
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
+ startForegroundService(startIntent);
+ } else {
+ startService(startIntent);
+ }
+ }
+
+ public void handleBackgroundTaskLifeCycle() {
+ if (PrefUtils.isEnableSharingLocalization(getApplicationContext())) {
+ startBackgroundLocalizationTask();
+ } else {
+ stopBackgroundLocalizationTask();
+ }
+ }
+
@Override
public void setContentView(int layoutResID) {
DrawerLayout fullView = (DrawerLayout) getLayoutInflater().inflate(R.layout.base_activity, null);
diff --git a/app/src/main/java/com/uam/wmi/findmytutor/activity/LoginActivity.java b/app/src/main/java/com/uam/wmi/findmytutor/activity/LoginActivity.java
index 38f26aa..6241f50 100644
--- a/app/src/main/java/com/uam/wmi/findmytutor/activity/LoginActivity.java
+++ b/app/src/main/java/com/uam/wmi/findmytutor/activity/LoginActivity.java
@@ -167,6 +167,7 @@ public class LoginActivity extends AppCompatActivity {
private void loginProcess(String email, String password) {
+ Log.e("LOGIN", String.valueOf(PrefUtils.getIsTutor(getApplicationContext())));
//Fake validate
LdapUser user = new LdapUser(email, password, "admin", (PrefUtils.getIsTutor(getApplicationContext())) ? "Tutor" : "Student", "string", "string", email);
@@ -202,7 +203,6 @@ public class LoginActivity extends AppCompatActivity {
JWT jwt = new JWT(token);
Claim role = jwt.getClaim("nameid");
-
PrefUtils.storeIsLoggedIn(getApplicationContext(), true);
PrefUtils.storeApiKey(getApplicationContext(), token);
PrefUtils.storeUserId(getApplicationContext(), role.asString());
diff --git a/app/src/main/java/com/uam/wmi/findmytutor/activity/MapActivity.java b/app/src/main/java/com/uam/wmi/findmytutor/activity/MapActivity.java
index cd53337..99d1a75 100644
--- a/app/src/main/java/com/uam/wmi/findmytutor/activity/MapActivity.java
+++ b/app/src/main/java/com/uam/wmi/findmytutor/activity/MapActivity.java
@@ -6,14 +6,11 @@ import android.animation.ValueAnimator;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
-import android.content.pm.PackageManager;
import android.os.Build;
import android.os.Bundle;
-import android.support.v4.app.ActivityCompat;
-import android.support.v4.content.ContextCompat;
-import android.widget.Toast;
import android.os.Handler;
import android.util.Log;
+
import com.mapbox.mapboxsdk.Mapbox;
import com.mapbox.mapboxsdk.annotations.Marker;
import com.mapbox.mapboxsdk.annotations.MarkerOptions;
@@ -25,7 +22,6 @@ import com.mapbox.mapboxsdk.maps.OnMapReadyCallback;
import com.uam.wmi.findmytutor.R;
import com.uam.wmi.findmytutor.model.Coordinate;
import com.uam.wmi.findmytutor.network.ApiClient;
-import com.uam.wmi.findmytutor.network.RetrofitClientInstance;
import com.uam.wmi.findmytutor.service.BackgroundLocalizationService;
import com.uam.wmi.findmytutor.service.CoordinateService;
import com.uam.wmi.findmytutor.utils.PrefUtils;
@@ -91,6 +87,9 @@ public class MapActivity extends BaseActivity
mapView = (MapView) findViewById(R.id.mapView);
mapView.onCreate(savedInstanceState);
mapView.getMapAsync(this);
+
+ //start background task
+ startBackgroundLocalizationTask();
}
@Override
@@ -237,6 +236,8 @@ public class MapActivity extends BaseActivity
mapView.onSaveInstanceState(outState);
}
+
+
/*@Override
public void startLocalizationService() {
if ((ContextCompat.checkSelfPermission(getApplicationContext(), android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED)) {
diff --git a/app/src/main/java/com/uam/wmi/findmytutor/activity/SharingFragment.java b/app/src/main/java/com/uam/wmi/findmytutor/activity/SharingFragment.java
index 25b8ca4..e671a31 100644
--- a/app/src/main/java/com/uam/wmi/findmytutor/activity/SharingFragment.java
+++ b/app/src/main/java/com/uam/wmi/findmytutor/activity/SharingFragment.java
@@ -26,11 +26,8 @@ import java.util.Set;
import static com.mapbox.mapboxsdk.Mapbox.getApplicationContext;
-//public class SharingFragment {
-//}
public class SharingFragment extends PreferenceFragment {
- Activity mapActivity;
@SuppressLint("ResourceType")
@Override
@@ -48,41 +45,13 @@ public class SharingFragment extends PreferenceFragment {
locationSharing.setOnPreferenceChangeListener((buttonView, isChecked) -> {
PrefUtils.storeEnableSharingLocalization(getApplicationContext(), (Boolean) isChecked);
-
- if(PrefUtils.isEnableSharingLocalization(getApplicationContext())){
- Log.e("BACKGROUND", isChecked.toString());
- Intent startIntent = new Intent(getApplicationContext(), BackgroundLocalizationService.class);
-
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
- getActivity().startForegroundService(startIntent);
- } else {
- getActivity().startService(startIntent);
- }
-
- }else{
- Log.e("BACKGROUND", "stop");
- Intent stopIntent = new Intent(getApplicationContext(), BackgroundLocalizationService.class);
- stopIntent.putExtra("request_stop", true);
- getActivity().startService(stopIntent);
- }
+ ((MapActivity)getActivity()).handleBackgroundTaskLifeCycle();
return true;
});
-
-
}
- @Override
- public void onAttach(Activity activity) {
- super.onAttach(activity);
- mapActivity = activity;
- }
-
-
-
-
public static SharingFragment newInstance() {
-
return new SharingFragment();
}
diff --git a/app/src/main/java/com/uam/wmi/findmytutor/service/BackgroundLocalizationService.java b/app/src/main/java/com/uam/wmi/findmytutor/service/BackgroundLocalizationService.java
index 3d8e7c9..764c99f 100644
--- a/app/src/main/java/com/uam/wmi/findmytutor/service/BackgroundLocalizationService.java
+++ b/app/src/main/java/com/uam/wmi/findmytutor/service/BackgroundLocalizationService.java
@@ -6,9 +6,11 @@ import android.app.Notification;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.app.Service;
+import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.graphics.Color;
+import android.location.Criteria;
import android.location.Location;
import android.location.LocationManager;
import android.os.AsyncTask;
@@ -17,12 +19,10 @@ import android.os.Bundle;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.IBinder;
-import android.os.Looper;
import android.support.annotation.RequiresApi;
import android.support.v4.app.ActivityCompat;
import android.support.v4.app.NotificationCompat;
import android.util.Log;
-import android.content.Context;
import com.jakewharton.retrofit2.adapter.rxjava2.HttpException;
import com.uam.wmi.findmytutor.model.Coordinate;
@@ -30,16 +30,8 @@ import com.uam.wmi.findmytutor.network.ApiClient;
import com.uam.wmi.findmytutor.utils.PrefUtils;
import com.uam.wmi.findmytutor.utils.RestApiHelper;
-import org.json.JSONObject;
-
-import java.io.IOException;
-import java.io.InterruptedIOException;
-import java.lang.reflect.Array;
-import java.net.SocketTimeoutException;
import java.util.ArrayList;
import java.util.List;
-import java.util.Timer;
-import java.util.TimerTask;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.CompositeDisposable;
@@ -50,49 +42,30 @@ import timber.log.Timber;
public class BackgroundLocalizationService extends Service {
- public static String str_receiver = "background.location.broadcast";
private static final String TAG = "MyLocationService";
- private LocationManager mLocationManager = null;
- private static final int LOCATION_INTERVAL = 1000;
- private static final float LOCATION_DISTANCE = 10f;
+ private static final int LOCATION_INTERVAL = 100;
+ private static final float LOCATION_DISTANCE = 20f;
+ public static String str_receiver = "background.location.broadcast";
private static long notify_interval = 10000;
- private Handler mHandler = new Handler();
- private HandlerThread mHandlerThread = null;
Location mLastLocation;
Intent intent;
-
- private Runnable mStatusChecker;
ArrayList providers = new ArrayList();
- LocationListener[] mLocationListeners ;
+ LocationListener[] mLocationListeners;
+ private LocationManager mLocationManager = null;
+ private Handler mHandler = new Handler();
+ private HandlerThread mHandlerThread = null;
+ private Runnable mStatusChecker;
- private class LocationListener implements android.location.LocationListener {
+ public BackgroundLocalizationService() {
+ providers.add(LocationManager.GPS_PROVIDER);
+ providers.add(LocationManager.NETWORK_PROVIDER);
+ //providers.add(LocationManager.PASSIVE_PROVIDER);
- public LocationListener(String provider) {
- Log.e(TAG, "LocationListener " + provider);
- mLastLocation = new Location(provider);
- }
-
- @Override
- public void onLocationChanged(Location location) {
- Log.e(TAG, "onLocationChanged: " + location);
- mLastLocation.set(location);
- //fn_update(mLastLocation);
- }
-
- @Override
- public void onProviderDisabled(String provider) {
- Log.e(TAG, "onProviderDisabled: " + provider);
- }
-
- @Override
- public void onProviderEnabled(String provider) {
- Log.e(TAG, "onProviderEnabled: " + provider);
- }
-
- @Override
- public void onStatusChanged(String provider, int status, Bundle extras) {
- Log.e(TAG, "onStatusChanged: " + provider);
- }
+ mLocationListeners = new LocationListener[]{
+ new LocationListener(LocationManager.GPS_PROVIDER),
+ new LocationListener(LocationManager.NETWORK_PROVIDER)
+ //new LocationListener(LocationManager.PASSIVE_PROVIDER)
+ };
}
@Override
@@ -120,22 +93,11 @@ public class BackgroundLocalizationService extends Service {
return START_STICKY;
}
- public BackgroundLocalizationService(){
- providers.add(LocationManager.GPS_PROVIDER);
- providers.add(LocationManager.NETWORK_PROVIDER);
- providers.add(LocationManager.PASSIVE_PROVIDER);
-
- mLocationListeners = new LocationListener[]{
- new LocationListener(LocationManager.GPS_PROVIDER),
- new LocationListener(LocationManager.NETWORK_PROVIDER),
- new LocationListener(LocationManager.PASSIVE_PROVIDER)
- };
- }
-
@Override
public void onCreate() {
Log.e(TAG, "onCreate");
+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)
startMyOwnForeground();
else {
@@ -156,6 +118,7 @@ public class BackgroundLocalizationService extends Service {
LOCATION_DISTANCE,
listener
);
+
} catch (java.lang.SecurityException ex) {
Log.i(TAG, "fail to request location update, ignore", ex);
} catch (IllegalArgumentException ex) {
@@ -165,9 +128,8 @@ public class BackgroundLocalizationService extends Service {
providerIndex++;
}
-
mStatusChecker = () -> {
- try{
+ try {
fn_getlocation();
} finally {
mHandler.postDelayed(mStatusChecker, notify_interval);
@@ -175,7 +137,6 @@ public class BackgroundLocalizationService extends Service {
};
AsyncTask.execute(mStatusChecker);
-
}
@RequiresApi(api = Build.VERSION_CODES.O)
@@ -199,7 +160,6 @@ public class BackgroundLocalizationService extends Service {
startForeground(2, notification);
}
-
private void fn_getlocation() {
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
// TODO: Consider calling
@@ -217,6 +177,7 @@ public class BackgroundLocalizationService extends Service {
for (String provider : providers1) {
Location location = mLocationManager.getLastKnownLocation(provider);
+ Log.e("Location", String.valueOf(location));
if (location == null) {
continue;
}
@@ -267,6 +228,35 @@ public class BackgroundLocalizationService extends Service {
}
}
+ private class LocationListener implements android.location.LocationListener {
+
+ public LocationListener(String provider) {
+ Log.e(TAG, "LocationListener " + provider);
+ mLastLocation = new Location(provider);
+ }
+
+ @Override
+ public void onLocationChanged(Location location) {
+ Log.e(TAG, "onLocationChanged: " + location);
+ mLastLocation.set(location);
+ }
+
+ @Override
+ public void onProviderDisabled(String provider) {
+ Log.e(TAG, "onProviderDisabled: " + provider);
+ }
+
+ @Override
+ public void onProviderEnabled(String provider) {
+ Log.e(TAG, "onProviderEnabled: " + provider);
+ }
+
+ @Override
+ public void onStatusChanged(String provider, int status, Bundle extras) {
+ Log.e(TAG, "onStatusChanged: " + provider);
+ }
+ }
+
private class Task extends AsyncTask {
private Double latitude;
private Double longitude;