Skip to content

Commit 7c1b7a2

Browse files
committed
feat: RecordService
1 parent 46daf5f commit 7c1b7a2

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

42 files changed

+860
-792
lines changed

app/build.gradle.kts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,7 @@ kotlin {
177177
"-opt-in=androidx.compose.animation.graphics.ExperimentalAnimationGraphicsApi",
178178
"-opt-in=androidx.compose.ui.ExperimentalComposeUiApi",
179179
"-opt-in=androidx.compose.foundation.layout.ExperimentalLayoutApi",
180+
"-Xcontext-parameters"
180181
)
181182
}
182183
}
@@ -201,6 +202,7 @@ dependencies {
201202
implementation(libs.androidx.appcompat)
202203
implementation(libs.androidx.core.ktx)
203204
implementation(libs.androidx.lifecycle.runtime.ktx)
205+
implementation(libs.androidx.lifecycle.service)
204206

205207
implementation(libs.compose.ui)
206208
implementation(libs.compose.ui.graphics)
@@ -247,7 +249,6 @@ dependencies {
247249

248250
implementation(libs.utilcodex)
249251
implementation(libs.activityResultLauncher)
250-
implementation(libs.floatingBubbleView)
251252

252253
implementation(libs.destinations.core)
253254
ksp(libs.destinations.ksp)

app/src/main/AndroidManifest.xml

Lines changed: 27 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -133,33 +133,41 @@
133133
</service>
134134

135135
<service
136-
android:name=".debug.ScreenshotService"
136+
android:name=".service.ScreenshotService"
137137
android:exported="false"
138138
android:foregroundServiceType="mediaProjection" />
139139
<service
140-
android:name=".service.ManageService"
140+
android:name=".service.StatusService"
141141
android:exported="false"
142142
android:foregroundServiceType="specialUse">
143143
<property
144144
android:name="android.app.PROPERTY_SPECIAL_USE_FGS_SUBTYPE"
145145
android:value="Display the running state of the application" />
146146
</service>
147147
<service
148-
android:name=".debug.HttpService"
148+
android:name=".service.HttpService"
149149
android:exported="false"
150150
android:foregroundServiceType="specialUse">
151151
<property
152152
android:name="android.app.PROPERTY_SPECIAL_USE_FGS_SUBTYPE"
153153
android:value="Enable the HTTP server to provide external browser connections and debugging" />
154154
</service>
155155
<service
156-
android:name=".debug.FloatingService"
156+
android:name=".service.ButtonService"
157157
android:exported="false"
158158
android:foregroundServiceType="specialUse">
159159
<property
160160
android:name="android.app.PROPERTY_SPECIAL_USE_FGS_SUBTYPE"
161161
android:value="Display a screenshot button for users to actively save screen information." />
162162
</service>
163+
<service
164+
android:name=".service.RecordService"
165+
android:exported="false"
166+
android:foregroundServiceType="specialUse">
167+
<property
168+
android:name="android.app.PROPERTY_SPECIAL_USE_FGS_SUBTYPE"
169+
android:value="Display a text card for users to show current activity info" />
170+
</service>
163171
<service
164172
android:name=".service.GkdTileService"
165173
android:exported="true"
@@ -172,7 +180,7 @@
172180
</intent-filter>
173181
</service>
174182
<service
175-
android:name=".debug.SnapshotTileService"
183+
android:name=".service.SnapshotTileService"
176184
android:exported="true"
177185
android:icon="@drawable/ic_capture"
178186
android:label="@string/capture_snapshot"
@@ -182,7 +190,7 @@
182190
</intent-filter>
183191
</service>
184192
<service
185-
android:name=".debug.HttpTileService"
193+
android:name=".service.HttpTileService"
186194
android:exported="true"
187195
android:icon="@drawable/ic_http"
188196
android:label="@string/http_server"
@@ -192,10 +200,10 @@
192200
</intent-filter>
193201
</service>
194202
<service
195-
android:name=".debug.FloatingTileService"
203+
android:name=".service.ButtonTileService"
196204
android:exported="true"
197205
android:icon="@drawable/ic_radio_button"
198-
android:label="@string/float_button"
206+
android:label="@string/snapshot_button"
199207
android:permission="android.permission.BIND_QUICK_SETTINGS_TILE">
200208
<intent-filter>
201209
<action android:name="android.service.quicksettings.action.QS_TILE" />
@@ -211,9 +219,19 @@
211219
<action android:name="android.service.quicksettings.action.QS_TILE" />
212220
</intent-filter>
213221
</service>
222+
<service
223+
android:name=".service.RecordTileService"
224+
android:exported="true"
225+
android:icon="@drawable/ic_layers"
226+
android:label="@string/record_activity"
227+
android:permission="android.permission.BIND_QUICK_SETTINGS_TILE">
228+
<intent-filter>
229+
<action android:name="android.service.quicksettings.action.QS_TILE" />
230+
</intent-filter>
231+
</service>
214232

215233
<service
216-
android:name=".debug.SnapshotActionService"
234+
android:name=".service.SnapshotActionService"
217235
android:exported="true"
218236
android:foregroundServiceType="specialUse"
219237
tools:ignore="ExportedService">

app/src/main/kotlin/li/songe/gkd/App.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,10 @@ import kotlinx.coroutines.MainScope
2020
import kotlinx.coroutines.flow.MutableStateFlow
2121
import kotlinx.serialization.Serializable
2222
import li.songe.gkd.data.selfAppInfo
23-
import li.songe.gkd.debug.clearHttpSubs
2423
import li.songe.gkd.notif.initChannel
2524
import li.songe.gkd.permission.shizukuOkState
2625
import li.songe.gkd.service.A11yService
26+
import li.songe.gkd.service.clearHttpSubs
2727
import li.songe.gkd.shizuku.initShizuku
2828
import li.songe.gkd.store.initStore
2929
import li.songe.gkd.util.SafeR

app/src/main/kotlin/li/songe/gkd/MainActivity.kt

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -63,13 +63,13 @@ import kotlinx.coroutines.flow.updateAndGet
6363
import kotlinx.coroutines.launch
6464
import kotlinx.coroutines.sync.Mutex
6565
import kotlinx.coroutines.sync.withLock
66-
import li.songe.gkd.debug.FloatingService
67-
import li.songe.gkd.debug.HttpService
68-
import li.songe.gkd.debug.ScreenshotService
6966
import li.songe.gkd.permission.AuthDialog
7067
import li.songe.gkd.permission.updatePermissionState
7168
import li.songe.gkd.service.A11yService
72-
import li.songe.gkd.service.ManageService
69+
import li.songe.gkd.service.ButtonService
70+
import li.songe.gkd.service.HttpService
71+
import li.songe.gkd.service.ScreenshotService
72+
import li.songe.gkd.service.StatusService
7373
import li.songe.gkd.service.fixRestartService
7474
import li.songe.gkd.service.updateDefaultInputAppId
7575
import li.songe.gkd.service.updateLauncherAppId
@@ -160,7 +160,7 @@ class MainActivity : ComponentActivity() {
160160
mainVm
161161
launcher
162162
pickContentLauncher
163-
ManageService.autoStart()
163+
StatusService.autoStart()
164164
lifecycleScope.launch {
165165
storeFlow.map(lifecycleScope) { s -> s.excludeFromRecents }.collect {
166166
activityManager.appTasks.forEach { task ->
@@ -273,8 +273,8 @@ private fun updateServiceRunning() {
273273
fun checkRunning(cls: KClass<*>): Boolean {
274274
return list.any { it.service.className == cls.jvmName }
275275
}
276-
ManageService.isRunning.value = checkRunning(ManageService::class)
277-
FloatingService.isRunning.value = checkRunning(FloatingService::class)
276+
StatusService.isRunning.value = checkRunning(StatusService::class)
277+
ButtonService.isRunning.value = checkRunning(ButtonService::class)
278278
ScreenshotService.isRunning.value = checkRunning(ScreenshotService::class)
279279
HttpService.isRunning.value = checkRunning(HttpService::class)
280280
}

app/src/main/kotlin/li/songe/gkd/MainViewModel.kt

Lines changed: 5 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -22,26 +22,22 @@ import io.ktor.client.statement.bodyAsText
2222
import kotlinx.coroutines.Dispatchers
2323
import kotlinx.coroutines.delay
2424
import kotlinx.coroutines.flow.MutableStateFlow
25-
import kotlinx.coroutines.flow.SharingStarted
26-
import kotlinx.coroutines.flow.debounce
27-
import kotlinx.coroutines.flow.map
28-
import kotlinx.coroutines.flow.stateIn
2925
import kotlinx.coroutines.flow.update
3026
import kotlinx.coroutines.launch
3127
import kotlinx.coroutines.withContext
3228
import li.songe.gkd.data.RawSubscription
3329
import li.songe.gkd.data.SubsItem
3430
import li.songe.gkd.data.importData
3531
import li.songe.gkd.db.DbSet
36-
import li.songe.gkd.debug.FloatingTileService
37-
import li.songe.gkd.debug.HttpTileService
38-
import li.songe.gkd.debug.SnapshotTileService
3932
import li.songe.gkd.permission.AuthReason
4033
import li.songe.gkd.permission.shizukuOkState
34+
import li.songe.gkd.service.ButtonTileService
35+
import li.songe.gkd.service.HttpTileService
4136
import li.songe.gkd.service.MatchTileService
37+
import li.songe.gkd.service.RecordTileService
38+
import li.songe.gkd.service.SnapshotTileService
4239
import li.songe.gkd.shizuku.execCommandForResult
4340
import li.songe.gkd.store.createTextFlow
44-
import li.songe.gkd.store.storeFlow
4541
import li.songe.gkd.ui.component.AlertDialogOptions
4642
import li.songe.gkd.ui.component.InputSubsLinkOption
4743
import li.songe.gkd.ui.component.RuleGroupState
@@ -87,17 +83,6 @@ class MainViewModel : ViewModel() {
8783
}
8884
}
8985

90-
val enableDarkThemeFlow = storeFlow.debounce(300).map { s -> s.enableDarkTheme }.stateIn(
91-
viewModelScope,
92-
SharingStarted.Eagerly,
93-
storeFlow.value.enableDarkTheme
94-
)
95-
val enableDynamicColorFlow = storeFlow.debounce(300).map { s -> s.enableDynamicColor }.stateIn(
96-
viewModelScope,
97-
SharingStarted.Eagerly,
98-
storeFlow.value.enableDynamicColor
99-
)
100-
10186
val dialogFlow = MutableStateFlow<AlertDialogOptions?>(null)
10287
val authReasonFlow = MutableStateFlow<AuthReason?>(null)
10388

@@ -247,7 +232,7 @@ class MainViewModel : ViewModel() {
247232
} ?: return@launchTry
248233
delay(200)
249234
when (qsTileCpt) {
250-
HttpTileService::class.componentName, FloatingTileService::class.componentName -> {
235+
HttpTileService::class.componentName, ButtonTileService::class.componentName, RecordTileService::class.componentName -> {
251236
navigatePage(AdvancedPageDestination)
252237
}
253238

app/src/main/kotlin/li/songe/gkd/data/Snapshot.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import androidx.room.Query
1111
import androidx.room.Update
1212
import kotlinx.coroutines.flow.Flow
1313
import kotlinx.serialization.Serializable
14-
import li.songe.gkd.debug.SnapshotExt
14+
import li.songe.gkd.util.SnapshotExt
1515
import li.songe.gkd.util.format
1616

1717
@Entity(

app/src/main/kotlin/li/songe/gkd/debug/FloatingService.kt

Lines changed: 0 additions & 110 deletions
This file was deleted.

0 commit comments

Comments
 (0)