Browse Source

定时功能

ccc 1 year ago
parent
commit
44d106fc7b
40 changed files with 2311 additions and 32 deletions
  1. 6 0
      .idea/misc.xml
  2. 3 0
      BaseLibrary/src/main/java/com/hboxs/base_library/base/BaseApplication.java
  3. 3 1
      BaseLibrary/src/main/java/com/hboxs/base_library/beans/enums/AlarmClockTypeEnum.java
  4. 1 1
      BaseLibrary/src/main/java/com/hboxs/base_library/constant/Global.java
  5. 62 0
      BaseLibrary/src/main/res/layout/dialog_alarm_clock_tp.xml
  6. 9 0
      app/src/main/AndroidManifest.xml
  7. 21 0
      app/src/main/java/com/bgy/autosale/App.java
  8. 161 3
      app/src/main/java/com/bgy/autosale/RemoteSupportService.java
  9. 77 0
      app/src/main/java/com/bgy/autosale/TimedCleaningTaskAlarmReceiver.java
  10. 1 1
      app/src/main/java/com/bgy/autosale/helpers/CommunicationHelper.java
  11. 284 0
      app/src/main/java/com/bgy/autosale/payutil/dialog/AlarmClockDialog.java
  12. 111 0
      app/src/main/java/com/bgy/autosale/payutil/dialog/TimePickerDialog.java
  13. 2 2
      app/src/main/java/com/bgy/autosale/ui/MainActivity.java
  14. 129 0
      app/src/main/java/com/bgy/autosale/ui/adapters/AlarmClockAdapter.java
  15. 4 0
      app/src/main/java/com/bgy/autosale/ui/consumer/IceCreamFragment.java
  16. 10 0
      app/src/main/java/com/bgy/autosale/ui/operator/DeviceManagerActivity.java
  17. 470 0
      app/src/main/java/com/bgy/autosale/ui/operator/LocalAlarmClockActivity.java
  18. 4 0
      app/src/main/java/com/bgy/autosale/ui/operator/LockActivity.java
  19. 256 0
      app/src/main/java/com/bgy/autosale/ui/operator/fragments/OtherSettingFragment.java
  20. 1 18
      app/src/main/java/com/bgy/autosale/ui/operator/fragments/TechnologySupportFragment.java
  21. 110 0
      app/src/main/res/layout/activity_localalarmclock.xml
  22. 299 0
      app/src/main/res/layout/dialog_alarm_clock.xml
  23. 16 0
      app/src/main/res/layout/fragment_other_setting.xml
  24. 182 0
      app/src/main/res/layout/item_alarm_clock.xml
  25. 6 1
      app/src/main/res/values-cs/strings.xml
  26. 6 0
      app/src/main/res/values-de/strings.xml
  27. 6 0
      app/src/main/res/values-en/strings.xml
  28. 6 0
      app/src/main/res/values-es/strings.xml
  29. 6 0
      app/src/main/res/values-et/strings.xml
  30. 6 0
      app/src/main/res/values-hy/strings.xml
  31. 6 0
      app/src/main/res/values-ko/strings.xml
  32. 6 0
      app/src/main/res/values-lt/strings.xml
  33. 6 0
      app/src/main/res/values-lv/strings.xml
  34. 5 0
      app/src/main/res/values-ms/strings.xml
  35. 6 0
      app/src/main/res/values-ro/strings.xml
  36. 6 0
      app/src/main/res/values-ru/strings.xml
  37. 6 0
      app/src/main/res/values-th/strings.xml
  38. 7 2
      app/src/main/res/values-zh/strings.xml
  39. 4 2
      app/src/main/res/values/strings.xml
  40. 1 1
      config.gradle

+ 6 - 0
.idea/misc.xml

@@ -10,6 +10,7 @@
         <entry key="..\:/Users/Desktop/iceCream-QX/icecream-lite-main/BaseLibrary/src/main/res/drawable/shape_message_normal.xml" value="0.112" />
         <entry key="..\:/Users/Desktop/iceCream-QX/icecream-lite-main/BaseLibrary/src/main/res/layout-land/dialog_normal.xml" value="0.21119929453262787" />
         <entry key="..\:/Users/Desktop/iceCream-QX/icecream-lite-main/BaseLibrary/src/main/res/layout/activity_base_web_view.xml" value="0.24947916666666667" />
+        <entry key="..\:/Users/Desktop/iceCream-QX/icecream-lite-main/BaseLibrary/src/main/res/layout/dialog_alarm_clock_tp.xml" value="0.24947916666666667" />
         <entry key="..\:/Users/Desktop/iceCream-QX/icecream-lite-main/BaseLibrary/src/main/res/layout/dialog_normal.xml" value="0.24947916666666667" />
         <entry key="..\:/Users/Desktop/iceCream-QX/icecream-lite-main/BaseLibrary/src/main/res/layout/item_user_home.xml" value="0.24947916666666667" />
         <entry key="..\:/Users/Desktop/iceCream-QX/icecream-lite-main/BaseLibrary/src/main/res/layout/layout_empty_data.xml" value="0.24947916666666667" />
@@ -17,12 +18,15 @@
         <entry key="..\:/Users/Desktop/iceCream-QX/icecream-lite-main/app/src/main/res/layout/activity_device_manager.xml" value="0.24947916666666667" />
         <entry key="..\:/Users/Desktop/iceCream-QX/icecream-lite-main/app/src/main/res/layout/activity_error.xml" value="0.176" />
         <entry key="..\:/Users/Desktop/iceCream-QX/icecream-lite-main/app/src/main/res/layout/activity_fragment.xml" value="0.24947916666666667" />
+        <entry key="..\:/Users/Desktop/iceCream-QX/icecream-lite-main/app/src/main/res/layout/activity_localalarmclock.xml" value="0.136" />
         <entry key="..\:/Users/Desktop/iceCream-QX/icecream-lite-main/app/src/main/res/layout/activity_lock.xml" value="0.152" />
         <entry key="..\:/Users/Desktop/iceCream-QX/icecream-lite-main/app/src/main/res/layout/activity_main.xml" value="0.2" />
         <entry key="..\:/Users/Desktop/iceCream-QX/icecream-lite-main/app/src/main/res/layout/activity_sleep_setting.xml" value="0.24947916666666667" />
         <entry key="..\:/Users/Desktop/iceCream-QX/icecream-lite-main/app/src/main/res/layout/activity_sn_setting.xml" value="0.12132725430597771" />
         <entry key="..\:/Users/Desktop/iceCream-QX/icecream-lite-main/app/src/main/res/layout/activity_system_text_setting.xml" value="0.176" />
         <entry key="..\:/Users/Desktop/iceCream-QX/icecream-lite-main/app/src/main/res/layout/activity_update_password.xml" value="0.24947916666666667" />
+        <entry key="..\:/Users/Desktop/iceCream-QX/icecream-lite-main/app/src/main/res/layout/dialog_alarm_clock.xml" value="0.24947916666666667" />
+        <entry key="..\:/Users/Desktop/iceCream-QX/icecream-lite-main/app/src/main/res/layout/dialog_alarm_clock_tp.xml" value="0.24947916666666667" />
         <entry key="..\:/Users/Desktop/iceCream-QX/icecream-lite-main/app/src/main/res/layout/dialog_coin_sucess.xml" value="0.24947916666666667" />
         <entry key="..\:/Users/Desktop/iceCream-QX/icecream-lite-main/app/src/main/res/layout/dialog_credit_card.xml" value="0.24947916666666667" />
         <entry key="..\:/Users/Desktop/iceCream-QX/icecream-lite-main/app/src/main/res/layout/dialog_mdbcredit_card.xml" value="0.24947916666666667" />
@@ -39,12 +43,14 @@
         <entry key="..\:/Users/Desktop/iceCream-QX/icecream-lite-main/app/src/main/res/layout/fragment_log.xml" value="0.24947916666666667" />
         <entry key="..\:/Users/Desktop/iceCream-QX/icecream-lite-main/app/src/main/res/layout/fragment_main.xml" value="0.264" />
         <entry key="..\:/Users/Desktop/iceCream-QX/icecream-lite-main/app/src/main/res/layout/fragment_operate_check.xml" value="0.24947916666666667" />
+        <entry key="..\:/Users/Desktop/iceCream-QX/icecream-lite-main/app/src/main/res/layout/fragment_other_setting.xml" value="0.24947916666666667" />
         <entry key="..\:/Users/Desktop/iceCream-QX/icecream-lite-main/app/src/main/res/layout/fragment_pay_select.xml" value="0.24947916666666667" />
         <entry key="..\:/Users/Desktop/iceCream-QX/icecream-lite-main/app/src/main/res/layout/fragment_price.xml" value="0.2" />
         <entry key="..\:/Users/Desktop/iceCream-QX/icecream-lite-main/app/src/main/res/layout/fragment_service.xml" value="0.2484375" />
         <entry key="..\:/Users/Desktop/iceCream-QX/icecream-lite-main/app/src/main/res/layout/fragment_switch.xml" value="0.1" />
         <entry key="..\:/Users/Desktop/iceCream-QX/icecream-lite-main/app/src/main/res/layout/fragment_technology_support.xml" value="0.176" />
         <entry key="..\:/Users/Desktop/iceCream-QX/icecream-lite-main/app/src/main/res/layout/fragment_warnings.xml" value="0.24947916666666667" />
+        <entry key="..\:/Users/Desktop/iceCream-QX/icecream-lite-main/app/src/main/res/layout/item_alarm_clock.xml" value="0.2" />
         <entry key="..\:/Users/Desktop/iceCream-QX/icecream-lite-main/app/src/main/res/layout/item_price.xml" value="0.2" />
         <entry key="..\:/Users/Desktop/iceCream-QX/icecream-lite-main/app/src/main/res/layout/item_shop_cart_dishes.xml" value="0.1" />
         <entry key="..\:/Users/Desktop/iceCream-QX/icecream-lite-main/app/src/main/res/layout/item_switch.xml" value="0.4" />

+ 3 - 0
BaseLibrary/src/main/java/com/hboxs/base_library/base/BaseApplication.java

@@ -2,6 +2,8 @@ package com.hboxs.base_library.base;
 
 import android.app.Application;
 import android.content.Context;
+import android.content.pm.PackageInfo;
+import android.content.pm.PackageManager;
 import android.database.sqlite.SQLiteDatabase;
 import android.support.multidex.MultiDex;
 import android.util.Log;
