package cn.qylk;
import android.app.ActionBar;
import android.app.ActionBar.Tab;
import android.app.ActionBar.TabListener;
import android.app.Activity;
import android.app.Fragment;
import android.app.FragmentTransaction;
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.Bitmap;
import android.os.Bundle;
import android.os.IBinder;
import android.view.ActionMode;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.TextView;
import cn.qylk.app.APP;
import cn.qylk.app.IPlayList.ListType;
import cn.qylk.app.ListTypeInfo;
import cn.qylk.app.MyAction;
import cn.qylk.app.Tasks;
import cn.qylk.app.Tasks.onPostPic;
import cn.qylk.app.TrackInfo;
import cn.qylk.fragment.Fragment_ListCategory;
import cn.qylk.fragment.Fragment_ListFragmentBase;
import cn.qylk.fragment.Fragment_PlayList;
import cn.qylk.fragment.Fragment_VideoList;
import cn.qylk.log.CrashHandler;
import cn.qylk.service.LocalService;
import cn.qylk.utils.SendAction;
import cn.qylk.utils.SendAction.ServiceControl;
/**
* @author qylk2012<br>
* all rights resolved
*/
public class ListUI extends Activity implements OnClickListener, onPostPic,
TabListener {
private class AnActionModeOfEpicProportions implements ActionMode.Callback {
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
mode.finish();
return true;
}
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
menu.add("Search").setActionView(R.layout.edittext)
.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
return true;
}
@Override
public void onDestroyActionMode(ActionMode mode) {
}
@Override
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
return true;
}
}
public static LocalService Service;
static {
System.loadLibrary("tagjni");// 加载JNI链接库,jni文件夹下有C源代码及make文件参考
}
private boolean isVisible;
private ProgressBar pbar;
private ImageView playorpause, next, icon;
private BroadcastReceiver PosReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if (isVisible)
pbar.setProgress(intent.getExtras().getInt("pos"));
}
};
private BroadcastReceiver Receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (action.equals(MyAction.INTENT_UI_UPDATE)) {// 接收来自service的歌曲基本信息
UpdateUI();
} else if (action.equals(MyAction.INTENT_STATUS)) {// 接收播放状态消息
if (Service != null)
playorpause
.setImageResource(Service.IsPlaying() ? R.drawable.btn_pause_bg
: R.drawable.btn_play_bg);
} else if (action.equals(MyAction.INTENT_EXIT)) {
Exit(true);
}
}
};
private ServiceConnection ServiceConnector = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
Service = ((LocalService.MyBinder) service).getService();
Service.DesktopLrc(false);
UpdateUI();
}
@Override
public void onServiceDisconnected(ComponentName name) {
}
};
private TextView title, artist;
/**
* 退出界面
*
* @param withservice
* 是否销毁Service
*/
private void Exit(boolean withservice) {
unregisterReceiver(PosReceiver);
unregisterReceiver(Receiver);
if (withservice)
stopService(new Intent(MyAction.INTENT_START_SERVICE));
if (APP.Config.desklrc)
Service.DesktopLrc(true);
unbindService(ServiceConnector);// 解绑定
Service = null;
finish();
}
@Override
public void onBackPressed() {
if (getFragmentManager().getBackStackEntryCount() == 0) {// 根fragment
Exit(!Service.IsPlaying());
}
super.onBackPressed();
}
@Override
public void onClick(View v) {// 底部播放控制条
switch (v.getId()) {
case R.id.stplay:// 播放
SendAction.SendControlMsg(ServiceControl.PAUSE_CONTINE);
break;
case R.id.stnext:// 下一曲
SendAction.SendControlMsg(ServiceControl.NEXT);
break;
case R.id.sticon:// 进入播放界面
Intent intent = new Intent(this, MainActivity.class);
startActivity(intent);
overridePendingTransition(R.anim.slide_in_buttom,
R.anim.slide_out_buttom);
break;
default:
break;
}
}
@Override
public void onCreate(Bundle savedInstanceState) {
setTheme(android.R.style.Theme_Holo);
super.onCreate(savedInstanceState);
CrashHandler.GetInstance().init();// 注册异常捕获
setContentView(R.layout.listui);
ActionBar actionbar = getActionBar();
actionbar.setDisplayShowHomeEnabled(false);// 不显示主界面按钮
actionbar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
actionbar.setDisplayShowTitleEnabled(false);// 不显示标题
Tab tab = actionbar.newTab();
tab.setText("音乐库");
tab.setTag(Fragment_ListCategory.class);
tab.setTabListener(this);
actionbar.addTab(tab, true);
Tab tab2 = actionbar.newTab();
tab2.setText("视频库");
tab2.setTag(Fragment_VideoList.class);
tab2.setTabListener(this);
actionbar.addTab(tab2);
playorpause = (ImageView) findViewById(R.id.stplay);
next = (ImageView) findViewById(R.id.stnext);
icon = (ImageView) findViewById(R.id.sticon);
title = (TextView) findViewById(R.id.sttitle);
artist = (TextView) findViewById(R.id.startist);
pbar = (ProgressBar) findViewById(R.id.pbar);
playorpause.setOnClickListener(this);
icon.setOnClickListener(this);
next.setOnClickListener(this);
IntentFilter filter = new IntentFilter();
filter.addAction(MyAction.INTENT_STATUS);// 过滤器设置
filter.addAction(MyAction.INTENT_UI_UPDATE);
filter.addAction(MyAction.INTENT_EXIT);
registerReceiver(Receiver, filter);// 注册
filter = new IntentFilter();
filter.addAction(MyAction.INTENT_POSITION);// 过滤器设置
registerReceiver(PosReceiver, filter);// 注册
startService(new Intent(MyAction.INTENT_START_SERVICE));
bindService(new Intent(MyAction.INTENT_START_SERVICE),
ServiceConnector, Context.BIND_AUTO_CREATE); // 绑定后台服务
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
menu.add("menu");
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onMenuOpened(int featureId, Menu menu) {
OpenSearch();
return false;
}
@Override
protected void onPause() {
isVisible = false;
super.onPause();
}
@Override
public void onPicGot(Bitmap pic) {
if (pic == null)// 底部艺术家小图标
icon.setImageResource(R.drawable.default_icon);
else
icon.setImageBitmap(pic);
}
@Override
protected void onResume() {
isVisible = true;
UpdateUI();
super.onResume();
}
@Override
public void onTabReselected(Tab tab, FragmentTransaction ft) {
// TODO Auto-generated method stub
}
@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
int n = getFragmentManager().getBackStackEntryCount();
for (int i = 0; i < n; i++)
getFragmentManager().popBackStack();
Fragment fragment = Fragment.instantiate(this,
((Class<?>) tab.getTag()).getName(), null);
ft.replace(R.id.realtabcontent, fragment, tab.getTag().toString());
}
@Override
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
// TODO Auto-generated method stub
}
public void OpenSearch() {
FragmentTransaction fragmentTransaction = getFragmentManager()
.beginTransaction();
fragmentTransaction
.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
fragmentTransaction.replace(R.id.realtabcontent, new Fragment_PlayList(
new ListTypeInfo(ListType.SEARCH, 0, "?")));
fragmentTransaction.addToBackStack(null);// 无tag
fragmentTransaction.commit();
startActionMode(new AnActionModeOfEpicProportions());
}
private void UpdateUI() {
if (!isVisible || Service == null)
return;
TrackInfo track = APP.list.getTrackEntity();
pbar.setMax(track.duration);
title.setText(track.title);// 标题
artist.setText(track.artist);// 艺术家
playorpause
.setImageResource(Service.IsPlaying() ? R.drawable.btn_pause_bg
: R.drawable.btn_play_bg);
Tasks.startPicTask(ListUI.this, true);
Fragment plist = getFragmentManager().findFragmentByTag("list");
if (plist instanceof Fragment_ListFragmentBase)
((Fragment_ListFragmentBase) plist).updateList();
}
}