diff --git a/SampleEasyLocator/app/src/main/java/com/pureix/sampleeasylocator/MainActivity.java b/SampleEasyLocator/app/src/main/java/com/pureix/sampleeasylocator/MainActivity.java index 8fbc08e..55d633a 100644 --- a/SampleEasyLocator/app/src/main/java/com/pureix/sampleeasylocator/MainActivity.java +++ b/SampleEasyLocator/app/src/main/java/com/pureix/sampleeasylocator/MainActivity.java @@ -17,7 +17,7 @@ import com.pureix.easylocator.controller.service.BatteryAPI; import com.pureix.easylocator.controller.service.InternetAPI; import com.pureix.easylocator.controller.service.LocationAPI; 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.activityRecognitionService.listener.ActivityRecognitionListener; import com.pureix.easylocator.service.internetService.listener.ConnectivityReceiverListener; @@ -28,6 +28,8 @@ import java.util.ArrayList; public class MainActivity extends AppCompatActivity { private TextView txt; + private LocationAPI locationAPI; + private ActivityRecognitionAPI activityRecognitionAPI; @Override protected void onCreate(Bundle savedInstanceState) { @@ -37,16 +39,16 @@ public class MainActivity extends AppCompatActivity { setSupportActionBar(toolbar); txt = (TextView) findViewById(R.id.txt); - - ActivityRecognitionAPI.setActivitiesRecognitionListener(new ActivityRecognitionListener() + activityRecognitionAPI = new ActivityRecognitionAPI(MainActivity.this); + activityRecognitionAPI.setActivitiesRecognitionListener(new ActivityRecognitionListener() { @Override public void updateDetectedActivitiesList(ArrayList updatedActivities) { //Toast.makeText(MainActivity.this, "okay", Toast.LENGTH_SHORT).show(); - ArrayList tempList = ActivityRecognitionAPI.getArrayList(updatedActivities); + ArrayList tempList = activityRecognitionAPI.getArrayList(updatedActivities); 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).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 public void getLastKnownLocation(Location location) { txt.append("getLastKnownLocation "+location+"\n\n"); @@ -93,7 +96,7 @@ public class MainActivity extends AppCompatActivity { SmartLocationAPI smartLocationAPI = new SmartLocationAPI(MainActivity.this); smartLocationAPI.smart(true); if(!smartLocationAPI.isSmart()) { - smartLocationAPI.customLocation(new CustomLocation()); + smartLocationAPI.customLocation(new CustomSettingsLocation()); } smartLocationAPI.setLocationReceiverListener(new LocationReceiverListener() { @Override @@ -145,21 +148,22 @@ public class MainActivity extends AppCompatActivity { @Override protected void onResume() { super.onResume(); - ActivityRecognitionAPI.start(MainActivity.this); - LocationAPI.start(MainActivity.this); + activityRecognitionAPI.start(); + locationAPI.start(); } @Override protected void onPause() { super.onPause(); - ActivityRecognitionAPI.pause(MainActivity.this); - LocationAPI.pause(MainActivity.this); + activityRecognitionAPI.pause(); + locationAPI.pause(); } @Override public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { - LocationAPI.onRequestPermissionsResult(requestCode, permissions, + locationAPI.requestPermission(MainActivity.this); + locationAPI.onRequestPermissionsResult(requestCode, permissions, grantResults); } } diff --git a/SampleEasyLocator/easylocator/src/main/java/com/pureix/easylocator/controller/service/ActivityRecognitionAPI.java b/SampleEasyLocator/easylocator/src/main/java/com/pureix/easylocator/controller/service/ActivityRecognitionAPI.java index 9a16dec..997c9d2 100644 --- a/SampleEasyLocator/easylocator/src/main/java/com/pureix/easylocator/controller/service/ActivityRecognitionAPI.java +++ b/SampleEasyLocator/easylocator/src/main/java/com/pureix/easylocator/controller/service/ActivityRecognitionAPI.java @@ -12,6 +12,10 @@ import com.pureix.easylocator.service.activityRecognitionService.listener.Activi import java.util.ArrayList; 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. @@ -19,13 +23,26 @@ import java.util.HashMap; public class ActivityRecognitionAPI { + private static int instanceCounter; + + private Context context; public static final int[] MONITORED_ACTIVITIES = Constants.MONITORED_ACTIVITIES; - private static ArrayAdapter arrayAdapter; + private ArrayAdapter arrayAdapter; - private static InitializeActivityRecognitionBroadcast broadcast; - public static ActivityRecognitionListener activitiesRecognitionListener; + private InitializeActivityRecognitionBroadcast broadcast; + 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); context.stopService(i); @@ -35,22 +52,35 @@ public class ActivityRecognitionAPI broadcast.onResume(context); } - public static void pause(Context context) + public void pause() { broadcast.onPause(context); } - public static void setActivitiesRecognitionListener(ActivityRecognitionListener activitiesRecognitionListener) { - ActivityRecognitionAPI.activitiesRecognitionListener = activitiesRecognitionListener; + public void setActivitiesRecognitionListener(ActivityRecognitionListener 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) updatedActivities); + } + } + }); + } /** * Process list of recently detected activities and updates the list of {@code DetectedActivity} * objects backing this adapter. * * @param detectedActivities the freshly detected activities */ - public static ArrayList getArrayList(ArrayList detectedActivities) + public ArrayList getArrayList(ArrayList detectedActivities) { HashMap detectedActivitiesMap = new HashMap<>(); for (DetectedActivity activity : detectedActivities) { @@ -73,7 +103,7 @@ public class ActivityRecognitionAPI return tempList; } - public static ArrayAdapter getArrayAdapter(ArrayList tempList) + public ArrayAdapter getArrayAdapter(ArrayList tempList) { // Remove all items. arrayAdapter.clear(); @@ -87,7 +117,7 @@ public class ActivityRecognitionAPI return arrayAdapter; } - public static String getActivityString(Context context, int detectedActivityType) { + public String getActivityString(Context context, int detectedActivityType) { return Constants.getActivityString(context, detectedActivityType); } } diff --git a/SampleEasyLocator/easylocator/src/main/java/com/pureix/easylocator/controller/service/LocationAPI.java b/SampleEasyLocator/easylocator/src/main/java/com/pureix/easylocator/controller/service/LocationAPI.java index 68c851b..8803815 100644 --- a/SampleEasyLocator/easylocator/src/main/java/com/pureix/easylocator/controller/service/LocationAPI.java +++ b/SampleEasyLocator/easylocator/src/main/java/com/pureix/easylocator/controller/service/LocationAPI.java @@ -3,26 +3,46 @@ package com.pureix.easylocator.controller.service; import android.app.Activity; import android.content.Context; import android.content.Intent; +import android.location.Location; import com.pureix.easylocator.service.activityRecognitionService.ActivitiesRecognitionService; import com.pureix.easylocator.service.activityRecognitionService.broadcastReceiver.InitializeActivityRecognitionBroadcast; import com.pureix.easylocator.service.locatonService.Listener.LocationReceiverListener; import com.pureix.easylocator.service.locatonService.LocationService; 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 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. */ public class LocationAPI { - private static InitializeLocationBroadcast broadcast; - private static LocationPermission locationPermission; - public static LocationReceiverListener locationReceiverListener; + private static int instanceCounter; + 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.onResume(context); @@ -32,20 +52,42 @@ public class LocationAPI context.startService(i); } - public static void pause(Context context) + public void pause() { broadcast.onPause(context); } - public static void setLocationReceiverListener(LocationReceiverListener locationReceiverListener) { - LocationAPI.locationReceiverListener = locationReceiverListener; + public void setLocationReceiverListener(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); } - public static void onRequestPermissionsResult(int requestCode, String permissions[], + public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { locationPermission.onRequestPermissionsResult(requestCode, permissions, grantResults); diff --git a/SampleEasyLocator/easylocator/src/main/java/com/pureix/easylocator/controller/service/SmartLocationAPI.java b/SampleEasyLocator/easylocator/src/main/java/com/pureix/easylocator/controller/service/SmartLocationAPI.java index 6ecacc0..9449c92 100644 --- a/SampleEasyLocator/easylocator/src/main/java/com/pureix/easylocator/controller/service/SmartLocationAPI.java +++ b/SampleEasyLocator/easylocator/src/main/java/com/pureix/easylocator/controller/service/SmartLocationAPI.java @@ -2,7 +2,7 @@ package com.pureix.easylocator.controller.service; 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.locatonService.Listener.LocationReceiverListener; @@ -12,6 +12,8 @@ import com.pureix.easylocator.service.locatonService.Listener.LocationReceiverLi public class SmartLocationAPI { + private static int instanceCounter; + private boolean isSmart = true; private LocationReceiverListener locationReceiverListener; private SmartLocationBusiness smartLocationBusiness; @@ -22,6 +24,11 @@ public class SmartLocationAPI smartLocationBusiness = new SmartLocationBusiness(); smartLocationBusiness.setSmart(isSmart); + instanceCounter++; + } + + public static int getInstanceCounter() { + return instanceCounter; } public void smart(boolean isSmart) { @@ -33,8 +40,8 @@ public class SmartLocationAPI return isSmart; } - public void customLocation(CustomLocation customLocation) { - smartLocationBusiness.setCustomLocation(customLocation); + public void customLocation(CustomSettingsLocation customSettingsLocation) { + smartLocationBusiness.setCustomSettingsLocation(customSettingsLocation); } public void setLocationReceiverListener(LocationReceiverListener locationReceiverListener) @@ -44,6 +51,6 @@ public class SmartLocationAPI } public void pause() { - smartLocationBusiness.pause(context); + smartLocationBusiness.pause(); } } diff --git a/SampleEasyLocator/easylocator/src/main/java/com/pureix/easylocator/model/ObservableHandler.java b/SampleEasyLocator/easylocator/src/main/java/com/pureix/easylocator/model/ObservableHandler.java new file mode 100644 index 0000000..402cb83 --- /dev/null +++ b/SampleEasyLocator/easylocator/src/main/java/com/pureix/easylocator/model/ObservableHandler.java @@ -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); + } + +} diff --git a/SampleEasyLocator/easylocator/src/main/java/com/pureix/easylocator/model/bean/CustomLocation.java b/SampleEasyLocator/easylocator/src/main/java/com/pureix/easylocator/model/bean/CustomLocation.java deleted file mode 100644 index a3058a6..0000000 --- a/SampleEasyLocator/easylocator/src/main/java/com/pureix/easylocator/model/bean/CustomLocation.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.pureix.easylocator.model.bean; - -/** - * Created by MelDiSooQi on 2/18/2017. - */ -public class CustomLocation { -} diff --git a/SampleEasyLocator/easylocator/src/main/java/com/pureix/easylocator/model/bean/CustomSettingsLocation.java b/SampleEasyLocator/easylocator/src/main/java/com/pureix/easylocator/model/bean/CustomSettingsLocation.java new file mode 100644 index 0000000..32d477c --- /dev/null +++ b/SampleEasyLocator/easylocator/src/main/java/com/pureix/easylocator/model/bean/CustomSettingsLocation.java @@ -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; + } +} diff --git a/SampleEasyLocator/easylocator/src/main/java/com/pureix/easylocator/model/storage/LocalStorageConstant.java b/SampleEasyLocator/easylocator/src/main/java/com/pureix/easylocator/model/storage/LocalStorageConstant.java index 4bf6ccc..6d8785b 100644 --- a/SampleEasyLocator/easylocator/src/main/java/com/pureix/easylocator/model/storage/LocalStorageConstant.java +++ b/SampleEasyLocator/easylocator/src/main/java/com/pureix/easylocator/model/storage/LocalStorageConstant.java @@ -6,5 +6,6 @@ package com.pureix.easylocator.model.storage; public class LocalStorageConstant { //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"; } diff --git a/SampleEasyLocator/easylocator/src/main/java/com/pureix/easylocator/service/SmartLocationBusiness.java b/SampleEasyLocator/easylocator/src/main/java/com/pureix/easylocator/service/SmartLocationBusiness.java index be8523b..a0a9d15 100644 --- a/SampleEasyLocator/easylocator/src/main/java/com/pureix/easylocator/service/SmartLocationBusiness.java +++ b/SampleEasyLocator/easylocator/src/main/java/com/pureix/easylocator/service/SmartLocationBusiness.java @@ -1,63 +1,104 @@ package com.pureix.easylocator.service; import android.content.Context; +import android.location.Location; +import android.util.Log; import android.widget.Toast; 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.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 java.util.ArrayList; +import java.util.Timer; +import java.util.TimerTask; /** * Created by MelDiSooQi on 2/18/2017. */ -public class SmartLocationBusiness { +public class SmartLocationBusiness +{ + private String TAG = "SmartBusinessTAG"; - private CustomLocation customLocation; private boolean smart; + private Context context; + private CustomSettingsLocation customSettingsLocation; + private ActivityRecognitionAPI activityRecognitionAPI; - public void start(final Context context) { - if(smart) { - ActivityRecognitionAPI.start(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; - ActivityRecognitionAPI.setActivitiesRecognitionListener(new ActivityRecognitionListener() { - @Override - public void updateDetectedActivitiesList(ArrayList updatedActivities) { - ArrayList activityArrayList = - ActivityRecognitionAPI.getArrayList(updatedActivities); + public void start(Context context) { + this.context = context; + SmartBusiness(); + } - DetectedActivity detectedActivity = null; - int biggestNumber = -1; - for (int i = 0; i < activityArrayList.size(); i++) { - DetectedActivity currentActivity = activityArrayList.get(i); - int confidence = activityArrayList.get(i).getConfidence(); + private void SmartBusiness() { + customSettingsLocation = new CustomSettingsLocation(); + if(smart) { + activityRecognitionAPI = new ActivityRecognitionAPI(context); - if (biggestNumber < confidence) { - biggestNumber = confidence; - detectedActivity = currentActivity; + activityRecognitionAPI.start(); + + activityRecognitionAPI.setActivitiesRecognitionListener(new ActivityRecognitionListener() { + @Override + public void updateDetectedActivitiesList(ArrayList updatedActivities) { + ArrayList activityArrayList = + activityRecognitionAPI.getArrayList(updatedActivities); + + DetectedActivity detectedActivity = null; + int biggestNumber = -1; + for (int i = 0; i < activityArrayList.size(); i++) { + DetectedActivity currentActivity = activityArrayList.get(i); + int confidence = activityArrayList.get(i).getConfidence(); + + if (biggestNumber < confidence) { + biggestNumber = confidence; + detectedActivity = currentActivity; + } } + Toast.makeText(context, + activityRecognitionAPI.getActivityString(context, + detectedActivity.getType()) + " - " + + detectedActivity.getConfidence() + + "%", Toast.LENGTH_SHORT).show(); + decideAction(detectedActivity); } - Toast.makeText(context, - ActivityRecognitionAPI.getActivityString(context, - detectedActivity.getType()) + " - " - + detectedActivity.getConfidence() - + "%" + "\n", Toast.LENGTH_SHORT).show(); - decideAction(detectedActivity); - } - }); - }else{ - // if not smart use User Custom Location - } + }); + }else{ + // if not smart use User Custom Location + } } + private final static int time = 1000; + private void decideAction(DetectedActivity detectedActivity) { 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){ @@ -65,39 +106,114 @@ public class SmartLocationBusiness { } 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){ + 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){ + 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){ + 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){ + 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){ + 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); } + + saveCustomSettingsLocationInLocalStorage(time, customSettingsLocation); } - public void setCustomLocation(CustomLocation customLocation) { - 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) { this.smart = smart; } - public void pause(Context context) { - ActivityRecognitionAPI.start(context); + public void pause() { + activityRecognitionAPI.pause(); } } diff --git a/SampleEasyLocator/easylocator/src/main/java/com/pureix/easylocator/service/activityRecognitionService/broadcastReceiver/ActivityRecognitionBroadcast.java b/SampleEasyLocator/easylocator/src/main/java/com/pureix/easylocator/service/activityRecognitionService/broadcastReceiver/ActivityRecognitionBroadcast.java index ec8fb1d..c6653e5 100644 --- a/SampleEasyLocator/easylocator/src/main/java/com/pureix/easylocator/service/activityRecognitionService/broadcastReceiver/ActivityRecognitionBroadcast.java +++ b/SampleEasyLocator/easylocator/src/main/java/com/pureix/easylocator/service/activityRecognitionService/broadcastReceiver/ActivityRecognitionBroadcast.java @@ -8,7 +8,9 @@ import android.widget.Toast; import com.google.android.gms.location.DetectedActivity; 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.listener.ActivityRecognitionListener; import java.util.ArrayList; @@ -16,7 +18,9 @@ public class ActivityRecognitionBroadcast extends BroadcastReceiver { protected static final String TAG = "activity-detection-response-receiver"; - private ArrayList mDetectedActivities; + public static ObservableHandler activitiesRecognitionObservable = new ObservableHandler(); + +// private ArrayList mDetectedActivities; public ActivityRecognitionBroadcast() { } @@ -27,10 +31,6 @@ public class ActivityRecognitionBroadcast extends BroadcastReceiver ArrayList updatedActivities = 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(); // // // 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)); // } - if(ActivityRecognitionAPI.activitiesRecognitionListener != null) { - ActivityRecognitionAPI - .activitiesRecognitionListener - .updateDetectedActivitiesList(updatedActivities); - } + activitiesRecognitionObservable.setChange(updatedActivities); } } diff --git a/SampleEasyLocator/easylocator/src/main/java/com/pureix/easylocator/service/locatonService/Constants.java b/SampleEasyLocator/easylocator/src/main/java/com/pureix/easylocator/service/locatonService/Constants.java index 50fdbb5..2ce4458 100644 --- a/SampleEasyLocator/easylocator/src/main/java/com/pureix/easylocator/service/locatonService/Constants.java +++ b/SampleEasyLocator/easylocator/src/main/java/com/pureix/easylocator/service/locatonService/Constants.java @@ -5,11 +5,13 @@ public final class Constants { // Milliseconds per second private static final int MILLISECONDS_PER_SECOND = 1000; // 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 public static final long UPDATE_INTERVAL = MILLISECONDS_PER_SECOND * UPDATE_INTERVAL_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 public static final long FASTEST_INTERVAL = MILLISECONDS_PER_SECOND * FASTEST_INTERVAL_IN_SECONDS; // Stores the lat / long pairs in a text file diff --git a/SampleEasyLocator/easylocator/src/main/java/com/pureix/easylocator/service/locatonService/LocationService.java b/SampleEasyLocator/easylocator/src/main/java/com/pureix/easylocator/service/locatonService/LocationService.java index 7e2ee6d..0d8ba9e 100644 --- a/SampleEasyLocator/easylocator/src/main/java/com/pureix/easylocator/service/locatonService/LocationService.java +++ b/SampleEasyLocator/easylocator/src/main/java/com/pureix/easylocator/service/locatonService/LocationService.java @@ -12,6 +12,7 @@ import android.os.PowerManager; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.util.Log; +import android.widget.Toast; import com.google.android.gms.common.ConnectionResult; 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.LocationServices; 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.LocalStorageConstant; import com.pureix.easylocator.service.locatonService.Listener.LocationReceiverListener; import com.pureix.easylocator.service.locatonService.broadcastReceiver.LocationBroadcast; import com.pureix.easylocator.service.locatonService.broadcastReceiver.LocationSender; +import java.util.Observable; +import java.util.Observer; import java.util.Random; import java.util.Timer; 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. @@ -60,6 +64,7 @@ public class LocationService extends Service implements private final static int PLAY_SERVICES_RESOLUTION_REQUEST = 9000; private GoogleApiClient mGoogleApiClient; + private LocationReceiverListener locationReceiverListener; /** * 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 //mLocationRequest.setSmallestDisplacement(10); + + //updateStatus(0); + + servicesAvailable = servicesConnected(); /* @@ -143,6 +152,56 @@ public class LocationService extends Service implements 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() { if (mGoogleApiClient == null) buildGoogleApiClient(); @@ -374,6 +433,8 @@ public class LocationService extends Service implements super.onTaskRemoved(rootIntent); } + private int detectedActivityType = -1; + private int tempDetectedActivityType = -1; // Define the callback method that receives location updates @Override 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) { // senderHandler.sendLocationToApp( // location.getLatitude(), diff --git a/SampleEasyLocator/easylocator/src/main/java/com/pureix/easylocator/service/locatonService/broadcastReceiver/LocationBroadcast.java b/SampleEasyLocator/easylocator/src/main/java/com/pureix/easylocator/service/locatonService/broadcastReceiver/LocationBroadcast.java index 9daf9c3..7b2cdf1 100644 --- a/SampleEasyLocator/easylocator/src/main/java/com/pureix/easylocator/service/locatonService/broadcastReceiver/LocationBroadcast.java +++ b/SampleEasyLocator/easylocator/src/main/java/com/pureix/easylocator/service/locatonService/broadcastReceiver/LocationBroadcast.java @@ -7,15 +7,15 @@ import android.os.Bundle; import android.widget.Toast; 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.ServicesConstant; import com.pureix.easylocator.service.locatonService.bean.Location; -import static com.pureix.easylocator.controller.service.LocationAPI.locationReceiverListener; - public class LocationBroadcast extends BroadcastReceiver { -// private static LocationReceiverListener locationReceiverListener; + public static ObservableHandler locationLastKnownLocationObservable = new ObservableHandler(); + public static ObservableHandler locationChangedObservable = new ObservableHandler(); boolean isLocationInitialized = false; @@ -65,14 +65,12 @@ public class LocationBroadcast extends BroadcastReceiver android.location.Location location = new Gson() .fromJson(jsonLocation, android.location.Location.class); - if(locationReceiverListener != null) { if ("LocalStorage".equals(location.getProvider())) { - locationReceiverListener.getLastKnownLocation(location); + locationLastKnownLocationObservable.setChange(location); } if (!"LocalStorage".equals(location.getProvider())){ - locationReceiverListener.onLocationChanged(location); + locationChangedObservable.setChange(location); } - } 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(); } } - -// public static void addLocationListener(LocationReceiverListener locationReceiverListener) -// { -// LocationBroadcast.locationReceiverListener = locationReceiverListener; -// } }