diff options
author | Linus Lee <llee@cyngn.com> | 2015-04-17 18:52:24 -0700 |
---|---|---|
committer | Linus Lee <llee@cyngn.com> | 2015-05-20 14:46:36 -0700 |
commit | 442768038f32eede422e0a3e7ec8235d564cd0b5 (patch) | |
tree | 09a235e2bf6052ad6298a62ba148e8469991b46b /src/com/cyanogenmod/eleven/ui | |
parent | a02bc80dd6a52555b8dc0801acaf4893bbe295f9 (diff) | |
download | android_packages_apps_Eleven-442768038f32eede422e0a3e7ec8235d564cd0b5.tar.gz android_packages_apps_Eleven-442768038f32eede422e0a3e7ec8235d564cd0b5.tar.bz2 android_packages_apps_Eleven-442768038f32eede422e0a3e7ec8235d564cd0b5.zip |
Add Landscape support to Eleven
This adds most of the support. There is a bug around the album art
not loading on rotation - but this patch covers pretty much every
other case
Change-Id: If9033b0323beab8837493d289dcf77b76d1ea8c9
Diffstat (limited to 'src/com/cyanogenmod/eleven/ui')
5 files changed, 93 insertions, 30 deletions
diff --git a/src/com/cyanogenmod/eleven/ui/activities/HomeActivity.java b/src/com/cyanogenmod/eleven/ui/activities/HomeActivity.java index f3a796a..ded1950 100644 --- a/src/com/cyanogenmod/eleven/ui/activities/HomeActivity.java +++ b/src/com/cyanogenmod/eleven/ui/activities/HomeActivity.java @@ -50,7 +50,8 @@ import com.cyanogenmod.eleven.utils.BitmapWithColors; import com.cyanogenmod.eleven.utils.MusicUtils; import com.cyanogenmod.eleven.utils.NavUtils; -public class HomeActivity extends SlidingPanelActivity { +public class HomeActivity extends SlidingPanelActivity implements + FragmentManager.OnBackStackChangedListener { private static final String TAG = "HomeActivity"; private static final String ACTION_PREFIX = HomeActivity.class.getName(); public static final String ACTION_VIEW_ARTIST_DETAILS = ACTION_PREFIX + ".view.ArtistDetails"; @@ -59,6 +60,8 @@ public class HomeActivity extends SlidingPanelActivity { public static final String ACTION_VIEW_SMART_PLAYLIST = ACTION_PREFIX + ".view.SmartPlaylist"; public static final String EXTRA_BROWSE_PAGE_IDX = "BrowsePageIndex"; + private static final String STATE_KEY_BASE_FRAGMENT = "BaseFragment"; + private static final int NEW_PHOTO = 1; public static final int EQUALIZER = 2; @@ -73,10 +76,10 @@ public class HomeActivity extends SlidingPanelActivity { */ protected boolean mTopLevelActivity = false; - @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + // if we've been launched by an intent, parse it Intent launchIntent = getIntent(); boolean intentHandled = false; @@ -85,42 +88,46 @@ public class HomeActivity extends SlidingPanelActivity { } // if the intent didn't cause us to load a fragment, load the music browse one - if (!mLoadedBaseFragment) { + if (savedInstanceState == null && !mLoadedBaseFragment) { final MusicBrowserPhoneFragment fragment = new MusicBrowserPhoneFragment(); if (launchIntent != null) { fragment.setDefaultPageIdx(launchIntent.getIntExtra(EXTRA_BROWSE_PAGE_IDX, MusicBrowserPhoneFragment.INVALID_PAGE_INDEX)); } getSupportFragmentManager().beginTransaction() - .replace(R.id.activity_base_content, fragment).commit(); + .replace(R.id.activity_base_content, fragment) + .commit(); mLoadedBaseFragment = true; mTopLevelActivity = true; } - getSupportFragmentManager().addOnBackStackChangedListener( - new FragmentManager.OnBackStackChangedListener() { - @Override - public void onBackStackChanged() { - Fragment topFragment = getTopFragment(); - if (topFragment != null) { - // the fragment that has come back to the top should now have its menu items - // added to the action bar -- so tell it to make it menu items visible - topFragment.setMenuVisibility(true); - ISetupActionBar setupActionBar = (ISetupActionBar) topFragment; - setupActionBar.setupActionBar(); - - getActionBar().setDisplayHomeAsUpEnabled( - !(topFragment instanceof MusicBrowserPhoneFragment)); - } - } - }); + getSupportFragmentManager().addOnBackStackChangedListener(this); + + // if we are resuming from a saved instance state + if (savedInstanceState != null) { + // track which fragments are loaded and if this is the top level activity + mTopLevelActivity = savedInstanceState.getBoolean(STATE_KEY_BASE_FRAGMENT); + mLoadedBaseFragment = mTopLevelActivity; + + // update the action bar based on the top most fragment + onBackStackChanged(); + + // figure which panel we are on and update the status bar + mBrowsePanelActive = (getCurrentPanel() == Panel.Browse); + updateStatusBarColor(); + } // if intent wasn't UI related, process it as a audio playback request if (!intentHandled) { handlePlaybackIntent(launchIntent); } + } + @Override + protected void onSaveInstanceState(Bundle outState) { + super.onSaveInstanceState(outState); + outState.putBoolean(STATE_KEY_BASE_FRAGMENT, mTopLevelActivity); } public Fragment getTopFragment() { @@ -427,4 +434,18 @@ public class HomeActivity extends SlidingPanelActivity { return id; } + @Override + public void onBackStackChanged() { + Fragment topFragment = getTopFragment(); + if (topFragment != null) { + // the fragment that has come back to the top should now have its menu items + // added to the action bar -- so tell it to make it menu items visible + topFragment.setMenuVisibility(true); + ISetupActionBar setupActionBar = (ISetupActionBar) topFragment; + setupActionBar.setupActionBar(); + + getActionBar().setDisplayHomeAsUpEnabled( + !(topFragment instanceof MusicBrowserPhoneFragment)); + } + } } diff --git a/src/com/cyanogenmod/eleven/ui/activities/SlidingPanelActivity.java b/src/com/cyanogenmod/eleven/ui/activities/SlidingPanelActivity.java index 2a3665d..ace0947 100644 --- a/src/com/cyanogenmod/eleven/ui/activities/SlidingPanelActivity.java +++ b/src/com/cyanogenmod/eleven/ui/activities/SlidingPanelActivity.java @@ -52,6 +52,8 @@ public abstract class SlidingPanelActivity extends BaseActivity { public void onFinishSlide(SlidingPanelActivity.Panel visiblePanel); } + private static final String STATE_KEY_CURRENT_PANEL = "CurrentPanel"; + private SlidingUpPanelLayout mFirstPanel; private SlidingUpPanelLayout mSecondPanel; protected Panel mTargetNavigatePanel; @@ -106,6 +108,26 @@ public abstract class SlidingPanelActivity extends BaseActivity { // get the blur scrim image mBlurScrimImage = (BlurScrimImage)findViewById(R.id.blurScrimImage); + + if (savedInstanceState != null) { + int panelIndex = savedInstanceState.getInt(STATE_KEY_CURRENT_PANEL, + Panel.Browse.ordinal()); + Panel targetPanel = Panel.values()[panelIndex]; + + showPanel(targetPanel); + mTargetNavigatePanel = Panel.None; + + if (targetPanel == Panel.Queue) { + mFirstPanel.setSlidingEnabled(false); + } + } + } + + @Override + protected void onSaveInstanceState(Bundle outState) { + super.onSaveInstanceState(outState); + + outState.putInt(STATE_KEY_CURRENT_PANEL, getCurrentPanel().ordinal()); } private void setupFirstPanel() { @@ -253,7 +275,7 @@ public abstract class SlidingPanelActivity extends BaseActivity { } } - protected Panel getCurrentPanel() { + public Panel getCurrentPanel() { if (mSecondPanel.isPanelExpanded()) { return Panel.Queue; } else if (mFirstPanel.isPanelExpanded()) { diff --git a/src/com/cyanogenmod/eleven/ui/fragments/AudioPlayerFragment.java b/src/com/cyanogenmod/eleven/ui/fragments/AudioPlayerFragment.java index 877cda4..2e102d4 100644 --- a/src/com/cyanogenmod/eleven/ui/fragments/AudioPlayerFragment.java +++ b/src/com/cyanogenmod/eleven/ui/fragments/AudioPlayerFragment.java @@ -180,6 +180,9 @@ public class AudioPlayerFragment extends Fragment implements ServiceConnection, // add a listener for the sliding ((SlidingPanelActivity)getActivity()).addSlidingPanelListener(this); + + // check equalizer view + checkEqualizerView(); } /** @@ -297,7 +300,11 @@ public class AudioPlayerFragment extends Fragment implements ServiceConnection, headerBar.setOutlineProvider(new ViewOutlineProvider() { @Override public void getOutline(View view, Outline outline) { - outline.setRect(0, -bottomActionBarHeight, view.getWidth(), view.getHeight()); + // since we only want the top and bottom shadows, pad the horizontal width + // to hide the shadows. Can't seem to find a better way to do this + int padWidth = (int)(0.2f * view.getWidth()); + outline.setRect(-padWidth, -bottomActionBarHeight, view.getWidth() + padWidth, + view.getHeight()); } }); @@ -742,6 +749,14 @@ public class AudioPlayerFragment extends Fragment implements ServiceConnection, @Override public void onFinishSlide(SlidingPanelActivity.Panel visiblePanel) { + checkEqualizerView(visiblePanel); + } + + private void checkEqualizerView() { + checkEqualizerView(((HomeActivity)getActivity()).getCurrentPanel()); + } + + private void checkEqualizerView(SlidingPanelActivity.Panel visiblePanel) { if (visiblePanel == SlidingPanelActivity.Panel.MusicPlayer) { mEqualizerView.setPanelVisible(true); } diff --git a/src/com/cyanogenmod/eleven/ui/fragments/BaseFragment.java b/src/com/cyanogenmod/eleven/ui/fragments/BaseFragment.java index 7bbaf14..5a5885a 100644 --- a/src/com/cyanogenmod/eleven/ui/fragments/BaseFragment.java +++ b/src/com/cyanogenmod/eleven/ui/fragments/BaseFragment.java @@ -39,6 +39,12 @@ public abstract class BaseFragment extends Fragment implements MusicStateListene } @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setRetainInstance(true); + } + + @Override public void setupActionBar() { getContainingActivity().setupActionBar(getTitle()); getContainingActivity().setActionBarAlpha(255); diff --git a/src/com/cyanogenmod/eleven/ui/fragments/phone/MusicBrowserPhoneFragment.java b/src/com/cyanogenmod/eleven/ui/fragments/phone/MusicBrowserPhoneFragment.java index 1317c4b..376841e 100644 --- a/src/com/cyanogenmod/eleven/ui/fragments/phone/MusicBrowserPhoneFragment.java +++ b/src/com/cyanogenmod/eleven/ui/fragments/phone/MusicBrowserPhoneFragment.java @@ -95,13 +95,12 @@ public class MusicBrowserPhoneFragment extends BaseFragment { protected void onViewCreated() { super.onViewCreated(); - if (mPagerAdapter == null) { - // Initialize the adapter - mPagerAdapter = new PagerAdapter(getActivity(), getChildFragmentManager()); - final MusicFragments[] mFragments = MusicFragments.values(); - for (final MusicFragments mFragment : mFragments) { - mPagerAdapter.add(mFragment.getFragmentClass(), null); - } + // create the adapter - on rotation the view gets created again and we need to recreate + // the child fragments (fragments of fragments cannot be retained) + mPagerAdapter = new PagerAdapter(getActivity(), getChildFragmentManager()); + final MusicFragments[] mFragments = MusicFragments.values(); + for (final MusicFragments mFragment : mFragments) { + mPagerAdapter.add(mFragment.getFragmentClass(), null); } // Initialize the ViewPager |