@@ -134,6 +136,7 @@ public class BaseApplication extends Application {
     public DaoSession getDaoSession() {
         return mDaoSession;
     }
+
     public SQLiteDatabase getDb() {
         return db;
     }

+ 3 - 1
BaseLibrary/src/main/java/com/hboxs/base_library/beans/enums/AlarmClockTypeEnum.java

@@ -5,7 +5,9 @@ public enum AlarmClockTypeEnum {
     OPEN_DEV(0, "open_dev"),
     CLOSE_DEV(1,"close_dev"),
     START_SLEEP(2,"start_sleep"),
-    END_SLEEP(3,"end_sleep");
+    END_SLEEP(3,"end_sleep"),
+    CHANGE_COOLING(4,"change_cooling"),
+    CHANGE_FRESHNESS(5,"change_freshness");
 
     private int type;
     private String content;

+ 1 - 1
BaseLibrary/src/main/java/com/hboxs/base_library/constant/Global.java

@@ -33,7 +33,7 @@ public abstract class Global {
      * 1:
      * 2:国外线上
      */
-    public static final int isVersions = 1;
+    public static final int isVersions = 2;
 
     /**
      * 信用卡支付方式user

+ 62 - 0
BaseLibrary/src/main/res/layout/dialog_alarm_clock_tp.xml

@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<layout xmlns:android="http://schemas.android.com/apk/res/android">
+
+
+    <RelativeLayout
+        android:layout_width="match_parent"
+        android:layout_height="match_parent">
+
+        <LinearLayout
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_centerInParent="true"
+            android:background="@drawable/shape_btn_back"
+            android:gravity="center_horizontal"
+            android:orientation="vertical"
+            android:paddingLeft="@dimen/dp_10"
+            android:paddingRight="@dimen/dp_10"
+            android:paddingBottom="@dimen/dp_10">
+
+            <TimePicker
+                android:id="@+id/timepicker"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:timePickerMode="spinner"
+                android:scaleX="2"
+                android:scaleY="2"
+                android:theme="@style/Dialog_Alarm"    />
+            <LinearLayout
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_marginTop="@dimen/dp_15"
+                android:layout_marginBottom="@dimen/dp_5"
+                android:gravity="center">
+                <Button
+                    android:id="@+id/btn_clock_confirm"
+                    android:layout_width="@dimen/dp_60"
+                    android:layout_height="@dimen/dp_20"
+                    android:layout_marginRight="@dimen/dp_50"
+                    android:text="@string/confirm"
+                    android:textColor="@color/white"
+                    android:textSize="@dimen/sp_10" />
+
+                <Button
+                    android:id="@+id/btn_clock_cancel"
+                    android:layout_width="@dimen/dp_60"
+                    android:layout_height="@dimen/dp_20"
+                    android:text="@string/cancel"
+                    android:textColor="@color/white"
+                    android:textSize="@dimen/sp_10" />
+
+            </LinearLayout>
+
+
+        </LinearLayout>
+
+
+    </RelativeLayout>
+
+
+</layout>
+

+ 9 - 0
app/src/main/AndroidManifest.xml

@@ -66,6 +66,7 @@
         </activity>
         <activity android:name=".ui.operator.LockActivity" />
         <activity android:name=".ui.operator.SleepSettingActivity" />
+        <activity android:name=".ui.operator.LocalAlarmClockActivity" />
 
         <activity
             android:name=".ui.operator.DeviceManagerActivity"
@@ -144,6 +145,14 @@
                 <action android:name="android.intent.action.DOWNLOAD_COMPLETE" />
             </intent-filter>
         </receiver>
+        <receiver
+            android:name=".TimedCleaningTaskAlarmReceiver"
+            android:exported="false">
+            <intent-filter>
+                <action android:name="android.intent.action.Timed_Cleaning_Task" />
+            </intent-filter>
+        </receiver>
+
         <service android:name=".payutil.DownServer" />
         <service android:name=".payutil.MQService" />
         <service

+ 21 - 0
app/src/main/java/com/bgy/autosale/App.java

@@ -5,6 +5,7 @@ import android.app.ActivityManager;
 import android.app.Application;
 import android.content.Context;
 import android.content.Intent;
+import android.content.pm.PackageInfo;
 import android.content.pm.PackageManager;
 import android.content.res.Configuration;
 import android.graphics.Typeface;
@@ -85,6 +86,7 @@ public class App extends BaseApplication {
 
     public boolean specMultipleChoices = true;
 
+    public boolean isDeviceStatus=false;
     @SuppressLint("SdCardPath")
     @Override
     public void onCreate() {
@@ -215,17 +217,22 @@ public class App extends BaseApplication {
                     case BasePlcAgreement.PLC_HEART_CONNECT:
                         if (!pclDeviceConnected) {
                             pclDeviceConnected = true;
+                            isDeviceStatus=false;
                             ErrorViewHelper.getInstance().hideErrorView(R.string.error_plc_disconnect);
+                            Log.d(TAG, "onResult: PLC_HEART_CONNECT");
                         }
                         break;
                     case BasePlcAgreement.PLC_HEART_DISCONNECT:
                         if (pclDeviceConnected) {
                             pclDeviceConnected = false;
+                            isDeviceStatus=false;
                             ErrorViewHelper.getInstance().showErrorView(R.string.error_plc_disconnect, new String[]{getString(R.string.error_plc_disconnect), getString(R.string.make_fail_describe)});
+                            Log.d(TAG, "onResult: PLC_HEART_CONNECT1");
                         }
                         break;
                     case BasePlcAgreement.PLC_HEART_REPORT:
                         if (result.data != null) {
+                            isDeviceStatus=true;
                             Log.d(TAG, "onResult:测试报警1 "+result.message);
                             if (result.data) {
                                 ErrorViewHelper.getInstance().hideErrorView(R.string.setting_plc_connect);
@@ -299,4 +306,18 @@ public class App extends BaseApplication {
             Hawk.put("PRICEBEAN", priceBeans);
         }
     }
+
+    public String getVersionName() {
+        //获取packagemanager的实例
+        PackageManager packageManager = getPackageManager();
+        //getPackageName()是你当前类的包名,0代表是获取版本信息
+        PackageInfo packInfo = null;
+        try {
+            packInfo = packageManager.getPackageInfo(getPackageName(), 0);
+        } catch (PackageManager.NameNotFoundException e) {
+            e.printStackTrace();
+        }
+
+        return packInfo.versionName;
+    }
 }

+ 161 - 3
app/src/main/java/com/bgy/autosale/RemoteSupportService.java

@@ -1,5 +1,6 @@
 package com.bgy.autosale;
 
+import static com.hboxs.base_library.util.ToastUtil.showToast;
 import static org.greenrobot.eventbus.EventBus.getDefault;
 
 import android.annotation.SuppressLint;
@@ -18,12 +19,19 @@ import android.os.IBinder;
 import android.text.TextUtils;
 import android.util.Log;
 
+import com.bgy.autosale.helpers.CommunicationHelper;
+import com.bgy.autosale.helpers.ErrorViewHelper;
+import com.bgy.autosale.interfaces.SendCallback;
 import com.bgy.autosale.payutil.AddAlarmRecordBean;
 import com.bgy.autosale.payutil.HeartbeatBean;
 import com.bgy.autosale.payutil.MQService;
 import com.bgy.autosale.payutil.PaymentMessage;
+import com.bgy.autosale.ui.MainActivity;
+import com.bgy.autosale.ui.consumer.IceCreamFragment;
+import com.bgy.autosale.ui.operator.LockActivity;
 import com.bgy.autosale.utils.ShellUtils;
 import com.example.offpay.event.OfflineMessageEvent;
+import com.example.offpay.ictrs232.SerialPortUtil;
 import com.example.offpay.wmdb.WeaverUtil;
 import com.google.gson.Gson;
 import com.hboxs.base_library.base.BaseApplication;
@@ -44,6 +52,7 @@ import com.hboxs.base_library.http.observer.HttpResultNotActivityObserver;
 import com.hboxs.base_library.http.observer.HttpResultObserver;
 import com.hboxs.base_library.http.response.HttpResult;
 import com.hboxs.base_library.http.response.HttpResultHandler;
+import com.hboxs.base_library.http.response.HttpStringResultHandler;
 import com.hboxs.base_library.util.LogUtil;
 import com.hboxs.base_library.util.LogUtils;
 import com.hboxs.base_library.util.PreventSpeedClickUtil;
@@ -55,6 +64,7 @@ import com.igexin.sdk.PushManager;
 import com.orhanobut.hawk.Hawk;
 import com.orhanobut.logger.Logger;
 
+import org.greenrobot.eventbus.EventBus;
 import org.greenrobot.eventbus.Subscribe;
 import org.greenrobot.eventbus.ThreadMode;
 
@@ -81,7 +91,7 @@ import okhttp3.RequestBody;
  * Created by bpb on 2020-01-10.
  * 说明:
  */
-public class RemoteSupportService extends Service {
+public class RemoteSupportService extends Service implements SendCallback {
 
     private static final String TAG = "RemoteSupportService";
 
@@ -111,6 +121,13 @@ public class RemoteSupportService extends Service {
         }
         Hawk.init(this).build();
         startGeTui();
+
+        new Handler().postDelayed(new Runnable() {
+            @Override
+            public void run() {
+                sendApkVersion();
+            }
+        }, 20000);
     }
 
 
@@ -314,7 +331,7 @@ public class RemoteSupportService extends Service {
                 break;
             case "is_sleep":
                 LogUtils.logWrite("定时休眠了");
-//                sleep((String) messageEvent.getData());
+                sleep((String) messageEvent.getData());
                 break;
             case "alarmClock":
 //                parseWeekTime((String) messageEvent.getData());
@@ -571,12 +588,107 @@ public class RemoteSupportService extends Service {
             case Name.ZE_DIAN:
 //                myServicePresenter.zeDianGetDev();
                 break;
+            case "is_cooling":
+                Log.d(TAG, "event: is_cooling");
+                CommunicationHelper.getInstance().sendControl(IceCreamDeviceConstants.ORDER_REFRIGERATION, this);
+                break;
+            case "is_freshness":
+                Log.d(TAG, "event: is_freshness");
+                CommunicationHelper.getInstance().sendControl(IceCreamDeviceConstants.ORDER_KEEP_FRESH, this);
+                break;
             default:
                 break;
 
         }
     }
 
+    private void sleep(String baseBean) {
+        if (baseBean.equals("1")) {
+            //睡眠
+            Intent intent = new Intent(RemoteSupportService.this, LockActivity.class);
+            intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
+            startActivity(intent);
+            if (Name.WMDB.equals(Hawk.get(Name.NOTE_COMMUNICATION, Name.MDB))) {
+                WeaverUtil.billValidatorDisable();
+            }
+        } else {
+            if (Name.WMDB.equals(Hawk.get(Name.NOTE_COMMUNICATION, Name.MDB))) {
+                WeaverUtil.billValidatorSetUp();
+            } else if (Name.ICT.equals(Hawk.get(Name.NOTE_COMMUNICATION, Name.MDB))) {
+                SerialPortUtil.getSerialPortUtil().sendSerialPort("3E");
+
+            }
+            LogUtils.logWrite("开启:" + (Name.ICT.equals(Hawk.get(Name.NOTE_COMMUNICATION, Name.MDB))));
+            //唤醒
+            SharedPreferencesUtils.setParam("sleep", 1);
+            Intent intent = new Intent(RemoteSupportService.this, MainActivity.class);
+            intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
+            startActivity(intent);
+
+            HashMap<String, Object> params = new HashMap<>();
+            params.put("clientId", Heartbeat.deviceId);
+            params.put("is_sleep", false);
+            addSubscriptionNew(NoPayOrderStringApi.api.updateSleep(params), String.class,
+                    new HttpResultNotActivityObserver<String>(view, getApplicationContext()) {
+                        @Override
+                        public void onNext(String data) {
+                            Log.d(TAG, "onNext:is_sleep1 "+data);
+
+                        }
+
+                        @Override
+                        public void onError(Throwable t) {
+                            super.onError(t);
+
+                        }
+                    });
+        }
+        // 如果没跳到锁机界面 上传锁机失败
+        new Handler().postDelayed(new Runnable() {
+            @Override
+            public void run() {
+                boolean isSuccess = (boolean) SharedPreferencesUtils.getParam("sleep_state", false);
+                if (isSuccess) {
+                    //进行网络请求
+                    LogUtil.d(TAG, "run: 睡眠状态上传false");
+                    HashMap<String, Object> params = new HashMap<>();
+                    params.put("clientId", Heartbeat.deviceId);
+                    params.put("is_sleep", false);
+                    addSubscriptionNew(NoPayOrderStringApi.api.UpdateBlockApi(params), String.class,
+                            new HttpResultNotActivityObserver<String>(view, getApplicationContext()) {
+                                @Override
+                                public void onNext(String data) {
+                                    Log.d(TAG, "onNext:is_sleep "+data);
+                                }
+
+                                @Override
+                                public void onError(Throwable t) {
+                                    super.onError(t);
+
+                                }
+                            });
+                }
+                SharedPreferencesUtils.setParam("block_state", false);
+
+            }
+        }, 1000 * 10);
+    }
+
+    @Override
+    public void callBack(boolean ok, int[] result) {
+        AndroidSchedulers.mainThread().scheduleDirect(new Runnable() {
+            @Override
+            public void run() {
+                if (ok) {
+                    showToast(App.app.getString(R.string.setting_plc_send_success));
+                    LogUtils.logWrite("闹钟执行成功。");
+                } else {
+                    showToast(App.app.getString(R.string.setting_plc_send_fail));
+                    LogUtils.logWrite("闹钟执行失败。");
+                }
+            }
+        });
+    }
 
     @Subscribe(threadMode = ThreadMode.MAIN)
     public void event(ErrorApiMessageEvent messageEvent) {
@@ -870,7 +982,17 @@ public class RemoteSupportService extends Service {
                 .subscribe(observer);
         mDisposables.add(observer);
     }
-
+    protected  void addSubscription(Observable observable, DisposableObserver observer) {
+        if (mDisposables == null) {
+            mDisposables = new CompositeDisposable();
+        }
+        observable
+                .unsubscribeOn(Schedulers.io())
+                .subscribeOn(Schedulers.io())
+                .observeOn(AndroidSchedulers.mainThread())
+                .subscribe(observer);
+        mDisposables.add(observer);
+    }
     private void stopHeartbeat() {
         if (timerHeartbeat != null) {
             taskHeartbeat.cancel();
@@ -1077,4 +1199,40 @@ public class RemoteSupportService extends Service {
                 });
     }
 
+    int sendApkVersionNumber = 1;
+
+
+    private void sendApkVersion() {
+        //通知到后台
+        HashMap<String, String> params = new HashMap<>();
+        params.put("clientId", Heartbeat.deviceId);
+        params.put("apkVersion", App.app.getVersionName());
+        addSubscription(NoPayOrderStringApi.api.sendApkVersion(params).compose(HttpStringResultHandler.<String>transformer()),
+                new HttpResultNotActivityObserver<String>(view, BaseApplication.getContext()) {
+                    @Override
+                    public void onNext(String data) {
+                        LogUtil.d("sendApkVersion", "onNext: " + data);
+                        LogUtils.logWrite("apkVersion onnext:" + data);
+                        sendApkVersionNumber = 1;
+                    }
+
+                    @Override
+                    public void onError(Throwable t) {
+                        super.onError(t);
+                        LogUtils.logWrite("apkVersion onerro:" + t.getMessage());
+
+                        LogUtil.d("sendApkVersion", "onerror: " + t.getMessage());
+                        if (sendApkVersionNumber < 3) {
+                            new Handler().postDelayed(new Runnable() {
+                                @Override
+                                public void run() {
+                                    sendApkVersion();
+                                }
+                            }, 5000);
+                        }
+                        sendApkVersionNumber++;
+                    }
+                });
+    }
+
 }

+ 77 - 0
app/src/main/java/com/bgy/autosale/TimedCleaningTaskAlarmReceiver.java

@@ -0,0 +1,77 @@
+package com.bgy.autosale;
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.text.format.DateFormat;
+import android.util.Log;
+
+import com.hboxs.base_library.constant.Global;
+import com.hboxs.base_library.constant.Name;
+import com.hboxs.base_library.event.ApiMessageEvent;
+import com.hboxs.base_library.util.LogUtils;
+import com.hboxs.base_library.util.SharedPreferencesUtils;
+
+import org.greenrobot.eventbus.EventBus;
+
+/**
+ * 监听并启动定时清洗任务广播.
+ */
+public class TimedCleaningTaskAlarmReceiver extends BroadcastReceiver {
+    private static final String TAG = "TimedCleaningTaskAlarmR";
+
+    @Override
+    public void onReceive(Context context, Intent intent) {
+        long intervalMillis = intent.getLongExtra("intervalMillis", 0);
+        String msg = intent.getStringExtra("msg");
+//        if (intervalMillis != 0) {
+//            AlarmManagerUtil.setAlarmTime(context, System.currentTimeMillis() + intervalMillis,
+//                    intent);
+//        }
+        long sysTime = System.currentTimeMillis();//获取系统时间
+        CharSequence sysTimeStr = DateFormat.format("yyyy-MM-dd HH:mm:ss", sysTime);//时间显示格式
+        Log.d(TAG, "AlarmManagerUtil parseWeekTim onReceivetime: " + msg + sysTimeStr);
+        LogUtils.logWrite("parseWeekTim onReceivetime: " + msg);
+        if ("off".equals(msg)) {
+            EventBus.getDefault().post(new ApiMessageEvent(Name.OFFTIME, "关机"));
+            Global.openOrClose = 1;
+        } else if ("boot".equals(msg)) {
+            //开机了则不能开机了。
+            Integer open = (Integer) SharedPreferencesUtils.getParam("open", 0);
+            if (open != 1) {
+                EventBus.getDefault().post(new ApiMessageEvent(Name.BOOTIME, "开机"));
+            }
+            Global.openOrClose = 0;
+        } else if ("0".equals(msg)) {
+            //开机了则不能开机了。
+            Integer open = (Integer) SharedPreferencesUtils.getParam("open", 0);
+            LogUtils.logWrite("定时开机:" + open);
+//            if (open!=1) {
+            EventBus.getDefault().post(new ApiMessageEvent(Name.BOOTIME, "开机"));
+//            }
+            Global.openOrClose = 0;
+        } else if ("1".equals(msg)) {
+            //开启一个定时闹钟,1.弹窗。2.倒计时。3.关机 4.结束弹窗
+            EventBus.getDefault().post(new ApiMessageEvent(Name.OFFTIME, "关机"));
+            Global.openOrClose = 1;
+        } else if ("1hotwater".equals(msg)) {
+            EventBus.getDefault().post(new ApiMessageEvent(Name.OFFTIME + "hotwater", "关机"));
+            LogUtils.logWrite("自动烧水5");
+//        } else if ("1show".equals(msg)) {
+//            EventBus.getDefault().post(new ApiMessageEvent(Name.OFFTIME + "show", "关机"));
+//            LogUtils.logWrite("自动烧水11");
+        }  else if ("2".equals(msg)) {
+            LogUtils.logWrite("休眠2?:" + msg);
+            EventBus.getDefault().post(new ApiMessageEvent("is_sleep", "1"));//睡眠  15:31,10:7
+        } else if ("3".equals(msg)) {
+            LogUtils.logWrite("休眠3?:" + msg);
+            EventBus.getDefault().post(new ApiMessageEvent("is_sleep", "0"));//唤醒。
+        } else if ("4".equals(msg)) {
+            LogUtils.logWrite("定时切换制冷:" + msg);
+            EventBus.getDefault().post(new ApiMessageEvent("is_cooling", "0"));//唤醒。
+        } else if ("5".equals(msg)) {
+            LogUtils.logWrite("定时切换保鲜:" + msg);
+            EventBus.getDefault().post(new ApiMessageEvent("is_freshness", "0"));//唤醒。
+        }
+    }
+}

+ 1 - 1
app/src/main/java/com/bgy/autosale/helpers/CommunicationHelper.java

@@ -227,7 +227,7 @@ public class CommunicationHelper {
                             }
                             parserDeviceStatus();
                             if (IceCreamErrorUtils.getInstance().getErrorMessage() != null) {
-                                LogUtils.logWrite("机器报警了:");
+                                LogUtils.logWrite("机器报警了:"+IceCreamErrorUtils.getInstance().getErrorMessage());
                                 String[] parts = IceCreamErrorUtils.getInstance().getErrorMessage().split(",");
                                 HashSet<String> tempSet = new HashSet<>();
                                 for (String part : parts) {

+ 284 - 0
app/src/main/java/com/bgy/autosale/payutil/dialog/AlarmClockDialog.java

@@ -0,0 +1,284 @@
+package com.bgy.autosale.payutil.dialog;
+
+import android.app.Activity;
+import android.content.Context;
+import android.support.v7.widget.SwitchCompat;
+import android.util.Log;
+import android.view.View;
+import android.widget.Button;
+import android.widget.CheckBox;
+import android.widget.EditText;
+import android.widget.RadioButton;
+import android.widget.RadioGroup;
+import android.widget.TextView;
+
+import com.bgy.autosale.R;
+import com.bgy.autosale.databinding.DialogAlarmClockBinding;
+import com.example.spunsugar.system.model.bean.AlarmClockBean;
+import com.hboxs.base_library.beans.enums.AlarmClockTypeEnum;
+import com.hboxs.base_library.beans.enums.WeekEnum;
+import com.hboxs.base_library.util.ToastUtil;
+import com.hboxs.base_library.util.UiUtil;
+import com.hboxs.base_library.widget.BaseDialog;
+
+import java.util.ArrayList;
+import java.util.Objects;
+
+/**
+ * @author whw
+ * @time 2019/3/13
+ * @Description 闹钟对话框
+ */
+public class AlarmClockDialog extends BaseDialog implements View.OnClickListener, RadioGroup.OnCheckedChangeListener {
+    private static final String TAG = "AlarmClockDialog";
+    private DialogAlarmClockBinding binding;
+    private TimePickerDialog timePickerDialog;
+
+    private int type = 1;// 1为添加 2为更新
+
+    private AlarmClockTypeEnum alarmClockTypeEnum = AlarmClockTypeEnum.CHANGE_COOLING;
+    private int size = 0; //作为id使用,获取闹钟个数
+
+    private AlarmClockBean alarmClockBean;//更新的时候需要进行存储的。
+
+
+    public void setListener(DialogClickListener listener) {
+        this.listener = listener;
+    }
+
+    private DialogClickListener listener;
+
+    public AlarmClockDialog(Context context, Activity activity) {
+        super(context, activity);
+    }
+
+    private TextView tvTime;
+    private CheckBox cbSunday, cbMonday, cbTuesday, cbSaturday, cbWednesday, cbThursday, cbFriday;
+    private SwitchCompat scOnOffSwitch;
+    private EditText etAlarnClockTitle;
+    private RadioButton rbOpenDev, rbCloseDev, rbOpenSleep, rbCloseSleep, rbChangeCooling, rbChangeFreshness;
+    private Button btnClockCancel, btnClockConfirm;
+    private RadioGroup rgType;
+
+    @Override
+    protected void initView() {
+        binding = (DialogAlarmClockBinding) viewDataBinding;
+        tvTime = findViewById(R.id.tv_time);
+        cbSunday = findViewById(R.id.cb_sunday);
+        cbMonday = findViewById(R.id.cb_monday);
+        cbTuesday = findViewById(R.id.cb_tuesday);
+        cbSaturday = findViewById(R.id.cb_saturday);
+        cbThursday = findViewById(R.id.cb_thursday);
+        cbFriday = findViewById(R.id.cb_friday);
+        cbWednesday = findViewById(R.id.cb_wednesday);
+        scOnOffSwitch = findViewById(R.id.sc_on_off_switch);
+        etAlarnClockTitle = findViewById(R.id.et_alarn_clock_title);
+
+        rbOpenDev = findViewById(R.id.rb_open_dev);
+        rbCloseDev = findViewById(R.id.rb_close_dev);
+        rbOpenSleep = findViewById(R.id.rb_open_sleep);
+        rbCloseSleep = findViewById(R.id.rb_close_sleep);
+        rbChangeCooling = findViewById(R.id.rb_change_cooling);
+        rbChangeFreshness = findViewById(R.id.rb_change_freshness);
+
+        tvTime.setOnClickListener(this);
+        btnClockCancel = findViewById(R.id.btn_clock_cancel);
+        btnClockConfirm = findViewById(R.id.btn_clock_confirm);
+
+        btnClockCancel.setOnClickListener(this);
+        btnClockConfirm.setOnClickListener(this);
+        rgType = findViewById(R.id.rg_type);
+        rgType.setOnCheckedChangeListener(this);
+    }
+
+    @Override
+    public void show() {
+        super.show();
+    }
+
+    @Override
+    protected int getLayout() {
+        return R.layout.dialog_alarm_clock;
+    }
+
+    @Override
+    protected int getAnimType() {
+        return ANIM_CENTER_IN_OUT;
+    }
+
+    @Override
+    public void onClick(View v) {
+        int id = v.getId();
+        if (id == R.id.tv_time) {
+            showTimePickerDialog();
+        } else if (id == R.id.btn_clock_cancel) {
+            dismiss();
+        } else if (id == R.id.btn_clock_confirm) {
+            AlarmClockBean alarmClockBean;
+            if (type == 1) {
+                alarmClockBean = new AlarmClockBean();
+                alarmClockBean.setId(String.valueOf(size));
+            } else {
+                alarmClockBean = this.alarmClockBean;
+            }
+            Log.d(TAG, "onClick: " + alarmClockBean.getId());
+            alarmClockBean.setStatus(scOnOffSwitch.isChecked());
+            alarmClockBean.setName(etAlarnClockTitle.getText().toString().trim());
+            ArrayList<WeekEnum> calendars = new ArrayList<>();
+            if (cbSunday.isChecked()) {
+                calendars.add(WeekEnum.SUNDAY);
+            }
+            if (cbMonday.isChecked()) {
+                calendars.add(WeekEnum.MONDAY);
+            }
+            if (cbTuesday.isChecked()) {
+                calendars.add(WeekEnum.TUESDAY);
+            }
+            if (cbWednesday.isChecked()) {
+                calendars.add(WeekEnum.WEDNESDAY);
+            }
+            if (cbThursday.isChecked()) {
+                calendars.add(WeekEnum.THURSDAY);
+            }
+            if (cbFriday.isChecked()) {
+                calendars.add(WeekEnum.FRIDAY);
+            }
+            if (cbSaturday.isChecked()) {
+                calendars.add(WeekEnum.SATURDAY);
+            }
+            if (calendars.size() == 0) {
+                ToastUtil.showToast(UiUtil.getStringRes(R.string.set_week));
+                return;
+            }
+            alarmClockBean.setWeek(calendars);
+            String[] split = tvTime.getText().toString().trim().split(":");
+            alarmClockBean.setHour(split[0]);
+            alarmClockBean.setMinute(split[1]);
+            alarmClockBean.setType(alarmClockTypeEnum);
+            listener.onClickListener(type, alarmClockBean);
+        }
+
+    }
+
+
+    /**
+     * 闹钟数据
+     */
+    private void showTimePickerDialog() {
+        if (timePickerDialog == null) {
+            timePickerDialog = new TimePickerDialog(getContext(), mActivity);
+        }
+        timePickerDialog.setListener(new TimePickerDialog.DialogClickListener() {
+            @Override
+            public void onClickListener(String text) {
+                tvTime.setText(text);
+            }
+        });
+        timePickerDialog.show();
+
+        Objects.requireNonNull(timePickerDialog.getWindow()).setBackgroundDrawableResource(android.R.color.transparent);
+
+    }
+
+    @Override
+    public void onCheckedChanged(RadioGroup radioGroup, int checkedId) {
+        Log.d(TAG, "onClick onCheckedChanged: ");
+        if (checkedId == R.id.rb_open_dev) {
+            alarmClockTypeEnum = AlarmClockTypeEnum.OPEN_DEV;
+        } else if (checkedId == R.id.rb_open_sleep) {
+            alarmClockTypeEnum = AlarmClockTypeEnum.START_SLEEP;
+        } else if (checkedId == R.id.rb_close_dev) {
+            alarmClockTypeEnum = AlarmClockTypeEnum.CLOSE_DEV;
+        } else if (checkedId == R.id.rb_close_sleep) {
+            alarmClockTypeEnum = AlarmClockTypeEnum.END_SLEEP;
+        } else if (checkedId == R.id.rb_change_cooling) {
+            alarmClockTypeEnum = AlarmClockTypeEnum.CHANGE_COOLING;
+        } else if (checkedId == R.id.rb_change_freshness) {
+            alarmClockTypeEnum = AlarmClockTypeEnum.CHANGE_FRESHNESS;
+        }
+    }
+
+    public void setData(AlarmClockBean alarmClockBean) {
+        this.alarmClockBean = alarmClockBean;
+        ArrayList<WeekEnum> week = alarmClockBean.getWeek();
+        for (WeekEnum weekEnum : week) {
+            switch (weekEnum) {
+                case SUNDAY:
+                    cbSunday.setChecked(true);
+                    break;
+                case MONDAY:
+                    cbMonday.setChecked(true);
+                    break;
+                case TUESDAY:
+                    cbTuesday.setChecked(true);
+                    break;
+                case WEDNESDAY:
+                    cbWednesday.setChecked(true);
+                    break;
+                case THURSDAY:
+                    cbThursday.setChecked(true);
+                    break;
+                case FRIDAY:
+                    cbFriday.setChecked(true);
+                    break;
+                case SATURDAY:
+                    cbSaturday.setChecked(true);
+                    break;
+            }
+        }
+        String hour = alarmClockBean.getHour();
+        String minute = alarmClockBean.getMinute();
+        tvTime.setText(hour + ":" + minute);
+        AlarmClockTypeEnum type = alarmClockBean.getType();
+        switch (type) {
+            case OPEN_DEV:
+                rbOpenDev.setChecked(true);
+                break;
+            case CLOSE_DEV:
+                rbCloseDev.setChecked(true);
+                break;
+            case START_SLEEP:
+                rbOpenSleep.setChecked(true);
+                break;
+            case END_SLEEP:
+                rbCloseSleep.setChecked(true);
+                break;
+            case CHANGE_COOLING:
+                rbChangeCooling.setChecked(true);
+                break;
+            case CHANGE_FRESHNESS:
+                rbChangeFreshness.setChecked(true);
+                break;
+        }
+        scOnOffSwitch.setChecked(alarmClockBean.getStatus());
+        String name = alarmClockBean.getName();
+        etAlarnClockTitle.setText(name);
+
+    }
+
+    //用于判断是更新还是添加
+    public void setType(int i) {
+        this.type = i;
+    }
+
+    public void cleanData(int size) {
+        this.size = size;
+        cbSunday.setChecked(true);
+        cbMonday.setChecked(true);
+        cbTuesday.setChecked(true);
+        cbWednesday.setChecked(true);
+        cbThursday.setChecked(true);
+        cbFriday.setChecked(true);
+        cbSaturday.setChecked(true);
+        tvTime.setText("12:00");
+        rbChangeCooling.setChecked(true);
+
+        scOnOffSwitch.setChecked(true);
+        etAlarnClockTitle.setText(UiUtil.getStringRes(R.string.alarm_clock));
+    }
+
+    public interface DialogClickListener {
+
+        void onClickListener(int type, AlarmClockBean alarmClockBean);
+    }
+}

+ 111 - 0
app/src/main/java/com/bgy/autosale/payutil/dialog/TimePickerDialog.java

@@ -0,0 +1,111 @@
+package com.bgy.autosale.payutil.dialog;
+
+import android.app.Activity;
+import android.content.Context;
+import android.util.Log;
+import android.view.View;
+import android.widget.Button;
+import android.widget.TimePicker;
+
+import com.hboxs.base_library.R;
+import com.hboxs.base_library.util.LogUtils;
+import com.hboxs.base_library.widget.BaseDialog;
+import com.orhanobut.hawk.Hawk;
+
+import java.util.Calendar;
+
+public class TimePickerDialog extends BaseDialog {
+    private static final String TAG = "TimePickerDialog";
+    private TimePicker timePicker;
+    private Button btnClockConfirm, btnClockCancel;
+    private int mHourOfDay, mMinute;
+    private boolean a=false;
+
+    public TimePickerDialog(Context context, Activity activity) {
+        super(context, activity);
+    }
+
+
+    @Override
+    public void show() {
+        super.show();
+    }
+    private DialogClickListener listener;
+
+    public void setListener(DialogClickListener listener) {
+        this.listener = listener;
+        Log.d(TAG, "setListenerDialogClickListener: 1" + this.listener);
+    }
+
+    @Override
+    protected void initView() {
+        timePicker = findViewById(R.id.timepicker);
+        timePicker.setIs24HourView(true);
+        timePicker.setDescendantFocusability(TimePicker.FOCUS_BLOCK_DESCENDANTS);
+        btnClockConfirm = findViewById(R.id.btn_clock_confirm);
+        Calendar now = Calendar.getInstance();
+        int hour=now.get(Calendar.HOUR_OF_DAY);
+        int min=now.get(Calendar.MINUTE);
+        timePicker.setOnTimeChangedListener(new TimePicker.OnTimeChangedListener() {
+            @Override
+            public void onTimeChanged(TimePicker view, int hourOfDay, int minute) {
+
+                Log.d(TAG, "onTimeChanged1: " + hourOfDay + ":" + minute);
+                 a=true;
+                mHourOfDay = hourOfDay;
+                mMinute = minute;
+            }
+        });
+        btnClockConfirm.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                if (mHourOfDay != 0||a) {
+                    if (mMinute < 10) {
+                        Hawk.put("AlarmClock", mHourOfDay + ":0" + mMinute);
+                    } else {
+                        Hawk.put("AlarmClock", mHourOfDay + ":" + mMinute);
+                    }
+                    LogUtils.logWrite("AlarmClock1:"+mHourOfDay + ":" + mMinute);
+                } else {
+                    //当前时间
+                    if (min < 10) {
+                        Hawk.put("AlarmClock", hour + ":0" + min);
+                    } else {
+                        Hawk.put("AlarmClock", hour + ":" + min);
+                    }
+                    LogUtils.logWrite("AlarmClock2:"+mHourOfDay + ":" + mMinute);
+                }
+                Log.d(TAG, "onTimeChanged2: " + mHourOfDay + ":" + mMinute);
+                LogUtils.logWrite("当前选择时间:"+mHourOfDay + ":" + mMinute);
+
+                listener.onClickListener(Hawk.get("AlarmClock"));
+                dismiss();
+            }
+        });
+
+        btnClockCancel = findViewById(R.id.btn_clock_cancel);
+        btnClockCancel.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                dismiss();
+            }
+        });
+        setCanceledOnTouchOutside(false);
+    }
+
+    @Override
+    protected int getLayout() {
+        return R.layout.dialog_alarm_clock_tp;
+    }
+
+    @Override
+    protected int getAnimType() {
+        return 0;
+    }
+
+    public interface DialogClickListener {
+
+        void onClickListener( String str);
+
+    }
+}

