lmw
2024-09-04 f4a6d4f0996238f9c85e4986deffe69a1c8256e6
员工流程
12个文件已修改
9个文件已添加
1054 ■■■■ 已修改文件
app/build.gradle 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/cangui.jks 补丁 | 查看 | 原始文档 | blame | 历史
app/release/cangui-1.0-2024-09-04.apk 补丁 | 查看 | 原始文档 | blame | 历史
app/release/output.json 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/AndroidManifest.xml 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/lotaai/canguiayw/CunOjbActivity.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/lotaai/canguiayw/LoginActivity.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/lotaai/canguiayw/OpenDoorFragment.java 101 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/lotaai/canguiayw/PickCodeListActivity.java 114 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/lotaai/canguiayw/StartSaveActivity.java 84 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/lotaai/canguiayw/TakeActivity.java 77 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/lotaai/canguiayw/common/HttpUrlDefine.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/lotaai/canguiayw/view/GridTableAdapterNew.java 76 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/lotaai/canguiayw/view/TipDialog.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/drawable/bg_box.xml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/drawable/bg_oragne_line_6.xml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/activity_code_list.xml 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/activity_startsave.xml 377 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/framgment_opendoor.xml 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/item_box_new.xml 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/item_code.xml 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/build.gradle
@@ -1,20 +1,55 @@
apply plugin: 'com.android.application'
android {
    compileSdkVersion 32
    compileSdkVersion 30
   /* buildToolsVersion "33.0.0"*/
    defaultConfig {
        applicationId "com.lotaai.canguiayw"
        minSdkVersion 22
        targetSdkVersion 33
        targetSdkVersion 30
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }
    //签名
    signingConfigs {
        release {
            storeFile file("cangui.jks")
            storePassword "sinata"
            keyAlias "cangui"
            keyPassword "sinata"
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
            applicationVariants.all { variant ->
                // 更新至Android Studio 3.3 gradle 4.10.1
                variant.outputs.all {
                    outputFileName = "cangui-${defaultConfig.versionName}-${new Date().format("yyyy-MM-dd" , TimeZone.getTimeZone("GMT+08")) }.apk"
                }
            }
//            ndk {
//                abiFilters "armeabi-v7a","arm64-v8a" // 保留这种架构的CPU
//            }
        }
        debug {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.release
//            ndk {
//                abiFilters "armeabi-v7a" ,"arm64-v8a" // 保留这种架构的CPU
//            }
        }
    }
app/cangui.jks
Binary files differ
app/release/cangui-1.0-2024-09-04.apk
Binary files differ
app/release/output.json
@@ -1 +1 @@
[{"outputType":{"type":"APK"},"apkData":{"type":"MAIN","splits":[],"versionCode":2,"versionName":"1.2","enabled":true,"outputFile":"app-release.apk","fullName":"release","baseName":"release"},"path":"app-release.apk","properties":{}}]
[{"outputType":{"type":"APK"},"apkData":{"type":"MAIN","splits":[],"versionCode":1,"versionName":"1.0","enabled":true,"outputFile":"cangui-1.0-2024-09-04.apk","fullName":"release","baseName":"release","dirName":""},"path":"cangui-1.0-2024-09-04.apk","properties":{}}]
app/src/main/AndroidManifest.xml
@@ -47,6 +47,7 @@
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".PickCodeListActivity" />
        <service
            android:name=".device.service.CanGuiService"
app/src/main/java/com/lotaai/canguiayw/CunOjbActivity.java
@@ -1,6 +1,5 @@
package com.lotaai.canguiayw;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
@@ -24,6 +23,7 @@
import com.lotaai.canguiayw.device.CanguiStatus;
import com.lotaai.canguiayw.device.DeviceMessage;
import com.lotaai.canguiayw.device.MessageType;
import com.lotaai.canguiayw.view.TipDialog;
import com.pranavpandey.android.dynamic.toasts.DynamicToast;
import org.greenrobot.eventbus.EventBus;
@@ -41,11 +41,15 @@
public class CunOjbActivity extends AppCompatActivity {
    OpenDoorFragment openDoorFragment;
    public String pickupCode;
    public int isHand;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_cunobj);
        pickupCode = getIntent().getStringExtra("code");
        isHand = getIntent().getIntExtra("isHand",0);
        openDoorFragment = new OpenDoorFragment();
        getSupportFragmentManager().beginTransaction().replace(R.id.mframe, openDoorFragment).commitAllowingStateLoss();
    }
@@ -58,4 +62,18 @@
    }
    public void showResult(String msg){
        TipDialog tipDialog = new TipDialog();
        Bundle bundle = new Bundle();
        bundle.putString("msg",msg);
        tipDialog.setArguments(bundle);
        tipDialog.show(getSupportFragmentManager(),"res");
        tipDialog.callback = new TipDialog.ExitCallback() {
            @Override
            public void onExit() {
                finish();
            }
        };
    }
}
app/src/main/java/com/lotaai/canguiayw/LoginActivity.java
@@ -20,7 +20,6 @@
import com.lotaai.canguiayw.common.HttpLoggerInterceptor;
import com.lotaai.canguiayw.common.HttpUrlDefine;
import com.lotaai.canguiayw.common.SettingConfig;
import com.lotaai.canguiayw.device.service.CanGuiService;
import com.pranavpandey.android.dynamic.toasts.DynamicToast;
import java.io.IOException;
@@ -58,7 +57,9 @@
            intent.setClass(LoginActivity.this, TakeActivity.class);
            startActivity(intent);
        }else if (_side.equals("2")){
            Intent intent = new Intent();
            intent.setClass(LoginActivity.this, StartSaveActivity.class);
            startActivity(intent);
        }
        LogUtils.i("VERSION.SDK_INT:" + VERSION.SDK_INT);
        context = LoginActivity.this;
