diff --git a/app/src/main/java/com/prangesoftwaresolutions/audioanchor/activities/PlayActivity.java b/app/src/main/java/com/prangesoftwaresolutions/audioanchor/activities/PlayActivity.java index 66c6e16..5c147c8 100644 --- a/app/src/main/java/com/prangesoftwaresolutions/audioanchor/activities/PlayActivity.java +++ b/app/src/main/java/com/prangesoftwaresolutions/audioanchor/activities/PlayActivity.java @@ -53,6 +53,8 @@ import com.prangesoftwaresolutions.audioanchor.utils.SkipIntervalUtils; import com.prangesoftwaresolutions.audioanchor.utils.StorageUtil; import com.prangesoftwaresolutions.audioanchor.utils.Utils; +import android.widget.ImageButton; + import java.util.ArrayList; @@ -114,6 +116,11 @@ public class PlayActivity extends AppCompatActivity { // Shared preferences SharedPreferences mSharedPreferences; + // Volume + private int mCurrentVolumePercent = 100; + private final int VOLUME_STEP_PERCENT = 5; // Volume control step + private TextView mVolumeText; + @Override protected void onCreate(Bundle savedInstanceState) { Utils.setActivityTheme(this); @@ -271,6 +278,31 @@ public void onStopTrackingTouch(SeekBar seekBar) { params.addRule(RelativeLayout.BELOW, mAlbumTV.getId()); mCoverIV.setLayoutParams(params); } + + // Volume + ImageButton mVolDownIV = findViewById(R.id.volume_down); + ImageButton mVolUpIV = findViewById(R.id.volume_up); + mVolumeText = findViewById(R.id.volume_text); + mVolumeText.setText(getString(R.string.volume_label, mCurrentVolumePercent)); + + View.OnClickListener volumeClickListener = v -> { + if (mPlayer == null) return; + + if (v.getId() == R.id.volume_down) { + mCurrentVolumePercent = Math.max(0, mCurrentVolumePercent - VOLUME_STEP_PERCENT); + } else if (v.getId() == R.id.volume_up) { + mCurrentVolumePercent = Math.min(100, mCurrentVolumePercent + VOLUME_STEP_PERCENT); + } + + mPlayer.setVolume(mCurrentVolumePercent / 100f); + mPlayer.setCurrentVolume(mCurrentVolumePercent); + + mVolumeText.setText(getString(R.string.volume_label, mCurrentVolumePercent)); + }; + + mVolDownIV.setOnClickListener(volumeClickListener); + mVolUpIV.setOnClickListener(volumeClickListener); + } void initSkipButtons() { @@ -443,6 +475,10 @@ public void onServiceConnected(ComponentName name, IBinder service) { } else if (mSleepTimer != null) { mPlayer.connectSleepTimer(mSleepTimer); } + + // Volume + mCurrentVolumePercent = mPlayer.getCurrentVolume(); + mVolumeText.setText(getString(R.string.volume_label, mCurrentVolumePercent)); } @Override diff --git a/app/src/main/java/com/prangesoftwaresolutions/audioanchor/services/MediaPlayerService.java b/app/src/main/java/com/prangesoftwaresolutions/audioanchor/services/MediaPlayerService.java index b08c38d..e113687 100644 --- a/app/src/main/java/com/prangesoftwaresolutions/audioanchor/services/MediaPlayerService.java +++ b/app/src/main/java/com/prangesoftwaresolutions/audioanchor/services/MediaPlayerService.java @@ -136,6 +136,9 @@ public class MediaPlayerService extends Service implements MediaPlayer.OnComplet SensorManager mSensorManager; boolean mStopAtEndOfCurrentTrack = false; + // Volume variables + private int mCurrentVolume = 100; + @Override public void onCreate() { super.onCreate(); @@ -416,7 +419,7 @@ public void onAudioFocusChange(int focusState) { play(); mIsPausedByTransientFocusLoss = false; } - setVolume(1.0f); + setVolume(mCurrentVolume / 100f); break; case AudioManager.AUDIOFOCUS_LOSS: // Lost focus for an unbounded amount of time: stop playback and release media player @@ -440,6 +443,7 @@ public void onAudioFocusChange(int focusState) { if (mMediaPlayer.isPlaying()) { boolean duckAudio = mSharedPreferences.getBoolean(getString(R.string.settings_duck_audio_key), Boolean.getBoolean(getString(R.string.settings_duck_audio_default))); if (duckAudio) { + mCurrentVolume = 10; setVolume(0.1f); } else { pauseDueToAudioInterruption(); @@ -950,6 +954,7 @@ public void decreaseVolume(int step, int totalSteps) { float deltaVolume = (float) (1.0 / totalSteps); float currVolume = (float) (1.0 - (step * deltaVolume)); if (mMediaPlayer != null) { + mCurrentVolume = (int)(currVolume * 100); setVolume(currVolume); } } @@ -1118,4 +1123,12 @@ private void setMediaPlaybackState(int state) { } mediaSession.setPlaybackState(playbackstateBuilder.build()); } + + // Volume + public int getCurrentVolume() { + return mCurrentVolume; + } + public void setCurrentVolume(int value) { + mCurrentVolume = value; + } } diff --git a/app/src/main/res/drawable-hdpi/ic_volume_down.png b/app/src/main/res/drawable-hdpi/ic_volume_down.png new file mode 100644 index 0000000..20bdd69 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_volume_down.png differ diff --git a/app/src/main/res/drawable-hdpi/ic_volume_down_pressed.png b/app/src/main/res/drawable-hdpi/ic_volume_down_pressed.png new file mode 100644 index 0000000..25f3f45 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_volume_down_pressed.png differ diff --git a/app/src/main/res/drawable-hdpi/ic_volume_up.png b/app/src/main/res/drawable-hdpi/ic_volume_up.png new file mode 100644 index 0000000..3f5c34a Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_volume_up.png differ diff --git a/app/src/main/res/drawable-hdpi/ic_volume_up_pressed.png b/app/src/main/res/drawable-hdpi/ic_volume_up_pressed.png new file mode 100644 index 0000000..2519b31 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_volume_up_pressed.png differ diff --git a/app/src/main/res/drawable-mdpi/ic_volume_down.png b/app/src/main/res/drawable-mdpi/ic_volume_down.png new file mode 100644 index 0000000..3cc215a Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_volume_down.png differ diff --git a/app/src/main/res/drawable-mdpi/ic_volume_down_pressed.png b/app/src/main/res/drawable-mdpi/ic_volume_down_pressed.png new file mode 100644 index 0000000..e5325c9 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_volume_down_pressed.png differ diff --git a/app/src/main/res/drawable-mdpi/ic_volume_up.png b/app/src/main/res/drawable-mdpi/ic_volume_up.png new file mode 100644 index 0000000..923c485 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_volume_up.png differ diff --git a/app/src/main/res/drawable-mdpi/ic_volume_up_pressed.png b/app/src/main/res/drawable-mdpi/ic_volume_up_pressed.png new file mode 100644 index 0000000..244d26f Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_volume_up_pressed.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_volume_down.png b/app/src/main/res/drawable-xhdpi/ic_volume_down.png new file mode 100644 index 0000000..b5d1b55 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_volume_down.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_volume_down_pressed.png b/app/src/main/res/drawable-xhdpi/ic_volume_down_pressed.png new file mode 100644 index 0000000..8a1ae31 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_volume_down_pressed.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_volume_up.png b/app/src/main/res/drawable-xhdpi/ic_volume_up.png new file mode 100644 index 0000000..8413334 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_volume_up.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_volume_up_pressed.png b/app/src/main/res/drawable-xhdpi/ic_volume_up_pressed.png new file mode 100644 index 0000000..7c9b4a7 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_volume_up_pressed.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_volume_down.png b/app/src/main/res/drawable-xxhdpi/ic_volume_down.png new file mode 100644 index 0000000..2daa1fc Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_volume_down.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_volume_down_pressed.png b/app/src/main/res/drawable-xxhdpi/ic_volume_down_pressed.png new file mode 100644 index 0000000..a20e2bf Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_volume_down_pressed.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_volume_up.png b/app/src/main/res/drawable-xxhdpi/ic_volume_up.png new file mode 100644 index 0000000..627b855 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_volume_up.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_volume_up_pressed.png b/app/src/main/res/drawable-xxhdpi/ic_volume_up_pressed.png new file mode 100644 index 0000000..27579af Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_volume_up_pressed.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/ic_volume_down.png b/app/src/main/res/drawable-xxxhdpi/ic_volume_down.png new file mode 100644 index 0000000..1ecb205 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/ic_volume_down.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/ic_volume_down_pressed.png b/app/src/main/res/drawable-xxxhdpi/ic_volume_down_pressed.png new file mode 100644 index 0000000..aa46fce Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/ic_volume_down_pressed.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/ic_volume_up.png b/app/src/main/res/drawable-xxxhdpi/ic_volume_up.png new file mode 100644 index 0000000..16ca4af Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/ic_volume_up.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/ic_volume_up_pressed.png b/app/src/main/res/drawable-xxxhdpi/ic_volume_up_pressed.png new file mode 100644 index 0000000..eeb1cdf Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/ic_volume_up_pressed.png differ diff --git a/app/src/main/res/layout/activity_play.xml b/app/src/main/res/layout/activity_play.xml index 63ed13e..bbc9115 100644 --- a/app/src/main/res/layout/activity_play.xml +++ b/app/src/main/res/layout/activity_play.xml @@ -46,6 +46,52 @@ android:orientation="vertical" android:paddingBottom="@dimen/small_margin" android:paddingTop="@dimen/small_margin"> + + + + + + + + + + + + + Воспроизвести Назад Вперед + Закладка + Громкость: %d%% + Увеличить громкость + Уменьшить громкость Пусто. Добавьте папку в вашу библиотеку. @@ -23,12 +27,41 @@ Введите название закладки. Переход к закладке \"%s\" на %s. Закладка удалена. + Добавлена закладка \"%s\" на %s. + + Трек %d удалён. + Треков удалено: %d. + + + Из библиотеки удалён %d трек. + Из библиотеки удалено треков: %d. + + + Альбом %d + Альбомов: %d + + + Трек %d + Треков %d + + + Deleted %s and %s. + + Удалён %d альбом из вашей библиотеки. + Удалёно альбом из вашей библиотеки: %d. + + + Удалён %d каталог из вашей библиотеки. + Удалёно каталогов из вашей библиотеки: %d. + Не удалось отметить проигрывемый эпизод как неначатый. Не удалось отметить проигрывемый эпизод как прослушанный. Путь: %s Выбранная папка уже существует в вашей библиотеке: %s. Нельзя добавлять подпапки уже существующих каталогов вашей библиотеки:\n%s\n%s. Нельзя добавлять родительльские каталоги уже существующих папок вашей библиотеки:\n%s\n%s. + Текущий файл не может воспроизводиться на скорости %.1fx. Пожалуйста, выберите другое значение. + Автоматическое воспроизведение @@ -43,16 +76,33 @@ Вибрировать при сбросе таймера встряхиванием Воспроизводить текущий эпизод до конца Получить название эпизода из метаданных файла - Темная тема + Отображать обложку под информацией о треке + Тёмная тема + Использовать системную тему + Светлая тема + Тёмная тема Время автоперемотки назад Начать воспроизведение сразу после выбора эпизода + Приглушать звук при прерывании воспроизведения Показывать скрытые файлы Внешний вид Воспроизведение + Закладки Прочее По названию По папке Порядок сортировки альбомов + Добавлять и обновлять закладки последней и предпоследней позиции при каждом нажатии воспроизведения + Отображать обложку на экране блокировки + Добавлять закладку по одному нажатию на значок закладки + Интервалы пропуска + Перемотка вперёд №1 + Перемотка вперёд №2 + Перемотка назад №1 + Перемотка назад №2 + Перемотка назад в уведомлении + Перемотка вперёд в уведомлении + Интервал пропуска для %s Название @@ -72,17 +122,24 @@ Поставить закладку на Пока еще нет закладок в этой аудиокниге. Закладки + Без названия Удалить из устройства Удалить из базы данных Удалить из библиотеки Отметить как неначатый Отметить как прослушанный + + Выделен: %d + Выделено: %d + Отметить все эпизоды как неначатые Отметить все эпизоды как прослушанные Скорость воспроизведения Список участников можно найти по ссылке Там же там можно сообщить об ошибке, внести свой вклад в развитие или поставить звезду, если приложение понравилось. - Добавить папку\nс аудиофайлами + Если вам нравится приложение и вы хотите сделать пожертвование, вы можете сделать это через + Спасибо :) + Добавить папку\nс аудиофайлами Добаавить папку\nс подпапками \nаудиофайлов Вы можете выбрать одну папку с аудиофайлами или родительский каталог, содержащий несколько папок с аудиофайлами. @@ -94,6 +151,25 @@ Закрыть Удалить Введите время, на которое хотите перейти + + Вы уверены, что хотите удалить выбранный каталог и его содержимое? + Вы уверены, что хотите удалить выбранные каталоги и их содержимое? + + + Вы уверены, что хотите удалить выбранный альбом и его содержимое из вашей библиотеки? Эта операция будет выполнена только для файлов, которых больше нет в файловой системе. + Вы уверены, что хотите удалить выбранные альбомы и их содержимое из вашей библиотеки? Эта операция будет выполнена только для файлов, которых больше нет в файловой системе. + + + Вы уверены, что хотите удалить выбранный трек? + Вы уверены, что хотите удалить выбранные треки? + + + Вы уверены, что хотите удалить выбранный трек из библиотеки? Эта операция будет выполнена только для файлов, которых больше нет в файловой системе. + Вы уверены, что хотите удалить выбранные треки из библиотеки? Эта операция будет выполнена только для файлов, которых больше нет в файловой системе. + Удалить эту закладку? Вы уверены, что хотите удалить выбранную папку из вашей библиотеки? Это также удалит альбомы, аудиофайлы и закладки из вашей библиотеки. + + <предпоследняя позиция воспроизведения> + <последняя позиция воспроизведения> diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 70a97cf..cc1b404 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -6,6 +6,9 @@ Backward Forward Bookmark + Volume: %d%% + Volume up + Volume down It\'s a bit empty here. Start by adding a directory to your library.