From d9490625367898f882685d27bb0653c116bfb46d Mon Sep 17 00:00:00 2001 From: Muhammad Ryan Fikri Fakhrezi <113404595+Yanfiq@users.noreply.github.com> Date: Tue, 23 Jul 2024 21:10:19 +0700 Subject: [PATCH] refactoring --- .idea/other.xml | 263 ------------------ app/src/main/AndroidManifest.xml | 20 +- .../com/yanfiq/streamfusion/MainActivity.kt | 6 +- .../data/response/audius/Artist.kt | 5 - .../data/response/audius/AudiusResponse.kt | 2 + .../data/response/spotify/Album.kt | 3 - .../data/response/spotify/Artist.kt | 3 - .../data/response/spotify/Image.kt | 3 - .../data/response/spotify/SpotifyResponse.kt | 5 + .../response/spotify/SpotifySearchResponse.kt | 3 - .../data/response/spotify/Tracks.kt | 3 - .../data/response/youtube/Thumbnail.kt | 5 - .../response/youtube/VideoContentDetails.kt | 3 - .../response/youtube/VideoDetailsResponse.kt | 2 + .../data/response/youtube/VideoId.kt | 5 - .../data/response/youtube/YoutubeResponse.kt | 2 + .../data/retrofit/audius/AudiusApi.kt | 2 +- .../retrofit/audius/AudiusEndpointUtil.kt | 8 +- .../soundcloud/SoundCloudApiService.kt | 2 +- .../data/retrofit/spotify/SpotifyApi.kt | 48 +--- .../retrofit/spotify/SpotifyApiService.kt | 4 +- .../data/retrofit/spotify/SpotifyUtils.kt | 46 --- .../data/retrofit/youtube/YoutubeApi.kt | 10 - .../data/viewmodel/SearchResult.kt | 28 +- .../data/viewmodel/SearchStatus.kt | 15 +- .../domain/model/audius/Artist.kt | 5 + .../model}/audius/Artwork.kt | 2 +- .../response => domain/model}/audius/Track.kt | 2 +- .../model}/soundcloud/Track.kt | 2 +- .../domain/model/spotify/Album.kt | 3 + .../domain/model/spotify/Artist.kt | 3 + .../domain/model/spotify/Image.kt | 3 + .../model}/spotify/Track.kt | 2 +- .../domain/model/spotify/Tracks.kt | 3 + .../domain/model/youtube/Thumbnail.kt | 5 + .../model}/youtube/Thumbnails.kt | 2 +- .../model}/youtube/Video.kt | 2 +- .../model/youtube/VideoContentDetails.kt | 3 + .../model}/youtube/VideoDetailsItem.kt | 2 +- .../domain/model/youtube/VideoId.kt | 5 + .../model}/youtube/VideoItem.kt | 2 +- .../model}/youtube/VideoSnippet.kt | 2 +- .../screens}/BottomNavigationBar.kt | 16 +- .../screens}/BottomNavigationItem.kt | 5 +- .../{ => presentation/screens}/Screens.kt | 2 +- .../screens/home}/HomeScreen.kt | 11 +- .../screens/player}/PlayAudiusActivity.kt | 6 +- .../screens/player}/PlaySoundcloudActivity.kt | 21 +- .../screens/player/PlaySpotifyActivity.kt | 76 +++++ .../screens/player}/PlayYoutubeActivity.kt | 8 +- .../screens/search}/SearchAudius.kt | 9 +- .../screens/search}/SearchScreen.kt | 152 +++++----- .../screens/search}/SearchSoundcloud.kt | 60 ++-- .../screens/search/SearchSpotify.kt | 99 +++++++ .../screens/search}/SearchYoutube.kt | 84 +++--- .../screens/settings}/SettingsScreen.kt | 36 ++- .../{ => presentation}/ui/theme/Color.kt | 2 +- .../{ => presentation}/ui/theme/Theme.kt | 2 +- .../{ => presentation}/ui/theme/Type.kt | 2 +- .../streamfusion/ui/home/HomeFragment.kt | 114 -------- .../streamfusion/ui/home/TrackAdapter.kt | 48 ---- .../streamfusion/ui/search/SearchFragment.kt | 112 -------- .../ui/search/SectionPagerAdapter.kt | 33 --- .../ui/search/audius/PlayAudiusActivity.kt | 217 --------------- .../ui/search/audius/SearchAudiusFragment.kt | 80 ------ .../ui/search/audius/TrackAdapter.kt | 48 ---- .../soundcloud/PlaySoundcloudActivity.kt | 85 ------ .../soundcloud/SearchSoundcloudFragment.kt | 127 --------- .../ui/search/soundcloud/TrackAdapter.kt | 48 ---- .../ui/search/spotify/PlaySpotifyActivity.kt | 50 ---- .../search/spotify/SearchSpotifyFragment.kt | 112 -------- .../ui/search/spotify/TrackAdapter.kt | 49 ---- .../ui/search/youtube/PlayYoutubeActivity.kt | 147 ---------- .../search/youtube/SearchYoutubeFragment.kt | 141 ---------- .../ui/search/youtube/VideoAdapter.kt | 50 ---- .../ui/settings/SettingsFragment.kt | 145 ---------- .../streamfusion/ui/settings/ThemeUtils.kt | 30 -- .../ui/settings/about/AboutActivity.kt | 78 ------ .../ui/settings/about/AboutDetailsActivity.kt | 49 ---- .../ui/settings/about/user_data.kt | 9 - app/src/main/res/drawable/arva.png | Bin 110467 -> 0 bytes app/src/main/res/drawable/audiuslogo.png | Bin 0 -> 17121 bytes .../res/drawable/baseline_settings_24.xml | 5 - app/src/main/res/drawable/bg_audius.xml | 7 - app/src/main/res/drawable/bg_soundcloud.xml | 7 - app/src/main/res/drawable/bg_spotify.xml | 7 - app/src/main/res/drawable/bg_youtube.xml | 7 - .../main/res/drawable/btn_background_1.xml | 9 - .../main/res/drawable/btn_background_2.xml | 9 - app/src/main/res/drawable/danis.jpg | Bin 212059 -> 0 bytes app/src/main/res/drawable/home.xml | 14 - app/src/main/res/drawable/ic_3.png | Bin 2187 -> 0 bytes .../res/drawable/ic_dashboard_black_24dp.xml | 9 - .../main/res/drawable/ic_home_black_24dp.xml | 9 - .../drawable/ic_notifications_black_24dp.xml | 9 - app/src/main/res/drawable/instagram.png | Bin 60380 -> 0 bytes app/src/main/res/drawable/naila.jpg | Bin 352073 -> 0 bytes app/src/main/res/drawable/search.xml | 9 - app/src/main/res/drawable/settings.xml | 12 - app/src/main/res/drawable/soundcloudlogo.png | Bin 0 -> 18014 bytes app/src/main/res/drawable/spotifylogo.png | Bin 0 -> 7526 bytes app/src/main/res/drawable/top_background.png | Bin 13034 -> 0 bytes app/src/main/res/drawable/udin.jpg | Bin 345283 -> 0 bytes app/src/main/res/drawable/wak.png | Bin 33128 -> 0 bytes app/src/main/res/drawable/whatsapp.png | Bin 47505 -> 0 bytes .../main/res/drawable/youtubelogo_logo.png | Bin 0 -> 2913 bytes .../main/res/drawable/youtubelogo_text.png | Bin 0 -> 7734 bytes app/src/main/res/layout/activity_about.xml | 180 ------------ .../res/layout/activity_about_details.xml | 132 --------- app/src/main/res/layout/activity_main.xml | 32 --- .../main/res/layout/activity_play_audius.xml | 55 ---- .../res/layout/activity_play_soundcloud.xml | 11 - .../main/res/layout/activity_play_spotify.xml | 11 - .../main/res/layout/activity_play_youtube.xml | 46 --- app/src/main/res/layout/empty_layout.xml | 6 - app/src/main/res/layout/fragment_home.xml | 140 ---------- app/src/main/res/layout/fragment_search.xml | 33 --- .../res/layout/fragment_search_audius.xml | 14 - .../res/layout/fragment_search_soundcloud.xml | 14 - .../res/layout/fragment_search_spotify.xml | 15 - .../res/layout/fragment_search_youtube.xml | 15 - .../res/layout/layout_api_call_failed.xml | 20 -- app/src/main/res/layout/search_item.xml | 41 --- 123 files changed, 471 insertions(+), 3314 deletions(-) delete mode 100644 .idea/other.xml delete mode 100644 app/src/main/java/com/yanfiq/streamfusion/data/response/audius/Artist.kt delete mode 100644 app/src/main/java/com/yanfiq/streamfusion/data/response/spotify/Album.kt delete mode 100644 app/src/main/java/com/yanfiq/streamfusion/data/response/spotify/Artist.kt delete mode 100644 app/src/main/java/com/yanfiq/streamfusion/data/response/spotify/Image.kt create mode 100644 app/src/main/java/com/yanfiq/streamfusion/data/response/spotify/SpotifyResponse.kt delete mode 100644 app/src/main/java/com/yanfiq/streamfusion/data/response/spotify/SpotifySearchResponse.kt delete mode 100644 app/src/main/java/com/yanfiq/streamfusion/data/response/spotify/Tracks.kt delete mode 100644 app/src/main/java/com/yanfiq/streamfusion/data/response/youtube/Thumbnail.kt delete mode 100644 app/src/main/java/com/yanfiq/streamfusion/data/response/youtube/VideoContentDetails.kt delete mode 100644 app/src/main/java/com/yanfiq/streamfusion/data/response/youtube/VideoId.kt delete mode 100644 app/src/main/java/com/yanfiq/streamfusion/data/retrofit/spotify/SpotifyUtils.kt create mode 100644 app/src/main/java/com/yanfiq/streamfusion/domain/model/audius/Artist.kt rename app/src/main/java/com/yanfiq/streamfusion/{data/response => domain/model}/audius/Artwork.kt (81%) rename app/src/main/java/com/yanfiq/streamfusion/{data/response => domain/model}/audius/Track.kt (67%) rename app/src/main/java/com/yanfiq/streamfusion/{data/response => domain/model}/soundcloud/Track.kt (68%) create mode 100644 app/src/main/java/com/yanfiq/streamfusion/domain/model/spotify/Album.kt create mode 100644 app/src/main/java/com/yanfiq/streamfusion/domain/model/spotify/Artist.kt create mode 100644 app/src/main/java/com/yanfiq/streamfusion/domain/model/spotify/Image.kt rename app/src/main/java/com/yanfiq/streamfusion/{data/response => domain/model}/spotify/Track.kt (64%) create mode 100644 app/src/main/java/com/yanfiq/streamfusion/domain/model/spotify/Tracks.kt create mode 100644 app/src/main/java/com/yanfiq/streamfusion/domain/model/youtube/Thumbnail.kt rename app/src/main/java/com/yanfiq/streamfusion/{data/response => domain/model}/youtube/Thumbnails.kt (65%) rename app/src/main/java/com/yanfiq/streamfusion/{data/response => domain/model}/youtube/Video.kt (78%) create mode 100644 app/src/main/java/com/yanfiq/streamfusion/domain/model/youtube/VideoContentDetails.kt rename app/src/main/java/com/yanfiq/streamfusion/{data/response => domain/model}/youtube/VideoDetailsItem.kt (61%) create mode 100644 app/src/main/java/com/yanfiq/streamfusion/domain/model/youtube/VideoId.kt rename app/src/main/java/com/yanfiq/streamfusion/{data/response => domain/model}/youtube/VideoItem.kt (58%) rename app/src/main/java/com/yanfiq/streamfusion/{data/response => domain/model}/youtube/VideoSnippet.kt (72%) rename app/src/main/java/com/yanfiq/streamfusion/{ => presentation/screens}/BottomNavigationBar.kt (89%) rename app/src/main/java/com/yanfiq/streamfusion/{ => presentation/screens}/BottomNavigationItem.kt (94%) rename app/src/main/java/com/yanfiq/streamfusion/{ => presentation/screens}/Screens.kt (76%) rename app/src/main/java/com/yanfiq/streamfusion/{screens => presentation/screens/home}/HomeScreen.kt (86%) rename app/src/main/java/com/yanfiq/streamfusion/{screens => presentation/screens/player}/PlayAudiusActivity.kt (97%) rename app/src/main/java/com/yanfiq/streamfusion/{screens => presentation/screens/player}/PlaySoundcloudActivity.kt (94%) create mode 100644 app/src/main/java/com/yanfiq/streamfusion/presentation/screens/player/PlaySpotifyActivity.kt rename app/src/main/java/com/yanfiq/streamfusion/{screens => presentation/screens/player}/PlayYoutubeActivity.kt (96%) rename app/src/main/java/com/yanfiq/streamfusion/{screens => presentation/screens/search}/SearchAudius.kt (94%) rename app/src/main/java/com/yanfiq/streamfusion/{screens => presentation/screens/search}/SearchScreen.kt (62%) rename app/src/main/java/com/yanfiq/streamfusion/{screens => presentation/screens/search}/SearchSoundcloud.kt (77%) create mode 100644 app/src/main/java/com/yanfiq/streamfusion/presentation/screens/search/SearchSpotify.kt rename app/src/main/java/com/yanfiq/streamfusion/{screens => presentation/screens/search}/SearchYoutube.kt (56%) rename app/src/main/java/com/yanfiq/streamfusion/{screens => presentation/screens/settings}/SettingsScreen.kt (74%) rename app/src/main/java/com/yanfiq/streamfusion/{ => presentation}/ui/theme/Color.kt (99%) rename app/src/main/java/com/yanfiq/streamfusion/{ => presentation}/ui/theme/Theme.kt (99%) rename app/src/main/java/com/yanfiq/streamfusion/{ => presentation}/ui/theme/Type.kt (59%) delete mode 100644 app/src/main/java/com/yanfiq/streamfusion/ui/home/HomeFragment.kt delete mode 100644 app/src/main/java/com/yanfiq/streamfusion/ui/home/TrackAdapter.kt delete mode 100644 app/src/main/java/com/yanfiq/streamfusion/ui/search/SearchFragment.kt delete mode 100644 app/src/main/java/com/yanfiq/streamfusion/ui/search/SectionPagerAdapter.kt delete mode 100644 app/src/main/java/com/yanfiq/streamfusion/ui/search/audius/PlayAudiusActivity.kt delete mode 100644 app/src/main/java/com/yanfiq/streamfusion/ui/search/audius/SearchAudiusFragment.kt delete mode 100644 app/src/main/java/com/yanfiq/streamfusion/ui/search/audius/TrackAdapter.kt delete mode 100644 app/src/main/java/com/yanfiq/streamfusion/ui/search/soundcloud/PlaySoundcloudActivity.kt delete mode 100644 app/src/main/java/com/yanfiq/streamfusion/ui/search/soundcloud/SearchSoundcloudFragment.kt delete mode 100644 app/src/main/java/com/yanfiq/streamfusion/ui/search/soundcloud/TrackAdapter.kt delete mode 100644 app/src/main/java/com/yanfiq/streamfusion/ui/search/spotify/PlaySpotifyActivity.kt delete mode 100644 app/src/main/java/com/yanfiq/streamfusion/ui/search/spotify/SearchSpotifyFragment.kt delete mode 100644 app/src/main/java/com/yanfiq/streamfusion/ui/search/spotify/TrackAdapter.kt delete mode 100644 app/src/main/java/com/yanfiq/streamfusion/ui/search/youtube/PlayYoutubeActivity.kt delete mode 100644 app/src/main/java/com/yanfiq/streamfusion/ui/search/youtube/SearchYoutubeFragment.kt delete mode 100644 app/src/main/java/com/yanfiq/streamfusion/ui/search/youtube/VideoAdapter.kt delete mode 100644 app/src/main/java/com/yanfiq/streamfusion/ui/settings/SettingsFragment.kt delete mode 100644 app/src/main/java/com/yanfiq/streamfusion/ui/settings/ThemeUtils.kt delete mode 100644 app/src/main/java/com/yanfiq/streamfusion/ui/settings/about/AboutActivity.kt delete mode 100644 app/src/main/java/com/yanfiq/streamfusion/ui/settings/about/AboutDetailsActivity.kt delete mode 100644 app/src/main/java/com/yanfiq/streamfusion/ui/settings/about/user_data.kt delete mode 100644 app/src/main/res/drawable/arva.png create mode 100644 app/src/main/res/drawable/audiuslogo.png delete mode 100644 app/src/main/res/drawable/baseline_settings_24.xml delete mode 100644 app/src/main/res/drawable/bg_audius.xml delete mode 100644 app/src/main/res/drawable/bg_soundcloud.xml delete mode 100644 app/src/main/res/drawable/bg_spotify.xml delete mode 100644 app/src/main/res/drawable/bg_youtube.xml delete mode 100644 app/src/main/res/drawable/btn_background_1.xml delete mode 100644 app/src/main/res/drawable/btn_background_2.xml delete mode 100644 app/src/main/res/drawable/danis.jpg delete mode 100644 app/src/main/res/drawable/home.xml delete mode 100644 app/src/main/res/drawable/ic_3.png delete mode 100644 app/src/main/res/drawable/ic_dashboard_black_24dp.xml delete mode 100644 app/src/main/res/drawable/ic_home_black_24dp.xml delete mode 100644 app/src/main/res/drawable/ic_notifications_black_24dp.xml delete mode 100644 app/src/main/res/drawable/instagram.png delete mode 100644 app/src/main/res/drawable/naila.jpg delete mode 100644 app/src/main/res/drawable/search.xml delete mode 100644 app/src/main/res/drawable/settings.xml create mode 100644 app/src/main/res/drawable/soundcloudlogo.png create mode 100644 app/src/main/res/drawable/spotifylogo.png delete mode 100644 app/src/main/res/drawable/top_background.png delete mode 100644 app/src/main/res/drawable/udin.jpg delete mode 100644 app/src/main/res/drawable/wak.png delete mode 100644 app/src/main/res/drawable/whatsapp.png create mode 100644 app/src/main/res/drawable/youtubelogo_logo.png create mode 100644 app/src/main/res/drawable/youtubelogo_text.png delete mode 100644 app/src/main/res/layout/activity_about.xml delete mode 100644 app/src/main/res/layout/activity_about_details.xml delete mode 100644 app/src/main/res/layout/activity_main.xml delete mode 100644 app/src/main/res/layout/activity_play_audius.xml delete mode 100644 app/src/main/res/layout/activity_play_soundcloud.xml delete mode 100644 app/src/main/res/layout/activity_play_spotify.xml delete mode 100644 app/src/main/res/layout/activity_play_youtube.xml delete mode 100644 app/src/main/res/layout/empty_layout.xml delete mode 100644 app/src/main/res/layout/fragment_home.xml delete mode 100644 app/src/main/res/layout/fragment_search.xml delete mode 100644 app/src/main/res/layout/fragment_search_audius.xml delete mode 100644 app/src/main/res/layout/fragment_search_soundcloud.xml delete mode 100644 app/src/main/res/layout/fragment_search_spotify.xml delete mode 100644 app/src/main/res/layout/fragment_search_youtube.xml delete mode 100644 app/src/main/res/layout/layout_api_call_failed.xml delete mode 100644 app/src/main/res/layout/search_item.xml diff --git a/.idea/other.xml b/.idea/other.xml deleted file mode 100644 index 0d3a1fb..0000000 --- a/.idea/other.xml +++ /dev/null @@ -1,263 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 2c9cc91..77accc5 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -16,7 +16,10 @@ android:theme="@style/AppTheme.NoActionBar" tools:targetApi="31"> + - + + + + + + diff --git a/app/src/main/java/com/yanfiq/streamfusion/MainActivity.kt b/app/src/main/java/com/yanfiq/streamfusion/MainActivity.kt index 823d837..fef8619 100644 --- a/app/src/main/java/com/yanfiq/streamfusion/MainActivity.kt +++ b/app/src/main/java/com/yanfiq/streamfusion/MainActivity.kt @@ -9,7 +9,8 @@ import androidx.compose.runtime.Composable import androidx.datastore.core.DataStore import androidx.datastore.preferences.core.Preferences import androidx.datastore.preferences.preferencesDataStore -import com.yanfiq.streamfusion.ui.theme.AppTheme +import com.yanfiq.streamfusion.presentation.screens.BottomNavigationBar +import com.yanfiq.streamfusion.presentation.ui.theme.AppTheme val Context.dataStore: DataStore by preferencesDataStore(name = "settings") @@ -20,9 +21,6 @@ class MainActivity : AppCompatActivity() { MainScreen(this@MainActivity) } // SpotifyApi.initialize(this) - -// val themePref = ThemeUtils.getThemePreference(this) -// ThemeUtils.applyTheme(themePref) } @Composable diff --git a/app/src/main/java/com/yanfiq/streamfusion/data/response/audius/Artist.kt b/app/src/main/java/com/yanfiq/streamfusion/data/response/audius/Artist.kt deleted file mode 100644 index 75ac890..0000000 --- a/app/src/main/java/com/yanfiq/streamfusion/data/response/audius/Artist.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.yanfiq.streamfusion.data.response.audius - -data class Artist( - val name: String -) diff --git a/app/src/main/java/com/yanfiq/streamfusion/data/response/audius/AudiusResponse.kt b/app/src/main/java/com/yanfiq/streamfusion/data/response/audius/AudiusResponse.kt index 2297113..e10e609 100644 --- a/app/src/main/java/com/yanfiq/streamfusion/data/response/audius/AudiusResponse.kt +++ b/app/src/main/java/com/yanfiq/streamfusion/data/response/audius/AudiusResponse.kt @@ -1,3 +1,5 @@ package com.yanfiq.streamfusion.data.response.audius +import com.yanfiq.streamfusion.domain.model.audius.Track + data class AudiusResponse(val data: List) \ No newline at end of file diff --git a/app/src/main/java/com/yanfiq/streamfusion/data/response/spotify/Album.kt b/app/src/main/java/com/yanfiq/streamfusion/data/response/spotify/Album.kt deleted file mode 100644 index 58a7b0c..0000000 --- a/app/src/main/java/com/yanfiq/streamfusion/data/response/spotify/Album.kt +++ /dev/null @@ -1,3 +0,0 @@ -package com.yanfiq.streamfusion.data.response.spotify - -data class Album(val images: List) diff --git a/app/src/main/java/com/yanfiq/streamfusion/data/response/spotify/Artist.kt b/app/src/main/java/com/yanfiq/streamfusion/data/response/spotify/Artist.kt deleted file mode 100644 index 9a21d9d..0000000 --- a/app/src/main/java/com/yanfiq/streamfusion/data/response/spotify/Artist.kt +++ /dev/null @@ -1,3 +0,0 @@ -package com.yanfiq.streamfusion.data.response.spotify - -data class Artist(val name: String) diff --git a/app/src/main/java/com/yanfiq/streamfusion/data/response/spotify/Image.kt b/app/src/main/java/com/yanfiq/streamfusion/data/response/spotify/Image.kt deleted file mode 100644 index 07774f9..0000000 --- a/app/src/main/java/com/yanfiq/streamfusion/data/response/spotify/Image.kt +++ /dev/null @@ -1,3 +0,0 @@ -package com.yanfiq.streamfusion.data.response.spotify - -data class Image(val url: String) diff --git a/app/src/main/java/com/yanfiq/streamfusion/data/response/spotify/SpotifyResponse.kt b/app/src/main/java/com/yanfiq/streamfusion/data/response/spotify/SpotifyResponse.kt new file mode 100644 index 0000000..67dff81 --- /dev/null +++ b/app/src/main/java/com/yanfiq/streamfusion/data/response/spotify/SpotifyResponse.kt @@ -0,0 +1,5 @@ +package com.yanfiq.streamfusion.data.response.spotify + +import com.yanfiq.streamfusion.domain.model.spotify.Tracks + +data class SpotifyResponse(val tracks: Tracks) diff --git a/app/src/main/java/com/yanfiq/streamfusion/data/response/spotify/SpotifySearchResponse.kt b/app/src/main/java/com/yanfiq/streamfusion/data/response/spotify/SpotifySearchResponse.kt deleted file mode 100644 index c419a4c..0000000 --- a/app/src/main/java/com/yanfiq/streamfusion/data/response/spotify/SpotifySearchResponse.kt +++ /dev/null @@ -1,3 +0,0 @@ -package com.yanfiq.streamfusion.data.response.spotify - -data class SpotifySearchResponse(val tracks: Tracks) diff --git a/app/src/main/java/com/yanfiq/streamfusion/data/response/spotify/Tracks.kt b/app/src/main/java/com/yanfiq/streamfusion/data/response/spotify/Tracks.kt deleted file mode 100644 index 9c70c76..0000000 --- a/app/src/main/java/com/yanfiq/streamfusion/data/response/spotify/Tracks.kt +++ /dev/null @@ -1,3 +0,0 @@ -package com.yanfiq.streamfusion.data.response.spotify - -data class Tracks(val items: List) diff --git a/app/src/main/java/com/yanfiq/streamfusion/data/response/youtube/Thumbnail.kt b/app/src/main/java/com/yanfiq/streamfusion/data/response/youtube/Thumbnail.kt deleted file mode 100644 index 96b3ce0..0000000 --- a/app/src/main/java/com/yanfiq/streamfusion/data/response/youtube/Thumbnail.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.yanfiq.streamfusion.data.response.youtube - -data class Thumbnail( - val url: String -) \ No newline at end of file diff --git a/app/src/main/java/com/yanfiq/streamfusion/data/response/youtube/VideoContentDetails.kt b/app/src/main/java/com/yanfiq/streamfusion/data/response/youtube/VideoContentDetails.kt deleted file mode 100644 index adfd3b4..0000000 --- a/app/src/main/java/com/yanfiq/streamfusion/data/response/youtube/VideoContentDetails.kt +++ /dev/null @@ -1,3 +0,0 @@ -package com.yanfiq.streamfusion.data.response.youtube - -data class VideoContentDetails(val duration: String) \ No newline at end of file diff --git a/app/src/main/java/com/yanfiq/streamfusion/data/response/youtube/VideoDetailsResponse.kt b/app/src/main/java/com/yanfiq/streamfusion/data/response/youtube/VideoDetailsResponse.kt index 6604045..5bd5489 100644 --- a/app/src/main/java/com/yanfiq/streamfusion/data/response/youtube/VideoDetailsResponse.kt +++ b/app/src/main/java/com/yanfiq/streamfusion/data/response/youtube/VideoDetailsResponse.kt @@ -1,3 +1,5 @@ package com.yanfiq.streamfusion.data.response.youtube +import com.yanfiq.streamfusion.domain.model.youtube.VideoDetailsItem + data class VideoDetailsResponse(val items: List) diff --git a/app/src/main/java/com/yanfiq/streamfusion/data/response/youtube/VideoId.kt b/app/src/main/java/com/yanfiq/streamfusion/data/response/youtube/VideoId.kt deleted file mode 100644 index 45a7bf2..0000000 --- a/app/src/main/java/com/yanfiq/streamfusion/data/response/youtube/VideoId.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.yanfiq.streamfusion.data.response.youtube - -data class VideoId( - val videoId: String -) diff --git a/app/src/main/java/com/yanfiq/streamfusion/data/response/youtube/YoutubeResponse.kt b/app/src/main/java/com/yanfiq/streamfusion/data/response/youtube/YoutubeResponse.kt index 391796b..10dc006 100644 --- a/app/src/main/java/com/yanfiq/streamfusion/data/response/youtube/YoutubeResponse.kt +++ b/app/src/main/java/com/yanfiq/streamfusion/data/response/youtube/YoutubeResponse.kt @@ -1,5 +1,7 @@ package com.yanfiq.streamfusion.data.response.youtube +import com.yanfiq.streamfusion.domain.model.youtube.VideoItem + data class YouTubeResponse( val items: List ) \ No newline at end of file diff --git a/app/src/main/java/com/yanfiq/streamfusion/data/retrofit/audius/AudiusApi.kt b/app/src/main/java/com/yanfiq/streamfusion/data/retrofit/audius/AudiusApi.kt index 0bbf6cb..a840cab 100644 --- a/app/src/main/java/com/yanfiq/streamfusion/data/retrofit/audius/AudiusApi.kt +++ b/app/src/main/java/com/yanfiq/streamfusion/data/retrofit/audius/AudiusApi.kt @@ -2,7 +2,7 @@ package com.yanfiq.streamfusion.data.retrofit.audius import android.util.Log import com.yanfiq.streamfusion.data.response.audius.AudiusResponse -import com.yanfiq.streamfusion.data.response.audius.Track +import com.yanfiq.streamfusion.domain.model.audius.Track import retrofit2.Call import retrofit2.Callback import retrofit2.Response diff --git a/app/src/main/java/com/yanfiq/streamfusion/data/retrofit/audius/AudiusEndpointUtil.kt b/app/src/main/java/com/yanfiq/streamfusion/data/retrofit/audius/AudiusEndpointUtil.kt index 56137c0..e7c5d6d 100644 --- a/app/src/main/java/com/yanfiq/streamfusion/data/retrofit/audius/AudiusEndpointUtil.kt +++ b/app/src/main/java/com/yanfiq/streamfusion/data/retrofit/audius/AudiusEndpointUtil.kt @@ -2,13 +2,10 @@ package com.yanfiq.streamfusion.data.retrofit.audius import android.content.Context import android.util.Log -import androidx.lifecycle.ViewModel -import androidx.lifecycle.viewmodel.compose.viewModel import com.google.gson.Gson import com.google.gson.JsonObject import com.google.gson.reflect.TypeToken -import com.yanfiq.streamfusion.data.response.audius.AudiusResponse -import com.yanfiq.streamfusion.data.response.audius.Track +import com.yanfiq.streamfusion.domain.model.audius.Track import com.yanfiq.streamfusion.data.viewmodel.ApiStatus import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.async @@ -16,9 +13,6 @@ import kotlinx.coroutines.awaitAll import kotlinx.coroutines.withContext import okhttp3.OkHttpClient import okhttp3.Request -import retrofit2.Call -import retrofit2.Callback -import retrofit2.Response import java.io.IOException import java.io.File import java.util.concurrent.TimeUnit diff --git a/app/src/main/java/com/yanfiq/streamfusion/data/retrofit/soundcloud/SoundCloudApiService.kt b/app/src/main/java/com/yanfiq/streamfusion/data/retrofit/soundcloud/SoundCloudApiService.kt index aeb51f3..a93efe7 100644 --- a/app/src/main/java/com/yanfiq/streamfusion/data/retrofit/soundcloud/SoundCloudApiService.kt +++ b/app/src/main/java/com/yanfiq/streamfusion/data/retrofit/soundcloud/SoundCloudApiService.kt @@ -1,6 +1,6 @@ package com.yanfiq.streamfusion.data.retrofit.soundcloud -import com.yanfiq.streamfusion.data.response.soundcloud.Track +import com.yanfiq.streamfusion.domain.model.soundcloud.Track import retrofit2.Call import retrofit2.http.GET import retrofit2.http.Query diff --git a/app/src/main/java/com/yanfiq/streamfusion/data/retrofit/spotify/SpotifyApi.kt b/app/src/main/java/com/yanfiq/streamfusion/data/retrofit/spotify/SpotifyApi.kt index 430861f..59c2ad9 100644 --- a/app/src/main/java/com/yanfiq/streamfusion/data/retrofit/spotify/SpotifyApi.kt +++ b/app/src/main/java/com/yanfiq/streamfusion/data/retrofit/spotify/SpotifyApi.kt @@ -6,20 +6,15 @@ import android.util.Log import androidx.security.crypto.EncryptedSharedPreferences import androidx.security.crypto.MasterKeys import com.google.gson.Gson -import com.yanfiq.streamfusion.BuildConfig import okhttp3.* import retrofit2.Retrofit import retrofit2.converter.gson.GsonConverterFactory import java.io.IOException object SpotifyApi { - private const val PREFS_FILENAME = "encrypted_prefs" - private const val TAG = "SpotifyApi" private var accessToken: String? = null - private lateinit var sharedPreferences: EncryptedSharedPreferences - private val okHttpClient = OkHttpClient.Builder() .addInterceptor { chain -> val original = chain.request() @@ -42,42 +37,11 @@ object SpotifyApi { val service: SpotifyApiService = retrofit.create(SpotifyApiService::class.java) - fun initialize(context: Context) { - val masterKeyAlias = MasterKeys.getOrCreate(MasterKeys.AES256_GCM_SPEC) - sharedPreferences = EncryptedSharedPreferences.create( - PREFS_FILENAME, - masterKeyAlias, - context, - EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV, - EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM - ) as EncryptedSharedPreferences + fun getAccessToken(): String? { + return accessToken } - private fun ensureInitialized(context: Context) { - if (!this::sharedPreferences.isInitialized) { - initialize(context) - } - } - - private fun getClientCredentials(): Pair { - var clientId = sharedPreferences.getString("spotify_client_id", BuildConfig.SpotifyClientId) - var clientSecret = sharedPreferences.getString("spotify_client_secret", BuildConfig.SpotifyClientSecret) - if (clientId == "") clientId = BuildConfig.SpotifyClientId - if (clientSecret == "") clientSecret = BuildConfig.SpotifyClientSecret - Log.d(TAG, "Client ID: $clientId, Client Secret: $clientSecret") - return Pair(clientId, clientSecret) - } - - fun fetchAccessToken(context: Context, callback: (Boolean) -> Unit) { - ensureInitialized(context) - - val (clientId, clientSecret) = getClientCredentials() - if (clientId == null || clientSecret == null) { - Log.e(TAG, "Client ID or Client Secret is null") - callback(false) - return - } - + fun fetchAccessToken(context: Context, clientId: String, clientSecret: String, callback: (Boolean) -> Unit) { val authString = "$clientId:$clientSecret" val encodedAuthString = Base64.encodeToString(authString.toByteArray(), Base64.NO_WRAP) @@ -95,12 +59,12 @@ object SpotifyApi { override fun onResponse(call: Call, response: Response) { response.use { if (!response.isSuccessful) { - Log.e(TAG, "Failed to fetch access token: ${response.message}") + Log.e("SpotifyApi", "Failed to fetch access token: ${response.message}") callback(false) return } val responseBody = response.body?.string() - Log.d(TAG, "Access Token Response: $responseBody") + Log.d("SpotifyApi", "Access Token Response: $responseBody") val accessTokenResponse = Gson().fromJson(responseBody, SpotifyAuthResponse::class.java) accessToken = accessTokenResponse.access_token callback(true) @@ -108,7 +72,7 @@ object SpotifyApi { } override fun onFailure(call: Call, e: IOException) { - Log.e(TAG, "Error fetching access token", e) + Log.e("SpotifyApi", "Error fetching access token", e) callback(false) } }) diff --git a/app/src/main/java/com/yanfiq/streamfusion/data/retrofit/spotify/SpotifyApiService.kt b/app/src/main/java/com/yanfiq/streamfusion/data/retrofit/spotify/SpotifyApiService.kt index b0b3517..33fecfc 100644 --- a/app/src/main/java/com/yanfiq/streamfusion/data/retrofit/spotify/SpotifyApiService.kt +++ b/app/src/main/java/com/yanfiq/streamfusion/data/retrofit/spotify/SpotifyApiService.kt @@ -1,6 +1,6 @@ package com.yanfiq.streamfusion.data.retrofit.spotify -import com.yanfiq.streamfusion.data.response.spotify.SpotifySearchResponse +import com.yanfiq.streamfusion.data.response.spotify.SpotifyResponse import retrofit2.Call import retrofit2.http.GET import retrofit2.http.Query @@ -11,5 +11,5 @@ interface SpotifyApiService { @Query("q") query: String, @Query("type") type: String, @Query("limit") limit: Int = 10 - ): Call + ): Call } diff --git a/app/src/main/java/com/yanfiq/streamfusion/data/retrofit/spotify/SpotifyUtils.kt b/app/src/main/java/com/yanfiq/streamfusion/data/retrofit/spotify/SpotifyUtils.kt deleted file mode 100644 index ac1be89..0000000 --- a/app/src/main/java/com/yanfiq/streamfusion/data/retrofit/spotify/SpotifyUtils.kt +++ /dev/null @@ -1,46 +0,0 @@ -package com.yanfiq.youcloudify.data.response.spotify - -import android.util.Base64 -import com.google.gson.Gson -import com.yanfiq.streamfusion.data.retrofit.spotify.SpotifyAuthResponse -import okhttp3.Call -import okhttp3.FormBody -import okhttp3.OkHttpClient -import okhttp3.Request -import okhttp3.Response -import java.io.IOException - -fun getSpotifyAccessToken(clientId: String, clientSecret: String, callback: (String?) -> Unit) { - val authString = "$clientId:$clientSecret" - val encodedAuthString = Base64.encodeToString(authString.toByteArray(), Base64.NO_WRAP) - - val requestBody = FormBody.Builder() - .add("grant_type", "client_credentials") - .build() - - val request = Request.Builder() - .url("https://accounts.spotify.com/api/token") - .post(requestBody) - .addHeader("Authorization", "Basic $encodedAuthString") - .build() - - OkHttpClient().newCall(request).enqueue(object : okhttp3.Callback { - override fun onResponse(call: Call, response: Response) { - response.use { - if (!response.isSuccessful) { - callback(null) - return - } - val responseBody = response.body?.string() - val accessToken = Gson().fromJson(responseBody, SpotifyAuthResponse::class.java).access_token - callback(accessToken) - } - } - - override fun onFailure(call: Call, e: IOException) { - callback(null) - } - }) -} - - diff --git a/app/src/main/java/com/yanfiq/streamfusion/data/retrofit/youtube/YoutubeApi.kt b/app/src/main/java/com/yanfiq/streamfusion/data/retrofit/youtube/YoutubeApi.kt index 00a43f4..5d0e65a 100644 --- a/app/src/main/java/com/yanfiq/streamfusion/data/retrofit/youtube/YoutubeApi.kt +++ b/app/src/main/java/com/yanfiq/streamfusion/data/retrofit/youtube/YoutubeApi.kt @@ -1,16 +1,6 @@ package com.yanfiq.streamfusion.data.retrofit.youtube import android.content.Context -import android.util.Log -import androidx.compose.runtime.collectAsState -import androidx.compose.runtime.getValue -import androidx.compose.ui.platform.LocalContext -import androidx.security.crypto.EncryptedSharedPreferences -import androidx.security.crypto.MasterKey -import com.yanfiq.streamfusion.BuildConfig -import com.yanfiq.streamfusion.dataStore -import com.yanfiq.streamfusion.screens.PreferencesKeys -import kotlinx.coroutines.flow.map import retrofit2.converter.gson.GsonConverterFactory import retrofit2.Retrofit import okhttp3.OkHttpClient diff --git a/app/src/main/java/com/yanfiq/streamfusion/data/viewmodel/SearchResult.kt b/app/src/main/java/com/yanfiq/streamfusion/data/viewmodel/SearchResult.kt index 1869036..a149004 100644 --- a/app/src/main/java/com/yanfiq/streamfusion/data/viewmodel/SearchResult.kt +++ b/app/src/main/java/com/yanfiq/streamfusion/data/viewmodel/SearchResult.kt @@ -3,25 +3,33 @@ package com.yanfiq.streamfusion.data.viewmodel import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel +import com.yanfiq.streamfusion.domain.model.audius.Track +import com.yanfiq.streamfusion.domain.model.youtube.Video class SearchResult : ViewModel() { - private val _soundcloudSearchData = MutableLiveData>() - private val _audiusSearchData = MutableLiveData>() - private val _youtubeSearchData = MutableLiveData>() + private val _audiusSearchData = MutableLiveData>() + private val _soundcloudSearchData = MutableLiveData>() + private val _spotifySearchData = MutableLiveData>() + private val _youtubeSearchData = MutableLiveData>() - val soundcloudSearchData: LiveData> get() = _soundcloudSearchData - val audiusSearchData: LiveData> get() = _audiusSearchData - val youtubeSearchData: LiveData> get() = _youtubeSearchData + val audiusSearchData: LiveData> get() = _audiusSearchData + val soundcloudSearchData: LiveData> get() = _soundcloudSearchData + val spotifySearchData: LiveData> get() = _spotifySearchData + val youtubeSearchData: LiveData> get() = _youtubeSearchData - fun updateSoundcloudSearchData(newData: List) { + fun updateAudiusSearchData(newData: List) { + _audiusSearchData.postValue(newData) + } + + fun updateSoundcloudSearchData(newData: List) { _soundcloudSearchData.postValue(newData) } - fun updateAudiusSearchData(newData: List) { - _audiusSearchData.postValue(newData) + fun updateSpotifySearchData(newData: List){ + _spotifySearchData.postValue(newData) } - fun updateYoutubeSearchData(newData: List){ + fun updateYoutubeSearchData(newData: List