package de.danoeh.antennapodsp.activity;
import android.content.Intent;
import android.media.AudioManager;
import android.os.Build;
import android.os.Bundle;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.support.v4.view.WindowCompat;
import android.support.v7.app.ActionBar;
import android.support.v7.app.ActionBarActivity;
import android.util.Log;
import android.view.*;
import com.sothree.slidinguppanel.SlidingUpPanelLayout;
import de.danoeh.antennapodsp.AppConfig;
import de.danoeh.antennapodsp.R;
import de.danoeh.antennapodsp.SPAUtil;
import de.danoeh.antennapodsp.feed.EventDistributor;
import de.danoeh.antennapodsp.fragment.EpisodesFragment;
import de.danoeh.antennapodsp.fragment.ExternalPlayerFragment;
import de.danoeh.antennapodsp.preferences.UserPreferences;
import de.danoeh.antennapodsp.service.download.DownloadService;
import de.danoeh.antennapodsp.storage.DBTasks;
import de.danoeh.antennapodsp.storage.DownloadRequester;
import de.danoeh.antennapodsp.util.StorageUtils;
/**
* The activity that is shown when the user launches the app.
*/
public class MainActivity extends ActionBarActivity {
private static final String TAG = "MainActivity";
public static final String ARG_FEED_ID = "feedID";
private static final String SAVED_STATE_ACTION_BAR_HIDDEN = "actionbar_hidden";
private static final int EVENTS = EventDistributor.DOWNLOAD_HANDLED
| EventDistributor.DOWNLOAD_QUEUED;
private SlidingUpPanelLayout slidingUpPanelLayout;
private ExternalPlayerFragment externalPlayerFragment;
@Override
public void onCreate(Bundle savedInstanceState) {
setTheme(UserPreferences.getTheme());
super.onCreate(savedInstanceState);
StorageUtils.checkStorageAvailability(this);
requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
supportRequestWindowFeature(WindowCompat.FEATURE_ACTION_BAR_OVERLAY);
getSupportActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
getSupportActionBar().setDisplayShowHomeEnabled(true);
getSupportActionBar().setCustomView(R.layout.abs_layout);
if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.GINGERBREAD_MR1) {
getSupportActionBar().setBackgroundDrawable(getResources().getDrawable(R.color.actionbar_gray));
}
setContentView(R.layout.main);
slidingUpPanelLayout = (SlidingUpPanelLayout) findViewById(R.id.sliding_layout);
slidingUpPanelLayout.setPanelSlideListener(panelSlideListener);
slidingUpPanelLayout.setShadowDrawable(getResources().getDrawable(com.sothree.slidinguppanel.library.R.drawable.above_shadow));
setVolumeControlStream(AudioManager.STREAM_MUSIC);
int playerInitialState = ExternalPlayerFragment.ARG_INIT_ANCHORED;
if (savedInstanceState != null && savedInstanceState.getBoolean(SAVED_STATE_ACTION_BAR_HIDDEN)) {
getSupportActionBar().hide();
slidingUpPanelLayout.expandPane();
playerInitialState = ExternalPlayerFragment.ARG_INIT_EPXANDED;
}
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fT = fragmentManager.beginTransaction();
EpisodesFragment epf = (EpisodesFragment) fragmentManager.findFragmentById(R.id.main_view);
if (epf == null) {
long feedID = getIntent().getLongExtra(ARG_FEED_ID, 1L);
epf = EpisodesFragment.newInstance(feedID);
}
fT.replace(R.id.main_view, epf);
externalPlayerFragment = ExternalPlayerFragment.newInstance(playerInitialState);
fT.replace(R.id.player_view, externalPlayerFragment);
fT.commit();
slidingUpPanelLayout.post(new Runnable() {
@Override
public void run() {
slidingUpPanelLayout.hidePane();
}
});
SPAUtil.askForPodcatcherInstallation(this);
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putBoolean(SAVED_STATE_ACTION_BAR_HIDDEN, !getSupportActionBar().isShowing());
}
@Override
protected void onPause() {
super.onPause();
EventDistributor.getInstance().unregister(contentUpdate);
}
@Override
protected void onResume() {
super.onResume();
StorageUtils.checkStorageAvailability(this);
updateProgressBarVisibility();
EventDistributor.getInstance().register(contentUpdate);
}
private EventDistributor.EventListener contentUpdate = new EventDistributor.EventListener() {
@Override
public void update(EventDistributor eventDistributor, Integer arg) {
if ((EVENTS & arg) != 0) {
if (AppConfig.DEBUG)
Log.d(TAG, "Received contentUpdate Intent.");
updateProgressBarVisibility();
}
}
};
private void updateProgressBarVisibility() {
if (DownloadService.isRunning
&& DownloadRequester.getInstance().isDownloadingFeeds()) {
setSupportProgressBarIndeterminateVisibility(true);
} else {
setSupportProgressBarIndeterminateVisibility(false);
}
supportInvalidateOptionsMenu();
}
private SlidingUpPanelLayout.PanelSlideListener panelSlideListener = new SlidingUpPanelLayout.PanelSlideListener() {
@Override
public void onPanelSlide(View panel, float slideOffset) {
if (slideOffset < 0.2) {
if (getSupportActionBar().isShowing()) {
getSupportActionBar().hide();
}
} else {
if (!getSupportActionBar().isShowing()) {
getSupportActionBar().show();
}
}
}
@Override
public void onPanelCollapsed(View panel) {
externalPlayerFragment.setFragmentState(ExternalPlayerFragment.FragmentState.ANCHORED);
slidingUpPanelLayout.setDragView(externalPlayerFragment.getExpandView());
getSupportActionBar().show();
}
@Override
public void onPanelExpanded(View panel) {
externalPlayerFragment.setFragmentState(ExternalPlayerFragment.FragmentState.EXPANDED);
slidingUpPanelLayout.setDragView(externalPlayerFragment.getCollapseView());
getSupportActionBar().hide();
}
@Override
public void onPanelAnchored(View panel) {
}
};
@Override
public void onBackPressed() {
if (slidingUpPanelLayout.isExpanded()) {
slidingUpPanelLayout.collapsePane();
} else {
super.onBackPressed();
}
}
public void onPlayerFragmentCreated(ExternalPlayerFragment fragment, ExternalPlayerFragment.FragmentState fragmentState) {
if (fragmentState == ExternalPlayerFragment.FragmentState.EXPANDED) {
slidingUpPanelLayout.setDragView(fragment.getCollapseView());
} else {
slidingUpPanelLayout.setDragView(fragment.getExpandView());
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
super.onPrepareOptionsMenu(menu);
MenuItem refreshAll = menu.findItem(R.id.all_feed_refresh);
if (DownloadService.isRunning
&& DownloadRequester.getInstance().isDownloadingFeeds()) {
refreshAll.setVisible(false);
} else {
refreshAll.setVisible(true);
}
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.all_feed_refresh:
DBTasks.refreshAllFeeds(this, null);
return true;
case R.id.about_item:
startActivity(new Intent(this, AboutActivity.class));
return true;
default:
return super.onOptionsItemSelected(item);
}
}
public void resetPlayer() {
slidingUpPanelLayout.post(new Runnable() {
@Override
public void run() {
slidingUpPanelLayout.collapsePane();
slidingUpPanelLayout.hidePane();
}
});
}
public void openPlayer(final ExternalPlayerFragment.FragmentState state) {
slidingUpPanelLayout.showPane();
slidingUpPanelLayout.post(new Runnable() {
@Override
public void run() {
if (state == ExternalPlayerFragment.FragmentState.ANCHORED) {
slidingUpPanelLayout.collapsePane();
} else if (state == ExternalPlayerFragment.FragmentState.EXPANDED) {
slidingUpPanelLayout.expandPane();
}
}
});
}
}