package com.itap.voiceemoticon.activity;
import java.util.ArrayList;
import org.tadpole.view.ViewPager;
import org.tadpoleframework.app.AlertDialog;
import org.tadpoleframework.common.APNUtil;
import org.tadpoleframework.widget.SwitchButton;
import org.tadpoleframework.widget.adapter.AdapterCallback;
import android.app.Dialog;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v4.app.FragmentTransaction;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.RelativeLayout;
import android.widget.RelativeLayout.LayoutParams;
import android.widget.SeekBar;
import android.widget.TextView;
import android.widget.Toast;
import com.actionbarsherlock.app.ActionBar;
import com.actionbarsherlock.app.ActionBar.Tab;
import com.actionbarsherlock.app.SherlockFragmentActivity;
import com.actionbarsherlock.view.Menu;
import com.actionbarsherlock.view.MenuItem;
import com.itap.voiceemoticon.Feature;
import com.itap.voiceemoticon.MsgDef;
import com.itap.voiceemoticon.R;
import com.itap.voiceemoticon.VEApplication;
import com.itap.voiceemoticon.activity.fragment.BaseFragment;
import com.itap.voiceemoticon.activity.fragment.HotVoiceFragment;
import com.itap.voiceemoticon.activity.fragment.MyCollectFragment;
import com.itap.voiceemoticon.activity.fragment.SearchFragment;
import com.itap.voiceemoticon.activity.fragment.UserVoiceFragment;
import com.itap.voiceemoticon.activity.fragment.UserVoiceMakeDialog;
import com.itap.voiceemoticon.adapter.MyPagerAdapter;
import com.itap.voiceemoticon.adapter.VoiceAdapter;
import com.itap.voiceemoticon.api.Voice;
import com.itap.voiceemoticon.common.ConstValues;
import com.itap.voiceemoticon.media.MusicData;
import com.itap.voiceemoticon.media.MusicPlayer;
import com.itap.voiceemoticon.third.UmengEvent;
import com.itap.voiceemoticon.third.WXEntryActivity;
import com.itap.voiceemoticon.util.AndroidUtil;
import com.itap.voiceemoticon.util.MusicUtil;
import com.itap.voiceemoticon.weibo.WeiboLoginAcountManager;
import com.itap.voiceemoticon.weibo.TPAccountManager;
import com.itap.voiceemoticon.widget.MarqueeTextView;
import com.itap.voiceemoticon.widget.WeixinAlert;
import com.itap.voiceemoticon.widget.WeixinAlert.OnAlertSelectId;
import com.jeremyfeinstein.slidingmenu.lib.SlidingMenu;
import com.jeremyfeinstein.slidingmenu.lib.app.SlidingFragmentActivity;
import com.sina.weibo.sdk.api.BaseResponse;
import com.sina.weibo.sdk.api.IWeiboHandler;
import com.umeng.analytics.MobclickAgent;
import com.umeng.update.UmengUpdateAgent;
import com.umeng.update.UmengUpdateListener;
import com.umeng.update.UpdateResponse;
public class MainActivity extends SlidingFragmentActivity implements ActionBar.TabListener,
ViewPager.OnPageChangeListener, AdapterCallback<Voice>, IWeiboHandler.Response,
OnAlertSelectId, INotify {
public static void start(Context context, Message msg) {
System.out.println("start msg = " + msg);
Intent intent = new Intent();
intent.setClass(context, MainActivity.class);
intent.putExtra(ConstValues.INTENT_KEY_MESSAGE, msg);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK
| Intent.FLAG_ACTIVITY_SINGLE_TOP);
context.startActivity(intent);
}
/**
* MusicInfo update span
*/
private static final int UPDATE_TIME_TEXT_LOOP_SPAN = 500;
/**
* The serialization (saved instance state) Bundle key representing the
* current tab position.
*/
private static final String STATE_SELECTED_NAVIGATION_ITEM = "selected_navigation_item";
public MyCollectFragment myCollectVoiceFragment;
private Tab mTabUserVoice;
private Tab mTabHostVoice;
private Tab mTabMyCollection;
private Tab mTabSearch;
private Tab mTabAppRecommend;
private ImageView mBtnPlay;
private TextView mTextViewTime;
private MarqueeTextView mTextViewMusicTitle;
private SeekBar mSeekBarTime;
private ProgressBar mProgressBarPrepare;
private View mViewFooter;
private ViewPager mViewPager;
private Handler mHandler = new Handler();
private ArrayList<BaseFragment> mFragmentList = new ArrayList<BaseFragment>();
private BroadcastReceiver mMusicPlayerReceiver = new BroadcastReceiver() {
public void onReceive(Context context, Intent intent) {
Log.d(VEApplication.TAG, " onReceive intent action " + intent.getAction());
if (intent.getAction().equals(MusicPlayer.BROCAST_NAME)) {
final Bundle data = intent.getExtras();
final int state = data.getInt(MusicPlayer.KEY_STATE);
int brocastType = data.getInt(MusicPlayer.KEY_BROCAST_TYPE);
if (brocastType == MusicPlayer.BROCAST_TYPE_BUFFER_UPDATE) {
int percent = data.getInt(MusicPlayer.KEY_PERCENT);
mSeekBarTime.setSecondaryProgress(percent);
return;
}
final MusicData musicData = data.getParcelable(MusicPlayer.KEY_STATE_DATA);
mHandler.post(new Runnable() {
@Override
public void run() {
handleMusicPlayerIntent(state, musicData);
}
});
}
}
};
/**
* flag for preventing onTabSelected on onPageSelected cycle invoke . To
* avoid stackoverflow true meam must be prevent
*/
private boolean mFlagPreventCycleInvoke = true;
private void handleMusicPlayerIntent(int state, MusicData musicData) {
Log.d(VEApplication.TAG, "musicData = " + musicData);
switch (state) {
case MusicPlayer.STATE_PLAY_START:
Log.d(VEApplication.TAG, " STATE_PLAY_START");
MainActivity.this.onMusicPlayStart(musicData);
break;
case MusicPlayer.STATE_PLAY_PREPARING:
Log.d(VEApplication.TAG, " STATE_PLAY_PREPARING");
MainActivity.this.onMusicPreparing();
break;
case MusicPlayer.STATE_PLAY_COMPLETE:
Log.d(VEApplication.TAG, " STATE_PLAY_COMPLETE");
MainActivity.this.onMusicPlayStop();
onMusicTimeAndProgressUpdate(MusicUtil.TIME_TEXT_START, 0);
break;
case MusicPlayer.STATE_INVALID:
Log.d(VEApplication.TAG, "STATE_INVALID");
MainActivity.this.onMusicPlayStop();
break;
case MusicPlayer.STATE_PLAY_STOP:
Log.d(VEApplication.TAG, "STATE_PLAY_STOP");
MainActivity.this.onMusicPlayStop();
break;
default:
Log.d(VEApplication.TAG, " state = " + state);
break;
}
}
private void performUpdateMusicProgressLoop() {
MusicPlayer musicPlayer = VEApplication.getMusicPlayer(getApplicationContext());
int curPostion = musicPlayer.getCurrentPostion();
int duration = musicPlayer.getDuration();
String timeText = MusicUtil.getToTimeText(curPostion, duration);
int progress = MusicUtil.getProgress(curPostion, duration);
onMusicTimeAndProgressUpdate(timeText, progress);
if (musicPlayer.isPlaying()) {
mHandler.postDelayed(new Runnable() {
@Override
public void run() {
performUpdateMusicProgressLoop();
}
}, UPDATE_TIME_TEXT_LOOP_SPAN);
}
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
System.out.println("----->onNewIntent");
// VEApplication.sWeiboApi.responseListener(getIntent(), this);
handleIntent(intent);
}
private void onMusicPreparing() {
mProgressBarPrepare.setVisibility(View.VISIBLE);
mBtnPlay.setBackgroundResource(android.R.drawable.ic_media_pause);
}
private void onMusicPlayStart(MusicData musicData) {
mTextViewMusicTitle.setText(musicData.musicName);
mTextViewMusicTitle.startFor0();
mProgressBarPrepare.setVisibility(View.GONE);
performUpdateMusicProgressLoop();
}
private void onMusicTimeAndProgressUpdate(String timeText, int progress) {
mTextViewTime.setText(timeText);
mSeekBarTime.setProgress(progress);
}
private void onMusicPlayStop() {
Log.d(VEApplication.TAG, "onMusicPlayComplete");
mTextViewMusicTitle.clearAnimation();
mProgressBarPrepare.setVisibility(View.GONE);
mBtnPlay.setBackgroundResource(android.R.drawable.ic_media_play);
mTextViewMusicTitle.stopScroll();
}
@Override
public void onCreate(Bundle savedInstanceState) {
Log.d(VEApplication.TAG, "---->MainActivity onCreate call");
super.onCreate(savedInstanceState);
//-----> update
final Context mContext = this;
UmengUpdateAgent.update(this);
UmengUpdateAgent.setUpdateListener(new UmengUpdateListener() {
@Override
public void onUpdateReturned(int updateStatus, UpdateResponse updateInfo) {
switch (updateStatus) {
case 0: // has update
UmengUpdateAgent.showUpdateDialog(mContext, updateInfo);
break;
case 1: // has no update
break;
case 2: // none wifi
Toast.makeText(mContext, "没有wifi连接, 只在wifi下更新", Toast.LENGTH_SHORT).show();
break;
case 3: // time out
Toast.makeText(mContext, "超时", Toast.LENGTH_SHORT).show();
break;
}
}
});
//<----- update
MobclickAgent.onError(this); // umeng error handle
// NotificationCenter
NotificationCenter.getInstance().unregister(this, NotificationID.N_USERVOICE_MAKE);
NotificationCenter.getInstance().register(this, NotificationID.N_USERVOICE_MAKE);
// VEApplication.sWeiboApi.responseListener(getIntent(), this);
setContentView(R.layout.activity_main);
WXEntryActivity.isRunning = true;
// Set up the action bar to show tabs.
final ActionBar actionBar = getSupportActionBar();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
actionBar.setDisplayUseLogoEnabled(false);
// For each of the sections in the app, add a tab to the action bar.
mTabUserVoice = actionBar.newTab().setText(R.string.title_section_user_voice)
.setTabListener(this);
mTabHostVoice = actionBar.newTab().setText(R.string.title_section_hot_voice)
.setTabListener(this);
mTabMyCollection = actionBar.newTab().setText(R.string.title_section_my_collection)
.setTabListener(this);
mTabSearch = actionBar.newTab().setText(R.string.title_section_search).setTabListener(this);
mTabAppRecommend = actionBar.newTab().setText(R.string.title_section_app_recommend)
.setTabListener(this);
actionBar.addTab(mTabUserVoice);
actionBar.addTab(mTabHostVoice);
actionBar.addTab(mTabMyCollection);
actionBar.addTab(mTabSearch);
if (APNUtil.getMProxyType(this) == APNUtil.PROXYTYPE_WIFI) {
if (Feature.isYoumi()) {
actionBar.addTab(mTabAppRecommend);
}
}
RelativeLayout container = (RelativeLayout)this.findViewById(R.id.container);
mViewPager = new ViewPager(this);
mViewPager.setLayoutParams(new RelativeLayout.LayoutParams(LayoutParams.MATCH_PARENT,
LayoutParams.MATCH_PARENT));
container.addView(mViewPager);
ArrayList<BaseFragment> viewList = new ArrayList<BaseFragment>();
LayoutInflater inflater = LayoutInflater.from(this);
UserVoiceFragment userVoiceFragment = new UserVoiceFragment(this);
viewList.add(userVoiceFragment);
HotVoiceFragment hotVoiceFragment = new HotVoiceFragment(this);
viewList.add(hotVoiceFragment);
myCollectVoiceFragment = new MyCollectFragment(this);
viewList.add(myCollectVoiceFragment);
SearchFragment searchFragment = new SearchFragment(this);
viewList.add(searchFragment);
mViewPager.setAdapter(new MyPagerAdapter(viewList));
mViewPager.setOnPageChangeListener(this);
initMusicPlayBar();
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(MusicPlayer.BROCAST_NAME);
this.registerReceiver(mMusicPlayerReceiver, intentFilter);
if (false == APNUtil.isNetworkAvailable(this)) {
AlertDialog dialog = new AlertDialog(this);
dialog.setTitle("网络不可用");
dialog.setMsg("请打开网络并“下拉刷新”");
dialog.show();
}
actionBar.selectTab(mTabHostVoice);
TextView textView = new TextView(this);
actionBar.setCustomView(textView);
actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_HOME | ActionBar.DISPLAY_SHOW_CUSTOM);
setBehindContentView(R.layout.activity_about);
getSlidingMenu().setBehindOffsetRes(R.dimen.menu_left_margin_right);
getSlidingMenu().setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);
handleIntent(getIntent());
}
private void initMusicPlayBar() {
mBtnPlay = (ImageView)this.findViewById(R.id.btn_play);
mTextViewTime = (TextView)this.findViewById(R.id.text_view_time);
mSeekBarTime = (SeekBar)this.findViewById(R.id.seek_bar_time);
mProgressBarPrepare = (ProgressBar)this.findViewById(R.id.progress_bar_preparing);
mTextViewMusicTitle = (MarqueeTextView)this.findViewById(R.id.text_view_music_title_slide);
mViewFooter = (View)this.findViewById(R.id.footer);
mViewFooter.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final MusicPlayer musicPlayer = VEApplication
.getMusicPlayer(getApplicationContext());
if (musicPlayer.isPlaying()) {
musicPlayer.stopMusic();
} else {
musicPlayer.resume();
}
}
});
mSeekBarTime.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
final MusicPlayer musicPlayer = VEApplication
.getMusicPlayer(getApplicationContext());
musicPlayer.seek(seekBar.getProgress());
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
}
});
}
// ----------------------------------------------------------------
// ViewPager
// ----------------------------------------------------------------
@Override
public void onPageSelected(int position) {
AndroidUtil.hideInputMethod(getWindow().getDecorView());
if (true == mFlagPreventCycleInvoke) {
mFlagPreventCycleInvoke = false;
return;
}
final ActionBar actionBar = getSupportActionBar();
mFlagPreventCycleInvoke = true;
actionBar.selectTab(actionBar.getTabAt(position));
}
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageScrollStateChanged(int state) {
}
// ----------------------------------------------------------------
// State
// ----------------------------------------------------------------
@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
// Restore the previously serialized current tab position.
if (savedInstanceState.containsKey(STATE_SELECTED_NAVIGATION_ITEM)) {
getSupportActionBar().setSelectedNavigationItem(
savedInstanceState.getInt(STATE_SELECTED_NAVIGATION_ITEM));
}
}
@Override
public void onSaveInstanceState(Bundle outState) {
// Serialize the current tab position.
outState.putInt(STATE_SELECTED_NAVIGATION_ITEM, getSupportActionBar()
.getSelectedNavigationIndex());
}
// ----------------------------------------------------------------
// Tab
// ----------------------------------------------------------------
// private int mCount = 8;
@Override
public void onTabSelected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
if (true == mFlagPreventCycleInvoke) {
mFlagPreventCycleInvoke = false;
return;
}
// if (( (mCount++) % 10) == 0) {
// SpotManager.getInstance(this).showSpotAds(this);
// }
mFlagPreventCycleInvoke = true;
if (null == mViewPager || null == tab)
return;
for (int i = 0, len = getSupportActionBar().getTabCount(); i < len; i++) {
if (tab.equals(getSupportActionBar().getTabAt(i))) {
mViewPager.setCurrentItem(i);
break;
}
}
}
@Override
public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
}
@Override
public void onTabReselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
}
// ----------------------------------------------------------------
// Action Menu Items
// ----------------------------------------------------------------
private static final int MENU_ITEM_ID_ABOUT = 1;
private static final int MENU_ITEM_ID_MAKE_VOICE = 2;
private static final int MENU_ITEM_ID_LOGIN = 3;
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuItem menuItemMakeVoice = menu.add(0, MENU_ITEM_ID_MAKE_VOICE, 0, "录音");
menuItemMakeVoice.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
// MenuItem menuLogin = menu.add(0, MENU_ITEM_ID_LOGIN, 0,
// "登录");
// menuLogin.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
MenuItem menuItemAbout = menu.add(0, MENU_ITEM_ID_ABOUT, 0, "更多");
menuItemAbout.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
final int itemId = item.getItemId();
switch (itemId) {
case MENU_ITEM_ID_ABOUT:
Intent intent = new Intent(this, AboutActivity.class);
startActivity(intent);
break;
case MENU_ITEM_ID_MAKE_VOICE:
MobclickAgent.onEvent(this, UmengEvent.VOICE_MAKE);
Notification notification = NotificationCenter
.obtain(NotificationID.N_USERVOICE_MAKE);
NotificationCenter.getInstance().notify(notification);
break;
case MENU_ITEM_ID_LOGIN:
MobclickAgent.onEvent(this, UmengEvent.LOGIN_WEIBO);
TPAccountManager.getInstance().login(this, Message.obtain());
break;
default:
break;
}
item.getItemId();
return super.onOptionsItemSelected(item);
}
public void sendMessage() {
}
@Override
protected void onDestroy() {
VEApplication.getMusicPlayer(this).destory();
this.unregisterReceiver(mMusicPlayerReceiver);
NotificationCenter.getInstance().unregister(this, NotificationID.N_USERVOICE_MAKE);
super.onDestroy();
Log.d(VEApplication.TAG, "---->onDestroy call");
if (null == mFragmentList) {
return;
}
for (BaseFragment fragment : mFragmentList) {
fragment.onDestory();
}
}
@Override
public void onCommand(View view, final Voice obj, int command, int position) {
final MainActivity me = this;
switch (command) {
case VoiceAdapter.CMD_SHARE:
BaseDialog dialog = WeixinAlert.buildAlertDialog(view.getContext(), "发送【"
+ obj.title + "】", "", this, null);
dialog.setTag(obj);
dialog.show();
break;
default:
break;
}
}
@Override
protected void onResume() {
super.onResume();
MobclickAgent.onResume(this);
}
@Override
protected void onPause() {
super.onPause();
MobclickAgent.onPause(this);
}
@Override
public void onClick(Dialog dialog, int whichButton) {
if (false == dialog instanceof BaseDialog) {
return;
}
final BaseDialog dlg = (BaseDialog)dialog;
Object tag = dlg.getTag();
if (false == tag instanceof Voice) {
return;
}
final Voice obj = (Voice)tag;
boolean isHideTitle = false;
SwitchButton sb = (SwitchButton)dialog.findViewById(R.id.switchbtn);
isHideTitle = sb.isTurnOn();
switch (whichButton) {
case R.id.webchat:
MobclickAgent.onEvent(this, UmengEvent.VOICE_SHARE_TO_WEIXIN);
obj.sendToWeixin(this, isHideTitle);
break;
case R.id.qq:
MobclickAgent.onEvent(this, UmengEvent.VOICE_SHARE_TO_QQ);
obj.sendToQQ(this, isHideTitle);
break;
case R.id.friends:
MobclickAgent.onEvent(this, UmengEvent.VOICE_SHARE_TO_FRIENDS);
obj.sendToFriends(this, isHideTitle);
break;
case R.id.weibo:
MobclickAgent.onEvent(this, UmengEvent.VOICE_SHARE_TO_WEIBO);
obj.sendToWeibo(this, isHideTitle);
break;
default:
break;
}
}
@Override
public void finish() {
overridePendingTransition(0, 0);
if (null != mDialog) {
mDialog.dismiss();
}
super.finish();
}
public void superFinish() {
super.finish();
}
@Override
public void onResponse(BaseResponse arg0) {
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
super.onActivityResult(requestCode, resultCode, intent);
System.out.println("onActivityResult = requestCode = " + requestCode);
TPAccountManager.getInstance().callback(this, requestCode, resultCode, intent);
}
private UserVoiceMakeDialog mDialog = null;
@Override
public void notify(Notification notification) {
if (notification.id == NotificationID.N_USERVOICE_MAKE) {
if (WeiboLoginAcountManager.getInstance().isLogin()) {
try {
mDialog = new UserVoiceMakeDialog(this);
mDialog.show();
} catch (Exception e) {
e.printStackTrace();
}
} else {
VEApplication.toast("进行新浪微博登录");
Message msg = Message.obtain();
msg.what = MsgDef.MSG_USER_MAKE_DIALOG;
TPAccountManager.getInstance().login(this, msg);
}
}
}
private void handleIntent(Intent intent) {
System.out.println("handleIntent = " + intent);
if (null == intent) {
return;
}
Message msg = intent.getParcelableExtra(ConstValues.INTENT_KEY_MESSAGE);
if (null == msg) {
return;
}
if (msg.what == MsgDef.MSG_USER_MAKE_DIALOG) {
UserVoiceMakeDialog dialog = new UserVoiceMakeDialog(this);
dialog.show();
}
}
}