增加后台执行任务时,提示用户
authork.liang <liangkang648253071@126.com>
Sat, 17 Jul 2021 08:32:35 +0000 (16:32 +0800)
committerk.liang <liangkang648253071@126.com>
Sat, 17 Jul 2021 08:32:35 +0000 (16:32 +0800)
19 files changed:
.idea/jarRepositories.xml
app/build.gradle
app/release/ICL02Blood_V78_202107031509_release.apk [new file with mode: 0644]
app/src/main/java/com/ic/blood/BloodApp.java
app/src/main/java/com/ic/blood/fragment/BloodFragment.java
app/src/main/java/com/ic/blood/fragment/HeartRateFragment.java
app/src/main/java/com/ic/blood/fragment/OxygenFragment.java
app/src/main/java/com/ic/blood/model/BloodCheckModel.java
app/src/main/java/com/ic/blood/presenter/BloodPresenter.java
app/src/main/java/com/ic/blood/widget/CustomDialogStrategy.java [new file with mode: 0644]
app/src/main/java/com/ic/blood/widget/CustomMaterialDialog.java [new file with mode: 0644]
app/src/main/res/mipmap-mdpi/warn.png [new file with mode: 0644]
app/src/main/res/values-en/strings.xml
app/src/main/res/values-zh-rCN/strings.xml
app/src/main/res/values-zh-rHK/strings.xml
app/src/main/res/values-zh-rTW/strings.xml
app/src/main/res/values/strings.xml
app/src/main/res/values/styles.xml
build.gradle

index 17c8136..f1b63f4 100644 (file)
       <option name="name" value="Google" />\r
       <option name="url" value="https://dl.google.com/dl/android/maven2/" />\r
     </remote-repository>\r
+    <remote-repository>\r
+      <option name="id" value="maven" />\r
+      <option name="name" value="maven" />\r
+      <option name="url" value="https://jitpack.io" />\r
+    </remote-repository>\r
   </component>\r
 </project>
\ No newline at end of file
index fee71c3..d6f325c 100644 (file)
@@ -130,5 +130,8 @@ dependencies {
     implementation 'com.google.android.material:material:1.2.0-alpha05'
 
     implementation 'com.jakewharton.threetenabp:threetenabp:1.2.2'
+
+    implementation 'com.github.xuexiangjys:XUI:1.1.7'
+
     implementation files('libs/ICLoger-release.aar')
 }
diff --git a/app/release/ICL02Blood_V78_202107031509_release.apk b/app/release/ICL02Blood_V78_202107031509_release.apk
new file mode 100644 (file)
index 0000000..4ca806b
Binary files /dev/null and b/app/release/ICL02Blood_V78_202107031509_release.apk differ
index 2c7c479..d8199b1 100644 (file)
@@ -5,6 +5,7 @@ import android.app.Application;
 import com.ic.blood.util.IcLog;
 import com.ic.iclooger.CrashHandler;
 import com.ic.iclooger.ICLogger;
