Commit 9e3a4f2b by 王宇航

打印,结账

parent 480f0737
......@@ -5,7 +5,7 @@
<uses-permission android:name="android.permission.INTERNET" />
<application>
<activity android:name=".mvp.ui.activity.DownloadActivity"></activity>
<activity android:name=".mvp.ui.activity.DownloadActivity"/>
<!-- arms配置 -->
<meta-data
......
......@@ -79,14 +79,8 @@ public class DownloadActivity extends BaseActivity<DownloadPresenter> implements
@Override
public void initTopBar() {
mTopBar.setBackgroundColor(ContextCompat.getColor(this, R.color.theme_color));
mTopBar.addLeftBackImageButton().setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
killMyself();
}
});
// mTopBar.setBackgroundColor(ContextCompat.getColor(this, R.color.white));
mTopBar.addLeftImageButton(R.drawable.icon_back, R.id.iv_left_back).setOnClickListener(v -> finish());
mTopBar.addRightTextButton("刷新", R.id.topbar).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
......
......@@ -2,6 +2,7 @@
package="com.joe.print">
<application>
<activity android:name=".mvp.ui.activity.OldPrintActivity" android:theme="@style/print_TranslucentTheme"/>
<activity android:name=".mvp.ui.activity.PrintActivity" android:theme="@style/print_TranslucentTheme"/>
<activity android:name=".mvp.ui.activity.PrinterListActivity"/>
<activity android:name=".mvp.ui.activity.PrinterAddActivity"/>
......
......@@ -14,9 +14,14 @@
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".mvp.ui.activity.PrinterAddActivity"/>
<activity android:name=".mvp.ui.activity.PrintActivity" android:theme="@style/print_TranslucentTheme"/> <!-- android:theme="@style/print_TranslucentTheme" -->
<activity android:name=".mvp.ui.activity.PrinterListActivity">
<!-- <activity-->
<!-- android:name=".mvp.ui.activity.PrintActivity"-->
<!-- android:theme="@style/print_TranslucentTheme" />-->
<activity android:name=".mvp.ui.activity.PrinterAddActivity" />
<activity
android:name=".mvp.ui.activity.OldPrintActivity"
android:theme="@style/print_TranslucentTheme" /> <!-- PrinterListActivity android:theme="@style/print_TranslucentTheme" -->
<activity android:name=".mvp.ui.activity.PrintActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<action android:name="android.intent.action.VIEW" />
......
......@@ -8,6 +8,7 @@ import com.billy.cc.core.component.CC;
import com.billy.cc.core.component.CCResult;
import com.billy.cc.core.component.CCUtil;
import com.billy.cc.core.component.IComponent;
import com.joe.print.mvp.ui.activity.OldPrintActivity;
import com.joe.print.mvp.ui.activity.PrintActivity;
import com.joe.print.mvp.ui.activity.PrinterListActivity;
......@@ -49,6 +50,9 @@ public class PrintComponent implements IComponent {
break;
case "print_order":
return printOrderInfo(cc);
case "printActivity":
CCUtil.navigateTo(cc, PrintActivity.class);
break;
default:
// cc.callAsync(new IComponentCallback() {
// @Override
......@@ -90,9 +94,8 @@ public class PrintComponent implements IComponent {
}
private boolean printOrderInfo(CC cc){
// Print.getInstance().printOrder(cc.getContext());
Context context = cc.getContext();
Intent intent = new Intent(context, PrintActivity.class);
Intent intent = new Intent(context, OldPrintActivity.class);
if (!(context instanceof Activity)) {
//调用方没有设置context或app间组件跳转,context为application
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
......@@ -100,9 +103,6 @@ public class PrintComponent implements IComponent {
//将cc的callId传给Activity,登录完成后通过这个callId来回传结果
intent.putExtra("callId", cc.getCallId());
context.startActivity(intent);
// CCUtil.navigateTo(cc, PrintActivity.class);
// CC.sendCCResult(cc.getCallId(), CCResult.success());
//返回true,不立即调用CC.sendCCResult
return true;
......
package com.joe.print.di.component;
import dagger.BindsInstance;
import dagger.Component;
import com.jess.arms.di.component.AppComponent;
import com.joe.print.di.module.PrintModule;
import com.joe.print.mvp.contract.PrintContract;
import com.jess.arms.di.scope.ActivityScope;
import com.joe.print.mvp.ui.activity.PrintActivity;
/**
* ================================================
* Description:
* <p>
* Created by MVPArmsTemplate on 01/18/2020 14:57
* <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>
* ================================================
*/
@ActivityScope
@Component(modules = PrintModule.class, dependencies = AppComponent.class)
public interface PrintComponent {
void inject(PrintActivity activity);
@Component.Builder
interface Builder {
@BindsInstance
PrintComponent.Builder view(PrintContract.View view);
PrintComponent.Builder appComponent(AppComponent appComponent);
PrintComponent build();
}
}
\ No newline at end of file
package com.joe.print.di.module;
import com.jess.arms.di.scope.ActivityScope;
import dagger.Binds;
import dagger.Module;
import dagger.Provides;
import com.joe.print.mvp.contract.PrintContract;
import com.joe.print.mvp.model.PrintModel;
/**
* ================================================
* Description:
* <p>
* Created by MVPArmsTemplate on 01/18/2020 14:57
* <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 PrintModule {
@Binds
abstract PrintContract.Model bindPrintModel(PrintModel model);
}
\ No newline at end of file
package com.joe.print.mvp.contract;
import com.gingersoft.gsa.cloud.base.common.bean.BaseResult;
import com.jess.arms.mvp.IView;
import com.jess.arms.mvp.IModel;
import io.reactivex.Observable;
/**
* ================================================
* Description:
* <p>
* Created by MVPArmsTemplate on 01/18/2020 14:57
* <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 PrintContract {
//对于经常使用的关于UI的方法可以定义到IView中,如显示隐藏进度条,和显示文字消息
interface View extends IView {
/**
* 顯示打印機列表彈窗
*/
void showPrinterList();
}
//Model层定义接口,外部只需关心Model返回的数据,无需关心内部细节,即是否使用缓存
interface Model extends IModel {
Observable<BaseResult> getPrinterList(int restaurantId);
}
}
package com.joe.print.mvp.model;
import android.app.Application;
import com.gingersoft.gsa.cloud.base.common.bean.BaseResult;
import com.google.gson.Gson;
import com.jess.arms.integration.IRepositoryManager;
import com.jess.arms.mvp.BaseModel;
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 io.reactivex.Observable;
/**
* ================================================
* Description:
* <p>
* Created by MVPArmsTemplate on 01/18/2020 14:57
* <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>
* ================================================
*/
@ActivityScope
public class PrintModel extends BaseModel implements PrintContract.Model {
@Inject
Gson mGson;
@Inject
Application mApplication;
@Inject
public PrintModel(IRepositoryManager repositoryManager) {
super(repositoryManager);
}
@Override
public void onDestroy() {
super.onDestroy();
this.mGson = null;
this.mApplication = null;
}
@Override
public Observable<BaseResult> getPrinterList(int restaurantId) {
return mRepositoryManager.obtainRetrofitService(PrinterService.class)
.getPrinterList(restaurantId);
}
}
\ No newline at end of file
......@@ -11,6 +11,7 @@ import com.jess.arms.integration.AppManager;
import com.jess.arms.mvp.BasePresenter;
import com.jess.arms.utils.RxLifecycleUtils;
import com.joe.print.mvp.contract.PrintListContract;
import com.gingersoft.gsa.cloud.base.common.bean.PrinterManger.PrinterManager;
import java.util.List;
......@@ -81,6 +82,7 @@ public class PrintListPresenter extends BasePresenter<PrintListContract.Model, P
List<PrinterDeviceBean> deviceBeans = JsonUtils.parseArray(baseResult.getData(), PrinterDeviceBean.class);
if(deviceBeans != null && deviceBeans.size() > 0){
mRootView.loadPrinterList(deviceBeans);
PrinterManager.getPrinterManager().setDeviceBeans(deviceBeans);
}
}
}
......
package com.joe.print.mvp.presenter;
import android.app.Application;
import com.gingersoft.gsa.cloud.base.common.bean.BaseResult;
import com.gingersoft.gsa.cloud.base.utils.JsonUtils;
import com.gingersoft.gsa.cloud.database.bean.PrinterDeviceBean;
import com.jess.arms.integration.AppManager;
import com.jess.arms.di.scope.ActivityScope;
import com.jess.arms.mvp.BasePresenter;
import com.jess.arms.http.imageloader.ImageLoader;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.schedulers.Schedulers;
import me.jessyan.rxerrorhandler.core.RxErrorHandler;
import me.jessyan.rxerrorhandler.handler.ErrorHandleSubscriber;
import javax.inject.Inject;
import com.jess.arms.utils.RxLifecycleUtils;
import com.joe.print.mvp.contract.PrintContract;
import com.gingersoft.gsa.cloud.base.common.bean.PrinterManger.PrinterManager;
import java.util.List;
/**
* ================================================
* Description:
* <p>
* Created by MVPArmsTemplate on 01/18/2020 14:57
* <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>
* ================================================
*/
@ActivityScope
public class PrintPresenter extends BasePresenter<PrintContract.Model, PrintContract.View> {
@Inject
RxErrorHandler mErrorHandler;
@Inject
Application mApplication;
@Inject
ImageLoader mImageLoader;
@Inject
AppManager mAppManager;
@Inject
public PrintPresenter(PrintContract.Model model, PrintContract.View rootView) {
super(model, rootView);
}
@Override
public void onDestroy() {
super.onDestroy();
this.mErrorHandler = null;
this.mAppManager = null;
this.mImageLoader = null;
this.mApplication = null;
}
/**
* 獲取打印機列表
*
* @param restaurantId 餐廳id
*/
public void getPrinterList(int restaurantId) {
mModel.getPrinterList(restaurantId)
.subscribeOn(Schedulers.io())
.doOnSubscribe(disposable -> mRootView.showLoading(""))
.subscribeOn(AndroidSchedulers.mainThread())
.observeOn(AndroidSchedulers.mainThread())
.doAfterTerminate(() -> mRootView.hideLoading())
.compose(RxLifecycleUtils.bindToLifecycle(mRootView))
.subscribe(new ErrorHandleSubscriber<BaseResult>(mErrorHandler) {
@Override
public void onNext(BaseResult baseResult) {
if(baseResult.isSuccess()){
List<PrinterDeviceBean> deviceBeans = JsonUtils.parseArray(baseResult.getData(), PrinterDeviceBean.class);
if(deviceBeans != null && deviceBeans.size() > 0){
//有打印機,返回true
PrinterManager.getPrinterManager().setDeviceBeans(deviceBeans);
mRootView.showPrinterList();
}
}
}
});
}
}
package com.joe.print.mvp.ui.activity;
import android.app.Activity;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
import android.view.WindowManager;
import com.billy.cc.core.component.CC;
import com.billy.cc.core.component.CCResult;
import com.gingersoft.gsa.cloud.base.utils.toast.ToastUtils;
import com.gingersoft.gsa.cloud.database.DaoManager;
import com.gingersoft.gsa.cloud.database.greendao.PrinterDeviceBeanDao;
import com.gingersoft.gsa.cloud.ui.dialog.LoadingDialog;
import com.joe.print.mvp.print.SendPrint;
import am.util.printer.PrintExecutor;
import am.util.printer.PrintSocketHolder;
import am.util.printer.PrinterWriter58mm;
import am.util.printer.PrinterWriter80mm;
import androidx.annotation.Nullable;
import static com.gingersoft.gsa.cloud.database.DaoManager.getInstance;
/**
* Created by Wyh on 2020/1/7.
*/
public class OldPrintActivity extends Activity implements PrintSocketHolder.OnStateChangedListener, PrintExecutor.OnPrintResultListener, DialogInterface.OnDismissListener {
private PrintExecutor executor;
private SendPrint maker;
private Dialog dialog;
private String callId;
/**
* 是否打印成功 true:成功
*/
private boolean printStatus = false;
private String ip;
private String port;
private int paperType = 1;//打印紙類型 1:58mm,2::80mm
private int printWidth = 560;//打印出來的內容寬度
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().setBackgroundDrawable(null);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
initIntent();
callId = getIntent().getStringExtra("callId");
printOrder(this);
}
private void initIntent() {
Intent intent = getIntent();
ip = intent.getStringExtra("ip");
port = intent.getStringExtra("port");
paperType = intent.getIntExtra("paperType", 1);
if (ip == null || ip.equals("")) {
ip = "192.168.1.217";
}
if (port == null || port.equals("")) {
port = "9100";
}
if (paperType == 1) {
paperType = PrinterWriter58mm.TYPE_58;
printWidth = 580 - 20;//兩邊留20的空隙
} else {
paperType = PrinterWriter80mm.TYPE_80;
printWidth = 800 - 20;//兩邊留20的空隙
}
}
public void printOrder(Context context) {
if (dialog != null) {
dialog.dismiss();
}
dialog = LoadingDialog.showNewDialogForLoading(this, "初始化...", false);
dialog.setOnDismissListener(this);
if (executor == null) {
executor = new PrintExecutor(ip, Integer.parseInt(port), paperType);
executor.setOnStateChangedListener(this);
executor.setOnPrintResultListener(this);
}
if (maker == null) {
maker = new SendPrint(context, 255, printWidth);
}
executor.setIp(ip, Integer.parseInt(port));
executor.doPrinterRequestAsync(maker);
executor.setReconnectTimes(3);
// executor.doPrinterRequest()
}
@Override
public void onResult(int errorCode) {
Log.e("ccc", "錯誤碼:" + errorCode);
String msg = "";
switch (errorCode) {
case PrintSocketHolder.ERROR_0:
//打印成功
msg = "打印成功";
printStatus = true;
dismiss(msg);
break;
case PrintSocketHolder.ERROR_2:
case PrintSocketHolder.ERROR_100:
//创建Socket失败
msg = "連接打印機失敗";
printStatus = false;
dismiss(msg);
break;
case PrintSocketHolder.ERROR_1:
case PrintSocketHolder.ERROR_3:
case PrintSocketHolder.ERROR_4:
case PrintSocketHolder.ERROR_5:
//打印失敗
msg = "打印失敗";
dismiss(msg);
printStatus = false;
break;
default:
break;
}
LoadingDialog.setText(msg);
}
@Override
public void onStateChanged(int state) {
Log.e("ccc", "onStateChanged:" + 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 = "正在關閉...";
dismiss(msg);
break;
}
LoadingDialog.setText(msg);
}
private void dismiss(String msg) {
ToastUtils.show(this, msg);
//延遲一秒
dialog.dismiss();
//判断是否为CC调用打开本页面
if (callId != null) {
CCResult result;
if (printStatus) {
result = CCResult.success();
} else {
result = CCResult.error("print error");
}
//为确保不管登录成功与否都会调用CC.sendCCResult,在onDestroy方法中调用
CC.sendCCResult(callId, result);
}
finish();
}
@Override
public void onDismiss(DialogInterface dialog) {
finish();
}
}
......@@ -155,10 +155,8 @@ public class PrinterAddActivity extends BaseActivity<PrinterAddPresenter> implem
@OnClick({R2.id.print_test})
@Override
public void onClick(View v) {
if (v.getId() == R.id.print_test) {
//打印測試
startActivity(new Intent(mContext, PrintActivity.class));
} else if (v.getId() == R.id.printer_add) {
if (v.getId() == R.id.printer_add || v.getId() == R.id.print_test) {
//保存打印機信息
StringBuilder ipAddress = new StringBuilder();
for (EditText editText : ipEdits) {
......@@ -174,14 +172,25 @@ public class PrinterAddActivity extends BaseActivity<PrinterAddPresenter> implem
return;
}
hideKeyBoard();
int paperType = 1;
int paperType = 1;//打印紙類型
if (rgPaperType.getCheckedRadioButtonId() != R.id.print_paper_size_58) {
paperType = 2;
}
if (isEditPrinter && printerDeviceBean != null) {
mPresenter.updatePrinterInfo(printerDeviceBean.getId(), GsaCloudApplication.getRestaurantId(mContext), ipAddress.substring(0, ipAddress.lastIndexOf(".")), etPort.getText().toString(), paperType);
} else {
mPresenter.addPrinter(GsaCloudApplication.getRestaurantId(mContext), ipAddress.substring(0, ipAddress.lastIndexOf(".")), etPort.getText().toString(), paperType);
//添加打印機
if (v.getId() == R.id.printer_add) {
if (isEditPrinter && printerDeviceBean != null) {
mPresenter.updatePrinterInfo(printerDeviceBean.getId(), GsaCloudApplication.getRestaurantId(mContext), ipAddress.substring(0, ipAddress.lastIndexOf(".")), etPort.getText().toString(), paperType);
} else {
mPresenter.addPrinter(GsaCloudApplication.getRestaurantId(mContext), ipAddress.substring(0, ipAddress.lastIndexOf(".")), etPort.getText().toString(), paperType);
}
} else if(v.getId() == R.id.print_test){
//打印測試
Intent intent = new Intent(mContext, OldPrintActivity.class);
intent.putExtra("ip", ipAddress.substring(0, ipAddress.lastIndexOf(".")));
intent.putExtra("port", etPort.getText().toString());
intent.putExtra("paperType", paperType);
startActivity(intent);
}
}
}
......
......@@ -14,7 +14,7 @@ import com.joe.print.R;
import com.joe.print.R2;
import com.joe.print.di.component.DaggerPrintListComponent;
import com.joe.print.mvp.contract.PrintListContract;
import com.joe.print.mvp.model.PrinterManager;
import com.gingersoft.gsa.cloud.base.common.bean.PrinterManger.PrinterManager;
import com.joe.print.mvp.presenter.PrintListPresenter;
import com.joe.print.mvp.ui.adapter.PrinterListAdapter;
import com.qmuiteam.qmui.widget.QMUITopBar;
......@@ -182,57 +182,61 @@ public class PrinterListActivity extends BaseActivity<PrintListPresenter> implem
@Override
public void loadPrinterList(List<PrinterDeviceBean> deviceBeans) {
PrinterManager.getPrinterManager().setDeviceBeans(deviceBeans);
printListAdapter = new PrinterListAdapter(deviceBeans);
mRvPrintList.setLayoutManager(new LinearLayoutManager(this));
//分割线
mRvPrintList.addItemDecoration(new DefaultItemDecoration(ContextCompat.getColor(this, R.color.line_color)));
mRvPrintList.setOnItemClickListener((view, adapterPosition) -> {
//打開打印機詳情
Intent intent = new Intent(mContext, PrinterAddActivity.class);
intent.putExtra("printerInfo", deviceBeans.get(adapterPosition));
startActivity(intent);
});
//menu 右侧菜單點擊事件
mRvPrintList.setOnItemMenuClickListener((menuBridge, position) -> {
menuBridge.closeMenu();
// mPresenter.deletePrinter(deviceBeans.get(position).getId() + "");
deviceBeans.remove(position);
printListAdapter.notifyItemRemoved(position);
}); // Item的Menu点击。
mRvPrintList.setSwipeMenuCreator(mSwipeMenuCreator); // 菜单创建器。
mRvPrintList.setOnItemStateChangedListener(mOnItemStateChangedListener); // 监听Item的手指状态,拖拽、侧滑、松开。
mRvPrintList.setLongPressDragEnabled(true); // 长按拖拽,默认关闭。
mRvPrintList.setOnItemMoveListener(new OnItemMoveListener() {
@Override
public boolean onItemMove(RecyclerView.ViewHolder srcHolder, RecyclerView.ViewHolder targetHolder) {
// 不同的ViewType不能拖拽换位置。
if (srcHolder.getItemViewType() != targetHolder.getItemViewType()) return false;
// 真实的Position:通过ViewHolder拿到的position都需要减掉HeadView的数量。
int fromPosition = srcHolder.getAdapterPosition() - mRvPrintList.getHeaderCount();
int toPosition = targetHolder.getAdapterPosition() - mRvPrintList.getHeaderCount();
if (fromPosition < toPosition) {
for (int i = fromPosition; i < toPosition; i++) {
Collections.swap(deviceBeans, i, i + 1);
}
} else {
for (int i = fromPosition; i > toPosition; i--) {
Collections.swap(deviceBeans, i, i - 1);
if (printListAdapter == null) {
printListAdapter = new PrinterListAdapter(deviceBeans);
mRvPrintList.setLayoutManager(new LinearLayoutManager(this));
//分割线
mRvPrintList.addItemDecoration(new DefaultItemDecoration(ContextCompat.getColor(this, R.color.line_color)));
mRvPrintList.setOnItemClickListener((view, adapterPosition) -> {
//打開打印機詳情
Intent intent = new Intent(mContext, PrinterAddActivity.class);
intent.putExtra("printerInfo", deviceBeans.get(adapterPosition));
startActivity(intent);
});
//menu 右侧菜單點擊事件
mRvPrintList.setOnItemMenuClickListener((menuBridge, position) -> {
menuBridge.closeMenu();
mPresenter.deletePrinter(deviceBeans.get(position).getId() + "");
deviceBeans.remove(position);
printListAdapter.notifyItemRemoved(position);
}); // Item的Menu点击。
mRvPrintList.setSwipeMenuCreator(mSwipeMenuCreator); // 菜单创建器。
mRvPrintList.setOnItemStateChangedListener(mOnItemStateChangedListener); // 监听Item的手指状态,拖拽、侧滑、松开。
mRvPrintList.setLongPressDragEnabled(true); // 长按拖拽,默认关闭。
mRvPrintList.setOnItemMoveListener(new OnItemMoveListener() {
@Override
public boolean onItemMove(RecyclerView.ViewHolder srcHolder, RecyclerView.ViewHolder targetHolder) {
// 不同的ViewType不能拖拽换位置。
if (srcHolder.getItemViewType() != targetHolder.getItemViewType()) return false;
// 真实的Position:通过ViewHolder拿到的position都需要减掉HeadView的数量。
int fromPosition = srcHolder.getAdapterPosition() - mRvPrintList.getHeaderCount();
int toPosition = targetHolder.getAdapterPosition() - mRvPrintList.getHeaderCount();
if (fromPosition < toPosition) {
for (int i = fromPosition; i < toPosition; i++) {
Collections.swap(deviceBeans, i, i + 1);
}
} else {
for (int i = fromPosition; i > toPosition; i--) {
Collections.swap(deviceBeans, i, i - 1);
}
}
printListAdapter.notifyItemMoved(fromPosition, toPosition);
return true;// 返回true表示处理了,返回false表示你没有处理。
}
printListAdapter.notifyItemMoved(fromPosition, toPosition);
return true;// 返回true表示处理了,返回false表示你没有处理。
}
@Override
public void onItemDismiss(RecyclerView.ViewHolder srcHolder) {
@Override
public void onItemDismiss(RecyclerView.ViewHolder srcHolder) {
// int adapterPosition = srcHolder.getAdapterPosition();
// int position = adapterPosition - mRvPrintList.getHeaderCount();
}
});// 监听拖拽和侧滑删除,更新UI和数据源。
mRvPrintList.setAdapter(printListAdapter);
}
});// 监听拖拽和侧滑删除,更新UI和数据源。
mRvPrintList.setAdapter(printListAdapter);
} else {
printListAdapter.notifyData(deviceBeans);
}
}
}
......@@ -20,6 +20,11 @@ public class PrinterListAdapter extends BaseQuickAdapter<PrinterDeviceBean, Base
@Override
protected void convert(BaseViewHolder helper, PrinterDeviceBean item) {
helper.setText(R.id.tv_printer_name, item.getIp() +"");
helper.setText(R.id.tv_printer_name, item.getIp() + "");
}
public void notifyData(List<PrinterDeviceBean> data) {
this.mData = data;
super.notifyDataSetChanged();
}
}
<?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:orientation="vertical">
android:orientation="vertical" 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="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/shape_white_eight_corners_bg"
android:gravity="center"
android:orientation="vertical"
android:padding="@dimen/dp_10">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_print_list"
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="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/shape_white_eight_corners_bg"
android:gravity="center"
android:orientation="vertical"
android:padding="@dimen/dp_20">
<TextView
android:id="@+id/local_print"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="@dimen/dp_10"
android:text="本機打印"
android:textColor="@color/theme_333_color"
android:textSize="@dimen/sp_20" />
<include layout="@layout/include_dividing_line" />
<TextView
android:id="@+id/internet_print"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="@dimen/dp_10"
android:text="網絡打印"
android:textColor="@color/theme_333_color"
android:textSize="@dimen/sp_20" />
</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:layout_height="wrap_content"
android:orientation="vertical">
<TextView
......
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="print_TranslucentTheme">
<style name="print_TranslucentTheme" parent="AppTheme">
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:colorBackgroundCacheHint">@null</item>
<item name="android:windowIsTranslucent">true</item>
......
......@@ -4,7 +4,7 @@
<item name="android:textColor">#333</item>
<item name="android:textSize">16sp</item>
</style>
<style name="print_TranslucentTheme" parent="Theme.AppCompat">
<style name="print_TranslucentTheme" parent="AppTheme">
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:colorBackgroundCacheHint">@null</item>
<item name="android:windowIsTranslucent">true</item>
......
package com.joe.print.mvp.model;
package com.gingersoft.gsa.cloud.base.common.bean.PrinterManger;
import com.gingersoft.gsa.cloud.database.bean.PrinterDeviceBean;
......
package com.gingersoft.gsa.cloud.base.widget;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.graphics.Bitmap;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.util.SparseArray;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowManager;
import android.widget.ImageView;
import android.widget.TextView;
import com.bumptech.glide.Glide;
import com.bumptech.glide.load.engine.DiskCacheStrategy;
import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
import com.bumptech.glide.request.RequestOptions;
import com.gingersoft.gsa.cloud.base.R;
/**
* Created by Wyh on 2019/11/1.
*/
public abstract class DialogUtils {
private Context mContext;
// private int xmlLayout;
private Dialog dialog = null;
private View view;
private int style = R.style.PhotoDialog;
private int mWidth = WindowManager.LayoutParams.WRAP_CONTENT;
private int mHeight = WindowManager.LayoutParams.WRAP_CONTENT;
public DialogUtils(Context mContext, int xmlLayout) {
this.mContext = mContext;
view = LayoutInflater.from(mContext).inflate(xmlLayout, null);
}
public DialogUtils(Context mContext, View view) {
this.mContext = mContext;
this.view = view;
}
public DialogUtils setWidth(int width) {
mWidth = width;
return this;
}
public DialogUtils setHeight(int height) {
mHeight = height;
return this;
}
public DialogUtils createDialogView() {
dialog = new Dialog(mContext, style);
final ViewHepler viewHepler = getViewHepler();
initLayout(viewHepler, dialog);
dialog.setContentView(viewHepler.getContentView());
Window dialogWindow = dialog.getWindow();
WindowManager.LayoutParams lp = dialogWindow.getAttributes();
dialogWindow.setGravity(Gravity.CENTER);
//将对话框的大小按屏幕大小的百分比设置
// WindowManager m = activity.getWindowManager();
// Display d = m.getDefaultDisplay(); // 获取屏幕宽、高用
WindowManager.LayoutParams p = dialogWindow.getAttributes(); // 获取对话框当前的参数值
Window window = dialog.getWindow();
if (window != null) {
window.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
window.getDecorView().setBackgroundResource(android.R.color.transparent);
}
p.height = mHeight;
p.width = mWidth;
dialogWindow.setAttributes(p);
// android Activity改成dialog样式后 怎设置点击空白处关闭窗体,点击窗体以外的地方关闭窗体
dialog.setCanceledOnTouchOutside(true);
dialog.setOnDismissListener(dialog -> {
});
dialog.setCancelable(true);
// dialog.show();
return this;
}
public Dialog getDialog() {
return dialog;
}
public DialogUtils dismiss() {
dialog.dismiss();
return this;
}
public DialogUtils show() {
dialog.show();
return this;
}
public DialogUtils setOnDismissListener(DialogInterface.OnDismissListener dismissListener) {
dialog.setOnDismissListener(dismissListener);
return this;
}
public abstract void initLayout(ViewHepler hepler, Dialog dialog);
private ViewHepler getViewHepler() {
return ViewHepler.get(mContext, view);
}
public static class ViewHepler {
private final SparseArray<View> mViews;
private View mConvertView;
private static ViewHepler viewHepler = null;
private Context context;
private ViewHepler(Context context, int layoutId) {
this.mViews = new SparseArray<>();
this.context = context;
mConvertView = LayoutInflater.from(context).inflate(layoutId, null);
}
private ViewHepler(Context context, View view) {
this.mViews = new SparseArray<>();
this.context = context;
mConvertView = view;
}
public static ViewHepler get(Context context, int layoutId) {
viewHepler = new ViewHepler(context, layoutId);
return viewHepler;
}
public static ViewHepler get(Context context, View view) {
viewHepler = new ViewHepler(context, view);
return viewHepler;
}
public View getContentView() {
return mConvertView;
}
/**
* 通过控件的Id获取对于的控件,如果没有则加入views
*
* @param viewId
* @return
*/
public <T extends View> T getView(int viewId) {
View view = mViews.get(viewId);
if (view == null) {
view = mConvertView.findViewById(viewId);
mViews.put(viewId, view);
}
return (T) view;
}
/**
* 为TextView设置字符串
*
* @param viewId
* @param text
* @return
*/
public ViewHepler setText(int viewId, String text) {
if (text == null) {
text = "";
}
TextView view = getView(viewId);
view.setText(text);
return this;
}
/**
* 为ImageView设置图片
*
* @param viewId
* @param drawableId
* @return
*/
public ViewHepler setImageResource(int viewId, int drawableId) {
ImageView view = getView(viewId);
view.setImageResource(drawableId);
return this;
}
/**
* 为ImageView设置图片
*
* @param viewId
* @param bm
* @return
*/
public ViewHepler setImageBitmap(int viewId, Bitmap bm) {
ImageView view = getView(viewId);
view.setImageBitmap(bm);
return this;
}
/**
* 为ImageView设置图片
*
* @param viewId ImageView的id
* @param url 圖片鏈接
* @param roundedCorners 圖片圓角
* @param defaultImg 默認圖
* @return ViewHepler
*/
public ViewHepler setImageByUrl(int viewId, String url, int roundedCorners, int defaultImg) {
ImageView view = (ImageView) isHaveView(viewId);
Glide.with(context).load(url)
.diskCacheStrategy(DiskCacheStrategy.ALL)
.apply(RequestOptions.bitmapTransform(new RoundedCorners(roundedCorners)))
.error(defaultImg)
.fallback(defaultImg)
.placeholder(defaultImg)
.into(view);
return this;
}
/**
* 获取view,如果缓存中已存在,则直接取出来
*
* @param viewId
* @return
*/
private View isHaveView(int viewId) {
ImageView view = (ImageView) mViews.get(viewId);
if (view == null) {
view = mConvertView.findViewById(viewId);
mViews.put(viewId, view);
}
return view;
}
public ViewHepler setLayoutParams(int viewId, ViewGroup.LayoutParams params) {
View view = isHaveView(viewId);
view.setLayoutParams(params);
return this;
}
private View.OnClickListener mListener;
public void setViewClick(int viewId, final ViewClickCallBack callBack) {
View view = mViews.get(viewId);
if (view == null) {
view = mConvertView.findViewById(viewId);
mViews.put(viewId, view);
}
view.setOnClickListener(v -> callBack.doClickAction(v));
}
public static interface ViewClickCallBack {
public void doClickAction(View v);
}
}
}
......@@ -4,5 +4,11 @@
<item name="shadow_right">@drawable/shadow_right</item>
<item name="shadow_bottom">@drawable/shadow_bottom</item>
</style>
<style name="PhotoDialog" parent="@android:style/Theme.Light">
<item name="android:windowFrame">@null</item><!--边框-->
<item name="android:windowIsFloating">true</item><!--是否浮现在activity之上-->
<item name="android:windowNoTitle">true</item><!--无标题-->
<item name="android:windowBackground">@color/transparent</item><!--背景透明-->
<item name="android:backgroundDimEnabled">true</item><!--背景遮罩效果-->
</style>
</resources>
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@color/white"/>
<corners android:radius="@dimen/dp_8"/>
</shape>
\ No newline at end of file
......@@ -16,7 +16,7 @@ public interface GoldConstants {
// boolean isRefreshData = false;
int DetailColCount = 4;
int foodGriupColCount = 5;//食品組列數
}
......@@ -325,7 +325,7 @@ public class MealStandPresenter extends BasePresenter<MealStandContract.Model, M
} else {
int deletePosition = mSelectMealAdapter.removeFoodItem();
mRootView.setMealRvScrollToPosition(deletePosition);
deleteFood(deleteFood.getId());
// deleteFood(deleteFood.getId());
}
}
updateOrderFoodNumber();
......@@ -333,6 +333,7 @@ public class MealStandPresenter extends BasePresenter<MealStandContract.Model, M
public void changedMealByParentId(long parentId) {
List<Food> foodList = mModel.queryDB_FoodList(parentId);
mFoodAdapter.resetSelect(-1, null);
if (foodList != null) {
mFoodList.clear();
mFoodList.addAll(foodList);
......@@ -341,6 +342,7 @@ public class MealStandPresenter extends BasePresenter<MealStandContract.Model, M
mFoodAdapter.notifyDataSetChanged();
}
mRootView.showViewModeVisibility(MealConstant.food_ViewMode, MealConstant.food_group_ViewMode);
}
......
......@@ -4,6 +4,7 @@ import android.app.Activity;
import android.app.Application;
import android.content.Intent;
import android.graphics.Color;
import android.print.PrintManager;
import android.util.Log;
import android.view.View;
......@@ -12,6 +13,7 @@ import com.billy.cc.core.component.CCResult;
import com.billy.cc.core.component.IComponentCallback;
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.PrinterManger.PrinterManager;
import com.gingersoft.gsa.cloud.base.common.bean.mealManage.MyOrderManage;
import com.gingersoft.gsa.cloud.base.common.bean.mealManage.OpenTableContract;
import com.gingersoft.gsa.cloud.base.utils.JsonUtils;
......@@ -31,6 +33,7 @@ import com.jess.arms.di.scope.ActivityScope;
import com.jess.arms.http.imageloader.ImageLoader;
import com.jess.arms.integration.AppManager;
import com.jess.arms.utils.RxLifecycleUtils;
import com.qmuiteam.qmui.widget.popup.QMUIPopup;
import java.util.ArrayList;
import java.util.Arrays;
......@@ -125,12 +128,8 @@ public class OrderContentPresenter extends BaseOrderPresenter<OrderContentContra
}
}
});
mOrderTopFunctionAdapter.setOnItemClickListener(new OrderTopFunctionAdapter.OnItemClickListener() {
mOrderTopFunctionAdapter.setOnItemClickListener((datasBean, position) -> {
@Override
public void onItemClick(Function datasBean, int position) {
}
});
}
......@@ -219,7 +218,7 @@ public class OrderContentPresenter extends BaseOrderPresenter<OrderContentContra
public void onNext(@NonNull BaseRespose info) {
if (info != null && info.isSuccess()) {
CC.obtainBuilder("Component.Print")
.setActionName("print_order")
.setActionName("printActivity")
.build()
.callAsync((cc, result) -> {
if (result.isSuccess()) {
......@@ -227,7 +226,6 @@ public class OrderContentPresenter extends BaseOrderPresenter<OrderContentContra
mRootView.printSuccess();
}
});
// mRootView.killMyself();
//打印
} else {
mRootView.showMessage("印單失敗!");
......@@ -255,8 +253,10 @@ public class OrderContentPresenter extends BaseOrderPresenter<OrderContentContra
OrderRequest request = new OrderRequest();
request.setOrderDetails(foodBeanToFoodRequest(foodList));
request.setPerson(OpenTableContract.getDefault().getTableBean().getPeopleNumber());
request.setTableId(OpenTableContract.getDefault().getTableBean().getId());
return request;
}
private OrderRequest getAddOrderFoodRequest(List<Food> foodList) {
OrderRequest request = new OrderRequest();
request.setOrderDetails(foodBeanToFoodRequest(foodList));
......@@ -278,5 +278,4 @@ public class OrderContentPresenter extends BaseOrderPresenter<OrderContentContra
}
}
......@@ -261,8 +261,8 @@ public class TablePresenter extends BasePresenter<TableContract.Model, TableCont
if (respose.isSuccess()) {
if (showMessage)
mRootView.showMessage("重置成功!");
// if (showMessage)
// mRootView.showMessage("重置成功!");
mRootView.canceOperat();
......
......@@ -5,6 +5,7 @@ import android.content.Intent;
import android.os.Bundle;
import android.os.SystemClock;
import android.text.TextUtils;
import android.util.Log;
import android.util.SparseArray;
import android.view.View;
import android.widget.BaseAdapter;
......@@ -273,34 +274,24 @@ public class MealStandActivity extends BaseActivity<MealStandPresenter> implemen
for (int i = 0; i < totalPage; i++) {
//每个页面都是inflate出一个新实例
LineGridView gridView = (LineGridView) View.inflate(this, R.layout.meal_food_group_grid, null);
gridView.setNumColumns(6);
gridView.setNumColumns(GoldConstants.foodGriupColCount);
HorizontalGridViewAdpter horizontalGridViewAdpter = new HorizontalGridViewAdpter(this, foodGroupList, i, mPageSize);
gridView.setAdapter(horizontalGridViewAdpter);
if (i == 0) {
mFoodGroupGridViewAdapter = horizontalGridViewAdpter;
}
//添加item点击监听
horizontalGridViewAdpter.setOnItemClickListener(new HorizontalGridViewAdpter.OnItemClickListener() {
@Override
public void onItemClick(Food food, int position) {
recordOperat(true);
if (!ViewUtils.isFastClick2()) {
return;
}
if (!foodGroupConditionFilter(food, false)) {
return;
}
mFoodGroupGridViewAdapter = horizontalGridViewAdpter;
mPresenter.setRvMealClicked(false);
mPresenter.changedMealByParentId(food.getId());
horizontalGridViewAdpter.setOnItemClickListener((food, position) -> {
recordOperat(true);
if (!ViewUtils.isFastClick2()) {
return;
}
if (!foodGroupConditionFilter(food, false)) {
return;
}
mFoodGroupGridViewAdapter = horizontalGridViewAdpter;
mPresenter.setRvMealClicked(false);
mPresenter.changedMealByParentId(food.getId());
});
//每一个GridView作为一个View对象添加到ViewPager集合中
viewPagerList.add(gridView);
......
......@@ -79,6 +79,7 @@ public class OrderContentActivity extends BaseActivity<OrderContentPresenter> im
private ChooseNumberDialog chooseNumberDialog;
public static final int BILL_CODE = 1002;
@Override
public void setupActivityComponent(@NonNull AppComponent appComponent) {
DaggerOrderContentComponent //如找不到该类,请编译一下项目
......@@ -325,8 +326,8 @@ public class OrderContentActivity extends BaseActivity<OrderContentPresenter> im
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == BILL_CODE){
if(resultCode == Activity.RESULT_OK){
if (requestCode == BILL_CODE) {
if (resultCode == Activity.RESULT_OK) {
setResult(Activity.RESULT_OK, null);
killMyself();
}
......
......@@ -3,16 +3,14 @@ package com.gingersoft.gsa.cloud.table.mvp.ui.activity;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.gingersoft.gsa.cloud.base.common.bean.mealManage.OpenTableContract;
import com.gingersoft.gsa.cloud.base.qmui.arch.Utils;
import com.gingersoft.gsa.cloud.base.utils.MoneyUtil;
import com.gingersoft.gsa.cloud.base.utils.VibratorUtils;
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.ViewUtils;
import com.gingersoft.gsa.cloud.table.R;
......@@ -20,7 +18,6 @@ import com.gingersoft.gsa.cloud.table.R2;
import com.gingersoft.gsa.cloud.table.di.component.DaggerOrderPayComponent;
import com.gingersoft.gsa.cloud.table.mvp.contract.OrderPayContract;
import com.gingersoft.gsa.cloud.table.mvp.model.bean.BillMethodBean;
import com.gingersoft.gsa.cloud.table.mvp.model.constant.MealConstant;
import com.gingersoft.gsa.cloud.table.mvp.presenter.OrderPayPresenter;
import com.gingersoft.gsa.cloud.table.mvp.ui.adapter.BillMethodAdapter;
import com.gingersoft.gsa.cloud.table.mvp.ui.adapter.BillMoneyAdapter;
......
......@@ -6,6 +6,7 @@ import android.os.Bundle;
import android.os.Message;
import android.text.TextUtils;
import android.util.DisplayMetrics;
import android.util.Log;
import android.util.TypedValue;
import android.view.View;
import android.widget.LinearLayout;
......
......@@ -60,7 +60,7 @@ public class HorizontalGridViewAdpter extends BaseAdapter {
if (convertView == null) {
holder = new ViewHolder();
convertView = View.inflate(context, R.layout.meal_item_name, null);
holder.tv_name = (TextView) convertView.findViewById(R.id.tv_text);
holder.tv_name = convertView.findViewById(R.id.tv_text);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
......
......@@ -101,32 +101,9 @@ public class FoodAdapter extends DefaultAdapter<Food> {
setColor(datasBean);
setStatus(datasBean);
setOnItemClickListener(new OnViewClickListener() {
@Override
public void onViewClick(View view, int position) {
if (ViewUtils.isFastClick2()) {
if (currentSelectPosition == 0 || currentSelectPosition != position) {
if (currentSelectPosition < mInfos.size()) {
//重置上次选中item的颜色
mInfos.get(currentSelectPosition).setSelected(false);
notifyItemChanged(currentSelectPosition);
}
//设置当前选中item颜色
datasBean.setSelected(true);
notifyItemChanged(position);
//保存上次操作的position
currentSelectPosition = position;
}
if (mOnItemClickListener != null)
mOnItemClickListener.onItemClick(datasBean, position);
}
setOnItemClickListener((view, position1) -> {
if (ViewUtils.isFastClick2()) {
resetSelect(position1, datasBean);
}
});
}
......@@ -222,6 +199,35 @@ public class FoodAdapter extends DefaultAdapter<Food> {
}
}
public void resetSelect(int position, Food datasBean) {
if(position < 0) {
if (mInfos != null && mInfos.size() > currentSelectPosition) {
//重置上次選中
mInfos.get(currentSelectPosition).setSelected(false);
notifyItemChanged(currentSelectPosition);
}
return;
}
if (currentSelectPosition == 0 || currentSelectPosition != position) {
if (currentSelectPosition < mInfos.size()) {
//重置上次选中item的颜色
mInfos.get(currentSelectPosition).setSelected(false);
notifyItemChanged(currentSelectPosition);
}
//设置当前选中item颜色
datasBean.setSelected(true);
notifyItemChanged(position);
//保存上次操作的position
currentSelectPosition = position;
}
if (mOnItemClickListener != null)
mOnItemClickListener.onItemClick(mInfos.get(position), position);
}
public int getCurrentSelectPosition() {
return currentSelectPosition;
......
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