package com.yaoyumeng.v2ex.ui;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Bundle;
import android.os.IBinder;
import android.support.v4.app.FragmentTabHost;
import android.view.LayoutInflater;
import android.view.ViewConfiguration;
import android.widget.TabHost;
import android.widget.TabHost.OnTabChangeListener;
import com.umeng.update.UmengUpdateAgent;
import com.yaoyumeng.v2ex.R;
import com.yaoyumeng.v2ex.model.ProfileModel;
import com.yaoyumeng.v2ex.service.INoticeService;
import com.yaoyumeng.v2ex.service.NoticeService;
import com.yaoyumeng.v2ex.ui.fragment.AllNodesFragment;
import com.yaoyumeng.v2ex.ui.fragment.MyInfoFragment;
import com.yaoyumeng.v2ex.ui.fragment.ViewPagerFragment;
import com.yaoyumeng.v2ex.ui.widget.ChangeColorIconWithText;
import com.yaoyumeng.v2ex.utils.AccountUtils;
import com.yaoyumeng.v2ex.utils.MessageUtils;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends BaseActivity implements OnTabChangeListener {
private FragmentTabHost mTabHost;
private LayoutInflater mLayoutInflater;
private List<ChangeColorIconWithText> mTabIndicators = new ArrayList<ChangeColorIconWithText>();
private INoticeService mService = null;
private ServiceConnection mConnection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
mService = INoticeService.Stub.asInterface(service);
}
@Override
public void onServiceDisconnected(ComponentName name) {
mService = null;
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
UmengUpdateAgent.setDefault();
UmengUpdateAgent.update(this);
setOverflowButtonAlways();
initTabHost();
handleIntent(getIntent());
if (mIsLogin) {
AccountUtils.refreshProfile(this);
AccountUtils.refreshFavoriteNodes(this, null);
startNoticeService();
}
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
handleIntent(intent);
}
@Override
public void onLogout() {
super.onLogout();
stopNoticeService();
}
@Override
public void onLogin(ProfileModel member) {
super.onLogin(member);
startNoticeService();
}
private long exitTime = 0;
@Override
public void onBackPressed() {
if ((System.currentTimeMillis() - exitTime) > 2000) {
MessageUtils.showToast(this, getString(R.string.main_exitapp_hint));
exitTime = System.currentTimeMillis();
} else {
stopNoticeService();
finish();
}
}
private void initTabHost() {
mLayoutInflater = LayoutInflater.from(this);
mTabHost = (FragmentTabHost) findViewById(android.R.id.tabhost);
mTabHost.setup(this, getSupportFragmentManager(), R.id.tab_content);
mTabHost.getTabWidget().setDividerDrawable(null);
TabHost.TabSpec[] tabSpecs = new TabHost.TabSpec[3];
String[] texts = new String[3];
ChangeColorIconWithText[] tabviews = new ChangeColorIconWithText[3];
Bundle bundle = new Bundle();
bundle.putInt("type", ViewPagerFragment.TypeViewPager_Aggregation);
texts[0] = getString(R.string.title_activity_main_discovery);
tabviews[0] = getTabView(R.layout.item_tab_discovery);
tabSpecs[0] = mTabHost.newTabSpec(texts[0]).setIndicator(tabviews[0]);
mTabHost.addTab(tabSpecs[0], ViewPagerFragment.class, bundle);
mTabIndicators.add(tabviews[0]);
texts[1] = getString(R.string.title_activity_main_nodes);
tabviews[1] = getTabView(R.layout.item_tab_allnodes);
tabSpecs[1] = mTabHost.newTabSpec(texts[1]).setIndicator(tabviews[1]);
mTabHost.addTab(tabSpecs[1], AllNodesFragment.class, null);
mTabIndicators.add(tabviews[1]);
texts[2] = getString(R.string.title_activity_main_myinfo);
tabviews[2] = getTabView(R.layout.item_tab_myinfo);
tabSpecs[2] = mTabHost.newTabSpec(texts[2]).setIndicator(tabviews[2]);
mTabHost.addTab(tabSpecs[2], MyInfoFragment.class, null);
mTabIndicators.add(tabviews[2]);
mTabHost.setOnTabChangedListener(this);
mTabHost.setCurrentTab(0);
onTabChanged(mTabHost.getCurrentTabTag());
}
private void handleIntent(Intent intent) {
if (intent == null) return;
String action = intent.getAction();
if (action != null && action.equals(Intent.ACTION_VIEW)) {
;
} else if (intent.getBooleanExtra("NOTICE", false)) {
showNotification(intent);
}
}
private void showNotification(Intent fromWhich) {
if (fromWhich != null) {
boolean fromNoticeBar = fromWhich.getBooleanExtra("NOTICE", false);
if (fromNoticeBar) {
Intent intent = new Intent(this, MyInfoActivity.class);
intent.putExtra("type", MyInfoActivity.TypeMyNotifications);
startActivity(intent);
}
}
}
private void startNoticeService() {
if (mService == null) {
Intent intent = new Intent(this, NoticeService.class);
bindService(intent, mConnection, Context.BIND_AUTO_CREATE);
startService(intent);
}
}
private void stopNoticeService() {
if (mService != null) {
mService = null;
unbindService(mConnection);
}
sendBroadcast(new Intent(NoticeService.INTENT_ACTION_SHUTDOWN));
}
private ChangeColorIconWithText getTabView(int layoutId) {
ChangeColorIconWithText tab = (ChangeColorIconWithText) mLayoutInflater.inflate(layoutId, null);
return tab;
}
@Override
public void onTabChanged(String tabId) {
setTitle(tabId);
resetOtherTabs();
ChangeColorIconWithText tabview = (ChangeColorIconWithText) mTabHost.getCurrentTabView();
if (tabview != null)
tabview.setIconAlpha(1.0f);
}
/**
* 利用反射,设置sHasPermanentMenuKey 为false
* 作用是actionBar显示overflow menu
*/
private void setOverflowButtonAlways() {
try {
ViewConfiguration config = ViewConfiguration.get(this);
Field menuKey = ViewConfiguration.class
.getDeclaredField("sHasPermanentMenuKey");
menuKey.setAccessible(true);
menuKey.setBoolean(config, false);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 重置其他的TabIndicator的颜色
*/
private void resetOtherTabs() {
for (int i = 0; i < mTabIndicators.size(); i++) {
mTabIndicators.get(i).setIconAlpha(0);
}
}
}