package com.architjn.acjmusicplayer.ui.layouts.activity; import android.content.Intent; import android.graphics.Color; import android.graphics.PorterDuff; import android.os.Bundle; import android.os.Handler; import android.speech.RecognizerIntent; import android.support.annotation.AnimRes; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.design.widget.NavigationView; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.view.GravityCompat; import android.support.v4.widget.DrawerLayout; import android.support.v7.app.ActionBarDrawerToggle; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; import android.text.TextUtils; import android.view.KeyEvent; import android.view.Menu; import android.view.MenuItem; import android.view.View; import com.architjn.acjmusicplayer.R; import com.architjn.acjmusicplayer.service.PlayerService; import com.architjn.acjmusicplayer.ui.layouts.fragments.AlbumsListFragment; import com.architjn.acjmusicplayer.ui.layouts.fragments.ArtistListFragment; import com.architjn.acjmusicplayer.ui.layouts.fragments.PlayerFragment; import com.architjn.acjmusicplayer.ui.layouts.fragments.PlaylistListFragment; import com.architjn.acjmusicplayer.ui.layouts.fragments.SearchViewFragment; import com.architjn.acjmusicplayer.ui.layouts.fragments.SongsListFragment; import com.architjn.acjmusicplayer.ui.layouts.fragments.UpNextFragment; import com.architjn.acjmusicplayer.ui.widget.slidinguppanel.SlidingUpPanelLayout; import com.architjn.acjmusicplayer.utils.adapters.AlbumListAdapter; import com.crashlytics.android.Crashlytics; import com.lapism.searchview.SearchView; import java.util.List; import io.fabric.sdk.android.Fabric; /** * Created by architjn on 27/11/15. */ public class MainActivity extends AppCompatActivity { private FragmentName currentFragment; private DrawerLayout drawerLayout; private Toolbar toolbar; private int currentItem = -1; private SongsListFragment songFragment; private AlbumsListFragment albumFragment; private ArtistListFragment artistFragment; private PlaylistListFragment playlistFragment; private SearchViewFragment searchViewFragment; private SlidingUpPanelLayout slidingUpPanelLayout; private PlayerFragment playerFragment; private UpNextFragment upNextFragment; private SearchView searchView; private View navigationHeader; public static boolean activityRuning = false; public FragmentName lastExpanded; public int lastItem; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { setTheme(R.style.AppTheme_Main); super.onCreate(savedInstanceState); //Start music player service startService(new Intent(this, PlayerService.class)); Fabric.with(this, new Crashlytics()); setTheView(); setAlbumFragment(); activityRuning = true; } private void setAlbumFragment() { albumFragment = new AlbumsListFragment(); fragmentSwitcher(albumFragment, 1, FragmentName.Albums, android.R.anim.fade_in, android.R.anim.fade_out); } private void setTheView() { //set Content view setContentView(R.layout.activity_main); toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); if (getSupportActionBar() != null) getSupportActionBar().setDisplayHomeAsUpEnabled(true); initDrawer(); init(); sendBroadcast(new Intent(PlayerService.ACTION_GET_SONG)); } private void init() { slidingUpPanelLayout = (SlidingUpPanelLayout) findViewById(R.id.sliding_layout); initSmallPlayer(); new Handler().postDelayed(new Runnable() { @Override public void run() { if (getIntent().getBooleanExtra("openPanel", false)) { slidingUpPanelLayout.expandPanel(); } } }, 2000); initSearch(); } private void initSearch() { searchView = (SearchView) findViewById(R.id.search_view); searchView.setVoiceSearch(true); searchViewFragment = new SearchViewFragment(); searchViewFragment.setSearchView(searchView); searchView.setOnSearchViewListener(new SearchView.SearchViewListener() { @Override public void onSearchViewShown() { if (currentFragment != FragmentName.Search) { lastExpanded = currentFragment; lastItem = currentItem; currentFragment = FragmentName.Search; } fragmentSwitcher(searchViewFragment, -1, FragmentName.Search, android.R.anim.fade_in, android.R.anim.fade_out); } @Override public void onSearchViewClosed() { } }); } private void initDrawer() { drawerLayout = (DrawerLayout) findViewById(R.id.drawerLayout); NavigationView navigationView = (NavigationView) findViewById(R.id.main_navigationview); navigationHeader = navigationView.getHeaderView(0); navigationHeader.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if (slidingUpPanelLayout.isPanelHidden()) return; slidingUpPanelLayout.expandPanel(); drawerLayout.closeDrawer(GravityCompat.START); } }); navigationView.setCheckedItem(R.id.navigation_albums); navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() { @Override public boolean onNavigationItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.navigation_songs: if (songFragment == null) songFragment = new SongsListFragment(); fragmentSwitcher(songFragment, item.getItemId(), FragmentName.Songs, android.R.anim.slide_in_left, android.R.anim.slide_out_right); closeDrawer(); break; case R.id.navigation_albums: if (albumFragment == null) albumFragment = new AlbumsListFragment(); fragmentSwitcher(albumFragment, item.getItemId(), FragmentName.Albums, android.R.anim.slide_in_left, android.R.anim.slide_out_right); closeDrawer(); break; case R.id.navigation_artist: if (artistFragment == null) artistFragment = new ArtistListFragment(); fragmentSwitcher(artistFragment, item.getItemId(), FragmentName.Artists, android.R.anim.slide_in_left, android.R.anim.slide_out_right); closeDrawer(); break; case R.id.navigation_playlist: if (playlistFragment == null) playlistFragment = new PlaylistListFragment(); fragmentSwitcher(playlistFragment, item.getItemId(), FragmentName.Playlists, android.R.anim.slide_in_left, android.R.anim.slide_out_right); closeDrawer(); break; } return true; } }); ActionBarDrawerToggle drawerToggle = new ActionBarDrawerToggle(this, drawerLayout, toolbar, 0, 0) { @Override public void onDrawerClosed(View drawerView) { super.onDrawerClosed(drawerView); invalidateOptionsMenu(); syncState(); } @Override public void onDrawerOpened(View drawerView) { super.onDrawerOpened(drawerView); invalidateOptionsMenu(); syncState(); } }; drawerLayout.setDrawerListener(drawerToggle); drawerToggle.syncState(); } private void closeDrawer() { if (slidingUpPanelLayout.isPanelExpanded()) slidingUpPanelLayout.collapsePanel(); } @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { try { albumFragment.onRequestPermissionsResult(requestCode, permissions, grantResults); } catch (NullPointerException e) { e.printStackTrace(); } } @Override protected void onResume() { super.onResume(); if (albumFragment != null) { playerFragment.onResume(); } activityRuning = true; AlbumListAdapter.onceAnimated = false; } @Override protected void onPause() { super.onPause(); activityRuning = false; } public void fragmentSwitcher(Fragment fragment, int itemId, FragmentName fname, @AnimRes int animationEnter, @AnimRes int animationExit) { currentFragment = fname; if (currentItem == itemId) { // Don't allow re-selection of the currently active item return; } currentItem = itemId; if (getSupportActionBar() != null) getSupportActionBar().setTitle(String.valueOf(fname)); getSupportFragmentManager().beginTransaction() .setCustomAnimations(animationEnter, animationExit) .replace(R.id.main_fragment_holder, fragment) .commitAllowingStateLoss(); if (drawerLayout.isDrawerOpen(GravityCompat.START)) { final Handler handler = new Handler(); handler.postDelayed(new Runnable() { @Override public void run() { drawerLayout.closeDrawer(GravityCompat.START); } }, 200); } } @Override protected void onDestroy() { super.onDestroy(); activityRuning = false; } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main_menu, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.action_search: { searchView.showSearch(findViewById(R.id.action_search), true); return true; } default: return super.onOptionsItemSelected(item); } } private void initSmallPlayer() { playerFragment = new PlayerFragment(); upNextFragment = new UpNextFragment(); playerFragment.setUpNextFragment(upNextFragment); playerFragment.setNavigationHeader(navigationHeader); playerFragment.setSlidingUpPanelLayout(slidingUpPanelLayout); FragmentManager fragmentManager1 = getSupportFragmentManager(); fragmentManager1.beginTransaction() .replace(R.id.panel_holder, playerFragment).commitAllowingStateLoss(); } public void killActivity() { super.onBackPressed(); } public Fragment getFragmentFromName(FragmentName name) { switch (name) { case Songs: return songFragment; case Albums: return albumFragment; case Artists: return artistFragment; case Playlists: return playlistFragment; } return null; } public void setStatusBarColor(int color) { getWindow().setStatusBarColor(color); } @Override public void onBackPressed() { if (searchView.isSearchOpen()) { searchView.closeSearch(true); return; } if (slidingUpPanelLayout.isPanelExpanded()) { playerFragment.onBackPressed(); upNextFragment.onBackPressed(); return; } switch (currentFragment) { case Songs: songFragment.onBackPress(); break; case Albums: albumFragment.onBackPress(); break; case Artists: artistFragment.onBackPress(); break; case Playlists: playlistFragment.onBackPress(); break; case Search: searchViewFragment.onBackPressed(); break; } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == SearchView.SPEECH_REQUEST_CODE && resultCode == RESULT_OK) { List<String> matches = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS); if (matches != null && matches.size() > 0) { String searchWrd = matches.get(0); if (!TextUtils.isEmpty(searchWrd)) { searchView.setQuery(searchWrd, false); } } return; } super.onActivityResult(requestCode, resultCode, data); } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (event.getKeyCode() == KeyEvent.KEYCODE_BACK) { onBackPressed(); } if (playerFragment != null) return playerFragment.onKeyEvent(event); return super.onKeyDown(keyCode, event); } public enum FragmentName { Albums, Songs, Artists, Playlists, Search } }