package bob.sun.bender.fragments; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Color; import android.net.Uri; import android.os.Build; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.FrameLayout; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; import com.squareup.picasso.Picasso; import bob.sun.bender.MainActivity; import bob.sun.bender.PlayerServiceAIDL; import bob.sun.bender.R; import bob.sun.bender.adapters.MenuAdapter; import bob.sun.bender.controller.OnTickListener; import bob.sun.bender.model.MediaLibrary; import bob.sun.bender.model.SelectionDetail; import bob.sun.bender.model.SongBean; import bob.sun.bender.theme.Theme; import bob.sun.bender.theme.ThemeManager; import bob.sun.bender.utils.AIDLDumper; import bob.sun.bender.view.AlbumStack; /** * Created by sunkuan on 2015/4/23. */ public class MainMenuFragment extends TwoPanelFragment implements OnTickListener { RecyclerView theList; int currentItemIndex; ImageView imageView; FrameLayout rightPanelContent; LinearLayout nowPlayingPage; LinearLayout rightPanel; FrameLayout leftPanel; AlbumStack albumStack; AIDLDumper dumper; TextView npTitle, npArtist; private static int menuIcons[] = { R.drawable.artist, R.drawable.album, R.drawable.cover_flow, R.drawable.songs, R.drawable.playlist, R.drawable.genre, R.drawable.shuffle, R.drawable.settings, R.drawable.songs }; @Override public View onCreateView(LayoutInflater inflater,ViewGroup parent,Bundle savedInstanceState){ View ret = inflater.inflate(R.layout.layout_main_menu,parent,false); ret.setBackgroundColor(Color.TRANSPARENT); theList = (RecyclerView) ret.findViewById(R.id.id_list_view_main_menu); theList.setAdapter(MenuAdapter.getStaticInstance(getActivity()).getMainMenuAdapter()); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { theList.setLayoutManager(new LinearLayoutManager(getContext())); } else { theList.setLayoutManager(new LinearLayoutManager(parent.getContext())); } // theList.setChoiceMode(ListView.CHOICE_MODE_SINGLE); currentItemIndex = 0; MenuAdapter.getStaticInstance(null).HighlightItem(0); imageView = (ImageView) ret.findViewById(R.id.id_main_menu_image); nowPlayingPage = (LinearLayout) ret.findViewById(R.id.id_mainmenu_nowplaying); imageView.setImageBitmap(BitmapFactory.decodeResource(getResources(),menuIcons[0])); rightPanelContent = (FrameLayout) ret.findViewById(R.id.right_panel_content); albumStack = (AlbumStack) ret.findViewById(R.id.id_album_stack); albumStack.init(); leftPanel = (FrameLayout) ret.findViewById(R.id.main_menu_left); rightPanel = (LinearLayout) ret.findViewById(R.id.main_menu_right); npTitle = (TextView) ret.findViewById(R.id.id_mainmenu_nowplaying_title); npArtist = (TextView) ret.findViewById(R.id.id_mainmenu_nowplaying_artist); loadTheme(); return ret; } @Override public void onHiddenChanged(boolean hidden) { super.onHiddenChanged(hidden); if (!hidden) refreshCurrentSongIfNeeded(); } @Override public void onResume() { super.onResume(); refreshCurrentSongIfNeeded(); dumper = AIDLDumper.getInstance((MainActivity) getActivity()); } @Override public void onNextTick() { if(currentItemIndex >= theList.getAdapter().getItemCount()-1){ currentItemIndex = theList.getAdapter().getItemCount()-1; return; } currentItemIndex+=1; theList.requestFocus(); if(currentItemIndex >= ((LinearLayoutManager)theList.getLayoutManager()).findLastCompletelyVisibleItemPosition()) theList.smoothScrollToPosition(currentItemIndex); MenuAdapter.getStaticInstance(null).HighlightItem(currentItemIndex); if (currentItemIndex == theList.getAdapter().getItemCount() -1){ refreshCurrentSong(); return; } else if (currentItemIndex == 1 && albumStack.getAdapter().getCount() > 0) { albumStack.setVisibility(View.VISIBLE); imageView.setVisibility(View.GONE); return; } albumStack.setVisibility(View.GONE); imageView.setVisibility(View.VISIBLE); imageView.destroyDrawingCache(); imageView.setImageBitmap(BitmapFactory.decodeResource(getResources(),menuIcons[currentItemIndex])); } @Override public void onPreviousTick() { if(currentItemIndex < 1){ return; } if (currentItemIndex == theList.getAdapter().getItemCount()-1) { rightPanelContent.setVisibility(View.VISIBLE); nowPlayingPage.setVisibility(View.GONE); } currentItemIndex -= 1; if (currentItemIndex == 1 && albumStack.getAdapter().getCount() > 1) { albumStack.setVisibility(View.VISIBLE); imageView.setVisibility(View.GONE); } else { albumStack.setVisibility(View.GONE); imageView.setVisibility(View.VISIBLE); } theList.requestFocus(); if(currentItemIndex <= ((LinearLayoutManager)theList.getLayoutManager()).findFirstCompletelyVisibleItemPosition()) theList.smoothScrollToPosition(currentItemIndex); MenuAdapter.getStaticInstance(null).HighlightItem(currentItemIndex); imageView.destroyDrawingCache(); imageView.setImageBitmap(BitmapFactory.decodeResource(getResources(), menuIcons[currentItemIndex])); } @Override public SelectionDetail getCurrentSelection(){ SelectionDetail ret = new SelectionDetail(); ret.setMenuType(ret.MENU_TPYE_MAIN); ret.setDataType(ret.DATA_TYPE_STRING); ret.setData((((MenuAdapter.MainMenuAdapter)theList.getAdapter()).getItem(currentItemIndex)).menuType); return ret; } public void refreshCurrentSong() { rightPanelContent.setVisibility(View.GONE); nowPlayingPage.setVisibility(View.VISIBLE); PlayerServiceAIDL playerService = ((MainActivity) getActivity()).playerService; if (playerService == null || dumper.getCurrentSong() == null){ ((TextView) nowPlayingPage.findViewById(R.id.id_mainmenu_nowplaying_artist)).setText(R.string.nothing); ((TextView) nowPlayingPage.findViewById(R.id.id_mainmenu_nowplaying_title)).setText(R.string.nobody); ((ImageView) nowPlayingPage.findViewById(R.id.id_now_playing_cover)).setImageResource(R.drawable.album); return; } SongBean song = dumper.getCurrentSong(); npArtist.setText(song.getArtist()); npTitle.setText(song.getTitle()); ImageView currentCover = (ImageView) nowPlayingPage.findViewById(R.id.id_now_playing_cover); String img = MediaLibrary.getStaticInstance(nowPlayingPage.getContext()).getCoverUriByAlbumId(song.getAlbumId()); Picasso.with(getActivity()) .load(Uri.parse(img)).fit().centerInside() .config(Bitmap.Config.RGB_565) .placeholder(R.drawable.album) .error(R.drawable.album) .into(currentCover); } public void refreshCurrentSongIfNeeded () { if (currentItemIndex == theList.getAdapter().getItemCount() -1) { refreshCurrentSong(); } } @NonNull @Override public View getLeftPanel() { return leftPanel; } @NonNull @Override public View getRightPanel() { return rightPanel; } public void loadTheme() { Theme theme = ThemeManager.getInstance(getActivity().getApplicationContext()) .loadCurrentTheme(); npArtist.setTextColor(theme.getTextColor()); npTitle.setTextColor(theme.getTextColor()); } }