Add SmartLocationAPI V 0.2 Not Completed

This commit is contained in:
MOATAZ IBRAHIM ELDESOUKI TAWFEEK MOHAMMED 2017-02-22 01:10:04 +02:00
parent 0700dcb625
commit 4eabcfca5a
13 changed files with 434 additions and 103 deletions

View File

@ -17,7 +17,7 @@ import com.pureix.easylocator.controller.service.BatteryAPI;
import com.pureix.easylocator.controller.service.InternetAPI; import com.pureix.easylocator.controller.service.InternetAPI;
import com.pureix.easylocator.controller.service.LocationAPI; import com.pureix.easylocator.controller.service.LocationAPI;
import com.pureix.easylocator.controller.service.SmartLocationAPI; import com.pureix.easylocator.controller.service.SmartLocationAPI;
import com.pureix.easylocator.model.bean.CustomLocation; import com.pureix.easylocator.model.bean.CustomSettingsLocation;
import com.pureix.easylocator.service.batteryService.listener.BatteryReceiverListener; import com.pureix.easylocator.service.batteryService.listener.BatteryReceiverListener;
import com.pureix.easylocator.service.activityRecognitionService.listener.ActivityRecognitionListener; import com.pureix.easylocator.service.activityRecognitionService.listener.ActivityRecognitionListener;
import com.pureix.easylocator.service.internetService.listener.ConnectivityReceiverListener; import com.pureix.easylocator.service.internetService.listener.ConnectivityReceiverListener;
@ -28,6 +28,8 @@ import java.util.ArrayList;
public class MainActivity extends AppCompatActivity { public class MainActivity extends AppCompatActivity {
private TextView txt; private TextView txt;
private LocationAPI locationAPI;
private ActivityRecognitionAPI activityRecognitionAPI;
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
@ -37,16 +39,16 @@ public class MainActivity extends AppCompatActivity {
setSupportActionBar(toolbar); setSupportActionBar(toolbar);
txt = (TextView) findViewById(R.id.txt); txt = (TextView) findViewById(R.id.txt);
activityRecognitionAPI = new ActivityRecognitionAPI(MainActivity.this);
ActivityRecognitionAPI.setActivitiesRecognitionListener(new ActivityRecognitionListener() activityRecognitionAPI.setActivitiesRecognitionListener(new ActivityRecognitionListener()
{ {
@Override @Override
public void updateDetectedActivitiesList(ArrayList<DetectedActivity> updatedActivities) { public void updateDetectedActivitiesList(ArrayList<DetectedActivity> updatedActivities) {
//Toast.makeText(MainActivity.this, "okay", Toast.LENGTH_SHORT).show(); //Toast.makeText(MainActivity.this, "okay", Toast.LENGTH_SHORT).show();
ArrayList<DetectedActivity> tempList = ActivityRecognitionAPI.getArrayList(updatedActivities); ArrayList<DetectedActivity> tempList = activityRecognitionAPI.getArrayList(updatedActivities);
for (int i = 0; i < tempList.size(); i++) { for (int i = 0; i < tempList.size(); i++) {
txt.append(ActivityRecognitionAPI.getActivityString(MainActivity.this, txt.append(activityRecognitionAPI.getActivityString(MainActivity.this,
tempList.get(i).getType()) +" - " tempList.get(i).getType()) +" - "
+ tempList.get(i).getConfidence()+ "%"+"\n"); + tempList.get(i).getConfidence()+ "%"+"\n");
} }
@ -74,7 +76,8 @@ public class MainActivity extends AppCompatActivity {
} }
}); });
LocationAPI.setLocationReceiverListener(new LocationReceiverListener() { locationAPI = new LocationAPI(MainActivity.this);
locationAPI.setLocationReceiverListener(new LocationReceiverListener() {
@Override @Override
public void getLastKnownLocation(Location location) { public void getLastKnownLocation(Location location) {
txt.append("getLastKnownLocation "+location+"\n\n"); txt.append("getLastKnownLocation "+location+"\n\n");
@ -93,7 +96,7 @@ public class MainActivity extends AppCompatActivity {
SmartLocationAPI smartLocationAPI = new SmartLocationAPI(MainActivity.this); SmartLocationAPI smartLocationAPI = new SmartLocationAPI(MainActivity.this);
smartLocationAPI.smart(true); smartLocationAPI.smart(true);
if(!smartLocationAPI.isSmart()) { if(!smartLocationAPI.isSmart()) {
smartLocationAPI.customLocation(new CustomLocation()); smartLocationAPI.customLocation(new CustomSettingsLocation());
} }
smartLocationAPI.setLocationReceiverListener(new LocationReceiverListener() { smartLocationAPI.setLocationReceiverListener(new LocationReceiverListener() {
@Override @Override
@ -145,21 +148,22 @@ public class MainActivity extends AppCompatActivity {
@Override @Override
protected void onResume() { protected void onResume() {
super.onResume(); super.onResume();
ActivityRecognitionAPI.start(MainActivity.this); activityRecognitionAPI.start();
LocationAPI.start(MainActivity.this); locationAPI.start();
} }
@Override @Override
protected void onPause() { protected void onPause() {
super.onPause(); super.onPause();
ActivityRecognitionAPI.pause(MainActivity.this); activityRecognitionAPI.pause();
LocationAPI.pause(MainActivity.this); locationAPI.pause();
} }
@Override @Override
public void onRequestPermissionsResult(int requestCode, String permissions[], public void onRequestPermissionsResult(int requestCode, String permissions[],
int[] grantResults) { int[] grantResults) {
LocationAPI.onRequestPermissionsResult(requestCode, permissions, locationAPI.requestPermission(MainActivity.this);
locationAPI.onRequestPermissionsResult(requestCode, permissions,
grantResults); grantResults);
} }
} }

View File

@ -12,6 +12,10 @@ import com.pureix.easylocator.service.activityRecognitionService.listener.Activi
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.Observable;
import java.util.Observer;
import static com.pureix.easylocator.service.activityRecognitionService.broadcastReceiver.ActivityRecognitionBroadcast.activitiesRecognitionObservable;
/** /**
* Created by MelDiSooQi on 2/11/2017. * Created by MelDiSooQi on 2/11/2017.
@ -19,13 +23,26 @@ import java.util.HashMap;
public class ActivityRecognitionAPI public class ActivityRecognitionAPI
{ {
private static int instanceCounter;
private Context context;
public static final int[] MONITORED_ACTIVITIES = Constants.MONITORED_ACTIVITIES; public static final int[] MONITORED_ACTIVITIES = Constants.MONITORED_ACTIVITIES;
private static ArrayAdapter<DetectedActivity> arrayAdapter; private ArrayAdapter<DetectedActivity> arrayAdapter;
private static InitializeActivityRecognitionBroadcast broadcast; private InitializeActivityRecognitionBroadcast broadcast;
public static ActivityRecognitionListener activitiesRecognitionListener; private ActivityRecognitionListener activitiesRecognitionListener;
public static void start(Context context)
public ActivityRecognitionAPI(Context context) {
this.context = context;
instanceCounter++;
}
public static int getInstanceCounter() {
return instanceCounter;
}
public void start()
{ {
Intent i = new Intent(context, ActivitiesRecognitionService.class); Intent i = new Intent(context, ActivitiesRecognitionService.class);
context.stopService(i); context.stopService(i);
@ -35,22 +52,35 @@ public class ActivityRecognitionAPI
broadcast.onResume(context); broadcast.onResume(context);
} }
public static void pause(Context context) public void pause()
{ {
broadcast.onPause(context); broadcast.onPause(context);
} }
public static void setActivitiesRecognitionListener(ActivityRecognitionListener activitiesRecognitionListener) { public void setActivitiesRecognitionListener(ActivityRecognitionListener activitiesRecognitionListener) {
ActivityRecognitionAPI.activitiesRecognitionListener = activitiesRecognitionListener; this.activitiesRecognitionListener = activitiesRecognitionListener;
createListener();
} }
private void createListener() {
activitiesRecognitionObservable.addObserver(new Observer() {
@Override
public void update(Observable o, Object updatedActivities) {
if(activitiesRecognitionListener != null) {
activitiesRecognitionListener
.updateDetectedActivitiesList(
(ArrayList<DetectedActivity>) updatedActivities);
}
}
});
}
/** /**
* Process list of recently detected activities and updates the list of {@code DetectedActivity} * Process list of recently detected activities and updates the list of {@code DetectedActivity}
* objects backing this adapter. * objects backing this adapter.
* *
* @param detectedActivities the freshly detected activities * @param detectedActivities the freshly detected activities
*/ */
public static ArrayList<DetectedActivity> getArrayList(ArrayList<DetectedActivity> detectedActivities) public ArrayList<DetectedActivity> getArrayList(ArrayList<DetectedActivity> detectedActivities)
{ {
HashMap<Integer, Integer> detectedActivitiesMap = new HashMap<>(); HashMap<Integer, Integer> detectedActivitiesMap = new HashMap<>();
for (DetectedActivity activity : detectedActivities) { for (DetectedActivity activity : detectedActivities) {
@ -73,7 +103,7 @@ public class ActivityRecognitionAPI
return tempList; return tempList;
} }
public static ArrayAdapter<DetectedActivity> getArrayAdapter(ArrayList<DetectedActivity> tempList) public ArrayAdapter<DetectedActivity> getArrayAdapter(ArrayList<DetectedActivity> tempList)
{ {
// Remove all items. // Remove all items.
arrayAdapter.clear(); arrayAdapter.clear();
@ -87,7 +117,7 @@ public class ActivityRecognitionAPI
return arrayAdapter; return arrayAdapter;
} }
public static String getActivityString(Context context, int detectedActivityType) { public String getActivityString(Context context, int detectedActivityType) {
return Constants.getActivityString(context, detectedActivityType); return Constants.getActivityString(context, detectedActivityType);
} }
} }

View File

@ -3,26 +3,46 @@ package com.pureix.easylocator.controller.service;
import android.app.Activity; import android.app.Activity;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.location.Location;
import com.pureix.easylocator.service.activityRecognitionService.ActivitiesRecognitionService; import com.pureix.easylocator.service.activityRecognitionService.ActivitiesRecognitionService;
import com.pureix.easylocator.service.activityRecognitionService.broadcastReceiver.InitializeActivityRecognitionBroadcast; import com.pureix.easylocator.service.activityRecognitionService.broadcastReceiver.InitializeActivityRecognitionBroadcast;
import com.pureix.easylocator.service.locatonService.Listener.LocationReceiverListener; import com.pureix.easylocator.service.locatonService.Listener.LocationReceiverListener;
import com.pureix.easylocator.service.locatonService.LocationService; import com.pureix.easylocator.service.locatonService.LocationService;
import com.pureix.easylocator.service.locatonService.broadcastReceiver.InitializeLocationBroadcast; import com.pureix.easylocator.service.locatonService.broadcastReceiver.InitializeLocationBroadcast;
import com.pureix.easylocator.service.locatonService.broadcastReceiver.LocationBroadcast;
import com.pureix.easylocator.service.locatonService.permission.LocationPermission; import com.pureix.easylocator.service.locatonService.permission.LocationPermission;
import java.util.Observable;
import java.util.Observer;
import static com.pureix.easylocator.service.locatonService.broadcastReceiver.LocationBroadcast.locationChangedObservable;
import static com.pureix.easylocator.service.locatonService.broadcastReceiver.LocationBroadcast.locationLastKnownLocationObservable;
/** /**
* Created by MelDiSooQi on 2/11/2017. * Created by MelDiSooQi on 2/11/2017.
*/ */
public class LocationAPI public class LocationAPI
{ {
private static InitializeLocationBroadcast broadcast; private static int instanceCounter;
private static LocationPermission locationPermission;
public static LocationReceiverListener locationReceiverListener;
private Context context;
private InitializeLocationBroadcast broadcast;
private LocationPermission locationPermission;
private LocationReceiverListener locationReceiverListener;
public static void start(Context context) public LocationAPI(Context context)
{
this.context = context;
instanceCounter++;
}
public static int getInstanceCounter() {
return instanceCounter;
}
public void start()
{ {
broadcast = new InitializeLocationBroadcast(); broadcast = new InitializeLocationBroadcast();
broadcast.onResume(context); broadcast.onResume(context);
@ -32,20 +52,42 @@ public class LocationAPI
context.startService(i); context.startService(i);
} }
public static void pause(Context context) public void pause()
{ {
broadcast.onPause(context); broadcast.onPause(context);
} }
public static void setLocationReceiverListener(LocationReceiverListener locationReceiverListener) { public void setLocationReceiverListener(LocationReceiverListener locationReceiverListener) {
LocationAPI.locationReceiverListener = locationReceiverListener; this.locationReceiverListener = locationReceiverListener;
createListener();
} }
public static void requestPermission(Activity activity){ private void createListener() {
locationLastKnownLocationObservable.addObserver(new Observer() {
@Override
public void update(Observable o, Object location) {
if(locationReceiverListener != null) {
locationReceiverListener.getLastKnownLocation((Location) location);
}
}
});
locationChangedObservable.addObserver(new Observer() {
@Override
public void update(Observable o, Object location) {
if(locationReceiverListener != null) {
locationReceiverListener.onLocationChanged((Location) location);
}
}
});
}
public void requestPermission(Activity activity){
locationPermission = new LocationPermission(activity); locationPermission = new LocationPermission(activity);
} }
public static void onRequestPermissionsResult(int requestCode, String permissions[], public void onRequestPermissionsResult(int requestCode, String permissions[],
int[] grantResults) { int[] grantResults) {
locationPermission.onRequestPermissionsResult(requestCode, permissions, locationPermission.onRequestPermissionsResult(requestCode, permissions,
grantResults); grantResults);

View File

@ -2,7 +2,7 @@ package com.pureix.easylocator.controller.service;
import android.content.Context; import android.content.Context;
import com.pureix.easylocator.model.bean.CustomLocation; import com.pureix.easylocator.model.bean.CustomSettingsLocation;
import com.pureix.easylocator.service.SmartLocationBusiness; import com.pureix.easylocator.service.SmartLocationBusiness;
import com.pureix.easylocator.service.locatonService.Listener.LocationReceiverListener; import com.pureix.easylocator.service.locatonService.Listener.LocationReceiverListener;
@ -12,6 +12,8 @@ import com.pureix.easylocator.service.locatonService.Listener.LocationReceiverLi
public class SmartLocationAPI public class SmartLocationAPI
{ {
private static int instanceCounter;
private boolean isSmart = true; private boolean isSmart = true;
private LocationReceiverListener locationReceiverListener; private LocationReceiverListener locationReceiverListener;
private SmartLocationBusiness smartLocationBusiness; private SmartLocationBusiness smartLocationBusiness;
@ -22,6 +24,11 @@ public class SmartLocationAPI
smartLocationBusiness = new SmartLocationBusiness(); smartLocationBusiness = new SmartLocationBusiness();
smartLocationBusiness.setSmart(isSmart); smartLocationBusiness.setSmart(isSmart);
instanceCounter++;
}
public static int getInstanceCounter() {
return instanceCounter;
} }
public void smart(boolean isSmart) { public void smart(boolean isSmart) {
@ -33,8 +40,8 @@ public class SmartLocationAPI
return isSmart; return isSmart;
} }
public void customLocation(CustomLocation customLocation) { public void customLocation(CustomSettingsLocation customSettingsLocation) {
smartLocationBusiness.setCustomLocation(customLocation); smartLocationBusiness.setCustomSettingsLocation(customSettingsLocation);
} }
public void setLocationReceiverListener(LocationReceiverListener locationReceiverListener) public void setLocationReceiverListener(LocationReceiverListener locationReceiverListener)
@ -44,6 +51,6 @@ public class SmartLocationAPI
} }
public void pause() { public void pause() {
smartLocationBusiness.pause(context); smartLocationBusiness.pause();
} }
} }

View File

@ -0,0 +1,19 @@
package com.pureix.easylocator.model;
import java.util.Observable;
/**
* Created by M.Hayle on 6/28/2016.
*/
public class ObservableHandler extends Observable
{
public ObservableHandler()
{}
public void setChange(Object object)
{
setChanged();
notifyObservers(object);
}
}

View File

@ -1,7 +0,0 @@
package com.pureix.easylocator.model.bean;
/**
* Created by MelDiSooQi on 2/18/2017.
*/
public class CustomLocation {
}

View File

@ -0,0 +1,61 @@
package com.pureix.easylocator.model.bean;
/**
* Created by MelDiSooQi on 2/18/2017.
*/
public class CustomSettingsLocation {
private int priority;
private long interval;
private long fastestInterval;
private float smallestDisplacement;
private int detectedActivityType;
private String detectedActivityProvider;
public void setPriority(int priority) {
this.priority = priority;
}
public void setInterval(long interval) {
this.interval = interval;
}
public void setFastestInterval(long fastestInterval) {
this.fastestInterval = fastestInterval;
}
public void setSmallestDisplacement(float smallestDisplacement) {
this.smallestDisplacement = smallestDisplacement;
}
public void setDetectedActivityType(int detectedActivityType) {
this.detectedActivityType = detectedActivityType;
}
public void setDetectedActivityProvider(String detectedActivityProvider) {
this.detectedActivityProvider = detectedActivityProvider;
}
public int getPriority() {
return priority;
}
public long getInterval() {
return interval;
}
public long getFastestInterval() {
return fastestInterval;
}
public float getSmallestDisplacement() {
return smallestDisplacement;
}
public int getDetectedActivityType() {
return detectedActivityType;
}
public String getDetectedActivityProvider() {
return detectedActivityProvider;
}
}

View File

@ -7,4 +7,5 @@ public class LocalStorageConstant
{ {
//public final static String //public final static String
public final static String LAST_KNOWN_LOCATION = "LAST_KNOWN_LOCATION"; public final static String LAST_KNOWN_LOCATION = "LAST_KNOWN_LOCATION";
public final static String CUSTOM_SETTINGS_LOCATION = "CUSTOM_SETTINGS_LOCATION";
} }

View File

@ -1,33 +1,64 @@
package com.pureix.easylocator.service; package com.pureix.easylocator.service;
import android.content.Context; import android.content.Context;
import android.location.Location;
import android.util.Log;
import android.widget.Toast; import android.widget.Toast;
import com.google.android.gms.location.DetectedActivity; import com.google.android.gms.location.DetectedActivity;
import com.google.android.gms.location.LocationRequest;
import com.google.gson.Gson;
import com.pureix.easylocator.controller.service.ActivityRecognitionAPI; import com.pureix.easylocator.controller.service.ActivityRecognitionAPI;
import com.pureix.easylocator.model.bean.CustomLocation; import com.pureix.easylocator.model.ObservableHandler;
import com.pureix.easylocator.model.bean.CustomSettingsLocation;
import com.pureix.easylocator.model.storage.LocalStorage;
import com.pureix.easylocator.model.storage.LocalStorageConstant;
import com.pureix.easylocator.service.activityRecognitionService.listener.ActivityRecognitionListener; import com.pureix.easylocator.service.activityRecognitionService.listener.ActivityRecognitionListener;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Timer;
import java.util.TimerTask;
/** /**
* Created by MelDiSooQi on 2/18/2017. * Created by MelDiSooQi on 2/18/2017.
*/ */
public class SmartLocationBusiness { public class SmartLocationBusiness
{
private String TAG = "SmartBusinessTAG";
private CustomLocation customLocation;
private boolean smart; private boolean smart;
private Context context;
private CustomSettingsLocation customSettingsLocation;
private ActivityRecognitionAPI activityRecognitionAPI;
public void start(final Context context) { public static final int LOCATION_PRIORITY_PRIORITY_HIGH_ACCURACY
= LocationRequest.PRIORITY_HIGH_ACCURACY;
public static final int LOCATION_PRIORITY_PRIORITY_BALANCED_POWER_ACCURACY
= LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY;
public static final int LOCATION_PRIORITY_PRIORITY_LOW_POWER
= LocationRequest.PRIORITY_LOW_POWER;
public static final int LOCATION_PRIORITY_PRIORITY_NO_POWER
= LocationRequest.PRIORITY_NO_POWER;
private Timer mtimer;
public void start(Context context) {
this.context = context;
SmartBusiness();
}
private void SmartBusiness() {
customSettingsLocation = new CustomSettingsLocation();
if(smart) { if(smart) {
ActivityRecognitionAPI.start(context); activityRecognitionAPI = new ActivityRecognitionAPI(context);
ActivityRecognitionAPI.setActivitiesRecognitionListener(new ActivityRecognitionListener() { activityRecognitionAPI.start();
activityRecognitionAPI.setActivitiesRecognitionListener(new ActivityRecognitionListener() {
@Override @Override
public void updateDetectedActivitiesList(ArrayList<DetectedActivity> updatedActivities) { public void updateDetectedActivitiesList(ArrayList<DetectedActivity> updatedActivities) {
ArrayList<DetectedActivity> activityArrayList = ArrayList<DetectedActivity> activityArrayList =
ActivityRecognitionAPI.getArrayList(updatedActivities); activityRecognitionAPI.getArrayList(updatedActivities);
DetectedActivity detectedActivity = null; DetectedActivity detectedActivity = null;
int biggestNumber = -1; int biggestNumber = -1;
@ -41,10 +72,10 @@ public class SmartLocationBusiness {
} }
} }
Toast.makeText(context, Toast.makeText(context,
ActivityRecognitionAPI.getActivityString(context, activityRecognitionAPI.getActivityString(context,
detectedActivity.getType()) + " - " detectedActivity.getType()) + " - "
+ detectedActivity.getConfidence() + detectedActivity.getConfidence()
+ "%" + "\n", Toast.LENGTH_SHORT).show(); + "%", Toast.LENGTH_SHORT).show();
decideAction(detectedActivity); decideAction(detectedActivity);
} }
}); });
@ -53,11 +84,21 @@ public class SmartLocationBusiness {
} }
} }
private final static int time = 1000;
private void decideAction(DetectedActivity detectedActivity) { private void decideAction(DetectedActivity detectedActivity) {
int type = detectedActivity.getType(); int type = detectedActivity.getType();
if(DetectedActivity.STILL == type){ customSettingsLocation = new CustomSettingsLocation();
if(DetectedActivity.STILL == type){
customSettingsLocation.setDetectedActivityType(type);
customSettingsLocation.setDetectedActivityProvider(activityRecognitionAPI.getActivityString(context, detectedActivity.getType()));
customSettingsLocation.setPriority(LOCATION_PRIORITY_PRIORITY_LOW_POWER);
customSettingsLocation.setInterval(60 * 1000);
customSettingsLocation.setFastestInterval(60 * 1000);
customSettingsLocation.setSmallestDisplacement(10);
} }
if(DetectedActivity.ON_FOOT == type){ if(DetectedActivity.ON_FOOT == type){
@ -65,39 +106,114 @@ public class SmartLocationBusiness {
} }
if(DetectedActivity.WALKING == type){ if(DetectedActivity.WALKING == type){
customSettingsLocation.setDetectedActivityType(type);
customSettingsLocation.setDetectedActivityProvider(activityRecognitionAPI.getActivityString(context, detectedActivity.getType()));
customSettingsLocation.setPriority(LOCATION_PRIORITY_PRIORITY_BALANCED_POWER_ACCURACY);
customSettingsLocation.setInterval(10 * 1000);
customSettingsLocation.setFastestInterval(10 * 1000);
customSettingsLocation.setSmallestDisplacement(5);
} }
if(DetectedActivity.RUNNING == type){ if(DetectedActivity.RUNNING == type){
customSettingsLocation.setDetectedActivityType(type);
customSettingsLocation.setDetectedActivityProvider(activityRecognitionAPI.getActivityString(context, detectedActivity.getType()));
customSettingsLocation.setPriority(LOCATION_PRIORITY_PRIORITY_HIGH_ACCURACY);
customSettingsLocation.setInterval(4 * 1000);
customSettingsLocation.setFastestInterval(4 * 1000);
customSettingsLocation.setSmallestDisplacement(4);
} }
if(DetectedActivity.ON_BICYCLE == type){ if(DetectedActivity.ON_BICYCLE == type){
customSettingsLocation.setDetectedActivityType(type);
customSettingsLocation.setDetectedActivityProvider(activityRecognitionAPI.getActivityString(context, detectedActivity.getType()));
customSettingsLocation.setPriority(LOCATION_PRIORITY_PRIORITY_HIGH_ACCURACY);
customSettingsLocation.setInterval(4 * 1000);
customSettingsLocation.setFastestInterval(4 * 1000);
customSettingsLocation.setSmallestDisplacement(8);
} }
if(DetectedActivity.IN_VEHICLE == type){ if(DetectedActivity.IN_VEHICLE == type){
customSettingsLocation.setDetectedActivityType(type);
customSettingsLocation.setDetectedActivityProvider(activityRecognitionAPI.getActivityString(context, detectedActivity.getType()));
customSettingsLocation.setPriority(LOCATION_PRIORITY_PRIORITY_HIGH_ACCURACY);
customSettingsLocation.setInterval(2 * 1000);
customSettingsLocation.setFastestInterval(2 * 1000);
customSettingsLocation.setSmallestDisplacement(10);
} }
if(DetectedActivity.TILTING == type){ if(DetectedActivity.TILTING == type){
customSettingsLocation.setDetectedActivityType(type);
customSettingsLocation.setDetectedActivityProvider(activityRecognitionAPI.getActivityString(context, detectedActivity.getType()));
customSettingsLocation.setPriority(LOCATION_PRIORITY_PRIORITY_HIGH_ACCURACY);
customSettingsLocation.setInterval(2 * 1000);
customSettingsLocation.setFastestInterval(2 * 1000);
customSettingsLocation.setSmallestDisplacement(10);
} }
if(DetectedActivity.UNKNOWN == type){ if(DetectedActivity.UNKNOWN == type){
customSettingsLocation.setDetectedActivityType(type);
customSettingsLocation.setDetectedActivityProvider(activityRecognitionAPI.getActivityString(context, detectedActivity.getType()));
} customSettingsLocation.setPriority(LOCATION_PRIORITY_PRIORITY_HIGH_ACCURACY);
customSettingsLocation.setInterval(2 * 1000);
customSettingsLocation.setFastestInterval(2 * 1000);
customSettingsLocation.setSmallestDisplacement(10);
} }
public void setCustomLocation(CustomLocation customLocation) { saveCustomSettingsLocationInLocalStorage(time, customSettingsLocation);
this.customLocation = customLocation; }
private void saveCustomSettingsLocationInLocalStorage(int time,
final CustomSettingsLocation customSettingsLocation)
{
if(mtimer != null) {
mtimer.cancel();
}
mtimer = new Timer();
mtimer.schedule(new TimerTask() {
@Override
public void run() {
new Thread(new Runnable() {
@Override
public void run() {
setCustomSettingsLocationInLocalStorage(customSettingsLocation);
}
}).start();
}
}, time);
}
private CustomSettingsLocation getCustomSettingsLocationInLocalStorage() {
String jsonLocation = (String) LocalStorage.getPreference(context,
LocalStorageConstant.CUSTOM_SETTINGS_LOCATION, null);
return new Gson().fromJson(jsonLocation, CustomSettingsLocation.class);
}
private void setCustomSettingsLocationInLocalStorage(
CustomSettingsLocation customSettingsLocation)
{
Log.e(TAG, "setCustomSettingsLocationInLocalStorage");
String jsonLocation = new Gson().toJson(customSettingsLocation);
LocalStorage.setPreference(context,
LocalStorageConstant.CUSTOM_SETTINGS_LOCATION,
jsonLocation);
}
public void setCustomSettingsLocation(CustomSettingsLocation customSettingsLocation) {
this.customSettingsLocation = customSettingsLocation;
} }
public void setSmart(boolean smart) { public void setSmart(boolean smart) {
this.smart = smart; this.smart = smart;
} }
public void pause(Context context) { public void pause() {
ActivityRecognitionAPI.start(context); activityRecognitionAPI.pause();
} }
} }

View File

@ -8,7 +8,9 @@ import android.widget.Toast;
import com.google.android.gms.location.DetectedActivity; import com.google.android.gms.location.DetectedActivity;
import com.pureix.easylocator.controller.service.ActivityRecognitionAPI; import com.pureix.easylocator.controller.service.ActivityRecognitionAPI;
import com.pureix.easylocator.model.ObservableHandler;
import com.pureix.easylocator.service.activityRecognitionService.Constants; import com.pureix.easylocator.service.activityRecognitionService.Constants;
import com.pureix.easylocator.service.activityRecognitionService.listener.ActivityRecognitionListener;
import java.util.ArrayList; import java.util.ArrayList;
@ -16,7 +18,9 @@ public class ActivityRecognitionBroadcast extends BroadcastReceiver
{ {
protected static final String TAG = "activity-detection-response-receiver"; protected static final String TAG = "activity-detection-response-receiver";
private ArrayList<DetectedActivity> mDetectedActivities; public static ObservableHandler activitiesRecognitionObservable = new ObservableHandler();
// private ArrayList<DetectedActivity> mDetectedActivities;
public ActivityRecognitionBroadcast() { public ActivityRecognitionBroadcast() {
} }
@ -27,10 +31,6 @@ public class ActivityRecognitionBroadcast extends BroadcastReceiver
ArrayList<DetectedActivity> updatedActivities = ArrayList<DetectedActivity> updatedActivities =
intent.getParcelableArrayListExtra(Constants.ACTIVITY_EXTRA); intent.getParcelableArrayListExtra(Constants.ACTIVITY_EXTRA);
// Log.d("mezoTag", "okay here we are hhhhh");
// Toast.makeText(context, "okay here we are hhhhh", Toast.LENGTH_SHORT).show();
// mDetectedActivities = new ArrayList<DetectedActivity>(); // mDetectedActivities = new ArrayList<DetectedActivity>();
// //
// // Set the confidence level of each monitored activity to zero. // // Set the confidence level of each monitored activity to zero.
@ -38,10 +38,6 @@ public class ActivityRecognitionBroadcast extends BroadcastReceiver
// mDetectedActivities.add(new DetectedActivity(Constants.MONITORED_ACTIVITIES[i], 0)); // mDetectedActivities.add(new DetectedActivity(Constants.MONITORED_ACTIVITIES[i], 0));
// } // }
if(ActivityRecognitionAPI.activitiesRecognitionListener != null) { activitiesRecognitionObservable.setChange(updatedActivities);
ActivityRecognitionAPI
.activitiesRecognitionListener
.updateDetectedActivitiesList(updatedActivities);
}
} }
} }

View File

@ -5,11 +5,13 @@ public final class Constants {
// Milliseconds per second // Milliseconds per second
private static final int MILLISECONDS_PER_SECOND = 1000; private static final int MILLISECONDS_PER_SECOND = 1000;
// Update frequency in seconds // Update frequency in seconds
private static final int UPDATE_INTERVAL_IN_SECONDS = 60; // private static final int UPDATE_INTERVAL_IN_SECONDS = 60;
private static final int UPDATE_INTERVAL_IN_SECONDS = 1;
// Update frequency in milliseconds // Update frequency in milliseconds
public static final long UPDATE_INTERVAL = MILLISECONDS_PER_SECOND * UPDATE_INTERVAL_IN_SECONDS; public static final long UPDATE_INTERVAL = MILLISECONDS_PER_SECOND * UPDATE_INTERVAL_IN_SECONDS;
// The fastest update frequency, in seconds // The fastest update frequency, in seconds
private static final int FASTEST_INTERVAL_IN_SECONDS = 60; // private static final int FASTEST_INTERVAL_IN_SECONDS = 60;
private static final int FASTEST_INTERVAL_IN_SECONDS = 1;
// A fast frequency ceiling in milliseconds // A fast frequency ceiling in milliseconds
public static final long FASTEST_INTERVAL = MILLISECONDS_PER_SECOND * FASTEST_INTERVAL_IN_SECONDS; public static final long FASTEST_INTERVAL = MILLISECONDS_PER_SECOND * FASTEST_INTERVAL_IN_SECONDS;
// Stores the lat / long pairs in a text file // Stores the lat / long pairs in a text file

View File

@ -12,6 +12,7 @@ import android.os.PowerManager;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import android.support.annotation.Nullable; import android.support.annotation.Nullable;
import android.util.Log; import android.util.Log;
import android.widget.Toast;
import com.google.android.gms.common.ConnectionResult; import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.GoogleApiAvailability; import com.google.android.gms.common.GoogleApiAvailability;
@ -21,17 +22,20 @@ import com.google.android.gms.location.LocationListener;
import com.google.android.gms.location.LocationRequest; import com.google.android.gms.location.LocationRequest;
import com.google.android.gms.location.LocationServices; import com.google.android.gms.location.LocationServices;
import com.google.gson.Gson; import com.google.gson.Gson;
import com.pureix.easylocator.model.bean.CustomSettingsLocation;
import com.pureix.easylocator.model.storage.LocalStorage; import com.pureix.easylocator.model.storage.LocalStorage;
import com.pureix.easylocator.model.storage.LocalStorageConstant; import com.pureix.easylocator.model.storage.LocalStorageConstant;
import com.pureix.easylocator.service.locatonService.Listener.LocationReceiverListener; import com.pureix.easylocator.service.locatonService.Listener.LocationReceiverListener;
import com.pureix.easylocator.service.locatonService.broadcastReceiver.LocationBroadcast; import com.pureix.easylocator.service.locatonService.broadcastReceiver.LocationBroadcast;
import com.pureix.easylocator.service.locatonService.broadcastReceiver.LocationSender; import com.pureix.easylocator.service.locatonService.broadcastReceiver.LocationSender;
import java.util.Observable;
import java.util.Observer;
import java.util.Random; import java.util.Random;
import java.util.Timer; import java.util.Timer;
import java.util.TimerTask; import java.util.TimerTask;
import static com.pureix.easylocator.controller.service.LocationAPI.locationReceiverListener; import static com.pureix.easylocator.service.SmartLocationBusiness.smartLocationBusinessObservable;
/** /**
* Created by MelDiSooQi on 1/28/2017. * Created by MelDiSooQi on 1/28/2017.
@ -60,6 +64,7 @@ public class LocationService extends Service implements
private final static int PLAY_SERVICES_RESOLUTION_REQUEST = 9000; private final static int PLAY_SERVICES_RESOLUTION_REQUEST = 9000;
private GoogleApiClient mGoogleApiClient; private GoogleApiClient mGoogleApiClient;
private LocationReceiverListener locationReceiverListener;
/** /**
* Class used for the client Binder. Because we know this service always * Class used for the client Binder. Because we know this service always
@ -134,6 +139,10 @@ public class LocationService extends Service implements
//update the location every some distance //update the location every some distance
//mLocationRequest.setSmallestDisplacement(10); //mLocationRequest.setSmallestDisplacement(10);
//updateStatus(0);
servicesAvailable = servicesConnected(); servicesAvailable = servicesConnected();
/* /*
@ -143,6 +152,56 @@ public class LocationService extends Service implements
setUpLocationClientIfNeeded(); setUpLocationClientIfNeeded();
} }
Timer mtimer2;
private void updateStatus(long time) {
mtimer2 = new Timer();
mtimer2.schedule(new TimerTask() {
@Override
public void run() {
new Thread(new Runnable() {
@Override
public void run() {
CustomSettingsLocation customSettingsLocation
= getCustomSettingsLocationInLocalStorage();
if(customSettingsLocation != null)
{
detectedActivityType = customSettingsLocation.getDetectedActivityType();
//Toast.makeText(context, ">>>>"+customSettingsLocation.getDetectedActivityProvider(), Toast.LENGTH_SHORT).show();
Log.d(TAG, ">>>>"+customSettingsLocation.getDetectedActivityProvider());
if(detectedActivityType != tempDetectedActivityType) {
mLocationRequest = LocationRequest.create();
// Use high accuracy
mLocationRequest.setPriority(customSettingsLocation.getPriority());
// Set the update interval to 5 seconds
mLocationRequest.setInterval(customSettingsLocation.getInterval());
// mLocationRequest.setInterval(1000);
// Set the fastest update interval to 1 second
// mLocationRequest.setFastestInterval(1000);
mLocationRequest.setFastestInterval(customSettingsLocation.getFastestInterval());
//update the location every some distance
mLocationRequest.setSmallestDisplacement(customSettingsLocation.getSmallestDisplacement());
tempDetectedActivityType = detectedActivityType;
}
}
updateStatus(500);
}
}).start();
}
}, time);
if (mGoogleApiClient != null) {
if (mGoogleApiClient.isConnected()) {
LocationServices
.FusedLocationApi
.requestLocationUpdates(mGoogleApiClient,
mLocationRequest,
LocationService.this);
}
}
}
private void setUpLocationClientIfNeeded() { private void setUpLocationClientIfNeeded() {
if (mGoogleApiClient == null) if (mGoogleApiClient == null)
buildGoogleApiClient(); buildGoogleApiClient();
@ -374,6 +433,8 @@ public class LocationService extends Service implements
super.onTaskRemoved(rootIntent); super.onTaskRemoved(rootIntent);
} }
private int detectedActivityType = -1;
private int tempDetectedActivityType = -1;
// Define the callback method that receives location updates // Define the callback method that receives location updates
@Override @Override
public void onLocationChanged(Location location) { public void onLocationChanged(Location location) {
@ -392,6 +453,12 @@ public class LocationService extends Service implements
} }
} }
private CustomSettingsLocation getCustomSettingsLocationInLocalStorage() {
String jsonLocation = (String) LocalStorage.getPreference(context,
LocalStorageConstant.CUSTOM_SETTINGS_LOCATION, null);
return new Gson().fromJson(jsonLocation, CustomSettingsLocation.class);
}
// private void sendLocationToBroadcast(Location location) { // private void sendLocationToBroadcast(Location location) {
// senderHandler.sendLocationToApp( // senderHandler.sendLocationToApp(
// location.getLatitude(), // location.getLatitude(),

View File

@ -7,15 +7,15 @@ import android.os.Bundle;
import android.widget.Toast; import android.widget.Toast;
import com.google.gson.Gson; import com.google.gson.Gson;
import com.pureix.easylocator.model.ObservableHandler;
import com.pureix.easylocator.service.locatonService.Listener.LocationReceiverListener; import com.pureix.easylocator.service.locatonService.Listener.LocationReceiverListener;
import com.pureix.easylocator.service.locatonService.ServicesConstant; import com.pureix.easylocator.service.locatonService.ServicesConstant;
import com.pureix.easylocator.service.locatonService.bean.Location; import com.pureix.easylocator.service.locatonService.bean.Location;
import static com.pureix.easylocator.controller.service.LocationAPI.locationReceiverListener;
public class LocationBroadcast extends BroadcastReceiver public class LocationBroadcast extends BroadcastReceiver
{ {
// private static LocationReceiverListener locationReceiverListener; public static ObservableHandler locationLastKnownLocationObservable = new ObservableHandler();
public static ObservableHandler locationChangedObservable = new ObservableHandler();
boolean isLocationInitialized = false; boolean isLocationInitialized = false;
@ -65,13 +65,11 @@ public class LocationBroadcast extends BroadcastReceiver
android.location.Location location = new Gson() android.location.Location location = new Gson()
.fromJson(jsonLocation, android.location.Location.class); .fromJson(jsonLocation, android.location.Location.class);
if(locationReceiverListener != null) {
if ("LocalStorage".equals(location.getProvider())) { if ("LocalStorage".equals(location.getProvider())) {
locationReceiverListener.getLastKnownLocation(location); locationLastKnownLocationObservable.setChange(location);
} }
if (!"LocalStorage".equals(location.getProvider())){ if (!"LocalStorage".equals(location.getProvider())){
locationReceiverListener.onLocationChanged(location); locationChangedObservable.setChange(location);
}
} }
float kMeter = location.getSpeed() * 3.6f; float kMeter = location.getSpeed() * 3.6f;
@ -87,9 +85,4 @@ public class LocationBroadcast extends BroadcastReceiver
//Toast.makeText(context, "AFrom BroadCast : "+s, Toast.LENGTH_SHORT).show(); //Toast.makeText(context, "AFrom BroadCast : "+s, Toast.LENGTH_SHORT).show();
} }
} }
// public static void addLocationListener(LocationReceiverListener locationReceiverListener)
// {
// LocationBroadcast.locationReceiverListener = locationReceiverListener;
// }
} }