Skip to content

Commit

Permalink
Merge pull request #210 from simondankelmann/simondankelmann/dbMigration
Browse files Browse the repository at this point in the history
Simondankelmann/db migration
  • Loading branch information
simondankelmann authored Jan 2, 2024
2 parents 9bf1b6f + a155268 commit 72e0aee
Show file tree
Hide file tree
Showing 27 changed files with 140 additions and 387 deletions.
15 changes: 14 additions & 1 deletion .idea/deploymentTargetDropDown.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ android {
minSdk = 26
targetSdk = 34
versionCode = 1
versionName = "1.0.7"
versionName = "1.0.8"

testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
}
Expand Down
Binary file modified app/debug/app-debug.apk
Binary file not shown.
2 changes: 1 addition & 1 deletion app/debug/output-metadata.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
"filters": [],
"attributes": [],
"versionCode": 1,
"versionName": "1.0.7",
"versionName": "1.0.8",
"outputFile": "app-debug.apk"
}
],
Expand Down
Binary file modified app/release/app-release.apk
Binary file not shown.
2 changes: 1 addition & 1 deletion app/release/output-metadata.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
"filters": [],
"attributes": [],
"versionCode": 1,
"versionName": "1.0.7",
"versionName": "1.0.8",
"outputFile": "app-release.apk"
}
],
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -84,10 +84,12 @@ class ContinuityActionModalAdvertisementSetGenerator: IAdvertisementSetGenerator
}

