package com.mytestapp;
|
|
import androidx.appcompat.app.AppCompatActivity;
|
|
import android.app.AlertDialog;
|
import android.app.Dialog;
|
import android.content.Context;
|
import android.content.Intent;
|
import android.os.Bundle;
|
import android.os.Handler;
|
import android.os.Message;
|
import android.text.InputType;
|
import android.util.Log;
|
import android.view.MotionEvent;
|
import android.view.View;
|
import android.view.WindowManager;
|
import android.view.inputmethod.EditorInfo;
|
import android.view.inputmethod.InputMethodManager;
|
import android.widget.Button;
|
import android.widget.EditText;
|
import android.widget.TextView;
|
import android.widget.Toast;
|
|
import java.lang.reflect.InvocationTargetException;
|
import java.lang.reflect.Method;
|
import java.net.HttpURLConnection;
|
import java.net.URL;
|
import java.net.URLConnection;
|
|
public class LoginActivity extends BaseActivity implements View.OnClickListener{
|
private static final String TAG = "LoginActivity";
|
|
private Button loginBtn;
|
private Button testBtn;
|
|
private EditText et_server_ip;
|
private EditText et_server_port;
|
|
private boolean isSuccessConn = false;
|
|
private Dialog progressDialog;
|
|
private Softkeyboardlistener softkeyboardlistener;
|
|
@Override
|
protected void onCreate(Bundle savedInstanceState) {
|
super.onCreate(savedInstanceState);
|
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
|
MyUtil.hideNavigationBar(getWindow());
|
setContentView(R.layout.activity_login);
|
|
MyUtil.hideNavigationBar(getWindow());
|
|
loginBtn = (Button)findViewById(R.id.btn_loginSys);
|
testBtn = (Button)findViewById(R.id.btn_testConn);
|
|
et_server_ip = (EditText)findViewById(R.id.et_server_ip);
|
et_server_port = (EditText)findViewById(R.id.et_server_port);
|
|
loginBtn.setOnClickListener(this);
|
testBtn.setOnClickListener(this);
|
|
final ServerInfo info = ServerInfo.readServerInfo(LoginActivity.this);
|
if(info != null){
|
et_server_ip.setText(info.getServer_ip());
|
et_server_port.setText(info.getServer_port()+"");
|
// Android 4.0 之后不能在主线程中请求HTTP请求
|
new Thread(new Runnable(){
|
@Override
|
public void run() {
|
boolean flag = testUrlWithTimeOut(info.createServerUrl(),2000);
|
//判断是否已经是设置过了参数
|
if(flag){
|
Intent intent = new Intent(LoginActivity.this,MainActivity.class);
|
startActivity(intent);
|
}
|
//Log.e(TAG, "onCreate:$$$$$$$$$$$$$$$$ "+flag );
|
}
|
}).start();
|
|
}else{
|
et_server_ip.setText("");
|
et_server_port.setText("");
|
}
|
|
Softkeyboardlistener.setListener(LoginActivity.this, new Softkeyboardlistener.OnSoftKeyBoardChangeListener() {
|
@Override
|
public void keyBoardShow(int height) {
|
//键盘显示
|
Log.e(TAG, "keyBoardHide: 键盘显示" );
|
//hideSoftInputMethod(et_server_ip);
|
}
|
|
@Override
|
public void keyBoardHide(int height) {
|
Log.e(TAG, "keyBoardHide: 键盘隐藏" );
|
}
|
});
|
|
|
}
|
|
@Override
|
protected int getLayoutRes() {
|
return R.layout.activity_login;
|
}
|
|
Handler handler = new Handler(){
|
@Override
|
public void handleMessage(Message msg){
|
if(msg.what == 84){
|
Toast.makeText(LoginActivity.this,"测试连接成功,可以登陆系统",Toast.LENGTH_SHORT).show();
|
ServerInfo serverInfo = createServerInfo();
|
ServerInfo.WriteServerInfo(LoginActivity.this,serverInfo);
|
isSuccessConn = true;
|
}else if(msg.what == 85){
|
isSuccessConn = false;
|
Toast.makeText(LoginActivity.this,"测试连接失败,请检查服务器信息",Toast.LENGTH_SHORT).show();
|
}
|
MyLoadingDialog.stopLoading();
|
}
|
};
|
|
|
@Override
|
public void onClick(View v) {
|
switch (v.getId()){
|
case R.id.btn_loginSys:{
|
if(isSuccessConn){
|
//点击登陆系统
|
Intent intent = new Intent(LoginActivity.this,MainActivity.class);
|
startActivity(intent);
|
|
//MyUtil.showKeyboard(et_server_ip);
|
}else{
|
Toast.makeText(LoginActivity.this,"请先测试连接接成功,方可进入系统!",Toast.LENGTH_SHORT).show();
|
}
|
}break;
|
case R.id.btn_testConn:{
|
String server_ip = et_server_ip.getText().toString();
|
String server_port = et_server_port.getText().toString();
|
if(server_ip.length() == 0){
|
Toast.makeText(LoginActivity.this,"请输入服务器IP地址!",Toast.LENGTH_SHORT).show();
|
}else if(server_port.length() == 0){
|
Toast.makeText(LoginActivity.this,"请输入服务器端口号!",Toast.LENGTH_SHORT).show();
|
}else{
|
|
MyLoadingDialog.showLoading(LoginActivity.this,"正在测试连接");
|
// progressDialog = new Dialog(LoginActivity.this,R.style.progress_dialog);
|
//
|
// progressDialog.setContentView(R.layout.dialog);
|
// progressDialog.getWindow().setBackgroundDrawableResource(android.R.color.transparent);
|
// TextView msg = (TextView) progressDialog.findViewById(R.id.id_tv_loadingmsg);
|
// progressDialog.setCancelable(false);
|
// msg.setText("正在测试连接.....");
|
//
|
//
|
// progressDialog.show();
|
//点击测试连接
|
// Android 4.0 之后不能在主线程中请求HTTP请求
|
new Thread(new Runnable(){
|
@Override
|
public void run() {
|
ServerInfo serverInfo = createServerInfo();
|
boolean flag = testUrlWithTimeOut(serverInfo.createServerUrl(),2000);
|
Message msg = Message.obtain();
|
if(flag){
|
msg.what = 84;
|
}else{
|
msg.what = 85;
|
}
|
handler.sendMessage(msg);
|
}
|
}).start();
|
}
|
|
}break;
|
}
|
}
|
|
public ServerInfo createServerInfo(){
|
ServerInfo serverInfo = new ServerInfo();
|
serverInfo.setServer_ip(et_server_ip.getText().toString());
|
serverInfo.setServer_port(Integer.parseInt(et_server_port.getText().toString()));
|
return serverInfo;
|
}
|
|
public static boolean testUrlWithTimeOut(String urlString,int timeOutMillSeconds){
|
boolean flag = false;
|
long lo = System.currentTimeMillis();
|
URL url;
|
try {
|
url = new URL(urlString);
|
HttpURLConnection co = (HttpURLConnection)url.openConnection();
|
co.setUseCaches(false);
|
co.setConnectTimeout(timeOutMillSeconds);
|
int status = co.getResponseCode();
|
if(200 == status){
|
flag = true;
|
Log.e(TAG, "testUrlWithTimeOut: 连接可用"+urlString);
|
}
|
} catch (Exception e1) {
|
Log.e(TAG, "testUrlWithTimeOut:连接打不开!" + e1);
|
url = null;
|
}
|
return flag;
|
}
|
|
@Override
|
public boolean dispatchTouchEvent(MotionEvent ev) {
|
if (ev.getAction() == MotionEvent.ACTION_DOWN) {
|
View v = getCurrentFocus();
|
if (isShouldHideInput(v, ev)) {
|
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
|
if (imm != null) {
|
assert v != null;
|
imm.hideSoftInputFromWindow(v.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
|
v.setClickable(true);
|
v.setFocusable(true);
|
v.setFocusableInTouchMode(true);
|
v.requestFocusFromTouch();
|
|
Log.e(TAG, "dispatchTouchEvent: 111111111111111111" );
|
}
|
}
|
Log.e(TAG, "dispatchTouchEvent: 22222222222222222222222" );
|
return super.dispatchTouchEvent(ev);
|
}
|
Log.e(TAG, "dispatchTouchEvent: 333333333333333333333" );
|
// 必不可少,否则所有的组件都不会有TouchEvent了
|
return getWindow().superDispatchTouchEvent(ev) || onTouchEvent(ev);
|
}
|
|
public boolean isShouldHideInput(View v, MotionEvent event) {
|
if (v != null && (v instanceof EditText)) {
|
int[] leftTop = {0, 0};
|
//获取输入框当前的location位置
|
v.getLocationInWindow(leftTop);
|
int left = leftTop[0];
|
int top = leftTop[1];
|
int bottom = top + v.getHeight();
|
int right = left + v.getWidth();
|
return !(event.getX() > left && event.getX() < right
|
&& event.getY() > top && event.getY() < bottom);
|
}
|
return true;
|
}
|
|
//监听系统ui变化
|
@Override
|
public void onWindowFocusChanged(boolean hasFocus) {
|
|
//Log.e(TAG, "onWindowFocusChanged: XXXXXXXXXXXXXXXXXXXXXXXXx" );
|
super.onWindowFocusChanged(hasFocus);
|
|
int uiOptions = View.SYSTEM_UI_FLAG_LAYOUT_STABLE |
|
//布局位于状态栏下方
|
View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION |
|
//全屏
|
View.SYSTEM_UI_FLAG_FULLSCREEN |
|
//隐藏导航栏
|
View.SYSTEM_UI_FLAG_HIDE_NAVIGATION |
|
View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN;
|
uiOptions |= 0x00001000;
|
getWindow().getDecorView().setSystemUiVisibility(uiOptions);
|
}
|
|
|
public void hideSystemMenu(){
|
int uiOptions = View.SYSTEM_UI_FLAG_LAYOUT_STABLE |
|
//布局位于状态栏下方
|
View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION |
|
//全屏
|
View.SYSTEM_UI_FLAG_FULLSCREEN |
|
//隐藏导航栏
|
View.SYSTEM_UI_FLAG_HIDE_NAVIGATION |
|
View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN;
|
uiOptions |= 0x00001000;
|
getWindow().getDecorView().setSystemUiVisibility(uiOptions);
|
}
|
|
/**
|
* 禁掉系统软键盘
|
*/
|
public void hideSoftInputMethod(EditText mEdit) {
|
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
|
int currentVersion = android.os.Build.VERSION.SDK_INT;
|
String methodName = null;
|
if (currentVersion >= 16) {
|
// 4.2
|
methodName = "setShowSoftInputOnFocus";
|
} else if (currentVersion >= 14) {
|
// 4.0
|
methodName = "setSoftInputShownOnFocus";
|
}
|
if (methodName == null) {
|
mEdit.setInputType(InputType.TYPE_NULL);
|
} else {
|
Class<EditText> cls = EditText.class;
|
Method setShowSoftInputOnFocus;
|
try {
|
setShowSoftInputOnFocus = cls.getMethod(methodName, boolean.class);
|
setShowSoftInputOnFocus.setAccessible(true);
|
setShowSoftInputOnFocus.invoke(mEdit, false);
|
} catch (NoSuchMethodException e) {
|
mEdit.setInputType(InputType.TYPE_NULL);
|
e.printStackTrace();
|
} catch (IllegalAccessException e) {
|
e.printStackTrace();
|
} catch (IllegalArgumentException e) {
|
e.printStackTrace();
|
} catch (InvocationTargetException e) {
|
e.printStackTrace();
|
}
|
}
|
}
|
|
@Override
|
protected void onStart() {
|
super.onStart();
|
Log.e(TAG, "onStart: &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&" );
|
|
ServerInfo temp = ServerInfo.readServerInfo(LoginActivity.this);
|
if(temp != null){
|
et_server_ip.setText(temp.getServer_ip());
|
et_server_port.setText(temp.getServer_port()+"");
|
}
|
}
|
}
|