OSDN Git Service

871d82b12ac447e1042975c41468122d0a35a295
[android-x86/packages-apps-Eleven.git] / src / com / cyngn / eleven / ui / fragments / phone / MusicBrowserPhoneFragment.java
1 /*
2  * Copyright (C) 2012 Andrew Neal Licensed under the Apache License, Version 2.0
3  * (the "License"); you may not use this file except in compliance with the
4  * License. You may obtain a copy of the License at
5  * http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law
6  * or agreed to in writing, software distributed under the License is
7  * distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
8  * KIND, either express or implied. See the License for the specific language
9  * governing permissions and limitations under the License.
10  */
11
12 package com.cyngn.eleven.ui.fragments.phone;
13
14 import android.os.Bundle;
15 import android.support.v4.app.Fragment;
16 import android.support.v4.view.ViewPager;
17 import android.view.Menu;
18 import android.view.MenuInflater;
19 import android.view.MenuItem;
20
21 import com.cyngn.eleven.R;
22 import com.cyngn.eleven.adapters.PagerAdapter;
23 import com.cyngn.eleven.adapters.PagerAdapter.MusicFragments;
24 import com.cyngn.eleven.menu.CreateNewPlaylist;
25 import com.cyngn.eleven.ui.fragments.AlbumFragment;
26 import com.cyngn.eleven.ui.fragments.ArtistFragment;
27 import com.cyngn.eleven.ui.fragments.BaseFragment;
28 import com.cyngn.eleven.ui.fragments.SongFragment;
29 import com.cyngn.eleven.utils.MusicUtils;
30 import com.cyngn.eleven.utils.PreferenceUtils;
31 import com.cyngn.eleven.utils.SortOrder;
32 import com.viewpagerindicator.TabPageIndicator;
33
34 /**
35  * This class is used to hold the {@link ViewPager} used for swiping between the
36  * playlists, recent, artists, albums, songs, and genre {@link Fragment}
37  * s for phones.
38  * 
39  * @NOTE: The reason the sort orders are taken care of in this fragment rather
40  *        than the individual fragments is to keep from showing all of the menu
41  *        items on tablet interfaces. That being said, I have a tablet interface
42  *        worked out, but I'm going to keep it in the Play Store version of
43  *        Apollo for a couple of weeks or so before merging it with CM.
44  * @author Andrew Neal (andrewdneal@gmail.com)
45  */
46 public class MusicBrowserPhoneFragment extends BaseFragment {
47
48     /**
49      * Pager
50      */
51     private ViewPager mViewPager;
52
53     /**
54      * VP's adapter
55      */
56     private PagerAdapter mPagerAdapter;
57
58     private PreferenceUtils mPreferences;
59
60     /**
61      * Empty constructor as per the {@link Fragment} documentation
62      */
63     public MusicBrowserPhoneFragment() {
64     }
65
66     @Override
67     protected int getLayoutToInflate() {
68         return R.layout.fragment_music_browser_phone;
69     }
70
71     @Override
72     protected String getTitle() {
73         return getString(R.string.app_name);
74     }
75
76     /**
77      * {@inheritDoc}
78      */
79     @Override
80     public void onCreate(final Bundle savedInstanceState) {
81         super.onCreate(savedInstanceState);
82         // Get the preferences
83         mPreferences = PreferenceUtils.getInstance(getActivity());
84     }
85
86     @Override
87     protected void onViewCreated() {
88         super.onViewCreated();
89
90         if (mPagerAdapter == null) {
91             // Initialize the adapter
92             mPagerAdapter = new PagerAdapter(getActivity(), getChildFragmentManager());
93             final MusicFragments[] mFragments = MusicFragments.values();
94             for (final MusicFragments mFragment : mFragments) {
95                 mPagerAdapter.add(mFragment.getFragmentClass(), null);
96             }
97         }
98
99         // Initialize the ViewPager
100         mViewPager = (ViewPager)mRootView.findViewById(R.id.fragment_home_phone_pager);
101         // Attch the adapter
102         mViewPager.setAdapter(mPagerAdapter);
103         // Offscreen pager loading limit
104         mViewPager.setOffscreenPageLimit(mPagerAdapter.getCount() - 1);
105         // Start on the last page the user was on
106         mViewPager.setCurrentItem(mPreferences.getStartPage());
107
108         // Initialze the TPI
109         final TabPageIndicator pageIndicator = (TabPageIndicator)mRootView
110                 .findViewById(R.id.fragment_home_phone_pager_titles);
111         // Attach the ViewPager
112         pageIndicator.setViewPager(mViewPager);
113     }
114
115     /**
116      * {@inheritDoc}
117      */
118     @Override
119     public void onActivityCreated(final Bundle savedInstanceState) {
120         super.onActivityCreated(savedInstanceState);
121         // Enable the options menu
122         setHasOptionsMenu(true);
123     }
124
125     /**
126      * {@inheritDoc}
127      */
128     @Override
129     public void onPause() {
130         super.onPause();
131         // Save the last page the use was on
132         mPreferences.setStartPage(mViewPager.getCurrentItem());
133     }
134
135     /**
136      * {@inheritDoc}
137      */
138     @Override
139     public void onPrepareOptionsMenu(final Menu menu) {
140         super.onPrepareOptionsMenu(menu);
141     }
142
143     /**
144      * {@inheritDoc}
145      */
146     @Override
147     public void onCreateOptionsMenu(final Menu menu, final MenuInflater inflater) {
148         super.onCreateOptionsMenu(menu, inflater);
149
150         inflater.inflate(R.menu.shuffle_all, menu); // Shuffle all
151         if (isArtistPage()) {
152             inflater.inflate(R.menu.artist_sort_by, menu);
153         } else if (isAlbumPage()) {
154             inflater.inflate(R.menu.album_sort_by, menu);
155         } else if (isSongPage()) {
156             inflater.inflate(R.menu.song_sort_by, menu);
157         } else if (isPlaylistPage()) {
158             inflater.inflate(R.menu.new_playlist, menu);
159         }
160     }
161
162     /**
163      * {@inheritDoc}
164      */
165     @Override
166     public boolean onOptionsItemSelected(final MenuItem item) {
167         switch (item.getItemId()) {
168             case R.id.menu_shuffle_all:
169                 // Shuffle all the songs
170                 MusicUtils.shuffleAll(getActivity());
171                 return true;
172             case R.id.menu_sort_by_az:
173                 if (isArtistPage()) {
174                     mPreferences.setArtistSortOrder(SortOrder.ArtistSortOrder.ARTIST_A_Z);
175                     getArtistFragment().refresh();
176                 } else if (isAlbumPage()) {
177                     mPreferences.setAlbumSortOrder(SortOrder.AlbumSortOrder.ALBUM_A_Z);
178                     getAlbumFragment().refresh();
179                 } else if (isSongPage()) {
180                     mPreferences.setSongSortOrder(SortOrder.SongSortOrder.SONG_A_Z);
181                     getSongFragment().refresh();
182                 }
183                 return true;
184             case R.id.menu_sort_by_za:
185                 if (isArtistPage()) {
186                     mPreferences.setArtistSortOrder(SortOrder.ArtistSortOrder.ARTIST_Z_A);
187                     getArtistFragment().refresh();
188                 } else if (isAlbumPage()) {
189                     mPreferences.setAlbumSortOrder(SortOrder.AlbumSortOrder.ALBUM_Z_A);
190                     getAlbumFragment().refresh();
191                 } else if (isSongPage()) {
192                     mPreferences.setSongSortOrder(SortOrder.SongSortOrder.SONG_Z_A);
193                     getSongFragment().refresh();
194                 }
195                 return true;
196             case R.id.menu_sort_by_artist:
197                 if (isAlbumPage()) {
198                     mPreferences.setAlbumSortOrder(SortOrder.AlbumSortOrder.ALBUM_ARTIST);
199                     getAlbumFragment().refresh();
200                 } else if (isSongPage()) {
201                     mPreferences.setSongSortOrder(SortOrder.SongSortOrder.SONG_ARTIST);
202                     getSongFragment().refresh();
203                 }
204                 return true;
205             case R.id.menu_sort_by_album:
206                 if (isSongPage()) {
207                     mPreferences.setSongSortOrder(SortOrder.SongSortOrder.SONG_ALBUM);
208                     getSongFragment().refresh();
209                 }
210                 return true;
211             case R.id.menu_sort_by_year:
212                 if (isAlbumPage()) {
213                     mPreferences.setAlbumSortOrder(SortOrder.AlbumSortOrder.ALBUM_YEAR);
214                     getAlbumFragment().refresh();
215                 } else if (isSongPage()) {
216                     mPreferences.setSongSortOrder(SortOrder.SongSortOrder.SONG_YEAR);
217                     getSongFragment().refresh();
218                 }
219                 return true;
220             case R.id.menu_sort_by_duration:
221                 if (isSongPage()) {
222                     mPreferences.setSongSortOrder(SortOrder.SongSortOrder.SONG_DURATION);
223                     getSongFragment().refresh();
224                 }
225                 return true;
226             case R.id.menu_sort_by_number_of_songs:
227                 if (isArtistPage()) {
228                     mPreferences
229                             .setArtistSortOrder(SortOrder.ArtistSortOrder.ARTIST_NUMBER_OF_SONGS);
230                     getArtistFragment().refresh();
231                 } else if (isAlbumPage()) {
232                     mPreferences.setAlbumSortOrder(SortOrder.AlbumSortOrder.ALBUM_NUMBER_OF_SONGS);
233                     getAlbumFragment().refresh();
234                 }
235                 return true;
236             case R.id.menu_sort_by_number_of_albums:
237                 if (isArtistPage()) {
238                     mPreferences
239                             .setArtistSortOrder(SortOrder.ArtistSortOrder.ARTIST_NUMBER_OF_ALBUMS);
240                     getArtistFragment().refresh();
241                 }
242                 return true;
243             case R.id.menu_sort_by_filename:
244                 if(isSongPage()) {
245                     mPreferences.setSongSortOrder(SortOrder.SongSortOrder.SONG_FILENAME);
246                     getSongFragment().refresh();
247                 }
248                 return true;
249             case R.id.menu_new_playlist:
250                 if(isPlaylistPage()) {
251                     CreateNewPlaylist.getInstance(new long[0]).show(getFragmentManager(), "CreatePlaylist");
252                 }
253                 return true;
254             default:
255                 break;
256         }
257         return super.onOptionsItemSelected(item);
258     }
259
260     private boolean isArtistPage() {
261         return mViewPager.getCurrentItem() == MusicFragments.ARTIST.ordinal();
262     }
263
264     public ArtistFragment getArtistFragment() {
265         return (ArtistFragment)mPagerAdapter.getFragment(MusicFragments.ARTIST.ordinal());
266     }
267
268     private boolean isAlbumPage() {
269         return mViewPager.getCurrentItem() == MusicFragments.ALBUM.ordinal();
270     }
271
272     public AlbumFragment getAlbumFragment() {
273         return (AlbumFragment)mPagerAdapter.getFragment(MusicFragments.ALBUM.ordinal());
274     }
275
276     private boolean isSongPage() {
277         return mViewPager.getCurrentItem() == MusicFragments.SONG.ordinal();
278     }
279
280     public SongFragment getSongFragment() {
281         return (SongFragment)mPagerAdapter.getFragment(MusicFragments.SONG.ordinal());
282     }
283
284     @Override
285     public void restartLoader() {
286         // do nothing
287     }
288
289     private boolean isPlaylistPage() {
290         return mViewPager.getCurrentItem() == MusicFragments.PLAYLIST.ordinal();
291     }
292 }