From 2b270f01facd18f5d2c105e48279482d3ff4b9c8 Mon Sep 17 00:00:00 2001
From: 陈力 <chenli@lotaai.com>
Date: 星期一, 29 五月 2023 21:52:12 +0800
Subject: [PATCH] 增加登录、长按进入管理端的功能

---
 app/src/main/java/com/lotaai/canguiayw/mqtt/MQTTService.java             |  181 ++++++++++++++++++++
 app/src/main/java/com/lotaai/canguiayw/device/CanGuiCommand.java         |   10 
 app/src/main/res/mipmap-hdpi/logo.png                                    |    0 
 app/src/main/AndroidManifest.xml                                         |    1 
 app/src/main/java/com/lotaai/canguiayw/AdminLoginActivity.java           |   60 ++++++
 app/src/main/java/com/lotaai/canguiayw/MainActivity.java                 |   15 +
 app/src/main/java/com/lotaai/canguiayw/sqllitedb/Order.java              |    2 
 app/src/main/java/com/lotaai/canguiayw/sqllitedb/OrderDetail.java        |   50 +++++
 app/src/main/java/com/lotaai/canguiayw/sqllitedb/DaoMaster.java          |    3 
 app/src/main/res/layout/activity_admin_login.xml                         |   94 ++++++++++
 app/src/main/res/layout/activity_main.xml                                |   10 +
 app/src/main/java/com/lotaai/canguiayw/OpenDoorFragment.java             |    1 
 app/src/main/java/com/lotaai/canguiayw/sqllitedb/DaoSession.java         |   14 +
 app/src/main/java/com/lotaai/canguiayw/ManageActivity.java               |   35 +++
 app/src/main/java/com/lotaai/canguiayw/SettingFragment.java              |   17 +
 app/src/main/java/com/lotaai/canguiayw/device/service/CanGuiService.java |    4 
 app/build.gradle                                                         |    3 
 17 files changed, 492 insertions(+), 8 deletions(-)

diff --git a/app/build.gradle b/app/build.gradle
index 7ab9202..0f1de9b 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -66,6 +66,9 @@
     implementation 'com.github.huangyanbin:SmartTable:2.2.0'
    //下拉选择框控件
     implementation 'com.github.arcadefire:nice-spinner:1.3.4'
+    //支持MQTT协议
+    implementation 'org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.1.0'
+    implementation 'org.eclipse.paho:org.eclipse.paho.android.service:1.1.1'
 
 
 
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 75e581b..f8cf84d 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -24,6 +24,7 @@
         </activity>
         <activity android:name=".TakeActivity"/>
         <activity android:name="ManageActivity"/>
+        <activity android:name=".AdminLoginActivity"/>
 
         <service
             android:name=".device.service.CanGuiService"
diff --git a/app/src/main/java/com/lotaai/canguiayw/AdminLoginActivity.java b/app/src/main/java/com/lotaai/canguiayw/AdminLoginActivity.java
new file mode 100644
index 0000000..0e852b4
--- /dev/null
+++ b/app/src/main/java/com/lotaai/canguiayw/AdminLoginActivity.java
@@ -0,0 +1,60 @@
+package com.lotaai.canguiayw;
+
+import android.content.Context;
+import android.content.Intent;
+import android.os.Build;
+import android.os.Bundle;
+import android.view.MotionEvent;
+import android.view.View;
+import android.view.inputmethod.InputMethodManager;
+import android.widget.EditText;
+
+import androidx.appcompat.app.AppCompatActivity;
+
+import com.blankj.utilcode.util.LogUtils;
+import com.lotaai.canguiayw.device.service.CanGuiService;
+
+public class AdminLoginActivity extends AppCompatActivity {
+    private Context context;
+    private EditText loginName;
+    private EditText loginPwd;
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.activity_admin_login);
+        context = AdminLoginActivity.this;
+        loginName = findViewById(R.id.loginName);
+        loginPwd = findViewById(R.id.loginpwd);
+    }
+
+    public void confirmLogin(View view){
+        Intent intent = new Intent();
+        intent.setClass(AdminLoginActivity.this, ManageActivity.class);
+        startActivity(intent);
+    }
+
+    public void cancelLogin(View view){
+        Intent intent = new Intent();
+        intent.setClass(AdminLoginActivity.this, MainActivity.class);
+        startActivity(intent);
+    }
+
+    @Override
+    public void finish(){
+
+    }
+
+    @Override
+    public boolean onTouchEvent(MotionEvent event) {
+        if(null != this.getCurrentFocus()){
+            /**
+             * 点击空白位置 隐藏软键盘
+             */
+            InputMethodManager mInputMethodManager = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
+            assert mInputMethodManager != null;
+            return mInputMethodManager.hideSoftInputFromWindow(this.getCurrentFocus().getWindowToken(), 0);
+        }
+        return super .onTouchEvent(event);
+    }
+}
diff --git a/app/src/main/java/com/lotaai/canguiayw/MainActivity.java b/app/src/main/java/com/lotaai/canguiayw/MainActivity.java
index ecae83b..f143975 100644
--- a/app/src/main/java/com/lotaai/canguiayw/MainActivity.java
+++ b/app/src/main/java/com/lotaai/canguiayw/MainActivity.java
@@ -9,6 +9,8 @@
 import android.os.Bundle;
 import android.util.Log;
 import android.view.View;