@@ -181,7 +182,9 @@
                        intent.setClass(LoginActivity.this, TakeActivity.class);
                        startActivity(intent);
                    }else if (side.equals("2")){
                        Intent intent = new Intent();
                        intent.setClass(LoginActivity.this, StartSaveActivity.class);
                        startActivity(intent);
                    }
                } else {
                    Message msg = new Message();
app/src/main/java/com/lotaai/canguiayw/OpenDoorFragment.java
@@ -12,28 +12,46 @@
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.GridView;
import android.widget.TextView;
import android.widget.ThemedSpinnerAdapter;
import androidx.fragment.app.Fragment;
import com.blankj.utilcode.util.CacheDiskUtils;
import com.blankj.utilcode.util.GsonUtils;
import com.blankj.utilcode.util.LogUtils;
import com.liys.lswitch.BaseSwitch;
import com.liys.lswitch.LSwitch;
import com.lotaai.canguiayw.common.HttpLoggerInterceptor;
import com.lotaai.canguiayw.common.HttpUrlDefine;
import com.lotaai.canguiayw.common.SettingConfig;
import com.lotaai.canguiayw.data.BaseDto;
import com.lotaai.canguiayw.device.CanGuiCommand;
import com.lotaai.canguiayw.device.CanguiStatus;
import com.lotaai.canguiayw.device.DeviceMessage;
import com.lotaai.canguiayw.device.DeviceType;
import com.lotaai.canguiayw.device.MessageType;
import com.lotaai.canguiayw.view.GridTableAdapter;
import com.lotaai.canguiayw.view.GridTableAdapterNew;
import com.pranavpandey.android.dynamic.toasts.DynamicToast;
import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.concurrent.TimeUnit;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.FormBody;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
public class OpenDoorFragment extends Fragment {
@@ -53,6 +71,7 @@
    private Button fugui003;
    private Button fugui004;
    private Button fugui005;
    private TextView tv_close;
    private int cureentSelectGui = 0;
    private boolean isCanRun = false;
@@ -119,6 +138,7 @@
        fugui003 = root.findViewById(R.id.gui003);
        fugui004 = root.findViewById(R.id.gui004);
        fugui005 = root.findViewById(R.id.gui005);
        tv_close = root.findViewById(R.id.tv_close);
        for (int g = 0; g < SettingConfig.getInstance().statusList.size(); g++) {
            if (SettingConfig.getInstance().statusList.get(g).getGuiHao() == 0) {
                if (zhugui.getVisibility() != View.VISIBLE) {
@@ -222,6 +242,13 @@
                cureentSelectGui = 5;
                initView();
            }
        });
        tv_close.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                requireActivity().finish();
            }
        });
    }
@@ -352,15 +379,23 @@
            }
        }
        Collections.sort(gridStatusList);
        GridTableAdapter adapter = new GridTableAdapter(context, gridStatusList, R.layout.framgment_tablegrid_item);
        if (gridStatusList.size() == 8){
            CanguiStatus e = new CanguiStatus();
            e.setGridNo(-1);
            gridStatusList.add(4, e);
        }
        GridTableAdapterNew adapter = new GridTableAdapterNew(context, gridStatusList, R.layout.item_box_new);
        gridtable = root.findViewById(R.id.gridtable);
        gridtable.setAdapter(adapter);
        gridtable.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                CanguiStatus cangui = gridStatusList.get(i);
                ((CunOjbActivity) getActivity()).setData(cangui);
                if (cangui.getGridNo()!=-1){
                    //存餐
                    takeCheckCode(((CunOjbActivity) getActivity()).pickupCode,0,cangui.getGridNo(),((CunOjbActivity) getActivity()).isHand);
                }