+ 2 - 2
app/src/main/java/com/bgy/autosale/ui/MainActivity.java

@@ -20,6 +20,7 @@ import com.bgy.autosale.R;
 import com.bgy.autosale.entitys.ContactBean;
 import com.bgy.autosale.helpers.CleanScheduleHelper;
 import com.bgy.autosale.helpers.CommunicationHelper;
+import com.bgy.autosale.helpers.ErrorViewHelper;
 import com.bgy.autosale.helpers.NetTimeClock;
 import com.bgy.autosale.helpers.ResourceDownloadHelper;
 import com.bgy.autosale.helpers.SQLiteHelper;
@@ -363,13 +364,12 @@ public class MainActivity extends BaseScanGunActivity {
         PlcLog.getInstance().e_s(TAG, "initMainView");
         UISoundHelper.getInstance();
         findViewById(R.id.main_fragment).setVisibility(View.VISIBLE);
-        if (isSleep != 0 && !SPUtils.getInstance(App.app).getBoolean(Constant.LOCK_IN_ERROR, false)) {
+        if (!SPUtils.getInstance(App.app).getBoolean(Constant.LOCK_IN_ERROR, false)) {
             App.app.initDeviceStateListener();//是否开机
         }
 
         if (initView != null) {
             ViewGroup group = (ViewGroup) initView.getParent();
-
             group.removeView(initView);
             group.removeView(snView);
             initView = null;

+ 129 - 0
app/src/main/java/com/bgy/autosale/ui/adapters/AlarmClockAdapter.java

@@ -0,0 +1,129 @@
+package com.bgy.autosale.ui.adapters;
+
+import android.annotation.SuppressLint;
+import android.support.v7.widget.RecyclerView;
+import android.support.v7.widget.SwitchCompat;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.Button;
+import android.widget.CompoundButton;
+import android.widget.TextView;
+
+import com.bgy.autosale.R;
+import com.example.spunsugar.system.model.bean.AlarmClockBean;
+import com.hboxs.base_library.beans.enums.WeekEnum;
+import com.hboxs.base_library.util.UiUtil;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class AlarmClockAdapter extends RecyclerView.Adapter<AlarmClockAdapter.ViewHolder> {
+
+    private static final String TAG = "AlarmClockAdapter";
+    private List<AlarmClockBean> datas;
+
+    public void setDatas(List<AlarmClockBean> datas) {
+        this.datas = datas;
+    }
+
+    @Override
+    public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
+        View inflate = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item_alarm_clock, viewGroup, false);
+        ViewHolder viewHolder = new ViewHolder(inflate);
+        return viewHolder;
+    }
+
+    @SuppressLint("SetTextI18n")
+    @Override
+    public void onBindViewHolder(ViewHolder viewHolder, @SuppressLint("RecyclerView") int position) {
+        AlarmClockBean alarmClockBean = datas.get(position);
+        Log.d(TAG, "onBindViewHolder: " + alarmClockBean);
+        viewHolder.tvClockName.setText(alarmClockBean.getName());
+        viewHolder.tvClockTime.setText(alarmClockBean.getHour()+":"+alarmClockBean.getMinute());
+        ArrayList<WeekEnum> week = alarmClockBean.getWeek();
+        String wek = "";
+        for (WeekEnum weekEnum : week) {
+            wek += UiUtil.getStringRes(UiUtil.getResId(weekEnum.getContent(), R.string.class)) + " ";
+        }
+        viewHolder.tvWeek.setText(wek);
+        viewHolder.tvClockType.setText(UiUtil.getStringRes(UiUtil.getResId(alarmClockBean.getType().getContent(), R.string.class)));
+        viewHolder.scStatus.setChecked(alarmClockBean.getStatus());
+
+        viewHolder.scStatus.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
+            @Override
+            public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
+                dialogClickListener.onCheckedChanged(1, position, b);
+            }
+        });
+        viewHolder.tvClockTime.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View view) {
+                dialogClickListener.onClickListener(2, position);
+            }
+        });
+        viewHolder.btnClockChange.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View view) {
+                dialogClickListener.onClickListener(2, position);
+
+            }
+        });
+        viewHolder.btnClockDelete.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View view) {
+                dialogClickListener.onClickListener(3, position);
+
+            }
+        });
+    }
+
+    public AlarmClockAdapter(List<AlarmClockBean> datas) {
+        this.datas = datas;
+    }
+
+
+    @Override
+    public int getItemCount() {
+        return datas.size();
+    }
+
+
+    public class ViewHolder extends RecyclerView.ViewHolder {
+        SwitchCompat scStatus;
+        TextView tvClockName;
+        TextView tvClockTime;
+        Button btnClockChange, btnClockDelete;
+        TextView tvClockType;
+
+        TextView tvWeek;
+
+        public ViewHolder(View inflate) {
+            super(inflate);
+            tvClockType = itemView.findViewById(R.id.tv_clock_type);
+            tvClockTime = itemView.findViewById(R.id.tv_clock_time);
+            scStatus = itemView.findViewById(R.id.sc_status);
+            btnClockChange = itemView.findViewById(R.id.btn_clock_change);
+            btnClockDelete = itemView.findViewById(R.id.btn_clock_delete);
+            tvClockName = itemView.findViewById(R.id.tv_clock_name);
+            tvWeek = itemView.findViewById(R.id.tv_week);
+        }
+    }
+
+    private DialogClickListener dialogClickListener;
+
+    public void setListener(DialogClickListener dialogClickListener) {
+        this.dialogClickListener = dialogClickListener;
+    }
+
+    public interface DialogClickListener {
+
+        void onClickListener(int type, int position);
+
+        void onCheckedChanged(int type, int position, boolean falg);
+    }
+
+}
+
+