+import android.widget.ImageView;
+
 import com.blankj.utilcode.util.LogUtils;
 import com.lotaai.canguiayw.device.CanGuiCommand;
 import com.lotaai.canguiayw.device.CanguiStatus;
@@ -20,19 +22,30 @@
 
 public class MainActivity extends AppCompatActivity {
     private Context context;
+    private ImageView logoView;
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_main);
         LogUtils.i("VERSION.SDK_INT:" +VERSION.SDK_INT);
+        logoView = findViewById(R.id.logo);
         context = MainActivity.this;
         Intent startIntent = new Intent(context, CanGuiService.class);
         startService(startIntent);
+        logoView.setOnLongClickListener(new View.OnLongClickListener() {
+            @Override
+            public boolean onLongClick(View view) {
+                Intent intent = new Intent();
+                intent.setClass(MainActivity.this, AdminLoginActivity.class);
+                startActivity(intent);
+                return true;
+            }
+        });
     }
 
     public void gotoSetting(View view){
         Intent intent = new Intent();
-        intent.setClass(MainActivity.this, ManageActivity.class);
+        intent.setClass(MainActivity.this, AdminLoginActivity.class);
         startActivity(intent);
     }
 
diff --git a/app/src/main/java/com/lotaai/canguiayw/ManageActivity.java b/app/src/main/java/com/lotaai/canguiayw/ManageActivity.java
index d4ac2b1..ef55242 100644
--- a/app/src/main/java/com/lotaai/canguiayw/ManageActivity.java
+++ b/app/src/main/java/com/lotaai/canguiayw/ManageActivity.java
@@ -3,8 +3,10 @@
 import android.content.Intent;
 import android.graphics.Color;
 import android.os.Bundle;
+import android.view.MotionEvent;
 import android.view.View;
 import android.view.Window;
+import android.view.inputmethod.InputMethodManager;
 import android.widget.Button;
 import android.widget.ImageButton;
 import android.widget.LinearLayout;
@@ -205,4 +207,37 @@
         finish();
     }
 
+    public interface MyTouchListener {
+        public void onTouchEvent(MotionEvent event);
+    }
+
+    // 保存MyTouchListener接口的列表
+    private ArrayList<MyTouchListener> myTouchListeners = new ArrayList<ManageActivity.MyTouchListener>();
+
+    /**
+     * 提供给Fragment通过getActivity()方法来注册自己的触摸事件的方法
+     * @param listener
+     */
+    public void registerMyTouchListener(MyTouchListener listener) {
+        myTouchListeners.add(listener);
+    }
+
+    /**
+     * 提供给Fragment通过getActivity()方法来取消注册自己的触摸事件的方法
+     * @param listener
+     */
+    public void unRegisterMyTouchListener(MyTouchListener listener) {
+        myTouchListeners.remove( listener );
+    }
+
+    /**
+     * 分发触摸事件给所有注册了MyTouchListener的接口
+     */
+    @Override
+    public boolean dispatchTouchEvent(MotionEvent ev) {
+        for (MyTouchListener listener : myTouchListeners) {
+            listener.onTouchEvent(ev);
+        }
+        return super.dispatchTouchEvent(ev);
+    }
 }
