package io.hefuyi.listener.ui.activity;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.ServiceConnection;
import android.graphics.Color;
import android.os.AsyncTask;
import android.os.Build;
import android.os.Bundle;
import android.os.IBinder;
import android.support.annotation.Nullable;
import android.support.v4.app.FragmentManager;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Toast;
import com.afollestad.appthemeengine.ATEActivity;
import java.lang.ref.WeakReference;
import io.hefuyi.listener.IListenerService;
import io.hefuyi.listener.MusicPlayer;
import io.hefuyi.listener.MusicService;
import io.hefuyi.listener.R;
import io.hefuyi.listener.RxBus;
import io.hefuyi.listener.event.MetaChangedEvent;
import io.hefuyi.listener.ui.fragment.QuickControlsFragment;
import io.hefuyi.listener.util.ATEUtil;
import io.hefuyi.listener.util.ListenerUtil;
import io.hefuyi.listener.util.NavigationUtil;
import static io.hefuyi.listener.MusicPlayer.mService;
/**
* Created by hefuyi on 2016/11/7.
*/
public class BaseActivity extends ATEActivity implements ServiceConnection {
private MusicPlayer.ServiceToken mToken;
private PlaybackStatus mPlaybackStatus;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mToken = MusicPlayer.bindToService(this, this);
mPlaybackStatus = new PlaybackStatus(this);
if (Build.VERSION.SDK_INT >= 21) {
View decorView = getWindow().getDecorView();
int option = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_LAYOUT_STABLE;
decorView.setSystemUiVisibility(option);
getWindow().setStatusBarColor(Color.TRANSPARENT);
}
}
@Override
protected void onStart() {
super.onStart();
final IntentFilter filter = new IntentFilter();
// Play and pause changes
filter.addAction(MusicService.PLAYSTATE_CHANGED);
// Track changes
filter.addAction(MusicService.META_CHANGED);
// Update a list, probably the playlist fragment's
filter.addAction(MusicService.REFRESH);
// If a playlist has changed, notify us
filter.addAction(MusicService.PLAYLIST_CHANGED);
// If there is an error playing a track
filter.addAction(MusicService.TRACK_ERROR);
registerReceiver(mPlaybackStatus, filter);
}
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
mService = IListenerService.Stub.asInterface(service);
}
@Override
public void onServiceDisconnected(ComponentName name) {
mService = null;
}
@Override
protected void onDestroy() {
super.onDestroy();
// Unbind from the service
if (mToken != null) {
MusicPlayer.unbindFromService(mToken);
mToken = null;
}
try {
unregisterReceiver(mPlaybackStatus);
} catch (final Throwable e) {
e.printStackTrace();
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main, menu);
if (!ListenerUtil.hasEffectsPanel(BaseActivity.this)) {
menu.removeItem(R.id.action_equalizer);
}
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
super.onBackPressed();
return true;
case R.id.action_settings:
NavigationUtil.navigateToSettings(this);
return true;
case R.id.action_equalizer:
NavigationUtil.navigateToEqualizer(this);
return true;
}
return super.onOptionsItemSelected(item);
}
@Nullable
@Override
public String getATEKey() {
return ATEUtil.getATEKey(this);
}
private final static class PlaybackStatus extends BroadcastReceiver {
private final WeakReference<BaseActivity> mReference;
public PlaybackStatus(final BaseActivity activity) {
mReference = new WeakReference<BaseActivity>(activity);
}
@Override
public void onReceive(final Context context, final Intent intent) {
final String action = intent.getAction();
BaseActivity baseActivity = mReference.get();
if (baseActivity != null) {
if (action.equals(MusicService.META_CHANGED)) {
MetaChangedEvent metaChangedEvent = new MetaChangedEvent(MusicPlayer.getCurrentAudioId(),
MusicPlayer.getTrackName(), MusicPlayer.getArtistName());
RxBus.getInstance().post(metaChangedEvent);
} else if (action.equals(MusicService.TRACK_ERROR)) {
final String errorMsg = context.getString(R.string.error_playing_track);
Toast.makeText(baseActivity, errorMsg, Toast.LENGTH_SHORT).show();
}
}
}
}
class initQuickControls extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... params) {
QuickControlsFragment fragment1 = new QuickControlsFragment();
FragmentManager fragmentManager1 = getSupportFragmentManager();
fragmentManager1.beginTransaction()
.replace(R.id.quickcontrols_container, fragment1).commitAllowingStateLoss();
return "Executed";
}
@Override
protected void onPostExecute(String result) {
}
@Override
protected void onPreExecute() {
}
}
}