Commit 8dcec7ed by 宁斌

Merge remote-tracking branch 'origin/master'

# Conflicts:
#	main/src/main/java/com/gingersoft/gsa/cloud/main/mvp/ui/activity/NewMainActivity.java
parents 6806a379 7fc67f14
......@@ -72,12 +72,21 @@ public abstract class BaseFragment<P extends IPresenter> extends Fragment implem
return mLifecycleSubject;
}
private View view;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
mContext = getActivity();
return initView(inflater, container, savedInstanceState);
if (view != null) {
ViewGroup viewGroup = (ViewGroup) view.getRootView();
if (viewGroup != null) {
viewGroup.removeView(view);
}
return view;
}
view = initView(inflater, container, savedInstanceState);
return view;
}
......
......@@ -26,7 +26,7 @@ buildscript {
classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2'
// classpath 'com.hujiang.aspectjx:gradle-android-plugin-aspectjx:2.0.8'
// classpath fileTree(dir:'plugins', include:['*.jar'])
classpath fileTree(dir:'plugins', include:['*.jar'])
}
}
......
......@@ -16,6 +16,7 @@ import java.util.List;
/**
* 图表横轴
*
* @author huangyanbin
*/
......@@ -32,7 +33,7 @@ public class HorizontalAxis extends BaseAxis<String> {
/**
* 文字旋转角度
*/
private int rotateAngle= 0;
private int rotateAngle = 0;
/**
* 文字是否旋转
*/
......@@ -61,14 +62,15 @@ public class HorizontalAxis extends BaseAxis<String> {
/**
* 计算刻度大小
* <p>通过计算刻度的宽高得到轴的大小,然后保存到scaleData对象中,以便后面的计算</p>
*
* @param chartData 图表数据
* @param rect 图表原始范围
* @param paint 画笔
* @param rect 图表原始范围
* @param paint 画笔
*/
@Override
public void computeScale(ChartData<? extends BarData> chartData, Rect rect, Paint paint) {
if(isDisplay()) {
scaleData = chartData.getScaleData();
if (isDisplay()) {
scaleData = chartData.getScaleData();
scaleStyle.fillPaint(paint);
Paint.FontMetrics fontMetrics = paint.getFontMetrics();
textHeight = (int) (fontMetrics.descent - fontMetrics.ascent);
......@@ -105,13 +107,14 @@ public class HorizontalAxis extends BaseAxis<String> {
/**
* 绘制刻度
* <p>通过zoomRect计算出每个刻度的宽度,迭代绘制刻度</p>
* @param canvas 画布
* @param zoomRect 缩放之后范围
* @param rect 原始范围
* @param paint 画笔
*
* @param canvas 画布
* @param zoomRect 缩放之后范围
* @param rect 原始范围
* @param paint 画笔
* @param chartData 图表数据
*/
protected void drawScale(Canvas canvas, Rect zoomRect, Rect rect, Paint paint, ChartData<? extends BarData> chartData) {
protected void drawScale(Canvas canvas, Rect zoomRect, Rect rect, Paint paint, ChartData<? extends BarData> chartData) {
ScaleData scaleData = chartData.getScaleData();
List<String> groupDataList = chartData.getCharXDataList();
......@@ -122,21 +125,21 @@ public class HorizontalAxis extends BaseAxis<String> {
}
float startY;
if (direction == AxisDirection.BOTTOM) {
startY = zoomRect.bottom -scaleData.scaleRect.bottom/2;
startY = zoomRect.bottom - scaleData.scaleRect.bottom / 2;
} else {
startY = zoomRect.top + scaleData.scaleRect.top/2;
startY = zoomRect.top + scaleData.scaleRect.top / 2;
}
int left = zoomRect.left ;
int left = zoomRect.left;
int width = zoomRect.right - left;
double perWidth = ((double) width) / (isLine? groupSize -1 : groupSize);
int filterMultiple = (int) (textWidth / perWidth +1);
double perWidth = ((double) width) / (isLine ? groupSize - 1 : groupSize);
int filterMultiple = (int) (textWidth / perWidth + 1);
for (int i = 0; i < groupSize; i++) {
String content = groupDataList.get(i);
int startX = getGravityStartX(left, i, perWidth);
//留1px缓冲
if (startX >= rect.left-1 && startX<= rect.right+1) {
if( i % filterMultiple == 0) {
drawText(canvas, content,startX, startY,i, paint);
if (startX >= rect.left - 1 && startX <= rect.right + 1) {
if (i % filterMultiple == 0) {
drawText(canvas, content, startX, startY, i, paint);
drawGrid(canvas, startX, rect, scaleData.scaleRect, paint);
}
}
......@@ -146,7 +149,8 @@ public class HorizontalAxis extends BaseAxis<String> {
/**
* 获取刻度起始X的位置
* <p>根据gravity来判断偏移的值</p>
* @param left 左边
*
* @param left 左边
* @param position 位置
* @param perWidth 每个刻度的宽度
* @return 刻度起始X的位置
......@@ -164,12 +168,13 @@ public class HorizontalAxis extends BaseAxis<String> {
/**
* 绘制文字
* <p>完成文字偏移,文字旋转,绘制</p>
* @param canvas 画布
*
* @param canvas 画布
* @param contentStr 文字内容
* @param startX 文字绘制起始X位置
* @param startY 文字绘制起始Y位置
* @param position 刻度序号
* @param paint 画笔
* @param startX 文字绘制起始X位置
* @param startY 文字绘制起始Y位置
* @param position 刻度序号
* @param paint 画笔
*/
private void drawText(Canvas canvas, String contentStr, int startX, float startY, int position, Paint paint) {
String content = formatData(contentStr);
......@@ -177,10 +182,10 @@ public class HorizontalAxis extends BaseAxis<String> {
paint.setTextAlign(Paint.Align.CENTER);
if (isShowFullValue && position == 0) {
int width = (int) paint.measureText(content);
startX+= width/2;
startX += width / 2;
} else if (isShowFullValue && position == scaleData.rowSize - 1) {
int width = (int) paint.measureText(content);
startX-= width/2;
startX -= width / 2;
}
if (isRotateAngle) {
canvas.save();
......@@ -194,35 +199,38 @@ public class HorizontalAxis extends BaseAxis<String> {
/**
* 格式化文字
*
* @param data 文字
* @return 格式化完成之后的文字
*/
private String formatData(String data){
return getFormat()!= null ? getFormat().format(data) :data;
private String formatData(String data) {
return getFormat() != null ? getFormat().format(data) : data;
}
/**
* 绘制竖向网格
* @param canvas 画布
* @param startX 网格起始X位置
* @param rect 原始范围
*
* @param canvas 画布
* @param startX 网格起始X位置
* @param rect 原始范围
* @param scaleRect 缩放范围
* @param paint 画布
* @param paint 画布
*/
public void drawGrid(Canvas canvas, float startX, Rect rect, Rect scaleRect, Paint paint) {
if (gridStyle != null && isDrawGrid) {
gridStyle.fillPaint(paint);
Path path = new Path();
path.moveTo(startX, rect.top + scaleRect.top);
path.lineTo(startX, rect.bottom - scaleRect.bottom);
canvas.drawPath(path, paint);
gridStyle.fillPaint(paint);
Path path = new Path();
path.moveTo(startX, rect.top + scaleRect.top);
path.lineTo(startX, rect.bottom - scaleRect.bottom);
canvas.drawPath(path, paint);
}
}
/**
* 计算出裁切轴之后的范围
* @param rect 原始范围
*
* @param rect 原始范围
* @param scaleRect 缩放范围
* @return 上下左右的大小
*/
......@@ -242,8 +250,8 @@ public class HorizontalAxis extends BaseAxis<String> {
/**
* 设置轴方位
* <p>横轴只能设置上下方位</p>
* @param axisDirection 轴方位
*
* @param axisDirection 轴方位
*/
@Override
public void setAxisDirection(int axisDirection) {
......@@ -255,6 +263,7 @@ public class HorizontalAxis extends BaseAxis<String> {
/**
* 设置文字旋转角度
*
* @param rotateAngle
*/
public void setRotateAngle(int rotateAngle) {
......@@ -270,10 +279,11 @@ public class HorizontalAxis extends BaseAxis<String> {
public boolean isShowFullValue() {
return isShowFullValue;
}
/**
* 设置是否需要偏移来完整显示左右两边文字
*
* @param showFullValue 设置是否需要偏移
* @param showFullValue 设置是否需要偏移
*/
public void setShowFullValue(boolean showFullValue) {
isShowFullValue = showFullValue;
......
......@@ -36,7 +36,7 @@ public class ScaleData {
public List<Double> getScaleList(int direction){
List<Double> scaleList = new ArrayList<>();
List<Double> scaleList = new ArrayList<>();//asdfghjkl
int total = (int) (totalScale *zoom);
double scale = getTotalScaleLength(direction) /(total-1);
double minValue = getMinScaleValue(direction);
......
......@@ -59,14 +59,15 @@ public abstract class BaseBarLineProvider<C extends BarData> extends BaseProvide
scale = setMaxMinValue(scale[0],scale[1]);
if(columnData.getDirection() == IAxis.AxisDirection.LEFT){
if(!scaleData.isLeftHasValue){
//asdfghjkl
scaleData.maxLeftValue = scale[0];
scaleData.minLeftValue = scale[1];
scaleData.isLeftHasValue = true;
}else{
//asdfghjkl
scaleData.maxLeftValue = Math.max( scaleData.maxLeftValue,scale[0]);
scaleData.minLeftValue = Math.min( scaleData.minLeftValue,scale[1]);
}
}else{
if(!scaleData.isRightHasValue){
scaleData.maxRightValue = scale[0];
......@@ -78,6 +79,9 @@ public abstract class BaseBarLineProvider<C extends BarData> extends BaseProvide
}
}
}
if(scaleData.maxLeftValue == 0){
scaleData.maxLeftValue = 18000;
}
return chartData.getScaleData().rowSize != 0;
......
......@@ -5,6 +5,7 @@ import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.PointF;
import android.graphics.Rect;
import android.util.Log;
import com.daivd.chart.data.LineData;
import com.daivd.chart.data.style.LineStyle;
......@@ -43,7 +44,7 @@ public class LineProvider extends BaseBarLineProvider<LineData> {
@Override
public void drawProvider(Canvas canvas, Rect zoomRect, Rect rect, Paint paint) {
List<LineData> columnDataList = chartData.getColumnDataList();
List<LineData> columnDataList = chartData.getColumnDataList();//asdfghjkl
int columnSize = columnDataList.size();
rowSize = chartData.getCharXDataList().size();
int filter = rowSize / filterPointTextCount;
......@@ -95,7 +96,9 @@ public class LineProvider extends BaseBarLineProvider<LineData> {
ILineModel model = lineData.getLineModel();
model = model == null ? lineModel : model;
for (int i = 0; i < pointY.size(); i++) {
Log.e("bbb", "前值:" + pointY.get(i));
pointY.set(i, pointY.get(i) - style.getWidth() / 2);
Log.e("bbb", "後值:" + pointY.get(i));
}
for (int i = 0; i < pointX.size(); i++) {
pointX.set(i, pointX.get(i) + style.getWidth() / 2);
......@@ -126,7 +129,7 @@ public class LineProvider extends BaseBarLineProvider<LineData> {
private float getStartX(Rect zoomRect, int position) {
if (isStartZero) {
perWidth = (zoomRect.width()) / (rowSize - 1);
perWidth = (zoomRect.width()) / (rowSize - 1);//得到每個x點之間的寬度
return (float) (position * perWidth + zoomRect.left);
} else {
perWidth = (zoomRect.width()) / rowSize;
......
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.gingersoft.gsa.cloud.main">
<uses-permission android:name="android.permission.INTERNET" />
<supports-screens
android:anyDensity="true"
android:largeScreens="true"
android:resizeable="true"
android:smallScreens="true" />
<supports-screens
android:anyDensity="true"
android:largeScreens="true"
android:normalScreens="true"
android:smallScreens="true" />
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
<uses-permission
android:name="android.permission.ACCESS_MOCK_LOCATION"
tools:ignore="MockLocation" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.RESTART_PACKAGES" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
<!-- <uses-permission android:name="android.permission.RESTART_PACKAGES" /> -->
<!-- <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /> -->
<uses-permission android:name="android.permission.WRITE_MEDIA_STORAGE" />
<uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
<!-- <uses-permission android:name="android.permission.DISABLE_KEYGUARD" /> -->
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<uses-permission android:name="android.permission.VIBRATE" />
<!-- 使用照相机权限 -->
<uses-permission android:name="android.permission.REORDER_TASKS" />
<!-- 自动聚焦权限 -->
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.READ_LOGS" />
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<application>
<activity android:name=".mvp.ui.activity.NewMainActivity"/>
<activity android:name=".mvp.ui.activity.MainActivity"/>
......
......@@ -65,7 +65,7 @@ public class MainTopPresenter extends BasePresenter<MainTopContract.Model, MainT
public void getRestaurantReport(String restaurantId) {
RequestBody requestBody = new FormBody.Builder()
.add("restaurantId", restaurantId)
.add("startTime", TimeUtils.getYesterdayTime(TimeUtils.DATE_FORMAT_DATE))
.add("startTime", TimeUtils.getOldDate(-1))
.add("endTime", TimeUtils.getCurrentTimeInString(TimeUtils.DATE_FORMAT_DATE))
.build();
mModel.getRestaurantReport(requestBody)
......@@ -102,9 +102,9 @@ public class MainTopPresenter extends BasePresenter<MainTopContract.Model, MainT
});
}
public void getOrderInfoChart(){
public void getOrderInfoChart(String restaurantId){
RequestBody requestBody = new FormBody.Builder()
.add("restaurantId", "26")
.add("restaurantId", restaurantId)
.build();
mModel.getOrderInfoChart(requestBody)
.subscribeOn(Schedulers.io())
......
......@@ -61,9 +61,9 @@ public class PaymentMethodReportPresenter extends BasePresenter<PaymentMethodRep
this.mApplication = null;
}
public void getPaymentInfo(String startTime) {
public void getPaymentInfo(String restaurandId, String startTime) {
RequestBody requestBody = new FormBody.Builder()
.add("restaurantId", "26")
.add("restaurantId", restaurandId)
.add("startTime", startTime)//TimeUtils.getYesterdayTime(TimeUtils.DATE_FORMAT_DATE)
.add("endTime", TimeUtils.getYear(0))//TimeUtils.getCurrentTimeInString(TimeUtils.DATE_FORMAT_DATE)
.build();
......
......@@ -63,9 +63,9 @@ public class SalesPresenter extends BasePresenter<SalesContract.Model, SalesCont
this.mApplication = null;
}
public void getSalesReportInfo(String startTime) {
public void getSalesReportInfo(String restaurantId, String startTime) {
RequestBody requestBody = new FormBody.Builder()
.add("restaurantId", "26")
.add("restaurantId", restaurantId)
.add("startTime", startTime)//TimeUtils.getYesterdayTime(TimeUtils.DATE_FORMAT_DATE)
.add("endTime", TimeUtils.getYear(0))//TimeUtils.getCurrentTimeInString(TimeUtils.DATE_FORMAT_DATE)
.build();
......
......@@ -2,7 +2,9 @@ package com.gingersoft.gsa.cloud.main.mvp.ui.activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Message;
import android.text.TextUtils;
import android.util.SparseArray;
import android.view.KeyEvent;
import android.view.View;
import android.widget.LinearLayout;
......@@ -12,28 +14,33 @@ import com.billy.cc.core.component.CC;
import com.gingersoft.gsa.cloud.base.application.GsaCloudApplication;
import com.gingersoft.gsa.cloud.base.utils.JsonUtils;
import com.gingersoft.gsa.cloud.base.utils.toast.ToastUtils;
import com.gingersoft.gsa.cloud.database.bean.Function;
import com.gingersoft.gsa.cloud.main.BuildConfig;
import com.gingersoft.gsa.cloud.main.R;
import com.gingersoft.gsa.cloud.main.R2;
import com.gingersoft.gsa.cloud.main.di.component.DaggerNewMainComponent;
import com.gingersoft.gsa.cloud.main.mvp.contract.NewMainContract;
import com.gingersoft.gsa.cloud.main.mvp.model.bean.SectionItem;
import com.gingersoft.gsa.cloud.main.mvp.presenter.NewMainPresenter;
import com.gingersoft.gsa.cloud.main.mvp.ui.adapter.MainOrderingAdapter;
import com.gingersoft.gsa.cloud.main.mvp.ui.fragment.MainTopFragment;
import com.gingersoft.gsa.cloud.main.mvp.ui.view.SlidingMenu;
import com.gingersoft.gsa.cloud.ui.bean.mode.LoginBean;
import com.gingersoft.gsa.cloud.ui.widget.dialog.ChooseRestaurantDialog;
import com.jess.arms.base.BaseActivity;
import com.jess.arms.di.component.AppComponent;
import com.jess.arms.utils.ArmsUtils;
import com.qmuiteam.qmui.widget.pullRefreshLayout.QMUIPullRefreshLayout;
import java.util.ArrayList;
import java.util.List;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.FragmentManager;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import butterknife.BindView;
import butterknife.BindViews;
import butterknife.OnClick;
import static com.jess.arms.utils.Preconditions.checkNotNull;
......@@ -64,7 +71,7 @@ public class NewMainActivity extends BaseActivity<NewMainPresenter> implements N
@BindView(R2.id.slideMenu)
SlidingMenu slideMenu;
// @BindView(R2.id.layout_ordering_meals)
// @BindView(R2.id.layout_ordering_meals)
// LinearLayout orderingMeals;
// @BindView(R2.id.layout_management)
// LinearLayout layoutManagement;
......@@ -72,6 +79,17 @@ public class NewMainActivity extends BaseActivity<NewMainPresenter> implements N
TextView tvRestaurantName;
@BindView(R2.id.tv_username)
TextView tvUserName;
@BindView(R2.id.ll_switch_server)
LinearLayout switchServer;
@BindView(R2.id.tv_store_name)
TextView tvStoreName;
@BindView(R2.id.qm_refresh)
QMUIPullRefreshLayout refresh;
private MainTopFragment mainTopFragment;
@BindViews({R2.id.tv_function_name1, R2.id.tv_function_name2, R2.id.tv_function_name3})
TextView[] mTvFunctionNames;
@BindView(R2.id.ll_clearance)
LinearLayout ll_clearance;
......@@ -98,75 +116,115 @@ public class NewMainActivity extends BaseActivity<NewMainPresenter> implements N
@Override
public void initData(@Nullable Bundle savedInstanceState) {
initShadow();
initFuncationData();
setTitleInfo();
}
FragmentManager fragmentManager = getSupportFragmentManager();
mainTopFragment = (MainTopFragment) fragmentManager.findFragmentById(R.id.main_top_fragment);
private void initShadow() {
}
private void initFuncationData() {
List<SectionItem> data = new ArrayList<>();
data.add(new SectionItem(R.drawable.ic_dining_table_mode, "餐檯模式"));
data.add(new SectionItem(R.drawable.ic_delivery_mode, "外送模式"));
data.add(new SectionItem(R.drawable.ic_outsourcing_model, "外賣模式"));
data.add(new SectionItem(R.drawable.ic_pre_order_mode, "預點餐模式"));
MainOrderingAdapter adapter = new MainOrderingAdapter(R.layout.main_home_funcation_item, data);
rvOrdering.setLayoutManager(new GridLayoutManager(mContext, 4) {
switchServer.setVisibility(BuildConfig.DEBUG ? View.VISIBLE : View.GONE);
tvStoreName.setText(GsaCloudApplication.getRestaurantName(mContext));
refresh.setOnPullListener(new QMUIPullRefreshLayout.OnPullListener() {
@Override
public boolean canScrollVertically() {
return false;
}
});
adapter.setOnItemClickListener((adapter1, view, position) -> {
if (data.get(position).getText().equals("餐檯模式")) {
CC.obtainBuilder("Component.Table")
.setActionName("showTableActivity")
.build()
.call();
}
});
rvOrdering.setAdapter(adapter);
public void onMoveTarget(int offset) {
List<SectionItem> managementData = new ArrayList<>();
managementData.add(new SectionItem(R.drawable.ic_meals_menu_management, "餐牌管理"));
managementData.add(new SectionItem(R.drawable.ic_dining_table_management, "餐檯管理"));
managementData.add(new SectionItem(R.drawable.ic_print_management, "打印管理"));
managementData.add(new SectionItem(R.drawable.ic_pay_management, "支付管理"));
managementData.add(new SectionItem(R.drawable.ic_discount_management, "折扣管理"));
}
MainOrderingAdapter managementAdapter = new MainOrderingAdapter(R.layout.main_home_management_funcation_item, managementData);
rvManagement.setLayoutManager(new GridLayoutManager(mContext, 5) {
@Override
public boolean canScrollVertically() {
return false;
public void onMoveRefreshView(int offset) {
}
});
rvManagement.setAdapter(managementAdapter);
managementAdapter.setOnItemClickListener((adapter12, view, position) -> {
if (managementData.get(position).getText().equals("打印管理")) {
CC.obtainBuilder("Component.Print")
.setActionName("showPrintActivity")
.build()
.call();
@Override
public void onRefresh() {
if (mainTopFragment != null) {
Message msg = new Message();
msg.what = 0;
mainTopFragment.setData(msg);
}
}
});
initFuncationData();
setTitleInfo();
}
List<SectionItem> staffData = new ArrayList<>();
staffData.add(new SectionItem(R.drawable.ic_staff_management, "員工管理"));
staffData.add(new SectionItem(R.drawable.ic_authority_management, "權限管理"));
staffData.add(new SectionItem(R.drawable.ic_operation_record, "操作記錄"));
public void onFinishRefresh() {
refresh.finishRefresh();
}
MainOrderingAdapter staffAdapter = new MainOrderingAdapter(R.layout.main_home_management_funcation_item, staffData);
rvStaffManagement.setLayoutManager(new GridLayoutManager(mContext, 4) {
@Override
public boolean canScrollVertically() {
return false;
private void initFuncationData() {
//拿到功能列表數據
// FunctionDaoUtils functionDao = new FunctionDaoUtils(mContext);
// List<Function> functions = functionDao.queryAllFunction();
// if (functions == null) {
// return;
// }
List<Function> functions = new ArrayList<>();
functions.add(new Function((long) 150,0,5,"點餐",0));
functions.add(new Function((long) 138,150,5,"餐臺模式",0));
functions.add(new Function((long) 139,150,5,"外送模式",0));
functions.add(new Function((long) 140,150,5,"外賣模式",0));
functions.add(new Function((long) 141,150,5,"預點餐模式",0));
functions.add(new Function((long) 151,0,5,"管理",0));
functions.add(new Function((long) 142,151,5,"餐牌管理",0));
functions.add(new Function((long) 143,151,5,"餐臺管理",0));
functions.add(new Function((long) 144,151,5,"打印管理",0));
functions.add(new Function((long) 145,151,5,"支付管理",0));
functions.add(new Function((long) 146,151,5,"折扣管理",0));
functions.add(new Function((long) 152,0,5,"員工",0));
functions.add(new Function((long) 147,152,5,"員工管理",0));
functions.add(new Function((long) 148,152,5,"權限管理",0));
functions.add(new Function((long) 149,152,5,"操作記錄",0));
//將功能列表數據分組
SparseArray<String> parents = new SparseArray<>();
SparseArray<List<Function>> funMap = new SparseArray<>();
for (Function function : functions) {
if (function.getParentId() == 0) {
//父模塊
parents.put(function.getId().intValue(), function.getResName());
} else {
if (funMap.get(function.getParentId()) == null) {
List<Function> functionList = new ArrayList<>();
functionList.add(function);
funMap.put(function.getParentId(), functionList);
} else {
funMap.get(function.getParentId()).add(function);
}
}
});
rvStaffManagement.setAdapter(staffAdapter);
}
initAdapter(parents, funMap, 0, R.layout.main_home_funcation_item, rvOrdering, 4);
initAdapter(parents, funMap, 1, R.layout.main_home_management_funcation_item, rvManagement, 5);
initAdapter(parents, funMap, 2, R.layout.main_home_management_funcation_item, rvStaffManagement, 4);
}
private void initAdapter(SparseArray<String> parents, SparseArray<List<Function>> funMap, int i, int p, RecyclerView rvOrdering, int i2) {
if (funMap.size() > i && parents.size() > i) {
mTvFunctionNames[i].setText(parents.get(parents.keyAt(i)));
List<Function> mOrderingMeals = funMap.get(parents.keyAt(i));
MainOrderingAdapter adapter = new MainOrderingAdapter(p, mOrderingMeals);
rvOrdering.setLayoutManager(new GridLayoutManager(mContext, i2) {
@Override
public boolean canScrollVertically() {
return false;
}
});
adapter.setOnItemClickListener((adapter1, view, position) -> functionClick(mOrderingMeals.get(position).getResName()));
rvOrdering.setAdapter(adapter);
}
}
private void functionClick(String name) {
if (name.equals("餐臺模式")) {
CC.obtainBuilder("Component.Table")
.setActionName("showTableActivity")
.build()
.call();
} else if (name.equals("打印管理")) {
CC.obtainBuilder("Component.Print")
.setActionName("showPrintActivity")
.build()
.call();
}
}
private void setTitleInfo() {
......@@ -191,7 +249,7 @@ public class NewMainActivity extends BaseActivity<NewMainPresenter> implements N
LoginBean.DataBean.UserBean.BrandsBean brandsBean = getBrandByRestaurantId(brandsBeans, item.getId());
if(brandsBean != null) {
if (brandsBean != null) {
saveBrandAndRestaurantInfo(brandsBean.getBrandId(), brandsBean.getBrandName(), item.getId(), item.getText());
}
......@@ -284,6 +342,7 @@ public class NewMainActivity extends BaseActivity<NewMainPresenter> implements N
finish();
}
@OnClick({R2.id.ll_switch_server, R2.id.layout_login_out, R2.id.iv_personal_center, R2.id.tv_restaurant_name})
public View.OnClickListener mSlidingMenuOnclick = new View.OnClickListener() {
@Override
public void onClick(View v) {
......@@ -301,6 +360,13 @@ public class NewMainActivity extends BaseActivity<NewMainPresenter> implements N
slideMenu.toggle();
} else if (v.getId() == R.id.tv_restaurant_name) {
showChooseRestaurantDialog();
} else if (v.getId() == R.id.ll_switch_server) {
//切換環境
CC.obtainBuilder("User.Component.Login")
.setActionName("switchServer")
.build()
.call();
finish();
} else if (v.getId() == R.id.ll_clearance) {
launchActivity(new Intent(this,SettlementActivity.class));
}
......
......@@ -18,6 +18,13 @@ public class BusinessInfoAdapter extends BaseQuickAdapter<BusinessBean, BaseView
super(R.layout.report_business_info_item, data);
}
// @Override
// public void setNewData(@Nullable List<BusinessBean> data) {
//// super.setNewData(data);
// this.mData = data;
// notifyDataSetChanged();
// }
@Override
protected void convert(BaseViewHolder helper, BusinessBean item) {
helper.setText(R.id.tv_business_info_amount, item.getAmount() + "");
......
......@@ -2,8 +2,8 @@ package com.gingersoft.gsa.cloud.main.mvp.ui.adapter;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.BaseViewHolder;
import com.gingersoft.gsa.cloud.database.bean.Function;
import com.gingersoft.gsa.cloud.main.R;
import com.gingersoft.gsa.cloud.main.mvp.model.bean.SectionItem;
import java.util.List;
......@@ -13,8 +13,8 @@ import androidx.annotation.Nullable;
* Created by Wyh on 2020/2/19.
* 首頁點餐
*/
public class MainOrderingAdapter extends BaseQuickAdapter<SectionItem, BaseViewHolder> {
public MainOrderingAdapter(int layoutResId, @Nullable List<SectionItem> data) {
public class MainOrderingAdapter extends BaseQuickAdapter<Function, BaseViewHolder> {
public MainOrderingAdapter(int layoutResId, @Nullable List<Function> data) {
super(layoutResId, data);
}
......@@ -23,8 +23,8 @@ public class MainOrderingAdapter extends BaseQuickAdapter<SectionItem, BaseViewH
// }
@Override
protected void convert(BaseViewHolder helper, SectionItem item) {
helper.setImageResource(R.id.iv_main_home_item_function_icon, item.getImage());
helper.setText(R.id.tv_main_home_item_function_name, item.getText());
protected void convert(BaseViewHolder helper, Function item) {
// helper.setImageResource(R.id.iv_main_home_item_function_icon, item.getImageURL());
helper.setText(R.id.tv_main_home_item_function_name, item.getResName());
}
}
......@@ -106,7 +106,7 @@ public class BusinessReportFragment extends BaseFragment<BusinessReportPresenter
@Override
public void initData(@Nullable Bundle savedInstanceState) {
//獲取一段時間內的營業信息,默認獲取七天的數據
mPresenter.getRestaurantBusinessInfo("26", TimeUtils.getOldDate(-6), TimeUtils.getOldDate(0));
mPresenter.getRestaurantBusinessInfo(GsaCloudApplication.getRestaurantId(mContext) +"", TimeUtils.getOldDate(-6), TimeUtils.getOldDate(0));
mRestaurantName.setText(GsaCloudApplication.getRestaurantName(mContext));
mTvStartTime.setText(TimeUtils.getOldDate(-6));
......
......@@ -33,13 +33,13 @@ import com.gingersoft.gsa.cloud.main.mvp.contract.MainTopContract;
import com.gingersoft.gsa.cloud.main.mvp.model.bean.HomeTurnoverBean;
import com.gingersoft.gsa.cloud.main.mvp.model.bean.MainOrderInfoChartBean;
import com.gingersoft.gsa.cloud.main.mvp.presenter.MainTopPresenter;
import com.gingersoft.gsa.cloud.main.mvp.ui.activity.NewMainActivity;
import com.gingersoft.gsa.cloud.main.mvp.ui.activity.ReportActivity;
import com.gingersoft.gsa.cloud.main.mvp.ui.view.CustomMarkView;
import com.jess.arms.base.BaseFragment;
import com.jess.arms.di.component.AppComponent;
import com.jess.arms.utils.ArmsUtils;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
......@@ -124,9 +124,13 @@ public class MainTopFragment extends BaseFragment<MainTopPresenter> implements M
@Override
public void initData(@Nullable Bundle savedInstanceState) {
getInfo();
time.setText(TimeUtils.getCurrentTimeInString(TimeUtils.dateFormatYMDE));
}
private void getInfo() {
mPresenter.getRestaurantReport(GsaCloudApplication.getRestaurantId(mContext) + "");//GsaCloudApplication.getRestaurantId(mContext) 獲取餐廳營業信息
mPresenter.getOrderInfoChart();
time.setText(TimeUtils.getCurrentTimeInString(new SimpleDateFormat("yyyy-MM-dd E")));
mPresenter.getOrderInfoChart(GsaCloudApplication.getRestaurantId(mContext) + "");
}
/**
......@@ -167,7 +171,17 @@ public class MainTopFragment extends BaseFragment<MainTopPresenter> implements M
*/
@Override
public void setData(@Nullable Object data) {
if (data instanceof Message) {
switch (((Message) data).what) {
case 0:
//刷新數據
getInfo();
break;
default:
//do something
break;
}
}
}
......@@ -219,19 +233,23 @@ public class MainTopFragment extends BaseFragment<MainTopPresenter> implements M
if (yesterdayBean != null) {
double turnover = MoneyUtil.sub(Double.parseDouble(bean.getBusiness_amount()), Double.parseDouble(yesterdayBean.getBusiness_amount()));
ivTurnoverTrend.setVisibility(View.VISIBLE);
ivTurnoverTrend.setImageResource(getTrendImg(turnover));
tvTurnoverTrend.setText(String.format(getString(R.string.format_one_point), turnover));
double sales = MoneyUtil.sub(Double.parseDouble(bean.getSales()), Double.parseDouble(yesterdayBean.getSales()));
tvProjectAmountTrend.setText(String.format(getString(R.string.format_one_point), sales));
ivProjectAmountState.setVisibility(View.VISIBLE);
ivProjectAmountState.setImageResource(getTrendImg(sales));
int people = Integer.parseInt(bean.getPeople()) - Integer.parseInt(yesterdayBean.getPeople());
ivPeopleTrend.setImageResource(getTrendImg(people));
ivPeopleTrend.setVisibility(View.VISIBLE);
tvPeopleTrend.setText(people + "");
int billNum = Integer.parseInt(bean.getNumber_bill()) - Integer.parseInt(yesterdayBean.getNumber_bill());
ivBillTrend.setImageResource(getTrendImg(billNum));
ivBillTrend.setVisibility(View.VISIBLE);
tvBillTrend.setText(billNum + "");
}
}
......@@ -239,6 +257,8 @@ public class MainTopFragment extends BaseFragment<MainTopPresenter> implements M
@Override
public void loadChart(List<MainOrderInfoChartBean.DataBean> dataBeans) {
((NewMainActivity)getActivity()).onFinishRefresh();
Resources res = getResources();
FontStyle.setDefaultTextSpSize(mContext, 12);
//存儲今天的線條數據
......@@ -342,8 +362,8 @@ public class MainTopFragment extends BaseFragment<MainTopPresenter> implements M
lineChart.setShowChartName(false);
//底部不顯示顏色代表的意思
lineChart.getLegend().setDisplay(false);
lineChart.getMatrixHelper().setWidthMultiple(1f);
lineChart.getMatrixHelper().setCanZoom(false);
lineChart.getMatrixHelper().setWidthMultiple(1.2f);
lineChart.getMatrixHelper().setCanZoom(true);
lineChart.getHorizontalAxis().setRotateAngle(0);//設置底部文字旋轉角度
lineChart.setFirstAnim(true);
lineChart.setChartData(chartData2);
......
......@@ -9,6 +9,7 @@ import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import com.gingersoft.gsa.cloud.base.application.GsaCloudApplication;
import com.gingersoft.gsa.cloud.base.utils.time.TimePickerUtils;
import com.gingersoft.gsa.cloud.base.utils.time.TimeUtils;
import com.gingersoft.gsa.cloud.base.utils.toast.ToastUtils;
......@@ -98,7 +99,7 @@ public class PaymentMethodReportFragment extends BaseFragment<PaymentMethodRepor
@Override
public void initData(@Nullable Bundle savedInstanceState) {
mPresenter.getPaymentInfo(TimeUtils.getYear(-1));
mPresenter.getPaymentInfo(GsaCloudApplication.getRestaurantId(mContext) + "", TimeUtils.getYear(-1));
mTvStartTime.setText(TimeUtils.getOldDate(-6));
mTvEndTime.setText(TimeUtils.getOldDate(0));
......@@ -299,7 +300,7 @@ public class PaymentMethodReportFragment extends BaseFragment<PaymentMethodRepor
//打開時間選擇器
TimePickerUtils.showReportTimePicker(mContext, cal, (date, v1) -> {
mTvStartTime.setText(TimeUtils.DATE_FORMAT_DATE.format(date));
mPresenter.getPaymentInfo(mTvStartTime.getText().toString());
mPresenter.getPaymentInfo(GsaCloudApplication.getRestaurantId(mContext) + "", mTvStartTime.getText().toString());
});
}
}
......
......@@ -9,6 +9,7 @@ import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import com.gingersoft.gsa.cloud.base.application.GsaCloudApplication;
import com.gingersoft.gsa.cloud.base.utils.time.TimePickerUtils;
import com.gingersoft.gsa.cloud.base.utils.time.TimeUtils;
import com.gingersoft.gsa.cloud.base.utils.toast.ToastUtils;
......@@ -99,7 +100,7 @@ public class SalesFragment extends BaseFragment<SalesPresenter> implements Sales
@Override
public void initData(@Nullable Bundle savedInstanceState) {
mPresenter.getSalesReportInfo(TimeUtils.getYear(-1));
mPresenter.getSalesReportInfo(GsaCloudApplication.getRestaurantId(mContext) + "", TimeUtils.getYear(-1));
mTvStartTime.setText(TimeUtils.getYear(-1));
mTvEndTime.setText(TimeUtils.getOldDate(0));
......@@ -340,7 +341,7 @@ public class SalesFragment extends BaseFragment<SalesPresenter> implements Sales
}
TimePickerUtils.showReportTimePicker(mContext, cal, (date, v1) -> {
mTvStartTime.setText(TimeUtils.DATE_FORMAT_DATE.format(date));
mPresenter.getSalesReportInfo(mTvStartTime.getText().toString());
mPresenter.getSalesReportInfo(GsaCloudApplication.getRestaurantId(mContext) + "", mTvStartTime.getText().toString());
});
}
}
......

4.24 KB | W: | H:

4.08 KB | W: | H:

main/src/main/res/drawable-xhdpi/ic_dining_table_mode.png
main/src/main/res/drawable-xhdpi/ic_dining_table_mode.png
main/src/main/res/drawable-xhdpi/ic_dining_table_mode.png
main/src/main/res/drawable-xhdpi/ic_dining_table_mode.png
  • 2-up
  • Swipe
  • Onion skin
......@@ -42,6 +42,7 @@
android:textSize="@dimen/sp_20" />
<TextView
android:id="@+id/tv_store_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_10"
......@@ -116,6 +117,29 @@
</LinearLayout>
<LinearLayout
android:id="@+id/ll_switch_server"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_28"
android:gravity="center_vertical"
android:orientation="horizontal">
<ImageView
android:layout_width="@dimen/dp_29"
android:layout_height="@dimen/dp_27"
android:layout_marginLeft="@dimen/dp_18"
android:src="@drawable/ic_password" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/dp_14"
android:text="切換環境"
android:textColor="@color/white"
android:textSize="@dimen/sp_17" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_28"
......@@ -239,128 +263,136 @@
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.core.widget.NestedScrollView
android:id="@+id/content_scroll"
<com.qmuiteam.qmui.widget.pullRefreshLayout.QMUIPullRefreshLayout
android:id="@+id/qm_refresh"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#F0edf1">
<LinearLayout
<androidx.core.widget.NestedScrollView
android:id="@+id/content_scroll"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
android:layout_height="match_parent">
<fragment
android:id="@+id/main_top_fragment"
android:name="com.gingersoft.gsa.cloud.main.mvp.ui.fragment.MainTopFragment"
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content" />
android:layout_height="match_parent">
<com.lihang.ShadowLayout
android:id="@+id/layout_ordering_meals"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/dp_10"
android:layout_marginRight="@dimen/dp_10"
app:hl_cornerRadius="@dimen/dp_4"
app:hl_dy="@dimen/main_shadow_dy"
app:hl_shadowBackColor="@color/white"
app:hl_shadowColor="@color/shadow_color"
app:hl_shadowLimit="@dimen/main_shadow_limit">
<LinearLayout
<fragment
android:id="@+id/main_top_fragment"
android:name="com.gingersoft.gsa.cloud.main.mvp.ui.fragment.MainTopFragment"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingTop="@dimen/dp_15"
android:paddingBottom="@dimen/dp_20">
android:layout_height="wrap_content" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/dp_22"
android:text="點餐"
android:textColor="#181818"
android:textSize="@dimen/sp_17" />
<View
android:layout_width="match_parent"
android:layout_height="@dimen/dp_1"
android:layout_marginTop="@dimen/dp_11"
android:background="#F0F0F0" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_ordering_meals"
<com.lihang.ShadowLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/layout_ordering_meals"
android:layout_marginLeft="@dimen/dp_13"
android:layout_marginTop="-4dp"
android:layout_marginRight="@dimen/dp_13"
android:layout_marginBottom="@dimen/dp_10"
app:hl_cornerRadius="@dimen/dp_4"
app:hl_shadowBackColor="@color/white"
app:hl_shadowLimit="@dimen/dp_0">
<LinearLayout
android:id="@+id/layout_management"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/main_recyclerview_marginLeft"
android:layout_marginTop="@dimen/dp_5"
android:layout_marginRight="@dimen/main_recyclerview_marginRight" />
</LinearLayout>
</com.lihang.ShadowLayout>
<com.lihang.ShadowLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/dp_13"
android:layout_marginRight="@dimen/dp_13"
android:layout_marginBottom="@dimen/dp_10"
app:hl_cornerRadius="@dimen/dp_4"
app:hl_shadowLimit="@dimen/dp_0"
app:hl_shadowBackColor="@color/white">
<LinearLayout
android:id="@+id/layout_management"
android:orientation="vertical"
android:paddingTop="@dimen/dp_16"
android:paddingBottom="@dimen/dp_16">
<TextView
android:id="@+id/tv_function_name2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/dp_15"
android:textColor="#181818"
android:textSize="@dimen/sp_14" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_management"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/main_recyclerview_marginLeft"
android:layout_marginTop="@dimen/dp_20"
android:layout_marginRight="@dimen/main_recyclerview_marginRight" />
<View
android:layout_width="match_parent"
android:layout_height="@dimen/dp_1"
android:layout_marginTop="@dimen/dp_20"
android:background="#F0F0F0" />
<TextView
android:id="@+id/tv_function_name3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/dp_15"
android:layout_marginTop="@dimen/dp_20"
android:textColor="#181818"
android:textSize="@dimen/sp_14" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_staff_management"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/main_recyclerview_marginLeft"
android:layout_marginTop="@dimen/dp_20"
android:layout_marginRight="@dimen/main_recyclerview_marginRight" />
</LinearLayout>
</com.lihang.ShadowLayout>
<com.lihang.ShadowLayout
android:id="@+id/layout_ordering_meals"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingTop="@dimen/dp_16"
android:paddingBottom="@dimen/dp_16">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/dp_15"
android:text="管理"
android:textColor="#181818"
android:textSize="@dimen/sp_14" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_management"
android:layout_below="@id/main_top_fragment"
android:layout_marginLeft="@dimen/dp_10"
android:layout_marginRight="@dimen/dp_10"
app:hl_cornerRadius="@dimen/dp_4"
app:hl_dy="@dimen/main_shadow_dy"
app:hl_shadowBackColor="@color/white"
app:hl_shadowColor="@color/shadow_color"
app:hl_shadowLimit="@dimen/main_shadow_limit">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/main_recyclerview_marginLeft"
android:layout_marginTop="@dimen/dp_20"
android:layout_marginRight="@dimen/main_recyclerview_marginRight" />
android:orientation="vertical"
android:paddingTop="@dimen/dp_15"
android:paddingBottom="@dimen/dp_20">
<TextView
android:id="@+id/tv_function_name1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/dp_22"
android:textColor="#181818"
android:textSize="@dimen/sp_17" />
<View
android:layout_width="match_parent"
android:layout_height="@dimen/dp_1"
android:layout_marginTop="@dimen/dp_11"
android:background="#F0F0F0" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_ordering_meals"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/main_recyclerview_marginLeft"
android:layout_marginTop="@dimen/dp_5"
android:layout_marginRight="@dimen/main_recyclerview_marginRight" />
</LinearLayout>
</com.lihang.ShadowLayout>
</RelativeLayout>
</androidx.core.widget.NestedScrollView>
</com.qmuiteam.qmui.widget.pullRefreshLayout.QMUIPullRefreshLayout>
<View
android:layout_width="match_parent"
android:layout_height="@dimen/dp_1"
android:layout_marginTop="@dimen/dp_20"
android:background="#F0F0F0" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/dp_15"
android:layout_marginTop="@dimen/dp_20"
android:text="員工"
android:textColor="#181818"
android:textSize="@dimen/sp_14" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_staff_management"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/main_recyclerview_marginLeft"
android:layout_marginTop="@dimen/dp_20"
android:layout_marginRight="@dimen/main_recyclerview_marginRight" />
</LinearLayout>
</com.lihang.ShadowLayout>
</LinearLayout>
</androidx.core.widget.NestedScrollView>
</LinearLayout>
</LinearLayout>
......
......@@ -27,8 +27,8 @@
android:textColor="@color/white"
android:textSize="@dimen/sp_12"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@id/cl_title_layout" />
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintRight_toRightOf="parent"/>
<TextView
android:id="@+id/tv_today_amount"
......@@ -186,7 +186,6 @@
android:gravity="center"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
......@@ -197,7 +196,8 @@
<ImageView
android:id="@+id/iv_project_amount_state"
android:layout_width="@dimen/dp_8"
android:layout_height="@dimen/dp_9" />
android:layout_height="@dimen/dp_9"
android:visibility="gone" />
<TextView
android:id="@+id/tv_project_amount_trend"
......@@ -278,7 +278,8 @@
<ImageView
android:id="@+id/iv_people_trend"
android:layout_width="@dimen/dp_8"
android:layout_height="@dimen/dp_9" />
android:layout_height="@dimen/dp_9"
android:visibility="gone" />
<TextView
android:id="@+id/tv_people_trend"
......@@ -350,7 +351,8 @@
<ImageView
android:id="@+id/iv_bill_trend"
android:layout_width="@dimen/dp_8"
android:layout_height="@dimen/dp_9" />
android:layout_height="@dimen/dp_9"
android:visibility="gone" />
<TextView
android:id="@+id/tv_bill_trend"
......
......@@ -7,8 +7,8 @@
<ImageView
android:id="@+id/iv_main_home_item_function_icon"
android:layout_width="@dimen/dp_50"
android:layout_height="@dimen/dp_50"
android:layout_width="@dimen/dp_44"
android:layout_height="@dimen/dp_44"
android:src="@drawable/ic_dining_table" />
<TextView
......@@ -19,6 +19,6 @@
android:text="餐檯模式"
android:layout_marginTop="@dimen/dp_8"
android:textColor="@color/normal_color"
android:textSize="@dimen/sp_14" />
android:textSize="@dimen/sp_12" />
</LinearLayout>
\ No newline at end of file
......@@ -7,8 +7,8 @@
<ImageView
android:id="@+id/iv_main_home_item_function_icon"
android:layout_width="@dimen/dp_30"
android:layout_height="@dimen/dp_30"
android:layout_width="@dimen/dp_32"
android:layout_height="wrap_content"
android:src="@drawable/ic_dining_table" />
<TextView
......@@ -20,6 +20,6 @@
android:singleLine="true"
android:text="餐檯模式"
android:textColor="@color/normal_color"
android:textSize="@dimen/sp_13" />
android:textSize="@dimen/sp_12" />
</LinearLayout>
\ No newline at end of file
......@@ -40,7 +40,6 @@ android {
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
implementation files('libs/nexgon5lib.jar')
implementation 'androidx.appcompat:appcompat:1.1.0'
androidTestImplementation 'androidx.test:runner:1.2.0'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
......
......@@ -12,7 +12,7 @@ import com.jess.arms.di.scope.ActivityScope;
import javax.inject.Inject;
import com.joe.print.mvp.contract.PrintListContract;
import com.joe.print.mvp.model.server.PrinterService;
import com.joe.print.mvp.model.server.PrintInfoService;
import io.reactivex.Observable;
import okhttp3.RequestBody;
......@@ -51,13 +51,13 @@ public class PrintListModel extends BaseModel implements PrintListContract.Model
@Override
public Observable<BaseResult> getPrinterList(int restaurantId) {
return mRepositoryManager.obtainRetrofitService(PrinterService.class)
return mRepositoryManager.obtainRetrofitService(PrintInfoService.class)
.getPrinterList(restaurantId);
}
@Override
public Observable<BaseResult> deletePrinter(RequestBody requestBody) {
return mRepositoryManager.obtainRetrofitService(PrinterService.class)
return mRepositoryManager.obtainRetrofitService(PrintInfoService.class)
.deletePrinterList(requestBody);
}
}
\ No newline at end of file
......@@ -12,7 +12,7 @@ import com.jess.arms.di.scope.ActivityScope;
import javax.inject.Inject;
import com.joe.print.mvp.contract.PrintContract;
import com.joe.print.mvp.model.server.PrinterService;
import com.joe.print.mvp.model.server.PrintInfoService;
import io.reactivex.Observable;
......@@ -50,7 +50,7 @@ public class PrintModel extends BaseModel implements PrintContract.Model {
@Override
public Observable<BaseResult> getPrinterList(int restaurantId) {
return mRepositoryManager.obtainRetrofitService(PrinterService.class)
return mRepositoryManager.obtainRetrofitService(PrintInfoService.class)
.getPrinterList(restaurantId);
}
}
\ No newline at end of file
......@@ -4,16 +4,14 @@ import android.app.Application;
import com.gingersoft.gsa.cloud.base.common.bean.BaseResult;
import com.google.gson.Gson;
import com.jess.arms.di.scope.ActivityScope;
import com.jess.arms.integration.IRepositoryManager;
import com.jess.arms.mvp.BaseModel;
import com.jess.arms.di.scope.ActivityScope;
import com.joe.print.mvp.contract.PrinterAddContract;
import com.joe.print.mvp.model.server.PrintInfoService;
import javax.inject.Inject;
import com.joe.print.mvp.contract.PrinterAddContract;
import com.joe.print.mvp.model.server.PrinterService;
import io.reactivex.Observable;
import okhttp3.RequestBody;
......@@ -51,12 +49,12 @@ public class PrinterAddModel extends BaseModel implements PrinterAddContract.Mod
@Override
public Observable<BaseResult> addPrinter(RequestBody requestBody) {
return mRepositoryManager.obtainRetrofitService(PrinterService.class)
return mRepositoryManager.obtainRetrofitService(PrintInfoService.class)
.addPrinter(requestBody);
}
@Override
public Observable<BaseResult> updatePrinter(RequestBody requestBody) {
return mRepositoryManager.obtainRetrofitService(PrinterService.class)
return mRepositoryManager.obtainRetrofitService(PrintInfoService.class)
.updatePrinter(requestBody);
}
......
......@@ -2,13 +2,11 @@ package com.joe.print.mvp.model.server;
import com.gingersoft.gsa.cloud.base.common.bean.BaseResult;
import com.gingersoft.gsa.cloud.base.common.bean.TableBean;
import io.reactivex.Observable;
import me.jessyan.retrofiturlmanager.RetrofitUrlManager;
import okhttp3.RequestBody;
import retrofit2.http.Body;
import retrofit2.http.Field;
import retrofit2.http.GET;
import retrofit2.http.POST;
import retrofit2.http.Query;
......@@ -16,7 +14,7 @@ import retrofit2.http.Query;
/**
* Created by Wyh on 2019/12/20.
*/
public interface PrinterService {
public interface PrintInfoService {
@POST("PrinterDevice/add" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2)
Observable<BaseResult> addPrinter(@Body RequestBody requestBody);
......
package com.joe.print.mvp.print;
import android.content.Context;
import android.graphics.Bitmap;
import android.os.RemoteException;
import android.widget.Toast;
import com.gingersoft.gsa.cloud.base.utils.LanguageUtils;
import com.gingersoft.gsa.cloud.base.utils.log.LogUtil;
import com.sunmi.peripheral.printer.ICallback;
import com.sunmi.peripheral.printer.InnerPrinterCallback;
import com.sunmi.peripheral.printer.InnerPrinterException;
import com.sunmi.peripheral.printer.InnerPrinterManager;
import com.sunmi.peripheral.printer.SunmiPrinterService;
public class AidlUtil {
private static final String SERVICE_PACKAGE = "woyou.aidlservice.jiuiv5";
private static AidlUtil mAidlUtil = new AidlUtil();
private Context context;
private SunmiPrinterService sunmiPrinterService;
private AidlUtil() {
}
public static AidlUtil getInstance() {
return mAidlUtil;
}
/**
* 连接服务
*
* @param context context
*/
public void connectPrinterService(Context context) {
this.context = context.getApplicationContext();
try {
InnerPrinterManager.getInstance().bindService(context, innerPrinterCallback);
} catch (InnerPrinterException e) {
e.printStackTrace();
}
}
/**
* 断开服务
*
* @param context context
*/
public void disconnectPrinterService(Context context) {
if (sunmiPrinterService != null) {
try {
InnerPrinterManager.getInstance().unBindService(context, innerPrinterCallback);
sunmiPrinterService = null;
} catch (InnerPrinterException e) {
e.printStackTrace();
}
}
}
public boolean isConnect() {
return sunmiPrinterService != null;
}
private InnerPrinterCallback innerPrinterCallback = new InnerPrinterCallback() {
@Override
protected void onConnected(SunmiPrinterService service) {
sunmiPrinterService = service;
//初始化打印机
AidlUtil.getInstance().initPrinter();
}
@Override
protected void onDisconnected() {
}
};
/**
* 设置打印浓度
*/
private int[] darkness = new int[]{0x0600, 0x0500, 0x0400, 0x0300, 0x0200, 0x0100, 0,
0xffff, 0xfeff, 0xfdff, 0xfcff, 0xfbff, 0xfaff};
/**
* 初始化打印机
*/
public void initPrinter() {
if (sunmiPrinterService == null) {
Toast.makeText(context, LanguageUtils.get_language_system(context, "server.disconnected", "未連接上打印機!"), Toast.LENGTH_LONG).show();
return;
}
try {
sunmiPrinterService.printerInit(new com.sunmi.peripheral.printer.ICallback.Stub() {
@Override
public void onRunResult(boolean isSuccess) throws RemoteException {
LogUtil.d("printerInit", "onRunResult: " + isSuccess);
}
@Override
public void onReturnString(String result) throws RemoteException {
LogUtil.d("printerInit", "onReturnString: " + result);
}
@Override
public void onRaiseException(int code, String msg) throws RemoteException {
LogUtil.d("printerInit", "onRaiseException: " + msg);
}
@Override
public void onPrintResult(int code, String msg) throws RemoteException {
LogUtil.d("onPrintResult", "onPrintResult: " + msg);
}
});
} catch (RemoteException e) {
e.printStackTrace();
}
}
/**
* 打印二维码
*/
public void printQr(String data, int modulesize, int errorlevel) {
if (sunmiPrinterService == null) {
Toast.makeText(context, LanguageUtils.get_language_system(context, "server.disconnected", "未連接上打印機!"), Toast.LENGTH_LONG).show();
return;
}
try {
sunmiPrinterService.setAlignment(1, null);
sunmiPrinterService.printQRCode(data, modulesize, errorlevel, null);
sunmiPrinterService.lineWrap(1, null);
} catch (RemoteException e) {
e.printStackTrace();
}
}
/**
* 打印条形码
*/
public void printBarCode(String data, int symbology, int height, int width, int textposition) {
if (sunmiPrinterService == null) {
Toast.makeText(context, LanguageUtils.get_language_system(context, "server.disconnected", "未連接上打印機!"), Toast.LENGTH_LONG).show();
return;
}
try {
sunmiPrinterService.printBarCode(data, symbology, height, width, textposition, null);
sunmiPrinterService.lineWrap(3, null);
} catch (RemoteException e) {
e.printStackTrace();
}
}
/*
*打印图片
*/
public void printBitmap(Bitmap bitmap) {
if (sunmiPrinterService == null) {
Toast.makeText(context, LanguageUtils.get_language_system(context, "server.disconnected", "未連接上打印機!"), Toast.LENGTH_LONG).show();
return;
}
try {
sunmiPrinterService.setAlignment(1, null);
sunmiPrinterService.printBitmap(bitmap, null);
sunmiPrinterService.lineWrap(3, null);
} catch (RemoteException e) {
e.printStackTrace();
}
}
/**
* 打印图片和文字按照指定排列顺序
*/
public void printBitmap(Bitmap bitmap, int orientation) {
if (sunmiPrinterService == null) {
Toast.makeText(context, "服務已斷開!", Toast.LENGTH_LONG).show();
return;
}
try {
if (orientation == 0) {
sunmiPrinterService.printBitmap(bitmap, null);
// sunmiPrinterService.printText("横向排列\n", null);
// sunmiPrinterService.printBitmap(bitmap, null);
// sunmiPrinterService.printText("横向排列\n", null);
} else {
sunmiPrinterService.printBitmap(bitmap, null);
// sunmiPrinterService.printText("\n纵向排列\n", null);
// sunmiPrinterService.printBitmap(bitmap, null);
// sunmiPrinterService.printText("\n纵向排列\n", null);
}
sunmiPrinterService.lineWrap(3, null);
} catch (RemoteException e) {
e.printStackTrace();
}
}
/**
* 打印表格
*/
// public void printTable(LinkedList<TableItem> list) {
// if (sunmiPrinterService == null) {
// Toast.makeText(context,LanguageUtils.get_language_system(context, "server.disconnected", "未連接上打印機!"),Toast.LENGTH_LONG).show();
// return;
// }
//
// try {
// for (TableItem tableItem : list) {
// Log.i("kaltin", "printTable: "+tableItem.getText()[0]+tableItem.getText()[1]+tableItem.getText()[2]);
// sunmiPrinterService.printColumnsString(tableItem.getText(), tableItem.getWidth(), tableItem.getAlign(), null);
// }
// sunmiPrinterService.lineWrap(3, null);
// } catch (RemoteException e) {
// e.printStackTrace();
// }
// }
/*
* 空打三行!
*/
public void print3Line() {
if (sunmiPrinterService == null) {
Toast.makeText(context, LanguageUtils.get_language_system(context, "server.disconnected", "未連接上打印機!"), Toast.LENGTH_LONG).show();
return;
}
try {
sunmiPrinterService.lineWrap(3, null);
} catch (RemoteException e) {
e.printStackTrace();
}
}
public void sendRawData(byte[] data) {
if (sunmiPrinterService == null) {
Toast.makeText(context, LanguageUtils.get_language_system(context, "server.disconnected", "未連接上打印機!"), Toast.LENGTH_LONG).show();
return;
}
try {
sunmiPrinterService.sendRAWData(data, null);
} catch (RemoteException e) {
e.printStackTrace();
}
}
public void printerSelfChecking(com.sunmi.peripheral.printer.ICallback callback) {
if (sunmiPrinterService == null) {
Toast.makeText(context, LanguageUtils.get_language_system(context, "server.disconnected", "未連接上打印機!"), Toast.LENGTH_LONG).show();
return;
}
try {
sunmiPrinterService.printerSelfChecking(callback);
} catch (RemoteException e) {
e.printStackTrace();
}
}
/**
* 1 ! 打印机⼯作正常
* 2 ! 打印机准备中
* 3 ! 通讯异常
* 4 ! 缺纸
* 5 ! 过热
* 6 ! 开盖
* 7 ! 切⼑异常
* 8 ! 切⼑恢复
* 9 ! 未检测到⿊标
* 505 !未检测到打印机
* 507 !打印机固件升级失败
*
* @return
*/
public int updatePrinterState() {
if (sunmiPrinterService == null) {
Toast.makeText(context, LanguageUtils.get_language_system(context, "server.disconnected", "未連接上打印機!"), Toast.LENGTH_LONG).show();
return 2;
}
try {
return sunmiPrinterService.updatePrinterState();
} catch (RemoteException e) {
e.printStackTrace();
}
return 2;
}
}
package com.gingersoft.gsa.cloud.base.utils;
package com.joe.print.mvp.print;
import android.content.Context;
import android.graphics.Bitmap;
......@@ -6,7 +6,6 @@ import android.view.View;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.gingersoft.gsa.cloud.base.R;
import com.gingersoft.gsa.cloud.base.adapter.print.BillAdapter;
import com.gingersoft.gsa.cloud.base.adapter.print.BillTypeAdapter;
import com.gingersoft.gsa.cloud.base.adapter.print.FoodAdapter;
......@@ -17,9 +16,11 @@ import com.gingersoft.gsa.cloud.base.common.bean.OrderDetail;
import com.gingersoft.gsa.cloud.base.common.bean.TableBean;
import com.gingersoft.gsa.cloud.base.common.bean.mealManage.MyOrderManage;
import com.gingersoft.gsa.cloud.base.common.bean.mealManage.OpenTableManage;
import com.gingersoft.gsa.cloud.base.utils.MoneyUtil;
import com.gingersoft.gsa.cloud.base.utils.time.TimeUtils;
import com.gingersoft.gsa.cloud.base.utils.view.ImageUtils;
import com.gingersoft.gsa.cloud.base.utils.view.LayoutToBitmapUtils;
import com.joe.print.R;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
......@@ -53,7 +54,10 @@ public class PrintUtils {
public static List<Bitmap> getPrintBitmap(Context mContext, int type, int paperWidth) {
List<Bitmap> bitmaps = new ArrayList<>();
PrintUtils.paperWidth = paperWidth;
if (type == 0) {
if (type == -1) {
//測試紙
bitmaps.add(PrintUtils.getTestPrintBitmap(mContext));
} else if (type == 0) {
//上菜紙
bitmaps.add(PrintUtils.getPrintBitmap(mContext, MyOrderManage.getInstance().getNewFoodList()));
} else if (type == 1) {
......@@ -322,9 +326,18 @@ public class PrintUtils {
//操作人員
tvOperator.setText(GsaCloudApplication.userName);
LayoutToBitmapUtils.layoutView(context, view);//先测量view
//580為程序支持的打印紙最大寬度
return ImageUtils.zoomDrawable(LayoutToBitmapUtils.loadBitmapFromView(view), paperWidth);//将view轉bitmap
}
private static Bitmap getTestPrintBitmap(Context context){
View view = LinearLayout.inflate(context, R.layout.print_test, null);
LayoutToBitmapUtils.layoutView(context, view);//先测量view
//580為程序支持的打印紙最大寬度
return ImageUtils.zoomDrawable(LayoutToBitmapUtils.loadBitmapFromView(view), paperWidth);//将view轉bitmap
}
}
......@@ -3,7 +3,6 @@ package com.joe.print.mvp.print;
import android.content.Context;
import android.graphics.Bitmap;
import com.gingersoft.gsa.cloud.base.utils.PrintUtils;
import com.gingersoft.gsa.cloud.base.utils.toast.ToastUtils;
import java.util.ArrayList;
......@@ -41,9 +40,6 @@ public class SendPrint implements PrintDataMaker {
printer.setAlignCenter();
data.add(printer.getDataAndReset());
// //壓縮bitmap到指定大小
// bitmap = ImageUtils.zoomDrawabe(bitmap, width, bitmap.getHeight());
// ArrayList<byte[]> image1 = PrinterUtils.decodeBitmapToDataList(bitmap, parting);//bitmap转字节码
List<Bitmap> bitmaps = PrintUtils.getPrintBitmap(mContext, printType, width);//根據打印類型獲得不同的bitmap
if (bitmaps.size() <= 0) {
ToastUtils.show(mContext, "打印失敗");
......
......@@ -41,6 +41,7 @@ public class OldPrintActivity extends Activity implements PrintSocketHolder.OnSt
private int paperType = 1;//打印紙類型 1:58mm,2::80mm
private int printWidth = 560;//打印出來的內容寬度
/**
* -1:打印測試
* 0:上菜紙
* 1:印單
* 2:結賬單
......@@ -83,7 +84,8 @@ public class OldPrintActivity extends Activity implements PrintSocketHolder.OnSt
dialog.dismiss();
}
dialog = LoadingDialog.showNewDialogForLoading(this, "初始化...", true);
dialog.setOnDismissListener(this);
dialog.setOnDismissListener(dialog -> dismiss(""));
dialog.setOnCancelListener(dialog -> dismiss(""));
if (executor == null) {
executor = new PrintExecutor(ip, Integer.parseInt(port), paperType);
executor.setOnStateChangedListener(this);
......@@ -154,9 +156,12 @@ public class OldPrintActivity extends Activity implements PrintSocketHolder.OnSt
private void dismiss(String msg) {
ToastUtils.show(this, msg);
if(msg != null && !msg.equals("")){
ToastUtils.show(this, msg);
}
//延遲一秒
dialog.dismiss();
dialog.setOnCancelListener(dialog -> finish());
LoadingDialog.cancelDialogForLoading();
//判断是否为CC调用打开本页面
if (callId != null) {
......@@ -171,7 +176,6 @@ public class OldPrintActivity extends Activity implements PrintSocketHolder.OnSt
}
finish();
}
@Override
public void onDismiss(DialogInterface dialog) {
finish();
......
......@@ -9,17 +9,16 @@ import android.os.Bundle;
import android.os.IBinder;
import android.os.Looper;
import android.os.RemoteException;
import android.util.Log;
import com.billy.cc.core.component.CC;
import com.billy.cc.core.component.CCResult;
import com.billy.cc.core.component.CCUtil;
import com.gingersoft.gsa.cloud.base.application.GsaCloudApplication;
import com.gingersoft.gsa.cloud.base.common.bean.PrinterManger.PrinterManager;
import com.gingersoft.gsa.cloud.base.utils.PrintUtils;
import com.gingersoft.gsa.cloud.base.utils.constans.Constans;
import com.gingersoft.gsa.cloud.base.utils.other.SPUtils;
import com.gingersoft.gsa.cloud.base.utils.toast.ToastUtils;
import com.gingersoft.gsa.cloud.base.utils.view.ImageUtils;
import com.gingersoft.gsa.cloud.base.widget.DialogUtils;
import com.gingersoft.gsa.cloud.database.bean.PrinterDeviceBean;
import com.hyweb.n5.lib.constant.PrinterConstant;
......@@ -33,6 +32,7 @@ import com.joe.print.R;
import com.joe.print.di.component.DaggerPrintComponent;
import com.joe.print.mvp.contract.PrintContract;
import com.joe.print.mvp.presenter.PrintPresenter;
import com.joe.print.mvp.print.PrintUtils;
import com.joe.print.mvp.print.SunMiPrint;
import com.joe.print.mvp.ui.adapter.DialogPrinterListAdapter;
import com.yanzhenjie.recyclerview.widget.DefaultItemDecoration;
......@@ -102,6 +102,29 @@ public class PrintActivity extends BaseActivity<PrintPresenter> implements Print
@Override
public void initData(@Nullable Bundle savedInstanceState) {
// if (mV2.contains(Build.MODEL)) {
//
// } else if (mN5.contains(Build.MODEL)) {
try {
//初始化N5打印
int state = PrinterUtil.getStatus();
Log.e("error", "打印機狀態:" + state);
} catch (NullPointerException e) {
e.printStackTrace();
//如果是空指針,那麼需要初始化
try {
PrinterUtil.initPrinter(this);
} catch (NoInitPrinterException | RemoteException ex) {
ex.printStackTrace();
ToastUtils.show(mContext, "打印初始化失敗" + ex.getMessage());
Log.e("error", "打印初始化失敗:" + ex.getMessage());
}
} catch (RemoteException e){
ToastUtils.show(mContext, "獲取狀態失敗:" + e.getMessage());
Log.e("error", "獲取狀態失敗:" + e.getMessage());
}
// }
type = CCUtil.getNavigateParam(this, "type", 1001);
List<Bitmap> bitmaps = PrintUtils.getPrintBitmap(mContext, type, 500);
if (bitmaps.size() <= 0) {
......@@ -183,29 +206,15 @@ public class PrintActivity extends BaseActivity<PrintPresenter> implements Print
} else if (mN5.contains(model)) {
//N5打印
try {
PrinterUtil.initPrinter(mContext);
PrinterUtil.appendImage(bitmap, PrinterConstant.ALIGN_CENTER);
PrinterUtil.startPrint(true, new IOnPrintCallback() {
@Override
public void onPrintResult(int i) {
Looper.prepare();
if (i == 0) {
//打印成功
ToastUtils.show(mContext, "N5打印結果:成功");
printSuccess();
} else {
//打印失敗
ToastUtils.show(mContext, "N5打印結果:失敗");
printFile();
}
}
@Override
public IBinder asBinder() {
return null;
}
});
} catch (RemoteException | NoInitPrinterException e) {
try {
PrinterUtil.appendImage(bitmap, PrinterConstant.ALIGN_CENTER);
startN5Print();
} catch (NullPointerException e) {
ToastUtils.show(mContext, "打印失敗,請重試");
Log.e("error", "打印失敗請重試:" + e.getMessage());
finish();
}
} catch (RemoteException e) {
e.printStackTrace();
printFile();
}
......@@ -215,6 +224,53 @@ public class PrintActivity extends BaseActivity<PrintPresenter> implements Print
}
}
private void startN5Print() {
try {
PrinterUtil.startPrint(true, new IOnPrintCallback.Stub() {
@Override
public void onPrintResult(int i) throws RemoteException {
Log.e("error", "打印回調:" + i);
Looper.prepare();
if (i == 0) {
//打印成功
printSuccess();
} else {
//打印失敗
printFile();
}
}
@Override
public IBinder asBinder() {
return this;
}
});
} catch (RemoteException e) {
e.printStackTrace();
}
}
private IOnPrintCallback mIOnPrintCallback = new IOnPrintCallback() {
@Override
public void onPrintResult(int i) {
Log.e("error", "打印回調:" + i);
Looper.prepare();
if (i == 0) {
//打印成功
ToastUtils.show(mContext, "N5打印結果:成功");
printSuccess();
} else {
//打印失敗
ToastUtils.show(mContext, "N5打印結果:失敗");
printFile();
}
}
@Override
public IBinder asBinder() {
return null;
}
};
/**
* 打印失敗
*/
......@@ -233,13 +289,10 @@ public class PrintActivity extends BaseActivity<PrintPresenter> implements Print
finish();
}
//初始化打印內容
public Bitmap initPrintBitmap(int width) {
Bitmap bitmap = getIntent().getParcelableExtra("bitmap");
if (bitmap == null) {
return null;
}
return ImageUtils.zoomDrawable(bitmap, width, bitmap.getHeight());
@Override
protected void onDestroy() {
super.onDestroy();
Log.e("error", "PrintActivity :onDestroy");
}
@Override
......@@ -280,7 +333,6 @@ public class PrintActivity extends BaseActivity<PrintPresenter> implements Print
@Override
public void showMessage(@NonNull String message) {
checkNotNull(message);
// ArmsUtils.snackbarText(message);
ToastUtils.show(mContext, message);
}
......@@ -319,11 +371,13 @@ public class PrintActivity extends BaseActivity<PrintPresenter> implements Print
intent.putExtra("paperType", deviceBeans.get(position).getType());
intent.putExtra("type", type);
startActivity(intent);
dialog.dismiss();
finish();
});
dialog.setOnDismissListener(dialog1 -> finish());
dialog.setOnDismissListener(PrintActivity.this);
dialog.setOnCancelListener(dialog1 -> finish());
}
}
// .setWidth(ArmsUtils.getScreenHeidth(mContext))
.setHeight(ArmsUtils.getScreenHeidth(mContext) / 2)
.createDialogView()
.show();
......@@ -336,4 +390,5 @@ public class PrintActivity extends BaseActivity<PrintPresenter> implements Print
finish();
}
}
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical">
<!-- 打印測試-->
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="打印測試"
android:textColor="@color/theme_333_color"
android:textSize="@dimen/sp_25" />
</LinearLayout>
\ No newline at end of file
......@@ -2,7 +2,7 @@ ext.alwaysLib = true //虽然apply了cc-settings-2.gradle,但一直作为libra
apply from: rootProject.file("cc-settings.gradle")
apply plugin: 'com.jakewharton.butterknife'
apply plugin: 'org.greenrobot.greendao'
//apply plugin: 'android-aspectjx'
apply plugin: 'android-aspectjx'
android {
compileSdkVersion rootProject.ext.android["compileSdkVersion"]
......@@ -67,7 +67,6 @@ dependencies {
testImplementation rootProject.ext.dependencies["canary-release"]
annotationProcessor rootProject.ext.dependencies["dagger2-compiler"]
implementation rootProject.ext.dependencies["BaseRecyclerViewAdapter"]
// implementation 'androidx.appcompat:appcompat:1.1.0'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test:runner:1.2.0'
......@@ -80,11 +79,12 @@ dependencies {
implementation 'org.greenrobot:greendao-generator:3.2.2'
implementation rootProject.ext.dependencies["BaseRecyclerViewAdapter"]
implementation 'com.android.support:design:28.0.0'
implementation 'com.gcssloop.recyclerview:pagerlayoutmanager:2.3.8'
//陰影背景
// implementation 'com.github.Liberuman:ShadowDrawable:0.1'
// implementation 'com.github.Liberuman:ShadowDrawable:0.1'
api 'com.github.lihangleo2:ShadowLayout:2.1.6'
// implementation 'org.aspectj:aspectjrt:1.8.9'
api 'com.contrarywind:Android-PickerView:3.2.4'//時間選擇控件
api 'com.contrarywind:Android-PickerView:3.2.4'
//時間選擇控件
implementation 'org.aspectj:aspectjrt:1.8.9'
api files('libs/nexgon5lib.jar')
}
//package com.gingersoft.gsa.cloud.aspectj;
//
//import java.lang.annotation.ElementType;
//import java.lang.annotation.Retention;
//import java.lang.annotation.RetentionPolicy;
//import java.lang.annotation.Target;
//
///**
// * Created by Wyh on 2020/2/29.
// */
//@Retention(RetentionPolicy.RUNTIME)
//@Target(ElementType.METHOD)
//public @interface SingleClick {
// /* 点击间隔时间 */
// long value() default 1000;
//}
package com.gingersoft.gsa.cloud.aspectj;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* Created by Wyh on 2020/2/29.
* 雙擊檢測
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface SingleClick {
/* 点击间隔时间 */
long value() default 1000;
}
//package com.gingersoft.gsa.cloud.aspectj;
//
//import android.view.View;
//
//import java.lang.reflect.Method;
//
///**
// * Created by Wyh on 2020/2/29.
// */
//@Aspect
//public class SingleClickAspect {
// private static final long DEFAULT_TIME_INTERVAL = 5000;
//
// /**
// * 定义切点,标记切点为所有被@SingleClick注解的方法
// * 注意:这里me.baron.test.annotation.SingleClick需要替换成
// * 你自己项目中SingleClick这个类的全路径哦
// */
// @Pointcut("execution(@com.gingersoft.gsa.cloud.aspectj.SingleClick * *(..))")
// public void methodAnnotated() {
// }
//
// /**
// * 定义一个切面方法,包裹切点方法
// */
// @Around("methodAnnotated()")
// public void aroundJoinPoint(ProceedingJoinPoint joinPoint) throws Throwable {
// // 取出方法的参数
// View view = null;
// for (Object arg : joinPoint.getArgs()) {
// if (arg instanceof View) {
// view = (View) arg;
// break;
// }
// }
// if (view == null) {
// return;
// }
// // 取出方法的注解
// MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature();
// Method method = methodSignature.getMethod();
// if (!method.isAnnotationPresent(SingleClick.class)) {
// return;
// }
// SingleClick singleClick = method.getAnnotation(SingleClick.class);
// // 判断是否快速点击
// if (!XClickUtil.isFastDoubleClick(view, singleClick.value())) {
// // 不是快速点击,执行原方法
// joinPoint.proceed();
// }
// }
//}
package com.gingersoft.gsa.cloud.aspectj;
import android.view.View;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.aspectj.lang.reflect.MethodSignature;
import java.lang.reflect.Method;
/**
* Created by Wyh on 2020/2/29.
*/
@Aspect
public class SingleClickAspect {
private static final long DEFAULT_TIME_INTERVAL = 5000;
/**
* 定义切点,标记切点为所有被@SingleClick注解的方法
* 注意:这里me.baron.test.annotation.SingleClick需要替换成
* 你自己项目中SingleClick这个类的全路径哦
*/
@Pointcut("execution(@com.gingersoft.gsa.cloud.aspectj.SingleClick * *(..))")
public void methodAnnotated() {
}
/**
* 定义一个切面方法,包裹切点方法
*/
@Around("methodAnnotated()")
public void aroundJoinPoint(ProceedingJoinPoint joinPoint) throws Throwable {
// 取出方法的参数
View view = null;
for (Object arg : joinPoint.getArgs()) {
if (arg instanceof View) {
view = (View) arg;
break;
}
}
if (view == null) {
return;
}
// 取出方法的注解
MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature();
Method method = methodSignature.getMethod();
if (!method.isAnnotationPresent(SingleClick.class)) {
return;
}
SingleClick singleClick = method.getAnnotation(SingleClick.class);
// 判断是否快速点击
if (!XClickUtil.isFastDoubleClick(view, singleClick.value())) {
// 不是快速点击,执行原方法
joinPoint.proceed();
}
}
}
package com.gingersoft.gsa.cloud.aspectj;
import org.aspectj.lang.annotation.Aspect;
/**
* Created by Wyh on 2020/3/2.
*/
@Aspect
public class SwitchPrintAspect {
}
package com.gingersoft.gsa.cloud.aspectj;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* Created by Wyh on 2020/3/2.
* 切換默認打印方式
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface SwitchPrintMethod {
}
//package com.gingersoft.gsa.cloud.aspectj;
//
//import android.view.View;
//
///**
// * Created by Wyh on 2020/2/29.
// */
//public class XClickUtil {
// /**
// * 最近一次点击的时间
// */
// private static long mLastClickTime;
// /**
// * 最近一次点击的控件ID
// */
// private static int mLastClickViewId;
//
// /**
// * 是否是快速点击
// *
// * @param v 点击的控件
// * @param intervalMillis 时间间期(毫秒)
// * @return true:是,false:不是
// */
// public static boolean isFastDoubleClick(View v, long intervalMillis) {
// int viewId = v.getId();
// long time = System.currentTimeMillis();
// long timeInterval = Math.abs(time - mLastClickTime);
// if (timeInterval < intervalMillis && viewId == mLastClickViewId) {
// return true;
// } else {
// mLastClickTime = time;
// mLastClickViewId = viewId;
// return false;
// }
// }
//}
package com.gingersoft.gsa.cloud.aspectj;
import android.view.View;
/**
* Created by Wyh on 2020/2/29.
*/
public class XClickUtil {
/**
* 最近一次点击的时间
*/
private static long mLastClickTime;
/**
* 最近一次点击的控件ID
*/
private static int mLastClickViewId;
/**
* 是否是快速点击
*
* @param v 点击的控件
* @param intervalMillis 时间间期(毫秒)
* @return true:是,false:不是
*/
public static boolean isFastDoubleClick(View v, long intervalMillis) {
int viewId = v.getId();
long time = System.currentTimeMillis();
long timeInterval = Math.abs(time - mLastClickTime);
if (timeInterval < intervalMillis && viewId == mLastClickViewId) {
return true;
} else {
mLastClickTime = time;
mLastClickViewId = viewId;
return false;
}
}
}
......@@ -2,6 +2,8 @@ package com.gingersoft.gsa.cloud.base.application;
import android.app.Activity;
import android.content.Context;
import android.os.RemoteException;
import android.util.Log;
import com.billy.cc.core.component.CC;
import com.elvishew.xlog.LogConfiguration;
......@@ -22,6 +24,8 @@ import com.gingersoft.gsa.cloud.base.utils.file.FileUtils;
import com.gingersoft.gsa.cloud.base.utils.other.SPUtils;
import com.gingersoft.gsa.cloud.base.utils.xlog.MyBackupStrategy;
import com.gingersoft.gsa.cloud.database.DaoManager;
import com.hyweb.n5.lib.exception.NoInitPrinterException;
import com.hyweb.n5.lib.util.PrinterUtil;
import com.jess.arms.base.BaseApplication;
/**
......@@ -42,21 +46,33 @@ public class GsaCloudApplication extends BaseApplication {
public static boolean isLogin = false;
public static CurrentAndroidSetting androidSetting;
public static String userName = "";
/**
* 商米:V2、V2_PRO N5:N5
*/
public static String mV2 = "V2,V2_PRO";
public static String mN5 = "N5";
@Override
public void onCreate() {
super.onCreate();
this.mAppContext = this;
CC.enableVerboseLog(true);
CC.enableDebug(true);
CC.enableRemoteCC(true);
//初始化日誌管理庫
initXLog();
initGreenDao();
AppCrashHandler.getInstance().init(this,"test");
AppCrashHandler.getInstance().init(this, "test");
androidSetting = new CurrentAndroidSetting();
try {
//初始化N5打印
PrinterUtil.initPrinter(this);
} catch (NoInitPrinterException | RemoteException e) {
e.printStackTrace();
Log.e("error", "GsaCloudApplication打印初始化失敗:" + e.getMessage());
}
}
public Activity getCurrentActivity() {
......@@ -159,6 +175,7 @@ public class GsaCloudApplication extends BaseApplication {
public static void setBrandId(Context context, int restaurantId) {
SPUtils.put(context, UserConstans.brandId, restaurantId);
}
public static void setBrandName(Context context, String restaurantName) {
SPUtils.put(context, UserConstans.brandName, restaurantName);
}
......@@ -166,9 +183,11 @@ public class GsaCloudApplication extends BaseApplication {
public static void setRestaurantId(Context context, int restaurantId) {
SPUtils.put(context, UserConstans.restaurantId, restaurantId);
}
public static void setRestaurantName(Context context, String restaurantName) {
SPUtils.put(context, UserConstans.restaurantName, restaurantName);
}
public static void setBrandRestaurantInfos(Context context, String brandRestaurantIds) {
SPUtils.put(context, UserConstans.brandRestaurantInfos, brandRestaurantIds);
}
......
......@@ -51,7 +51,7 @@ public class LogUtil {
d(TAG, msg);
}
public static void d(String tagName, String msg) {
if (isPrintLog) {
if (isPrintLog && msg != null) {
int strLength = msg.length();
int start = 0;
int end = LOG_MAXLENGTH;
......
......@@ -51,7 +51,7 @@ public class TimeUtils {
*/
public static String dateFormatAHM = "aHH:mm";
public static String dateFormatYMDE = "yyyy/MM/dd E";
public static SimpleDateFormat dateFormatYMDE = new SimpleDateFormat("yyyy/MM/dd E");
public static String dateFormatYMD2 = "yyyy/MM/dd";
private TimeUtils() {
......
......@@ -25,6 +25,9 @@ public class Function {
@NotNull
private Long id;
private int parentId;
private int groupId;
private int status;
private long effectiveTime;
private String resName;
......@@ -52,11 +55,13 @@ public class Function {
private int textSizeRes;
@Generated(hash = 1134214411)
public Function(Long dbid, @NotNull Long id, int status, long effectiveTime,
String resName, String resUrl, String imageURL) {
@Generated(hash = 1165180133)
public Function(Long dbid, @NotNull Long id, int parentId, int groupId, int status,
long effectiveTime, String resName, String resUrl, String imageURL) {
this.dbid = dbid;
this.id = id;
this.parentId = parentId;
this.groupId = groupId;
this.status = status;
this.effectiveTime = effectiveTime;
this.resName = resName;
......@@ -67,7 +72,7 @@ public class Function {
@Generated(hash = 133141990)
public Function() {
}
public Function(@NotNull Long id, int status, long effectiveTime,
String resName, String resUrl, String imageURL) {
this.id = id;
......@@ -85,6 +90,14 @@ public class Function {
this.textSize = textSize;
}
public Function(Long id, int parentId, int groupId, String resName, int nameRes) {
this.id = id;
this.parentId = parentId;
this.groupId = groupId;
this.resName = resName;
this.nameRes = nameRes;
}
public Function(int nameRes, int textColorRes, int backgroundColorRes, int textSizeRes) {
this.nameRes = nameRes;
this.textColorRes = textColorRes;
......@@ -221,4 +234,20 @@ public class Function {
public void setDbid(Long dbid) {
this.dbid = dbid;
}
public int getParentId() {
return this.parentId;
}
public void setParentId(int parentId) {
this.parentId = parentId;
}
public int getGroupId() {
return this.groupId;
}
public void setGroupId(int groupId) {
this.groupId = groupId;
}
}
......@@ -26,11 +26,13 @@ public class FunctionDao extends AbstractDao<Function, Long> {
public static class Properties {
public final static Property Dbid = new Property(0, Long.class, "dbid", true, "_id");
public final static Property Id = new Property(1, Long.class, "id", false, "ID");
public final static Property Status = new Property(2, int.class, "status", false, "STATUS");
public final static Property EffectiveTime = new Property(3, long.class, "effectiveTime", false, "EFFECTIVE_TIME");
public final static Property ResName = new Property(4, String.class, "resName", false, "RES_NAME");
public final static Property ResUrl = new Property(5, String.class, "resUrl", false, "RES_URL");
public final static Property ImageURL = new Property(6, String.class, "imageURL", false, "IMAGE_URL");
public final static Property ParentId = new Property(2, int.class, "parentId", false, "PARENT_ID");
public final static Property GroupId = new Property(3, int.class, "groupId", false, "GROUP_ID");
public final static Property Status = new Property(4, int.class, "status", false, "STATUS");
public final static Property EffectiveTime = new Property(5, long.class, "effectiveTime", false, "EFFECTIVE_TIME");
public final static Property ResName = new Property(6, String.class, "resName", false, "RES_NAME");
public final static Property ResUrl = new Property(7, String.class, "resUrl", false, "RES_URL");
public final static Property ImageURL = new Property(8, String.class, "imageURL", false, "IMAGE_URL");
}
......@@ -48,11 +50,13 @@ public class FunctionDao extends AbstractDao<Function, Long> {
db.execSQL("CREATE TABLE " + constraint + "\"FUNCTION\" (" + //
"\"_id\" INTEGER PRIMARY KEY AUTOINCREMENT ," + // 0: dbid
"\"ID\" INTEGER NOT NULL ," + // 1: id
"\"STATUS\" INTEGER NOT NULL ," + // 2: status
"\"EFFECTIVE_TIME\" INTEGER NOT NULL ," + // 3: effectiveTime
"\"RES_NAME\" TEXT," + // 4: resName
"\"RES_URL\" TEXT," + // 5: resUrl
"\"IMAGE_URL\" TEXT);"); // 6: imageURL
"\"PARENT_ID\" INTEGER NOT NULL ," + // 2: parentId
"\"GROUP_ID\" INTEGER NOT NULL ," + // 3: groupId
"\"STATUS\" INTEGER NOT NULL ," + // 4: status
"\"EFFECTIVE_TIME\" INTEGER NOT NULL ," + // 5: effectiveTime
"\"RES_NAME\" TEXT," + // 6: resName
"\"RES_URL\" TEXT," + // 7: resUrl
"\"IMAGE_URL\" TEXT);"); // 8: imageURL
}
/** Drops the underlying database table. */
......@@ -70,22 +74,24 @@ public class FunctionDao extends AbstractDao<Function, Long> {
stmt.bindLong(1, dbid);
}
stmt.bindLong(2, entity.getId());
stmt.bindLong(3, entity.getStatus());
stmt.bindLong(4, entity.getEffectiveTime());
stmt.bindLong(3, entity.getParentId());
stmt.bindLong(4, entity.getGroupId());
stmt.bindLong(5, entity.getStatus());
stmt.bindLong(6, entity.getEffectiveTime());
String resName = entity.getResName();
if (resName != null) {
stmt.bindString(5, resName);
stmt.bindString(7, resName);
}
String resUrl = entity.getResUrl();
if (resUrl != null) {
stmt.bindString(6, resUrl);
stmt.bindString(8, resUrl);
}
String imageURL = entity.getImageURL();
if (imageURL != null) {
stmt.bindString(7, imageURL);
stmt.bindString(9, imageURL);
}
}
......@@ -98,22 +104,24 @@ public class FunctionDao extends AbstractDao<Function, Long> {
stmt.bindLong(1, dbid);
}
stmt.bindLong(2, entity.getId());
stmt.bindLong(3, entity.getStatus());
stmt.bindLong(4, entity.getEffectiveTime());
stmt.bindLong(3, entity.getParentId());
stmt.bindLong(4, entity.getGroupId());
stmt.bindLong(5, entity.getStatus());
stmt.bindLong(6, entity.getEffectiveTime());
String resName = entity.getResName();
if (resName != null) {
stmt.bindString(5, resName);
stmt.bindString(7, resName);
}
String resUrl = entity.getResUrl();
if (resUrl != null) {
stmt.bindString(6, resUrl);
stmt.bindString(8, resUrl);
}
String imageURL = entity.getImageURL();
if (imageURL != null) {
stmt.bindString(7, imageURL);
stmt.bindString(9, imageURL);
}
}
......@@ -127,11 +135,13 @@ public class FunctionDao extends AbstractDao<Function, Long> {
Function entity = new Function( //
cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0), // dbid
cursor.getLong(offset + 1), // id
cursor.getInt(offset + 2), // status
cursor.getLong(offset + 3), // effectiveTime
cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4), // resName
cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5), // resUrl
cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6) // imageURL
cursor.getInt(offset + 2), // parentId
cursor.getInt(offset + 3), // groupId
cursor.getInt(offset + 4), // status
cursor.getLong(offset + 5), // effectiveTime
cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6), // resName
cursor.isNull(offset + 7) ? null : cursor.getString(offset + 7), // resUrl
cursor.isNull(offset + 8) ? null : cursor.getString(offset + 8) // imageURL
);
return entity;
}
......@@ -140,11 +150,13 @@ public class FunctionDao extends AbstractDao<Function, Long> {
public void readEntity(Cursor cursor, Function entity, int offset) {
entity.setDbid(cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0));
entity.setId(cursor.getLong(offset + 1));
entity.setStatus(cursor.getInt(offset + 2));
entity.setEffectiveTime(cursor.getLong(offset + 3));
entity.setResName(cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4));
entity.setResUrl(cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5));
entity.setImageURL(cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6));
entity.setParentId(cursor.getInt(offset + 2));
entity.setGroupId(cursor.getInt(offset + 3));
entity.setStatus(cursor.getInt(offset + 4));
entity.setEffectiveTime(cursor.getLong(offset + 5));
entity.setResName(cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6));
entity.setResUrl(cursor.isNull(offset + 7) ? null : cursor.getString(offset + 7));
entity.setImageURL(cursor.isNull(offset + 8) ? null : cursor.getString(offset + 8));
}
@Override
......
......@@ -237,6 +237,9 @@ public class ChooseRestaurantDialog extends Dialog {
}
public ChooseRestaurantDialog build() {
if(mDialog != null){
return mDialog;
}
mDialog = new ChooseRestaurantDialog(mContext);
View contentView = buildViews();
mDialog.setContentView(contentView, new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, QMUIDisplayHelper.getScreenHeight(mContext)));
......
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@color/alpha_20_white" android:state_checkable="true" />
<item android:drawable="@color/alpha_20_white" android:state_pressed="true" />
<item android:drawable="@color/alpha_20_white" android:state_checked="true" />
<item android:drawable="@color/trans" />
</selector>
\ No newline at end of file
......@@ -4,11 +4,12 @@
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
<Button
android:id="@+id/tv_item_keyboard"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:background="@drawable/selector_keyboard_btn_bg"
android:textColor="@color/theme_white_color"
android:textSize="@dimen/sp_24" />
......
......@@ -132,6 +132,26 @@
<color name="alpha_90_white">#E6FFFFFF</color>
<color name="alpha_95_white">#F2FFFFFF</color>
<color name="alpha_05_black">#0D000000</color>
<color name="alpha_10_black">#1A000000</color>
<color name="alpha_15_black">#26000000</color>
<color name="alpha_20_black">#33000000</color>
<color name="alpha_25_black">#40000000</color>
<color name="alpha_30_black">#4D000000</color>
<color name="alpha_35_black">#59000000</color>
<color name="alpha_40_black">#66000000</color>
<color name="alpha_45_black">#73000000</color>
<color name="alpha_50_black">#80000000</color>
<color name="alpha_55_black">#8C000000</color>
<color name="alpha_60_black">#99000000</color>
<color name="alpha_65_black">#A6000000</color>
<color name="alpha_70_black">#B3000000</color>
<color name="alpha_75_black">#BF000000</color>
<color name="alpha_80_black">#CC000000</color>
<color name="alpha_85_black">#D9000000</color>
<color name="alpha_90_black">#E6000000</color>
<color name="alpha_95_black">#F2000000</color>
<color name="red_50">#fde0dc</color>
<color name="red_100">#f9bdbb</color>
<color name="red_200">#f69988</color>
......
package com.gingersoft.gsa.cloud.table.mvp.presenter;
import android.app.Application;
import android.graphics.Color;
import android.text.TextUtils;
import android.widget.BaseAdapter;
import com.billy.cc.core.component.CC;
import com.gingersoft.gsa.cloud.base.common.bean.BaseResult;
......@@ -14,8 +12,8 @@ import com.gingersoft.gsa.cloud.base.common.bean.mealManage.OpenTableManage;
import com.gingersoft.gsa.cloud.base.utils.JsonUtils;
import com.gingersoft.gsa.cloud.base.utils.gson.GsonUtils;
import com.gingersoft.gsa.cloud.database.bean.ComboItem;
import com.gingersoft.gsa.cloud.database.bean.FoodCombo;
import com.gingersoft.gsa.cloud.database.bean.Food;
import com.gingersoft.gsa.cloud.database.bean.FoodCombo;
import com.gingersoft.gsa.cloud.database.bean.Modifier;
import com.gingersoft.gsa.cloud.database.utils.FoodDaoUtils;
import com.gingersoft.gsa.cloud.database.utils.ModifierDaoUtils;
......
......@@ -2,10 +2,10 @@ package com.gingersoft.gsa.cloud.table.mvp.presenter;
import android.app.Application;
import android.graphics.Color;
import android.util.Log;
import android.view.View;
import com.billy.cc.core.component.CC;
import com.billy.cc.core.component.CCUtil;
import com.gingersoft.gsa.cloud.base.common.bean.BaseResult;
import com.gingersoft.gsa.cloud.base.common.bean.OrderBean;
import com.gingersoft.gsa.cloud.base.common.bean.OrderDetail;
......@@ -214,7 +214,7 @@ public class OrderContentPresenter extends BaseOrderPresenter<OrderContentContra
}
/**
* 打印上菜紙
* 送單
*/
private void printSendOrder(List<OrderDetail> newFoods) {
MyOrderManage.getInstance().setNewFoodList(newFoods);
......@@ -223,6 +223,7 @@ public class OrderContentPresenter extends BaseOrderPresenter<OrderContentContra
.addParam("type", 3)
.build()
.callAsync((cc, result) -> {
Log.e("error", "是否成功打印:" + result.isSuccess());
if (result.isSuccess()) {
//打印成功
}
......@@ -265,6 +266,7 @@ public class OrderContentPresenter extends BaseOrderPresenter<OrderContentContra
.setActionName("printActivity")
.build()
.callAsync((cc, result) -> {
Log.e("error", "是否成功打印:" + result.isSuccess());
if (result.isSuccess()) {
//打印成功
mRootView.printSuccess();
......
......@@ -2,6 +2,7 @@ package com.gingersoft.gsa.cloud.table.mvp.presenter;
import android.app.Application;
import android.os.CountDownTimer;
import android.util.Log;
import android.view.View;
import com.billy.cc.core.component.CC;
......@@ -149,6 +150,7 @@ public class TablePresenter extends BasePresenter<TableContract.Model, TableCont
.addParam("type", 0)
.build()
.callAsync((cc, result) -> {
Log.e("error", "是否成功打印:" + result.isSuccess());
if (result.isSuccess()) {
//打印成功
}
......
......@@ -28,7 +28,6 @@ import com.gingersoft.gsa.cloud.base.common.bean.mealManage.OpenTableManage;
import com.gingersoft.gsa.cloud.base.utils.VibratorUtils;
import com.gingersoft.gsa.cloud.base.utils.constans.Constans;
import com.gingersoft.gsa.cloud.base.utils.other.SPUtils;
import com.gingersoft.gsa.cloud.base.utils.time.TimeUtils;
import com.gingersoft.gsa.cloud.base.utils.view.ViewUtils;
import com.gingersoft.gsa.cloud.base.widget.DialogUtils;
import com.gingersoft.gsa.cloud.database.bean.Food;
......@@ -293,7 +292,7 @@ public class MealStandActivity extends BaseActivity<MealStandPresenter> implemen
}
private void initTableDetail() {
if(OpenTableManage.getDefault().getPeopleNumber() == 0){
if (OpenTableManage.getDefault().getPeopleNumber() == 0) {
showChoosePeopleNumDialog(false);
}
}
......
......@@ -6,6 +6,7 @@ import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
......@@ -516,6 +517,7 @@ public class OrderPayActivity extends BaseActivity<OrderPayPresenter> implements
.addParam("type", 2)
.build()
.callAsync((cc, result) -> {
Log.e("error", "是否成功打印:" + result.isSuccess());
if (result.isSuccess()) {
//打印成功
......
ext.mainApp = true //设置为true,表示此module为主app module,一直以application方式编译
apply from: rootProject.file("cc-settings.gradle")
apply plugin: 'com.jakewharton.butterknife'
//apply plugin: 'android-aspectjx'
apply plugin: 'android-aspectjx'
android {
signingConfigs {
GSAndroidNew {
......
......@@ -16,20 +16,24 @@
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/user_login_name"
tools:replace="android:label"
android:networkSecurityConfig="@xml/network_android"
android:roundIcon="@mipmap/ic_logo"
android:supportsRtl="true"
android:theme="@style/AppTheme">
android:theme="@style/AppTheme"
tools:replace="android:label">
<activity android:name=".mvp.ui.activity.LoginActivity"
<activity
android:name=".mvp.ui.activity.LoginActivity"
android:windowSoftInputMode="adjustResize|stateHidden"
android:launchMode="singleTop">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".mvp.ui.activity.SwitchServerActivity" />
<meta-data
android:name="com.gingersoft.gsa.cloud.globalconfig.GlobalConfiguration"
......
......@@ -5,6 +5,7 @@ import com.billy.cc.core.component.CCResult;
import com.billy.cc.core.component.CCUtil;
import com.billy.cc.core.component.IComponent;
import com.gingersoft.gsa.cloud.user.login.mvp.ui.activity.LoginActivity;
import com.gingersoft.gsa.cloud.user.login.mvp.ui.activity.SwitchServerActivity;
public class ComponentLogin implements IComponent {
......@@ -43,6 +44,11 @@ public class ComponentLogin implements IComponent {
case "getInfo":
getInfo(cc);
break;
case "switchServer":
//切換環境
CCUtil.navigateTo(cc, SwitchServerActivity.class);
CC.sendCCResult(cc.getCallId(), CCResult.success());
break;
default:
//这个逻辑分支上没有调用CC.sendCCResult(...),是一种错误的示例
//并且方法的返回值为false,代表不会异步调用CC.sendCCResult(...)
......
package com.gingersoft.gsa.cloud.user.login.mvp.ui.activity;
import android.app.Activity;
import android.app.Dialog;
import android.content.Intent;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.text.method.HideReturnsTransformationMethod;
import android.text.method.PasswordTransformationMethod;
import android.util.Log;
import android.view.View;
import android.widget.CheckBox;
import android.widget.EditText;
......@@ -19,7 +23,6 @@ import com.gingersoft.gsa.cloud.base.utils.log.LogUtil;
import com.gingersoft.gsa.cloud.base.utils.other.SPUtils;
import com.gingersoft.gsa.cloud.base.utils.toast.ToastUtils;
import com.gingersoft.gsa.cloud.ui.bean.mode.LoginBean;
import com.gingersoft.gsa.cloud.ui.bean.view.SectionTextItem;
import com.gingersoft.gsa.cloud.ui.widget.dialog.ChooseRestaurantDialog;
import com.gingersoft.gsa.cloud.ui.widget.dialog.LoadingDialog;
import com.gingersoft.gsa.cloud.user.login.R;
......@@ -81,6 +84,10 @@ public class LoginActivity extends BaseActivity<LoginPresenter> implements Login
ImageView icClearAccount;
@BindView(R2.id.rb_remember_password)
CheckBox mRbRememberPwd;
@BindView(R2.id.ic_look_pwd)
ImageView mIvSeePwd;
private boolean passwrodVisibility = false;
@Override
public void setupActivityComponent(@NonNull AppComponent appComponent) {
......@@ -120,6 +127,8 @@ public class LoginActivity extends BaseActivity<LoginPresenter> implements Login
// jumpActivity();
// finish();
// }
edPwd.setOnFocusChangeListener(mOnFocusChangeListener);
edAccount.setOnFocusChangeListener(mOnFocusChangeListener);
edPwd.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
......@@ -133,14 +142,15 @@ public class LoginActivity extends BaseActivity<LoginPresenter> implements Login
@Override
public void afterTextChanged(Editable s) {
if (edPwd.getText().equals("")) {
if (edPwd.getText() != null && edPwd.getText().toString().equals("")) {
icClear.setVisibility(View.GONE);
mIvSeePwd.setVisibility(View.GONE);
} else {
icClear.setVisibility(View.VISIBLE);
mIvSeePwd.setVisibility(View.VISIBLE);
}
}
});
edAccount.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
......@@ -149,7 +159,7 @@ public class LoginActivity extends BaseActivity<LoginPresenter> implements Login
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
if (edAccount.getText().equals("")) {
if (edPwd.getText() != null && edAccount.getText().toString().equals("")) {
icClearAccount.setVisibility(View.GONE);
} else {
icClearAccount.setVisibility(View.VISIBLE);
......@@ -163,6 +173,39 @@ public class LoginActivity extends BaseActivity<LoginPresenter> implements Login
});
}
private View.OnFocusChangeListener mOnFocusChangeListener = new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
editFocusChange(v, hasFocus);
if (v.getId() == R.id.ed_login_user_account && hasFocus) {
//賬號框獲得焦點
if (edAccount.getText() != null && edAccount.getText().toString().length() > 0) {
icClearAccount.setVisibility(View.VISIBLE);
} else {
icClearAccount.setVisibility(View.GONE);
}
} else {
icClearAccount.setVisibility(View.GONE);
}
}
};
private void editFocusChange(View v, boolean hasFocus) {
if (v.getId() == R.id.ed_login_user_pwd && hasFocus) {
//密碼框獲得焦點
if (edPwd.getText() != null && edPwd.getText().toString().length() > 0) {
icClear.setVisibility(View.VISIBLE);
mIvSeePwd.setVisibility(View.VISIBLE);
} else {
icClear.setVisibility(View.GONE);
mIvSeePwd.setVisibility(View.GONE);
}
} else {
icClear.setVisibility(View.GONE);
mIvSeePwd.setVisibility(View.GONE);
}
}
@Override
public void onResume() {
super.onResume();
......@@ -235,6 +278,8 @@ public class LoginActivity extends BaseActivity<LoginPresenter> implements Login
finish();
}
private Dialog dialog1;
@Override
public void loginSuccess(LoginBean loginBean) {
//記住密碼
......@@ -270,30 +315,36 @@ public class LoginActivity extends BaseActivity<LoginPresenter> implements Login
}
jumpDownloadActivity();
} else {
new ChooseRestaurantDialog.BottomListSheetBuilder(this)
.addBrandItems(brandsBeans)
.setOnItemClickListener(new ChooseRestaurantDialog.BottomListSheetBuilder.OnItemClickListener() {
@Override
public void onItemClick(ChooseRestaurantDialog dialog, SectionTextItem item, int position) {
if (!isFinishing()) {
dialog1 = new ChooseRestaurantDialog.BottomListSheetBuilder(this)
.addBrandItems(brandsBeans)
.setOnItemClickListener((dialog, item, position) -> {
LoginBean.DataBean.UserBean.BrandsBean brandsBean = getBrandByRestaurantId(brands, item.getId());
if (brandsBean != null) {
saveBrandAndRestaurantInfo(brandsBean.getBrandId(), brandsBean.getBrandName(), item.getId(), item.getText());
}
jumpDownloadActivity();
killMyself();
dialog.dismiss();
}
})
.build()
.show();
killMyself();
}).build();
if (!isFinishing() && dialog1 != null && !dialog1.isShowing()) {
dialog1.show();
}
}
}
}
}
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.e("error", "登陸頁面銷毀:onDestroy");
// if (dialog != null) {
// dialog.dismiss();
// }
}
/**
* 記住密碼
*/
......@@ -384,9 +435,28 @@ public class LoginActivity extends BaseActivity<LoginPresenter> implements Login
}
@Override
@OnClick({R2.id.tv_gsa_user_login, R2.id.iv_clear_pwd, R2.id.iv_clear_account})
@OnClick({R2.id.tv_gsa_user_login, R2.id.iv_clear_pwd, R2.id.iv_clear_account, R2.id.tv_remember_pwd_text, R2.id.ic_look_pwd})
public void onClick(View v) {
switch (v.getId()) {
case R.id.ic_look_pwd:
passwrodVisibility = !passwrodVisibility;
if (passwrodVisibility) {
//如果选中,显示密码
mIvSeePwd.setImageDrawable(getResources().getDrawable(R.mipmap.ic_password_show));
edPwd.setTransformationMethod(HideReturnsTransformationMethod.getInstance());
edPwd.setSelection(edPwd.getText().toString().length());
} else {
//否则隐藏密码
mIvSeePwd.setImageDrawable(getResources().getDrawable(R.mipmap.ic_password_hide));
edPwd.setTransformationMethod(PasswordTransformationMethod.getInstance());
edPwd.setSelection(edPwd.getText().toString().length());
}
edPwd.setSelection(edPwd.getText() == null ? 0 : edPwd.getText().toString().length());
break;
case R.id.tv_remember_pwd_text:
//記住密碼
mRbRememberPwd.toggle();
break;
case R.id.tv_gsa_user_login:
//登陸
if (edAccount.getText() != null && edPwd.getText() != null) {
......
......@@ -19,7 +19,6 @@ import com.jess.arms.utils.ArmsUtils;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import butterknife.BindView;
import me.jessyan.retrofiturlmanager.RetrofitUrlManager;
import static com.jess.arms.utils.Preconditions.checkNotNull;
......@@ -81,6 +80,7 @@ public class SwitchServerActivity extends BaseActivity<SwitchServerPresenter> im
HttpsConstans.ROOT_SERVER_ADDRESS_FORMAL = HttpsConstans.ROOT_SERVER_ADDRESS_FORMAL_HK;
}
finish();
startActivity(new Intent(mContext, LoginActivity.class));
});
}
......
......@@ -53,7 +53,7 @@
android:id="@+id/iv_clear_account"
android:layout_width="@dimen/dp_30"
android:layout_height="@dimen/dp_30"
android:layout_marginRight="@dimen/dp_10"
android:padding="@dimen/dp_5"
android:src="@mipmap/ic_clear_text"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="@id/ed_login_user_account"
......@@ -90,7 +90,7 @@
android:textSize="@dimen/edit_text_size"
app:layout_constraintBottom_toBottomOf="@id/iv_login_pwd_icon"
app:layout_constraintLeft_toRightOf="@id/iv_login_pwd_icon"
app:layout_constraintRight_toLeftOf="@id/iv_clear_pwd"
app:layout_constraintRight_toLeftOf="@id/ic_look_pwd"
app:layout_constraintTop_toTopOf="@id/iv_login_pwd_icon" />
<CheckBox
......@@ -102,6 +102,7 @@
app:layout_constraintTop_toBottomOf="@id/ed_login_user_pwd" />
<TextView
android:id="@+id/tv_remember_pwd_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/dp_5"
......@@ -113,10 +114,21 @@
app:layout_constraintTop_toTopOf="@id/rb_remember_password" />
<ImageView
android:id="@+id/ic_look_pwd"
android:layout_width="@dimen/dp_30"
android:layout_height="@dimen/dp_30"
android:padding="@dimen/dp_5"
android:visibility="gone"
android:src="@mipmap/ic_password_hide"
app:layout_constraintBottom_toBottomOf="@id/ed_login_user_pwd"
app:layout_constraintRight_toLeftOf="@id/iv_clear_pwd"
app:layout_constraintTop_toTopOf="@id/ed_login_user_pwd" />
<ImageView
android:id="@+id/iv_clear_pwd"
android:layout_width="@dimen/dp_30"
android:layout_height="@dimen/dp_30"
android:layout_marginRight="@dimen/dp_10"
android:padding="@dimen/dp_5"
android:src="@mipmap/ic_clear_text"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="@id/ed_login_user_pwd"
......

5.94 KB | W: | H:

522 Bytes | W: | H:

user-login/src/main/res/mipmap-xhdpi/ic_clear_text.png
user-login/src/main/res/mipmap-xhdpi/ic_clear_text.png
user-login/src/main/res/mipmap-xhdpi/ic_clear_text.png
user-login/src/main/res/mipmap-xhdpi/ic_clear_text.png
  • 2-up
  • Swipe
  • Onion skin
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