diff --git a/app/src/main/java/com/lotaai/canguiayw/OpenDoorFragment.java b/app/src/main/java/com/lotaai/canguiayw/OpenDoorFragment.java
index 78a2393..54d071a 100644
--- a/app/src/main/java/com/lotaai/canguiayw/OpenDoorFragment.java
+++ b/app/src/main/java/com/lotaai/canguiayw/OpenDoorFragment.java
@@ -100,7 +100,6 @@
                try {
                    Thread.sleep(1000);
                    showHandler.sendEmptyMessage(1);
-                   Log.i(TAG,"在运行");
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }catch (Exception e){
diff --git a/app/src/main/java/com/lotaai/canguiayw/SettingFragment.java b/app/src/main/java/com/lotaai/canguiayw/SettingFragment.java
index 8e26e26..d485d06 100644
--- a/app/src/main/java/com/lotaai/canguiayw/SettingFragment.java
+++ b/app/src/main/java/com/lotaai/canguiayw/SettingFragment.java
@@ -10,8 +10,10 @@
 import android.os.Message;
 import android.text.Spannable;
 import android.view.LayoutInflater;
+import android.view.MotionEvent;
 import android.view.View;
 import android.view.ViewGroup;
+import android.view.inputmethod.InputMethodManager;
 import android.widget.AdapterView;
 import android.widget.ArrayAdapter;
 import android.widget.Spinner;
@@ -52,6 +54,20 @@
         }
         context = container.getContext();
         initSpinner();
+        /* Fragment中,注册
+                * 接收MainActivity的Touch回调的对象
+                * 重写其中的onTouchEvent函数,并进行该Fragment的逻辑处理
+                */
+        ManageActivity.MyTouchListener myTouchListener = new ManageActivity.MyTouchListener() {
+            @Override
+            public void onTouchEvent(MotionEvent event) {
+                System.out.println("23333333333333333");
+
+            }
+        };
+
+        // 将myTouchListener注册到分发列表
+        ((ManageActivity)this.getActivity()).registerMyTouchListener(myTouchListener);
         return root;
     }
 
@@ -73,4 +89,5 @@
             }
         });
     }
+
 }
