Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
107 commits
Select commit Hold shift + click to select a range
9346184
Add comprehensive CLAUDE.md guide for AI assistants
claude Nov 19, 2025
1a454cc
Fix lock/unlock commands for Tedee cylinders
claude Nov 21, 2025
f8677cc
Add detailed logging for unknown BLE notifications
claude Nov 21, 2025
4d6cdb4
Update CLAUDE.md with complete BLE command reference
claude Nov 21, 2025
cd33b23
Update AndroidX libraries (safe updates)
claude Nov 21, 2025
7084ac1
Update Kotlin and Android Gradle Plugin
claude Nov 21, 2025
193f909
Update AndroidX Core library
claude Nov 21, 2025
be37a1b
Update Material Design and ConstraintLayout
claude Nov 21, 2025
2bc02ce
Update networking libraries (Retrofit & OkHttp)
claude Nov 21, 2025
376f570
Bump version to 2.0
claude Nov 21, 2025
a35fecb
Update Java compatibility to version 17
claude Nov 21, 2025
ca7c2d3
Update compileSdk and targetSdk to 35
claude Nov 21, 2025
141a543
Fix Kotlin 2.1.0 type mismatch in BLE commands
claude Nov 21, 2025
5eb1412
Fix sendCommand signature - pass Byte instead of ByteArray
claude Nov 21, 2025
5bc61f5
Add cylinder configuration to Constants
claude Nov 21, 2025
0d40b39
Update CLAUDE.md with v2.0 configuration changes
claude Nov 21, 2025
ce4f7cf
Add Flutter app with Platform Channels integration
claude Nov 21, 2025
ad71f02
Integrate certificate generation into Flutter app
claude Nov 21, 2025
6401db4
Fix compilation errors for Tedee SDK 1.0.0
claude Nov 21, 2025
525417b
Add Gradle 8.9 wrapper configuration
claude Nov 21, 2025
1296fbb
Fix getMobilePublicKey call - remove context parameter
claude Nov 21, 2025
c13cd1a
Add advanced features to Flutter app
claude Nov 21, 2025
70dd66d
Fix compilation errors for SDK methods
claude Nov 21, 2025
7730302
Fix crash when sending BLE commands
claude Nov 21, 2025
3534472
Add missing withContext import
claude Nov 21, 2025
c5c1e68
Request Bluetooth permissions on app start
claude Nov 21, 2025
0a1ff3a
Fix NotProvidedSignedTime crash
claude Nov 21, 2025
ae03eb4
Remove withContext wrapper from SDK calls
claude Nov 21, 2025
e971e3b
Add ProGuard rules to preserve SDK classes
claude Nov 21, 2025
a4e522a
Downgrade Kotlin from 2.1.0 to 1.9.22 for SDK compatibility
claude Nov 21, 2025
6abb721
Disable R8 and enable Multidex for SDK compatibility
claude Nov 21, 2025
28a0898
Fix ILockInteractor DefaultImpls crash by explicitly providing all me…
claude Nov 21, 2025
0a736b2
Add documentation explaining DefaultImpls crash fix
claude Nov 21, 2025
2cbd2b1
Update Flutter and Android dependencies to latest versions
claude Nov 21, 2025
8781238
Fix getLockState to use getReadableLockStatusResult instead of getRea…
claude Nov 25, 2025
9a69538
Add HAS_ACTIVITY_LOGS (0xA5) notification detection and handling
claude Nov 25, 2025
1b2ed74
Implement activity logs download (GET_LOGS_TLV 0x2D) in both apps
claude Nov 25, 2025
d84b28f
Fix activity logs download: read result code from byte[1] instead of …
claude Nov 25, 2025
6d893f3
Add detailed logging for activity logs download and fix button text c…
claude Nov 25, 2025
9f87645
Replace Device Settings with Get Battery (0x0C) in both apps
claude Nov 25, 2025
f875a23
Add background BLE auto-connect with foreground service and persisten…
claude Nov 25, 2025
b1736c0
Fix missing Intent import in MainActivity.kt
claude Nov 25, 2025
78eb15c
Fix infinite BLE scan loop in background auto-connect service
claude Nov 25, 2025
05a2859
Add automatic lock actions based on proximity and state
claude Nov 25, 2025
6155bed
Add UI toggle for auto-actions feature in Flutter app
claude Nov 25, 2025
a593623
Make auto-actions switch always editable with automatic service restart
claude Nov 25, 2025
168a390
Fix app control conflict and add extensive auto-actions debugging
claude Nov 25, 2025
302142b
Fix compilation error: correct action constant names
claude Nov 25, 2025
a16c14e
Add lock state polling for cylinders (auto-actions fix)
claude Nov 25, 2025
61ef6c9
Simplify to single Auto Mode with smart lock actions
claude Nov 26, 2025
47f289c
Read lock state IMMEDIATELY after secure connection established
claude Nov 26, 2025
b6f8a46
Enable control buttons when Auto Mode is active ('illumina')
claude Nov 26, 2025
f056d13
Move Auto Mode to top and show lock state
claude Nov 26, 2025
c858607
Move Lock Configuration to bottom of UI
claude Nov 26, 2025
67049ca
Simplify to single Auto Mode with smart lock actions
claude Nov 26, 2025
f16a91a
Fix Device Information commands to work when Auto Mode is active
claude Nov 26, 2025
8829955
Fix getFirmwareVersion type mismatch in service
claude Nov 26, 2025
bbea6f4
Add command result broadcasts and separate Smart Actions flag
claude Nov 26, 2025
3f51cc3
Add missing SDK extension function imports to TedeeLockForegroundService
claude Nov 26, 2025
d024ac3
Simplify to single Auto Mode with smart lock actions
claude Nov 26, 2025
d80f692
Fix splash freeze by moving receiver to onResume/onPause lifecycle
claude Nov 26, 2025
b03a5de
Add state sync and Auto Mode persistence
claude Nov 26, 2025
d90770c
Fix splash freeze by deferring state sync until Flutter is ready
claude Nov 26, 2025
3346a1d
Defer state sync until after Flutter first frame renders
claude Nov 26, 2025
2577ac0
Avoid initializing lockConnectionManager in onCreate to prevent confl…
claude Nov 26, 2025
d6ee9fa
Add minimalist swipe-based lock control UI
claude Nov 26, 2025
1865ae8
Add debug logging and improve lock state detection
claude Nov 26, 2025
9f8f629
Fix state sync when returning from settings screen
claude Nov 26, 2025
ed3005f
Convert TedeeLockService to singleton with multiple listener support
claude Nov 26, 2025
7c229d7
Add auto-start Auto Mode and integrated debug log viewer
claude Nov 26, 2025
4b506a7
Fix lock state detection for LOCK_CLOSED and LOCK_OPENED states
claude Nov 26, 2025
0c823c0
Fix swipe gesture not triggering lock commands
claude Nov 26, 2025
9d9dac7
Add spinning dot animation to indicate lock operations in progress
claude Nov 26, 2025
042b5f7
Fix: Change SingleTickerProviderStateMixin to TickerProviderStateMixin
claude Nov 26, 2025
f15c185
Improve spinning dot animation visibility and fix circle positioning
claude Nov 26, 2025
4dae49b
Fix: Use _lockState.toLowerCase() instead of undefined stateLower var…
claude Nov 26, 2025
11e16e4
Add debug logging and visual state indicator to diagnose lock state i…
claude Nov 26, 2025
0fd89a1
Fix circle positioning and animation with correct lock states
claude Nov 26, 2025
4ef634b
Add debounce delay and lock_spring_pull state support
claude Nov 26, 2025
bf94e0c
Add directional rotation animation to lock circle
claude Nov 26, 2025
a5602bc
Improve UI: fullscreen mode, cleaner interface, and better circle pos…
claude Nov 26, 2025
55d7911
Unify UI: merge SimpleLockScreen and LockControlScreen into single ex…
claude Nov 26, 2025
74e7012
Simplify UI: remove manual controls, always-on auto mode, minimal set…
claude Nov 27, 2025
0e6dc08
UI improvements: lower circle position, grey icon/splash, notificatio…
claude Nov 27, 2025
61c6e10
Fix UI: grey icon/splash, lower circle position, battery display
claude Nov 27, 2025
886fd38
Make battery level display dynamic with auto-refresh
claude Nov 27, 2025
4ef6b78
Fix: Add notification permission, grey splash, and Bluetooth check
claude Nov 27, 2025
a44bb8b
Fix: Notification permission, splash color, battery display, and firs…
claude Nov 27, 2025
7679807
Fix: Notification permission, splash screen, battery display, and app…
claude Nov 27, 2025
11cec9a
Fix: Implement proper Android 12+ SplashScreen API
claude Nov 27, 2025
25a8349
Docs: Update documentation to reflect completed Flutter app integration
claude Nov 27, 2025
a79c42b
Fix: Splash screen, notification permissions, and app initialization …
claude Nov 27, 2025
e23c8b8
Fix Flutter splash screen blocking by separating UI build from BLE co…
claude Nov 28, 2025
cf0ea2f
Fix splash screen freeze by preventing service from blocking app startup
claude Nov 28, 2025
c701c7e
Fix infinite connection loop by adding delay after launching connecti…
claude Nov 28, 2025
9ccc8a1
Fix: Remove auto-start service at app launch to comply with Android 1…
claude Nov 28, 2025
3e7c4bd
Fix: Auto-start service after 2 second delay to comply with Android 1…
claude Nov 28, 2025
d453cd6
Disable Kotlin native app launcher to prevent opening wrong app
claude Nov 28, 2025
afb561e
Fix splash screen freeze by delaying broadcast receiver registration
claude Nov 28, 2025
3f69623
Fix: Add delay to state sync broadcasts to prevent blocking splash sc…
claude Nov 28, 2025
d86bce7
Fix splash screen properly: build UI first, then listen for broadcast…
claude Nov 28, 2025
ff4e9dd
Fix splash screen freeze: remove polling, fix Int.MAX_VALUE, disable …
claude Nov 28, 2025
bd049fc
Fix: Remove remaining statePollingJob references
claude Nov 28, 2025
c705897
Fix splash screen properly: build UI first, then listen for broadcast…
claude Nov 28, 2025
7a6560b
SIMPLIFIED: Remove background service, use direct connection only
claude Nov 28, 2025
4e4e2ac
Fix: Send connection and lock state to Flutter via method channel
claude Nov 28, 2025
34a2711
Add persistent state: remember last lock state and smart retrieval
claude Nov 28, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
831 changes: 831 additions & 0 deletions CLAUDE.md