//                ((CunOjbActivity) getActivity()).setData(cangui);
               /* View item = gridtable.getChildAt(i).findViewById(R.id.gridLineLayout);
                if (checkIsSelectedAndOrRemove(cangui,true)) {
                    item.setBackgroundColor(Color.GRAY);
@@ -371,6 +406,66 @@
        });
    }
    public void takeCheckCode(String code, final int guino, final int gridno, int isHand) {
        HttpLoggerInterceptor loggingInterceptor = new HttpLoggerInterceptor(true);
        OkHttpClient client = new OkHttpClient.Builder()
                .connectTimeout(20, TimeUnit.SECONDS)//响应时间,读取时间
                .readTimeout(20, TimeUnit.SECONDS)
                .callTimeout(20, TimeUnit.SECONDS)
                .addInterceptor(loggingInterceptor)//添加日志拦截器
                .build();
        LogUtils.i(CacheDiskUtils.getInstance().getString(SettingConfig.getInstance().Cache_Device_Code), code);
        RequestBody body = new FormBody.Builder()
                .build();
        final Request request = new Request.Builder()
                .url(HttpUrlDefine.checkStatus + "?pickNum=" + code + "&boxNum=" + guino + "&cartNum=" + gridno+ "&isHand=" + isHand+ "&sn=" + CacheDiskUtils.getInstance().getString(SettingConfig.getInstance().Cache_Device_Code))
                /*  .addHeader("language", "zh-CN")*/
                .post(body)
                .build();
        client.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                requireActivity().runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        DynamicToast.makeError(context, "Request error!", 3).show();
                    }
                });
            }
            @Override
            public void onResponse(Call call, Response response) throws IOException {
                String result = response.body().string();
                LogUtils.i("获取到的数据:" + result);
                final BaseDto baseDto = GsonUtils.fromJson(result, BaseDto.class);
                requireActivity().runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        if (baseDto.getCode() == 200) {
                           byte[] command = CanGuiCommand.getInstance().controlGridCommand(guino,
                                    gridno, 1, 255, 0, 0, 0, 0);
                            DeviceMessage message = new DeviceMessage();
                            message.setMessageType(MessageType.SENDMESSAGE.ordinal());
                            message.setDeviceType(DeviceType.CANGUI.ordinal());
                            message.setMessageByte(command);
                            EventBus.getDefault().post(message);
                            // new Handler(Looper.getMainLooper()).postDelayed(() -> finish(), 3000);
                            ((CunOjbActivity)requireActivity()).showResult("Place meal into the box.");
                        } else {
                            DynamicToast.makeError(context, baseDto.getMsg(), 3).show();
                        }
                    }
                });
            }
        });
    }
    /**
     * @param status
     * @param isControl 是否从控制删除和添加,选中变不选,不选变选
app/src/main/java/com/lotaai/canguiayw/PickCodeListActivity.java
New file
@@ -0,0 +1,114 @@
package com.lotaai.canguiayw;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.TextView;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import com.alibaba.fastjson.JSONObject;
import com.blankj.utilcode.util.CacheDiskUtils;
import com.blankj.utilcode.util.LogUtils;
import com.lotaai.canguiayw.common.HttpLoggerInterceptor;
import com.lotaai.canguiayw.common.HttpUrlDefine;
import com.lotaai.canguiayw.common.SettingConfig;
import com.pranavpandey.android.dynamic.toasts.DynamicToast;
import java.io.IOException;
import java.util.concurrent.TimeUnit;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.FormBody;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
public class PickCodeListActivity extends AppCompatActivity {
    private LinearLayout llCode;
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_code_list);
        findViewById(R.id.tv_close).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                finish();
            }
        });
        llCode = findViewById(R.id.ll_code);
        getCode();
    }
    public void getCode() {
        HttpLoggerInterceptor loggingInterceptor = new HttpLoggerInterceptor(true);
        OkHttpClient client = new OkHttpClient.Builder()
                .connectTimeout(20, TimeUnit.SECONDS)//响应时间,读取时间
                .readTimeout(20, TimeUnit.SECONDS)
                .callTimeout(20, TimeUnit.SECONDS)
                .addInterceptor(loggingInterceptor)//添加日志拦截器
                .build();
        RequestBody body = new FormBody.Builder()
                .build();
        final Request request = new Request.Builder()
                .url(HttpUrlDefine.list + "?sn=" + CacheDiskUtils.getInstance().getString(SettingConfig.getInstance().Cache_Device_Code))
                .post(body)
                .build();
        client.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                Message msg = new Message();
                msg.what = 0;
                msg.obj = "Request failed";
                showHandler.sendMessage(msg);
                LogUtils.e(e);
            }
            @Override
            public void onResponse(Call call, Response response) throws IOException {
                String result = response.body().string();
                LogUtils.i("获取到的数据:" + result);
                final JSONObject obj = JSONObject.parseObject(result);
                if ("200".equals(obj.getString("code"))) {
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            String[] data = obj.getString("data").split(",");
                            for (int i =0;i<data.length;i++){
                                View view = getLayoutInflater().inflate(R.layout.item_code, llCode, false);
                                ((TextView)view.findViewById(R.id.tv_code)).setText(data[i]);
                                llCode.addView(view);
                            }
                        }
                    });
                } else {
                    Message msg = new Message();
                    msg.what = 0;
                    msg.obj = obj.getString("msg");
                    showHandler.sendMessage(msg);
                }
            }
        });
    }
    private Handler showHandler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            if (msg.what == 0) {
                DynamicToast.makeError(PickCodeListActivity.this, msg.obj.toString(), 3).show();
            } else if (msg.what == 1) {
                DynamicToast.makeSuccess(PickCodeListActivity.this, msg.obj.toString(), 3).show();
            } else {
                DynamicToast.makeWarning(PickCodeListActivity.this, msg.obj.toString(), 3).show();
            }
        }
    };
}
app/src/main/java/com/lotaai/canguiayw/StartSaveActivity.java
@@ -1,6 +1,7 @@
package com.lotaai.canguiayw;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
@@ -26,7 +27,9 @@
import com.lotaai.canguiayw.device.DeviceMessage;
import com.lotaai.canguiayw.device.DeviceType;
import com.lotaai.canguiayw.device.MessageType;
import com.lotaai.canguiayw.device.service.CanGuiService;
import com.lotaai.canguiayw.device.service.CrontrolGridModel;
import com.lotaai.canguiayw.view.TipDialog;
import com.pranavpandey.android.dynamic.toasts.DynamicToast;
import org.greenrobot.eventbus.EventBus;
@@ -45,20 +48,22 @@
public class StartSaveActivity extends AppCompatActivity {
    private Context context;
    private EditText editText;
    CanguiStatus canguidata;
    private TextView titleinfo;
    private TextView tv_see_code;
//    CanguiStatus canguidata;
    String ss;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_startsave);
        canguidata = (CanguiStatus) getIntent().getSerializableExtra("info");
        initView();
        ss = CrontrolGridModel.getGridNoStr(canguidata.getGuiHao(), canguidata.getGridNo());
        titleinfo.setText("选择的格子号:" + ss);
//        canguidata = (CanguiStatus) getIntent().getSerializableExtra("info");
//        ss = CrontrolGridModel.getGridNoStr(canguidata.getGuiHao(), canguidata.getGridNo());
        context = StartSaveActivity.this;
        Intent startIntent = new Intent(context, CanGuiService.class);
        startService(startIntent);
        editText = (EditText) findViewById(R.id.edt_borrow_case_number);
        tv_see_code = (TextView) findViewById(R.id.tv_see_code);
        editText.setInputType(InputType.TYPE_NULL); // 屏蔽软键盘
        DynamicToast.Config.getInstance().setTextSize(30).apply();
        // 软键盘设置统一按钮监听方法,数字键直接将text内容填充到edittext中,删除和确认才设置事件
@@ -76,20 +81,31 @@
                    // 调用后台
                    String gridNo = editable.toString();
                    if (null == gridNo || "".equals(gridNo.trim())) {
                        DynamicToast.makeError(context, "取餐码不能为空。", 3).show();
                        showResult("Please enter pickup code.");
                        return;
                    } else {
                        if (gridNo.length() != 6) {
                            editText.setText("");
                            DynamicToast.makeError(context, "取餐码输入错误,请重试。", 3).show();
                            showResult("The pickup code input is incorrect,\nplease try again.");
                            return;
                        }
                        //调用判断是否可以取餐
                        editText.setText("");
                        takeCheckCode(gridNo, canguidata.getGuiHao(), canguidata.getGridNo());
//                        takeCheckCode(gridNo, canguidata.getGuiHao(), canguidata.getGridNo());
                        checkCode(gridNo,0);
                    }
                } else if (key == R.id.tv_by_hand) {
                    // 调用后台
                    String gridNo = editable.toString();
                    if (null == gridNo || "".equals(gridNo.trim())) {
                        showResult("Please enter pickup code.");
                        return;
                    } else {
                        //调用判断是否可以取餐
                        editText.setText("");
//                        takeCheckCode(gridNo, canguidata.getGuiHao(), canguidata.getGridNo());
                        checkCode(gridNo,1);
                    }
                } else {
                    Button button = (Button) v;
                    editable.insert(index, button.getText());
@@ -108,6 +124,7 @@
        View view0 = findViewById(R.id.borrow_bt0);
        View view11 = findViewById(R.id.borrow_bt_delete);
        View view12 = findViewById(R.id.borrow_bt_confirm);
        View view13 = findViewById(R.id.tv_by_hand);
        view1.setOnClickListener(clickListener);
        view2.setOnClickListener(clickListener);
        view3.setOnClickListener(clickListener);
@@ -120,7 +137,15 @@
        view0.setOnClickListener(clickListener);
        view11.setOnClickListener(clickListener);
        view12.setOnClickListener(clickListener);
        view13.setOnClickListener(clickListener);
        tv_see_code.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(StartSaveActivity.this, PickCodeListActivity.class);
                startActivity(intent);
            }
        });
    }
    public void backMian(View view) {
@@ -130,7 +155,7 @@
        finish();
    }
    public void takeCheckCode(String code, int guino, int gridno) {
    public void checkCode(final String code, final int isHand) {
        HttpLoggerInterceptor loggingInterceptor = new HttpLoggerInterceptor(true);
        OkHttpClient client = new OkHttpClient.Builder()
                .connectTimeout(20, TimeUnit.SECONDS)//响应时间,读取时间
@@ -138,13 +163,12 @@
                .callTimeout(20, TimeUnit.SECONDS)
                .addInterceptor(loggingInterceptor)//添加日志拦截器
                .build();
        LogUtils.i(CacheDiskUtils.getInstance().getString(SettingConfig.getInstance().Cache_Device_Code), code);
        String sn = CacheDiskUtils.getInstance().getString(SettingConfig.getInstance().Cache_Device_Code);
        RequestBody body = new FormBody.Builder()
                .build();
        final Request request = new Request.Builder()
                .url(HttpUrlDefine.checkStatus + "?pickNum=" + code + "&boxNum=" + guino + "&cartNum=" + gridno)
                .url(HttpUrlDefine.check + "?pickNum=" + code + "&sn=" + sn+ "&isHand=" + isHand)
                /*  .addHeader("language", "zh-CN")*/
                .post(body)
                .build();