diff --git a/app/src/main/java/com/lotaai/canguiayw/device/CanGuiCommand.java b/app/src/main/java/com/lotaai/canguiayw/device/CanGuiCommand.java
index 9a71dcb..7457c5e 100644
--- a/app/src/main/java/com/lotaai/canguiayw/device/CanGuiCommand.java
+++ b/app/src/main/java/com/lotaai/canguiayw/device/CanGuiCommand.java
@@ -189,15 +189,19 @@
         List<CanguiStatus> list = new ArrayList<>();
         if (recv.length > 0) {
             int guiHao = recv[3] & 0xff;
-            for (int i = 1; i <= 9; i++) {
-                //开始解析8个格子的状态
+            int num = 9;
+            if (guiHao == 0){
+                num = 8;
+            }
+            for (int i = 1; i <= num; i++) {
+                //开始解析格子的状态
                 CanguiStatus status = new CanguiStatus();
                 //柜号
                 status.setGuiHao(guiHao);
                 //格子号
                 status.setGridNo(i);
                 //温度
-                int site = i * 2 + 5;//温度
+                int site = (i-1) * 2 + 5;//温度
                 int wendu = recv[site] & 0xff;
                 status.setWendu(wendu);
                 site = site + 1;
diff --git a/app/src/main/java/com/lotaai/canguiayw/device/service/CanGuiService.java b/app/src/main/java/com/lotaai/canguiayw/device/service/CanGuiService.java
index dfaaed0..2bafe38 100644
--- a/app/src/main/java/com/lotaai/canguiayw/device/service/CanGuiService.java
+++ b/app/src/main/java/com/lotaai/canguiayw/device/service/CanGuiService.java
@@ -105,8 +105,8 @@
                         for (int i = 0; i < statuses.size(); i++){
                             CanguiStatus s = statuses.get(i);
                             SettingConfig.getInstance().addStatusInList(s);
-//                            LogUtils.i("柜:" + s.getGuiHao(),"格:" + s.getGridNo(),"温度:" + s.getWendu(),
-//                                    "门:"+s.isDoorIsOpen(),"加热:"+s.isJiareIsOpen(),"灯光:" + s.isDengGuangIsOpen(),"消毒:" + s.isXiaoDuIsOpen());
+                            LogUtils.i("柜:" + s.getGuiHao(),"格:" + s.getGridNo(),"温度:" + s.getWendu(),
+                                    "门:"+s.isDoorIsOpen(),"加热:"+s.isJiareIsOpen(),"灯光:" + s.isDengGuangIsOpen(),"消毒:" + s.isXiaoDuIsOpen());
                         }
                     }
                 }
diff --git a/app/src/main/java/com/lotaai/canguiayw/mqtt/MQTTService.java b/app/src/main/java/com/lotaai/canguiayw/mqtt/MQTTService.java
new file mode 100644
index 0000000..257107c
--- /dev/null
+++ b/app/src/main/java/com/lotaai/canguiayw/mqtt/MQTTService.java
@@ -0,0 +1,181 @@
+package com.lotaai.canguiayw.mqtt;
+
+import android.app.Service;
+import android.content.Context;
+import android.content.Intent;
+import android.net.ConnectivityManager;
+import android.net.NetworkInfo;
+import android.os.IBinder;
+import android.util.Log;
+
+import androidx.annotation.Nullable;
+
+import org.eclipse.paho.android.service.MqttAndroidClient;
+import org.eclipse.paho.client.mqttv3.IMqttActionListener;
+import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken;
+import org.eclipse.paho.client.mqttv3.IMqttToken;
+import org.eclipse.paho.client.mqttv3.MqttCallback;
+import org.eclipse.paho.client.mqttv3.MqttConnectOptions;
+import org.eclipse.paho.client.mqttv3.MqttException;
+import org.eclipse.paho.client.mqttv3.MqttMessage;
+
+public class MQTTService extends Service {
+
+    public static final String TAG = MQTTService.class.getSimpleName();
+
+    private static MqttAndroidClient client;
+    private MqttConnectOptions conOpt;
+
+    private String host = "tcp://xxx";   //服务器地址
+    private String userName = "xxx";   //账号
+    private String passWord = " xxx";   //密码
+    private static String myTopic = "topic";   //频道名
+    private String clientId = "mqtt_client";   //客户端ID
+
+    @Override
+    public int onStartCommand(Intent intent, int flags, int startId) {
+        init();
+        return super.onStartCommand(intent, flags, startId);
+    }
+
+    public static void publish(String msg) {
+        String topic = myTopic;
+        Integer qos = 2;
+        Boolean retained = false;
+        try {
+            client.publish(topic, msg.getBytes(), qos.intValue(), retained.booleanValue());
+        } catch (MqttException e) {
+            e.printStackTrace();
+        }
+    }
+
+    private void init() {
+        // 服务器地址(协议+地址+端口号)
+        String uri = host;
+        client = new MqttAndroidClient(this, uri, clientId);
+        // 设置MQTT监听并且接受消息
+        client.setCallback(mqttCallback);
+
+        conOpt = new MqttConnectOptions();
+        // 清除缓存
+        conOpt.setCleanSession(true);
+        // 设置超时时间,单位:秒
+        conOpt.setConnectionTimeout(10);
+        // 心跳包发送间隔,单位:秒
+        conOpt.setKeepAliveInterval(20);
+        // 用户名
+        conOpt.setUserName(userName);
+        // 密码
+        conOpt.setPassword(passWord.toCharArray());
+
+        // last will message
+        boolean doConnect = true;
+        String message ="";
+        String topic = myTopic;
+        Integer qos = 2;
+        Boolean retained = false;
+        if ((!message.equals("")) || (!topic.equals(""))) {
+            // 最后
+            try {
+                conOpt.setWill(topic, message.getBytes(), qos.intValue(), retained.booleanValue());
+            } catch (Exception e) {
+                Log.i(TAG, "Exception Occured", e);
+                doConnect = false;
+                iMqttActionListener.onFailure(null, e);
+            }
+        }
+        if (doConnect) {
+            doClientConnection();
+        }
+    }
+
+    @Override
+    public void onDestroy() {
+        try {
+            client.disconnect();  //服务销毁,断开连接
+        } catch (MqttException e) {
+            e.printStackTrace();
+        }
+        super.onDestroy();
+    }
+
+    /**
+     * 连接MQTT服务器
+     */
+    private void doClientConnection() {
+        if (!client.isConnected() && isConnectIsNomarl()) {
+            try {
+                client.connect(conOpt, null, iMqttActionListener);
+            } catch (MqttException e) {
+                e.printStackTrace();
+            }
+        }
+
+    }
+
+    // MQTT是否连接成功
+    private IMqttActionListener iMqttActionListener = new IMqttActionListener() {
+
+        @Override
+        public void onSuccess(IMqttToken arg0) {
+            Log.i(TAG, "连接成功 ");
+            try {
+                // 订阅myTopic话题,当订阅多条频道,需要遍历逐条订阅,否则有可能订阅失败
+                client.subscribe(myTopic, 1);
+            } catch (MqttException e) {
+                e.printStackTrace();
+            }
+        }
+
+        @Override
+        public void onFailure(IMqttToken arg0, Throwable arg1) {
+            arg1.printStackTrace();
+            // 连接失败,重连
+        }
+    };
+
+    // MQTT监听并且接受消息
+    private MqttCallback mqttCallback = new MqttCallback() {
+
+        @Override
+        public void messageArrived(String topic, MqttMessage message) throws Exception {
+            String str1 = new String(message.getPayload());
+            String str2 = topic + ";qos:" + message.getQos() + ";retained:" + message.isRetained();
+            Log.i(TAG, "messageArrived:" + str1);
+            Log.i(TAG, str2);
+        }
+
+        @Override
+        public void deliveryComplete(IMqttDeliveryToken arg0) {
+
+        }
+
+        @Override
+        public void connectionLost(Throwable arg0) {
+            // 失去连接,重连
+        }
+    };
+
+    /**
+     * 判断网络是否连接
+     */
+    private boolean isConnectIsNomarl() {
+        ConnectivityManager connectivityManager = (ConnectivityManager) this.getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE);
+        NetworkInfo info = connectivityManager.getActiveNetworkInfo();
+        if (info != null && info.isAvailable()) {
+            String name = info.getTypeName();
+            Log.i(TAG, "MQTT当前网络名称:" + name);
+            return true;
+        } else {
+            Log.i(TAG, "MQTT 没有可用网络");
+            return false;
+        }
+    }
+
+    @Nullable
+    @Override
+    public IBinder onBind(Intent intent) {
+        return null;
+    }
+
+}
diff --git a/app/src/main/java/com/lotaai/canguiayw/sqllitedb/DaoMaster.java b/app/src/main/java/com/lotaai/canguiayw/sqllitedb/DaoMaster.java
index c546c16..e1fa5c3 100644
--- a/app/src/main/java/com/lotaai/canguiayw/sqllitedb/DaoMaster.java
+++ b/app/src/main/java/com/lotaai/canguiayw/sqllitedb/DaoMaster.java
@@ -22,12 +22,14 @@
     /** Creates underlying database table using DAOs. */
     public static void createAllTables(Database db, boolean ifNotExists) {
         OrderDao.createTable(db, ifNotExists);
+        OrderDetailDao.createTable(db, ifNotExists);
         TestDao.createTable(db, ifNotExists);
     }
 
     /** Drops underlying database table using DAOs. */
     public static void dropAllTables(Database db, boolean ifExists) {
         OrderDao.dropTable(db, ifExists);
+        OrderDetailDao.dropTable(db, ifExists);
         TestDao.dropTable(db, ifExists);
     }
 
