Search in sources :

Example 1 with StorageHelper

use of org.y20k.trackbook.helpers.StorageHelper in project trackbook by y20k.

the class TrackerService method startTracking.

/* Start tracking location */
// todo remove
private void startTracking(@Nullable Intent intent, boolean createNewTrack) {
    LogHelper.v(LOG_TAG, "Service received command: START");
    // create a new track - if requested
    if (createNewTrack) {
        mTrack = new Track();
    } else {
        StorageHelper storageHelper = new StorageHelper(this);
        if (storageHelper.tempFileExists()) {
            // load temp track file
            mTrack = storageHelper.loadTrack(FILE_TEMP_TRACK);
            // try to mark last waypoint as stopover
            int lastWayPoint = mTrack.getWayPoints().size() - 1;
            if (lastWayPoint >= 0) {
                mTrack.getWayPoints().get(lastWayPoint).setIsStopOver(true);
            }
        } else {
            // fallback, if tempfile did not exist
            LogHelper.e(LOG_TAG, "Unable to find previously saved track temp file.");
            mTrack = new Track();
        }
    }
    // get last location
    if (intent != null && ACTION_START.equals(intent.getAction()) && intent.hasExtra(EXTRA_LAST_LOCATION)) {
        // received START intent and last location - unpack last location
        mCurrentBestLocation = intent.getParcelableExtra(EXTRA_LAST_LOCATION);
    } else if (ACTION_RESUME.equals(intent.getAction()) && mTrack.getSize() > 0) {
        // received RESUME intent - use last waypoint
        mCurrentBestLocation = mTrack.getWayPointLocation(mTrack.getSize() - 1);
    }
    // get last location - fallback
    if (mCurrentBestLocation == null) {
        mCurrentBestLocation = LocationHelper.determineLastKnownLocation(mLocationManager);
    }
    // add last location as WayPoint to track
    addWayPointToTrack();
    // put up notification
    mNotificationBuilder = new NotificationCompat.Builder(this, NOTIFICATION_CHANEL_ID_RECORDING_CHANNEL);
    mNotification = NotificationHelper.getNotification(this, mNotificationBuilder, mTrack, true);
    // todo check if necessary in pre Android O
    mNotificationManager.notify(TRACKER_SERVICE_NOTIFICATION_ID, mNotification);
    // get duration of previously recorded track - in case this service has been restarted / resumed
    final long previouslyRecordedDuration = mTrack.getTrackDuration();
    // set timer to retrieve new locations and to prevent endless tracking
    mTimer = new CountDownTimer(EIGHT_HOURS_IN_MILLISECONDS, FIFTEEN_SECONDS_IN_MILLISECONDS) {

        @Override
        public void onTick(long millisUntilFinished) {
            // update track duration - and add duration from previously interrupted / paused session
            long duration = EIGHT_HOURS_IN_MILLISECONDS - millisUntilFinished + previouslyRecordedDuration;
            mTrack.setDuration(duration);
            // try to add WayPoint to Track
            addWayPointToTrack();
            // update notification
            mNotification = NotificationHelper.getUpdatedNotification(TrackerService.this, mNotificationBuilder, mTrack);
            mNotificationManager.notify(TRACKER_SERVICE_NOTIFICATION_ID, mNotification);
            // save a temp file in case the service has been killed by the system
            SaveTempTrackAsyncHelper saveTempTrackAsyncHelper = new SaveTempTrackAsyncHelper();
            saveTempTrackAsyncHelper.execute();
        }

        @Override
        public void onFinish() {
            // stop tracking after eight hours
            stopTracking();
        }
    };
    mTimer.start();
    // initialize step counter
    mStepCountOffset = 0;
    boolean stepCounterAvailable;
    stepCounterAvailable = mSensorManager.registerListener(this, mSensorManager.getDefaultSensor(TYPE_STEP_COUNTER), SensorManager.SENSOR_DELAY_UI);
    if (stepCounterAvailable) {
        LogHelper.v(LOG_TAG, "Pedometer sensor available: Registering listener.");
    } else {
        LogHelper.i(LOG_TAG, "Pedometer sensor not available.");
        mTrack.setStepCount(-1);
    }
    // create gps and network location listeners
    startFindingLocation();
    // register content observer for changes in System Settings
    this.getContentResolver().registerContentObserver(android.provider.Settings.Secure.CONTENT_URI, true, mSettingsContentObserver);
    // start service in foreground
    startForeground(TRACKER_SERVICE_NOTIFICATION_ID, mNotification);
}
Also used : CountDownTimer(android.os.CountDownTimer) NotificationCompat(android.support.v4.app.NotificationCompat) StorageHelper(org.y20k.trackbook.helpers.StorageHelper) Track(org.y20k.trackbook.core.Track) WayPoint(org.y20k.trackbook.core.WayPoint)

