diff --git a/app/src/main/java/com/github/shingyx/boomswitch/ui/MainActivity.kt b/app/src/main/java/com/github/shingyx/boomswitch/ui/MainActivity.kt index a03ca38..53e66b0 100644 --- a/app/src/main/java/com/github/shingyx/boomswitch/ui/MainActivity.kt +++ b/app/src/main/java/com/github/shingyx/boomswitch/ui/MainActivity.kt @@ -17,6 +17,7 @@ import androidx.activity.result.contract.ActivityResultContracts import androidx.appcompat.app.AppCompatActivity import androidx.core.app.ActivityCompat import androidx.core.content.ContextCompat +import androidx.core.content.pm.ShortcutManagerCompat import com.github.shingyx.boomswitch.BuildConfig import com.github.shingyx.boomswitch.R import com.github.shingyx.boomswitch.data.AppColorTheme @@ -108,11 +109,15 @@ class MainActivity : AppCompatActivity(), CoroutineScope by MainScope() { override fun onCreateOptionsMenu(menu: Menu): Boolean { menuInflater.inflate(R.menu.main_menu, menu) + if (!ShortcutManagerCompat.isRequestPinShortcutSupported(this)) { + menu.findItem(R.id.create_shortcut)?.isVisible = false + } return true } override fun onOptionsItemSelected(item: MenuItem): Boolean { when (item.itemId) { + R.id.create_shortcut -> createShortcut() R.id.choose_theme -> chooseTheme() R.id.open_source_licenses -> showOpenSourceLicenses() R.id.help -> showHelp() @@ -185,6 +190,11 @@ class MainActivity : AppCompatActivity(), CoroutineScope by MainScope() { adapter.updateItems(devicesInfo) } + private fun createShortcut() { + val shortcutInfo = ShortcutActivity.createShortcutInfo(this, Preferences.bluetoothDeviceInfo) + ShortcutManagerCompat.requestPinShortcut(this, shortcutInfo, null) + } + private fun chooseTheme() { val themes = AppColorTheme.entries val themeNames = themes.map { getString(it.descriptionResId) }.toTypedArray() diff --git a/app/src/main/java/com/github/shingyx/boomswitch/ui/ShortcutActivity.kt b/app/src/main/java/com/github/shingyx/boomswitch/ui/ShortcutActivity.kt index e860cd2..0a1873d 100644 --- a/app/src/main/java/com/github/shingyx/boomswitch/ui/ShortcutActivity.kt +++ b/app/src/main/java/com/github/shingyx/boomswitch/ui/ShortcutActivity.kt @@ -5,6 +5,8 @@ import android.content.Intent import android.os.Bundle import android.widget.Toast import androidx.appcompat.app.AppCompatActivity +import androidx.core.content.pm.ShortcutInfoCompat +import androidx.core.graphics.drawable.IconCompat import com.github.shingyx.boomswitch.R import com.github.shingyx.boomswitch.data.BluetoothDeviceInfo import com.github.shingyx.boomswitch.data.BoomClient @@ -66,5 +68,22 @@ class ShortcutActivity : AppCompatActivity(), CoroutineScope by MainScope() { putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, iconRes) } } + + fun createShortcutInfo( + context: Context, + bluetoothDeviceInfo: BluetoothDeviceInfo?, + ): ShortcutInfoCompat { + val shortcutIntent = Intent(ACTION_SWITCH, null, context, ShortcutActivity::class.java) + bluetoothDeviceInfo?.addToIntent(shortcutIntent) + val shortcutId = bluetoothDeviceInfo?.address ?: "last-used" + val shortcutName = bluetoothDeviceInfo?.name ?: context.getString(R.string.app_name) + val icon = IconCompat.createWithResource(context, R.mipmap.ic_launcher) + + return ShortcutInfoCompat.Builder(context, shortcutId) + .setIntent(shortcutIntent) + .setShortLabel(shortcutName) + .setIcon(icon) + .build() + } } } diff --git a/app/src/main/res/menu/main_menu.xml b/app/src/main/res/menu/main_menu.xml index 7156972..b16a333 100644 --- a/app/src/main/res/menu/main_menu.xml +++ b/app/src/main/res/menu/main_menu.xml @@ -1,5 +1,9 @@ + Timed out switching %1$s\'s power. Switching %1$s already in progress + Create shortcut Choose theme Light Dark diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 29bb9ba..4d0ba78 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,5 +1,5 @@ [versions] -agp = "8.12.1" +agp = "8.13.0" appcompat = "1.7.1" constraintlayout = "2.2.1" kotlin = "2.2.10"