diff options
author | Wilhelm Fitzpatrick <rafial@cyngn.com> | 2014-09-29 18:32:42 -0700 |
---|---|---|
committer | linus_lee <llee@cyngn.com> | 2014-11-20 12:03:04 -0800 |
commit | a6eb184464c9d6cb564f7b98c2792bb773cba168 (patch) | |
tree | 1150c0ef183b2bdcd24d43d2dcd1ac721026f7d3 | |
parent | 1c1a575a24c083a0d58d8bcd78c66c203b777d38 (diff) | |
download | android_packages_apps_Eleven-a6eb184464c9d6cb564f7b98c2792bb773cba168.tar.gz android_packages_apps_Eleven-a6eb184464c9d6cb564f7b98c2792bb773cba168.tar.bz2 android_packages_apps_Eleven-a6eb184464c9d6cb564f7b98c2792bb773cba168.zip |
Eleven: add empty view to play queue
Fixed issue where adapter was not cleared when last song was removed.
Clear album art from now playing bar when last item in queue is removed.
Change-Id: I4827203a9399faab213320a2664e3f6842897189
-rw-r--r-- | res/layout/no_results_message.xml | 4 | ||||
-rw-r--r-- | res/values/colors.xml | 1 | ||||
-rw-r--r-- | res/values/dimens.xml | 2 | ||||
-rw-r--r-- | res/values/strings.xml | 2 | ||||
-rw-r--r-- | src/com/cyngn/eleven/adapters/SongAdapter.java | 5 | ||||
-rw-r--r-- | src/com/cyngn/eleven/ui/activities/BaseActivity.java | 6 | ||||
-rw-r--r-- | src/com/cyngn/eleven/ui/activities/SlidingPanelActivity.java | 21 | ||||
-rw-r--r-- | src/com/cyngn/eleven/ui/fragments/QueueFragment.java | 60 | ||||
-rw-r--r-- | src/com/cyngn/eleven/widgets/NoResultsContainer.java | 8 |
9 files changed, 66 insertions, 43 deletions
diff --git a/res/layout/no_results_message.xml b/res/layout/no_results_message.xml index aee93de..ab1fd45 100644 --- a/res/layout/no_results_message.xml +++ b/res/layout/no_results_message.xml @@ -36,7 +36,7 @@ android:layout_gravity="center_horizontal" android:maxLines="2" android:textColor="@color/no_results" - android:textSize="@dimen/no_reuslts_text_main" + android:textSize="@dimen/no_results_text_main" android:textStyle="bold" android:text="@string/empty_generic_main" /> @@ -49,7 +49,7 @@ android:layout_gravity="center_horizontal" android:maxLines="2" android:textColor="@color/no_results" - android:textSize="@dimen/no_reuslts_text_main" + android:textSize="@dimen/no_results_text_main" android:textStyle="bold|italic" android:visibility="gone" /> </LinearLayout> diff --git a/res/values/colors.xml b/res/values/colors.xml index 24072b6..d0c8d23 100644 --- a/res/values/colors.xml +++ b/res/values/colors.xml @@ -103,4 +103,5 @@ <!-- search no results text color --> <color name="no_results">#ff231f20</color> + <color name="no_results_light">@color/white</color> </resources> diff --git a/res/values/dimens.xml b/res/values/dimens.xml index 5e4be37..cebcaa9 100644 --- a/res/values/dimens.xml +++ b/res/values/dimens.xml @@ -186,7 +186,7 @@ <dimen name="white_note_padding_bottom">24.0dip</dimen> <dimen name="no_results_width">260.0dip</dimen> <dimen name="no_results_text_padding_bottom">16.0dip</dimen> - <dimen name="no_reuslts_text_main">20.0sp</dimen> + <dimen name="no_results_text_main">20.0sp</dimen> <dimen name="no_results_text_secondary">14.0sp</dimen> <!-- General consensus is to leave dividers at 1px instead of having different diff --git a/res/values/strings.xml b/res/values/strings.xml index f49af10..15bec76 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -187,6 +187,8 @@ <string name="empty_last_added">Songs you have added over the last month will be shown here.</string> <string name="empty_generic_main">NO MUSIC FOUND</string> <string name="empty_generic_secondary">To copy music from your computer to your device, use a USB cable.</string> + <string name="empty_queue_main">NO SONGS IN PLAY QUEUE</string> + <string name="empty_queue_secondary">To add songs to your Play Queue, tap the options menu on a song, album, or artist and select “Add to queue”.</string> <!-- Section Headers --> <string name="header_unknown_year">Unknown Year</string> diff --git a/src/com/cyngn/eleven/adapters/SongAdapter.java b/src/com/cyngn/eleven/adapters/SongAdapter.java index da012f9..8b8c028 100644 --- a/src/com/cyngn/eleven/adapters/SongAdapter.java +++ b/src/com/cyngn/eleven/adapters/SongAdapter.java @@ -18,7 +18,6 @@ import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; -import com.cyngn.eleven.R; import com.cyngn.eleven.cache.ImageFetcher; import com.cyngn.eleven.model.Artist; import com.cyngn.eleven.model.Song; @@ -42,6 +41,8 @@ import com.cyngn.eleven.widgets.PlayPauseProgressButton; public class SongAdapter extends ArrayAdapter<Song> implements SectionAdapter.BasicAdapter, IPopupMenuCallback { + public static final int NOTHING_PLAYING = -1; + /** * Number of views (TextView) */ @@ -60,7 +61,7 @@ public class SongAdapter extends ArrayAdapter<Song> /** * The index of the item that is currently playing */ - private long mCurrentlyPlayingSongId = -1; + private long mCurrentlyPlayingSongId = NOTHING_PLAYING; /** * Used to cache the song info diff --git a/src/com/cyngn/eleven/ui/activities/BaseActivity.java b/src/com/cyngn/eleven/ui/activities/BaseActivity.java index 24f451a..daba963 100644 --- a/src/com/cyngn/eleven/ui/activities/BaseActivity.java +++ b/src/com/cyngn/eleven/ui/activities/BaseActivity.java @@ -288,6 +288,10 @@ public abstract class BaseActivity extends FragmentActivity implements ServiceCo updateBottomActionBarInfo(); } + protected void clearMetaInfo() { + mAlbumArt.setImageResource(R.drawable.default_artwork); + } + /** * Sets the track name, album name, and album art. */ @@ -383,4 +387,4 @@ public abstract class BaseActivity extends FragmentActivity implements ServiceCo * @return The resource ID to be inflated. */ public abstract int setContentView(); -} +}
\ No newline at end of file diff --git a/src/com/cyngn/eleven/ui/activities/SlidingPanelActivity.java b/src/com/cyngn/eleven/ui/activities/SlidingPanelActivity.java index 49c268d..4a905ff 100644 --- a/src/com/cyngn/eleven/ui/activities/SlidingPanelActivity.java +++ b/src/com/cyngn/eleven/ui/activities/SlidingPanelActivity.java @@ -11,27 +11,21 @@ package com.cyngn.eleven.ui.activities; -import android.content.BroadcastReceiver; -import android.content.Context; -import android.content.Intent; import android.graphics.Color; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.view.ViewPager; import android.view.View; import android.view.ViewStub; -import android.widget.ImageView; - import android.widget.LinearLayout; + import com.cyngn.eleven.R; import com.cyngn.eleven.slidinguppanel.SlidingUpPanelLayout; import com.cyngn.eleven.slidinguppanel.SlidingUpPanelLayout.SimplePanelSlideListener; import com.cyngn.eleven.ui.HeaderBar; import com.cyngn.eleven.ui.fragments.AudioPlayerFragment; -import com.cyngn.eleven.ui.fragments.phone.MusicBrowserPhoneFragment; import com.cyngn.eleven.utils.ApolloUtils; import com.cyngn.eleven.utils.MusicUtils; -import com.cyngn.eleven.utils.NavUtils; import com.cyngn.eleven.widgets.BlurScrimImage; /** @@ -52,7 +46,6 @@ public class SlidingPanelActivity extends BaseActivity { private SlidingUpPanelLayout mFirstPanel; private HeaderBar mFirstHeaderBar; private SlidingUpPanelLayout mSecondPanel; - private HeaderBar mSecondHeaderBar; protected Panel mTargetNavigatePanel; private final ShowPanelClickListener mShowBrowse = new ShowPanelClickListener(Panel.Browse); @@ -172,7 +165,7 @@ public class SlidingPanelActivity extends BaseActivity { }); // setup the header bar - mSecondHeaderBar = setupHeaderBar(R.id.secondHeaderBar, R.string.page_play_queue, + setupHeaderBar(R.id.secondHeaderBar, R.string.page_play_queue, R.drawable.btn_playback_icon, mShowMusicPlayer, mShowMusicPlayer); // set the drag view offset to allow the panel to go past the top of the viewport @@ -183,8 +176,6 @@ public class SlidingPanelActivity extends BaseActivity { mSecondPanel.setSlidePanelOffset(slideOffset); } - - @Override protected void onPause() { super.onPause(); @@ -267,6 +258,12 @@ public class SlidingPanelActivity extends BaseActivity { } } + public void clearMetaInfo() { + super.clearMetaInfo(); + mBlurScrimImage.transitionToDefaultState(); + mFirstHeaderBar.setTitleText(""); + } + @Override protected void updateMetaInfo() { super.updateMetaInfo(); @@ -308,4 +305,4 @@ public class SlidingPanelActivity extends BaseActivity { showPanel(mTargetPanel); } } -} +}
\ No newline at end of file diff --git a/src/com/cyngn/eleven/ui/fragments/QueueFragment.java b/src/com/cyngn/eleven/ui/fragments/QueueFragment.java index ac402d1..c42972f 100644 --- a/src/com/cyngn/eleven/ui/fragments/QueueFragment.java +++ b/src/com/cyngn/eleven/ui/fragments/QueueFragment.java @@ -11,6 +11,8 @@ package com.cyngn.eleven.ui.fragments; +import static com.cyngn.eleven.utils.MusicUtils.mService; + import android.content.BroadcastReceiver; import android.content.ComponentName; import android.content.Context; @@ -20,11 +22,9 @@ import android.content.ServiceConnection; import android.os.Bundle; import android.os.IBinder; import android.support.v4.app.Fragment; -import android.support.v4.app.FragmentManager; import android.support.v4.app.LoaderManager.LoaderCallbacks; import android.support.v4.content.Loader; import android.view.LayoutInflater; -import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; @@ -40,22 +40,21 @@ import com.cyngn.eleven.dragdrop.DragSortListView.RemoveListener; import com.cyngn.eleven.loaders.NowPlayingCursor; import com.cyngn.eleven.loaders.QueueLoader; import com.cyngn.eleven.menu.DeleteDialog; -import com.cyngn.eleven.menu.FragmentMenuItems; import com.cyngn.eleven.model.Song; import com.cyngn.eleven.recycler.RecycleHolder; +import com.cyngn.eleven.ui.activities.SlidingPanelActivity; import com.cyngn.eleven.utils.MusicUtils; import com.cyngn.eleven.utils.PopupMenuHelper; import com.cyngn.eleven.widgets.IPopupMenuCallback; +import com.cyngn.eleven.widgets.NoResultsContainer; import com.cyngn.eleven.widgets.PlayPauseProgressButton; import java.lang.ref.WeakReference; import java.util.List; -import static com.cyngn.eleven.utils.MusicUtils.mService; - /** * This class is used to display all of the songs in the queue. - * + * * @author Andrew Neal (andrewdneal@gmail.com) */ public class QueueFragment extends Fragment implements LoaderCallbacks<List<Song>>, @@ -91,6 +90,8 @@ public class QueueFragment extends Fragment implements LoaderCallbacks<List<Song */ private PopupMenuHelper mPopupMenuHelper; + private ViewGroup mRootView; + /** * Empty constructor as per the {@link Fragment} documentation */ @@ -149,7 +150,7 @@ public class QueueFragment extends Fragment implements LoaderCallbacks<List<Song } }; - // Create the adpater + // Create the adapter mAdapter = new SongAdapter(getActivity(), R.layout.edit_queue_list_item); mAdapter.setPopupMenuClickedListener(new IPopupMenuCallback.IListener() { @Override @@ -166,9 +167,9 @@ public class QueueFragment extends Fragment implements LoaderCallbacks<List<Song public View onCreateView(final LayoutInflater inflater, final ViewGroup container, final Bundle savedInstanceState) { // The View for the fragment's UI - final ViewGroup rootView = (ViewGroup)inflater.inflate(R.layout.list_base, null); + mRootView = (ViewGroup)inflater.inflate(R.layout.list_base, null); // Initialize the list - mListView = (DragSortListView)rootView.findViewById(R.id.list_base); + mListView = (DragSortListView)mRootView.findViewById(R.id.list_base); // Set the data behind the list mListView.setAdapter(mAdapter); // Release any references to the recycled Views @@ -183,7 +184,7 @@ public class QueueFragment extends Fragment implements LoaderCallbacks<List<Song mListView.setDragScrollProfile(this); // Enable fast scroll bars mListView.setFastScrollEnabled(true); - return rootView; + return mRootView; } /** @@ -305,22 +306,26 @@ public class QueueFragment extends Fragment implements LoaderCallbacks<List<Song */ @Override public void onLoadFinished(final Loader<List<Song>> loader, final List<Song> data) { - // Check for any errors - if (data.isEmpty()) { - return; - } + mAdapter.unload(); // Start fresh - // Start fresh - mAdapter.unload(); - // Add the data to the adpater - for (final Song song : data) { - mAdapter.add(song); + if (data.isEmpty()) { + // No songs found, bring up the empty view + final NoResultsContainer empty = + (NoResultsContainer)mRootView.findViewById(R.id.no_results_container); + // Setup the container strings + setupNoResultsContainer(empty); + // set the empty view into the list view + mListView.setEmptyView(empty); + mAdapter.setCurrentlyPlayingSongId(SongAdapter.NOTHING_PLAYING); + ((SlidingPanelActivity)getActivity()).clearMetaInfo(); + } else { + // Add the songs found to the adapter + for (final Song song : data) { mAdapter.add(song); } + // Build the cache + mAdapter.buildCache(); + // Set the currently playing audio + mAdapter.setCurrentlyPlayingSongId(MusicUtils.getCurrentAudioId()); } - // Build the cache - mAdapter.buildCache(); - - // Set the currently playing audio - mAdapter.setCurrentlyPlayingSongId(MusicUtils.getCurrentAudioId()); } /** @@ -380,6 +385,13 @@ public class QueueFragment extends Fragment implements LoaderCallbacks<List<Song } } + private void setupNoResultsContainer(NoResultsContainer empty) { + int color = getResources().getColor(R.color.no_results_light); + empty.setTextColor(color); + empty.setMainText(R.string.empty_queue_main); + empty.setSecondaryText(R.string.empty_queue_secondary); + } + /** * Used to monitor the state of playback */ diff --git a/src/com/cyngn/eleven/widgets/NoResultsContainer.java b/src/com/cyngn/eleven/widgets/NoResultsContainer.java index c18d531..e90e797 100644 --- a/src/com/cyngn/eleven/widgets/NoResultsContainer.java +++ b/src/com/cyngn/eleven/widgets/NoResultsContainer.java @@ -48,4 +48,10 @@ public class NoResultsContainer extends LinearLayout { public void setSecondaryText(final int resId) { ((TextView)findViewById(R.id.no_results_secondary_text)).setText(resId); } -} + + public void setTextColor(int color) { + ((TextView)findViewById(R.id.no_results_main_text)).setTextColor(color); + ((TextView)findViewById(R.id.no_results_main_highlight_text)).setTextColor(color); + ((TextView)findViewById(R.id.no_results_secondary_text)).setTextColor(color); + } +}
\ No newline at end of file |