+import com.xuexiang.xui.XUI;
 
 public class BloodApp extends Application {
 
@@ -13,6 +14,9 @@ public class BloodApp extends Application {
         super.onCreate();
         IcLog.setLogHead("IcBlood");
 
+        XUI.init(this);
+        XUI.debug(true);
+
         CrashHandler crashHandler = CrashHandler.getInstance();
         crashHandler.init(getApplicationContext(), getString(R.string.program_abnormal));
         ICLogger.init(getApplicationContext(), "IcBlood");
index 8c66c6f..58c4b78 100644 (file)
@@ -80,6 +80,7 @@ public class BloodFragment extends Fragment {
         setGifDrawable();
         //绑定远程服务
         bloodModel.onCreateView();
+        bloodModel.setActivity(getActivity());
         return bloodBinding.getRoot();
     }
 
index 16cab3e..74249a5 100644 (file)
@@ -80,6 +80,7 @@ public class HeartRateFragment extends Fragment {
         setGifDrawable();
         //绑定远程服务
         bloodModel.onCreateView();
+        bloodModel.setActivity(getActivity());
         return bloodBinding.getRoot();
     }
 
index 1794e30..ab7e49a 100644 (file)
@@ -80,6 +80,7 @@ public class OxygenFragment extends Fragment {
         setGifDrawable();
         //绑定远程服务
         bloodModel.onCreateView();
+        bloodModel.setActivity(getActivity());
         return bloodBinding.getRoot();
     }
 
index 094437f..9dac59c 100644 (file)
@@ -1,6 +1,8 @@
 package com.ic.blood.model;
 
+import android.app.Activity;
 import android.app.Application;
+import android.content.Context;
 
 import androidx.annotation.NonNull;
 import androidx.lifecycle.AndroidViewModel;
@@ -60,6 +62,10 @@ public class BloodCheckModel extends AndroidViewModel {
         bloodPresenter.onCreate();
     }
 
+    public void setActivity(Activity context){
+        bloodPresenter.setActivity(context);
+    }
+
     public void onViewDestroy() {
         bloodPresenter.release();
     }
index 510a835..a9d38a1 100644 (file)
@@ -1,23 +1,34 @@
 package com.ic.blood.presenter;
 
 
+import android.app.Activity;
 import android.content.BroadcastReceiver;
 import android.content.ComponentName;
 import android.content.Context;
+import android.content.DialogInterface;
 import android.content.Intent;
 import android.content.IntentFilter;
 import android.content.ServiceConnection;
+import android.os.Handler;
 import android.os.IBinder;
+import android.os.Looper;
+import android.os.Message;
+import android.widget.Toast;
 
+import androidx.annotation.NonNull;
+import androidx.appcompat.app.AlertDialog;
 import androidx.lifecycle.LiveData;
 import androidx.lifecycle.MutableLiveData;
 
 import com.ic.blood.R;
 import com.ic.blood.util.IcLog;
 import com.ic.blood.util.SystemUtils;
+import com.ic.blood.widget.CustomDialogStrategy;
 import com.ic.work.IHeartRateSensorCallback;
 import com.ic.work.IHeartRateSensorService;
 import com.ic.work.domain.HeartRate;
+import com.xuexiang.xui.widget.dialog.DialogLoader;
+import com.xuexiang.xui.widget.dialog.strategy.impl.MaterialDialogStrategy;
 
 
 public class BloodPresenter {
@@ -27,7 +38,7 @@ public class BloodPresenter {
     public static final String ACTION_HEART_RATE = "com.ic.sensor.data.action.HEART_RATE";
 
     private Context mContext;
-
+    private Activity mActivity;
     private MutableLiveData<String[]> mObsBloodValue;
     private MutableLiveData<String> mObsStateTips;
     private MutableLiveData<String[]> mObsTipsInfo;
@@ -55,6 +66,10 @@ public class BloodPresenter {
         mObsBloodTempValue = new MutableLiveData<>();
     }
 
+    public void setActivity(Activity mContext) {
+        this.mActivity = mContext;
+    }
+
     public MutableLiveData<String[]> getObsBloodValue() {
         return mObsBloodValue;
     }
@@ -281,6 +296,9 @@ public class BloodPresenter {
         public void onGettingData() {
             //todo:让UI显示正在测试
             IcLog.d(TAG, "正在获取数据...");
+            if (mUiRefreshHandler != null) {
+                mUiRefreshHandler.sendEmptyMessage(RUNING_TASK_TYPE);
+            }
         }
 
         @Override
@@ -288,6 +306,9 @@ public class BloodPresenter {
             IcLog.d(TAG, "任务正在等待...");
             //updateTipsInfo(mTipsSpares.get(top), mTipsSpares.get(bottom));
             //让UI显示保持安静,准备测试的玩意
+            if (mUiRefreshHandler != null) {
+                mUiRefreshHandler.sendEmptyMessage(WAITING_TASK_TYPE);
+            }
         }
 
         @Override
@@ -297,6 +318,41 @@ public class BloodPresenter {
 
     };
 
+    private static final int RUNING_TASK_TYPE = 0x01;
+    private static final int WAITING_TASK_TYPE = 0x02;
+    private Handler mUiRefreshHandler = new Handler(Looper.getMainLooper()) {
+        @Override
+        public void handleMessage(@NonNull Message msg) {
+            super.handleMessage(msg);
+            switch (msg.what) {
+                case RUNING_TASK_TYPE:
+                    Toast.makeText(mContext, mContext.getString(R.string.background_test), Toast.LENGTH_SHORT).show();
+                    break;
+                case WAITING_TASK_TYPE:
+                    showDialog();
+                    break;
+            }
+        }
+    };
+
+    private void showDialog() {
+        DialogLoader mDialogLoader = DialogLoader.getInstance().setIDialogStrategy(new CustomDialogStrategy());
+        mDialogLoader.showTipDialog(mActivity, R.mipmap.warn, mContext.getString(R.string.dialog_warn),
+                mContext.getString(R.string.background_wait), mContext.getString(R.string.dialog_confirm),
+                new DialogInterface.OnClickListener() {
+
+                    @Override
+                    public void onClick(DialogInterface dialogInterface, int i) {
+                        if(dialogInterface != null){
+                            dialogInterface.dismiss();
+                        }
+                        if(mActivity != null){
+                            mActivity.onBackPressed();
+                        }
+                    }
+                });
+    }
+
     private String getTestingString() {
         String string = mContext.getString(R.string.tips_ing_check);
         if (testType == TestType.JUST_OXYGEN) {
diff --git a/app/src/main/java/com/ic/blood/widget/CustomDialogStrategy.java b/app/src/main/java/com/ic/blood/widget/CustomDialogStrategy.java
new file mode 100644 (file)
index 0000000..67ca447
--- /dev/null
@@ -0,0 +1,104 @@
+package com.ic.blood.widget;
+
+import android.annotation.SuppressLint;
+import android.app.Dialog;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.graphics.Color;
+
+import androidx.annotation.NonNull;
+
+import com.ic.blood.R;
+import com.xuexiang.xui.widget.dialog.materialdialog.DialogAction;
+import com.xuexiang.xui.widget.dialog.materialdialog.MaterialDialog;
+import com.xuexiang.xui.widget.dialog.materialdialog.Theme;
+import com.xuexiang.xui.widget.dialog.strategy.IDialogStrategy;
+import com.xuexiang.xui.widget.dialog.strategy.InputCallback;
+import com.xuexiang.xui.widget.dialog.strategy.InputInfo;
+
+/**
+ * @author: k.liang
+ * @date: 2021/7/17
+ */
+public class CustomDialogStrategy implements IDialogStrategy {
+
+    @SuppressLint("ResourceType")
+    @Override
+    public Dialog showTipDialog(Context context, int icon, String title, String content, String submitText, DialogInterface.OnClickListener listener) {
+        MaterialDialog.Builder builder = new MaterialDialog.Builder(context);
+        builder.backgroundColor(Color.parseColor("#F2F2F2"));
+        builder.title(title);
+        builder.titleColor(Color.BLACK);
+        builder.content(content);
+        builder.contentColor(Color.BLACK);
+        builder.positiveText(submitText);
+        builder.positiveColor(Color.BLACK);
+        builder.onPositive(new MaterialDialog.SingleButtonCallback() {
+            @Override
+            public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) {
+                if (listener != null) {
+                    listener.onClick(dialog, which.ordinal());
+                } else {
+                    dialog.dismiss();
+                }
+            }
+        });
+        builder.cancelable(false);
+        builder.autoDismiss(false);
+        CustomMaterialDialog customMaterialDialog = new CustomMaterialDialog(builder);
+        customMaterialDialog.setTitleSize(24);
+        customMaterialDialog.setContentSize(22);
+        customMaterialDialog.setButtonSize(24);
+        customMaterialDialog.show();
+        return customMaterialDialog;
+    }
+
+    @Override
+    public Dialog showTipDialog(Context context, String title, String content, String submitText) {
+        return new CustomMaterialDialog.Builder(context)
+                .title(title)
+                .content(content)
+                .positiveText(submitText)
+                .show();
+    }
+
+    @Override
+    public Dialog showConfirmDialog(Context context, String title, String content, String submitText, DialogInterface.OnClickListener submitListener, String cancelText, DialogInterface.OnClickListener cancelListener) {
+        return null;
+    }
+
+    @Override
+    public Dialog showConfirmDialog(Context context, String content, String submitText, DialogInterface.OnClickListener submitListener, String cancelText, DialogInterface.OnClickListener cancelListener) {
+        return null;
+    }
+
+    @Override
+    public Dialog showConfirmDialog(Context context, String content, String submitText, DialogInterface.OnClickListener submitListener, String cancelText) {
+        return null;
+    }
+
+    @Override
+    public Dialog showInputDialog(Context context, int icon, String title, String content, InputInfo inputInfo, InputCallback inputCallback, String submitText, DialogInterface.OnClickListener submitListener, String cancelText, DialogInterface.OnClickListener cancelListener) {
+        return null;
+    }
+
+    @Override
+    public Dialog showContextMenuDialog(Context context, String title, String[] items, DialogInterface.OnClickListener listener) {
+        return null;
+    }
+
+    @Override
+    public Dialog showContextMenuDialog(Context context, String title, int itemsId, DialogInterface.OnClickListener listener) {
+        return null;
+    }
+
+    @Override
+    public Dialog showSingleChoiceDialog(Context context, String title, String[] items, int selectedIndex, DialogInterface.OnClickListener listener, String submitText, String cancelText) {
+        return null;
+    }
+
+    @Override
+    public Dialog showSingleChoiceDialog(Context context, String title, int itemsId, int selectedIndex, DialogInterface.OnClickListener listener, String submitText, String cancelText) {
+        return null;
+    }
+}
diff --git a/app/src/main/java/com/ic/blood/widget/CustomMaterialDialog.java b/app/src/main/java/com/ic/blood/widget/CustomMaterialDialog.java
new file mode 100644 (file)
index 0000000..a772d74
--- /dev/null
@@ -0,0 +1,27 @@
+package com.ic.blood.widget;
+
+import com.xuexiang.xui.widget.dialog.materialdialog.DialogAction;
+import com.xuexiang.xui.widget.dialog.materialdialog.MaterialDialog;
+
+/**
+ * @author: k.liang
+ * @date: 2021/7/17
+ */
+public class CustomMaterialDialog extends MaterialDialog {
+
+    protected CustomMaterialDialog(Builder builder) {
+        super(builder);
+    }
+
+    public void setTitleSize(float size){
+        getTitleView().setTextSize(size);
+    }
+
+    public void setContentSize(float size){
+        getContentView().setTextSize(size);
+    }
+
+    public void setButtonSize(float size){
+        getActionButton(DialogAction.POSITIVE).setTextSize(size);
+    }
+}
diff --git a/app/src/main/res/mipmap-mdpi/warn.png b/app/src/main/res/mipmap-mdpi/warn.png
new file mode 100644 (file)
index 0000000..9fe74ce
Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/warn.png differ
index c16fbb2..fb0169e 100644 (file)
@@ -19,4 +19,9 @@
     <string name="program_abnormal">Sorry, the program has an exception, will exit</string>
 
     <string name="app_name">IcBlood</string>
+
+    <string name="background_test">Program is exist in backstage,wait...</string>
+    <string name="background_wait">Have other tests in background,Please try again later!</string>
+    <string name="dialog_warn">Warn</string>
+    <string name="dialog_confirm">Yes</string>
 </resources>
index 751b9fe..70665f7 100644 (file)
@@ -19,4 +19,9 @@
     <string name="program_abnormal">很抱歉,程序出现异常,即将退出</string>
 
     <string name="app_name">IcBlood</string>
+
+    <string name="background_test">后台正在测试心率,直接监听测试结果...</string>
+    <string name="background_wait">后台测试服务繁忙,请稍后再试!</string>
+    <string name="dialog_warn">提醒</string>
+    <string name="dialog_confirm">确认</string>
 </resources>
index 53e3ab3..4869f85 100644 (file)
@@ -19,4 +19,9 @@
     <string name="program_abnormal">很抱歉,程序出現異常,即將退出</string>
 
     <string name="app_name">IcBlood</string>
+
+    <string name="background_test">後臺正在測試心率,直接監聽測試結果...</string>
+    <string name="background_wait">後臺測試服務繁忙,請稍後再試!</string>
+    <string name="dialog_warn">提醒</string>
+    <string name="dialog_confirm">確認</string>
 </resources>
index 53e3ab3..4869f85 100644 (file)
@@ -19,4 +19,9 @@
     <string name="program_abnormal">很抱歉,程序出現異常,即將退出</string>
 
     <string name="app_name">IcBlood</string>
+
+    <string name="background_test">後臺正在測試心率,直接監聽測試結果...</string>
+    <string name="background_wait">後臺測試服務繁忙,請稍後再試!</string>
+    <string name="dialog_warn">提醒</string>
+    <string name="dialog_confirm">確認</string>
 </resources>
index 751b9fe..70665f7 100644 (file)
@@ -19,4 +19,9 @@
     <string name="program_abnormal">很抱歉,程序出现异常,即将退出</string>
 
     <string name="app_name">IcBlood</string>
+
+    <string name="background_test">后台正在测试心率,直接监听测试结果...</string>
+    <string name="background_wait">后台测试服务繁忙,请稍后再试!</string>
+    <string name="dialog_warn">提醒</string>
+    <string name="dialog_confirm">确认</string>
 </resources>
index 27ec637..450d93e 100644 (file)
@@ -1,7 +1,7 @@
 <resources>
 
     <!-- Base application theme. -->
-    <style name="AppTheme" parent="Theme.MaterialComponents.Light.NoActionBar">
+    <style name="AppTheme" parent="XUITheme.Phone">
         <!-- Customize your theme here. -->
         <item name="colorPrimary">@color/colorPrimary</item>
         <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
index fb516be..2a5e8a3 100644 (file)
@@ -18,7 +18,7 @@ allprojects {
     repositories {
         google()
         jcenter()
-        
+        maven { url "https://jitpack.io" }
     }
 }