From 4959d54f8b94f4f3f0a15ac74984c18a359f7236 Mon Sep 17 00:00:00 2001 From: Finn M Glas Date: Mon, 12 Oct 2020 17:55:17 +0200 Subject: [PATCH] Implement audio track control actions Play next / previous tracks through launcher actions. --- .../java/com/finnmglas/launcher/Functions.kt | 39 +++++++++++++++++++ .../list/other/OtherRecyclerAdapter.kt | 9 ++++- .../SettingsFragmentActionsRecycler.kt | 4 ++ app/src/main/res/values/icons.xml | 3 ++ app/src/main/res/values/strings.xml | 2 + 5 files changed, 56 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/finnmglas/launcher/Functions.kt b/app/src/main/java/com/finnmglas/launcher/Functions.kt index f7a899c..f071af9 100644 --- a/app/src/main/java/com/finnmglas/launcher/Functions.kt +++ b/app/src/main/java/com/finnmglas/launcher/Functions.kt @@ -12,8 +12,10 @@ import android.media.AudioManager import android.net.Uri import android.os.Build import android.os.Bundle +import android.os.SystemClock import android.provider.Settings import android.util.DisplayMetrics +import android.view.KeyEvent import android.view.View import android.view.Window import android.view.WindowManager @@ -23,6 +25,7 @@ import android.widget.Button import android.widget.ImageView import android.widget.Switch import android.widget.Toast +import androidx.annotation.RequiresApi import com.finnmglas.launcher.list.ListActivity import com.finnmglas.launcher.list.apps.AppInfo import com.finnmglas.launcher.list.apps.AppsRecyclerAdapter @@ -219,6 +222,8 @@ fun launch( "choose" -> openAppsList(activity) "volumeUp" -> audioVolumeUp(activity) "volumeDown" -> audioVolumeDown(activity) + "nextTrack" -> audioNextTrack(activity) + "previousTrack" -> audioPreviousTrack(activity) "tutorial" -> openTutorial(activity) } else launchApp(data, activity) // app @@ -226,6 +231,38 @@ fun launch( activity.overridePendingTransition(animationIn, animationOut) } +/* Media player actions */ + +fun audioNextTrack(activity: Activity) { + if (Build.VERSION.SDK_INT >= 19) { // requires Android KitKat + + val mAudioManager = activity.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) + } +} + +fun audioPreviousTrack(activity: Activity) { + if (Build.VERSION.SDK_INT >= 19) { // requires Android KitKat + + val mAudioManager = activity.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) + } +} + fun audioVolumeUp(activity: Activity) { val audioManager = activity.getSystemService(Context.AUDIO_SERVICE) as AudioManager @@ -248,6 +285,8 @@ fun audioVolumeDown(activity: Activity) { ) } +/* --- */ + fun launchApp(packageName: String, context: Context) { val intent = getIntent(packageName, context) diff --git a/app/src/main/java/com/finnmglas/launcher/list/other/OtherRecyclerAdapter.kt b/app/src/main/java/com/finnmglas/launcher/list/other/OtherRecyclerAdapter.kt index cc94637..6e6aad9 100644 --- a/app/src/main/java/com/finnmglas/launcher/list/other/OtherRecyclerAdapter.kt +++ b/app/src/main/java/com/finnmglas/launcher/list/other/OtherRecyclerAdapter.kt @@ -74,9 +74,16 @@ class OtherRecyclerAdapter(val activity: Activity): OtherInfo(activity.getString(R.string.list_other_volume_down), "launcher:volumeDown", activity.getString(R.string.fas_minus))) + othersList.add( + OtherInfo(activity.getString(R.string.list_other_track_next), + "launcher:nextTrack", + activity.getString(R.string.fas_forward))) + othersList.add( + OtherInfo(activity.getString(R.string.list_other_track_previous), + "launcher:previousTrack", + activity.getString(R.string.fas_back))) } - /* */ private fun returnChoiceIntent(forAction: String, value: String) { val returnIntent = Intent() returnIntent.putExtra("value", value) diff --git a/app/src/main/java/com/finnmglas/launcher/settings/actions/SettingsFragmentActionsRecycler.kt b/app/src/main/java/com/finnmglas/launcher/settings/actions/SettingsFragmentActionsRecycler.kt index f0395c4..120de2b 100644 --- a/app/src/main/java/com/finnmglas/launcher/settings/actions/SettingsFragmentActionsRecycler.kt +++ b/app/src/main/java/com/finnmglas/launcher/settings/actions/SettingsFragmentActionsRecycler.kt @@ -108,6 +108,10 @@ class ActionsRecyclerAdapter(val activity: Activity): viewHolder.fontAwesome.text = activity.getString(R.string.fas_plus) "volumeDown" -> viewHolder.fontAwesome.text = activity.getString(R.string.fas_minus) + "nextTrack" -> + viewHolder.fontAwesome.text = activity.getString(R.string.fas_forward) + "previousTrack" -> + viewHolder.fontAwesome.text = activity.getString(R.string.fas_back) } } else { // Set image icon (by packageName) diff --git a/app/src/main/res/values/icons.xml b/app/src/main/res/values/icons.xml index 2a1a2f5..ad26c1b 100644 --- a/app/src/main/res/values/icons.xml +++ b/app/src/main/res/values/icons.xml @@ -13,10 +13,13 @@ + + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 324b85a..ebb17c1 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -146,6 +146,8 @@ Launcher AppsList Increase Volume Decrease Volume + Music: Next Track + Music: Previous Track