diff options
author | Michael Bestas <mkbestas@lineageos.org> | 2018-01-22 21:02:42 +0200 |
---|---|---|
committer | Michael Bestas <mkbestas@lineageos.org> | 2018-01-23 19:35:52 +0200 |
commit | a907407e035b52e8dcdd4ac3ae48b533c7942d5a (patch) | |
tree | ef031b8478effd2fd828495832260359486950f4 /src/org/lineageos/eleven/ui/fragments/ArtistDetailFragment.java | |
parent | da200d369e4e43f2587273e9dd7af9c91048cf68 (diff) | |
download | android_packages_apps_Eleven-a907407e035b52e8dcdd4ac3ae48b533c7942d5a.tar.gz android_packages_apps_Eleven-a907407e035b52e8dcdd4ac3ae48b533c7942d5a.tar.bz2 android_packages_apps_Eleven-a907407e035b52e8dcdd4ac3ae48b533c7942d5a.zip |
Eleven: rebrand step 1: update paths
Change-Id: Iab35e4024e20c48e7439e78d1c6efe0ef4f730ca
Diffstat (limited to 'src/org/lineageos/eleven/ui/fragments/ArtistDetailFragment.java')
-rw-r--r-- | src/org/lineageos/eleven/ui/fragments/ArtistDetailFragment.java | 252 |
1 files changed, 252 insertions, 0 deletions
diff --git a/src/org/lineageos/eleven/ui/fragments/ArtistDetailFragment.java b/src/org/lineageos/eleven/ui/fragments/ArtistDetailFragment.java new file mode 100644 index 0000000..21bd556 --- /dev/null +++ b/src/org/lineageos/eleven/ui/fragments/ArtistDetailFragment.java @@ -0,0 +1,252 @@ +/* +* Copyright (C) 2014 The CyanogenMod Project +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ +package com.cyanogenmod.eleven.ui.fragments; + +import android.os.Build; +import android.os.Bundle; +import android.support.v4.app.LoaderManager; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.ViewTreeObserver; +import android.widget.ImageView; +import android.widget.ListView; +import com.cyanogenmod.eleven.Config; +import com.cyanogenmod.eleven.R; +import com.cyanogenmod.eleven.adapters.ArtistDetailAlbumAdapter; +import com.cyanogenmod.eleven.adapters.ArtistDetailSongAdapter; +import com.cyanogenmod.eleven.adapters.PagerAdapter; +import com.cyanogenmod.eleven.cache.ImageFetcher; +import com.cyanogenmod.eleven.menu.FragmentMenuItems; +import com.cyanogenmod.eleven.model.Album; +import com.cyanogenmod.eleven.model.Artist; +import com.cyanogenmod.eleven.model.Song; +import com.cyanogenmod.eleven.utils.AlbumPopupMenuHelper; +import com.cyanogenmod.eleven.utils.ArtistPopupMenuHelper; +import com.cyanogenmod.eleven.utils.MusicUtils; +import com.cyanogenmod.eleven.utils.PopupMenuHelper; +import com.cyanogenmod.eleven.utils.SongPopupMenuHelper; +import com.cyanogenmod.eleven.widgets.IPopupMenuCallback; +import com.cyanogenmod.eleven.widgets.LoadingEmptyContainer; + +import java.util.TreeSet; + +public class ArtistDetailFragment extends FadingBarFragment implements IChildFragment { + private final int ALBUM_LOADER_ID = 0; + private final int SONG_LOADER_ID = 1; + + private long mArtistId; + private String mArtistName; + + private ImageView mHero; + private View mHeader; + + private ListView mSongs; + private ArtistDetailSongAdapter mSongAdapter; + + private RecyclerView mAlbums; + private ArtistDetailAlbumAdapter mAlbumAdapter; + + private PopupMenuHelper mSongPopupMenuHelper; + private PopupMenuHelper mAlbumPopupMenuHelper; + + private LoadingEmptyContainer mLoadingEmptyContainer; + + @Override + protected int getLayoutToInflate() { return R.layout.activity_artist_detail; } + + @Override + protected String getTitle() { + return getArguments().getString(Config.ARTIST_NAME); + } + + protected long getArtistId() { + return getArguments().getLong(Config.ID); + } + + @Override + protected void onViewCreated() { + super.onViewCreated(); + + getContainingActivity().setFragmentPadding(false); + + Bundle arguments = getArguments(); + mArtistName = arguments.getString(Config.ARTIST_NAME); + mArtistId = arguments.getLong(Config.ID); + + setupPopupMenuHelpers(); + setupSongList(); + setupAlbumList(); + setupHero(mArtistName); + + LoaderManager lm = getLoaderManager(); + lm.initLoader(ALBUM_LOADER_ID, arguments, mAlbumAdapter); + lm.initLoader(SONG_LOADER_ID, arguments, mSongAdapter); + } + + @Override // DetailFragment + protected PopupMenuHelper createActionMenuHelper() { + return new ArtistPopupMenuHelper(getActivity(), getChildFragmentManager()) { + public Artist getArtist(int position) { + return new Artist(mArtistId, mArtistName, 0, 0); + } + }; + } + + @Override // DetailFragment + protected int getShuffleTitleId() { return R.string.menu_shuffle_artist; } + + @Override // DetailFragment + protected void playShuffled() { + MusicUtils.playArtist(getActivity(), mArtistId, -1, true); + } + + private void setupHero(String artistName) { + mHero = (ImageView)mHeader.findViewById(R.id.hero); + mHero.setContentDescription(artistName); + // initiate loading the artist image + // since the artist image needs to be scaled to the image view bounds, we need to wait till the first layout + // traversal to be able to get the image view dimensions in the helper method that scales the image + mHero.getViewTreeObserver().addOnGlobalLayoutListener( new ViewTreeObserver.OnGlobalLayoutListener() { + @Override + public void onGlobalLayout() { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { + mHero.getViewTreeObserver().removeOnGlobalLayoutListener(this); + } else { + mHero.getViewTreeObserver().removeGlobalOnLayoutListener(this); + } + ImageFetcher.getInstance(getActivity()).loadArtistImage(mArtistName, mHero, true); + } + }); + } + + private void setupAlbumList() { + mAlbums = (RecyclerView) mHeader.findViewById(R.id.albums); + mAlbums.setHasFixedSize(true); + mAlbums.setLayoutManager(new LinearLayoutManager(getActivity(), LinearLayoutManager.HORIZONTAL, false)); + mAlbumAdapter = new ArtistDetailAlbumAdapter(getActivity()); + mAlbumAdapter.setPopupMenuClickedListener(new IPopupMenuCallback.IListener() { + @Override + public void onPopupMenuClicked(View v, int position) { + mAlbumPopupMenuHelper.showPopupMenu(v, position); + } + }); + mAlbums.setAdapter(mAlbumAdapter); + } + + private void setupSongList() { + mSongs = (ListView)mRootView.findViewById(R.id.songs); + mHeader = LayoutInflater.from(getActivity()). + inflate(R.layout.artist_detail_header, mSongs, false); + mSongs.addHeaderView(mHeader); + mSongs.setOnScrollListener(this); + mSongAdapter = new ArtistDetailSongAdapter(getActivity()) { + @Override + protected void onLoading() { + mLoadingEmptyContainer.showLoading(); + } + + @Override + protected void onNoResults() { + // no results - because the user deleted the last item - pop our fragment + // from the stack + getContainingActivity().postRemoveFragment(ArtistDetailFragment.this); + } + }; + mSongAdapter.setPopupMenuClickedListener(new IPopupMenuCallback.IListener() { + @Override + public void onPopupMenuClicked(View v, int position) { + mSongPopupMenuHelper.showPopupMenu(v, position); + } + }); + mSongs.setAdapter(mSongAdapter); + mSongs.setOnItemClickListener(mSongAdapter); + mLoadingEmptyContainer = + (LoadingEmptyContainer)mRootView.findViewById(R.id.loading_empty_container); + mSongs.setEmptyView(mLoadingEmptyContainer); + } + + private void setupPopupMenuHelpers() { + mSongPopupMenuHelper = new SongPopupMenuHelper(getActivity(), getChildFragmentManager()) { + @Override + public Song getSong(int position) { + return mSongAdapter.getItem(position); + } + + @Override + protected long getSourceId() { + return getArtistId(); + } + + @Override + protected Config.IdType getSourceType() { + return Config.IdType.Artist; + } + + @Override + protected void updateMenuIds(PopupMenuType type, TreeSet<Integer> set) { + super.updateMenuIds(type, set); + + // since we are already on the artist page, this item doesn't make sense + set.remove(FragmentMenuItems.MORE_BY_ARTIST); + } + }; + + mAlbumPopupMenuHelper = new AlbumPopupMenuHelper(getActivity(), getChildFragmentManager()) { + @Override + public Album getAlbum(int position) { + return mAlbumAdapter.getItem(position); + } + + @Override + protected void updateMenuIds(PopupMenuType type, TreeSet<Integer> set) { + super.updateMenuIds(type, set); + + // since we are already on the artist page, this item doesn't make sense + set.remove(FragmentMenuItems.MORE_BY_ARTIST); + } + }; + } + + // TODO: change this class to use the same header strategy as PlaylistDetail + protected int getHeaderHeight() { return mHero.getHeight(); } + + protected void setHeaderPosition(float y) { } + + @Override + public void restartLoader() { + Bundle arguments = getArguments(); + LoaderManager lm = getLoaderManager(); + lm.restartLoader(ALBUM_LOADER_ID, arguments, mAlbumAdapter); + lm.restartLoader(SONG_LOADER_ID, arguments, mSongAdapter); + + ImageFetcher.getInstance(getActivity()).loadArtistImage(mArtistName, mHero, true); + } + + @Override + public void onMetaChanged() { + super.onMetaChanged(); + + mSongAdapter.setCurrentlyPlayingTrack(MusicUtils.getCurrentTrack()); + } + + @Override + public PagerAdapter.MusicFragments getMusicFragmentParent() { + return PagerAdapter.MusicFragments.ARTIST; + } +} |