From 98b2b31e205f38bcbfbe92cef1dc8aae61655b51 Mon Sep 17 00:00:00 2001 From: Antoine POPINEAU Date: Sat, 30 May 2020 14:12:04 +0200 Subject: [PATCH] Open artists and albums in search results. --- .../apognu/otter/activities/SearchActivity.kt | 16 +- .../otter/adapters/PlaylistTracksAdapter.kt | 2 +- .../apognu/otter/adapters/SearchAdapter.kt | 19 ++- .../apognu/otter/fragments/AlbumsFragment.kt | 3 + .../apognu/otter/fragments/ArtistsFragment.kt | 3 + .../main/res/layout-land/fragment_tracks.xml | 1 + app/src/main/res/layout/activity_search.xml | 144 ++++++++++-------- app/src/main/res/layout/fragment_tracks.xml | 3 + 8 files changed, 125 insertions(+), 66 deletions(-) diff --git a/app/src/main/java/com/github/apognu/otter/activities/SearchActivity.kt b/app/src/main/java/com/github/apognu/otter/activities/SearchActivity.kt index 391368a..02cea9f 100644 --- a/app/src/main/java/com/github/apognu/otter/activities/SearchActivity.kt +++ b/app/src/main/java/com/github/apognu/otter/activities/SearchActivity.kt @@ -6,7 +6,11 @@ import androidx.appcompat.app.AppCompatActivity import androidx.recyclerview.widget.LinearLayoutManager import com.github.apognu.otter.R import com.github.apognu.otter.adapters.SearchAdapter +import com.github.apognu.otter.fragments.AlbumsFragment +import com.github.apognu.otter.fragments.ArtistsFragment import com.github.apognu.otter.repositories.* +import com.github.apognu.otter.utils.Album +import com.github.apognu.otter.utils.Artist import com.github.apognu.otter.utils.untilNetwork import kotlinx.android.synthetic.main.activity_search.* import java.net.URLEncoder @@ -26,7 +30,7 @@ class SearchActivity : AppCompatActivity() { setContentView(R.layout.activity_search) - adapter = SearchAdapter(this, FavoriteListener()).also { + adapter = SearchAdapter(this, SearchResultClickListener(), FavoriteListener()).also { results.layoutManager = LinearLayoutManager(this) results.adapter = it } @@ -95,6 +99,16 @@ class SearchActivity : AppCompatActivity() { }) } + inner class SearchResultClickListener : SearchAdapter.OnSearchResultClickListener { + override fun onArtistClick(holder: View?, artist: Artist) { + ArtistsFragment.openAlbums(this@SearchActivity, artist) + } + + override fun onAlbumClick(holder: View?, album: Album) { + AlbumsFragment.openTracks(this@SearchActivity, album) + } + } + inner class FavoriteListener : SearchAdapter.OnFavoriteListener { override fun onToggleFavorite(id: Int, state: Boolean) { when (state) { diff --git a/app/src/main/java/com/github/apognu/otter/adapters/PlaylistTracksAdapter.kt b/app/src/main/java/com/github/apognu/otter/adapters/PlaylistTracksAdapter.kt index 9a08de6..ab8555f 100644 --- a/app/src/main/java/com/github/apognu/otter/adapters/PlaylistTracksAdapter.kt +++ b/app/src/main/java/com/github/apognu/otter/adapters/PlaylistTracksAdapter.kt @@ -145,7 +145,7 @@ class PlaylistTracksAdapter(private val context: Context?, private val favoriteL CommandBus.send(Command.MoveFromQueue(oldPosition, newPosition)) } - inner class ViewHolder(view: View, val context: Context?) : RecyclerView.ViewHolder(view), View.OnClickListener { + inner class ViewHolder(view: View, val context: Context?) : RecyclerView.ViewHolder(view), View.OnClickListener { val handle = view.handle val cover = view.cover val title = view.title diff --git a/app/src/main/java/com/github/apognu/otter/adapters/SearchAdapter.kt b/app/src/main/java/com/github/apognu/otter/adapters/SearchAdapter.kt index 7173754..dc8f62d 100644 --- a/app/src/main/java/com/github/apognu/otter/adapters/SearchAdapter.kt +++ b/app/src/main/java/com/github/apognu/otter/adapters/SearchAdapter.kt @@ -16,7 +16,12 @@ import com.squareup.picasso.Picasso import jp.wasabeef.picasso.transformations.RoundedCornersTransformation import kotlinx.android.synthetic.main.row_track.view.* -class SearchAdapter(private val context: Context?, private val favoriteListener: OnFavoriteListener? = null) : RecyclerView.Adapter() { +class SearchAdapter(private val context: Context?, private val listener: OnSearchResultClickListener? = null, private val favoriteListener: OnFavoriteListener? = null) : RecyclerView.Adapter() { + interface OnSearchResultClickListener { + fun onArtistClick(holder: View?, artist: Artist) + fun onAlbumClick(holder: View?, album: Album) + } + interface OnFavoriteListener { fun onToggleFavorite(id: Int, state: Boolean) } @@ -188,6 +193,18 @@ class SearchAdapter(private val context: Context?, private val favoriteListener: override fun onClick(view: View?) { when (getItemViewType(layoutPosition)) { + ResultType.Artist.ordinal -> { + val position = layoutPosition - 1 + + listener?.onArtistClick(view, artists[position]) + } + + ResultType.Album.ordinal -> { + val position = layoutPosition - artists.size - 2 + + listener?.onAlbumClick(view, albums[position]) + } + ResultType.Track.ordinal -> { val position = layoutPosition - artists.size - albums.size - SECTION_COUNT diff --git a/app/src/main/java/com/github/apognu/otter/fragments/AlbumsFragment.kt b/app/src/main/java/com/github/apognu/otter/fragments/AlbumsFragment.kt index 107a719..dd48c1c 100644 --- a/app/src/main/java/com/github/apognu/otter/fragments/AlbumsFragment.kt +++ b/app/src/main/java/com/github/apognu/otter/fragments/AlbumsFragment.kt @@ -7,6 +7,7 @@ import android.util.DisplayMetrics import android.view.Gravity import android.view.View import android.view.animation.AccelerateDecelerateInterpolator +import androidx.appcompat.app.AppCompatActivity import androidx.core.graphics.drawable.toDrawable import androidx.core.os.bundleOf import androidx.fragment.app.Fragment @@ -60,7 +61,9 @@ class AlbumsFragment : FunkwhaleFragment() { } } } + } + (context as? AppCompatActivity)?.let { activity -> val fragment = TracksFragment.new(album).apply { enterTransition = Slide().apply { duration = AppContext.TRANSITION_DURATION diff --git a/app/src/main/java/com/github/apognu/otter/fragments/ArtistsFragment.kt b/app/src/main/java/com/github/apognu/otter/fragments/ArtistsFragment.kt index 02383ae..7c81e13 100644 --- a/app/src/main/java/com/github/apognu/otter/fragments/ArtistsFragment.kt +++ b/app/src/main/java/com/github/apognu/otter/fragments/ArtistsFragment.kt @@ -4,6 +4,7 @@ import android.content.Context import android.os.Bundle import android.view.View import android.view.animation.AccelerateDecelerateInterpolator +import androidx.appcompat.app.AppCompatActivity import androidx.fragment.app.Fragment import androidx.recyclerview.widget.RecyclerView import androidx.transition.Fade @@ -36,7 +37,9 @@ class ArtistsFragment : FunkwhaleFragment() { } } } + } + (context as? AppCompatActivity)?.let { activity -> val fragment = AlbumsFragment.new(artist, art).apply { enterTransition = Slide().apply { duration = AppContext.TRANSITION_DURATION diff --git a/app/src/main/res/layout-land/fragment_tracks.xml b/app/src/main/res/layout-land/fragment_tracks.xml index 70590de..aa00f79 100644 --- a/app/src/main/res/layout-land/fragment_tracks.xml +++ b/app/src/main/res/layout-land/fragment_tracks.xml @@ -6,6 +6,7 @@ style="@style/AppTheme.Fragment" android:layout_width="match_parent" android:layout_height="match_parent" + android:background="?attr/colorSurface" android:transitionGroup="true"> - + android:layout_height="match_parent"> - - - - - - - - - - - - - + android:orientation="vertical" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintLeft_toLeftOf="parent" + app:layout_constraintRight_toRightOf="parent" + app:layout_constraintTop_toTopOf="parent" + tools:context=".activities.SearchActivity"> - \ No newline at end of file + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_tracks.xml b/app/src/main/res/layout/fragment_tracks.xml index 8b2af74..9efb91e 100644 --- a/app/src/main/res/layout/fragment_tracks.xml +++ b/app/src/main/res/layout/fragment_tracks.xml @@ -6,6 +6,9 @@ style="@style/AppTheme.Fragment" android:layout_width="match_parent" android:layout_height="match_parent" + android:background="?attr/colorSurface" + android:clipChildren="false" + android:clipToPadding="false" android:transitionGroup="true">