Skip to content

Commit

Permalink
Show more info on QS tile long press (#5008)
Browse files Browse the repository at this point in the history
  • Loading branch information
jpelgrom authored Jan 27, 2025
1 parent 4e8702f commit d27b578
Show file tree
Hide file tree
Showing 3 changed files with 101 additions and 0 deletions.
9 changes: 9 additions & 0 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -445,6 +445,15 @@
android:resource="@xml/provider_paths"/>
</provider>

<activity
android:name=".qs.TilePreferenceActivity"
android:exported="true"
android:permission="android.permission.BIND_QUICK_SETTINGS_TILE">
<intent-filter>
<action android:name="android.service.quicksettings.action.QS_TILE_PREFERENCES" />
</intent-filter>
</activity>

<service
android:name=".qs.Tile1Service"
android:icon="@drawable/ic_stat_ic_notification"
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
package io.homeassistant.companion.android.qs

import android.content.ComponentName
import android.content.Intent
import android.os.Build
import android.os.Bundle
import android.util.Log
import androidx.core.os.BundleCompat
import androidx.lifecycle.lifecycleScope
import dagger.hilt.android.AndroidEntryPoint
import io.homeassistant.companion.android.BaseActivity
import io.homeassistant.companion.android.common.data.servers.ServerManager
import io.homeassistant.companion.android.database.qs.TileDao
import io.homeassistant.companion.android.database.qs.isSetup
import io.homeassistant.companion.android.launch.LaunchActivity
import io.homeassistant.companion.android.settings.SettingsActivity
import io.homeassistant.companion.android.settings.qs.ManageTilesViewModel
import io.homeassistant.companion.android.webview.WebViewActivity
import javax.inject.Inject
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext

@AndroidEntryPoint
class TilePreferenceActivity : BaseActivity() {

companion object {
private const val TAG = "TilePrefActivity"
}

@Inject
lateinit var serverManager: ServerManager

@Inject
lateinit var tileDao: TileDao

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)

var tileId = "-1"
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
intent.extras?.let { extras ->
BundleCompat.getParcelable(extras, Intent.EXTRA_COMPONENT_NAME, ComponentName::class.java)?.let { component ->
try {
val tileClass = Class.forName(component.className)
val tileMap = ManageTilesViewModel.idToTileService
tileMap.filter { it.value == tileClass }.entries.firstOrNull()?.key?.let {
Log.d(TAG, "Tile ID for long press action: $it")
tileId = it
}
} catch (e: Exception) {
Log.e(TAG, "Couldn't get tile ID for component $component", e)
}
}
}
}

lifecycleScope.launch {
val tileData = tileDao.get(tileId)

val intent = if (!serverManager.isRegistered()) {
Intent(this@TilePreferenceActivity, LaunchActivity::class.java)
} else if (tileData?.isSetup == true) {
WebViewActivity.newInstance(
this@TilePreferenceActivity,
path = "entityId:${tileData.entityId}",
serverId = tileData.serverId
)
} else {
SettingsActivity.newInstance(this@TilePreferenceActivity).apply {
putExtra("fragment", "tiles/$tileId")
}
}

withContext(Dispatchers.Main) {
startActivity(intent)
finish()
@Suppress("DEPRECATION")
overridePendingTransition(0, 0) // Disable activity start/stop animation
}
}
}
}
9 changes: 9 additions & 0 deletions automotive/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -435,6 +435,15 @@
android:resource="@xml/provider_paths"/>
</provider>

<activity
android:name=".qs.TilePreferenceActivity"
android:exported="true"
android:permission="android.permission.BIND_QUICK_SETTINGS_TILE">
<intent-filter>
<action android:name="android.service.quicksettings.action.QS_TILE_PREFERENCES" />
</intent-filter>
</activity>

<service
android:name=".qs.Tile1Service"
android:icon="@drawable/ic_stat_ic_notification"
Expand Down

0 comments on commit d27b578

Please sign in to comment.