diff --git a/.circleci/config.yml b/.circleci/config.yml deleted file mode 100644 index 794684c..0000000 --- a/.circleci/config.yml +++ /dev/null @@ -1,83 +0,0 @@ -# Android Gradle CircleCI 2.0 configuration file -# -# Check https://circleci.com/docs/2.0/language-android/ for more details -# https://github.com/flyve-mdm/android-mdm-agent/blob/develop/.circleci/config.yml - -version: 2 -reference: - - android_config: &android_config - working_directory: ~/android - docker: - # specify the version you desire here - - image: circleci/android:api-28-alpha - # Specify service dependencies here if necessary - # CircleCI maintains a library of pre-built images - # documented at https://circleci.com/docs/2.0/circleci-images/ - # - image: circleci/postgres:9.4 - environment: - # Customize the JVM maximum heap limit - JVM_OPTS: -Xmx3200m - TERM: dumb - - gradle_key: &gradle_key - jars-{{ checksum "build.gradle" }} - - restore_gradle_cache: &restore_gradle_cache - restore_cache: - key: *gradle_key - - save_gradle_cache: &save_gradle_cache - save_cache: - key: *gradle_key - paths: - - ~/.gradle - - ~/.m2 - - android_dependencies: &android_dependencies - run: - name: Download Android Dependencies - command: ./gradlew androidDependencies - -jobs: - # unit test - build: - <<: *android_config - steps: - - checkout - - *restore_gradle_cache - - *android_dependencies - - *save_gradle_cache - - run: - name: Run Tests - command: ./gradlew test - - store_artifacts: - path: build/reports - destination: reports - - store_test_results: - path: build/test-results - # See https://circleci.com/docs/2.0/deployment-integrations/ for deploy examples - - # Test Instrumentation with Android 4.1 JELLY_BEAN API 16 - test_instrumentation: - <<: *android_config - steps: - - checkout - - *restore_gradle_cache - - *android_dependencies - - *save_gradle_cache - - run: - name: Create debug apk - command: ./gradlew assembleDebug assembleAndroidTest - - run: - name: Run Tests on Firebase test lab - command: source ci/scripts/google_cloud.sh - -workflows: - version: 2 - build_and_test: - jobs: - - build - - test_instrumentation: - requires: - - build diff --git a/.gitignore b/.gitignore index 1d399b4..10cfdbf 100644 --- a/.gitignore +++ b/.gitignore @@ -1,15 +1,10 @@ -.DS_Store -node_modules -npm-debug.log - -# Xcode -xcuserdata -project.xcworkspace - -# Android/IJ -.idea +*.iml .gradle +/local.properties +/.idea +.DS_Store +/build +/captures +.externalNativeBuild +.cxx local.properties -*.iml -build -*.skip diff --git a/.npmignore b/.npmignore deleted file mode 100644 index 5daf0b5..0000000 --- a/.npmignore +++ /dev/null @@ -1,19 +0,0 @@ -.DS_Store -node_modules -npm-debug.log - -# Xcode -xcuserdata -project.xcworkspace - -# Android/IJ -.idea -.gradle -local.properties -*.iml -build -*.skip - -# CircleCI -.circleci -ci/ diff --git a/README.md b/README.md index eb406b2..8829641 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,5 @@ Background Geolocation for Android -[![CircleCI](https://circleci.com/gh/mauron85/background-geolocation-android/tree/master.svg?style=shield)](https://circleci.com/gh/mauron85/background-geolocation-android/tree/master) - used by: -* [react-native-background-geolocation](https://github.com/mauron85/react-native-background-geolocation) - -* [cordova-plugin-background-geolocation](https://github.com/mauron85/cordova-plugin-background-geolocation) +* [react-native-background-geolocation](https://github.com/gennadysx/react-native-background-geolocation) diff --git a/backgroundgeolocation/.gitignore b/backgroundgeolocation/.gitignore new file mode 100644 index 0000000..42afabf --- /dev/null +++ b/backgroundgeolocation/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/VERSIONS.gradle b/backgroundgeolocation/VERSIONS.gradle similarity index 99% rename from VERSIONS.gradle rename to backgroundgeolocation/VERSIONS.gradle index 373675b..31dc6aa 100644 --- a/VERSIONS.gradle +++ b/backgroundgeolocation/VERSIONS.gradle @@ -1,7 +1,7 @@ import org.gradle.util.GradleVersion def DEFAULT_COMPILE_SDK_VERSION = 30 -def DEFAULT_BUILD_TOOLS_VERSION = "30.0.2" +def DEFAULT_BUILD_TOOLS_VERSION = "30.0.3" def DEFAULT_TARGET_SDK_VERSION = 30 def DEFAULT_MIN_SDK_VERSION = 21 def DEFAULT_PLAY_SERVICES_VERSION = "11+" diff --git a/backgroundgeolocation/build.gradle b/backgroundgeolocation/build.gradle new file mode 100644 index 0000000..212b280 --- /dev/null +++ b/backgroundgeolocation/build.gradle @@ -0,0 +1,105 @@ +apply plugin: 'com.android.application' +apply plugin: 'maven-publish' +apply plugin: 'signing' +apply plugin: 'org.jetbrains.kotlin.android' + + +apply from: './VERSIONS.gradle' +def accountPrefix = getAccountPrefix() +def resourcePrefix = getResourcePrefix() + +// https://hackernoon.com/android-how-to-add-gradle-dependencies-using-foreach-c4cbcc070458 +def projDependencies = [ + [configuration: "implementation", dependency: androidLibs.playServicesLocation], + [configuration: "implementation", dependency: androidLibs.supportCompat], + [configuration: "implementation", dependency: androidLibs.appcompat], + [configuration: "implementation", dependency: libs.permissions, + options: { exclude group: 'com.android.support', module: 'appcompat-v7'}], + [configuration: "implementation", dependency: libs.logback], + [configuration: "implementation", dependency: libs.slf4j], + [configuration: "implementation", dependency: libs.promise], +] + +buildscript { + repositories { + maven { + url 'https://maven.google.com/' + name 'Google' + } + jcenter() + gradlePluginPortal() + google() + mavenCentral() + } + dependencies { + classpath 'com.android.tools.build:gradle:7.0.4' + + // NOTE: Do not place your application dependencies here; they belong + // in the individual module build.gradle files + } +} + +android { + + compileSdkVersion project.ext.getCompileSdkVersion() + buildToolsVersion project.ext.getBuildToolsVersion() + + // Tip: https://stackoverflow.com/questions/39987669/renamingdelegatingcontext-is-deprecated-how-do-we-test-sqlite-db-now/52170737#52170737 + // Gradle automatically adds 'android.test.runner' as a dependency. + + defaultConfig { + resValue "string", resourcePrefix + "account_name", 'Locations' + resValue "string", resourcePrefix + "account_type", accountPrefix + '.account' + resValue "string", resourcePrefix + "content_authority", accountPrefix + '.provider' + minSdkVersion project.ext.getMinSdkVersion() + versionCode 2 + versionName "1.0.1" + } + + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' + } + + } + + lintOptions { + abortOnError false + } + + compileOptions { + sourceCompatibility JavaVersion.VERSION_11 + targetCompatibility JavaVersion.VERSION_11 + } + + publishing { + singleVariant("release") { + withSourcesJar() + withJavadocJar() + } + } + +} + +dependencies { + projDependencies.each { + add(it.configuration, it.dependency) + } + implementation fileTree(include: ['*.jar'], dir: 'libs') +} + + + +afterEvaluate { + publishing { + publications { + release(MavenPublication) { + groupId = "com.gennadysx" + artifactId = "geolocation" + version = "1.0.1" + from components.release + } + } + } +} diff --git a/proguard-rules.pro b/backgroundgeolocation/proguard-rules.pro similarity index 100% rename from proguard-rules.pro rename to backgroundgeolocation/proguard-rules.pro diff --git a/src/main/AndroidManifest.xml b/backgroundgeolocation/src/main/AndroidManifest.xml similarity index 85% rename from src/main/AndroidManifest.xml rename to backgroundgeolocation/src/main/AndroidManifest.xml index 31d9f79..0264527 100644 --- a/src/main/AndroidManifest.xml +++ b/backgroundgeolocation/src/main/AndroidManifest.xml @@ -18,10 +18,10 @@ under the License. --> + package="com.gennadysx.geolocation" android:versionName="1.0" android:versionCode="1"> @@ -31,7 +31,7 @@ android:resource="@xml/syncadapter"/> + android:name="com.gennadysx.geolocation.bgloc.sync.AuthenticatorService"> @@ -40,12 +40,12 @@ android:resource="@xml/authenticator" /> - - + + diff --git a/src/main/java/com/gennadysx/bgloc/BackgroundGeolocationFacade.java b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/BackgroundGeolocationFacade.java similarity index 94% rename from src/main/java/com/gennadysx/bgloc/BackgroundGeolocationFacade.java rename to backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/BackgroundGeolocationFacade.java index 097067c..30010aa 100644 --- a/src/main/java/com/gennadysx/bgloc/BackgroundGeolocationFacade.java +++ b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/BackgroundGeolocationFacade.java @@ -1,4 +1,4 @@ -package com.gennadysx.bgloc; +package com.gennadysx.geolocation.bgloc; import android.Manifest; import android.accounts.Account; @@ -18,25 +18,25 @@ import android.support.v4.content.LocalBroadcastManager; import android.text.TextUtils; +import com.gennadysx.geolocation.bgloc.data.BackgroundActivity; +import com.gennadysx.geolocation.bgloc.data.BackgroundLocation; +import com.gennadysx.geolocation.bgloc.data.ConfigurationDAO; +import com.gennadysx.geolocation.bgloc.data.DAOFactory; +import com.gennadysx.geolocation.bgloc.data.LocationDAO; +import com.gennadysx.geolocation.bgloc.data.LocationTransform; +import com.gennadysx.geolocation.bgloc.provider.LocationProvider; +import com.gennadysx.geolocation.bgloc.service.LocationService; +import com.gennadysx.geolocation.bgloc.service.LocationServiceImpl; +import com.gennadysx.geolocation.bgloc.service.LocationServiceProxy; +import com.gennadysx.geolocation.bgloc.sync.AccountHelper; +import com.gennadysx.geolocation.bgloc.sync.NotificationHelper; +import com.gennadysx.geolocation.bgloc.sync.SyncService; +import com.gennadysx.geolocation.logging.DBLogReader; +import com.gennadysx.geolocation.logging.LogEntry; +import com.gennadysx.geolocation.logging.LoggerManager; +import com.gennadysx.geolocation.logging.UncaughtExceptionLogger; import com.github.jparkie.promise.Promise; import com.intentfilter.androidpermissions.PermissionManager; -import com.gennadysx.bgloc.data.BackgroundActivity; -import com.gennadysx.bgloc.data.BackgroundLocation; -import com.gennadysx.bgloc.data.ConfigurationDAO; -import com.gennadysx.bgloc.data.DAOFactory; -import com.gennadysx.bgloc.data.LocationDAO; -import com.gennadysx.bgloc.provider.LocationProvider; -import com.gennadysx.bgloc.service.LocationService; -import com.gennadysx.bgloc.service.LocationServiceImpl; -import com.gennadysx.bgloc.service.LocationServiceProxy; -import com.gennadysx.bgloc.data.LocationTransform; -import com.gennadysx.bgloc.sync.AccountHelper; -import com.gennadysx.bgloc.sync.NotificationHelper; -import com.gennadysx.bgloc.sync.SyncService; -import com.gennadysx.logging.DBLogReader; -import com.gennadysx.logging.LogEntry; -import com.gennadysx.logging.LoggerManager; -import com.gennadysx.logging.UncaughtExceptionLogger; import org.json.JSONException; import org.slf4j.event.Level; diff --git a/src/main/java/com/gennadysx/bgloc/BootCompletedReceiver.java b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/BootCompletedReceiver.java similarity index 87% rename from src/main/java/com/gennadysx/bgloc/BootCompletedReceiver.java rename to backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/BootCompletedReceiver.java index d7bdde5..dc66c61 100644 --- a/src/main/java/com/gennadysx/bgloc/BootCompletedReceiver.java +++ b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/BootCompletedReceiver.java @@ -7,7 +7,7 @@ This is a new class */ -package com.gennadysx.bgloc; +package com.gennadysx.geolocation.bgloc; import android.content.BroadcastReceiver; import android.content.Context; @@ -15,9 +15,9 @@ import android.os.Build; import android.util.Log; -import com.gennadysx.bgloc.data.ConfigurationDAO; -import com.gennadysx.bgloc.data.DAOFactory; -import com.gennadysx.bgloc.service.LocationServiceImpl; +import com.gennadysx.geolocation.bgloc.data.ConfigurationDAO; +import com.gennadysx.geolocation.bgloc.data.DAOFactory; +import com.gennadysx.geolocation.bgloc.service.LocationServiceImpl; import org.json.JSONException; diff --git a/src/main/java/com/gennadysx/bgloc/Config.java b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/Config.java similarity index 98% rename from src/main/java/com/gennadysx/bgloc/Config.java rename to backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/Config.java index 5541052..3f67ba3 100644 --- a/src/main/java/com/gennadysx/bgloc/Config.java +++ b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/Config.java @@ -7,17 +7,17 @@ This is a new class */ -package com.gennadysx.bgloc; +package com.gennadysx.geolocation.bgloc; import android.os.Bundle; import android.os.Parcel; import android.os.Parcelable; import android.support.annotation.Nullable; -import com.gennadysx.bgloc.data.AbstractLocationTemplate; -import com.gennadysx.bgloc.data.LocationTemplate; -import com.gennadysx.bgloc.data.LocationTemplateFactory; -import com.gennadysx.utils.CloneHelper; +import com.gennadysx.geolocation.bgloc.data.AbstractLocationTemplate; +import com.gennadysx.geolocation.bgloc.data.LocationTemplate; +import com.gennadysx.geolocation.bgloc.data.LocationTemplateFactory; +import com.gennadysx.geolocation.utils.CloneHelper; import org.json.JSONException; import org.json.JSONObject; diff --git a/src/main/java/com/gennadysx/bgloc/ConnectivityListener.java b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/ConnectivityListener.java similarity index 64% rename from src/main/java/com/gennadysx/bgloc/ConnectivityListener.java rename to backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/ConnectivityListener.java index 8549a47..2fd2a64 100644 --- a/src/main/java/com/gennadysx/bgloc/ConnectivityListener.java +++ b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/ConnectivityListener.java @@ -1,4 +1,4 @@ -package com.gennadysx.bgloc; +package com.gennadysx.geolocation.bgloc; public interface ConnectivityListener { boolean hasConnectivity(); diff --git a/src/main/java/com/tenforwardconsulting/bgloc/DistanceFilterLocationProvider.java b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/DistanceFilterLocationProvider.java similarity index 98% rename from src/main/java/com/tenforwardconsulting/bgloc/DistanceFilterLocationProvider.java rename to backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/DistanceFilterLocationProvider.java index 01274c7..0904571 100644 --- a/src/main/java/com/tenforwardconsulting/bgloc/DistanceFilterLocationProvider.java +++ b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/DistanceFilterLocationProvider.java @@ -9,7 +9,11 @@ 1. location is not persisted to db anymore, but broadcasted using intents instead */ -package com.tenforwardconsulting.bgloc; +package com.gennadysx.geolocation.bgloc; + +import static java.lang.Math.abs; +import static java.lang.Math.pow; +import static java.lang.Math.round; import android.app.AlarmManager; import android.app.PendingIntent; @@ -23,21 +27,16 @@ import android.location.LocationManager; import android.os.Bundle; -import com.gennadysx.bgloc.Config; -import com.gennadysx.bgloc.provider.AbstractLocationProvider; -import com.gennadysx.utils.ToneGenerator.Tone; +import com.gennadysx.geolocation.bgloc.provider.AbstractLocationProvider; +import com.gennadysx.geolocation.utils.ToneGenerator.Tone; import java.util.List; -import static java.lang.Math.abs; -import static java.lang.Math.pow; -import static java.lang.Math.round; - public class DistanceFilterLocationProvider extends AbstractLocationProvider implements LocationListener { private static final String TAG = DistanceFilterLocationProvider.class.getSimpleName(); - private static final String P_NAME = "com.tenforwardconsulting.cordova.bgloc"; + private static final String P_NAME = "com.gennadysx.geolocation.bgloc"; private static final String STATIONARY_REGION_ACTION = P_NAME + ".STATIONARY_REGION_ACTION"; private static final String STATIONARY_ALARM_ACTION = P_NAME + ".STATIONARY_ALARM_ACTION"; diff --git a/src/main/java/com/gennadysx/bgloc/HttpPostService.java b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/HttpPostService.java similarity index 99% rename from src/main/java/com/gennadysx/bgloc/HttpPostService.java rename to backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/HttpPostService.java index 246037e..a7982c8 100644 --- a/src/main/java/com/gennadysx/bgloc/HttpPostService.java +++ b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/HttpPostService.java @@ -1,4 +1,4 @@ -package com.gennadysx.bgloc; +package com.gennadysx.geolocation.bgloc; import android.os.Build; diff --git a/src/main/java/com/gennadysx/bgloc/LocationManager.java b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/LocationManager.java similarity index 99% rename from src/main/java/com/gennadysx/bgloc/LocationManager.java rename to backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/LocationManager.java index da93470..c463606 100644 --- a/src/main/java/com/gennadysx/bgloc/LocationManager.java +++ b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/LocationManager.java @@ -1,4 +1,4 @@ -package com.gennadysx.bgloc; +package com.gennadysx.geolocation.bgloc; import android.Manifest; import android.annotation.SuppressLint; diff --git a/src/main/java/com/gennadysx/bgloc/PluginDelegate.java b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/PluginDelegate.java similarity index 72% rename from src/main/java/com/gennadysx/bgloc/PluginDelegate.java rename to backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/PluginDelegate.java index 56d6afd..64c3ab3 100644 --- a/src/main/java/com/gennadysx/bgloc/PluginDelegate.java +++ b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/PluginDelegate.java @@ -1,7 +1,7 @@ -package com.gennadysx.bgloc; +package com.gennadysx.geolocation.bgloc; -import com.gennadysx.bgloc.data.BackgroundActivity; -import com.gennadysx.bgloc.data.BackgroundLocation; +import com.gennadysx.geolocation.bgloc.data.BackgroundActivity; +import com.gennadysx.geolocation.bgloc.data.BackgroundLocation; /** * Created by finch on 27.11.2017. diff --git a/src/main/java/com/gennadysx/bgloc/PluginException.java b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/PluginException.java similarity index 95% rename from src/main/java/com/gennadysx/bgloc/PluginException.java rename to backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/PluginException.java index a6d4096..0411857 100644 --- a/src/main/java/com/gennadysx/bgloc/PluginException.java +++ b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/PluginException.java @@ -1,4 +1,4 @@ -package com.gennadysx.bgloc; +package com.gennadysx.geolocation.bgloc; import android.os.Bundle; diff --git a/src/main/java/com/gennadysx/bgloc/PostLocationTask.java b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/PostLocationTask.java similarity index 96% rename from src/main/java/com/gennadysx/bgloc/PostLocationTask.java rename to backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/PostLocationTask.java index 7825859..4e34490 100644 --- a/src/main/java/com/gennadysx/bgloc/PostLocationTask.java +++ b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/PostLocationTask.java @@ -1,8 +1,8 @@ -package com.gennadysx.bgloc; +package com.gennadysx.geolocation.bgloc; -import com.gennadysx.bgloc.data.BackgroundLocation; -import com.gennadysx.bgloc.data.LocationDAO; -import com.gennadysx.logging.LoggerManager; +import com.gennadysx.geolocation.bgloc.data.BackgroundLocation; +import com.gennadysx.geolocation.bgloc.data.LocationDAO; +import com.gennadysx.geolocation.logging.LoggerManager; import org.json.JSONArray; import org.json.JSONException; diff --git a/src/main/java/com/gennadysx/bgloc/ResourceResolver.java b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/ResourceResolver.java similarity index 97% rename from src/main/java/com/gennadysx/bgloc/ResourceResolver.java rename to backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/ResourceResolver.java index a2af488..49d8599 100644 --- a/src/main/java/com/gennadysx/bgloc/ResourceResolver.java +++ b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/ResourceResolver.java @@ -1,4 +1,4 @@ -package com.gennadysx.bgloc; +package com.gennadysx.geolocation.bgloc; import android.content.Context; diff --git a/src/main/java/com/gennadysx/bgloc/data/AbstractLocationTemplate.java b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/data/AbstractLocationTemplate.java similarity index 97% rename from src/main/java/com/gennadysx/bgloc/data/AbstractLocationTemplate.java rename to backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/data/AbstractLocationTemplate.java index f7d5107..7d7be0e 100644 --- a/src/main/java/com/gennadysx/bgloc/data/AbstractLocationTemplate.java +++ b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/data/AbstractLocationTemplate.java @@ -1,4 +1,4 @@ -package com.gennadysx.bgloc.data; +package com.gennadysx.geolocation.bgloc.data; import org.json.JSONArray; import org.json.JSONException; diff --git a/src/main/java/com/gennadysx/bgloc/data/ArrayListLocationTemplate.java b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/data/ArrayListLocationTemplate.java similarity index 97% rename from src/main/java/com/gennadysx/bgloc/data/ArrayListLocationTemplate.java rename to backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/data/ArrayListLocationTemplate.java index 7662e72..bc61795 100644 --- a/src/main/java/com/gennadysx/bgloc/data/ArrayListLocationTemplate.java +++ b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/data/ArrayListLocationTemplate.java @@ -1,4 +1,4 @@ -package com.gennadysx.bgloc.data; +package com.gennadysx.geolocation.bgloc.data; import org.json.JSONArray; import org.json.JSONException; diff --git a/src/main/java/com/gennadysx/bgloc/data/BackgroundActivity.java b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/data/BackgroundActivity.java similarity index 98% rename from src/main/java/com/gennadysx/bgloc/data/BackgroundActivity.java rename to backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/data/BackgroundActivity.java index 221fc32..c0b284c 100644 --- a/src/main/java/com/gennadysx/bgloc/data/BackgroundActivity.java +++ b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/data/BackgroundActivity.java @@ -1,4 +1,4 @@ -package com.gennadysx.bgloc.data; +package com.gennadysx.geolocation.bgloc.data; import android.os.Parcel; import android.os.Parcelable; diff --git a/src/main/java/com/gennadysx/bgloc/data/BackgroundLocation.java b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/data/BackgroundLocation.java similarity index 88% rename from src/main/java/com/gennadysx/bgloc/data/BackgroundLocation.java rename to backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/data/BackgroundLocation.java index c2a8e49..5cf15bd 100644 --- a/src/main/java/com/gennadysx/bgloc/data/BackgroundLocation.java +++ b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/data/BackgroundLocation.java @@ -1,4 +1,4 @@ -package com.gennadysx.bgloc.data; +package com.gennadysx.geolocation.bgloc.data; import android.content.ContentValues; import android.database.Cursor; @@ -9,7 +9,7 @@ import android.os.Parcelable; import android.support.v4.util.TimeUtils; -import com.gennadysx.bgloc.data.sqlite.SQLiteLocationContract.LocationEntry; +import com.gennadysx.geolocation.bgloc.data.sqlite.SQLiteLocationContract; import org.json.JSONException; import org.json.JSONObject; @@ -167,30 +167,30 @@ public static BackgroundLocation fromLocation(Location location) { public static BackgroundLocation fromCursor(Cursor c) { BackgroundLocation l = new BackgroundLocation(); - l.setProvider(c.getString(c.getColumnIndex(LocationEntry.COLUMN_NAME_PROVIDER))); - l.setTime(c.getLong(c.getColumnIndex(LocationEntry.COLUMN_NAME_TIME))); - if (c.getInt(c.getColumnIndex(LocationEntry.COLUMN_NAME_HAS_ACCURACY)) == 1) { - l.setAccuracy(c.getFloat(c.getColumnIndex(LocationEntry.COLUMN_NAME_ACCURACY))); + l.setProvider(c.getString(c.getColumnIndex(SQLiteLocationContract.LocationEntry.COLUMN_NAME_PROVIDER))); + l.setTime(c.getLong(c.getColumnIndex(SQLiteLocationContract.LocationEntry.COLUMN_NAME_TIME))); + if (c.getInt(c.getColumnIndex(SQLiteLocationContract.LocationEntry.COLUMN_NAME_HAS_ACCURACY)) == 1) { + l.setAccuracy(c.getFloat(c.getColumnIndex(SQLiteLocationContract.LocationEntry.COLUMN_NAME_ACCURACY))); } - if (c.getInt(c.getColumnIndex(LocationEntry.COLUMN_NAME_HAS_SPEED)) == 1) { - l.setSpeed(c.getFloat(c.getColumnIndex(LocationEntry.COLUMN_NAME_SPEED))); + if (c.getInt(c.getColumnIndex(SQLiteLocationContract.LocationEntry.COLUMN_NAME_HAS_SPEED)) == 1) { + l.setSpeed(c.getFloat(c.getColumnIndex(SQLiteLocationContract.LocationEntry.COLUMN_NAME_SPEED))); } - if (c.getInt(c.getColumnIndex(LocationEntry.COLUMN_NAME_HAS_BEARING)) == 1) { - l.setBearing(c.getFloat(c.getColumnIndex(LocationEntry.COLUMN_NAME_BEARING))); + if (c.getInt(c.getColumnIndex(SQLiteLocationContract.LocationEntry.COLUMN_NAME_HAS_BEARING)) == 1) { + l.setBearing(c.getFloat(c.getColumnIndex(SQLiteLocationContract.LocationEntry.COLUMN_NAME_BEARING))); } - if (c.getInt(c.getColumnIndex(LocationEntry.COLUMN_NAME_HAS_ALTITUDE)) == 1) { - l.setAltitude(c.getDouble(c.getColumnIndex(LocationEntry.COLUMN_NAME_ALTITUDE))); + if (c.getInt(c.getColumnIndex(SQLiteLocationContract.LocationEntry.COLUMN_NAME_HAS_ALTITUDE)) == 1) { + l.setAltitude(c.getDouble(c.getColumnIndex(SQLiteLocationContract.LocationEntry.COLUMN_NAME_ALTITUDE))); } - if (c.getInt(c.getColumnIndex(LocationEntry.COLUMN_NAME_HAS_RADIUS)) == 1) { - l.setRadius(c.getFloat(c.getColumnIndex(LocationEntry.COLUMN_NAME_RADIUS))); + if (c.getInt(c.getColumnIndex(SQLiteLocationContract.LocationEntry.COLUMN_NAME_HAS_RADIUS)) == 1) { + l.setRadius(c.getFloat(c.getColumnIndex(SQLiteLocationContract.LocationEntry.COLUMN_NAME_RADIUS))); } - l.setLatitude(c.getDouble(c.getColumnIndex(LocationEntry.COLUMN_NAME_LATITUDE))); - l.setLongitude(c.getDouble(c.getColumnIndex(LocationEntry.COLUMN_NAME_LONGITUDE))); - l.setLocationProvider(c.getInt(c.getColumnIndex(LocationEntry.COLUMN_NAME_LOCATION_PROVIDER))); - l.setBatchStartMillis(c.getLong(c.getColumnIndex(LocationEntry.COLUMN_NAME_BATCH_START_MILLIS))); - l.setStatus(c.getInt(c.getColumnIndex(LocationEntry.COLUMN_NAME_STATUS))); - l.setLocationId(c.getLong(c.getColumnIndex(LocationEntry._ID))); - l.setMockFlags(c.getInt((c.getColumnIndex(LocationEntry.COLUMN_NAME_MOCK_FLAGS)))); + l.setLatitude(c.getDouble(c.getColumnIndex(SQLiteLocationContract.LocationEntry.COLUMN_NAME_LATITUDE))); + l.setLongitude(c.getDouble(c.getColumnIndex(SQLiteLocationContract.LocationEntry.COLUMN_NAME_LONGITUDE))); + l.setLocationProvider(c.getInt(c.getColumnIndex(SQLiteLocationContract.LocationEntry.COLUMN_NAME_LOCATION_PROVIDER))); + l.setBatchStartMillis(c.getLong(c.getColumnIndex(SQLiteLocationContract.LocationEntry.COLUMN_NAME_BATCH_START_MILLIS))); + l.setStatus(c.getInt(c.getColumnIndex(SQLiteLocationContract.LocationEntry.COLUMN_NAME_STATUS))); + l.setLocationId(c.getLong(c.getColumnIndex(SQLiteLocationContract.LocationEntry._ID))); + l.setMockFlags(c.getInt((c.getColumnIndex(SQLiteLocationContract.LocationEntry.COLUMN_NAME_MOCK_FLAGS)))); return l; } @@ -878,24 +878,24 @@ public JSONObject toJSONObjectWithId() throws JSONException { public ContentValues toContentValues() { ContentValues values = new ContentValues(); //values.put(LocationEntry._ID, locationId); - values.put(LocationEntry.COLUMN_NAME_TIME, time); - values.put(LocationEntry.COLUMN_NAME_ACCURACY, accuracy); - values.put(LocationEntry.COLUMN_NAME_SPEED, speed); - values.put(LocationEntry.COLUMN_NAME_BEARING, bearing); - values.put(LocationEntry.COLUMN_NAME_ALTITUDE, altitude); - values.put(LocationEntry.COLUMN_NAME_LATITUDE, latitude); - values.put(LocationEntry.COLUMN_NAME_LONGITUDE, longitude); - values.put(LocationEntry.COLUMN_NAME_RADIUS, radius); - values.put(LocationEntry.COLUMN_NAME_HAS_ACCURACY, hasAccuracy); - values.put(LocationEntry.COLUMN_NAME_HAS_SPEED, hasSpeed); - values.put(LocationEntry.COLUMN_NAME_HAS_BEARING, hasBearing); - values.put(LocationEntry.COLUMN_NAME_HAS_ALTITUDE, hasAltitude); - values.put(LocationEntry.COLUMN_NAME_HAS_RADIUS, hasRadius); - values.put(LocationEntry.COLUMN_NAME_PROVIDER, provider); - values.put(LocationEntry.COLUMN_NAME_LOCATION_PROVIDER, locationProvider); - values.put(LocationEntry.COLUMN_NAME_STATUS, status); - values.put(LocationEntry.COLUMN_NAME_BATCH_START_MILLIS, batchStartMillis); - values.put(LocationEntry.COLUMN_NAME_MOCK_FLAGS, mockFlags); + values.put(SQLiteLocationContract.LocationEntry.COLUMN_NAME_TIME, time); + values.put(SQLiteLocationContract.LocationEntry.COLUMN_NAME_ACCURACY, accuracy); + values.put(SQLiteLocationContract.LocationEntry.COLUMN_NAME_SPEED, speed); + values.put(SQLiteLocationContract.LocationEntry.COLUMN_NAME_BEARING, bearing); + values.put(SQLiteLocationContract.LocationEntry.COLUMN_NAME_ALTITUDE, altitude); + values.put(SQLiteLocationContract.LocationEntry.COLUMN_NAME_LATITUDE, latitude); + values.put(SQLiteLocationContract.LocationEntry.COLUMN_NAME_LONGITUDE, longitude); + values.put(SQLiteLocationContract.LocationEntry.COLUMN_NAME_RADIUS, radius); + values.put(SQLiteLocationContract.LocationEntry.COLUMN_NAME_HAS_ACCURACY, hasAccuracy); + values.put(SQLiteLocationContract.LocationEntry.COLUMN_NAME_HAS_SPEED, hasSpeed); + values.put(SQLiteLocationContract.LocationEntry.COLUMN_NAME_HAS_BEARING, hasBearing); + values.put(SQLiteLocationContract.LocationEntry.COLUMN_NAME_HAS_ALTITUDE, hasAltitude); + values.put(SQLiteLocationContract.LocationEntry.COLUMN_NAME_HAS_RADIUS, hasRadius); + values.put(SQLiteLocationContract.LocationEntry.COLUMN_NAME_PROVIDER, provider); + values.put(SQLiteLocationContract.LocationEntry.COLUMN_NAME_LOCATION_PROVIDER, locationProvider); + values.put(SQLiteLocationContract.LocationEntry.COLUMN_NAME_STATUS, status); + values.put(SQLiteLocationContract.LocationEntry.COLUMN_NAME_BATCH_START_MILLIS, batchStartMillis); + values.put(SQLiteLocationContract.LocationEntry.COLUMN_NAME_MOCK_FLAGS, mockFlags); return values; } diff --git a/src/main/java/com/gennadysx/bgloc/data/ConfigurationDAO.java b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/data/ConfigurationDAO.java similarity index 68% rename from src/main/java/com/gennadysx/bgloc/data/ConfigurationDAO.java rename to backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/data/ConfigurationDAO.java index b9e0ad4..87771e0 100644 --- a/src/main/java/com/gennadysx/bgloc/data/ConfigurationDAO.java +++ b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/data/ConfigurationDAO.java @@ -1,8 +1,8 @@ -package com.gennadysx.bgloc.data; +package com.gennadysx.geolocation.bgloc.data; import org.json.JSONException; -import com.gennadysx.bgloc.Config; +import com.gennadysx.geolocation.bgloc.Config; public interface ConfigurationDAO { boolean persistConfiguration(Config config) throws NullPointerException; diff --git a/src/main/java/com/gennadysx/bgloc/data/DAOFactory.java b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/data/DAOFactory.java similarity index 62% rename from src/main/java/com/gennadysx/bgloc/data/DAOFactory.java rename to backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/data/DAOFactory.java index 8378ad6..9e5f120 100644 --- a/src/main/java/com/gennadysx/bgloc/data/DAOFactory.java +++ b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/data/DAOFactory.java @@ -1,9 +1,9 @@ -package com.gennadysx.bgloc.data; +package com.gennadysx.geolocation.bgloc.data; import android.content.Context; -import com.gennadysx.bgloc.data.provider.ContentProviderLocationDAO; -import com.gennadysx.bgloc.data.sqlite.SQLiteConfigurationDAO; +import com.gennadysx.geolocation.bgloc.data.provider.ContentProviderLocationDAO; +import com.gennadysx.geolocation.bgloc.data.sqlite.SQLiteConfigurationDAO; public abstract class DAOFactory { public static LocationDAO createLocationDAO(Context context) { diff --git a/src/main/java/com/gennadysx/bgloc/data/HashMapLocationTemplate.java b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/data/HashMapLocationTemplate.java similarity index 95% rename from src/main/java/com/gennadysx/bgloc/data/HashMapLocationTemplate.java rename to backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/data/HashMapLocationTemplate.java index e894c0f..a95d0c9 100644 --- a/src/main/java/com/gennadysx/bgloc/data/HashMapLocationTemplate.java +++ b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/data/HashMapLocationTemplate.java @@ -1,6 +1,6 @@ -package com.gennadysx.bgloc.data; +package com.gennadysx.geolocation.bgloc.data; -import com.gennadysx.utils.CloneHelper; +import com.gennadysx.geolocation.utils.CloneHelper; import org.json.JSONException; import org.json.JSONObject; diff --git a/src/main/java/com/gennadysx/bgloc/data/LocationDAO.java b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/data/LocationDAO.java similarity index 94% rename from src/main/java/com/gennadysx/bgloc/data/LocationDAO.java rename to backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/data/LocationDAO.java index 3de5255..ff2cc99 100644 --- a/src/main/java/com/gennadysx/bgloc/data/LocationDAO.java +++ b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/data/LocationDAO.java @@ -1,4 +1,4 @@ -package com.gennadysx.bgloc.data; +package com.gennadysx.geolocation.bgloc.data; import java.util.Collection; diff --git a/src/main/java/com/gennadysx/bgloc/data/LocationTemplate.java b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/data/LocationTemplate.java similarity index 82% rename from src/main/java/com/gennadysx/bgloc/data/LocationTemplate.java rename to backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/data/LocationTemplate.java index 5a4c1d5..e1afe85 100644 --- a/src/main/java/com/gennadysx/bgloc/data/LocationTemplate.java +++ b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/data/LocationTemplate.java @@ -1,4 +1,4 @@ -package com.gennadysx.bgloc.data; +package com.gennadysx.geolocation.bgloc.data; import org.json.JSONException; diff --git a/src/main/java/com/gennadysx/bgloc/data/LocationTemplateFactory.java b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/data/LocationTemplateFactory.java similarity index 95% rename from src/main/java/com/gennadysx/bgloc/data/LocationTemplateFactory.java rename to backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/data/LocationTemplateFactory.java index c0600a1..6f9428d 100644 --- a/src/main/java/com/gennadysx/bgloc/data/LocationTemplateFactory.java +++ b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/data/LocationTemplateFactory.java @@ -1,6 +1,6 @@ -package com.gennadysx.bgloc.data; +package com.gennadysx.geolocation.bgloc.data; -import com.gennadysx.utils.Convert; +import com.gennadysx.geolocation.utils.Convert; import org.json.JSONArray; import org.json.JSONException; diff --git a/src/main/java/com/gennadysx/bgloc/data/LocationTransform.java b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/data/LocationTransform.java similarity index 93% rename from src/main/java/com/gennadysx/bgloc/data/LocationTransform.java rename to backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/data/LocationTransform.java index cc2f80a..7ce7474 100644 --- a/src/main/java/com/gennadysx/bgloc/data/LocationTransform.java +++ b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/data/LocationTransform.java @@ -1,4 +1,4 @@ -package com.gennadysx.bgloc.data; +package com.gennadysx.geolocation.bgloc.data; import android.content.Context; import android.support.annotation.NonNull; diff --git a/src/main/java/com/gennadysx/bgloc/data/provider/ContentProviderLocationDAO.java b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/data/provider/ContentProviderLocationDAO.java similarity index 94% rename from src/main/java/com/gennadysx/bgloc/data/provider/ContentProviderLocationDAO.java rename to backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/data/provider/ContentProviderLocationDAO.java index da18c7a..606b4dd 100644 --- a/src/main/java/com/gennadysx/bgloc/data/provider/ContentProviderLocationDAO.java +++ b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/data/provider/ContentProviderLocationDAO.java @@ -1,4 +1,4 @@ -package com.gennadysx.bgloc.data.provider; +package com.gennadysx.geolocation.bgloc.data.provider; import android.content.ContentProviderOperation; import android.content.ContentResolver; @@ -8,18 +8,18 @@ import android.net.Uri; import android.text.TextUtils; -import com.gennadysx.bgloc.ResourceResolver; -import com.gennadysx.bgloc.data.BackgroundLocation; -import com.gennadysx.bgloc.data.LocationDAO; -import com.gennadysx.bgloc.data.sqlite.SQLiteLocationContract; -import com.gennadysx.bgloc.data.sqlite.SQLiteLocationContract.LocationEntry; -import com.gennadysx.logging.LoggerManager; +import com.gennadysx.geolocation.bgloc.ResourceResolver; +import com.gennadysx.geolocation.bgloc.data.BackgroundLocation; +import com.gennadysx.geolocation.bgloc.data.LocationDAO; +import com.gennadysx.geolocation.bgloc.data.sqlite.SQLiteLocationContract; +import com.gennadysx.geolocation.bgloc.data.sqlite.SQLiteLocationContract.LocationEntry; +import com.gennadysx.geolocation.logging.LoggerManager; import java.util.ArrayList; import java.util.Collection; -import ru.andremoniy.sqlbuilder.SqlExpression; -import ru.andremoniy.sqlbuilder.SqlSelectStatement; +import com.gennadysx.geolocation.sqlbuilder.SqlExpression; +import com.gennadysx.geolocation.sqlbuilder.SqlSelectStatement; public class ContentProviderLocationDAO implements LocationDAO { private org.slf4j.Logger logger; @@ -131,7 +131,7 @@ public BackgroundLocation getFirstUnpostedLocation() { subsql.orderBy(LocationEntry.COLUMN_NAME_TIME); String substmt = subsql.statement(); - substmt = com.gennadysx.utils.TextUtils.removeLastChar(substmt, ";"); + substmt = com.gennadysx.geolocation.utils.TextUtils.removeLastChar(substmt, ";"); BackgroundLocation location = null; Cursor cursor = null; @@ -169,7 +169,7 @@ public BackgroundLocation getNextUnpostedLocation(long fromId) { subsql.orderBy(LocationEntry.COLUMN_NAME_TIME); String substmt = subsql.statement(); - substmt = com.gennadysx.utils.TextUtils.removeLastChar(substmt, ";"); + substmt = com.gennadysx.geolocation.utils.TextUtils.removeLastChar(substmt, ";"); BackgroundLocation location = null; Cursor cursor = null; diff --git a/src/main/java/com/gennadysx/bgloc/data/provider/LocationContentProvider.java b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/data/provider/LocationContentProvider.java similarity index 97% rename from src/main/java/com/gennadysx/bgloc/data/provider/LocationContentProvider.java rename to backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/data/provider/LocationContentProvider.java index fe4633d..e7bcd1f 100644 --- a/src/main/java/com/gennadysx/bgloc/data/provider/LocationContentProvider.java +++ b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/data/provider/LocationContentProvider.java @@ -1,4 +1,4 @@ -package com.gennadysx.bgloc.data.provider; +package com.gennadysx.geolocation.bgloc.data.provider; import android.content.ContentProvider; import android.content.ContentResolver; @@ -13,9 +13,9 @@ import android.net.Uri; import android.text.TextUtils; -import com.gennadysx.bgloc.ResourceResolver; -import com.gennadysx.bgloc.data.sqlite.SQLiteLocationContract.LocationEntry; -import com.gennadysx.bgloc.data.sqlite.SQLiteOpenHelper; +import com.gennadysx.geolocation.bgloc.ResourceResolver; +import com.gennadysx.geolocation.bgloc.data.sqlite.SQLiteLocationContract.LocationEntry; +import com.gennadysx.geolocation.bgloc.data.sqlite.SQLiteOpenHelper; /** * Content provider implementation based on diff --git a/src/main/java/com/gennadysx/bgloc/data/sqlite/SQLiteConfigurationContract.java b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/data/sqlite/SQLiteConfigurationContract.java similarity index 92% rename from src/main/java/com/gennadysx/bgloc/data/sqlite/SQLiteConfigurationContract.java rename to backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/data/sqlite/SQLiteConfigurationContract.java index a89c7e9..b62ed89 100644 --- a/src/main/java/com/gennadysx/bgloc/data/sqlite/SQLiteConfigurationContract.java +++ b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/data/sqlite/SQLiteConfigurationContract.java @@ -1,11 +1,11 @@ -package com.gennadysx.bgloc.data.sqlite; +package com.gennadysx.geolocation.bgloc.data.sqlite; import android.provider.BaseColumns; -import static com.gennadysx.bgloc.data.sqlite.SQLiteOpenHelper.COMMA_SEP; -import static com.gennadysx.bgloc.data.sqlite.SQLiteOpenHelper.INTEGER_TYPE; -import static com.gennadysx.bgloc.data.sqlite.SQLiteOpenHelper.REAL_TYPE; -import static com.gennadysx.bgloc.data.sqlite.SQLiteOpenHelper.TEXT_TYPE; +import static com.gennadysx.geolocation.bgloc.data.sqlite.SQLiteOpenHelper.COMMA_SEP; +import static com.gennadysx.geolocation.bgloc.data.sqlite.SQLiteOpenHelper.INTEGER_TYPE; +import static com.gennadysx.geolocation.bgloc.data.sqlite.SQLiteOpenHelper.REAL_TYPE; +import static com.gennadysx.geolocation.bgloc.data.sqlite.SQLiteOpenHelper.TEXT_TYPE; public final class SQLiteConfigurationContract { // To prevent someone from accidentally instantiating the contract class, diff --git a/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/data/sqlite/SQLiteConfigurationDAO.java b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/data/sqlite/SQLiteConfigurationDAO.java new file mode 100644 index 0000000..93cb1bd --- /dev/null +++ b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/data/sqlite/SQLiteConfigurationDAO.java @@ -0,0 +1,159 @@ +package com.gennadysx.geolocation.bgloc.data.sqlite; + +import android.content.ContentValues; +import android.content.Context; +import android.database.Cursor; +import android.database.sqlite.SQLiteDatabase; +import android.util.Log; + +import org.json.JSONObject; +import org.json.JSONException; + +import com.gennadysx.geolocation.bgloc.Config; +import com.gennadysx.geolocation.bgloc.data.ConfigurationDAO; +import com.gennadysx.geolocation.bgloc.data.LocationTemplateFactory; + +public class SQLiteConfigurationDAO implements ConfigurationDAO { + private static final String TAG = SQLiteConfigurationDAO.class.getName(); + + private SQLiteDatabase db; + + public SQLiteConfigurationDAO(Context context) { + SQLiteOpenHelper helper = SQLiteOpenHelper.getHelper(context); + this.db = helper.getWritableDatabase(); + } + + public SQLiteConfigurationDAO(SQLiteDatabase db) { + this.db = db; + } + + public Config retrieveConfiguration() throws JSONException { + Cursor cursor = null; + + String[] columns = { + SQLiteConfigurationContract.ConfigurationEntry._ID, + SQLiteConfigurationContract.ConfigurationEntry.COLUMN_NAME_RADIUS, + SQLiteConfigurationContract.ConfigurationEntry.COLUMN_NAME_DISTANCE_FILTER, + SQLiteConfigurationContract.ConfigurationEntry.COLUMN_NAME_DESIRED_ACCURACY, + SQLiteConfigurationContract.ConfigurationEntry.COLUMN_NAME_DEBUG, + SQLiteConfigurationContract.ConfigurationEntry.COLUMN_NAME_NOTIF_TITLE, + SQLiteConfigurationContract.ConfigurationEntry.COLUMN_NAME_NOTIF_TEXT, + SQLiteConfigurationContract.ConfigurationEntry.COLUMN_NAME_NOTIF_ICON_LARGE, + SQLiteConfigurationContract.ConfigurationEntry.COLUMN_NAME_NOTIF_ICON_SMALL, + SQLiteConfigurationContract.ConfigurationEntry.COLUMN_NAME_NOTIF_COLOR, + SQLiteConfigurationContract.ConfigurationEntry.COLUMN_NAME_STOP_TERMINATE, + SQLiteConfigurationContract.ConfigurationEntry.COLUMN_NAME_STOP_ON_STILL, + SQLiteConfigurationContract.ConfigurationEntry.COLUMN_NAME_START_BOOT, + SQLiteConfigurationContract.ConfigurationEntry.COLUMN_NAME_START_FOREGROUND, + SQLiteConfigurationContract.ConfigurationEntry.COLUMN_NAME_NOTIFICATIONS_ENABLED, + SQLiteConfigurationContract.ConfigurationEntry.COLUMN_NAME_LOCATION_PROVIDER, + SQLiteConfigurationContract.ConfigurationEntry.COLUMN_NAME_INTERVAL, + SQLiteConfigurationContract.ConfigurationEntry.COLUMN_NAME_FASTEST_INTERVAL, + SQLiteConfigurationContract.ConfigurationEntry.COLUMN_NAME_ACTIVITIES_INTERVAL, + SQLiteConfigurationContract.ConfigurationEntry.COLUMN_NAME_URL, + SQLiteConfigurationContract.ConfigurationEntry.COLUMN_NAME_SYNC_URL, + SQLiteConfigurationContract.ConfigurationEntry.COLUMN_NAME_SYNC_THRESHOLD, + SQLiteConfigurationContract.ConfigurationEntry.COLUMN_NAME_HEADERS, + SQLiteConfigurationContract.ConfigurationEntry.COLUMN_NAME_MAX_LOCATIONS, + SQLiteConfigurationContract.ConfigurationEntry.COLUMN_NAME_TEMPLATE + }; + + String whereClause = null; + String[] whereArgs = null; + String groupBy = null; + String having = null; + String orderBy = null; + + Config config = null; + try { + cursor = db.query( + SQLiteConfigurationContract.ConfigurationEntry.TABLE_NAME, // The table to query + columns, // The columns to return + whereClause, // The columns for the WHERE clause + whereArgs, // The values for the WHERE clause + groupBy, // don't group the rows + having, // don't filter by row groups + orderBy // The sort order + ); + if (cursor.moveToFirst()) { + config = hydrate(cursor); + } + } finally { + if (cursor != null) { + cursor.close(); + } + } + return config; + } + + public boolean persistConfiguration(Config config) throws NullPointerException { + long rowId = db.replace(SQLiteConfigurationContract.ConfigurationEntry.TABLE_NAME, SQLiteConfigurationContract.ConfigurationEntry.COLUMN_NAME_NULLABLE, getContentValues(config)); + Log.d(TAG, "Configuration persisted with rowId = " + rowId); + if (rowId > -1) { + return true; + } else { + return false; + } + } + + private Config hydrate(Cursor c) throws JSONException { + Config config = Config.getDefault(); + config.setStationaryRadius(c.getFloat(c.getColumnIndex(SQLiteConfigurationContract.ConfigurationEntry.COLUMN_NAME_RADIUS))); + config.setDistanceFilter(c.getInt(c.getColumnIndex(SQLiteConfigurationContract.ConfigurationEntry.COLUMN_NAME_DISTANCE_FILTER))); + config.setDesiredAccuracy(c.getInt(c.getColumnIndex(SQLiteConfigurationContract.ConfigurationEntry.COLUMN_NAME_DESIRED_ACCURACY))); + config.setDebugging( (c.getInt(c.getColumnIndex(SQLiteConfigurationContract.ConfigurationEntry.COLUMN_NAME_DEBUG)) == 1) ? true : false ); + config.setNotificationTitle(c.getString(c.getColumnIndex(SQLiteConfigurationContract.ConfigurationEntry.COLUMN_NAME_NOTIF_TITLE))); + config.setNotificationText(c.getString(c.getColumnIndex(SQLiteConfigurationContract.ConfigurationEntry.COLUMN_NAME_NOTIF_TEXT))); + config.setSmallNotificationIcon(c.getString(c.getColumnIndex(SQLiteConfigurationContract.ConfigurationEntry.COLUMN_NAME_NOTIF_ICON_SMALL))); + config.setLargeNotificationIcon(c.getString(c.getColumnIndex(SQLiteConfigurationContract.ConfigurationEntry.COLUMN_NAME_NOTIF_ICON_LARGE))); + config.setNotificationIconColor(c.getString(c.getColumnIndex(SQLiteConfigurationContract.ConfigurationEntry.COLUMN_NAME_NOTIF_COLOR))); + config.setStopOnTerminate( (c.getInt(c.getColumnIndex(SQLiteConfigurationContract.ConfigurationEntry.COLUMN_NAME_STOP_TERMINATE)) == 1) ? true : false ); + config.setStopOnStillActivity( (c.getInt(c.getColumnIndex(SQLiteConfigurationContract.ConfigurationEntry.COLUMN_NAME_STOP_ON_STILL)) == 1) ? true : false ); + config.setStartOnBoot( (c.getInt(c.getColumnIndex(SQLiteConfigurationContract.ConfigurationEntry.COLUMN_NAME_START_BOOT)) == 1) ? true : false ); + config.setStartForeground( (c.getInt(c.getColumnIndex(SQLiteConfigurationContract.ConfigurationEntry.COLUMN_NAME_START_FOREGROUND)) == 1) ? true : false ); + config.setNotificationsEnabled( (c.getInt(c.getColumnIndex(SQLiteConfigurationContract.ConfigurationEntry.COLUMN_NAME_NOTIFICATIONS_ENABLED)) == 1) ? true : false ); + config.setLocationProvider(c.getInt(c.getColumnIndex(SQLiteConfigurationContract.ConfigurationEntry.COLUMN_NAME_LOCATION_PROVIDER))); + config.setInterval(c.getInt(c.getColumnIndex(SQLiteConfigurationContract.ConfigurationEntry.COLUMN_NAME_INTERVAL))); + config.setFastestInterval(c.getInt(c.getColumnIndex(SQLiteConfigurationContract.ConfigurationEntry.COLUMN_NAME_FASTEST_INTERVAL))); + config.setActivitiesInterval(c.getInt(c.getColumnIndex(SQLiteConfigurationContract.ConfigurationEntry.COLUMN_NAME_ACTIVITIES_INTERVAL))); + config.setUrl(c.getString(c.getColumnIndex(SQLiteConfigurationContract.ConfigurationEntry.COLUMN_NAME_URL))); + config.setSyncUrl(c.getString(c.getColumnIndex(SQLiteConfigurationContract.ConfigurationEntry.COLUMN_NAME_SYNC_URL))); + config.setSyncThreshold(c.getInt(c.getColumnIndex(SQLiteConfigurationContract.ConfigurationEntry.COLUMN_NAME_SYNC_THRESHOLD))); + config.setHttpHeaders(new JSONObject(c.getString(c.getColumnIndex(SQLiteConfigurationContract.ConfigurationEntry.COLUMN_NAME_HEADERS)))); + config.setMaxLocations(c.getInt(c.getColumnIndex(SQLiteConfigurationContract.ConfigurationEntry.COLUMN_NAME_MAX_LOCATIONS))); + config.setTemplate(LocationTemplateFactory.fromJSONString(c.getString(c.getColumnIndex(SQLiteConfigurationContract.ConfigurationEntry.COLUMN_NAME_TEMPLATE)))); + + return config; + } + + private ContentValues getContentValues(Config config) throws NullPointerException { + ContentValues values = new ContentValues(); + values.put(SQLiteConfigurationContract.ConfigurationEntry._ID, 1); + values.put(SQLiteConfigurationContract.ConfigurationEntry.COLUMN_NAME_RADIUS, config.getStationaryRadius()); + values.put(SQLiteConfigurationContract.ConfigurationEntry.COLUMN_NAME_DISTANCE_FILTER, config.getDistanceFilter()); + values.put(SQLiteConfigurationContract.ConfigurationEntry.COLUMN_NAME_DESIRED_ACCURACY, config.getDesiredAccuracy()); + values.put(SQLiteConfigurationContract.ConfigurationEntry.COLUMN_NAME_DEBUG, (config.isDebugging() == true) ? 1 : 0); + values.put(SQLiteConfigurationContract.ConfigurationEntry.COLUMN_NAME_NOTIF_TITLE, config.getNotificationTitle()); + values.put(SQLiteConfigurationContract.ConfigurationEntry.COLUMN_NAME_NOTIF_TEXT, config.getNotificationText()); + values.put(SQLiteConfigurationContract.ConfigurationEntry.COLUMN_NAME_NOTIF_ICON_SMALL, config.getSmallNotificationIcon()); + values.put(SQLiteConfigurationContract.ConfigurationEntry.COLUMN_NAME_NOTIF_ICON_LARGE, config.getLargeNotificationIcon()); + values.put(SQLiteConfigurationContract.ConfigurationEntry.COLUMN_NAME_NOTIF_COLOR, config.getNotificationIconColor()); + values.put(SQLiteConfigurationContract.ConfigurationEntry.COLUMN_NAME_STOP_TERMINATE, (config.getStopOnTerminate() == true) ? 1 : 0); + values.put(SQLiteConfigurationContract.ConfigurationEntry.COLUMN_NAME_STOP_ON_STILL, (config.getStopOnStillActivity() == true) ? 1 : 0); + values.put(SQLiteConfigurationContract.ConfigurationEntry.COLUMN_NAME_START_BOOT, (config.getStartOnBoot() == true) ? 1 : 0); + values.put(SQLiteConfigurationContract.ConfigurationEntry.COLUMN_NAME_START_FOREGROUND, (config.getStartForeground() == true) ? 1 : 0); + values.put(SQLiteConfigurationContract.ConfigurationEntry.COLUMN_NAME_NOTIFICATIONS_ENABLED, (config.getNotificationsEnabled() == true) ? 1 : 0); + values.put(SQLiteConfigurationContract.ConfigurationEntry.COLUMN_NAME_LOCATION_PROVIDER, config.getLocationProvider()); + values.put(SQLiteConfigurationContract.ConfigurationEntry.COLUMN_NAME_INTERVAL, config.getInterval()); + values.put(SQLiteConfigurationContract.ConfigurationEntry.COLUMN_NAME_FASTEST_INTERVAL, config.getFastestInterval()); + values.put(SQLiteConfigurationContract.ConfigurationEntry.COLUMN_NAME_ACTIVITIES_INTERVAL, config.getActivitiesInterval()); + values.put(SQLiteConfigurationContract.ConfigurationEntry.COLUMN_NAME_URL, config.getUrl()); + values.put(SQLiteConfigurationContract.ConfigurationEntry.COLUMN_NAME_SYNC_URL, config.getSyncUrl()); + values.put(SQLiteConfigurationContract.ConfigurationEntry.COLUMN_NAME_SYNC_THRESHOLD, config.getSyncThreshold()); + values.put(SQLiteConfigurationContract.ConfigurationEntry.COLUMN_NAME_HEADERS, new JSONObject(config.getHttpHeaders()).toString()); + values.put(SQLiteConfigurationContract.ConfigurationEntry.COLUMN_NAME_MAX_LOCATIONS, config.getMaxLocations()); + values.put(SQLiteConfigurationContract.ConfigurationEntry.COLUMN_NAME_TEMPLATE, config.hasTemplate() ? config.getTemplate().toString() : null); + + return values; + } +} diff --git a/src/main/java/com/gennadysx/bgloc/data/sqlite/SQLiteLocationContract.java b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/data/sqlite/SQLiteLocationContract.java similarity index 92% rename from src/main/java/com/gennadysx/bgloc/data/sqlite/SQLiteLocationContract.java rename to backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/data/sqlite/SQLiteLocationContract.java index fe2948b..8d337c1 100644 --- a/src/main/java/com/gennadysx/bgloc/data/sqlite/SQLiteLocationContract.java +++ b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/data/sqlite/SQLiteLocationContract.java @@ -1,11 +1,11 @@ -package com.gennadysx.bgloc.data.sqlite; +package com.gennadysx.geolocation.bgloc.data.sqlite; import android.provider.BaseColumns; -import static com.gennadysx.bgloc.data.sqlite.SQLiteOpenHelper.COMMA_SEP; -import static com.gennadysx.bgloc.data.sqlite.SQLiteOpenHelper.INTEGER_TYPE; -import static com.gennadysx.bgloc.data.sqlite.SQLiteOpenHelper.REAL_TYPE; -import static com.gennadysx.bgloc.data.sqlite.SQLiteOpenHelper.TEXT_TYPE; +import static com.gennadysx.geolocation.bgloc.data.sqlite.SQLiteOpenHelper.COMMA_SEP; +import static com.gennadysx.geolocation.bgloc.data.sqlite.SQLiteOpenHelper.INTEGER_TYPE; +import static com.gennadysx.geolocation.bgloc.data.sqlite.SQLiteOpenHelper.REAL_TYPE; +import static com.gennadysx.geolocation.bgloc.data.sqlite.SQLiteOpenHelper.TEXT_TYPE; public final class SQLiteLocationContract { // To prevent someone from accidentally instantiating the contract class, diff --git a/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/data/sqlite/SQLiteLocationDAO.java b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/data/sqlite/SQLiteLocationDAO.java new file mode 100644 index 0000000..2431b2f --- /dev/null +++ b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/data/sqlite/SQLiteLocationDAO.java @@ -0,0 +1,486 @@ +package com.gennadysx.geolocation.bgloc.data.sqlite; + +import android.content.ContentValues; +import android.content.Context; +import android.database.Cursor; +import android.database.DatabaseUtils; +import android.database.sqlite.SQLiteDatabase; +import android.text.TextUtils; + +import com.gennadysx.geolocation.bgloc.data.BackgroundLocation; +import com.gennadysx.geolocation.bgloc.data.LocationDAO; + +import com.gennadysx.geolocation.sqlbuilder.SqlExpression; +import com.gennadysx.geolocation.sqlbuilder.SqlSelectStatement; + +import java.util.ArrayList; +import java.util.Collection; + +public class SQLiteLocationDAO implements LocationDAO { + private SQLiteDatabase db; + + public SQLiteLocationDAO(Context context) { + SQLiteOpenHelper helper = SQLiteOpenHelper.getHelper(context); + this.db = helper.getWritableDatabase(); + } + + public SQLiteLocationDAO(SQLiteDatabase db) { + this.db = db; + } + + /** + * Get all locations that match whereClause + * + * @param whereClause + * @param whereArgs + * @return collection of locations + */ + private Collection getLocations(String whereClause, String[] whereArgs) { + Collection locations = new ArrayList(); + + String[] columns = queryColumns(); + String groupBy = null; + String having = null; + String orderBy = SQLiteLocationContract.LocationEntry.COLUMN_NAME_TIME + " ASC"; + Cursor cursor = null; + + try { + cursor = db.query( + SQLiteLocationContract.LocationEntry.TABLE_NAME, // The table to query + columns, // The columns to return + whereClause, // The columns for the WHERE clause + whereArgs, // The values for the WHERE clause + groupBy, // don't group the rows + having, // don't filter by row groups + orderBy // The sort order + ); + while (cursor.moveToNext()) { + locations.add(hydrate(cursor)); + } + } finally { + if (cursor != null) { + cursor.close(); + } + } + + return locations; + } + public Collection getAllLocations() { + return getLocations(null, null); + } + + public Collection getValidLocations() { + String whereClause = SQLiteLocationContract.LocationEntry.COLUMN_NAME_STATUS + " <> ?"; + String[] whereArgs = { String.valueOf(BackgroundLocation.DELETED) }; + + return getLocations(whereClause, whereArgs); + } + + public BackgroundLocation getLocationById(long id) { + String[] columns = queryColumns(); + String whereClause = SQLiteLocationContract.LocationEntry._ID + " = ?"; + String[] whereArgs = { String.valueOf(id) }; + + BackgroundLocation location = null; + Cursor cursor = null; + try { + cursor = db.query( + SQLiteLocationContract.LocationEntry.TABLE_NAME, // The table to query + columns, // The columns to return + whereClause, // The columns for the WHERE clause + whereArgs, // The values for the WHERE clause + null, // don't group the rows + null, // don't filter by row groups + null // The sort order + ); + while (cursor.moveToNext()) { + location = hydrate(cursor); + if (!cursor.isLast()) { + throw new RuntimeException("Location " + id + " is not unique"); + } + } + } finally { + if (cursor != null) { + cursor.close(); + } + } + + return location; + } + + public BackgroundLocation getFirstUnpostedLocation() { + SqlSelectStatement subsql = new SqlSelectStatement(); + subsql.column(new SqlExpression(String.format("MIN(%s)", SQLiteLocationContract.LocationEntry._ID)), SQLiteLocationContract.LocationEntry._ID); + subsql.from(SQLiteLocationContract.LocationEntry.TABLE_NAME); + subsql.where(SQLiteLocationContract.LocationEntry.COLUMN_NAME_STATUS, SqlExpression.SqlOperatorEqualTo, BackgroundLocation.POST_PENDING); + subsql.orderBy(SQLiteLocationContract.LocationEntry.COLUMN_NAME_TIME); + + SqlSelectStatement sql = new SqlSelectStatement(); + sql.columns(queryColumns()); + sql.from(SQLiteLocationContract.LocationEntry.TABLE_NAME); + sql.where(SQLiteLocationContract.LocationEntry._ID, SqlExpression.SqlOperatorEqualTo, subsql); + + BackgroundLocation location = null; + Cursor cursor = null; + try { + cursor = db.rawQuery(sql.statement(), new String[]{}); + while (cursor.moveToNext()) { + location = hydrate(cursor); + if (!cursor.isLast()) { + throw new RuntimeException("Expected single location"); + } + } + } finally { + if (cursor != null) { + cursor.close(); + } + } + + return location; + } + + public BackgroundLocation getNextUnpostedLocation(long fromId) { + SqlSelectStatement subsql = new SqlSelectStatement(); + subsql.column(new SqlExpression(String.format("MIN(%s)", SQLiteLocationContract.LocationEntry._ID)), SQLiteLocationContract.LocationEntry._ID); + subsql.from(SQLiteLocationContract.LocationEntry.TABLE_NAME); + subsql.where(SQLiteLocationContract.LocationEntry.COLUMN_NAME_STATUS, SqlExpression.SqlOperatorEqualTo, BackgroundLocation.POST_PENDING); + subsql.where(SQLiteLocationContract.LocationEntry._ID, SqlExpression.SqlOperatorNotEqualTo, fromId); + subsql.orderBy(SQLiteLocationContract.LocationEntry.COLUMN_NAME_TIME); + + SqlSelectStatement sql = new SqlSelectStatement(); + sql.columns(queryColumns()); + sql.from(SQLiteLocationContract.LocationEntry.TABLE_NAME); + sql.where(SQLiteLocationContract.LocationEntry._ID, SqlExpression.SqlOperatorEqualTo, subsql); + + BackgroundLocation location = null; + Cursor cursor = null; + try { + cursor = db.rawQuery(sql.statement(), new String[]{}); + while (cursor.moveToNext()) { + location = hydrate(cursor); + if (!cursor.isLast()) { + throw new RuntimeException("Expected single location"); + } + } + } finally { + if (cursor != null) { + cursor.close(); + } + } + + return location; + } + + public long getUnpostedLocationsCount() { + String whereClause = SQLiteLocationContract.LocationEntry.COLUMN_NAME_STATUS + " = ?"; + String[] whereArgs = { String.valueOf(BackgroundLocation.POST_PENDING) }; + + return DatabaseUtils.queryNumEntries(db, SQLiteLocationContract.LocationEntry.TABLE_NAME, whereClause, whereArgs); + } + + public long getLocationsForSyncCount(long millisSinceLastBatch) { + String whereClause = TextUtils.join("", new String[]{ + SQLiteLocationContract.LocationEntry.COLUMN_NAME_STATUS + " = ? AND ( ", + SQLiteLocationContract.LocationEntry.COLUMN_NAME_BATCH_START_MILLIS + " IS NULL OR ", + SQLiteLocationContract.LocationEntry.COLUMN_NAME_BATCH_START_MILLIS + " < ? )", + }); + String[] whereArgs = { + String.valueOf(BackgroundLocation.SYNC_PENDING), + String.valueOf(millisSinceLastBatch) + }; + + return DatabaseUtils.queryNumEntries(db, SQLiteLocationContract.LocationEntry.TABLE_NAME, whereClause, whereArgs); + } + + /** + * Persist location into database + * + * @param location + * @return rowId or -1 when error occured + */ + public long persistLocation(BackgroundLocation location) { + ContentValues values = getContentValues(location); + long rowId = db.insertOrThrow(SQLiteLocationContract.LocationEntry.TABLE_NAME, SQLiteLocationContract.LocationEntry.COLUMN_NAME_NULLABLE, values); + + return rowId; + } + + /** + * Persist location into database with maximum row limit + * + * Method will ensure that there will be no more records than maxRows. + * Instead old records will be replaced with newer ones. + * If maxRows will change in time, method will delete excess records and vacuum table. + * + * @param location + * @param maxRows + * @return rowId or -1 when error occured + */ + public long persistLocation(BackgroundLocation location, int maxRows) { + if (maxRows == 0) { + return -1; + } + + String sql = null; + Boolean shouldVacuum = false; + + long rowCount = DatabaseUtils.queryNumEntries(db, SQLiteLocationContract.LocationEntry.TABLE_NAME); + + if (rowCount < maxRows) { + ContentValues values = getContentValues(location); + return db.insertOrThrow(SQLiteLocationContract.LocationEntry.TABLE_NAME, SQLiteLocationContract.LocationEntry.COLUMN_NAME_NULLABLE, values); + } + + db.beginTransactionNonExclusive(); + + if (rowCount > maxRows) { + sql = new StringBuilder("DELETE FROM ") + .append(SQLiteLocationContract.LocationEntry.TABLE_NAME) + .append(" WHERE ").append(SQLiteLocationContract.LocationEntry._ID) + .append(" IN (SELECT ").append(SQLiteLocationContract.LocationEntry._ID) + .append(" FROM ").append(SQLiteLocationContract.LocationEntry.TABLE_NAME) + .append(" ORDER BY ").append(SQLiteLocationContract.LocationEntry.COLUMN_NAME_TIME) + .append(" LIMIT ?)") + .toString(); + db.execSQL(sql, new Object[] {(rowCount - maxRows)}); + shouldVacuum = true; + } + + // get oldest location id to be overwritten + Cursor cursor = null; + long locationId; + try { + cursor = db.query( + SQLiteLocationContract.LocationEntry.TABLE_NAME, + new String[] { "min(" + SQLiteLocationContract.LocationEntry._ID + ")" }, + TextUtils.join("", new String[]{ + SQLiteLocationContract.LocationEntry.COLUMN_NAME_TIME, + "= (SELECT min(", + SQLiteLocationContract.LocationEntry.COLUMN_NAME_TIME, + ") FROM ", + SQLiteLocationContract.LocationEntry.TABLE_NAME, + ")" + }), + null, null, null, null); + cursor.moveToFirst(); + locationId = cursor.getLong(0); + } finally { + if (cursor != null) { + cursor.close(); + } + } + + sql = new StringBuilder("UPDATE ") + .append(SQLiteLocationContract.LocationEntry.TABLE_NAME).append(" SET ") + .append(SQLiteLocationContract.LocationEntry.COLUMN_NAME_PROVIDER).append("= ?,") + .append(SQLiteLocationContract.LocationEntry.COLUMN_NAME_TIME).append("= ?,") + .append(SQLiteLocationContract.LocationEntry.COLUMN_NAME_ACCURACY).append("= ?,") + .append(SQLiteLocationContract.LocationEntry.COLUMN_NAME_SPEED).append("= ?,") + .append(SQLiteLocationContract.LocationEntry.COLUMN_NAME_BEARING).append("= ?,") + .append(SQLiteLocationContract.LocationEntry.COLUMN_NAME_ALTITUDE).append("= ?,") + .append(SQLiteLocationContract.LocationEntry.COLUMN_NAME_RADIUS).append("= ?,") + .append(SQLiteLocationContract.LocationEntry.COLUMN_NAME_LATITUDE).append("= ?,") + .append(SQLiteLocationContract.LocationEntry.COLUMN_NAME_LONGITUDE).append("= ?,") + .append(SQLiteLocationContract.LocationEntry.COLUMN_NAME_HAS_ACCURACY).append("= ?,") + .append(SQLiteLocationContract.LocationEntry.COLUMN_NAME_HAS_SPEED).append("= ?,") + .append(SQLiteLocationContract.LocationEntry.COLUMN_NAME_HAS_BEARING).append("= ?,") + .append(SQLiteLocationContract.LocationEntry.COLUMN_NAME_HAS_ALTITUDE).append("= ?,") + .append(SQLiteLocationContract.LocationEntry.COLUMN_NAME_HAS_RADIUS).append("= ?,") + .append(SQLiteLocationContract.LocationEntry.COLUMN_NAME_LOCATION_PROVIDER).append("= ?,") + .append(SQLiteLocationContract.LocationEntry.COLUMN_NAME_BATCH_START_MILLIS).append("= ?,") + .append(SQLiteLocationContract.LocationEntry.COLUMN_NAME_STATUS).append("= ?,") + .append(SQLiteLocationContract.LocationEntry.COLUMN_NAME_MOCK_FLAGS).append("= ?") + .append(" WHERE ").append(SQLiteLocationContract.LocationEntry._ID) + .append("= ?") + .toString(); + db.execSQL(sql, new Object[] { + location.getProvider(), + location.getTime(), + location.getAccuracy(), + location.getSpeed(), + location.getBearing(), + location.getAltitude(), + location.getRadius(), + location.getLatitude(), + location.getLongitude(), + location.hasAccuracy() ? 1 : 0, + location.hasSpeed() ? 1 : 0, + location.hasBearing() ? 1 : 0, + location.hasAltitude() ? 1 : 0, + location.hasRadius() ? 1 : 0, + location.getLocationProvider(), + location.getBatchStartMillis(), + location.getStatus(), + location.getMockFlags(), + locationId + }); + + db.setTransactionSuccessful(); + db.endTransaction(); + + if (shouldVacuum) { db.execSQL("VACUUM"); } + + return locationId; + } + + /** + * Delete location by given locationId + * + * Note: location is not actually deleted only flagged as non valid + * @param locationId + */ + public void deleteLocationById(long locationId) { + if (locationId < 0) { + return; + } + + ContentValues values = new ContentValues(); + values.put(SQLiteLocationContract.LocationEntry.COLUMN_NAME_STATUS, BackgroundLocation.DELETED); + + String whereClause = SQLiteLocationContract.LocationEntry._ID + " = ?"; + String[] whereArgs = { String.valueOf(locationId) }; + + db.update(SQLiteLocationContract.LocationEntry.TABLE_NAME, values, whereClause, whereArgs); + } + + public BackgroundLocation deleteFirstUnpostedLocation() { + BackgroundLocation location = getFirstUnpostedLocation(); + deleteLocationById(location.getLocationId()); + + return location; + } + + public long persistLocationForSync(BackgroundLocation location, int maxRows) { + Long locationId = location.getLocationId(); + + if (locationId == null) { + location.setStatus(BackgroundLocation.SYNC_PENDING); + return persistLocation(location, maxRows); + } else { + ContentValues values = new ContentValues(); + values.put(SQLiteLocationContract.LocationEntry.COLUMN_NAME_STATUS, BackgroundLocation.SYNC_PENDING); + + String whereClause = SQLiteLocationContract.LocationEntry._ID + " = ?"; + String[] whereArgs = { String.valueOf(locationId) }; + + db.update(SQLiteLocationContract.LocationEntry.TABLE_NAME, values, whereClause, whereArgs); + return locationId; + } + } + + public void updateLocationForSync(long locationId) { + ContentValues values = new ContentValues(); + values.put(SQLiteLocationContract.LocationEntry.COLUMN_NAME_STATUS, BackgroundLocation.SYNC_PENDING); + + String whereClause = SQLiteLocationContract.LocationEntry._ID + " = ?"; + String[] whereArgs = { String.valueOf(locationId) }; + + db.update(SQLiteLocationContract.LocationEntry.TABLE_NAME, values, whereClause, whereArgs); + } + + /** + * Delete all locations + * + * Note: location are not actually deleted only flagged as non valid + */ + public int deleteAllLocations() { + ContentValues values = new ContentValues(); + values.put(SQLiteLocationContract.LocationEntry.COLUMN_NAME_STATUS, BackgroundLocation.DELETED); + + return db.update(SQLiteLocationContract.LocationEntry.TABLE_NAME, values, null, null); + } + + /** + * Delete all locations that are in post location queue + * + * Note: Instead of deleting, location status is changed so they can be still synced + */ + public int deleteUnpostedLocations() { + ContentValues values = new ContentValues(); + values.put(SQLiteLocationContract.LocationEntry.COLUMN_NAME_STATUS, BackgroundLocation.SYNC_PENDING); + + String whereClause = SQLiteLocationContract.LocationEntry.COLUMN_NAME_STATUS + " = ?"; + String[] whereArgs = { String.valueOf(BackgroundLocation.POST_PENDING) }; + + return db.update(SQLiteLocationContract.LocationEntry.TABLE_NAME, values, whereClause, whereArgs); + } + + private BackgroundLocation hydrate(Cursor c) { + BackgroundLocation l = new BackgroundLocation(c.getString(c.getColumnIndex(SQLiteLocationContract.LocationEntry.COLUMN_NAME_PROVIDER))); + l.setTime(c.getLong(c.getColumnIndex(SQLiteLocationContract.LocationEntry.COLUMN_NAME_TIME))); + if (c.getInt(c.getColumnIndex(SQLiteLocationContract.LocationEntry.COLUMN_NAME_HAS_ACCURACY)) == 1) { + l.setAccuracy(c.getFloat(c.getColumnIndex(SQLiteLocationContract.LocationEntry.COLUMN_NAME_ACCURACY))); + } + if (c.getInt(c.getColumnIndex(SQLiteLocationContract.LocationEntry.COLUMN_NAME_HAS_SPEED)) == 1) { + l.setSpeed(c.getFloat(c.getColumnIndex(SQLiteLocationContract.LocationEntry.COLUMN_NAME_SPEED))); + } + if (c.getInt(c.getColumnIndex(SQLiteLocationContract.LocationEntry.COLUMN_NAME_HAS_BEARING)) == 1) { + l.setBearing(c.getFloat(c.getColumnIndex(SQLiteLocationContract.LocationEntry.COLUMN_NAME_BEARING))); + } + if (c.getInt(c.getColumnIndex(SQLiteLocationContract.LocationEntry.COLUMN_NAME_HAS_ALTITUDE)) == 1) { + l.setAltitude(c.getDouble(c.getColumnIndex(SQLiteLocationContract.LocationEntry.COLUMN_NAME_ALTITUDE))); + } + if (c.getInt(c.getColumnIndex(SQLiteLocationContract.LocationEntry.COLUMN_NAME_HAS_RADIUS)) == 1) { + l.setRadius(c.getFloat(c.getColumnIndex(SQLiteLocationContract.LocationEntry.COLUMN_NAME_RADIUS))); + } + l.setLatitude(c.getDouble(c.getColumnIndex(SQLiteLocationContract.LocationEntry.COLUMN_NAME_LATITUDE))); + l.setLongitude(c.getDouble(c.getColumnIndex(SQLiteLocationContract.LocationEntry.COLUMN_NAME_LONGITUDE))); + l.setLocationProvider(c.getInt(c.getColumnIndex(SQLiteLocationContract.LocationEntry.COLUMN_NAME_LOCATION_PROVIDER))); + l.setBatchStartMillis(c.getLong(c.getColumnIndex(SQLiteLocationContract.LocationEntry.COLUMN_NAME_BATCH_START_MILLIS))); + l.setStatus(c.getInt(c.getColumnIndex(SQLiteLocationContract.LocationEntry.COLUMN_NAME_STATUS))); + l.setLocationId(c.getLong(c.getColumnIndex(SQLiteLocationContract.LocationEntry._ID))); + l.setMockFlags(c.getInt((c.getColumnIndex(SQLiteLocationContract.LocationEntry.COLUMN_NAME_MOCK_FLAGS)))); + + return l; + } + + private ContentValues getContentValues(BackgroundLocation l) { + ContentValues values = new ContentValues(); + values.put(SQLiteLocationContract.LocationEntry.COLUMN_NAME_PROVIDER, l.getProvider()); + values.put(SQLiteLocationContract.LocationEntry.COLUMN_NAME_TIME, l.getTime()); + values.put(SQLiteLocationContract.LocationEntry.COLUMN_NAME_ACCURACY, l.getAccuracy()); + values.put(SQLiteLocationContract.LocationEntry.COLUMN_NAME_SPEED, l.getSpeed()); + values.put(SQLiteLocationContract.LocationEntry.COLUMN_NAME_BEARING, l.getBearing()); + values.put(SQLiteLocationContract.LocationEntry.COLUMN_NAME_ALTITUDE, l.getAltitude()); + values.put(SQLiteLocationContract.LocationEntry.COLUMN_NAME_RADIUS, l.getRadius()); + values.put(SQLiteLocationContract.LocationEntry.COLUMN_NAME_LATITUDE, l.getLatitude()); + values.put(SQLiteLocationContract.LocationEntry.COLUMN_NAME_LONGITUDE, l.getLongitude()); + values.put(SQLiteLocationContract.LocationEntry.COLUMN_NAME_HAS_ACCURACY, l.hasAccuracy() ? 1 : 0); + values.put(SQLiteLocationContract.LocationEntry.COLUMN_NAME_HAS_SPEED, l.hasSpeed() ? 1 : 0); + values.put(SQLiteLocationContract.LocationEntry.COLUMN_NAME_HAS_BEARING, l.hasBearing() ? 1 : 0); + values.put(SQLiteLocationContract.LocationEntry.COLUMN_NAME_HAS_ALTITUDE, l.hasAltitude() ? 1 : 0); + values.put(SQLiteLocationContract.LocationEntry.COLUMN_NAME_HAS_RADIUS, l.hasRadius() ? 1 : 0); + values.put(SQLiteLocationContract.LocationEntry.COLUMN_NAME_LOCATION_PROVIDER, l.getLocationProvider()); + values.put(SQLiteLocationContract.LocationEntry.COLUMN_NAME_STATUS, l.getStatus()); + values.put(SQLiteLocationContract.LocationEntry.COLUMN_NAME_BATCH_START_MILLIS, l.getBatchStartMillis()); + values.put(SQLiteLocationContract.LocationEntry.COLUMN_NAME_MOCK_FLAGS, l.getMockFlags()); + + return values; + } + + private String[] queryColumns() { + String[] columns = { + SQLiteLocationContract.LocationEntry._ID, + SQLiteLocationContract.LocationEntry.COLUMN_NAME_PROVIDER, + SQLiteLocationContract.LocationEntry.COLUMN_NAME_TIME, + SQLiteLocationContract.LocationEntry.COLUMN_NAME_ACCURACY, + SQLiteLocationContract.LocationEntry.COLUMN_NAME_SPEED, + SQLiteLocationContract.LocationEntry.COLUMN_NAME_BEARING, + SQLiteLocationContract.LocationEntry.COLUMN_NAME_ALTITUDE, + SQLiteLocationContract.LocationEntry.COLUMN_NAME_RADIUS, + SQLiteLocationContract.LocationEntry.COLUMN_NAME_LATITUDE, + SQLiteLocationContract.LocationEntry.COLUMN_NAME_LONGITUDE, + SQLiteLocationContract.LocationEntry.COLUMN_NAME_HAS_ACCURACY, + SQLiteLocationContract.LocationEntry.COLUMN_NAME_HAS_SPEED, + SQLiteLocationContract.LocationEntry.COLUMN_NAME_HAS_BEARING, + SQLiteLocationContract.LocationEntry.COLUMN_NAME_HAS_ALTITUDE, + SQLiteLocationContract.LocationEntry.COLUMN_NAME_HAS_RADIUS, + SQLiteLocationContract.LocationEntry.COLUMN_NAME_LOCATION_PROVIDER, + SQLiteLocationContract.LocationEntry.COLUMN_NAME_STATUS, + SQLiteLocationContract.LocationEntry.COLUMN_NAME_BATCH_START_MILLIS, + SQLiteLocationContract.LocationEntry.COLUMN_NAME_MOCK_FLAGS + }; + + return columns; + } +} diff --git a/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/data/sqlite/SQLiteOpenHelper.java b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/data/sqlite/SQLiteOpenHelper.java new file mode 100644 index 0000000..83dc589 --- /dev/null +++ b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/data/sqlite/SQLiteOpenHelper.java @@ -0,0 +1,133 @@ +package com.gennadysx.geolocation.bgloc.data.sqlite; + + +import android.content.Context; +import android.database.SQLException; +import android.database.sqlite.SQLiteDatabase; +import android.util.Log; + +import java.util.ArrayList; + +public class SQLiteOpenHelper extends android.database.sqlite.SQLiteOpenHelper { + private static final String TAG = SQLiteOpenHelper.class.getName(); + public static final String SQLITE_DATABASE_NAME = "cordova_bg_geolocation.db"; + public static final int DATABASE_VERSION = 15; + + public static final String TEXT_TYPE = " TEXT"; + public static final String INTEGER_TYPE = " INTEGER"; + public static final String REAL_TYPE = " REAL"; + public static final String COMMA_SEP = ","; + + private static SQLiteOpenHelper instance; + + /** + * Get SqliteOpenHelper instance (singleton) + * + * Use the application context, which will ensure that you + * don't accidentally leak an Activity's context. + * See this article for more information: http://bit.ly/6LRzfx + * + * @param context + * @return + */ + public static synchronized SQLiteOpenHelper getHelper(Context context) { + if (instance == null) + instance = new SQLiteOpenHelper(context.getApplicationContext()); + + return instance; + } + + /** + * Constructor + * + * NOTE: Intended to use only for testing purposes. + * Use factory method getHelper instead. + * + * @param context + */ + public SQLiteOpenHelper(Context context) { + super(context, SQLITE_DATABASE_NAME, null, DATABASE_VERSION); + } + + @Override + public void onCreate(SQLiteDatabase db) { + Log.d(TAG, "Creating db: " + this.getDatabaseName()); + execAndLogSql(db, SQLiteLocationContract.LocationEntry.SQL_CREATE_LOCATION_TABLE); + execAndLogSql(db, SQLiteConfigurationContract.ConfigurationEntry.SQL_CREATE_CONFIG_TABLE); + execAndLogSql(db, SQLiteLocationContract.LocationEntry.SQL_CREATE_LOCATION_TABLE_TIME_IDX); + execAndLogSql(db, SQLiteLocationContract.LocationEntry.SQL_CREATE_LOCATION_TABLE_BATCH_ID_IDX); + } + + @Override + public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { + Log.d(this.getClass().getName(), "Upgrading database oldVersion: " + oldVersion + " newVersion: " + newVersion); + + ArrayList alterSql = new ArrayList(); + switch (oldVersion) { + case 10: + alterSql.add("ALTER TABLE " + SQLiteLocationContract.LocationEntry.TABLE_NAME + + " ADD COLUMN " + SQLiteLocationContract.LocationEntry.COLUMN_NAME_STATUS + INTEGER_TYPE); + alterSql.add(SQLiteLocationContract.LocationEntry.SQL_CREATE_LOCATION_TABLE_TIME_IDX); + alterSql.add(SQLiteConfigurationContract.ConfigurationEntry.SQL_DROP_CONFIG_TABLE); + alterSql.add(SQLiteConfigurationContract.ConfigurationEntry.SQL_CREATE_CONFIG_TABLE); + case 11: + alterSql.add("ALTER TABLE " + SQLiteLocationContract.LocationEntry.TABLE_NAME + + " ADD COLUMN " + SQLiteLocationContract.LocationEntry.COLUMN_NAME_RADIUS + REAL_TYPE); + alterSql.add("ALTER TABLE " + SQLiteLocationContract.LocationEntry.TABLE_NAME + + " ADD COLUMN " + SQLiteLocationContract.LocationEntry.COLUMN_NAME_HAS_ACCURACY + INTEGER_TYPE); + alterSql.add("ALTER TABLE " + SQLiteLocationContract.LocationEntry.TABLE_NAME + + " ADD COLUMN " + SQLiteLocationContract.LocationEntry.COLUMN_NAME_HAS_SPEED + INTEGER_TYPE); + alterSql.add("ALTER TABLE " + SQLiteLocationContract.LocationEntry.TABLE_NAME + + " ADD COLUMN " + SQLiteLocationContract.LocationEntry.COLUMN_NAME_HAS_BEARING + INTEGER_TYPE); + alterSql.add("ALTER TABLE " + SQLiteLocationContract.LocationEntry.TABLE_NAME + + " ADD COLUMN " + SQLiteLocationContract.LocationEntry.COLUMN_NAME_HAS_ALTITUDE + INTEGER_TYPE); + alterSql.add("ALTER TABLE " + SQLiteLocationContract.LocationEntry.TABLE_NAME + + " ADD COLUMN " + SQLiteLocationContract.LocationEntry.COLUMN_NAME_HAS_RADIUS + INTEGER_TYPE); + alterSql.add("ALTER TABLE " + SQLiteLocationContract.LocationEntry.TABLE_NAME + + " ADD COLUMN " + SQLiteLocationContract.LocationEntry.COLUMN_NAME_BATCH_START_MILLIS + INTEGER_TYPE); + alterSql.add(SQLiteLocationContract.LocationEntry.SQL_CREATE_LOCATION_TABLE_BATCH_ID_IDX); + alterSql.add("UPDATE " + SQLiteLocationContract.LocationEntry.TABLE_NAME + + " SET " + SQLiteLocationContract.LocationEntry.COLUMN_NAME_HAS_ACCURACY + "= 1," + + SQLiteLocationContract.LocationEntry.COLUMN_NAME_HAS_SPEED + "= 1," + + SQLiteLocationContract.LocationEntry.COLUMN_NAME_HAS_BEARING + "= 1," + + SQLiteLocationContract.LocationEntry.COLUMN_NAME_HAS_ALTITUDE + "= 1," + + SQLiteLocationContract.LocationEntry.COLUMN_NAME_HAS_RADIUS + "= 1" + ); + case 12: + alterSql.add("ALTER TABLE " + SQLiteConfigurationContract.ConfigurationEntry.TABLE_NAME + + " ADD COLUMN " + SQLiteConfigurationContract.ConfigurationEntry.COLUMN_NAME_TEMPLATE + TEXT_TYPE); + case 13: + alterSql.add("ALTER TABLE " + SQLiteLocationContract.LocationEntry.TABLE_NAME + + " ADD COLUMN " + SQLiteLocationContract.LocationEntry.COLUMN_NAME_MOCK_FLAGS + INTEGER_TYPE); + case 14: + alterSql.add("ALTER TABLE " + SQLiteConfigurationContract.ConfigurationEntry.TABLE_NAME + + " ADD COLUMN " + SQLiteConfigurationContract.ConfigurationEntry.COLUMN_NAME_NOTIFICATIONS_ENABLED + INTEGER_TYPE); + + break; // DO NOT FORGET TO MOVE DOWN BREAK ON DB UPGRADE!!! + default: + onDowngrade(db, 0, 0); + return; + } + + for (String sql : alterSql) { + execAndLogSql(db, sql); + } + } + + @Override + public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion) { + // we don't support db downgrade yet, instead we drop table and start over + execAndLogSql(db, SQLiteLocationContract.LocationEntry.SQL_DROP_LOCATION_TABLE); + execAndLogSql(db, SQLiteConfigurationContract.ConfigurationEntry.SQL_DROP_CONFIG_TABLE); + onCreate(db); + } + + public void execAndLogSql(SQLiteDatabase db, String sql) { + Log.d(TAG, sql); + try { + db.execSQL(sql); + } catch (SQLException e) { + Log.e(TAG, "Error executing sql: " + e.getMessage()); + } + } +} diff --git a/src/main/java/com/gennadysx/bgloc/headless/AbstractTaskRunner.java b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/headless/AbstractTaskRunner.java similarity index 85% rename from src/main/java/com/gennadysx/bgloc/headless/AbstractTaskRunner.java rename to backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/headless/AbstractTaskRunner.java index 7d2341f..2209586 100644 --- a/src/main/java/com/gennadysx/bgloc/headless/AbstractTaskRunner.java +++ b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/headless/AbstractTaskRunner.java @@ -1,4 +1,4 @@ -package com.gennadysx.bgloc.headless; +package com.gennadysx.geolocation.bgloc.headless; import android.content.Context; diff --git a/src/main/java/com/gennadysx/bgloc/headless/ActivityTask.java b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/headless/ActivityTask.java similarity index 90% rename from src/main/java/com/gennadysx/bgloc/headless/ActivityTask.java rename to backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/headless/ActivityTask.java index 822c99c..c5baa2f 100644 --- a/src/main/java/com/gennadysx/bgloc/headless/ActivityTask.java +++ b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/headless/ActivityTask.java @@ -1,8 +1,8 @@ -package com.gennadysx.bgloc.headless; +package com.gennadysx.geolocation.bgloc.headless; import android.os.Bundle; -import com.gennadysx.bgloc.data.BackgroundActivity; +import com.gennadysx.geolocation.bgloc.data.BackgroundActivity; import org.json.JSONException; diff --git a/src/main/java/com/gennadysx/bgloc/headless/JsCallback.java b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/headless/JsCallback.java similarity index 78% rename from src/main/java/com/gennadysx/bgloc/headless/JsCallback.java rename to backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/headless/JsCallback.java index 8693f00..6c89a75 100644 --- a/src/main/java/com/gennadysx/bgloc/headless/JsCallback.java +++ b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/headless/JsCallback.java @@ -1,4 +1,4 @@ -package com.gennadysx.bgloc.headless; +package com.gennadysx.geolocation.bgloc.headless; /** * Interface for passing code that will be executed after the JS has finished diff --git a/src/main/java/com/gennadysx/bgloc/headless/LocationTask.java b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/headless/LocationTask.java similarity index 94% rename from src/main/java/com/gennadysx/bgloc/headless/LocationTask.java rename to backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/headless/LocationTask.java index 18c3406..c1ff0c3 100644 --- a/src/main/java/com/gennadysx/bgloc/headless/LocationTask.java +++ b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/headless/LocationTask.java @@ -1,8 +1,8 @@ -package com.gennadysx.bgloc.headless; +package com.gennadysx.geolocation.bgloc.headless; import android.os.Bundle; -import com.gennadysx.bgloc.data.BackgroundLocation; +import com.gennadysx.geolocation.bgloc.data.BackgroundLocation; import org.json.JSONException; diff --git a/src/main/java/com/gennadysx/bgloc/headless/StationaryTask.java b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/headless/StationaryTask.java similarity index 76% rename from src/main/java/com/gennadysx/bgloc/headless/StationaryTask.java rename to backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/headless/StationaryTask.java index 28d8684..cf04a54 100644 --- a/src/main/java/com/gennadysx/bgloc/headless/StationaryTask.java +++ b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/headless/StationaryTask.java @@ -1,8 +1,8 @@ -package com.gennadysx.bgloc.headless; +package com.gennadysx.geolocation.bgloc.headless; import android.os.Bundle; -import com.gennadysx.bgloc.data.BackgroundLocation; +import com.gennadysx.geolocation.bgloc.data.BackgroundLocation; public abstract class StationaryTask extends LocationTask { public StationaryTask(BackgroundLocation location) { diff --git a/src/main/java/com/gennadysx/bgloc/headless/Task.java b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/headless/Task.java similarity index 76% rename from src/main/java/com/gennadysx/bgloc/headless/Task.java rename to backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/headless/Task.java index 9dc021c..e08cef9 100644 --- a/src/main/java/com/gennadysx/bgloc/headless/Task.java +++ b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/headless/Task.java @@ -1,4 +1,4 @@ -package com.gennadysx.bgloc.headless; +package com.gennadysx.geolocation.bgloc.headless; import android.os.Bundle; diff --git a/src/main/java/com/gennadysx/bgloc/headless/TaskRunner.java b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/headless/TaskRunner.java similarity index 55% rename from src/main/java/com/gennadysx/bgloc/headless/TaskRunner.java rename to backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/headless/TaskRunner.java index f5ce4e6..4c13199 100644 --- a/src/main/java/com/gennadysx/bgloc/headless/TaskRunner.java +++ b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/headless/TaskRunner.java @@ -1,4 +1,4 @@ -package com.gennadysx.bgloc.headless; +package com.gennadysx.geolocation.bgloc.headless; public interface TaskRunner { void runTask(Task task); diff --git a/src/main/java/com/gennadysx/bgloc/headless/TaskRunnerFactory.java b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/headless/TaskRunnerFactory.java similarity index 83% rename from src/main/java/com/gennadysx/bgloc/headless/TaskRunnerFactory.java rename to backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/headless/TaskRunnerFactory.java index d1abe24..ad80414 100644 --- a/src/main/java/com/gennadysx/bgloc/headless/TaskRunnerFactory.java +++ b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/headless/TaskRunnerFactory.java @@ -1,4 +1,4 @@ -package com.gennadysx.bgloc.headless; +package com.gennadysx.geolocation.bgloc.headless; public class TaskRunnerFactory { diff --git a/src/main/java/com/gennadysx/bgloc/provider/AbstractLocationProvider.java b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/provider/AbstractLocationProvider.java similarity index 89% rename from src/main/java/com/gennadysx/bgloc/provider/AbstractLocationProvider.java rename to backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/provider/AbstractLocationProvider.java index 2eeb4a2..99da6dc 100644 --- a/src/main/java/com/gennadysx/bgloc/provider/AbstractLocationProvider.java +++ b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/provider/AbstractLocationProvider.java @@ -7,7 +7,7 @@ This is a new class */ -package com.gennadysx.bgloc.provider; +package com.gennadysx.geolocation.bgloc.provider; import android.content.BroadcastReceiver; import android.content.Context; @@ -18,14 +18,13 @@ import android.provider.Settings; import android.widget.Toast; +import com.gennadysx.geolocation.logging.LoggerManager; +import com.gennadysx.geolocation.utils.ToneGenerator; import com.google.android.gms.location.DetectedActivity; -import com.gennadysx.bgloc.Config; -import com.gennadysx.bgloc.PluginException; -import com.gennadysx.bgloc.data.BackgroundActivity; -import com.gennadysx.bgloc.data.BackgroundLocation; -import com.gennadysx.logging.LoggerManager; -import com.gennadysx.utils.ToneGenerator; -import com.gennadysx.utils.ToneGenerator.Tone; +import com.gennadysx.geolocation.bgloc.Config; +import com.gennadysx.geolocation.bgloc.PluginException; +import com.gennadysx.geolocation.bgloc.data.BackgroundActivity; +import com.gennadysx.geolocation.bgloc.data.BackgroundLocation; /** * AbstractLocationProvider @@ -93,7 +92,7 @@ protected void unregisterReceiver (BroadcastReceiver receiver) { * @param location */ protected void handleLocation (Location location) { - playDebugTone(Tone.BEEP); + playDebugTone(ToneGenerator.Tone.BEEP); if (mDelegate != null) { BackgroundLocation bgLocation = new BackgroundLocation(PROVIDER_ID, location); bgLocation.setMockLocationsEnabled(hasMockLocationsEnabled()); @@ -108,7 +107,7 @@ protected void handleLocation (Location location) { * @param radius radius of stationary region */ protected void handleStationary (Location location, float radius) { - playDebugTone(Tone.LONG_BEEP); + playDebugTone(ToneGenerator.Tone.LONG_BEEP); if (mDelegate != null) { BackgroundLocation bgLocation = new BackgroundLocation(PROVIDER_ID, location); bgLocation.setRadius(radius); @@ -123,7 +122,7 @@ protected void handleStationary (Location location, float radius) { * @param location */ protected void handleStationary (Location location) { - playDebugTone(Tone.LONG_BEEP); + playDebugTone(ToneGenerator.Tone.LONG_BEEP); if (mDelegate != null) { BackgroundLocation bgLocation = new BackgroundLocation(PROVIDER_ID, location); bgLocation.setMockLocationsEnabled(hasMockLocationsEnabled()); diff --git a/src/main/java/com/gennadysx/bgloc/provider/ActivityRecognitionLocationProvider.java b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/provider/ActivityRecognitionLocationProvider.java similarity index 98% rename from src/main/java/com/gennadysx/bgloc/provider/ActivityRecognitionLocationProvider.java rename to backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/provider/ActivityRecognitionLocationProvider.java index 1c65ca0..56ccdf3 100644 --- a/src/main/java/com/gennadysx/bgloc/provider/ActivityRecognitionLocationProvider.java +++ b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/provider/ActivityRecognitionLocationProvider.java @@ -1,4 +1,4 @@ -package com.gennadysx.bgloc.provider; +package com.gennadysx.geolocation.bgloc.provider; import android.app.PendingIntent; import android.content.BroadcastReceiver; @@ -17,8 +17,8 @@ import com.google.android.gms.location.LocationListener; import com.google.android.gms.location.LocationRequest; import com.google.android.gms.location.LocationServices; -import com.gennadysx.bgloc.Config; -import com.gennadysx.bgloc.data.BackgroundActivity; +import com.gennadysx.geolocation.bgloc.Config; +import com.gennadysx.geolocation.bgloc.data.BackgroundActivity; import java.util.ArrayList; diff --git a/src/main/java/com/gennadysx/bgloc/provider/LocationProvider.java b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/provider/LocationProvider.java similarity index 86% rename from src/main/java/com/gennadysx/bgloc/provider/LocationProvider.java rename to backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/provider/LocationProvider.java index 051bde3..048328b 100644 --- a/src/main/java/com/gennadysx/bgloc/provider/LocationProvider.java +++ b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/provider/LocationProvider.java @@ -7,9 +7,9 @@ This is a new class */ -package com.gennadysx.bgloc.provider; +package com.gennadysx.geolocation.bgloc.provider; -import com.gennadysx.bgloc.Config; +import com.gennadysx.geolocation.bgloc.Config; /** * LocationProvider interface diff --git a/src/main/java/com/gennadysx/bgloc/provider/LocationProviderFactory.java b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/provider/LocationProviderFactory.java similarity index 87% rename from src/main/java/com/gennadysx/bgloc/provider/LocationProviderFactory.java rename to backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/provider/LocationProviderFactory.java index b312038..189ad0c 100644 --- a/src/main/java/com/gennadysx/bgloc/provider/LocationProviderFactory.java +++ b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/provider/LocationProviderFactory.java @@ -7,12 +7,12 @@ This is a new class */ -package com.gennadysx.bgloc.provider; +package com.gennadysx.geolocation.bgloc.provider; import android.content.Context; -import com.gennadysx.bgloc.Config; -import com.tenforwardconsulting.bgloc.DistanceFilterLocationProvider; +import com.gennadysx.geolocation.bgloc.Config; +import com.gennadysx.geolocation.bgloc.DistanceFilterLocationProvider; import java.lang.IllegalArgumentException; diff --git a/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/provider/ProviderDelegate.java b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/provider/ProviderDelegate.java new file mode 100644 index 0000000..f992591 --- /dev/null +++ b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/provider/ProviderDelegate.java @@ -0,0 +1,12 @@ +package com.gennadysx.geolocation.bgloc.provider; + +import com.gennadysx.geolocation.bgloc.PluginException; +import com.gennadysx.geolocation.bgloc.data.BackgroundActivity; +import com.gennadysx.geolocation.bgloc.data.BackgroundLocation; + +public interface ProviderDelegate { + void onLocation(BackgroundLocation location); + void onStationary(BackgroundLocation location); + void onActivity(BackgroundActivity activity); + void onError(PluginException error); +} diff --git a/src/main/java/com/gennadysx/bgloc/provider/RawLocationProvider.java b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/provider/RawLocationProvider.java similarity index 97% rename from src/main/java/com/gennadysx/bgloc/provider/RawLocationProvider.java rename to backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/provider/RawLocationProvider.java index 341bd29..c541a1f 100644 --- a/src/main/java/com/gennadysx/bgloc/provider/RawLocationProvider.java +++ b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/provider/RawLocationProvider.java @@ -1,4 +1,4 @@ -package com.gennadysx.bgloc.provider; +package com.gennadysx.geolocation.bgloc.provider; import android.content.Context; import android.location.Criteria; @@ -7,7 +7,7 @@ import android.location.LocationManager; import android.os.Bundle; -import com.gennadysx.bgloc.Config; +import com.gennadysx.geolocation.bgloc.Config; /** * Created by finch on 7.11.2017. diff --git a/src/main/java/com/gennadysx/bgloc/service/LocationService.java b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/service/LocationService.java similarity index 79% rename from src/main/java/com/gennadysx/bgloc/service/LocationService.java rename to backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/service/LocationService.java index bd7abb1..2951c5f 100644 --- a/src/main/java/com/gennadysx/bgloc/service/LocationService.java +++ b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/service/LocationService.java @@ -1,6 +1,6 @@ -package com.gennadysx.bgloc.service; +package com.gennadysx.geolocation.bgloc.service; -import com.gennadysx.bgloc.Config; +import com.gennadysx.geolocation.bgloc.Config; public interface LocationService { void start(); diff --git a/src/main/java/com/gennadysx/bgloc/service/LocationServiceImpl.java b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/service/LocationServiceImpl.java similarity index 91% rename from src/main/java/com/gennadysx/bgloc/service/LocationServiceImpl.java rename to backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/service/LocationServiceImpl.java index 1ce6e52..177c5e1 100644 --- a/src/main/java/com/gennadysx/bgloc/service/LocationServiceImpl.java +++ b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/service/LocationServiceImpl.java @@ -7,7 +7,7 @@ This is a new class */ -package com.gennadysx.bgloc.service; +package com.gennadysx.geolocation.bgloc.service; import android.accounts.Account; import android.app.Notification; @@ -32,40 +32,40 @@ import android.support.annotation.Nullable; import android.support.v4.content.LocalBroadcastManager; -import com.gennadysx.bgloc.Config; -import com.gennadysx.bgloc.ConnectivityListener; -import com.gennadysx.bgloc.sync.NotificationHelper; -import com.gennadysx.bgloc.PluginException; -import com.gennadysx.bgloc.PostLocationTask; -import com.gennadysx.bgloc.ResourceResolver; -import com.gennadysx.bgloc.data.BackgroundActivity; -import com.gennadysx.bgloc.data.BackgroundLocation; -import com.gennadysx.bgloc.data.ConfigurationDAO; -import com.gennadysx.bgloc.data.DAOFactory; -import com.gennadysx.bgloc.data.LocationDAO; -import com.gennadysx.bgloc.data.LocationTransform; -import com.gennadysx.bgloc.headless.AbstractTaskRunner; -import com.gennadysx.bgloc.headless.ActivityTask; -import com.gennadysx.bgloc.headless.LocationTask; -import com.gennadysx.bgloc.headless.StationaryTask; -import com.gennadysx.bgloc.headless.Task; -import com.gennadysx.bgloc.headless.TaskRunner; -import com.gennadysx.bgloc.headless.TaskRunnerFactory; -import com.gennadysx.bgloc.provider.LocationProvider; -import com.gennadysx.bgloc.provider.LocationProviderFactory; -import com.gennadysx.bgloc.provider.ProviderDelegate; -import com.gennadysx.bgloc.sync.AccountHelper; -import com.gennadysx.bgloc.sync.SyncService; -import com.gennadysx.logging.LoggerManager; -import com.gennadysx.logging.UncaughtExceptionLogger; - -import org.chromium.content.browser.ThreadUtils; +import com.gennadysx.geolocation.bgloc.Config; +import com.gennadysx.geolocation.bgloc.ConnectivityListener; +import com.gennadysx.geolocation.bgloc.sync.NotificationHelper; +import com.gennadysx.geolocation.bgloc.PluginException; +import com.gennadysx.geolocation.bgloc.PostLocationTask; +import com.gennadysx.geolocation.bgloc.ResourceResolver; +import com.gennadysx.geolocation.bgloc.data.BackgroundActivity; +import com.gennadysx.geolocation.bgloc.data.BackgroundLocation; +import com.gennadysx.geolocation.bgloc.data.ConfigurationDAO; +import com.gennadysx.geolocation.bgloc.data.DAOFactory; +import com.gennadysx.geolocation.bgloc.data.LocationDAO; +import com.gennadysx.geolocation.bgloc.data.LocationTransform; +import com.gennadysx.geolocation.bgloc.headless.AbstractTaskRunner; +import com.gennadysx.geolocation.bgloc.headless.ActivityTask; +import com.gennadysx.geolocation.bgloc.headless.LocationTask; +import com.gennadysx.geolocation.bgloc.headless.StationaryTask; +import com.gennadysx.geolocation.bgloc.headless.Task; +import com.gennadysx.geolocation.bgloc.headless.TaskRunner; +import com.gennadysx.geolocation.bgloc.headless.TaskRunnerFactory; +import com.gennadysx.geolocation.bgloc.provider.LocationProvider; +import com.gennadysx.geolocation.bgloc.provider.LocationProviderFactory; +import com.gennadysx.geolocation.bgloc.provider.ProviderDelegate; +import com.gennadysx.geolocation.bgloc.sync.AccountHelper; +import com.gennadysx.geolocation.bgloc.sync.SyncService; +import com.gennadysx.geolocation.logging.LoggerManager; +import com.gennadysx.geolocation.logging.UncaughtExceptionLogger; + +import com.gennadysx.geolocation.browser.ThreadUtils; import org.json.JSONException; -import static com.gennadysx.bgloc.service.LocationServiceIntentBuilder.containsCommand; -import static com.gennadysx.bgloc.service.LocationServiceIntentBuilder.containsMessage; -import static com.gennadysx.bgloc.service.LocationServiceIntentBuilder.getCommand; -import static com.gennadysx.bgloc.service.LocationServiceIntentBuilder.getMessage; +import static com.gennadysx.geolocation.bgloc.service.LocationServiceIntentBuilder.containsCommand; +import static com.gennadysx.geolocation.bgloc.service.LocationServiceIntentBuilder.containsMessage; +import static com.gennadysx.geolocation.bgloc.service.LocationServiceIntentBuilder.getCommand; +import static com.gennadysx.geolocation.bgloc.service.LocationServiceIntentBuilder.getMessage; public class LocationServiceImpl extends Service implements ProviderDelegate, LocationService { diff --git a/src/main/java/com/gennadysx/bgloc/service/LocationServiceInfo.java b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/service/LocationServiceInfo.java similarity index 64% rename from src/main/java/com/gennadysx/bgloc/service/LocationServiceInfo.java rename to backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/service/LocationServiceInfo.java index 48d2c79..f052e8d 100644 --- a/src/main/java/com/gennadysx/bgloc/service/LocationServiceInfo.java +++ b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/service/LocationServiceInfo.java @@ -1,4 +1,4 @@ -package com.gennadysx.bgloc.service; +package com.gennadysx.geolocation.bgloc.service; public interface LocationServiceInfo { boolean isStarted(); diff --git a/src/main/java/com/gennadysx/bgloc/service/LocationServiceInfoImpl.java b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/service/LocationServiceInfoImpl.java similarity index 96% rename from src/main/java/com/gennadysx/bgloc/service/LocationServiceInfoImpl.java rename to backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/service/LocationServiceInfoImpl.java index a43038a..e3b1b1e 100644 --- a/src/main/java/com/gennadysx/bgloc/service/LocationServiceInfoImpl.java +++ b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/service/LocationServiceInfoImpl.java @@ -1,4 +1,4 @@ -package com.gennadysx.bgloc.service; +package com.gennadysx.geolocation.bgloc.service; import android.app.ActivityManager; import android.content.Context; diff --git a/src/main/java/com/gennadysx/bgloc/service/LocationServiceIntentBuilder.java b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/service/LocationServiceIntentBuilder.java similarity index 99% rename from src/main/java/com/gennadysx/bgloc/service/LocationServiceIntentBuilder.java rename to backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/service/LocationServiceIntentBuilder.java index 6ff8a3c..d612d88 100644 --- a/src/main/java/com/gennadysx/bgloc/service/LocationServiceIntentBuilder.java +++ b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/service/LocationServiceIntentBuilder.java @@ -15,7 +15,7 @@ * specific language governing permissions and limitations under the License. */ -package com.gennadysx.bgloc.service; +package com.gennadysx.geolocation.bgloc.service; import android.content.Context; import android.content.Intent; diff --git a/src/main/java/com/gennadysx/bgloc/service/LocationServiceProxy.java b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/service/LocationServiceProxy.java similarity index 97% rename from src/main/java/com/gennadysx/bgloc/service/LocationServiceProxy.java rename to backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/service/LocationServiceProxy.java index 6f99555..5f17a8a 100644 --- a/src/main/java/com/gennadysx/bgloc/service/LocationServiceProxy.java +++ b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/service/LocationServiceProxy.java @@ -1,10 +1,10 @@ -package com.gennadysx.bgloc.service; +package com.gennadysx.geolocation.bgloc.service; import android.content.Context; import android.content.Intent; import android.os.Build; -import com.gennadysx.bgloc.Config; +import com.gennadysx.geolocation.bgloc.Config; public class LocationServiceProxy implements LocationService, LocationServiceInfo { private final Context mContext; diff --git a/src/main/java/com/gennadysx/bgloc/sync/AccountHelper.java b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/sync/AccountHelper.java similarity index 96% rename from src/main/java/com/gennadysx/bgloc/sync/AccountHelper.java rename to backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/sync/AccountHelper.java index b72ec0d..756f7e1 100644 --- a/src/main/java/com/gennadysx/bgloc/sync/AccountHelper.java +++ b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/sync/AccountHelper.java @@ -1,4 +1,4 @@ -package com.gennadysx.bgloc.sync; +package com.gennadysx.geolocation.bgloc.sync; import android.accounts.Account; import android.accounts.AccountManager; diff --git a/src/main/java/com/gennadysx/bgloc/sync/Authenticator.java b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/sync/Authenticator.java similarity index 97% rename from src/main/java/com/gennadysx/bgloc/sync/Authenticator.java rename to backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/sync/Authenticator.java index 4ae4f3f..b238758 100644 --- a/src/main/java/com/gennadysx/bgloc/sync/Authenticator.java +++ b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/sync/Authenticator.java @@ -1,4 +1,4 @@ -package com.gennadysx.bgloc.sync; +package com.gennadysx.geolocation.bgloc.sync; import android.accounts.AbstractAccountAuthenticator; import android.accounts.Account; diff --git a/src/main/java/com/gennadysx/bgloc/sync/AuthenticatorService.java b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/sync/AuthenticatorService.java similarity index 92% rename from src/main/java/com/gennadysx/bgloc/sync/AuthenticatorService.java rename to backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/sync/AuthenticatorService.java index 61f0a86..59cbaf0 100644 --- a/src/main/java/com/gennadysx/bgloc/sync/AuthenticatorService.java +++ b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/sync/AuthenticatorService.java @@ -1,4 +1,4 @@ -package com.gennadysx.bgloc.sync; +package com.gennadysx.geolocation.bgloc.sync; import android.app.Service; import android.content.Intent; diff --git a/src/main/java/com/gennadysx/bgloc/sync/BatchManager.java b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/sync/BatchManager.java similarity index 92% rename from src/main/java/com/gennadysx/bgloc/sync/BatchManager.java rename to backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/sync/BatchManager.java index 64a7388..4a5dc14 100644 --- a/src/main/java/com/gennadysx/bgloc/sync/BatchManager.java +++ b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/sync/BatchManager.java @@ -1,4 +1,4 @@ -package com.gennadysx.bgloc.sync; +package com.gennadysx.geolocation.bgloc.sync; import android.content.ContentResolver; import android.content.ContentValues; @@ -8,15 +8,15 @@ import android.text.TextUtils; import android.util.JsonWriter; -import com.gennadysx.bgloc.ResourceResolver; -import com.gennadysx.bgloc.data.ArrayListLocationTemplate; -import com.gennadysx.bgloc.data.BackgroundLocation; -import com.gennadysx.bgloc.data.HashMapLocationTemplate; -import com.gennadysx.bgloc.data.LocationTemplate; -import com.gennadysx.bgloc.data.LocationTemplateFactory; -import com.gennadysx.bgloc.data.provider.LocationContentProvider; -import com.gennadysx.bgloc.data.sqlite.SQLiteLocationContract.LocationEntry; -import com.gennadysx.logging.LoggerManager; +import com.gennadysx.geolocation.bgloc.ResourceResolver; +import com.gennadysx.geolocation.bgloc.data.ArrayListLocationTemplate; +import com.gennadysx.geolocation.bgloc.data.BackgroundLocation; +import com.gennadysx.geolocation.bgloc.data.HashMapLocationTemplate; +import com.gennadysx.geolocation.bgloc.data.LocationTemplate; +import com.gennadysx.geolocation.bgloc.data.LocationTemplateFactory; +import com.gennadysx.geolocation.bgloc.data.provider.LocationContentProvider; +import com.gennadysx.geolocation.bgloc.data.sqlite.SQLiteLocationContract.LocationEntry; +import com.gennadysx.geolocation.logging.LoggerManager; import org.json.JSONObject; diff --git a/src/main/java/com/gennadysx/bgloc/sync/NotificationHelper.java b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/sync/NotificationHelper.java similarity index 97% rename from src/main/java/com/gennadysx/bgloc/sync/NotificationHelper.java rename to backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/sync/NotificationHelper.java index 46ca3cc..31e47b2 100644 --- a/src/main/java/com/gennadysx/bgloc/sync/NotificationHelper.java +++ b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/sync/NotificationHelper.java @@ -1,4 +1,4 @@ -package com.gennadysx.bgloc.sync; +package com.gennadysx.geolocation.bgloc.sync; import android.app.Notification; import android.app.NotificationChannel; @@ -12,8 +12,8 @@ import android.support.annotation.RequiresApi; import android.support.v4.app.NotificationCompat; -import com.gennadysx.bgloc.ResourceResolver; -import com.gennadysx.logging.LoggerManager; +import com.gennadysx.geolocation.bgloc.ResourceResolver; +import com.gennadysx.geolocation.logging.LoggerManager; public class NotificationHelper { public static final String SERVICE_CHANNEL_ID = "bglocservice"; diff --git a/src/main/java/com/gennadysx/bgloc/sync/SyncAdapter.java b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/sync/SyncAdapter.java similarity index 95% rename from src/main/java/com/gennadysx/bgloc/sync/SyncAdapter.java rename to backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/sync/SyncAdapter.java index 6efd54a..21f5535 100644 --- a/src/main/java/com/gennadysx/bgloc/sync/SyncAdapter.java +++ b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/sync/SyncAdapter.java @@ -1,4 +1,4 @@ -package com.gennadysx.bgloc.sync; +package com.gennadysx.geolocation.bgloc.sync; import android.accounts.Account; import android.app.NotificationManager; @@ -14,12 +14,12 @@ import android.support.v4.app.NotificationCompat; import android.support.v4.content.LocalBroadcastManager; -import com.gennadysx.bgloc.Config; -import com.gennadysx.bgloc.HttpPostService; -import com.gennadysx.bgloc.data.ConfigurationDAO; -import com.gennadysx.bgloc.data.DAOFactory; -import com.gennadysx.bgloc.service.LocationServiceImpl; -import com.gennadysx.logging.LoggerManager; +import com.gennadysx.geolocation.bgloc.Config; +import com.gennadysx.geolocation.bgloc.HttpPostService; +import com.gennadysx.geolocation.bgloc.data.ConfigurationDAO; +import com.gennadysx.geolocation.bgloc.data.DAOFactory; +import com.gennadysx.geolocation.bgloc.service.LocationServiceImpl; +import com.gennadysx.geolocation.logging.LoggerManager; import org.json.JSONException; diff --git a/src/main/java/com/gennadysx/bgloc/sync/SyncService.java b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/sync/SyncService.java similarity index 97% rename from src/main/java/com/gennadysx/bgloc/sync/SyncService.java rename to backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/sync/SyncService.java index 59545a1..c56a764 100644 --- a/src/main/java/com/gennadysx/bgloc/sync/SyncService.java +++ b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/bgloc/sync/SyncService.java @@ -1,4 +1,4 @@ -package com.gennadysx.bgloc.sync; +package com.gennadysx.geolocation.bgloc.sync; import android.accounts.Account; import android.app.Service; diff --git a/src/main/java/org/chromium/content/browser/ThreadUtils.java b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/browser/ThreadUtils.java similarity index 98% rename from src/main/java/org/chromium/content/browser/ThreadUtils.java rename to backgroundgeolocation/src/main/java/com/gennadysx/geolocation/browser/ThreadUtils.java index f32a3aa..286045f 100644 --- a/src/main/java/org/chromium/content/browser/ThreadUtils.java +++ b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/browser/ThreadUtils.java @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -package org.chromium.content.browser; +package com.gennadysx.geolocation.browser; import android.os.Handler; import android.os.Looper; diff --git a/src/main/java/com/gennadysx/logging/DBLogReader.java b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/logging/DBLogReader.java similarity index 97% rename from src/main/java/com/gennadysx/logging/DBLogReader.java rename to backgroundgeolocation/src/main/java/com/gennadysx/geolocation/logging/DBLogReader.java index 70bf0b7..8c7cc01 100644 --- a/src/main/java/com/gennadysx/logging/DBLogReader.java +++ b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/logging/DBLogReader.java @@ -1,11 +1,11 @@ -package com.gennadysx.logging; +package com.gennadysx.geolocation.logging; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteException; -import ru.andremoniy.sqlbuilder.SqlExpression; -import ru.andremoniy.sqlbuilder.SqlSelectStatement; +import com.gennadysx.geolocation.sqlbuilder.SqlExpression; +import com.gennadysx.geolocation.sqlbuilder.SqlSelectStatement; import org.slf4j.event.Level; diff --git a/src/main/java/com/gennadysx/logging/LogEntry.java b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/logging/LogEntry.java similarity index 98% rename from src/main/java/com/gennadysx/logging/LogEntry.java rename to backgroundgeolocation/src/main/java/com/gennadysx/geolocation/logging/LogEntry.java index f70ab34..ea755f4 100644 --- a/src/main/java/com/gennadysx/logging/LogEntry.java +++ b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/logging/LogEntry.java @@ -1,4 +1,4 @@ -package com.gennadysx.logging; +package com.gennadysx.geolocation.logging; import org.json.JSONException; import org.json.JSONObject; diff --git a/src/main/java/com/gennadysx/logging/LoggerManager.java b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/logging/LoggerManager.java similarity index 98% rename from src/main/java/com/gennadysx/logging/LoggerManager.java rename to backgroundgeolocation/src/main/java/com/gennadysx/geolocation/logging/LoggerManager.java index 9a77ace..cfe5815 100644 --- a/src/main/java/com/gennadysx/logging/LoggerManager.java +++ b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/logging/LoggerManager.java @@ -1,4 +1,4 @@ -package com.gennadysx.logging; +package com.gennadysx.geolocation.logging; import ch.qos.logback.classic.Level; import ch.qos.logback.classic.Logger; diff --git a/src/main/java/com/gennadysx/logging/UncaughtExceptionLogger.java b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/logging/UncaughtExceptionLogger.java similarity index 96% rename from src/main/java/com/gennadysx/logging/UncaughtExceptionLogger.java rename to backgroundgeolocation/src/main/java/com/gennadysx/geolocation/logging/UncaughtExceptionLogger.java index aaeb169..7a7b51d 100644 --- a/src/main/java/com/gennadysx/logging/UncaughtExceptionLogger.java +++ b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/logging/UncaughtExceptionLogger.java @@ -1,4 +1,4 @@ -package com.gennadysx.logging; +package com.gennadysx.geolocation.logging; import android.content.Context; diff --git a/src/main/java/ru/andremoniy/sqlbuilder/SqlExpression.java b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/sqlbuilder/SqlExpression.java similarity index 99% rename from src/main/java/ru/andremoniy/sqlbuilder/SqlExpression.java rename to backgroundgeolocation/src/main/java/com/gennadysx/geolocation/sqlbuilder/SqlExpression.java index 4ad571f..69922d1 100644 --- a/src/main/java/ru/andremoniy/sqlbuilder/SqlExpression.java +++ b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/sqlbuilder/SqlExpression.java @@ -16,7 +16,7 @@ * limitations under the License. */ -package ru.andremoniy.sqlbuilder; +package com.gennadysx.geolocation.sqlbuilder; import java.text.DateFormat; import java.text.SimpleDateFormat; diff --git a/src/main/java/ru/andremoniy/sqlbuilder/SqlSelectStatement.java b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/sqlbuilder/SqlSelectStatement.java similarity index 98% rename from src/main/java/ru/andremoniy/sqlbuilder/SqlSelectStatement.java rename to backgroundgeolocation/src/main/java/com/gennadysx/geolocation/sqlbuilder/SqlSelectStatement.java index 54c10f5..738569a 100644 --- a/src/main/java/ru/andremoniy/sqlbuilder/SqlSelectStatement.java +++ b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/sqlbuilder/SqlSelectStatement.java @@ -16,9 +16,9 @@ * limitations under the License. */ -package ru.andremoniy.sqlbuilder; +package com.gennadysx.geolocation.sqlbuilder; -import ru.andremoniy.utils.TextUtils; +import com.gennadysx.geolocation.utils.SQLTextUtils; import java.util.ArrayList; import java.util.List; @@ -581,14 +581,14 @@ public String statement() { } if (_column.size() > 0) { - b.append(TextUtils.join(", ", _column)); + b.append(SQLTextUtils.join(", ", _column)); } else { b.append(_all); } if (_table.size() > 0) { b.append(" FROM "); - b.append(TextUtils.join(", ", _table)); + b.append(SQLTextUtils.join(", ", _table)); } for (Object join : _join) { @@ -611,7 +611,7 @@ public String statement() { } else { joinCondition = (Object[])joinArray[2]; if (joinCondition.length > 0) { - b.append(" USING (").append(TextUtils.join(", ", joinCondition)).append(")"); + b.append(" USING (").append(SQLTextUtils.join(", ", joinCondition)).append(")"); } } } @@ -631,7 +631,7 @@ public String statement() { } if (_groupBy.size() > 0) { - b.append(" GROUP BY ").append(TextUtils.join(", ", _groupBy)); + b.append(" GROUP BY ").append(SQLTextUtils.join(", ", _groupBy)); } if (_having.size() > 0) { @@ -649,7 +649,7 @@ public String statement() { } if (_orderBy.size() > 0) { - b.append(" ORDER BY ").append(TextUtils.join(", ", _orderBy)); + b.append(" ORDER BY ").append(SQLTextUtils.join(", ", _orderBy)); } if (_limit > 0) { diff --git a/src/main/java/ru/andremoniy/sqlbuilder/SqlStatement.java b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/sqlbuilder/SqlStatement.java similarity index 95% rename from src/main/java/ru/andremoniy/sqlbuilder/SqlStatement.java rename to backgroundgeolocation/src/main/java/com/gennadysx/geolocation/sqlbuilder/SqlStatement.java index 00a1a42..a380bf4 100644 --- a/src/main/java/ru/andremoniy/sqlbuilder/SqlStatement.java +++ b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/sqlbuilder/SqlStatement.java @@ -16,7 +16,7 @@ * limitations under the License. */ -package ru.andremoniy.sqlbuilder; +package com.gennadysx.geolocation.sqlbuilder; interface SqlStatement { /*! diff --git a/src/main/java/com/gennadysx/utils/CloneHelper.java b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/utils/CloneHelper.java similarity index 92% rename from src/main/java/com/gennadysx/utils/CloneHelper.java rename to backgroundgeolocation/src/main/java/com/gennadysx/geolocation/utils/CloneHelper.java index c23e089..cb96276 100644 --- a/src/main/java/com/gennadysx/utils/CloneHelper.java +++ b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/utils/CloneHelper.java @@ -1,4 +1,4 @@ -package com.gennadysx.utils; +package com.gennadysx.geolocation.utils; import java.util.HashMap; import java.util.Map; diff --git a/src/main/java/com/gennadysx/utils/Convert.java b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/utils/Convert.java similarity index 97% rename from src/main/java/com/gennadysx/utils/Convert.java rename to backgroundgeolocation/src/main/java/com/gennadysx/geolocation/utils/Convert.java index ed76b72..a5c58f7 100644 --- a/src/main/java/com/gennadysx/utils/Convert.java +++ b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/utils/Convert.java @@ -3,7 +3,7 @@ * http://stackoverflow.com/questions/1590831/safely-casting-long-to-int-in-java */ -package com.gennadysx.utils; +package com.gennadysx.geolocation.utils; import org.json.JSONArray; import org.json.JSONException; diff --git a/src/main/java/ru/andremoniy/utils/TextUtils.java b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/utils/SQLTextUtils.java similarity index 96% rename from src/main/java/ru/andremoniy/utils/TextUtils.java rename to backgroundgeolocation/src/main/java/com/gennadysx/geolocation/utils/SQLTextUtils.java index 351219b..7a6c2c9 100644 --- a/src/main/java/ru/andremoniy/utils/TextUtils.java +++ b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/utils/SQLTextUtils.java @@ -14,12 +14,12 @@ * limitations under the License. */ -package ru.andremoniy.utils; +package com.gennadysx.geolocation.utils; import java.util.Iterator; -public class TextUtils { +public class SQLTextUtils { private static final String TAG = "TextUtils"; /** diff --git a/src/main/java/com/gennadysx/utils/TextUtils.java b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/utils/TextUtils.java similarity index 98% rename from src/main/java/com/gennadysx/utils/TextUtils.java rename to backgroundgeolocation/src/main/java/com/gennadysx/geolocation/utils/TextUtils.java index 449f594..87bfd26 100644 --- a/src/main/java/com/gennadysx/utils/TextUtils.java +++ b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/utils/TextUtils.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.gennadysx.utils; +package com.gennadysx.geolocation.utils; import java.util.Iterator; diff --git a/src/main/java/com/gennadysx/utils/ToneGenerator.java b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/utils/ToneGenerator.java similarity index 96% rename from src/main/java/com/gennadysx/utils/ToneGenerator.java rename to backgroundgeolocation/src/main/java/com/gennadysx/geolocation/utils/ToneGenerator.java index 8755ade..dd56b9a 100644 --- a/src/main/java/com/gennadysx/utils/ToneGenerator.java +++ b/backgroundgeolocation/src/main/java/com/gennadysx/geolocation/utils/ToneGenerator.java @@ -1,6 +1,6 @@ -package com.gennadysx.utils; +package com.gennadysx.geolocation.utils; -import com.gennadysx.logging.LoggerManager; +import com.gennadysx.geolocation.logging.LoggerManager; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; diff --git a/src/main/res/mipmap-hdpi/ic_launcher.png b/backgroundgeolocation/src/main/res/mipmap-hdpi/ic_launcher.png similarity index 100% rename from src/main/res/mipmap-hdpi/ic_launcher.png rename to backgroundgeolocation/src/main/res/mipmap-hdpi/ic_launcher.png diff --git a/src/main/res/mipmap-mdpi/ic_launcher.png b/backgroundgeolocation/src/main/res/mipmap-mdpi/ic_launcher.png similarity index 100% rename from src/main/res/mipmap-mdpi/ic_launcher.png rename to backgroundgeolocation/src/main/res/mipmap-mdpi/ic_launcher.png diff --git a/src/main/res/mipmap-xhdpi/ic_launcher.png b/backgroundgeolocation/src/main/res/mipmap-xhdpi/ic_launcher.png similarity index 100% rename from src/main/res/mipmap-xhdpi/ic_launcher.png rename to backgroundgeolocation/src/main/res/mipmap-xhdpi/ic_launcher.png diff --git a/src/main/res/mipmap-xxhdpi/ic_launcher.png b/backgroundgeolocation/src/main/res/mipmap-xxhdpi/ic_launcher.png similarity index 100% rename from src/main/res/mipmap-xxhdpi/ic_launcher.png rename to backgroundgeolocation/src/main/res/mipmap-xxhdpi/ic_launcher.png diff --git a/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/backgroundgeolocation/src/main/res/mipmap-xxxhdpi/ic_launcher.png similarity index 100% rename from src/main/res/mipmap-xxxhdpi/ic_launcher.png rename to backgroundgeolocation/src/main/res/mipmap-xxxhdpi/ic_launcher.png diff --git a/src/main/res/values/strings.xml b/backgroundgeolocation/src/main/res/values/strings.xml similarity index 100% rename from src/main/res/values/strings.xml rename to backgroundgeolocation/src/main/res/values/strings.xml diff --git a/src/main/res/xml/authenticator.xml b/backgroundgeolocation/src/main/res/xml/authenticator.xml similarity index 100% rename from src/main/res/xml/authenticator.xml rename to backgroundgeolocation/src/main/res/xml/authenticator.xml diff --git a/src/main/res/xml/syncadapter.xml b/backgroundgeolocation/src/main/res/xml/syncadapter.xml similarity index 100% rename from src/main/res/xml/syncadapter.xml rename to backgroundgeolocation/src/main/res/xml/syncadapter.xml diff --git a/build.gradle b/build.gradle index 35d73f6..7565e1c 100644 --- a/build.gradle +++ b/build.gradle @@ -1,92 +1,10 @@ -apply plugin: 'com.android.application' -apply plugin: 'maven-publish' - -apply from: './VERSIONS.gradle' -def accountPrefix = getAccountPrefix() -def resourcePrefix = getResourcePrefix() - -// https://hackernoon.com/android-how-to-add-gradle-dependencies-using-foreach-c4cbcc070458 -def projDependencies = [ - [configuration: "implementation", dependency: androidLibs.playServicesLocation], - [configuration: "implementation", dependency: androidLibs.supportCompat], - [configuration: "implementation", dependency: androidLibs.appcompat], - [configuration: "implementation", dependency: libs.permissions, - options: { exclude group: 'com.android.support', module: 'appcompat-v7'}], - [configuration: "implementation", dependency: libs.logback], - [configuration: "implementation", dependency: libs.slf4j], - [configuration: "implementation", dependency: libs.promise], -] - -buildscript { - repositories { - maven { - url 'https://maven.google.com/' - name 'Google' - } - jcenter() - gradlePluginPortal() - google() - mavenCentral() - } - dependencies { - classpath 'com.android.tools.build:gradle:7.0.4' - - // NOTE: Do not place your application dependencies here; they belong - // in the individual module build.gradle files - } -} - -allprojects { - repositories { - maven { - url 'https://maven.google.com' - } - jcenter() - } -} - -android { - - compileSdkVersion project.ext.getCompileSdkVersion() - buildToolsVersion project.ext.getBuildToolsVersion() - - // Tip: https://stackoverflow.com/questions/39987669/renamingdelegatingcontext-is-deprecated-how-do-we-test-sqlite-db-now/52170737#52170737 - // Gradle automatically adds 'android.test.runner' as a dependency. - - defaultConfig { - resValue "string", resourcePrefix + "account_name", 'Locations' - resValue "string", resourcePrefix + "account_type", accountPrefix + '.account' - resValue "string", resourcePrefix + "content_authority", accountPrefix + '.provider' - minSdkVersion project.ext.getMinSdkVersion() - versionCode 1 - versionName "1.1.2" - } - - buildTypes { - release { - minifyEnabled false - proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' - } - - } - - lintOptions { - abortOnError false - } - - +// Top-level build file where you can add configuration options common to all sub-projects/modules. +plugins { + id 'com.android.application' version '7.2.2' apply false + id 'com.android.library' version '7.2.2' apply false + id 'org.jetbrains.kotlin.android' version '1.6.10' apply false } -dependencies { - projDependencies.each { - add(it.configuration, it.dependency) - } - - implementation fileTree(include: ['*.jar'], dir: 'libs') -} - - - -afterEvaluate { - +task clean(type: Delete) { + delete rootProject.buildDir } \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index ffed3a2..6324f2c 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,6 @@ +#Tue Nov 14 04:57:25 MSK 2023 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.3-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/jitpack.yml b/jitpack.yml index 1bfc0d7..adb3fe1 100644 --- a/jitpack.yml +++ b/jitpack.yml @@ -1,4 +1,2 @@ jdk: - openjdk11 -before_install: - - ./scripts/prepareJitpackEnvironment.sh \ No newline at end of file diff --git a/settings.gradle b/settings.gradle new file mode 100644 index 0000000..7eaa9fd --- /dev/null +++ b/settings.gradle @@ -0,0 +1,24 @@ +pluginManagement { + repositories { + gradlePluginPortal() + google() + mavenCentral() + maven { + url 'https://maven.google.com' + } + jcenter() + } +} +dependencyResolutionManagement { + repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) + repositories { + google() + mavenCentral() + maven { + url 'https://maven.google.com' + } + jcenter() + } +} +rootProject.name = "Background Geolocation" +include ':backgroundgeolocation' diff --git a/src/main/java/com/gennadysx/bgloc/data/sqlite/SQLiteConfigurationDAO.java b/src/main/java/com/gennadysx/bgloc/data/sqlite/SQLiteConfigurationDAO.java deleted file mode 100644 index 75ca135..0000000 --- a/src/main/java/com/gennadysx/bgloc/data/sqlite/SQLiteConfigurationDAO.java +++ /dev/null @@ -1,160 +0,0 @@ -package com.gennadysx.bgloc.data.sqlite; - -import android.content.ContentValues; -import android.content.Context; -import android.database.Cursor; -import android.database.sqlite.SQLiteDatabase; -import android.util.Log; - -import org.json.JSONObject; -import org.json.JSONException; - -import com.gennadysx.bgloc.Config; -import com.gennadysx.bgloc.data.ConfigurationDAO; -import com.gennadysx.bgloc.data.LocationTemplateFactory; -import com.gennadysx.bgloc.data.sqlite.SQLiteConfigurationContract.ConfigurationEntry; - -public class SQLiteConfigurationDAO implements ConfigurationDAO { - private static final String TAG = SQLiteConfigurationDAO.class.getName(); - - private SQLiteDatabase db; - - public SQLiteConfigurationDAO(Context context) { - SQLiteOpenHelper helper = SQLiteOpenHelper.getHelper(context); - this.db = helper.getWritableDatabase(); - } - - public SQLiteConfigurationDAO(SQLiteDatabase db) { - this.db = db; - } - - public Config retrieveConfiguration() throws JSONException { - Cursor cursor = null; - - String[] columns = { - ConfigurationEntry._ID, - ConfigurationEntry.COLUMN_NAME_RADIUS, - ConfigurationEntry.COLUMN_NAME_DISTANCE_FILTER, - ConfigurationEntry.COLUMN_NAME_DESIRED_ACCURACY, - ConfigurationEntry.COLUMN_NAME_DEBUG, - ConfigurationEntry.COLUMN_NAME_NOTIF_TITLE, - ConfigurationEntry.COLUMN_NAME_NOTIF_TEXT, - ConfigurationEntry.COLUMN_NAME_NOTIF_ICON_LARGE, - ConfigurationEntry.COLUMN_NAME_NOTIF_ICON_SMALL, - ConfigurationEntry.COLUMN_NAME_NOTIF_COLOR, - ConfigurationEntry.COLUMN_NAME_STOP_TERMINATE, - ConfigurationEntry.COLUMN_NAME_STOP_ON_STILL, - ConfigurationEntry.COLUMN_NAME_START_BOOT, - ConfigurationEntry.COLUMN_NAME_START_FOREGROUND, - ConfigurationEntry.COLUMN_NAME_NOTIFICATIONS_ENABLED, - ConfigurationEntry.COLUMN_NAME_LOCATION_PROVIDER, - ConfigurationEntry.COLUMN_NAME_INTERVAL, - ConfigurationEntry.COLUMN_NAME_FASTEST_INTERVAL, - ConfigurationEntry.COLUMN_NAME_ACTIVITIES_INTERVAL, - ConfigurationEntry.COLUMN_NAME_URL, - ConfigurationEntry.COLUMN_NAME_SYNC_URL, - ConfigurationEntry.COLUMN_NAME_SYNC_THRESHOLD, - ConfigurationEntry.COLUMN_NAME_HEADERS, - ConfigurationEntry.COLUMN_NAME_MAX_LOCATIONS, - ConfigurationEntry.COLUMN_NAME_TEMPLATE - }; - - String whereClause = null; - String[] whereArgs = null; - String groupBy = null; - String having = null; - String orderBy = null; - - Config config = null; - try { - cursor = db.query( - ConfigurationEntry.TABLE_NAME, // The table to query - columns, // The columns to return - whereClause, // The columns for the WHERE clause - whereArgs, // The values for the WHERE clause - groupBy, // don't group the rows - having, // don't filter by row groups - orderBy // The sort order - ); - if (cursor.moveToFirst()) { - config = hydrate(cursor); - } - } finally { - if (cursor != null) { - cursor.close(); - } - } - return config; - } - - public boolean persistConfiguration(Config config) throws NullPointerException { - long rowId = db.replace(ConfigurationEntry.TABLE_NAME, ConfigurationEntry.COLUMN_NAME_NULLABLE, getContentValues(config)); - Log.d(TAG, "Configuration persisted with rowId = " + rowId); - if (rowId > -1) { - return true; - } else { - return false; - } - } - - private Config hydrate(Cursor c) throws JSONException { - Config config = Config.getDefault(); - config.setStationaryRadius(c.getFloat(c.getColumnIndex(ConfigurationEntry.COLUMN_NAME_RADIUS))); - config.setDistanceFilter(c.getInt(c.getColumnIndex(ConfigurationEntry.COLUMN_NAME_DISTANCE_FILTER))); - config.setDesiredAccuracy(c.getInt(c.getColumnIndex(ConfigurationEntry.COLUMN_NAME_DESIRED_ACCURACY))); - config.setDebugging( (c.getInt(c.getColumnIndex(ConfigurationEntry.COLUMN_NAME_DEBUG)) == 1) ? true : false ); - config.setNotificationTitle(c.getString(c.getColumnIndex(ConfigurationEntry.COLUMN_NAME_NOTIF_TITLE))); - config.setNotificationText(c.getString(c.getColumnIndex(ConfigurationEntry.COLUMN_NAME_NOTIF_TEXT))); - config.setSmallNotificationIcon(c.getString(c.getColumnIndex(ConfigurationEntry.COLUMN_NAME_NOTIF_ICON_SMALL))); - config.setLargeNotificationIcon(c.getString(c.getColumnIndex(ConfigurationEntry.COLUMN_NAME_NOTIF_ICON_LARGE))); - config.setNotificationIconColor(c.getString(c.getColumnIndex(ConfigurationEntry.COLUMN_NAME_NOTIF_COLOR))); - config.setStopOnTerminate( (c.getInt(c.getColumnIndex(ConfigurationEntry.COLUMN_NAME_STOP_TERMINATE)) == 1) ? true : false ); - config.setStopOnStillActivity( (c.getInt(c.getColumnIndex(ConfigurationEntry.COLUMN_NAME_STOP_ON_STILL)) == 1) ? true : false ); - config.setStartOnBoot( (c.getInt(c.getColumnIndex(ConfigurationEntry.COLUMN_NAME_START_BOOT)) == 1) ? true : false ); - config.setStartForeground( (c.getInt(c.getColumnIndex(ConfigurationEntry.COLUMN_NAME_START_FOREGROUND)) == 1) ? true : false ); - config.setNotificationsEnabled( (c.getInt(c.getColumnIndex(ConfigurationEntry.COLUMN_NAME_NOTIFICATIONS_ENABLED)) == 1) ? true : false ); - config.setLocationProvider(c.getInt(c.getColumnIndex(ConfigurationEntry.COLUMN_NAME_LOCATION_PROVIDER))); - config.setInterval(c.getInt(c.getColumnIndex(ConfigurationEntry.COLUMN_NAME_INTERVAL))); - config.setFastestInterval(c.getInt(c.getColumnIndex(ConfigurationEntry.COLUMN_NAME_FASTEST_INTERVAL))); - config.setActivitiesInterval(c.getInt(c.getColumnIndex(ConfigurationEntry.COLUMN_NAME_ACTIVITIES_INTERVAL))); - config.setUrl(c.getString(c.getColumnIndex(ConfigurationEntry.COLUMN_NAME_URL))); - config.setSyncUrl(c.getString(c.getColumnIndex(ConfigurationEntry.COLUMN_NAME_SYNC_URL))); - config.setSyncThreshold(c.getInt(c.getColumnIndex(ConfigurationEntry.COLUMN_NAME_SYNC_THRESHOLD))); - config.setHttpHeaders(new JSONObject(c.getString(c.getColumnIndex(ConfigurationEntry.COLUMN_NAME_HEADERS)))); - config.setMaxLocations(c.getInt(c.getColumnIndex(ConfigurationEntry.COLUMN_NAME_MAX_LOCATIONS))); - config.setTemplate(LocationTemplateFactory.fromJSONString(c.getString(c.getColumnIndex(ConfigurationEntry.COLUMN_NAME_TEMPLATE)))); - - return config; - } - - private ContentValues getContentValues(Config config) throws NullPointerException { - ContentValues values = new ContentValues(); - values.put(ConfigurationEntry._ID, 1); - values.put(ConfigurationEntry.COLUMN_NAME_RADIUS, config.getStationaryRadius()); - values.put(ConfigurationEntry.COLUMN_NAME_DISTANCE_FILTER, config.getDistanceFilter()); - values.put(ConfigurationEntry.COLUMN_NAME_DESIRED_ACCURACY, config.getDesiredAccuracy()); - values.put(ConfigurationEntry.COLUMN_NAME_DEBUG, (config.isDebugging() == true) ? 1 : 0); - values.put(ConfigurationEntry.COLUMN_NAME_NOTIF_TITLE, config.getNotificationTitle()); - values.put(ConfigurationEntry.COLUMN_NAME_NOTIF_TEXT, config.getNotificationText()); - values.put(ConfigurationEntry.COLUMN_NAME_NOTIF_ICON_SMALL, config.getSmallNotificationIcon()); - values.put(ConfigurationEntry.COLUMN_NAME_NOTIF_ICON_LARGE, config.getLargeNotificationIcon()); - values.put(ConfigurationEntry.COLUMN_NAME_NOTIF_COLOR, config.getNotificationIconColor()); - values.put(ConfigurationEntry.COLUMN_NAME_STOP_TERMINATE, (config.getStopOnTerminate() == true) ? 1 : 0); - values.put(ConfigurationEntry.COLUMN_NAME_STOP_ON_STILL, (config.getStopOnStillActivity() == true) ? 1 : 0); - values.put(ConfigurationEntry.COLUMN_NAME_START_BOOT, (config.getStartOnBoot() == true) ? 1 : 0); - values.put(ConfigurationEntry.COLUMN_NAME_START_FOREGROUND, (config.getStartForeground() == true) ? 1 : 0); - values.put(ConfigurationEntry.COLUMN_NAME_NOTIFICATIONS_ENABLED, (config.getNotificationsEnabled() == true) ? 1 : 0); - values.put(ConfigurationEntry.COLUMN_NAME_LOCATION_PROVIDER, config.getLocationProvider()); - values.put(ConfigurationEntry.COLUMN_NAME_INTERVAL, config.getInterval()); - values.put(ConfigurationEntry.COLUMN_NAME_FASTEST_INTERVAL, config.getFastestInterval()); - values.put(ConfigurationEntry.COLUMN_NAME_ACTIVITIES_INTERVAL, config.getActivitiesInterval()); - values.put(ConfigurationEntry.COLUMN_NAME_URL, config.getUrl()); - values.put(ConfigurationEntry.COLUMN_NAME_SYNC_URL, config.getSyncUrl()); - values.put(ConfigurationEntry.COLUMN_NAME_SYNC_THRESHOLD, config.getSyncThreshold()); - values.put(ConfigurationEntry.COLUMN_NAME_HEADERS, new JSONObject(config.getHttpHeaders()).toString()); - values.put(ConfigurationEntry.COLUMN_NAME_MAX_LOCATIONS, config.getMaxLocations()); - values.put(ConfigurationEntry.COLUMN_NAME_TEMPLATE, config.hasTemplate() ? config.getTemplate().toString() : null); - - return values; - } -} diff --git a/src/main/java/com/gennadysx/bgloc/data/sqlite/SQLiteLocationDAO.java b/src/main/java/com/gennadysx/bgloc/data/sqlite/SQLiteLocationDAO.java deleted file mode 100644 index 89f38dc..0000000 --- a/src/main/java/com/gennadysx/bgloc/data/sqlite/SQLiteLocationDAO.java +++ /dev/null @@ -1,486 +0,0 @@ -package com.gennadysx.bgloc.data.sqlite; - -import android.content.ContentValues; -import android.content.Context; -import android.database.Cursor; -import android.database.DatabaseUtils; -import android.database.sqlite.SQLiteDatabase; -import android.text.TextUtils; - -import com.gennadysx.bgloc.data.BackgroundLocation; -import com.gennadysx.bgloc.data.LocationDAO; -import com.gennadysx.bgloc.data.sqlite.SQLiteLocationContract.LocationEntry; -import ru.andremoniy.sqlbuilder.SqlExpression; -import ru.andremoniy.sqlbuilder.SqlSelectStatement; - -import java.util.ArrayList; -import java.util.Collection; - -public class SQLiteLocationDAO implements LocationDAO { - private SQLiteDatabase db; - - public SQLiteLocationDAO(Context context) { - SQLiteOpenHelper helper = SQLiteOpenHelper.getHelper(context); - this.db = helper.getWritableDatabase(); - } - - public SQLiteLocationDAO(SQLiteDatabase db) { - this.db = db; - } - - /** - * Get all locations that match whereClause - * - * @param whereClause - * @param whereArgs - * @return collection of locations - */ - private Collection getLocations(String whereClause, String[] whereArgs) { - Collection locations = new ArrayList(); - - String[] columns = queryColumns(); - String groupBy = null; - String having = null; - String orderBy = LocationEntry.COLUMN_NAME_TIME + " ASC"; - Cursor cursor = null; - - try { - cursor = db.query( - LocationEntry.TABLE_NAME, // The table to query - columns, // The columns to return - whereClause, // The columns for the WHERE clause - whereArgs, // The values for the WHERE clause - groupBy, // don't group the rows - having, // don't filter by row groups - orderBy // The sort order - ); - while (cursor.moveToNext()) { - locations.add(hydrate(cursor)); - } - } finally { - if (cursor != null) { - cursor.close(); - } - } - - return locations; - } - public Collection getAllLocations() { - return getLocations(null, null); - } - - public Collection getValidLocations() { - String whereClause = LocationEntry.COLUMN_NAME_STATUS + " <> ?"; - String[] whereArgs = { String.valueOf(BackgroundLocation.DELETED) }; - - return getLocations(whereClause, whereArgs); - } - - public BackgroundLocation getLocationById(long id) { - String[] columns = queryColumns(); - String whereClause = LocationEntry._ID + " = ?"; - String[] whereArgs = { String.valueOf(id) }; - - BackgroundLocation location = null; - Cursor cursor = null; - try { - cursor = db.query( - LocationEntry.TABLE_NAME, // The table to query - columns, // The columns to return - whereClause, // The columns for the WHERE clause - whereArgs, // The values for the WHERE clause - null, // don't group the rows - null, // don't filter by row groups - null // The sort order - ); - while (cursor.moveToNext()) { - location = hydrate(cursor); - if (!cursor.isLast()) { - throw new RuntimeException("Location " + id + " is not unique"); - } - } - } finally { - if (cursor != null) { - cursor.close(); - } - } - - return location; - } - - public BackgroundLocation getFirstUnpostedLocation() { - SqlSelectStatement subsql = new SqlSelectStatement(); - subsql.column(new SqlExpression(String.format("MIN(%s)", LocationEntry._ID)), LocationEntry._ID); - subsql.from(LocationEntry.TABLE_NAME); - subsql.where(LocationEntry.COLUMN_NAME_STATUS, SqlExpression.SqlOperatorEqualTo, BackgroundLocation.POST_PENDING); - subsql.orderBy(LocationEntry.COLUMN_NAME_TIME); - - SqlSelectStatement sql = new SqlSelectStatement(); - sql.columns(queryColumns()); - sql.from(LocationEntry.TABLE_NAME); - sql.where(LocationEntry._ID, SqlExpression.SqlOperatorEqualTo, subsql); - - BackgroundLocation location = null; - Cursor cursor = null; - try { - cursor = db.rawQuery(sql.statement(), new String[]{}); - while (cursor.moveToNext()) { - location = hydrate(cursor); - if (!cursor.isLast()) { - throw new RuntimeException("Expected single location"); - } - } - } finally { - if (cursor != null) { - cursor.close(); - } - } - - return location; - } - - public BackgroundLocation getNextUnpostedLocation(long fromId) { - SqlSelectStatement subsql = new SqlSelectStatement(); - subsql.column(new SqlExpression(String.format("MIN(%s)", LocationEntry._ID)), LocationEntry._ID); - subsql.from(LocationEntry.TABLE_NAME); - subsql.where(LocationEntry.COLUMN_NAME_STATUS, SqlExpression.SqlOperatorEqualTo, BackgroundLocation.POST_PENDING); - subsql.where(LocationEntry._ID, SqlExpression.SqlOperatorNotEqualTo, fromId); - subsql.orderBy(LocationEntry.COLUMN_NAME_TIME); - - SqlSelectStatement sql = new SqlSelectStatement(); - sql.columns(queryColumns()); - sql.from(LocationEntry.TABLE_NAME); - sql.where(LocationEntry._ID, SqlExpression.SqlOperatorEqualTo, subsql); - - BackgroundLocation location = null; - Cursor cursor = null; - try { - cursor = db.rawQuery(sql.statement(), new String[]{}); - while (cursor.moveToNext()) { - location = hydrate(cursor); - if (!cursor.isLast()) { - throw new RuntimeException("Expected single location"); - } - } - } finally { - if (cursor != null) { - cursor.close(); - } - } - - return location; - } - - public long getUnpostedLocationsCount() { - String whereClause = SQLiteLocationContract.LocationEntry.COLUMN_NAME_STATUS + " = ?"; - String[] whereArgs = { String.valueOf(BackgroundLocation.POST_PENDING) }; - - return DatabaseUtils.queryNumEntries(db, LocationEntry.TABLE_NAME, whereClause, whereArgs); - } - - public long getLocationsForSyncCount(long millisSinceLastBatch) { - String whereClause = TextUtils.join("", new String[]{ - SQLiteLocationContract.LocationEntry.COLUMN_NAME_STATUS + " = ? AND ( ", - SQLiteLocationContract.LocationEntry.COLUMN_NAME_BATCH_START_MILLIS + " IS NULL OR ", - SQLiteLocationContract.LocationEntry.COLUMN_NAME_BATCH_START_MILLIS + " < ? )", - }); - String[] whereArgs = { - String.valueOf(BackgroundLocation.SYNC_PENDING), - String.valueOf(millisSinceLastBatch) - }; - - return DatabaseUtils.queryNumEntries(db, LocationEntry.TABLE_NAME, whereClause, whereArgs); - } - - /** - * Persist location into database - * - * @param location - * @return rowId or -1 when error occured - */ - public long persistLocation(BackgroundLocation location) { - ContentValues values = getContentValues(location); - long rowId = db.insertOrThrow(LocationEntry.TABLE_NAME, LocationEntry.COLUMN_NAME_NULLABLE, values); - - return rowId; - } - - /** - * Persist location into database with maximum row limit - * - * Method will ensure that there will be no more records than maxRows. - * Instead old records will be replaced with newer ones. - * If maxRows will change in time, method will delete excess records and vacuum table. - * - * @param location - * @param maxRows - * @return rowId or -1 when error occured - */ - public long persistLocation(BackgroundLocation location, int maxRows) { - if (maxRows == 0) { - return -1; - } - - String sql = null; - Boolean shouldVacuum = false; - - long rowCount = DatabaseUtils.queryNumEntries(db, LocationEntry.TABLE_NAME); - - if (rowCount < maxRows) { - ContentValues values = getContentValues(location); - return db.insertOrThrow(LocationEntry.TABLE_NAME, LocationEntry.COLUMN_NAME_NULLABLE, values); - } - - db.beginTransactionNonExclusive(); - - if (rowCount > maxRows) { - sql = new StringBuilder("DELETE FROM ") - .append(LocationEntry.TABLE_NAME) - .append(" WHERE ").append(LocationEntry._ID) - .append(" IN (SELECT ").append(LocationEntry._ID) - .append(" FROM ").append(LocationEntry.TABLE_NAME) - .append(" ORDER BY ").append(LocationEntry.COLUMN_NAME_TIME) - .append(" LIMIT ?)") - .toString(); - db.execSQL(sql, new Object[] {(rowCount - maxRows)}); - shouldVacuum = true; - } - - // get oldest location id to be overwritten - Cursor cursor = null; - long locationId; - try { - cursor = db.query( - LocationEntry.TABLE_NAME, - new String[] { "min(" + LocationEntry._ID + ")" }, - TextUtils.join("", new String[]{ - LocationEntry.COLUMN_NAME_TIME, - "= (SELECT min(", - LocationEntry.COLUMN_NAME_TIME, - ") FROM ", - LocationEntry.TABLE_NAME, - ")" - }), - null, null, null, null); - cursor.moveToFirst(); - locationId = cursor.getLong(0); - } finally { - if (cursor != null) { - cursor.close(); - } - } - - sql = new StringBuilder("UPDATE ") - .append(LocationEntry.TABLE_NAME).append(" SET ") - .append(LocationEntry.COLUMN_NAME_PROVIDER).append("= ?,") - .append(LocationEntry.COLUMN_NAME_TIME).append("= ?,") - .append(LocationEntry.COLUMN_NAME_ACCURACY).append("= ?,") - .append(LocationEntry.COLUMN_NAME_SPEED).append("= ?,") - .append(LocationEntry.COLUMN_NAME_BEARING).append("= ?,") - .append(LocationEntry.COLUMN_NAME_ALTITUDE).append("= ?,") - .append(LocationEntry.COLUMN_NAME_RADIUS).append("= ?,") - .append(LocationEntry.COLUMN_NAME_LATITUDE).append("= ?,") - .append(LocationEntry.COLUMN_NAME_LONGITUDE).append("= ?,") - .append(LocationEntry.COLUMN_NAME_HAS_ACCURACY).append("= ?,") - .append(LocationEntry.COLUMN_NAME_HAS_SPEED).append("= ?,") - .append(LocationEntry.COLUMN_NAME_HAS_BEARING).append("= ?,") - .append(LocationEntry.COLUMN_NAME_HAS_ALTITUDE).append("= ?,") - .append(LocationEntry.COLUMN_NAME_HAS_RADIUS).append("= ?,") - .append(LocationEntry.COLUMN_NAME_LOCATION_PROVIDER).append("= ?,") - .append(LocationEntry.COLUMN_NAME_BATCH_START_MILLIS).append("= ?,") - .append(LocationEntry.COLUMN_NAME_STATUS).append("= ?,") - .append(LocationEntry.COLUMN_NAME_MOCK_FLAGS).append("= ?") - .append(" WHERE ").append(LocationEntry._ID) - .append("= ?") - .toString(); - db.execSQL(sql, new Object[] { - location.getProvider(), - location.getTime(), - location.getAccuracy(), - location.getSpeed(), - location.getBearing(), - location.getAltitude(), - location.getRadius(), - location.getLatitude(), - location.getLongitude(), - location.hasAccuracy() ? 1 : 0, - location.hasSpeed() ? 1 : 0, - location.hasBearing() ? 1 : 0, - location.hasAltitude() ? 1 : 0, - location.hasRadius() ? 1 : 0, - location.getLocationProvider(), - location.getBatchStartMillis(), - location.getStatus(), - location.getMockFlags(), - locationId - }); - - db.setTransactionSuccessful(); - db.endTransaction(); - - if (shouldVacuum) { db.execSQL("VACUUM"); } - - return locationId; - } - - /** - * Delete location by given locationId - * - * Note: location is not actually deleted only flagged as non valid - * @param locationId - */ - public void deleteLocationById(long locationId) { - if (locationId < 0) { - return; - } - - ContentValues values = new ContentValues(); - values.put(LocationEntry.COLUMN_NAME_STATUS, BackgroundLocation.DELETED); - - String whereClause = LocationEntry._ID + " = ?"; - String[] whereArgs = { String.valueOf(locationId) }; - - db.update(LocationEntry.TABLE_NAME, values, whereClause, whereArgs); - } - - public BackgroundLocation deleteFirstUnpostedLocation() { - BackgroundLocation location = getFirstUnpostedLocation(); - deleteLocationById(location.getLocationId()); - - return location; - } - - public long persistLocationForSync(BackgroundLocation location, int maxRows) { - Long locationId = location.getLocationId(); - - if (locationId == null) { - location.setStatus(BackgroundLocation.SYNC_PENDING); - return persistLocation(location, maxRows); - } else { - ContentValues values = new ContentValues(); - values.put(LocationEntry.COLUMN_NAME_STATUS, BackgroundLocation.SYNC_PENDING); - - String whereClause = LocationEntry._ID + " = ?"; - String[] whereArgs = { String.valueOf(locationId) }; - - db.update(LocationEntry.TABLE_NAME, values, whereClause, whereArgs); - return locationId; - } - } - - public void updateLocationForSync(long locationId) { - ContentValues values = new ContentValues(); - values.put(LocationEntry.COLUMN_NAME_STATUS, BackgroundLocation.SYNC_PENDING); - - String whereClause = LocationEntry._ID + " = ?"; - String[] whereArgs = { String.valueOf(locationId) }; - - db.update(LocationEntry.TABLE_NAME, values, whereClause, whereArgs); - } - - /** - * Delete all locations - * - * Note: location are not actually deleted only flagged as non valid - */ - public int deleteAllLocations() { - ContentValues values = new ContentValues(); - values.put(LocationEntry.COLUMN_NAME_STATUS, BackgroundLocation.DELETED); - - return db.update(LocationEntry.TABLE_NAME, values, null, null); - } - - /** - * Delete all locations that are in post location queue - * - * Note: Instead of deleting, location status is changed so they can be still synced - */ - public int deleteUnpostedLocations() { - ContentValues values = new ContentValues(); - values.put(LocationEntry.COLUMN_NAME_STATUS, BackgroundLocation.SYNC_PENDING); - - String whereClause = LocationEntry.COLUMN_NAME_STATUS + " = ?"; - String[] whereArgs = { String.valueOf(BackgroundLocation.POST_PENDING) }; - - return db.update(LocationEntry.TABLE_NAME, values, whereClause, whereArgs); - } - - private BackgroundLocation hydrate(Cursor c) { - BackgroundLocation l = new BackgroundLocation(c.getString(c.getColumnIndex(LocationEntry.COLUMN_NAME_PROVIDER))); - l.setTime(c.getLong(c.getColumnIndex(LocationEntry.COLUMN_NAME_TIME))); - if (c.getInt(c.getColumnIndex(LocationEntry.COLUMN_NAME_HAS_ACCURACY)) == 1) { - l.setAccuracy(c.getFloat(c.getColumnIndex(LocationEntry.COLUMN_NAME_ACCURACY))); - } - if (c.getInt(c.getColumnIndex(LocationEntry.COLUMN_NAME_HAS_SPEED)) == 1) { - l.setSpeed(c.getFloat(c.getColumnIndex(LocationEntry.COLUMN_NAME_SPEED))); - } - if (c.getInt(c.getColumnIndex(LocationEntry.COLUMN_NAME_HAS_BEARING)) == 1) { - l.setBearing(c.getFloat(c.getColumnIndex(LocationEntry.COLUMN_NAME_BEARING))); - } - if (c.getInt(c.getColumnIndex(LocationEntry.COLUMN_NAME_HAS_ALTITUDE)) == 1) { - l.setAltitude(c.getDouble(c.getColumnIndex(LocationEntry.COLUMN_NAME_ALTITUDE))); - } - if (c.getInt(c.getColumnIndex(LocationEntry.COLUMN_NAME_HAS_RADIUS)) == 1) { - l.setRadius(c.getFloat(c.getColumnIndex(LocationEntry.COLUMN_NAME_RADIUS))); - } - l.setLatitude(c.getDouble(c.getColumnIndex(LocationEntry.COLUMN_NAME_LATITUDE))); - l.setLongitude(c.getDouble(c.getColumnIndex(LocationEntry.COLUMN_NAME_LONGITUDE))); - l.setLocationProvider(c.getInt(c.getColumnIndex(LocationEntry.COLUMN_NAME_LOCATION_PROVIDER))); - l.setBatchStartMillis(c.getLong(c.getColumnIndex(LocationEntry.COLUMN_NAME_BATCH_START_MILLIS))); - l.setStatus(c.getInt(c.getColumnIndex(LocationEntry.COLUMN_NAME_STATUS))); - l.setLocationId(c.getLong(c.getColumnIndex(LocationEntry._ID))); - l.setMockFlags(c.getInt((c.getColumnIndex(LocationEntry.COLUMN_NAME_MOCK_FLAGS)))); - - return l; - } - - private ContentValues getContentValues(BackgroundLocation l) { - ContentValues values = new ContentValues(); - values.put(LocationEntry.COLUMN_NAME_PROVIDER, l.getProvider()); - values.put(LocationEntry.COLUMN_NAME_TIME, l.getTime()); - values.put(LocationEntry.COLUMN_NAME_ACCURACY, l.getAccuracy()); - values.put(LocationEntry.COLUMN_NAME_SPEED, l.getSpeed()); - values.put(LocationEntry.COLUMN_NAME_BEARING, l.getBearing()); - values.put(LocationEntry.COLUMN_NAME_ALTITUDE, l.getAltitude()); - values.put(LocationEntry.COLUMN_NAME_RADIUS, l.getRadius()); - values.put(LocationEntry.COLUMN_NAME_LATITUDE, l.getLatitude()); - values.put(LocationEntry.COLUMN_NAME_LONGITUDE, l.getLongitude()); - values.put(LocationEntry.COLUMN_NAME_HAS_ACCURACY, l.hasAccuracy() ? 1 : 0); - values.put(LocationEntry.COLUMN_NAME_HAS_SPEED, l.hasSpeed() ? 1 : 0); - values.put(LocationEntry.COLUMN_NAME_HAS_BEARING, l.hasBearing() ? 1 : 0); - values.put(LocationEntry.COLUMN_NAME_HAS_ALTITUDE, l.hasAltitude() ? 1 : 0); - values.put(LocationEntry.COLUMN_NAME_HAS_RADIUS, l.hasRadius() ? 1 : 0); - values.put(LocationEntry.COLUMN_NAME_LOCATION_PROVIDER, l.getLocationProvider()); - values.put(LocationEntry.COLUMN_NAME_STATUS, l.getStatus()); - values.put(LocationEntry.COLUMN_NAME_BATCH_START_MILLIS, l.getBatchStartMillis()); - values.put(LocationEntry.COLUMN_NAME_MOCK_FLAGS, l.getMockFlags()); - - return values; - } - - private String[] queryColumns() { - String[] columns = { - LocationEntry._ID, - LocationEntry.COLUMN_NAME_PROVIDER, - LocationEntry.COLUMN_NAME_TIME, - LocationEntry.COLUMN_NAME_ACCURACY, - LocationEntry.COLUMN_NAME_SPEED, - LocationEntry.COLUMN_NAME_BEARING, - LocationEntry.COLUMN_NAME_ALTITUDE, - LocationEntry.COLUMN_NAME_RADIUS, - LocationEntry.COLUMN_NAME_LATITUDE, - LocationEntry.COLUMN_NAME_LONGITUDE, - LocationEntry.COLUMN_NAME_HAS_ACCURACY, - LocationEntry.COLUMN_NAME_HAS_SPEED, - LocationEntry.COLUMN_NAME_HAS_BEARING, - LocationEntry.COLUMN_NAME_HAS_ALTITUDE, - LocationEntry.COLUMN_NAME_HAS_RADIUS, - LocationEntry.COLUMN_NAME_LOCATION_PROVIDER, - LocationEntry.COLUMN_NAME_STATUS, - LocationEntry.COLUMN_NAME_BATCH_START_MILLIS, - LocationEntry.COLUMN_NAME_MOCK_FLAGS - }; - - return columns; - } -} diff --git a/src/main/java/com/gennadysx/bgloc/data/sqlite/SQLiteOpenHelper.java b/src/main/java/com/gennadysx/bgloc/data/sqlite/SQLiteOpenHelper.java deleted file mode 100644 index df95d5c..0000000 --- a/src/main/java/com/gennadysx/bgloc/data/sqlite/SQLiteOpenHelper.java +++ /dev/null @@ -1,143 +0,0 @@ -package com.gennadysx.bgloc.data.sqlite; - - -import android.content.Context; -import android.database.SQLException; -import android.database.sqlite.SQLiteDatabase; -import android.util.Log; - -import com.gennadysx.bgloc.data.sqlite.SQLiteLocationContract.LocationEntry; -import com.gennadysx.bgloc.data.sqlite.SQLiteConfigurationContract.ConfigurationEntry; - -import java.util.ArrayList; - -import static com.gennadysx.bgloc.data.sqlite.SQLiteConfigurationContract.ConfigurationEntry.SQL_CREATE_CONFIG_TABLE; -import static com.gennadysx.bgloc.data.sqlite.SQLiteConfigurationContract.ConfigurationEntry.SQL_DROP_CONFIG_TABLE; -import static com.gennadysx.bgloc.data.sqlite.SQLiteLocationContract.LocationEntry.SQL_CREATE_LOCATION_TABLE; -import static com.gennadysx.bgloc.data.sqlite.SQLiteLocationContract.LocationEntry.SQL_CREATE_LOCATION_TABLE_BATCH_ID_IDX; -import static com.gennadysx.bgloc.data.sqlite.SQLiteLocationContract.LocationEntry.SQL_CREATE_LOCATION_TABLE_TIME_IDX; -import static com.gennadysx.bgloc.data.sqlite.SQLiteLocationContract.LocationEntry.SQL_DROP_LOCATION_TABLE; - -public class SQLiteOpenHelper extends android.database.sqlite.SQLiteOpenHelper { - private static final String TAG = SQLiteOpenHelper.class.getName(); - public static final String SQLITE_DATABASE_NAME = "cordova_bg_geolocation.db"; - public static final int DATABASE_VERSION = 15; - - public static final String TEXT_TYPE = " TEXT"; - public static final String INTEGER_TYPE = " INTEGER"; - public static final String REAL_TYPE = " REAL"; - public static final String COMMA_SEP = ","; - - private static SQLiteOpenHelper instance; - - /** - * Get SqliteOpenHelper instance (singleton) - * - * Use the application context, which will ensure that you - * don't accidentally leak an Activity's context. - * See this article for more information: http://bit.ly/6LRzfx - * - * @param context - * @return - */ - public static synchronized SQLiteOpenHelper getHelper(Context context) { - if (instance == null) - instance = new SQLiteOpenHelper(context.getApplicationContext()); - - return instance; - } - - /** - * Constructor - * - * NOTE: Intended to use only for testing purposes. - * Use factory method getHelper instead. - * - * @param context - */ - public SQLiteOpenHelper(Context context) { - super(context, SQLITE_DATABASE_NAME, null, DATABASE_VERSION); - } - - @Override - public void onCreate(SQLiteDatabase db) { - Log.d(TAG, "Creating db: " + this.getDatabaseName()); - execAndLogSql(db, SQL_CREATE_LOCATION_TABLE); - execAndLogSql(db, SQL_CREATE_CONFIG_TABLE); - execAndLogSql(db, SQL_CREATE_LOCATION_TABLE_TIME_IDX); - execAndLogSql(db, SQL_CREATE_LOCATION_TABLE_BATCH_ID_IDX); - } - - @Override - public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { - Log.d(this.getClass().getName(), "Upgrading database oldVersion: " + oldVersion + " newVersion: " + newVersion); - - ArrayList alterSql = new ArrayList(); - switch (oldVersion) { - case 10: - alterSql.add("ALTER TABLE " + LocationEntry.TABLE_NAME + - " ADD COLUMN " + LocationEntry.COLUMN_NAME_STATUS + INTEGER_TYPE); - alterSql.add(SQL_CREATE_LOCATION_TABLE_TIME_IDX); - alterSql.add(SQL_DROP_CONFIG_TABLE); - alterSql.add(SQL_CREATE_CONFIG_TABLE); - case 11: - alterSql.add("ALTER TABLE " + LocationEntry.TABLE_NAME + - " ADD COLUMN " + LocationEntry.COLUMN_NAME_RADIUS + REAL_TYPE); - alterSql.add("ALTER TABLE " + LocationEntry.TABLE_NAME + - " ADD COLUMN " + LocationEntry.COLUMN_NAME_HAS_ACCURACY + INTEGER_TYPE); - alterSql.add("ALTER TABLE " + LocationEntry.TABLE_NAME + - " ADD COLUMN " + LocationEntry.COLUMN_NAME_HAS_SPEED + INTEGER_TYPE); - alterSql.add("ALTER TABLE " + LocationEntry.TABLE_NAME + - " ADD COLUMN " + LocationEntry.COLUMN_NAME_HAS_BEARING + INTEGER_TYPE); - alterSql.add("ALTER TABLE " + LocationEntry.TABLE_NAME + - " ADD COLUMN " + LocationEntry.COLUMN_NAME_HAS_ALTITUDE + INTEGER_TYPE); - alterSql.add("ALTER TABLE " + LocationEntry.TABLE_NAME + - " ADD COLUMN " + LocationEntry.COLUMN_NAME_HAS_RADIUS + INTEGER_TYPE); - alterSql.add("ALTER TABLE " + LocationEntry.TABLE_NAME + - " ADD COLUMN " + LocationEntry.COLUMN_NAME_BATCH_START_MILLIS + INTEGER_TYPE); - alterSql.add(SQL_CREATE_LOCATION_TABLE_BATCH_ID_IDX); - alterSql.add("UPDATE " + LocationEntry.TABLE_NAME + - " SET " + LocationEntry.COLUMN_NAME_HAS_ACCURACY + "= 1," + - LocationEntry.COLUMN_NAME_HAS_SPEED + "= 1," + - LocationEntry.COLUMN_NAME_HAS_BEARING + "= 1," + - LocationEntry.COLUMN_NAME_HAS_ALTITUDE + "= 1," + - LocationEntry.COLUMN_NAME_HAS_RADIUS + "= 1" - ); - case 12: - alterSql.add("ALTER TABLE " + ConfigurationEntry.TABLE_NAME + - " ADD COLUMN " + ConfigurationEntry.COLUMN_NAME_TEMPLATE + TEXT_TYPE); - case 13: - alterSql.add("ALTER TABLE " + LocationEntry.TABLE_NAME + - " ADD COLUMN " + LocationEntry.COLUMN_NAME_MOCK_FLAGS + INTEGER_TYPE); - case 14: - alterSql.add("ALTER TABLE " + ConfigurationEntry.TABLE_NAME + - " ADD COLUMN " + ConfigurationEntry.COLUMN_NAME_NOTIFICATIONS_ENABLED + INTEGER_TYPE); - - break; // DO NOT FORGET TO MOVE DOWN BREAK ON DB UPGRADE!!! - default: - onDowngrade(db, 0, 0); - return; - } - - for (String sql : alterSql) { - execAndLogSql(db, sql); - } - } - - @Override - public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion) { - // we don't support db downgrade yet, instead we drop table and start over - execAndLogSql(db, SQL_DROP_LOCATION_TABLE); - execAndLogSql(db, SQL_DROP_CONFIG_TABLE); - onCreate(db); - } - - public void execAndLogSql(SQLiteDatabase db, String sql) { - Log.d(TAG, sql); - try { - db.execSQL(sql); - } catch (SQLException e) { - Log.e(TAG, "Error executing sql: " + e.getMessage()); - } - } -} diff --git a/src/main/java/com/gennadysx/bgloc/provider/ProviderDelegate.java b/src/main/java/com/gennadysx/bgloc/provider/ProviderDelegate.java deleted file mode 100644 index 8ea11c4..0000000 --- a/src/main/java/com/gennadysx/bgloc/provider/ProviderDelegate.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.gennadysx.bgloc.provider; - -import com.gennadysx.bgloc.PluginException; -import com.gennadysx.bgloc.data.BackgroundActivity; -import com.gennadysx.bgloc.data.BackgroundLocation; - -public interface ProviderDelegate { - void onLocation(BackgroundLocation location); - void onStationary(BackgroundLocation location); - void onActivity(BackgroundActivity activity); - void onError(PluginException error); -}