@@ -154,7 +178,7 @@
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        DynamicToast.makeError(context, "请求失败!", 3).show();
                        DynamicToast.makeError(context, "Request error!", 3).show();
                    }
                });
@@ -169,25 +193,16 @@
                    @Override
                    public void run() {
                        if (baseDto.getCode() == 200) {
                           /* byte[] command = CanGuiCommand.getInstance().controlGridCommand(guino,
                                    gridno, 1, 255, 0, 0, 0, 0);
                            DeviceMessage message = new DeviceMessage();
                            message.setMessageType(MessageType.SENDMESSAGE.ordinal());
                            message.setDeviceType(DeviceType.CANGUI.ordinal());
                            message.setMessageByte(command);
                            EventBus.getDefault().post(message);*/
                            DynamicToast.makeSuccess(context, "订单已创建,请将餐食放入" + ss + "柜中", 3).show();
                            // new Handler(Looper.getMainLooper()).postDelayed(() -> finish(), 3000);
                            finish();
                            //取餐码可用,去选柜子
                            Intent intent = new Intent(StartSaveActivity.this, CunOjbActivity.class);
                            intent.putExtra("code",code);
                            intent.putExtra("isHand",isHand);
                            startActivity(intent);
                        } else {
                            DynamicToast.makeError(context, baseDto.getMsg(), 3).show();
                            showResult(baseDto.getMsg());
                        }
                    }
                });
            }
        });
    }
@@ -258,6 +273,13 @@
    };
    private void initView() {
        titleinfo = (TextView) findViewById(R.id.titleinfo);
    }
    public void showResult(String msg){
        TipDialog tipDialog = new TipDialog();
        Bundle bundle = new Bundle();
        bundle.putString("msg",msg);
        tipDialog.setArguments(bundle);
        tipDialog.show(getSupportFragmentManager(),"res");
    }
}
app/src/main/java/com/lotaai/canguiayw/TakeActivity.java
@@ -97,14 +97,14 @@
                    // 调用后台
                    String gridNo = editable.toString();
                    if (null == gridNo || "".equals(gridNo.trim())) {
                        showResult("Please enter pickup code.");
                        showResult("Please enter pickup code.",false);
                        return;
                    } else {
                        if (gridNo.length() !=6) {
                            editText.setText("");
                            showResult("The pickup code input is incorrect,\nplease try again.");
                            return;
                        }
//                        if (gridNo.length() !=6) {
//                            editText.setText("");
//                            showResult("The pickup code input is incorrect,\nplease try again.");
//                            return;
//                        }
                        //调用判断是否可以取餐
                        editText.setText("");
                        takeCheckCode(gridNo);
@@ -156,13 +156,11 @@
                .callTimeout(20, TimeUnit.SECONDS)
                .addInterceptor(loggingInterceptor)//添加日志拦截器
                .build();
        LogUtils.i(CacheDiskUtils.getInstance().getString(SettingConfig.getInstance().Cache_Device_Code), code);
        String sn = CacheDiskUtils.getInstance().getString(SettingConfig.getInstance().Cache_Device_Code);
        RequestBody body = new FormBody.Builder()
                .build();
        final Request request = new Request.Builder()
                .url(HttpUrlDefine.pickOrder+"?pickNum="+code)
                .url(HttpUrlDefine.pickOrder+"?pickNum="+code+"&sn="+sn)
                /*  .addHeader("language", "zh-CN")*/
                .post(body)
                .build();
@@ -196,9 +194,9 @@
                            message.setMessageByte(command);
                            EventBus.getDefault().post(message);
                            showResult("Door opened succcessfully! \n" +
                                    "Please pickup your meal.");
                                    "Please pickup your meal.",true);
                        }else{
                            showResult(baseDto.getMsg());
                            showResult(baseDto.getMsg(),false);
                        }
                    }
                });
