From 7977a3ba582dc032d1d40b1ba8ea0e3fde9ccf83 Mon Sep 17 00:00:00 2001 From: KindBrave <1773747161@qq.com> Date: Tue, 19 Sep 2023 17:39:54 +0800 Subject: [PATCH] Add broadcast start freeform --- app/build.gradle.kts | 2 + app/src/main/AndroidManifest.xml | 25 +++++++++- .../freeform/receiver/BootReceiver.kt | 22 +++++++++ .../receiver/StartFreeformReceiver.kt | 40 ++++++++++++++++ .../freeform/service/ServiceViewModel.kt | 4 ++ .../freeform/service/SidebarService.kt | 48 +++++++++++++++++++ .../freeform/ui/sidebar/SideBarWindow.kt | 7 +-- 7 files changed, 141 insertions(+), 7 deletions(-) create mode 100644 app/src/main/java/com/sunshine/freeform/receiver/BootReceiver.kt create mode 100644 app/src/main/java/com/sunshine/freeform/receiver/StartFreeformReceiver.kt create mode 100644 app/src/main/java/com/sunshine/freeform/service/SidebarService.kt diff --git a/app/build.gradle.kts b/app/build.gradle.kts index d304e7f..7c825ab 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -54,6 +54,7 @@ dependencies { implementation(libs.room.runtime) implementation(platform(libs.compose.bom)) implementation(platform(libs.compose.bom)) + implementation(libs.hiddenapirefineruntime) androidTestImplementation(platform(libs.compose.bom)) androidTestImplementation(platform(libs.compose.bom)) ksp(libs.room.compiler) @@ -68,6 +69,7 @@ dependencies { androidTestImplementation(platform(libs.compose.bom)) compileOnly(files("libs/XposedBridgeAPI-89.jar")) + compileOnly(projects.hiddenApi) testImplementation(libs.junit) androidTestImplementation(libs.androidx.test.ext.junit) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index e01ad45..47c3966 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -6,6 +6,7 @@ android:name="android.permission.QUERY_ALL_PACKAGES" tools:ignore="QueryAllPackagesPermission" /> + - + android:exported="false" /> + + + + + + + + + + + + + + { override fun compare(p0: AppInfo, p1: AppInfo): Int { return Collator.getInstance(Locale.CHINESE).compare(p0.label, p1.label) diff --git a/app/src/main/java/com/sunshine/freeform/service/SidebarService.kt b/app/src/main/java/com/sunshine/freeform/service/SidebarService.kt new file mode 100644 index 0000000..0186fee --- /dev/null +++ b/app/src/main/java/com/sunshine/freeform/service/SidebarService.kt @@ -0,0 +1,48 @@ +package com.sunshine.freeform.service + +import android.app.Service +import android.content.Context +import android.content.Intent +import android.graphics.PixelFormat +import android.os.IBinder +import android.view.WindowManager +import android.view.WindowManagerHidden + +class SidebarService : Service() { + + private lateinit var viewModel: ServiceViewModel + private val layoutParams = WindowManagerHidden.LayoutParams() + private lateinit var windowManager: WindowManager + + override fun onBind(intent: Intent): IBinder? { + return null + } + + override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int { + viewModel = ServiceViewModel(application) + windowManager = getSystemService(Context.WINDOW_SERVICE) as WindowManager + if (viewModel.getBooleanSp("sideline", false)) initSideLine() + return START_STICKY + } + + /** + * 启动侧边条 + */ + private fun initSideLine() { +// val screenWidth = resources.displayMetrics.widthPixels +// val isLeft = viewModel.getBooleanSp() +// layoutParams.apply { +// type = 2026 +// width = 100 +// height = screenHeight / 5 +// x = -screenWidth / 2 +// y = -screenHeight / 6 +// flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE or +// WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL or +// WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS or +// WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED +// privateFlags = WindowManagerHidden.LayoutParams.SYSTEM_FLAG_SHOW_FOR_ALL_USERS or WindowManagerHidden.LayoutParams.PRIVATE_FLAG_IS_ROUNDED_CORNERS_OVERLAY or WindowManagerHidden.LayoutParams.PRIVATE_FLAG_USE_BLAST or WindowManagerHidden.LayoutParams.PRIVATE_FLAG_TRUSTED_OVERLAY +// format = PixelFormat.RGBA_8888 +// } + } +} \ No newline at end of file diff --git a/freeform-server/src/main/java/io/sunshine0523/freeform/ui/sidebar/SideBarWindow.kt b/freeform-server/src/main/java/io/sunshine0523/freeform/ui/sidebar/SideBarWindow.kt index ea9af5a..8f9c367 100644 --- a/freeform-server/src/main/java/io/sunshine0523/freeform/ui/sidebar/SideBarWindow.kt +++ b/freeform-server/src/main/java/io/sunshine0523/freeform/ui/sidebar/SideBarWindow.kt @@ -8,13 +8,10 @@ import android.os.Handler import android.view.Display import android.view.IRotationWatcher import android.view.View -import android.view.WindowInsetsHidden import android.view.WindowManager import android.view.WindowManagerHidden import io.sunshine0523.freeform.service.SystemServiceHolder import io.sunshine0523.freeform.util.MLog -import java.lang.reflect.Field - /** * @author KindBrave * @since 2023/8/22 @@ -54,7 +51,7 @@ class SideBarWindow( rightView.setBackgroundColor(Color.TRANSPARENT) SideBarTouchListener(this) leftWindowParams.apply { - type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY + type = 2026 width = 100 height = screenHeight / 5 x = -screenWidth / 2 @@ -67,7 +64,7 @@ class SideBarWindow( format = PixelFormat.RGBA_8888 } rightWindowParams.apply { - type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY + type = 2026 width = 100 height = screenHeight / 5 x = screenWidth / 2