package com.diandi.demo.ui.activity; import android.app.ProgressDialog; import android.content.Context; import android.content.Intent; import android.content.res.Resources; import android.os.Bundle; import android.support.v4.app.FragmentActivity; import android.text.TextUtils; import android.util.Log; import android.widget.Toast; import com.diandi.demo.CustomApplication; import com.diandi.demo.R; import com.diandi.demo.model.User; import com.diandi.demo.sync.UserHelper; import com.diandi.demo.util.CollectionUtils; import com.diandi.demo.util.OverridePendingUtil; import com.diandi.demo.widget.HeaderLayout; import com.diandi.demo.widget.HeaderLayout.HeaderStyle; import com.diandi.demo.widget.HeaderLayout.onLeftImageButtonClickListener; import com.diandi.demo.widget.HeaderLayout.onRightImageButtonClickListener; import java.util.List; import cn.bmob.im.BmobChatManager; import cn.bmob.im.BmobUserManager; import cn.bmob.im.bean.BmobChatUser; import cn.bmob.im.config.BmobConfig; import cn.bmob.v3.listener.FindListener; import cn.bmob.v3.listener.UpdateListener; /** * ******************************************************************************* * ********* Author : klob(kloblic@gmail.com) . * ********* Date : 2014-11-29 . * ********* Time : 11:46 . * ********* Project name : Diandi1.18 . * ********* Version : 1.0 * ********* Copyright @ 2014, klob, All Rights Reserved * ******************************************************************************* */ abstract class BaseActivity extends FragmentActivity { public final String TAG = getClass().getName(); protected BmobUserManager mUserManager; protected BmobChatManager mChatManager; protected HeaderLayout mHeaderLayout; protected CustomApplication mApplication; protected Context mContext; protected Toast mToast; protected ProgressDialog mProgressDialog; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); initConfigure(); mProgressDialog = new ProgressDialog(this); mProgressDialog.setCanceledOnTouchOutside(true); } abstract void findView(); abstract void initView(); abstract void bindEvent(); private void initConfigure() { if (mUserManager == null) { mUserManager = BmobUserManager.getInstance(this); } if (mChatManager == null) { mChatManager = BmobChatManager.getInstance(this); } if (mApplication == null) { mApplication = CustomApplication.getInstance(); } mContext = this; mApplication.addActivity(this); } public void ShowToast(final String text) { if (!TextUtils.isEmpty(text)) { runOnUiThread(new Runnable() { @Override public void run() { try { if (mToast == null) { mToast = Toast.makeText(getApplicationContext(), text, Toast.LENGTH_LONG); } else { mToast.setText(text); } mToast.show(); } catch (Exception e) { e.printStackTrace(); } } }); } } public void ShowToast(final int resId) { runOnUiThread(new Runnable() { @Override public void run() { try { if (mToast == null) { mToast = Toast.makeText(BaseActivity.this.getApplicationContext(), resId, Toast.LENGTH_LONG); } else { mToast.setText(resId); } mToast.show(); Log.d(TAG, getString(resId)); } catch (Resources.NotFoundException e) { e.printStackTrace(); } } }); } public void LogE(String str) { Log.e(TAG, str); } public void initTopBarForOnlyTitle(String titleName) { mHeaderLayout = (HeaderLayout) findViewById(R.id.common_actionbar); mHeaderLayout.init(HeaderStyle.DEFAULT_TITLE); mHeaderLayout.setDefaultTitle(titleName); } public void initTopBarForBoth(String titleName, int rightDrawableId, String text, onRightImageButtonClickListener listener) { mHeaderLayout = (HeaderLayout) findViewById(R.id.common_actionbar); mHeaderLayout.init(HeaderStyle.TITLE_DOUBLE_IMAGEBUTTON); mHeaderLayout.setTitleAndLeftImageButton(titleName, R.drawable.base_action_bar_back_bg_selector, new OnLeftButtonClickListener()); mHeaderLayout.setTitleAndRightButton(titleName, rightDrawableId, text, listener); } public void initTopBarForBoth(String titleName, int rightDrawableId, onRightImageButtonClickListener listener) { mHeaderLayout = (HeaderLayout) findViewById(R.id.common_actionbar); mHeaderLayout.init(HeaderStyle.TITLE_DOUBLE_IMAGEBUTTON); mHeaderLayout.setTitleAndLeftImageButton(titleName, R.drawable.base_action_bar_back_bg_selector, new OnLeftButtonClickListener()); mHeaderLayout.setTitleAndRightImageButton(titleName, rightDrawableId, listener); } public void initTopBarForLeft(String titleName) { mHeaderLayout = (HeaderLayout) findViewById(R.id.common_actionbar); mHeaderLayout.init(HeaderStyle.TITLE_DOUBLE_IMAGEBUTTON); mHeaderLayout.setTitleAndLeftImageButton(titleName, R.drawable.base_action_bar_back_bg_selector, new OnLeftButtonClickListener()); } public void startAnimActivity(Class<?> cla) { this.startActivity(new Intent(this, cla)); OverridePendingUtil.in(BaseActivity.this); } public void startAnimActivity(Intent intent) { this.startActivity(intent); OverridePendingUtil.in(BaseActivity.this); } public void updateUserInfos() { //更新地理位置信息 updateUserLocation(); //查询该用户的好友列表(这个好友列表是去除黑名单用户的哦),目前支持的查询好友个数为100,如需修改请在调用这个方法前设置BmobConfig.LIMIT_CONTACTS即可。 //这里默认采取的是登陆成功之后即将好于列表存储到数据库中,并更新到当前内存中, mUserManager.queryCurrentContactList(new FindListener<BmobChatUser>() { @Override public void onError(int arg0, String arg1) { if (arg0 == BmobConfig.CODE_COMMON_NONE) { LogE(arg1); } else { LogE("查询好友列表失败:" + arg1); } } @Override public void onSuccess(List<BmobChatUser> arg0) { // 保存到application中方便比较 LogE("查询好友列表成功"); CustomApplication.getInstance().setContactList(CollectionUtils.list2map(arg0)); } }); } /** * 更新用户的经纬度信息 */ public void updateUserLocation() { if (CustomApplication.lastPoint != null) { String saveLatitude = mApplication.getLatitude(); String saveLongtitude = mApplication.getLongtitude(); String newLat = String.valueOf(CustomApplication.lastPoint.getLatitude()); String newLong = String.valueOf(CustomApplication.lastPoint.getLongitude()); // ShowLog("saveLatitude ="+saveLatitude+",saveLongtitude = "+saveLongtitude); // ShowLog("newLat ="+newLat+",newLong = "+newLong); if (!saveLatitude.equals(newLat) || !saveLongtitude.equals(newLong)) {//只有位置有变化就更新当前位置,达到实时更新的目的 final User user = (User) mUserManager.getCurrentUser(User.class); user.setLocation(CustomApplication.lastPoint); user.update(this, new UpdateListener() { @Override public void onSuccess() { CustomApplication.getInstance().setLatitude(String.valueOf(user.getLocation().getLatitude())); CustomApplication.getInstance().setLongtitude(String.valueOf(user.getLocation().getLongitude())); // ShowLog("经纬度更新成功"); } @Override public void onFailure(int code, String msg) { // ShowLog("经纬度更新 失败:"+msg); } }); } else { // ShowLog("用户位置未发生过变化"); } } } @Override public void onBackPressed() { finish(); OverridePendingUtil.out(this); } public User getCurrentUser() { return UserHelper.getCurrentUser(mContext); } public class OnLeftButtonClickListener implements onLeftImageButtonClickListener { @Override public void onClick() { finish(); OverridePendingUtil.out(BaseActivity.this); } } }