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