diff --git a/app/build.gradle b/app/build.gradle index 015cb99..73ba1ab 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -28,6 +28,7 @@ dependencies { implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" implementation 'com.android.support:appcompat-v7:28.0.0' implementation 'com.android.support.constraint:constraint-layout:1.1.3' + implementation 'com.github.Jasonchenlijian:FastBle:2.4.0' testImplementation 'junit:junit:4.12' androidTestImplementation 'com.android.support.test:runner:1.0.2' androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' diff --git a/app/libs/FastBLE-2.3.4.jar b/app/libs/FastBLE-2.3.4.jar deleted file mode 100644 index a2a8e5d..0000000 Binary files a/app/libs/FastBLE-2.3.4.jar and /dev/null differ diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 649ccde..dbebd29 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -16,7 +16,9 @@ android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme"> - + @@ -24,7 +26,6 @@ - diff --git a/app/src/main/java/net/nigreon/blegps/BLEHRService.kt b/app/src/main/java/net/nigreon/blegps/BLEHRService.kt deleted file mode 100644 index e5c5656..0000000 --- a/app/src/main/java/net/nigreon/blegps/BLEHRService.kt +++ /dev/null @@ -1,224 +0,0 @@ -package net.nigreon.blegps - -import android.app.NotificationChannel -import android.app.NotificationManager -import android.app.Service -import android.bluetooth.BluetoothGatt -import android.content.Intent -import android.os.Binder -import android.os.Build -import android.os.IBinder -import android.support.v4.app.NotificationCompat -import android.support.v4.content.LocalBroadcastManager -import android.util.Log -import com.clj.fastble.BleManager -import com.clj.fastble.callback.BleGattCallback -import com.clj.fastble.callback.BleNotifyCallback -import com.clj.fastble.callback.BleWriteCallback -import com.clj.fastble.data.BleDevice -import com.clj.fastble.exception.BleException -import java.nio.ByteBuffer -import java.nio.ByteOrder -import java.util.* - -class BLEHRService : Service() { - private val LOG_TAG = "BLEHRService" - private val CHANNEL_ID = "NotifID2" - private val binder = sBinder() - - val timerActivity = Timer() - - private lateinit var bleDevice: BleDevice - private val serviceHeartRateUuid: String = "0000180d-0000-1000-8000-00805f9b34fb" - private val characteristicHRControlPointUuid: String = "00002a39-0000-1000-8000-00805f9b34fb" - private val characteristicHRMeasurementUuid: String = "00002a37-0000-1000-8000-00805f9b34fb" - - private fun initNotificationHR() { - BleManager.getInstance().notify( - bleDevice, - serviceHeartRateUuid, - characteristicHRMeasurementUuid, - object : BleNotifyCallback() { - override fun onNotifySuccess() { - Log.v(LOG_TAG, "Notify HR Success") - //initNotificationPressure() - } - - override fun onNotifyFailure(exception: BleException) { - Log.v(LOG_TAG, "BLE Notify HR Failure $exception") - //initNotificationPressure() - } - - override fun onCharacteristicChanged(data: ByteArray) { - //Log.v(LOG_TAG, "Notify Temperature Characteristic changed") - val buffer = ByteBuffer.wrap(data) - buffer.order(ByteOrder.LITTLE_ENDIAN) - //texttemp.text = buffer.float.toString() - LocalBroadcastManager.getInstance(baseContext).sendBroadcast( - Intent(ServicesConstants.BROADCAST_FILTER.FILTERBTHRM).putExtra(ServicesConstants.BROADCAST_KEY.KEYBTHRM, buffer.get(1)) - ) - } - }) - } - - private fun startHRBLE() { - BleManager.getInstance().connect("CC:2C:24:71:9C:BC", object : BleGattCallback() { - override fun onStartConnect() { - - } - - override fun onConnectFail(bleDevice: BleDevice, exception: BleException) { - Log.v(LOG_TAG, "BLE HR Connection Failed $exception") - } - - override fun onConnectSuccess( - bleDeviceConnect: BleDevice, - gattConnect: BluetoothGatt, - status: Int - ) { - Log.v(LOG_TAG, "BLE HR Connection OK") - LocalBroadcastManager.getInstance(baseContext).sendBroadcast( - Intent(ServicesConstants.BROADCAST_FILTER.FILTERBTHR).putExtra( - ServicesConstants.BROADCAST_KEY.KEYBTSTATUSHR, - true - ) - ) - bleDevice = bleDeviceConnect - - initNotificationHR() - - val t = object : TimerTask() { - override fun run() { - startHRBLEActivity() - } - } - timerActivity.scheduleAtFixedRate(t, 0, 9500) - - } - - override fun onDisConnected( - isActiveDisConnected: Boolean, - bleDevice: BleDevice, - gatt: BluetoothGatt, - status: Int - ) { - LocalBroadcastManager.getInstance(baseContext).sendBroadcast( - Intent(ServicesConstants.BROADCAST_FILTER.FILTERBTHR).putExtra( - ServicesConstants.BROADCAST_KEY.KEYBTSTATUSHR, - false - ) - ) - timerActivity.cancel() - Log.v(LOG_TAG, "BLE HR Disconnected") - } - }) - } - - private fun stopHRBLE() { - LocalBroadcastManager.getInstance(baseContext).sendBroadcast( - Intent(ServicesConstants.BROADCAST_FILTER.FILTERBTHR).putExtra(ServicesConstants.BROADCAST_KEY.KEYBTSTATUSHR, false) - ) - - BleManager.getInstance().disconnect(bleDevice) - } - - private fun startHRBLEActivity() { - val data: ByteArray = byteArrayOf(0x15,0x01,0x01) - BleManager.getInstance().write( - bleDevice, - serviceHeartRateUuid, - characteristicHRControlPointUuid, - data, - object : BleWriteCallback() { - override fun onWriteSuccess(current: Int, total: Int, justWrite: ByteArray) { - //Log.v(LOG_TAG, "Start Activity sended") - } - - override fun onWriteFailure(exception: BleException) { - Log.v(LOG_TAG, "Start Activity Failure $exception") - } - }) - } - - private fun stopHRBLEActivity() { - val data: ByteArray = byteArrayOf(0x15,0x01,0x00) - BleManager.getInstance().write( - bleDevice, - serviceHeartRateUuid, - characteristicHRControlPointUuid, - data, - object : BleWriteCallback() { - override fun onWriteSuccess(current: Int, total: Int, justWrite: ByteArray) { - Log.v(LOG_TAG, "Stop Activity sended") - } - - override fun onWriteFailure(exception: BleException) { - Log.v(LOG_TAG, "Stop Activity send Failure $exception") - } - }) - } - - override fun onStartCommand(intent: Intent, flags: Int, startId: Int): Int { - if(intent.action == ServicesConstants.HRSERVICEACTION.STARTFOREGROUND_ACTION) { - Log.i(LOG_TAG, "Received Start Foreground Intent ") - - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { - // Create the NotificationChannel - val name = "ChannelName" - val descriptionText = "ChannelDescription" - val importance = NotificationManager.IMPORTANCE_DEFAULT - val mChannel = NotificationChannel(CHANNEL_ID, name, importance) - mChannel.description = descriptionText - // Register the channel with the system; you can't change the importance - // or other notification behaviors after this - val notificationManager = getSystemService(NOTIFICATION_SERVICE) as NotificationManager - notificationManager.createNotificationChannel(mChannel) - } - - var notification = NotificationCompat.Builder(this, CHANNEL_ID) - .setSmallIcon(R.drawable.ic_launcher_foreground) - .setContentTitle("BLE HR") - .setContentText("BLE HR active") - .setPriority(NotificationCompat.PRIORITY_DEFAULT) - //.setContentIntent(pendingIntent) - .build() - - //pBLE = BLEProvider(application, baseContext) - startHRBLE() - - startForeground(ServicesConstants.NOTIFICATION_ID.FOREGROUND_HR_SERVICE,notification) - } else if(intent.action == ServicesConstants.HRSERVICEACTION.STOPFOREGROUND_ACTION) { - Log.i(LOG_TAG, "Received Stop Foreground Intent ") - //pBLE.disconnectBLE() - stopHRBLE() - stopForeground(true) - stopSelf() - } - return START_STICKY - } - - override fun onDestroy() { - super.onDestroy() - Log.i(LOG_TAG, "In onDestroy") - } - - override fun onBind(intent: Intent): IBinder? { - Log.v(LOG_TAG, "in onBind") - return binder - } - - override fun onRebind(intent: Intent) { - Log.v(LOG_TAG, "in onRebind") - super.onRebind(intent) - } - - override fun onUnbind(intent: Intent): Boolean { - Log.v(LOG_TAG, "in onUnbind") - return true - } - - inner class sBinder : Binder() { - // Return this instance of LocalService so clients can call public methods - fun getService(): BLEHRService = this@BLEHRService - } -} \ No newline at end of file diff --git a/app/src/main/java/net/nigreon/blegps/BLEMockLocationService.kt b/app/src/main/java/net/nigreon/blegps/BLEMockLocationService.kt index bfb49bd..be2f1ba 100644 --- a/app/src/main/java/net/nigreon/blegps/BLEMockLocationService.kt +++ b/app/src/main/java/net/nigreon/blegps/BLEMockLocationService.kt @@ -2,15 +2,14 @@ package net.nigreon.blegps import android.app.NotificationChannel import android.app.NotificationManager +import android.app.PendingIntent import android.app.Service -import android.content.BroadcastReceiver -import android.content.Context -import android.content.Intent -import android.content.IntentFilter +import android.content.* import android.location.LocationManager import android.os.* import android.support.v4.app.NotificationCompat import android.support.v4.content.LocalBroadcastManager +import android.support.v7.app.AppCompatActivity import android.util.Log import java.io.File import java.io.FileNotFoundException @@ -31,12 +30,11 @@ class BLEMockLocationService : Service() { private lateinit var mockGPS: MockLocationProvider private var locationReceived = false private var qualityReceived = false - private var gpsverbose = false - private var gpxopened = false - private var hrenable = false private var tempenable = false private lateinit var gpxoutputstream: FileOutputStream + private lateinit var sharedPreferences: SharedPreferences + var gpsConf: GPSConfiguration = GPSConfiguration() // Location @@ -50,11 +48,8 @@ class BLEMockLocationService : Service() { private var currentEVPE: Float = -1.0f private var currentHDOP: Float = -1.0f private var currentVDOP: Float = -1.0f - private var currentSatview: Byte = -1 - private var currentSatused: Byte = -1 private var currentElevationGPS: Double = -1.0 - private var currentHR: Byte = 0 private var currentTemperature: Float = 0.0f private val binder = sBinder() @@ -70,7 +65,6 @@ class BLEMockLocationService : Service() { currentHeading = intent.getFloatExtra(ServicesConstants.BROADCAST_KEY.KEYLOCATIONHEADING,-1.0f) mockGPS.pushLocation(currentLatitude,currentLongitude,currentElevation, currentSpeed, currentHeading, currentEHPE) locationReceived = true - storeGPX() } fun qualityChanged(intent: Intent) @@ -80,16 +74,8 @@ class BLEMockLocationService : Service() { currentEVPE = intent.getFloatExtra(ServicesConstants.BROADCAST_KEY.KEYQUALITYEVPE,-1.0f) currentHDOP = intent.getFloatExtra(ServicesConstants.BROADCAST_KEY.KEYQUALITYHDOP,-1.0f) currentVDOP = intent.getFloatExtra(ServicesConstants.BROADCAST_KEY.KEYQUALITYVDOP,-1.0f) - currentSatview = intent.getByteExtra(ServicesConstants.BROADCAST_KEY.KEYQUALITYSATVIEW,-1) - currentSatused = intent.getByteExtra(ServicesConstants.BROADCAST_KEY.KEYQUALITYSATUSED,-1) currentElevationGPS = intent.getDoubleExtra(ServicesConstants.BROADCAST_KEY.KEYQUALITYELEGPS,-1.0) qualityReceived = true - storeGPX() - } - - fun HRChanged(intent: Intent) - { - currentHR = intent.getByteExtra(ServicesConstants.BROADCAST_KEY.KEYBTHRM,-1) } fun bmpStatusChanged(intent: Intent) @@ -105,71 +91,25 @@ class BLEMockLocationService : Service() { fun taskerChanged(bundle: Bundle) { Log.v(LOG_TAG, "taskerChanged") if(bundle.containsKey(ServicesConstants.BROADCAST_KEY.KEYBOOST)) { - /*if (bundle.getBoolean(ServicesConstants.BROADCAST_KEY.KEYBOOST)) { + if (bundle.getBoolean(ServicesConstants.BROADCAST_KEY.KEYBOOST)) { //gpsConf.gpsBoost = intent.getBooleanExtra(ServicesConstants.BROADCAST_KEY.KEYBOOST, false) - gpsConf.gpsBoost = true + sendConfBLE(2) } else { - gpsConf.gpsBoost = false - }*/ - gpsConf.gpsBoost = bundle.getBoolean(ServicesConstants.BROADCAST_KEY.KEYBOOST) - sendConfBLE(gpsConf) - Log.v(LOG_TAG, "Received Tasker Intent : Boost ${gpsConf.gpsBoost}") - } - } - - fun storeGPX() - { - if(gpxopened) { - if(!gpsverbose and locationReceived) - { - //writeGPX("${SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'").format(Date())} $currentLatitude $currentLongitude $currentElevation m\n") - writeGPX("$currentElevation\n") - locationReceived = false - qualityReceived = false - } else if(gpsverbose and locationReceived and qualityReceived) { - //writeGPX("${SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'").format(Date())} $currentLatitude $currentLongitude $currentElevation m\n") - //writeGPX("$currentEHPE m $currentEVPE m $currentHDOP $currentVDOP $currentSatused/$currentSatview $currentElevationGPS m\n") - //if(hrenable) { writeGPX("$currentHR bpm\n")} - //if(tempenable) { writeGPX("${currentTemperature}°C\n")} - writeGPX("$currentElevation\n" + - "\n") - if(hrenable or tempenable) - { - writeGPX("") - if(hrenable) - { - writeGPX("$currentHR") - } - if(tempenable) - { - writeGPX("$currentTemperature") - } - writeGPX("\n") - } - - writeGPX("$currentEHPE$currentEVPE$currentHDOP$currentVDOP$currentSatused$currentSatview$currentElevationGPS\n") - writeGPX("\n\n") - locationReceived = false - qualityReceived = false + sendConfBLE(1) } - } - } + //gpsConf.gpsBoost = bundle.getBoolean(ServicesConstants.BROADCAST_KEY.KEYBOOST) - fun writeGPX(str: String) - { - try { - gpxoutputstream.write(str.toByteArray()) - } catch (e: FileNotFoundException) { - e.printStackTrace() - } catch (e: IOException) { - e.printStackTrace() + //Log.v(LOG_TAG, "Received Tasker Intent : Boost ${gpsConf.gpsBoost}") } - } override fun onCreate() { super.onCreate() + sharedPreferences = baseContext.getSharedPreferences("blegps_config", + AppCompatActivity.MODE_PRIVATE + ) + mockGPS = MockLocationProvider(LocationManager.GPS_PROVIDER, baseContext) val brReceiver = object : BroadcastReceiver() { @@ -177,7 +117,6 @@ class BLEMockLocationService : Service() { when (intent?.action) { ServicesConstants.BROADCAST_FILTER.FILTERLOCATION -> locationChanged(intent) ServicesConstants.BROADCAST_FILTER.FILTERQUALITY-> qualityChanged(intent) - ServicesConstants.BROADCAST_FILTER.FILTERBTHRM-> HRChanged(intent) ServicesConstants.BROADCAST_FILTER.FILTERTEMP-> tempChanged(intent) ServicesConstants.BROADCAST_FILTER.FILTERBMP-> bmpStatusChanged(intent) @@ -190,7 +129,6 @@ class BLEMockLocationService : Service() { val manager = LocalBroadcastManager.getInstance(this) manager.registerReceiver(brReceiver, IntentFilter(ServicesConstants.BROADCAST_FILTER.FILTERLOCATION)) manager.registerReceiver(brReceiver, IntentFilter(ServicesConstants.BROADCAST_FILTER.FILTERQUALITY)) - manager.registerReceiver(brReceiver, IntentFilter(ServicesConstants.BROADCAST_FILTER.FILTERBTHRM)) manager.registerReceiver(brReceiver, IntentFilter(ServicesConstants.BROADCAST_FILTER.FILTERTEMP)) manager.registerReceiver(brReceiver, IntentFilter(ServicesConstants.BROADCAST_FILTER.FILTERBMP)) //pBLE.registerBMP() @@ -200,11 +138,10 @@ class BLEMockLocationService : Service() { if(intent.action == ServicesConstants.MOCKSERVICEACTION.STARTFOREGROUND_ACTION) { Log.i(LOG_TAG, "Received Start Foreground Intent ") - // val intentNotif = Intent(this, MainActivity::class.java) -// intentNotif.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK - // intentNotif.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACT - - //val pendingIntent = PendingIntent.getActivity(this, 0, intentNotif, 0) + val startIntent = Intent(this, MainActivity::class.java) + startIntent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT) + val contentIntent = PendingIntent.getActivity(this, 0, startIntent, + PendingIntent.FLAG_UPDATE_CURRENT) if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { @@ -225,7 +162,8 @@ class BLEMockLocationService : Service() { .setContentTitle("BLE GPS") .setContentText("BLE & Mock active") .setPriority(NotificationCompat.PRIORITY_DEFAULT) - //.setContentIntent(pendingIntent) + .setContentIntent(contentIntent) + .setAutoCancel(false) .build() pBLE = BLEProvider(application, baseContext) @@ -239,7 +177,9 @@ class BLEMockLocationService : Service() { stopSelf() } else if(intent.action == ServicesConstants.MOCKSERVICEACTION.TASKER_ACTION){ Log.i(LOG_TAG, "intent action : ${intent.action}") - taskerChanged(intent.extras) + if(this::pBLE.isInitialized) { + taskerChanged(intent.extras) + } } return START_STICKY } @@ -271,103 +211,25 @@ class BLEMockLocationService : Service() { pBLE.sendCalibrate(buffer.array()) } - fun HRStatusChanged(enable: Boolean) - { - hrenable = enable - } - - fun openGPX(datefilename: String) { - //val datefilename: String = SimpleDateFormat("yyyyMMdd_HHmmss").format(Date()) - var gpxfilename = File( - Environment.getExternalStorageDirectory().path + File.separator + "BTGPS", - datefilename + ".gpx" - ) - var gpxdir = File(Environment.getExternalStorageDirectory().path + File.separator + "BTGPS") - var success = true; - if (!gpxdir.exists()) { - success = gpxdir.mkdir(); - } - - if (success) { - if(!gpxfilename.exists()) { - try { - gpxoutputstream = FileOutputStream(gpxfilename, true) - //val gpxheader = "GPX Header\n" - val gpxheader = - "\n" + - "\n" + - "" + - "${datefilename}" + - "${datefilename}\n" + - "\n" + - "\n" + - "\n" + - "${datefilename}\n" + - "\n" - writeGPX(gpxheader) - } catch (e: FileNotFoundException) { - e.printStackTrace() - } catch (e: IOException) { - e.printStackTrace() - } - } else { - try { - gpxoutputstream = FileOutputStream(gpxfilename, true) - } catch (e: FileNotFoundException) { - e.printStackTrace() - } catch (e: IOException) { - e.printStackTrace() - } - } - gpxopened = true - } - } - - fun closeGPX() - { - //val gpxfooter = "GPX Footer\n" - val gpxfooter = "\n" - writeGPX(gpxfooter) - gpxoutputstream.close() - gpxopened = false - } - - //fun sendConfBLE(bmpnrf: Boolean, bmpble: Boolean, bmp2gps: Boolean, exttemp: Boolean, gpsble: Boolean, gpsbleverb: Boolean, gpsserial: Boolean, gpsmode: Int, gpspoller: Short, gpssendbt: Short, bmppoller: Short) { - fun sendConfBLE(gpsConfNew: GPSConfiguration) { - gpsConf = gpsConfNew - val buffer = ByteBuffer.allocate(8) + //fun sendConfBLE(bmpnrf: Boolean, bmpble: Boolean, bmp2gps: Boolean, exttemp: Boolean, gpsble: Boolean, gpsbleverb: Boolean, gpsserial: Boolean, gpsmode: Int, gpspoller: Short, gpssendbt: Short, bmppoller: Short) { + fun sendConfBLE(mode: Int) { + val buffer = ByteBuffer.allocate(2) buffer.order(ByteOrder.LITTLE_ENDIAN) var activateByte1: Byte = 0 var activateByte2: Byte = 0 - if(gpsConf.bmpNrf) { activateByte1 = activateByte1.or(0x01) } - if(gpsConf.bmpBT) { activateByte1 = activateByte1.or(0x02) } - if(gpsConf.bmp2gps) { activateByte1 = activateByte1.or(0x04) } - if(gpsConf.extTemp) { activateByte1 = activateByte1.or(0x08) } - - if(gpsConf.gpsBLE) { activateByte2 = activateByte2.or(0x01) } - if(gpsConf.gpsVerbose) { activateByte2 = activateByte2.or(0x02) } - if(gpsConf.gpsSerial) { activateByte2 = activateByte2.or(0x04) } - if(gpsConf.gpsMode == 1 || gpsConf.gpsBoost) { - activateByte2 = activateByte2.or(0x08) - } else if(gpsConf.gpsMode == 2) { - activateByte2 = activateByte2.or(0x10) + if(sharedPreferences.getBoolean("swbmp2gps", false)) { activateByte1 = activateByte1.or(0x01) } + if(mode == 1) { + activateByte2 = activateByte2.or(0x01) + } else if(mode == 2) { + activateByte2 = activateByte2.or(0x02) + } else if(mode == 3) { + activateByte2 = activateByte2.or(0x04) } buffer.put(activateByte1) buffer.put(activateByte2) - if(gpsConf.gpsBoost) { - buffer.putShort(4) - buffer.putShort(gpsConf.bmpPollerSend) - buffer.putShort(4) - } else { - buffer.putShort(gpsConf.gpsPollerSend) - buffer.putShort(gpsConf.bmpPollerSend) - buffer.putShort(gpsConf.gpsSendBTSend) - } + pBLE.sendConf(buffer.array()) } diff --git a/app/src/main/java/net/nigreon/blegps/BLEProvider.kt b/app/src/main/java/net/nigreon/blegps/BLEProvider.kt index 835aa97..3c6e0ad 100644 --- a/app/src/main/java/net/nigreon/blegps/BLEProvider.kt +++ b/app/src/main/java/net/nigreon/blegps/BLEProvider.kt @@ -3,19 +3,19 @@ import android.app.Application import android.bluetooth.BluetoothGatt import android.content.Context import android.content.Intent +import android.content.SharedPreferences import android.support.v4.content.LocalBroadcastManager import android.util.Log import com.clj.fastble.BleManager import com.clj.fastble.data.BleDevice import com.clj.fastble.exception.BleException -import com.clj.fastble.callback.BleGattCallback -import com.clj.fastble.callback.BleNotifyCallback -import com.clj.fastble.callback.BleReadCallback -import com.clj.fastble.callback.BleWriteCallback import java.nio.ByteBuffer import java.nio.ByteOrder import android.os.CountDownTimer import android.os.Handler +import android.support.v7.app.AppCompatActivity +import com.clj.fastble.callback.* +import com.clj.fastble.scan.BleScanRuleConfig class BLEProvider(val application: Application, val baseContext: Context) @@ -36,13 +36,17 @@ class BLEProvider(val application: Application, val baseContext: Context) private var connected = false private var reconnectcount = 0 - private val LOG_TAG = "BLEProvider" //private lateinit var baseContext: Context + private lateinit var sharedPreferences: SharedPreferences init { + sharedPreferences = baseContext.getSharedPreferences("blegps_config", + AppCompatActivity.MODE_PRIVATE + ) + BleManager.getInstance().enableBluetooth() connectBLE() } @@ -50,7 +54,27 @@ class BLEProvider(val application: Application, val baseContext: Context) Handler().postDelayed(function, delay) } - private fun connectBLE() + private fun connectBLE() { + val scanRuleConfig = BleScanRuleConfig.Builder() + //.setServiceUuids(serviceUuids) + //.setDeviceName(true, names) + //.setDeviceMac(mac) + //.setAutoConnect(isAutoConnect) + .setScanTimeOut(5000) + .build() + BleManager.getInstance().initScanRule(scanRuleConfig) + + BleManager.getInstance().scan(object : BleScanCallback() { + override fun onScanStarted(success: Boolean) {} + override fun onScanning(bleDevice: BleDevice) {} + override fun onScanFinished(scanResultList: List) { + connectBLE2() + } + }) + + } + + private fun connectBLE2() { //BleManager.getInstance().init(application) /*BleManager.getInstance() @@ -59,7 +83,8 @@ class BLEProvider(val application: Application, val baseContext: Context) //BleManager.getInstance().operateTimeout = 5000 //BleManager.getInstance().connect("24:6F:28:16:C1:F2", object : BleGattCallback() { - BleManager.getInstance().connect("E9:8E:8A:12:6F:3F", object : BleGattCallback() { + var macaddr = sharedPreferences.getString("macaddr", null) + BleManager.getInstance().connect(macaddr, object : BleGattCallback() { override fun onStartConnect() { } @@ -266,17 +291,18 @@ class BLEProvider(val application: Application, val baseContext: Context) val buffer = ByteBuffer.wrap(data) buffer.order(ByteOrder.LITTLE_ENDIAN) //val flags = buffer.short - val sat_view: Byte = buffer.get().toUByte().toByte() - val sat_used: Byte = buffer.get().toUByte().toByte() + //val sat_view: Byte = buffer.get().toUByte().toByte() + //val sat_used: Byte = buffer.get().toUByte().toByte() val ehpe: Float = buffer.int.toUInt().toFloat()/100.0f val evpe: Float = buffer.int.toUInt().toFloat()/100.0f val hdop: Float = buffer.get().toUByte().toByte()*2/10.0f val vdop: Float = buffer.get().toUByte().toByte()*2/10.0f val elevation_gps: Double = buffer.int/100.0 - Log.v(LOG_TAG, "PQ $sat_view $sat_used $ehpe $evpe $hdop $vdop $elevation_gps") + Log.v(LOG_TAG, "PQ $ehpe $evpe $hdop $vdop $elevation_gps") LocalBroadcastManager.getInstance(baseContext).sendBroadcast( - Intent(ServicesConstants.BROADCAST_FILTER.FILTERQUALITY).putExtra(ServicesConstants.BROADCAST_KEY.KEYQUALITYSATVIEW, sat_view) - .putExtra(ServicesConstants.BROADCAST_KEY.KEYQUALITYSATUSED, sat_used) + Intent(ServicesConstants.BROADCAST_FILTER.FILTERQUALITY) + //.putExtra(ServicesConstants.BROADCAST_KEY.KEYQUALITYSATVIEW, sat_view) + //.putExtra(ServicesConstants.BROADCAST_KEY.KEYQUALITYSATUSED, sat_used) .putExtra(ServicesConstants.BROADCAST_KEY.KEYQUALITYEHPE, ehpe) .putExtra(ServicesConstants.BROADCAST_KEY.KEYQUALITYEVPE, evpe) .putExtra(ServicesConstants.BROADCAST_KEY.KEYQUALITYHDOP, hdop) @@ -308,13 +334,14 @@ class BLEProvider(val application: Application, val baseContext: Context) val buffer = ByteBuffer.wrap(data) buffer.order(ByteOrder.LITTLE_ENDIAN) LocalBroadcastManager.getInstance(baseContext).sendBroadcast( - Intent(ServicesConstants.BROADCAST_FILTER.FILTERSAT).putExtra(ServicesConstants.BROADCAST_KEY.KEYSATGPSALL, buffer.get()) + Intent(ServicesConstants.BROADCAST_FILTER.FILTERSAT) + //.putExtra(ServicesConstants.BROADCAST_KEY.KEYSATGPSALL, buffer.get()) .putExtra(ServicesConstants.BROADCAST_KEY.KEYSATGPSUSED, buffer.get()) - .putExtra(ServicesConstants.BROADCAST_KEY.KEYSATSBASALL, buffer.get()) - .putExtra(ServicesConstants.BROADCAST_KEY.KEYSATSBASUSED, buffer.get()) - .putExtra(ServicesConstants.BROADCAST_KEY.KEYSATGLONASSALL, buffer.get()) + //.putExtra(ServicesConstants.BROADCAST_KEY.KEYSATSBASALL, buffer.get()) + //.putExtra(ServicesConstants.BROADCAST_KEY.KEYSATSBASUSED, buffer.get()) + //.putExtra(ServicesConstants.BROADCAST_KEY.KEYSATGLONASSALL, buffer.get()) .putExtra(ServicesConstants.BROADCAST_KEY.KEYSATGLONASSUSED, buffer.get()) - .putExtra(ServicesConstants.BROADCAST_KEY.KEYSATGALILEOALL, buffer.get()) + //.putExtra(ServicesConstants.BROADCAST_KEY.KEYSATGALILEOALL, buffer.get()) .putExtra(ServicesConstants.BROADCAST_KEY.KEYSATGALILEOUSED, buffer.get()) ) } diff --git a/app/src/main/java/net/nigreon/blegps/GPSConfiguration.kt b/app/src/main/java/net/nigreon/blegps/GPSConfiguration.kt index 2968ce3..78ee4ab 100644 --- a/app/src/main/java/net/nigreon/blegps/GPSConfiguration.kt +++ b/app/src/main/java/net/nigreon/blegps/GPSConfiguration.kt @@ -1,16 +1,6 @@ package net.nigreon.blegps class GPSConfiguration { - var bmpNrf: Boolean = false - var bmpBT: Boolean = false var bmp2gps: Boolean = false - var extTemp: Boolean = false - var gpsBLE: Boolean = false - var gpsVerbose: Boolean = false - var gpsSerial: Boolean = false var gpsMode: Int = 0 - var gpsBoost: Boolean = false - var gpsPollerSend: Short = 0 - var gpsSendBTSend: Short = 0 - var bmpPollerSend: Short = 0 } \ No newline at end of file diff --git a/app/src/main/java/net/nigreon/blegps/MainActivity.kt b/app/src/main/java/net/nigreon/blegps/MainActivity.kt index 9c9f831..1337892 100644 --- a/app/src/main/java/net/nigreon/blegps/MainActivity.kt +++ b/app/src/main/java/net/nigreon/blegps/MainActivity.kt @@ -35,17 +35,12 @@ class MainActivity : AppCompatActivity() { private lateinit var mBoundService: BLEMockLocationService var mServiceBound = false - private lateinit var mBoundServiceHR: BLEHRService - var mServiceBoundHR = false - var currentPressure: Int = -1 var currentTemperature: Float = -1.0f var BTConnected = false - var BTHRConnected = false var lastLocation: Location = Location("LastLocation") - private lateinit var gpxfilename: String - private var gpxopened = false + var resumeActivityState: Boolean = true; private lateinit var sharedPreferences: SharedPreferences @@ -70,16 +65,6 @@ class MainActivity : AppCompatActivity() { mServiceBound = false } - fun disconnectBTHR() - { - Intent(this, BLEHRService::class.java).also { intent -> - intent.action = ServicesConstants.HRSERVICEACTION.STOPFOREGROUND_ACTION - startService(intent) - } - unbindService(mServiceConnectionHR) - mServiceBoundHR = false - } - fun filter01changed(intent: Intent) { Log.v(LOG_TAG, "Filter01 Broadcast received") @@ -104,46 +89,19 @@ class MainActivity : AppCompatActivity() { val connected = intent.getBooleanExtra(ServicesConstants.BROADCAST_KEY.KEYBTSTATUS,false) if(connected) { BTConnected=true + if(resumeActivityState == true) { sendGPSModeToBLEService(3) } text01.text = "BT Connected" + buttonconnectbt.text = "Disconnect" Log.v(LOG_TAG, "BT Connected Broadcast received") - mBoundService.HRStatusChanged(BTHRConnected) - sendConfToBLEService() - if(swlog2file.isChecked()) - { - mBoundService.openGPX(gpxfilename) - gpxopened = true - } } else { text01.text = "BT Disconnected" + buttonconnectbt.text = "Connect" Log.v(LOG_TAG, "BT Disconnected Broadcast received") BTConnected=false - swblepower.setChecked(false) } writeBMPText() } - fun BTChangedHR(intent: Intent) - { - val connected = intent.getBooleanExtra(ServicesConstants.BROADCAST_KEY.KEYBTSTATUSHR,false) - if(connected) { - BTHRConnected=true - text01.text = "BT HR Connected" - Log.v(LOG_TAG, "BT HR Connected Broadcast received") - if(BTConnected) { mBoundService.HRStatusChanged(true) } - } else { - text01.text = "BT HR Disconnected" - Log.v(LOG_TAG, "BT HR Disconnected Broadcast received") - BTHRConnected=false - if(BTConnected) { mBoundService.HRStatusChanged(false) } - } - writeBMPText() - } - - fun BTChangedHRM(intent: Intent) - { - texthr.text = intent.getByteExtra(ServicesConstants.BROADCAST_KEY.KEYBTHRM,0).toString() + " bpm" - } - private fun convertLatLon(latitude: Double, longitude: Double): String { val builder = StringBuilder() @@ -204,11 +162,6 @@ class MainActivity : AppCompatActivity() { textlocation.text = "${convertLatLon(currentLatitude, currentLongitude)} $currentElevation m \n $currentLatitude $currentLongitude $currentElevation m" textspeedheading.text = "$currentSpeed km/h $currentHeading° ${currentLocation.distanceTo(lastLocation)} m" lastLocation = currentLocation - - if(swblegpsverbose.isChecked == false) { - textquality.text = "$currentEHPE m" - textsatellites.text = "Satellites in verbose" - } } fun writeQualityText(intent: Intent) @@ -217,23 +170,16 @@ class MainActivity : AppCompatActivity() { val currentEVPE = intent.getFloatExtra(ServicesConstants.BROADCAST_KEY.KEYQUALITYEVPE,-1.0f) val currentHDOP = intent.getFloatExtra(ServicesConstants.BROADCAST_KEY.KEYQUALITYHDOP,-1.0f) val currentVDOP = intent.getFloatExtra(ServicesConstants.BROADCAST_KEY.KEYQUALITYVDOP,-1.0f) - val sat_view = intent.getByteExtra(ServicesConstants.BROADCAST_KEY.KEYQUALITYSATVIEW,-1) - val sat_used = intent.getByteExtra(ServicesConstants.BROADCAST_KEY.KEYQUALITYSATUSED,-1) val elevation_gps = intent.getDoubleExtra(ServicesConstants.BROADCAST_KEY.KEYQUALITYELEGPS,-1.0) - textquality.text = "$currentEHPE m $currentEVPE m $currentHDOP $currentVDOP $sat_used/$sat_view $elevation_gps m" + textquality.text = "$currentEHPE m $currentEVPE m $currentHDOP $currentVDOP $elevation_gps m" } fun writeSatText(intent: Intent) { - val gpsall = intent.getByteExtra(ServicesConstants.BROADCAST_KEY.KEYSATGPSALL,-1) val gpsused = intent.getByteExtra(ServicesConstants.BROADCAST_KEY.KEYSATGPSUSED,-1) - val sbasall = intent.getByteExtra(ServicesConstants.BROADCAST_KEY.KEYSATSBASALL,-1) - val sbasused = intent.getByteExtra(ServicesConstants.BROADCAST_KEY.KEYSATSBASUSED,-1) - val glonassall = intent.getByteExtra(ServicesConstants.BROADCAST_KEY.KEYSATGLONASSALL,-1) val glonassused = intent.getByteExtra(ServicesConstants.BROADCAST_KEY.KEYSATGLONASSUSED,-1) - val galileoall = intent.getByteExtra(ServicesConstants.BROADCAST_KEY.KEYSATGALILEOALL,-1) val galileoused = intent.getByteExtra(ServicesConstants.BROADCAST_KEY.KEYSATGALILEOUSED,-1) - textsatellites.text = "GPS: $gpsused/$gpsall SBAS: $sbasused/$sbasall GLONASS: $glonassused/$glonassall GALILEO: $galileoused/$galileoall" + textsatellites.text = "GPS: $gpsused GLONASS: $glonassused GALILEO: $galileoused" } private fun sendCalibrateToBLEService() { @@ -242,72 +188,14 @@ class MainActivity : AppCompatActivity() { mBoundService.sendCalibrateBLE(calibrateval) } } - private fun sendConfToBLEService() + + private fun sendGPSModeToBLEService(gpsmode: Int) { if(BTConnected) { - val bmppollersend: Float = resources.getStringArray(R.array.pollerval)[spinbmp.selectedItemPosition].toFloat() * 4 - var gpspollersend: Float - var gpssendbtsend: Float - var gpsmode: Int - - /*if(swblegpsboost.isChecked) - { - gpspollersend = 4f - gpssendbtsend = 4f - gpsmode = 1 - } else {*/ - gpspollersend = resources.getStringArray(R.array.pollerval)[spingps.selectedItemPosition].toFloat() * 4 - gpssendbtsend = resources.getStringArray(R.array.pollerval)[spingpssendbt.selectedItemPosition].toFloat() * 4 - gpsmode = spingpsmode.selectedItemPosition - //} - - var gpsConf: GPSConfiguration = GPSConfiguration() - - gpsConf.bmpNrf = swbmpnrf.isChecked - gpsConf.bmpBT = swbmpbt.isChecked - gpsConf.bmp2gps = swbmp2gps.isChecked - gpsConf.extTemp = swexttemp.isChecked - gpsConf.gpsBLE = swgpsble.isChecked - gpsConf.gpsVerbose = swblegpsverbose.isChecked - //gpsConf.gpsBoost = swblegpsboost.isChecked - gpsConf.gpsSerial = swgpsserial.isChecked - gpsConf.gpsMode = gpsmode - gpsConf.gpsPollerSend = gpspollersend.toShort() - gpsConf.gpsSendBTSend = gpssendbtsend.toShort() - gpsConf.bmpPollerSend = bmppollersend.toShort() - - mBoundService.sendConfBLE(gpsConf) - + mBoundService.sendConfBLE(gpsmode) } } - private fun sendStopConfToBLEService() - { - if(BTConnected) { - val gpspollersend: Float = - resources.getStringArray(R.array.pollerval)[spingps.selectedItemPosition].toFloat() * 4 - val bmppollersend: Float = - resources.getStringArray(R.array.pollerval)[spinbmp.selectedItemPosition].toFloat() * 4 - val gpssendbtsend: Float = - resources.getStringArray(R.array.pollerval)[spingpssendbt.selectedItemPosition].toFloat() * 4 - var gpsConf: GPSConfiguration = GPSConfiguration() - - gpsConf.bmpNrf = false - gpsConf.bmpBT = false - gpsConf.bmp2gps = false - gpsConf.extTemp = false - gpsConf.gpsBLE = false - gpsConf.gpsVerbose = false - gpsConf.gpsSerial = false - gpsConf.gpsMode = spingpsmode.selectedItemPosition - gpsConf.gpsPollerSend = gpspollersend.toShort() - gpsConf.gpsSendBTSend = gpssendbtsend.toShort() - gpsConf.bmpPollerSend = bmppollersend.toShort() - - mBoundService.sendConfBLE(gpsConf) - - } - } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -326,8 +214,6 @@ class MainActivity : AppCompatActivity() { when (intent?.action) { ServicesConstants.BROADCAST_FILTER.FILTER01 -> filter01changed(intent) ServicesConstants.BROADCAST_FILTER.FILTERBT -> BTChanged(intent) - ServicesConstants.BROADCAST_FILTER.FILTERBTHR -> BTChangedHR(intent) - ServicesConstants.BROADCAST_FILTER.FILTERBTHRM -> BTChangedHRM(intent) ServicesConstants.BROADCAST_FILTER.FILTERTEMP -> temperatureChanged(intent) ServicesConstants.BROADCAST_FILTER.FILTERPRESSURE -> pressureChanged(intent) ServicesConstants.BROADCAST_FILTER.FILTERLOCATION -> writeLocationText(intent) @@ -339,16 +225,14 @@ class MainActivity : AppCompatActivity() { } } - spinbmp.setSelection(11) - spingps.setSelection(3) - spingpsmode.setSelection(1) - spingpssendbt.setSelection(10) - lastLocation.latitude = 0.0 lastLocation.longitude = 0.0 sharedPreferences = baseContext.getSharedPreferences("blegps_config", MODE_PRIVATE) + editbtaddr.setText(sharedPreferences.getString("macaddr", "")) + swbmp2gps.isChecked = sharedPreferences.getBoolean("swbmp2gps", false) + /*sharedPreferences .edit() .putInt("inttest", 64) @@ -396,144 +280,34 @@ class MainActivity : AppCompatActivity() { ) }*/ - swblepower.setOnCheckedChangeListener { _, isChecked -> - if(isChecked) { + buttonconnectbt.setOnClickListener { + if(BTConnected == false && editbtaddr.text.toString() != "") { + sharedPreferences + .edit() + .putString("macaddr", editbtaddr.text.toString()) + .apply() Intent(this, BLEMockLocationService::class.java).also { intent -> bindService(intent, mServiceConnection, Context.BIND_AUTO_CREATE) intent.action = ServicesConstants.MOCKSERVICEACTION.STARTFOREGROUND_ACTION startService(intent) } } else { - sendStopConfToBLEService() - delayFunction({ disconnectBT() }, 1500) + delayFunction({ disconnectBT() }, 1500) } } - swblehrpower.setOnCheckedChangeListener { _, isChecked -> - if(isChecked) { - Intent(this, BLEHRService::class.java).also { intent -> - bindService(intent, mServiceConnectionHR, Context.BIND_AUTO_CREATE) - intent.action = ServicesConstants.HRSERVICEACTION.STARTFOREGROUND_ACTION - startService(intent) - } - } else { - //sendStopConfToBLEService() - delayFunction({ disconnectBTHR() }, 1500) - } - } - - swbmpnrf.setOnCheckedChangeListener { _,_ -> - sendConfToBLEService() - } - swbmpbt.setOnCheckedChangeListener { _, checked -> - if(checked) { - LocalBroadcastManager.getInstance(baseContext).sendBroadcast( - Intent(ServicesConstants.BROADCAST_FILTER.FILTERBMP).putExtra(ServicesConstants.BROADCAST_KEY.KEYBMPSTATUS, true) - ) - } else { - LocalBroadcastManager.getInstance(baseContext).sendBroadcast( - Intent(ServicesConstants.BROADCAST_FILTER.FILTERBMP).putExtra(ServicesConstants.BROADCAST_KEY.KEYBMPSTATUS, false) - ) - } - sendConfToBLEService() - } - swbmp2gps.setOnCheckedChangeListener { _,_ -> - sendConfToBLEService() - } - swexttemp.setOnCheckedChangeListener { _,_ -> - sendConfToBLEService() - } - swgpsble.setOnCheckedChangeListener { _,_ -> - sendConfToBLEService() - } - swblegpsverbose.setOnCheckedChangeListener { _, _ -> - sendConfToBLEService() - } - swgpsserial.setOnCheckedChangeListener { _,_ -> - sendConfToBLEService() - } - /*swblegpsboost.setOnCheckedChangeListener { _,_ -> - sendConfToBLEService() - }*/ - swlog2file.setOnCheckedChangeListener { _, checked -> - if(checked) { - gpxfilename = SimpleDateFormat("yyyyMMdd_HHmmss").format(Date()) - if (BTConnected) { - mBoundService.openGPX(gpxfilename) - gpxopened = true - } - } else { - if(BTConnected) { - mBoundService.closeGPX() - } else if(gpxopened) { - var gpxhandle = File( - Environment.getExternalStorageDirectory().path + File.separator + "BTGPS", - gpxfilename + ".gpx" - ) - var gpxoutputstream = FileOutputStream(gpxhandle, true) - try { - val gpxfooter = "\n" - gpxoutputstream.write(gpxfooter.toByteArray()) - } catch (e: FileNotFoundException) { - e.printStackTrace() - } catch (e: IOException) { - e.printStackTrace() - } - gpxoutputstream.close() - } - gpxopened = false - } - //sendConfToBLEService() - } - - spingpsmode.onItemSelectedListener = object : AdapterView.OnItemSelectedListener { - override fun onNothingSelected(p0: AdapterView<*>?) { - TODO("not implemented") //To change body of created functions use File | Settings | File Templates. - } - - override fun onItemSelected(p0: AdapterView<*>?, p1: View?, p2: Int, p3: Long) { - sendConfToBLEService() - } - - } - - spinbmp.onItemSelectedListener = object : AdapterView.OnItemSelectedListener { - override fun onNothingSelected(p0: AdapterView<*>?) { - TODO("not implemented") //To change body of created functions use File | Settings | File Templates. - } - - override fun onItemSelected(p0: AdapterView<*>?, p1: View?, p2: Int, p3: Long) { - sendConfToBLEService() - } - - } - - spingps.onItemSelectedListener = object : AdapterView.OnItemSelectedListener { - override fun onNothingSelected(p0: AdapterView<*>?) { - TODO("not implemented") //To change body of created functions use File | Settings | File Templates. - } - - override fun onItemSelected(p0: AdapterView<*>?, p1: View?, p2: Int, p3: Long) { - sendConfToBLEService() - } - - } - spingpssendbt.onItemSelectedListener = object : AdapterView.OnItemSelectedListener { - override fun onNothingSelected(p0: AdapterView<*>?) { - TODO("not implemented") //To change body of created functions use File | Settings | File Templates. - } - - override fun onItemSelected(p0: AdapterView<*>?, p1: View?, p2: Int, p3: Long) { - sendConfToBLEService() - } - - } - buttoncalibratebmp2gps.setOnClickListener { //text01.text = editcalibratebmp2gps.text sendCalibrateToBLEService() } + swbmp2gps.setOnClickListener { + sharedPreferences + .edit() + .putBoolean("swbmp2gps", swbmp2gps.isChecked) + .apply() + } + /*startmock.setOnClickListener { //val startIntent = Intent(this,BLEMockLocationService::class.java) //startIntent.action = ServicesConstants.MOCKSERVICEACTION.STARTFOREGROUND_ACTION @@ -566,8 +340,6 @@ class MainActivity : AppCompatActivity() { val manager = LocalBroadcastManager.getInstance(this) manager.registerReceiver(brReceiver, IntentFilter(ServicesConstants.BROADCAST_FILTER.FILTER01)) manager.registerReceiver(brReceiver, IntentFilter(ServicesConstants.BROADCAST_FILTER.FILTERBT)) - manager.registerReceiver(brReceiver, IntentFilter(ServicesConstants.BROADCAST_FILTER.FILTERBTHR)) - manager.registerReceiver(brReceiver, IntentFilter(ServicesConstants.BROADCAST_FILTER.FILTERBTHRM)) manager.registerReceiver(brReceiver, IntentFilter(ServicesConstants.BROADCAST_FILTER.FILTERTEMP)) manager.registerReceiver(brReceiver, IntentFilter(ServicesConstants.BROADCAST_FILTER.FILTERPRESSURE)) manager.registerReceiver(brReceiver, IntentFilter(ServicesConstants.BROADCAST_FILTER.FILTERLOCATION)) @@ -580,9 +352,14 @@ class MainActivity : AppCompatActivity() { override fun onPause() { super.onPause() - if(!swlog2file.isChecked) { - swblegpsverbose.setChecked(false) - } + resumeActivityState = false + sendGPSModeToBLEService(2) + } + + override fun onResume() { + super.onResume() + resumeActivityState = true + sendGPSModeToBLEService(3) } private val mServiceConnection = object : ServiceConnection { @@ -598,17 +375,4 @@ class MainActivity : AppCompatActivity() { } } - private val mServiceConnectionHR = object : ServiceConnection { - - override fun onServiceDisconnected(name: ComponentName) { - mServiceBoundHR = false - } - - override fun onServiceConnected(name: ComponentName, service: IBinder) { - val binderHR = service as BLEHRService.sBinder - mBoundServiceHR = binderHR.getService() - mServiceBoundHR = true - } - } - } diff --git a/app/src/main/java/net/nigreon/blegps/MockLocationProvider.kt b/app/src/main/java/net/nigreon/blegps/MockLocationProvider.kt index 7fa3f19..c8f7819 100644 --- a/app/src/main/java/net/nigreon/blegps/MockLocationProvider.kt +++ b/app/src/main/java/net/nigreon/blegps/MockLocationProvider.kt @@ -4,19 +4,37 @@ import android.content.Context import android.location.Location import android.location.LocationManager import android.os.SystemClock +import android.util.Log class MockLocationProvider(val providerName: String, val ctx: Context) { + private val LOG_TAG = "MockLocationProvider" + private val lm = ctx.getSystemService( Context.LOCATION_SERVICE ) as LocationManager fun start() { - - lm.addTestProvider( - providerName, false, false, false, false, true, - true, true, 0, 5 - ) + try { + lm.removeTestProvider(providerName) + } catch(exception: Exception) { + Log.w(LOG_TAG,"No TestProvider to remove") + } + /* if(providerName in lm.getAllProviders()) { + lm.removeTestProvider(providerName) + }*/ + //try { + lm.addTestProvider( + providerName, false, false, false, false, true, + true, true, 0, 5 + ) + /*} catch() { + lm.removeTestProvider(providerName) + lm.addTestProvider( + providerName, false, false, false, false, true, + true, true, 0, 5 + ) + }*/ lm.setTestProviderEnabled(providerName, true) } diff --git a/app/src/main/java/net/nigreon/blegps/ServicesConstants.kt b/app/src/main/java/net/nigreon/blegps/ServicesConstants.kt index 4ae0109..dc663d1 100644 --- a/app/src/main/java/net/nigreon/blegps/ServicesConstants.kt +++ b/app/src/main/java/net/nigreon/blegps/ServicesConstants.kt @@ -27,8 +27,6 @@ class ServicesConstants { const val FILTER01 = "just.a.filter" const val FILTERBT = "filter.bt" const val FILTERBMP = "filter.bmp" - const val FILTERBTHR = "filter.bthr" - const val FILTERBTHRM = "filter.bthrm" const val FILTERTEMP = "filter.temp" const val FILTERPRESSURE = "filter.pressure" const val FILTERLOCATION = "filter.location" @@ -41,8 +39,6 @@ class ServicesConstants { companion object { const val KEY01 = "key01" const val KEYBTSTATUS = "btstatus" - const val KEYBTSTATUSHR = "btstatushr" - const val KEYBTHRM = "bthrm" const val KEYBMPSTATUS = "bmpstatus" const val KEYTEMP = "temperature" const val KEYPRESSURE = "pressure" @@ -60,13 +56,8 @@ class ServicesConstants { const val KEYQUALITYHDOP = "hdop" const val KEYQUALITYVDOP = "vdop" const val KEYQUALITYELEGPS = "elevation_gps" - const val KEYSATGPSALL = "gpsall" const val KEYSATGPSUSED = "gpsused" - const val KEYSATSBASALL = "sbasall" - const val KEYSATSBASUSED = "sbasused" - const val KEYSATGLONASSALL = "glonassall" const val KEYSATGLONASSUSED = "glonassused" - const val KEYSATGALILEOALL = "galileoall" const val KEYSATGALILEOUSED = "galileoused" } } diff --git a/app/src/main/java/net/nigreon/blegps/TaskerReceiver.kt b/app/src/main/java/net/nigreon/blegps/TaskerReceiver.kt index 4aff95c..eb188fd 100644 --- a/app/src/main/java/net/nigreon/blegps/TaskerReceiver.kt +++ b/app/src/main/java/net/nigreon/blegps/TaskerReceiver.kt @@ -10,14 +10,19 @@ import android.util.Log class TaskerReceiver: BroadcastReceiver() { private val LOG_TAG = "TaskerReceiver" override fun onReceive(context: Context, intent: Intent) { - Log.v(LOG_TAG, "Receive") + val screen = intent.extras.getBoolean("screen") + Log.v(LOG_TAG, "Receive Tasker $screen") + + val serviceIntent = Intent(context, BLEMockLocationService::class.java) serviceIntent.action=ServicesConstants.MOCKSERVICEACTION.TASKER_ACTION - //serviceIntent.putExtras(Intent(ServicesConstants.BROADCAST_FILTER.FILTERTASKER).putExtra(ServicesConstants.BROADCAST_KEY.KEYBOOST, false)) - serviceIntent.putExtras(intent) + serviceIntent.putExtras(Intent(ServicesConstants.BROADCAST_FILTER.FILTERTASKER).putExtra(ServicesConstants.BROADCAST_KEY.KEYBOOST, screen)) + //serviceIntent.putExtras(intent) + //LocalBroadcastManager.getInstance(context).sendBroadcast( - // Intent(ServicesConstants.BROADCAST_FILTER.FILTERTASKER).putExtra(ServicesConstants.BROADCAST_KEY.KEYBOOST, true)) + // Intent(ServicesConstants.BROADCAST_FILTER.FILTERTASKER).putExtra(ServicesConstants.BROADCAST_KEY.KEYBOOST, screen)) ContextCompat.startForegroundService(context, serviceIntent) + } } \ No newline at end of file diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 94fddf9..bfd5a20 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -11,85 +11,40 @@ android:layout_height="match_parent" android:orientation="vertical" tools:context=".MainActivity"> - - - - - - - - - - - - - - - - - - - + android:maxLength="17" + android:inputType="textCapCharacters" /> +