summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWilhelm Fitzpatrick <rafial@cyngn.com>2014-09-29 18:32:42 -0700
committerlinus_lee <llee@cyngn.com>2014-11-20 12:03:04 -0800
commita6eb184464c9d6cb564f7b98c2792bb773cba168 (patch)
tree1150c0ef183b2bdcd24d43d2dcd1ac721026f7d3
parent1c1a575a24c083a0d58d8bcd78c66c203b777d38 (diff)
downloadandroid_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.xml4
-rw-r--r--res/values/colors.xml1
-rw-r--r--res/values/dimens.xml2
-rw-r--r--res/values/strings.xml2
-rw-r--r--src/com/cyngn/eleven/adapters/SongAdapter.java5
-rw-r--r--src/com/cyngn/eleven/ui/activities/BaseActivity.java6
-rw-r--r--src/com/cyngn/eleven/ui/activities/SlidingPanelActivity.java21
-rw-r--r--src/com/cyngn/eleven/ui/fragments/QueueFragment.java60
-rw-r--r--src/com/cyngn/eleven/widgets/NoResultsContainer.java8
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 &#8220;Add to queue&#8221;.</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