@@ -206,64 +204,13 @@
        });
    }
    public void showResult(String msg){
    public void showResult(String msg,boolean isCountdown){
        TipDialog tipDialog = new TipDialog();
        Bundle bundle = new Bundle();
        bundle.putString("msg",msg);
        bundle.putBoolean("isCountdown",isCountdown);
        tipDialog.setArguments(bundle);
        tipDialog.show(getSupportFragmentManager(),"res");
    }
    public void pickOrder(String code) {
        HttpLoggerInterceptor loggingInterceptor = new HttpLoggerInterceptor(true);
        OkHttpClient client = new OkHttpClient.Builder()
                .connectTimeout(20, TimeUnit.SECONDS)//响应时间,读取时间
                .readTimeout(20, TimeUnit.SECONDS)
                .callTimeout(20, TimeUnit.SECONDS)
                .addInterceptor(loggingInterceptor)//添加日志拦截器
                .build();
        LogUtils.i(CacheDiskUtils.getInstance().getString(SettingConfig.getInstance().Cache_Device_Code), code);
        RequestBody body = new FormBody.Builder()
                .build();
        final Request request = new Request.Builder()
                .url(HttpUrlDefine.pickOrder+"?pickNum="+code)
                /*  .addHeader("language", "zh-CN")*/
                .post(body)
                .build();
        client.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        DynamicToast.makeError(context, "请求失败!", 3).show();
                    }
                });
            }
            @Override
            public void onResponse(Call call, Response response) throws IOException {
                String result = response.body().string();
                LogUtils.i("获取到的数据:" + result);
                final BaseDto baseDto = GsonUtils.fromJson(result, BaseDto.class);
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        if (baseDto.isData()) {
                            DynamicToast.makeSuccess(context, "验证成功!", 3).show();
                        }else{
                            DynamicToast.makeError(context, "验证失败!", 3).show();
                        }
                    }
                });
            }
        });
    }
