/*
* Copyright 2017 GcsSloop
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* Last modified 2017-03-19 01:27:22
*
* GitHub: https://github.com/GcsSloop
* Website: http://www.gcssloop.com
* Weibo: http://weibo.com/GcsSloop
*/
package com.gcssloop.diycode.activity;
import android.graphics.Rect;
import android.util.DisplayMetrics;
import android.view.View;
import android.view.ViewTreeObserver;
import android.widget.EditText;
import com.gcssloop.diycode.R;
import com.gcssloop.diycode.base.app.BaseActivity;
import com.gcssloop.diycode.base.app.ViewHolder;
import com.gcssloop.diycode.utils.IntentUtil;
import com.gcssloop.diycode_sdk.api.login.event.LoginEvent;
import com.gcssloop.diycode_sdk.log.Logger;
import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;
public class LoginActivity extends BaseActivity implements View.OnClickListener {
EditText mUsername;
EditText mPassword;
@Override
protected int getLayoutId() {
return R.layout.activity_login;
}
@Override
protected void initViews(ViewHolder holder, View root) {
setTitle("");
mUsername = holder.get(R.id.username);
mPassword = holder.get(R.id.password);
holder.setOnClickListener(this, R.id.login, R.id.sign_up);
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void onLogin(LoginEvent event) {
if (event.isOk()) {
toastShort("登录成功");
mDiycode.getMe(); // 获取个人信息,交给 MainActivity 处理
finish();
} else {
String msg = "请重试";
switch (event.getCode()) {
case -1:
msg = "请检查网络连接";
break;
case 400:
case 401:
msg = "请检查用户名和密码是否正确";
break;
}
toastShort("登录失败:" + msg);
}
}
@Override
protected void onStart() {
super.onStart();
registerKeyboardListener();
EventBus.getDefault().register(this);
}
@Override
protected void onStop() {
super.onStop();
EventBus.getDefault().unregister(this);
}
@Override
protected void onDestroy() {
super.onDestroy();
unRegisterKeyboardListener();
}
private void registerKeyboardListener() {
final View rootView = getWindow().getDecorView().findViewById(android.R.id.content);
rootView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
Logger.e("onGlobalLayout");
if (isKeyboardShown(rootView)) {
Logger.e("软键盘弹起");
getViewHolder().get(R.id.span1).setVisibility(View.GONE);
getViewHolder().get(R.id.span2).setVisibility(View.GONE);
} else {
Logger.e("软键盘未弹起");
getViewHolder().get(R.id.span1).setVisibility(View.INVISIBLE);
getViewHolder().get(R.id.span2).setVisibility(View.INVISIBLE);
}
}
});
}
private void unRegisterKeyboardListener() {
final View rootView = getWindow().getDecorView().findViewById(android.R.id.content);
rootView.getViewTreeObserver().addOnGlobalLayoutListener(null);
}
private boolean isKeyboardShown(View rootView) {
final int softKeyboardHeight = 100;
Rect r = new Rect();
rootView.getWindowVisibleDisplayFrame(r);
DisplayMetrics dm = rootView.getResources().getDisplayMetrics();
int heightDiff = rootView.getBottom() - r.bottom;
return heightDiff > softKeyboardHeight * dm.density;
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.login:
String name = mUsername.getText().toString();
String pswd = mPassword.getText().toString();
if (name.isEmpty() || pswd.isEmpty()) {
toastShort("Email/用户名或密码不能为空");
return;
}
mDiycode.login(name, pswd);
break;
case R.id.sign_up:
IntentUtil.openUrl(this, "https://www.diycode.cc/account/sign_up");
break;
}
}
}