+ 4 - 0
app/src/main/java/com/bgy/autosale/ui/consumer/IceCreamFragment.java

@@ -545,6 +545,10 @@ public class IceCreamFragment extends BaseAutoExitFragment implements View.OnCli
 //                showToast(getString(R.string.credit_failed));
 //                return;
 //            }
+            if (!CommunicationHelper.getInstance().canGenerateOrder()){
+                ToastUtil.getInstance().showText("设备异常");
+                return;
+            }
             addShopCart();
 
         } else if (id == R.id.dishes_sauce_1) {

+ 10 - 0
app/src/main/java/com/bgy/autosale/ui/operator/DeviceManagerActivity.java

@@ -33,6 +33,7 @@ import com.bgy.autosale.ui.operator.fragments.CommonFragment;
 import com.bgy.autosale.ui.operator.fragments.ControlFragment;
 import com.bgy.autosale.ui.operator.fragments.DevicesWarningFragment;
 import com.bgy.autosale.ui.operator.fragments.LogFragment;
+import com.bgy.autosale.ui.operator.fragments.OtherSettingFragment;
 import com.bgy.autosale.ui.operator.fragments.PriceFragment;
 import com.bgy.autosale.ui.operator.fragments.SwitchFragment;
 import com.bgy.autosale.ui.operator.fragments.TechnologySupportFragment;
@@ -63,6 +64,7 @@ public class DeviceManagerActivity extends BaseActivity implements View.OnClickL
     private final int ACTION_CLEAN = 5;
     private final int ACTION_SUPPORT = 6;
     private final int ACTION_ERRRECORD = 7;
+    private final int ACTION_OTHER = 8;
 
     private CommonFragment commonFragment;
     private SwitchFragment switchFragment;
@@ -72,6 +74,7 @@ public class DeviceManagerActivity extends BaseActivity implements View.OnClickL
     private CleanConfigFragment cleanFragment;
     private TechnologySupportFragment technologySupportFragment;
     private DevicesWarningFragment warningFragment;
+    private OtherSettingFragment otherSettingFragment;
 
     private InfoView dialog;
 
@@ -115,6 +118,7 @@ public class DeviceManagerActivity extends BaseActivity implements View.OnClickL
         list.add(new NavBean(R.string.setting_technology_upload_log, ACTION_LOG));
         list.add(new NavBean(R.string.setting_technology_clean_config, ACTION_CLEAN));
         list.add(new NavBean(R.string.setting_technology, ACTION_SUPPORT));
+        list.add(new NavBean(R.string.setting_technology_other,ACTION_OTHER));
 
         adapter = new NavAdapter(this, list, this);
         recyclerView.setAdapter(adapter);
@@ -247,6 +251,12 @@ public class DeviceManagerActivity extends BaseActivity implements View.OnClickL
                 }
                 fragment = technologySupportFragment;
                 break;
