From 2318bb9f94ee5f862c50d65efc63fee9bc16828a Mon Sep 17 00:00:00 2001 From: sipp11 Date: Thu, 3 Oct 2019 14:30:08 +0900 Subject: [PATCH] Export works! --- .idea/misc.xml | 2 +- app/build.gradle | 4 +- app/src/main/AndroidManifest.xml | 1 + .../co/zzyzx/sensorlogger/MainActivity.kt | 170 ++++++++++++++++-- .../java/co/zzyzx/sensorlogger/db/Database.kt | 8 + .../main/java/co/zzyzx/sensorlogger/db/dao.kt | 5 +- 6 files changed, 175 insertions(+), 15 deletions(-) diff --git a/.idea/misc.xml b/.idea/misc.xml index 703e5d4..af0bbdd 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -5,7 +5,7 @@ - + diff --git a/app/build.gradle b/app/build.gradle index 480923e..386a64c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -36,7 +36,9 @@ dependencies { implementation 'android.arch.persistence.room:runtime:1.1.1' annotationProcessor 'android.arch.persistence.room:compiler:1.1.1' kapt 'android.arch.persistence.room:compiler:1.1.1' -// implementation 'android.arch.lifecycle:extensions:1.1.1' + + implementation 'com.opencsv:opencsv:4.0' +// implementation 'android.arch.lifecycle:excompile 'com.opencsv:opencsv:4.0'tensions:1.1.1' // kapt 'android.arch.lifecycle:compiler:1.1.1' testImplementation 'junit:junit:4.12' diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index e836dcb..6651bfa 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -6,6 +6,7 @@ + + /* + result.time, + result.longitude.format(7), + result.latitude.format(7), + result.speed, + result.altitude, + result.bearing, + result.accuracy, + result.provider, + result.isFromMockProvider + */ + if (one.size != 0) { + time = one[0] + lon = one[1] + lat = one[2] + speed = one[3] + } + } else if (rec.sensor == "accelerometer") { + val data = rec.data?.split(",") as List + val row = + arrayOf("${rec.timestamp}", lat, lon, speed, time, data[0], data[1], data[2]) + writerAccelero.writeNext(row) + } else if (rec.sensor == "gyroscope") { + val data = rec.data?.split(",") as List + val row = + arrayOf("${rec.timestamp}", lat, lon, speed, time, data[0], data[1], data[2]) + writerGyro.writeNext(row) + } + } + writerAccelero.close() + writerGyro.close() } private fun updateCounter() { @@ -79,7 +201,6 @@ class MainActivity : AppCompatActivity(), reset_record_btn.visibility = View.VISIBLE export_record_btn.visibility = View.VISIBLE } else { - reset_record_btn.visibility = View.GONE export_record_btn.visibility = View.GONE } @@ -91,8 +212,15 @@ class MainActivity : AppCompatActivity(), private fun UIStatusUpdates(hasLocPerm: Boolean = true) { val mLocationManager = getSystemService(Context.LOCATION_SERVICE) as LocationManager - log("isLocationEnabled? ${mLocationManager.isLocationEnabled} - ${mLocationManager.allProviders}") - if (hasLocPerm && mLocationManager.isLocationEnabled) { + val isLocationEnabled = ( + Build.VERSION.SDK_INT < Build.VERSION_CODES.P || ( + Build.VERSION.SDK_INT >= Build.VERSION_CODES.P && + mLocationManager.isLocationEnabled) + ) + + log("isLocationEnabled? $isLocationEnabled - ${mLocationManager.allProviders}") + + if (hasLocPerm && isLocationEnabled) { location_status_textview.text = "OK" location_status_textview.setBackgroundColor( ContextCompat.getColor( @@ -113,11 +241,11 @@ class MainActivity : AppCompatActivity(), } } - private fun requestForNecessaryPermissions() { + private fun requestForNecessaryPermissions(perm: String = Manifest.permission.ACCESS_FINE_LOCATION) { // Here, thisActivity is the current activity if (ContextCompat.checkSelfPermission( this, - Manifest.permission.ACCESS_FINE_LOCATION + perm ) != PackageManager.PERMISSION_GRANTED ) { @@ -125,14 +253,13 @@ class MainActivity : AppCompatActivity(), // Should we show an explanation? if (ActivityCompat.shouldShowRequestPermissionRationale( this, - Manifest.permission.ACCESS_FINE_LOCATION + perm ) ) { - val perms = arrayOf(Manifest.permission.ACCESS_FINE_LOCATION) - ActivityCompat.requestPermissions( - this, perms, - PERMISSION_LOCATION - ) + val perms = arrayOf(perm) + val permResult = + if (perm == Manifest.permission.ACCESS_FINE_LOCATION) PERMISSION_LOCATION else WRITE_EXTERNAL_STORAGE + ActivityCompat.requestPermissions(this, perms, permResult) } UIStatusUpdates(false) } else { @@ -144,6 +271,16 @@ class MainActivity : AppCompatActivity(), } + private fun isMyServiceRunning(serviceClass: Class<*>): Boolean { + val manager = getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager + for (service in manager.getRunningServices(Integer.MAX_VALUE)) { + if (serviceClass.name == service.service.className) { + return true + } + } + return false + } + private fun actionOnService(action: Actions) { when (action) { Actions.START -> { @@ -185,6 +322,15 @@ class MainActivity : AppCompatActivity(), ) UIStatusUpdates(hasPerm) } + WRITE_EXTERNAL_STORAGE -> { + val hasPerm = grantResult[0] == PackageManager.PERMISSION_GRANTED + Toast.makeText( + applicationContext, + "${if (hasPerm) "Good" else "Bad"} Permission for storage", + Toast.LENGTH_LONG + ) + // UIStatusUpdates(hasPerm) + } } } } diff --git a/app/src/main/java/co/zzyzx/sensorlogger/db/Database.kt b/app/src/main/java/co/zzyzx/sensorlogger/db/Database.kt index d65918a..d5efdd9 100644 --- a/app/src/main/java/co/zzyzx/sensorlogger/db/Database.kt +++ b/app/src/main/java/co/zzyzx/sensorlogger/db/Database.kt @@ -40,4 +40,12 @@ class RecordRepository { return dao.getCount(sensor) } + fun getAll(): List { + return dao.getAll() + } + + fun resetAllData() { + dao.nukeTable() + } + } \ No newline at end of file diff --git a/app/src/main/java/co/zzyzx/sensorlogger/db/dao.kt b/app/src/main/java/co/zzyzx/sensorlogger/db/dao.kt index d4244b5..7c33593 100644 --- a/app/src/main/java/co/zzyzx/sensorlogger/db/dao.kt +++ b/app/src/main/java/co/zzyzx/sensorlogger/db/dao.kt @@ -8,7 +8,7 @@ interface RecordDao { @Query("SELECT COUNT(*) FROM record WHERE sensor = :sensor") fun getCount(sensor: String): Int - @Query("SELECT * FROM record") + @Query("SELECT * FROM record ORDER BY timestamp ASC") fun getAll(): List @Query("SELECT * FROM record WHERE sensor LIKE :sensor ORDER BY timestamp DESC LIMIT 1") @@ -26,4 +26,7 @@ interface RecordDao { @Delete fun delete(record: Record) + + @Query("DELETE FROM record") + fun nukeTable() }