diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml
index e450294c1f..28242627e8 100644
--- a/.github/workflows/android.yml
+++ b/.github/workflows/android.yml
@@ -2,12 +2,12 @@ name: Android CI
on:
push:
- branches: [ dev ]
pull_request:
- branches: [ dev ]
+ workflow_dispatch:
jobs:
check:
+ if: false
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
diff --git a/.github/workflows/compile.yml b/.github/workflows/compile.yml
new file mode 100644
index 0000000000..fd5e4e1f7c
--- /dev/null
+++ b/.github/workflows/compile.yml
@@ -0,0 +1,23 @@
+name: Compile and Upload
+on:
+ push:
+ workflow_dispatch:
+ pull_request:
+
+jobs:
+ build:
+ runs-on: ubuntu-latest
+ steps:
+
+ - name: Checkout the code
+ uses: actions/checkout@v3
+
+ - name: Build the app
+ run: |
+ chmod +x gradlew
+ ./gradlew build
+
+ - name: Upload Release
+ uses: softprops/action-gh-release@v0.1.14
+ with:
+ files: app/build/outputs/apk/release/*.apk
diff --git a/app/src/main/java/code/name/monkey/retromusic/Constants.kt b/app/src/main/java/code/name/monkey/retromusic/Constants.kt
index 31032f62b3..aa3ff4eda6 100644
--- a/app/src/main/java/code/name/monkey/retromusic/Constants.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/Constants.kt
@@ -133,6 +133,7 @@ const val EXPAND_NOW_PLAYING_PANEL = "expand_now_playing_panel"
const val EXTRA_ARTIST_NAME = "extra_artist_name"
const val TOGGLE_SUGGESTIONS = "toggle_suggestions"
const val AUDIO_FADE_DURATION = "audio_fade_duration"
+const val MANAGE_HAPTIC_GENERATOR = "manage_haptic_generator"
const val CROSS_FADE_DURATION = "cross_fade_duration"
const val SHOW_LYRICS = "show_lyrics"
const val REMEMBER_LAST_TAB = "remember_last_tab"
@@ -151,4 +152,4 @@ const val CIRCLE_PLAY_BUTTON = "circle_play_button"
const val SWIPE_ANYWHERE_NOW_PLAYING = "swipe_anywhere_now_playing"
const val PAUSE_HISTORY = "pause_history"
const val MANAGE_AUDIO_FOCUS = "manage_audio_focus"
-const val SWIPE_DOWN_DISMISS = "swipe_to_dismiss"
\ No newline at end of file
+const val SWIPE_DOWN_DISMISS = "swipe_to_dismiss"
diff --git a/app/src/main/java/code/name/monkey/retromusic/service/MultiPlayer.kt b/app/src/main/java/code/name/monkey/retromusic/service/MultiPlayer.kt
index a29122a68f..10cc093576 100644
--- a/app/src/main/java/code/name/monkey/retromusic/service/MultiPlayer.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/service/MultiPlayer.kt
@@ -15,14 +15,18 @@ package code.name.monkey.retromusic.service
import android.content.Context
import android.media.MediaPlayer
+import android.media.audiofx.HapticGenerator
+import android.os.Build
import android.os.PowerManager
import android.util.Log
+import androidx.annotation.RequiresApi
import code.name.monkey.retromusic.R
import code.name.monkey.retromusic.extensions.showToast
import code.name.monkey.retromusic.extensions.uri
import code.name.monkey.retromusic.model.Song
import code.name.monkey.retromusic.service.playback.Playback.PlaybackCallbacks
import code.name.monkey.retromusic.util.PreferenceUtil.isGapLessPlayback
+import code.name.monkey.retromusic.util.PreferenceUtil.isHapticGeneratorActive
import code.name.monkey.retromusic.util.logE
/**
@@ -30,6 +34,8 @@ import code.name.monkey.retromusic.util.logE
*/
class MultiPlayer(context: Context) : LocalPlayback(context) {
private var mCurrentMediaPlayer = MediaPlayer()
+ @RequiresApi(Build.VERSION_CODES.S)
+ private var hapticGenerator: HapticGenerator? = null
private var mNextMediaPlayer: MediaPlayer? = null
override var callbacks: PlaybackCallbacks? = null
@@ -117,10 +123,15 @@ class MultiPlayer(context: Context) : LocalPlayback(context) {
/**
* Starts or resumes playback.
*/
+ @RequiresApi(Build.VERSION_CODES.S)
override fun start(): Boolean {
super.start()
return try {
mCurrentMediaPlayer.start()
+ if (isHapticGeneratorActive) {
+ hapticGenerator = HapticGenerator.create(audioSessionId)
+ hapticGenerator?.setEnabled(true)
+ }
true
} catch (e: IllegalStateException) {
false
@@ -139,19 +150,23 @@ class MultiPlayer(context: Context) : LocalPlayback(context) {
/**
* Releases resources associated with this MediaPlayer object.
*/
+ @RequiresApi(Build.VERSION_CODES.S)
override fun release() {
stop()
mCurrentMediaPlayer.release()
mNextMediaPlayer?.release()
+ hapticGenerator?.release()
}
/**
* Pauses playback. Call start() to resume.
*/
+ @RequiresApi(Build.VERSION_CODES.S)
override fun pause(): Boolean {
super.pause()
return try {
mCurrentMediaPlayer.pause()
+ hapticGenerator?.release()
true
} catch (e: IllegalStateException) {
false
diff --git a/app/src/main/java/code/name/monkey/retromusic/util/PreferenceUtil.kt b/app/src/main/java/code/name/monkey/retromusic/util/PreferenceUtil.kt
index 13f4f3948e..e3cddcea40 100644
--- a/app/src/main/java/code/name/monkey/retromusic/util/PreferenceUtil.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/util/PreferenceUtil.kt
@@ -330,6 +330,9 @@ object PreferenceUtil {
MANAGE_AUDIO_FOCUS, false
)
+ val isHapticGeneratorActive
+ get() = sharedPreferences.getBoolean(MANAGE_HAPTIC_GENERATOR, false)
+
val isLockScreen get() = sharedPreferences.getBoolean(LOCK_SCREEN, false)
var lyricsOption
diff --git a/app/src/main/res/drawable/ic_spatial_speaker.xml b/app/src/main/res/drawable/ic_spatial_speaker.xml
new file mode 100644
index 0000000000..917a1fc98c
--- /dev/null
+++ b/app/src/main/res/drawable/ic_spatial_speaker.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index e9609c7c19..40f115e9e8 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -83,6 +83,7 @@
Artists
Audio fade duration
Audio focus denied.
+ Manage Haptic Generator
Change the sound settings and adjust the equalizer controls
Auto
Backup and restore your settings, playlists
@@ -343,6 +344,7 @@
Show Album Artists in the Artist category
Lower the volume when a system sound is played or a notification is received
Fade audio when song is paused or played
+ Sync the haptic motor to the music
The content of blacklisted folders is hidden from your library.
Start playing as soon as connected to bluetooth device
Blur the album cover on the lockscreen. Can cause problems with third party apps and widgets
@@ -383,6 +385,7 @@
Header style
Reduce volume on focus loss
Fade audio
+ Enable haptics
Auto-download artist images
Blacklist
Bluetooth playback
diff --git a/app/src/main/res/xml/pref_audio.xml b/app/src/main/res/xml/pref_audio.xml
index 6bf54069c9..9e5e9a2c5c 100755
--- a/app/src/main/res/xml/pref_audio.xml
+++ b/app/src/main/res/xml/pref_audio.xml
@@ -16,6 +16,14 @@
android:summary="@string/pref_summary_manage_audio_focus"
android:title="@string/pref_title_manage_audio_focus" />
+
+
-
\ No newline at end of file
+