Commit 38f09a7b by 王宇航

添加打印機失敗問題

parent e799c8b5
......@@ -4,7 +4,6 @@ import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.NinePatch;
import android.graphics.Paint;
import android.graphics.PorterDuff;
......@@ -19,41 +18,43 @@ import com.daivd.chart.utils.DensityUtils;
* 气泡提示
*/
public abstract class BaseBubbleTip<C,S> implements ITip<C,S>{
public abstract class BaseBubbleTip<C, S> implements ITip<C, S> {
public static final int INVALID = -1;
private Rect tipRect;
private Paint paint;
private int verticalPadding;
private int horizontalPadding;
private Bitmap triangleBitmap;
// private Bitmap triangleBitmap;
private NinePatch ninePatch;
private boolean isReversal = false;
protected int deviation;
private float alpha;
private int colorFilter = INVALID;
public BaseBubbleTip(Context context, int backgroundDrawableID, int triangleDrawableID, Paint paint){
public BaseBubbleTip(Context context, int backgroundDrawableID, int triangleDrawableID, Paint paint) {
tipRect = new Rect();
this.paint = paint;
triangleBitmap = Bitmap.createBitmap(BitmapFactory.decodeResource(context.getResources(), triangleDrawableID));
if(ninePatch == null) {
// triangleBitmap = Bitmap.createBitmap(BitmapFactory.decodeResource(context.getResources(), triangleDrawableID));
if (ninePatch == null) {
Bitmap bmp_9 = BitmapFactory.decodeResource(context.getResources(),
backgroundDrawableID);
ninePatch = new NinePatch(bmp_9, bmp_9.getNinePatchChunk(), null);
}
verticalPadding = DensityUtils.dp2px(context,5);
verticalPadding = DensityUtils.dp2px(context, 5);
horizontalPadding = verticalPadding;
deviation = DensityUtils.dp2px(context,5);
deviation = DensityUtils.dp2px(context, 5);
}
public void drawTip(Canvas canvas, float x, float y, Rect rect,C c,int position) {
if(isShowTip(c,position)) {
S content = format(c,position);
int triangleWidth = triangleBitmap.getWidth();
int triangleHeight = triangleBitmap.getHeight();
public void drawTip(Canvas canvas, float x, float y, Rect rect, C c, int position) {
if (isShowTip(c, position)) {
S content = format(c, position);
// int triangleWidth = triangleBitmap.getWidth();
// int triangleHeight = triangleBitmap.getHeight();
int triangleWidth = 0;
int triangleHeight = 0;
int textWidth = getTextWidth(content);
int textHeight = getTextHeight(content);
int w = textWidth + horizontalPadding * 2;
......@@ -63,10 +64,9 @@ public abstract class BaseBubbleTip<C,S> implements ITip<C,S>{
tipRect.bottom = (int) y - triangleHeight + triangleWidth / 8;
tipRect.top = tipRect.bottom - h;
int tranX = 0;
if(x > rect.left && x < rect.right) {
if (x > rect.left && x < rect.right) {
if (tipRect.left < rect.left) {
tranX = rect.left - tipRect.left - triangleWidth / 2;
} else if (tipRect.right > rect.right) {
tranX = rect.right - tipRect.right + triangleWidth / 2;
}
......@@ -89,52 +89,54 @@ public abstract class BaseBubbleTip<C,S> implements ITip<C,S>{
public abstract int getTextWidth(S content);
public abstract void drawText(Canvas canvas,Rect tipRect,S content,int textWidth,int textHeight,Paint paint);
public abstract void drawText(Canvas canvas, Rect tipRect, S content, int textWidth, int textHeight, Paint paint);
private void showTop(Canvas canvas, float x, float y, S content, int textWidth, int textHeight,int tranX) {
private void showTop(Canvas canvas, float x, float y, S content, int textWidth, int textHeight, int tranX) {
canvas.save();
int triangleWidth = triangleBitmap.getWidth();
int triangleHeight = triangleBitmap.getHeight();
// int triangleWidth = triangleBitmap.getWidth();
// int triangleHeight = triangleBitmap.getHeight();
int triangleWidth = 0;
int triangleHeight = 0;
startColorFilter();
// paint.setShadowLayer(40, 10, 50, Color.BLACK);
canvas.drawBitmap(triangleBitmap,x-triangleWidth/2,
y-triangleHeight,paint);
// canvas.drawBitmap(triangleBitmap, x - triangleWidth / 2,
// y - triangleHeight, paint);
// paint.clearShadowLayer();
canvas.translate(tranX,0);
canvas.translate(tranX, 0);
ninePatch.draw(canvas, tipRect);
clearColorFilter();
drawText(canvas, tipRect,content,textWidth,textHeight,paint);
drawText(canvas, tipRect, content, textWidth, textHeight, paint);
canvas.restore();
}
private void showBottom(Canvas canvas, float x, float y, S content, int textWidth,int textHeight,int tranX) {
private void showBottom(Canvas canvas, float x, float y, S content, int textWidth, int textHeight, int tranX) {
canvas.save();
int triangleWidth = triangleBitmap.getWidth();
int triangleHeight = triangleBitmap.getHeight();
canvas.rotate(180,x,y);
// int triangleWidth = triangleBitmap.getWidth();
// int triangleHeight = triangleBitmap.getHeight();
canvas.rotate(180, x, y);
startColorFilter();
canvas.drawBitmap(triangleBitmap,x-triangleWidth/2,
y-triangleHeight,paint);
canvas.translate(-tranX,0);
// canvas.drawBitmap(triangleBitmap, x - triangleWidth / 2,
// y - triangleHeight, paint);
canvas.translate(-tranX, 0);
ninePatch.draw(canvas, tipRect);
clearColorFilter();
paint.setColorFilter(null);
canvas.rotate(180, tipRect.centerX(), tipRect.centerY());
drawText(canvas, tipRect,content,textWidth,textHeight,paint);
drawText(canvas, tipRect, content, textWidth, textHeight, paint);
canvas.restore();
}
private void startColorFilter() {
if (colorFilter != INVALID){
if (colorFilter != INVALID) {
paint.setColorFilter(new PorterDuffColorFilter(colorFilter, PorterDuff.Mode.SRC_IN));
ninePatch.setPaint(paint);
paint.setAlpha((int) (alpha*255));
paint.setAlpha((int) (alpha * 255));
}
}
private void clearColorFilter(){
private void clearColorFilter() {
if(colorFilter != INVALID) {
if (colorFilter != INVALID) {
paint.setColorFilter(null);
paint.setAlpha(255);
}
......
......@@ -13,29 +13,29 @@ import com.daivd.chart.utils.DensityUtils;
* 气泡提示
*/
public abstract class MultiLineBubbleTip<C> extends BaseBubbleTip<C,String[]>{
public abstract class MultiLineBubbleTip<C> extends BaseBubbleTip<C, String[]> {
private int lineSpacing;
public MultiLineBubbleTip(Context context, int backgroundDrawableID, int triangleDrawableID, Paint paint) {
super(context, backgroundDrawableID, triangleDrawableID, paint);
lineSpacing = DensityUtils.dp2px(context,3);
lineSpacing = DensityUtils.dp2px(context, 3);
}
@Override
public int getTextHeight(String[] content) {
Paint.FontMetrics fontMetrics = getPaint().getFontMetrics();
int textHeight= (int) (fontMetrics.bottom - fontMetrics.top);
return (textHeight +lineSpacing)*content.length - lineSpacing;
int textHeight = (int) (fontMetrics.bottom - fontMetrics.top);
return (textHeight + lineSpacing) * content.length - lineSpacing;
}
@Override
public int getTextWidth(String[] content) {
int maxLength = 0;
for(int i = 0;i < content.length;i++) {
for (int i = 0; i < content.length; i++) {
int length = (int) getPaint().measureText(content[i]);
if (length > maxLength) {
maxLength = length;
maxLength = length;
}
}
return maxLength;
......@@ -43,12 +43,12 @@ public abstract class MultiLineBubbleTip<C> extends BaseBubbleTip<C,String[]>{
@Override
public void drawText(Canvas canvas, Rect tipRect, String[] content, int textWidth, int textHeight, Paint paint) {
int lineHeight =textHeight/content.length;
for(int i = 0;i < content.length;i++) {
int lineHeight = textHeight / content.length;
for (int i = 0; i < content.length; i++) {
String c = content[i];
int bottom = tipRect.top+getVerticalPadding()+lineHeight+ (lineHeight)*i - lineSpacing-deviation/2;
int left = tipRect.centerX()-textWidth/2;
canvas.drawText(c,left,bottom,paint);
int bottom = tipRect.top + getVerticalPadding() + lineHeight + (lineHeight) * i - lineSpacing - deviation / 2;
int left = tipRect.centerX() - textWidth / 2;
canvas.drawText(c, left, bottom, paint);
}
}
......
......@@ -51,9 +51,9 @@ dependencies {
testImplementation rootProject.ext.dependencies["canary-release"]
testImplementation rootProject.ext.dependencies["junit"]
implementation rootProject.ext.dependencies["BaseRecyclerViewAdapter"]
implementation 'com.github.Liberuman:ShadowDrawable:0.1'
//陰影背景
implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0'
//報表圖
implementation project(':chart')
implementation files('libs/nineoldandroids-2.4.0.jar')
......
......@@ -18,7 +18,8 @@
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".mvp.ui.activity.MainActivity"/>
<activity android:name=".mvp.ui.activity.ReportActivity"></activity>
<activity android:name=".mvp.ui.activity.MainActivity" />
<activity
android:name=".mvp.ui.activity.NewMainActivity"
android:theme="@style/MainTheme">
......
package com.gingersoft.gsa.cloud.main.di.component;
import dagger.BindsInstance;
import dagger.Component;
import com.jess.arms.di.component.AppComponent;
import com.gingersoft.gsa.cloud.main.di.module.BusinessReportModule;
import com.gingersoft.gsa.cloud.main.mvp.contract.BusinessReportContract;
import com.jess.arms.di.scope.FragmentScope;
import com.gingersoft.gsa.cloud.main.mvp.ui.fragment.BusinessReportFragment;
/**
* ================================================
* Description:
* <p>
* Created by MVPArmsTemplate on 02/23/2020 16:19
* <a href="mailto:jess.yan.effort@gmail.com">Contact me</a>
* <a href="https://github.com/JessYanCoding">Follow me</a>
* <a href="https://github.com/JessYanCoding/MVPArms">Star me</a>
* <a href="https://github.com/JessYanCoding/MVPArms/wiki">See me</a>
* <a href="https://github.com/JessYanCoding/MVPArmsTemplate">模版请保持更新</a>
* ================================================
*/
@FragmentScope
@Component(modules = BusinessReportModule.class, dependencies = AppComponent.class)
public interface BusinessReportComponent {
void inject(BusinessReportFragment fragment);
@Component.Builder
interface Builder {
@BindsInstance
BusinessReportComponent.Builder view(BusinessReportContract.View view);
BusinessReportComponent.Builder appComponent(AppComponent appComponent);
BusinessReportComponent build();
}
}
\ No newline at end of file
package com.gingersoft.gsa.cloud.main.di.component;
import dagger.BindsInstance;
import dagger.Component;
import com.jess.arms.di.component.AppComponent;
import com.gingersoft.gsa.cloud.main.di.module.PaymentMethodReportModule;
import com.gingersoft.gsa.cloud.main.mvp.contract.PaymentMethodReportContract;
import com.jess.arms.di.scope.FragmentScope;
import com.gingersoft.gsa.cloud.main.mvp.ui.fragment.PaymentMethodReportFragment;
/**
* ================================================
* Description:
* <p>
* Created by MVPArmsTemplate on 02/23/2020 16:22
* <a href="mailto:jess.yan.effort@gmail.com">Contact me</a>
* <a href="https://github.com/JessYanCoding">Follow me</a>
* <a href="https://github.com/JessYanCoding/MVPArms">Star me</a>
* <a href="https://github.com/JessYanCoding/MVPArms/wiki">See me</a>
* <a href="https://github.com/JessYanCoding/MVPArmsTemplate">模版请保持更新</a>
* ================================================
*/
@FragmentScope
@Component(modules = PaymentMethodReportModule.class, dependencies = AppComponent.class)
public interface PaymentMethodReportComponent {
void inject(PaymentMethodReportFragment fragment);
@Component.Builder
interface Builder {
@BindsInstance
PaymentMethodReportComponent.Builder view(PaymentMethodReportContract.View view);
PaymentMethodReportComponent.Builder appComponent(AppComponent appComponent);
PaymentMethodReportComponent build();
}
}
\ No newline at end of file
......@@ -8,15 +8,15 @@ import com.jess.arms.di.component.AppComponent;
import com.gingersoft.gsa.cloud.main.di.module.ReportModule;
import com.gingersoft.gsa.cloud.main.mvp.contract.ReportContract;
import com.jess.arms.di.scope.FragmentScope;
import com.gingersoft.gsa.cloud.main.mvp.ui.fragment.ReportFragment;
import com.jess.arms.di.scope.ActivityScope;
import com.gingersoft.gsa.cloud.main.mvp.ui.activity.ReportActivity;
/**
* ================================================
* Description:
* <p>
* Created by MVPArmsTemplate on 01/10/2020 15:03
* Created by MVPArmsTemplate on 02/23/2020 16:18
* <a href="mailto:jess.yan.effort@gmail.com">Contact me</a>
* <a href="https://github.com/JessYanCoding">Follow me</a>
* <a href="https://github.com/JessYanCoding/MVPArms">Star me</a>
......@@ -24,10 +24,10 @@ import com.gingersoft.gsa.cloud.main.mvp.ui.fragment.ReportFragment;
* <a href="https://github.com/JessYanCoding/MVPArmsTemplate">模版请保持更新</a>
* ================================================
*/
@FragmentScope
@ActivityScope
@Component(modules = ReportModule.class, dependencies = AppComponent.class)
public interface ReportComponent {
void inject(ReportFragment fragment);
void inject(ReportActivity activity);
@Component.Builder
interface Builder {
......
package com.gingersoft.gsa.cloud.main.di.component;
import dagger.BindsInstance;
import dagger.Component;
import com.jess.arms.di.component.AppComponent;
import com.gingersoft.gsa.cloud.main.di.module.SalesModule;
import com.gingersoft.gsa.cloud.main.mvp.contract.SalesContract;
import com.jess.arms.di.scope.FragmentScope;
import com.gingersoft.gsa.cloud.main.mvp.ui.fragment.SalesFragment;
/**
* ================================================
* Description:
* <p>
* Created by MVPArmsTemplate on 02/23/2020 16:21
* <a href="mailto:jess.yan.effort@gmail.com">Contact me</a>
* <a href="https://github.com/JessYanCoding">Follow me</a>
* <a href="https://github.com/JessYanCoding/MVPArms">Star me</a>
* <a href="https://github.com/JessYanCoding/MVPArms/wiki">See me</a>
* <a href="https://github.com/JessYanCoding/MVPArmsTemplate">模版请保持更新</a>
* ================================================
*/
@FragmentScope
@Component(modules = SalesModule.class, dependencies = AppComponent.class)
public interface SalesComponent {
void inject(SalesFragment fragment);
@Component.Builder
interface Builder {
@BindsInstance
SalesComponent.Builder view(SalesContract.View view);
SalesComponent.Builder appComponent(AppComponent appComponent);
SalesComponent build();
}
}
\ No newline at end of file
package com.gingersoft.gsa.cloud.main.di.module;
import com.jess.arms.di.scope.FragmentScope;
import dagger.Binds;
import dagger.Module;
import dagger.Provides;
import com.gingersoft.gsa.cloud.main.mvp.contract.BusinessReportContract;
import com.gingersoft.gsa.cloud.main.mvp.model.BusinessReportModel;
/**
* ================================================
* Description:
* <p>
* Created by MVPArmsTemplate on 02/23/2020 16:19
* <a href="mailto:jess.yan.effort@gmail.com">Contact me</a>
* <a href="https://github.com/JessYanCoding">Follow me</a>
* <a href="https://github.com/JessYanCoding/MVPArms">Star me</a>
* <a href="https://github.com/JessYanCoding/MVPArms/wiki">See me</a>
* <a href="https://github.com/JessYanCoding/MVPArmsTemplate">模版请保持更新</a>
* ================================================
*/
@Module
public abstract class BusinessReportModule {
@Binds
abstract BusinessReportContract.Model bindBusinessReportModel(BusinessReportModel model);
}
\ No newline at end of file
package com.gingersoft.gsa.cloud.main.di.module;
import com.jess.arms.di.scope.FragmentScope;
import dagger.Binds;
import dagger.Module;
import dagger.Provides;
import com.gingersoft.gsa.cloud.main.mvp.contract.PaymentMethodReportContract;
import com.gingersoft.gsa.cloud.main.mvp.model.PaymentMethodReportModel;
/**
* ================================================
* Description:
* <p>
* Created by MVPArmsTemplate on 02/23/2020 16:22
* <a href="mailto:jess.yan.effort@gmail.com">Contact me</a>
* <a href="https://github.com/JessYanCoding">Follow me</a>
* <a href="https://github.com/JessYanCoding/MVPArms">Star me</a>
* <a href="https://github.com/JessYanCoding/MVPArms/wiki">See me</a>
* <a href="https://github.com/JessYanCoding/MVPArmsTemplate">模版请保持更新</a>
* ================================================
*/
@Module
public abstract class PaymentMethodReportModule {
@Binds
abstract PaymentMethodReportContract.Model bindPaymentMethodReportModel(PaymentMethodReportModel model);
}
\ No newline at end of file
package com.gingersoft.gsa.cloud.main.di.module;
import com.jess.arms.di.scope.FragmentScope;
import com.jess.arms.di.scope.ActivityScope;
import dagger.Binds;
import dagger.Module;
......@@ -14,7 +14,7 @@ import com.gingersoft.gsa.cloud.main.mvp.model.ReportModel;
* ================================================
* Description:
* <p>
* Created by MVPArmsTemplate on 01/10/2020 15:03
* Created by MVPArmsTemplate on 02/23/2020 16:18
* <a href="mailto:jess.yan.effort@gmail.com">Contact me</a>
* <a href="https://github.com/JessYanCoding">Follow me</a>
* <a href="https://github.com/JessYanCoding/MVPArms">Star me</a>
......
package com.gingersoft.gsa.cloud.main.di.module;
import com.jess.arms.di.scope.FragmentScope;
import dagger.Binds;
import dagger.Module;
import dagger.Provides;
import com.gingersoft.gsa.cloud.main.mvp.contract.SalesContract;
import com.gingersoft.gsa.cloud.main.mvp.model.SalesModel;
/**
* ================================================
* Description:
* <p>
* Created by MVPArmsTemplate on 02/23/2020 16:21
* <a href="mailto:jess.yan.effort@gmail.com">Contact me</a>
* <a href="https://github.com/JessYanCoding">Follow me</a>
* <a href="https://github.com/JessYanCoding/MVPArms">Star me</a>
* <a href="https://github.com/JessYanCoding/MVPArms/wiki">See me</a>
* <a href="https://github.com/JessYanCoding/MVPArmsTemplate">模版请保持更新</a>
* ================================================
*/
@Module
public abstract class SalesModule {
@Binds
abstract SalesContract.Model bindSalesModel(SalesModel model);
}
\ No newline at end of file
package com.gingersoft.gsa.cloud.main.mvp.contract;
import com.jess.arms.mvp.IView;
import com.jess.arms.mvp.IModel;
/**
* ================================================
* Description:
* <p>
* Created by MVPArmsTemplate on 02/23/2020 16:19
* <a href="mailto:jess.yan.effort@gmail.com">Contact me</a>
* <a href="https://github.com/JessYanCoding">Follow me</a>
* <a href="https://github.com/JessYanCoding/MVPArms">Star me</a>
* <a href="https://github.com/JessYanCoding/MVPArms/wiki">See me</a>
* <a href="https://github.com/JessYanCoding/MVPArmsTemplate">模版请保持更新</a>
* ================================================
*/
public interface BusinessReportContract {
//对于经常使用的关于UI的方法可以定义到IView中,如显示隐藏进度条,和显示文字消息
interface View extends IView {
}
//Model层定义接口,外部只需关心Model返回的数据,无需关心内部细节,即是否使用缓存
interface Model extends IModel {
}
}
package com.gingersoft.gsa.cloud.main.mvp.contract;
import com.jess.arms.mvp.IView;
import com.jess.arms.mvp.IModel;
/**
* ================================================
* Description:
* <p>
* Created by MVPArmsTemplate on 02/23/2020 16:22
* <a href="mailto:jess.yan.effort@gmail.com">Contact me</a>
* <a href="https://github.com/JessYanCoding">Follow me</a>
* <a href="https://github.com/JessYanCoding/MVPArms">Star me</a>
* <a href="https://github.com/JessYanCoding/MVPArms/wiki">See me</a>
* <a href="https://github.com/JessYanCoding/MVPArmsTemplate">模版请保持更新</a>
* ================================================
*/
public interface PaymentMethodReportContract {
//对于经常使用的关于UI的方法可以定义到IView中,如显示隐藏进度条,和显示文字消息
interface View extends IView {
}
//Model层定义接口,外部只需关心Model返回的数据,无需关心内部细节,即是否使用缓存
interface Model extends IModel {
}
}
......@@ -8,7 +8,7 @@ import com.jess.arms.mvp.IModel;
* ================================================
* Description:
* <p>
* Created by MVPArmsTemplate on 01/10/2020 15:03
* Created by MVPArmsTemplate on 02/23/2020 16:18
* <a href="mailto:jess.yan.effort@gmail.com">Contact me</a>
* <a href="https://github.com/JessYanCoding">Follow me</a>
* <a href="https://github.com/JessYanCoding/MVPArms">Star me</a>
......
package com.gingersoft.gsa.cloud.main.mvp.contract;
import com.jess.arms.mvp.IView;
import com.jess.arms.mvp.IModel;
/**
* ================================================
* Description:
* <p>
* Created by MVPArmsTemplate on 02/23/2020 16:21
* <a href="mailto:jess.yan.effort@gmail.com">Contact me</a>
* <a href="https://github.com/JessYanCoding">Follow me</a>
* <a href="https://github.com/JessYanCoding/MVPArms">Star me</a>
* <a href="https://github.com/JessYanCoding/MVPArms/wiki">See me</a>
* <a href="https://github.com/JessYanCoding/MVPArmsTemplate">模版请保持更新</a>
* ================================================
*/
public interface SalesContract {
//对于经常使用的关于UI的方法可以定义到IView中,如显示隐藏进度条,和显示文字消息
interface View extends IView {
}
//Model层定义接口,外部只需关心Model返回的数据,无需关心内部细节,即是否使用缓存
interface Model extends IModel {
}
}
package com.gingersoft.gsa.cloud.main.mvp.model;
import android.app.Application;
import com.google.gson.Gson;
import com.jess.arms.integration.IRepositoryManager;
import com.jess.arms.mvp.BaseModel;
import com.jess.arms.di.scope.FragmentScope;
import javax.inject.Inject;
import com.gingersoft.gsa.cloud.main.mvp.contract.BusinessReportContract;
/**
* ================================================
* Description:
* <p>
* Created by MVPArmsTemplate on 02/23/2020 16:19
* <a href="mailto:jess.yan.effort@gmail.com">Contact me</a>
* <a href="https://github.com/JessYanCoding">Follow me</a>
* <a href="https://github.com/JessYanCoding/MVPArms">Star me</a>
* <a href="https://github.com/JessYanCoding/MVPArms/wiki">See me</a>
* <a href="https://github.com/JessYanCoding/MVPArmsTemplate">模版请保持更新</a>
* ================================================
*/
@FragmentScope
public class BusinessReportModel extends BaseModel implements BusinessReportContract.Model {
@Inject
Gson mGson;
@Inject
Application mApplication;
@Inject
public BusinessReportModel(IRepositoryManager repositoryManager) {
super(repositoryManager);
}
@Override
public void onDestroy() {
super.onDestroy();
this.mGson = null;
this.mApplication = null;
}
}
\ No newline at end of file
package com.gingersoft.gsa.cloud.main.mvp.model;
import android.app.Application;
import com.google.gson.Gson;
import com.jess.arms.integration.IRepositoryManager;
import com.jess.arms.mvp.BaseModel;
import com.jess.arms.di.scope.FragmentScope;
import javax.inject.Inject;
import com.gingersoft.gsa.cloud.main.mvp.contract.PaymentMethodReportContract;
/**
* ================================================
* Description:
* <p>
* Created by MVPArmsTemplate on 02/23/2020 16:22
* <a href="mailto:jess.yan.effort@gmail.com">Contact me</a>
* <a href="https://github.com/JessYanCoding">Follow me</a>
* <a href="https://github.com/JessYanCoding/MVPArms">Star me</a>
* <a href="https://github.com/JessYanCoding/MVPArms/wiki">See me</a>
* <a href="https://github.com/JessYanCoding/MVPArmsTemplate">模版请保持更新</a>
* ================================================
*/
@FragmentScope
public class PaymentMethodReportModel extends BaseModel implements PaymentMethodReportContract.Model {
@Inject
Gson mGson;
@Inject
Application mApplication;
@Inject
public PaymentMethodReportModel(IRepositoryManager repositoryManager) {
super(repositoryManager);
}
@Override
public void onDestroy() {
super.onDestroy();
this.mGson = null;
this.mApplication = null;
}
}
\ No newline at end of file
......@@ -6,7 +6,7 @@ import com.google.gson.Gson;
import com.jess.arms.integration.IRepositoryManager;
import com.jess.arms.mvp.BaseModel;
import com.jess.arms.di.scope.FragmentScope;
import com.jess.arms.di.scope.ActivityScope;
import javax.inject.Inject;
......@@ -17,7 +17,7 @@ import com.gingersoft.gsa.cloud.main.mvp.contract.ReportContract;
* ================================================
* Description:
* <p>
* Created by MVPArmsTemplate on 01/10/2020 15:03
* Created by MVPArmsTemplate on 02/23/2020 16:18
* <a href="mailto:jess.yan.effort@gmail.com">Contact me</a>
* <a href="https://github.com/JessYanCoding">Follow me</a>
* <a href="https://github.com/JessYanCoding/MVPArms">Star me</a>
......@@ -25,7 +25,7 @@ import com.gingersoft.gsa.cloud.main.mvp.contract.ReportContract;
* <a href="https://github.com/JessYanCoding/MVPArmsTemplate">模版请保持更新</a>
* ================================================
*/
@FragmentScope
@ActivityScope
public class ReportModel extends BaseModel implements ReportContract.Model {
@Inject
Gson mGson;
......
package com.gingersoft.gsa.cloud.main.mvp.model;
import android.app.Application;
import com.google.gson.Gson;
import com.jess.arms.integration.IRepositoryManager;
import com.jess.arms.mvp.BaseModel;
import com.jess.arms.di.scope.FragmentScope;
import javax.inject.Inject;
import com.gingersoft.gsa.cloud.main.mvp.contract.SalesContract;
/**
* ================================================
* Description:
* <p>
* Created by MVPArmsTemplate on 02/23/2020 16:21
* <a href="mailto:jess.yan.effort@gmail.com">Contact me</a>
* <a href="https://github.com/JessYanCoding">Follow me</a>
* <a href="https://github.com/JessYanCoding/MVPArms">Star me</a>
* <a href="https://github.com/JessYanCoding/MVPArms/wiki">See me</a>
* <a href="https://github.com/JessYanCoding/MVPArmsTemplate">模版请保持更新</a>
* ================================================
*/
@FragmentScope
public class SalesModel extends BaseModel implements SalesContract.Model {
@Inject
Gson mGson;
@Inject
Application mApplication;
@Inject
public SalesModel(IRepositoryManager repositoryManager) {
super(repositoryManager);
}
@Override
public void onDestroy() {
super.onDestroy();
this.mGson = null;
this.mApplication = null;
}
}
\ No newline at end of file
package com.gingersoft.gsa.cloud.main.mvp.presenter;
import android.app.Application;
import com.gingersoft.gsa.cloud.main.mvp.contract.BusinessReportContract;
import com.jess.arms.di.scope.FragmentScope;
import com.jess.arms.http.imageloader.ImageLoader;
import com.jess.arms.integration.AppManager;
import com.jess.arms.mvp.BasePresenter;
import javax.inject.Inject;
import me.jessyan.rxerrorhandler.core.RxErrorHandler;
/**
* ================================================
* Description:
* <p>
* Created by MVPArmsTemplate on 02/23/2020 16:19
* <a href="mailto:jess.yan.effort@gmail.com">Contact me</a>
* <a href="https://github.com/JessYanCoding">Follow me</a>
* <a href="https://github.com/JessYanCoding/MVPArms">Star me</a>
* <a href="https://github.com/JessYanCoding/MVPArms/wiki">See me</a>
* <a href="https://github.com/JessYanCoding/MVPArmsTemplate">模版请保持更新</a>
* ================================================
*/
@FragmentScope
public class BusinessReportPresenter extends BasePresenter<BusinessReportContract.Model, BusinessReportContract.View> {
@Inject
RxErrorHandler mErrorHandler;
@Inject
Application mApplication;
@Inject
ImageLoader mImageLoader;
@Inject
AppManager mAppManager;
@Inject
public BusinessReportPresenter(BusinessReportContract.Model model, BusinessReportContract.View rootView) {
super(model, rootView);
}
@Override
public void onDestroy() {
super.onDestroy();
this.mErrorHandler = null;
this.mAppManager = null;
this.mImageLoader = null;
this.mApplication = null;
}
}
......@@ -4,11 +4,15 @@ import android.app.Application;
import com.gingersoft.gsa.cloud.base.utils.constans.HttpsConstans;
import com.gingersoft.gsa.cloud.base.utils.time.TimeUtils;
import com.gingersoft.gsa.cloud.main.mvp.contract.MainTopContract;
import com.gingersoft.gsa.cloud.main.mvp.model.bean.HomeTurnoverBean;
import com.jess.arms.integration.AppManager;
import com.jess.arms.di.scope.FragmentScope;
import com.jess.arms.mvp.BasePresenter;
import com.jess.arms.http.imageloader.ImageLoader;
import com.jess.arms.integration.AppManager;
import com.jess.arms.mvp.BasePresenter;
import com.jess.arms.utils.RxLifecycleUtils;
import javax.inject.Inject;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.annotations.NonNull;
......@@ -19,11 +23,6 @@ import me.jessyan.rxerrorhandler.handler.ErrorHandleSubscriber;
import okhttp3.FormBody;
import okhttp3.RequestBody;
import javax.inject.Inject;
import com.gingersoft.gsa.cloud.main.mvp.contract.MainTopContract;
import com.jess.arms.utils.RxLifecycleUtils;
/**
* ================================================
......@@ -102,4 +101,7 @@ public class MainTopPresenter extends BasePresenter<MainTopContract.Model, MainT
}
});
}
//http://a.ricepon.com:61177/member-web/api/wx/findOrderInfoChart 獲取消費曲線圖
//{"success":true,"sysTime":1582375800036,"data":[{"date":"2020-02-22","items":[{"person":"0","amount":0.0,"hours":"12","count":1,"date":"2020-02-22"},{"person":"0","amount":42.2,"hours":"14","count":3,"date":"2020-02-22"},{"person":"0","amount":21.1,"hours":"15","count":3,"date":"2020-02-22"},{"person":"0","amount":136.0,"hours":"17","count":3,"date":"2020-02-22"},{"person":"0","amount":58.0,"hours":"18","count":1,"date":"2020-02-22"}]}]}
}
package com.gingersoft.gsa.cloud.main.mvp.presenter;
import android.app.Application;
import com.gingersoft.gsa.cloud.main.mvp.contract.PaymentMethodReportContract;
import com.jess.arms.di.scope.FragmentScope;
import com.jess.arms.http.imageloader.ImageLoader;
import com.jess.arms.integration.AppManager;
import com.jess.arms.mvp.BasePresenter;
import javax.inject.Inject;
import me.jessyan.rxerrorhandler.core.RxErrorHandler;
/**
* ================================================
* Description:
* <p>
* Created by MVPArmsTemplate on 02/23/2020 16:22
* <a href="mailto:jess.yan.effort@gmail.com">Contact me</a>
* <a href="https://github.com/JessYanCoding">Follow me</a>
* <a href="https://github.com/JessYanCoding/MVPArms">Star me</a>
* <a href="https://github.com/JessYanCoding/MVPArms/wiki">See me</a>
* <a href="https://github.com/JessYanCoding/MVPArmsTemplate">模版请保持更新</a>
* ================================================
*/
@FragmentScope
public class PaymentMethodReportPresenter extends BasePresenter<PaymentMethodReportContract.Model, PaymentMethodReportContract.View> {
@Inject
RxErrorHandler mErrorHandler;
@Inject
Application mApplication;
@Inject
ImageLoader mImageLoader;
@Inject
AppManager mAppManager;
@Inject
public PaymentMethodReportPresenter(PaymentMethodReportContract.Model model, PaymentMethodReportContract.View rootView) {
super(model, rootView);
}
@Override
public void onDestroy() {
super.onDestroy();
this.mErrorHandler = null;
this.mAppManager = null;
this.mImageLoader = null;
this.mApplication = null;
}
}
......@@ -2,23 +2,22 @@ package com.gingersoft.gsa.cloud.main.mvp.presenter;
import android.app.Application;
import com.gingersoft.gsa.cloud.main.mvp.contract.ReportContract;
import com.jess.arms.di.scope.ActivityScope;
import com.jess.arms.http.imageloader.ImageLoader;
import com.jess.arms.integration.AppManager;
import com.jess.arms.di.scope.FragmentScope;
import com.jess.arms.mvp.BasePresenter;
import com.jess.arms.http.imageloader.ImageLoader;
import me.jessyan.rxerrorhandler.core.RxErrorHandler;
import javax.inject.Inject;
import com.gingersoft.gsa.cloud.main.mvp.contract.ReportContract;
import me.jessyan.rxerrorhandler.core.RxErrorHandler;
/**
* ================================================
* Description:
* <p>
* Created by MVPArmsTemplate on 01/10/2020 15:03
* Created by MVPArmsTemplate on 02/23/2020 16:18
* <a href="mailto:jess.yan.effort@gmail.com">Contact me</a>
* <a href="https://github.com/JessYanCoding">Follow me</a>
* <a href="https://github.com/JessYanCoding/MVPArms">Star me</a>
......@@ -26,7 +25,7 @@ import com.gingersoft.gsa.cloud.main.mvp.contract.ReportContract;
* <a href="https://github.com/JessYanCoding/MVPArmsTemplate">模版请保持更新</a>
* ================================================
*/
@FragmentScope
@ActivityScope
public class ReportPresenter extends BasePresenter<ReportContract.Model, ReportContract.View> {
@Inject
RxErrorHandler mErrorHandler;
......
package com.gingersoft.gsa.cloud.main.mvp.presenter;
import android.app.Application;
import com.gingersoft.gsa.cloud.main.mvp.contract.SalesContract;
import com.jess.arms.di.scope.FragmentScope;
import com.jess.arms.http.imageloader.ImageLoader;
import com.jess.arms.integration.AppManager;
import com.jess.arms.mvp.BasePresenter;
import javax.inject.Inject;
import me.jessyan.rxerrorhandler.core.RxErrorHandler;
/**
* ================================================
* Description:
* <p>
* Created by MVPArmsTemplate on 02/23/2020 16:21
* <a href="mailto:jess.yan.effort@gmail.com">Contact me</a>
* <a href="https://github.com/JessYanCoding">Follow me</a>
* <a href="https://github.com/JessYanCoding/MVPArms">Star me</a>
* <a href="https://github.com/JessYanCoding/MVPArms/wiki">See me</a>
* <a href="https://github.com/JessYanCoding/MVPArmsTemplate">模版请保持更新</a>
* ================================================
*/
@FragmentScope
public class SalesPresenter extends BasePresenter<SalesContract.Model, SalesContract.View> {
@Inject
RxErrorHandler mErrorHandler;
@Inject
Application mApplication;
@Inject
ImageLoader mImageLoader;
@Inject
AppManager mAppManager;
@Inject
public SalesPresenter(SalesContract.Model model, SalesContract.View rootView) {
super(model, rootView);
}
@Override
public void onDestroy() {
super.onDestroy();
this.mErrorHandler = null;
this.mAppManager = null;
this.mImageLoader = null;
this.mApplication = null;
}
}
......@@ -13,7 +13,6 @@ import com.gingersoft.gsa.cloud.main.mvp.contract.MainContract;
import com.gingersoft.gsa.cloud.main.mvp.presenter.MainPresenter;
import com.gingersoft.gsa.cloud.main.mvp.ui.fragment.HomeFragment;
import com.gingersoft.gsa.cloud.main.mvp.ui.fragment.MyFragment;
import com.gingersoft.gsa.cloud.main.mvp.ui.fragment.ReportFragment;
import com.jess.arms.base.BaseFragmentActivity;
import com.jess.arms.di.component.AppComponent;
import com.jess.arms.utils.ArmsUtils;
......@@ -22,6 +21,7 @@ import com.qmuiteam.qmui.widget.QMUIViewPager;
import com.qmuiteam.qmui.widget.tab.QMUITab;
import com.qmuiteam.qmui.widget.tab.QMUITabBuilder;
import com.qmuiteam.qmui.widget.tab.QMUITabSegment;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.content.ContextCompat;
......@@ -83,7 +83,7 @@ public class MainActivity extends BaseFragmentActivity<MainPresenter> implements
case 0:
return HomeFragment.newInstance();
case 1:
return ReportFragment.newInstance();
// return ReportFragment.newInstance();
case 2:
default:
return MyFragment.newInstance();
......
......@@ -18,10 +18,10 @@ 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.view.SlidingMenu;
import com.gingersoft.gsa.cloud.ui.view.utils.ShadowUtil;
import com.jess.arms.base.BaseActivity;
import com.jess.arms.di.component.AppComponent;
import com.jess.arms.utils.ArmsUtils;
import com.sxu.shadowdrawable.ShadowDrawable;
import java.util.ArrayList;
import java.util.List;
......@@ -96,9 +96,9 @@ public class NewMainActivity extends BaseActivity<NewMainPresenter> implements N
}
private void initShadow() {
ShadowDrawable.setShadowDrawable(orderingMeals, Color.parseColor("#FFFFFF"), dpToPx(5),
ShadowUtil.setShadowDrawable(orderingMeals, Color.parseColor("#FFFFFF"), dpToPx(5),
Color.parseColor("#73888888"), dpToPx(5), 0, 2);
ShadowDrawable.setShadowDrawable(layoutManagement, Color.parseColor("#FFFFFF"), dpToPx(5),
ShadowUtil.setShadowDrawable(layoutManagement, Color.parseColor("#FFFFFF"), dpToPx(5),
Color.parseColor("#00000000"), dpToPx(5), 0, 2);
}
......
package com.gingersoft.gsa.cloud.main.mvp.ui.activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.TypedValue;
import android.widget.TextView;
import com.gingersoft.gsa.cloud.main.R;
import com.gingersoft.gsa.cloud.main.R2;
import com.gingersoft.gsa.cloud.main.di.component.DaggerReportComponent;
import com.gingersoft.gsa.cloud.main.mvp.contract.ReportContract;
import com.gingersoft.gsa.cloud.main.mvp.presenter.ReportPresenter;
import com.gingersoft.gsa.cloud.main.mvp.ui.fragment.BusinessReportFragment;
import com.gingersoft.gsa.cloud.main.mvp.ui.fragment.PaymentMethodReportFragment;
import com.gingersoft.gsa.cloud.main.mvp.ui.fragment.SalesFragment;
import com.gingersoft.gsa.cloud.ui.adapter.TabFragmentAdapter;
import com.google.android.material.tabs.TabLayout;
import com.jess.arms.base.BaseActivity;
import com.jess.arms.di.component.AppComponent;
import com.jess.arms.utils.ArmsUtils;
import com.qmuiteam.qmui.widget.QMUITopBar;
import java.util.ArrayList;
import java.util.List;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.content.ContextCompat;
import androidx.fragment.app.Fragment;
import androidx.viewpager.widget.ViewPager;
import butterknife.BindView;
import static com.jess.arms.utils.Preconditions.checkNotNull;
/**
* ================================================
* Description:
* <p>
* Created by MVPArmsTemplate on 02/23/2020 16:18
* <a href="mailto:jess.yan.effort@gmail.com">Contact me</a>
* <a href="https://github.com/JessYanCoding">Follow me</a>
* <a href="https://github.com/JessYanCoding/MVPArms">Star me</a>
* <a href="https://github.com/JessYanCoding/MVPArms/wiki">See me</a>
* <a href="https://github.com/JessYanCoding/MVPArmsTemplate">模版请保持更新</a>
* ================================================
* 報表頁面
*/
public class ReportActivity extends BaseActivity<ReportPresenter> implements ReportContract.View {
@BindView(R2.id.report_topbar)
QMUITopBar mTopBar;
@BindView(R2.id.table_layout)
TabLayout mTabLayout;
@BindView(R2.id.report_viewpager)
ViewPager mViewPager;
private TabFragmentAdapter mTabFragmentAdapter;
private List<String> titles;
@Override
public void setupActivityComponent(@NonNull AppComponent appComponent) {
DaggerReportComponent //如找不到该类,请编译一下项目
.builder()
.appComponent(appComponent)
.view(this)
.build()
.inject(this);
}
@Override
public int initView(@Nullable Bundle savedInstanceState) {
return R.layout.activity_report; //如果你不需要框架帮你设置 setContentView(id) 需要自行设置,请返回 0
}
@Override
public void initData(@Nullable Bundle savedInstanceState) {
initTitlte();
initViewPager();
}
/**
* 设置顶部数据
*/
private void initTitlte() {
titles = new ArrayList<>();
titles.add("營業分析");
titles.add("銷售分析");
titles.add("支付分析");
List<Fragment> mFragments = new ArrayList<>();
mFragments.add(BusinessReportFragment.newInstance());
mFragments.add(SalesFragment.newInstance());
mFragments.add(PaymentMethodReportFragment.newInstance());
//实例化适配器
mTabFragmentAdapter = new TabFragmentAdapter(getSupportFragmentManager(), 1);
//设置加载的Fragment集合
mTabFragmentAdapter.setFragments(mFragments);
}
/**
* 设置Viewpager的适配器
*/
private void initViewPager() {
//设置Viewpager的适配器
mViewPager.setAdapter(mTabFragmentAdapter);
mTabLayout.setupWithViewPager(mViewPager);//TabLayout绑定ViewPager
mTabLayout.setTabsFromPagerAdapter(mTabFragmentAdapter);//TabLayout的标签从Adapter中获取
//用来循环适配器中的视图总数
for (int i = 0; i < mTabFragmentAdapter.getCount(); i++) {
//获取每一个tab对象
TabLayout.Tab tabAt = mTabLayout.getTabAt(i);
if (tabAt != null) {
//将每一个条目设置我们自定义的视图
tabAt.setCustomView(R.layout.layout_table_item);
//默认选中第一个
if (i == 0) {
// 设置第一个tab的TextView是被选择的样式
setSelectTab(tabAt, true);
}
//通过tab对象找到自定义视图的ID
TextView textView = tabAt.getCustomView().findViewById(R.id.tv_tab);
textView.setText(titles.get(i));//设置tab上的文字
}
}
mTabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
setSelectTab(tab, true);
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
setSelectTab(tab, false);
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
}
});
}
private void setSelectTab(TabLayout.Tab tabAt, boolean isSelected) {
if (tabAt.getCustomView() != null) {
TextView tab = tabAt.getCustomView().findViewById(R.id.tv_tab);//第一个tab被选中
tab.setSelected(isSelected);
//设置选中标签的文字大小
tab.setTextSize(TypedValue.COMPLEX_UNIT_PX, isSelected ? getResources().getDimensionPixelSize(R.dimen.sp_16) : getResources().getDimensionPixelSize(R.dimen.sp_14));
tab.getPaint().setFakeBoldText(isSelected);
}
}
@Override
public void initIntent() {
}
@Override
public void initTopBar() {
mTopBar.setBackgroundColor(ContextCompat.getColor(this, R.color.theme_color));
mTopBar.addLeftBackImageButton().setOnClickListener(v -> killMyself());
mTopBar.setTitle("報表");
}
@Override
public void initLanguage() {
}
@Override
public void initLayoutParams() {
}
@Override
public void initLayoutVisible() {
}
@Override
public void showLoading(String message) {
}
@Override
public void hideLoading() {
}
@Override
public void showMessage(@NonNull String message) {
checkNotNull(message);
ArmsUtils.snackbarText(message);
}
@Override
public void launchActivity(@NonNull Intent intent) {
checkNotNull(intent);
ArmsUtils.startActivity(intent);
}
@Override
public void killMyself() {
finish();
}
}
package com.gingersoft.gsa.cloud.main.mvp.ui.fragment;
import android.content.Intent;
import android.os.Bundle;
import android.os.Message;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import com.gingersoft.gsa.cloud.main.R;
import com.gingersoft.gsa.cloud.main.R2;
import com.gingersoft.gsa.cloud.main.di.component.DaggerBusinessReportComponent;
import com.gingersoft.gsa.cloud.main.mvp.contract.BusinessReportContract;
import com.gingersoft.gsa.cloud.main.mvp.presenter.BusinessReportPresenter;
import com.gingersoft.gsa.cloud.ui.view.utils.ShadowUtil;
import com.jess.arms.base.BaseFragment;
import com.jess.arms.di.component.AppComponent;
import com.jess.arms.utils.ArmsUtils;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import butterknife.BindView;
import static com.jess.arms.utils.Preconditions.checkNotNull;
/**
* ================================================
* Description:
* <p>
* Created by MVPArmsTemplate on 02/23/2020 16:19
* <a href="mailto:jess.yan.effort@gmail.com">Contact me</a>
* <a href="https://github.com/JessYanCoding">Follow me</a>
* <a href="https://github.com/JessYanCoding/MVPArms">Star me</a>
* <a href="https://github.com/JessYanCoding/MVPArms/wiki">See me</a>
* <a href="https://github.com/JessYanCoding/MVPArmsTemplate">模版请保持更新</a>
* ================================================
* 營業報表
*/
public class BusinessReportFragment extends BaseFragment<BusinessReportPresenter> implements BusinessReportContract.View {
@BindView(R2.id.layout_business_chart)
LinearLayout mBusinessChart;
@BindView(R2.id.layout_business_info)
LinearLayout mBusinessInfo;
public static BusinessReportFragment newInstance() {
BusinessReportFragment fragment = new BusinessReportFragment();
return fragment;
}
@Override
public void setupFragmentComponent(@NonNull AppComponent appComponent) {
DaggerBusinessReportComponent //如找不到该类,请编译一下项目
.builder()
.appComponent(appComponent)
.view(this)
.build()
.inject(this);
}
@Override
public View initView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_business_report, container, false);
}
@Override
public void initData(@Nullable Bundle savedInstanceState) {
ShadowUtil.setShadowDrawable(mBusinessChart);
ShadowUtil.setShadowDrawable(mBusinessInfo);
}
/**
* 通过此方法可以使 Fragment 能够与外界做一些交互和通信, 比如说外部的 Activity 想让自己持有的某个 Fragment 对象执行一些方法,
* 建议在有多个需要与外界交互的方法时, 统一传 {@link Message}, 通过 what 字段来区分不同的方法, 在 {@link #setData(Object)}
* 方法中就可以 {@code switch} 做不同的操作, 这样就可以用统一的入口方法做多个不同的操作, 可以起到分发的作用
* <p>
* 调用此方法时请注意调用时 Fragment 的生命周期, 如果调用 {@link #setData(Object)} 方法时 {@link Fragment#onCreate(Bundle)} 还没执行
* 但在 {@link #setData(Object)} 里却调用了 Presenter 的方法, 是会报空的, 因为 Dagger 注入是在 {@link Fragment#onCreate(Bundle)} 方法中执行的
* 然后才创建的 Presenter, 如果要做一些初始化操作,可以不必让外部调用 {@link #setData(Object)}, 在 {@link #initData(Bundle)} 中初始化就可以了
* <p>
* Example usage:
* <pre>
* public void setData(@Nullable Object data) {
* if (data != null && data instanceof Message) {
* switch (((Message) data).what) {
* case 0:
* loadData(((Message) data).arg1);
* break;
* case 1:
* refreshUI();
* break;
* default:
* //do something
* break;
* }
* }
* }
*
* // call setData(Object):
* Message data = new Message();
* data.what = 0;
* data.arg1 = 1;
* fragment.setData(data);
* </pre>
*
* @param data 当不需要参数时 {@code data} 可以为 {@code null}
*/
@Override
public void setData(@Nullable Object data) {
}
@Override
public void showLoading(String message) {
}
@Override
public void hideLoading() {
}
@Override
public void showMessage(@NonNull String message) {
checkNotNull(message);
ArmsUtils.snackbarText(message);
}
@Override
public void launchActivity(@NonNull Intent intent) {
checkNotNull(intent);
ArmsUtils.startActivity(intent);
}
@Override
public void killMyself() {
}
}
......@@ -31,10 +31,12 @@ import com.gingersoft.gsa.cloud.main.di.component.DaggerMainTopComponent;
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.presenter.MainTopPresenter;
import com.gingersoft.gsa.cloud.main.mvp.ui.activity.ReportActivity;
import com.gingersoft.gsa.cloud.main.mvp.ui.view.CustomMarkView;
import com.gingersoft.gsa.cloud.ui.view.utils.ShadowUtil;
import com.jess.arms.base.BaseFragment;
import com.jess.arms.di.component.AppComponent;
import com.jess.arms.utils.ArmsUtils;
import com.sxu.shadowdrawable.ShadowDrawable;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
......@@ -45,6 +47,7 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
import static com.jess.arms.utils.Preconditions.checkNotNull;
import static com.qmuiteam.qmui.util.QMUIDisplayHelper.dpToPx;
......@@ -96,6 +99,7 @@ public class MainTopFragment extends BaseFragment<MainTopPresenter> implements M
ImageView ivBillTrend;//賬單數量趨勢
@BindView(R2.id.tv_bill_trend)
TextView tvBillTrend;//賬單數量較昨日上漲或下跌數量
public static MainTopFragment newInstance() {
MainTopFragment fragment = new MainTopFragment();
return fragment;
......@@ -115,9 +119,9 @@ public class MainTopFragment extends BaseFragment<MainTopPresenter> implements M
public View initView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_main_top, container, false);
ButterKnife.bind(this, view);
ShadowDrawable.setShadowDrawable(view.findViewById(R.id.cv_white_bg), Color.parseColor("#FFFFFF"), dpToPx(5),
ShadowUtil.setShadowDrawable(view.findViewById(R.id.cv_white_bg), Color.parseColor("#FFFFFF"), dpToPx(5),
Color.parseColor("#73888888"), dpToPx(5), 0, 2);
ShadowDrawable.setShadowDrawable(view.findViewById(R.id.layout_info), Color.parseColor("#FFFFFF"), dpToPx(5),
ShadowUtil.setShadowDrawable(view.findViewById(R.id.layout_info), Color.parseColor("#FFFFFF"), dpToPx(5),
Color.parseColor("#73888888"), dpToPx(5), 0, 2);
return view;
......@@ -146,25 +150,25 @@ public class MainTopFragment extends BaseFragment<MainTopPresenter> implements M
List<LineData> ColumnDatas = new ArrayList<>();
//第一條線
ArrayList<Double> tempList1 = new ArrayList<>();
tempList1.add(0d);
tempList1.add(0d);
tempList1.add(0d);
tempList1.add(0d);
tempList1.add(0d);
tempList1.add(0d);
final LineData columnData1 = new LineData("今日", "", getResources().getColor(R.color.theme_color), tempList1);
tempList1.add(1880d);
tempList1.add(1920d);
tempList1.add(4920d);
tempList1.add(2930d);
tempList1.add(4950d);
tempList1.add(2340d);
final LineData columnData1 = new LineData("今日", "", getResources().getColor(R.color.theme_color), tempList1);
columnData1.setLineStyle(new LineStyle(mContext, 5, getResources().getColor(R.color.theme_color)));
//第二條線
ArrayList<Double> humidityList = new ArrayList<>();
humidityList.add(0d);
humidityList.add(0d);
humidityList.add(0d);
humidityList.add(0d);
humidityList.add(0d);
humidityList.add(0d);
humidityList.add(0d);
humidityList.add(0d);
humidityList.add(1790d);
humidityList.add(2450d);
humidityList.add(6430d);
humidityList.add(2360d);
humidityList.add(17900d);
humidityList.add(3460d);
humidityList.add(2410d);
humidityList.add(4640d);
LineData columnData2 = new LineData("昨日", "", getResources().getColor(R.color.today_line), humidityList);
columnData2.setLineStyle(new LineStyle(mContext, 5, getResources().getColor(R.color.today_line)));
ColumnDatas.add(columnData1);
......@@ -206,9 +210,9 @@ public class MainTopFragment extends BaseFragment<MainTopPresenter> implements M
//开启十字架
lineChart.getProvider().setOpenCross(true);
//开启MarkView
// lineChart.getProvider().setOpenMark(true);
lineChart.getProvider().setOpenMark(true);
//设置MarkView
// lineChart.getProvider().setMarkView(new CustomMarkView(mContext));
lineChart.getProvider().setMarkView(new CustomMarkView(mContext));
//设置显示点
Point point = new Point();
point.getPointStyle().setShape(PointStyle.CIRCLE);
......@@ -367,7 +371,12 @@ public class MainTopFragment extends BaseFragment<MainTopPresenter> implements M
}
}
@OnClick({R2.id.tv_more_report})
@Override
public void onClick(View v) {
if(v.getId() == R.id.tv_more_report){
//更多報表
startActivity(new Intent(mContext, ReportActivity.class));
}
}
}
package com.gingersoft.gsa.cloud.main.mvp.ui.fragment;
import android.content.Intent;
import android.os.Bundle;
import android.os.Message;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.jess.arms.base.BaseFragment;
import com.jess.arms.di.component.AppComponent;
import com.jess.arms.utils.ArmsUtils;
import com.gingersoft.gsa.cloud.main.di.component.DaggerPaymentMethodReportComponent;
import com.gingersoft.gsa.cloud.main.mvp.contract.PaymentMethodReportContract;
import com.gingersoft.gsa.cloud.main.mvp.presenter.PaymentMethodReportPresenter;
import com.gingersoft.gsa.cloud.main.R;
import static com.jess.arms.utils.Preconditions.checkNotNull;
/**
* ================================================
* Description:
* <p>
* Created by MVPArmsTemplate on 02/23/2020 16:22
* <a href="mailto:jess.yan.effort@gmail.com">Contact me</a>
* <a href="https://github.com/JessYanCoding">Follow me</a>
* <a href="https://github.com/JessYanCoding/MVPArms">Star me</a>
* <a href="https://github.com/JessYanCoding/MVPArms/wiki">See me</a>
* <a href="https://github.com/JessYanCoding/MVPArmsTemplate">模版请保持更新</a>
* ================================================
* 支付方式分析報表
*/
public class PaymentMethodReportFragment extends BaseFragment<PaymentMethodReportPresenter> implements PaymentMethodReportContract.View {
public static PaymentMethodReportFragment newInstance() {
PaymentMethodReportFragment fragment = new PaymentMethodReportFragment();
return fragment;
}
@Override
public void setupFragmentComponent(@NonNull AppComponent appComponent) {
DaggerPaymentMethodReportComponent //如找不到该类,请编译一下项目
.builder()
.appComponent(appComponent)
.view(this)
.build()
.inject(this);
}
@Override
public View initView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_payment_method_report, container, false);
}
@Override
public void initData(@Nullable Bundle savedInstanceState) {
}
/**
* 通过此方法可以使 Fragment 能够与外界做一些交互和通信, 比如说外部的 Activity 想让自己持有的某个 Fragment 对象执行一些方法,
* 建议在有多个需要与外界交互的方法时, 统一传 {@link Message}, 通过 what 字段来区分不同的方法, 在 {@link #setData(Object)}
* 方法中就可以 {@code switch} 做不同的操作, 这样就可以用统一的入口方法做多个不同的操作, 可以起到分发的作用
* <p>
* 调用此方法时请注意调用时 Fragment 的生命周期, 如果调用 {@link #setData(Object)} 方法时 {@link Fragment#onCreate(Bundle)} 还没执行
* 但在 {@link #setData(Object)} 里却调用了 Presenter 的方法, 是会报空的, 因为 Dagger 注入是在 {@link Fragment#onCreate(Bundle)} 方法中执行的
* 然后才创建的 Presenter, 如果要做一些初始化操作,可以不必让外部调用 {@link #setData(Object)}, 在 {@link #initData(Bundle)} 中初始化就可以了
* <p>
* Example usage:
* <pre>
* public void setData(@Nullable Object data) {
* if (data != null && data instanceof Message) {
* switch (((Message) data).what) {
* case 0:
* loadData(((Message) data).arg1);
* break;
* case 1:
* refreshUI();
* break;
* default:
* //do something
* break;
* }
* }
* }
*
* // call setData(Object):
* Message data = new Message();
* data.what = 0;
* data.arg1 = 1;
* fragment.setData(data);
* </pre>
*
* @param data 当不需要参数时 {@code data} 可以为 {@code null}
*/
@Override
public void setData(@Nullable Object data) {
}
@Override
public void showLoading(String message) {
}
@Override
public void hideLoading() {
}
@Override
public void showMessage(@NonNull String message) {
checkNotNull(message);
ArmsUtils.snackbarText(message);
}
@Override
public void launchActivity(@NonNull Intent intent) {
checkNotNull(intent);
ArmsUtils.startActivity(intent);
}
@Override
public void killMyself() {
}
}
......@@ -3,20 +3,24 @@ package com.gingersoft.gsa.cloud.main.mvp.ui.fragment;
import android.content.Intent;
import android.os.Bundle;
import android.os.Message;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.gingersoft.gsa.cloud.main.R;
import com.gingersoft.gsa.cloud.main.di.component.DaggerReportComponent;
import com.gingersoft.gsa.cloud.main.mvp.contract.ReportContract;
import com.gingersoft.gsa.cloud.main.mvp.presenter.ReportPresenter;
import com.jess.arms.base.BaseFragment;
import com.jess.arms.di.component.AppComponent;
import com.jess.arms.utils.ArmsUtils;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.gingersoft.gsa.cloud.main.di.component.DaggerSalesComponent;
import com.gingersoft.gsa.cloud.main.mvp.contract.SalesContract;
import com.gingersoft.gsa.cloud.main.mvp.presenter.SalesPresenter;
import com.gingersoft.gsa.cloud.main.R;
import static com.jess.arms.utils.Preconditions.checkNotNull;
......@@ -25,25 +29,25 @@ import static com.jess.arms.utils.Preconditions.checkNotNull;
* ================================================
* Description:
* <p>
* Created by MVPArmsTemplate on 01/10/2020 15:03
* Created by MVPArmsTemplate on 02/23/2020 16:21
* <a href="mailto:jess.yan.effort@gmail.com">Contact me</a>
* <a href="https://github.com/JessYanCoding">Follow me</a>
* <a href="https://github.com/JessYanCoding/MVPArms">Star me</a>
* <a href="https://github.com/JessYanCoding/MVPArms/wiki">See me</a>
* <a href="https://github.com/JessYanCoding/MVPArmsTemplate">模版请保持更新</a>
* ================================================
* 報表
* 銷售分析報表
*/
public class ReportFragment extends BaseFragment<ReportPresenter> implements ReportContract.View {
public class SalesFragment extends BaseFragment<SalesPresenter> implements SalesContract.View {
public static ReportFragment newInstance() {
ReportFragment fragment = new ReportFragment();
public static SalesFragment newInstance() {
SalesFragment fragment = new SalesFragment();
return fragment;
}
@Override
public void setupFragmentComponent(@NonNull AppComponent appComponent) {
DaggerReportComponent //如找不到该类,请编译一下项目
DaggerSalesComponent //如找不到该类,请编译一下项目
.builder()
.appComponent(appComponent)
.view(this)
......@@ -53,19 +57,55 @@ public class ReportFragment extends BaseFragment<ReportPresenter> implements Rep
@Override
public View initView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.main_fragment_report, container, false);
return inflater.inflate(R.layout.fragment_sales, container, false);
}
@Override
public void initData(@Nullable Bundle savedInstanceState) {
}
/**
* 通过此方法可以使 Fragment 能够与外界做一些交互和通信, 比如说外部的 Activity 想让自己持有的某个 Fragment 对象执行一些方法,
* 建议在有多个需要与外界交互的方法时, 统一传 {@link Message}, 通过 what 字段来区分不同的方法, 在 {@link #setData(Object)}
* 方法中就可以 {@code switch} 做不同的操作, 这样就可以用统一的入口方法做多个不同的操作, 可以起到分发的作用
* <p>
* 调用此方法时请注意调用时 Fragment 的生命周期, 如果调用 {@link #setData(Object)} 方法时 {@link Fragment#onCreate(Bundle)} 还没执行
* 但在 {@link #setData(Object)} 里却调用了 Presenter 的方法, 是会报空的, 因为 Dagger 注入是在 {@link Fragment#onCreate(Bundle)} 方法中执行的
* 然后才创建的 Presenter, 如果要做一些初始化操作,可以不必让外部调用 {@link #setData(Object)}, 在 {@link #initData(Bundle)} 中初始化就可以了
* <p>
* Example usage:
* <pre>
* public void setData(@Nullable Object data) {
* if (data != null && data instanceof Message) {
* switch (((Message) data).what) {
* case 0:
* loadData(((Message) data).arg1);
* break;
* case 1:
* refreshUI();
* break;
* default:
* //do something
* break;
* }
* }
* }
*
* // call setData(Object):
* Message data = new Message();
* data.what = 0;
* data.arg1 = 1;
* fragment.setData(data);
* </pre>
*
* @param data 当不需要参数时 {@code data} 可以为 {@code null}
*/
@Override
public void setData(@Nullable Object data) {
}
@Override
public void showLoading(String message) {
......
package com.gingersoft.gsa.cloud.main.mvp.ui.view;
import android.app.Dialog;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.os.Build;
import android.view.LayoutInflater;
import android.view.View;
import com.daivd.chart.data.BarData;
import com.daivd.chart.provider.component.mark.IMark;
import com.daivd.chart.provider.component.tip.MultiLineBubbleTip;
import com.daivd.chart.provider.component.tip.SingleLineBubbleTip;
import com.daivd.chart.utils.DensityUtils;
import com.gingersoft.gsa.cloud.base.widget.DialogUtils;
import com.gingersoft.gsa.cloud.main.R;
/**
......@@ -27,30 +25,37 @@ public class CustomMarkView<C extends BarData> implements IMark<C> {
private SingleLineBubbleTip<String> bubbleTip;
private Paint paint;
private View contentView;
private DialogUtils dialog;
public CustomMarkView(Context context) {
// contentView = LayoutInflater.from(context).inflate(R.layout.layout_markview, null);
dialog = new DialogUtils(context, R.layout.layout_markview) {
@Override
public void initLayout(ViewHepler hepler, Dialog dialog) {
}
}.createDialogView();
private MultiLineBubbleTip<View> multiLineBubbleTip;
// private DialogUtils dialog;
public CustomMarkView(Context context) {
contentView = LayoutInflater.from(context).inflate(R.layout.layout_markview, null);
paint = new Paint();
paint.setAntiAlias(true);
paint.setTextSize(DensityUtils.sp2px(context, 13));
paint.setStyle(Paint.Style.FILL);
paint.setColor(Color.WHITE);
bubbleTip = new SingleLineBubbleTip<String>(context, R.drawable.bg, R.drawable.triangle1, paint) {
multiLineBubbleTip = new MultiLineBubbleTip<View>(context, R.drawable.bg,0, paint) {
@Override
public boolean isShowTip(String s, int position) {
public boolean isShowTip(View view, int position) {
return true;
}
@Override
public String[] format(View view, int position) {
return new String[0];
}
};
bubbleTip = new SingleLineBubbleTip<String>(context, R.drawable.bg, 0, paint) {
@Override
public boolean isShowTip(String s, int position) {
return false;
}
@Override
public String format(String s, int position) {
return s;
}
......@@ -66,10 +71,10 @@ public class CustomMarkView<C extends BarData> implements IMark<C> {
@Override
public void drawMark(Canvas canvas, float x, float y, Rect rect, String content, BarData data, int position) {
// String text = content + "---" + data.getChartYDataList().get(position) + "---" + data.getUnit();
String text = content + "---" + data.getChartYDataList().get(position) + "---" + data.getUnit();
//
//
// bubbleTip.drawTip(canvas, x, y, rect, text, position);
dialog.show();
multiLineBubbleTip.drawTip(canvas, x, y, rect, contentView, position);
// dialog.show();
}
}
......@@ -10,10 +10,9 @@ import android.widget.HorizontalScrollView;
import android.widget.LinearLayout;
import com.daivd.chart.utils.DensityUtils;
import com.gingersoft.gsa.cloud.main.R;
import com.gingersoft.gsa.cloud.ui.view.utils.ShadowUtil;
import com.jess.arms.utils.ArmsUtils;
import com.nineoldandroids.view.ViewHelper;
import com.sxu.shadowdrawable.ShadowDrawable;
/**
* des :SlidingMenu 侧边栏 侧滑菜单
......@@ -112,7 +111,7 @@ public class SlidingMenu extends HorizontalScrollView {
return;
this.smoothScrollTo(0, 0);
isOpen = true;
ShadowDrawable.setShadowDrawable(mContent, Color.parseColor("#FFFFFF"), 50,
ShadowUtil.setShadowDrawable(mContent, Color.parseColor("#FFFFFF"), 50,
Color.parseColor("#73888888"), 50, 0, 2);
invalidate();
}
......
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<!-- <item-->
<!-- android:left="15dp"-->
<!-- android:right="15dp">-->
<!-- 若不设置 gravity,则 Indicator 宽度会填满整个 item -->
<item android:gravity="center_horizontal">
<shape>
<corners android:radius="@dimen/dp_8" />
<size
android:width="@dimen/dp_22"
android:height="@dimen/dp_3" />
</shape>
</item>
</layer-list>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<com.qmuiteam.qmui.widget.QMUITopBar
android:id="@+id/report_topbar"
android:layout_width="match_parent"
android:layout_height="?attr/qmui_topbar_height"
app:qmui_topbar_title_color="@color/theme_white_color" />
<com.google.android.material.tabs.TabLayout
android:id="@+id/table_layout"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_42"
app:tabIndicator="@drawable/tablayout_indicator"
app:tabIndicatorColor="@color/theme_color"
app:tabIndicatorFullWidth="false"/>
<androidx.viewpager.widget.ViewPager
android:id="@+id/report_viewpager"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
</LinearLayout>
\ No newline at end of file
<?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:background="@color/theme_background_color"
android:orientation="vertical">
<LinearLayout
android:id="@+id/layout_business_chart"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/dp_10"
android:layout_marginTop="@dimen/dp_10"
android:layout_marginRight="@dimen/dp_10"
android:orientation="vertical"
android:paddingBottom="@dimen/dp_15">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/dp_10"
android:layout_marginTop="@dimen/dp_10"
android:gravity="center_vertical"
android:orientation="horizontal">
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="營業金額"
android:textColor="#181818"
android:textSize="@dimen/sp_17" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="2020-02-14"
android:textColor="#181818"
android:textSize="@dimen/sp_10" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/dp_7"
android:text="到"
android:textColor="#999"
android:textSize="@dimen/sp_10" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/dp_7"
android:text="2020-02-14"
android:textColor="#181818"
android:textSize="@dimen/sp_10" />
</LinearLayout>
<com.daivd.chart.core.LineChart
android:layout_width="match_parent"
android:layout_height="@dimen/dp_130"
android:layout_marginTop="@dimen/dp_17" />
</LinearLayout>
<LinearLayout
android:id="@+id/layout_business_info"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/dp_10"
android:layout_marginTop="@dimen/dp_10"
android:layout_marginRight="@dimen/dp_10"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/dp_10"
android:layout_marginTop="@dimen/dp_10"
android:text="營業詳情"
android:textColor="#181818"
android:textSize="@dimen/sp_17" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="@dimen/dp_20"
android:text="餐廳名稱"
android:textColor="#3c3c3c"
android:textSize="@dimen/dp_16" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_restaurant"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_10" />
</LinearLayout>
</LinearLayout>
\ No newline at end of file
......@@ -93,7 +93,6 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_35"
android:elevation="@dimen/dp_1"
android:paddingBottom="@dimen/dp_6"
android:textColor="#181818"
android:textSize="@dimen/sp_15"
......@@ -118,7 +117,6 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/dp_10"
android:elevation="@dimen/dp_1"
android:text="更多報表 >"
android:textColor="#3c3c3c"
android:textSize="@dimen/sp_12"
......
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
</LinearLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
</LinearLayout>
\ No newline at end of file
package com.joe.print.mvp.print;
import android.content.Context;
import com.gingersoft.gsa.cloud.base.application.GsaCloudApplication;
import com.gingersoft.gsa.cloud.ui.widget.dialog.LoadingDialog;
import am.util.printer.PrintExecutor;
import am.util.printer.PrintSocketHolder;
import am.util.printer.PrinterWriter58mm;
/**
* Created by Wyh on 2020/1/15.
*/
public class Print implements PrintSocketHolder.OnStateChangedListener, PrintExecutor.OnPrintResultListener {
private PrintExecutor executor;
private SendPrint maker;
private static Print print;
private Context mContext;
public static Print getInstance() {
synchronized (Print.class) {
if (print == null) {
print = new Print();
}
}
return print;
}
public void printOrder(Context context) {
this.mContext = context;
LoadingDialog.showNewDialogForLoading(GsaCloudApplication.getAppContext(),"初始化...",false);
if (executor == null) {
executor = new PrintExecutor("192.168.1.217", 9100, PrinterWriter58mm.TYPE_58);
executor.setOnStateChangedListener(this);
executor.setOnPrintResultListener(this);
}
if (maker == null) {
maker = new SendPrint(context, 255, 580);
}
executor.setIp("192.168.1.218", 9100);
executor.doPrinterRequestAsync(maker);
}
@Override
public void onResult(int errorCode) {
String msg;
switch (errorCode) {
case PrintSocketHolder.ERROR_0:
//打印成功
msg = "打印成功";
break;
case PrintSocketHolder.ERROR_2:
//创建Socket失败
msg = "連接打印機失敗";
break;
case PrintSocketHolder.ERROR_1:
case PrintSocketHolder.ERROR_3:
case PrintSocketHolder.ERROR_4:
case PrintSocketHolder.ERROR_5:
default:
//打印失敗
msg = "打印失敗";
// LoadingDialog.cancelDialogForLoading();
break;
}
LoadingDialog.setText(msg);
}
@Override
public void onStateChanged(int state) {
String msg = "";
switch (state) {
case PrintSocketHolder.STATE_0:
case PrintSocketHolder.STATE_1:
//创建Socket连接
msg = "連接打印機...";
break;
case PrintSocketHolder.STATE_2:
case PrintSocketHolder.STATE_3:
//写入测试页面数据
msg = "正在打印...";
break;
case PrintSocketHolder.STATE_4:
msg = "正在關閉...";
// LoadingDialog.cancelDialogForLoading();
break;
}
LoadingDialog.setText(msg);
}
}
//package com.joe.print.mvp.print;
//
//import android.content.Context;
//
//import com.gingersoft.gsa.cloud.base.application.GsaCloudApplication;
//import com.gingersoft.gsa.cloud.ui.widget.dialog.LoadingDialog;
//
//import am.util.printer.PrintExecutor;
//import am.util.printer.PrintSocketHolder;
//import am.util.printer.PrinterWriter58mm;
//
///**
// * Created by Wyh on 2020/1/15.
// */
//public class Print implements PrintSocketHolder.OnStateChangedListener, PrintExecutor.OnPrintResultListener {
// private PrintExecutor executor;
// private SendPrint maker;
// private static Print print;
// private Context mContext;
// public static Print getInstance() {
// synchronized (Print.class) {
// if (print == null) {
// print = new Print();
// }
// }
// return print;
// }
//
// public void printOrder(Context context) {
// this.mContext = context;
// LoadingDialog.showNewDialogForLoading(GsaCloudApplication.getAppContext(),"初始化...",false);
// if (executor == null) {
// executor = new PrintExecutor("192.168.1.217", 9100, PrinterWriter58mm.TYPE_58);
// executor.setOnStateChangedListener(this);
// executor.setOnPrintResultListener(this);
// }
// if (maker == null) {
// maker = new SendPrint(context, 255, 580);
// }
// executor.setIp("192.168.1.218", 9100);
// executor.doPrinterRequestAsync(maker);
// }
//
//
// @Override
// public void onResult(int errorCode) {
// String msg;
// switch (errorCode) {
// case PrintSocketHolder.ERROR_0:
// //打印成功
// msg = "打印成功";
// break;
// case PrintSocketHolder.ERROR_2:
// //创建Socket失败
// msg = "連接打印機失敗";
// break;
// case PrintSocketHolder.ERROR_1:
// case PrintSocketHolder.ERROR_3:
// case PrintSocketHolder.ERROR_4:
// case PrintSocketHolder.ERROR_5:
// default:
// //打印失敗
// msg = "打印失敗";
//// LoadingDialog.cancelDialogForLoading();
// break;
// }
// LoadingDialog.setText(msg);
// }
//
// @Override
// public void onStateChanged(int state) {
// String msg = "";
// switch (state) {
// case PrintSocketHolder.STATE_0:
// case PrintSocketHolder.STATE_1:
// //创建Socket连接
// msg = "連接打印機...";
// break;
// case PrintSocketHolder.STATE_2:
// case PrintSocketHolder.STATE_3:
// //写入测试页面数据
// msg = "正在打印...";
// break;
// case PrintSocketHolder.STATE_4:
// msg = "正在關閉...";
//// LoadingDialog.cancelDialogForLoading();
// break;
// }
// LoadingDialog.setText(msg);
// }
//}
......@@ -78,5 +78,8 @@ dependencies {
implementation 'org.greenrobot:greendao:3.2.2'
implementation 'org.greenrobot:greendao-generator:3.2.2'
implementation rootProject.ext.dependencies["BaseRecyclerViewAdapter"]
implementation 'com.android.support:design:28.0.0'
//陰影背景
implementation 'com.github.Liberuman:ShadowDrawable:0.1'
}
......@@ -38,13 +38,6 @@ public class PrinterDeviceBean implements Serializable {
this.type = type;
}
public PrinterDeviceBean(int id, String ip, int port, int type) {
this.id = id;
this.ip = ip;
this.port = port;
this.type = type;
}
public PrinterDeviceBean(Integer restaurantId, String ip, int port, int type) {
this.restaurantId = restaurantId;
......
package com.gingersoft.gsa.cloud.ui.adapter;
import java.util.List;
import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentStatePagerAdapter;
/**
* Created by Wyh on 2020/2/24.
*/
public class TabFragmentAdapter extends FragmentStatePagerAdapter {
private List<Fragment> mFragments;
public TabFragmentAdapter(@NonNull FragmentManager fm, int behavior) {
super(fm, behavior);
}
public void setFragments(List<Fragment> fragments) {
mFragments = fragments;
notifyDataSetChanged();
}
@NonNull
@Override
public Fragment getItem(int position) {
return mFragments.get(position);
}
@Override
public int getCount() {
return mFragments == null ? 0 : mFragments.size();
}
}
package com.gingersoft.gsa.cloud.ui.view.utils;
import android.graphics.Color;
import android.view.View;
import com.sxu.shadowdrawable.ShadowDrawable;
import static com.qmuiteam.qmui.util.QMUIDisplayHelper.dpToPx;
/**
* Created by Wyh on 2020/2/24.
*/
public class ShadowUtil {
public static void setShadowDrawable(View view) {
ShadowDrawable.setShadowDrawable(view, Color.parseColor("#FFFFFF"), dpToPx(5),
Color.parseColor("#73888888"), dpToPx(5), 0, 2);
}
public static void setShadowDrawable(View view, int bgColor, int shapeRadius, int shadowColor, int shadowRadius, int offsetX, int offsetY) {
ShadowDrawable.setShadowDrawable(view, bgColor, shapeRadius,
shadowColor, shadowRadius, offsetX, offsetY);
}
}
<?xml version="1.0" encoding="utf-8"?>
<View xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_1"
android:background="@color/line_color2" />
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical">
<TextView
android:id="@+id/tv_tab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/theme_color"
android:textSize="@dimen/sp_14" />
</LinearLayout>
\ No newline at end of file
......@@ -409,6 +409,7 @@
<color name="color_ccc">#CCC</color>
<color name="line_color">#CCC</color>
<color name="line_color2">#F0F0F0</color>
<color name="scroll_bar_color">#CACACA</color>
<color name="hint_color">#676767</color>
......
......@@ -12,18 +12,13 @@ import com.gingersoft.gsa.cloud.base.common.bean.OrderDetail;
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.JsonUtils;
import com.gingersoft.gsa.cloud.base.utils.LanguageUtils;
import com.gingersoft.gsa.cloud.database.bean.Combo;
import com.gingersoft.gsa.cloud.database.bean.Modifier;
import com.gingersoft.gsa.cloud.database.bean.PrinterDeviceBean;
import com.gingersoft.gsa.cloud.table.mvp.model.bean.BaseRespose;
import com.gingersoft.gsa.cloud.database.bean.Food;
import com.gingersoft.gsa.cloud.database.bean.Modifier;
import com.gingersoft.gsa.cloud.database.utils.FoodDaoUtils;
import com.gingersoft.gsa.cloud.table.R;
import com.gingersoft.gsa.cloud.table.mvp.contract.MealStandContract;
import com.gingersoft.gsa.cloud.table.mvp.model.bean.BaseRespose;
import com.gingersoft.gsa.cloud.table.mvp.model.bean.request.DeleteOrderRequest;
import com.gingersoft.gsa.cloud.table.mvp.model.bean.request.OrderRequest;
import com.gingersoft.gsa.cloud.table.mvp.model.constant.MealConstant;
import com.gingersoft.gsa.cloud.table.mvp.ui.activity.MealStandActivity;
......@@ -33,7 +28,6 @@ import com.gingersoft.gsa.cloud.table.mvp.ui.adapter.meal.SelectMealAdapter;
import com.jess.arms.di.scope.ActivityScope;
import com.jess.arms.http.imageloader.ImageLoader;
import com.jess.arms.integration.AppManager;
import com.jess.arms.mvp.BasePresenter;
import com.jess.arms.utils.RxLifecycleUtils;
import com.qmuiteam.qmui.widget.dialog.QMUIDialog;
import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction;
......@@ -42,16 +36,10 @@ import org.simple.eventbus.EventBus;
import org.simple.eventbus.Subscriber;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.inject.Inject;
import androidx.core.content.res.TypedArrayUtils;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.annotations.NonNull;
import io.reactivex.schedulers.Schedulers;
......@@ -319,7 +307,7 @@ public class MealStandPresenter extends BaseOrderPresenter<MealStandContract.Mod
public void onNext(@NonNull BaseResult info) {
if (info != null && info.isSuccess()) {
mRootView.showMessage("送單成功");
// printSendOrder(MyOrderManage.getInstance().getOrderFoodList());
printSendOrder(MyOrderManage.getInstance().getOrderFoodList());
IActivity.returnTableActivity(true);
} else {
mRootView.showMessage("送單失敗");
......@@ -351,9 +339,9 @@ public class MealStandPresenter extends BaseOrderPresenter<MealStandContract.Mod
//通知更新餐台状态
EventBus.getDefault().post(OpenTableManage.getDefault().getTableBean().getId(), "initTable_status_event");
}
printSendOrder(newFoods);
mRootView.killMyself();
// mRootView.launchActivity(new Intent(IActivity, MealStandActivity.class));
// printSendOrder(newFoods);
} else {
mRootView.showMessage("送單失敗");
}
......@@ -365,15 +353,14 @@ public class MealStandPresenter extends BaseOrderPresenter<MealStandContract.Mod
* 打印上菜紙
*/
private void printSendOrder(List<OrderDetail> newFoods) {
MyOrderManage.getInstance().setNewFoodList(newFoods);
CC.obtainBuilder("Component.Print")
.setActionName("printActivity")
.addParam("NewFoods", newFoods)
.addParam("type", 3)
.build()
.callAsync((cc, result) -> {
if (result.isSuccess()) {
//打印成功
mRootView.killMyself();
}
});
......
......@@ -3,6 +3,7 @@ package com.gingersoft.gsa.cloud.table.mvp.presenter;
import android.app.Application;
import android.graphics.Color;
import android.view.View;
import com.billy.cc.core.component.CC;
import com.gingersoft.gsa.cloud.base.common.bean.BaseResult;
import com.gingersoft.gsa.cloud.base.common.bean.OrderBean;
......@@ -10,12 +11,9 @@ import com.gingersoft.gsa.cloud.base.common.bean.OrderDetail;
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.JsonUtils;
import com.gingersoft.gsa.cloud.base.utils.PrintUtils;
import com.gingersoft.gsa.cloud.database.bean.PrinterDeviceBean;
import com.gingersoft.gsa.cloud.table.mvp.model.bean.BaseRespose;
import com.gingersoft.gsa.cloud.database.bean.Food;
import com.gingersoft.gsa.cloud.database.bean.Function;
import com.gingersoft.gsa.cloud.table.mvp.contract.OrderContentContract;
import com.gingersoft.gsa.cloud.table.mvp.model.bean.BaseRespose;
import com.gingersoft.gsa.cloud.table.mvp.model.bean.request.OrderRequest;
import com.gingersoft.gsa.cloud.table.mvp.ui.activity.MealStandActivity;
import com.gingersoft.gsa.cloud.table.mvp.ui.activity.OrderContentActivity;
......@@ -157,6 +155,7 @@ public class OrderContentPresenter extends BaseOrderPresenter<OrderContentContra
if (info != null && info.isSuccess()) {
mRootView.sendSuccess();
mRootView.showMessage("送單成功");
printSendOrder(getOrderFoodLists());
mAppManager.killActivity(MealStandActivity.class);
mRootView.killMyself();
} else {
......@@ -185,6 +184,7 @@ public class OrderContentPresenter extends BaseOrderPresenter<OrderContentContra
public void onNext(@NonNull BaseResult info) {
if (info != null && info.isSuccess()) {
mRootView.showMessage("送單成功");
printSendOrder(newFoods);
mRootView.sendSuccess();
// mRootView.launchActivity(new Intent(IActivity, MealStandActivity.class));
} else {
......@@ -193,7 +193,35 @@ public class OrderContentPresenter extends BaseOrderPresenter<OrderContentContra
}
});
}
/**
* 打印上菜紙
*/
private void printSendOrder(List<OrderDetail> newFoods) {
MyOrderManage.getInstance().setNewFoodList(newFoods);
CC.obtainBuilder("Component.Print")
.setActionName("printActivity")
.addParam("type", 3)
.build()
.callAsync((cc, result) -> {
if (result.isSuccess()) {
//打印成功
}
});
//打印上菜紙
// CC.obtainBuilder("Component.Print")
// .setActionName("printActivity")
// .addParam("NewFoods", newFoods)
// .addParam("type", 0)
// .build()
// .callAsync((cc, result) -> {
// if (result.isSuccess()) {
// //打印成功
// mRootView.killMyself();
// }
// });
}
public void printOrder(int tableId) {
RequestBody requestBody = new FormBody.Builder()
......
......@@ -8,19 +8,18 @@ import android.view.View;
import com.billy.cc.core.component.CC;
import com.gingersoft.gsa.cloud.base.application.GsaCloudApplication;
import com.gingersoft.gsa.cloud.base.utils.gson.GsonUtils;
import com.gingersoft.gsa.cloud.ui.bean.view.SectionTextItem;
import com.gingersoft.gsa.cloud.base.utils.toast.ToastUtils;
import com.gingersoft.gsa.cloud.ui.bean.mode.LoginBean;
import com.gingersoft.gsa.cloud.ui.view.MyEditText;
import com.gingersoft.gsa.cloud.ui.widget.dialog.ChooseRestaurantDialog;
import com.gingersoft.gsa.cloud.user.login.R;
import com.gingersoft.gsa.cloud.user.login.R2;
import com.gingersoft.gsa.cloud.user.login.di.component.DaggerLoginComponent;
import com.gingersoft.gsa.cloud.ui.bean.mode.LoginBean;
import com.gingersoft.gsa.cloud.user.login.mvp.contract.LoginContract;
import com.gingersoft.gsa.cloud.user.login.mvp.presenter.LoginPresenter;
import com.jess.arms.base.BaseActivity;
import com.jess.arms.di.component.AppComponent;
import com.jess.arms.utils.ArmsUtils;
import com.gingersoft.gsa.cloud.user.login.mvp.contract.LoginContract;
import com.gingersoft.gsa.cloud.user.login.mvp.presenter.LoginPresenter;
import com.gingersoft.gsa.cloud.base.utils.toast.ToastUtils;
import com.gingersoft.gsa.cloud.ui.view.MyEditText;
import java.io.IOException;
import java.util.List;
......@@ -143,22 +142,18 @@ public class LoginActivity extends BaseActivity<LoginPresenter> implements Login
if(loginBean.getData().getUser() != null) {
GsaCloudApplication.setMemberId(LoginActivity.this, loginBean.getData().getUser().getUserId());
GsaCloudApplication.setMemberName(LoginActivity.this, loginBean.getData().getUser().getUserName());
GsaCloudApplication.setMemberId(mContext, loginBean.getData().getUser().getUserId());
GsaCloudApplication.setMemberName(mContext, loginBean.getData().getUser().getUserName());
if (loginBean.getData().getUser().getBrands() != null) {
int restaurantSize = getRestaurantSize(loginBean.getData().getUser().getBrands());
// if (restaurantSize > 1) {
new ChooseRestaurantDialog.BottomListSheetBuilder(this)
.addBrandItems(loginBean.getData().getUser().getBrands())
.setOnItemClickListener(new ChooseRestaurantDialog.BottomListSheetBuilder.OnItemClickListener() {
@Override
public void onItemClick(SectionTextItem item, int position) {
GsaCloudApplication.setRestaurantId(LoginActivity.this, item.getId());
jumpActivity();
killMyself();
}
.setOnItemClickListener((item, position) -> {
GsaCloudApplication.setRestaurantId(mContext, item.getId());
jumpActivity();
killMyself();
})
.build()
.show();
......
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