package com.kaixin.android.activity; import java.io.File; import java.util.Date; import android.app.Activity; import android.content.Intent; import android.graphics.Bitmap; import android.hardware.Sensor; import android.hardware.SensorEvent; import android.hardware.SensorEventListener; import android.hardware.SensorManager; import android.net.Uri; import android.os.Bundle; import android.os.Environment; import android.os.Handler; import android.os.Vibrator; import android.provider.Settings; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup.LayoutParams; import android.widget.Toast; import com.kaixin.android.KXActivity; import com.kaixin.android.R; import com.kaixin.android.common.Constants; import com.kaixin.android.menu.BuyAndSellSlaves; import com.kaixin.android.menu.Desktop; import com.kaixin.android.menu.Desktop.onChangeViewListener; import com.kaixin.android.menu.Friends; import com.kaixin.android.menu.Gifts; import com.kaixin.android.menu.Home; import com.kaixin.android.menu.Lbs; import com.kaixin.android.menu.Message; import com.kaixin.android.menu.Photo; import com.kaixin.android.menu.Recommend; import com.kaixin.android.menu.User; import com.kaixin.android.menu.Viewed; import com.kaixin.android.service.UpdateApp; import com.kaixin.android.service.UploadAvatarService; import com.kaixin.android.ui.base.FlipperLayout; import com.kaixin.android.ui.base.FlipperLayout.OnOpenListener; import com.kaixin.android.ui.base.FlipperLayout.onUgcDismissListener; import com.kaixin.android.ui.base.FlipperLayout.onUgcShowListener; import com.kaixin.android.utils.ActivityForResultUtil; import com.kaixin.android.utils.CallService; import com.kaixin.android.utils.CommonUtils; import com.kaixin.android.utils.Encrypter; import com.kaixin.android.utils.MessageUtil; import com.kaixin.android.utils.PhotoUtil; import com.kaixin.android.utils.StorageUtil; import com.kaixin.android.utils.ViewUtil; public class MainActivity extends KXActivity implements OnOpenListener { /** * 当前显示内容的容器(继承于ViewGroup) */ private FlipperLayout mRoot; /** * 菜单界面 */ private Desktop mDesktop; /** * 用户首页界面 */ private User mUserInfo; /** * 内容首页界面 */ private Home mHome; /** * 消息首页界面 */ private Message mMessage; /** * 好友首页界面 */ private Friends mFriends; /** * 好友买卖界面 */ private BuyAndSellSlaves mBuyAndSellSlaves; /** * 照片首页界面 */ private Photo mPhoto; /** * 转帖首页界面 */ private Viewed mViewed; /** * 礼物首页界面 */ private Gifts mGifts; /** * 游戏首页界面 */ private Recommend mRecommend; /** * 附近首页界面 */ private Lbs mLbs; /** * 当前显示的View的编号 */ private int mViewPosition; /** * 退出时间 */ private long mExitTime; /** * 退出间隔 */ private static final int INTERVAL = 2000; /** * */ public static Activity mInstance; private SensorManager sensorManager; private Vibrator vibrator; private boolean isFlag; private static final String TAG = "LBS"; private static final int SENSOR_SHAKE = 10; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); UpdateApp app = new UpdateApp(this); app.checkUpdate(); CallService.setUsername(StorageUtil.getString(this, "username")); CallService.setPasswordMD5(Encrypter.md5(StorageUtil.getString(this, "password"))); /** * 创建容器,并设置全屏大小 */ mRoot = new FlipperLayout(this); LayoutParams params = new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT); mRoot.setLayoutParams(params); /** * 创建菜单界面和内容首页界面,并添加到容器中,用于初始显示 */ mDesktop = new Desktop(this, this, mKXApplication); mHome = new Home(this, this, mKXApplication); mRoot.addView(mDesktop.getView(), params); mRoot.addView(mHome.getView(), params); setContentView(mRoot); setListener(); mInstance=this; } /** * 重力感应监听 */ private SensorEventListener sensorEventListener = new SensorEventListener() { @Override public void onSensorChanged(SensorEvent event) { // 传感器信息改变时执行该方法 float[] values = event.values; float x = values[0]; // x轴方向的重力加速度,向右为正 float y = values[1]; // y轴方向的重力加速度,向前为正 float z = values[2]; // z轴方向的重力加速度,向上为正 // Log.i(TAG, "x轴方向的重力加速度" + x + ";y轴方向的重力加速度" + y + ";z轴方向的重力加速度" + z); // 一般在这三个方向的重力加速度达到40就达到了摇晃手机的状态。 int medumValue = 16;// 三星 i9250怎么晃都不会超过20,没办法,只设置19了 if (Math.abs(x) > medumValue || Math.abs(y) > medumValue || Math.abs(z) > medumValue) { vibrator.vibrate(200); android.os.Message msg = new android.os.Message(); msg.what = SENSOR_SHAKE; handler.sendMessage(msg); } } @Override public void onAccuracyChanged(Sensor sensor, int accuracy) { } }; /** * 动作执行 */ Handler handler = new Handler() { @Override public void handleMessage(android.os.Message msg) { super.handleMessage(msg); switch (msg.what) { case SENSOR_SHAKE: mLbs.fresh(); break; } } }; /** * UI事件监听 */ private void setListener() { mHome.setOnOpenListener(this); /** * 监听菜单界面切换显示内容(onChangeViewListener接口在Desktop中定义) */ mDesktop.setOnChangeViewListener(new onChangeViewListener() { public void onChangeView(int arg0) { mViewPosition = arg0; if (sensorManager != null) {// 取消监听器 sensorManager.unregisterListener(sensorEventListener); } switch (arg0) { case ViewUtil.USER: if (mUserInfo == null) { mUserInfo = new User(MainActivity.this, MainActivity.this, mKXApplication); mUserInfo.setOnOpenListener(MainActivity.this); } mRoot.close(mUserInfo.getView()); break; case ViewUtil.HOME: mRoot.close(mHome.getView()); break; case ViewUtil.MESSAGE: if (mMessage == null) { mMessage = new Message(MainActivity.this, mKXApplication); mMessage.setOnOpenListener(MainActivity.this); } mRoot.close(mMessage.getView()); break; case ViewUtil.BUY_SELL: if (mBuyAndSellSlaves == null) { mBuyAndSellSlaves = new BuyAndSellSlaves(MainActivity.this, mKXApplication); mBuyAndSellSlaves.setOnOpenListener(MainActivity.this); } mRoot.close(mBuyAndSellSlaves.getView()); break; case ViewUtil.FRIENDS: if (mFriends == null) { mFriends = new Friends(MainActivity.this, mKXApplication); mFriends.setOnOpenListener(MainActivity.this); } mRoot.close(mFriends.getView()); break; case ViewUtil.PHOTO: if (mPhoto == null) { mPhoto = new Photo(MainActivity.this, mKXApplication, mScreenWidth); mPhoto.setOnOpenListener(MainActivity.this); } mRoot.close(mPhoto.getView()); break; case ViewUtil.VIEWED: if (mViewed == null) { mViewed = new Viewed(MainActivity.this, mKXApplication); mViewed.setOnOpenListener(MainActivity.this); } mRoot.close(mViewed.getView()); break; case ViewUtil.GIFTS: /*if (mGifts == null) { mGifts = new Gifts(MainActivity.this, mKXApplication); mGifts.setOnOpenListener(MainActivity.this); } mRoot.close(mGifts.getView());*/ MessageUtil.showMsg(MainActivity.this, "功能开发中.."); break; case ViewUtil.RECOMMEND: if (mRecommend == null) { mRecommend = new Recommend(MainActivity.this, mKXApplication); mRecommend.setOnOpenListener(MainActivity.this); } mRoot.close(mRecommend.getView()); break; case ViewUtil.LBS: if (mLbs == null) { mLbs = new Lbs(MainActivity.this, mKXApplication); mLbs.setOnOpenListener(MainActivity.this); sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE); vibrator = (Vibrator) getSystemService(VIBRATOR_SERVICE); if (sensorManager != null) {// 注册监听器 sensorManager.registerListener(sensorEventListener, sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_NORMAL); // 第一个参数是Listener,第二个参数是所得传感器类型,第三个参数值获取传感器信息的频率 } } mRoot.close(mLbs.getView()); break; default: break; } } }); /** * 隐藏path菜单 */ mRoot.setOnUgcDismissListener(new onUgcDismissListener() { public void dismiss() { switch (mViewPosition) { case ViewUtil.USER: mUserInfo.dismissUgc(); break; case ViewUtil.HOME: mHome.dismissUgc(); break; } } }); /** * 显示path菜单 */ mRoot.setOnUgcShowListener(new onUgcShowListener() { public void show() { switch (mViewPosition) { case ViewUtil.USER: mUserInfo.showUgc(); break; case ViewUtil.HOME: mHome.showUgc(); break; } } }); findViewById(R.id.warnning_layout).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent wifiSettingsIntent = new Intent(Settings.ACTION_SETTINGS); startActivity(wifiSettingsIntent); } }); } @Override protected void onPause() { super.onPause(); if (sensorManager != null) {// 取消监听器 sensorManager.unregisterListener(sensorEventListener); } } @Override protected void onResume() { super.onResume(); if(!CommonUtils.isNetWorkConnected(mKXApplication)){ findViewById(R.id.warnning_layout).setVisibility(View.VISIBLE); }else{ findViewById(R.id.warnning_layout).setVisibility(View.GONE); } if(mFriends != null && Constants.isAddFriend){ mFriends.fresh(); } if(mHome != null && Constants.isAddFriend){ mHome.fresh(); } if(mUserInfo != null && Constants.isRefreshUserInfo){ mUserInfo.fresh(); Constants.isRefreshUserInfo = false; } Constants.isAddFriend = false; if(mHome != null){ mHome.showUnreadMsg(); } } protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); switch (requestCode) { /** * 切换墙纸时回调此方法,通知菜单界面和用户界面修改墙纸 */ case ActivityForResultUtil.REQUESTCODE_CHANGEWALLPAGER: if (resultCode == RESULT_OK) { mDesktop.setWallpager(); mUserInfo.setWallpager(); } break; /** * 修改签名时回调此方法,通知菜单界面和用户界面修改签名 */ case ActivityForResultUtil.REQUESTCODE_EDITSIGNATURE: if (resultCode == RESULT_OK) { String arg0 = data.getStringExtra("signature"); CallService.modifySign(arg0); mDesktop.setSignature(arg0); mUserInfo.setSignature(arg0); } break; /** * 修改昵称时回调此方法,通知菜单界面和用户界面修改昵称 */ case ActivityForResultUtil.REQUESTCODE_EDITNICKNAME: if (resultCode == RESULT_OK) { String arg0 = data.getStringExtra("nickname"); mDesktop.setNickName(arg0); mUserInfo.setNickName(arg0); } break; /** * 通过照相修改头像 */ case ActivityForResultUtil.REQUESTCODE_UPLOADAVATAR_CAMERA: if (resultCode == RESULT_OK) { if (!Environment.getExternalStorageState().equals( Environment.MEDIA_MOUNTED)) { Toast.makeText(this, "SD不可用", Toast.LENGTH_SHORT).show(); return; } File file = new File(mKXApplication.mUploadPhotoPath); startPhotoZoom(Uri.fromFile(file)); } else { Toast.makeText(this, "取消上传", Toast.LENGTH_SHORT).show(); } break; /** * 通过本地修改头像 */ case ActivityForResultUtil.REQUESTCODE_UPLOADAVATAR_LOCATION: Uri uri = null; if (data == null) { Toast.makeText(this, "取消上传", Toast.LENGTH_SHORT).show(); return; } if (resultCode == RESULT_OK) { if (!Environment.getExternalStorageState().equals( Environment.MEDIA_MOUNTED)) { Toast.makeText(this, "SD不可用", Toast.LENGTH_SHORT).show(); return; } uri = data.getData(); startPhotoZoom(uri); } else { Toast.makeText(this, "照片获取失败", Toast.LENGTH_SHORT).show(); } break; /** * 裁剪修改的头像 */ case ActivityForResultUtil.REQUESTCODE_UPLOADAVATAR_CROP: if (data == null) { Toast.makeText(this, "取消上传", Toast.LENGTH_SHORT).show(); return; } else { saveCropPhoto(data); } break; /** * 通过照相上传图片 */ case ActivityForResultUtil.REQUESTCODE_UPLOADPHOTO_CAMERA: if (resultCode == RESULT_OK) { if (!Environment.getExternalStorageState().equals( Environment.MEDIA_MOUNTED)) { Toast.makeText(this, "SD不可用", Toast.LENGTH_SHORT).show(); return; } Intent intent = new Intent(); intent.setClass(MainActivity.this, ImageFilterActivity.class); String path = PhotoUtil.saveToLocal(PhotoUtil.createBitmap( mKXApplication.mUploadPhotoPath, mScreenWidth, mScreenHeight)); intent.putExtra("path", path); startActivity(intent); } else { Toast.makeText(this, "取消上传", Toast.LENGTH_SHORT).show(); } break; } } /** * 系统裁剪照片 * * @param uri */ private void startPhotoZoom(Uri uri) { Intent intent = new Intent("com.android.camera.action.CROP"); intent.setDataAndType(uri, "image/*"); intent.putExtra("crop", "true"); intent.putExtra("aspectX", 1); intent.putExtra("aspectY", 1); intent.putExtra("outputX", 200); intent.putExtra("outputY", 200); intent.putExtra("scale", true); intent.putExtra("noFaceDetection", true); intent.putExtra("return-data", true); startActivityForResult(intent, ActivityForResultUtil.REQUESTCODE_UPLOADAVATAR_CROP); } /** * 保存裁剪的照片 * * @param data */ private void saveCropPhoto(Intent data) { Bundle extras = data.getExtras(); if (extras != null) { Bitmap bitmap = extras.getParcelable("data"); bitmap = PhotoUtil.toRoundCorner(bitmap, 15); if (bitmap != null) { uploadPhoto(bitmap); } } else { Toast.makeText(this, "获取裁剪照片错误", Toast.LENGTH_SHORT).show(); } } /** * 更新头像 */ private void uploadPhoto(Bitmap bitmap) { String path = PhotoUtil.saveToLocal(bitmap); Intent intent = new Intent(this, UploadAvatarService.class); intent.putExtra("photoPath", path); intent.putExtra("date", new Date(new java.util.Date().getTime()).toString()); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startService(intent); mUserInfo.setAvatar(bitmap); mDesktop.setAvatar(bitmap); } /** * 返回键监听 */ public void onBackPressed() { /** * 如果界面的path菜单没有关闭时,先将path菜单关闭,否则则判断两次返回时间间隔,小于两秒则退出程序 */ if (mRoot.getScreenState() == FlipperLayout.SCREEN_STATE_OPEN) { if (mDesktop.getUgcIsShowing()) { mDesktop.closeUgc(); } else { exit(); } } else { switch (mViewPosition) { case ViewUtil.USER: if (mUserInfo.getUgcIsShowing()) { mUserInfo.closeUgc(); } else { exit(); } break; case ViewUtil.HOME: if (mHome.getUgcIsShowing()) { mHome.closeUgc(); } else { exit(); } break; default: exit(); break; } } } /** * 判断两次返回时间间隔,小于两秒则退出程序 */ private void exit() { if (System.currentTimeMillis() - mExitTime > INTERVAL) { Toast.makeText(this, "再按一次返回键,可直接退出程序", Toast.LENGTH_SHORT).show(); mExitTime = System.currentTimeMillis(); } else { // EMChatManager.getInstance().logout(); mKXApplication.closeLocationTask(); // 开启定时的定位线程 finish(); android.os.Process.killProcess(android.os.Process.myPid()); System.exit(0); } } public void open() { if (mRoot.getScreenState() == FlipperLayout.SCREEN_STATE_CLOSE) { mRoot.open(); } } }