第一次提交
This commit is contained in:
parent
61b1c94af1
commit
367e1923cf
|
|
@ -0,0 +1,113 @@
|
|||
/*
|
||||
* Copyright (C) 2025 xuexiangjys(xuexiangjys@163.com)
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
package com.bonus.canteen.activity;
|
||||
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.os.Handler;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
|
||||
import com.bonus.canteen.core.BaseActivity;
|
||||
import com.xuexiang.xui.widget.dialog.materialdialog.MaterialDialog;
|
||||
|
||||
import org.easydarwin.easypusher.R;
|
||||
import org.easydarwin.easypusher.databinding.ActivityHomePageBinding;
|
||||
|
||||
public class HomeActivity extends BaseActivity<ActivityHomePageBinding> {
|
||||
private static final String PAGE_TYPE = "pageType";
|
||||
private MaterialDialog dialog;
|
||||
|
||||
@Override
|
||||
protected ActivityHomePageBinding viewBindingInflate(LayoutInflater inflater) {
|
||||
return ActivityHomePageBinding.inflate(inflater);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
setFullScreen();
|
||||
initView();
|
||||
}
|
||||
|
||||
private void setFullScreen() {
|
||||
getWindow().getDecorView().setSystemUiVisibility(
|
||||
View.SYSTEM_UI_FLAG_FULLSCREEN
|
||||
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
|
||||
| View.SYSTEM_UI_FLAG_LAYOUT_STABLE
|
||||
);
|
||||
}
|
||||
private void initView(){
|
||||
binding.openEnterLinear.setOnClickListener(view -> {
|
||||
showTipDialog("正在进入入库页面,请稍候...");
|
||||
new Handler().postDelayed(()->{
|
||||
Intent intent = new Intent(HomeActivity.this, MainActivity.class);
|
||||
intent.putExtra(PAGE_TYPE, "enter");
|
||||
startActivity(intent);
|
||||
finish();
|
||||
closeDialog();
|
||||
},300);
|
||||
});
|
||||
binding.openOutLinear.setOnClickListener(view ->{
|
||||
showTipDialog("正在进入出库页面,请稍候...");
|
||||
new Handler().postDelayed(()->{
|
||||
Intent intent = new Intent(HomeActivity.this, MainActivity.class);
|
||||
intent.putExtra(PAGE_TYPE, "out");
|
||||
startActivity(intent);
|
||||
finish();
|
||||
closeDialog();
|
||||
},300);
|
||||
});
|
||||
binding.openSelectLinear.setOnClickListener(view -> {
|
||||
showTipDialog("正在进入查询页面,请稍候...");
|
||||
new Handler().postDelayed(()->{
|
||||
Intent intent = new Intent(HomeActivity.this, MainActivity.class);
|
||||
intent.putExtra(PAGE_TYPE, "select");
|
||||
startActivity(intent);
|
||||
finish();
|
||||
closeDialog();
|
||||
},300);
|
||||
});
|
||||
}
|
||||
private void closeDialog() {
|
||||
if (dialog != null && dialog.isShowing()) {
|
||||
dialog.dismiss();
|
||||
dialog = null;
|
||||
}
|
||||
}
|
||||
/**
|
||||
* 带圆形Loading的Dialog
|
||||
*/
|
||||
public void showTipDialog(String text) {
|
||||
dialog = new MaterialDialog.Builder(this)
|
||||
.iconRes(R.drawable.icon_tip)
|
||||
.limitIconToDefaultSize()
|
||||
.title("提示")
|
||||
.content(text)
|
||||
.progress(true, 0)
|
||||
.progressIndeterminateStyle(false)
|
||||
.cancelable(false)
|
||||
.show();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onDestroy() {
|
||||
super.onDestroy();
|
||||
closeDialog();
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,365 @@
|
|||
package com.bonus.canteen.activity;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.text.InputType;
|
||||
import android.util.Log;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.MotionEvent;
|
||||
import android.view.View;
|
||||
import android.view.inputmethod.InputMethodManager;
|
||||
import android.widget.EditText;
|
||||
|
||||
import com.alibaba.fastjson2.JSON;
|
||||
import com.alibaba.fastjson2.JSONObject;
|
||||
import com.bonus.canteen.constants.AppConstants;
|
||||
import com.bonus.canteen.core.BaseActivity;
|
||||
import com.bonus.canteen.db.AppDatabase;
|
||||
import com.bonus.canteen.db.entity.base.DeviceInfo;
|
||||
import com.bonus.canteen.db.entity.base.LoginInfo;
|
||||
import com.bonus.canteen.db.entity.base.ParamSettingInfo;
|
||||
import com.bonus.canteen.utils.AppUtil;
|
||||
import com.bonus.canteen.utils.OkHttpService;
|
||||
import com.bonus.canteen.utils.SM4EncryptUtils;
|
||||
import com.bonus.canteen.utils.StringHelper;
|
||||
import com.bonus.canteen.utils.ThreadPoolManager;
|
||||
import com.bonus.canteen.utils.UrlConfig;
|
||||
import com.bonus.canteen.utils.WorkConfig;
|
||||
import com.xuexiang.xui.XUI;
|
||||
import com.xuexiang.xui.utils.XToastUtils;
|
||||
import com.xuexiang.xui.widget.dialog.materialdialog.MaterialDialog;
|
||||
|
||||
import org.easydarwin.easypusher.R;
|
||||
import org.easydarwin.easypusher.databinding.ActivityLoginBinding;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import okhttp3.MediaType;
|
||||
import okhttp3.Request;
|
||||
import okhttp3.RequestBody;
|
||||
|
||||
public class LoginActivity extends BaseActivity<ActivityLoginBinding> {
|
||||
private static final String TAG = "LoginActivity";
|
||||
public final OkHttpService service = new OkHttpService();
|
||||
private Boolean isChecked = false;
|
||||
private MaterialDialog dialog;
|
||||
private static final String NO_LOGIN_ROLE = "当前账号无登录权限,请联系管理员";
|
||||
|
||||
@Override
|
||||
protected ActivityLoginBinding viewBindingInflate(LayoutInflater inflater) {
|
||||
return ActivityLoginBinding.inflate(inflater);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
XUI.initTheme(this);
|
||||
super.onCreate(savedInstanceState);
|
||||
setupImmersiveMode();
|
||||
initView();
|
||||
}
|
||||
|
||||
private void setupImmersiveMode() {
|
||||
View decorView = getWindow().getDecorView();
|
||||
int flags = View.SYSTEM_UI_FLAG_FULLSCREEN
|
||||
| View.SYSTEM_UI_FLAG_LAYOUT_STABLE
|
||||
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
|
||||
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION;
|
||||
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
|
||||
flags |= View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
|
||||
}
|
||||
decorView.setSystemUiVisibility(flags);
|
||||
}
|
||||
|
||||
public void initView() {
|
||||
initListener();
|
||||
}
|
||||
|
||||
public void initListener() {
|
||||
findViewById(R.id.btn_login).setOnClickListener(v -> {
|
||||
String userName = binding.etUsername.getText().toString();
|
||||
String password = binding.etPassword.getText().toString();
|
||||
boolean tf = checkParameters(userName, password);
|
||||
if (!tf) {
|
||||
return;
|
||||
}
|
||||
login(userName, password);
|
||||
});
|
||||
binding.tvForgetPassword.setOnClickListener(view -> XToastUtils.warning("请在后台管理端重置密码!"));
|
||||
// 查看密码
|
||||
binding.checkPassword.setOnClickListener(view -> {
|
||||
if (isChecked) {
|
||||
isChecked = false;
|
||||
binding.checkPassword.setImageResource(R.drawable.ic_eye_close);
|
||||
binding.etPassword.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
|
||||
} else {
|
||||
isChecked = true;
|
||||
binding.checkPassword.setImageResource(R.drawable.ic_eye_open);
|
||||
binding.etPassword.setInputType(InputType.TYPE_CLASS_TEXT);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void login(String userName, String password) {
|
||||
showTipDialog("正在登录,请稍候...");
|
||||
ThreadPoolManager.getExecutor().execute(() -> {
|
||||
try {
|
||||
String url = WorkConfig.getPrefixesUrl() + UrlConfig.LOGIN_URL;
|
||||
org.json.JSONObject json = new org.json.JSONObject();
|
||||
json.put("username", SM4EncryptUtils.sm4Encrypt(userName));
|
||||
json.put("password", SM4EncryptUtils.sm4Encrypt(password));
|
||||
json.put("verificationCode", "");
|
||||
json.put("code", "");
|
||||
json.put("phoneUuid", "");
|
||||
json.put("uuid", "");
|
||||
json.put("loginType", "KITCHEN_PHONE_PASSWORD");
|
||||
String jsonString = json.toString();
|
||||
Log.i("getPersonMessage jsonString", jsonString);
|
||||
// 定义 JSON 的 MediaType
|
||||
MediaType mediaType = MediaType.parse(AppConstants.MEDIA_TYPE);
|
||||
// 创建 RequestBody
|
||||
RequestBody body = RequestBody.create(mediaType, jsonString);
|
||||
String result = service.httpLoginPost(url, body, this);
|
||||
Log.e(TAG, "登录结果: " + result);
|
||||
if (result != null && !result.isEmpty()) {
|
||||
JSONObject jsonObject = JSONObject.parseObject(result);
|
||||
if (jsonObject.getIntValue("code") == 500) {
|
||||
if (dialog != null) {
|
||||
dialog.dismiss();
|
||||
dialog = null;
|
||||
}
|
||||
runOnUiThread(() -> XToastUtils.error(jsonObject.getString("msg")));
|
||||
return;
|
||||
}
|
||||
runOnUiThread(() -> XToastUtils.success("登录成功"));
|
||||
String data = jsonObject.getString("data");
|
||||
JSONObject dataJson = JSONObject.parseObject(data);
|
||||
if (judgeIsExistRole(dataJson)) return;
|
||||
AppDatabase.getDatabase(this).loginInfoDao().deleteAll();
|
||||
LoginInfo loginInfo = new LoginInfo();
|
||||
loginInfo.setUserName(dataJson.getString("staffName"));
|
||||
loginInfo.setUserPwd(password);
|
||||
loginInfo.setUserId(dataJson.getString("staffId")); // 假设用户ID为1,实际应用中应从服务器获取
|
||||
loginInfo.setPhone(dataJson.getString("mobile")); // 假设手机号为1234567890,实际应用中应从服务器获取
|
||||
loginInfo.setToken(dataJson.getString("access_token")); // 假设令牌为sample_token,实际应用中应从服务器获取
|
||||
AppDatabase.getDatabase(this).loginInfoDao().insert(loginInfo);
|
||||
List<String> res = new ArrayList<>();
|
||||
initParameterInfo(res);
|
||||
initDeviceInfo(res);
|
||||
Log.e(TAG, "初始化结果: " + res);
|
||||
if (res.size() != 2) {
|
||||
runOnUiThread(() -> {
|
||||
if (dialog != null) {
|
||||
dialog.dismiss();
|
||||
dialog = null;
|
||||
}
|
||||
XToastUtils.error("初始化失败,请联系管理员");
|
||||
});
|
||||
} else {
|
||||
runOnUiThread(() -> {
|
||||
if (dialog != null) {
|
||||
dialog.dismiss();
|
||||
dialog = null;
|
||||
}
|
||||
XToastUtils.error("数据初始化成功");
|
||||
});
|
||||
Intent intent = new Intent(this, HomeActivity.class);
|
||||
startActivity(intent);
|
||||
finish();
|
||||
}
|
||||
} else {
|
||||
if (dialog != null) {
|
||||
dialog.dismiss();
|
||||
dialog = null;
|
||||
}
|
||||
runOnUiThread(() -> XToastUtils.error("登录失败,请检查用户名和密码"));
|
||||
}
|
||||
} catch (Exception e) {
|
||||
if (dialog != null) {
|
||||
dialog.dismiss();
|
||||
dialog = null;
|
||||
}
|
||||
Log.e("LoginActivity", "Login error: ", e);
|
||||
runOnUiThread(() -> XToastUtils.error("登录失败,请检查网络连接或服务器状态"));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private boolean judgeIsExistRole(JSONObject jsonObject) {
|
||||
if (!jsonObject.containsKey("deviceTypes")) {
|
||||
runOnUiThread(() -> {
|
||||
dialog.dismiss();
|
||||
dialog = null;
|
||||
XToastUtils.error(NO_LOGIN_ROLE);
|
||||
});
|
||||
return true;
|
||||
}
|
||||
List<String> deviceTypeList = jsonObject.getList("deviceTypes", String.class);
|
||||
// 处理设备类型
|
||||
if (deviceTypeList == null || deviceTypeList.isEmpty()) {
|
||||
runOnUiThread(() -> {
|
||||
dialog.dismiss();
|
||||
dialog = null;
|
||||
XToastUtils.error(NO_LOGIN_ROLE);
|
||||
});
|
||||
return true;
|
||||
} else {
|
||||
//判断deviceTypeArray是否包含21
|
||||
boolean hasKitchenPhone = false;
|
||||
for (String deviceType : deviceTypeList) {
|
||||
if ("51".equals(deviceType.trim())) {
|
||||
hasKitchenPhone = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!hasKitchenPhone) {
|
||||
runOnUiThread(() -> {
|
||||
if (dialog != null) {
|
||||
dialog.dismiss();
|
||||
dialog = null;
|
||||
}
|
||||
XToastUtils.error(NO_LOGIN_ROLE);
|
||||
});
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private void initDeviceInfo(List<String> list) {
|
||||
@SuppressLint("DefaultLocale") String url = String.format("%s/kitchen_device_info/list?deviceType=%s&pageNum=%d&pageSize=%d&keyWord=%s",
|
||||
WorkConfig.getBaseUrl(), "51", 1, 10, AppUtil.getSn(this));
|
||||
String result = service.httpGet(url, this);
|
||||
if (StringHelper.isEmptyAndNull(result)) {
|
||||
runOnUiThread(() -> XToastUtils.error("设备信息初始化失败,请检查网络连接或服务器状态"));
|
||||
} else {
|
||||
JSONObject jsonObject = JSONObject.parseObject(result);
|
||||
if (jsonObject.getIntValue("code") == 200) {
|
||||
String data = jsonObject.getString("rows");
|
||||
Log.e(TAG, "设备信息: " + data);
|
||||
if (data != null && !data.isEmpty() && !data.equals("[]")) {
|
||||
data = data.substring(1, data.length() - 1); // 去掉首尾的中括号
|
||||
DeviceInfo deviceInfo = JSONObject.parseObject(data, DeviceInfo.class);
|
||||
if (deviceInfo != null) {
|
||||
Log.e("LoginActivity", "设备信息: " + deviceInfo.toString());
|
||||
AppDatabase.getDatabase(this).deviceInfoDao().deleteAll();
|
||||
AppDatabase.getDatabase(this).deviceInfoDao().insert(deviceInfo);
|
||||
list.add("设备信息初始化成功");
|
||||
}
|
||||
}else{
|
||||
runOnUiThread(() -> XToastUtils.error("当前设备暂未注册,请联系管理员进行设备注册"));
|
||||
}
|
||||
} else {
|
||||
runOnUiThread(() -> XToastUtils.error(jsonObject.getString("msg")));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void initParameterInfo(List<String> list) {
|
||||
String jsonString = new JSONObject().toString();
|
||||
Log.i("getMealTime jsonString", jsonString);
|
||||
// 定义 JSON 的 MediaType
|
||||
MediaType mediaType = MediaType.parse(AppConstants.MEDIA_TYPE);
|
||||
// 创建 RequestBody
|
||||
RequestBody body = RequestBody.create(mediaType, jsonString);
|
||||
String url = WorkConfig.getBaseUrl() + UrlConfig.PARAM_SETTING_INFO;
|
||||
Request request = new Request.Builder().url(url)
|
||||
.post(body).build();
|
||||
try {
|
||||
String result = service.httpPost(url, body, this, request);
|
||||
Log.e(TAG, "参数信息: " + result);
|
||||
if (StringHelper.isEmptyAndNull(result)) {
|
||||
runOnUiThread(() -> XToastUtils.error("参数信息初始化失败,请检查网络连接或服务器状态"));
|
||||
} else {
|
||||
JSONObject jsonObject = JSONObject.parseObject(result);
|
||||
if (jsonObject.getIntValue("code") == 200) {
|
||||
String data = jsonObject.getString("data");
|
||||
if (data != null && !data.isEmpty()) {
|
||||
ParamSettingInfo paramSettingInfo = JSONObject.parseObject(data, ParamSettingInfo.class);
|
||||
if (paramSettingInfo != null) {
|
||||
Log.e("LoginActivity", "参数信息: " + paramSettingInfo.toString());
|
||||
ParamSettingInfo localParamSettingInfo = AppDatabase.getDatabase(this).parameterInfoDao().getOneInfo();
|
||||
if (localParamSettingInfo == null) {
|
||||
AppDatabase.getDatabase(this).parameterInfoDao().insert(paramSettingInfo);
|
||||
} else if (!localParamSettingInfo.getVersion().equals(paramSettingInfo.getVersion())) {
|
||||
AppDatabase.getDatabase(this).parameterInfoDao().deleteAll();
|
||||
AppDatabase.getDatabase(this).parameterInfoDao().insert(paramSettingInfo);
|
||||
}
|
||||
list.add("参数信息初始化成功");
|
||||
}
|
||||
}
|
||||
} else {
|
||||
runOnUiThread(() -> XToastUtils.error(jsonObject.getString("msg")));
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
Log.e(TAG, "initParameterInfo error: ", e);
|
||||
runOnUiThread(() -> {
|
||||
dialog.dismiss();
|
||||
dialog = null;
|
||||
XToastUtils.error("参数信息初始化失败,请检查网络连接或服务器状态");
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
private boolean checkParameters(String userName, String password) {
|
||||
if (userName.isEmpty()) {
|
||||
XToastUtils.warning("用户名不能为空");
|
||||
return false;
|
||||
}
|
||||
if (password.isEmpty()) {
|
||||
XToastUtils.warning("登录密码不能为空");
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDestroy() {
|
||||
super.onDestroy();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean dispatchTouchEvent(MotionEvent ev) {
|
||||
if (ev.getAction() == MotionEvent.ACTION_DOWN) {
|
||||
View v = getCurrentFocus();
|
||||
if (v instanceof EditText) {
|
||||
int[] location = new int[2];
|
||||
v.getLocationOnScreen(location);
|
||||
float x = ev.getRawX() + v.getLeft() - location[0];
|
||||
float y = ev.getRawY() + v.getTop() - location[1];
|
||||
if (x < v.getLeft() || x > v.getRight() || y < v.getTop() || y > v.getBottom()) {
|
||||
hideKeyboard(v);
|
||||
}
|
||||
}
|
||||
}
|
||||
return super.dispatchTouchEvent(ev);
|
||||
}
|
||||
|
||||
private void hideKeyboard(View view) {
|
||||
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
|
||||
if (imm != null) {
|
||||
imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 带圆形Loading的Dialog
|
||||
*/
|
||||
public void showTipDialog(String text) {
|
||||
dialog = new MaterialDialog.Builder(this)
|
||||
.iconRes(R.drawable.icon_tip)
|
||||
.limitIconToDefaultSize()
|
||||
.title("提示")
|
||||
.content(text)
|
||||
.progress(true, 0)
|
||||
.progressIndeterminateStyle(false)
|
||||
.cancelable(false)
|
||||
.show();
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,342 @@
|
|||
/*
|
||||
* Copyright (C) 2025 xuexiangjys(xuexiangjys@163.com)
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
package com.bonus.canteen.activity;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.app.ActivityManager;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.graphics.Color;
|
||||
import android.os.Bundle;
|
||||
import android.os.Handler;
|
||||
import android.os.Looper;
|
||||
import android.util.Log;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.MotionEvent;
|
||||
import android.view.View;
|
||||
import android.view.inputmethod.InputMethodManager;
|
||||
import android.widget.EditText;
|
||||
import android.widget.PopupWindow;
|
||||
import android.widget.TextView;
|
||||
|
||||
import androidx.fragment.app.Fragment;
|
||||
|
||||
import com.bonus.canteen.core.BaseActivity;
|
||||
import com.bonus.canteen.db.AppDatabase;
|
||||
import com.bonus.canteen.db.entity.base.LoginInfo;
|
||||
import com.bonus.canteen.fragment.EnterAndOutRecordsFragment;
|
||||
import com.bonus.canteen.fragment.EnterWarehouseFragment;
|
||||
import com.bonus.canteen.fragment.OutWarehouseFragment;
|
||||
import com.bonus.canteen.fragment.commonFragment.DocumentSelectionFragment;
|
||||
import com.bonus.canteen.fragment.commonFragment.ProductSelectionFragment;
|
||||
import com.bonus.canteen.receiver.ShutdownReceiver;
|
||||
import com.bonus.canteen.utils.AppUtil;
|
||||
import com.bonus.canteen.utils.GlideUtil;
|
||||
import com.bonus.canteen.utils.SimplePopupWindow;
|
||||
import com.bonus.canteen.utils.ThreadPoolManager;
|
||||
import com.weight.serialport.SerialPort;
|
||||
import com.xuexiang.xui.widget.dialog.DialogLoader;
|
||||
import com.xuexiang.xui.widget.dialog.materialdialog.MaterialDialog;
|
||||
import com.xuexiang.xutil.common.ClickUtils;
|
||||
|
||||
import org.checkerframework.checker.units.qual.C;
|
||||
import org.easydarwin.easypusher.R;
|
||||
import org.easydarwin.easypusher.databinding.ActivityMainBinding;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.OutputStream;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Date;
|
||||
import java.util.Locale;
|
||||
|
||||
public class MainActivity extends BaseActivity<ActivityMainBinding> implements ClickUtils.OnClick2ExitListener {
|
||||
private static final String COLOR_SELECT = "#409eff";
|
||||
private static final String COLOR_NO_SELECT = "#8a8a8a";
|
||||
private static final String TAG = "MainActivity";
|
||||
private MaterialDialog dialog;
|
||||
|
||||
@Override
|
||||
protected ActivityMainBinding viewBindingInflate(LayoutInflater inflater) {
|
||||
return ActivityMainBinding.inflate(inflater);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
setFullScreen();
|
||||
initView();
|
||||
Bundle extras = getIntent().getExtras();
|
||||
if (extras != null) {
|
||||
String pageType = extras.getString("pageType");
|
||||
if (pageType != null) {
|
||||
switch (pageType) {
|
||||
case "enter":
|
||||
binding.linearEnter.performClick();
|
||||
break;
|
||||
case "out":
|
||||
binding.linearOut.performClick();
|
||||
break;
|
||||
case "select":
|
||||
binding.linearSelect.performClick();
|
||||
break;
|
||||
default:
|
||||
binding.linearHome.performClick();
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
binding.linearHome.performClick();
|
||||
}
|
||||
}
|
||||
initTab();
|
||||
|
||||
}
|
||||
|
||||
private void setFullScreen() {
|
||||
getWindow().getDecorView().setSystemUiVisibility(
|
||||
View.SYSTEM_UI_FLAG_FULLSCREEN
|
||||
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
|
||||
| View.SYSTEM_UI_FLAG_LAYOUT_STABLE
|
||||
);
|
||||
}
|
||||
|
||||
protected void initView() {
|
||||
ThreadPoolManager.getExecutor().execute(()->{
|
||||
LoginInfo loginInfo = AppDatabase.getDatabase(this).loginInfoDao().getLoginInfoOne();
|
||||
binding.tvUserName.setText(loginInfo.getUserName());
|
||||
});
|
||||
binding.linearHome.setOnClickListener(view -> {
|
||||
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new Fragment()).commit();
|
||||
Intent intent = new Intent(this, HomeActivity.class);
|
||||
startActivity(intent);
|
||||
finish();
|
||||
});
|
||||
binding.linearEnter.setOnClickListener(view -> {
|
||||
binding.linearEnter.setVisibility(View.GONE);
|
||||
binding.linearEnterSidebar.setVisibility(View.VISIBLE);
|
||||
binding.imgInGood.setImageResource(R.drawable.ic_store_select);
|
||||
binding.tvInGood.setTextColor(Color.parseColor(COLOR_SELECT));
|
||||
binding.linearOutSidebar.setVisibility(View.GONE);
|
||||
binding.linearSelectSidebar.setVisibility(View.GONE);
|
||||
binding.linearOut.setVisibility(View.VISIBLE);
|
||||
binding.linearSelect.setVisibility(View.VISIBLE);
|
||||
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new Fragment()).commit();
|
||||
Bundle bundle = new Bundle();
|
||||
bundle.putString("type", "enter");
|
||||
switchPage(ProductSelectionFragment.class, bundle);
|
||||
});
|
||||
binding.linearOut.setOnClickListener(view -> {
|
||||
binding.linearOut.setVisibility(View.GONE);
|
||||
binding.linearEnterSidebar.setVisibility(View.GONE);
|
||||
binding.linearOutSidebar.setVisibility(View.VISIBLE);
|
||||
binding.imgOutGood.setImageResource(R.drawable.ic_outbound_select);
|
||||
binding.tvOutGood.setTextColor(Color.parseColor(COLOR_SELECT));
|
||||
binding.linearSelectSidebar.setVisibility(View.GONE);
|
||||
binding.linearEnter.setVisibility(View.VISIBLE);
|
||||
binding.linearSelect.setVisibility(View.VISIBLE);
|
||||
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new Fragment()).commit();
|
||||
Bundle bundle = new Bundle();
|
||||
bundle.putString("type", "out");
|
||||
switchPage(ProductSelectionFragment.class, bundle);
|
||||
});
|
||||
binding.linearSelect.setOnClickListener(view -> {
|
||||
binding.linearSelect.setVisibility(View.GONE);
|
||||
binding.linearEnterSidebar.setVisibility(View.GONE);
|
||||
binding.linearOutSidebar.setVisibility(View.GONE);
|
||||
binding.linearSelectSidebar.setVisibility(View.VISIBLE);
|
||||
binding.linearOut.setVisibility(View.VISIBLE);
|
||||
binding.linearEnter.setVisibility(View.VISIBLE);
|
||||
binding.imgSelectGood.setImageResource(R.drawable.ic_select_good_select);
|
||||
binding.tvSelectGood.setTextColor(Color.parseColor(COLOR_SELECT));
|
||||
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new Fragment()).commit();
|
||||
Bundle bundle = new Bundle();
|
||||
bundle.putString("type", "select");
|
||||
switchPage(ProductSelectionFragment.class, bundle);
|
||||
});
|
||||
|
||||
binding.linearUser.setOnClickListener(view -> {
|
||||
DialogLoader.getInstance().showConfirmDialog(
|
||||
this,
|
||||
"是否退出登录?",
|
||||
getString(R.string.lab_yes),
|
||||
(dialog, which) -> {
|
||||
//跳转到登陆界面
|
||||
startActivity(new Intent(this, LoginActivity.class));
|
||||
finish();
|
||||
},
|
||||
getString(R.string.lab_no),
|
||||
(dialog, which) -> dialog.dismiss());
|
||||
});
|
||||
}
|
||||
|
||||
private void initTab() {
|
||||
View.OnClickListener tabClickListener = view -> {
|
||||
int id = view.getId();
|
||||
// 显示加载中阴影层
|
||||
binding.loadingOverlay.setVisibility(View.VISIBLE);
|
||||
// 显示加载中阴影层
|
||||
binding.loadingText.setVisibility(View.VISIBLE);
|
||||
changView();
|
||||
// 清除上一个fragment
|
||||
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new Fragment()).commit();
|
||||
if (id == R.id.linear_in_good) {
|
||||
binding.tvInGood.setTextColor(Color.parseColor(COLOR_SELECT));
|
||||
binding.imgInGood.setImageResource(R.drawable.ic_store_select);
|
||||
Bundle bundle = new Bundle();
|
||||
bundle.putString("type", "enter");
|
||||
switchPage(ProductSelectionFragment.class, bundle);
|
||||
}else if(id == R.id.linear_in_document){
|
||||
binding.tvInDocument.setTextColor(Color.parseColor(COLOR_SELECT));
|
||||
binding.imgInDocument.setImageResource(R.drawable.ic_document_select);
|
||||
Bundle bundle = new Bundle();
|
||||
bundle.putString("type", "enterInDocument");
|
||||
switchPage(DocumentSelectionFragment.class,bundle);
|
||||
}else if (id == R.id.linear_out_good) {
|
||||
binding.tvOutGood.setTextColor(Color.parseColor(COLOR_SELECT));
|
||||
binding.imgOutGood.setImageResource(R.drawable.ic_outbound_select);
|
||||
Bundle bundle = new Bundle();
|
||||
bundle.putString("type", "out");
|
||||
switchPage(ProductSelectionFragment.class, bundle);
|
||||
} else if(id == R.id.linear_out_document){
|
||||
binding.tvOutDocument.setTextColor(Color.parseColor(COLOR_SELECT));
|
||||
binding.imgOutDocument.setImageResource(R.drawable.ic_document_select);
|
||||
Bundle bundle = new Bundle();
|
||||
bundle.putString("type", "outInDocument");
|
||||
switchPage(DocumentSelectionFragment.class,bundle);
|
||||
}else if (id == R.id.linear_record) {
|
||||
binding.tvRecord.setTextColor(Color.parseColor(COLOR_SELECT));
|
||||
binding.imgRecord.setImageResource(R.drawable.ic_in_and_out_records_select);
|
||||
switchPage(EnterAndOutRecordsFragment.class);
|
||||
}else if (id == R.id.linear_select_good) {
|
||||
binding.tvSelectGood.setTextColor(Color.parseColor(COLOR_SELECT));
|
||||
binding.imgSelectGood.setImageResource(R.drawable.ic_select_good_select);
|
||||
Bundle bundle = new Bundle();
|
||||
bundle.putString("type", "select");
|
||||
switchPage(ProductSelectionFragment.class, bundle);
|
||||
}
|
||||
// 延迟关闭加载中阴影层,确保切换完成
|
||||
binding.loadingOverlay.postDelayed(() -> {
|
||||
binding.loadingOverlay.setVisibility(View.GONE);
|
||||
binding.loadingText.setVisibility(View.GONE);
|
||||
}, 300);
|
||||
};
|
||||
binding.linearInGood.setOnClickListener(tabClickListener);
|
||||
binding.linearInDocument.setOnClickListener(tabClickListener);
|
||||
binding.linearOutGood.setOnClickListener(tabClickListener);
|
||||
binding.linearOutDocument.setOnClickListener(tabClickListener);
|
||||
binding.linearRecord.setOnClickListener(tabClickListener);
|
||||
binding.linearSelectGood.setOnClickListener(tabClickListener);
|
||||
}
|
||||
|
||||
private void changView(){
|
||||
binding.imgInGood.setImageResource(R.drawable.ic_store_no_select);
|
||||
binding.tvInGood.setTextColor(Color.parseColor(COLOR_NO_SELECT));
|
||||
binding.imgInDocument.setImageResource(R.drawable.ic_document);
|
||||
binding.tvInDocument.setTextColor(Color.parseColor(COLOR_NO_SELECT));
|
||||
binding.imgOutGood.setImageResource(R.drawable.ic_outbound_no_select);
|
||||
binding.tvOutGood.setTextColor(Color.parseColor(COLOR_NO_SELECT));
|
||||
binding.imgOutDocument.setImageResource(R.drawable.ic_document);
|
||||
binding.tvOutDocument.setTextColor(Color.parseColor(COLOR_NO_SELECT));
|
||||
binding.imgRecord.setImageResource(R.drawable.ic_in_and_out_records_no_select);
|
||||
binding.tvRecord.setTextColor(Color.parseColor(COLOR_NO_SELECT));
|
||||
binding.imgSelectGood.setImageResource(R.drawable.ic_select_good);
|
||||
binding.tvSelectGood.setTextColor(Color.parseColor(COLOR_NO_SELECT));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRetry() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onExit() {
|
||||
}
|
||||
|
||||
/**
|
||||
* 只需要在最父级的activity中重写dispatchTouchEvent方法,
|
||||
* 在 Activity 中使用 dispatchTouchEvent 方案,无需在子布局重复注册触摸监听
|
||||
*
|
||||
* @param ev 触摸事件
|
||||
* @return 返回值
|
||||
*/
|
||||
@Override
|
||||
public boolean dispatchTouchEvent(MotionEvent ev) {
|
||||
if (ev.getAction() == MotionEvent.ACTION_DOWN) {
|
||||
View v = getCurrentFocus();
|
||||
if (v instanceof EditText) {
|
||||
int[] location = new int[2];
|
||||
v.getLocationOnScreen(location);
|
||||
float x = ev.getRawX() + v.getLeft() - location[0];
|
||||
float y = ev.getRawY() + v.getTop() - location[1];
|
||||
if (x < v.getLeft() || x > v.getRight() || y < v.getTop() || y > v.getBottom()) {
|
||||
hideKeyboard(v);
|
||||
}
|
||||
}
|
||||
}
|
||||
return super.dispatchTouchEvent(ev);
|
||||
}
|
||||
|
||||
private void hideKeyboard(View view) {
|
||||
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
|
||||
if (imm != null) {
|
||||
imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onDestroy() {
|
||||
super.onDestroy();
|
||||
ThreadPoolManager.shutdown();
|
||||
}
|
||||
|
||||
public void updateView(int i) {
|
||||
Log.d(TAG, "updateView: " + i);
|
||||
changView();
|
||||
switch (i) {
|
||||
case 1:
|
||||
binding.linearEnter.performClick();
|
||||
break;
|
||||
case 2:
|
||||
binding.linearOut.performClick();
|
||||
break;
|
||||
case 3:
|
||||
binding.linearEnter.performClick();
|
||||
binding.linearInDocument.performClick();
|
||||
break;
|
||||
case 4:
|
||||
binding.linearOut.performClick();
|
||||
binding.linearOutDocument.performClick();
|
||||
break;
|
||||
default:
|
||||
binding.linearHome.performClick();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
public void showTipDialog(String text) {
|
||||
dialog = new MaterialDialog.Builder(this)
|
||||
.iconRes(R.drawable.icon_tip)
|
||||
.limitIconToDefaultSize()
|
||||
.title("提示")
|
||||
.content(text)
|
||||
.progress(true, 0)
|
||||
.progressIndeterminateStyle(false)
|
||||
.cancelable(false)
|
||||
.show();
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,95 @@
|
|||
/*
|
||||
* Copyright (C) 2025 xuexiangjys(xuexiangjys@163.com)
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
package com.bonus.canteen.activity;
|
||||
|
||||
import android.view.KeyEvent;
|
||||
|
||||
import com.bonus.canteen.db.AppDatabase;
|
||||
import com.bonus.canteen.upgrade.UpdateDown;
|
||||
import com.bonus.canteen.utils.TokenUtils;
|
||||
import com.bonus.canteen.utils.WorkConfig;
|
||||
import com.xuexiang.xui.utils.KeyboardUtils;
|
||||
import com.xuexiang.xui.widget.activity.BaseSplashActivity;
|
||||
import com.xuexiang.xutil.app.ActivityUtils;
|
||||
|
||||
import org.easydarwin.easypusher.R;
|
||||
|
||||
import me.jessyan.autosize.internal.CancelAdapt;
|
||||
|
||||
/**
|
||||
* 启动页【无需适配屏幕大小】
|
||||
*
|
||||
* @author xuexiang
|
||||
* @since 2019-06-30 17:32
|
||||
*/
|
||||
public class SplashActivity extends BaseSplashActivity implements CancelAdapt {
|
||||
UpdateDown down = new UpdateDown(SplashActivity.this);
|
||||
@Override
|
||||
protected long getSplashDurationMillis() {
|
||||
return 500;
|
||||
}
|
||||
|
||||
/**
|
||||
* activity启动后的初始化
|
||||
*/
|
||||
@Override
|
||||
protected void onCreateActivity() {
|
||||
initSplashView(R.drawable.xui_config_bg_splash);
|
||||
startSplash(false);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 启动页结束后的动作
|
||||
*/
|
||||
@Override
|
||||
protected void onSplashFinished() {
|
||||
loginOrGoMainPage();
|
||||
}
|
||||
|
||||
private void loginOrGoMainPage() {
|
||||
// if (NetworkUtils.isNetworkConnected(this)) {
|
||||
// new Thread(() -> {
|
||||
// ParamSettingInfo paramSettingInfo = AppDatabase.getDatabase(this).parameterInfoDao().getOneInfo();
|
||||
// String url = WorkConfig.getBaseUrl();
|
||||
// if (paramSettingInfo != null){
|
||||
// url = paramSettingInfo.getIpAddress() + "/smart-canteen";
|
||||
// }
|
||||
// boolean isLatestVersion = down.checkUpdate(url);
|
||||
// runOnUiThread(() -> {
|
||||
// if (!isLatestVersion) {
|
||||
// navigateToNextPage();
|
||||
// }
|
||||
// });
|
||||
// }).start();
|
||||
// } else {
|
||||
navigateToNextPage();
|
||||
// }
|
||||
}
|
||||
private void navigateToNextPage() {
|
||||
ActivityUtils.startActivity(LoginActivity.class);
|
||||
finish();
|
||||
}
|
||||
/**
|
||||
* 菜单、返回键响应
|
||||
*/
|
||||
@Override
|
||||
public boolean onKeyDown(int keyCode, KeyEvent event) {
|
||||
return KeyboardUtils.onDisableBackKeyDown(keyCode) && super.onKeyDown(keyCode, event);
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue