package com.wyp.materialqqlite.ui;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentStatePagerAdapter;
import android.support.v4.view.ViewCompat;
import android.support.v4.view.ViewPager;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.widget.Toolbar;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.ImageView;
import android.widget.TextView;
import com.afollestad.materialdialogs.DialogAction;
import com.afollestad.materialdialogs.MaterialDialog;
import com.afollestad.materialdialogs.ThemeSingleton;
import com.kyleduo.switchbutton.SwitchButton;
import com.wyp.materialqqlite.AbsActivity;
import com.wyp.materialqqlite.AppData;
import com.wyp.materialqqlite.ExitApplication;
import com.wyp.materialqqlite.HomeWatcher;
import com.wyp.materialqqlite.HomeWatcher.OnHomePressedListener;
import com.wyp.materialqqlite.LoginAccountInfo;
import com.wyp.materialqqlite.LoginAccountList;
import com.wyp.materialqqlite.R;
import com.wyp.materialqqlite.Utils;
import com.wyp.materialqqlite.qqclient.QQClient;
import com.wyp.materialqqlite.qqclient.protocol.protocoldata.BuddyInfo;
import com.wyp.materialqqlite.qqclient.protocol.protocoldata.QQCallBackMsg;
import com.wyp.materialqqlite.qqclient.protocol.protocoldata.QQStatus;
import java.io.File;
import it.neokree.materialtabs.MaterialTab;
import it.neokree.materialtabs.MaterialTabHost;
import it.neokree.materialtabs.MaterialTabListener;
public class MainActivity extends AbsActivity implements MaterialTabListener, OnHomePressedListener {
private ViewPager pager;
private ViewPagerAdapter pagerAdapter;
MaterialTabHost tabHost;
private Resources res;
private QQClient m_QQClient;
private TextView m_txtUnreadMsgCnt;
private MsgFragment m_fragmentMsg;
private ContactsFragment m_fragmentContacts;
//private SettingFragment m_fragmentSetting;
// private int m_cxAvatar, m_cyAvatar= (int)getResources().getDimension(R.dimen.msgList_cyAvatar);
// private int m_pxAvatarRound=(int)getResources().getDimension(R.dimen.pxAvatarRound);
boolean FlagSelect = false;
boolean QQOnline = true;
private int m_nCurSelTab = 0;
private HomeWatcher mHomeWatcher;
private ActionBarDrawerToggle drawerToggle;
private DrawerLayout mDrawerLayout;
private SwitchButton mToggleSb;
private ImageView m_imgAvatar;
private ImageView m_imgState;
private TextView m_txtName;
private TextView m_txtSign;
private int m_cxAvatar, m_cyAvatar;
private int m_pxAvatarRound;
private TextView selectcolor,aboutfeed;
private SharedPreferences sp;
private int color_theme;
// private SystemBarTintManager tintManager;
private Handler m_Handler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what) {
case QQCallBackMsg.BUDDY_MSG:
case QQCallBackMsg.GROUP_MSG:
case QQCallBackMsg.SESS_MSG:
case QQCallBackMsg.SYS_GROUP_MSG:
updateUnreadMsgCount();
updateMydata();
break;
case QQCallBackMsg.LOGOUT_RESULT: // 注销返回
showLoginActivity();
break;
}
switch (m_nCurSelTab) {
case 0:
if (m_fragmentMsg != null)
m_fragmentMsg.handleMessage(msg);
break;
case 1:
if (m_fragmentContacts != null)
m_fragmentContacts.handleMessage(msg);
break;
// case 3:
// if (m_fragmentSetting != null)
// m_fragmentSetting.handleMessage(msg);
// break;
default:
break;
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public void setUpViews() {
ViewCompat.setElevation(mToolbar, getResources().getDimension(R.dimen.toolbar_elevation));
sp = getSharedPreferences("theme", MODE_PRIVATE);
color_theme = sp.getInt("color", -12627531);
ThemeSingleton.get().positiveColor = color_theme;
ThemeSingleton.get().neutralColor = color_theme;
ThemeSingleton.get().negativeColor = color_theme;
ExitApplication.getInstance().addActivity(this);
initView();
res = this.getResources();
mToolbar.inflateMenu(R.menu.menu_main);
setSupportActionBar(mToolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer);
// 實作 drawer toggle 並放入 toolbar
drawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, mToolbar, R.string.drawer_open, R.string.drawer_close);
drawerToggle.syncState();
mDrawerLayout.setDrawerListener(drawerToggle);
mToolbar.setOnMenuItemClickListener(onMenuItemClick);
tabHost = (MaterialTabHost) this.findViewById(R.id.tabHost);
pager = (ViewPager) this.findViewById(R.id.pager);
// init view pager
pagerAdapter = new ViewPagerAdapter(getSupportFragmentManager());
pager.setAdapter(pagerAdapter);
pager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
@Override
public void onPageSelected(int position) {
// when user do a swipe the selected tab change
tabHost.setSelectedNavigationItem(position);
}
});
// insert all tabs from pagerAdapter data
for (int i = 0; i < pagerAdapter.getCount(); i++) {
tabHost.addTab(
tabHost.newTab()
.setIcon(getIcon(i))
.setTabListener(this)
);
}
tabHost.setPrimaryColor(color_theme);
// getSupportActionBar().setBackgroundDrawable(new ColorDrawable(color_theme));
}
private Toolbar.OnMenuItemClickListener onMenuItemClick = new Toolbar.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem menuItem) {
switch (menuItem.getItemId()) {
case R.id.exit_current:
showexitcurrentdialog();
break;
case R.id.exit_app:
showexitappdialog();
break;
}
return true;
}
};
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public void onTabSelected(MaterialTab tab) {
// when the tab is clicked the pager swipe content to the tab position
pager.setCurrentItem(tab.getPosition());
}
@Override
public void onTabReselected(MaterialTab tab) {
}
@Override
public void onTabUnselected(MaterialTab tab) {
}
@Override
protected void onResume() {
super.onResume();
m_QQClient.setCallBackHandler(m_Handler);
// setCurSelTab(m_nCurSelTab);
pager.setCurrentItem(m_nCurSelTab);
updateUnreadMsgCount();
AppData.getAppData().cancelNotify(1);
mHomeWatcher = new HomeWatcher(this);
mHomeWatcher.setOnHomePressedListener(this);
mHomeWatcher.startWatch();
}
@Override
protected void onStop() {
super.onStop();
m_QQClient.setNullCallBackHandler(m_Handler);
mHomeWatcher.setOnHomePressedListener(null);
mHomeWatcher.stopWatch();
}
@Override
protected void onDestroy() {
super.onDestroy();
// closeExitDlg();
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
String strTicker = getString(R.string.bgrun);
String strTitle = getString(R.string.app_name);
String strText = getString(R.string.nonewmsg);
AppData.getAppData().showNotify(1, this,
strTicker, strTitle, strText);
moveTaskToBack(true); // true对任何Activity都适用
return true;
}
return super.onKeyDown(keyCode, event);
}
private void initView() {
m_QQClient = AppData.getAppData().getQQClient();
m_QQClient.setCallBackHandler(m_Handler);
m_txtUnreadMsgCnt = (TextView) findViewById(R.id.main_txtUnreadMsgCnt);
m_imgAvatar = (ImageView)
findViewById(R.id.setting_item_imgAvatar);
m_imgState = (ImageView)
findViewById(R.id.setting_item_imgState);
m_txtName = (TextView)
findViewById(R.id.setting_item_txtName);
m_txtSign = (TextView)
findViewById(R.id.setting_item_txtSign);
mToggleSb = (SwitchButton) findViewById(R.id.switch_qqstatus);
// switchnotify= (SwitchButton) findViewById(R.id.switch_notify);
m_cxAvatar = (int)getResources().getDimension(R.dimen.msgList_cxAvatar);
m_cyAvatar = (int)getResources().getDimension(R.dimen.msgList_cyAvatar);
m_pxAvatarRound = (int)getResources().getDimension(R.dimen.pxAvatarRound);
selectcolor= (TextView) findViewById(R.id.select_color);
selectcolor.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
showCustomColorChooser();
}
});
aboutfeed= (TextView) findViewById(R.id.aboutandfeedback_drawer);
aboutfeed.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent_about = new Intent();
intent_about.setClass(MainActivity.this, AboutActivity.class);
startActivity(intent_about);
}
});
updateMydata();
// m_fragmentMgr = getSupportFragmentManager();
// setCurSelTab(0);
}
private void updateMydata() {
Bitmap bmp = null;
BuddyInfo buddyInfo = m_QQClient.getUserInfo();
String strFileName = m_QQClient.
getBuddyHeadPicFullName(m_QQClient.getUserInfo().m_nQQNum);
File file = new File(strFileName);
if (!file.exists()) {
m_QQClient.updateBuddyHeadPic(buddyInfo.m_nQQUin, buddyInfo.m_nQQNum);
} else {
bmp = BitmapFactory.decodeFile(strFileName);
if (bmp != null) {
bmp = Utils.zoomImg(bmp, m_cxAvatar, m_cyAvatar);
bmp = Utils.getRoundedCornerBitmap(bmp, m_pxAvatarRound);
}
}
if (bmp != null)
m_imgAvatar.setImageBitmap(bmp);
else
m_imgAvatar.setImageResource(R.drawable.h001);
int nStatus = m_QQClient.getStatus();
if (nStatus != QQStatus.HIDDEN) {
m_imgState.setImageResource(R.drawable.status_online_btn_2);
mToggleSb.setChecked(mToggleSb.isChecked());
} else {
m_imgState.setImageResource(R.drawable.status_invisible_btn_2);
mToggleSb.setChecked(!mToggleSb.isChecked());
}
if (!Utils.isEmptyStr(buddyInfo.m_strNickName))
m_txtName.setText(buddyInfo.m_strNickName);
else
m_txtName.setText("");
if (!buddyInfo.isHasQQSign()) {
m_QQClient.updateBuddySign(buddyInfo.m_nQQUin);
} else {
m_txtSign.setText(buddyInfo.m_strSign);
}
mToggleSb.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
// mListenerFinish.setVisibility(isChecked ? View.VISIBLE : View.INVISIBLE);
if (isChecked) {
m_QQClient.changeStatus(QQStatus.ONLINE);
m_imgState.setImageResource(R.drawable.status_online_btn_2);
} else {
m_QQClient.changeStatus(QQStatus.HIDDEN);
m_imgState.setImageResource(R.drawable.status_invisible_btn_2);
}
}
});
}
static int selectedColorIndex =-1;//sp.getInt("index",0);// -1;
private void showCustomColorChooser() {
new ColorChooserDialog().show(this, selectedColorIndex, new ColorChooserDialog.Callback() {
@Override
public void onColorSelection(int index, int color, int darker) {
selectedColorIndex = index;
SharedPreferences.Editor editor = sp.edit();
editor.putInt("index", index);
editor.putInt("color",color);
editor.commit();
getSupportActionBar().setBackgroundDrawable(new ColorDrawable(color));
tabHost.setPrimaryColor(color);
// tabHost.setAccentColor(color);
// tintManager.setStatusBarTintColor(color);
View statusHeaderView = findViewById(R.id.statusHeaderView);
statusHeaderView.setBackgroundColor(color);
ThemeSingleton.get().positiveColor = color;
ThemeSingleton.get().neutralColor = color;
ThemeSingleton.get().negativeColor = color;
// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
// getWindow().setStatusBarColor(darker);
}
});
}
View positiveAction;
private void showexitappdialog() {
MaterialDialog dialog = new MaterialDialog.Builder(this)
.title(R.string.exitqqapp)
.customView(R.layout.dialog_customview)
.positiveText(R.string.exitdlg2_exit)
.negativeText(R.string.cancel)
.callback(new MaterialDialog.ButtonCallback() {
@Override
public void onPositive(MaterialDialog dialog) {
// Toast.makeText(getApplicationContext(), "Password: " + passwordInput.getText().toString(), Toast.LENGTH_SHORT).show();
if (!FlagSelect) {
AppData.getAppData().cancelNotify(1);
m_QQClient.logout();
ExitApplication.getInstance().exit();
} else {
String strTicker = getString(R.string.bgrun);
String strTitle = getString(R.string.app_name);
String strText = getString(R.string.nonewmsg);
AppData.getAppData().showNotify(1, MainActivity.this,
strTicker, strTitle, strText);
}
MainActivity.this.finish();
}
@Override
public void onNegative(MaterialDialog dialog) {
}
}).build();
positiveAction = dialog.getActionButton(DialogAction.POSITIVE);
// Toggling the show password CheckBox will mask or unmask the password input EditText
((CheckBox) dialog.getCustomView().findViewById(R.id.checkbox_exit)).setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
// passwordInput.setInputType(!isChecked ? InputType.TYPE_TEXT_VARIATION_PASSWORD : InputType.TYPE_CLASS_TEXT);
// passwordInput.setTransformationMethod(!isChecked ? PasswordTransformationMethod.getInstance() : null);
if (!isChecked) FlagSelect = false;
else FlagSelect = true;
}
});
dialog.show();
// positiveAction.setEnabled(false); // disabled by default
}
private void showexitcurrentdialog() {
new MaterialDialog.Builder(this)
.content(R.string.exit_cur_account)
.positiveText(R.string.exitdlg2_exit) // the default is 'Accept', this line could be left out
.negativeText(R.string.cancel) // leaving this line out will remove the negative button
.callback(new MaterialDialog.ButtonCallback() {
@Override
public void onPositive(MaterialDialog dialog) {
//Toast.makeText(getApplicationContext(), "Positive!", Toast.LENGTH_SHORT).show();
LoginAccountList accountList = AppData.getAppData().getLoginAccountList();
LoginAccountInfo accountInfo = accountList.getLastLoginAccountInfo();
accountInfo.m_bAutoLogin = false;
String strAppPath = AppData.getAppData().getAppPath();
String strFileName = strAppPath + "LoginAccountList.dat";
accountList.saveFile(strFileName);
AppData.getAppData().cancelNotify(1);
m_QQClient.logout();
if (!m_QQClient.logout()) {
showLoginActivity();
}
}
@Override
public void onNegative(MaterialDialog dialog) {
//Toast.makeText(getApplicationContext(), "Negative…", Toast.LENGTH_SHORT).show();
}
})
.build()
.show();
}
private void showLoginActivity() {
MainActivity.this.finish();
Intent intent = new Intent(this, LoginActivity.class);
Bundle bundle = new Bundle();
bundle.putString("qq_num", m_QQClient.getQQNum());
bundle.putString("qq_pwd", m_QQClient.getQQPwd());
intent.putExtras(bundle);
startActivity(intent);
}
private class ViewPagerAdapter extends FragmentStatePagerAdapter {
public ViewPagerAdapter(FragmentManager fm) {
super(fm);
}
public Fragment getItem(int num) {
Fragment mFragemnt = null;
switch (num) {
case 0:
mFragemnt = new MsgFragment();
break;
case 1:
mFragemnt = new ContactsFragment();
break;
case 2:
mFragemnt = new GroupFragment();
break;
// case 3:
// mFragemnt = new SettingFragment();
// break;
}
//m_nCurSelTab=num;
return mFragemnt;
}
@Override
public int getCount() {
return 3;
}
@Override
public CharSequence getPageTitle(int position) {
switch (position) {
case 0:
return "tab 1";
case 1:
return "tab 2";
case 2:
return "tab 3";
// case 3:
// return "tab 4";
default:
return null;
}
}
}
/*
* It doesn't matter the color of the icons, but they must have solid colors
*/
private Drawable getIcon(int position) {
switch (position) {
case 0:
return res.getDrawable(R.drawable.ic_messenger_black_48dp);
case 1:
return res.getDrawable(R.drawable.ic_person_black_48dp);
case 2:
return res.getDrawable(R.drawable.ic_people_black_48dp);
// case 3:
// return res.getDrawable(R.drawable.ic_launcher);
}
return null;
}
// 更新未读消息总数标签
private void updateUnreadMsgCount() {
int nCount = m_QQClient.getMessageList().getUnreadMsgCount();
if (nCount > 0) {
String strText;
if (nCount > 99)
strText = "99+";
else
strText = String.valueOf(nCount);
m_txtUnreadMsgCnt.setText(strText);
m_txtUnreadMsgCnt.setVisibility(View.VISIBLE);
} else {
m_txtUnreadMsgCnt.setText("");
m_txtUnreadMsgCnt.setVisibility(View.GONE);
}
}
@Override
public void onHomePressed() {
String strTicker = getString(R.string.bgrun);
String strTitle = getString(R.string.app_name);
String strText = getString(R.string.nonewmsg);
AppData.getAppData().showNotify(1, this,
strTicker, strTitle, strText);
}
@Override
public void onHomeLongPressed() {
// do nothing
}
}