Commit 117ee100 by 宁斌

1、新增功能管理相關類 2、Logan相關類調整

parent c4e6855d
<?xml version="1.0" encoding="utf-8"?>
<manifest package="com.jess.arms"
>
<manifest package="com.jess.arms">
</manifest>
......@@ -48,8 +48,11 @@ import com.jess.arms.mvp.IView;
import java.io.File;
import java.lang.reflect.Field;
import java.security.MessageDigest;
import java.text.NumberFormat;
import java.util.List;
import java.util.Locale;
import java.util.UUID;
/**
* ================================================
......@@ -648,11 +651,6 @@ public class DeviceUtils {
context.startActivity(intent);
}
public static String getIMEI(Context context) {
TelephonyManager tel = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
return tel.getDeviceId();
}
public static String getPhoneType() {
return Build.MODEL;
}
......@@ -873,6 +871,164 @@ public class DeviceUtils {
}
/**
* 获得设备硬件标识
*
* @param context 上下文
* @return 设备硬件标识
*/
public static String getDeviceId(Context context) {
StringBuilder sbDeviceId = new StringBuilder();
//获得设备默认IMEI(>=6.0 需要ReadPhoneState权限)
String imei = getIMEI(context);
//获得AndroidId(无需权限)
String androidid = getAndroidId(context);
//获得设备序列号(无需权限)
String serial = getSERIAL();
//获得硬件uuid(根据硬件相关属性,生成uuid)(无需权限)
String uuid = getDeviceUUID().replace("-", "");
//追加imei
if (imei != null && imei.length() > 0) {
sbDeviceId.append(imei);
sbDeviceId.append("|");
}
//追加androidid
if (androidid != null && androidid.length() > 0) {
sbDeviceId.append(androidid);
sbDeviceId.append("|");
}
//追加serial
if (serial != null && serial.length() > 0) {
sbDeviceId.append(serial);
sbDeviceId.append("|");
}
//追加硬件uuid
if (uuid != null && uuid.length() > 0) {
sbDeviceId.append(uuid);
}
//生成SHA1,统一DeviceId长度
if (sbDeviceId.length() > 0) {
try {
byte[] hash = getHashByString(sbDeviceId.toString());
String sha1 = bytesToHex(hash);
if (sha1 != null && sha1.length() > 0) {
//返回最终的DeviceId
return sha1;
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
//如果以上硬件标识数据均无法获得,
//则DeviceId默认使用系统随机数,这样保证DeviceId不为空
return UUID.randomUUID().toString().replace("-", "");
}
//需要获得READ_PHONE_STATE权限,>=6.0,默认返回null
private static String getIMEI(Context context) {
try {
TelephonyManager tm = (TelephonyManager)
context.getSystemService(Context.TELEPHONY_SERVICE);
return tm.getDeviceId();
} catch (Exception ex) {
ex.printStackTrace();
}
return "";
}
/**
* 获得设备的AndroidId
*
* @param context 上下文
* @return 设备的AndroidId
*/
private static String getAndroidId(Context context) {
try {
return Settings.Secure.getString(context.getContentResolver(),
Settings.Secure.ANDROID_ID);
} catch (Exception ex) {
ex.printStackTrace();
}
return "";
}
/**
* 获得设备序列号(如:WTK7N16923005607), 个别设备无法获取
*
* @return 设备序列号
*/
private static String getSERIAL() {
try {
return Build.SERIAL;
} catch (Exception ex) {
ex.printStackTrace();
}
return "";
}
/**
* 获得设备硬件uuid
* 使用硬件信息,计算出一个随机数
*
* @return 设备硬件uuid
*/
private static String getDeviceUUID() {
try {
String dev = "3883756" +
Build.BOARD.length() % 10 +
Build.BRAND.length() % 10 +
Build.DEVICE.length() % 10 +
Build.HARDWARE.length() % 10 +
Build.ID.length() % 10 +
Build.MODEL.length() % 10 +
Build.PRODUCT.length() % 10 +
Build.SERIAL.length() % 10;
return new UUID(dev.hashCode(),
Build.SERIAL.hashCode()).toString();
} catch (Exception ex) {
ex.printStackTrace();
return "";
}
}
/**
* 取SHA1
* @param data 数据
* @return 对应的hash值
*/
private static byte[] getHashByString(String data)
{
try{
MessageDigest messageDigest = MessageDigest.getInstance("SHA1");
messageDigest.reset();
messageDigest.update(data.getBytes("UTF-8"));
return messageDigest.digest();
} catch (Exception e){
return "".getBytes();
}
}
/**
* 转16进制字符串
* @param data 数据
* @return 16进制字符串
*/
private static String bytesToHex(byte[] data){
StringBuilder sb = new StringBuilder();
String stmp;
for (int n = 0; n < data.length; n++){
stmp = (Integer.toHexString(data[n] & 0xFF));
if (stmp.length() == 1)
sb.append("0");
sb.append(stmp);
}
return sb.toString().toUpperCase(Locale.CHINA);
}
}
......@@ -155,9 +155,13 @@ dependencies {
debugImplementation 'com.didichuxing.doraemonkit:dokitx:3.3.3'
releaseImplementation 'com.didichuxing.doraemonkit:dokitx-no-op:3.3.3'
//美團金剛狼日誌框架
api rootProject.ext.dependencies['logan']
implementation rootProject.ext.dependencies['logan']
//RecyclerView 流式佈局layoutManager
api 'com.google.android:flexbox:1.0.0'
// 用于生成Java文件的库
// implementation 'com.squareup:javapoet:1.13.0'
// implementation 'com.google.auto.service:auto-service:1.0-rc6'
// annotationProcessor 'com.google.auto.service:auto-service:1.0-rc6'
api rootProject.ext.dependencies["permissionx"]
api rootProject.ext.dependencies["design"]
......
......@@ -16,7 +16,7 @@ import lombok.Data;
@Data
public class ResturantInfoManager {
private static ResturantInfoManager resturantInfoManager = null;
private static ResturantInfoManager sResturantInfoManager = null;
/**
* 品牌信息
......@@ -30,22 +30,38 @@ public class ResturantInfoManager {
private ResturantInfoManager() {
}
public static ResturantInfoManager getInstance() {
if (resturantInfoManager == null) {
public static ResturantInfoManager newInstance() {
if (sResturantInfoManager == null) {
synchronized (ResturantInfoManager.class) {
if (resturantInfoManager == null) {
resturantInfoManager = new ResturantInfoManager();
if (sResturantInfoManager == null) {
sResturantInfoManager = new ResturantInfoManager();
}
}
}
return resturantInfoManager;
return sResturantInfoManager;
}
public void putResturantInfo(RestaurantInfo info) {
SPUtils.put(UserConstans.gsPosShopId, info.getGsPosShopId());
SPUtils.put(UserConstans.restaurantId, info.getRestaurantId());
SPUtils.put(UserConstans.restaurantName, info.getRestaurantName());
}
public void putBrandInfo(BrandInfo info) {
SPUtils.put(UserConstans.brandId, info.getBrandId());
SPUtils.put(UserConstans.brandName, info.getBrandName());
}
public void removeResturantInfo() {
SPUtils.remove(UserConstans.gsPosShopId);
SPUtils.remove(UserConstans.restaurantId);
SPUtils.remove(UserConstans.restaurantName);
}
public void setResturantInfoToLocation(RestaurantInfo info) {
// SPUtils.put(UserConstans.restaurantId, info);
// SPUtils.put(UserConstans.restaurantId, info.ge);
// SPUtils.put(UserConstans.restaurantId, restaurantId);
public void removeBrandInfo() {
SPUtils.remove(UserConstans.gsPosShopId);
SPUtils.remove(UserConstans.restaurantId);
SPUtils.remove(UserConstans.restaurantName);
}
}
......@@ -3,7 +3,10 @@ package com.gingersoft.gsa.cloud.account.user;
/**
* Created by Wyh on 2019/12/21.
*/
public interface UserConstans {
public class UserConstans {
public final static String IS_LOGIN = "is_login";
public final static String LOGIN_USERNAME = "login_account";
public final static String LOGIN_PASSWORD = "login_password";
......
package com.gingersoft.gsa.cloud.account.user;
import com.gingersoft.gsa.cloud.account.restaurant.ResturantInfoManager;
import com.gingersoft.gsa.cloud.account.user.info.UserInfo;
import com.gingersoft.gsa.cloud.account.user.state.LoginedState;
import com.gingersoft.gsa.cloud.account.user.state.LogoutState;
import com.gingersoft.gsa.cloud.account.user.state.UserState;
import com.gingersoft.gsa.cloud.base.utils.other.SPUtils;
import lombok.Getter;
import lombok.Setter;
/**
* @author : bin
* @create date: 2020-11-21
* @update date: 2020-11-21
* @description:用戶接口和狀態管理類
*/
@Getter
@Setter
public class UserContext {
private static UserContext sUserContextManger = null;
/**
* 用戶狀態
*/
private UserState state = new LogoutState();
/**
* 用戶信息
*/
private UserInfo info;
private UserContext() {
}
public static UserContext newInstance() {
if (sUserContextManger == null) {
synchronized (UserContext.class) {
if (sUserContextManger == null) {
sUserContextManger = new UserContext();
}
}
}
return sUserContextManger;
}
public void logined(){
state.logined();
}
public void logOut(){
state.logOut();
}
public void toTargetPage(String componentName,String actionName){
state.toTargetPage(componentName,actionName);
}
/**
* 用戶是否登錄
* @return
*/
public boolean isLogin(){
if(state instanceof LoginedState){
return true;
}
return false;
}
public void putUserInfo(UserInfo info) {
SPUtils.put(UserConstans.token, info.getUserName());
SPUtils.put(UserConstans.memberId, info.getUserName());
SPUtils.put(UserConstans.memberName, info.getUserName());
}
public void removeUserInfo(){
SPUtils.remove(UserConstans.token);
SPUtils.remove(UserConstans.memberId);
SPUtils.remove(UserConstans.memberName);
//刪除用戶信息的同時 將品牌,餐廳信息一起刪除
ResturantInfoManager.newInstance().removeBrandInfo();
ResturantInfoManager.newInstance().removeResturantInfo();
}
public static String getLoginToken() {
return (String) SPUtils.get(UserConstans.token, "");
}
public static int getMemberId() {
return (int) SPUtils.get(UserConstans.memberId, 0);
}
public static String getMemberName() {
return (String) SPUtils.get(UserConstans.memberName, "");
}
}
package com.gingersoft.gsa.cloud.account.user;
import com.gingersoft.gsa.cloud.account.user.info.UserInfo;
import com.gingersoft.gsa.cloud.account.user.state.UserState;
import lombok.Getter;
import lombok.Setter;
/**
* @author : bin
* @create date: 2020-11-21
* @update date: 2020-11-21
* @description:用戶信息管理:如用戶登錄狀態,用戶信息等。。
*/
@Getter
@Setter
public class UserContextManger {
private static UserContextManger userContextManger = null;
/**
* 用戶狀態
*/
private UserState state;
/**
* 用戶信息
*/
private UserInfo info;
private UserContextManger() {
}
public static UserContextManger getInstance() {
if (userContextManger == null) {
synchronized (UserContextManger.class) {
if (userContextManger == null) {
userContextManger = new UserContextManger();
}
}
}
return userContextManger;
}
}
package com.gingersoft.gsa.cloud.account.user.info;
import com.gingersoft.gsa.cloud.base.utils.other.SPUtils;
import com.gingersoft.gsa.cloud.account.user.UserConstans;
/**
* @author : bin
* @create date: 2020-11-21
* @update date: 2020-11-21
* @description:
*/
public class UserInfoManger {
private static UserInfoManger userInfoManger = null;
private UserInfoManger() {
}
public static UserInfoManger getInstance() {
if (userInfoManger == null) {
synchronized (UserInfoManger.class) {
if (userInfoManger == null) {
userInfoManger = new UserInfoManger();
}
}
}
return userInfoManger;
}
public void setUserInfoToLocation(UserInfo info) {
SPUtils.put(UserConstans.token, info.getUserName());
SPUtils.put(UserConstans.memberId, info.getUserName());
SPUtils.put(UserConstans.memberName, info.getUserName());
}
public static String getLoginToken() {
return (String) SPUtils.get(UserConstans.token, "");
}
public static int getMemberId() {
return (int) SPUtils.get(UserConstans.memberId, 0);
}
public static String getMemberName() {
return (String) SPUtils.get(UserConstans.memberName, "");
}
}
package com.gingersoft.gsa.cloud.account.user.state;
import com.billy.cc.core.component.CC;
import com.gingersoft.gsa.cloud.account.user.UserContext;
import com.gingersoft.gsa.cloud.base.utils.other.SPUtils;
import com.gingersoft.gsa.cloud.constans.PrintConstans;
import com.gingersoft.gsa.cloud.account.user.UserConstans;
/**
* @author : bin
* @create date: 2020-11-21
* @update date: 2020-11-21
* @description:用戶未登錄
* @description:已登錄狀態
*/
public class NotLoginState implements UserState{
public class LoginedState implements UserState{
@Override
public void toLoginPage() {
public void logined() {
//跳轉登錄頁面
CC.obtainBuilder("User.Component.Login")
.setActionName("showActivityA")
......@@ -22,12 +26,17 @@ public class NotLoginState implements UserState{
@Override
public void logOut() {
//設置用戶狀態為登出狀態
UserContext.newInstance().setState(new LogoutState());
UserContext.newInstance().logOut();
}
@Override
public void toTargetPage() {
public void toTargetPage(String componentName, String actionName) {
CC.obtainBuilder(componentName)
.setActionName(actionName)
.build()
.call();
}
}
package com.gingersoft.gsa.cloud.account.user.state;
import com.billy.cc.core.component.CC;
import com.gingersoft.gsa.cloud.account.restaurant.ResturantInfoManager;
import com.gingersoft.gsa.cloud.account.user.UserConstans;
import com.gingersoft.gsa.cloud.account.user.UserContext;
import com.gingersoft.gsa.cloud.base.utils.other.SPUtils;
import com.gingersoft.gsa.cloud.constans.PrintConstans;
import com.gingersoft.gsa.cloud.account.user.UserConstans;
/**
* @author : bin
* @create date: 2020-11-21
* @update date: 2020-11-21
* @description:用戶已登錄
* @description:未登錄狀態
*/
public class HasLoginState implements UserState{
public class LogoutState implements UserState{
@Override
public void toLoginPage() {
public void logined() {
//設置用戶狀態為登錄狀態
UserContext.newInstance().setState(new LoginedState());
UserContext.newInstance().logined();
}
@Override
public void logOut() {
SPUtils.remove(UserConstans.token);
SPUtils.remove(UserConstans.memberId);
SPUtils.remove(UserConstans.brandId);
SPUtils.remove(UserConstans.brandName);
SPUtils.remove(UserConstans.restaurantId);
SPUtils.remove(UserConstans.restaurantName);
SPUtils.remove(UserConstans.memberName);
SPUtils.remove(UserConstans.brandRestaurantInfos);
SPUtils.remove(UserConstans.gsPosShopId);
SPUtils.put(PrintConstans.IS_LOGIN, false);
SPUtils.put(UserConstans.IS_LOGIN, false);
UserContext.newInstance().removeUserInfo();
//关闭Prj打印服務
CC.obtainBuilder("Component.Print")
.setActionName("stopPrintService")
......@@ -43,8 +43,11 @@ public class HasLoginState implements UserState{
}
@Override
public void toTargetPage() {
public void toTargetPage(String componentName, String actionName) {
CC.obtainBuilder(componentName)
.setActionName(actionName)
.build()
.call();
}
}
......@@ -4,14 +4,14 @@ package com.gingersoft.gsa.cloud.account.user.state;
* @author : bin
* @create date: 2020-11-21
* @update date: 2020-11-21
* @description: 已登錄 未登錄
* @description: 用戶狀態接口
* */
public interface UserState {
/**
* 跳轉到登錄頁面
* 登入
*/
void toLoginPage();
void logined();
/**
* 登出
......@@ -19,7 +19,9 @@ public interface UserState {
void logOut();
/**
* 跳轉到目標也
* 跳轉到目標頁
* @param componentName 目標組件名
* @param actionName 目標activity名
*/
void toTargetPage();
void toTargetPage(String componentName,String actionName);
}
......@@ -10,6 +10,7 @@ import android.os.RemoteException;
import androidx.annotation.NonNull;
import com.billy.cc.core.component.CC;
import com.dianping.logan.Logan;
import com.dianping.logan.OnLoganProtocolStatus;
import com.didichuxing.doraemonkit.DoraemonKit;
import com.elvishew.xlog.LogConfiguration;
import com.elvishew.xlog.LogLevel;
......@@ -35,6 +36,7 @@ import com.gingersoft.gsa.cloud.constans.PrintConstans;
import com.gingersoft.gsa.cloud.account.user.UserConstans;
import com.gingersoft.gsa.cloud.database.DaoManager;
import com.gingersoft.gsa.cloud.config.LoganConfig;
import com.gingersoft.gsa.cloud.logan.LoganManager;
import com.gingersoft.gsa.cloud.ui.loadsir.CustomCallback;
import com.gingersoft.gsa.cloud.ui.loadsir.EmptyCallback;
import com.gingersoft.gsa.cloud.ui.loadsir.ErrorCallback;
......@@ -50,6 +52,8 @@ import com.scwang.smartrefresh.layout.header.ClassicsHeader;
import java.io.File;
import java.util.Locale;
import java.util.logging.LogManager;
import me.jessyan.autosize.AutoSize;
import me.jessyan.autosize.AutoSizeConfig;
import me.jessyan.autosize.onAdaptListener;
......@@ -63,6 +67,7 @@ import com.gingersoft.gsa.cloud.config.expandconfig.ExpandInfoSetting;
*/
public class GsaCloudApplication extends BaseApplication {
private static final String TAG = GsaCloudApplication.class.getSimpleName();
/**
* 系统上下文
*/
......@@ -98,16 +103,20 @@ public class GsaCloudApplication extends BaseApplication {
@Override
public void onCreate() {
super.onCreate();
mAppContext = this;
isLogin = (boolean) SPUtils.get(PrintConstans.IS_LOGIN, false);
isLogin = (boolean) SPUtils.get(UserConstans.IS_LOGIN, false);
CC.enableVerboseLog(true);
CC.enableDebug(true);
CC.enableRemoteCC(true);
//初始化美團日誌框架
initLogan();
LoganManager.w_action(TAG, TAG + ": onCreate start.....");
//初始化服務器地址
initDomainUrl();
//初始化側滑回退
// QMUISwipeBackActivityManager.init(this);
//初始化主題管理器
......@@ -126,7 +135,6 @@ public class GsaCloudApplication extends BaseApplication {
initPrint();
//初始化日誌管理庫
initXLog();
initLogan();
//初始化crash記錄
AppCrashHandler.getInstance().init(this);
......@@ -135,6 +143,7 @@ public class GsaCloudApplication extends BaseApplication {
//上傳餐廳擴展信息
ExpandInfoSetting.initUpdateExtendedConfiguration(uiStyleConfiguration, functionConfiguration);
LoganManager.w_action(TAG, TAG + ": onCreate end.....");
}
/**
......@@ -142,13 +151,19 @@ public class GsaCloudApplication extends BaseApplication {
*/
private void initLogan() {
com.dianping.logan.LoganConfig config = new com.dianping.logan.LoganConfig.Builder()
.setCachePath(getApplicationContext().getFilesDir().getAbsolutePath())
.setPath(getApplicationContext().getExternalFilesDir(null).getAbsolutePath()
.setCachePath(getFilesDir().getAbsolutePath())
.setPath(getExternalFilesDir(null).getAbsolutePath()
+ File.separator + LoganConfig.FILE_NAME)
.setEncryptKey16(LoganConfig.EncryptKey16.getBytes())
.setEncryptIV16(LoganConfig.EncryptIV16.getBytes())
.build();
Logan.init(config);
Logan.setOnLoganProtocolStatus(new OnLoganProtocolStatus() {
@Override
public void loganProtocolStatus(String cmd, int code) {
LoganManager.w_code(TAG,"loganProtocolStatus: "+cmd);
}
});
}
/**
......@@ -455,7 +470,7 @@ public class GsaCloudApplication extends BaseApplication {
SPUtils.remove(UserConstans.memberName);
SPUtils.remove(UserConstans.brandRestaurantInfos);
SPUtils.remove(UserConstans.gsPosShopId);
SPUtils.put(PrintConstans.IS_LOGIN, false);
SPUtils.put(UserConstans.IS_LOGIN, false);
//关闭Prj打印服務
CC.obtainBuilder("Component.Print")
.setActionName("stopPrintService")
......
......@@ -19,7 +19,7 @@ import com.gingersoft.gsa.cloud.base.utils.JsonUtils;
import com.gingersoft.gsa.cloud.base.utils.log.LogUtil;
import com.gingersoft.gsa.cloud.base.utils.okhttpUtils.OkHttp3Utils;
import com.gingersoft.gsa.cloud.constans.HttpsConstans;
import com.gingersoft.gsa.cloud.logan.LoganUtils;
import com.gingersoft.gsa.cloud.logan.LoganManager;
import com.jess.arms.di.component.AppComponent;
import com.jess.arms.utils.ArmsUtils;
import com.jess.arms.utils.DeviceUtils;
......@@ -214,7 +214,7 @@ public class AppCrashHandler implements UncaughtExceptionHandler {
String stacktrace = result.toString();
printWriter.close();
LoganUtils.w_crash("AppCrashHandler: "+stacktrace);
LoganManager.w_crash(stacktrace);
//保存错误报告到文件
saveCrashInfo2File(ex);
......
......@@ -50,6 +50,7 @@ public class LogUtil {
//剩余部分
d(TAG, msg);
}
public static void d(String tagName, String msg) {
if (isPrintLog && msg != null) {
int strLength = msg.length();
......
......@@ -12,7 +12,7 @@ public class LoganConfig {
public static final String EncryptKey16 = "0123456789012345";
public static final String EncryptIV16 = "0123456789012345";
public static final String APP_ID = "gingersoft1008611";
public static final String UPLOAD_LOG_URL = "http://192.168.1.113:8080/logan-web/logan/upload.json";
public static final String UPLOAD_LOG_URL = "http://192.168.1.113:8082/logan/upload.json";
/**
* 代码日志
......
......@@ -16,4 +16,6 @@ public class OkHttpConfig {
* okhttp读写超时20秒
*/
public static final byte REQUEST_TIMEOUT = 20;
}
......@@ -9,7 +9,7 @@ import com.billy.cc.core.component.CC;
import com.gingersoft.gsa.cloud.base.R;
import com.gingersoft.gsa.cloud.app.GsaCloudApplication;
import com.gingersoft.gsa.cloud.base.utils.toast.ToastUtils;
import com.gingersoft.gsa.cloud.logan.LoganUtils;
import com.gingersoft.gsa.cloud.logan.LoganManager;
import com.google.gson.JsonIOException;
import com.google.gson.JsonParseException;
import com.jess.arms.utils.ArmsUtils;
......@@ -51,7 +51,7 @@ public class MyResponseErrorListener implements ResponseErrorListener {
// ArmsUtils.snackbarText(msg);
// LogUtil.d("handleResponseError: " + t.getMessage());
LoganUtils.w_network("請求錯誤: "+t.getMessage());
LoganManager.w_network("請求錯誤: "+t.getMessage());
if (!TextUtils.isEmpty(msg)) {
ToastUtils.show(context, msg);
......
package com.gingersoft.gsa.cloud.config.globalconfig.applyOptions.intercept;
import com.gingersoft.gsa.cloud.logan.LoganUtils;
import com.gingersoft.gsa.cloud.logan.LoganManager;
import java.io.IOException;
......@@ -27,11 +27,11 @@ public class LoggingInterceptor implements Interceptor {
sb.append(body.encodedName(i) + "=" + body.encodedValue(i) + ",");
}
sb.delete(sb.length() - 1, sb.length());
LoganUtils.w_network( String.format("發送請求 %s on %s %n%s %nRequestParams:{%s}",
LoganManager.w_network(String.format("發送請求 %s on %s %n%s %nRequestParams:{%s}",
request.url(), chain.connection(), request.headers(), sb.toString()));
}
} else {
LoganUtils.w_network(String.format("發送請求 %s on %s%n%s",
LoganManager.w_network(String.format("發送請求 %s on %s%n%s",
request.url(), chain.connection(), request.headers()));
}
Response response = chain.proceed(request);
......@@ -40,7 +40,7 @@ public class LoggingInterceptor implements Interceptor {
//因为response.body().string()之后,response中的流会被关闭,程序会报错,我们需要创建出一
//个新的response给应用层处理
ResponseBody responseBody = response.peekBody(1024 * 1024);
LoganUtils.w_network( String.format("接收響應: [%s] %n返回json:【%s】 %.1fms %n%s",
LoganManager.w_network( String.format("接收響應: [%s] %n返回json:【%s】 %.1fms %n%s",
response.request().url(),
responseBody.string(),
(t2 - t1) / 1e6d,
......
......@@ -10,7 +10,7 @@ import com.gingersoft.gsa.cloud.app.GsaCloudApplication;
import com.gingersoft.gsa.cloud.base.utils.CommonConfiguration;
import com.gingersoft.gsa.cloud.database.utils.FoodComboDaoUtils;
import com.gingersoft.gsa.cloud.database.utils.ModifierDaoUtils;
import com.gingersoft.gsa.cloud.logan.LoganUtils;
import com.gingersoft.gsa.cloud.logan.LoganManager;
import io.reactivex.Observable;
import io.reactivex.ObservableEmitter;
......@@ -21,9 +21,11 @@ import io.reactivex.schedulers.Schedulers;
@SuppressLint("NewApi")
public class MyActivityLifecycle implements Application.ActivityLifecycleCallbacks {
private static final String TAG = MyActivityLifecycle.class.getSimpleName();
@Override
public void onActivityCreated(Activity activity, Bundle bundle) {
LoganUtils.w_action(activity.getClass().getSimpleName() + ": onActivityCreated");
LoganManager.w_action(TAG, TAG + ": onActivityCreated");
// EventBus.getDefault().register(activity);
if (!activity.getIntent().getBooleanExtra("isInitToolbar", false)) {
//由于加强框架的兼容性,故将 setContentView 放到 onActivityCreated 之后,onActivityStarted 之前执行
......@@ -36,13 +38,13 @@ public class MyActivityLifecycle implements Application.ActivityLifecycleCallbac
@Override
public void onActivityStarted(Activity activity) {
LoganUtils.w_action(activity.getClass().getSimpleName() + ": onActivityStarted");
LoganManager.w_action(TAG, TAG + ": onActivityStarted");
}
@Override
public void onActivityResumed(Activity activity) {
String name = activity.getClass().getSimpleName();
LoganUtils.w_action(name + ": onActivityResumed");
LoganManager.w_action(TAG, TAG + ": onActivityResumed");
if (name.equals("NewMainActivity")) {
Observable.create(new ObservableOnSubscribe<Void>() {
......@@ -75,22 +77,22 @@ public class MyActivityLifecycle implements Application.ActivityLifecycleCallbac
@Override
public void onActivityPaused(Activity activity) {
LoganUtils.w_action(activity.getClass().getSimpleName() + ": onActivityPaused");
LoganManager.w_action(TAG, TAG + ": onActivityPaused");
}
@Override
public void onActivityStopped(Activity activity) {
LoganUtils.w_action(activity.getClass().getSimpleName() + ": onActivityStopped");
LoganManager.w_action(TAG, TAG + ": onActivityStopped");
}
@Override
public void onActivitySaveInstanceState(Activity activity, Bundle bundle) {
LoganUtils.w_action(activity.getClass().getSimpleName() + ": onActivitySaveInstanceState");
LoganManager.w_action(TAG, TAG + ": onActivitySaveInstanceState");
}
@Override
public void onActivityDestroyed(Activity activity) {
LoganUtils.w_action(activity.getClass().getSimpleName() + ": onActivityDestroyed");
LoganManager.w_action(TAG, TAG + ": onActivityDestroyed");
// EventBus.getDefault().unregister(activity);
//横竖屏切换或配置改变时, Activity 会被重新创建实例, 但 Bundle 中的基础数据会被保存下来,移除该数据是为了保证重新创建的实例可以正常工作
activity.getIntent().removeExtra("isInitToolbar");
......
......@@ -4,7 +4,6 @@ import android.app.Application;
import android.content.Context;
import com.gingersoft.gsa.cloud.base.BuildConfig;
import com.gingersoft.gsa.cloud.logan.LoganUtils;
import com.jess.arms.base.delegate.AppLifecycles;
import com.squareup.leakcanary.LeakCanary;
import com.squareup.leakcanary.RefWatcher;
......@@ -20,7 +19,6 @@ public class MyAppLifecycles implements AppLifecycles {
@Override
public void onCreate(Application application) {
LoganUtils.w_action(application.getClass().getSimpleName() + ": onCreate.....");
initLeakCanary(application);
initFragmentation();
// initARouter(application);
......
package com.gingersoft.gsa.cloud.config.globalconfig.lifecyclesOptioins;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.Application;
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import com.billy.cc.core.component.CC;
import com.gingersoft.gsa.cloud.app.GsaCloudApplication;
import com.gingersoft.gsa.cloud.base.utils.CommonConfiguration;
import com.gingersoft.gsa.cloud.database.utils.FoodComboDaoUtils;
import com.gingersoft.gsa.cloud.database.utils.ModifierDaoUtils;
import com.gingersoft.gsa.cloud.logan.LoganUtils;
import io.reactivex.Observable;
import io.reactivex.ObservableEmitter;
import io.reactivex.ObservableOnSubscribe;
import io.reactivex.schedulers.Schedulers;
import com.gingersoft.gsa.cloud.logan.LoganManager;
@SuppressLint("NewApi")
public class MyFragmentLifecycle extends FragmentManager.FragmentLifecycleCallbacks {
private static final String TAG = MyFragmentLifecycle.class.getSimpleName();
@Override
public void onFragmentAttached(@NonNull FragmentManager fm, @NonNull Fragment f, @NonNull Context context) {
LoganUtils.w_action(f.getClass().getSimpleName() + ": onFragmentAttached");
LoganManager.w_action(TAG, TAG + ": onFragmentAttached");
}
@Override
public void onFragmentCreated(@NonNull FragmentManager fm, @NonNull Fragment f, @Nullable Bundle savedInstanceState) {
LoganUtils.w_action(f.getClass().getSimpleName() + ": onFragmentCreated");
LoganManager.w_action(TAG, TAG + ": onFragmentCreated");
}
@Override
public void onFragmentActivityCreated(@NonNull FragmentManager fm, @NonNull Fragment f,
@Nullable Bundle savedInstanceState) {
LoganUtils.w_action(f.getClass().getSimpleName() + ": onFragmentActivityCreated");
LoganManager.w_action(TAG, TAG + ": onFragmentActivityCreated");
}
@Override
public void onFragmentViewCreated(@NonNull FragmentManager fm, @NonNull Fragment f,
@NonNull View v, @Nullable Bundle savedInstanceState) {
LoganUtils.w_action(f.getClass().getSimpleName() + ": onFragmentViewCreated");
LoganManager.w_action(TAG, TAG + ": onFragmentViewCreated");
}
@Override
public void onFragmentStarted(@NonNull FragmentManager fm, @NonNull Fragment f) {
LoganUtils.w_action(f.getClass().getSimpleName() + ": onFragmentStarted");
LoganManager.w_action(TAG, TAG + ": onFragmentStarted");
}
@Override
public void onFragmentResumed(@NonNull FragmentManager fm, @NonNull Fragment f) {
LoganUtils.w_action(f.getClass().getSimpleName() + ": onFragmentResumed");
LoganManager.w_action(TAG, TAG + ": onFragmentResumed");
}
@Override
public void onFragmentPaused(@NonNull FragmentManager fm, @NonNull Fragment f) {
LoganUtils.w_action(f.getClass().getSimpleName() + ": onFragmentPaused");
LoganManager.w_action(TAG, TAG + ": onFragmentPaused");
}
@Override
public void onFragmentStopped(@NonNull FragmentManager fm, @NonNull Fragment f) {
LoganUtils.w_action(f.getClass().getSimpleName() + ": onFragmentStopped");
LoganManager.w_action(TAG, TAG + ": onFragmentStopped");
}
@Override
public void onFragmentSaveInstanceState(@NonNull FragmentManager fm, @NonNull Fragment f,
@NonNull Bundle outState) {
LoganUtils.w_action(f.getClass().getSimpleName() + ": onFragmentSaveInstanceState");
LoganManager.w_action(TAG, TAG + ": onFragmentSaveInstanceState");
}
@Override
public void onFragmentViewDestroyed(@NonNull FragmentManager fm, @NonNull Fragment f) {
LoganUtils.w_action(f.getClass().getSimpleName() + ": onFragmentViewDestroyed");
LoganManager.w_action(TAG, TAG + ": onFragmentViewDestroyed");
}
@Override
public void onFragmentDestroyed(@NonNull FragmentManager fm, @NonNull Fragment f) {
LoganUtils.w_action(f.getClass().getSimpleName() + ": onFragmentDestroyed");
LoganManager.w_action(TAG, TAG + ": onFragmentDestroyed");
}
@Override
public void onFragmentDetached(@NonNull FragmentManager fm, @NonNull Fragment f) {
LoganUtils.w_action(f.getClass().getSimpleName() + ": onFragmentDetached");
LoganManager.w_action(TAG, TAG + ": onFragmentDetached");
}
}
......@@ -5,7 +5,6 @@ public class PrintConstans {
public static final int PRINT_TIMEOUT = 5 * 1000;//打印機連接超時時間
//默認打印方式
public final static String DEFAULT_PRINT_METHOD = "default_print";
public final static String IS_LOGIN = "is_login";
public final static String LOCAL_PRINT = "local_print";
public final static String IP_PRINT = "ip_print";
public final static String SETTLEMENT_REPORT = "settlement_report";
......
package com.gingersoft.gsa.cloud.function;
import com.gingersoft.gsa.cloud.database.bean.Function;
import java.util.List;
/**
* @author : bin
* @create date: 2020-11-23
* @update date: 2020-11-23
* @description:定義所有功能列表的操作
*/
public interface XFunctionAction {
List<Function> getFunctionItems(String targetResKey);
Function getFunctionItem(String targetResKey);
void updateFunctions(List<Function> functions);
}
package com.gingersoft.gsa.cloud.function;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* @author : bin
* @create date: 2020-11-21
* @update date: 2020-11-21
* @description:標識單個功能是否顯示,如:
*
* @BindView(R2.id.btn_send_order)
* Button btn_send_order;
*
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface XFunctionItem {
String [] value();
}
package com.gingersoft.gsa.cloud.function;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* @author : bin
* @create date: 2020-11-21
* @update date: 2020-11-21
* @description: 標識所在的頁面RecycleView,GridView等功能組數據源,如NewMainActivity頁面下有多個RecycleView
* * 每個RecycleView就是一個{@link XFunctionItems}}
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface XFunctionItems {
String [] value();
}
package com.gingersoft.gsa.cloud.function;
import com.gingersoft.gsa.cloud.account.user.info.UserInfo;
import com.gingersoft.gsa.cloud.account.user.state.LogoutState;
import com.gingersoft.gsa.cloud.account.user.state.UserState;
import com.gingersoft.gsa.cloud.database.bean.Function;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
/**
* @author : bin
* @create date: 2020-11-23
* @update date: 2020-11-23
* @description:
*/
public class XFunctionManager implements XFunctionAction {
private static XFunctionManager sXFunctionManager = null;
/**
* 所有功能數據
*/
private HashMap<String, Function> mFunctionMap = new HashMap<>();
private XFunctionManager() {
}
public static XFunctionManager newInstance() {
if (sXFunctionManager == null) {
sXFunctionManager = new XFunctionManager();
}
return sXFunctionManager;
}
@Override
public List<Function> getFunctionItems(String targetResKey) {
List<Function> functions = new ArrayList<>();
if (mFunctionMap.size() == 0) {
return functions;
}
Iterator entries = mFunctionMap.entrySet().iterator();
while (entries.hasNext()) {
Map.Entry entry = (Map.Entry) entries.next();
String resUrl = (String) entry.getKey();
//獲取具體的功能組,如table/bottom/init下的table/bottom組
String[] keyRes = resUrl.split("/");
if (keyRes.length > 1) {
resUrl = resUrl.substring(0, keyRes[keyRes.length - 1].length());
if(resUrl.equals(targetResKey)){
/**
* 匹配功能組成功{@link XFunctionItems}
*/
Function item = (Function) entry.getValue();
functions.add(item) ;
}
}
}
return functions;
}
@Override
public Function getFunctionItem(String targetResKey) {
if (mFunctionMap.size() == 0) {
return null;
}
Iterator entries = mFunctionMap.entrySet().iterator();
while (entries.hasNext()) {
Map.Entry entry = (Map.Entry) entries.next();
String resUrl = (String) entry.getKey();
if (targetResKey.equals(resUrl)) {
/**
* 匹配單個功能成功{@link XFunctionItem}
*/
Function item = (Function) entry.getValue();
return item;
}
}
return null;
}
@Override
public void updateFunctions(List<Function> functions) {
if (functions == null) {
return;
}
if (mFunctionMap.size() > 0) {
mFunctionMap.clear();
}
for (Function function : functions) {
mFunctionMap.put(function.getResUrl(), function);
}
}
}
package com.gingersoft.gsa.cloud.function;
import com.squareup.javapoet.JavaFile;
import com.squareup.javapoet.MethodSpec;
import com.squareup.javapoet.TypeSpec;
import org.openjdk.javax.annotation.processing.AbstractProcessor;
import org.openjdk.javax.annotation.processing.ProcessingEnvironment;
import org.openjdk.javax.annotation.processing.Processor;
import org.openjdk.javax.annotation.processing.RoundEnvironment;
import org.openjdk.javax.lang.model.SourceVersion;
import org.openjdk.javax.lang.model.element.Element;
import org.openjdk.javax.lang.model.element.ElementKind;
import org.openjdk.javax.lang.model.element.Modifier;
import org.openjdk.javax.lang.model.element.TypeElement;
import java.util.Set;
/**
* @author : bin
* @create date: 2020-11-22
* @update date: 2020-11-22
* @description:
*/
//@AutoService(Processor.class)
public class XFunctionProcessor extends AbstractProcessor {
// 2
@Override
public synchronized void init(ProcessingEnvironment env) {
}
// 3
@Override
public boolean process(Set<? extends TypeElement> annoations, RoundEnvironment roundEnv) {
// for (Element element : roundEnv.getElementsAnnotatedWith(XFunctionComponent.class)) {
// if (element.getKind() != ElementKind.CLASS) {
// continue;
//// }
/**
* 遍歷所有組件註解
*/
// for (Element element2 : roundEnv.getElementsAnnotatedWith(XFunctionPage.class)) {
// if (element2.getKind() != ElementKind.CLASS) {
// continue;
// }
/**
* 遍歷所有Activity、Fragment、Dialog等頁面註解
*/
// for (Element element3 : roundEnv.getElementsAnnotatedWith(XFunctionItems.class)) {
// if (element3.getKind() != ElementKind.METHOD) {
// continue;
// }
// /**
// * 遍歷所有RecycleView,GridView等功能組註解
// */
//
// }
// for (Element element4 : roundEnv.getElementsAnnotatedWith(XFunctionItem.class)) {
// if (element4.getKind() != ElementKind.METHOD) {
// continue;
// }
// /**
// * 遍歷所有button,textview等單個功能註解
// */
//
// }
// }
// }
return true;
}
// 4
@Override
public Set<String> getSupportedAnnotationTypes() {
return null;
}
// 5
@Override
public SourceVersion getSupportedSourceVersion() {
return null;
}
}
......@@ -6,6 +6,7 @@ import android.os.Looper;
import android.util.Log;
import com.dianping.logan.Logan;
import com.dianping.logan.OnLoganProtocolStatus;
import com.dianping.logan.SendLogCallback;
import com.gingersoft.gsa.cloud.app.GsaCloudApplication;
import com.gingersoft.gsa.cloud.base.BuildConfig;
......@@ -14,6 +15,7 @@ import com.gingersoft.gsa.cloud.base.utils.time.TimeUtils;
import com.gingersoft.gsa.cloud.config.LoganConfig;
import com.jess.arms.utils.ArmsUtils;
import com.jess.arms.utils.DeviceUtils;
import com.qmuiteam.qmui.util.QMUIDeviceHelper;
/**
* @author : bin
......@@ -21,61 +23,33 @@ import com.jess.arms.utils.DeviceUtils;
* @update date: 2020-11-21
* @description:
*/
public class LoganUtils {
public class LoganManager {
private static final String TAG = LoganUtils.class.getSimpleName();
private static final String TAG = LoganManager.class.getSimpleName();
/**
* 上傳日誌到服務器
*/
public static void uploadLog(Context context, boolean showToast) {
String memberId = GsaCloudApplication.getMemberName() + "_" + GsaCloudApplication.getMemberId();
String deviceId = DeviceUtils.getIMEI(GsaCloudApplication.getAppContext()) != null ? DeviceUtils.getIMEI(GsaCloudApplication.getAppContext()) : "redmi";
String AppVersion = DeviceUtils.getVersionName(GsaCloudApplication.getAppContext()) + "_" + DeviceUtils.getVersionCode(GsaCloudApplication.getAppContext());
String BuildVersion = android.os.Build.VERSION.RELEASE + "";
Logan.s(LoganConfig.UPLOAD_LOG_URL, TimeUtils.getCurrentDate(TimeUtils.DATE_FORMAT_DATE), LoganConfig.APP_ID, memberId, deviceId,
BuildVersion, AppVersion, new SendLogCallback() {
@Override
public void onLogSendCompleted(int statusCode, byte[] data) {
final String resultData = data != null ? new String(data) : "";
new Handler(Looper.getMainLooper()).post(new Runnable() {
@Override
public void run() {
if (BuildConfig.DEBUG && showToast) {
if (statusCode == 200) {
ArmsUtils.makeText(context, "日誌上傳成功");
} else {
ArmsUtils.makeText(context, "日誌上傳失敗");
}
}
}
});
Log.d(TAG, "upload result, httpCode: " + statusCode + ", details: " + resultData);
}
});
}
public static void w_code(String log) {
public static void w_code(String TAG, String log) {
Logan.w(log, LoganConfig.CODE_LEVLE);
printLog(log);
printLog(TAG, log);
}
public static void w_action(String log) {
public static void w_action(String TAG, String log) {
Logan.w(log, LoganConfig.ACTION_LEVLE);
printLog(TAG, log);
}
public static void w_network(String log) {
Logan.w(log, LoganConfig.NETWORK_LEVLE);
//網絡日誌比較重要立即寫入本地
// Logan.f();
printLog(log);
// printLog("Network", log);
}
public static void w_crash(String log) {
Logan.w(log, LoganConfig.CRASH_LEVLE);
//cash日誌比較重要立即寫入本地
Logan.f();
printLog(log);
printLog("AppCrashHandler", log);
}
public static void w_H5(String log) {
......@@ -86,9 +60,39 @@ public class LoganUtils {
Logan.w(log, LoganConfig.native_LEVLE);
}
private static void printLog(String log) {
private static void printLog(String TAG, String log) {
if (BuildConfig.DEBUG) {
// LogUtil.d(log);
LogUtil.d(TAG, log);
}
}
/**
* 上傳日誌到服務器
*/
public static void uploadLog(Context context, boolean showToast) {
String memberId = GsaCloudApplication.getMemberName() + "_" + GsaCloudApplication.getMemberId();
String deviceId = DeviceUtils.getDeviceId(GsaCloudApplication.getAppContext());
String AppVersion = DeviceUtils.getVersionName(GsaCloudApplication.getAppContext()) + "_" + DeviceUtils.getVersionCode(GsaCloudApplication.getAppContext());
String BuildVersion = android.os.Build.VERSION.RELEASE + "";
Logan.s(LoganConfig.UPLOAD_LOG_URL, TimeUtils.getCurrentDate(TimeUtils.DATE_FORMAT_DATE), LoganConfig.APP_ID, memberId, deviceId,
BuildVersion, AppVersion, new SendLogCallback() {
@Override
public void onLogSendCompleted(int statusCode, byte[] data) {
final String resultData = data != null ? new String(data) : "";
new Handler(Looper.getMainLooper()).post(new Runnable() {
@Override
public void run() {
if (BuildConfig.DEBUG && showToast) {
if (statusCode == 200) {
ArmsUtils.makeText(context, "日誌上傳成功");
} else {
ArmsUtils.makeText(context, "日誌上傳失敗");
}
}
}
});
Log.d(TAG, "upload result, httpCode: " + statusCode + ", details: " + resultData);
}
});
}
}
......@@ -103,6 +103,7 @@ ext {
// "fragmentation-core" : "me.yokeyword:fragmentation-core:${version["fragmentationVersion"]}",
// "fragmentation-swipeback" : "me.yokeyword:fragmentation-swipeback:${version["fragmentationVersion"]}",
"constraintlayout" : "androidx.constraintlayout:constraintlayout:1.1.3",//constraintlayout約束佈局
"javapoet" : "com.squareup:javapoet:1.11.1",
//test
"junit" : "junit:junit:4.12",
......
......@@ -4,6 +4,7 @@ import android.app.Activity;
import android.app.Application;
import android.content.Intent;
import com.gingersoft.gsa.cloud.account.user.UserConstans;
import com.gingersoft.gsa.cloud.app.GsaCloudApplication;
import com.gingersoft.gsa.cloud.base.utils.gson.GsonUtils;
import com.gingersoft.gsa.cloud.base.utils.okhttpUtils.OkHttp3Utils;
......@@ -97,7 +98,7 @@ public class BaseLoginPresenter<M extends BaseLoginContract.Model, V extends Bas
public void onNext(@NonNull LoginBean info) {
if (info.isSuccess()) {
GsaCloudApplication.isLogin = true;
SPUtils.put(PrintConstans.IS_LOGIN, true);
SPUtils.put(UserConstans.IS_LOGIN, true);
GsaCloudApplication.userName = info.getData().getUser().getUserName();
mRootView.showMessage("登陸成功");
mRootView.loginSuccess(info);
......
......@@ -17,7 +17,6 @@ import com.gingersoft.gsa.cloud.table.mvp.model.bean.response.BaseOrderResponse;
import com.gingersoft.gsa.cloud.database.bean.Food;
import com.gingersoft.gsa.cloud.database.utils.FoodDaoUtils;
import com.gingersoft.gsa.cloud.table.mvp.contract.MealStandContract;
import com.gingersoft.gsa.cloud.table.mvp.model.bean.FoodReason;
import com.gingersoft.gsa.cloud.table.mvp.model.service.MealService;
import com.gingersoft.gsa.cloud.table.mvp.model.service.MemberService;
import com.gingersoft.gsa.cloud.table.mvp.model.service.OrderPayService;
......
package com.gingersoft.gsa.cloud.table.mvp.model.function;
import com.gingersoft.gsa.cloud.function.FModule;
import com.gingersoft.gsa.cloud.table.R;
/**
* @author : bin
* @create date: 2020-11-21
* @update date: 2020-11-21
* @description:
*/
public class TableFunctionFactory {
/**
* 餐檯頁
*/
public static final FModule[] bottom = {
new FModule("table/bottom/init", R.mipmap.table_init, 0),
new FModule("table/bottom/initSkyorder", R.mipmap.table_paper, 0),
new FModule("table/bottom/move", R.mipmap.table_move, 0),
new FModule("table/bottom/skyorder", 0, 0),
new FModule("table/bottom/splite", R.mipmap.table_splite, 0),
new FModule("table/bottom/parper", R.mipmap.table_paper, 0),
};
}
......@@ -28,7 +28,6 @@ import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.recyclerview.widget.DefaultItemAnimator;
import androidx.recyclerview.widget.DividerItemDecoration;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
......@@ -167,6 +166,7 @@ public class MealStandActivity extends BaseFragmentActivity<MealStandPresenter>
@BindView(R2.id.fl_send_order)
FrameLayout fl_send_order;
@BindView(R2.id.btn_send_order)
Button btn_send_order;
// @BindView(R2.id.btn_send_order_machine_name)
......
......@@ -15,7 +15,7 @@ import android.widget.TextView;
import com.billy.cc.core.component.CC;
import com.gingersoft.gsa.cloud.base.table.bean.TableBean;
import com.gingersoft.gsa.cloud.base.utils.log.LogUtil;
import com.gingersoft.gsa.cloud.logan.LoganUtils;
import com.gingersoft.gsa.cloud.logan.LoganManager;
import com.gingersoft.gsa.cloud.table.R;
import com.gingersoft.gsa.cloud.table.R2;
import com.gingersoft.gsa.cloud.table.di.component.DaggerTableComponent;
......@@ -224,7 +224,7 @@ public class TableActivity extends BaseFragmentActivity<TablePresenter> implemen
.addParam("fromPage", 2)
.build()
.call();
LoganUtils.uploadLog(mContext,true);
LoganManager.uploadLog(mContext,true);
}
});
mTopBar.setTitle("餐檯模式");
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment