diff --git a/app/build.gradle b/app/build.gradle index 103ce56..c81509c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -23,8 +23,8 @@ android { minSdkVersion 21 targetSdkVersion 35 compileSdk 35 - versionCode 39 - versionName "0.0.23" + versionCode 38 + versionName "0.0.22" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } diff --git a/app/src/main/java/de/jrpie/android/launcher/actions/LauncherAction.kt b/app/src/main/java/de/jrpie/android/launcher/actions/LauncherAction.kt index 1ed6473..4f89758 100644 --- a/app/src/main/java/de/jrpie/android/launcher/actions/LauncherAction.kt +++ b/app/src/main/java/de/jrpie/android/launcher/actions/LauncherAction.kt @@ -82,32 +82,22 @@ enum class LauncherAction( VOLUME_UP( "volume_up", R.string.list_other_volume_up, - R.drawable.baseline_volume_up_24, - { context -> audioVolumeAdjust(context, true)} + R.drawable.baseline_volume_up_24, ::audioVolumeUp ), VOLUME_DOWN( "volume_down", R.string.list_other_volume_down, - R.drawable.baseline_volume_down_24, - { context -> audioVolumeAdjust(context, false)} - ), - TRACK_PLAY_PAUSE( - "play_pause_track", - R.string.list_other_track_play_pause, - R.drawable.baseline_play_arrow_24, - { context -> audioManagerPressKey(context, KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE)} + R.drawable.baseline_volume_down_24, ::audioVolumeDown ), TRACK_NEXT( "next_track", R.string.list_other_track_next, - R.drawable.baseline_skip_next_24, - { context -> audioManagerPressKey(context, KeyEvent.KEYCODE_MEDIA_NEXT)} + R.drawable.baseline_skip_next_24, ::audioNextTrack ), TRACK_PREV( "previous_track", R.string.list_other_track_previous, - R.drawable.baseline_skip_previous_24, - { context -> audioManagerPressKey(context, KeyEvent.KEYCODE_MEDIA_PREVIOUS)} + R.drawable.baseline_skip_previous_24, ::audioPreviousTrack ), EXPAND_NOTIFICATIONS_PANEL( "expand_notifications_panel", @@ -165,32 +155,56 @@ enum class LauncherAction( /* Media player actions */ -private fun audioManagerPressKey(context: Context, key: Int) { - val mAudioManager = context.getSystemService(Context.AUDIO_SERVICE) as AudioManager - val eventTime: Long = SystemClock.uptimeMillis() - val downEvent = - KeyEvent(eventTime, eventTime, KeyEvent.ACTION_DOWN, key, 0) - mAudioManager.dispatchMediaKeyEvent(downEvent) - val upEvent = KeyEvent(eventTime, eventTime, KeyEvent.ACTION_UP, key, 0) - mAudioManager.dispatchMediaKeyEvent(upEvent) +private fun audioNextTrack(context: Context) { + + val mAudioManager = context.getSystemService(Context.AUDIO_SERVICE) as AudioManager + + val eventTime: Long = SystemClock.uptimeMillis() + + val downEvent = + KeyEvent(eventTime, eventTime, KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_MEDIA_NEXT, 0) + mAudioManager.dispatchMediaKeyEvent(downEvent) + + val upEvent = KeyEvent(eventTime, eventTime, KeyEvent.ACTION_UP, KeyEvent.KEYCODE_MEDIA_NEXT, 0) + mAudioManager.dispatchMediaKeyEvent(upEvent) } -private fun audioVolumeAdjust(context: Context, louder: Boolean) { +private fun audioPreviousTrack(context: Context) { + val mAudioManager = context.getSystemService(Context.AUDIO_SERVICE) as AudioManager + + val eventTime: Long = SystemClock.uptimeMillis() + + val downEvent = + KeyEvent(eventTime, eventTime, KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_MEDIA_PREVIOUS, 0) + mAudioManager.dispatchMediaKeyEvent(downEvent) + + val upEvent = + KeyEvent(eventTime, eventTime, KeyEvent.ACTION_UP, KeyEvent.KEYCODE_MEDIA_PREVIOUS, 0) + mAudioManager.dispatchMediaKeyEvent(upEvent) +} + +private fun audioVolumeUp(context: Context) { val audioManager = context.getSystemService(Context.AUDIO_SERVICE) as AudioManager audioManager.adjustStreamVolume( AudioManager.STREAM_MUSIC, - if (louder) { - AudioManager.ADJUST_RAISE - } else { - AudioManager.ADJUST_LOWER - }, + AudioManager.ADJUST_RAISE, AudioManager.FLAG_SHOW_UI ) } +private fun audioVolumeDown(context: Context) { + val audioManager = + context.getSystemService(Context.AUDIO_SERVICE) as AudioManager + + audioManager.adjustStreamVolume( + AudioManager.STREAM_MUSIC, + AudioManager.ADJUST_LOWER, + AudioManager.FLAG_SHOW_UI + ) +} /* End media player actions */ private fun toggleTorch(context: Context) { @@ -306,4 +320,5 @@ private class LauncherActionSerializer : KSerializer { encodeSerializableElement(descriptor, 0, String.serializer(), value.id) } } + } \ No newline at end of file diff --git a/app/src/main/res/drawable/baseline_play_arrow_24.xml b/app/src/main/res/drawable/baseline_play_arrow_24.xml deleted file mode 100644 index ca4e475..0000000 --- a/app/src/main/res/drawable/baseline_play_arrow_24.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 793ef9d..2add7e6 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -28,7 +28,7 @@ 左(顶部) 上(左边缘) 上(右边缘) - 下(左边缘) + 下滑(左边缘) 下(右边缘) 音量加 音量减 @@ -40,7 +40,7 @@ 浏览全部应用 安装应用 没有找到应用市场 - + 日期和时间 选择一个壁纸 换壁纸 保持屏幕常亮 @@ -64,19 +64,19 @@ 选择应用 花几秒时间学下咋用这个启动器吧! 概念 - 该应用是开源的(MIT许可),并在 GitHub 上可用!一定要来看看代码仓库! + 该应用是开源的(MIT许可),并在 GitHub 上可用! \n \n一定要来看看代码仓库! 使用方法 您的主屏幕仅包含本地日期和时间,没有其它纷纷扰扰。 设置 - 我们为您选择了一些默认应用。如果您愿意,现在可以更改它们: + 我们为你选择了一些默认应用程序,你可以在此自定义。 您也可以稍后更改选择。 - 开始! + 起飞! 应用 卸载 应用信息 无法移除应用 移除了选定的应用 - 搜索 + 搜索应用 启动器设置 全部应用 音乐:大声 @@ -85,10 +85,10 @@ 音乐:下一首 啥也不干 教程 - μLauncher 的设计是最小、高效且无干扰。它不付费、无广告、不追踪。 + μLauncher 的设计是最小、高效且无干扰。 \n \n它不付费、无广告、不追踪。 您只需滑动屏幕或按下按钮即可启动应用程序。在下一步向导中选择一些应用程序。 将 μLauncher 设为默认桌面 - 您已经准备好开始了!我希望这对您很有价值!——Finn(Launcher 作者)和 Josia(做了一些改进并维护了 μLauncher 分支) + 您已经准备好开始了! \n \n我希望这对你有很大的价值! \n \n- Finn (Launcher 的作者) \n以及 Josia(做了一些改进并维护了 μLauncher 分支) 双滑动作 使用本地日期格式 显示时间 @@ -101,14 +101,14 @@ 旋转屏幕 应用 展开通知面板 - 错误:无法打开通知栏。这个动作使用的功能并非现有的 Android API 的一部分。不幸的是,它似乎不适用于您的设备。 + 错误:无法打开通知栏。 \n这个动作使用的功能并非现有的 Android API的一部分。不幸的是,它似乎不适用于您的设备。 开关手电筒 未检测到带闪光灯的摄像头。 错误:无法访问闪光灯。 选择锁屏方法 选择锁屏的方法 不要在应用抽屉中显示被绑定到手势的应用 - 此功能需要 Android 6 或更高版本。 + 此功能需要 Android 6.0 或更高版本。 应用程序已隐藏。您可在设置中让它再次显示。 µLauncher 需要是设备管理员才能够锁定屏幕。 这是锁屏动作所必需的。 @@ -149,7 +149,7 @@ 锁屏 文本阴影 双指滑动 - 确定 + 重命名 %1$s 默认 深色 @@ -175,42 +175,4 @@ 错误:锁定屏幕失败。(如果您刚刚升级了应用程序,请尝试在手机设置中手动禁用并重新启用无障碍服务) 在屏幕边缘滑动 将 µLauncher 设为无障碍服务允许其锁定屏幕。请注意,这需要过多的权限。你永远不应该轻易地授予任何应用程序这样的权限。µLauncher 将仅使用无障碍服务功能锁屏。您可以审计源代码。请注意,锁屏也可以通过授予 µLauncher 设备管理员权限来实现,然而,这种方法不适用于以指纹和面部解锁。 - 返回 - 红色 - 蓝色 - 透明度 - 绿色 - 确定 - 动态 - 私人空间 - 私人空间 - 选择颜色 - 颜色 - 报告错误 - ]]> - 锁定私人空间 - V - Λ - 文本 - 网格 - 创建报告 - 解锁私人空间 - 默认 - 颜色 - - 复制到剪贴板 - 此功能需要 Android 15 或更高版本。 - 切换私人空间锁 - 激活无障碍服务 - 正在激活无障碍服务 - 开源许可证 - 开源许可证 - 在应用列表中显示 - 添加快捷方式 - 私人空间已锁定 - 私人空间已解锁 - 私人空间不可用 - µLauncher 需要作为默认的主屏幕来访问私人空间。 - 没有找到处理搜索的应用。 - 无法打开 URL:找不到浏览器。 - + \ 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 3e888e9..870e202 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -254,7 +254,6 @@ Music: Quieter Music: Next Music: Previous - Music: Play / Pause Expand notifications panel Do nothing Lock Screen diff --git a/fastlane/metadata/android/en-US/changelogs/39.txt b/fastlane/metadata/android/en-US/changelogs/39.txt deleted file mode 100644 index f007da7..0000000 --- a/fastlane/metadata/android/en-US/changelogs/39.txt +++ /dev/null @@ -1,5 +0,0 @@ -* Basic support for pinned shortcuts -* New action: Play / pause media playback -* New gestures: Tap and swipe up / down / left / right - -* Improved Chinese translation (Thank you, Symphonic9861!)