├── app
├── .gitignore
├── src
│ └── main
│ │ ├── ic_launcher-web.png
│ │ ├── res
│ │ ├── mipmap-hdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_round.png
│ │ │ ├── ic_launcher_background.png
│ │ │ └── ic_launcher_foreground.png
│ │ ├── mipmap-mdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_round.png
│ │ │ ├── ic_launcher_background.png
│ │ │ └── ic_launcher_foreground.png
│ │ ├── mipmap-xhdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_round.png
│ │ │ ├── ic_launcher_background.png
│ │ │ └── ic_launcher_foreground.png
│ │ ├── mipmap-xxhdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_round.png
│ │ │ ├── ic_launcher_background.png
│ │ │ └── ic_launcher_foreground.png
│ │ ├── mipmap-xxxhdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_round.png
│ │ │ ├── ic_launcher_background.png
│ │ │ └── ic_launcher_foreground.png
│ │ ├── xml
│ │ │ ├── automotive_app_desc.xml
│ │ │ ├── backup_rules.xml
│ │ │ ├── provider_paths.xml
│ │ │ ├── network_security_config.xml
│ │ │ └── shortcuts.xml
│ │ ├── values
│ │ │ ├── ic_launcher_background.xml
│ │ │ ├── values.xml
│ │ │ ├── styles.xml
│ │ │ └── colors.xml
│ │ ├── drawable
│ │ │ ├── shape_list_station_image.xml
│ │ │ ├── shape_search_result_item.xml
│ │ │ ├── shape_search_result_item_selected.xml
│ │ │ ├── shape_player_button_small.xml
│ │ │ ├── ic_player_play_symbol_36dp.xml
│ │ │ ├── ic_player_play_symbol_54dp.xml
│ │ │ ├── ic_notification_stop_36dp.xml
│ │ │ ├── ic_notification_play_36dp.xml
│ │ │ ├── ic_player_stop_symbol_36dp.xml
│ │ │ ├── ic_player_stop_symbol_54dp.xml
│ │ │ ├── ic_add_24dp.xml
│ │ │ ├── ic_chevron_left_24dp.xml
│ │ │ ├── ic_chevron_right_24dp.xml
│ │ │ ├── shape_player_button_small_selected.xml
│ │ │ ├── ic_notification_skip_to_next_36dp.xml
│ │ │ ├── ic_notification_skip_to_previous_36dp.xml
│ │ │ ├── ic_arrow_upward_24dp.xml
│ │ │ ├── ic_centered_dot_16dp.xml
│ │ │ ├── selector_search_result_item.xml
│ │ │ ├── ic_star_default_24dp.xml
│ │ │ ├── ic_delete_24dp.xml
│ │ │ ├── ic_music_note_24dp.xml
│ │ │ ├── ic_clear_24dp.xml
│ │ │ ├── ic_notification_clear_36dp.xml
│ │ │ ├── ic_remove_circle_24dp.xml
│ │ │ ├── ic_playlist_24dp.xml
│ │ │ ├── ic_marked_starred_star_24dp.xml
│ │ │ ├── ic_player_sheet_music_note_24dp.xml
│ │ │ ├── ic_shortcut_play_circle_24dp.xml
│ │ │ ├── ic_smartphone_24dp.xml
│ │ │ ├── ic_save_24dp.xml
│ │ │ ├── ic_edit_24dp.xml
│ │ │ ├── ic_image_24dp.xml
│ │ │ ├── ic_info_24dp.xml
│ │ │ ├── ic_play_circle_outline_36dp.xml
│ │ │ ├── ic_add_to_home_screen_24dp.xml
│ │ │ ├── ic_image_white_36dp.xml
│ │ │ ├── ic_radio_button_unchecked_24dp.xml
│ │ │ ├── ic_more_vert_24dp.xml
│ │ │ ├── shape_player_sheet_background.xml
│ │ │ ├── ic_radio_button_checked_24dp.xml
│ │ │ ├── ic_refresh_24dp.xml
│ │ │ ├── selector_play_button.xml
│ │ │ ├── ic_restore_24dp.xml
│ │ │ ├── ic_stop_circle_outline_36dp.xml
│ │ │ ├── ic_developer_mode_24dp.xml
│ │ │ ├── ic_cloud_download_36dp.xml
│ │ │ ├── ic_settings_24dp.xml
│ │ │ ├── ic_replay_10sek_56dp.xml
│ │ │ ├── ic_bug_report_24dp.xml
│ │ │ ├── ic_default_station_image_72dp.xml
│ │ │ ├── ic_world_24dp.xml
│ │ │ ├── ic_sleep_timer_24dp.xml
│ │ │ ├── ic_forward_30sek_56dp.xml
│ │ │ └── ic_notification_app_icon_white_24dp.xml
│ │ ├── mipmap-anydpi-v26
│ │ │ ├── ic_launcher.xml
│ │ │ └── ic_launcher_round.xml
│ │ ├── anim
│ │ │ ├── rotate_clockwise_slow.xml
│ │ │ └── rotate_counterclockwise_fast.xml
│ │ ├── values-night
│ │ │ ├── styles.xml
│ │ │ └── colors.xml
│ │ ├── navigation
│ │ │ └── nav_graph_main.xml
│ │ ├── menu
│ │ │ └── station_popup_menu.xml
│ │ ├── layout
│ │ │ ├── dialog_rename_station.xml
│ │ │ ├── activity_main.xml
│ │ │ ├── fragment_player.xml
│ │ │ ├── card_add_new_station.xml
│ │ │ ├── element_search_result.xml
│ │ │ ├── dialog_choose_stream.xml
│ │ │ ├── dialog_find_station.xml
│ │ │ └── dialog_generic_with_details.xml
│ │ └── values-night-v31
│ │ │ └── colors.xml
│ │ └── java
│ │ └── org
│ │ └── y20k
│ │ └── transistor
│ │ ├── dialogs
│ │ ├── SelectStreamDialog.kt
│ │ ├── ErrorDialog.kt
│ │ └── YesNoDialog.kt
│ │ ├── extensions
│ │ ├── ArrayListExt.kt
│ │ └── PlaybackStateCompatExt.kt
│ │ ├── helpers
│ │ ├── DownloadFinishedReceiver.kt
│ │ ├── AudioHelper.kt
│ │ ├── WorkerHelper.kt
│ │ ├── DownloadWorker.kt
│ │ ├── DateTimeHelper.kt
│ │ └── AppThemeHelper.kt
│ │ ├── ui
│ │ └── PlayerState.kt
│ │ ├── Transistor.kt
│ │ ├── core
│ │ ├── Collection.kt
│ │ └── Station.kt
│ │ ├── PlayerServiceStarterActivity.kt
│ │ ├── playback
│ │ └── PlayerController.kt
│ │ ├── collection
│ │ ├── CollectionViewModel.kt
│ │ └── CollectionProvider.kt
│ │ └── MainActivity.kt
├── proguard-rules.pro
└── build.gradle
├── settings.gradle
├── metadata
├── en-US
│ ├── title.txt
│ ├── short_description.txt
│ ├── changelogs
│ │ ├── 79.txt
│ │ ├── 71.txt
│ │ ├── 83.txt
│ │ ├── 66.txt
│ │ ├── 70.txt
│ │ ├── 69.txt
│ │ ├── 85.txt
│ │ ├── 87.txt
│ │ ├── 78.txt
│ │ ├── 84.txt
│ │ ├── 62.txt
│ │ ├── 61.txt
│ │ ├── 60.txt
│ │ ├── 82.txt
│ │ ├── 59.txt
│ │ ├── 67.txt
│ │ ├── 88.txt
│ │ ├── 89.txt
│ │ ├── 68.txt
│ │ ├── 86.txt
│ │ ├── 65.txt
│ │ ├── 80.txt
│ │ ├── 76.txt
│ │ ├── 91.txt
│ │ ├── 64.txt
│ │ ├── 81.txt
│ │ ├── 90.txt
│ │ ├── 77.txt
│ │ ├── 74.txt
│ │ ├── 75.txt
│ │ ├── 73.txt
│ │ └── 72.txt
│ ├── images
│ │ └── featureGraphic.png
│ ├── phoneScreenshots
│ │ ├── 01-transistor-v4.1.0-playback.png
│ │ ├── 03-transistor-v4.1.0-add-station.png
│ │ ├── 05-transistor-v4.1.0-delete-station.png
│ │ ├── 06-transistor-v4.1.0-edit-station.png
│ │ ├── 02-transistor-v4.1.0-playback-details.png
│ │ └── 04-transistor-v4.1.0-favorite-station.png
│ └── full_description.txt
├── nb-NO
│ ├── title.txt
│ ├── short_description.txt
│ └── full_description.txt
├── de
│ ├── title.txt
│ ├── short_description.txt
│ ├── changelogs
│ │ ├── 79.txt
│ │ ├── 71.txt
│ │ ├── 66.txt
│ │ ├── 70.txt
│ │ ├── 69.txt
│ │ ├── 83.txt
│ │ ├── 60.txt
│ │ ├── 62.txt
│ │ ├── 84.txt
│ │ ├── 87.txt
│ │ ├── 85.txt
│ │ ├── 78.txt
│ │ ├── 61.txt
│ │ ├── 82.txt
│ │ ├── 59.txt
│ │ ├── 67.txt
│ │ ├── 88.txt
│ │ ├── 68.txt
│ │ ├── 86.txt
│ │ ├── 89.txt
│ │ ├── 65.txt
│ │ ├── 80.txt
│ │ ├── 64.txt
│ │ ├── 76.txt
│ │ ├── 91.txt
│ │ ├── 81.txt
│ │ ├── 90.txt
│ │ ├── 77.txt
│ │ ├── 75.txt
│ │ ├── 74.txt
│ │ ├── 73.txt
│ │ └── 72.txt
│ └── full_description.txt
├── he
│ ├── title.txt
│ ├── short_description.txt
│ └── changelogs
│ │ ├── 91.txt
│ │ └── 90.txt
├── nl
│ ├── title.txt
│ ├── changelogs
│ │ ├── 79.txt
│ │ ├── 71.txt
│ │ ├── 66.txt
│ │ ├── 69.txt
│ │ ├── 70.txt
│ │ ├── 83.txt
│ │ ├── 87.txt
│ │ ├── 62.txt
│ │ ├── 60.txt
│ │ ├── 85.txt
│ │ ├── 82.txt
│ │ ├── 61.txt
│ │ ├── 78.txt
│ │ ├── 84.txt
│ │ ├── 59.txt
│ │ ├── 67.txt
│ │ ├── 88.txt
│ │ ├── 68.txt
│ │ ├── 86.txt
│ │ ├── 89.txt
│ │ ├── 65.txt
│ │ ├── 76.txt
│ │ ├── 80.txt
│ │ ├── 64.txt
│ │ ├── 81.txt
│ │ ├── 91.txt
│ │ ├── 90.txt
│ │ ├── 77.txt
│ │ ├── 75.txt
│ │ ├── 74.txt
│ │ ├── 73.txt
│ │ └── 72.txt
│ ├── short_description.txt
│ └── full_description.txt
├── ru
│ ├── title.txt
│ ├── short_description.txt
│ ├── changelogs
│ │ └── 91.txt
│ └── full_description.txt
├── tr
│ ├── title.txt
│ ├── short_description.txt
│ ├── changelogs
│ │ ├── 79.txt
│ │ ├── 71.txt
│ │ ├── 83.txt
│ │ ├── 69.txt
│ │ ├── 70.txt
│ │ ├── 60.txt
│ │ ├── 62.txt
│ │ ├── 66.txt
│ │ ├── 87.txt
│ │ ├── 78.txt
│ │ ├── 61.txt
│ │ ├── 82.txt
│ │ ├── 85.txt
│ │ ├── 84.txt
│ │ ├── 59.txt
│ │ ├── 86.txt
│ │ ├── 89.txt
│ │ ├── 88.txt
│ │ ├── 65.txt
│ │ ├── 67.txt
│ │ ├── 68.txt
│ │ ├── 80.txt
│ │ ├── 76.txt
│ │ ├── 90.txt
│ │ ├── 91.txt
│ │ ├── 81.txt
│ │ ├── 64.txt
│ │ ├── 77.txt
│ │ ├── 75.txt
│ │ ├── 74.txt
│ │ ├── 73.txt
│ │ └── 72.txt
│ └── full_description.txt
├── fi
│ └── title.txt
├── fr
│ └── title.txt
├── it
│ ├── short_description.txt
│ └── full_description.txt
└── README.md
├── .gitignore
├── gradle
└── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── assets
├── transistor-app-icon-current.png
├── transistor-app-icon-current-background.png
├── transistor-app-icon-current-foreground.png
├── README.md
└── transistor-status-bar-icon-current.svg
├── README.md
├── .github
└── ISSUE_TEMPLATE
│ ├── feature-request.md
│ ├── bug-report.md
│ └── station-issue.md
├── gradle.properties
├── LICENSE.md
├── CONTRIBUTE.md
└── gradlew.bat
/app/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/settings.gradle:
--------------------------------------------------------------------------------
1 | include ':app'
2 |
--------------------------------------------------------------------------------
/metadata/en-US/title.txt:
--------------------------------------------------------------------------------
1 | Transistor - Simple Radio App
--------------------------------------------------------------------------------
/metadata/nb-NO/title.txt:
--------------------------------------------------------------------------------
1 | Transistor - Enkel radio
2 |
--------------------------------------------------------------------------------
/metadata/de/title.txt:
--------------------------------------------------------------------------------
1 | Transistor - Simple Radio-App
2 |
--------------------------------------------------------------------------------
/metadata/he/title.txt:
--------------------------------------------------------------------------------
1 | טרנזיסטור - יישומון רדיו פשוט
2 |
--------------------------------------------------------------------------------
/metadata/nl/title.txt:
--------------------------------------------------------------------------------
1 | Transistor - Simpele radio app
2 |
--------------------------------------------------------------------------------
/metadata/ru/title.txt:
--------------------------------------------------------------------------------
1 | Транзистор - радио приложение
2 |
--------------------------------------------------------------------------------
/metadata/tr/title.txt:
--------------------------------------------------------------------------------
1 | Transistor - Radyo Uygulaması
2 |
--------------------------------------------------------------------------------
/metadata/fi/title.txt:
--------------------------------------------------------------------------------
1 | Transistor - Yksinkertainen Radio Sovellus
2 |
--------------------------------------------------------------------------------
/metadata/fr/title.txt:
--------------------------------------------------------------------------------
1 | Transistor - Une simple application de radio
2 |
--------------------------------------------------------------------------------
/metadata/he/short_description.txt:
--------------------------------------------------------------------------------
1 | טרנזיסטור הוא יישומון להאזנה לתחנות רדיו דרך האינטרנט.
2 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | *.iml
2 | .gradle
3 | .DS_Store
4 | /local.properties
5 | /.idea
6 | /build
7 | /captures
--------------------------------------------------------------------------------
/metadata/de/short_description.txt:
--------------------------------------------------------------------------------
1 | Transistor ist eine App zum Hören von Radiosendern über das Internet.
2 |
--------------------------------------------------------------------------------
/metadata/en-US/short_description.txt:
--------------------------------------------------------------------------------
1 | Transistor is an app for listening to radio stations over the internet.
2 |
--------------------------------------------------------------------------------
/metadata/it/short_description.txt:
--------------------------------------------------------------------------------
1 | Transistor è un'applicazione per ascoltare le stazioni radio su Internet.
2 |
--------------------------------------------------------------------------------
/metadata/nb-NO/short_description.txt:
--------------------------------------------------------------------------------
1 | Transistor er et program for å lytte til radiostasjoner på Internett.
2 |
--------------------------------------------------------------------------------
/metadata/ru/short_description.txt:
--------------------------------------------------------------------------------
1 | Транзистор - это приложение для прослушивания радиостанций через Интернет.
2 |
--------------------------------------------------------------------------------
/metadata/tr/short_description.txt:
--------------------------------------------------------------------------------
1 | Transistor, internetten radyo istasyonlarını dinlemek için bir uygulamadır.
2 |
--------------------------------------------------------------------------------
/app/src/main/ic_launcher-web.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/y20k/transistor/HEAD/app/src/main/ic_launcher-web.png
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/y20k/transistor/HEAD/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/metadata/en-US/changelogs/79.txt:
--------------------------------------------------------------------------------
1 | # v4.0.7 - Andy Warhol
2 |
3 | **2020-10-01**
4 |
5 | - updated translations
6 |
--------------------------------------------------------------------------------
/metadata/nl/changelogs/79.txt:
--------------------------------------------------------------------------------
1 | # v4.0.7 - Andy Warhol
2 |
3 | **2020-10-01**
4 |
5 | - bijgewerkte vertalingen
6 |
--------------------------------------------------------------------------------
/metadata/nl/short_description.txt:
--------------------------------------------------------------------------------
1 | Transistor is een app voor het beluisteren van radiozenders via het internet.
2 |
--------------------------------------------------------------------------------
/metadata/tr/changelogs/79.txt:
--------------------------------------------------------------------------------
1 | # v4.0.7 - Andy Warhol
2 |
3 | **1 Ekim 2020**
4 |
5 | - çeviriler güncellendi
6 |
--------------------------------------------------------------------------------
/metadata/de/changelogs/79.txt:
--------------------------------------------------------------------------------
1 | # v4.0.7 - Andy Warhol
2 |
3 | **2020-10-01**
4 |
5 | - aktualisierte Übersetzungen
6 |
--------------------------------------------------------------------------------
/assets/transistor-app-icon-current.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/y20k/transistor/HEAD/assets/transistor-app-icon-current.png
--------------------------------------------------------------------------------
/metadata/en-US/changelogs/71.txt:
--------------------------------------------------------------------------------
1 | # v3.2.4 - Life on Mars?
2 |
3 | **2020-02-12**
4 |
5 | - updated Indonesian language version
6 |
--------------------------------------------------------------------------------
/metadata/en-US/images/featureGraphic.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/y20k/transistor/HEAD/metadata/en-US/images/featureGraphic.png
--------------------------------------------------------------------------------
/metadata/nl/changelogs/71.txt:
--------------------------------------------------------------------------------
1 | # v3.2.4 - Life on Mars?
2 |
3 | **2020-02-12**
4 |
5 | - bijgewerkte Indonesische taalversie
6 |
--------------------------------------------------------------------------------
/metadata/tr/changelogs/71.txt:
--------------------------------------------------------------------------------
1 | # v3.2.4 - Mars'ta Yaşam mı?
2 |
3 | **12 Şubat 2020**
4 |
5 | - Endonezce sürümü güncellendi
6 |
--------------------------------------------------------------------------------
/metadata/de/changelogs/71.txt:
--------------------------------------------------------------------------------
1 | # v3.2.4 - Life on Mars?
2 |
3 | **2020-02-12**
4 |
5 | - aktualisierte indonesische Sprachversion
6 |
--------------------------------------------------------------------------------
/metadata/tr/changelogs/83.txt:
--------------------------------------------------------------------------------
1 | # v4.0.12 - Andy Warhol
2 |
3 | **10 Mart 2021**
4 |
5 | - ana ekran kısayolundan oynatma düzeltildi
6 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/y20k/transistor/HEAD/app/src/main/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/y20k/transistor/HEAD/app/src/main/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/y20k/transistor/HEAD/app/src/main/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/y20k/transistor/HEAD/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/metadata/en-US/changelogs/83.txt:
--------------------------------------------------------------------------------
1 | # v4.0.12 - Andy Warhol
2 |
3 | **2021-03-10**
4 |
5 | - fixes broken playback from home screen shortcut
6 |
--------------------------------------------------------------------------------
/metadata/nl/changelogs/66.txt:
--------------------------------------------------------------------------------
1 | # v3.1.2 - John, I’m Only Dancing
2 |
3 | **2019-01-23**
4 |
5 | - bugfixes
6 | - bijgewerkte vertalingen
7 |
--------------------------------------------------------------------------------
/metadata/nl/changelogs/69.txt:
--------------------------------------------------------------------------------
1 | # v3.2.2 - Life on Mars?
2 |
3 | **2019-10-18**
4 |
5 | - Thaise taalversie
6 | - bijgewerkte vertalingen
7 |
--------------------------------------------------------------------------------
/metadata/nl/changelogs/70.txt:
--------------------------------------------------------------------------------
1 | # v3.2.3 - Life on Mars?
2 |
3 | **2020-02-04**
4 |
5 | - Indonesische taalversie
6 | - kleine bugfixes
7 |
--------------------------------------------------------------------------------
/metadata/tr/changelogs/69.txt:
--------------------------------------------------------------------------------
1 | # v3.2.2 - Mars'ta Yaşam mı?
2 |
3 | **18 Ekim 2019**
4 |
5 | - Tayca sürümü
6 | - çeviriler güncellendi
7 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/y20k/transistor/HEAD/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/metadata/en-US/changelogs/66.txt:
--------------------------------------------------------------------------------
1 | # v3.1.2 - John, I’m Only Dancing
2 |
3 | **2019-01-23**
4 |
5 | - bugfixes
6 | - updated translations
7 |
8 |
--------------------------------------------------------------------------------
/metadata/en-US/changelogs/70.txt:
--------------------------------------------------------------------------------
1 | # v3.2.3 - Life on Mars?
2 |
3 | **2020-02-04**
4 |
5 | - Indonesian language version
6 | - small bug fixes
7 |
--------------------------------------------------------------------------------
/metadata/tr/changelogs/70.txt:
--------------------------------------------------------------------------------
1 | # v3.2.3 - Mars'ta Yaşam mı?
2 |
3 | **4 Şubat 2020**
4 |
5 | - Endonezce sürümü
6 | - küçük hata düzeltmeleri
7 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/y20k/transistor/HEAD/app/src/main/res/mipmap-hdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/y20k/transistor/HEAD/app/src/main/res/mipmap-mdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/y20k/transistor/HEAD/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/app/src/main/res/xml/automotive_app_desc.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/assets/transistor-app-icon-current-background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/y20k/transistor/HEAD/assets/transistor-app-icon-current-background.png
--------------------------------------------------------------------------------
/assets/transistor-app-icon-current-foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/y20k/transistor/HEAD/assets/transistor-app-icon-current-foreground.png
--------------------------------------------------------------------------------
/metadata/de/changelogs/66.txt:
--------------------------------------------------------------------------------
1 | # v3.1.2 - John, I’m Only Dancing
2 |
3 | **2019-01-23**
4 |
5 | - Fehlerbehebungen
6 | - aktualisierte Übersetzungen
7 |
--------------------------------------------------------------------------------
/metadata/de/changelogs/70.txt:
--------------------------------------------------------------------------------
1 | # v3.2.3 - Life on Mars?
2 |
3 | **2020-02-04**
4 |
5 | - Indonesische Sprachversion
6 | - kleine Fehlerbehebungen
7 |
--------------------------------------------------------------------------------
/metadata/en-US/changelogs/69.txt:
--------------------------------------------------------------------------------
1 | # v3.2.2 - Life on Mars?
2 |
3 | **2019-10-18**
4 |
5 | - Thai language version
6 | - updated translations
7 |
8 |
--------------------------------------------------------------------------------
/metadata/nl/changelogs/83.txt:
--------------------------------------------------------------------------------
1 | # v4.0.12 - Andy Warhol
2 |
3 | **2021-03-10**
4 |
5 | - herstelt verbroken afspelen via snelkoppeling op beginscherm
6 |
--------------------------------------------------------------------------------
/metadata/nl/changelogs/87.txt:
--------------------------------------------------------------------------------
1 | # v4.0.16 - Andy Warhol
2 |
3 | **2021-08-12**
4 |
5 | - herstelt de knoppen vorige en volgende in de weergavemelding
6 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/y20k/transistor/HEAD/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/y20k/transistor/HEAD/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/metadata/de/changelogs/69.txt:
--------------------------------------------------------------------------------
1 | # v3.2.2 - Life on Mars?
2 |
3 | **2019-10-18**
4 |
5 | - Thailändische Sprachversion
6 | - aktualisierte Übersetzungen
7 |
--------------------------------------------------------------------------------
/metadata/en-US/changelogs/85.txt:
--------------------------------------------------------------------------------
1 | # v4.0.14 - Andy Warhol
2 |
3 | **2021-03-20**
4 |
5 | - small change to notification
6 | - fixes another rare crash
7 |
--------------------------------------------------------------------------------
/metadata/en-US/changelogs/87.txt:
--------------------------------------------------------------------------------
1 | # v4.0.16 - Andy Warhol
2 |
3 | **2021-08-12**
4 |
5 | - fixes previous and next buttons in the playback notification
6 |
--------------------------------------------------------------------------------
/metadata/nl/changelogs/62.txt:
--------------------------------------------------------------------------------
1 | # v3.0.12 - Oh! You Pretty Things
2 |
3 | **2018-10-08**
4 |
5 | - bijgewerkte Japanse taalversie
6 | - kleine wijzigingen
7 |
--------------------------------------------------------------------------------
/metadata/tr/changelogs/60.txt:
--------------------------------------------------------------------------------
1 | # v3.0.10 - Ah! Bu Güzel Şeyler
2 |
3 | **27 Eylül 2018**
4 |
5 | - Arapça sürümü
6 | - TalkBack desteği iyileştirildi
7 |
--------------------------------------------------------------------------------
/metadata/tr/changelogs/62.txt:
--------------------------------------------------------------------------------
1 | # v3.0.12 - Ah! Bu Güzel Şeyler
2 |
3 | **8 Ekim 2018**
4 |
5 | - Japonca sürümü güncellendi
6 | - küçük değişiklikler
7 |
--------------------------------------------------------------------------------
/metadata/tr/changelogs/66.txt:
--------------------------------------------------------------------------------
1 | # v3.1.2 - John, Yalnızca Dans Ediyorum
2 |
3 | **23 Ocak 2019**
4 |
5 | - hata düzeltmeleri
6 | - çeviriler güncellendi
7 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/ic_launcher_background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/y20k/transistor/HEAD/app/src/main/res/mipmap-hdpi/ic_launcher_background.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/y20k/transistor/HEAD/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/ic_launcher_background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/y20k/transistor/HEAD/app/src/main/res/mipmap-mdpi/ic_launcher_background.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/y20k/transistor/HEAD/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/ic_launcher_background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/y20k/transistor/HEAD/app/src/main/res/mipmap-xhdpi/ic_launcher_background.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/y20k/transistor/HEAD/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png
--------------------------------------------------------------------------------
/metadata/de/changelogs/83.txt:
--------------------------------------------------------------------------------
1 | # v4.0.12 - Andy Warhol
2 |
3 | **2021-03-10**
4 |
5 | - behebt die fehlerhafte Wiedergabe von der Startbildschirm-Verknüpfung
6 |
--------------------------------------------------------------------------------
/metadata/en-US/changelogs/78.txt:
--------------------------------------------------------------------------------
1 | # v4.0.6 - Andy Warhol
2 |
3 | **2020-09-03**
4 |
5 | - fixes the reappearing notification zombie
6 | - updated translations
7 |
--------------------------------------------------------------------------------
/metadata/en-US/changelogs/84.txt:
--------------------------------------------------------------------------------
1 | # v4.0.13 - Andy Warhol
2 |
3 | **2021-03-16**
4 |
5 | - tweaks the "currently playing" display
6 | - fixes a rare crash
7 |
--------------------------------------------------------------------------------
/metadata/nl/changelogs/60.txt:
--------------------------------------------------------------------------------
1 | # v3.0.10 - Oh! You Pretty Things
2 |
3 | **2018-09-27**
4 |
5 | - Arabische taalversie
6 | - verbeterde TalkBack ondersteuning
7 |
--------------------------------------------------------------------------------
/metadata/tr/changelogs/87.txt:
--------------------------------------------------------------------------------
1 | # v4.0.16 - Andy Warhol
2 |
3 | **12 Ağustos 2021**
4 |
5 | - oynatma bildirimindeki önceki ve sonraki düğmeleri düzeltildi
6 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/ic_launcher_background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/y20k/transistor/HEAD/app/src/main/res/mipmap-xxhdpi/ic_launcher_background.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/y20k/transistor/HEAD/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/ic_launcher_background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/y20k/transistor/HEAD/app/src/main/res/mipmap-xxxhdpi/ic_launcher_background.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/y20k/transistor/HEAD/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png
--------------------------------------------------------------------------------
/metadata/de/changelogs/60.txt:
--------------------------------------------------------------------------------
1 | # v3.0.10 - Oh! You Pretty Things
2 |
3 | **2018-09-27**
4 |
5 | - Arabische Sprachversion
6 | - verbesserte TalkBack-Unterstützung
7 |
--------------------------------------------------------------------------------
/metadata/de/changelogs/62.txt:
--------------------------------------------------------------------------------
1 | # v3.0.12 - Oh! You Pretty Things
2 |
3 | **2018-10-08**
4 |
5 | - aktualisierte japanische Sprachversion
6 | - kleinere Änderungen
7 |
--------------------------------------------------------------------------------
/metadata/en-US/changelogs/62.txt:
--------------------------------------------------------------------------------
1 | # v3.0.12 - Oh! You Pretty Things
2 |
3 | **2018-10-08**
4 |
5 | - updated Japanese language version
6 | - minor changes
7 |
8 |
--------------------------------------------------------------------------------
/metadata/nl/changelogs/85.txt:
--------------------------------------------------------------------------------
1 | # v4.0.14 - Andy Warhol
2 |
3 | **2021-03-20**
4 |
5 | - kleine wijziging in de melding
6 | - repareert een andere zeldzame crash
7 |
--------------------------------------------------------------------------------
/metadata/tr/changelogs/78.txt:
--------------------------------------------------------------------------------
1 | # v4.0.6 - Andy Warhol
2 |
3 | **3 Eylül 2020**
4 |
5 | - yeniden görünen bildirim zombisi düzeltildi
6 | - çeviriler güncellendi
7 |
--------------------------------------------------------------------------------
/metadata/de/changelogs/84.txt:
--------------------------------------------------------------------------------
1 | # v4.0.13 - Andy Warhol
2 |
3 | **2021-03-16**
4 |
5 | - Optimiert die Anzeige "Wird gerade gespielt"
6 | - behebt einen seltenen Absturz
7 |
--------------------------------------------------------------------------------
/metadata/de/changelogs/87.txt:
--------------------------------------------------------------------------------
1 | # v4.0.16 - Andy Warhol
2 |
3 | **2021-08-12**
4 |
5 | - Korrigiert die Schaltflächen Zurück und Weiter in der Wiedergabebenachrichtigung
6 |
--------------------------------------------------------------------------------
/metadata/nl/changelogs/82.txt:
--------------------------------------------------------------------------------
1 | # v4.0.11 - Andy Warhol
2 |
3 | **2021-02-25**
4 |
5 | - Esperanto taalversie
6 | - vertalingen bijgewerkt
7 | - gewijzigd meldingsgedrag
8 |
--------------------------------------------------------------------------------
/metadata/tr/changelogs/61.txt:
--------------------------------------------------------------------------------
1 | # v3.0.11 - Ah! Bu Güzel Şeyler
2 |
3 | **1 Ekim 2018**
4 |
5 | - Android 9'da http tabanlı bağlantılarla ilgili ciddi bir sorunu çözer
6 |
--------------------------------------------------------------------------------
/metadata/de/changelogs/85.txt:
--------------------------------------------------------------------------------
1 | # v4.0.14 - Andy Warhol
2 |
3 | **2021-03-20**
4 |
5 | - kleine Änderung der Benachrichtigung
6 | - behebt einen weiteren seltenen Absturz
7 |
--------------------------------------------------------------------------------
/metadata/en-US/changelogs/61.txt:
--------------------------------------------------------------------------------
1 | # v3.0.11 - Oh! You Pretty Things
2 |
3 | **2018-10-01**
4 |
5 | - Solves a serious issue with http-based connections on Android 9
6 |
7 |
--------------------------------------------------------------------------------
/metadata/nl/changelogs/61.txt:
--------------------------------------------------------------------------------
1 | # v3.0.11 - Oh! You Pretty Things
2 |
3 | **2018-10-01**
4 |
5 | - Lost een ernstig probleem op met http-gebaseerde verbindingen op Android 9
6 |
--------------------------------------------------------------------------------
/metadata/nl/changelogs/78.txt:
--------------------------------------------------------------------------------
1 | # v4.0.6 - Andy Warhol
2 |
3 | **2020-09-03**
4 |
5 | - herstelt de opnieuw verschijnende kennisgeving zombie
6 | - vertalingen bijgewerkt
7 |
--------------------------------------------------------------------------------
/metadata/nl/changelogs/84.txt:
--------------------------------------------------------------------------------
1 | # v4.0.13 - Andy Warhol
2 |
3 | **2021-03-16**
4 |
5 | - aanpassingen aan de " nu aan het spelen" weergave
6 | - repareert een zeldzame crash
7 |
--------------------------------------------------------------------------------
/metadata/tr/changelogs/82.txt:
--------------------------------------------------------------------------------
1 | # v4.0.11 - Andy Warhol
2 |
3 | **25 Şubat 2021**
4 |
5 | - Esperanto sürümü
6 | - çeviriler güncellendi
7 | - bildirim davranışı değiştirildi
8 |
--------------------------------------------------------------------------------
/metadata/tr/changelogs/85.txt:
--------------------------------------------------------------------------------
1 | # v4.0.14 - Andy Warhol
2 |
3 | **20 Mart 2021**
4 |
5 | - bildirimde küçük bir değişiklik
6 | - ara sıra oluşan başka bir çökme düzeltildi
7 |
--------------------------------------------------------------------------------
/app/src/main/res/values/ic_launcher_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | #3C98DB
4 |
--------------------------------------------------------------------------------
/metadata/de/changelogs/78.txt:
--------------------------------------------------------------------------------
1 | # v4.0.6 - Andy Warhol
2 |
3 | **2020-09-03**
4 |
5 | - behebt den wieder auftauchenden Benachrichtigungs-Zombie
6 | - aktualisierte Übersetzungen
7 |
--------------------------------------------------------------------------------
/metadata/en-US/phoneScreenshots/01-transistor-v4.1.0-playback.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/y20k/transistor/HEAD/metadata/en-US/phoneScreenshots/01-transistor-v4.1.0-playback.png
--------------------------------------------------------------------------------
/metadata/nl/changelogs/59.txt:
--------------------------------------------------------------------------------
1 | # v3.0.9 - Oh! You Pretty Things
2 |
3 | **2018-08-08**
4 |
5 | - metadataweergave kan UTF-8 en Latin1-tekens aan
6 | - bijgewerkte vertalingen
7 |
--------------------------------------------------------------------------------
/metadata/tr/changelogs/84.txt:
--------------------------------------------------------------------------------
1 | # v4.0.13 - Andy Warhol
2 |
3 | **16 Mart 2021**
4 |
5 | - "şimdi oynatılıyor" ekranı değişiklikleri
6 | - ara sıra oluşan bir çökme düzeltildi
7 |
--------------------------------------------------------------------------------
/metadata/de/changelogs/61.txt:
--------------------------------------------------------------------------------
1 | # v3.0.11 - Oh! You Pretty Things
2 |
3 | **2018-10-01**
4 |
5 | - behebt ein schwerwiegendes Problem mit http-basierten Verbindungen unter Android 9
6 |
--------------------------------------------------------------------------------
/metadata/en-US/changelogs/60.txt:
--------------------------------------------------------------------------------
1 | # v3.0.10 - Oh! You Pretty Things
2 |
3 | **2018-09-27**
4 |
5 | - Arabic language version
6 | - improved TalkBack support
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/metadata/en-US/changelogs/82.txt:
--------------------------------------------------------------------------------
1 | # v4.0.11 - Andy Warhol
2 |
3 | **2021-02-25**
4 |
5 | - Esperanto language version
6 | - updated translations
7 | - changed notification behavior
8 |
--------------------------------------------------------------------------------
/metadata/en-US/phoneScreenshots/03-transistor-v4.1.0-add-station.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/y20k/transistor/HEAD/metadata/en-US/phoneScreenshots/03-transistor-v4.1.0-add-station.png
--------------------------------------------------------------------------------
/metadata/de/changelogs/82.txt:
--------------------------------------------------------------------------------
1 | # v4.0.11 - Andy Warhol
2 |
3 | **2021-02-25**
4 |
5 | - Esperanto-Sprachversion
6 | - aktualisierte Übersetzungen
7 | - Benachrichtigungsverhalten geändert
8 |
--------------------------------------------------------------------------------
/metadata/en-US/changelogs/59.txt:
--------------------------------------------------------------------------------
1 | # v3.0.9 - Oh! You Pretty Things
2 |
3 | **2018-08-08**
4 |
5 | - metadata display can handle UTF-8 and Latin1 characters
6 | - updated translations
7 |
8 |
--------------------------------------------------------------------------------
/metadata/en-US/phoneScreenshots/05-transistor-v4.1.0-delete-station.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/y20k/transistor/HEAD/metadata/en-US/phoneScreenshots/05-transistor-v4.1.0-delete-station.png
--------------------------------------------------------------------------------
/metadata/en-US/phoneScreenshots/06-transistor-v4.1.0-edit-station.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/y20k/transistor/HEAD/metadata/en-US/phoneScreenshots/06-transistor-v4.1.0-edit-station.png
--------------------------------------------------------------------------------
/metadata/tr/changelogs/59.txt:
--------------------------------------------------------------------------------
1 | # v3.0.9 - Ah! Bu Güzel Şeyler
2 |
3 | **8 Ağustos 2018**
4 |
5 | - üst veri ekranı UTF-8 ve Latin1 karakterlerini işleyebilir
6 | - çeviriler güncellendi
7 |
--------------------------------------------------------------------------------
/metadata/de/changelogs/59.txt:
--------------------------------------------------------------------------------
1 | # v3.0.9 - Oh! You Pretty Things
2 |
3 | **2018-08-08**
4 |
5 | - Metadatenanzeige kann UTF-8 und Latin1-Zeichen verarbeiten
6 | - aktualisierte Übersetzungen
7 |
--------------------------------------------------------------------------------
/metadata/en-US/phoneScreenshots/02-transistor-v4.1.0-playback-details.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/y20k/transistor/HEAD/metadata/en-US/phoneScreenshots/02-transistor-v4.1.0-playback-details.png
--------------------------------------------------------------------------------
/metadata/en-US/phoneScreenshots/04-transistor-v4.1.0-favorite-station.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/y20k/transistor/HEAD/metadata/en-US/phoneScreenshots/04-transistor-v4.1.0-favorite-station.png
--------------------------------------------------------------------------------
/metadata/en-US/changelogs/67.txt:
--------------------------------------------------------------------------------
1 | # v3.2.0 - Life on Mars?
2 |
3 | **2019-06-26**
4 |
5 | - Italian translation
6 | - list of radio stations has larger icons
7 | - main app icon color changed to red
8 |
9 |
--------------------------------------------------------------------------------
/metadata/de/changelogs/67.txt:
--------------------------------------------------------------------------------
1 | # v3.2.0 - Life on Mars?
2 |
3 | **2019-06-26**
4 |
5 | - italienische Übersetzung
6 | - Liste der Radiosender hat größere Icons
7 | - Farbe des Hauptappsymbols auf rot geändert
8 |
--------------------------------------------------------------------------------
/metadata/en-US/changelogs/88.txt:
--------------------------------------------------------------------------------
1 | # v4.0.17 - Andy Warhol
2 |
3 | **2021-11-05**
4 |
5 | - app theme now uses "dynamic colors" (Material You) on Android 12
6 | - small bug fixes
7 | - updated translations
8 |
--------------------------------------------------------------------------------
/app/src/main/res/xml/backup_rules.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/metadata/en-US/changelogs/89.txt:
--------------------------------------------------------------------------------
1 | # v4.0.18 - Andy Warhol
2 |
3 | **2022-01-14**
4 |
5 | - minor layout changes to better fit in with the "Material Design 3" theme introduced in Android 12
6 | - updated translations
--------------------------------------------------------------------------------
/metadata/nl/changelogs/67.txt:
--------------------------------------------------------------------------------
1 | # v3.2.0 - Life on Mars?
2 |
3 | **2019-06-26**
4 |
5 | - Italiaanse vertaling
6 | - lijst van radiostations heeft grotere iconen
7 | - kleur van icoon van app is veranderd in rood
8 |
--------------------------------------------------------------------------------
/metadata/nl/changelogs/88.txt:
--------------------------------------------------------------------------------
1 | # v4.0.17 - Andy Warhol
2 |
3 | **2021-11-05**
4 |
5 | - app thema gebruikt nu "dynamische kleuren" (Material You) op Android 12
6 | - kleine bug fixes
7 | - vertalingen bijgewerkt
8 |
--------------------------------------------------------------------------------
/metadata/tr/changelogs/86.txt:
--------------------------------------------------------------------------------
1 | # v4.0.15 - Andy Warhol
2 |
3 | **28 Temmuz 2021**
4 |
5 | - yeni dil: Frizce
6 | - çeviriler güncellendi
7 | - Transistor, oynatma durdurulduğunda ara belleğe almayı artık hemen durdurur
8 |
--------------------------------------------------------------------------------
/metadata/en-US/changelogs/68.txt:
--------------------------------------------------------------------------------
1 | # v3.2.1 - Life on Mars?
2 |
3 | **2019-07-25**
4 |
5 | - Czech translation
6 | - the "now playing" metadata feature displays non-latin characters better (less unreadable gibberish)
7 |
8 |
--------------------------------------------------------------------------------
/metadata/en-US/changelogs/86.txt:
--------------------------------------------------------------------------------
1 | # v4.0.15 - Andy Warhol
2 |
3 | **2021-07-28**
4 |
5 | - new language: Frisian
6 | - updated translations
7 | - Transistor now stops buffering immediately, when playback has been stopped
8 |
--------------------------------------------------------------------------------
/metadata/nl/changelogs/68.txt:
--------------------------------------------------------------------------------
1 | # v3.2.1 - Life on Mars?
2 |
3 | **2019-07-25**
4 |
5 | - Tsjechische vertaling
6 | - de "nu spelen" metadata functie geeft niet-Latijnse karakters beter weer (minder onleesbaar gebrabbel)
7 |
--------------------------------------------------------------------------------
/metadata/nl/changelogs/86.txt:
--------------------------------------------------------------------------------
1 | # v4.0.15 - Andy Warhol
2 |
3 | **2021-07-28**
4 |
5 | - nieuwe taal: Fries
6 | - bijgewerkte vertalingen
7 | - Transistor stopt nu onmiddellijk met bufferen, wanneer het afspelen is gestopt
8 |
--------------------------------------------------------------------------------
/metadata/tr/changelogs/89.txt:
--------------------------------------------------------------------------------
1 | # v4.0.18 - Andy Warhol
2 |
3 | **14 Ocak 2022**
4 |
5 | - Android 12'de ile gelen "Material Tasarım 3" temasına daha iyi uyması için küçük düzen değişiklikleri
6 | - çeviriler güncellendi
7 |
--------------------------------------------------------------------------------
/metadata/de/changelogs/88.txt:
--------------------------------------------------------------------------------
1 | # v4.0.17 - Andy Warhol
2 |
3 | **2021-11-05**
4 |
5 | - App-Design verwendet jetzt "dynamische Farben" (Material You) auf Android 12
6 | - kleine Fehlerbehebungen
7 | - aktualisierte Übersetzungen
8 |
--------------------------------------------------------------------------------
/metadata/tr/changelogs/88.txt:
--------------------------------------------------------------------------------
1 | # v4.0.17 - Andy Warhol
2 |
3 | **5 Kasım 2021**
4 |
5 | - uygulama teması artık Android 12'de "dinamik renkler" (Material You) kullanıyor
6 | - küçük hata düzeltmeleri
7 | - çeviriler güncellendi
8 |
--------------------------------------------------------------------------------
/metadata/de/changelogs/68.txt:
--------------------------------------------------------------------------------
1 | # v3.2.1 - Life on Mars?
2 |
3 | **2019-07-25**
4 |
5 | - Tschechische Übersetzung
6 | - die "now playing" Metadaten-Funktion zeigt nicht-lateinische Zeichen besser an (weniger unlesbares Kauderwelsch)
7 |
--------------------------------------------------------------------------------
/metadata/de/changelogs/86.txt:
--------------------------------------------------------------------------------
1 | # v4.0.15 - Andy Warhol
2 |
3 | **2021-07-28**
4 |
5 | - neue Sprache: Friesisch
6 | - aktualisierte Übersetzungen
7 | - Transistor beendet jetzt sofort die Pufferung, wenn die Wiedergabe gestoppt wurde
8 |
--------------------------------------------------------------------------------
/metadata/de/changelogs/89.txt:
--------------------------------------------------------------------------------
1 | # v4.0.18 - Andy Warhol
2 |
3 | **2022-01-14**
4 |
5 | - kleinere Layoutänderungen zur besseren Anpassung an das in Android 12 eingeführte "Material Design 3" Design
6 | - aktualisierte Übersetzungen
7 |
--------------------------------------------------------------------------------
/metadata/en-US/changelogs/65.txt:
--------------------------------------------------------------------------------
1 | # v3.1.1 - John, I’m Only Dancing
2 |
3 | **2019-01-16**
4 |
5 | - supports the Android system audio equalizer
6 | - bugfixes
7 | - updated translations
8 | - improved dark mode support
9 |
10 |
--------------------------------------------------------------------------------
/metadata/nl/changelogs/89.txt:
--------------------------------------------------------------------------------
1 | # v4.0.18 - Andy Warhol
2 |
3 | **2022-01-14**
4 |
5 | - kleine lay-outwijzigingen om beter aan te sluiten bij het "Material Design 3"-thema dat in Android 12 is geïntroduceerd
6 | - bijgewerkte vertalingen
7 |
--------------------------------------------------------------------------------
/metadata/tr/changelogs/65.txt:
--------------------------------------------------------------------------------
1 | # v3.1.1 - John, Yalnızca Dans Ediyorum
2 |
3 | **16 Ocak 2019**
4 |
5 | - Android sistem ses dengeleyicisi desteği
6 | - hata düzeltmeleri
7 | - çeviriler güncellendi
8 | - koyu mod desteği iyileştirildi
9 |
--------------------------------------------------------------------------------
/metadata/tr/changelogs/67.txt:
--------------------------------------------------------------------------------
1 | # v3.2.0 - Mars'ta Yaşam mı?
2 |
3 | **26 Haziran 2019**
4 |
5 | - İtalyanca çeviri
6 | - radyo istasyonları listesi daha büyük simgelere sahip
7 | - ana uygulama simgesi rengi kırmızı olarak değiştirildi
8 |
--------------------------------------------------------------------------------
/metadata/he/changelogs/91.txt:
--------------------------------------------------------------------------------
1 | # v4.1.1 - אהבה מודרנית
2 |
3 | **2022-05-12**
4 |
5 | - אפשרות חדשה לגבות (ולשחזר) את כל תחנות הרדיו כולל תמונות
6 | - תיקון לתמונת ברירת מחדל מטושטשת לתחנה
7 | - תיקונים לתרגום באינדונזית
8 | - התרגומים עודכנו
9 |
--------------------------------------------------------------------------------
/metadata/en-US/changelogs/80.txt:
--------------------------------------------------------------------------------
1 | # v4.0.8 - Andy Warhol
2 |
3 | **2020-11-25**
4 |
5 | - Hebrew language version
6 | - updated translations
7 | - Android Auto station image display fixed
8 | - manual station image selection on Android 11 fixed
9 |
--------------------------------------------------------------------------------
/metadata/he/changelogs/90.txt:
--------------------------------------------------------------------------------
1 | # v4.1.0 - אהבה מודרנית
2 |
3 | **2022-03-08**
4 |
5 | - עיצוב מחדש שמשתמש ברכיבים ובצבעים של „Material Design 3”
6 | - תוקנה התראה על נגינה שמופיעה שוב ושוב ב־Android 11
7 | - גרסה בשפה הגליסית
8 | - התרגומים עודכנו
9 |
--------------------------------------------------------------------------------
/metadata/nl/changelogs/65.txt:
--------------------------------------------------------------------------------
1 | # v3.1.1 - John, I’m Only Dancing
2 |
3 | **2019-01-16**
4 |
5 | - ondersteunt de audio-equalizer van het Android-systeem
6 | - bugfixes
7 | - bijgewerkte vertalingen
8 | - verbeterde ondersteuning voor donkere modus
9 |
--------------------------------------------------------------------------------
/metadata/nl/changelogs/76.txt:
--------------------------------------------------------------------------------
1 | # v4.0.4 - Andy Warhol
2 |
3 | **2020-07-27**
4 |
5 | - verbeterde scrollprestaties
6 |
7 | De v4 update was vrij groot, ontdek meer: https://github.com/y20k/transistor/blob/master/metadata/en-US/changelogs/72.txt
8 |
--------------------------------------------------------------------------------
/metadata/de/changelogs/65.txt:
--------------------------------------------------------------------------------
1 | # v3.1.1 - John, I’m Only Dancing
2 |
3 | **2019-01-16**
4 |
5 | - unterstützt den Audio-Equalizer des Android-Systems
6 | - Fehlerbehebungen
7 | - aktualisierte Übersetzungen
8 | - verbesserte Unterstützung des Dark Mode
9 |
--------------------------------------------------------------------------------
/metadata/nl/changelogs/80.txt:
--------------------------------------------------------------------------------
1 | # v4.0.8 - Andy Warhol
2 |
3 | **2020-11-25**
4 |
5 | - Hebreeuwse taalversie
6 | - bijgewerkte vertalingen
7 | - Android Auto zender beeldweergave gerepareerd
8 | - handmatige zenderlogo selectie op Android 11 gerepareerd
9 |
--------------------------------------------------------------------------------
/metadata/tr/changelogs/68.txt:
--------------------------------------------------------------------------------
1 | # v3.2.1 - Mars'ta Yaşam mı?
2 |
3 | **25 Temmuz 2019**
4 |
5 | - Çekçe çeviri
6 | - "şimdi oynatılıyor" üst veri özelliği, latin alfabesi dışındaki karakterleri daha iyi görüntüler (okunamayan anlamsız karakterler azaldı)
7 |
--------------------------------------------------------------------------------
/app/src/main/res/xml/provider_paths.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/metadata/de/changelogs/80.txt:
--------------------------------------------------------------------------------
1 | # v4.0.8 - Andy Warhol
2 |
3 | **2020-11-25**
4 |
5 | - Hebräische Sprachversion
6 | - Übersetzungen aktualisiert
7 | - Anzeige des Senderlogos in Android Auto behoben
8 | - manuelle Senderlogoauswahl unter Android 11 behoben
9 |
--------------------------------------------------------------------------------
/metadata/en-US/changelogs/76.txt:
--------------------------------------------------------------------------------
1 | # v4.0.4 - Andy Warhol
2 |
3 | **2020-07-27**
4 |
5 | - improved scrolling performance
6 |
7 | The v4 update was pretty big, find out more: https://github.com/y20k/transistor/blob/master/metadata/en-US/changelogs/72.txt
8 |
--------------------------------------------------------------------------------
/metadata/en-US/changelogs/91.txt:
--------------------------------------------------------------------------------
1 | # v4.1.1 - Modern Love
2 |
3 | **2022-05-12**
4 |
5 | - new option to backup (and restore) all radio stations including images
6 | - fix for blurry default station image
7 | - Indonesian language fix
8 | - updated translations
--------------------------------------------------------------------------------
/metadata/tr/changelogs/80.txt:
--------------------------------------------------------------------------------
1 | # v4.0.8 - Andy Warhol
2 |
3 | **25 Ekim 2020**
4 |
5 | - İbranice sürümü
6 | - çeviriler güncellendi
7 | - Android Auto istasyon görselinin görüntülenmesi düzeltildi
8 | - Android 11'de elle istasyon görseli seçimi düzeltildi
9 |
--------------------------------------------------------------------------------
/metadata/de/changelogs/64.txt:
--------------------------------------------------------------------------------
1 | # v3.1.0 - John, I’m Only Dancing
2 |
3 | **2018-11-19**
4 |
5 | - neues App-Icon (danke @munadikieh)
6 | - verbesserte Handhabung von Links von radio-browser.info
7 | - Benutzeroberfläche mit neuem Farbschema
8 | - Fehlerbehebungen
9 |
--------------------------------------------------------------------------------
/metadata/nl/changelogs/64.txt:
--------------------------------------------------------------------------------
1 | # v3.1.0 - John, I’m Only Dancing
2 |
3 | **2018-11-19**
4 |
5 | - nieuw app icoon (thx @munadikieh)
6 | - verbeterde behandeling van links van radio-browser.info
7 | - gebruikersinterface met een nieuw kleurenschema
8 | - bugfixes
9 |
--------------------------------------------------------------------------------
/metadata/de/changelogs/76.txt:
--------------------------------------------------------------------------------
1 | # v4.0.4 - Andy Warhol
2 |
3 | **2020-07-27**
4 |
5 | - verbesserte Scrolling-Leistung
6 |
7 | Das v4-Update war ziemlich umfangreich, erfahre mehr unter: https://github.com/y20k/transistor/blob/master/metadata/en-US/changelogs/72.txt
8 |
--------------------------------------------------------------------------------
/metadata/en-US/changelogs/64.txt:
--------------------------------------------------------------------------------
1 | # v3.1.0 - John, I’m Only Dancing
2 |
3 | **2018-11-19**
4 |
5 | - new app icon (thx @munadikieh)
6 | - improved handling of links from radio-browser.info
7 | - user interface with a new color scheme
8 | - bug fixes
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/shape_list_station_image.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/metadata/tr/changelogs/76.txt:
--------------------------------------------------------------------------------
1 | # v4.0.4 - Andy Warhol
2 |
3 | **27 Temmuz 2020**
4 |
5 | - kaydırma performansı iyileştirildi
6 |
7 | v4 güncellemesi oldukça büyüktü, daha fazlasını öğrenin: https://github.com/y20k/transistor/blob/master/metadata/en-US/changelogs/72.txt
8 |
--------------------------------------------------------------------------------
/metadata/en-US/changelogs/81.txt:
--------------------------------------------------------------------------------
1 | # v4.0.10 - Andy Warhol
2 |
3 | **2021-01-01**
4 |
5 | - fixes a bug in the Update Stations feature, that could leave Transistor in a weired state, where only single station is playable (see also: https://github.com/y20k/transistor/issues/291)
6 |
--------------------------------------------------------------------------------
/metadata/en-US/changelogs/90.txt:
--------------------------------------------------------------------------------
1 | # v4.1.0 - Modern Love
2 |
3 | **2022-03-08**
4 |
5 | - design overhaul that makes use of "Material Design 3" elements and colors
6 | - fix re-appearing playback notification on Android 11
7 | - Galician language version
8 | - updated translations
--------------------------------------------------------------------------------
/metadata/tr/changelogs/90.txt:
--------------------------------------------------------------------------------
1 | # v4.1.0 - Modern Aşk
2 |
3 | **8 Mart 2022**
4 |
5 | - "Material Tasarım 3" ögelerini ve renklerini kullanan tasarım değişikliği
6 | - Android 11'de yeniden görünen oynatma bildirimi düzeltildi
7 | - Galiçyaca sürümü
8 | - çeviriler güncellendi
9 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/shape_search_result_item.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | #Fri Jan 28 14:15:43 CET 2022
2 | distributionBase=GRADLE_USER_HOME
3 | distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.3-bin.zip
4 | distributionPath=wrapper/dists
5 | zipStorePath=wrapper/dists
6 | zipStoreBase=GRADLE_USER_HOME
7 |
--------------------------------------------------------------------------------
/metadata/tr/changelogs/91.txt:
--------------------------------------------------------------------------------
1 | # v4.1.1 - Modern Love
2 |
3 | **12 Mayıs 2022**
4 |
5 | - görseller dahil tüm radyo istasyonlarını yedekleme (ve geri yükleme) için yeni seçenek
6 | - bulanık öntanımlı istasyon görseli için düzeltme
7 | - Endonezce dili düzeltmesi
8 | - güncellenen çeviriler
9 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | README
2 | ======
3 |
4 | # Transistor - Simple Radio App
5 |
6 | ## Note
7 | This project is now read-only. It has been moved over to Codeberg. The development of this project continues at its new home.
8 |
9 | * [Transistor on Codeberg](https://codeberg.org/y20k/transistor)
10 |
--------------------------------------------------------------------------------
/metadata/de/changelogs/91.txt:
--------------------------------------------------------------------------------
1 | # v4.1.1 - Modern Love
2 |
3 | **2022-05-12**
4 |
5 | - neue Option zum Sichern (und Wiederherstellen) aller Radiosender inklusive der Logos
6 | - Fix für verschwommenes Standardsenderlogo
7 | - Korrektur der indonesischen Sprache
8 | - aktualisierte Übersetzungen
9 |
--------------------------------------------------------------------------------
/metadata/nl/changelogs/81.txt:
--------------------------------------------------------------------------------
1 | # v4.0.10 - Andy Warhol
2 |
3 | **2021-01-01**
4 |
5 | - lost een bug op in de functie Zenders bijwerken, die Transistor in een verminkte toestand kon brengen, waarin slechts één zender beluisterd kan worden (zie ook: https://github.com/y20k/transistor/issues/291)
6 |
--------------------------------------------------------------------------------
/metadata/tr/changelogs/81.txt:
--------------------------------------------------------------------------------
1 | # v4.0.10 - Andy Warhol
2 |
3 | **1 Ocak 2021**
4 |
5 | - İstasyonları Güncelle özelliğindeki, Transistörü yalnızca tek istasyonun oynatılabilir olduğu garip bir durumda bırakabilecek bir hata düzeltildi (ayrıca bkz: https://github.com/y20k/transistor/issues/291)
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/shape_search_result_item_selected.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/metadata/nl/changelogs/91.txt:
--------------------------------------------------------------------------------
1 | # v4.1.1 - Modern Love
2 |
3 | **2022-05-12**
4 |
5 | - nieuwe optie om back-up te maken (en te herstellen) van alle zenders, inclusief afbeeldingen
6 | - oplossing voor wazige standaard zenderafbeelding
7 | - correctie voor Indonesische taal
8 | - bijgewerkte vertalingen
9 |
--------------------------------------------------------------------------------
/metadata/ru/changelogs/91.txt:
--------------------------------------------------------------------------------
1 | # v4.1.1 - Modern Love
2 |
3 | **2022-05-12**
4 |
5 | - новая опция для резервного копирования (и восстановления) всех радиостанций, включая изображения
6 | - исправление размытого изображения станции по умолчанию
7 | - исправление индонезийского языка
8 | - обновлены переводы
9 |
--------------------------------------------------------------------------------
/metadata/de/changelogs/81.txt:
--------------------------------------------------------------------------------
1 | # v4.0.10 - Andy Warhol
2 |
3 | **2021-01-01**
4 |
5 | - behebt einen Fehler in der "Sender aktualisieren"-Funktion, der Transistor in einen verwirrten Zustand versetzen konnte, in dem nur eine einzige Station spielbar war (siehe auch: https://github.com/y20k/transistor/issues/291)
6 |
--------------------------------------------------------------------------------
/metadata/en-US/changelogs/77.txt:
--------------------------------------------------------------------------------
1 | # v4.0.5 - Andy Warhol
2 |
3 | **2020-07-29**
4 |
5 | - fixes search on devices, on which the language is set to Greek
6 | - updated translations
7 |
8 | The v4 update was pretty big, find out more: https://github.com/y20k/transistor/blob/master/metadata/en-US/changelogs/72.txt
9 |
--------------------------------------------------------------------------------
/metadata/nl/changelogs/90.txt:
--------------------------------------------------------------------------------
1 | # v4.1.0 - Modern Love
2 |
3 | **2022-03-08**
4 |
5 | - ontwerpherziening waarbij gebruik wordt gemaakt van "Material Design 3"-elementen en kleuren
6 | - reparatie van opnieuw verschijnende weergavemelding op Android 11
7 | - Galicische taalversie
8 | - bijgewerkte vertalingen
9 |
--------------------------------------------------------------------------------
/metadata/tr/changelogs/64.txt:
--------------------------------------------------------------------------------
1 | # v3.1.0 - John, Yalnızca Dans Ediyorum
2 |
3 | **19 Ekim 2018**
4 |
5 | - yeni uygulama simgesi (teşekkürler @munadikieh)
6 | - radio-browser.info adresinden gelen bağlantıların kullanımı iyileştirildi
7 | - yeni bir renk düzenine sahip kullanıcı arayüzü
8 | - hata düzeltmeleri
9 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/shape_player_button_small.xml:
--------------------------------------------------------------------------------
1 |
4 |
7 |
8 |
--------------------------------------------------------------------------------
/metadata/nl/changelogs/77.txt:
--------------------------------------------------------------------------------
1 | # v4.0.5 - Andy Warhol
2 |
3 | **2020-07-29**
4 |
5 | - repareert zoeken op apparaten waarvan de taal is ingesteld op Grieks
6 | - vertalingen bijgewerkt
7 |
8 | De v4 update was vrij groot, ontdek meer: https://github.com/y20k/transistor/blob/master/metadata/en-US/changelogs/72.txt
9 |
--------------------------------------------------------------------------------
/app/src/main/res/xml/network_security_config.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/metadata/de/changelogs/90.txt:
--------------------------------------------------------------------------------
1 | # v4.1.0 - Modern Love
2 |
3 | **2022-03-08**
4 |
5 | - Überarbeitung des Designs unter Verwendung von "Material Design 3"-Elementen und Farben
6 | - Behebung einer neu erscheinenden Wiedergabe-Benachrichtigung unter Android 11
7 | - Galicische Sprachversion
8 | - aktualisierte Übersetzungen
9 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/metadata/tr/changelogs/77.txt:
--------------------------------------------------------------------------------
1 | # v4.0.5 - Andy Warhol
2 |
3 | **29 Temmuz 2020**
4 |
5 | - dilin Yunanca olarak ayarlandığı aygıtlarda arama düzeltildi
6 | - çeviriler güncellendi
7 |
8 | v4 güncellemesi oldukça büyüktü, daha fazlasını öğrenin: https://github.com/y20k/transistor/blob/master/metadata/en-US/changelogs/72.txt
9 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/metadata/README.md:
--------------------------------------------------------------------------------
1 | # F-Droid Assets
2 | This folder contains the assets used on [Transistors's F-Droid store page](https://f-droid.org/repository/browse/?fdid=org.y20k.transistor). More about adding assets -> [All About Descriptions, Graphics, and Screenshots](https://f-droid.org/en/docs/All_About_Descriptions_Graphics_and_Screenshots/).
3 |
--------------------------------------------------------------------------------
/metadata/de/changelogs/77.txt:
--------------------------------------------------------------------------------
1 | # v4.0.5 - Andy Warhol
2 |
3 | **2020-07-29**
4 |
5 | - behebt die Suche auf Geräten, auf denen die Sprache auf Griechisch eingestellt ist
6 | - aktualisierte Übersetzungen
7 |
8 | Das v4-Update war ziemlich umfangreich, erfahre mehr unter: https://github.com/y20k/transistor/blob/master/metadata/en-US/changelogs/72.txt
9 |
--------------------------------------------------------------------------------
/metadata/en-US/changelogs/74.txt:
--------------------------------------------------------------------------------
1 | # v4.0.2 - Andy Warhol
2 |
3 | **2020-07-08**
4 |
5 | - fixes a bug with importing stream URLs (you may need to update the station)
6 | - brings back metadata display for Android Auto
7 |
8 | The v4 update was pretty big, find out more: https://github.com/y20k/transistor/blob/master/metadata/en-US/changelogs/72.txt
9 |
--------------------------------------------------------------------------------
/metadata/en-US/changelogs/75.txt:
--------------------------------------------------------------------------------
1 | # v4.0.3 - Andy Warhol
2 |
3 | **2020-07-22**
4 |
5 | - Android Auto resumes playback of last played station
6 | - updated and new translations
7 | - a couple of small bug fixes
8 |
9 | The v4 update was pretty big, find out more: https://github.com/y20k/transistor/blob/master/metadata/en-US/changelogs/72.txt
10 |
--------------------------------------------------------------------------------
/metadata/nl/changelogs/75.txt:
--------------------------------------------------------------------------------
1 | # v4.0.3 - Andy Warhol
2 |
3 | **2020-07-22**
4 |
5 | - Android Auto hervat het afspelen van de laatst afgespeelde zender
6 | - bijgewerkte en nieuwe vertalingen
7 | - een paar kleine bug fixes
8 |
9 | De v4 update was vrij groot, ontdek meer: https://github.com/y20k/transistor/blob/master/metadata/en-US/changelogs/72.txt
10 |
--------------------------------------------------------------------------------
/metadata/nl/changelogs/74.txt:
--------------------------------------------------------------------------------
1 | # v4.0.2 - Andy Warhol
2 |
3 | **2020-07-08**
4 |
5 | - lost een bug op met het importeren van stream URL's (het kan zijn dat je het station moet updaten)
6 | - brengt metadata-weergave voor Android Auto terug
7 |
8 | De v4 update was vrij groot, ontdek meer: https://github.com/y20k/transistor/blob/master/metadata/en-US/changelogs/72.txt
9 |
--------------------------------------------------------------------------------
/metadata/tr/changelogs/75.txt:
--------------------------------------------------------------------------------
1 | # v4.0.3 - Andy Warhol
2 |
3 | **22 Temmuz 2020**
4 |
5 | - Android Auto, son çalınan istasyonun oynatımını sürdürür
6 | - güncellenen ve yeni çeviriler
7 | - birkaç küçük hata düzeltmesi
8 |
9 | v4 güncellemesi oldukça büyüktü, daha fazlasını öğrenin: https://github.com/y20k/transistor/blob/master/metadata/en-US/changelogs/72.txt
10 |
--------------------------------------------------------------------------------
/metadata/en-US/changelogs/73.txt:
--------------------------------------------------------------------------------
1 | # v4.0.1 - Andy Warhol
2 |
3 | **2020-07-05**
4 |
5 | - fixes several small bugs with v4.0.0
6 | -- metadata in notification updates correctly
7 | -- improved HLS support
8 | -- sorting is case insensitive
9 |
10 | The v4 update was pretty big, find out more: https://github.com/y20k/transistor/blob/master/metadata/en-US/changelogs/72.txt
11 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_player_play_symbol_36dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_player_play_symbol_54dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
--------------------------------------------------------------------------------
/app/src/main/res/values/values.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | @drawable/ic_notification_play_36dp
4 | @drawable/ic_notification_stop_36dp
5 | @drawable/ic_notification_clear_36dp
6 |
7 |
--------------------------------------------------------------------------------
/metadata/nl/changelogs/73.txt:
--------------------------------------------------------------------------------
1 | # v4.0.1 - Andy Warhol
2 |
3 | **2020-07-05**
4 |
5 | - repareert diverse kleine bugs met v4.0.0
6 | -- metadata in notificatie updates correct
7 | -- verbeterde HLS ondersteuning
8 | -- sorteren is hoofdletterongevoelig
9 |
10 | De v4 update was vrij groot, ontdek meer: https://github.com/y20k/transistor/blob/master/metadata/en-US/changelogs/72.txt
11 |
--------------------------------------------------------------------------------
/metadata/de/changelogs/75.txt:
--------------------------------------------------------------------------------
1 | # v4.0.3 - Andy Warhol
2 |
3 | **2020-07-22**
4 |
5 | - Android Auto setzt die Wiedergabe des zuletzt gespielten Senders fort
6 | - aktualisierte und neue Übersetzungen
7 | - ein paar kleine Fehlerbehebungen
8 |
9 | Das v4-Update war ziemlich umfangreich, erfahre mehr unter: https://github.com/y20k/transistor/blob/master/metadata/en-US/changelogs/72.txt
10 |
--------------------------------------------------------------------------------
/metadata/tr/changelogs/74.txt:
--------------------------------------------------------------------------------
1 | # v4.0.2 - Andy Warhol
2 |
3 | **8 Temmuz 2020**
4 |
5 | - yayın URL'lerinin içe aktarılmasıyla ilgili bir hata düzeltildi (istasyonu güncellemeniz gerekebilir)
6 | - Android Auto için üst veri görüntülemeyi geri getirir
7 |
8 | v4 güncellemesi oldukça büyüktü, daha fazlasını öğrenin: https://github.com/y20k/transistor/blob/master/metadata/en-US/changelogs/72.txt
9 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_notification_stop_36dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/metadata/de/changelogs/74.txt:
--------------------------------------------------------------------------------
1 | # v4.0.2 - Andy Warhol
2 |
3 | **2020-07-08**
4 |
5 | - behebt einen Fehler beim Importieren von Stream-URLs (möglicherweise muss der Sender aktualisiert werden)
6 | - bringt die Metadatenanzeige für Android Auto zurück
7 |
8 | Das v4-Update war ziemlich umfangreich, erfahre mehr unter: https://github.com/y20k/transistor/blob/master/metadata/en-US/changelogs/72.txt
9 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_notification_play_36dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_player_stop_symbol_36dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_player_stop_symbol_54dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/metadata/tr/changelogs/73.txt:
--------------------------------------------------------------------------------
1 | # v4.0.1 - Andy Warhol
2 |
3 | **5 Temmuz 2020**
4 |
5 | - v4.0.0 ile birkaç küçük hata düzeltildi
6 | -- bildirimdeki üst veriler doğru şekilde güncellenir
7 | -- HLS desteği iyileştirildi
8 | -- sıralama büyük/küçük harfe duyarlı değil
9 |
10 | v4 güncellemesi oldukça büyüktü, daha fazlasını öğrenin: https://github.com/y20k/transistor/blob/master/metadata/en-US/changelogs/72.txt
11 |
--------------------------------------------------------------------------------
/metadata/en-US/changelogs/72.txt:
--------------------------------------------------------------------------------
1 | # v4.0.0 - Andy Warhol
2 |
3 | **2020-07-03**
4 |
5 | - this is a huge update
6 | - Transistor has been re-written from scratch in Kotlin
7 | - a couple of new user-facing features:
8 | -- radio station search (via radio-browser.info)
9 | -- you can mark a radio station as a favorite
10 | -- a dedicated Settings screen
11 |
12 | Find out more: https://github.com/y20k/transistor/issues/251
--------------------------------------------------------------------------------
/metadata/nl/changelogs/72.txt:
--------------------------------------------------------------------------------
1 | # v4.0.0 - Andy Warhol
2 |
3 | **2020-07-03**
4 |
5 | - dit is een enorme update
6 | - Transistor is helemaal herschreven in Kotlin
7 | - enkele nieuwe gebruikersfuncties:
8 | -- radio station zoeken (via radio-browser.info)
9 | -- je kunt een radiozender als favoriet markeren
10 | -- een speciaal scherm voor instellingen
11 |
12 | Ontdek meer: https://github.com/y20k/transistor/issues/251
13 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_add_24dp.xml:
--------------------------------------------------------------------------------
1 |
7 |
10 |
11 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_chevron_left_24dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_chevron_right_24dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/shape_player_button_small_selected.xml:
--------------------------------------------------------------------------------
1 |
4 |
7 |
10 |
11 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_notification_skip_to_next_36dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_notification_skip_to_previous_36dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/metadata/de/changelogs/73.txt:
--------------------------------------------------------------------------------
1 | # v4.0.1 - Andy Warhol
2 |
3 | **2020-07-05**
4 |
5 | - behebt mehrere kleine Fehler in v4.0.0
6 | -- Metadaten in Benachrichtigungen werden korrekt aktualisiert
7 | -- verbesserte HLS-Unterstützung
8 | -- Sortierung ist unabhängig von Groß- und Kleinschreibung
9 |
10 | Das v4-Update war ziemlich umfangreich, erfahre mehr unter: https://github.com/y20k/transistor/blob/master/metadata/en-US/changelogs/72.txt
11 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_arrow_upward_24dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_centered_dot_16dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/metadata/de/changelogs/72.txt:
--------------------------------------------------------------------------------
1 | # v4.0.0 - Andy Warhol
2 |
3 | **2020-07-03**
4 |
5 | - dies ist ein großes Update
6 | - Transistor wurde von Grund auf in Kotlin neu geschrieben
7 | - ein paar neue benutzerorientierte Funktionen:
8 | -- Radiosender-Suche (über radio-browser.info)
9 | -- du kannst einen Radiosender als Favorit markieren
10 | -- eine eigene Einstellungsseite
11 |
12 | Erfahre mehr unter: https://github.com/y20k/transistor/issues/251
13 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/selector_search_result_item.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/metadata/tr/changelogs/72.txt:
--------------------------------------------------------------------------------
1 | # v4.0.0 - Andy Warhol
2 |
3 | **3 Temmuz 2020**
4 |
5 | - bu büyük bir güncellemedir
6 | - Transistor Kotlin ile sıfırdan yeniden yazıldı
7 | - kullanıcıya yönelik birkaç yeni özellik:
8 | -- radyo istasyonu arama (radio-browser.info aracılığıyla)
9 | -- bir radyo istasyonunu sık kullanılan olarak işaretleyebilirsiniz
10 | -- ayrı bir Ayarlar ekranı
11 |
12 | Daha fazlasını öğrenin: https://github.com/y20k/transistor/issues/251
13 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_star_default_24dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/anim/rotate_clockwise_slow.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
12 |
13 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_delete_24dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_music_note_24dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/anim/rotate_counterclockwise_fast.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
12 |
13 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_clear_24dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_notification_clear_36dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_remove_circle_24dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_playlist_24dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_marked_starred_star_24dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_player_sheet_music_note_24dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_shortcut_play_circle_24dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_smartphone_24dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_save_24dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_edit_24dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_image_24dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_info_24dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_play_circle_outline_36dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_add_to_home_screen_24dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_image_white_36dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_radio_button_unchecked_24dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_more_vert_24dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/shape_player_sheet_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | -
5 |
6 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_radio_button_checked_24dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_refresh_24dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/selector_play_button.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_restore_24dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/java/org/y20k/transistor/dialogs/SelectStreamDialog.kt:
--------------------------------------------------------------------------------
1 | package org.y20k.transistor.dialogs
2 |
3 | import androidx.appcompat.app.AlertDialog
4 | import org.y20k.transistor.helpers.LogHelper
5 |
6 |
7 | /*
8 | * SelectStreamDialog class
9 | */
10 | class SelectStreamDialog {
11 |
12 | /* Define log tag */
13 | private val TAG = LogHelper.makeLogTag(FindStationDialog::class.java.simpleName)
14 |
15 |
16 | /* Main class variables */
17 | private lateinit var dialog: AlertDialog
18 |
19 |
20 | /* Construct and show dialog */
21 | fun show() {
22 |
23 | }
24 |
25 | }
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_stop_circle_outline_36dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
12 |
13 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_developer_mode_24dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/metadata/nb-NO/full_description.txt:
--------------------------------------------------------------------------------
1 | Transistor er et radioprogram i minimalistisk stil. Det har ingen funksjon for oppdaging av radiostasjoner.
2 | Kun et enkelt søkealternativ og import av lenker når du trykker dem i en nettleser.
3 |
4 | Legg til stasjoner med søk og bruk «Legg til spilleliste-filadresse (M3U, PLS) skriv inn en rå-adresse.
5 |
6 | Søketreff kommer fra radio-browser.info. Der kan du hjelpe til ved å legge til manglende stasjoner på http://www.radio-browser.info/gui/#!/add
7 |
8 | Dragninger sletter stasjoner fra listen. Flere redigeringsvalg er å finne i innstillingene. Der kan du skru på trykk og hold for å endre navn, bilde, eller lenke.
9 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/feature-request.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Feature Request
3 | about: Suggest an idea for this project
4 | title: ''
5 | labels: enhancement
6 | assignees: ''
7 |
8 | ---
9 |
10 | **Is your feature request related to a problem? Please describe.**
11 | Description of what the problem is. Example: I'm always frustrated when [...]
12 |
13 | **Describe the solution you'd like**
14 | Description of what you want to happen.
15 |
16 | **Describe alternatives you've considered**
17 | Description of any alternative solutions or features you've considered, if so.
18 |
19 | **Additional context**
20 | Add any other context or screenshots about the feature request here.
21 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/bug-report.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Bug Report
3 | about: Create a report to help us improve
4 | title: ''
5 | labels: bug
6 | assignees: ''
7 |
8 | ---
9 |
10 | **Describe the bug**
11 | Description of what the bug is.
12 |
13 | **To Reproduce**
14 | Steps to reproduce the behavior:
15 | 1. Go to '...'
16 | 2. Tap on '....'
17 | 3. Scroll down to '....'
18 | 4. See error
19 |
20 | **Expected behavior**
21 | Description of what you expected to happen.
22 |
23 | **Screenshots**
24 | If applicable, add screenshots to help explain.
25 |
26 | **Device:**
27 | - Device: [e.g. OnePlus 5]
28 | - OS: [e.g. Lineage OS 16.0]
29 | - Version [e.g. v4.0]
30 |
31 | **Additional context**
32 | Add any other context about the problem here.
33 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_cloud_download_36dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/values-night/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/gradle.properties:
--------------------------------------------------------------------------------
1 | # Project-wide Gradle settings.
2 | # IDE (e.g. Android Studio) users:
3 | # Gradle settings configured through the IDE *will override*
4 | # any settings specified in this file.
5 | # For more details on how to configure your build environment visit
6 | # http://www.gradle.org/docs/current/userguide/build_environment.html
7 | # Specifies the JVM arguments used for the daemon process.
8 | # The setting is particularly useful for tweaking memory settings.
9 | org.gradle.jvmargs=-Xmx1536m
10 | # When configured, Gradle will run in incubating parallel mode.
11 | # This option should only be used with decoupled projects. More details, visit
12 | # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
13 | # org.gradle.parallel=true
14 |
15 | # enables androidx repo
16 | android.useAndroidX=true
17 | android.enableJetifier=true
--------------------------------------------------------------------------------
/app/src/main/java/org/y20k/transistor/extensions/ArrayListExt.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * ArrayListExt.kt
3 | * Implements the ArrayListExt extension methods
4 | * Useful extension methods for ArrayLists
5 | * Source: https://raw.githubusercontent.com/googlesamples/android-UniversalMusicPlayer/master/common/src/main/java/com/example/android/uamp/media/extensions/MediaMetadataCompatExt.kt
6 | *
7 | * This file is part of
8 | * TRANSISTOR - Radio App for Android
9 | *
10 | * Copyright (c) 2015-22 - Y20K.org
11 | * Licensed under the MIT-License
12 | * http://opensource.org/licenses/MIT
13 | */
14 |
15 |
16 | package org.y20k.transistor.extensions
17 |
18 |
19 | /* Creates a "real" copy of an ArrayList - useful for preventing concurrent modification issues */
20 | fun ArrayList.copy(): ArrayList {
21 | val copy: ArrayList = ArrayList()
22 | this.forEach { copy.add(it) }
23 | return copy
24 | }
25 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_settings_24dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/navigation/nav_graph_main.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
9 |
14 |
17 |
18 |
19 |
20 |
24 |
25 |
--------------------------------------------------------------------------------
/app/src/main/res/xml/shortcuts.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
10 |
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/assets/README.md:
--------------------------------------------------------------------------------
1 | # Assets
2 |
3 |
4 |
5 | ## Adaptive Icon
6 |
7 | How to create Transitor's [Adaptive Icon](https://developer.android.com/guide/practices/ui_guidelines/icon_design_adaptive) using Android Studio:
8 |
9 | 1. Go to `File > New > Image Asset`
10 | 2. Choose `Icon Type > Launcher Icons (Adaptive and Legacy)`
11 | 3. Foreground Layer: Select the file [transistor-app-icon-current-foreground.png](https://raw.githubusercontent.com/y20k/transistor/master/assets/transistor-app-icon-current-foreground.png)
12 | 4. Background Layer: Select the file [transistor-app-icon-current-background.png](https://raw.githubusercontent.com/y20k/transistor/master/assets/transistor-app-icon-current-background.png)
13 | 5. Foreground Layer: Set Trim to `No`
14 | 6. Foreground Layer: Set Resize to `100%`
15 |
16 | ## F-Droid Assets
17 | F-Droid assets are found in the folder **metadata/\/**.
18 |
19 |
--------------------------------------------------------------------------------
/metadata/en-US/full_description.txt:
--------------------------------------------------------------------------------
1 | Transistor is a radio app with a minimalistic approach, that may not be to everyone's liking. It has no radio station discovery feature. Transistor only offers a very simple search option and it imports audio streaming links, when you tap on them in a web browser.
2 |
3 |
4 | FREQUENT QUESTIONS
5 |
6 | HOW CAN I ADD A RADIO STATION
7 | There are three ways to add a radio station to Transistor: Use Search, add playlist file address (M3U, PLS), enter a raw stream address.
8 |
9 | WHERE DO THE RADIO STATION SEARCH RESULTS COME FROM?
10 | Transistor searches the radio-browser.info online database. You can help out the radio-browser.info community by adding the missing station (http://www.radio-browser.info/gui/#!/add) to their database.
11 |
12 | HOW CAN I CURATE THE RADIO STATION LIST?
13 | Use the swipe gesture to delete a radio station from the list. Further editing options can be enabled in Settings. If enabled, tap and hold a radio station to edit its name, image or streaming link.
14 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_replay_10sek_56dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/metadata/ru/full_description.txt:
--------------------------------------------------------------------------------
1 | Транзистор - это радио приложение с минималистичным подходом, который может понравиться не всем. В нем нет функции обнаружения радиостанций. Транзистор предлагает только очень простую опцию поиска и импортирует ссылки на потоковое аудио, когда вы нажимаете на них в веб-браузере.
2 |
3 |
4 | ЧАСТЫЕ ВОПРОСЫ
5 |
6 | КАК ДОБАВИТЬ РАДИОСТАНЦИЮ
7 | Существует три способа добавить радиостанцию в Транзистор: Использовать поиск, добавить адрес файла плейлиста (M3U, PLS), ввести адрес потока.
8 |
9 | ОТКУДА БЕРУТСЯ РЕЗУЛЬТАТЫ ПОИСКА РАДИОСТАНЦИЙ?
10 | Транзистор выполняет поиск в онлайн-базе данных radio-browser.info. Вы можете помочь сообществу radio-browser.info, добавив отсутствующую станцию (http://www.radio-browser.info/gui/#!/add) в их базу данных.
11 |
12 | КАК ИЗМЕНИТЬ СПИСОК РАДИОСТАНЦИЙ?
13 | Чтобы удалить радиостанцию из списка, воспользуйтесь жестом смахивания. Дополнительные возможности редактирования можно включить в Настройках. Если эта функция включена, нажмите и удерживайте радиостанцию, чтобы изменить ее название, изображение или ссылку на потоковое вещание.
14 |
--------------------------------------------------------------------------------
/metadata/tr/full_description.txt:
--------------------------------------------------------------------------------
1 | Transistor, herkesin hoşuna gitmeyebilecek sadelikten yana bir yaklaşıma sahip bir radyo uygulamasıdır. Radyo istasyonu keşfetme özelliği yoktur. Transistör yalnızca çok basit bir arama seçeneği sunar ve bir web tarayıcısında dokunduğunuzda ses yayını bağlantılarını içe aktarır.
2 |
3 |
4 | SIK SORULAN SORULAR
5 |
6 | NASIL BİR RADYO İSTASYONU EKLEYEBİLİRİM?
7 | Transistor'e bir radyo istasyonu eklemenin üç yolu vardır: Aramayı kullanın, oynatma listesi dosyası adresi ekleyin (M3U, PLS), ham bir yayın adresi girin.
8 |
9 | RADYO İSTASYONU ARAMA SONUÇLARI NEREDEN GELİYOR?
10 | Transistor, radio-browser.info çevrim içi veri tabanını arar. Eksik istasyonu veri tabanlarına ekleyerek (http://www.radio-browser.info/gui/#!/add) radio-browser.info topluluğuna yardımcı olabilirsiniz.
11 |
12 | RADYO İSTASYONU LİSTESİNİ NASIL DÜZENLEYEBİLİRİM?
13 | Listeden bir radyo istasyonunu silmek için kaydırma hareketini kullanın. Diğer düzenleme seçenekleri Ayarlar'da etkinleştirilebilir. Etkinleştirilirse, adını, görselini veya yayın bağlantısını düzenlemek için bir radyo istasyonuna uzun dokunun.
14 |
--------------------------------------------------------------------------------
/app/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # You can control the set of applied configuration files using the
3 | # proguardFiles setting in build.gradle.
4 | #
5 | # For more details, see
6 | # http://developer.android.com/guide/developing/tools/proguard.html
7 |
8 | # If your project uses WebView with JS, uncomment the following
9 | # and specify the fully qualified class name to the JavaScript interface
10 | # class:
11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
12 | # public *;
13 | #}
14 |
15 | # Uncomment this to preserve the line number information for
16 | # debugging stack traces.
17 | -keepattributes SourceFile,LineNumberTable
18 |
19 | # If you keep the line number information, uncomment this to
20 | # hide the original source file name.
21 | -renamesourcefileattribute SourceFile
22 |
23 |
24 | # Preserve the core classes - because they need to be de-/serialized with GSON
25 | -keep public class org.y20k.transistor.core.** { *; }
26 |
27 | -keep public class org.y20k.transistor.playback.PlayerService { *; }
28 |
29 | -keep public class org.y20k.transistor.search.RadioBrowserResult { *; }
30 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_bug_report_24dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/java/org/y20k/transistor/helpers/DownloadFinishedReceiver.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * DownloadFinishedReceiver.kt
3 | * Implements the DownloadFinishedReceiver class
4 | * A DownloadFinishedReceiver listens for finished downloads
5 | *
6 | * This file is part of
7 | * TRANSISTOR - Radio App for Android
8 | *
9 | * Copyright (c) 2015-22 - Y20K.org
10 | * Licensed under the MIT-License
11 | * http://opensource.org/licenses/MIT
12 | */
13 |
14 |
15 | package org.y20k.transistor.helpers
16 |
17 | import android.app.DownloadManager
18 | import android.content.BroadcastReceiver
19 | import android.content.Context
20 | import android.content.Intent
21 |
22 |
23 | /*
24 | * DownloadFinishedReceiver class
25 | */
26 | class DownloadFinishedReceiver(): BroadcastReceiver() {
27 |
28 |
29 | /* Define log tag */
30 | private val TAG: String = LogHelper.makeLogTag(DownloadFinishedReceiver::class.java)
31 |
32 |
33 | /* Overrides onReceive */
34 | override fun onReceive(context: Context, intent: Intent) {
35 | // process the finished download
36 | DownloadHelper.processDownload(context, intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, -1L))
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/app/src/main/java/org/y20k/transistor/ui/PlayerState.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * PlayerState.kt
3 | * Implements the PlayerState class
4 | * A PlayerState holds parameters describing the state of the player part of the UI
5 | *
6 | * This file is part of
7 | * TRANSISTOR - Radio App for Android
8 | *
9 | * Copyright (c) 2015-22 - Y20K.org
10 | * Licensed under the MIT-License
11 | * http://opensource.org/licenses/MIT
12 | */
13 |
14 |
15 | package org.y20k.transistor.ui
16 |
17 | import android.os.Parcelable
18 | import android.support.v4.media.session.PlaybackStateCompat
19 | import com.google.android.material.bottomsheet.BottomSheetBehavior
20 | import com.google.gson.annotations.Expose
21 | import kotlinx.parcelize.Parcelize
22 | import org.y20k.transistor.Keys
23 |
24 |
25 | /*
26 | * PlayerState class
27 | */
28 | @Parcelize
29 | data class PlayerState (@Expose var stationUuid: String = String(),
30 | @Expose var playbackState: Int = PlaybackStateCompat.STATE_STOPPED,
31 | @Expose var bottomSheetState: Int = BottomSheetBehavior.STATE_HIDDEN,
32 | @Expose var sleepTimerState: Int = Keys.STATE_SLEEP_TIMER_STOPPED): Parcelable
33 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_default_station_image_72dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
12 |
13 |
--------------------------------------------------------------------------------
/metadata/it/full_description.txt:
--------------------------------------------------------------------------------
1 | Transistor è un'applicazione radiofonica dall'approccio minimalista. Potrebbe non piacere a tutti dato che non ha alcuna funzione di scoperta delle stazioni radio. Transistor offre solo un'opzione di ricerca molto semplice e importa i link agli streaming audio, quando li si preme in un browser web.
2 |
3 |
4 | DOMANDE FREQUENTI
5 |
6 | COME AGGIUNGO UNA STAZIONE RADIO?
7 | Ci sono tre modi per aggiungere una stazione radio a Transistor: Usare la ricerca, aggiungere l'indirizzo del file della playlist (M3U, PLS), inserire l'indirizzo di un flusso grezzo.
8 |
9 | DA DOVE PROVENGONO I RISULTATI DELLA RICERCA DELLE STAZIONI RADIO?
10 | Transistor cerca nel database online di radio-browser.info. È possibile aiutare la comunità di radio-browser.info aggiungendo le stazioni mancanti al loro database (https://www.radio-browser.info/gui/#!/add).
11 |
12 | COME GESTISCO L'ELENCO DELLE STAZIONI RADIO?
13 | È possibile eliminare una stazione radio dell'elenco, scorrendola. Ulteriori opzioni di modifica possono essere attivate in Impostazioni. Se la funzione è attiva, è possibile toccare e tenere premuta una stazione radio per modificarne il nome, l'immagine o il link allo streaming.
14 |
--------------------------------------------------------------------------------
/metadata/de/full_description.txt:
--------------------------------------------------------------------------------
1 | Transistor ist eine Radio-App mit einem minimalistischen Ansatz, der vielleicht nicht jedermanns Geschmack ist. Es gibt keine Funktion zum Entdecken von Radiosendern. Transistor bietet nur eine sehr einfache Suchoption und importiert Audio-Streaming-Links, wenn du sie in einem Webbrowser antippst.
2 |
3 |
4 | HÄUFIGE FRAGEN
5 |
6 | WIE KANN ICH EINEN RADIOSENDER HINZUFÜGEN?
7 | Es gibt drei Möglichkeiten, einen Radiosender zu Transistor hinzuzufügen: Verwende die Suche, füge die Adresse einer Wiedergabeliste hinzu (M3U, PLS) oder gib eine Rohdatenstromadresse ein.
8 |
9 | WOHER KOMMEN DIE SUCHERGEBNISSE DER RADIOSENDER?
10 | Transistor durchsucht die Online-Datenbank von radio-browser.info. Du kannst der radio-browser.info-Gemeinschaft helfen, indem du den fehlenden Sender (http://www.radio-browser.info/gui/#!/add) zu ihrer Datenbank hinzufügen.
11 |
12 | WIE KANN ICH DIE LISTE DER RADIOSENDER BEARBEITEN?
13 | Verwende die Wischgeste, um einen Radiosender aus der Liste zu löschen. Weitere Bearbeitungsoptionen können in den Einstellungen aktiviert werden. Falls aktiviert, tippe auf einen Radiosender und halte ihn gedrückt, um den Namen, das Bild oder den Streaming-Link zu bearbeiten.
14 |
--------------------------------------------------------------------------------
/metadata/nl/full_description.txt:
--------------------------------------------------------------------------------
1 | Transistor is een radioapp met een minimalistische aanpak, dat ie niet per se de smaak van iedereen. Het heeft geen radiostationontdekfeature. Transistor biedt alleen een zeer eenvoudige zoekoptie en het kan audiostreamlinks importeren, als je in een webbrowser erop tikt
2 |
3 |
4 | VEELGESTELDE VRAGEN
5 |
6 | HOE KAN IK EEN RADIOSTATION TOEVOEGEN
7 | Er zijn drie manieren om een radiostation aan Transistor toe te voegen: Gebruik zoek, voeg een afspeellijstbestandadres (M3U, PLS) toe of voeg een raw-streamadres toe. Dat laatste ondersteunt niet de updatefeature.
8 |
9 | WAAR KOMEN DE RADIOSTATIONZOEKRESULTATEN VANDAAN?
10 | Transistor doorzoekt de online database van radio-browser.info . Je kan de community van radio-browser.info helpen door ontbrekende stations toe te voegen (http://www.radio-browser.info/gui/#!/add) aan hun database.
11 |
12 | HOE KAN IK DE LIJST MET RADIOZENDERS SAMENSTELLEN?
13 | Gebruik het veeggebaar om een radiostation uit de lijst te verwijderen. Verdere bewerkingsopties kunnen worden ingeschakeld in Instellingen. Als deze optie is ingeschakeld, tikt u op een radiostation en houdt u deze ingedrukt om de naam, afbeelding of streamingkoppeling te bewerken.
14 |
--------------------------------------------------------------------------------
/LICENSE.md:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 | =====================
3 |
4 | Copyright (c) 2015-22 - Y20K.org
5 | --------------------------------
6 |
7 | Permission is hereby granted, free of charge, to any person obtaining a copy
8 | of this software and associated documentation files (the "Software"), to deal
9 | in the Software without restriction, including without limitation the rights
10 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11 | copies of the Software, and to permit persons to whom the Software is
12 | furnished to do so, subject to the following conditions:
13 |
14 | The above copyright notice and this permission notice shall be included in
15 | all copies or substantial portions of the Software.
16 |
17 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
23 | THE SOFTWARE.
24 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/station-issue.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Station Issue
3 | about: Provide information on radio stations that do not work
4 | title: "[Station]"
5 | labels: station issue
6 | assignees: ''
7 |
8 | ---
9 |
10 | **Name of Radio Station**
11 | Name of the radio station, that is not working.
12 |
13 | **Problem**
14 | Describe the problem. [e.g. Unable to add station or Unable to start playback]
15 |
16 | **Search Term**
17 | If you tried to add the station using the Search feature: Search Term and Title of Search Result you tried to use.
18 |
19 | **Direct Link Input**
20 | If you tried to add the station by tapping on a link or by copying over a stream address: URL of the Stream Address.
21 |
22 | **Stream Characteristics**
23 | Only if you already know: What kind of radio stream are you trying to add? MP3, OGG, HLS, PLS, M3U? What bitrate?
24 |
25 | **Content Type / Status Code**
26 | Only if you find the time to look it up: Content Type and Status Code of a feed can be found in the network tab of the developer tools in your web browser.
27 |
28 | **Device:**
29 | - Device: [e.g. OnePlus 5]
30 | - OS: [e.g. Lineage OS 16.0]
31 | - Version [e.g. v1.0]
32 |
33 | **Additional Context**
34 | Add any other context about the problem here.
35 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/station_popup_menu.xml:
--------------------------------------------------------------------------------
1 |
38 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_world_24dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_sleep_timer_24dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
12 |
18 |
24 |
25 |
--------------------------------------------------------------------------------
/app/src/main/java/org/y20k/transistor/Transistor.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Transistor.kt
3 | * Implements the Transistor class
4 | * Transistor is the base Application class that sets up day and night theme
5 | *
6 | * This file is part of
7 | * TRANSISTOR - Radio App for Android
8 | *
9 | * Copyright (c) 2015-22 - Y20K.org
10 | * Licensed under the MIT-License
11 | * http://opensource.org/licenses/MIT
12 | */
13 |
14 |
15 | package org.y20k.transistor
16 |
17 | import android.app.Application
18 | import org.y20k.transistor.helpers.AppThemeHelper
19 | import org.y20k.transistor.helpers.LogHelper
20 | import org.y20k.transistor.helpers.PreferencesHelper
21 | import org.y20k.transistor.helpers.PreferencesHelper.initPreferences
22 |
23 |
24 | /**
25 | * Transistor.class
26 | */
27 | class Transistor: Application () {
28 |
29 | /* Define log tag */
30 | private val TAG: String = LogHelper.makeLogTag(Transistor::class.java)
31 |
32 |
33 | /* Implements onCreate */
34 | override fun onCreate() {
35 | super.onCreate()
36 | LogHelper.v(TAG, "Transistor application started.")
37 | initPreferences()
38 | // set Dark / Light theme state
39 | AppThemeHelper.setTheme(PreferencesHelper.loadThemeSelection())
40 | }
41 |
42 |
43 | /* Implements onTerminate */
44 | override fun onTerminate() {
45 | super.onTerminate()
46 | LogHelper.v(TAG, "Transistor application terminated.")
47 | }
48 |
49 | }
50 |
--------------------------------------------------------------------------------
/app/src/main/java/org/y20k/transistor/helpers/AudioHelper.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * AudioHelper.kt
3 | * Implements the AudioHelper object
4 | * A AudioHelper provides helper methods for handling audio files
5 | *
6 | * This file is part of
7 | * TRANSISTOR - Radio App for Android
8 | *
9 | * Copyright (c) 2015-22 - Y20K.org
10 | * Licensed under the MIT-License
11 | * http://opensource.org/licenses/MIT
12 | */
13 |
14 |
15 | package org.y20k.transistor.helpers
16 |
17 | import android.content.Context
18 | import android.media.MediaMetadataRetriever
19 | import android.net.Uri
20 |
21 |
22 | /*
23 | * AudioHelper object
24 | */
25 | object AudioHelper {
26 |
27 | /* Define log tag */
28 | private val TAG: String = LogHelper.makeLogTag(AudioHelper::class.java)
29 |
30 |
31 | /* Extract duration metadata from audio file */
32 | fun getDuration(context: Context, audioFileUri: Uri): Long {
33 | val metadataRetriever: MediaMetadataRetriever = MediaMetadataRetriever()
34 | var duration: Long = 0L
35 | try {
36 | metadataRetriever.setDataSource(context, audioFileUri)
37 | val durationString = metadataRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION) ?: String()
38 | duration = durationString.toLong()
39 | } catch (exception: Exception) {
40 | LogHelper.e(TAG, "Unable to extract duration metadata from audio file")
41 | }
42 | return duration
43 | }
44 |
45 | }
46 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/dialog_rename_station.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
22 |
23 |
27 |
28 |
29 |
30 |
31 |
--------------------------------------------------------------------------------
/CONTRIBUTE.md:
--------------------------------------------------------------------------------
1 | How to contribute to Transistor
2 | ===============================
3 |
4 | ### Report a bug or suggest a new feature
5 | Bugs and new features are being discussed on the GitHub [Issue Tracker](https://github.com/y20k/transistor/issues). The issue "[Previous discussions and feature requests](https://github.com/y20k/transistor/issues/48)" lists some of the features that were rejected - either because they did not fit conceptually or because I could not figure out how to implement them.
6 |
7 | ### Help with translations
8 | The translations are managed on [Weblate](https://hosted.weblate.org/projects/transistor/strings/).
9 |
10 | ### Submit your own solutions
11 | Help is very welcome. Be it in the form of code, or artwork, or enhancements to the website, or tutorial videos, or whatever.
12 | **But please** suggest new features or enhancements in advance on the [Issue Tracker](https://github.com/y20k/transistor/issues) before implementing them.
13 |
14 | ### Suggested issues to tackle
15 | [#319](https://github.com/y20k/transistor/issues/319) | [#307](https://github.com/y20k/transistor/issues/307) | [#217](https://github.com/y20k/transistor/issues/217) | [#206](https://github.com/y20k/transistor/issues/206) | [#126](https://github.com/y20k/transistor/issues/126)
16 |
17 | ### Credit for your contributions
18 | Contributors - like the main translators for a certain language - are listed as co-autors of this project in [AUTHORS.md](https://github.com/y20k/transistor/blob/master/AUTHORS.md). Bonus: If you are on this list, you are automatically eligable for a free German beverage.
19 | To be redeemed in Stuttgart.
20 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/activity_main.xml:
--------------------------------------------------------------------------------
1 |
2 |
9 |
10 |
20 |
21 |
32 |
33 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_forward_30sek_56dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_notification_app_icon_white_24dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
10 |
14 |
15 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/fragment_player.xml:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
16 |
17 |
23 |
24 |
25 |
31 |
32 |
33 |
36 |
37 |
38 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/card_add_new_station.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
24 |
25 |
39 |
40 |
41 |
42 |
43 |
--------------------------------------------------------------------------------
/app/src/main/java/org/y20k/transistor/core/Collection.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Collection.kt
3 | * Implements the Collection class
4 | * A Collection object holds a list of radio stations
5 | *
6 | * This file is part of
7 | * TRANSISTOR - Radio App for Android
8 | *
9 | * Copyright (c) 2015-22 - Y20K.org
10 | * Licensed under the MIT-License
11 | * http://opensource.org/licenses/MIT
12 | */
13 |
14 | package org.y20k.transistor.core
15 |
16 | import android.os.Parcelable
17 | import androidx.annotation.Keep
18 | import com.google.gson.annotations.Expose
19 | import kotlinx.parcelize.Parcelize
20 | import org.y20k.transistor.Keys
21 | import java.util.*
22 |
23 |
24 | /*
25 | * Collection class
26 | */
27 | @Keep
28 | @Parcelize
29 | data class Collection(@Expose val version: Int = Keys.CURRENT_COLLECTION_CLASS_VERSION_NUMBER,
30 | @Expose var stations: MutableList = mutableListOf(),
31 | @Expose var modificationDate: Date = Date()) : Parcelable {
32 |
33 | /* overrides toString method */
34 | override fun toString(): String {
35 | val stringBuilder: StringBuilder = StringBuilder()
36 | stringBuilder.append("Format version: $version\n")
37 | stringBuilder.append("Number of stations in collection: ${stations.size}\n\n")
38 | stations.forEach {
39 | stringBuilder.append("${it.toString()}\n")
40 | }
41 | return stringBuilder.toString()
42 | }
43 |
44 |
45 | /* Creates a deep copy of a Collection */
46 | fun deepCopy(): Collection {
47 | val stationsCopy: MutableList = mutableListOf()
48 | stations.forEach { stationsCopy.add(it.deepCopy()) }
49 | return Collection(version = version,
50 | stations = stationsCopy,
51 | modificationDate = modificationDate)
52 | }
53 |
54 | }
55 |
--------------------------------------------------------------------------------
/app/src/main/java/org/y20k/transistor/helpers/WorkerHelper.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * WorkerHelper.kt
3 | * Implements the WorkerHelper object
4 | * A WorkerHelper provides helper methods for starting work jobs
5 | *
6 | * This file is part of
7 | * TRANSISTOR - Radio App for Android
8 | *
9 | * Copyright (c) 2015-22 - Y20K.org
10 | * Licensed under the MIT-License
11 | * http://opensource.org/licenses/MIT
12 | */
13 |
14 |
15 | package org.y20k.transistor.helpers
16 |
17 | import androidx.work.*
18 | import org.y20k.transistor.Keys
19 | import java.util.*
20 | import java.util.concurrent.TimeUnit
21 |
22 |
23 | /*
24 | * WorkerHelper object
25 | */
26 | object WorkerHelper {
27 |
28 | /* Define log tag */
29 | private val TAG: String = LogHelper.makeLogTag(WorkerHelper::class.java)
30 |
31 |
32 | /* Schedules a DownloadWorker that triggers background updates of the collection periodically */
33 | fun schedulePeriodicUpdateWorker(): UUID {
34 | LogHelper.v(TAG, "Starting / Updating periodic work: update collection")
35 | val requestData: Data = Data.Builder()
36 | .putInt(Keys.KEY_DOWNLOAD_WORK_REQUEST, Keys.REQUEST_UPDATE_COLLECTION)
37 | .build()
38 | val unmeteredConstraint = Constraints.Builder()
39 | .setRequiredNetworkType(NetworkType.UNMETERED)
40 | .build()
41 | val updateCollectionPeriodicWork = PeriodicWorkRequestBuilder(Keys.UPDATE_REPEAT_INTERVAL, TimeUnit.HOURS, 30, TimeUnit.MINUTES)
42 | //.setConstraints(unmeteredConstraint)
43 | .setInputData(requestData)
44 | .build()
45 | WorkManager.getInstance().enqueueUniquePeriodicWork(Keys.NAME_PERIODIC_COLLECTION_UPDATE_WORK, ExistingPeriodicWorkPolicy.REPLACE, updateCollectionPeriodicWork)
46 | return updateCollectionPeriodicWork.id
47 | }
48 |
49 | }
50 |
--------------------------------------------------------------------------------
/app/src/main/java/org/y20k/transistor/PlayerServiceStarterActivity.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * PlayerServiceStarterActivity.kt
3 | * Implements the PlayerServiceStarterActivity class
4 | * A PlayerServiceStarterActivity simply starts the PlayerService
5 | *
6 | * This file is part of
7 | * TRANSISTOR - Radio App for Android
8 | *
9 | * Copyright (c) 2015-22 - Y20K.org
10 | * Licensed under the MIT-License
11 | * http://opensource.org/licenses/MIT
12 | */
13 |
14 |
15 | package org.y20k.transistor
16 |
17 | import android.app.Activity
18 | import android.content.Intent
19 | import android.os.Bundle
20 | import org.y20k.transistor.playback.PlayerService
21 |
22 |
23 | /*
24 | * PlayerServiceStarterActivity class
25 | */
26 | class PlayerServiceStarterActivity: Activity() {
27 |
28 | /* Overrides onCreate from Activity */
29 | public override fun onCreate(savedInstanceState: Bundle?) {
30 | super.onCreate(savedInstanceState)
31 | if (intent.action == Keys.ACTION_START_PLAYER_SERVICE) {
32 | // start player service and start playback
33 | handleStartPlayer()
34 | }
35 | finish()
36 | }
37 |
38 |
39 | /* Handles START_PLAYER_SERVICE intent */
40 | private fun handleStartPlayer() {
41 | // start player service and start playback
42 | val startIntent = Intent(this, PlayerService::class.java)
43 | startIntent.action = Keys.ACTION_START
44 | if (intent.hasExtra(Keys.EXTRA_STATION_UUID)) {
45 | val uuid: String? = intent.getStringExtra(Keys.EXTRA_STATION_UUID)
46 | startIntent.putExtra(Keys.EXTRA_STATION_UUID, uuid)
47 | } else if (intent.hasExtra(Keys.EXTRA_STREAM_URI)) {
48 | val streamUri: String? = intent.getStringExtra(Keys.EXTRA_STREAM_URI)
49 | startIntent.putExtra(Keys.EXTRA_STREAM_URI, streamUri)
50 | }
51 | startService(startIntent)
52 | }
53 |
54 | }
55 |
--------------------------------------------------------------------------------
/app/src/main/java/org/y20k/transistor/helpers/DownloadWorker.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * DownloadWorker.kt
3 | * Implements the DownloadWorker class
4 | * A DownloadWorker is a worker that triggers download actions when the app is not in use
5 | *
6 | * This file is part of
7 | * TRANSISTOR - Radio App for Android
8 | *
9 | * Copyright (c) 2015-22 - Y20K.org
10 | * Licensed under the MIT-License
11 | * http://opensource.org/licenses/MIT
12 | */
13 |
14 |
15 | package org.y20k.transistor.helpers
16 |
17 | import android.content.Context
18 | import androidx.work.Worker
19 | import androidx.work.WorkerParameters
20 | import org.y20k.transistor.Keys
21 |
22 |
23 | /*
24 | * DownloadWorker class
25 | */
26 | class DownloadWorker(context : Context, params : WorkerParameters): Worker(context, params) {
27 |
28 | /* Define log tag */
29 | private val TAG: String = LogHelper.makeLogTag(DownloadWorker::class.java)
30 |
31 |
32 | /* Overrides doWork */
33 | override fun doWork(): Result {
34 | // determine what type of download is requested
35 | when(inputData.getInt(Keys.KEY_DOWNLOAD_WORK_REQUEST,0)) {
36 | // CASE: update collection
37 | Keys.REQUEST_UPDATE_COLLECTION -> {
38 | doOneTimeHousekeeping()
39 | updateCollection()
40 | }
41 | }
42 | return Result.success()
43 | // (Returning Result.retry() tells WorkManager to try this task again later; Result.failure() says not to try again.)
44 | }
45 |
46 |
47 | /* Updates collection of stations */
48 | private fun updateCollection() {
49 | // todo implement / or delete
50 | }
51 |
52 |
53 | /* Execute one-time housekeeping */
54 | private fun doOneTimeHousekeeping() {
55 | if (PreferencesHelper.isHouseKeepingNecessary()) {
56 | /* add whatever housekeeping is necessary here */
57 |
58 | // housekeeping finished - save state
59 | // PreferencesHelper.saveHouseKeepingNecessaryState() // TODO uncomment if you need to do housekeeping here
60 | }
61 | }
62 |
63 | }
64 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/element_search_result.xml:
--------------------------------------------------------------------------------
1 |
2 |
9 |
10 |
11 |
26 |
27 |
41 |
42 |
--------------------------------------------------------------------------------
/app/src/main/res/values/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
18 |
19 |
20 |
23 |
24 |
34 |
40 |
44 |
49 |
50 |
--------------------------------------------------------------------------------
/gradlew.bat:
--------------------------------------------------------------------------------
1 | @if "%DEBUG%" == "" @echo off
2 | @rem ##########################################################################
3 | @rem
4 | @rem Gradle startup script for Windows
5 | @rem
6 | @rem ##########################################################################
7 |
8 | @rem Set local scope for the variables with windows NT shell
9 | if "%OS%"=="Windows_NT" setlocal
10 |
11 | set DIRNAME=%~dp0
12 | if "%DIRNAME%" == "" set DIRNAME=.
13 | set APP_BASE_NAME=%~n0
14 | set APP_HOME=%DIRNAME%
15 |
16 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
17 | set DEFAULT_JVM_OPTS=
18 |
19 | @rem Find java.exe
20 | if defined JAVA_HOME goto findJavaFromJavaHome
21 |
22 | set JAVA_EXE=java.exe
23 | %JAVA_EXE% -version >NUL 2>&1
24 | if "%ERRORLEVEL%" == "0" goto init
25 |
26 | echo.
27 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
28 | echo.
29 | echo Please set the JAVA_HOME variable in your environment to match the
30 | echo location of your Java installation.
31 |
32 | goto fail
33 |
34 | :findJavaFromJavaHome
35 | set JAVA_HOME=%JAVA_HOME:"=%
36 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe
37 |
38 | if exist "%JAVA_EXE%" goto init
39 |
40 | echo.
41 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
42 | echo.
43 | echo Please set the JAVA_HOME variable in your environment to match the
44 | echo location of your Java installation.
45 |
46 | goto fail
47 |
48 | :init
49 | @rem Get command-line arguments, handling Windows variants
50 |
51 | if not "%OS%" == "Windows_NT" goto win9xME_args
52 |
53 | :win9xME_args
54 | @rem Slurp the command line arguments.
55 | set CMD_LINE_ARGS=
56 | set _SKIP=2
57 |
58 | :win9xME_args_slurp
59 | if "x%~1" == "x" goto execute
60 |
61 | set CMD_LINE_ARGS=%*
62 |
63 | :execute
64 | @rem Setup the command line
65 |
66 | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
67 |
68 | @rem Execute Gradle
69 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
70 |
71 | :end
72 | @rem End local scope for the variables with windows NT shell
73 | if "%ERRORLEVEL%"=="0" goto mainEnd
74 |
75 | :fail
76 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
77 | rem the _cmd.exe /c_ return code!
78 | if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
79 | exit /b 1
80 |
81 | :mainEnd
82 | if "%OS%"=="Windows_NT" endlocal
83 |
84 | :omega
85 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/dialog_choose_stream.xml:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
21 |
22 |
34 |
35 |
46 |
47 |
48 |
--------------------------------------------------------------------------------
/app/src/main/java/org/y20k/transistor/playback/PlayerController.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * PlayerController.kt
3 | * Implements the PlayerController class
4 | * PlayerController is provides playback controls for PlayerService
5 | *
6 | * This file is part of
7 | * TRANSISTOR - Radio App for Android
8 | *
9 | * Copyright (c) 2015-22 - Y20K.org
10 | * Licensed under the MIT-License
11 | * http://opensource.org/licenses/MIT
12 | */
13 |
14 |
15 | package org.y20k.transistor.playback
16 |
17 | import android.os.ResultReceiver
18 | import android.support.v4.media.session.MediaControllerCompat
19 | import android.support.v4.media.session.PlaybackStateCompat
20 | import androidx.core.os.bundleOf
21 | import org.y20k.transistor.Keys
22 | import org.y20k.transistor.helpers.LogHelper
23 |
24 |
25 | /*
26 | * PlayerController class
27 | */
28 | class PlayerController (private val mediaController: MediaControllerCompat) {
29 |
30 | /* Define log tag */
31 | private val TAG: String = LogHelper.makeLogTag(PlayerController::class.java)
32 |
33 |
34 | /* Main class variables */
35 | private val transportControls: MediaControllerCompat.TransportControls = mediaController.transportControls
36 |
37 |
38 | /* Start playback for given media id */
39 | fun play(mediaId: String = String()) {
40 | if (mediaId.isNotEmpty()) {
41 | transportControls.playFromMediaId(mediaId, null)
42 | }
43 | }
44 |
45 |
46 | /* Stop playback - translates internally to pause */
47 | fun stop() {
48 | transportControls.pause()
49 | }
50 |
51 |
52 | /* Send command to start sleep timer */
53 | fun startSleepTimer() {
54 | mediaController.sendCommand(Keys.CMD_START_SLEEP_TIMER, null, null)
55 | }
56 |
57 |
58 | /* Send command to cancel sleep timer */
59 | fun cancelSleepTimer() {
60 | mediaController.sendCommand(Keys.CMD_CANCEL_SLEEP_TIMER, null, null)
61 | }
62 |
63 |
64 | /* Send command to request updates - used to build the ui */
65 | fun requestProgressUpdate(resultReceiver: ResultReceiver) {
66 | mediaController.sendCommand(Keys.CMD_REQUEST_PROGRESS_UPDATE, null, resultReceiver)
67 | }
68 |
69 |
70 | fun playStreamDirectly(streamUri: String) {
71 | mediaController.sendCommand(Keys.CMD_PLAY_STREAM, bundleOf(Pair(Keys.KEY_STREAM_URI, streamUri)), null)
72 | }
73 |
74 |
75 | /* Register MediaController callback to get notified about player state changes */
76 | fun registerCallback(callback: MediaControllerCompat.Callback) {
77 | mediaController.registerCallback(callback)
78 | }
79 |
80 |
81 | /* Unregister MediaController callback */
82 | fun unregisterCallback(callback: MediaControllerCompat.Callback) {
83 | mediaController.unregisterCallback(callback)
84 | }
85 |
86 |
87 | /* Get the current playback state */
88 | fun getPlaybackState(): PlaybackStateCompat = mediaController.playbackState
89 |
90 | }
91 |
--------------------------------------------------------------------------------
/app/src/main/res/values-night/colors.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | #ff1c1b1f
7 | #ff49454f
8 | #ff1c1b1f
9 |
10 | #ffe6e1e5
11 | #ff49454f
12 |
13 |
14 | #ffe6e1e5
15 | #ffcac4d0
16 | #ff6750a4
17 | #ff6750a4
18 | #ffe6e1e5
19 | #ffcac4d0
20 | #ff49454f
21 |
22 |
23 | #ff1c1b1f
24 | #ff49454f
25 | #fff2b8b5
26 | #ff601410
27 | #ffd0bcff
28 | #ff381e72
29 | #ff1c1b1f
30 | #ff49454f
31 |
32 |
33 | #ffffffff
34 | #ff6750a4
35 | #ffd0bcff
36 | #ff313033
37 | #fff4eff4
38 | #fff4eff4
39 | #fff4eff4
40 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/dialog_find_station.xml:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
21 |
22 |
33 |
34 |
46 |
47 |
60 |
61 |
62 |
--------------------------------------------------------------------------------
/app/src/main/java/org/y20k/transistor/dialogs/ErrorDialog.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * ErrorDialog.kt
3 | * Implements the ErrorDialog class
4 | * An ErrorDialog shows an error dialog with details
5 | *
6 | * This file is part of
7 | * TRANSISTOR - Radio App for Android
8 | *
9 | * Copyright (c) 2015-22 - Y20K.org
10 | * Licensed under the MIT-License
11 | * http://opensource.org/licenses/MIT
12 | */
13 |
14 |
15 | package org.y20k.transistor.dialogs
16 |
17 | import android.content.Context
18 | import android.text.method.ScrollingMovementMethod
19 | import android.view.LayoutInflater
20 | import android.view.View
21 | import android.widget.TextView
22 | import androidx.core.view.isGone
23 | import androidx.core.view.isVisible
24 | import com.google.android.material.dialog.MaterialAlertDialogBuilder
25 | import org.y20k.transistor.R
26 | import org.y20k.transistor.helpers.LogHelper
27 |
28 |
29 | /*
30 | * ErrorDialog class
31 | */
32 | class ErrorDialog {
33 |
34 | /* Define log tag */
35 | private val TAG: String = LogHelper.makeLogTag(ErrorDialog::class.java)
36 |
37 |
38 | /* Construct and show dialog */
39 | fun show(context: Context, errorTitle: Int, errorMessage: Int, errorDetails: String = String()) {
40 | // prepare dialog builder
41 | val builder: MaterialAlertDialogBuilder = MaterialAlertDialogBuilder(context, R.style.AlertDialogTheme)
42 |
43 | // set title
44 | builder.setTitle(context.getString(errorTitle))
45 |
46 | // get views
47 | val inflater: LayoutInflater = LayoutInflater.from(context)
48 | val view: View = inflater.inflate(R.layout.dialog_generic_with_details, null)
49 | val errorMessageView: TextView = view.findViewById(R.id.dialog_message) as TextView
50 | val errorDetailsLinkView: TextView = view.findViewById(R.id.dialog_details_link) as TextView
51 | val errorDetailsView: TextView = view.findViewById(R.id.dialog_details) as TextView
52 |
53 | // set dialog view
54 | builder.setView(view)
55 |
56 | // set detail view
57 | val detailsNotEmpty = errorDetails.isNotEmpty()
58 | // show/hide details link depending on whether details are empty or not
59 | errorDetailsLinkView.isVisible = detailsNotEmpty
60 |
61 | if (detailsNotEmpty) {
62 | // allow scrolling on details view
63 | errorDetailsView.movementMethod = ScrollingMovementMethod()
64 |
65 | // show and hide details on click
66 | errorDetailsLinkView.setOnClickListener {
67 | when (errorDetailsView.visibility) {
68 | View.GONE -> errorDetailsView.isVisible = true
69 | View.VISIBLE -> errorDetailsView.isGone = true
70 | }
71 | }
72 | // set details text view
73 | errorDetailsView.text = errorDetails
74 | }
75 |
76 | // set text views
77 | errorMessageView.text = context.getString(errorMessage)
78 |
79 | // add okay button
80 | builder.setPositiveButton(R.string.dialog_generic_button_okay, { _, _ ->
81 | // listen for click on okay button
82 | // do nothing
83 | })
84 |
85 | // display error dialog
86 | builder.show()
87 | }
88 | }
89 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/dialog_generic_with_details.xml:
--------------------------------------------------------------------------------
1 |
2 |
9 |
10 |
24 |
25 |
42 |
43 |
60 |
61 |
--------------------------------------------------------------------------------
/app/src/main/java/org/y20k/transistor/helpers/DateTimeHelper.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * DateTimeHelper.kt
3 | * Implements the DateTimeHelper object
4 | * A DateTimeHelper provides helper methods for converting Date and Time objects
5 | *
6 | * This file is part of
7 | * TRANSISTOR - Radio App for Android
8 | *
9 | * Copyright (c) 2015-22 - Y20K.org
10 | * Licensed under the MIT-License
11 | * http://opensource.org/licenses/MIT
12 | */
13 |
14 |
15 | package org.y20k.transistor.helpers
16 |
17 | import org.y20k.transistor.Keys
18 | import java.text.SimpleDateFormat
19 | import java.util.*
20 |
21 |
22 | /*
23 | * DateTimeHelper object
24 | */
25 | object DateTimeHelper {
26 |
27 | /* Define log tag */
28 | private val TAG: String = LogHelper.makeLogTag(DateTimeHelper::class.java)
29 |
30 | /* Main class variables */
31 | private const val pattern: String = "EEE, dd MMM yyyy HH:mm:ss Z"
32 | private val dateFormat: SimpleDateFormat = SimpleDateFormat(pattern, Locale.ENGLISH)
33 |
34 |
35 | /* Converts RFC 2822 string representation of a date to DATE */
36 | fun convertFromRfc2822(dateString: String): Date {
37 | var date: Date = Keys.DEFAULT_DATE
38 | try {
39 | // parse date string using standard pattern
40 | date = dateFormat.parse((dateString)) ?: Keys.DEFAULT_DATE
41 | } catch (e: Exception) {
42 | LogHelper.w(TAG, "Unable to parse. Trying an alternative Date format. $e")
43 | // try alternative parsing patterns
44 | date = tryAlternativeRfc2822Parsing(dateString)
45 | }
46 | return date
47 | }
48 |
49 |
50 | /* Converts a DATE to its RFC 2822 string representation */
51 | fun convertToRfc2822(date: Date): String {
52 | val dateFormat: SimpleDateFormat = SimpleDateFormat(pattern, Locale.ENGLISH)
53 | return dateFormat.format(date)
54 | }
55 |
56 |
57 | /* Converts a milliseconds in to a readable format */
58 | fun convertToMinutesAndSeconds(milliseconds: Long, negativeValue: Boolean = false): String {
59 | // convert milliseconds to minutes and seconds
60 | val minutes: Long = milliseconds / 1000 / 60
61 | val seconds: Long = milliseconds / 1000 % 60
62 | var timeString: String = "${minutes.toString().padStart(2, '0')}:${seconds.toString().padStart(2, '0')}"
63 | if (negativeValue) {
64 | // add a minus sign if a negative values was requested
65 | timeString = "-$timeString"
66 | }
67 | return timeString
68 | }
69 |
70 |
71 | /* Converts RFC 2822 string representation of a date to DATE - using alternative patterns */
72 | private fun tryAlternativeRfc2822Parsing(dateString: String): Date {
73 | var date: Date = Keys.DEFAULT_DATE
74 | try {
75 | // try to parse without seconds
76 | date = SimpleDateFormat("EEE, dd MMM yyyy HH:mm Z", Locale.ENGLISH).parse((dateString)) ?: Keys.DEFAULT_DATE
77 | } catch (e: Exception) {
78 | try {
79 | LogHelper.w(TAG, "Unable to parse. Trying an alternative Date format. $e")
80 | // try to parse without time zone
81 | date = SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss", Locale.ENGLISH).parse((dateString)) ?: Keys.DEFAULT_DATE
82 | } catch (e: Exception) {
83 | LogHelper.e(TAG, "Unable to parse. Returning a default date. $e")
84 | }
85 | }
86 | return date
87 | }
88 |
89 | }
90 |
--------------------------------------------------------------------------------
/app/src/main/java/org/y20k/transistor/dialogs/YesNoDialog.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * YesNoDialog
3 | * Implements the YesNoDialog class
4 | * A YesNoDialog asks the user if he/she wants to do something or not
5 | *
6 | * This file is part of
7 | * TRANSISTOR - Radio App for Android
8 | *
9 | * Copyright (c) 2015-22 - Y20K.org
10 | * Licensed under the MIT-License
11 | * http://opensource.org/licenses/MIT
12 | */
13 |
14 |
15 | package org.y20k.transistor.dialogs
16 |
17 | import android.content.Context
18 | import com.google.android.material.dialog.MaterialAlertDialogBuilder
19 | import org.y20k.transistor.Keys
20 | import org.y20k.transistor.R
21 | import org.y20k.transistor.helpers.LogHelper
22 |
23 |
24 | /*
25 | * YesNoDialog class
26 | */
27 | class YesNoDialog (private var yesNoDialogListener: YesNoDialogListener) {
28 |
29 | /* Interface used to communicate back to activity */
30 | interface YesNoDialogListener {
31 | fun onYesNoDialog(type: Int, dialogResult: Boolean, payload: Int, payloadString: String) {
32 | }
33 | }
34 |
35 |
36 | /* Define log tag */
37 | private val TAG = LogHelper.makeLogTag(YesNoDialog::class.java.simpleName)
38 |
39 |
40 | /* Construct and show dialog - variant: message from string */
41 | fun show(context: Context,
42 | type: Int,
43 | title: Int = Keys.EMPTY_STRING_RESOURCE,
44 | message: Int,
45 | yesButton: Int = R.string.dialog_yes_no_positive_button_default,
46 | noButton: Int = R.string.dialog_generic_button_cancel,
47 | payload: Int = Keys.DIALOG_EMPTY_PAYLOAD_INT,
48 | payloadString: String = Keys.DIALOG_EMPTY_PAYLOAD_STRING) {
49 | // extract string from message resource and feed into main show method
50 | show(context, type, title, context.getString(message), yesButton, noButton, payload, payloadString)
51 | }
52 |
53 |
54 | /* Construct and show dialog */
55 | fun show(context: Context,
56 | type: Int,
57 | title: Int = Keys.EMPTY_STRING_RESOURCE,
58 | messageString: String,
59 | yesButton: Int = R.string.dialog_yes_no_positive_button_default,
60 | noButton: Int = R.string.dialog_generic_button_cancel,
61 | payload: Int = Keys.DIALOG_EMPTY_PAYLOAD_INT,
62 | payloadString: String = Keys.DIALOG_EMPTY_PAYLOAD_STRING) {
63 |
64 | // prepare dialog builder
65 | val builder: MaterialAlertDialogBuilder = MaterialAlertDialogBuilder(context, R.style.AlertDialogTheme)
66 |
67 | // set title and message
68 | builder.setMessage(messageString)
69 | if (title != Keys.EMPTY_STRING_RESOURCE) {
70 | builder.setTitle(context.getString(title))
71 | }
72 |
73 |
74 | // add yes button
75 | builder.setPositiveButton(yesButton) { _, _ ->
76 | // listen for click on yes button
77 | yesNoDialogListener.onYesNoDialog(type, true, payload, payloadString)
78 | }
79 |
80 | // add no button
81 | builder.setNegativeButton(noButton) { _, _ ->
82 | // listen for click on no button
83 | yesNoDialogListener.onYesNoDialog(type, false, payload, payloadString)
84 | }
85 |
86 | // handle outside-click as "no"
87 | builder.setOnCancelListener {
88 | yesNoDialogListener.onYesNoDialog(type, false, payload, payloadString)
89 | }
90 |
91 | // display dialog
92 | builder.show()
93 | }
94 | }
95 |
--------------------------------------------------------------------------------
/app/src/main/res/values/colors.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | #fffffbfe
8 | #ffe7e0ec
9 | #fffffbfe
10 |
11 | #ff1c1b1f
12 | #ffe7e0ec
13 |
14 |
15 | #ff1c1b1f
16 | #ff49454f
17 | #ffd0bcff
18 | #ffd0bcff
19 | #ff1c1b1f
20 | #ff49454f
21 | #ffe7e0ec
22 |
23 |
24 | #fffffbfe
25 | #ffe7e0ec
26 | #ffb3261e
27 | #ffffffff
28 | #ff6750a4
29 | #ffffffff
30 | #fffffbfe
31 | #ffe7e0ec
32 |
33 |
34 | #ffffffff
35 | #ff6750a4
36 | #ffd0bcff
37 | #ff313033
38 | #fff4eff4
39 | #fff4eff4
40 | #fff4eff4
41 |
42 |
43 |
44 | #ffffffff
45 | #ffe6e1e5
46 | #ff7d7d7d
47 | #ff595959
48 | #ff1c1b1f
49 |
50 | #d9313033
51 | #00ffffff
52 |
53 |
--------------------------------------------------------------------------------
/app/src/main/res/values-night-v31/colors.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | @android:color/system_neutral1_900
8 | @android:color/system_neutral2_700
9 | @android:color/system_neutral1_900
10 |
11 | @android:color/system_neutral1_100
12 | @android:color/system_neutral2_700
13 |
14 |
15 | @android:color/system_neutral1_100
16 | @android:color/system_neutral2_200
17 | @android:color/system_accent1_600
18 | @android:color/system_accent1_600
19 | @android:color/system_neutral1_100
20 | @android:color/system_neutral2_200
21 | @android:color/system_neutral2_700
22 |
23 |
24 | @android:color/system_neutral1_900
25 | @android:color/system_neutral2_700
26 | #fff2b8b5
27 | #ff601410
28 | @android:color/system_accent1_200
29 | @android:color/system_accent1_800
30 | @android:color/system_neutral1_900
31 | @android:color/system_neutral2_700
32 |
33 |
34 | @android:color/system_accent1_0
35 | @android:color/system_accent1_600
36 | @android:color/system_accent1_200
37 | @android:color/system_neutral1_800
38 | @android:color/system_neutral1_50
39 | @android:color/system_neutral1_50
40 | @android:color/system_neutral1_50
41 |
42 |
--------------------------------------------------------------------------------
/app/build.gradle:
--------------------------------------------------------------------------------
1 | apply plugin: 'com.android.application'
2 | apply plugin: 'kotlin-android'
3 | apply plugin: 'kotlin-parcelize'
4 |
5 |
6 | android {
7 | compileSdkVersion 32
8 | // buildToolsVersion is optional because the plugin uses a recommended version by default
9 |
10 | defaultConfig {
11 | applicationId 'org.y20k.transistor'
12 | minSdkVersion 25
13 | targetSdkVersion 32
14 | versionCode 91
15 | versionName '4.1.1'
16 | resConfigs "en", "ar", "ca", "cs", "de", "el", "eo", "es", "eu", "fr", "fy", "gl", "he", "hr", "id", "it", "ja", "kab", "nb-rNO", "nl", "pa", "pl", "pt", "pt-rBR", "ru", "sk", "sl", "sr", "th", "tr", "uk", "zh-rCN"
17 | }
18 |
19 | kotlinOptions {
20 | jvmTarget = '1.8'
21 | }
22 |
23 | compileOptions {
24 | sourceCompatibility JavaVersion.VERSION_1_8
25 | targetCompatibility JavaVersion.VERSION_1_8
26 | }
27 |
28 | lintOptions{
29 | disable 'MissingTranslation'
30 | }
31 |
32 | buildTypes {
33 | release {
34 | // Enables code shrinking, obfuscation, and optimization for only
35 | // your project's release build type.
36 | minifyEnabled true
37 |
38 | // Enables resource shrinking, which is performed by the
39 | // Android Gradle plugin.
40 | shrinkResources true
41 |
42 | // Includes the default ProGuard rules files that are packaged with
43 | // the Android Gradle plugin. To learn more, go to the section about
44 | // R8 configuration files.
45 | proguardFiles getDefaultProguardFile(
46 | 'proguard-android-optimize.txt'),
47 | 'proguard-rules.pro'
48 | }
49 | debug {
50 | // Comment out the below lines if you do not need to test resource shrinking
51 | // minifyEnabled true
52 | // shrinkResources true
53 | // proguardFiles getDefaultProguardFile(
54 | // 'proguard-android-optimize.txt'),
55 | // 'proguard-rules.pro'
56 | }
57 |
58 | }
59 | }
60 |
61 | dependencies {
62 | implementation fileTree(dir: 'libs', include: ['*.jar'])
63 |
64 | implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlinVersion"
65 |
66 | def coroutinesVersion = "1.5.2"
67 | implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:$coroutinesVersion"
68 | implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:$coroutinesVersion"
69 |
70 | implementation 'com.google.android.material:material:1.6.0'
71 |
72 | implementation "androidx.activity:activity-ktx:1.4.0"
73 | implementation "androidx.appcompat:appcompat:1.4.1"
74 | implementation "androidx.constraintlayout:constraintlayout:2.1.3"
75 | implementation "androidx.core:core-ktx:1.7.0"
76 | implementation "androidx.palette:palette-ktx:1.0.0"
77 | implementation "androidx.preference:preference-ktx:1.2.0"
78 | implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0'
79 | implementation "androidx.media:media:1.5.0"
80 |
81 | def navigationVersion = "2.4.2"
82 | implementation "androidx.navigation:navigation-fragment-ktx:$navigationVersion"
83 | implementation "androidx.navigation:navigation-ui-ktx:$navigationVersion"
84 |
85 | implementation 'androidx.work:work-runtime-ktx:2.7.1'
86 |
87 | def exoplayerVersion = "2.17.1"
88 | implementation "com.google.android.exoplayer:exoplayer:$exoplayerVersion"
89 | implementation "com.google.android.exoplayer:extension-mediasession:$exoplayerVersion"
90 |
91 | implementation "com.google.code.gson:gson:2.9.0"
92 | implementation 'com.android.volley:volley:1.2.1'
93 |
94 | }
95 |
--------------------------------------------------------------------------------
/app/src/main/java/org/y20k/transistor/extensions/PlaybackStateCompatExt.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * MediaMetadataCompatExt.kt
3 | * Implements the MediaMetadataCompatExt extension methods
4 | * Useful extension methods for MediaMetadataCompatExt
5 | * Source: https://raw.githubusercontent.com/googlesamples/android-UniversalMusicPlayer/master/common/src/main/java/com/example/android/uamp/media/extensions/MediaMetadataCompatExt.kt
6 | *
7 | * This file is part of
8 | * TRANSISTOR - Radio App for Android
9 | *
10 | * Copyright (c) 2015-22 - Y20K.org
11 | * Licensed under the MIT-License
12 | * http://opensource.org/licenses/MIT
13 | */
14 |
15 |
16 | package org.y20k.transistor.extensions
17 |
18 | import android.os.SystemClock
19 | import android.support.v4.media.session.PlaybackStateCompat
20 |
21 |
22 | inline val PlaybackStateCompat.isPrepared
23 | get() = (state == PlaybackStateCompat.STATE_BUFFERING) ||
24 | (state == PlaybackStateCompat.STATE_PLAYING) ||
25 | (state == PlaybackStateCompat.STATE_PAUSED)
26 |
27 |
28 | inline val PlaybackStateCompat.isPlaying
29 | get() = (state == PlaybackStateCompat.STATE_BUFFERING) ||
30 | (state == PlaybackStateCompat.STATE_PLAYING)
31 |
32 | inline val PlaybackStateCompat.isActive
33 | get() = (state == PlaybackStateCompat.STATE_BUFFERING) ||
34 | (state == PlaybackStateCompat.STATE_PLAYING) ||
35 | (state == PlaybackStateCompat.STATE_FAST_FORWARDING) ||
36 | (state == PlaybackStateCompat.STATE_REWINDING)
37 |
38 |
39 | inline val PlaybackStateCompat.isPlayEnabled
40 | get() = (actions and PlaybackStateCompat.ACTION_PLAY != 0L) ||
41 | ((actions and PlaybackStateCompat.ACTION_PLAY_PAUSE != 0L) &&
42 | (state == PlaybackStateCompat.STATE_PAUSED))
43 |
44 |
45 | inline val PlaybackStateCompat.isPauseEnabled
46 | get() = (actions and PlaybackStateCompat.ACTION_PAUSE != 0L) ||
47 | ((actions and PlaybackStateCompat.ACTION_PLAY_PAUSE != 0L) &&
48 | (state == PlaybackStateCompat.STATE_BUFFERING ||
49 | state == PlaybackStateCompat.STATE_PLAYING))
50 |
51 |
52 | inline val PlaybackStateCompat.isFastForwardEnabled
53 | get() = actions and PlaybackStateCompat.ACTION_FAST_FORWARD != 0L
54 |
55 |
56 | inline val PlaybackStateCompat.isRewindEnabled
57 | get() = actions and PlaybackStateCompat.ACTION_REWIND != 0L
58 |
59 |
60 | inline val PlaybackStateCompat.isSkipToNextEnabled
61 | get() = actions and PlaybackStateCompat.ACTION_SKIP_TO_NEXT != 0L
62 |
63 |
64 | inline val PlaybackStateCompat.isSkipToPreviousEnabled
65 | get() = actions and PlaybackStateCompat.ACTION_SKIP_TO_PREVIOUS != 0L
66 |
67 |
68 | inline val PlaybackStateCompat.stateName
69 | get() = when (state) {
70 | PlaybackStateCompat.STATE_NONE -> "STATE_NONE"
71 | PlaybackStateCompat.STATE_STOPPED -> "STATE_STOPPED"
72 | PlaybackStateCompat.STATE_PAUSED -> "STATE_PAUSED"
73 | PlaybackStateCompat.STATE_PLAYING -> "STATE_PLAYING"
74 | PlaybackStateCompat.STATE_FAST_FORWARDING -> "STATE_FAST_FORWARDING"
75 | PlaybackStateCompat.STATE_REWINDING -> "STATE_REWINDING"
76 | PlaybackStateCompat.STATE_BUFFERING -> "STATE_BUFFERING"
77 | PlaybackStateCompat.STATE_ERROR -> "STATE_ERROR"
78 | else -> "UNKNOWN_STATE"
79 | }
80 |
81 |
82 | /* Calculates current playback position based on last update time along with playback state and speed */
83 | inline val PlaybackStateCompat.currentPlaybackPosition: Long
84 | get() = if (state == PlaybackStateCompat.STATE_PLAYING) {
85 | val timeDelta = SystemClock.elapsedRealtime() - lastPositionUpdateTime
86 | (position + (timeDelta * playbackSpeed)).toLong()
87 | } else {
88 | position
89 | }
90 |
--------------------------------------------------------------------------------
/app/src/main/java/org/y20k/transistor/helpers/AppThemeHelper.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * AppThemeHelper.kt
3 | * Implements the AppThemeHelper object
4 | * A AppThemeHelper can set the different app themes: Light Mode, Dark Mode, Follow System
5 | *
6 | * This file is part of
7 | * TRANSISTOR - Radio App for Android
8 | *
9 | * Copyright (c) 2015-22 - Y20K.org
10 | * Licensed under the MIT-License
11 | * http://opensource.org/licenses/MIT
12 | */
13 |
14 |
15 | package org.y20k.transistor.helpers
16 |
17 | import android.app.Activity
18 | import android.content.Context
19 | import android.content.res.Configuration
20 | import android.view.View
21 | import androidx.appcompat.app.AppCompatDelegate
22 | import org.y20k.transistor.Keys
23 | import org.y20k.transistor.R
24 |
25 |
26 | /*
27 | * AppThemeHelper object
28 | */
29 | object AppThemeHelper {
30 |
31 | /* Define log tag */
32 | private val TAG: String = LogHelper.makeLogTag(AppThemeHelper::class.java)
33 |
34 |
35 | /* Sets app theme */
36 | fun setTheme(nightModeState: String) {
37 | when (nightModeState) {
38 | Keys.STATE_THEME_DARK_MODE -> {
39 | if (AppCompatDelegate.getDefaultNightMode() != AppCompatDelegate.MODE_NIGHT_YES) {
40 | // turn on dark mode
41 | AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES)
42 | LogHelper.i(TAG, "Dark Mode activated.")
43 | }
44 | }
45 | Keys.STATE_THEME_LIGHT_MODE -> {
46 | if (AppCompatDelegate.getDefaultNightMode() != AppCompatDelegate.MODE_NIGHT_NO) {
47 | // turn on light mode
48 | AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO)
49 | LogHelper.i(TAG, "Theme: Light Mode activated.")
50 | }
51 | }
52 | Keys.STATE_THEME_FOLLOW_SYSTEM -> {
53 | if (AppCompatDelegate.getDefaultNightMode() != AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM) {
54 | // turn on mode "follow system"
55 | AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM)
56 | LogHelper.i(TAG, "Theme: Follow System Mode activated.")
57 | }
58 | }
59 | else -> {
60 | // turn on mode "follow system"
61 | AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM)
62 | LogHelper.i(TAG, "Theme: Follow System Mode activated.")
63 | }
64 | }
65 | }
66 |
67 |
68 | /* Return weather Night Mode is on, or not */
69 | fun isDarkModeOn(context: Context): Boolean {
70 | val nightMode = context.resources.configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK
71 | return nightMode == Configuration.UI_MODE_NIGHT_YES
72 | }
73 |
74 |
75 | /* Returns a readable String for currently selected App Theme */
76 | fun getCurrentTheme(context: Context): String {
77 | return when (PreferencesHelper.loadThemeSelection()) {
78 | Keys.STATE_THEME_LIGHT_MODE -> context.getString(R.string.pref_theme_selection_mode_light)
79 | Keys.STATE_THEME_DARK_MODE -> context.getString(R.string.pref_theme_selection_mode_dark)
80 | else -> context.getString(R.string.pref_theme_selection_mode_device_default)
81 | }
82 | }
83 |
84 |
85 | /* Displays the default status bar */
86 | private fun displayDefaultStatusBar(activity: Activity) {
87 | val decorView = activity.window.decorView
88 | decorView.systemUiVisibility = 0
89 | }
90 |
91 |
92 | /* Displays the light (inverted) status bar */
93 | private fun displayLightStatusBar(activity: Activity) {
94 | val decorView = activity.window.decorView
95 | decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR
96 | }
97 |
98 |
99 |
100 |
101 | }
102 |
--------------------------------------------------------------------------------
/app/src/main/java/org/y20k/transistor/collection/CollectionViewModel.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * CollectionViewModel.kt
3 | * Implements the CollectionViewModel class
4 | * A CollectionViewModel stores the collection of stations as live data
5 | *
6 | * This file is part of
7 | * TRANSISTOR - Radio App for Android
8 | *
9 | * Copyright (c) 2015-22 - Y20K.org
10 | * Licensed under the MIT-License
11 | * http://opensource.org/licenses/MIT
12 | */
13 |
14 |
15 | package org.y20k.transistor.collection
16 |
17 | import android.app.Application
18 | import android.content.BroadcastReceiver
19 | import android.content.Context
20 | import android.content.Intent
21 | import android.content.IntentFilter
22 | import androidx.lifecycle.AndroidViewModel
23 | import androidx.lifecycle.MutableLiveData
24 | import androidx.lifecycle.viewModelScope
25 | import androidx.localbroadcastmanager.content.LocalBroadcastManager
26 | import kotlinx.coroutines.launch
27 | import org.y20k.transistor.Keys
28 | import org.y20k.transistor.core.Collection
29 | import org.y20k.transistor.helpers.FileHelper
30 | import org.y20k.transistor.helpers.LogHelper
31 | import java.util.*
32 |
33 |
34 | /*
35 | * CollectionViewModel.class
36 | */
37 | class CollectionViewModel(application: Application) : AndroidViewModel(application) {
38 |
39 | /* Define log tag */
40 | private val TAG: String = LogHelper.makeLogTag(CollectionViewModel::class.java)
41 |
42 |
43 | /* Main class variables */
44 | val collectionLiveData: MutableLiveData = MutableLiveData()
45 | val collectionSizeLiveData: MutableLiveData = MutableLiveData()
46 | private var modificationDateViewModel: Date = Date()
47 | private var collectionChangedReceiver: BroadcastReceiver
48 |
49 |
50 | /* Init constructor */
51 | init {
52 | // load collection
53 | loadCollection(application)
54 | // create and register collection changed receiver
55 | collectionChangedReceiver = createCollectionChangedReceiver()
56 | LocalBroadcastManager.getInstance(application).registerReceiver(collectionChangedReceiver, IntentFilter(Keys.ACTION_COLLECTION_CHANGED))
57 | }
58 |
59 |
60 | /* Overrides onCleared */
61 | override fun onCleared() {
62 | super.onCleared()
63 | LocalBroadcastManager.getInstance(getApplication()).unregisterReceiver(collectionChangedReceiver)
64 | }
65 |
66 |
67 | /* Creates the collectionChangedReceiver - handles Keys.ACTION_COLLECTION_CHANGED */
68 | private fun createCollectionChangedReceiver(): BroadcastReceiver {
69 | return object : BroadcastReceiver() {
70 | override fun onReceive(context: Context, intent: Intent) {
71 | if (intent.hasExtra(Keys.EXTRA_COLLECTION_MODIFICATION_DATE)) {
72 | val date: Date = Date(intent.getLongExtra(Keys.EXTRA_COLLECTION_MODIFICATION_DATE, 0L))
73 | // check if reload is necessary
74 | if (date.after(modificationDateViewModel)) {
75 | LogHelper.v(TAG, "CollectionViewModel - reload collection after broadcast received.")
76 | loadCollection(context)
77 | }
78 | }
79 | }
80 | }
81 | }
82 |
83 |
84 | /* Reads collection of radio stations from storage using GSON */
85 | private fun loadCollection(context: Context) {
86 | LogHelper.v(TAG, "Loading collection of stations from storage")
87 | viewModelScope.launch {
88 | // load collection on background thread
89 | val collection: Collection = FileHelper.readCollectionSuspended(getApplication())
90 | // get updated modification date
91 | modificationDateViewModel = collection.modificationDate
92 | // update collection view model
93 | collectionLiveData.value = collection
94 | // update collection sie
95 | collectionSizeLiveData.value = collection.stations.size
96 | }
97 | }
98 |
99 | }
100 |
--------------------------------------------------------------------------------
/assets/transistor-status-bar-icon-current.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
74 |
--------------------------------------------------------------------------------
/app/src/main/java/org/y20k/transistor/MainActivity.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * MainActivity.kt
3 | * Implements the MainActivity class
4 | * MainActivity is the default activity that can host the player fragment and the settings fragment
5 | *
6 | * This file is part of
7 | * TRANSISTOR - Radio App for Android
8 | *
9 | * Copyright (c) 2015-22 - Y20K.org
10 | * Licensed under the MIT-License
11 | * http://opensource.org/licenses/MIT
12 | */
13 |
14 |
15 | package org.y20k.transistor
16 |
17 | import android.content.SharedPreferences
18 | import android.os.Bundle
19 | import androidx.appcompat.app.AppCompatActivity
20 | import androidx.appcompat.widget.Toolbar
21 | import androidx.navigation.fragment.NavHostFragment
22 | import androidx.navigation.ui.AppBarConfiguration
23 | import androidx.navigation.ui.NavigationUI
24 | import androidx.navigation.ui.navigateUp
25 | import org.y20k.transistor.helpers.AppThemeHelper
26 | import org.y20k.transistor.helpers.FileHelper
27 | import org.y20k.transistor.helpers.LogHelper
28 | import org.y20k.transistor.helpers.PreferencesHelper
29 |
30 |
31 | /*
32 | * MainActivity class
33 | */
34 | class MainActivity: AppCompatActivity() {
35 |
36 | /* Define log tag */
37 | private val TAG: String = LogHelper.makeLogTag(MainActivity::class.java)
38 |
39 |
40 | /* Main class variables */
41 | private lateinit var appBarConfiguration: AppBarConfiguration
42 |
43 |
44 | /* Overrides onCreate from AppCompatActivity */
45 | override fun onCreate(savedInstanceState: Bundle?) {
46 | super.onCreate(savedInstanceState)
47 |
48 | // house-keeping: determine if edit stations is enabled by default todo: remove in 2023
49 | if (PreferencesHelper.loadCollectionSize() != -1) {
50 | // existing user detected - enable Edit Stations by default
51 | PreferencesHelper.saveEditStationsEnabled(true)
52 | }
53 |
54 | // set up views
55 | setContentView(R.layout.activity_main)
56 |
57 | // create .nomedia file - if not yet existing
58 | FileHelper.createNomediaFile(getExternalFilesDir(null))
59 |
60 | // set up action bar
61 | setSupportActionBar(findViewById(R.id.main_toolbar))
62 | val toolbar: Toolbar = findViewById(R.id.main_toolbar)
63 | val navHostFragment = supportFragmentManager.findFragmentById(R.id.main_host_container) as NavHostFragment
64 | val navController = navHostFragment.navController
65 | appBarConfiguration = AppBarConfiguration(navController.graph)
66 | NavigationUI.setupWithNavController(toolbar, navController, appBarConfiguration)
67 | supportActionBar?.hide()
68 |
69 | // register listener for changes in shared preferences
70 | PreferencesHelper.registerPreferenceChangeListener(sharedPreferenceChangeListener)
71 | }
72 |
73 |
74 | /* Overrides onSupportNavigateUp from AppCompatActivity */
75 | override fun onSupportNavigateUp(): Boolean {
76 | // Taken from: https://developer.android.com/guide/navigation/navigation-ui#action_bar
77 | val navHostFragment = supportFragmentManager.findFragmentById(R.id.main_host_container) as NavHostFragment
78 | val navController = navHostFragment.navController
79 | return navController.navigateUp(appBarConfiguration) || super.onSupportNavigateUp()
80 | }
81 |
82 |
83 | /* Overrides onDestroy from AppCompatActivity */
84 | override fun onDestroy() {
85 | super.onDestroy()
86 | // unregister listener for changes in shared preferences
87 | PreferencesHelper.unregisterPreferenceChangeListener(sharedPreferenceChangeListener)
88 | }
89 |
90 |
91 | /*
92 | * Defines the listener for changes in shared preferences
93 | */
94 | private val sharedPreferenceChangeListener = SharedPreferences.OnSharedPreferenceChangeListener { sharedPreferences, key ->
95 | when (key) {
96 | Keys.PREF_THEME_SELECTION -> {
97 | AppThemeHelper.setTheme(PreferencesHelper.loadThemeSelection())
98 | }
99 | }
100 | }
101 | /*
102 | * End of declaration
103 | */
104 |
105 | }
106 |
--------------------------------------------------------------------------------
/app/src/main/java/org/y20k/transistor/core/Station.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Station.kt
3 | * Implements the Station class
4 | * A Station object holds the base data of a radio
5 | *
6 | * This file is part of
7 | * TRANSISTOR - Radio App for Android
8 | *
9 | * Copyright (c) 2015-22 - Y20K.org
10 | * Licensed under the MIT-License
11 | * http://opensource.org/licenses/MIT
12 | */
13 |
14 |
15 | package org.y20k.transistor.core
16 |
17 | import android.os.Parcelable
18 | import android.support.v4.media.session.PlaybackStateCompat
19 | import androidx.annotation.Keep
20 | import com.google.gson.annotations.Expose
21 | import kotlinx.parcelize.Parcelize
22 | import org.y20k.transistor.Keys
23 | import java.util.*
24 |
25 |
26 | /*
27 | * Station class
28 | */
29 | @Keep
30 | @Parcelize
31 | data class Station (@Expose val uuid: String = UUID.randomUUID().toString(),
32 | @Expose var starred: Boolean = false,
33 | @Expose var name: String = String(),
34 | @Expose var nameManuallySet: Boolean = false,
35 | @Expose var streamUris: MutableList = mutableListOf(),
36 | @Expose var stream: Int = 0,
37 | @Expose var streamContent: String = Keys.MIME_TYPE_UNSUPPORTED,
38 | @Expose var homepage: String = String(),
39 | @Expose var image: String = Keys.LOCATION_DEFAULT_STATION_IMAGE,
40 | @Expose var smallImage: String = Keys.LOCATION_DEFAULT_STATION_IMAGE,
41 | @Expose var imageColor: Int = -1,
42 | @Expose var imageManuallySet: Boolean = false,
43 | @Expose var remoteImageLocation: String = String(),
44 | @Expose var remoteStationLocation: String = String(),
45 | @Expose var modificationDate: Date = Keys.DEFAULT_DATE,
46 | @Expose var playbackState: Int = PlaybackStateCompat.STATE_STOPPED,
47 | @Expose var radioBrowserStationUuid: String = String(),
48 | @Expose var radioBrowserChangeUuid: String = String()): Parcelable {
49 |
50 |
51 | /* overrides toString method */
52 | override fun toString(): String {
53 | val stringBuilder: StringBuilder = StringBuilder()
54 | stringBuilder.append("Name: ${name}\n")
55 | if (streamUris.isNotEmpty()) stringBuilder.append("Stream: ${streamUris[stream]}\n")
56 | stringBuilder.append("Last Update: ${modificationDate}\n")
57 | return stringBuilder.toString()
58 | }
59 |
60 |
61 | /* Getter for currently selected stream */
62 | fun getStreamUri(): String {
63 | if (streamUris.isNotEmpty()) {
64 | return streamUris[stream]
65 | } else {
66 | return String()
67 | }
68 | }
69 |
70 |
71 | /* Checks if a Station has the minimum required elements / data */
72 | fun isValid(): Boolean {
73 | return uuid.isNotEmpty() && name.isNotEmpty() && streamUris.isNotEmpty() && streamUris[stream].isNotEmpty() && modificationDate != Keys.DEFAULT_DATE && streamContent != Keys.MIME_TYPE_UNSUPPORTED
74 | }
75 |
76 |
77 | /* Creates a deep copy of a Station */
78 | fun deepCopy(): Station {
79 | return Station(uuid = uuid,
80 | starred = starred,
81 | name = name,
82 | nameManuallySet = nameManuallySet,
83 | streamUris = streamUris,
84 | stream = stream,
85 | streamContent = streamContent,
86 | homepage = homepage,
87 | image = image,
88 | smallImage = smallImage,
89 | imageColor = imageColor,
90 | imageManuallySet = imageManuallySet,
91 | remoteImageLocation = remoteImageLocation,
92 | remoteStationLocation = remoteStationLocation,
93 | modificationDate = modificationDate,
94 | playbackState = playbackState,
95 | radioBrowserStationUuid = radioBrowserStationUuid,
96 | radioBrowserChangeUuid = radioBrowserChangeUuid)
97 | }
98 | }
99 |
--------------------------------------------------------------------------------
/app/src/main/java/org/y20k/transistor/collection/CollectionProvider.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * CollectionProvider.kt
3 | * Implements the CollectionProvider class
4 | * A CollectionProvider provides a list of stations as MediaMetadata items
5 | * Credit: https://github.com/googlesamples/android-MediaBrowserService/ (-> MusicProvider)
6 | *
7 | * This file is part of
8 | * TRANSISTOR - Radio App for Android
9 | *
10 | * Copyright (c) 2015-22 - Y20K.org
11 | * Licensed under the MIT-License
12 | * http://opensource.org/licenses/MIT
13 | */
14 |
15 |
16 | package org.y20k.transistor.collection
17 |
18 | import android.content.Context
19 | import android.support.v4.media.MediaBrowserCompat
20 | import org.y20k.transistor.core.Collection
21 | import org.y20k.transistor.core.Station
22 | import org.y20k.transistor.helpers.CollectionHelper
23 |
24 |
25 | /**
26 | * CollectionProvider.class
27 | */
28 | class CollectionProvider {
29 |
30 | /* Define log tag */
31 | private val TAG = CollectionProvider::class.java.simpleName
32 |
33 |
34 | /* Main class variables */
35 | private enum class State { NON_INITIALIZED, INITIALIZING, INITIALIZED }
36 | private var currentState = State.NON_INITIALIZED
37 | val stationListByName: MutableList = mutableListOf()
38 |
39 |
40 | /* Callback used by PlayerService */
41 | interface CollectionProviderCallback {
42 | fun onStationListReady(success: Boolean)
43 | }
44 |
45 |
46 | /* Return current state */
47 | fun isInitialized(): Boolean {
48 | return currentState == State.INITIALIZED
49 | }
50 |
51 |
52 | /* Gets list of stations and caches meta information in list of MediaMetaItems */
53 | fun retrieveMedia(context: Context, collection: Collection, stationListProviderCallback: CollectionProviderCallback) {
54 | if (currentState == State.INITIALIZED) {
55 | // already initialized, set callback immediately
56 | stationListProviderCallback.onStationListReady(true)
57 | } else {
58 | // sort station list by name
59 | val stationListSorted: List = collection.stations.sortedBy { it.name }
60 | stationListSorted.forEach { station ->
61 | stationListByName.add(CollectionHelper.buildStationMediaMetaItem(context, station))
62 | }
63 | // afterwards: update state and set callback
64 | currentState = State.INITIALIZED
65 | stationListProviderCallback.onStationListReady(true)
66 | }
67 | }
68 |
69 |
70 | /* Get first station as media item */
71 | fun getFirstStation(): MediaBrowserCompat.MediaItem? {
72 | when (isInitialized() && stationListByName.isNotEmpty()) {
73 | true -> return stationListByName.first()
74 | false -> return null
75 | }
76 | }
77 |
78 |
79 | /* Get last station as media item */
80 | fun getLastStation(): MediaBrowserCompat.MediaItem? {
81 | when (isInitialized() && stationListByName.isNotEmpty()) {
82 | true -> return stationListByName.last()
83 | false -> return null
84 | }
85 | }
86 |
87 |
88 | /* Get next station as media item */
89 | fun getNextStation(stationUuid: String): MediaBrowserCompat.MediaItem? {
90 | stationListByName.forEachIndexed { index, mediaItem ->
91 | if (mediaItem.description.mediaId == stationUuid) {
92 | if (index + 1 > stationListByName.size) {
93 | // return next station
94 | return stationListByName[index + 1]
95 | }
96 | }
97 | }
98 | // default: return newest (cycle through from oldest)
99 | return getFirstStation()
100 | }
101 |
102 |
103 | /* Get previous station as media item */
104 | fun getPreviousStation(stationUuid: String): MediaBrowserCompat.MediaItem? {
105 | stationListByName.forEachIndexed { index, mediaItem ->
106 | if (mediaItem.description.mediaId == stationUuid) {
107 | if (index - 1 >= 0) {
108 | // return previous station
109 | return stationListByName[index - 1]
110 | }
111 | }
112 | }
113 | // default: return oldest (cycle through from newest)
114 | return getLastStation()
115 | }
116 |
117 | }
118 |
--------------------------------------------------------------------------------