@@ -48,6 +50,7 @@
     public DaoMaster(Database db) {
         super(db, SCHEMA_VERSION);
         registerDaoClass(OrderDao.class);
+        registerDaoClass(OrderDetailDao.class);
         registerDaoClass(TestDao.class);
     }
 
diff --git a/app/src/main/java/com/lotaai/canguiayw/sqllitedb/DaoSession.java b/app/src/main/java/com/lotaai/canguiayw/sqllitedb/DaoSession.java
index 59419e8..8294c77 100644
--- a/app/src/main/java/com/lotaai/canguiayw/sqllitedb/DaoSession.java
+++ b/app/src/main/java/com/lotaai/canguiayw/sqllitedb/DaoSession.java
@@ -9,9 +9,11 @@
 import org.greenrobot.greendao.internal.DaoConfig;
 
 import com.lotaai.canguiayw.sqllitedb.Order;
+import com.lotaai.canguiayw.sqllitedb.OrderDetail;
 import com.lotaai.canguiayw.sqllitedb.Test;
 
 import com.lotaai.canguiayw.sqllitedb.OrderDao;
+import com.lotaai.canguiayw.sqllitedb.OrderDetailDao;
 import com.lotaai.canguiayw.sqllitedb.TestDao;
 
 // THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT.