+            case ACTION_OTHER:
+                if (otherSettingFragment == null) {
+                    otherSettingFragment = OtherSettingFragment.getFragment();
+                }
+                fragment = otherSettingFragment;
+                break;
         }
         if (fragment != null) {
             getSupportFragmentManager().beginTransaction()

+ 470 - 0
app/src/main/java/com/bgy/autosale/ui/operator/LocalAlarmClockActivity.java

@@ -0,0 +1,470 @@
+package com.bgy.autosale.ui.operator;
+
+import android.os.Bundle;
+import android.support.annotation.Nullable;
+import android.support.v7.widget.LinearLayoutManager;
+import android.support.v7.widget.RecyclerView;
+import android.text.format.DateFormat;
+import android.util.Log;
+import android.view.View;
+import android.widget.RadioButton;
+import android.widget.TextView;
+
+import com.bgy.autosale.R;
+import com.bgy.autosale.databinding.ActivityLocalalarmclockBinding;
+import com.bgy.autosale.payutil.dialog.AlarmClockDialog;
+import com.bgy.autosale.ui.adapters.AlarmClockAdapter;
+import com.bgy.autosale.ui.base.BaseScanGunActivity;
+import com.example.spunsugar.system.model.bean.AlarmClockBean;
+import com.hboxs.base_library.base.BaseApplication;
+import com.hboxs.base_library.beans.enums.AlarmClockTypeEnum;
+import com.hboxs.base_library.beans.enums.WeekEnum;
+import com.hboxs.base_library.callback.DialogClickListener;
+import com.hboxs.base_library.constant.Global;
+import com.hboxs.base_library.constant.Name;
+import com.hboxs.base_library.dialog.NormalDialog;
+import com.hboxs.base_library.util.AlarmManagerUtil;
+import com.hboxs.base_library.util.LogUtils;
+import com.hboxs.base_library.util.SharedPreferencesUtils;
+import com.hboxs.base_library.util.ToastUtil;
+import com.hboxs.base_library.util.UiUtil;
+import com.orhanobut.hawk.Hawk;
+
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.Timer;
+import java.util.TimerTask;
+
+/**
+ * 本地闹钟
+ */
+public class LocalAlarmClockActivity extends BaseScanGunActivity implements  View.OnClickListener{
+    private static final String TAG = "LocalAlarmClockActivity";
+    private ActivityLocalalarmclockBinding binding;
+    private ArrayList<AlarmClockBean> alarmClockBeans;
+    private AlarmClockAdapter alarmClockAdapter;
+    private AlarmClockDialog clockDialog;
+    private int currentPosition = 0;
+    private Boolean alarmclockType;
+    private NormalDialog saveDialog;
+
+    private RadioButton rbLocalAlarmclock,rbRemoteAlarmclock;
+    private RecyclerView rvAlarmClock;
+    private TextView tvAlarmClockTips,tvCurrentDate;
+
+    @Override
+    protected void onCreate(@Nullable Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.activity_localalarmclock);
+        binding = ActivityLocalalarmclockBinding.inflate(getLayoutInflater());
+        findViewById(R.id.setting_back).setOnClickListener(this);
+        findViewById(R.id.btn_clock_add).setOnClickListener(this);
+        tvCurrentDate=findViewById(R.id.tv_current_date);
+        rbLocalAlarmclock= findViewById(R.id.rb_local_alarmclock);
+//        rbLocalAlarmclock.setOnClickListener(this);
+
+        rbRemoteAlarmclock=findViewById(R.id.rb_remote_alarmclock);
+        rbRemoteAlarmclock.setOnClickListener(this);
+        rbRemoteAlarmclock.setVisibility(View.GONE);
+        tvAlarmClockTips=findViewById(R.id.tv_alarm_clock_tips);
+        tvAlarmClockTips.setVisibility(View.GONE);
+
+
+        rvAlarmClock=findViewById(R.id.rv_alarm_clock);
+        initView();
+        initData();
+    }
+
+    @Override
+    public void onClick(View view) {
+        int id = view.getId();
+        if (id == R.id.setting_back) {
+            finish();
+        } else if (id == R.id.rb_local_alarmclock) {
+            isEdited(R.id.rb_local_alarmclock);
+        } else if (id == R.id.rb_remote_alarmclock) {
+            isEdited(R.id.rb_remote_alarmclock);
+        } else if (id==R.id.btn_clock_add) {
+            Log.d(TAG, "onClick: btnClockAdd");
+            if (alarmClockBeans.size()>9) {
+                ToastUtil.showToast("您好,闹钟个数只限9个");
+                return;
+            }
+            Log.d(TAG, "onClick: btnClockAdd1");
+            showCheckDialog(4);
+        }
+    }
+
+
+    private void initView() {
+//        binding.btnClockAdd.setOnClickListener(new View.OnClickListener() {
+//            @Override
+//            public void onClick(View view) {
+//                Log.d(TAG, "onClick: btnClockAdd");
+//                if (alarmClockBeans.size()>9) {
+//                    ToastUtil.showToast("您好,闹钟个数只限9个");
+//                    return;
+//                }
+//                Log.d(TAG, "onClick: btnClockAdd1");
+//                showCheckDialog(1);
+//            }
+//        });
+//        setAlarmClock(); 进来就重新设置一次闹钟,实际没有必要。
+        alarmclockType = Hawk.get(Name.ALARMCLOCK_TYPE, true);
+        if (alarmclockType) {
+            rbLocalAlarmclock.setChecked(true);
+            rbLocalAlarmclock.setBackground(UiUtil.getDrawableRes(R.drawable.shape_btn_orange));
+            rbLocalAlarmclock.setTextColor(UiUtil.getColorRes(R.color.c_white));
+            rbRemoteAlarmclock.setBackground(UiUtil.getDrawableRes(R.drawable.shape_btn_add));
+            rbRemoteAlarmclock.setTextColor(UiUtil.getColorRes(R.color.colorGray));
+        }else{
+            rbRemoteAlarmclock.setChecked(true);
+            rbRemoteAlarmclock.setBackground(UiUtil.getDrawableRes(R.drawable.shape_btn_orange));
+            rbRemoteAlarmclock.setTextColor(UiUtil.getColorRes(R.color.c_white));
+            rbLocalAlarmclock.setBackground(UiUtil.getDrawableRes(R.drawable.shape_btn_add));
+            rbLocalAlarmclock.setTextColor(UiUtil.getColorRes(R.color.colorGray));
+        }
+        startTimeCountDown();
+    }
+
+
+
+
+    private void initData() {
+        alarmClockBeans = Hawk.get(Name.LOCAL_ALARM_CLOCK,new ArrayList<AlarmClockBean>());
+        alarmClockAdapter = new AlarmClockAdapter(alarmClockBeans);
+        alarmClockAdapter.setListener(new AlarmClockAdapter.DialogClickListener() {
+            @Override
+            public void onClickListener(int type, int position) {
+                currentPosition =position;
+                Log.d(TAG, "onClickListener: ");
+                switch (type){
+                    case 2:
+                        showCheckDialog(2);
+                        break;
+                    case 3:
+                        AlarmClockBean remove = alarmClockBeans.remove(position);
+                        alarmClockAdapter.setDatas(alarmClockBeans);
+                        alarmClockAdapter.notifyDataSetChanged();
+                        Hawk.put(Name.LOCAL_ALARM_CLOCK, alarmClockBeans);
+                        //关闭指定的闹钟。
+                        Integer number = Integer.valueOf(remove.getId());
+                        for (int i = number*1000; i < number*1000+remove.getWeek().size(); i++) {//清除所有的闹钟
+                            AlarmManagerUtil.cancelAlarm(BaseApplication.getContext(), AlarmManagerUtil.ALARM_ACTION, i);
+                            Log.d(TAG, "setAlarmClock闹钟类型--: "+( + i));
+                        }
+                        break;
+                }
+            }
+
+            @Override
+            public void onCheckedChanged(int type, int position, boolean falg) {
+                AlarmClockBean alarmClockBean = alarmClockBeans.get(position);
+                alarmClockBean.setStatus(falg);
+                alarmClockAdapter.setDatas(alarmClockBeans);
+                alarmClockAdapter.notifyDataSetChanged();
+                Hawk.put(Name.LOCAL_ALARM_CLOCK, alarmClockBeans);
+                if (falg==false) {
+                    //关闭指定的闹钟。说明需要关闭指定的闹钟
+                    for (int i = position*1000; i < (position*1000)+10; i++) {//清除所有的闹钟
+                        AlarmManagerUtil.cancelAlarm(BaseApplication.getContext(), AlarmManagerUtil.ALARM_ACTION, i);
+                    }
+                }else{
+                    //修改后,闹钟也要一同修改。
+                        try {
+                            int number = Integer.valueOf(alarmClockBean.getId()) * 10;
+                            Log.d(TAG, "onCheckedChanged: ");
+                            setAlarmClock(number, alarmClockBean, alarmClockBean.getType().getType() + "", number + 7);
+                        } catch (ParseException e) {
+                            throw new RuntimeException(e);
+                        }
+                }
+            }
+        });
+        LinearLayoutManager layoutManager = new LinearLayoutManager(getBaseContext());
+        rvAlarmClock.setLayoutManager(layoutManager);
+        rvAlarmClock.setAdapter(alarmClockAdapter);
+        Log.d(TAG, "initData: ");
+    }
+
+
+
+    /**
+     * 闹钟数据
+     */
+    private void showCheckDialog(int type) {
+        Log.d(TAG, "showCheckDialog: ");
+        if (clockDialog == null) {
+            clockDialog = new AlarmClockDialog(LocalAlarmClockActivity.this, LocalAlarmClockActivity.this);
+        }
+        clockDialog.setListener(new AlarmClockDialog.DialogClickListener() {
+            @Override
+            public void onClickListener(int type, AlarmClockBean alarmClockBean) {
+                switch (type){
+                    case 1:
+                        alarmClockBean.setId(alarmClockBeans.size()+"");
+                        alarmClockBeans.add(alarmClockBean);
+                        alarmClockAdapter.setDatas(alarmClockBeans);
+                        alarmClockAdapter.notifyDataSetChanged();
+                        clockDialog.dismiss();
+                        Hawk.put(Name.LOCAL_ALARM_CLOCK, alarmClockBeans);
+                        break;
+                    case 2:
+                        alarmClockBeans.set(currentPosition,alarmClockBean);
+                        alarmClockAdapter.setDatas(alarmClockBeans);
+                        alarmClockAdapter.notifyDataSetChanged();
+                        clockDialog.dismiss();
+                        Hawk.put(Name.LOCAL_ALARM_CLOCK, alarmClockBeans);
+                        break;
+                }
+                Log.d(TAG, "onClickListener: "+alarmClockBeans);
+                Log.d(TAG, "onClickListener: "+alarmClockBean);
+                for (int i = 0; i < alarmClockBeans.size(); i++) {
+                    AlarmClockBean alarmClockBean1 = alarmClockBeans.get(i);
+                    alarmClockBean1.setId(i+"");
+                }
+                Hawk.put(Name.LOCAL_ALARM_CLOCK, alarmClockBeans);
+                //修改后,闹钟也要一同修改。
+                if (alarmClockBean.getStatus()) {
+                    try {
+                        int number = Integer.valueOf(alarmClockBean.getId()) * 10;
+                        Log.d(TAG, "onClickListener0: "+alarmClockBean);
+                        String hour = alarmClockBean.getHour();
+                        String minute = alarmClockBean.getMinute();
+                        setAlarmClock(number, alarmClockBean, alarmClockBean.getType().getType() + "", number + 7);
+                        Log.d(TAG, "onClickListener1: "+alarmClockBean);
+                        if (alarmClockBean.getType()==AlarmClockTypeEnum.CLOSE_DEV) {
+                            alarmClockBean.setHour(hour);
+                            alarmClockBean.setMinute(minute);
+                        }
+                    } catch (ParseException e) {
+                        throw new RuntimeException(e);
+                    }
+                }
+            }
+        });
+        Log.d(TAG, "showCheckDialog: "+currentPosition+":::::::"+type);
+        if (type==2) {
+            clockDialog.setData(alarmClockBeans.get(currentPosition));
+            clockDialog.setType(2);
+        }else{
+            clockDialog.setType(1);
+            clockDialog.cleanData(alarmClockBeans.size());
+
+        }
+        clockDialog.show();
+    }
+
+    public void setAlarmClock(){
+        /**
+         * 1. 用户点击添加的时候,那么我就开始设置闹钟。
+         * 2. 用户点击修改的时候,那么我就开始设置闹钟。
+         * 3. id作为这个序号。需要乘以10
+         * 4. 增加一个选项,是否开启本地闹钟,如果开启,则使用,不开启则不管。
+         */
+        alarmClockBeans = Hawk.get(Name.LOCAL_ALARM_CLOCK,new ArrayList<AlarmClockBean>());
+        for (AlarmClockBean clockBean : alarmClockBeans) {
+            //如果状态是关闭的则不要设置闹钟。
+            if (clockBean.getStatus()==false) {
+                continue;
+            }
+            int number = Integer.valueOf(clockBean.getId()) * 10;
+            try {
+                setAlarmClock(number, clockBean, clockBean.getType().getType() + "", number + 7);
+            } catch (ParseException e) {
+                throw new RuntimeException(e);
+            }
+        }
+
+    }
+
+
+    public int setAlarmClock(int number, AlarmClockBean alarmClockBean, String type, int alarmNumber) throws ParseException {
+        Log.d(TAG, "setAlarmClock: "+alarmclockType);
+        if (!alarmclockType) {
+            Log.d(TAG, "setAlarmClock: 不设置闹钟");
+            return 0;
+        }
+        for (int i = number; i < alarmNumber; i++) {//清除所有的闹钟
+            AlarmManagerUtil.cancelAlarm(BaseApplication.getContext(), AlarmManagerUtil.ALARM_ACTION, i);
+        }
+        ArrayList<WeekEnum> week = alarmClockBean.getWeek();
+
+            String hour = "";
+            String minute = "";
+            String msg = "";
+            if ("1".equals(type)) {//只有关机的才需要。
+                if (Integer.valueOf(alarmClockBean.getMinute()) < 40) {//如果小于5,我们需要做好计算才行。00:00:00
+                    //小于5,则
+                    //  alarmClockBean.getHour()-1:
+                    //  alarmClockBean.getMinute():4-5=-1,60-1=59,是正确的。
+                    if (Integer.valueOf(alarmClockBean.getHour()) < 1) {
+                        hour = (Integer.valueOf(alarmClockBean.getHour()) - 1 + 24) + "";
+                        Log.d(TAG, "setAlarmClock: 小于1");
+                    } else {
+                        hour = (Integer.valueOf(alarmClockBean.getHour()) - 1) + "";
+                        Log.d(TAG, "setAlarmClock: 大于1");
+                    }
+                    minute = (Integer.valueOf(alarmClockBean.getMinute()) - 40 + 60) + "";
+                    Log.d(TAG, "setAlarmClock: 小于5:a"+minute);
+                } else {
+                    hour = alarmClockBean.getHour();
+                    minute = (Integer.valueOf(alarmClockBean.getMinute()) - 40) + "";
+                    Log.d(TAG, "setAlarmClock: 大于5:b"+minute);
+                }
+                Calendar now = Calendar.getInstance();
+                SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
+                //设置时间
+                Date date1 = sdf.parse(alarmClockBean.getHour() + ":" +
+                        alarmClockBean.getMinute() + ":" +
+                       "00");
+                Log.d(TAG, "setAlarmClock: " + date1.toString());
+                //当前时间
+                Date date2 = sdf.parse(now.get(Calendar.HOUR_OF_DAY) + ":" +
+                        now.get(Calendar.MINUTE) + ":" +
+                        now.get(Calendar.SECOND));
+                Log.d(TAG, "setAlarmClock: " + date2.toString());
+
+                if (date1.compareTo(date2) > 0) {
+                    Log.d(TAG, "Date1 时间在 Date2 之后");//没过
+                    long nowDate = date1.getTime();//当前时间
+                    long startDateTime = date2.getTime();//真实时间
+                    int diffSeconds = (int) ((nowDate - startDateTime) / 1000);
+                    Log.d(TAG, "setAlarmClock: " + diffSeconds);
+                    if (diffSeconds >= 2400) {
+                        alarmClockBean.setHour(hour);
+                        alarmClockBean.setMinute(minute);
+                        msg="hotwater";
+                        LogUtils.logWrite("自动烧水4");
+                    } else {
+                        //不弹窗
+                        Log.d(TAG, "Date1 时间在 Date2 之前");//没过
+
+                        Log.d(TAG, "setAlarmClock1: 不弹窗");
+
+                    }
+                } else {//过了
+                    System.out.println("程序怎么会运行到这里?正常应该不会");
+                    Log.d(TAG, "setAlarmClock1: 不弹窗");
+
+                }
+            }
+
+            //时间。
+            for (int i = 0; i < week.size(); i++) {
+                AlarmManagerUtil.setAlarm(
+                        BaseApplication.getContext(),
+                        2,
+                        Integer.valueOf(alarmClockBean.getHour()),
+                        Integer.valueOf(alarmClockBean.getMinute()), 0,
+                        Integer.valueOf(alarmClockBean.getId())*10+i,
+                        week.get(i).getType(),
+                        type + msg);
+                Log.d(TAG, "setAlarmClock时: "+Integer.valueOf(alarmClockBean.getHour()));
+                Log.d(TAG, "setAlarmClock分: "+Integer.valueOf(alarmClockBean.getMinute()));
+                Log.d(TAG, "setAlarmClock星期: "+week.get(i).getType());
+                Log.d(TAG, "setAlarmClock id: "+(Integer.valueOf(alarmClockBean.getId())*1000+i));
+                Log.d(TAG, "setAlarmClock闹钟类型: "+(type + msg));
+            }
+            number = number + week.size();//累积。
+        return number;
+    }
+
+
+
+    private void isEdited(int clockType) {
+        if (saveDialog == null) {
+            saveDialog = new NormalDialog(LocalAlarmClockActivity.this, LocalAlarmClockActivity.this);
+        }
+        saveDialog.setListener(new DialogClickListener() {
+            @Override
+            public void onClickListener(int type) {
+                if (type == R.id.btn_confirm) {
+                    if (clockType == R.id.rb_local_alarmclock) {
+                        alarmclockType = true;
+                        Hawk.put(Name.ALARMCLOCK_TYPE, true);
+                        setAlarmClock();
+                        //todo 并且要把远程的给清掉,要确认才修改。
+                        // 1. 清理设置了的闹钟、
+                        extracted(400, Global.openSleepNumber);
+                        extracted(500, Global.closeSleepNumber);
+                        extracted(300, Global.offTimeNumber);
+                        extracted(200, Global.bootTimeNumber);
+                        rbLocalAlarmclock.setBackground(UiUtil.getDrawableRes(R.drawable.shape_btn_orange));
+                        rbLocalAlarmclock.setTextColor(UiUtil.getColorRes(R.color.c_white));
+                        rbRemoteAlarmclock.setBackground(UiUtil.getDrawableRes(R.drawable.shape_btn_add));
+                        rbRemoteAlarmclock.setTextColor(UiUtil.getColorRes(R.color.colorGray));
+                    } else if (clockType == R.id.rb_remote_alarmclock) {
+                        alarmclockType = false;
+                        Hawk.put(Name.ALARMCLOCK_TYPE, false);
+                        rbRemoteAlarmclock.setBackground(UiUtil.getDrawableRes(R.drawable.shape_btn_orange));
+                        rbRemoteAlarmclock.setTextColor(UiUtil.getColorRes(R.color.c_white));
+                        rbLocalAlarmclock.setBackground(UiUtil.getDrawableRes(R.drawable.shape_btn_add));
+                        rbLocalAlarmclock.setTextColor(UiUtil.getColorRes(R.color.colorGray));
+                    }
+                    saveDialog.dismiss();
+                } else if (type == R.id.btn_cancel) {
+                    if (type == R.id.rb_local_alarmclock) {
+                        rbRemoteAlarmclock.setChecked(true);
+                    } else if (type == R.id.rb_remote_alarmclock) {
+                        rbLocalAlarmclock.setChecked(true);
+                    }
+                    saveDialog.dismiss();
+                }
+            }
+        });
+        saveDialog.setContent(UiUtil.getStringRes(R.string.local_alarm_clock_is_update));
+        saveDialog.show();
+    }
+
+    private void extracted(int number,int alarmNumber) {
+        for (int i = number; i < alarmNumber; i++) {//清除所有的闹钟
+            AlarmManagerUtil.cancelAlarm(BaseApplication.getContext(), AlarmManagerUtil.ALARM_ACTION, i);
+        }
+    }
+
+    private Timer countDownTimer;
+    private TimerTask timerTask;
+
+    public void startTimeCountDown() {
+        stopTimeDown();
+        countDownTimer = new Timer();
+        timerTask = new TimerTask() {
+            @Override
+            public void run() {
+                currentDate();
+            }
+        };
+        countDownTimer.schedule(timerTask, 0, 1000);
+    }
+
+    public void stopTimeDown() {
+        if (countDownTimer != null) {
+            timerTask.cancel();
+            countDownTimer.cancel();
+            timerTask = null;
+            countDownTimer = null;
+        }
+    }
+
+    public void currentDate(){
+        long sysTime = System.currentTimeMillis();//获取系统时间
+        CharSequence sysTimeStr = DateFormat.format("yyyy-MM-dd HH:mm:ss", sysTime);//时间显示格式
+        runOnUiThread(new Runnable() {
+            @Override
+            public void run() {
+                tvCurrentDate.setText(sysTimeStr); //更新时间
+            }
+        });
+    }
+
+
+    @Override
+    protected void onDestroy() {
+        super.onDestroy();
+        stopTimeDown();
+    }
+}