Example 2 with StorageHelper

use of org.y20k.trackbook.helpers.StorageHelper in project trackbook by y20k.

the class TrackerService method resumeTracking.

/* Resume tracking after stop/pause */
public void resumeTracking() {
    if (mLocationSystemSetting) {
        LogHelper.v(LOG_TAG, "Recording resumed");
        // create a new track - if requested
        StorageHelper storageHelper = new StorageHelper(this);
        if (storageHelper.tempFileExists()) {
            // load temp track file
            mTrack = storageHelper.loadTrack(FILE_TEMP_TRACK);
            // try to mark last waypoint as stopover
            int lastWayPoint = mTrack.getWayPoints().size() - 1;
            if (lastWayPoint >= 0) {
                mTrack.getWayPoints().get(lastWayPoint).setIsStopOver(true);
            }
        } else {
            // fallback, if tempfile did not exist
            LogHelper.e(LOG_TAG, "Unable to find previously saved track temp file.");
            mTrack = new Track();
        }
        // get last location
        if (mTrack.getSize() > 0) {
            mCurrentBestLocation = mTrack.getWayPointLocation(mTrack.getSize() - 1);
        } else {
            mCurrentBestLocation = LocationHelper.determineLastKnownLocation(mLocationManager);
        }
        // initialize step counter
        mStepCountOffset = mTrack.getStepCount();
        // begin recording
        recordMovements();
    } else {
        LogHelper.i(LOG_TAG, "Location Setting is turned off.");
        Toast.makeText(getApplicationContext(), R.string.toast_message_location_offline, Toast.LENGTH_LONG).show();
    }
}
Also used : StorageHelper(org.y20k.trackbook.helpers.StorageHelper) WayPoint(org.y20k.trackbook.core.WayPoint) Track(org.y20k.trackbook.core.Track)

Example 3 with StorageHelper

use of org.y20k.trackbook.helpers.StorageHelper in project trackbook by y20k.

the class MainActivityMapFragment method onCreate.

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // get activity
    mActivity = getActivity();
    // restore first start state and tracking state
    mFirstStart = true;
    mTrackerServiceRunning = false;
    loadTrackerServiceState(mActivity);
    if (savedInstanceState != null) {
        mFirstStart = savedInstanceState.getBoolean(INSTANCE_FIRST_START, true);
    }
    // create storage helper
    mStorageHelper = new StorageHelper(mActivity);
    // acquire reference to Location Manager
    mLocationManager = (LocationManager) mActivity.getSystemService(Context.LOCATION_SERVICE);
    // CASE 1: get saved location if possible
    if (savedInstanceState != null) {
        Location savedLocation = savedInstanceState.getParcelable(INSTANCE_CURRENT_LOCATION);
        // check if saved location is still current
        if (LocationHelper.isNewLocation(savedLocation)) {
            mCurrentBestLocation = savedLocation;
        } else {
            mCurrentBestLocation = null;
        }
    }
    // CASE 2: get last known location if no saved location or saved location is too old
    if (mCurrentBestLocation == null && mLocationManager.getProviders(true).size() > 0) {
        mCurrentBestLocation = LocationHelper.determineLastKnownLocation(mLocationManager);
    }
    // CASE 3: location services are available but unable to get location - this should not happen
    if (mCurrentBestLocation == null) {
        mCurrentBestLocation = new Location(LocationManager.NETWORK_PROVIDER);
        mCurrentBestLocation.setLatitude(DEFAULT_LATITUDE);
        mCurrentBestLocation.setLongitude(DEFAULT_LONGITUDE);
    }
    // get state of location system setting
    mLocationSystemSetting = LocationHelper.checkLocationSystemSetting(mActivity);
    // create content observer for changes in System Settings
    mSettingsContentObserver = new SettingsContentObserver(new Handler());
    // register broadcast receiver for new WayPoints
    mTrackUpdatedReceiver = createTrackUpdatedReceiver();
    IntentFilter trackUpdatedIntentFilter = new IntentFilter(ACTION_TRACK_UPDATED);
    LocalBroadcastManager.getInstance(mActivity).registerReceiver(mTrackUpdatedReceiver, trackUpdatedIntentFilter);
}
Also used : IntentFilter(android.content.IntentFilter) Handler(android.os.Handler) StorageHelper(org.y20k.trackbook.helpers.StorageHelper) Location(android.location.Location)

Aggregations

StorageHelper (org.y20k.trackbook.helpers.StorageHelper)3 Track (org.y20k.trackbook.core.Track)2 WayPoint (org.y20k.trackbook.core.WayPoint)2 IntentFilter (android.content.IntentFilter)1 Location (android.location.Location)1 CountDownTimer (android.os.CountDownTimer)1 Handler (android.os.Handler)1 NotificationCompat (android.support.v4.app.NotificationCompat)1