app/src/main/java/com/lotaai/canguiayw/common/HttpUrlDefine.java
@@ -1,11 +1,11 @@
package com.lotaai.canguiayw.common;
public class HttpUrlDefine {
    private static String rootHost = "http://192.168.110.111:8080/";
//    private static String rootHost = "http://192.168.110.111:8080/";
    //private static String rootHost = "http://221.182.45.100:8081/";
   // private static String rootHost = " http://18.130.221.37:8080/";
//    private static String rootHost = "http://13.42.24.196:8080/";
    private static String rootHost = "http://13.42.24.196:8080/";
    public static String  equipmentBind = rootHost + "/lotaai-api/api/eq/equipmentBind";
    public static String  equipmentLogin = rootHost + "/lotaai-api/api/eq/equipmentLogin";
    public static String  equipmentCunCan = rootHost + "/lotaai-api/api/eq/putInFood";
@@ -20,5 +20,7 @@
    public static String  login = rootHost + "equipment/equipment/deviceBlind1";
    public static String  adver = rootHost + "order/order/get/adver";
    public static String  check = rootHost + "order/order/check";
    public static String  list = rootHost + "order/order/get/list";
}
app/src/main/java/com/lotaai/canguiayw/view/GridTableAdapterNew.java
New file
@@ -0,0 +1,76 @@
package com.lotaai.canguiayw.view;
import android.content.Context;
import android.graphics.Color;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import androidx.annotation.LayoutRes;
import com.lotaai.canguiayw.R;
import com.lotaai.canguiayw.device.CanguiStatus;
import com.lotaai.canguiayw.device.service.CrontrolGridModel;
import java.util.List;
public class GridTableAdapterNew extends BaseAdapter {
    private List<CanguiStatus> mData;
    private int mResource;
    private Context mContext;
    public GridTableAdapterNew(Context context, List<CanguiStatus> data, @LayoutRes int resource ){
            this.mContext = context;
            this.mResource = resource;
            this.mData = data;
    }
    @Override
    public int getCount() {
        return mData.size();
    }
    @Override
    public Object getItem(int i) {
        return mData.get(i);
    }
    @Override
    public long getItemId(int i) {
        return i;
    }
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder vh = null;
        if (convertView == null) {
            convertView = LayoutInflater.from(mContext).inflate(mResource, null);
            vh = new ViewHolder();
            vh.gridNo=  (TextView) convertView.findViewById(R.id.gridNo);
            vh.gridLineLayout = (LinearLayout)convertView.findViewById(R.id.gridLineLayout);
            convertView.setTag(vh);
        }
        vh = (ViewHolder) convertView.getTag();
        if (mData != null && mData.size() > 0) {
           CanguiStatus status  =   mData.get(position);
           if (status.getGridNo() == -1){
               vh.gridNo.setText("");
               vh.gridLineLayout.setBackgroundResource(0);
           }
            String ss = CrontrolGridModel.getGridNoStr(status.getGuiHao(),status.getGridNo());
            vh.gridNo.setText(ss);
           // vh.gridNo.setText(Integer.toString(status.getGridNo()));
        }
        return convertView;
    }
    class ViewHolder {
        TextView gridNo;
        LinearLayout gridLineLayout;
    }
}
app/src/main/java/com/lotaai/canguiayw/view/TipDialog.java
@@ -1,6 +1,8 @@
package com.lotaai.canguiayw.view;
import android.content.DialogInterface;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
@@ -14,6 +16,7 @@
import com.lotaai.canguiayw.R;
public class TipDialog extends DialogFragment {
    private CountDownTimer timer;
    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
@@ -41,7 +44,8 @@
        super.onViewCreated(view, savedInstanceState);
        TextView tvMsg = view.findViewById(R.id.tv_msg);
        tvMsg.setText(getArguments().getString("msg"));
        view.findViewById(R.id.tv_action).setOnClickListener(new View.OnClickListener() {
        final TextView tvAction = view.findViewById(R.id.tv_action);
        tvAction.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (callback!=null)
@@ -49,6 +53,28 @@
                dismissAllowingStateLoss();
            }
        });
        boolean isCountdown = getArguments().getBoolean("isCountdown", false);
        if (isCountdown){
            timer = new CountDownTimer(5000,1000){
                @Override
                public void onTick(long l) {
                    tvAction.setText(((l/1000)+1)+"S");
                }
                @Override
                public void onFinish() {
                    dismissAllowingStateLoss();
                }
            };
            timer.start();
        }
    }
    @Override
    public void onDismiss(@NonNull DialogInterface dialog) {
        super.onDismiss(dialog);
        if (timer!=null)
            timer.cancel();
    }
    public interface ExitCallback {
app/src/main/res/drawable/bg_box.xml
New file
@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="#29FFFFFF"/>
    <corners android:radius="3dp"/>
    <stroke android:color="@color/white" android:width="1dp"/>
</shape>
app/src/main/res/drawable/bg_oragne_line_6.xml
New file
@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <corners android:radius="6dp"/>
    <solid android:color="@color/white"/>
    <stroke android:color="@color/colorPrimary" android:width="1dp"/>
</shape>
app/src/main/res/layout/activity_code_list.xml
New file
@@ -0,0 +1,39 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:background="@color/black">
    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:background="@drawable/bg_white_3"
        android:layout_marginHorizontal="90dp"
        android:layout_marginVertical="70dp"
        android:layout_height="match_parent">
        <TextView
            android:id="@+id/tv_close"
            android:layout_width="120dp"
            android:layout_height="40dp"
            android:textSize="18sp"
            android:gravity="center"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            android:textColor="@color/colorPrimary"
            android:layout_marginBottom="28dp"
            app:layout_constraintBottom_toBottomOf="parent"
            android:textStyle="bold"
            android:text="Close"
            android:background="@drawable/bg_oragne_line_6"/>
        <ScrollView
            android:layout_width="match_parent"
            android:layout_height="0dp"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintBottom_toTopOf="@id/tv_close">
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:id="@+id/ll_code"
                android:orientation="vertical"/>
        </ScrollView>
    </androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
app/src/main/res/layout/activity_startsave.xml
@@ -10,200 +10,231 @@
    android:orientation="vertical"
    tools:context=".TakeActivity">
    <RelativeLayout
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/tv_see_code"
        android:layout_gravity="end"
        android:layout_marginTop="50dp"
        android:layout_marginEnd="15dp"
        android:text="Manual pickuo code"
        android:textSize="13sp"
        android:background="@drawable/bg_white_3"
        android:padding="10dp"
        />
    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="5">
        android:layout_height="match_parent">
        <ImageButton
            android:layout_width="80dp"
            android:layout_height="80dp"
            android:layout_alignParentRight="true"
            android:layout_centerVertical="true"
            android:layout_gravity="center"
            android:alpha="1"
            android:background="@drawable/back_go_button"
            android:onClick="backMian"
            android:scaleType="centerCrop"
            android:src="@mipmap/fanhui" />
        <TextView
            android:id="@+id/titleinfo"
            android:layout_width="wrap_content"
            android:layout_height="0dp"
            android:layout_marginTop="19dp"
            android:background="@null"
            android:gravity="center"
            android:text="Please enter pickup code and place meal"
            android:textAlignment="center"
            android:textColor="@color/white"
            android:textColorHint="@color/white"
            android:textSize="25sp"
            android:textStyle="bold"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toTopOf="parent"/>
        <EditText
            android:id="@+id/edt_borrow_case_number"
            android:layout_width="0dp"
            android:layout_height="65dp"
            android:background="@drawable/bg_white_3"
            android:layout_marginTop="29dp"
            android:gravity="center"
            android:inputType="number"
            android:textAlignment="center"
            android:textColor="@color/black"
            android:textColorHint="@color/white"
            android:textSize="24sp"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintStart_toStartOf="@id/keyboard"
            app:layout_constraintEnd_toEndOf="@id/keyboard"
            app:layout_constraintTop_toBottomOf="@id/titleinfo" />
        <androidx.constraintlayout.widget.ConstraintLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent">
        <TableLayout
            android:id="@+id/keyboard"
            android:layout_width="390dp"
            android:layout_height="219dp"
            android:stretchColumns="*"
            app:layout_constraintTop_toBottomOf="@id/edt_borrow_case_number"
            android:layout_marginTop="15dp"
            android:paddingVertical="6dp"
            android:paddingHorizontal="4dp"
            android:layout_marginHorizontal="29dp"
            android:background="@drawable/bg_grey_6dp"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent">
            <TextView
                android:id="@+id/titleinfo"
                android:layout_width="wrap_content"
                android:layout_height="0dp"
                android:layout_marginTop="16dp"
                android:background="@null"
                android:gravity="center"
                android:text="选择的柜子号:"
                android:textAlignment="center"
                android:textColor="@color/white"
                android:textColorHint="@color/white"
                android:textSize="30dp"
                app:layout_constraintLeft_toLeftOf="parent"
                app:layout_constraintRight_toRightOf="parent"
                app:layout_constraintTop_toTopOf="parent"
                app:layout_constraintWidth_percent="0.5" />
            <EditText
                app:layout_constraintTop_toBottomOf="@+id/titleinfo"
                android:id="@+id/edt_borrow_case_number"
            <TableRow
                android:layout_width="0dp"
                app:layout_constraintWidth_percent="0.5"
                android:layout_height="0dp"
                android:background="@null"
                android:layout_marginTop="10dp"
                android:gravity="center"
                android:hint="请输入取餐码"
                android:inputType="number"
                android:textAlignment="center"
                android:textColor="@color/white"
                android:textColorHint="@color/white"
                android:textSize="30dp"
                app:layout_constraintHeight_percent="0.15"
                app:layout_constraintLeft_toLeftOf="parent"
                app:layout_constraintRight_toRightOf="parent"
                />
                android:layout_weight="2">
            <TableLayout
                <Button
                    android:id="@+id/borrow_bt1"
                    android:layout_width="wrap_content"
                    android:layout_height="match_parent"
                    android:background="@drawable/number_button_left"
                    android:text="1"
                    android:textSize="24sp" />
                <Button
                    android:id="@+id/borrow_bt2"
                    android:layout_width="wrap_content"
                    android:layout_height="match_parent"
                    android:layout_marginStart="8dp"
                    android:background="@drawable/number_button_mid"
                    android:text="2"
                    android:textSize="24sp" />
                <Button
                    android:id="@+id/borrow_bt3"
                    android:layout_width="wrap_content"
                    android:layout_height="match_parent"
                    android:layout_marginStart="8dp"
                    android:background="@drawable/number_button_right"
                    android:text="3"
                    android:textSize="24sp" />
            </TableRow>
            <TableRow
                android:layout_width="0dp"
                app:layout_constraintDimensionRatio="2:1"
                android:layout_height="0dp"
                android:layout_alignParentBottom="true"
                android:layout_centerHorizontal="true"
                android:stretchColumns="*"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintHeight_percent="0.6"
                app:layout_constraintLeft_toLeftOf="parent"
                app:layout_constraintRight_toRightOf="parent">
                android:layout_marginTop="6dp"
                android:layout_weight="2">
                <TableRow
                    android:layout_width="0dp"
                    android:layout_height="0dp"
                    android:layout_weight="2">
                <Button
                    android:id="@+id/borrow_bt4"
                    android:layout_width="wrap_content"
                    android:layout_height="match_parent"
                    android:background="@drawable/number_button_left"
                    android:text="4"
                    android:textSize="24sp" />
                    <Button
                        android:id="@+id/borrow_bt1"
                        android:layout_width="wrap_content"
                        android:layout_height="match_parent"
                        android:background="@drawable/number_button_left"
                        android:text="1"
                        android:textSize="30sp" />
                <Button
                    android:id="@+id/borrow_bt5"
                    android:layout_width="wrap_content"
                    android:layout_height="match_parent"
                    android:background="@drawable/number_button_mid"
                    android:text="5"
                    android:layout_marginStart="8dp"
                    android:textSize="24sp" />
                    <Button
                        android:id="@+id/borrow_bt2"
                        android:layout_width="wrap_content"
                        android:layout_height="match_parent"
                        android:background="@drawable/number_button_mid"
                        android:text="2"
                        android:textSize="30sp" />
                <Button
                    android:id="@+id/borrow_bt6"
                    android:layout_width="wrap_content"
                    android:layout_height="match_parent"
                    android:background="@drawable/number_button_right"
                    android:text="6"
                    android:layout_marginStart="8dp"
                    android:textSize="24sp" />
            </TableRow>
                    <Button
                        android:id="@+id/borrow_bt3"
                        android:layout_width="wrap_content"
                        android:layout_height="match_parent"
                        android:background="@drawable/number_button_right"
                        android:text="3"
                        android:textSize="30sp" />
                </TableRow>
            <TableRow
                android:layout_width="0dp"
                android:layout_height="0dp"
                android:layout_marginTop="6dp"
                android:layout_weight="2">
                <TableRow
                    android:layout_width="0dp"
                    android:layout_height="0dp"
                    android:layout_weight="2">
                <Button
                    android:id="@+id/borrow_bt7"
                    android:layout_width="wrap_content"
                    android:layout_height="match_parent"
                    android:background="@drawable/number_button_left"
                    android:text="7"
                    android:textSize="24sp" />
                    <Button
                        android:id="@+id/borrow_bt4"
                        android:layout_width="wrap_content"
                        android:layout_height="match_parent"
                        android:background="@drawable/number_button_left"
                        android:text="4"
                        android:textSize="30sp" />
                <Button
                    android:id="@+id/borrow_bt8"
                    android:layout_width="wrap_content"
                    android:layout_height="match_parent"
                    android:background="@drawable/number_button_mid"
                    android:text="8"
                    android:layout_marginStart="8dp"
                    android:textSize="24sp" />
                    <Button
                        android:id="@+id/borrow_bt5"
                        android:layout_width="wrap_content"
                        android:layout_height="match_parent"
                        android:background="@drawable/number_button_mid"
                        android:text="5"
                        android:textSize="30sp" />
                <Button
                    android:id="@+id/borrow_bt9"
                    android:layout_width="wrap_content"
                    android:layout_height="match_parent"
                    android:background="@drawable/number_button_right"
                    android:text="9"
                    android:layout_marginStart="8dp"
                    android:textSize="24sp" />
            </TableRow>
                    <Button
                        android:id="@+id/borrow_bt6"
                        android:layout_width="wrap_content"
                        android:layout_height="match_parent"
                        android:background="@drawable/number_button_right"
                        android:text="6"
                        android:textSize="30sp" />
                </TableRow>
            <TableRow
                android:layout_width="0dp"
                android:layout_height="0dp"
                android:layout_marginTop="6dp"
                android:layout_weight="2">
                <TableRow
                    android:layout_width="0dp"
                    android:layout_height="0dp"
                    android:layout_weight="2">
                <Button
                    android:layout_width="wrap_content"
                    android:layout_height="match_parent"
                    android:background="@null"
                    android:textSize="24sp" />
                    <Button
                        android:id="@+id/borrow_bt7"
                        android:layout_width="wrap_content"
                        android:layout_height="match_parent"
                        android:background="@drawable/number_button_left"
                        android:text="7"
                        android:textSize="30sp" />
                <Button
                    android:id="@+id/borrow_bt0"
                    android:layout_width="wrap_content"
                    android:layout_height="match_parent"
                    android:background="@drawable/number_button_mid"
                    android:text="0"
                    android:layout_marginStart="8dp"
                    android:textSize="24sp" />
                    <Button
                        android:id="@+id/borrow_bt8"
                        android:layout_width="wrap_content"
                        android:layout_height="match_parent"
                        android:background="@drawable/number_button_mid"
                        android:text="8"
                        android:textSize="30sp" />
                <ImageView
                    android:id="@+id/borrow_bt_delete"
                    android:layout_width="wrap_content"
                    android:layout_height="match_parent"
                    android:gravity="center"
                    android:src="@mipmap/delete"
                    android:scaleType="center"
                    android:layout_marginStart="8dp"
                    android:textSize="24sp" />
            </TableRow>
        </TableLayout>
        <TextView
            android:id="@+id/borrow_bt_confirm"
            android:layout_width="150dp"
            android:layout_height="40dp"
            app:layout_constraintTop_toBottomOf="@id/keyboard"
            app:layout_constraintEnd_toEndOf="@id/keyboard"
            android:textSize="18sp"
            android:gravity="center"
            android:layout_marginEnd="23dp"
            android:layout_marginTop="30dp"
            android:textColor="@color/white"
            android:textStyle="bold"
            android:text="Order setup"
            android:background="@drawable/bg_oragne_6"/>
        <TextView
            android:id="@+id/tv_by_hand"
            android:layout_width="150dp"
            android:layout_height="40dp"
            app:layout_constraintTop_toBottomOf="@id/keyboard"
            app:layout_constraintStart_toStartOf="@id/keyboard"
            android:textSize="18sp"
            android:gravity="center"
            android:layout_marginStart="23dp"
            android:layout_marginTop="30dp"
            android:textColor="@color/colorPrimary"
            android:textStyle="bold"
            android:text="Maual setup"
            android:background="@drawable/bg_oragne_line_6"/>
    </androidx.constraintlayout.widget.ConstraintLayout>
                    <Button
                        android:id="@+id/borrow_bt9"
                        android:layout_width="wrap_content"
                        android:layout_height="match_parent"
                        android:background="@drawable/number_button_right"
                        android:text="9"
                        android:textSize="30sp" />
                </TableRow>
                <TableRow
                    android:layout_width="0dp"
                    android:layout_height="0dp"
                    android:layout_weight="2">
                    <Button
                        android:id="@+id/borrow_bt_delete"
                        android:layout_width="wrap_content"
                        android:layout_height="match_parent"
                        android:background="@drawable/number_button_left"
                        android:text="DEL"
                        android:textSize="30sp" />
                    <Button
                        android:id="@+id/borrow_bt0"
                        android:layout_width="wrap_content"
                        android:layout_height="match_parent"
                        android:background="@drawable/number_button_mid"
                        android:text="0"
                        android:textSize="30sp" />
                    <Button
                        android:id="@+id/borrow_bt_confirm"
                        android:layout_width="wrap_content"
                        android:layout_height="match_parent"
                        android:background="@drawable/number_button_right"
                        android:gravity="center"
                        android:text="OK"
                        android:textSize="30sp" />
                </TableRow>
            </TableLayout>
        </androidx.constraintlayout.widget.ConstraintLayout>
    </RelativeLayout>
</LinearLayout>
app/src/main/res/layout/framgment_opendoor.xml
@@ -16,6 +16,7 @@
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:visibility="gone"
            android:orientation="vertical">
            <Button
@@ -93,10 +94,10 @@
                android:id="@+id/gridtable"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:columnWidth="80dp"
                android:horizontalSpacing="10dp"
                android:columnWidth="130dp"
                android:horizontalSpacing="18dp"
                android:numColumns="3"
                android:verticalSpacing="10dp"></GridView>
                android:verticalSpacing="18dp"></GridView>
        </LinearLayout>
    </LinearLayout>
@@ -160,4 +161,17 @@
            app:track_color_off="@color/cheng"
            app:track_color_on="@color/DarkGray" />
    </LinearLayout>
    <TextView
        android:id="@+id/tv_close"
        android:layout_width="120dp"
        android:layout_height="40dp"
        android:textSize="18sp"
        android:gravity="center"
        android:layout_gravity="center"
        android:layout_marginTop="20dp"
        android:textColor="@color/colorPrimary"
        android:layout_marginBottom="28dp"
        android:textStyle="bold"
        android:text="Close"
        android:background="@drawable/bg_oragne_line_6"/>
</LinearLayout>
app/src/main/res/layout/item_box_new.xml
New file
@@ -0,0 +1,26 @@
<?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:gravity="center"
    android:background="@color/black"
    android:orientation="vertical">
    <RelativeLayout
        android:id="@+id/gridLineLayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@drawable/bg_box"
        android:orientation="vertical">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:id="@+id/gridNo"
            android:textStyle="bold"
            android:textColor="@color/white"
            android:textSize="17sp"
            android:text="A1"/>
    </RelativeLayout>
</LinearLayout>
app/src/main/res/layout/item_code.xml
New file
@@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/tv_code"
        android:paddingVertical="18dp"
        android:paddingHorizontal="16dp"
        android:text="Pickup code"
        android:textSize="16sp"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        android:textStyle="bold"
        android:textColor="@color/black"/>
    <View
        android:layout_width="match_parent"
        android:layout_height="1px"
        android:background="#F0F0F0"
        app:layout_constraintTop_toBottomOf="@id/tv_code"/>
</androidx.constraintlayout.widget.ConstraintLayout>