OSDN Git Service

Eleven: Fix regression where blur meta info was not updating
[android-x86/packages-apps-Eleven.git] / src / com / cyngn / eleven / ui / activities / AlbumDetailActivity.java
1 package com.cyngn.eleven.ui.activities;
2
3 import android.app.ActionBar;
4 import android.database.Cursor;
5 import android.net.Uri;
6 import android.os.AsyncTask;
7 import android.os.Bundle;
8 import android.provider.MediaStore;
9 import android.support.v4.app.FragmentManager;
10 import android.support.v4.app.LoaderManager;
11 import android.view.MenuItem;
12 import android.view.View;
13 import android.widget.ImageView;
14 import android.widget.ListView;
15 import android.widget.TextView;
16
17 import com.cyngn.eleven.Config;
18 import com.cyngn.eleven.R;
19 import com.cyngn.eleven.adapters.AlbumDetailSongAdapter;
20 import com.cyngn.eleven.adapters.DetailSongAdapter;
21 import com.cyngn.eleven.cache.ImageFetcher;
22 import com.cyngn.eleven.menu.DeleteDialog;
23 import com.cyngn.eleven.model.Album;
24 import com.cyngn.eleven.model.Song;
25 import com.cyngn.eleven.utils.AlbumPopupMenuHelper;
26 import com.cyngn.eleven.utils.GenreFetcher;
27 import com.cyngn.eleven.utils.MusicUtils;
28 import com.cyngn.eleven.utils.PopupMenuHelper;
29 import com.cyngn.eleven.utils.SongPopupMenuHelper;
30 import com.cyngn.eleven.widgets.IPopupMenuCallback;
31 import com.cyngn.eleven.widgets.PopupMenuButton;
32
33 import java.util.List;
34 import java.util.Locale;
35
36 public class AlbumDetailActivity extends SlidingPanelActivity {
37     private static final int LOADER_ID = 1;
38
39     private ListView mSongs;
40     private DetailSongAdapter mSongAdapter;
41     private TextView mAlbumDuration;
42     private TextView mGenre;
43     private PopupMenuHelper mPopupMenuHelper;
44     private PopupMenuButton mPopupMenuButton;
45     private PopupMenuHelper mHeaderPopupMenuHelper;
46     private long mAlbumId;
47     private String mArtistName;
48     private String mAlbumName;
49
50     @Override
51     protected void onCreate(Bundle savedInstanceState) {
52         super.onCreate(savedInstanceState);
53
54         Bundle arguments = getIntent().getExtras();
55         String artistName = arguments.getString(Config.ARTIST_NAME);
56
57         setupActionBar(artistName);
58
59         View root = findViewById(R.id.activity_base_content);
60
61         setupPopupMenuHelper();
62         setupHeader(root, artistName, arguments);
63         setupSongList(root);
64
65         LoaderManager lm = getSupportLoaderManager();
66         lm.initLoader(LOADER_ID, arguments, mSongAdapter);
67     }
68
69     private void setupHeader(View root, String artist, Bundle arguments) {
70         mAlbumId = arguments.getLong(Config.ID);
71         mArtistName = artist;
72         mAlbumName = arguments.getString(Config.NAME);
73         String year = arguments.getString(Config.ALBUM_YEAR);
74         int songCount = arguments.getInt(Config.SONG_COUNT);
75
76         ImageView albumArt = (ImageView)root.findViewById(R.id.album_art);
77         albumArt.setContentDescription(mAlbumName);
78         ImageFetcher.getInstance(this).loadAlbumImage(artist, mAlbumName, mAlbumId, albumArt);
79
80         TextView title = (TextView)root.findViewById(R.id.title);
81         title.setText(mAlbumName);
82
83         setupCountAndYear(root, year, songCount);
84
85         // will be updated once we have song data
86         mAlbumDuration = (TextView)root.findViewById(R.id.duration);
87         mGenre = (TextView)root.findViewById(R.id.genre);
88
89         mPopupMenuButton = (PopupMenuButton)root.findViewById(R.id.overflow);
90         mPopupMenuButton.setPopupMenuClickedListener(new IPopupMenuCallback.IListener() {
91             @Override
92             public void onPopupMenuClicked(View v, int position) {
93                 mHeaderPopupMenuHelper.showPopupMenu(v, position);
94             }
95         });
96     }
97
98     private void setupCountAndYear(View root, String year, int songCount) {
99         TextView songCountAndYear = (TextView)root.findViewById(R.id.song_count_and_year);
100         if(songCount > 0) {
101             String countText = getResources().
102                     getQuantityString(R.plurals.Nsongs, songCount, songCount);
103             if(year == null) {
104                 songCountAndYear.setText(countText);
105             } else {
106                 songCountAndYear.setText(getString(R.string.combine_two_strings, countText, year));
107             }
108         } else if(year != null) {
109             songCountAndYear.setText(year);
110         }
111     }
112
113     private void setupPopupMenuHelper() {
114         mPopupMenuHelper = new SongPopupMenuHelper(this, getSupportFragmentManager()) {
115             @Override
116             public Song getSong(int position) {
117                 return mSongAdapter.getItem(position);
118             }
119         };
120
121         mHeaderPopupMenuHelper = new AlbumPopupMenuHelper(this, getSupportFragmentManager()) {
122             public Album getAlbum(int position) {
123                 return new Album(mAlbumId, mAlbumName, mArtistName, -1, null);
124             }
125         };
126     }
127
128     private void setupSongList(View root) {
129         mSongs = (ListView)root.findViewById(R.id.songs);
130         mSongAdapter = new AlbumDetailSongAdapter(this);
131         mSongAdapter.setPopupMenuClickedListener(new IPopupMenuCallback.IListener() {
132             @Override
133             public void onPopupMenuClicked(View v, int position) {
134                 mPopupMenuHelper.showPopupMenu(v, position);
135             }
136         });
137         mSongs.setAdapter(mSongAdapter);
138         mSongs.setOnItemClickListener(mSongAdapter);
139     }
140
141     @Override
142     protected int getLayoutToInflate() { return R.layout.activity_album_detail; }
143
144     protected void setupActionBar(String name) {
145         ActionBar actionBar = getActionBar();
146         actionBar.setTitle(name.toUpperCase(Locale.getDefault()));
147         actionBar.setIcon(R.drawable.ic_action_back);
148         actionBar.setHomeButtonEnabled(true);
149     }
150
151     /** cause action bar icon tap to act like back -- boo-urns! */
152     @Override
153     public boolean onOptionsItemSelected(MenuItem item) {
154         switch (item.getItemId()) {
155             case android.R.id.home:
156                 finish();
157                 return true;
158             default:
159                 return super.onOptionsItemSelected(item);
160         }
161     }
162
163     /** called back by song loader */
164     public void update(List<Song> songs) {
165         /** compute total run time for album */
166         int duration = 0;
167         for(Song s : songs) { duration += s.mDuration; }
168         updateDuration(duration);
169
170         /** use the first song on the album to get a genre */
171         if(!songs.isEmpty()) {
172             GenreFetcher.fetch(this, (int)songs.get(0).mSongId, mGenre);
173         } else {
174             // no songs, quit this page
175             finish();
176         }
177     }
178
179     public void updateDuration(int duration) {
180         int mins = Math.round(duration/60);
181         int hours = mins/60;
182         mins %= 60;
183
184         String durationText = (hours == 0)
185             ? getString(R.string.duration_album_mins_only, mins)
186             : getString(R.string.duration_album_hour_mins, hours, mins);
187
188         mAlbumDuration.setText(durationText);
189     }
190
191     @Override
192     public void restartLoader() {
193         super.restartLoader();
194
195         getSupportLoaderManager().restartLoader(LOADER_ID, getIntent().getExtras(), mSongAdapter);
196     }
197 }