diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index d77cd08..10e7148 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -6,6 +6,7 @@
diff --git a/app/src/main/java/com/ray650128/easywindowtest/FloatingWindowHelper.kt b/app/src/main/java/com/ray650128/easywindowtest/FloatingWindowHelper.kt
new file mode 100644
index 0000000..585b68b
--- /dev/null
+++ b/app/src/main/java/com/ray650128/easywindowtest/FloatingWindowHelper.kt
@@ -0,0 +1,69 @@
+package com.ray650128.easywindowtest
+
+import android.view.Gravity
+import android.view.MotionEvent
+import android.view.WindowManager
+import com.hjq.window.EasyWindow
+
+object FloatingWindowHelper {
+
+ private var _isShowing: Boolean = false
+ val isShowing: Boolean
+ get() = _isShowing
+
+ private val window by lazy {
+ EasyWindow>(MyApp.instance).apply {
+ setContentView(R.layout.window_hint)
+ setGravity(Gravity.START or Gravity.TOP)
+ setYOffset(100)
+ setImageDrawable(android.R.id.icon, R.drawable.ic_chicken)
+ setOnTouchListener { window, view, event ->
+ var touch = false
+ when (event.action) {
+ MotionEvent.ACTION_DOWN -> {
+ window.setWindowFlags(
+ WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL or
+ WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS or
+ WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH
+ )
+ window.update()
+ touch = true
+ }
+
+ MotionEvent.ACTION_OUTSIDE -> {
+ window.setWindowFlags(
+ WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE or
+ WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS or
+ WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH
+ )
+ window.update()
+ touch = false
+ }
+
+ else -> {}
+ }
+ touch
+ }
+ }
+ }
+
+ fun show() {
+ _isShowing = true
+ window.show()
+ }
+
+ fun hide() {
+ _isShowing = false
+ window.cancel()
+ }
+
+ fun setXOffset(value: Int) {
+ window.setXOffset(value)
+ window.update()
+ }
+
+ fun setYOffset(value: Int) {
+ window.setYOffset(value)
+ window.update()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/ray650128/easywindowtest/MainActivity.kt b/app/src/main/java/com/ray650128/easywindowtest/MainActivity.kt
index d0ff28b..5fdc035 100644
--- a/app/src/main/java/com/ray650128/easywindowtest/MainActivity.kt
+++ b/app/src/main/java/com/ray650128/easywindowtest/MainActivity.kt
@@ -1,6 +1,7 @@
package com.ray650128.easywindowtest
import android.app.Activity
+import android.content.Context
import android.content.Intent
import android.net.Uri
import androidx.appcompat.app.AppCompatActivity
@@ -20,92 +21,63 @@ class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
+ private val mContext: Context by lazy { this }
+
private val floatingWindowPermission = registerForActivityResult(
ActivityResultContracts.StartActivityForResult()
) { result ->
if (result.resultCode == Activity.RESULT_CANCELED) {
- if (!Settings.canDrawOverlays(this)) {
- binding.btnStep1.isEnabled = !Settings.canDrawOverlays(this)
- binding.btnStep2.isEnabled = Settings.canDrawOverlays(this)
- binding.btnStep3.isEnabled = isFloatWindowShowing
+ if (!Settings.canDrawOverlays(mContext)) {
+ binding.btnStep1.isEnabled = !Settings.canDrawOverlays(mContext)
+ binding.btnStep2.isEnabled = Settings.canDrawOverlays(mContext)
+ binding.btnStep3.isEnabled = FloatingWindowHelper.isShowing
return@registerForActivityResult
}
showOverlayWindow()
}
}
- private var isFloatWindowShowing = false
-
- private val window by lazy {
- EasyWindow>(application).apply {
- setContentView(R.layout.window_hint)
- setGravity(Gravity.START or Gravity.TOP)
- setYOffset(100)
- setImageDrawable(android.R.id.icon, R.drawable.ic_chicken)
- setOnTouchListener { window, view, event ->
- var touch = false
- when (event.action) {
- MotionEvent.ACTION_DOWN -> {
- window.setWindowFlags(
- WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL or
- WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS or
- WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH
- )
- window.update()
- touch = true
- }
-
- MotionEvent.ACTION_OUTSIDE -> {
- window.setWindowFlags(
- WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE or
- WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS or
- WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH
- )
- window.update()
- touch = false
- }
-
- else -> {}
- }
- touch
- }
- }
- }
-
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
- binding.btnStep1.isEnabled = !Settings.canDrawOverlays(this)
- binding.btnStep1.setOnClickListener {
- val intent = Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION)
- intent.data = Uri.parse("package:$packageName")
- floatingWindowPermission.launch(intent)
- }
+ binding.apply {
+ btnStep1.setOnClickListener {
+ val intent = Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION)
+ intent.data = Uri.parse("package:$packageName")
+ floatingWindowPermission.launch(intent)
+ }
- binding.btnStep2.isEnabled = Settings.canDrawOverlays(this)
- binding.btnStep2.setOnClickListener {
- showOverlayWindow()
- }
+ btnStep2.setOnClickListener {
+ showOverlayWindow()
+ }
- binding.btnStep3.isEnabled = isFloatWindowShowing
- binding.btnStep3.setOnClickListener {
- hideOverlayWindow()
+ btnStep3.setOnClickListener {
+ hideOverlayWindow()
+ }
+ }
+ }
+
+ override fun onResume() {
+ super.onResume()
+
+ binding.apply {
+ btnStep1.isEnabled = !Settings.canDrawOverlays(mContext)
+ btnStep2.isEnabled = Settings.canDrawOverlays(mContext) && !FloatingWindowHelper.isShowing
+ btnStep3.isEnabled = FloatingWindowHelper.isShowing
}
}
private fun showOverlayWindow() {
- isFloatWindowShowing = true
- binding.btnStep2.isEnabled = !isFloatWindowShowing
- binding.btnStep3.isEnabled = isFloatWindowShowing
- window.show()
+ FloatingWindowHelper.show()
+ binding.btnStep2.isEnabled = !FloatingWindowHelper.isShowing
+ binding.btnStep3.isEnabled = FloatingWindowHelper.isShowing
}
private fun hideOverlayWindow() {
- isFloatWindowShowing = false
- binding.btnStep2.isEnabled = !isFloatWindowShowing
- binding.btnStep3.isEnabled = isFloatWindowShowing
- window.cancel()
+ FloatingWindowHelper.hide()
+ binding.btnStep2.isEnabled = !FloatingWindowHelper.isShowing
+ binding.btnStep3.isEnabled = FloatingWindowHelper.isShowing
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/ray650128/easywindowtest/MyApp.kt b/app/src/main/java/com/ray650128/easywindowtest/MyApp.kt
new file mode 100644
index 0000000..a70b293
--- /dev/null
+++ b/app/src/main/java/com/ray650128/easywindowtest/MyApp.kt
@@ -0,0 +1,21 @@
+package com.ray650128.easywindowtest
+
+import android.app.Application
+import android.content.Context
+
+class MyApp : Application() {
+
+ override fun onCreate() {
+ super.onCreate()
+ instance = this
+ }
+
+ companion object {
+ private val TAG = MyApp::class.java.simpleName
+
+ var instance: Application? = null
+
+ val appContext: Context
+ get() = instance!!.applicationContext
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index 6df2c5d..a184b1c 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -6,21 +6,39 @@
android:layout_height="match_parent"
tools:context=".MainActivity">
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 9dceb98..9effa9a 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -1,3 +1,3 @@
- EasyWindowTest
+ 懸浮視窗 by 楓小夜
\ No newline at end of file