<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
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')
}
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 {
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");
setGifDrawable();
//绑定远程服务
bloodModel.onCreateView();
+ bloodModel.setActivity(getActivity());
return bloodBinding.getRoot();
}
setGifDrawable();
//绑定远程服务
bloodModel.onCreateView();
+ bloodModel.setActivity(getActivity());
return bloodBinding.getRoot();
}
setGifDrawable();
//绑定远程服务
bloodModel.onCreateView();
+ bloodModel.setActivity(getActivity());
return bloodBinding.getRoot();
}
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;
bloodPresenter.onCreate();
}
+ public void setActivity(Activity context){
+ bloodPresenter.setActivity(context);
+ }
+
public void onViewDestroy() {
bloodPresenter.release();
}
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 {
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;
mObsBloodTempValue = new MutableLiveData<>();
}
+ public void setActivity(Activity mContext) {
+ this.mActivity = mContext;
+ }
+
public MutableLiveData<String[]> getObsBloodValue() {
return mObsBloodValue;
}
public void onGettingData() {
//todo:让UI显示正在测试
IcLog.d(TAG, "正在获取数据...");
+ if (mUiRefreshHandler != null) {
+ mUiRefreshHandler.sendEmptyMessage(RUNING_TASK_TYPE);
+ }
}
@Override
IcLog.d(TAG, "任务正在等待...");
//updateTipsInfo(mTipsSpares.get(top), mTipsSpares.get(bottom));
//让UI显示保持安静,准备测试的玩意
+ if (mUiRefreshHandler != null) {
+ mUiRefreshHandler.sendEmptyMessage(WAITING_TASK_TYPE);
+ }
}
@Override
};
+ 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) {
--- /dev/null
+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;
+ }
+}
--- /dev/null
+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);
+ }
+}
<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>
<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>
<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>
<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>
<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>
<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>
repositories {
google()
jcenter()
-
+ maven { url "https://jitpack.io" }
}
}