package me.wcy.music.activity;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.IBinder;
import android.text.TextUtils;
import android.widget.ImageView;
import android.widget.TextView;
import java.io.File;
import java.util.Calendar;
import me.wcy.music.R;
import me.wcy.music.application.AppCache;
import me.wcy.music.http.HttpCallback;
import me.wcy.music.http.HttpClient;
import me.wcy.music.model.Splash;
import me.wcy.music.service.PlayService;
import me.wcy.music.utils.FileUtils;
import me.wcy.music.utils.Preferences;
import me.wcy.music.utils.ToastUtils;
import me.wcy.music.utils.binding.Bind;
import me.wcy.music.utils.permission.PermissionReq;
import me.wcy.music.utils.permission.PermissionResult;
import me.wcy.music.utils.permission.Permissions;
public class SplashActivity extends BaseActivity {
private static final String SPLASH_FILE_NAME = "splash";
@Bind(R.id.iv_splash)
private ImageView ivSplash;
@Bind(R.id.tv_copyright)
private TextView tvCopyright;
private ServiceConnection mPlayServiceConnection;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_splash);
int year = Calendar.getInstance().get(Calendar.YEAR);
tvCopyright.setText(getString(R.string.copyright, year));
checkService();
}
private void checkService() {
if (AppCache.getPlayService() == null) {
startService();
showSplash();
updateSplash();
mHandler.postDelayed(new Runnable() {
@Override
public void run() {
bindService();
}
}, 1000);
} else {
startMusicActivity();
finish();
}
}
private void startService() {
Intent intent = new Intent(this, PlayService.class);
startService(intent);
}
private void bindService() {
Intent intent = new Intent();
intent.setClass(this, PlayService.class);
mPlayServiceConnection = new PlayServiceConnection();
bindService(intent, mPlayServiceConnection, Context.BIND_AUTO_CREATE);
}
private class PlayServiceConnection implements ServiceConnection {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
final PlayService playService = ((PlayService.PlayBinder) service).getService();
AppCache.setPlayService(playService);
PermissionReq.with(SplashActivity.this)
.permissions(Permissions.STORAGE)
.result(new PermissionResult() {
@Override
public void onGranted() {
scanMusic(playService);
}
@Override
public void onDenied() {
ToastUtils.show(getString(R.string.no_permission, Permissions.STORAGE_DESC, "扫描本地歌曲"));
finish();
playService.stop();
}
})
.request();
}
@Override
public void onServiceDisconnected(ComponentName name) {
}
}
private void scanMusic(final PlayService playService) {
new AsyncTask<Void, Void, Void>() {
@Override
protected Void doInBackground(Void... params) {
playService.updateMusicList();
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
startMusicActivity();
finish();
}
}.execute();
}
private void showSplash() {
File splashImg = new File(FileUtils.getSplashDir(this), SPLASH_FILE_NAME);
if (splashImg.exists()) {
Bitmap bitmap = BitmapFactory.decodeFile(splashImg.getPath());
ivSplash.setImageBitmap(bitmap);
}
}
private void updateSplash() {
HttpClient.getSplash(new HttpCallback<Splash>() {
@Override
public void onSuccess(Splash response) {
if (response == null || TextUtils.isEmpty(response.getUrl())) {
return;
}
final String url = response.getUrl();
String lastImgUrl = Preferences.getSplashUrl();
if (TextUtils.equals(lastImgUrl, url)) {
return;
}
HttpClient.downloadFile(url, FileUtils.getSplashDir(AppCache.getContext()), SPLASH_FILE_NAME,
new HttpCallback<File>() {
@Override
public void onSuccess(File file) {
Preferences.saveSplashUrl(url);
}
@Override
public void onFail(Exception e) {
}
});
}
@Override
public void onFail(Exception e) {
}
});
}
private void startMusicActivity() {
Intent intent = new Intent();
intent.setClass(this, MusicActivity.class);
intent.putExtras(getIntent());
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(intent);
}
@Override
public void onBackPressed() {
}
@Override
protected void onDestroy() {
if (mPlayServiceConnection != null) {
unbindService(mPlayServiceConnection);
}
super.onDestroy();
}
}