@@ -24,9 +26,11 @@
 public class DaoSession extends AbstractDaoSession {
 
     private final DaoConfig orderDaoConfig;
+    private final DaoConfig orderDetailDaoConfig;
     private final DaoConfig testDaoConfig;
 
     private final OrderDao orderDao;
+    private final OrderDetailDao orderDetailDao;
     private final TestDao testDao;
 
     public DaoSession(Database db, IdentityScopeType type, Map<Class<? extends AbstractDao<?, ?>>, DaoConfig>
@@ -36,18 +40,24 @@
         orderDaoConfig = daoConfigMap.get(OrderDao.class).clone();
         orderDaoConfig.initIdentityScope(type);
 
+        orderDetailDaoConfig = daoConfigMap.get(OrderDetailDao.class).clone();
+        orderDetailDaoConfig.initIdentityScope(type);
+
         testDaoConfig = daoConfigMap.get(TestDao.class).clone();
         testDaoConfig.initIdentityScope(type);
 
         orderDao = new OrderDao(orderDaoConfig, this);
+        orderDetailDao = new OrderDetailDao(orderDetailDaoConfig, this);
         testDao = new TestDao(testDaoConfig, this);
 
         registerDao(Order.class, orderDao);
+        registerDao(OrderDetail.class, orderDetailDao);
         registerDao(Test.class, testDao);
     }
     
     public void clear() {
         orderDaoConfig.clearIdentityScope();
+        orderDetailDaoConfig.clearIdentityScope();
         testDaoConfig.clearIdentityScope();
     }
 
@@ -55,6 +65,10 @@
         return orderDao;
     }
 
+    public OrderDetailDao getOrderDetailDao() {
+        return orderDetailDao;
+    }
+
     public TestDao getTestDao() {
         return testDao;
     }
diff --git a/app/src/main/java/com/lotaai/canguiayw/sqllitedb/Order.java b/app/src/main/java/com/lotaai/canguiayw/sqllitedb/Order.java
index 16472d3..e305039 100644
--- a/app/src/main/java/com/lotaai/canguiayw/sqllitedb/Order.java
+++ b/app/src/main/java/com/lotaai/canguiayw/sqllitedb/Order.java
@@ -13,7 +13,7 @@
     @NotNull
     private String gridNo;
     @NotNull
-    private int state;//0--空闲  1-占用 2-锁定
+    private int state;//状态;0-未存餐 1-已存餐 2-已取餐 3-取消
     private long putInDate;
     private String takeCode;
     @Generated(hash = 2118332125)
