diff options
Diffstat (limited to 'src/com/cyanogenmod/eleven/ui')
12 files changed, 117 insertions, 47 deletions
diff --git a/src/com/cyanogenmod/eleven/ui/HeaderBar.java b/src/com/cyanogenmod/eleven/ui/HeaderBar.java index 3d4abbb..afbf13e 100644 --- a/src/com/cyanogenmod/eleven/ui/HeaderBar.java +++ b/src/com/cyanogenmod/eleven/ui/HeaderBar.java @@ -33,7 +33,6 @@ import com.cyanogenmod.eleven.loaders.QueueLoader; import com.cyanogenmod.eleven.menu.CreateNewPlaylist; import com.cyanogenmod.eleven.utils.MusicUtils; import com.cyanogenmod.eleven.utils.NavUtils; -import com.cyanogenmod.eleven.widgets.theme.HoloSelector; /** * Simple Header bar wrapper class that also has its own menu bar button. @@ -62,7 +61,6 @@ public class HeaderBar extends LinearLayout { super.onFinishInflate(); mMenuButton = (ImageView)findViewById(R.id.header_bar_menu_button); - mMenuButton.setBackground(new HoloSelector(getContext())); mMenuButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { @@ -71,7 +69,6 @@ public class HeaderBar extends LinearLayout { }); mSearchButton = (ImageView)findViewById(R.id.header_bar_search_button); - mSearchButton.setBackground(new HoloSelector(getContext())); mSearchButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { @@ -81,7 +78,6 @@ public class HeaderBar extends LinearLayout { mBackButton = (ImageView)findViewById(R.id.header_bar_up); - mBackButton.setBackground(new HoloSelector(getContext())); mTitleText = (TextView)findViewById(R.id.header_bar_title); } @@ -173,4 +169,4 @@ public class HeaderBar extends LinearLayout { return false; } -}
\ No newline at end of file +} diff --git a/src/com/cyanogenmod/eleven/ui/activities/BaseActivity.java b/src/com/cyanogenmod/eleven/ui/activities/BaseActivity.java index bfaa343..910fb1b 100644 --- a/src/com/cyanogenmod/eleven/ui/activities/BaseActivity.java +++ b/src/com/cyanogenmod/eleven/ui/activities/BaseActivity.java @@ -34,6 +34,7 @@ import android.view.MenuItem; import android.view.View; import android.widget.ImageView; import android.widget.TextView; +import android.widget.Toolbar; import com.cyanogenmod.eleven.IElevenService; import com.cyanogenmod.eleven.MusicPlaybackService; @@ -57,7 +58,7 @@ import java.util.ArrayList; * bind to Apollo's service. * <p> * {@link SlidingPanelActivity} extends from this skeleton. - * + * * @author Andrew Neal (andrewdneal@gmail.com) */ public abstract class BaseActivity extends FragmentActivity implements ServiceConnection, @@ -68,6 +69,8 @@ public abstract class BaseActivity extends FragmentActivity implements ServiceCo */ private final ArrayList<MusicStateListener> mMusicStateListener = Lists.newArrayList(); + private Toolbar mToolBar; + private int mActionBarHeight; /** @@ -121,8 +124,6 @@ public abstract class BaseActivity extends FragmentActivity implements ServiceCo // Initialize the broadcast receiver mPlaybackStatus = new PlaybackStatus(this); - getActionBar().setTitle(getString(R.string.app_name).toUpperCase()); - // Calculate ActionBar height TypedValue value = new TypedValue(); if (getTheme().resolveAttribute(android.R.attr.actionBarSize, value, true)) @@ -134,6 +135,11 @@ public abstract class BaseActivity extends FragmentActivity implements ServiceCo // Set the layout setContentView(setContentView()); + mToolBar = (Toolbar) findViewById(R.id.toolbar); + setActionBar(mToolBar); + + getActionBar().setTitle(getString(R.string.app_name).toUpperCase()); + // set the background on the root view getWindow().getDecorView().getRootView().setBackgroundColor( getResources().getColor(R.color.background_color)); @@ -280,7 +286,7 @@ public abstract class BaseActivity extends FragmentActivity implements ServiceCo if (mActionBarBackground == null) { final int actionBarColor = getResources().getColor(R.color.header_action_bar_color); mActionBarBackground = new ColorDrawable(actionBarColor); - getActionBar().setBackgroundDrawable(mActionBarBackground); + mToolBar.setBackgroundDrawable(mActionBarBackground); } } @@ -293,6 +299,12 @@ public abstract class BaseActivity extends FragmentActivity implements ServiceCo mActionBarBackground.setAlpha(alpha); } + public void setActionBarElevation(boolean isElevated) { + float targetElevation = isElevated + ? getResources().getDimension(R.dimen.action_bar_elevation) : 0; + mToolBar.setElevation(targetElevation); + } + public void setFragmentPadding(boolean enablePadding) { final int height = enablePadding ? mActionBarHeight : 0; findViewById(R.id.activity_base_content).setPadding(0, height, 0, 0); diff --git a/src/com/cyanogenmod/eleven/ui/activities/HomeActivity.java b/src/com/cyanogenmod/eleven/ui/activities/HomeActivity.java index eacc2fd..6db3675 100644 --- a/src/com/cyanogenmod/eleven/ui/activities/HomeActivity.java +++ b/src/com/cyanogenmod/eleven/ui/activities/HomeActivity.java @@ -15,9 +15,13 @@ */ package com.cyanogenmod.eleven.ui.activities; +import android.animation.ArgbEvaluator; +import android.animation.ObjectAnimator; import android.content.Intent; import android.graphics.Bitmap; +import android.graphics.Color; import android.net.Uri; +import android.os.AsyncTask; import android.os.Bundle; import android.os.Handler; import android.provider.MediaStore; @@ -27,6 +31,7 @@ import android.support.v4.app.FragmentTransaction; import android.text.TextUtils; import android.util.Log; import android.view.MenuItem; +import android.view.Window; import com.cyanogenmod.eleven.Config; import com.cyanogenmod.eleven.R; @@ -41,6 +46,7 @@ import com.cyanogenmod.eleven.ui.fragments.phone.MusicBrowserPhoneFragment; import com.cyanogenmod.eleven.ui.fragments.profile.LastAddedFragment; import com.cyanogenmod.eleven.ui.fragments.profile.TopTracksFragment; import com.cyanogenmod.eleven.utils.ApolloUtils; +import com.cyanogenmod.eleven.utils.BitmapWithColors; import com.cyanogenmod.eleven.utils.MusicUtils; import com.cyanogenmod.eleven.utils.NavUtils; @@ -60,6 +66,7 @@ public class HomeActivity extends SlidingPanelActivity { private boolean mLoadedBaseFragment = false; private boolean mHasPendingPlaybackRequest = false; private Handler mHandler = new Handler(); + private boolean mBrowsePanelActive = true; /** * Used by the up action to determine how to handle this @@ -91,7 +98,8 @@ public class HomeActivity extends SlidingPanelActivity { mTopLevelActivity = true; } - getSupportFragmentManager().addOnBackStackChangedListener(new FragmentManager.OnBackStackChangedListener() { + getSupportFragmentManager().addOnBackStackChangedListener( + new FragmentManager.OnBackStackChangedListener() { @Override public void onBackStackChanged() { Fragment topFragment = getTopFragment(); @@ -102,19 +110,14 @@ public class HomeActivity extends SlidingPanelActivity { ISetupActionBar setupActionBar = (ISetupActionBar) topFragment; setupActionBar.setupActionBar(); - if (topFragment instanceof MusicBrowserPhoneFragment) { - getActionBar().setIcon(R.drawable.ic_launcher); - getActionBar().setHomeButtonEnabled(false); - } else { - getActionBar().setIcon(R.drawable.ic_action_back_padded); - getActionBar().setHomeButtonEnabled(true); - } + getActionBar().setDisplayHomeAsUpEnabled( + !(topFragment instanceof MusicBrowserPhoneFragment)); } } }); // if intent wasn't UI related, process it as a audio playback request - if ( !intentHandled ) { + if (!intentHandled) { handlePlaybackIntent(launchIntent); } @@ -153,6 +156,54 @@ public class HomeActivity extends SlidingPanelActivity { } } + @Override + public void onMetaChanged() { + super.onMetaChanged(); + updateStatusBarColor(); + } + + @Override + protected void onSlide(float slideOffset) { + boolean isInBrowser = getCurrentPanel() == Panel.Browse && slideOffset < 0.7f; + if (isInBrowser != mBrowsePanelActive) { + mBrowsePanelActive = isInBrowser; + updateStatusBarColor(); + } + } + + private void updateStatusBarColor() { + if (mBrowsePanelActive || MusicUtils.getCurrentAlbumId() < 0) { + updateStatusBarColor(getResources().getColor(R.color.primary_dark)); + } else { + new AsyncTask<Void, Void, Integer>() { + @Override + protected Integer doInBackground(Void... params) { + ImageFetcher imageFetcher = ImageFetcher.getInstance(HomeActivity.this); + final BitmapWithColors bitmap = imageFetcher.getArtwork( + MusicUtils.getAlbumName(), MusicUtils.getCurrentAlbumId(), + MusicUtils.getArtistName(), true); + return bitmap != null ? bitmap.getVibrantDarkColor() : Color.TRANSPARENT; + } + @Override + protected void onPostExecute(Integer color) { + if (color == Color.TRANSPARENT) { + color = getResources().getColor(R.color.primary_dark); + } + updateStatusBarColor(color); + } + }.execute(); + } + } + + private void updateStatusBarColor(int color) { + final Window window = getWindow(); + ObjectAnimator animator = ObjectAnimator.ofInt(window, + "statusBarColor", window.getStatusBarColor(), color); + animator.setEvaluator(new ArgbEvaluator()); + animator.setDuration(300); + animator.start(); + } + private boolean parseIntentForFragment(Intent intent) { boolean handled = false; if (intent.getAction() != null) { @@ -199,13 +250,14 @@ public class HomeActivity extends SlidingPanelActivity { // this happens when they launch search which is its own activity and then // browse through that back to home activity mLoadedBaseFragment = true; - getActionBar().setIcon(R.drawable.ic_action_back_padded); - getActionBar().setHomeButtonEnabled(true); + getActionBar().setDisplayHomeAsUpEnabled(true); } // the current top fragment is about to be hidden by what we are replacing // it with -- so tell that fragment not to make its action bar menu items visible Fragment oldTop = getTopFragment(); - if(oldTop != null) { oldTop.setMenuVisibility(false); } + if (oldTop != null) { + oldTop.setMenuVisibility(false); + } transaction.commit(); handled = true; diff --git a/src/com/cyanogenmod/eleven/ui/activities/SearchActivity.java b/src/com/cyanogenmod/eleven/ui/activities/SearchActivity.java index a538416..27ef14f 100644 --- a/src/com/cyanogenmod/eleven/ui/activities/SearchActivity.java +++ b/src/com/cyanogenmod/eleven/ui/activities/SearchActivity.java @@ -301,8 +301,7 @@ public class SearchActivity extends FragmentActivity implements // Theme the action bar final ActionBar actionBar = getActionBar(); - actionBar.setHomeButtonEnabled(true); - actionBar.setIcon(R.drawable.ic_action_search); + actionBar.setDisplayHomeAsUpEnabled(true); // Get the query String mFilterString = getIntent().getStringExtra(SearchManager.QUERY); diff --git a/src/com/cyanogenmod/eleven/ui/activities/SettingsActivity.java b/src/com/cyanogenmod/eleven/ui/activities/SettingsActivity.java index e2ba8ee..c4f8139 100644 --- a/src/com/cyanogenmod/eleven/ui/activities/SettingsActivity.java +++ b/src/com/cyanogenmod/eleven/ui/activities/SettingsActivity.java @@ -43,8 +43,7 @@ public class SettingsActivity extends PreferenceActivity { overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out); // UP - getActionBar().setIcon(R.drawable.ic_action_back_padded); - getActionBar().setHomeButtonEnabled(true); + getActionBar().setDisplayHomeAsUpEnabled(true); // Add the preferences addPreferencesFromResource(R.xml.settings); diff --git a/src/com/cyanogenmod/eleven/ui/activities/SlidingPanelActivity.java b/src/com/cyanogenmod/eleven/ui/activities/SlidingPanelActivity.java index 35b67f9..5da768f 100644 --- a/src/com/cyanogenmod/eleven/ui/activities/SlidingPanelActivity.java +++ b/src/com/cyanogenmod/eleven/ui/activities/SlidingPanelActivity.java @@ -113,13 +113,7 @@ public abstract class SlidingPanelActivity extends BaseActivity { mFirstPanel.setPanelSlideListener(new SimplePanelSlideListener() { @Override public void onPanelSlide(View panel, float slideOffset) { - if (slideOffset > 0.8f) { - getActionBar().hide(); - } else if (slideOffset < 0.75f) { - getActionBar().show(); - } - - onSlide(); + onSlide(slideOffset); } @Override @@ -145,7 +139,7 @@ public abstract class SlidingPanelActivity extends BaseActivity { mFirstPanel.setSlidingEnabled(false); } - onSlide(); + onSlide(slideOffset); } @Override @@ -256,7 +250,7 @@ public abstract class SlidingPanelActivity extends BaseActivity { } } - protected void onSlide() { + protected void onSlide(float slideOffset) { for (ISlidingPanelListener listener : mSlidingPanelListeners) { listener.onBeginSlide(); } diff --git a/src/com/cyanogenmod/eleven/ui/fragments/AlbumFragment.java b/src/com/cyanogenmod/eleven/ui/fragments/AlbumFragment.java index cc8e6cf..cf459a9 100644 --- a/src/com/cyanogenmod/eleven/ui/fragments/AlbumFragment.java +++ b/src/com/cyanogenmod/eleven/ui/fragments/AlbumFragment.java @@ -44,7 +44,6 @@ import com.cyanogenmod.eleven.utils.NavUtils; import com.cyanogenmod.eleven.utils.PopupMenuHelper; import com.cyanogenmod.eleven.widgets.IPopupMenuCallback; import com.cyanogenmod.eleven.widgets.LoadingEmptyContainer; -import com.viewpagerindicator.TitlePageIndicator; /** * This class is used to display all of the albums on a user's device. diff --git a/src/com/cyanogenmod/eleven/ui/fragments/ArtistFragment.java b/src/com/cyanogenmod/eleven/ui/fragments/ArtistFragment.java index a759576..a7219d5 100644 --- a/src/com/cyanogenmod/eleven/ui/fragments/ArtistFragment.java +++ b/src/com/cyanogenmod/eleven/ui/fragments/ArtistFragment.java @@ -48,7 +48,6 @@ import com.cyanogenmod.eleven.utils.SectionCreatorUtils; import com.cyanogenmod.eleven.utils.SectionCreatorUtils.IItemCompare; import com.cyanogenmod.eleven.widgets.IPopupMenuCallback; import com.cyanogenmod.eleven.widgets.LoadingEmptyContainer; -import com.viewpagerindicator.TitlePageIndicator; /** * This class is used to display all of the artists on a user's device. diff --git a/src/com/cyanogenmod/eleven/ui/fragments/AudioPlayerFragment.java b/src/com/cyanogenmod/eleven/ui/fragments/AudioPlayerFragment.java index d081e58..877cda4 100644 --- a/src/com/cyanogenmod/eleven/ui/fragments/AudioPlayerFragment.java +++ b/src/com/cyanogenmod/eleven/ui/fragments/AudioPlayerFragment.java @@ -21,6 +21,7 @@ import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.content.ServiceConnection; +import android.graphics.Outline; import android.media.AudioManager; import android.os.Bundle; import android.os.Handler; @@ -39,6 +40,7 @@ import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; +import android.view.ViewOutlineProvider; import android.widget.ImageView; import android.widget.PopupMenu; import android.widget.TextView; @@ -67,7 +69,6 @@ import com.cyanogenmod.eleven.widgets.QueueButton; import com.cyanogenmod.eleven.widgets.RepeatButton; import com.cyanogenmod.eleven.widgets.RepeatingImageButton; import com.cyanogenmod.eleven.widgets.ShuffleButton; -import com.cyanogenmod.eleven.widgets.theme.HoloSelector; import java.lang.ref.WeakReference; @@ -289,6 +290,17 @@ public class AudioPlayerFragment extends Fragment implements ServiceConnection, * Initializes the header bar */ private void initHeaderBar() { + View headerBar = mRootView.findViewById(R.id.audio_player_header); + final int bottomActionBarHeight = + getResources().getDimensionPixelSize(R.dimen.bottom_action_bar_height); + + headerBar.setOutlineProvider(new ViewOutlineProvider() { + @Override + public void getOutline(View view, Outline outline) { + outline.setRect(0, -bottomActionBarHeight, view.getWidth(), view.getHeight()); + } + }); + // Title text mSongTitle = (TextView) mRootView.findViewById(R.id.header_bar_song_title); mArtistName = (TextView) mRootView.findViewById(R.id.header_bar_artist_title); @@ -296,7 +308,6 @@ public class AudioPlayerFragment extends Fragment implements ServiceConnection, // Buttons // Search Button View v = mRootView.findViewById(R.id.header_bar_search_button); - v.setBackground(new HoloSelector(getActivity())); v.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { @@ -307,7 +318,6 @@ public class AudioPlayerFragment extends Fragment implements ServiceConnection, // Add to Playlist Button // Setup the playlist button - add a click listener to show the context mAddToPlaylistButton = (ImageView) mRootView.findViewById(R.id.header_bar_add_button); - mAddToPlaylistButton.setBackground(new HoloSelector(getActivity())); // Create the context menu when requested mAddToPlaylistButton.setOnCreateContextMenuListener(new View.OnCreateContextMenuListener() { @@ -331,7 +341,6 @@ public class AudioPlayerFragment extends Fragment implements ServiceConnection, // Add the menu button // menu button mMenuButton = (ImageView) mRootView.findViewById(R.id.header_bar_menu_button); - mMenuButton.setBackground(new HoloSelector(getActivity())); mMenuButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { diff --git a/src/com/cyanogenmod/eleven/ui/fragments/BaseFragment.java b/src/com/cyanogenmod/eleven/ui/fragments/BaseFragment.java index bdbd454..7bbaf14 100644 --- a/src/com/cyanogenmod/eleven/ui/fragments/BaseFragment.java +++ b/src/com/cyanogenmod/eleven/ui/fragments/BaseFragment.java @@ -34,11 +34,16 @@ public abstract class BaseFragment extends Fragment implements MusicStateListene protected abstract String getTitle(); protected abstract int getLayoutToInflate(); + protected boolean needsElevatedActionBar() { + return true; + } + @Override public void setupActionBar() { getContainingActivity().setupActionBar(getTitle()); getContainingActivity().setActionBarAlpha(255); getContainingActivity().setFragmentPadding(true); + getContainingActivity().setActionBarElevation(needsElevatedActionBar()); } protected HomeActivity getContainingActivity() { @@ -84,4 +89,4 @@ public abstract class BaseFragment extends Fragment implements MusicStateListene public void onPlaylistChanged() { } -}
\ No newline at end of file +} diff --git a/src/com/cyanogenmod/eleven/ui/fragments/SongFragment.java b/src/com/cyanogenmod/eleven/ui/fragments/SongFragment.java index 597ee3e..1e57580 100644 --- a/src/com/cyanogenmod/eleven/ui/fragments/SongFragment.java +++ b/src/com/cyanogenmod/eleven/ui/fragments/SongFragment.java @@ -27,7 +27,6 @@ import com.cyanogenmod.eleven.sectionadapter.SectionListContainer; import com.cyanogenmod.eleven.ui.fragments.profile.BasicSongFragment; import com.cyanogenmod.eleven.utils.MusicUtils; import com.cyanogenmod.eleven.utils.SectionCreatorUtils; -import com.viewpagerindicator.TitlePageIndicator; /** * This class is used to display all of the songs on a user's device. diff --git a/src/com/cyanogenmod/eleven/ui/fragments/phone/MusicBrowserPhoneFragment.java b/src/com/cyanogenmod/eleven/ui/fragments/phone/MusicBrowserPhoneFragment.java index b5751ad..1317c4b 100644 --- a/src/com/cyanogenmod/eleven/ui/fragments/phone/MusicBrowserPhoneFragment.java +++ b/src/com/cyanogenmod/eleven/ui/fragments/phone/MusicBrowserPhoneFragment.java @@ -31,7 +31,7 @@ import com.cyanogenmod.eleven.ui.fragments.SongFragment; import com.cyanogenmod.eleven.utils.MusicUtils; import com.cyanogenmod.eleven.utils.PreferenceUtils; import com.cyanogenmod.eleven.utils.SortOrder; -import com.viewpagerindicator.TabPageIndicator; +import com.cyanogenmod.eleven.widgets.ViewPagerTabs; /** * This class is used to hold the {@link ViewPager} used for swiping between the @@ -111,11 +111,12 @@ public class MusicBrowserPhoneFragment extends BaseFragment { // Offscreen pager loading limit mViewPager.setOffscreenPageLimit(mPagerAdapter.getCount() - 1); - // Initialze the TPI - final TabPageIndicator pageIndicator = (TabPageIndicator)mRootView - .findViewById(R.id.fragment_home_phone_pager_titles); + // Initialize the tab strip + final ViewPagerTabs tabs = (ViewPagerTabs) + mRootView.findViewById(R.id.fragment_home_phone_pager_titles); // Attach the ViewPager - pageIndicator.setViewPager(mViewPager); + tabs.setViewPager(mViewPager); + mViewPager.setOnPageChangeListener(tabs); if (mDefaultPageIdx != INVALID_PAGE_INDEX) { navigateToPage(mDefaultPageIdx); @@ -282,6 +283,12 @@ public class MusicBrowserPhoneFragment extends BaseFragment { return super.onOptionsItemSelected(item); } + @Override + protected boolean needsElevatedActionBar() { + // our view pager already has elevation + return false; + } + private boolean isArtistPage() { return mViewPager.getCurrentItem() == MusicFragments.ARTIST.ordinal(); } |