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(); } }