diff --git a/app/src/main/java/com/lotaai/canguiayw/sqllitedb/OrderDetail.java b/app/src/main/java/com/lotaai/canguiayw/sqllitedb/OrderDetail.java
new file mode 100644
index 0000000..8d60830
--- /dev/null
+++ b/app/src/main/java/com/lotaai/canguiayw/sqllitedb/OrderDetail.java
@@ -0,0 +1,50 @@
+package com.lotaai.canguiayw.sqllitedb;
+
+import org.greenrobot.greendao.annotation.Entity;
+import org.greenrobot.greendao.annotation.Id;
+import org.greenrobot.greendao.annotation.NotNull;
+import org.greenrobot.greendao.annotation.Generated;
+
+@Entity
+public class OrderDetail {
+    @Id
+    private long id;
+    @NotNull
+    private String orderNo;
+    private String itemName;
+    private int num;
+    @Generated(hash = 1442626585)
+    public OrderDetail(long id, @NotNull String orderNo, String itemName, int num) {
+        this.id = id;
+        this.orderNo = orderNo;
+        this.itemName = itemName;
+        this.num = num;
+    }
+    @Generated(hash = 268085433)
+    public OrderDetail() {
+    }
+    public long getId() {
+        return this.id;
+    }
+    public void setId(long id) {
+        this.id = id;
+    }
+    public String getOrderNo() {
+        return this.orderNo;
+    }
+    public void setOrderNo(String orderNo) {
+        this.orderNo = orderNo;
+    }
+    public String getItemName() {
+        return this.itemName;
+    }
+    public void setItemName(String itemName) {
+        this.itemName = itemName;
+    }
+    public int getNum() {
+        return this.num;
+    }
+    public void setNum(int num) {
+        this.num = num;
+    }
+}
diff --git a/app/src/main/res/layout/activity_admin_login.xml b/app/src/main/res/layout/activity_admin_login.xml
new file mode 100644
index 0000000..29431ba
--- /dev/null
+++ b/app/src/main/res/layout/activity_admin_login.xml
@@ -0,0 +1,94 @@
+<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:background="@color/bgcolor"
+    android:layout_gravity="center"
+    android:orientation="vertical">
+    <LinearLayout
+        android:layout_width="wrap_content"
+        android:layout_height="120dp"
+        android:layout_gravity="center"
+        android:layout_marginTop="200dp"
+        android:orientation="horizontal">
+        <TextView
+            android:layout_width="150dp"
+            android:layout_height="80dp"
+            android:gravity="right|center_vertical"
+            android:text="账号:"
+            android:layout_margin="10dp"
+            android:textColor="@color/white"
+            android:textSize="30dp" />
+        <EditText
+            android:id="@+id/loginName"
+            android:layout_width="300dp"
+            android:layout_height="80dp"
+            android:layout_margin="10dp"
+            android:gravity="center"
+            android:background="@drawable/round_editstyle"
+            android:hint="账号"
+            android:textColorHint="@color/white"
+            android:textAlignment="center"
+            android:textColor="@color/white"
+            android:textSize="30dp" />
+    </LinearLayout>
+        <LinearLayout
+            android:layout_width="wrap_content"
+            android:layout_height="120dp"
+            android:layout_gravity="center"
+            android:orientation="horizontal">
+        <TextView
+            android:layout_width="150dp"
+            android:layout_height="80dp"
+            android:layout_margin="10dp"
+            android:gravity="right|center_vertical"
+            android:text="密码:"
+            android:textColor="@color/white"
+            android:textSize="30dp" />
+        <EditText
+            android:id="@+id/loginpwd"
+            android:layout_width="300dp"
+            android:layout_height="80dp"
+            android:layout_margin="10dp"
+            android:gravity="center"
+            android:background="@drawable/round_editstyle"
+            android:hint="密码"
+            android:textColorHint="@color/white"
+            android:textAlignment="center"
+            android:inputType="textPassword"
+            android:textColor="@color/white"
+            android:textSize="30dp" />
+    </LinearLayout>
+
+    <LinearLayout
+        android:layout_width="540dp"
+        android:layout_height="120dp"
+        android:layout_gravity="center"
+        android:layout_marginTop="50dp"
+        android:orientation="horizontal">
+        <Button
+            android:id="@+id/jihuo"
+            android:layout_width="250dp"
+            android:layout_height="80dp"
+            android:textSize="30dp"
+            android:layout_margin="10dp"
+            android:layout_gravity="center"
+            android:gravity="center"
+            android:onClick="confirmLogin"
+            android:background="@drawable/circular_button"
+            android:text="登录"/>
+
+        <Button
+            android:id="@+id/save"
+            android:layout_width="250dp"
+            android:layout_height="80dp"
+            android:textSize="30dp"
+            android:layout_margin="10dp"
+            android:layout_gravity="center"
+            android:gravity="center"
+            android:onClick="cancelLogin"
+            android:background="@drawable/circular_button_blue"
+            android:text="返回"/>
+    </LinearLayout>
+</LinearLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index 0979624..b7e7c71 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -9,6 +9,7 @@
 
     <com.google.android.material.floatingactionbutton.FloatingActionButton
         android:id="@+id/fab"
+        android:visibility="gone"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_alignParentEnd="true"
@@ -24,6 +25,15 @@
         app:pressedTranslationZ="5dp"
         app:rippleColor="@color/DarkGray" />
 
+    <ImageView
+        android:id="@+id/logo"
+        android:layout_width="100dp"
+        android:layout_height="100dp"
+        android:scaleType="center"
+        android:layout_marginTop="50dp"
+        android:layout_marginLeft="50dp"
+        android:src="@mipmap/logo"/>
+
    <LinearLayout
        android:layout_width="450dp"
        android:layout_height="450dp"
diff --git a/app/src/main/res/mipmap-hdpi/logo.png b/app/src/main/res/mipmap-hdpi/logo.png
new file mode 100644
index 0000000..7693b4f
--- /dev/null
+++ b/app/src/main/res/mipmap-hdpi/logo.png
Binary files differ

--
Gitblit v1.7.1