+ 4 - 0
app/src/main/java/com/bgy/autosale/ui/operator/LockActivity.java

@@ -12,6 +12,7 @@ import android.widget.RelativeLayout;
 import android.widget.TextView;
 
 import com.bgy.autosale.R;
+import com.bgy.autosale.helpers.ErrorViewHelper;
 import com.bgy.autosale.ui.MainActivity;
 import com.bgy.autosale.ui.base.BaseFragment;
 import com.bgy.autosale.ui.base.BaseScanGunActivity;
@@ -52,6 +53,7 @@ public class LockActivity extends BaseScanGunActivity {
             tvLock.setVisibility(View.VISIBLE);
         }
         SharedPreferencesUtils.setParam("sleep", 0);
+        SharedPreferencesUtils.setParam("sleep_state",true);
         ImageView ivLogo = findViewById(R.id.iv_logo);
         DrawableSelectorUtils.setImageLogo(ivLogo);
         RelativeLayout rlLogo = findViewById(R.id.rl_logo);
@@ -62,6 +64,7 @@ public class LockActivity extends BaseScanGunActivity {
                 return false;
             }
         });
+        ErrorViewHelper.getInstance().setCanShowErrorView(false, this);
     }
 
     @Subscribe(threadMode = ThreadMode.MAIN)
@@ -91,5 +94,6 @@ public class LockActivity extends BaseScanGunActivity {
     protected void onDestroy() {
         super.onDestroy();
         EventBus.getDefault().unregister(this);
+        ErrorViewHelper.getInstance().setCanShowErrorView(true, this);
     }
 }

+ 256 - 0
app/src/main/java/com/bgy/autosale/ui/operator/fragments/OtherSettingFragment.java

@@ -0,0 +1,256 @@
+package com.bgy.autosale.ui.operator.fragments;
+
+import android.app.Activity;
+import android.content.Context;
+import android.content.Intent;
+import android.os.Bundle;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+import android.support.v4.content.ContextCompat;
+import android.support.v7.widget.AppCompatButton;
+import android.support.v7.widget.LinearLayoutManager;
+import android.support.v7.widget.RecyclerView;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.TextView;
+
+import com.bgy.autosale.App;
+import com.bgy.autosale.Constant;
+import com.bgy.autosale.R;
+import com.bgy.autosale.ui.base.BaseFragment;
+import com.bgy.autosale.ui.operator.LocalAlarmClockActivity;
+import com.bgy.autosale.ui.operator.SleepSettingActivity;
+import com.bgy.autosale.utils.SPUtils;
+
+import java.util.ArrayList;
+
+/**
+ * Created by cjx on 2020-12-31
+ * 说明:
+ */
+public class OtherSettingFragment extends BaseFragment {
+
+    public static OtherSettingFragment getFragment() {
+        return new OtherSettingFragment();
+    }
+    private final int SLEEP_TEXT = 0;
+    private final int ALARM_CLOCK = 1;
+
+    @Override
+    public int getViewId() {
+        return R.layout.fragment_other_setting;
+    }
+
+    @Override
+    public void onShow() {
+
+    }
+
+    @Override
+    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
+        super.onViewCreated(view, savedInstanceState);
+
+        ArrayList<OtherBean> list = new ArrayList<>();
+        list.add(initAlarmClock());
+        list.add(initSleepMsg());
+        RecyclerView recyclerView = view.findViewById(R.id.recycler_view);
+        recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
+        OtherAdapter adapter = new OtherAdapter(list, getContext());
+        recyclerView.setAdapter(adapter);
+    }
+
+    private OtherBean initAlarmClock() {
+        OtherBean itemBean = new OtherBean(ALARM_CLOCK);
+        itemBean.title = getString(R.string.alarm_clock);
+        itemBean.button = R.string.button_update;
+        itemBean.buttonEnable = true;
+        return itemBean;
+    }
+    private OtherBean initSleepMsg() {
+        OtherBean itemBean = new OtherBean(SLEEP_TEXT);
+        itemBean.title = getString(R.string.setting_text_message);
+        itemBean.button = R.string.button_update;
+        itemBean.buttonEnable = true;
+        return itemBean;
+    }
+
+    private static long lastClickTime = 0;
+
+    public static boolean isFastDoubleShake() {
+        long time = System.currentTimeMillis();
+        long timeD = time - lastClickTime;
+        if (0 < timeD && timeD < 10000) {
+            return false;
+        }
+        lastClickTime = time;
+        return true;
+    }
+
+
+    class OtherAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> implements View.OnClickListener {
+
+        ArrayList<OtherBean> list;
+        LayoutInflater inflater;
+
+        OtherAdapter(ArrayList<OtherBean> list, Context context) {
+            this.inflater = LayoutInflater.from(context);
+            this.list = list;
+        }
+
+        @NonNull
+        @Override
+        public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int type) {
+//            if (type == 0) {
+//                return new SwitchViewHolder(inflater.inflate(R.layout.item_switch, viewGroup, false), this);
+//            } else {
+            return new ViewHolder(inflater.inflate(R.layout.item_technology, viewGroup, false), this);
+//            }
+        }
+
+        @Override
+        public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int i) {
+            OtherBean tb = list.get(i);
+            if (!tb.switchMode) {
+                ViewHolder ho = (ViewHolder) viewHolder;
+                ho.titleView.setText(tb.title);
+                if (tb.describe == null) {
+                    ho.describeView.setVisibility(View.GONE);
+                } else {
+                    ho.describeView.setVisibility(View.VISIBLE);
+                    ho.describeView.setText(tb.describe);
+                }
+                ho.button.setEnabled(tb.buttonEnable);
+                ho.button.setText(tb.button);
+                ho.button.setTag(tb.action);
+            } else {
+                SwitchViewHolder ho = (SwitchViewHolder) viewHolder;
+                ho.nameView.setText(tb.title);
+                ho.switchView.setTag(tb.action);
+                open(ho.switchView);
+            }
+        }
+
+        @Override
+        public int getItemCount() {
+            return list == null ? 0 : list.size();
+        }
+
+        @Override
+        public int getItemViewType(int position) {
+            OtherBean item = list.get(position);
+            if (!item.switchMode) {
+                return 1;
+            } else {
+                return 0;
+            }
+        }
+
+        @Override
+        public void onClick(View v) {
+            int action = (int) v.getTag();
+            switch (action) {
+                case SLEEP_TEXT:
+                    gotoActivity(SleepSettingActivity.class);
+                    break;
+                case ALARM_CLOCK:
+//                    showToast("该功能建设中。。。");
+//                    return;
+                    gotoActivity(LocalAlarmClockActivity.class);
+                    break;
+            }
+        }
+
+        private void gotoActivity(Class activity) {
+            Intent intent = new Intent(getContext(), activity);
+            startActivity(intent);
+        }
+
+        private void open(View v) {
+            ViewGroup switchView = (ViewGroup) v;
+            TextView switchTextView = switchView.findViewById(R.id.item_switch_text);
+            View switchIconView = switchView.findViewById(R.id.item_switch_icon);
+
+            switchView.removeAllViews();
+            boolean open = SPUtils.getInstance(App.app).getBoolean(Constant.LOCK_IN_ERROR, false);
+            if (open) {
+                switchView.addView(switchTextView);
+                switchView.addView(switchIconView);
+                switchTextView.setText(R.string.setting_switch_on);
+                switchTextView.setTextColor(ContextCompat.getColor(App.app, R.color.colorSwitchOn));
+                switchView.setBackgroundResource(R.drawable.bg_switch_on);
+            } else {
+                switchView.addView(switchIconView);
+                switchView.addView(switchTextView);
+                switchTextView.setText(R.string.setting_switch_off);
+                switchTextView.setTextColor(ContextCompat.getColor(App.app, R.color.colorSwitchOff));
+                switchView.setBackgroundResource(R.drawable.bg_switch_off);
+            }
+        }
+
+    }
+
+
+
+
+
+    class SwitchViewHolder extends RecyclerView.ViewHolder {
+
+        TextView nameView;
+        View switchView;
+
+        SwitchViewHolder(@NonNull View view, View.OnClickListener listener) {
+            super(view);
+            nameView = view.findViewById(R.id.item_name);
+            switchView = view.findViewById(R.id.item_switch);
+
+            switchView.setOnClickListener(listener);
+        }
+    }
+
+    class ViewHolder extends RecyclerView.ViewHolder {
+
+        TextView titleView;
+        TextView describeView;
+        AppCompatButton button;
+
+        ViewHolder(@NonNull View view, View.OnClickListener listener) {
+            super(view);
+            titleView = view.findViewById(R.id.technology_title);
+            describeView = view.findViewById(R.id.technology_describe);
+            button = view.findViewById(R.id.technology_button);
+
+            button.setOnClickListener(listener);
+        }
+    }
+
+    private class OtherBean {
+        int action;
+        String title;
+        String describe;
+        int button;
+        boolean buttonEnable;
+        boolean switchMode;
+
+        OtherBean(int action) {
+            this.action = action;
+        }
+
+        OtherBean(int action, String title, int button) {
+            this.action = action;
+            this.title = title;
+            this.button = button;
+            this.buttonEnable = true;
+        }
+    }
+
+    @Override
+    public void onStart() {
+        super.onStart();
+    }
+
+    @Override
+    public void onStop() {
+        super.onStop();
+    }
+}

+ 1 - 18
app/src/main/java/com/bgy/autosale/ui/operator/fragments/TechnologySupportFragment.java

@@ -103,7 +103,6 @@ public class TechnologySupportFragment extends BaseFragment implements View.OnCl
     private final int ACTION_PASSWORD = 6;
     private final int ACTION_LANGUAGE = 7;
     private final int ACTION_IGNORE = 8;
-    private final int SLEEP_TEXT = 9;
 
     private String versionId;
     private int languageIndex = 0;
@@ -111,7 +110,7 @@ public class TechnologySupportFragment extends BaseFragment implements View.OnCl
     private AppCompatButton btnSystemLink, technologyButton, btnSystemDisconnect;
     private TextView verTv;
     private TextView tvTsDeviceId1;
