package com.wm.remusic.activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.support.annotation.Nullable;
import android.util.Log;
import android.view.View;
import android.view.WindowManager;
import android.widget.ImageView;
import android.widget.TextView;
import com.facebook.drawee.backends.pipeline.Fresco;
import com.facebook.drawee.controller.BaseControllerListener;
import com.facebook.drawee.controller.ControllerListener;
import com.facebook.drawee.interfaces.DraweeController;
import com.facebook.drawee.view.SimpleDraweeView;
import com.facebook.imagepipeline.image.ImageInfo;
import com.facebook.imagepipeline.request.ImageRequest;
import com.facebook.imagepipeline.request.ImageRequestBuilder;
import com.wm.remusic.R;
import com.wm.remusic.handler.HandlerUtil;
import com.wm.remusic.info.MusicInfo;
import com.wm.remusic.lrc.DefaultLrcParser;
import com.wm.remusic.lrc.LrcRow;
import com.wm.remusic.provider.PlaylistsManager;
import com.wm.remusic.service.MediaService;
import com.wm.remusic.service.MusicPlayer;
import com.wm.remusic.uitl.IConstants;
import com.wm.remusic.widget.SildingFinishLayout;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Locale;
/**
* Created by wm on 2016/12/21.
*/
public class LockActivity extends LockBaseActivity implements View.OnClickListener{
private TextView mTime,mDate,mMusicName,mMusicArtsit,mLrc;
private ImageView pre,play,next,fav;
private Handler mHandler;
private SildingFinishLayout mView;
private SimpleDraweeView mBack;
private PlaylistsManager playlistsManager;
private boolean isFav;
private List<LrcRow> lrcRows;
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
Intent intent = new Intent();
intent.setAction(MediaService.LOCK_SCREEN);
sendBroadcast(intent);
super.onCreate(savedInstanceState);
this.getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN | WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN | WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS
);
this.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD | WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);
getWindow().getDecorView().setSystemUiVisibility(
View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION // hide nav
// bar
| View.SYSTEM_UI_FLAG_FULLSCREEN // hide status bar
| View.SYSTEM_UI_FLAG_IMMERSIVE);
playlistsManager = PlaylistsManager.getInstance(this);
setContentView(R.layout.activity_lock);
mTime = (TextView) findViewById(R.id.lock_time);
mDate = (TextView) findViewById(R.id.lock_date);
mMusicName = (TextView) findViewById(R.id.lock_music_name);
mMusicArtsit = (TextView) findViewById(R.id.lock_music_artsit);
mLrc = (TextView) findViewById(R.id.lock_music_lrc);
pre = (ImageView) findViewById(R.id.lock_music_pre);
play = (ImageView) findViewById(R.id.lock_music_play);
next = (ImageView) findViewById(R.id.lock_music_next);
fav = (ImageView) findViewById(R.id.lock_music_fav);
mView = (SildingFinishLayout) findViewById(R.id.lock_root);
mBack = (SimpleDraweeView) findViewById(R.id.lock_background);
mView.setOnSildingFinishListener(new SildingFinishLayout.OnSildingFinishListener() {
@Override
public void onSildingFinish() {
finish();
}
});
mView.setTouchView(getWindow().getDecorView());
mHandler = HandlerUtil.getInstance(this);
mHandler.post(updateRunnable);
pre.setOnClickListener(this);
play.setOnClickListener(this);
next.setOnClickListener(this);
fav.setOnClickListener(this);
}
@Override
protected void onUserLeaveHint() {
Log.d("lock","onUserLeaveHint");
super.onUserLeaveHint();
Intent intent = new Intent();
intent.setAction(MediaService.LOCK_SCREEN);
intent.putExtra("islock",false);
sendBroadcast(intent);
finish();
}
Runnable updateRunnable = new Runnable() {
@Override
public void run() {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("hh:mm-MM月dd日 E", Locale.CHINESE);
String date[] = simpleDateFormat.format(new Date()).split("-");
mTime.setText(date[0]);
mDate.setText(date[1]);
if(lrcRows != null){
int len = lrcRows.size() - 1;
for(int i = 0 ; i < len; i++){
// Log.e("lock",lrcRows.get(i).getTime() + " " + lrcRows.get(i).getContent());
if(MusicPlayer.position() >= lrcRows.get(i).getTime()){
mLrc.setText(lrcRows.get(i).getContent());
}
}
}else {
mLrc.setText(null);
}
mHandler.postDelayed(updateRunnable,300);
}
};
@Override
protected void onResume() {
super.onResume();
Log.e("lock"," on resume");
updateTrackInfo();
updateTrack();
}
@Override
protected void onPause() {
super.onPause();
Log.e("lock"," on pause");
}
@Override
protected void onStop() {
super.onStop();
Log.e("lock"," on stop");
}
@Override
protected void onDestroy() {
Intent intent = new Intent();
intent.setAction(MediaService.LOCK_SCREEN);
intent.putExtra("islock",false);
sendBroadcast(intent);
mHandler.removeCallbacks(updateRunnable);
super.onDestroy();
Log.e("lock"," on destroy");
}
@Override
public void onBackPressed() {
// do nothing
}
public void updateTrackInfo(){
mMusicName.setText(MusicPlayer.getTrackName());
mMusicArtsit.setText(MusicPlayer.getArtistName());
isFav = false;
long[] favlists = playlistsManager.getPlaylistIds(IConstants.FAV_PLAYLIST);
long currentid = MusicPlayer.getCurrentAudioId();
for(long i : favlists){
if(currentid == i){
isFav = true;
break;
}
}
updateFav(isFav);
if (MusicPlayer.isPlaying()) {
play.setImageResource(R.drawable.lock_btn_pause);
} else {
play.setImageResource(R.drawable.lock_btn_play);
}
}
private void updateFav(boolean b) {
if (b) {
fav.setImageResource(R.drawable.lock_btn_loved);
} else {
fav.setImageResource(R.drawable.lock_btn_love);
}
}
public void updateTrack(){
lrcRows = getLrcRows();
String url = MusicPlayer.getAlbumPath();
if (url == null) {
mBack.setImageURI(Uri.parse("res:/" + R.drawable.login_bg_night));
} else {
try {
ImageRequest request = ImageRequestBuilder.newBuilderWithSource(Uri.parse(url)).build();
DraweeController controller = Fresco.newDraweeControllerBuilder()
.setOldController(mBack.getController())
.setImageRequest(request)
.setControllerListener(controllerListener)
.build();
mBack.setController(controller);
} catch (Exception e) {
e.printStackTrace();
}
}
}
ControllerListener controllerListener = new BaseControllerListener<ImageInfo>() {
@Override
public void onFailure(String id, Throwable throwable) {
mBack.setImageURI(Uri.parse("res:/" + R.drawable.login_bg_night));
}
};
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.lock_music_pre:
MusicPlayer.previous(this,true);
break;
case R.id.lock_music_play:
MusicPlayer.playOrPause();
break;
case R.id.lock_music_next:
MusicPlayer.next();
break;
case R.id.lock_music_fav:
if (isFav) {
playlistsManager.removeItem(this, IConstants.FAV_PLAYLIST,
MusicPlayer.getCurrentAudioId());
fav.setImageResource(R.drawable.lock_btn_love);
isFav = false;
} else {
try {
MusicInfo info = MusicPlayer.getPlayinfos().get(MusicPlayer.getCurrentAudioId());
playlistsManager.insertMusic(this,IConstants.FAV_PLAYLIST,info);
} catch (Exception e) {
e.printStackTrace();
}
fav.setImageResource(R.drawable.lock_btn_loved);
isFav = true;
}
break;
}
}
private List<LrcRow> getLrcRows() {
List<LrcRow> rows = null;
InputStream is = null;
try {
is = new FileInputStream(Environment.getExternalStorageDirectory().getAbsolutePath() +
"/remusic/lrc/" + MusicPlayer.getCurrentAudioId());
} catch (FileNotFoundException e) {
e.printStackTrace();
} finally {
if (is == null) {
return null;
}
}
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String line;
StringBuilder sb = new StringBuilder();
try {
while ((line = br.readLine()) != null) {
sb.append(line + "\n");
}
rows = DefaultLrcParser.getIstance().getLrcRows(sb.toString());
} catch (IOException e) {
e.printStackTrace();
}
return rows;
}
}