SHARE
TWEET

servicegps

vorziz Jul 17th, 2017 38 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. package sti_car.com.sticar.Service;
  2.  
  3. import android.Manifest;
  4. import android.app.AlertDialog;
  5. import android.app.Notification;
  6. import android.app.NotificationManager;
  7. import android.app.PendingIntent;
  8. import android.app.Service;
  9. import android.content.Context;
  10. import android.content.DialogInterface;
  11. import android.content.Intent;
  12. import android.content.SharedPreferences;
  13. import android.content.pm.PackageManager;
  14. import android.location.Location;
  15. import android.location.LocationListener;
  16. import android.location.LocationManager;
  17. import android.location.LocationProvider;
  18. import android.os.Build;
  19. import android.os.Bundle;
  20. import android.os.Handler;
  21. import android.os.IBinder;
  22. import android.preference.PreferenceManager;
  23. import android.provider.Settings;
  24. import android.support.annotation.Nullable;
  25. import android.support.v4.app.ActivityCompat;
  26. import android.support.v4.content.LocalBroadcastManager;
  27. import android.support.v4.view.accessibility.AccessibilityManagerCompat;
  28. import android.util.Log;
  29. import android.view.View;
  30. import android.widget.Toast;
  31.  
  32. import com.android.volley.Request;
  33. import com.android.volley.RequestQueue;
  34. import com.android.volley.VolleyError;
  35. import com.android.volley.toolbox.StringRequest;
  36. import com.android.volley.toolbox.Volley;
  37. import com.google.android.gms.nearby.messages.Distance;
  38. import com.google.gson.Gson;
  39. import com.here.android.mpa.common.GeoCoordinate;
  40.  
  41. import org.json.JSONArray;
  42. import org.json.JSONException;
  43. import org.json.JSONObject;
  44.  
  45. import java.text.DecimalFormat;
  46. import java.text.SimpleDateFormat;
  47. import java.util.ArrayList;
  48. import java.util.Calendar;
  49. import java.util.List;
  50. import java.util.UUID;
  51.  
  52. import io.realm.Realm;
  53. import io.realm.RealmList;
  54. import io.realm.RealmResults;
  55.  
  56.  
  57. import rx.Observer;
  58. import rx.android.schedulers.AndroidSchedulers;
  59. import rx.schedulers.Schedulers;
  60. import rx.subscriptions.CompositeSubscription;
  61. import sti_car.com.sticar.Model.ContractUUIDBody;
  62. import sti_car.com.sticar.Model.DistanceRouteModel;
  63. import sti_car.com.sticar.Model.LatLongModel;
  64. import sti_car.com.sticar.Model.ReportModelV2;
  65. import sti_car.com.sticar.Model.ResponsTrackFeed;
  66. import sti_car.com.sticar.Model.Response;
  67. import sti_car.com.sticar.Model.SendDataTracker;
  68. import sti_car.com.sticar.Model.SendTrackModel;
  69. import sti_car.com.sticar.Model.Start;
  70. import sti_car.com.sticar.Model.Stop;
  71. import sti_car.com.sticar.Model.TrackModel;
  72. import sti_car.com.sticar.Model.TripUUIDBody;
  73. import sti_car.com.sticar.Model.Trips;
  74. import sti_car.com.sticar.Model.UserAccountModel;
  75. import sti_car.com.sticar.ModelDatabase.DataTrackModel;
  76. import sti_car.com.sticar.ModelDatabase.HomeModel;
  77. import sti_car.com.sticar.ModelDatabase.TrackTodayModel;
  78. import sti_car.com.sticar.ModelDatabase.UserModel;
  79. import sti_car.com.sticar.ModelDatabase.WrappingModel;
  80. import sti_car.com.sticar.R;
  81. import sti_car.com.sticar.Response.ResponseStart;
  82. import sti_car.com.sticar.Response.ResponseStop;
  83. import sti_car.com.sticar.UI.MainActivity;
  84. import sti_car.com.sticar.Util.AppController;
  85. import sti_car.com.sticar.Util.Util;
  86.  
  87. /**
  88.  * Created by Admin on 25/04/2017.
  89.  */
  90.  
  91. public class TrackerService extends Service implements LocationListener {
  92.  
  93.     private LocationManager mLocService;
  94.     private Location mLastLocation;
  95.     private Boolean isGPSEnabled;
  96.     private Boolean isNetworkEnabled;
  97.     private String isStatusDailyLimit = null;
  98.     Service m_service;
  99.     int delay = 10000; //milliseconds
  100.     boolean mGpsIsStarted = false;
  101.     LocationProvider mLocProvider;
  102.     String creditFactory,creditXbalance;
  103.     //double distance;
  104.  
  105.     private double latStartArray = 0.0;
  106.     private double lngStartArray= 0.0;
  107.     private double latEndArray = 0.0;
  108.     private double lngEndArray= 0.0;
  109.     Realm realm;
  110.     int priceAds;
  111.     private double latitude = 0.0;
  112.     private double longitude = 0.0;
  113.     private double altitude = 0.0;
  114.     private double speed;
  115.     private double latSTART = 0.0;
  116.     private double lngSTART= 0.0;
  117.     private String tripUUID,kmToday,balanceToday,dailyKmDefault;
  118.     private float mAzimuth = 0;
  119.     private Boolean isRunning = false;
  120.     private Start start = new Start();
  121.     private Stop stop = new Stop();
  122.     boolean ismock = false;
  123.     String contactUUID;
  124.  
  125.     CompositeSubscription mSubscriptions;
  126.     private static final String LOGSERVICE = "#######";
  127.     private Handler mHandler;
  128.     private Runnable runnable;
  129.     Boolean isConnect = false;
  130.  
  131.     double DistanceTodayInDouble = 0.0;
  132.     int CreditTodayInInteger = 0;
  133.     double CreditTodayInDouble = 0.0;
  134.     int DistanceToday = 0;
  135.     int lastTotalCredit = 0;
  136.     int totalCreditAcc = 0;
  137.     int totalAll=0;
  138.     //double Total = 0.0;
  139.     int tt_credit;
  140.  
  141.     double DailyToday;
  142.     double CreditToday;
  143.     double GrandTotalCredit;
  144.     double GrandTotalDistance;
  145.     double TotalDistance;
  146.     double TotalCredit;
  147.     int DailyKilometer;
  148.     int DistanceInMeters;
  149.     double CurentTripDistance;
  150.     double CurentTripCredit;
  151.     String sDistances, sDailyKmMax;
  152.  
  153.  
  154.     private NotificationManager mNM;
  155.     RealmResults<DataTrackModel> realmResultsDataTracker;
  156.     RealmResults<HomeModel> realmResultsHome;
  157.     RealmResults<WrappingModel> realmResultsWrapping;
  158.     RealmResults<TrackTodayModel> realmResulTrackToday;
  159.     List<TrackModel> arrayTrack = new ArrayList<>();
  160.     List<TrackModel> arraySingleTrack = new ArrayList<>();
  161.     List<List<TrackModel>> arrayMultiTrack = new ArrayList<List<TrackModel>>();
  162.  
  163.     ContractUUIDBody contactUUIDBody = new ContractUUIDBody() ;
  164.     TripUUIDBody tripUUIDBody = new TripUUIDBody();
  165.     SendDataTracker sendDataTracker = new SendDataTracker();
  166.     SendTrackModel sendTrackModel = new SendTrackModel();
  167.     ArrayList<SendTrackModel> sendArrayTotal = new ArrayList<SendTrackModel>();
  168.  
  169.     UserAccountModel userAccountModel;
  170.     int dMeter;
  171.  
  172.     final Handler handler = new Handler();
  173.  
  174.  
  175.  
  176.     @Override
  177.     public void onCreate() {
  178.         super.onCreate();
  179.  
  180.  
  181.         mSubscriptions = new CompositeSubscription();
  182.         mHandler = new Handler();
  183.  
  184.         //getReportTrack();
  185.  
  186.         //getDataHome();
  187.         gpsInit();
  188.       //  checkGPS();
  189.  
  190.         mNM = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
  191.         showNotification();
  192.  
  193.  
  194.  
  195.  
  196.     }
  197.  
  198.  
  199.  
  200.     private void gpsInit() {
  201.         try {
  202.             mLocService = (LocationManager) getSystemService(LOCATION_SERVICE);
  203.             // getting GPS status
  204.             isGPSEnabled = mLocService.isProviderEnabled(LocationManager.GPS_PROVIDER);
  205.  
  206.             // getting network status
  207.             isNetworkEnabled = mLocService.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
  208.  
  209.             if (!isGPSEnabled && !isNetworkEnabled) {
  210.                 // no network provider is enabled
  211.                 Intent myIntent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
  212.                 startActivity(myIntent);
  213.             } else {
  214.                 if (isGPSEnabled) {
  215.                     if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
  216.  
  217.                         return;
  218.                     }
  219.                     mLocService.requestLocationUpdates(LocationManager.GPS_PROVIDER,
  220.                             Util.getPeriod(),
  221.                             Util.getDistancePeriod(), this);
  222.                     if (mLocService != null) {
  223.                         mLastLocation = mLocService
  224.                                 .getLastKnownLocation(LocationManager.GPS_PROVIDER);
  225.                         if (mLastLocation != null) {
  226.                             latitude = mLastLocation.getLatitude();
  227.                             longitude = mLastLocation.getLongitude();
  228.                             altitude = mLastLocation.getAltitude();
  229.                         }
  230.                     }
  231.                 }
  232.  
  233.                 // if GPS Enabled get lat/long using GPS Services
  234.                 if (isNetworkEnabled) {
  235.                     if (mLastLocation == null) {
  236.                         mLocService.requestLocationUpdates(
  237.                                 LocationManager.NETWORK_PROVIDER,
  238.                                 Util.getPeriod(),
  239.                                 Util.getDistancePeriod(), this);
  240.                         if (mLocService != null) {
  241.                             mLastLocation = mLocService
  242.                                     .getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
  243.                             if (mLastLocation != null) {
  244.                                 latitude = mLastLocation.getLatitude();
  245.                                 longitude = mLastLocation.getLongitude();
  246.                                 altitude = mLastLocation.getAltitude();
  247.                             }
  248.                         }
  249.                     }
  250.                 }
  251.             }
  252.  
  253.         } catch (Exception e) {
  254.             e.printStackTrace();
  255.         }
  256.     }
  257.  
  258.     @Override
  259.     public int onStartCommand(Intent intent, int flags, int startId) {
  260.         Log.i(LOGSERVICE, "onStartCommand");
  261.  
  262.         if (AppController.start != null) {
  263.             start = AppController.start;
  264.         }
  265.         //mToastHandler = new Handler();
  266.         //getReportTrack();
  267.         getDataHome();
  268.         startData();
  269.         doCreateLocalTracker();
  270.         doCalculate();
  271.  
  272.         return START_NOT_STICKY;
  273.  
  274.     }
  275.  
  276.     private void getDataHome() {
  277.  
  278.         if (AppController.getInstance() != null && AppController.getInstance().getSessionManager() != null && AppController.getInstance().getSessionManager().getUserAccount() !=null)
  279.             userAccountModel = AppController.getInstance().getSessionManager().getUserAccount();
  280.  
  281.         if (userAccountModel.getData().getStatusCampaign() != null){
  282.             contactUUID = userAccountModel.getData().getStatusCampaign().getContractUUID();
  283.             tripUUID = userAccountModel.getData().getHome().getParams().getContractUUID();
  284.             contactUUIDBody.setContractUUID(contactUUID);
  285.             tripUUIDBody.setTripUUID(tripUUID);
  286.             Toast.makeText(TrackerService.this,contactUUID,Toast.LENGTH_SHORT).show();
  287.  
  288.         }
  289.  
  290.         if (userAccountModel.getData().getHome() != null) {
  291.             if (userAccountModel.getData().getHome().getParams() != null) {
  292.  
  293.                 sDailyKmMax = userAccountModel.getData().getHome().getParams().getDailyKM();
  294.  
  295.             }
  296.         }
  297.  
  298.     }
  299.  
  300.  
  301.     @Override
  302.     public void onDestroy() {
  303.         mNM.cancel(999);
  304.         mHandler.removeCallbacksAndMessages(null);
  305.         stopData();
  306.         gpsStop();
  307.         stopDataLocal();
  308.         stopSelf();
  309.         saveArray();
  310.         super.onDestroy();
  311.     }
  312.  
  313.     private void saveArray() {
  314.  
  315.         SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(this);
  316.         SharedPreferences.Editor editor = sharedPrefs.edit();
  317.         Gson gson = new Gson();
  318.         String json = gson.toJson(arrayMultiTrack);
  319.         editor.putString("TripArray", json);
  320.         editor.commit();
  321.         //Toast.makeText(TrackerService.this,"Save Array",Toast.LENGTH_SHORT).show();
  322.     }
  323.  
  324.     private void stopDataLocal() {
  325.  
  326.     }
  327.  
  328.     @Nullable
  329.     @Override
  330.     public IBinder onBind(Intent intent) {
  331.         return null;
  332.     }
  333.  
  334.  
  335.  
  336.  
  337.  
  338.     @Override
  339.     public void onLocationChanged(Location location) {
  340.  
  341.  
  342.         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
  343.             ismock = location.isFromMockProvider();
  344.         } else {
  345.             ismock = !Settings.Secure.getString(this.getContentResolver(), Settings.Secure.ALLOW_MOCK_LOCATION).equals("0");
  346.         }
  347.  
  348.         if (ismock) {
  349.             Log.i(LOGSERVICE, "ismock location");
  350.         } else {
  351.             if (mLastLocation != null) {
  352.                 if (location.getTime() - mLastLocation.getTime() == 0) {
  353.                     speed = 0;
  354.                 } else {
  355.                     speed = Math.floor(mLastLocation.distanceTo(location) / ((location.getTime() - mLastLocation.getTime()) / 1000) * 3.6);
  356.                 }
  357.                 mAzimuth = mLastLocation.bearingTo(location);
  358.             }
  359.  
  360.             this.mLastLocation = location;
  361.             latitude = mLastLocation.getLatitude();
  362.             longitude = mLastLocation.getLongitude();
  363.             altitude = mLastLocation.getAltitude();
  364.             doCalculate();
  365.  
  366.         }
  367.  
  368.  
  369.     }
  370.  
  371.     @Override
  372.     public void onStatusChanged(String provider, int status, Bundle extras) {
  373.  
  374.     }
  375.  
  376.     @Override
  377.     public void onProviderEnabled(String provider) {
  378.  
  379.     }
  380.  
  381.     @Override
  382.     public void onProviderDisabled(String provider) {
  383.  
  384.     }
  385.  
  386.  
  387.     public void startData() {
  388.  
  389.         if (AppController.start != null) {
  390.             start = AppController.start;
  391.         }
  392.  
  393.         isConnect = true;
  394.  
  395.         if (!arrayMultiTrack.isEmpty()){
  396.  
  397.         }else {
  398.  
  399.             mSubscriptions.add(NetworkUtil.getRetrofitV2().startTrip(contactUUIDBody)
  400.                     .observeOn(AndroidSchedulers.mainThread())
  401.                     .subscribeOn(Schedulers.io())
  402.                     .subscribe(new Observer<ResponseStart>() {
  403.                         @Override
  404.                         public void onCompleted() {
  405.  
  406.                         }
  407.  
  408.                         @Override
  409.                         public void onError(Throwable e) {
  410.  
  411.                         }
  412.  
  413.  
  414.  
  415.                         @Override
  416.                         public void onNext(ResponseStart responseStart) {
  417.                             Toast.makeText(TrackerService.this,"Trip Start",Toast.LENGTH_SHORT).show();
  418.                             tripUUID = responseStart.getData().getTripUUID();
  419.  
  420.                             userAccountModel.getData().getHome().getParams().setContractUUID(tripUUID);
  421.                             tripUUIDBody.setTripUUID(tripUUID);
  422.                             Log.e("startData","startData");
  423.                         }
  424.                     }));
  425.  
  426.         }
  427.  
  428.  
  429.  
  430.     }
  431.  
  432.  
  433.     private void getReportTrack() {
  434.  
  435.         mSubscriptions.add(NetworkUtil.getRetrofitV2().getReportData()
  436.                 .observeOn(AndroidSchedulers.mainThread())
  437.                 .subscribeOn(Schedulers.io())
  438.                 .subscribe(new Observer<Response<ReportModelV2>>() {
  439.                     @Override
  440.                     public void onCompleted() {
  441.  
  442.                     }
  443.  
  444.                     @Override
  445.                     public void onError(Throwable e) {
  446.  
  447.                     }
  448.  
  449.                     @Override
  450.                     public void onNext(Response<ReportModelV2> response) {
  451.  
  452.                         if (response.getData() != null) {
  453.                             Double credit =0.0;
  454.  
  455.                             Double d = new Double(response.getData().getTodayReport().getDistance());
  456.                             int inx = d.intValue();
  457.                             Log.e("inx",String.valueOf(inx) +" and "+String.valueOf(d));
  458.  
  459.                             DistanceTodayInDouble  = (d *1000) ;
  460.                             CreditTodayInInteger = Integer.valueOf(response.getData().getTodayReport().getCredit().intValue());
  461.                             CreditTodayInDouble = response.getData().getTodayReport().getCredit();
  462.  
  463.  
  464.  
  465.  
  466.                             Log.e("wer",String.valueOf(DistanceTodayInDouble));
  467.  
  468.                           //  if (sDailyKM != null){
  469.                                 if (inx >= Integer.valueOf(3)){
  470.                                     //tvDailyLimitNotif.setVisibility(View.VISIBLE);
  471.                                     Toast.makeText(TrackerService.this,"Anda melampaui batas bos trip di limit!",Toast.LENGTH_SHORT).show();
  472.  
  473.                                 }
  474.                            // }
  475.  
  476.  
  477.  
  478.                         } else {
  479.  
  480.                         }
  481.  
  482.  
  483.                     }
  484.                 }));
  485.     }
  486.  
  487.  
  488.  
  489.  
  490.  
  491.     public void stopData() {
  492.  
  493.         isConnect = false;
  494.  
  495.  
  496.         if (!arrayMultiTrack.isEmpty()){
  497.  
  498.             mSubscriptions.add(NetworkUtil.getRetrofitV2().stopTrip(tripUUIDBody)
  499.                     .observeOn(AndroidSchedulers.mainThread())
  500.                     .subscribeOn(Schedulers.io())
  501.                     .subscribe(new Observer<ResponseStop>() {
  502.                         @Override
  503.                         public void onCompleted() {
  504.  
  505.                         }
  506.  
  507.                         @Override
  508.                         public void onError(Throwable e) {
  509.  
  510.  
  511.                         }
  512.  
  513.                         @Override
  514.                         public void onNext(ResponseStop responseStop) {
  515.                             Toast.makeText(TrackerService.this,"Trip Stop",Toast.LENGTH_SHORT).show();
  516.                         }
  517.                     }));
  518.  
  519.         }else {
  520.  
  521.             mSubscriptions.add(NetworkUtil.getRetrofitV2().stopTrip(tripUUIDBody)
  522.                     .observeOn(AndroidSchedulers.mainThread())
  523.                     .subscribeOn(Schedulers.io())
  524.                     .subscribe(new Observer<ResponseStop>() {
  525.                         @Override
  526.                         public void onCompleted() {
  527.  
  528.                         }
  529.  
  530.                         @Override
  531.                         public void onError(Throwable e) {
  532.  
  533.  
  534.                         }
  535.  
  536.                         @Override
  537.                         public void onNext(ResponseStop responseStop) {
  538.                             Toast.makeText(TrackerService.this,"Trip Stop",Toast.LENGTH_SHORT).show();
  539.                         }
  540.                     }));
  541.  
  542.         }
  543.  
  544.  
  545.     }
  546.  
  547.     private void doCreateLocalTracker() {
  548.  
  549.         final Realm realm = Realm.getDefaultInstance();
  550.  
  551.         int hour = Calendar.getInstance().get(Calendar.HOUR_OF_DAY);
  552.  
  553.  
  554.         if (arrayTrack.isEmpty()){
  555.             TrackModel trackModel = new TrackModel();
  556.             trackModel.setmLng(latitude);
  557.             trackModel.setmLng(longitude);
  558.             trackModel.setmLastTotalCredit(0);
  559.             trackModel.setmLastTotalDistance(0.0);
  560.             arrayTrack.add(trackModel);
  561.         }
  562.  
  563.  
  564.         //if (realmResultsDataTracker.isEmpty()){
  565.             realm.beginTransaction();
  566. //            Toast.makeText(TrackerService.this,"Trip has create",Toast.LENGTH_SHORT).show();
  567.             DataTrackModel dataTrackModel = realm.createObject(DataTrackModel.class);
  568.             dataTrackModel.setmId(tripUUID);
  569.             dataTrackModel.setmLastTotalDistance("0");
  570.             dataTrackModel.setmLastTotalCredit("0");
  571.             dataTrackModel.setmLat(String.valueOf(latitude));
  572.             dataTrackModel.setmLng(String.valueOf(longitude));
  573.             dataTrackModel.setmStatus("onGoing");
  574.             realm.commitTransaction();
  575.             realm.close();
  576.  
  577.         isConnect = true;
  578.  
  579.     }
  580.  
  581.  
  582.  
  583.  
  584.     private void doCalculate(){
  585.  
  586.  
  587.  
  588.  
  589.  
  590.  
  591.  
  592.         if (AppController.getInstance() != null && AppController.getInstance().getSessionManager() != null && AppController.getInstance().getSessionManager().getUserAccount() !=null)
  593.             userAccountModel = AppController.getInstance().getSessionManager().getUserAccount();
  594.  
  595.  
  596.         //--------------------------------//
  597.  
  598.  
  599.                 //do something
  600.                 //Set Data to local
  601.                 if (arraySingleTrack.isEmpty()){
  602.                     //First
  603.                     TrackModel trackModel = new TrackModel();
  604.                     trackModel.setmLat(latitude);
  605.                     trackModel.setmLng(longitude);
  606.                     trackModel.setmLastTotalDistance(0.0);
  607.                     trackModel.setmLastTotalCredit(0);
  608.                     arraySingleTrack.add(trackModel);
  609.                     //Toast.makeText(TrackerService.this,"First Data Added:",Toast.LENGTH_SHORT).show();
  610.                 }else {
  611.                     //Second
  612.                     //Calculation from previous data compare with realtime data
  613.  
  614.  
  615.                     if (userAccountModel.getData().getStatusCampaign()!= null){
  616.  
  617.                         if (userAccountModel.getData().getStatusCampaign().getWraping()!= null){
  618.                             String creditValString ;
  619.                             creditValString = userAccountModel.getData().getStatusCampaign().getWraping().getCredit();
  620.  
  621.                             String y = creditValString.replace(".", ",");
  622. //                        int value1 = Integer.parseInt(y);
  623.  
  624.                             DecimalFormat decimalFormat = new DecimalFormat("#,##0");
  625.                             String numberAsString = decimalFormat.format(Double.valueOf(creditValString));
  626.                             String ys = numberAsString.replace(",", "");
  627. //
  628.                             priceAds = Integer.parseInt(ys);
  629.  
  630.                         }
  631.                     }
  632.  
  633.  
  634.                     //start claluate distance
  635.  
  636.                     //Iniz data from previous
  637.                     Double latPrevious = arraySingleTrack.get(arraySingleTrack.size()-1).getmLat();
  638.                     Double lngPrevious = arraySingleTrack.get(arraySingleTrack.size()-1).getmLng();
  639.                     Double multiDist  = arraySingleTrack.get(arraySingleTrack.size()-1).getmLastTotalDistance();
  640.  
  641.                     Location location1 = new Location("locationA");
  642.                     location1.setLatitude(latPrevious);
  643.                     location1.setLongitude(lngPrevious);
  644.                     Location location2 = new Location("locationA");
  645.                     location2.setLatitude(latitude);
  646.                     location2.setLongitude(longitude);
  647.  
  648.                     //------------------- //
  649.                     TotalDistance = multiDist + location1.distanceTo(location2);
  650.  
  651.                     CurentTripDistance = location1.distanceTo(location2);
  652.  
  653.                     Log.e("shut"," Curent in  distance: "+String.valueOf(CurentTripDistance));
  654.                     //-------- Cal in Meters -------/
  655.                     Double Dmeter = TotalDistance;
  656.                     dMeter = Integer.valueOf(Dmeter.intValue());
  657.  
  658.                     Double D = TotalDistance;
  659.                     int iX = Integer.valueOf(D.intValue());
  660.  
  661.  
  662.  
  663.  
  664.                     // ----------  Call in KM ---------//
  665.                 double distanceKM = TotalDistance /1000;
  666.                 sDistances =  Util.formatDistance(distanceKM);
  667.                 Double in_meter_double = TotalDistance;
  668.                 DistanceInMeters = Integer.valueOf(in_meter_double.intValue());
  669.  
  670.  
  671.  
  672.                     double priceAdsInDouble = Integer.valueOf(priceAds);
  673.                     TotalCredit = (priceAdsInDouble/1000) * iX;
  674.  
  675.                     Log.e("wer2",String.valueOf(DistanceTodayInDouble));
  676.  
  677.  
  678.                     Log.e("shut","IX : "+iX + " Total : "+TotalCredit);
  679.                     Log.e("shut","current : "+String.valueOf(CurentTripDistance));
  680.                     Log.e("shut",String.valueOf(TotalDistance));
  681.                     Log.e("shut","DX : "+String.valueOf(TotalDistance+CurentTripDistance));
  682.                     Log.e("shut","BX : "+String.valueOf(DistanceTodayInDouble+CurentTripDistance));
  683.                     Log.e("shut","MX : "+String.valueOf(TotalDistance+DistanceTodayInDouble));
  684.  
  685.  
  686.  
  687.  
  688.                     //----------------- Cal Limit ------------------//
  689.  
  690.                     double LimitTodayInMeters = Double.parseDouble(sDailyKmMax)*1000;
  691.                     double LimitTodayCredit = Double.parseDouble(sDailyKmMax)*priceAdsInDouble;
  692.                     double DistancePlus = DistanceTodayInDouble + CurentTripDistance;
  693.                     double DistanceMinus = DistanceTodayInDouble - TotalDistance;
  694.                     double DistancePlusTotal = DistanceTodayInDouble+TotalDistance;
  695.  
  696.  
  697.                     //Log.e("check","Total credit : "+TotalCredit);
  698.                     Log.e("check","minus sebelum :"+DistanceMinus +" plus sebelum  :"+DistancePlus);
  699.                     Log.e("check","minus :"+DistanceMinus +" plus :"+DistancePlus+"Dis in bobel : "+String.valueOf(DistanceTodayInDouble));
  700.                     Log.e("check","Totalgrand : "+DistancePlusTotal);
  701.  
  702.                     if (DistancePlusTotal > LimitTodayInMeters){
  703.                         Log.e("check","Masuk Limit Distnace");
  704.  
  705.                         if (arrayMultiTrack.size() > 0){
  706.  
  707.                             Double totalD = Double.valueOf(arrayMultiTrack.get(arrayMultiTrack.size()-1).get(arrayMultiTrack.size()-1).getmLastTotalDistance());
  708.  
  709.                             tt_credit = totalD.intValue();
  710.                         }
  711.                         tt_credit = 0;
  712.                         //------------- Call Credit -----------//
  713.                         if(DistancePlusTotal <= LimitTodayInMeters){
  714.                             Log.e("check","Masuk Limit Credit");
  715.  
  716.                             TotalCredit = Double.parseDouble(sDailyKmMax)*priceAdsInDouble;
  717. //                            Log.e("check","Total credit : "+TotalCredit);
  718. //                            Log.e("check","minus :"+DistanceMinus +" plus :"+DistancePlus+"Dis in bobel : "+String.valueOf(DistanceTodayInDouble));
  719.  
  720.                             if (tt_credit > TotalCredit){
  721.                                 TotalCredit = TotalCredit - tt_credit ;
  722.                                 Log.e("check","Kurang : "+TotalCredit);
  723.                             }else {
  724.                                 TotalCredit = TotalCredit - CreditTodayInDouble;
  725.                                 Log.e("check","Habis : "+TotalCredit);
  726.                             }
  727.                         }else {
  728.                             TotalCredit = 0;
  729.                         }
  730.  
  731.                         if (TotalCredit < 0){
  732.                             TotalCredit = 0;
  733.                         }
  734.                     }
  735.  
  736.  
  737.  
  738.  
  739.  
  740.  
  741.                     //----------------------- Add to List -----------------//
  742.                     TrackModel trackModel = new TrackModel();
  743.  
  744.                     trackModel.setmLat(latitude);
  745.                     trackModel.setmLng(longitude);
  746.                     trackModel.setmLastTotalDistance(TotalDistance);
  747.                     trackModel.setmLastTotalCredit(Double.valueOf(TotalCredit).intValue());
  748.                     arraySingleTrack.add(trackModel);
  749.                     arrayMultiTrack.add(arraySingleTrack);
  750.  
  751.  
  752.  
  753.                 }
  754.  
  755.  
  756.                 double  sum = 0 ;
  757.                 if (arrayMultiTrack.size() > 0){
  758.                     sum += arrayMultiTrack.get(arrayMultiTrack.size()-1).get(arrayMultiTrack.size()-1).getmLastTotalDistance();
  759.                 }
  760.                 Log.e("qwer",String.valueOf(sum)+"distan :"+DistanceToday);
  761.  
  762.  
  763.  
  764.                 sendMessage("distance",sDistances);
  765.                 sendMessage("credit",String.valueOf(Util.formatCurrency(Double.valueOf(TotalCredit))));
  766.                 sendMessage("updateTotal","update");
  767.  
  768.  
  769.  
  770.  
  771.  
  772.  
  773.  
  774.  
  775.  
  776.         //------------------- Push Data every gps location move -----------------///
  777.         if (sendDataTracker != null){
  778.             //do save to array data
  779.             sendTrackModel.setmLat(latitude);
  780.             sendTrackModel.setmLng(longitude);
  781.             sendTrackModel.setmLastTotalCredit(Double.valueOf(TotalCredit).intValue());
  782.             sendTrackModel.setmLastTotalDistance(DistanceInMeters);
  783.             sendArrayTotal.add(sendTrackModel);
  784.  
  785.  
  786.             sendDataTracker.setTripUUID(tripUUID);
  787.             sendDataTracker.setTrips(sendArrayTotal);
  788.             SendDataToServer(sendDataTracker);
  789.             Log.e("limitt","limit");
  790.             //sendArrayTotal.clear();
  791.             Toast.makeText(TrackerService.this,"Send to server",Toast.LENGTH_SHORT).show();
  792.         }
  793.  
  794.         //-----------------------------------------------------------------------------//
  795.         getReportTrack();
  796.  
  797.  
  798.     }
  799.  
  800.  
  801.  
  802.  
  803.     private void SendDataToServer(SendDataTracker sendDataTracker){
  804.  
  805.         mSubscriptions.add(NetworkUtil.getRetrofitV2().sendTrackerFeed(sendDataTracker)
  806.                 .observeOn(AndroidSchedulers.mainThread())
  807.                 .subscribeOn(Schedulers.io())
  808.                 .subscribe(new Observer<ResponsTrackFeed>() {
  809.                     @Override
  810.                     public void onCompleted() {
  811.                         //sendMessage("hideDialog", "");
  812.                     }
  813.  
  814.                     @Override
  815.                     public void onError(Throwable e) {
  816.  
  817.                         // sendMessage("hideDialog", "");
  818.                     }
  819.  
  820.  
  821.  
  822.                     @Override
  823.                     public void onNext(ResponsTrackFeed responsTrackFeed) {
  824.  
  825.                         //Toast.makeText(TrackerService.this,"Response Send data :",Toast.LENGTH_SHORT).show();
  826.  
  827.                     }
  828.                 }));
  829.  
  830.     }
  831.  
  832.  
  833.     private synchronized void gpsStart() {
  834.  
  835.         if (!mGpsIsStarted && mLocProvider != null && mLocService != null && (mLocService.isProviderEnabled(LocationManager.GPS_PROVIDER) || mLocService.isProviderEnabled(LocationManager.NETWORK_PROVIDER))) {
  836.             if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
  837.                 // TODO: Consider calling
  838.                 //    ActivityCompat#requestPermissions
  839.                 // here to request the missing permissions, and then overriding
  840.                 //   public void onRequestPermissionsResult(int requestCode, String[] permissions,
  841.                 //                                          int[] grantResults)
  842.                 // to handle the case where the user grants the permission. See the documentation
  843.                 // for ActivityCompat#requestPermissions for more details.
  844.                 return;
  845.             }
  846.             mGpsIsStarted = true;
  847.         } else {
  848.  
  849.         }
  850.     }
  851.  
  852.     private synchronized void gpsStop() {
  853.         if (mGpsIsStarted) {
  854.             if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
  855.                 // TODO: Consider calling
  856.                 //    ActivityCompat#requestPermissions
  857.                 // here to request the missing permissions, and then overriding
  858.                 //   public void onRequestPermissionsResult(int requestCode, String[] permissions,
  859.                 //                                          int[] grantResults)
  860.                 // to handle the case where the user grants the permission. See the documentation
  861.                 // for ActivityCompat#requestPermissions for more details.
  862.                 return;
  863.             }
  864.             mLocService.removeUpdates(this);
  865.             mGpsIsStarted = false;
  866.         }
  867.     }
  868.  
  869.  
  870.  
  871.     private void showNotification() {
  872.         CharSequence text = "Running";
  873.         PendingIntent contentIntent = PendingIntent.getActivity(this, 0,
  874.                 new Intent(this, MainActivity.class), 0);
  875.  
  876.         Notification notification = new Notification.Builder(this)
  877.                 .setSmallIcon(R.drawable.ic_logo_sticar_bw)
  878.                 .setTicker(text)
  879.                 .setWhen(System.currentTimeMillis())
  880.                 .setContentTitle(getText(R.string.app_name))
  881.                 .setContentText(text)
  882.                 .setContentIntent(contentIntent)
  883.                 .setOngoing(true)
  884.                 .build();
  885.  
  886.         mNM.notify(999, notification);
  887.     }
  888.  
  889.     private void sendMessage(String type, String value) {
  890.         //Log.d("sender", "Broadcasting message");
  891.         Intent intent = new Intent("service-gps-event");
  892.         // You can also include some extra data.
  893.         intent.putExtra("type", type);
  894.         intent.putExtra("value", value);
  895.         LocalBroadcastManager.getInstance(this).sendBroadcast(intent);
  896.     }
  897.  
  898.  
  899. }
RAW Paste Data
Pastebin PRO Summer Special!
Get 60% OFF on Pastebin PRO accounts!
Top