-//    private final ArrayList<LanguageBean> languages = new ArrayList<>(2);
+
 private final ArrayList<LanguageBean> languages = new ArrayList<>(Arrays.asList(
         new LanguageBean("简体中文", "zh", "中文"),
         new LanguageBean("English(英语)", "en", "英语"),
@@ -180,20 +179,12 @@ private final ArrayList<LanguageBean> languages = new ArrayList<>(Arrays.asList(
         list.add(new TechnologyBean(ACTION_DEBUG, getString(R.string.setting_technology_mcu_debug), R.string.button_start));
         list.add(initLanguage());
         list.add(initIgnoreError());
-        list.add(initSleepMsg());
 
         RecyclerView recyclerView = view.findViewById(R.id.recycler_view);
         recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
         TechnologyAdapter adapter = new TechnologyAdapter(list, getContext());
         recyclerView.setAdapter(adapter);
     }
-    private TechnologyBean initSleepMsg() {
-        TechnologyBean itemBean = new TechnologyBean(SLEEP_TEXT);
-        itemBean.title = getString(R.string.setting_text_message);
-        itemBean.button = R.string.button_update;
-        itemBean.buttonEnable = true;
-        return itemBean;
-    }
 
     private TechnologyBean initSn() {
         TechnologyBean itemBean = new TechnologyBean(ACTION_SN);
@@ -524,17 +515,9 @@ private final ArrayList<LanguageBean> languages = new ArrayList<>(Arrays.asList(
                     }, 4, TimeUnit.SECONDS);
                     open(v);
                     break;
-                case SLEEP_TEXT:
-                    gotoSetSleepText();
-                    break;
             }
         }
 
-        private void gotoSetSleepText() {
-            Intent intent = new Intent(getContext(), SleepSettingActivity.class);
-            startActivity(intent);
-        }
-
         private void open(View v) {
             ViewGroup switchView = (ViewGroup) v;
             TextView switchTextView = switchView.findViewById(R.id.item_switch_text);

+ 110 - 0
app/src/main/res/layout/activity_localalarmclock.xml

@@ -0,0 +1,110 @@
+<?xml version="1.0" encoding="utf-8"?>
+<layout 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">
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:orientation="vertical">
+
+        <RelativeLayout
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:layout_marginTop="@dimen/dp_10">
+            <TextView
+                android:id="@+id/tv_current_date"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:textSize="@dimen/sp_18"
+                android:textColor="@color/c_black"
+                android:layout_centerHorizontal="true"/>
+
+            <android.support.v7.widget.RecyclerView
+                android:id="@+id/rv_alarm_clock"
+                android:layout_width="wrap_content"
+                android:layout_centerHorizontal="true"
+                android:layout_height="wrap_content"
+                android:layout_marginTop="@dimen/dp_18" />
+
+            <TextView
+                android:id="@+id/tv_alarm_clock_tips"
+                android:layout_width="@dimen/dp_130"
+                android:layout_height="wrap_content"
+                android:layout_above="@id/ll_open"
+                android:layout_alignParentRight="true"
+                android:layout_marginEnd="@dimen/dp_10"
+                android:layout_marginBottom="@dimen/dp_10"
+                android:text="@string/localalarm_tips"
+                android:textSize="@dimen/sp_6" />
+
+            <LinearLayout
+                android:id="@+id/ll_open"
+                android:layout_alignParentRight="true"
+                android:layout_above="@id/btn_clock_add"
+                android:layout_marginRight="@dimen/dp_10"
+                android:layout_marginBottom="@dimen/dp_10"
+                android:layout_width="wrap_content"
+                android:gravity="center"
+                android:layout_height="wrap_content">
+                <TextView
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:text="@string/alarmclock_type"
+                    android:layout_marginRight="@dimen/dp_7"
+                    android:textSize="@dimen/dp_7"/>
+               <RadioGroup
+                   android:id="@+id/rg_alarmclock"
+                   android:layout_width="wrap_content"
+                   android:layout_height="wrap_content"
+                   android:background="@drawable/shape_white_bg"
+                   android:orientation="horizontal">
+                   <RadioButton
+                       android:id="@+id/rb_local_alarmclock"
+                       android:layout_width="@dimen/dp_40"
+                       android:layout_height="@dimen/dp_20"
+                       android:button="@null"
+                       android:checked="false"
+                       android:textSize="@dimen/dp_7"
+                       android:gravity="center"
+                       android:text="@string/local_alarmclock"/>
+                   <RadioButton
+                       android:id="@+id/rb_remote_alarmclock"
+                       android:layout_width="@dimen/dp_40"
+                       android:layout_height="@dimen/dp_20"
+                       android:textSize="@dimen/dp_7"
+                       android:gravity="center"
+                       android:checked="true"
+                       android:button="@null"
+                       android:text="@string/remote_alarmclock"/>
+               </RadioGroup>
+            </LinearLayout>
+
+            <Button
+                android:id="@+id/btn_clock_add"
+                android:layout_width="@dimen/dp_60"
+                android:layout_height="@dimen/dp_20"
+                android:layout_gravity="center"
+                android:background="@drawable/shape_gray_border"
+                android:text="@string/clock_add"
+                android:layout_alignParentRight="true"
+                android:layout_alignParentBottom="true"
+                android:layout_marginRight="@dimen/dp_10"
+                android:layout_marginBottom="@dimen/dp_10"
+                android:textSize="@dimen/dp_7" />
+            <android.support.v7.widget.AppCompatImageView
+                android:id="@+id/setting_back"
+                android:layout_width="@dimen/dp_35"
+                android:layout_height="@dimen/dp_35"
+                android:layout_marginStart="@dimen/dp_26"
+                android:layout_marginBottom="@dimen/dp_32"
+                android:layout_alignParentBottom="true"
+                app:layout_constraintBottom_toBottomOf="parent"
+                app:layout_constraintStart_toStartOf="parent"
+                app:srcCompat="@drawable/vector_btn_back" />
+        </RelativeLayout>
+
+    </LinearLayout>
+
+
+</layout>

+ 299 - 0
app/src/main/res/layout/dialog_alarm_clock.xml

@@ -0,0 +1,299 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<layout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto">
+
+
+    <RelativeLayout
+        android:layout_width="match_parent"
+        android:layout_height="match_parent">
+
+        <LinearLayout
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_centerInParent="true"
+            android:background="@drawable/shape_btn_back"
+            android:gravity="center_horizontal"
+            android:orientation="vertical">
+
+            <LinearLayout
+                android:id="@+id/time_layout"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_marginBottom="@dimen/dp_10"
+                android:orientation="horizontal"
+                android:paddingHorizontal="@dimen/dp_5">
+
+                <TextView
+                    android:id="@+id/tv_time"
+                    style="@style/TextAppearance.AppCompat"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:fontFamily="sans-serif-light"
+                    android:text="12:00"
+                    android:textColor="@color/c_black"
+                    android:textSize="@dimen/sp_20" />
+
+                <Space
+                    android:layout_width="0dp"
+                    android:layout_height="wrap_content"
+                    android:layout_weight="1" />
+
+                <android.support.v7.widget.SwitchCompat
+                    android:id="@+id/sc_on_off_switch"
+                    android:layout_width="@dimen/dp_30"
+                    android:layout_height="match_parent"
+                    android:checked="true"
+                    android:gravity="center"
+                    android:paddingHorizontal="@dimen/dp_6"
+                    android:scaleX="1.5"
+                    android:scaleY="1.5"
+                    app:switchMinWidth="@dimen/dp_18" />
+
+
+                <!-- A mock TextView from which the current Theme's text colors
+                 can be retrieved. -->
+                <TextView
+                    android:id="@+id/colors_source"
+                    style="@style/TextAppearance.AppCompat"
+                    android:layout_width="0dp"
+                    android:layout_height="0dp" />
+
+            </LinearLayout>
+
+            <LinearLayout
+                android:id="@+id/ll_week"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_marginBottom="@dimen/dp_10"
+                android:orientation="horizontal"
+                android:paddingHorizontal="@dimen/dp_5">
+
+                <TextView
+                    android:id="@+id/tv_week"
+                    style="@style/TextAppearance.AppCompat"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:fontFamily="sans-serif-light"
+                    android:text="@string/week"
+                    android:textSize="@dimen/sp_10" />
+
+                <CheckBox
+                    android:id="@+id/cb_sunday"
+                    android:layout_width="wrap_content"
+
+                    android:layout_height="@dimen/dp_14"
+                    android:layout_marginRight="@dimen/dp_5"
+                    android:text="@string/sunday"
+                    android:textColor="@color/colorGray"
+                    android:textSize="@dimen/dp_10" />
+
+                <CheckBox
+                    android:id="@+id/cb_monday"
+                    android:layout_width="wrap_content"
+                    android:layout_height="@dimen/dp_14"
+                    android:layout_marginRight="@dimen/dp_5"
+                    android:text="@string/monday"
+                    android:textColor="@color/colorGray"
+                    android:textSize="@dimen/dp_10" />
+
+                <CheckBox
+                    android:id="@+id/cb_tuesday"
+                    android:layout_width="wrap_content"
+                    android:layout_height="@dimen/dp_14"
+                    android:layout_marginRight="@dimen/dp_5"
+                    android:text="@string/tuesday"
+                    android:textColor="@color/colorGray"
+                    android:textSize="@dimen/dp_10" />
+
+                <CheckBox
+                    android:id="@+id/cb_wednesday"
+                    android:layout_width="wrap_content"
+
+                    android:layout_height="@dimen/dp_14"
+                    android:layout_marginRight="@dimen/dp_5"
+                    android:text="@string/wednesday"
+                    android:textColor="@color/colorGray"
+                    android:textSize="@dimen/dp_10" />
+
+                <CheckBox
+                    android:id="@+id/cb_thursday"
+                    android:layout_width="wrap_content"
+
+                    android:layout_height="@dimen/dp_14"
+                    android:layout_marginRight="@dimen/dp_5"
+                    android:text="@string/thursday"
+                    android:textColor="@color/colorGray"
+                    android:textSize="@dimen/dp_10" />
+
+                <CheckBox
+                    android:id="@+id/cb_friday"
+                    android:layout_width="wrap_content"
+
+                    android:layout_height="@dimen/dp_14"
+                    android:layout_marginRight="@dimen/dp_5"
+                    android:text="@string/friday"
+                    android:textColor="@color/colorGray"
+                    android:textSize="@dimen/dp_10" />
+
+                <CheckBox
+                    android:id="@+id/cb_saturday"
+                    android:layout_width="wrap_content"
+
+                    android:layout_height="@dimen/dp_14"
+                    android:layout_marginRight="@dimen/dp_5"
+                    android:text="@string/saturday"
+                    android:textColor="@color/colorGray"
+                    android:textSize="@dimen/dp_10" />
+
+            </LinearLayout>
+
+            <TextView
+                android:layout_width="match_parent"
+                android:layout_height="@dimen/dp_1"
+                android:layout_marginBottom="@dimen/dp_10"
+                android:background="#d9d9d9" />
+
+            <LinearLayout
+                android:id="@+id/ll_type"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_marginBottom="@dimen/dp_10"
+                android:orientation="horizontal"
+                android:paddingHorizontal="@dimen/dp_5">
+
+                <TextView
+                    android:id="@+id/tv_type"
+                    style="@style/TextAppearance.AppCompat"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:fontFamily="sans-serif-light"
+                    android:text="@string/type"
+                    android:textSize="@dimen/sp_10" />
+
+                <RadioGroup
+                    android:id="@+id/rg_type"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:orientation="horizontal">
+                    <RadioButton
+                        android:id="@+id/rb_change_cooling"
+                        android:layout_width="wrap_content"
+                        android:layout_height="@dimen/dp_14"
+                        android:layout_marginRight="@dimen/dp_5"
+                        android:checked="true"
+                        android:text="@string/change_cooling"
+                        android:textColor="@color/colorGray"
+                        android:textSize="@dimen/dp_10" />
+
+                    <RadioButton
+                        android:id="@+id/rb_change_freshness"
+                        android:layout_width="wrap_content"
+                        android:layout_height="@dimen/dp_14"
+                        android:layout_marginRight="@dimen/dp_5"
+                        android:text="@string/change_freshness"
+                        android:textColor="@color/colorGray"
+                        android:textSize="@dimen/dp_10" />
+
+                    <RadioButton
+                        android:id="@+id/rb_open_dev"
+                        android:layout_width="wrap_content"
+                        android:layout_height="@dimen/dp_14"
+                        android:layout_marginRight="@dimen/dp_5"
+                        android:visibility="gone"
+                        android:text="@string/open_dev"
+                        android:textColor="@color/colorGray"
+                        android:textSize="@dimen/dp_10" />
+
+                    <RadioButton
+                        android:id="@+id/rb_close_dev"
+                        android:layout_width="wrap_content"
+                        android:layout_height="@dimen/dp_14"
+                        android:visibility="gone"
+                        android:layout_marginRight="@dimen/dp_5"
+                        android:text="@string/close_dev"
+                        android:textColor="@color/colorGray"
+                        android:textSize="@dimen/dp_10" />
+
+                    <RadioButton
+                        android:id="@+id/rb_open_sleep"
+                        android:layout_width="wrap_content"
+                        android:layout_height="@dimen/dp_14"
+                        android:layout_marginRight="@dimen/dp_5"
+                        android:text="@string/start_sleep"
+                        android:textColor="@color/colorGray"
+                        android:textSize="@dimen/dp_10" />
+
+                    <RadioButton
+                        android:id="@+id/rb_close_sleep"
+                        android:layout_width="wrap_content"
+                        android:layout_height="@dimen/dp_14"
+                        android:layout_marginRight="@dimen/dp_5"
+                        android:text="@string/end_sleep"
+                        android:textColor="@color/colorGray"
+                        android:textSize="@dimen/dp_10" />
+
+                </RadioGroup>
+            </LinearLayout>
+
+            <TextView
+                android:layout_width="match_parent"
+                android:layout_height="@dimen/dp_1"
+                android:layout_marginBottom="@dimen/dp_10"
+                android:background="#d9d9d9" />
+
+            <LinearLayout
+                android:id="@+id/ll_alarn_clock_title"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_marginBottom="@dimen/dp_10"
+                android:orientation="horizontal"
+                android:paddingHorizontal="@dimen/dp_5">
+
+                <TextView
+                    style="@style/TextAppearance.AppCompat"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:fontFamily="sans-serif-light"
+                    android:text="@string/alarn_clock_title"
+                    android:textSize="@dimen/sp_10" />
+
+                <EditText
+                    android:id="@+id/et_alarn_clock_title"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:background="@drawable/shape_rt_rb"
+                    android:hint="@string/alarn_clock_name"
+                    android:textColor="@color/colorGray"
+                    android:textColorHint="@color/gray_home"
+                    android:textSize="@dimen/sp_10" />
+            </LinearLayout>
+
+            <LinearLayout
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_marginTop="@dimen/dp_15"
+                android:layout_marginBottom="@dimen/dp_5"
+                android:gravity="center">
+
+                <Button
+                    android:id="@+id/btn_clock_confirm"
+                    android:layout_width="@dimen/dp_60"
+                    android:layout_height="@dimen/dp_20"
+                    android:layout_marginRight="@dimen/dp_50"
+                    android:text="@string/confirm"
+                    android:textColor="@color/white"
+                    android:textSize="@dimen/sp_10" />
+
+                <Button
+                    android:id="@+id/btn_clock_cancel"
+                    android:layout_width="@dimen/dp_60"
+                    android:layout_height="@dimen/dp_20"
+                    android:text="@string/cancel"
+                    android:textColor="@color/white"
+                    android:textSize="@dimen/sp_10" />
+            </LinearLayout>
+        </LinearLayout>
+    </RelativeLayout>
+</layout>
+

+ 16 - 0
app/src/main/res/layout/fragment_other_setting.xml

@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+<android.support.constraint.ConstraintLayout 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.support.v7.widget.RecyclerView
+        android:id="@+id/recycler_view"
+        android:layout_width="match_parent"
+        android:layout_height="@dimen/dp_320"
+        android:layout_marginBottom="@dimen/dp_20"
+        android:padding="@dimen/dp_20"
+        tools:ignore="MissingConstraints" />
+
+</android.support.constraint.ConstraintLayout>

+ 182 - 0
app/src/main/res/layout/item_alarm_clock.xml

@@ -0,0 +1,182 @@
+<?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"
+    android:layout_width="wrap_content"
+    android:layout_height="wrap_content"
+    android:layout_gravity="center"
+    android:layout_marginTop="@dimen/dp_10">
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_gravity="center"
+        android:orientation="horizontal">
+
+
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:background="@drawable/shape_gray_border"
+            android:gravity="center"
+            android:orientation="vertical">
+
+            <LinearLayout
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:gravity="center">
+
+                <TextView
+                    android:id="@+id/tv_clock_name"
+                    android:layout_width="@dimen/dp_50"
+                    android:layout_height="@dimen/dp_40"
+                    android:layout_gravity="center"
+                    android:layout_marginRight="@dimen/dp_5"
+                    android:gravity="center"
+                    android:text="闹钟1:"
+                    android:textSize="@dimen/dp_10" />
+
+                <LinearLayout
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_marginLeft="@dimen/dp_5"
+                    android:orientation="vertical">
+
+                    <TextView
+                        android:id="@+id/tv_clock_type"
+                        android:layout_width="@dimen/dp_50"
+                        android:layout_height="wrap_content"
+                        android:layout_marginLeft="@dimen/dp_20"
+                        android:layout_marginRight="@dimen/dp_20"
+                        android:text="开启炉头"
+                        android:textColor="@color/colorGray"
+                        android:textSize="@dimen/dp_10" />
+
+                    <LinearLayout
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:layout_gravity="center"
+                        android:orientation="horizontal">
+
+                        <TextView
+                            android:id="@+id/tv_monday"
+                            android:layout_width="wrap_content"
+                            android:layout_height="wrap_content"
+                            android:text="一"
+                            android:textSize="@dimen/dp_8"
+                            android:visibility="gone" />
+
+                        <TextView
+                            android:id="@+id/tv_tuesday"
+                            android:layout_width="wrap_content"
+                            android:layout_height="wrap_content"
+                            android:text="二"
+                            android:textSize="@dimen/dp_8"
+                            android:visibility="gone" />
+
+                        <TextView
+                            android:id="@+id/tv_wednesday"
+                            android:layout_width="wrap_content"
+                            android:layout_height="wrap_content"
+                            android:text="三"
+                            android:textSize="@dimen/dp_8"
+                            android:visibility="gone" />
+
+                        <TextView
+                            android:id="@+id/tv_thursday"
+                            android:layout_width="wrap_content"
+                            android:layout_height="wrap_content"
+                            android:text="四"
+                            android:textSize="@dimen/dp_8"
+                            android:visibility="gone" />
+
+                        <TextView
+                            android:id="@+id/tv_friday"
+                            android:layout_width="wrap_content"
+                            android:layout_height="wrap_content"
+                            android:text="五"
+                            android:textSize="@dimen/dp_8"
+                            android:visibility="gone" />
+
+                        <TextView
+                            android:id="@+id/tv_saturday"
+                            android:layout_width="wrap_content"
+                            android:layout_height="wrap_content"
+                            android:text="六"
+                            android:textSize="@dimen/dp_8"
+                            android:visibility="gone" />
+
+                        <TextView
+                            android:id="@+id/tv_sunday"
+                            android:layout_width="wrap_content"
+                            android:layout_height="wrap_content"
+                            android:text="日"
+                            android:textSize="@dimen/dp_8"
+                            android:visibility="gone" />
+
+                    </LinearLayout>
+                </LinearLayout>
+
+                <TextView
+                    android:id="@+id/tv_clock_time"
+                    android:layout_width="@dimen/dp_70"
+                    android:layout_height="wrap_content"
+                    android:layout_gravity="center_vertical"
+                    android:layout_marginRight="@dimen/dp_20"
+                    android:gravity="right"
+                    android:text="10:00"
+                    android:textSize="@dimen/dp_20" />
+
+
+                <Button
+                    android:id="@+id/btn_clock_change"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_marginLeft="@dimen/dp_10"
+                    android:layout_marginRight="@dimen/dp_10"
+                    android:text="@string/clock_change"
+                    android:textColor="@color/white"
+                    android:textSize="@dimen/dp_7" />
+
+                <Button
+                    android:id="@+id/btn_clock_delete"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_marginRight="@dimen/dp_10"
+                    android:background="@drawable/shape_btn_orange"
+                    android:text="@string/clock_delete"
+                    android:textColor="@color/white"
+                    android:textSize="@dimen/dp_7" />
+
+                <android.support.v7.widget.SwitchCompat
+                    android:id="@+id/sc_status"
+                    android:layout_width="@dimen/dp_30"
+                    android:layout_marginRight="@dimen/dp_10"
+                    android:layout_height="match_parent"
+                    android:layout_gravity="center_vertical"
+                    android:checked="true"
+                    android:gravity="center"
+                    android:paddingHorizontal="@dimen/dp_6"
+                    android:scaleX="1.5"
+                    android:scaleY="1.5"
+                    app:switchMinWidth="@dimen/dp_18" />
+
+            </LinearLayout>
+
+            <LinearLayout
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_marginBottom="@dimen/dp_2"
+                android:gravity="center">
+
+                <TextView
+                    android:id="@+id/tv_week"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:text="周一,周二,周三,周四,周五,周六,周日"
+                    android:textSize="@dimen/dp_6" />
+            </LinearLayout>
+
+
+        </LinearLayout>
+    </LinearLayout>
+</LinearLayout>

+ 6 - 1
app/src/main/res/values-cs/strings.xml

@@ -476,7 +476,12 @@
     <string name="setting_service_visibility">Zobrazit službu</string>
     <string name="setting_service_title">Název služby</string>
     <string name="setting_service_content">Obsah služby</string>
-
+    <string name="coin_rate">Sazba mincí</string>
+    <string name="confirm_name">Upravit název</string>
+    <string name="setting_technology_other">Jiné</string>
+    <string name="alarm_clock_setting">Plánovaný budík</string>
+    <string name="change_cooling">Přepnout chlazení</string>
+    <string name="change_freshness">Přepnout aktuálnost</string>
 
 </resources>
 <!--捷克语-->

+ 6 - 0
app/src/main/res/values-de/strings.xml

@@ -476,6 +476,12 @@
     <string name="setting_service_visibility">Service anzeigen</string>
     <string name="setting_service_title">Servicetitel</string>
     <string name="setting_service_content">Serviceinhalt</string>
+    <string name="coin_rate">Münzkurs</string>
+    <string name="confirm_name">Namen ändern</string>
+    <string name="setting_technology_other">Sonstiges</string>
+    <string name="alarm_clock_setting">Geplanter Wecker</string>
+    <string name="change_cooling">Kühlung umschalten</string>
+    <string name="change_freshness">Frische wechseln</string>
 
 </resources>
 <!--德语-->

+ 6 - 0
app/src/main/res/values-en/strings.xml

@@ -477,6 +477,12 @@
     <string name="setting_service_visibility">Show Service</string>
     <string name="setting_service_title">Service Title</string>
     <string name="setting_service_content">Service Content</string>
+    <string name="coin_rate">Coin rate</string>
+    <string name="confirm_name">Change name</string>
+    <string name="setting_technology_other">Others</string>
+    <string name="alarm_clock_setting">Timer alarm</string>
+    <string name="change_cooling">Switch cooling</string>
+    <string name="change_freshness">Switch freshness</string>
 
 
 </resources>

+ 6 - 0
app/src/main/res/values-es/strings.xml

@@ -478,6 +478,12 @@
     <string name="setting_service_visibility">Mostrar servicio</string>
     <string name="setting_service_title">Título del servicio</string>
     <string name="setting_service_content">Contenido del servicio</string>
+    <string name="coin_rate">Tasa de moneda</string>
+    <string name="confirm_name">Modificar nombre</string>
+    <string name="setting_technology_other">Otro</string>
+    <string name="alarm_clock_setting">Despertador programado</string>
+    <string name="change_cooling">Cambiar refrigeración</string>
+    <string name="change_freshness">Cambiar frescura</string>
 
 </resources>
 <!--西班牙语-->

+ 6 - 0
app/src/main/res/values-et/strings.xml

@@ -475,6 +475,12 @@
     <string name="setting_service_visibility">Kuva teenus</string>
     <string name="setting_service_title">Teenuse pealkiri</string>
     <string name="setting_service_content">Teenuse sisu</string>
+    <string name="coin_rate">Mündi määr</string>
+    <string name="confirm_name">Muuda nime</string>
+    <string name="setting_technology_other">Muu</string>
+    <string name="alarm_clock_setting">Ajastatud äratuskell</string>
+    <string name="change_cooling">Jahutuse vahetamine</string>
+    <string name="change_freshness">Värskuse vahetamine</string>
 
 </resources>
 <!--爱沙尼亚语-->

+ 6 - 0
app/src/main/res/values-hy/strings.xml

@@ -477,6 +477,12 @@
     <string name="setting_service_visibility">Ցուցադրել ծառայությունը</string>
     <string name="setting_service_title">Ծառայության անվանում</string>
     <string name="setting_service_content">Ծառայության բովանդակություն</string>
+    <string name="coin_rate">Մետաղադրամի փոխարժեքը</string>
+    <string name="confirm_name">Փոփոխել անունը</string>
+    <string name="setting_technology_other">Այլ</string>
+    <string name="alarm_clock_setting">Պլանավորված զարթուցիչ</string>
+    <string name="change_cooling">Անջատեք սառեցումը</string>
+    <string name="change_freshness">Անցնել թարմությունը</string>
 
 </resources>
 <!--亚美尼亚语-->

+ 6 - 0
app/src/main/res/values-ko/strings.xml

@@ -481,6 +481,12 @@
     <string name="setting_service_visibility">서비스 표시</string>
     <string name="setting_service_title">서비스 제목</string>
     <string name="setting_service_content">서비스 콘텐츠</string>
+    <string name="coin_rate">코인 비율</string>
+    <string name="confirm_name">이름 수정</string>
+    <string name="setting_technology_other">기타</string>
+    <string name="alarm_clock_setting">예약된 알람 시계</string>
+    <string name="change_cooling">냉각 스위치</string>
+    <string name="change_freshness">신선도 전환</string>
 
 </resources>
     <!--韩语-->

+ 6 - 0
app/src/main/res/values-lt/strings.xml

@@ -475,6 +475,12 @@
     <string name="setting_service_visibility">Rodyti paslaugą</string>
     <string name="setting_service_title">Paslaugos pavadinimas</string>
     <string name="setting_service_content">Paslaugos turinys</string>
+    <string name="coin_rate">Monetų kursas</string>
+    <string name="confirm_name">Keisti pavadinimą</string>
+    <string name="setting_technology_other">Kita</string>
+    <string name="alarm_clock_setting">Suplanuotas žadintuvas</string>
+    <string name="change_cooling">Perjungti aušinimą</string>
+    <string name="change_freshness">Perjungti šviežumą</string>
 
 </resources>
 <!--立陶宛-->

+ 6 - 0
app/src/main/res/values-lv/strings.xml

@@ -471,6 +471,12 @@
     <string name="setting_service_visibility">Rādīt pakalpojumu</string>
     <string name="setting_service_title">Pakalpojuma nosaukums</string>
     <string name="setting_service_content">Pakalpojuma saturs</string>
+    <string name="coin_rate">Monētu likme</string>
+    <string name="confirm_name">Mainīt nosaukumu</string>
+    <string name="setting_technology_other">Cits</string>
+    <string name="alarm_clock_setting">Ieplānots modinātājs</string>
+    <string name="change_cooling">Pārslēgt dzesēšanu</string>
+    <string name="change_freshness">Pārslēgt svaigumu</string>
 
 </resources>
 <!--拉脱维亚-->

+ 5 - 0
app/src/main/res/values-ms/strings.xml

@@ -477,6 +477,11 @@
     <string name="setting_service_visibility">Tunjukkan Perkhidmatan</string>
     <string name="setting_service_title">Tajuk Perkhidmatan</string>
     <string name="setting_service_content">Kandungan Perkhidmatan</string>
+    <string name="confirm_name">Ubah suai nama</string>
+    <string name="setting_technology_other">Lain</string>
+    <string name="alarm_clock_setting">Jadualkan jam penggera</string>
+    <string name="change_cooling">Tukar penyejukan</string>
+    <string name="change_freshness">Tukar kesegaran</string>
 
 </resources>
 <!--马来语-->

+ 6 - 0
app/src/main/res/values-ro/strings.xml

@@ -478,6 +478,12 @@
     <string name="setting_service_visibility">Afișați serviciul</string>
     <string name="setting_service_title">Titlul serviciului</string>
     <string name="setting_service_content">Conținutul serviciului</string>
+    <string name="coin_rate">Rata monedei</string>
+    <string name="confirm_name">Modificați numele</string>
+    <string name="setting_technology_other">Altele</string>
+    <string name="alarm_clock_setting">Ceas deşteptător programat</string>
+    <string name="change_cooling">Comutați răcirea</string>
+    <string name="change_freshness">Schimbați prospețimea</string>
 
 </resources>
 <!--罗马尼亚语-->

+ 6 - 0
app/src/main/res/values-ru/strings.xml

@@ -474,6 +474,12 @@
     <string name="setting_service_visibility">Показать сервис</string>
     <string name="setting_service_title">Название услуги</string>
     <string name="setting_service_content">Содержимое службы</string>
+    <string name="coin_rate">Курс монеты</string>
+    <string name="confirm_name">Изменить имя</string>
+    <string name="setting_technology_other">Другое</string>
+    <string name="alarm_clock_setting">Будильник по расписанию</string>
+    <string name="change_cooling">Переключить охлаждение</string>
+    <string name="change_freshness">Переключить свежесть</string>
 
 </resources>
     <!--俄语-->

+ 6 - 0
app/src/main/res/values-th/strings.xml

@@ -469,6 +469,12 @@
     <string name="sleep_msg">เครื่องอยู่ในโหมดสลีป - - </string>
     <string name="setting_flavor_config">การตั้งค่ารสชาติ</string>
     <string name="setting_flavor_multiple_choice">รสชาติแบบปรนัย</string>
+    <string name="coin_rate">อัตราเหรียญ</string>
+    <string name="confirm_name">แก้ไขชื่อ</string>
+    <string name="setting_technology_other">อื่นๆ</string>
+    <string name="alarm_clock_setting">นาฬิกาปลุกตั้งเวลา</string>
+    <string name="change_cooling">สลับการระบายความร้อน</string>
+    <string name="change_freshness">สลับความสด</string>
 
 </resources>
 <!--泰语-->

+ 7 - 2
app/src/main/res/values-zh/strings.xml

@@ -471,9 +471,14 @@
     <string name="coin_x">硬币迈冲乘以X</string>
     <string name="coin_divide_x">硬币迈冲除以X</string>
     <string name="setting_text_message">修改部分文本字样</string>
-    <string name="sleep_msg">机器休眠中。。。</string>
+    <string name="sleep_msg">暂停营业</string>
     <string name="setting_flavor_config">口味设置</string>
     <string name="setting_flavor_multiple_choice">口味多选</string>
-
+    <string name="coin_rate">硬币倍率</string>
+    <string name="confirm_name">修改名字</string>
+    <string name="setting_technology_other">其他</string>
+    <string name="alarm_clock_setting">定时闹钟</string>
+    <string name="change_cooling">切换制冷</string>
+    <string name="change_freshness">切换保鲜</string>
 </resources>
 <!--中文-->

+ 4 - 2
app/src/main/res/values/strings.xml

@@ -476,7 +476,7 @@
     <string name="coin_x">硬币迈冲乘以X</string>
     <string name="coin_divide_x">硬币迈冲除以X</string>
     <string name="setting_text_message">修改部分文本字样</string>
-    <string name="sleep_msg">机器休眠中。。。</string>
+    <string name="sleep_msg">暂停营业</string>
     <string name="setting_flavor_config">口味设置</string>
     <string name="setting_flavor_multiple_choice">口味多选</string>
     <string name="setting_sale_service">Sale Service</string>
@@ -486,6 +486,8 @@
     <string name="coin_rate">硬币倍率</string>
     <string name="confirm_name">修改名字</string>
     <string name="setting_technology_other">其他</string>
-
+    <string name="alarm_clock_setting">定时闹钟</string>
+    <string name="change_cooling">切换制冷</string>
+    <string name="change_freshness">切换保鲜</string>
 </resources>
 <!--中文-->

+ 1 - 1
config.gradle

@@ -5,7 +5,7 @@ ext {
             "minSdkVersion"                : 19,
             "targetSdkVersion"             : 28,
             "versionCode"                  : 109,
-            "versionName"                  : "1.0.20",
+            "versionName"                  : "1.0.21",
 
             "androidSupport"               : "28.0.0",
             "constraint-layout"            : "1.1.3",