Large diffs are not rendered by default.

16 changes: 15 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,25 @@

![lock](https://user-images.githubusercontent.com/81370389/209109383-c9163001-cc5b-418b-be65-87906a3cc11c.jpg)

---

## 🆕 Flutter App Available

**This repository now includes a fully-featured Flutter application** with advanced UI and background service support:

📱 **Location:** [`flutter_app/`](./flutter_app/)
✨ **Features:** Swipe gestures, background service, auto-actions, battery monitoring, activity logs
📖 **Documentation:** [Flutter App README](./flutter_app/README.md)

**Recommended for new development** - The Flutter app provides a modern, cross-platform foundation with enhanced features beyond the native Android example.

---

## Documentation

[Mobile SDK Documentation](https://tedee-com.github.io/tedee-mobile-sdk-android/)

## About
## About (Native Android Example)

This example project was created by the [Tedee](https://tedee.com) team to show you how to operate the Tedee Lock using Bluetooth Low Energy communication protocol.
This project is developed using the Kotlin language and is designed to run on Android devices. It utilizes our Tedee Lock SDK, which can be accessed via the following link: [LINK TO SDK](https://github.com/tedee-com/tedee-mobile-sdk-android).
Expand Down
35 changes: 18 additions & 17 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,14 @@ plugins {

android {
namespace 'tedee.mobile.demo'
compileSdk 34
compileSdk 35

defaultConfig {
applicationId "tedee.mobile.demo"
minSdk 26
targetSdk 34
versionCode 1
versionName "1.0"
targetSdk 35
versionCode 2
versionName "2.0"

testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
Expand All @@ -25,11 +25,11 @@ android {
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
sourceCompatibility JavaVersion.VERSION_17
targetCompatibility JavaVersion.VERSION_17
}
kotlinOptions {
jvmTarget = '1.8'
jvmTarget = '17'
}
buildFeatures {
viewBinding true
Expand All @@ -38,16 +38,17 @@ android {

dependencies {
implementation "com.jakewharton.timber:timber:${timberVersion}"
implementation 'androidx.core:core-ktx:1.12.0'
implementation 'androidx.appcompat:appcompat:1.6.1'
implementation 'com.google.android.material:material:1.11.0'
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
implementation "com.squareup.retrofit2:retrofit:2.9.0"
implementation "com.squareup.retrofit2:converter-gson:2.9.0"
implementation "com.squareup.retrofit2:adapter-rxjava2:2.9.0"
implementation "com.squareup.retrofit2:converter-scalars:2.9.0"
implementation "com.squareup.okhttp3:logging-interceptor:4.11.0"
implementation "androidx.datastore:datastore-preferences:1.0.0"
implementation 'androidx.core:core-ktx:1.15.0'
implementation 'androidx.core:core-splashscreen:1.0.1'
implementation 'androidx.appcompat:appcompat:1.7.1'
implementation 'com.google.android.material:material:1.12.0'
implementation 'androidx.constraintlayout:constraintlayout:2.2.0'
implementation "com.squareup.retrofit2:retrofit:2.11.0"
implementation "com.squareup.retrofit2:converter-gson:2.11.0"
implementation "com.squareup.retrofit2:adapter-rxjava2:2.11.0"
implementation "com.squareup.retrofit2:converter-scalars:2.11.0"
implementation "com.squareup.okhttp3:logging-interceptor:4.12.0"
implementation "androidx.datastore:datastore-preferences:1.2.0"

//Tedee Lock SDK
implementation('com.github.tedee-com:tedee-mobile-sdk-android:1.0.0@aar') { transitive = true }
Expand Down
11 changes: 4 additions & 7 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
android:name="android.permission.ACCESS_COARSE_LOCATION"
tools:node="remove" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />

<application
android:name=".ExampleApplication"
Expand All @@ -22,15 +23,11 @@
android:theme="@style/Theme.TedeeDemo">
<activity
android:name=".MainActivity"
android:exported="true"
android:exported="false"
android:label="@string/app_name"
android:screenOrientation="portrait"
android:theme="@style/Theme.TedeeDemo.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
android:theme="@style/Theme.TedeeDemo.SplashScreen">
<!-- LAUNCHER disabled - use flutter_app instead -->
</activity>

<activity
Expand Down
8 changes: 4 additions & 4 deletions app/src/main/java/tedee/mobile/demo/Constants.kt
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package tedee.mobile.demo

// TODO: fill this data
const val PERSONAL_ACCESS_KEY: String = ""
const val PERSONAL_ACCESS_KEY: String = "snwu6R.eC+Xuad0sx5inRRo0AaZkYe+EURqYpWwrDR3lU5kuNc="
const val PRESET_ACTIVATION_CODE = ""
const val PRESET_SERIAL_NUMBER = ""
const val PRESET_DEVICE_ID = ""
const val PRESET_NAME = ""
const val PRESET_SERIAL_NUMBER = "10530206-030484"
const val PRESET_DEVICE_ID = "273450"
const val PRESET_NAME = "Lock-40C5"
Loading