package com.dazhongcun.merchants.user; import roboguice.inject.InjectView; import com.dazhongcun.baseactivity.BaseActivity; import com.dazhongcun.meifa.merchants.R; import com.dazhongcun.merchants.activity.MainTabActivity; import com.dazhongcun.merchants.application.AppApplication; import com.dazhongcun.merchants.database.BaseAppDbHelper; import com.dazhongcun.merchants.entity.Status; import com.dazhongcun.merchants.entity.UserEntity; import com.dazhongcun.merchants.utils.ParseJson; import com.dazhongcun.merchants.utils.RequestUri; import com.dazhongcun.utils.PreferencesUtils; import com.dazhongcun.views.ButtonRectangle; import com.dazhongcun.views.CheckBox; import com.dazhongcun.views.Toaster; import com.dazhongcun.widget.OpenSansEditText; import com.dazhongcun.widget.WPTextView; import com.loopj.android.http.AsyncHttpResponseHandler; import com.loopj.android.http.RequestParams; import com.tencent.android.tpush.XGCustomPushNotificationBuilder; import com.tencent.android.tpush.XGIOperateCallback; import com.tencent.android.tpush.XGPushConfig; import com.tencent.android.tpush.XGPushManager; import com.tencent.android.tpush.service.XGPushService; import com.umeng.analytics.MobclickAgent; import android.app.Notification; import android.app.ProgressDialog; import android.content.Context; import android.content.Intent; import android.media.RingtoneManager; import android.os.Bundle; import android.os.Handler; import android.os.Build.VERSION; import android.os.Build.VERSION_CODES; import android.os.Message; import android.os.Parcelable; import android.support.v4.view.ViewCompat; import android.support.v7.app.ActionBarActivity; import android.support.v7.widget.CardView; import android.support.v7.widget.Toolbar; import android.text.TextUtils; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.view.WindowManager; import android.widget.RadioGroup; import android.widget.RelativeLayout; import android.widget.SeekBar; import android.widget.TextView; public class LoginActivity extends BaseActivity implements OnClickListener { @InjectView(R.id.sign_in_button) WPTextView sigin; // 登陆按钮 @InjectView(R.id.sign_in_progress_bar) RelativeLayout progresslayout; // 进度组件 @InjectView(R.id.username) OpenSansEditText username; // 用户名 @InjectView(R.id.password) OpenSansEditText password; // 密码 @InjectView(R.id.material_checkBox) CheckBox autoSign; // 自动登录按钮 @InjectView(R.id.resetPassword) WPTextView resetPassword; // 忘记密码 @InjectView(R.id.hints) WPTextView hints; private BasicMember basicMember; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_login); // createShut(); // 开启logcat输出,方便debug,发布时请关闭 // XGPushConfig.enableDebug(this, true); // 如果需要知道注册是否成功,请使用registerPush(getApplicationContext(), // XGIOperateCallback)带callback版本 // 如果需要绑定账号,请使用registerPush(getApplicationContext(),"account")版本 // 具体可参考详细的开发指南 // 传递的参数为ApplicationContext Context context = getApplicationContext(); XGPushManager.registerPush(context, new XGIOperateCallback() { @Override public void onSuccess(Object data, int flag) { Log.d("TPush", "注册成功,设备token为:" + data); // Toaster.showOneToast(XGPushConfig.getToken(LoginActivity.this)); } @Override public void onFail(Object data, int errCode, String msg) { Log.d("TPush", "注册失败,错误码:" + errCode + ",错误信息:" + msg); } }); Intent service = new Intent(context, XGPushService.class); context.startService(service); // Toaster.showOneToast(XGPushConfig.getToken(this)); initnotifacationView(); basicMember = new BasicMember(); sigin.setOnClickListener(this); if (getTokenID() != null) { // 自动登陆 if ("".equals(getTokenID())) { } else { autoLogin(); } } } /** * 创建桌面快捷方式 * 这样做可能并不友好。更好的做法是,第一次运行程序的时候,提示用户是否创建桌面快捷方式,让用户选择。以后再次运行就不再进行提示了。 */ public void createShut() { // 创建添加快捷方式的Intent Intent addIntent = new Intent( "com.android.launcher.action.INSTALL_SHORTCUT"); String title = getResources().getString(R.string.app_name); // 加载快捷方式的图标 Parcelable icon = Intent.ShortcutIconResource.fromContext( LoginActivity.this, R.drawable.ic_launcher); // 创建点击快捷方式后操作Intent,该处当点击创建的快捷方式后,再次启动该程序 Intent myIntent = new Intent(LoginActivity.this, LoginActivity.class); addIntent.putExtra("duplicate", false); // 设置快捷方式的标题 addIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME, title); // 设置快捷方式的图标 addIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, icon); // 设置快捷方式对应的Intent addIntent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, myIntent); // 发送广播添加快捷方式 sendBroadcast(addIntent); Toaster.showOneToast("快捷方式已创建"); } private void initnotifacationView() { XGCustomPushNotificationBuilder build = new XGCustomPushNotificationBuilder(); build.setSound( RingtoneManager.getActualDefaultRingtoneUri( getApplicationContext(), RingtoneManager.TYPE_ALARM)) // 设置声音 // setSound( // Uri.parse("android.resource://" + getPackageName() // + "/" + R.raw.wind)) 设定Raw下指定声音文件 .setDefaults(Notification.DEFAULT_VIBRATE) // 振动 .setFlags(Notification.FLAG_NO_CLEAR); // 是否可清除 // 设置自定义通知layout,通知背景等可以在layout里设置 build.setLayoutId(R.layout.notification); // 设置自定义通知内容id build.setLayoutTextId(R.id.content); // 设置自定义通知标题id build.setLayoutTitleId(R.id.title); // 设置自定义通知图片id build.setLayoutIconId(R.id.icon); // 设置自定义通知图片资源 build.setLayoutIconDrawableId(R.drawable.ic_launcher); // 设置状态栏的通知小图标 build.setIcon(R.drawable.ic_launcher); // 设置时间id build.setLayoutTimeId(R.id.time); // build.setNotificationLargeIcon(R.drawable.logo22); // 客户端保存build_id // XGPushManager.setPushNotificationBuilder(this,0 , build); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.sign_in_button: // 表单校验 if (valid()) { if (progresslayout.getVisibility() == View.GONE) { // 处理用户登陆的业务逻辑 // 用户登陆完成 // 隐藏不确定进度条 progresslayout.setVisibility(View.VISIBLE); } else { progresslayout.setVisibility(View.GONE); } username.setEnabled(false); password.setEnabled(false); autoSign.setEnabled(false); resetPassword.setEnabled(false); // handler.sendEmptyMessageDelayed(1, 4500); handler.sendEmptyMessage(2); httpLogin(v); } break; } } // 表单验证 private boolean valid() { try { String account = username.getText().toString().trim(); basicMember.setLoginname(account); if (TextUtils.isEmpty(account)) { Toaster.showResIdToast(this, R.string.login_id_input_empty); username.requestFocus(); return false; }/* * else { if (account.contains("@") && account.contains(".")) { if * (StringUtils.isEmail(account)) { * basicMember.setUserEmail(account); } } else if * (StringUtils.isMobileNO(account)) { * basicMember.setUserNum(account); } else { * Toaster.showResIdToast(this, R.string.login_id_input_error); * loginId.setText(""); loginId.requestFocus(); return false; } } */ basicMember.setLoginpassword(password.getText().toString().trim()); if (TextUtils.isEmpty(basicMember.getLoginpassword())) { Toaster.showResIdToast(this, R.string.login_pass_input_empty); password.requestFocus(); return false; } } catch (Exception e) { // TODO Auto-generated catch block Toaster.showResIdToast(this, R.string.login_input_error); } return true; } private void autoLogin() { RequestParams params = new RequestParams(); params.put(BasicMember.LOING_TOKENID, getTokenID()); params.put(BasicMember.LOING_APPTOKENID, XGPushConfig.getToken(LoginActivity.this)); params.put(RequestUri.CODE, RequestUri.LOGIN_CODE); // 不确定的dialog AppApplication.getHttpClient().get(RequestUri.BASE_URL, params, new AsyncHttpResponseHandler() { private boolean isSuc = false; final ProgressDialog progressDialog = new ProgressDialog( LoginActivity.this); @Override public void onStart() { // 网络请求开始 progressDialog.setMessage("正在拉取数据"); progressDialog.setCancelable(false); progressDialog.show(); hints.setVisibility(View.VISIBLE); } @Override @Deprecated public void onSuccess(String content) { parseUserJson(content); isSuc = true; } @Override @Deprecated public void onFailure(Throwable error) { isSuc = false; hints.setText("请求登陆失败"); if (progressDialog != null && progressDialog.isShowing()) { progressDialog.dismiss(); } } @Override public void onFinish() { if (!isSuc) { } if (progressDialog != null && progressDialog.isShowing()) { progressDialog.dismiss(); } } }); } private void httpLogin(final View v) { RequestParams params = new RequestParams(); params.put(BasicMember.LOING_NAME, basicMember.getLoginname()); params.put(BasicMember.LOING_PASSWORD, basicMember.getLoginpassword()); params.put(BasicMember.LOING_APPTOKENID, XGPushConfig.getToken(LoginActivity.this)); params.put(RequestUri.CODE, RequestUri.LOGIN_CODE); // 不确定的dialog AppApplication.getHttpClient().get(RequestUri.BASE_URL, params, new AsyncHttpResponseHandler() { private boolean isSuc = false; @Override public void onStart() { // 网络请求开始 hints.setVisibility(View.VISIBLE); v.setEnabled(false); } @Override @Deprecated public void onSuccess(String content) { parseUserJson(content); isSuc = true; } @Override @Deprecated public void onFailure(Throwable error) { v.setEnabled(true); isSuc = false; handler.sendEmptyMessage(1); } @Override public void onFinish() { if (!isSuc) { handler.sendEmptyMessage(1); } v.setEnabled(true); } }); } private Handler handler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); if (msg.what == 1) { // 请求登陆失败 hints.setText("登录请求失败"); username.setEnabled(true); password.setEnabled(true); autoSign.setEnabled(true); resetPassword.setEnabled(true); progresslayout.setVisibility(View.GONE); } else if (msg.what == 2) { // 准备请求登陆 username.setEnabled(false); password.setEnabled(false); autoSign.setEnabled(false); resetPassword.setEnabled(false); hints.setText(R.string.default_login_hint); } else if (msg.what == 3) { username.setEnabled(true); password.setEnabled(true); autoSign.setEnabled(true); resetPassword.setEnabled(true); progresslayout.setVisibility(View.GONE); } else if (msg.what == 0) { startActivity(new Intent(LoginActivity.this, MainTabActivity.class)); progresslayout.setVisibility(View.GONE); username.setEnabled(true); password.setEnabled(true); autoSign.setEnabled(true); resetPassword.setEnabled(true); LoginActivity.this.finish(); } } }; private BaseAppDbHelper<UserEntity> dbHelper = new BaseAppDbHelper<UserEntity>(); // 解析用户信息 private void parseUserJson(String json) { UserEntity bean = ParseJson.get_loginJSON(json); if (bean != null && bean.getU_id() != 0) { XGPushManager.registerPush(this, bean.getMoble() + "", bean.getMoble() + "", 1, null, new XGIOperateCallback() { @Override public void onSuccess(Object data, int flag) { Log.d("TPush", "注册成功,设备token为:" + data); // Toaster.showOneToast(XGPushConfig.getToken(LoginActivity.this)); } @Override public void onFail(Object data, int errCode, String msg) { Log.d("TPush", "注册失败,错误码:" + errCode + ",错误信息:" + msg); } }); // 保存或者更新用户信息到数据库 setLoginKey(bean.getU_id()); if (autoSign.isCheck()) // 自动登陆按钮为选中 setTokenID(bean.getTokenId()); // 查询数据库中是否有跟ID想等的数据 UserEntity dblogin = new UserEntity(); dblogin = dbHelper.queryObjForEq(UserEntity.class, UserEntity.JSON_ID, bean.getU_id()); if (dblogin == null) { // 没有的话就创建对象 插入一条数据 int i = dbHelper.create(bean); } else { // 如果有的话 吧数据库中的ID引用到请求后解析完成后的对象 bean.setId(dblogin.getId()); // 如果有localID就跟新数据库 否则插入数据库 dbHelper.createOrUpdate(bean); } handler.sendEmptyMessage(0); } else { Status st = ParseJson.getStatus(json); hints.setText(st.getMsg()); handler.sendEmptyMessage(3); } } @Override public void onBackPressed() { super.onBackPressed(); System.exit(0); } // 设置用户的TokenID就是服务器上的ID 用sharedprefrence保存用户的ID public static void setTokenID(String tokenid) { PreferencesUtils.setStringPreferences(AppApplication.getContext(), AppApplication.PREFERENCE_NAME, UserEntity.JSON_TOKENID, tokenid); } // 获取用户的Tokenid 为空则尚未登录 public static String getTokenID() { return PreferencesUtils.getStringPreference( AppApplication.getContext(), AppApplication.PREFERENCE_NAME, UserEntity.JSON_TOKENID, ""); } // 设置用户的key就是服务器上的ID 用sharedprefrence保存用户的ID public static void setLoginKey(long user_id) { PreferencesUtils.setLongPreference(AppApplication.getContext(), AppApplication.PREFERENCE_NAME, UserEntity.JSON_ID, user_id); } // 获取用户的key public static long getLoginKey() { return PreferencesUtils.getLongPreference(AppApplication.getContext(), AppApplication.PREFERENCE_NAME, UserEntity.JSON_ID, -1); } public static final String TAG = "LoginActivity"; public void onResume() { super.onResume(); MobclickAgent.onPageStart(TAG); MobclickAgent.onResume(this); } public void onPause() { super.onPause(); MobclickAgent.onPageEnd(TAG); MobclickAgent.onPause(this); } }