private val _manufacturerId = 76 // 0x004c == 76 = Apple
override fun getAdvertisementSets(): List<AdvertisementSet> {
override fun getAdvertisementSets(inputData: Map<String, String>?): List<AdvertisementSet> {
var advertisementSets: MutableList<AdvertisementSet> = mutableListOf()

_nearbyActions.map { nearbyAction ->
val data = inputData ?: _nearbyActions

data.map { nearbyAction ->
var advertisementSet: AdvertisementSet = AdvertisementSet()
advertisementSet.target = AdvertisementTarget.ADVERTISEMENT_TARGET_IOS
advertisementSet.type = AdvertisementSetType.ADVERTISEMENT_TYPE_CONTINUITY_ACTION_MODALS
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -88,10 +88,12 @@ class ContinuityIos17CrashAdvertisementSetGenerator: IAdvertisementSetGenerator
return advertisementSet
}
}
override fun getAdvertisementSets(): List<AdvertisementSet> {
override fun getAdvertisementSets(inputData: Map<String, String>?): List<AdvertisementSet> {
var advertisementSets: MutableList<AdvertisementSet> = mutableListOf()

_nearbyActions.map { nearbyAction ->
val data = inputData ?: _nearbyActions

data.map { nearbyAction ->
var advertisementSet: AdvertisementSet = AdvertisementSet()
advertisementSet.target = AdvertisementTarget.ADVERTISEMENT_TARGET_IOS
advertisementSet.type = AdvertisementSetType.ADVERTISEMENT_TYPE_CONTINUITY_IOS_17_CRASH
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -100,10 +100,12 @@ class ContinuityNewAirtagPopUpAdvertisementSetGenerator: IAdvertisementSetGenera
}
}

override fun getAdvertisementSets(): List<AdvertisementSet> {
override fun getAdvertisementSets(inputData: Map<String, String>?): List<AdvertisementSet> {
var advertisementSets:MutableList<AdvertisementSet> = mutableListOf()

deviceData.forEach{deviceData ->
val data = inputData ?: deviceData

data.forEach{deviceData ->
val colorMap = getColorMap(deviceData.key)
val prefix = "05" // => NEW AIRTAG

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -96,10 +96,12 @@ class ContinuityNewDevicePopUpAdvertisementSetGenerator: IAdvertisementSetGenera
}
}

override fun getAdvertisementSets(): List<AdvertisementSet> {
override fun getAdvertisementSets(inputData: Map<String, String>?): List<AdvertisementSet> {
var advertisementSets:MutableList<AdvertisementSet> = mutableListOf()

deviceData.forEach{deviceData ->
val data = inputData ?: deviceData

data.forEach{deviceData ->

val prefix = "07" // => NEW DEVICE
val color = "00"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -263,10 +263,12 @@ class ContinuityNotYourDevicePopUpAdvertisementSetGenerator: IAdvertisementSetGe
}
}

override fun getAdvertisementSets(): List<AdvertisementSet> {
override fun getAdvertisementSets(inputData: Map<String, String>?): List<AdvertisementSet> {
var advertisementSets:MutableList<AdvertisementSet> = mutableListOf()

deviceData.forEach{deviceData ->
val data = inputData ?: deviceData

data.forEach{deviceData ->
val colorMap = getColorMap(deviceData.key)
val prefix = "01" // => NOT YOUR DEVICE

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,11 +56,13 @@ class EasySetupBudsAdvertisementSetGenerator:IAdvertisementSetGenerator{
"011716" to "Sleek Black Buds2",
)

override fun getAdvertisementSets():List<AdvertisementSet> {
override fun getAdvertisementSets(inputData: Map<String, String>?): List<AdvertisementSet> {
var advertisementSets:MutableList<AdvertisementSet> = mutableListOf()

val data = inputData ?: _genuineBudsIds

// BUDS
_genuineBudsIds.map {
data.map {
var advertisementSet:AdvertisementSet = AdvertisementSet()
advertisementSet.target = AdvertisementTarget.ADVERTISEMENT_TARGET_SAMSUNG
advertisementSet.type = AdvertisementSetType.ADVERTISEMENT_TYPE_EASY_SETUP_BUDS
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,13 +54,13 @@ class EasySetupWatchAdvertisementSetGenerator:IAdvertisementSetGenerator{
"20" to "Green Watch6 Classic 43m",
)

override fun getAdvertisementSets():List<AdvertisementSet> {
override fun getAdvertisementSets(inputData: Map<String, String>?): List<AdvertisementSet> {
var advertisementSets:MutableList<AdvertisementSet> = mutableListOf()


val data = inputData ?: _genuineWatchIds

// WATCHES
_genuineWatchIds.map {
data.map {
var advertisementSet:AdvertisementSet = AdvertisementSet()
advertisementSet.target = AdvertisementTarget.ADVERTISEMENT_TARGET_SAMSUNG
advertisementSet.type = AdvertisementSetType.ADVERTISEMENT_TYPE_EASY_SETUP_WATCH
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,10 +41,12 @@ class FastPairDebugAdvertisementSetGenerator:IAdvertisementSetGenerator{

val serviceUuid = ParcelUuid(UUID.fromString("0000fe2c-0000-1000-8000-00805f9b34fb"))

override fun getAdvertisementSets():List<AdvertisementSet> {
override fun getAdvertisementSets(inputData: Map<String, String>?): List<AdvertisementSet> {
var advertisementSets:MutableList<AdvertisementSet> = mutableListOf()

_genuineDeviceIds.map {
val data = inputData ?: _genuineDeviceIds

data.map {

var advertisementSet:AdvertisementSet = AdvertisementSet()
advertisementSet.target = AdvertisementTarget.ADVERTISEMENT_TARGET_ANDROID
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -511,10 +511,12 @@ class FastPairDevicesAdvertisementSetGenerator:IAdvertisementSetGenerator{

val serviceUuid = ParcelUuid(UUID.fromString("0000fe2c-0000-1000-8000-00805f9b34fb"))

override fun getAdvertisementSets():List<AdvertisementSet> {
override fun getAdvertisementSets(inputData: Map<String, String>?): List<AdvertisementSet> {
var advertisementSets:MutableList<AdvertisementSet> = mutableListOf()

_genuineDeviceIds.map {
val data = inputData ?: _genuineDeviceIds

data.map {

var advertisementSet:AdvertisementSet = AdvertisementSet()
advertisementSet.target = AdvertisementTarget.ADVERTISEMENT_TARGET_ANDROID
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,10 +55,12 @@ class FastPairNonProductionAdvertisementSetGenerator:IAdvertisementSetGenerator{

val serviceUuid = ParcelUuid(UUID.fromString("0000fe2c-0000-1000-8000-00805f9b34fb"))

override fun getAdvertisementSets():List<AdvertisementSet> {
override fun getAdvertisementSets(inputData: Map<String, String>?): List<AdvertisementSet> {
var advertisementSets:MutableList<AdvertisementSet> = mutableListOf()

_genuineDeviceIds.map {
val data = inputData ?: _genuineDeviceIds

data.map {

var advertisementSet:AdvertisementSet = AdvertisementSet()
advertisementSet.target = AdvertisementTarget.ADVERTISEMENT_TARGET_ANDROID
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,10 +29,12 @@ class FastPairPhoneSetupAdvertisementSetGenerator:IAdvertisementSetGenerator{

val serviceUuid = ParcelUuid(UUID.fromString("0000fe2c-0000-1000-8000-00805f9b34fb"))

override fun getAdvertisementSets():List<AdvertisementSet> {
override fun getAdvertisementSets(inputData: Map<String, String>?): List<AdvertisementSet> {
var advertisementSets:MutableList<AdvertisementSet> = mutableListOf()

_genuineDeviceIds.map {
val data = inputData ?: _genuineDeviceIds

data.map {

var advertisementSet:AdvertisementSet = AdvertisementSet()
advertisementSet.target = AdvertisementTarget.ADVERTISEMENT_TARGET_ANDROID
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,6 @@ package de.simon.dankelmann.bluetoothlespam.AdvertisementSetGenerators
import de.simon.dankelmann.bluetoothlespam.Models.AdvertisementSet

interface IAdvertisementSetGenerator {
fun getAdvertisementSets():List<AdvertisementSet>
fun getAdvertisementSets(inputData: Map<String, String>?):List<AdvertisementSet>

}
Original file line number Diff line number Diff line change
Expand Up @@ -57,10 +57,12 @@ class LovespousePlayAdvertisementSetGenerator:IAdvertisementSetGenerator {

private val _manufacturerId = 255 // 0xFF == 255 == Typo Products, LLC

override fun getAdvertisementSets(): List<AdvertisementSet> {
override fun getAdvertisementSets(inputData: Map<String, String>?): List<AdvertisementSet> {
var advertisementSets: MutableList<AdvertisementSet> = mutableListOf()

lovespousePlays.forEach { lovespousePlay ->
val data = inputData ?: lovespousePlays

data.forEach { lovespousePlay ->
var advertisementSet = AdvertisementSet()
advertisementSet.target = AdvertisementTarget.ADVERTISEMENT_TARGET_LOVESPOUSE
advertisementSet.type = AdvertisementSetType.ADVERTISEMENT_TYPE_LOVESPOUSE_PLAY
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,10 +33,12 @@ class LovespouseStopAdvertisementSetGenerator:IAdvertisementSetGenerator {

private val _manufacturerId = 255 // 0xFF == 255 == Typo Products, LLC

override fun getAdvertisementSets(): List<AdvertisementSet> {
override fun getAdvertisementSets(inputData: Map<String, String>?): List<AdvertisementSet> {
var advertisementSets: MutableList<AdvertisementSet> = mutableListOf()

lovespouseStops.forEach { lovespouseStop ->
val data = inputData ?: lovespouseStops

data.forEach { lovespouseStop ->
var advertisementSet = AdvertisementSet()
advertisementSet.target = AdvertisementTarget.ADVERTISEMENT_TARGET_LOVESPOUSE
advertisementSet.type = AdvertisementSetType.ADVERTISEMENT_TYPE_LOVESPOUSE_STOP
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,23 +22,27 @@ class SwiftPairAdvertisementSetGenerator : IAdvertisementSetGenerator {
// https://github.com/Flipper-XFW/Xtreme-Firmware/blob/dev/applications/external/ble_spam/protocols/swiftpair.c

private val _prependedBytes = StringHelpers.decodeHex("030080")
private var _deviceNames = mutableListOf(
"Device 1",
"Device 2",
"Device 3",
"Device 4",
"Device 5",
"Device 6",
"Device 7",
"Device 8",
"Device 9",
"Device 10")

private val _deviceNames = mapOf(
"Device 1" to "Not used...",
"Device 2" to "Not used...",
"Device 3" to "Not used...",
"Device 4" to "Not used...",
"Device 5" to "Not used...",
"Device 6" to "Not used...",
"Device 7" to "Not used...",
"Device 8" to "Not used...",
"Device 9" to "Not used...",
"Device 10" to "Not used...",
)

private val _manufacturerId = 6 // 0x0006 == 6 = Microsoft
override fun getAdvertisementSets(): List<AdvertisementSet> {
override fun getAdvertisementSets(inputData: Map<String, String>?): List<AdvertisementSet> {
var advertisementSets:MutableList<AdvertisementSet> = mutableListOf()

_deviceNames.map {deviceName ->
val data = inputData ?: _deviceNames

data.map {deviceName ->

var advertisementSet:AdvertisementSet = AdvertisementSet()
advertisementSet.target = AdvertisementTarget.ADVERTISEMENT_TARGET_WINDOWS
Expand All @@ -63,15 +67,15 @@ class SwiftPairAdvertisementSetGenerator : IAdvertisementSetGenerator {

val manufacturerSpecificData = ManufacturerSpecificData()
manufacturerSpecificData.manufacturerId = _manufacturerId
manufacturerSpecificData.manufacturerSpecificData = _prependedBytes.plus(deviceName.toByteArray())
manufacturerSpecificData.manufacturerSpecificData = _prependedBytes.plus(deviceName.key.toByteArray())
advertisementSet.advertiseData.manufacturerData.add(manufacturerSpecificData)
advertisementSet.advertiseData.includeTxPower = false

// Scan Response
// advertisementSet.scanResponse.includeTxPower = false

// General Data
advertisementSet.title = deviceName
advertisementSet.title = deviceName.key

// Callbacks
advertisementSet.advertisingSetCallback = GenericAdvertisingSetCallback()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ import de.simon.dankelmann.bluetoothlespam.Database.Entities.AdvertisingSetParam
import de.simon.dankelmann.bluetoothlespam.Database.Entities.AssociatonCollectionListEntity
import de.simon.dankelmann.bluetoothlespam.Database.Entities.AssociationListSetEntity
import de.simon.dankelmann.bluetoothlespam.Database.Entities.PeriodicAdvertisingParametersEntity
import de.simon.dankelmann.bluetoothlespam.Database.Migrations.Migration_1_2
import de.simon.dankelmann.bluetoothlespam.Helpers.DatabaseHelpers

@androidx.room.Database(
Expand All @@ -56,7 +57,7 @@ import de.simon.dankelmann.bluetoothlespam.Helpers.DatabaseHelpers
AssociatonCollectionListEntity::class,
AssociationListSetEntity::class,
PeriodicAdvertisingParametersEntity::class],
version = 1,
version = 2,
exportSchema = false)
abstract class AppDatabase : RoomDatabase() {

Expand Down Expand Up @@ -94,6 +95,8 @@ abstract class AppDatabase : RoomDatabase() {
private fun buildDatabase(context: Context) =
Room.databaseBuilder(context.applicationContext, AppDatabase::class.java, "BluetoothLeSpamDatabase.db")
.addCallback(seedDatabaseCallback(context))
.addMigrations(Migration_1_2)
//.fallbackToDestructiveMigration()
.build()

private fun seedDatabaseCallback(context: Context): Callback {
Expand Down Expand Up @@ -136,7 +139,7 @@ abstract class AppDatabase : RoomDatabase() {
)

advertisementSetGenerators.forEach{ generator ->
val advertisementSets = generator.getAdvertisementSets()
val advertisementSets = generator.getAdvertisementSets(null)
advertisementSets.forEach{ advertisementSet ->
DatabaseHelpers.saveAdvertisementSet(advertisementSet)
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package de.simon.dankelmann.bluetoothlespam.Database.Migrations

import android.util.Log
import androidx.room.migration.Migration
import androidx.sqlite.db.SupportSQLiteDatabase
import de.simon.dankelmann.bluetoothlespam.AdvertisementSetGenerators.ContinuityActionModalAdvertisementSetGenerator
import de.simon.dankelmann.bluetoothlespam.AppContext.AppContext
import de.simon.dankelmann.bluetoothlespam.Database.AppDatabase
import de.simon.dankelmann.bluetoothlespam.Helpers.DatabaseHelpers

val Migration_1_2 = object : Migration(1,2) {
private val _logTag = "Migration_1_2"


override fun migrate(database: SupportSQLiteDatabase) {
Log.d(_logTag, "Executing Migration...")

val nearbyActionsAdded = mapOf(
"05" to "Apple Watch",
"24" to "Apple Vision Pro",
"2F" to "Connect to other Device",
"21" to "Software Update",
)


val continuityActionModalAdvertisementSetGenerator = ContinuityActionModalAdvertisementSetGenerator()
val nearbyActionsAddedAdvertisementSets = continuityActionModalAdvertisementSetGenerator.getAdvertisementSets(nearbyActionsAdded)

Thread {
synchronized(this) {
AppDatabase.getInstance().isSeeding = true
nearbyActionsAddedAdvertisementSets.forEach{ advertisementSet ->
DatabaseHelpers.saveAdvertisementSet(advertisementSet)
}
AppDatabase.getInstance().isSeeding = false
}
}.start()

Log.d(_logTag, "Finished Executing Migration...")
}
}
Loading

0 comments on commit 72e0aee

Please sign in to comment.