diff --git a/app/src/main/java/io/github/hidroh/splitme/Constants.kt b/app/src/main/java/io/github/hidroh/splitme/Constants.kt index 9c225b4..8c672c9 100644 --- a/app/src/main/java/io/github/hidroh/splitme/Constants.kt +++ b/app/src/main/java/io/github/hidroh/splitme/Constants.kt @@ -1,4 +1,6 @@ package io.github.hidroh.splitme const val ACTION_CHECK_SPLIT_SCREEN = "${BuildConfig.APPLICATION_ID}.intent.action.CHECK_SPLIT_SCREEN" +const val ACTION_SPLIT_SCREEN_CHECKED = "${BuildConfig.APPLICATION_ID}.intent.action.SPLIT_SCREEN_CHECKED" const val ACTION_TOGGLE_SPLIT_SCREEN = "${BuildConfig.APPLICATION_ID}.intent.action.TOGGLE_SPLIT_SCREEN" +const val EXTRA_IS_IN_SPLIT_SCREEN = "${BuildConfig.APPLICATION_ID}.intent.extra.IS_IN_SPLIT_SCREEN" diff --git a/app/src/main/java/io/github/hidroh/splitme/InvisibleActivity.kt b/app/src/main/java/io/github/hidroh/splitme/InvisibleActivity.kt index 767e457..61ce351 100644 --- a/app/src/main/java/io/github/hidroh/splitme/InvisibleActivity.kt +++ b/app/src/main/java/io/github/hidroh/splitme/InvisibleActivity.kt @@ -8,8 +8,12 @@ import androidx.localbroadcastmanager.content.LocalBroadcastManager class InvisibleActivity : Activity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - SplitTileService.splitScreen = isInMultiWindowMode - LocalBroadcastManager.getInstance(this).sendBroadcast(Intent(ACTION_CHECK_SPLIT_SCREEN)) + val broadcastManager = LocalBroadcastManager.getInstance(this) + when(intent.action) { + ACTION_CHECK_SPLIT_SCREEN -> broadcastManager.sendBroadcast(Intent(ACTION_SPLIT_SCREEN_CHECKED) + .putExtra(EXTRA_IS_IN_SPLIT_SCREEN, isInMultiWindowMode)) + ACTION_TOGGLE_SPLIT_SCREEN -> broadcastManager.sendBroadcast(Intent(ACTION_TOGGLE_SPLIT_SCREEN)) + } finish() } } diff --git a/app/src/main/java/io/github/hidroh/splitme/SplitTileService.kt b/app/src/main/java/io/github/hidroh/splitme/SplitTileService.kt index 47335d9..a0547f3 100644 --- a/app/src/main/java/io/github/hidroh/splitme/SplitTileService.kt +++ b/app/src/main/java/io/github/hidroh/splitme/SplitTileService.kt @@ -16,12 +16,13 @@ class SplitTileService : TileService() { get() = LocalBroadcastManager.getInstance(this) private val receiver = object : BroadcastReceiver() { override fun onReceive(context: Context, intent: Intent) { - updateTileState() + updateTileState(intent.getBooleanExtra(EXTRA_IS_IN_SPLIT_SCREEN, false)) } } + private var isActive: Boolean = false override fun onStartListening() { - localBroadcastManager.registerReceiver(receiver, IntentFilter(ACTION_CHECK_SPLIT_SCREEN)) + localBroadcastManager.registerReceiver(receiver, IntentFilter(ACTION_SPLIT_SCREEN_CHECKED)) checkSplitScreen() } @@ -30,29 +31,32 @@ class SplitTileService : TileService() { } override fun onClick() { - if (!enabled()) { - prompt() + if (enabled()) { + updateTileState(!isActive) + toggleAndCollapse() } else { - toggle() - updateTileState() + prompt() } } - private fun toggle() { - localBroadcastManager.sendBroadcast(Intent(ACTION_TOGGLE_SPLIT_SCREEN)) - splitScreen = !splitScreen + private fun toggleAndCollapse() { + startActivityAndCollapse(Intent(this, InvisibleActivity::class.java) + .setAction(ACTION_TOGGLE_SPLIT_SCREEN) + .setFlags(FLAG_ACTIVITY_NEW_TASK)) } - private fun updateTileState() { + private fun updateTileState(active: Boolean) { + isActive = active qsTile?.apply { - state = if (splitScreen) STATE_ACTIVE else STATE_INACTIVE - label = getString(if (splitScreen) R.string.label_on else R.string.label_off) + state = if (isActive) STATE_ACTIVE else STATE_INACTIVE + label = getString(if (isActive) R.string.label_on else R.string.label_off) updateTile() } } private fun checkSplitScreen() { startActivity(Intent(this, InvisibleActivity::class.java) + .setAction(ACTION_CHECK_SPLIT_SCREEN) .setFlags(FLAG_ACTIVITY_LAUNCH_ADJACENT or FLAG_ACTIVITY_NEW_TASK)) } @@ -75,8 +79,4 @@ class SplitTileService : TileService() { } .create()) } - - companion object { - var splitScreen: Boolean = false - } }