diff --git a/.gitignore b/.gitignore
index 486e39a..6ed3b0e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -16,4 +16,3 @@
/app/src/test/java/com/uiui/os/
/.idea/
/app/proguardbuild/
-/dependencies.txt
diff --git a/app/build.gradle b/app/build.gradle
index b10f30d..c1d2e19 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -15,8 +15,8 @@ android {
applicationId "com.xxpatx.os"
minSdkVersion 24
targetSdkVersion 29
- versionCode 1016
- versionName "1.1.5"
+ versionCode 1017
+ versionName "1.1.6"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 1085e14..b9e79cb 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -199,22 +199,18 @@
android:excludeFromRecents="true"
android:launchMode="singleTask"
android:screenOrientation="portrait"
- android:theme="@style/activity_styles" />
+ android:theme="@style/FloatingWindow" />
-
CREATOR = new Creator() {
- @Override
- public VideoInfo createFromParcel(Parcel in) {
- return new VideoInfo(in);
- }
-
- @Override
- public VideoInfo[] newArray(int size) {
- return new VideoInfo[size];
- }
- };
-
- public int getId() {
- return id;
- }
-
- public void setId(int id) {
- this.id = id;
- }
-
- public String getType_name() {
- return type_name;
- }
-
- public void setType_name(String type_name) {
- this.type_name = type_name;
- }
-
- public String getName() {
- return name;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- public String getRemarks() {
- return remarks;
- }
-
- public void setRemarks(String remarks) {
- this.remarks = remarks;
- }
-
- public String getVideo_file() {
- return video_file;
- }
-
- public void setVideo_file(String video_file) {
- this.video_file = video_file;
- }
-
- public String getVideo_cover() {
- return video_cover;
- }
-
- public void setVideo_cover(String video_cover) {
- this.video_cover = video_cover;
- }
-
- public double getVideo_duration() {
- return video_duration;
- }
-
- public void setVideo_duration(double video_duration) {
- this.video_duration = video_duration;
- }
-
- public long getVideo_size() {
- return video_size;
- }
-
- public void setVideo_size(long video_size) {
- this.video_size = video_size;
- }
-
- public int getWeight() {
- return weight;
- }
-
- public void setWeight(int weight) {
- this.weight = weight;
- }
-
- public int getPlay_count() {
- return play_count;
- }
-
- public void setPlay_count(int play_count) {
- this.play_count = play_count;
- }
-
- @NonNull
- @Override
- public String toString() {
- return JsonParser.parseString(new Gson().toJson(this)).getAsJsonObject().toString();
- }
-}
diff --git a/app/src/main/java/com/xxpatx/os/activity/alarmclock/add/port/PortAlarmClockAddActivity.java b/app/src/main/java/com/xxpatx/os/activity/alarm/add/AlarmAddActivity.java
similarity index 84%
rename from app/src/main/java/com/xxpatx/os/activity/alarmclock/add/port/PortAlarmClockAddActivity.java
rename to app/src/main/java/com/xxpatx/os/activity/alarm/add/AlarmAddActivity.java
index 0094b03..65318d2 100644
--- a/app/src/main/java/com/xxpatx/os/activity/alarmclock/add/port/PortAlarmClockAddActivity.java
+++ b/app/src/main/java/com/xxpatx/os/activity/alarm/add/AlarmAddActivity.java
@@ -1,9 +1,8 @@
-package com.xxpatx.os.activity.alarmclock.add.port;
+package com.xxpatx.os.activity.alarm.add;
import android.content.Intent;
import android.content.res.ColorStateList;
import android.graphics.Color;
-import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.widget.CompoundButton;
@@ -25,15 +24,13 @@ import com.xxpatx.os.alarm.AlarmClockData;
import com.xxpatx.os.alarm.AlarmUtils;
import com.xxpatx.os.base.GlideEngine;
import com.xxpatx.os.base.mvvm.BaseMvvmActivity;
-import com.xxpatx.os.databinding.ActivityAddAlarmPortBinding;
+import com.xxpatx.os.databinding.ActivityAlarmAddBinding;
import com.xxpatx.os.service.main.MainService;
import com.xxpatx.os.utils.FFmpegUtils;
import com.xxpatx.os.utils.FileUtil;
import com.xxpatx.os.utils.ScreenUtil;
import com.xxpatx.os.utils.TimeUtils;
-import com.zackratos.ultimatebarx.ultimatebarx.java.UltimateBarX;
-
import java.io.File;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
@@ -45,8 +42,8 @@ import io.reactivex.rxjava3.annotations.NonNull;
import io.reactivex.rxjava3.core.Observer;
import io.reactivex.rxjava3.disposables.Disposable;
-public class PortAlarmClockAddActivity extends BaseMvvmActivity {
- private static final String TAG = "PortAlarmClockAddActivity";
+public class AlarmAddActivity extends BaseMvvmActivity {
+ private static final String TAG = "AlarmAddActivity";
private TimePickerView pvTime;
@@ -68,7 +65,7 @@ public class PortAlarmClockAddActivity extends BaseMvvmActivity {
+
+ @Override
+ public ActivityAlarmAddBinding getVDBinding() {
+ return binding;
+ }
+
+ @Override
+ public void onDestroy() {
+
+ }
+}
diff --git a/app/src/main/java/com/xxpatx/os/activity/alarmclock/edit/AlarmClockEditActivity.java b/app/src/main/java/com/xxpatx/os/activity/alarm/edit/AlarmEditActivity.java
similarity index 88%
rename from app/src/main/java/com/xxpatx/os/activity/alarmclock/edit/AlarmClockEditActivity.java
rename to app/src/main/java/com/xxpatx/os/activity/alarm/edit/AlarmEditActivity.java
index 1292857..0fb8e42 100644
--- a/app/src/main/java/com/xxpatx/os/activity/alarmclock/edit/AlarmClockEditActivity.java
+++ b/app/src/main/java/com/xxpatx/os/activity/alarm/edit/AlarmEditActivity.java
@@ -1,4 +1,4 @@
-package com.xxpatx.os.activity.alarmclock.edit;
+package com.xxpatx.os.activity.alarm.edit;
import android.content.Intent;
import android.content.res.ColorStateList;
@@ -26,13 +26,14 @@ import com.luck.picture.lib.entity.LocalMedia;
import com.luck.picture.lib.interfaces.OnResultCallbackListener;
import com.trello.rxlifecycle4.RxLifecycle;
import com.trello.rxlifecycle4.android.ActivityEvent;
+import com.xiasuhuei321.loadingdialog.view.LoadingDialog;
import com.xxpatx.os.R;
import com.xxpatx.os.alarm.AlarmClockData;
import com.xxpatx.os.alarm.AlarmUtils;
import com.xxpatx.os.base.GlideEngine;
import com.xxpatx.os.base.mvvm.BaseMvvmActivity;
import com.xxpatx.os.bean.BaseResponse;
-import com.xxpatx.os.databinding.ActivityAddAlarmBinding;
+import com.xxpatx.os.databinding.ActivityAlarmEditBinding;
import com.xxpatx.os.network.NetInterfaceManager;
import com.xxpatx.os.utils.FFmpegUtils;
import com.xxpatx.os.utils.FileUtil;
@@ -40,7 +41,6 @@ import com.xxpatx.os.utils.GlideLoadUtils;
import com.xxpatx.os.utils.ScreenUtil;
import com.xxpatx.os.utils.TimeUtils;
import com.xxpatx.os.utils.Utils;
-import com.xiasuhuei321.loadingdialog.view.LoadingDialog;
import java.io.File;
import java.text.SimpleDateFormat;
@@ -57,8 +57,8 @@ import okhttp3.MediaType;
import okhttp3.MultipartBody;
import okhttp3.RequestBody;
-public class AlarmClockEditActivity extends BaseMvvmActivity {
- private static final String TAG = "AlarmClockEditActivity";
+public class AlarmEditActivity extends BaseMvvmActivity {
+ private static final String TAG = "AlarmEditActivity";
private LoadingDialog mLoadingDialog;
private PopupWindow mMenuPopupWindow;
@@ -74,9 +74,19 @@ public class AlarmClockEditActivity extends BaseMvvmActivity {
+
+ @Override
+ public ActivityAlarmEditBinding getVDBinding() {
+ return binding;
+ }
+
+ @Override
+ public void onDestroy() {
+
+ }
+}
diff --git a/app/src/main/java/com/xxpatx/os/activity/alarm/port/PortAlarmActivity.java b/app/src/main/java/com/xxpatx/os/activity/alarm/list/AlarmListActivity.java
similarity index 90%
rename from app/src/main/java/com/xxpatx/os/activity/alarm/port/PortAlarmActivity.java
rename to app/src/main/java/com/xxpatx/os/activity/alarm/list/AlarmListActivity.java
index 6760167..0df28b4 100644
--- a/app/src/main/java/com/xxpatx/os/activity/alarm/port/PortAlarmActivity.java
+++ b/app/src/main/java/com/xxpatx/os/activity/alarm/list/AlarmListActivity.java
@@ -1,4 +1,4 @@
-package com.xxpatx.os.activity.alarm.port;
+package com.xxpatx.os.activity.alarm.list;
import android.content.Intent;
import android.util.Log;
@@ -13,29 +13,28 @@ import com.tencent.mmkv.MMKV;
import com.trello.rxlifecycle4.RxLifecycle;
import com.trello.rxlifecycle4.android.ActivityEvent;
import com.xxpatx.os.R;
-import com.xxpatx.os.activity.alarmclock.add.port.PortAlarmClockAddActivity;
+import com.xxpatx.os.activity.alarm.add.AlarmAddActivity;
+import com.xxpatx.os.alarm.AlarmAdapter;
import com.xxpatx.os.alarm.AlarmClockData;
import com.xxpatx.os.alarm.AlarmUtils;
-import com.xxpatx.os.alarm.PortAlarmAdapter;
import com.xxpatx.os.base.mvvm.BaseMvvmActivity;
import com.xxpatx.os.bean.BaseResponse;
import com.xxpatx.os.config.CommonConfig;
-import com.xxpatx.os.databinding.ActivityAlarmPortBinding;
+import com.xxpatx.os.databinding.ActivityAlarmListBinding;
import com.xxpatx.os.dialog.DeleteDialog;
import com.xxpatx.os.network.NetInterfaceManager;
-
import java.util.List;
import io.reactivex.rxjava3.core.Observer;
import io.reactivex.rxjava3.disposables.Disposable;
-public class PortAlarmActivity extends BaseMvvmActivity {
- private static final String TAG = "PortAlarmActivity";
+public class AlarmListActivity extends BaseMvvmActivity {
+ private static final String TAG = "AlarmListActivity";
private MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE);
- private PortAlarmAdapter mAlarmAdapter;
+ private AlarmAdapter mAlarmAdapter;
private int mType = 0;
@Override
@@ -53,7 +52,7 @@ public class PortAlarmActivity extends BaseMvvmActivity {
+public class AlarmListViewModel extends BaseViewModel {
- private static final String TAG = "PortAlarmViewModel";
+ private static final String TAG = "AlarmListViewModel";
@Override
- public ActivityAlarmPortBinding getVDBinding() {
+ public ActivityAlarmListBinding getVDBinding() {
return binding;
}
diff --git a/app/src/main/java/com/xxpatx/os/activity/alarmclock/add/port/PortAlarmClockAddViewModel.java b/app/src/main/java/com/xxpatx/os/activity/alarmclock/add/port/PortAlarmClockAddViewModel.java
deleted file mode 100644
index 59b86e1..0000000
--- a/app/src/main/java/com/xxpatx/os/activity/alarmclock/add/port/PortAlarmClockAddViewModel.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package com.xxpatx.os.activity.alarmclock.add.port;
-
-import com.trello.rxlifecycle4.android.ActivityEvent;
-import com.xxpatx.os.base.mvvm.BaseViewModel;
-import com.xxpatx.os.databinding.ActivityAddAlarmPortBinding;
-
-public class PortAlarmClockAddViewModel extends BaseViewModel {
-
- @Override
- public ActivityAddAlarmPortBinding getVDBinding() {
- return binding;
- }
-
- @Override
- public void onDestroy() {
-
- }
-}
diff --git a/app/src/main/java/com/xxpatx/os/activity/alarmclock/edit/AlarmClockEditViewModel.java b/app/src/main/java/com/xxpatx/os/activity/alarmclock/edit/AlarmClockEditViewModel.java
deleted file mode 100644
index 964f3c6..0000000
--- a/app/src/main/java/com/xxpatx/os/activity/alarmclock/edit/AlarmClockEditViewModel.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package com.xxpatx.os.activity.alarmclock.edit;
-
-import com.trello.rxlifecycle4.android.ActivityEvent;
-import com.xxpatx.os.base.mvvm.BaseViewModel;
-import com.xxpatx.os.databinding.ActivityAddAlarmBinding;
-
-public class AlarmClockEditViewModel extends BaseViewModel {
-
- @Override
- public ActivityAddAlarmBinding getVDBinding() {
- return binding;
- }
-
- @Override
- public void onDestroy() {
-
- }
-}
diff --git a/app/src/main/java/com/xxpatx/os/activity/alarmclock/main/AlarmClockActivity.java b/app/src/main/java/com/xxpatx/os/activity/alarmclock/main/AlarmClockActivity.java
deleted file mode 100644
index 1b3c664..0000000
--- a/app/src/main/java/com/xxpatx/os/activity/alarmclock/main/AlarmClockActivity.java
+++ /dev/null
@@ -1,217 +0,0 @@
-package com.xxpatx.os.activity.alarmclock.main;
-
-import android.content.BroadcastReceiver;
-import android.content.Context;
-import android.content.Intent;
-import android.content.IntentFilter;
-import android.util.Log;
-import android.view.View;
-
-import androidx.annotation.NonNull;
-import androidx.recyclerview.widget.LinearLayoutManager;
-
-import com.hjq.toast.Toaster;
-import com.trello.rxlifecycle4.RxLifecycle;
-import com.trello.rxlifecycle4.android.ActivityEvent;
-import com.xxpatx.os.R;
-import com.xxpatx.os.alarm.AlarmAdapter;
-import com.xxpatx.os.alarm.AlarmClockData;
-import com.xxpatx.os.alarm.AlarmUtils;
-import com.xxpatx.os.base.mvvm.BaseMvvmActivity;
-import com.xxpatx.os.bean.BaseResponse;
-import com.xxpatx.os.databinding.ActivityAlarmBinding;
-import com.xxpatx.os.dialog.DeleteDialog;
-import com.xxpatx.os.network.NetInterfaceManager;
-import com.xxpatx.os.push.PushManager;
-import com.zackratos.ultimatebarx.ultimatebarx.java.UltimateBarX;
-
-import cn.jzvd.Jzvd;
-import io.reactivex.rxjava3.core.Observer;
-import io.reactivex.rxjava3.disposables.Disposable;
-
-public class AlarmClockActivity extends BaseMvvmActivity {
- private static final String TAG = "AlarmClockActivity";
-
- private AlarmAdapter mAlarmAdapter;
-
- @Override
- public int getLayoutId() {
- return R.layout.activity_alarm;
- }
-
- @Override
- protected void initDataBinding() {
- mViewModel.setCtx(this);
- mViewModel.setVDBinding(mViewDataBinding);
- mViewModel.setLifecycle(getLifecycleSubject());
- mViewDataBinding.setClick(new BtnClick());
- }
-
- @Override
- public void initView() {
- UltimateBarX.statusBarOnly(this)
- .colorRes(R.color.default_blue)
- .fitWindow(true)
- .apply();
-
- mAlarmAdapter = new AlarmAdapter();
- mAlarmAdapter.setOnLongClickListener(new AlarmAdapter.OnLongClickListener() {
- @Override
- public void onLongClick(AlarmClockData alarmClockData) {
- showDialog(alarmClockData);
- }
- });
- mViewDataBinding.rvData.setLayoutManager(new LinearLayoutManager(AlarmClockActivity.this));
- mViewDataBinding.rvData.setAdapter(mAlarmAdapter);
- mViewDataBinding.ivBack.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View view) {
- finish();
- }
- });
-// mViewDataBinding.swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
-// @Override
-// public void onRefresh() {
-// mViewModel.getAlarmClock();
-// }
-// });
-// mViewDataBinding.fab.setOnClickListener(new View.OnClickListener() {
-// @Override
-// public void onClick(View view) {
-// startActivity(new Intent(AlarmClockActivity.this, AlarmClockAddActivity.class));
-// }
-// });
- }
-
- private void showDialog(AlarmClockData alarmClockData) {
- DeleteDialog dialog = new DeleteDialog(this);
- dialog.setTitle("提醒")
- .setMessage("是否要删除本次闹钟")
- .setPositive("确定")
- .setNegtive("取消")
- .setOnClickBottomListener(new DeleteDialog.OnClickBottomListener() {
- @Override
- public void onPositiveClick() {
- deleteAlarm(alarmClockData);
- dialog.dismiss();
- }
-
- @Override
- public void onNegtiveClick() {
- dialog.dismiss();
- }
- });
- dialog.show();
- }
-
- private void deleteAlarm(AlarmClockData alarmClockData) {
- if (alarmClockData.isIs_local()) {
- alarmClockData.setDeleted(true);
- AlarmUtils.getInstance().deleteAlarmClock(alarmClockData);
- } else {
- NetInterfaceManager.getInstance().deleteAlarmClockObservable(alarmClockData.getId())
- .compose(RxLifecycle.bindUntilEvent(getLifecycleSubject(), ActivityEvent.DESTROY))
- .subscribe(new Observer() {
- @Override
- public void onSubscribe(@NonNull Disposable d) {
- Log.e("deleteAlarm", "onSubscribe: ");
- }
-
- @Override
- public void onNext(@NonNull BaseResponse baseResponse) {
- Log.e("deleteAlarm", "onNext: " + baseResponse);
- if (baseResponse.code == 200) {
- AlarmUtils.getInstance().deleteAlarmClock(alarmClockData);
- Toaster.show("删除成功");
- } else {
- Toaster.show("删除失败:" + baseResponse.msg);
- }
- }
-
- @Override
- public void onError(@NonNull Throwable e) {
- Log.e("deleteAlarm", "onError: " + e.getMessage());
- alarmClockData.setDeleted(true);
- AlarmUtils.getInstance().updateAlarmClock(alarmClockData);
- onComplete();
- }
-
- @Override
- public void onComplete() {
- Log.e("deleteAlarm", "onComplete: ");
- mViewModel.getAlarmClock();
- }
- });
- }
- }
-
- @Override
- public void initData() {
- registerAlarmClockReceiver();
- }
-
-// @Override
-// public void showAlarmClock(List alarmClockData) {
-// mAlarmAdapter.setAlarmClockData(alarmClockData);
-//// mViewDataBinding.swipeRefreshLayout.setRefreshing(false);
-// mViewDataBinding.clNodata.setVisibility(View.GONE);
-// mViewDataBinding.rvData.setVisibility(View.VISIBLE);
-// }
-//
-// @Override
-// public void setAlarmClockEmpty() {
-// mAlarmAdapter.setAlarmClockData(null);
-//// mViewDataBinding.swipeRefreshLayout.setRefreshing(false);
-// mViewDataBinding.clNodata.setVisibility(View.VISIBLE);
-// mViewDataBinding.rvData.setVisibility(View.GONE);
-// }
-//
-// @Override
-// public void onError() {
-//// mViewDataBinding.swipeRefreshLayout.setRefreshing(false);
-// }
-
- @Override
- protected void onDestroy() {
- super.onDestroy();
- Jzvd.releaseAllVideos();
- if (mAlarmClockReceiver != null) {
- unregisterReceiver(mAlarmClockReceiver);
- }
- }
-
- @Override
- protected void onResume() {
- super.onResume();
- mViewModel.getAlarmClock();
- }
-
- private void registerAlarmClockReceiver() {
- if (null == mAlarmClockReceiver) {
- mAlarmClockReceiver = new AlarmClockReceiver();
- }
- IntentFilter filter = new IntentFilter();
- filter.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY);
- filter.addAction(PushManager.SET_ALARMCLOCK);
- registerReceiver(mAlarmClockReceiver, filter);
- }
-
- private AlarmClockReceiver mAlarmClockReceiver;
-
- private class AlarmClockReceiver extends BroadcastReceiver {
-
- @Override
- public void onReceive(Context context, Intent intent) {
- String action = intent.getAction();
- Log.e(TAG, "onReceive: " + action);
- if (PushManager.SET_ALARMCLOCK.equals(action)) {
- mViewModel.getAlarmClock();
- }
- }
- }
-
- public class BtnClick {
-
-
- }
-}
diff --git a/app/src/main/java/com/xxpatx/os/activity/alarmclock/main/AlarmClockViewModel.java b/app/src/main/java/com/xxpatx/os/activity/alarmclock/main/AlarmClockViewModel.java
deleted file mode 100644
index 3c0b700..0000000
--- a/app/src/main/java/com/xxpatx/os/activity/alarmclock/main/AlarmClockViewModel.java
+++ /dev/null
@@ -1,42 +0,0 @@
-package com.xxpatx.os.activity.alarmclock.main;
-
-import com.trello.rxlifecycle4.android.ActivityEvent;
-import com.xxpatx.os.alarm.AlarmClockData;
-import com.xxpatx.os.base.mvvm.BaseViewModel;
-import com.xxpatx.os.databinding.ActivityAlarmBinding;
-import com.xxpatx.os.network.NetInterfaceManager;
-
-import java.util.List;
-
-public class AlarmClockViewModel extends BaseViewModel {
-
- @Override
- public ActivityAlarmBinding getVDBinding() {
- return binding;
- }
-
- @Override
- public void onDestroy() {
-
- }
-
-
- public void getAlarmClock() {
- NetInterfaceManager.getInstance().getAlarmClock(true, getLifecycle(), new NetInterfaceManager.AlarmClockCallback() {
- @Override
- public void setAlarmClock(List alarmClockList) {
-// mView.showAlarmClock(alarmClockList);
- }
-
- @Override
- public void setAlarmClockEmpty() {
-// mView.setAlarmClockEmpty();
- }
-
- @Override
- public void onError() {
-// mView.onError();
- }
- });
- }
-}
diff --git a/app/src/main/java/com/xxpatx/os/activity/contact/AddContactActivity.java b/app/src/main/java/com/xxpatx/os/activity/contact/AddContactActivity.java
index 4f5e88a..1c85ab2 100644
--- a/app/src/main/java/com/xxpatx/os/activity/contact/AddContactActivity.java
+++ b/app/src/main/java/com/xxpatx/os/activity/contact/AddContactActivity.java
@@ -24,6 +24,7 @@ import com.xxpatx.os.base.mvvm.BaseMvvmActivity;
import com.xxpatx.os.bean.BaseResponse;
import com.xxpatx.os.databinding.ActivityAddContactBinding;
import com.xxpatx.os.network.NetInterfaceManager;
+import com.xxpatx.os.utils.FileUtil;
import com.xxpatx.os.utils.GlideLoadUtils;
import com.xxpatx.os.utils.Utils;
@@ -40,6 +41,8 @@ import okhttp3.MediaType;
import okhttp3.MultipartBody;
import okhttp3.RequestBody;
+import static com.xxpatx.os.utils.FileUtil.uriToFile;
+
public class AddContactActivity extends BaseMvvmActivity {
private static final String TAG = "AddContactActivity";
@@ -108,7 +111,7 @@ public class AddContactActivity extends BaseMvvmActivity {
private static final String TAG = "AddWechatContactActivity";
@@ -86,22 +74,38 @@ public class AddWechatContactActivity extends BaseMvvmActivity() {
+ mViewModel.getAddData().observe(this, new Observer() {
@Override
- public void onChanged(BaseResponse baseResponse) {
- if (baseResponse.code == 200) {
+ public void onChanged(Boolean aBoolean) {
+ if (aBoolean) {
mLoadingDialog.loadSuccess();
- mLoadingDialog.close();
finish();
} else {
- mLoadingDialog.setFailedText(baseResponse.msg);
mLoadingDialog.loadFailed();
- mLoadingDialog.close();
}
}
});
+ mViewModel.getContactData().observe(this, new Observer() {
+ @Override
+ public void onChanged(Contact contact) {
+ ContactCacheUtils.getInstance().addContact(contact);
+ Toaster.showLong("已保存至本地");
+ finish();
+ }
+ });
}
+ @Override
+ protected void onDestroy() {
+ super.onDestroy();
+ mLoadingDialog.close();
+ mLoadingDialog = null;
+ }
+
+ @Override
+ protected void onPause() {
+ super.onPause();
+ }
private void openSelector() {
PictureSelector.create(AddWechatContactActivity.this)
@@ -128,125 +132,6 @@ public class AddWechatContactActivity extends BaseMvvmActivity params = new HashMap<>();
- params.put("sn", Utils.getSerial());
- params.put("name", name);
- params.put("mobile", phone);
- params.put("tag", groupTag);
- params.put("is_urgent", String.valueOf(mViewDataBinding.toggleButton.isToggleOn()));
- mViewModel.addContact(params, body);
- }
-
- mLoadingDialog.show();
- }
-
- /**
- * drawable转为file
- *
- * @param drawableId drawable的ID
- * @param fileName 转换后的文件名
- * @return
- */
- public File drawableToFile(int drawableId, String fileName) {
-// InputStream is = view.getContext().getResources().openRawResource(R.drawable.logo);
- Bitmap bitmap = BitmapFactory.decodeResource(getResources(), drawableId);
-// Bitmap bitmap = BitmapFactory.decodeStream(is);
- String defaultPath = getFilesDir().getAbsolutePath() + "/defaultGoodInfo";
- File file = new File(defaultPath);
- if (!file.exists()) {
- file.mkdirs();
- }
- String defaultImgPath = defaultPath + "/" + fileName;
- file = new File(defaultImgPath);
- try {
- file.createNewFile();
- FileOutputStream fOut = new FileOutputStream(file);
- bitmap.compress(Bitmap.CompressFormat.PNG, 100, fOut);
-// is.close();
- fOut.flush();
- fOut.close();
- } catch (Exception e) {
- e.printStackTrace();
- }
- return file;
- }
-
- public static File uriToFile(Uri uri, Context context) {
- String path = null;
- if ("file".equals(uri.getScheme())) {
- path = uri.getEncodedPath();
- if (path != null) {
- path = Uri.decode(path);
- ContentResolver cr = context.getContentResolver();
- StringBuffer buff = new StringBuffer();
- buff.append("(").append(MediaStore.Images.ImageColumns.DATA).append("=").append("'" + path + "'").append(")");
- Cursor cur = cr.query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, new String[]{MediaStore.Images.ImageColumns._ID, MediaStore.Images.ImageColumns.DATA}, buff.toString(), null, null);
- int index = 0;
- int dataIdx = 0;
- for (cur.moveToFirst(); !cur.isAfterLast(); cur.moveToNext()) {
- index = cur.getColumnIndex(MediaStore.Images.ImageColumns._ID);
- index = cur.getInt(index);
- dataIdx = cur.getColumnIndex(MediaStore.Images.ImageColumns.DATA);
- path = cur.getString(dataIdx);
- }
- cur.close();
- if (index == 0) {
- } else {
- Uri u = Uri.parse("content://media/external/images/media/" + index);
- System.out.println("temp uri is :" + u);
- }
- }
- if (path != null) {
- return new File(path);
- }
- } else if ("content".equals(uri.getScheme())) {
- // 4.2.2以后
- String[] proj = {MediaStore.Images.Media.DATA};
- Cursor cursor = context.getContentResolver().query(uri, proj, null, null, null);
- if (cursor.moveToFirst()) {
- int columnIndex = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
- path = cursor.getString(columnIndex);
- }
- cursor.close();
-
- return new File(path);
- } else {
- Log.e(TAG, "uriToFile uriString:" + uri.toString());
- return new File(uri.toString());
- }
- return null;
- }
-
public void testAddContacts() {
//插入raw_contacts表,并获取_id属性
Uri uri = Uri.parse("content://icc/adn");
@@ -283,7 +168,6 @@ public class AddWechatContactActivity extends BaseMvvmActivity {
+ private static final String TAG = "AddWechatContactViewModel";
+
@Override
public ActivityAddWechatContactBinding getVDBinding() {
return binding;
@@ -29,41 +46,99 @@ public class AddWechatContactViewModel extends BaseViewModel mBaseResponseMutableLiveData = new MutableLiveData<>();
+ public String avatarFilePath = "";
- public MutableLiveData getBaseResponseMutableLiveData() {
- return mBaseResponseMutableLiveData;
+ private MutableLiveData mAddData = new MutableLiveData<>();
+
+ public MutableLiveData getAddData() {
+ return mAddData;
}
- public void addContact(Map params, MultipartBody.Part body) {
+ private MutableLiveData mContactData = new MutableLiveData<>();
+
+ public MutableLiveData getContactData() {
+ return mContactData;
+ }
+
+ public void checkContact() {
+ String name = binding.etName.getText().toString();
+ String phone = binding.etPhone.getText().toString();
+ String tag = binding.etTag.getText().toString();
+ File avatarFile;
+ Log.e("checkContact", "avatarFilePath: " + avatarFilePath);
+ if (TextUtils.isEmpty(avatarFilePath)) {
+ avatarFile = FileUtil.drawableToFile(getCtx(), R.drawable.default_avatar, "avatar");
+ } else {
+ Uri uri = Uri.parse(avatarFilePath);
+ avatarFile = FileUtil.uriToFile(uri, getCtx());
+ }
+ if (avatarFile == null) {
+ Toaster.showShort("图片加载失败");
+ return;
+ }
+ MediaType mediaType = MediaType.Companion.parse("image/png");
+ RequestBody requestBody = RequestBody.Companion.create(avatarFile, mediaType);
+ MultipartBody.Part body = MultipartBody.Part.createFormData("avatar", avatarFile.getName(), requestBody);
+ Map params = new HashMap<>();
+ params.put("sn", Utils.getSerial());
+ params.put("name", name);
+ params.put("mobile", phone);
+ params.put("tag", tag);
+ params.put("is_urgent", String.valueOf(binding.toggleButton.isToggleOn()));
NetInterfaceManager.getInstance()
.getMailListAddObservable(params, body)
.compose(RxLifecycle.bindUntilEvent(getLifecycle(), ActivityEvent.DESTROY))
.subscribe(new Observer() {
@Override
public void onSubscribe(@NonNull Disposable d) {
- Log.e("addContact", "onSubscribe: ");
+ Log.e("checkContact", "onSubscribe: ");
}
@Override
public void onNext(@NonNull BaseResponse baseResponse) {
- Log.e("addContact", "onNext: " + baseResponse);
- mBaseResponseMutableLiveData.setValue(baseResponse);
+ Log.e("checkContact", "onNext: " + baseResponse);
+ if (baseResponse.code == 200) {
+ Toaster.show("已添加");
+ mAddData.setValue(true);
+ } else {
+ Contact contact = new Contact();
+ ThreadLocalRandom random = ThreadLocalRandom.current();
+ int fakeId = random.nextInt(Integer.MAX_VALUE);
+ Log.e(TAG, "checkContent: fakeId = " + fakeId);
+ contact.setId(fakeId);
+ contact.setMobile(phone);
+ contact.setName(name);
+ contact.setTag(tag);
+ contact.setIs_urgent(binding.toggleButton.isToggleOn());
+ contact.setAvatar(avatarFilePath);
+ mContactData.setValue(contact);
+ Toaster.show(baseResponse.msg);
+ mAddData.setValue(false);
+ }
}
@Override
public void onError(@NonNull Throwable e) {
- Log.e("addContact", "onError: " + e.getMessage());
- BaseResponse baseResponse = new BaseResponse();
- baseResponse.code = 404;
- baseResponse.msg = "网络连接失败";
- mBaseResponseMutableLiveData.setValue(baseResponse);
+ Log.e("checkContact", "onError: " + e.getMessage());
+ Contact contact = new Contact();
+ ThreadLocalRandom random = ThreadLocalRandom.current();
+ int fakeId = random.nextInt(Integer.MAX_VALUE);
+ Log.e(TAG, "checkContent: fakeId = " + fakeId);
+ contact.setId(fakeId);
+ contact.setMobile(phone);
+ contact.setName(name);
+ contact.setTag(tag);
+ contact.setIs_urgent(binding.toggleButton.isToggleOn());
+ contact.setAvatar(avatarFilePath);
+ mContactData.setValue(contact);
+ mAddData.setValue(false);
}
@Override
public void onComplete() {
- Log.e("addContact", "onComplete: ");
+ Log.e("checkContact", "onComplete: ");
}
});
}
+
}
diff --git a/app/src/main/java/com/xxpatx/os/activity/contact/EditContactActivity.java b/app/src/main/java/com/xxpatx/os/activity/contact/EditContactActivity.java
index 7a21d49..0accb69 100644
--- a/app/src/main/java/com/xxpatx/os/activity/contact/EditContactActivity.java
+++ b/app/src/main/java/com/xxpatx/os/activity/contact/EditContactActivity.java
@@ -1,13 +1,8 @@
package com.xxpatx.os.activity.contact;
-import android.content.ContentResolver;
-import android.content.Context;
import android.content.Intent;
-import android.database.Cursor;
import android.graphics.Bitmap;
-import android.graphics.BitmapFactory;
import android.net.Uri;
-import android.provider.MediaStore;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
@@ -26,18 +21,18 @@ import com.luck.picture.lib.basic.PictureSelector;
import com.luck.picture.lib.config.SelectMimeType;
import com.luck.picture.lib.entity.LocalMedia;
import com.luck.picture.lib.interfaces.OnResultCallbackListener;
+import com.xiasuhuei321.loadingdialog.view.LoadingDialog;
import com.xxpatx.os.R;
import com.xxpatx.os.base.GlideEngine;
import com.xxpatx.os.base.mvvm.BaseMvvmActivity;
import com.xxpatx.os.bean.BaseResponse;
import com.xxpatx.os.bean.Contact;
import com.xxpatx.os.databinding.ActivityEditContactBinding;
+import com.xxpatx.os.utils.FileUtil;
import com.xxpatx.os.utils.ScreenUtil;
-import com.xiasuhuei321.loadingdialog.view.LoadingDialog;
import com.xxpatx.os.utils.Utils;
import java.io.File;
-import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
@@ -120,42 +115,13 @@ public class EditContactActivity extends BaseMvvmActivity() {
@Override
public void onResourceReady(@NonNull Bitmap resource, @Nullable Transition super Bitmap> transition) {
- mPictrueFilePath = bitmapToFile(resource, "avatar").getAbsolutePath();
+ mPictrueFilePath = FileUtil.bitmapToFile(EditContactActivity.this, resource, "avatar").getAbsolutePath();
Log.e(TAG, "onResourceReady: " + mPictrueFilePath);
}
});
mViewDataBinding.setContact(mContact);
}
- /**
- * bitmap
- *
- * @param bitmap bitmap
- * @param fileName 转换后的文件名
- * @return
- */
- public File bitmapToFile(Bitmap bitmap, String fileName) {
- String defaultPath = getFilesDir().getAbsolutePath() + "/defaultGoodInfo";
- File file = new File(defaultPath);
- if (!file.exists()) {
- file.mkdirs();
- }
- String defaultImgPath = defaultPath + "/" + fileName;
- file = new File(defaultImgPath);
- try {
- file.createNewFile();
- FileOutputStream fOut = new FileOutputStream(file);
- bitmap.compress(Bitmap.CompressFormat.PNG, 100, fOut);
-// is.close();
- fOut.flush();
- fOut.close();
- } catch (Exception e) {
- e.printStackTrace();
- }
- return file;
- }
-
-
private void openSelector() {
PictureSelector.create(EditContactActivity.this)
.openGallery(SelectMimeType.ofAll())
@@ -200,17 +166,17 @@ public class EditContactActivity extends BaseMvvmActivity params = new HashMap<>();
params.put("sn", Utils.getSerial());
- params.put("id", mContact.getId());
+ params.put("id", String.valueOf(mContact.getId()));
params.put("name", name);
params.put("mobile", phone);
params.put("tag", groupTag);
@@ -219,83 +185,6 @@ public class EditContactActivity extends BaseMvvmActivity {
private static final String TAG = "MainViewModel";
@@ -382,6 +393,63 @@ public class MainViewModel extends BaseViewModel contactList = ContactCacheUtils.getInstance().getDatabaseContact();
+ if (contactList == null || contactList.size() == 0) {
+ Log.e(TAG, "uploadContacts: not found local contacts");
+ } else {
+ for (Contact contact : contactList) {
+ addContact(contact);
+ }
+ }
+ }
+
+ private void addContact(Contact contact) {
+ File avatarFile;
+ if (TextUtils.isEmpty(contact.getAvatar())) {
+ avatarFile = FileUtil.drawableToFile(getCtx(), R.drawable.default_avatar, "avatar");
+ } else {
+ Uri uri = Uri.parse(contact.getAvatar());
+ avatarFile = FileUtil.uriToFile(uri, getCtx());
+ }
+ MediaType mediaType = MediaType.Companion.parse("image/png");
+ RequestBody requestBody = RequestBody.Companion.create(avatarFile, mediaType);
+ MultipartBody.Part body = MultipartBody.Part.createFormData("avatar", avatarFile.getName(), requestBody);
+ Map params = new HashMap<>();
+ params.put("sn", Utils.getSerial());
+ params.put("name", contact.getName());
+ params.put("mobile", contact.getMobile());
+ params.put("tag", contact.getTag());
+ params.put("is_urgent", String.valueOf(contact.getIs_urgent()));
+ NetInterfaceManager.getInstance()
+ .getMailListAddObservable(params, body)
+ .compose(RxLifecycle.bindUntilEvent(getLifecycle(), ActivityEvent.DESTROY))
+ .subscribe(new Observer() {
+ @Override
+ public void onSubscribe(@NonNull Disposable d) {
+ Log.e("addContact", "onSubscribe: ");
+ }
+
+ @Override
+ public void onNext(@NonNull BaseResponse baseResponse) {
+ Log.e("addContact", "onNext: " + baseResponse);
+ if (baseResponse.code == 200 || baseResponse.code == -200) {
+ ContactCacheUtils.getInstance().deleteContact(contact.getId());
+ }
+ }
+
+ @Override
+ public void onError(@NonNull Throwable e) {
+ Log.e("addContact", "onError: " + e.getMessage());
+ }
+
+ @Override
+ public void onComplete() {
+ Log.e("addContact", "onComplete: ");
+ }
+ });
+ }
+
@Deprecated
public void sendAPPUsage() {
AppUsedTimeUtils.getInstance().setEndTime(System.currentTimeMillis());
diff --git a/app/src/main/java/com/xxpatx/os/activity/noti/NoticeInfoActivity.java b/app/src/main/java/com/xxpatx/os/activity/noti/NoticeInfoActivity.java
index 7224739..5886414 100644
--- a/app/src/main/java/com/xxpatx/os/activity/noti/NoticeInfoActivity.java
+++ b/app/src/main/java/com/xxpatx/os/activity/noti/NoticeInfoActivity.java
@@ -102,7 +102,11 @@ public class NoticeInfoActivity extends BaseMvvmActivity {
@Override
public holder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
mContext = (FragmentActivity) parent.getContext();
- return new AlarmAdapter.holder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_alarm_clock, parent, false));
+ return new AlarmAdapter.holder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_alarm_port, parent, false));
}
@Override
@@ -104,6 +105,28 @@ public class AlarmAdapter extends RecyclerView.Adapter {
} else {
holder.tv_title.setText(title);
}
+ int is_onoff = alarmClockData.getIs_onoff();
+ holder.toggleButton2.setDisable(true);
+ if (is_onoff == 1) {
+ holder.tv_status.setText("已开启");
+ holder.toggleButton2.setToggleOn(false);
+ } else {
+ holder.tv_status.setText("已关闭");
+ holder.toggleButton2.setToggleOff(false);
+ }
+ int type = alarmClockData.getClazz();
+ switch (type){
+ case 1:
+ default:
+ holder.iv_type.setImageDrawable(mContext.getDrawable(R.drawable.icon_alarm_medicine_pressed));
+ break;
+ case 2:
+ holder.iv_type.setImageDrawable(mContext.getDrawable(R.drawable.icon_alarm_look_pressed));
+ break;
+ case 3:
+ holder.iv_type.setImageDrawable(mContext.getDrawable(R.drawable.icon_alarm_reserve_pressed));
+ break;
+ }
String voice = alarmClockData.getVoice();
if (TextUtils.isEmpty(voice)) {
holder.cl_voice.setVisibility(View.GONE);
@@ -218,7 +241,7 @@ public class AlarmAdapter extends RecyclerView.Adapter {
holder.root.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
- Intent intent = new Intent(mContext, AlarmClockEditActivity.class);
+ Intent intent = new Intent(mContext, AlarmEditActivity.class);
intent.putExtra("id", alarmClockData.getId());
mContext.startActivity(intent);
}
@@ -241,10 +264,11 @@ public class AlarmAdapter extends RecyclerView.Adapter {
}
class holder extends RecyclerView.ViewHolder {
- TextView tv_time, tv_remind_type, tv_title, tv_voice;
+ TextView tv_time, tv_remind_type, tv_title, tv_voice, tv_status;
ConstraintLayout cl_voice, cl_vp, root;
JzvdStdRound jz_video;
- ImageView imageView;
+ ImageView imageView,iv_type;
+ ToggleButton toggleButton2;
public holder(@NonNull View itemView) {
super(itemView);
@@ -257,7 +281,9 @@ public class AlarmAdapter extends RecyclerView.Adapter {
root = itemView.findViewById(R.id.root);
jz_video = itemView.findViewById(R.id.jz_video);
imageView = itemView.findViewById(R.id.imageView);
+ iv_type = itemView.findViewById(R.id.iv_type);
+ tv_status = itemView.findViewById(R.id.tv_status);
+ toggleButton2 = itemView.findViewById(R.id.toggleButton2);
}
}
}
-
diff --git a/app/src/main/java/com/xxpatx/os/alarm/AlarmOpenHelper.java b/app/src/main/java/com/xxpatx/os/alarm/AlarmOpenHelper.java
index f1a39ce..2fc4909 100644
--- a/app/src/main/java/com/xxpatx/os/alarm/AlarmOpenHelper.java
+++ b/app/src/main/java/com/xxpatx/os/alarm/AlarmOpenHelper.java
@@ -6,10 +6,8 @@ import android.database.sqlite.SQLiteOpenHelper;
public class AlarmOpenHelper extends SQLiteOpenHelper {
- public static final int DATABASE_VERSION = 2;
+ public static final int DATABASE_VERSION = 3;
public static final String DATABASE_NAME = "AlarmDatabase.db";
- // public static final String DATABASE_FILE_NAME = Environment.getExternalStorageDirectory().getPath() + File.separator + DATABASE_NAME;
- public static final String DATABASE_FILE_NAME = DATABASE_NAME;
public static final String TABLE_ALARM = " AlarmTable";
@@ -23,6 +21,7 @@ public class AlarmOpenHelper extends SQLiteOpenHelper {
public static final String KEY_FILE_MD5 = "file_md5";
public static final String KEY_REMIND_TYPE = "remind_type";
public static final String KEY_IS_ONOFF = "is_onoff";
+ public static final String KEY_CLAZZ = "clazz";
public static final String KEY_FINISHED = "finished";
public static final String KEY_IS_LOCAL = "is_local";
@@ -42,6 +41,7 @@ public class AlarmOpenHelper extends SQLiteOpenHelper {
+ KEY_FILE_MD5 + " TEXT,"
+ KEY_REMIND_TYPE + " INTEGER,"
+ KEY_IS_ONOFF + " INTEGER,"
+ + KEY_CLAZZ + " INTEGER,"
+ KEY_FINISHED + " BOOLEAN DEFAULT 0,"
+ KEY_IS_LOCAL + " BOOLEAN DEFAULT 0,"
@@ -64,12 +64,15 @@ public class AlarmOpenHelper extends SQLiteOpenHelper {
case 1:
db.execSQL(CREATE_ALARM_TABLE); // 执行修改表,添加字段的逻辑。
case 2:
- String sql = "ALTER TABLE " + TABLE_ALARM + " ADD COLUMN " + KEY_EDITED + " BOOLEAN DEFAULT 0";
+ String sql = "ALTER TABLE " + TABLE_ALARM + " ADD COLUMN " + KEY_EDITED + " BOOLEAN DEFAULT 0";
db.execSQL(sql);
- String sql2 = "ALTER TABLE " + TABLE_ALARM + " ADD COLUMN " + KEY_DELETED + " BOOLEAN DEFAULT 0";
+ String sql2 = "ALTER TABLE " + TABLE_ALARM + " ADD COLUMN " + KEY_DELETED + " BOOLEAN DEFAULT 0";
db.execSQL(sql2);
- String sql3 = "ALTER TABLE " + TABLE_ALARM + " ADD COLUMN " + KEY_FILE_MD5 + " TEXT";
+ String sql3 = "ALTER TABLE " + TABLE_ALARM + " ADD COLUMN " + KEY_FILE_MD5 + " TEXT";
db.execSQL(sql3);
+ case 3:
+ String sql4 = "ALTER TABLE " + TABLE_ALARM + " ADD COLUMN " + KEY_CLAZZ + " INTEGER";
+ db.execSQL(sql4);
}
}
}
diff --git a/app/src/main/java/com/xxpatx/os/alarm/AlarmUtils.java b/app/src/main/java/com/xxpatx/os/alarm/AlarmUtils.java
index 4e6d825..a46a39e 100644
--- a/app/src/main/java/com/xxpatx/os/alarm/AlarmUtils.java
+++ b/app/src/main/java/com/xxpatx/os/alarm/AlarmUtils.java
@@ -8,11 +8,13 @@ import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
+import android.os.Environment;
import android.text.TextUtils;
import android.util.Log;
import com.arialyy.aria.core.Aria;
import com.blankj.utilcode.util.FileUtils;
+import com.xxpatx.os.BuildConfig;
import com.xxpatx.os.service.main.MainService;
import com.xxpatx.os.utils.FileUtil;
import com.xxpatx.os.utils.Utils;
@@ -55,13 +57,20 @@ public class AlarmUtils {
public static final int OFF_DAY = 4;
private AlarmUtils(Context context) {
- this.mContext = context;
+ this.mContext = context.getApplicationContext();
// this.mAlarmOpenHelper = new AlarmOpenHelper(context, AlarmOpenHelper.DATABASE_NAME, null, AlarmOpenHelper.DATABASE_VERSION);
- this.mAlarmOpenHelper = new AlarmOpenHelper(context,
- context.getExternalCacheDir() + File.separator + AlarmOpenHelper.DATABASE_FILE_NAME,
- null, AlarmOpenHelper.DATABASE_VERSION);
+ if (BuildConfig.DEBUG) {
+ this.mAlarmOpenHelper = new AlarmOpenHelper(context,
+ Environment.getExternalStorageDirectory() + File.separator + AlarmOpenHelper.DATABASE_NAME,
+ null, AlarmOpenHelper.DATABASE_VERSION);
+ } else {
+ this.mAlarmOpenHelper = new AlarmOpenHelper(context,
+ context.getExternalCacheDir() + File.separator + AlarmOpenHelper.DATABASE_NAME,
+ null, AlarmOpenHelper.DATABASE_VERSION);
+ }
this.mDatabase = mAlarmOpenHelper.getWritableDatabase();
this.mAlarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
+ pendingIntents = getOldPendingIntentsSet();
}
public static void init(Context context) {
@@ -98,6 +107,7 @@ public class AlarmUtils {
values.put(AlarmOpenHelper.KEY_FILE_MD5, alarmClockData.getFile_md5());
values.put(AlarmOpenHelper.KEY_REMIND_TYPE, alarmClockData.getRemind_type());
values.put(AlarmOpenHelper.KEY_IS_ONOFF, alarmClockData.getIs_onoff());
+ values.put(AlarmOpenHelper.KEY_CLAZZ, alarmClockData.getClazz());
values.put(AlarmOpenHelper.KEY_FINISHED, alarmClockData.isFinished());
values.put(AlarmOpenHelper.KEY_IS_LOCAL, alarmClockData.isIs_local());
@@ -113,7 +123,6 @@ public class AlarmUtils {
* @return
*/
public boolean addAlarmClock(AlarmClockData alarmClockData) {
- openDatabase();
ContentValues values = getValuesFromAlarmClock(alarmClockData);
long id = 0;
mDatabase.beginTransaction();
@@ -129,6 +138,27 @@ public class AlarmUtils {
return id > 0;
}
+ /**
+ * 增加数据
+ *
+ * @param alarmClockData
+ * @return
+ */
+ public boolean addLocalAlarmClock(AlarmClockData alarmClockData) {
+ ContentValues values = getValuesFromAlarmClock(alarmClockData);
+ long id = 0;
+ mDatabase.beginTransaction();
+ try {
+ id = mDatabase.insertWithOnConflict(AlarmOpenHelper.TABLE_ALARM, null, values, SQLiteDatabase.CONFLICT_REPLACE);
+ mDatabase.setTransactionSuccessful();
+ } catch (Exception e) {
+ Log.e(TAG, "addLocalAlarmClock: " + e.getMessage());
+ } finally {
+ mDatabase.endTransaction();
+ }
+ return id > 0;
+ }
+
/**
* 更新数据
@@ -137,7 +167,6 @@ public class AlarmUtils {
* @return
*/
public boolean updateAlarmClock(AlarmClockData alarmClockData) {
- openDatabase();
AlarmClockData old = getDatabaseSingleAlarm(alarmClockData);
if (old != null) {
PendingIntent pendingIntent = getPendingIntent(old);
@@ -161,7 +190,6 @@ public class AlarmUtils {
}
public boolean updateAlarmClock(AlarmClockData alarmClockData, int newId) {
- openDatabase();
int oldId = alarmClockData.getId();
AlarmClockData old = getDatabaseSingleAlarm(alarmClockData);
if (old != null) {
@@ -193,7 +221,6 @@ public class AlarmUtils {
* @param list
*/
public void insertAlarmClockList(List list) {
- openDatabase();
List contentValuesList = new ArrayList<>();
for (AlarmClockData alarmClockData : list) {
ContentValues values = getValuesFromAlarmClock(alarmClockData);
@@ -230,7 +257,6 @@ public class AlarmUtils {
}
public boolean deleteAlarmClock(int RowID) {
- openDatabase();
long id = 0;
mDatabase.beginTransaction();
try {
@@ -248,6 +274,7 @@ public class AlarmUtils {
* 删除所有闹钟
*/
public void deleteAllAlarmClock() {
+ Log.e(TAG, "deleteAllAlarmClock: ");
HashSet pendingIntents = getOldPendingIntentsSet();
Iterator pendingIntentIterator = pendingIntents.iterator();
while (pendingIntentIterator.hasNext()) {
@@ -257,6 +284,10 @@ public class AlarmUtils {
}
List alarmClockData = getDatabaseAlarms();
for (AlarmClockData data : alarmClockData) {
+ Log.e(TAG, "deleteAllAlarmClock: id = " + data);
+ if (data.isIs_local()) {
+ continue;
+ }
deleteAlarmClock(data.getId());
}
}
@@ -267,27 +298,28 @@ public class AlarmUtils {
* @return
*/
public List getDatabaseAlarms() {
- openDatabase();
List list = new ArrayList<>();
String selectQuery = "SELECT * FROM " + AlarmOpenHelper.TABLE_ALARM;
Cursor cursor = mDatabase.rawQuery(selectQuery, null);
if (cursor.moveToFirst()) {
do {
AlarmClockData alarmClockData = new AlarmClockData();
- alarmClockData.setId(Integer.parseInt(cursor.getString(0)));
- alarmClockData.setType(cursor.getInt(1));
- alarmClockData.setTime(cursor.getString(2));
- alarmClockData.setTitle(cursor.getString(3));
- alarmClockData.setVoice(cursor.getString(4));
- alarmClockData.setVoice_md5(cursor.getString(5));
- alarmClockData.setFile(cursor.getString(6));
- alarmClockData.setFile_md5(cursor.getString(7));
- alarmClockData.setRemind_type(cursor.getInt(8));
- alarmClockData.setIs_onoff(cursor.getInt(9));
- alarmClockData.setFinished(cursor.getInt(10) == 1);
- alarmClockData.setIs_local(cursor.getInt(11) == 1);
- alarmClockData.setEdited(cursor.getInt(12) == 1);
- alarmClockData.setDeleted(cursor.getInt(13) == 1);
+ alarmClockData.setId(cursor.getInt(cursor.getColumnIndex(AlarmOpenHelper.KEY_ID)));
+ alarmClockData.setType(cursor.getInt(cursor.getColumnIndex(AlarmOpenHelper.KEY_TYPE)));
+ alarmClockData.setTime(cursor.getString(cursor.getColumnIndex(AlarmOpenHelper.KEY_TIME)));
+ alarmClockData.setTitle(cursor.getString(cursor.getColumnIndex(AlarmOpenHelper.KEY_TITLE)));
+ alarmClockData.setVoice(cursor.getString(cursor.getColumnIndex(AlarmOpenHelper.KEY_VOICE)));
+ alarmClockData.setVoice_md5(cursor.getString(cursor.getColumnIndex(AlarmOpenHelper.KEY_VOICE_MD5)));
+ alarmClockData.setFile(cursor.getString(cursor.getColumnIndex(AlarmOpenHelper.KEY_FILE)));
+ alarmClockData.setFile_md5(cursor.getString(cursor.getColumnIndex(AlarmOpenHelper.KEY_FILE_MD5)));
+ alarmClockData.setRemind_type(cursor.getInt(cursor.getColumnIndex(AlarmOpenHelper.KEY_REMIND_TYPE)));
+ alarmClockData.setIs_onoff(cursor.getInt(cursor.getColumnIndex(AlarmOpenHelper.KEY_IS_ONOFF)));
+ alarmClockData.setClazz(cursor.getInt(cursor.getColumnIndex(AlarmOpenHelper.KEY_CLAZZ)));
+
+ alarmClockData.setFinished(cursor.getInt(cursor.getColumnIndex(AlarmOpenHelper.KEY_FINISHED)) == 1);
+ alarmClockData.setIs_local(cursor.getInt(cursor.getColumnIndex(AlarmOpenHelper.KEY_IS_LOCAL)) == 1);
+ alarmClockData.setEdited(cursor.getInt(cursor.getColumnIndex(AlarmOpenHelper.KEY_EDITED)) == 1);
+ alarmClockData.setDeleted(cursor.getInt(cursor.getColumnIndex(AlarmOpenHelper.KEY_DELETED)) == 1);
list.add(alarmClockData);
} while (cursor.moveToNext());
}
@@ -299,27 +331,28 @@ public class AlarmUtils {
* @return 获取单个闹钟
*/
public AlarmClockData getDatabaseSingleAlarm(AlarmClockData data) {
- openDatabase();
List list = new ArrayList<>();
String selectQuery = "SELECT * FROM " + AlarmOpenHelper.TABLE_ALARM + " where id =" + data.getId();
Cursor cursor = mDatabase.rawQuery(selectQuery, null);
if (cursor.moveToFirst()) {
do {
AlarmClockData alarmClockData = new AlarmClockData();
- alarmClockData.setId(Integer.parseInt(cursor.getString(0)));
- alarmClockData.setType(cursor.getInt(1));
- alarmClockData.setTime(cursor.getString(2));
- alarmClockData.setTitle(cursor.getString(3));
- alarmClockData.setVoice(cursor.getString(4));
- alarmClockData.setVoice_md5(cursor.getString(5));
- alarmClockData.setFile(cursor.getString(6));
- alarmClockData.setFile_md5(cursor.getString(7));
- alarmClockData.setRemind_type(cursor.getInt(8));
- alarmClockData.setIs_onoff(cursor.getInt(9));
- alarmClockData.setFinished(cursor.getInt(10) == 1);
- alarmClockData.setIs_local(cursor.getInt(11) == 1);
- alarmClockData.setEdited(cursor.getInt(12) == 1);
- alarmClockData.setDeleted(cursor.getInt(13) == 1);
+ alarmClockData.setId(cursor.getInt(cursor.getColumnIndex(AlarmOpenHelper.KEY_ID)));
+ alarmClockData.setType(cursor.getInt(cursor.getColumnIndex(AlarmOpenHelper.KEY_TYPE)));
+ alarmClockData.setTime(cursor.getString(cursor.getColumnIndex(AlarmOpenHelper.KEY_TIME)));
+ alarmClockData.setTitle(cursor.getString(cursor.getColumnIndex(AlarmOpenHelper.KEY_TITLE)));
+ alarmClockData.setVoice(cursor.getString(cursor.getColumnIndex(AlarmOpenHelper.KEY_VOICE)));
+ alarmClockData.setVoice_md5(cursor.getString(cursor.getColumnIndex(AlarmOpenHelper.KEY_VOICE_MD5)));
+ alarmClockData.setFile(cursor.getString(cursor.getColumnIndex(AlarmOpenHelper.KEY_FILE)));
+ alarmClockData.setFile_md5(cursor.getString(cursor.getColumnIndex(AlarmOpenHelper.KEY_FILE_MD5)));
+ alarmClockData.setRemind_type(cursor.getInt(cursor.getColumnIndex(AlarmOpenHelper.KEY_REMIND_TYPE)));
+ alarmClockData.setIs_onoff(cursor.getInt(cursor.getColumnIndex(AlarmOpenHelper.KEY_IS_ONOFF)));
+ alarmClockData.setClazz(cursor.getInt(cursor.getColumnIndex(AlarmOpenHelper.KEY_CLAZZ)));
+
+ alarmClockData.setFinished(cursor.getInt(cursor.getColumnIndex(AlarmOpenHelper.KEY_FINISHED)) == 1);
+ alarmClockData.setIs_local(cursor.getInt(cursor.getColumnIndex(AlarmOpenHelper.KEY_IS_LOCAL)) == 1);
+ alarmClockData.setEdited(cursor.getInt(cursor.getColumnIndex(AlarmOpenHelper.KEY_EDITED)) == 1);
+ alarmClockData.setDeleted(cursor.getInt(cursor.getColumnIndex(AlarmOpenHelper.KEY_DELETED)) == 1);
list.add(alarmClockData);
} while (cursor.moveToNext());
}
@@ -328,27 +361,28 @@ public class AlarmUtils {
}
public AlarmClockData getDatabaseSingleAlarm(int id) {
- openDatabase();
List list = new ArrayList<>();
String selectQuery = "SELECT * FROM " + AlarmOpenHelper.TABLE_ALARM + " where id =" + id;
Cursor cursor = mDatabase.rawQuery(selectQuery, null);
if (cursor.moveToFirst()) {
do {
AlarmClockData alarmClockData = new AlarmClockData();
- alarmClockData.setId(Integer.parseInt(cursor.getString(0)));
- alarmClockData.setType(cursor.getInt(1));
- alarmClockData.setTime(cursor.getString(2));
- alarmClockData.setTitle(cursor.getString(3));
- alarmClockData.setVoice(cursor.getString(4));
- alarmClockData.setVoice_md5(cursor.getString(5));
- alarmClockData.setFile(cursor.getString(6));
- alarmClockData.setFile_md5(cursor.getString(7));
- alarmClockData.setRemind_type(cursor.getInt(8));
- alarmClockData.setIs_onoff(cursor.getInt(9));
- alarmClockData.setFinished(cursor.getInt(10) == 1);
- alarmClockData.setIs_local(cursor.getInt(11) == 1);
- alarmClockData.setEdited(cursor.getInt(12) == 1);
- alarmClockData.setDeleted(cursor.getInt(13) == 1);
+ alarmClockData.setId(cursor.getInt(cursor.getColumnIndex(AlarmOpenHelper.KEY_ID)));
+ alarmClockData.setType(cursor.getInt(cursor.getColumnIndex(AlarmOpenHelper.KEY_TYPE)));
+ alarmClockData.setTime(cursor.getString(cursor.getColumnIndex(AlarmOpenHelper.KEY_TIME)));
+ alarmClockData.setTitle(cursor.getString(cursor.getColumnIndex(AlarmOpenHelper.KEY_TITLE)));
+ alarmClockData.setVoice(cursor.getString(cursor.getColumnIndex(AlarmOpenHelper.KEY_VOICE)));
+ alarmClockData.setVoice_md5(cursor.getString(cursor.getColumnIndex(AlarmOpenHelper.KEY_VOICE_MD5)));
+ alarmClockData.setFile(cursor.getString(cursor.getColumnIndex(AlarmOpenHelper.KEY_FILE)));
+ alarmClockData.setFile_md5(cursor.getString(cursor.getColumnIndex(AlarmOpenHelper.KEY_FILE_MD5)));
+ alarmClockData.setRemind_type(cursor.getInt(cursor.getColumnIndex(AlarmOpenHelper.KEY_REMIND_TYPE)));
+ alarmClockData.setIs_onoff(cursor.getInt(cursor.getColumnIndex(AlarmOpenHelper.KEY_IS_ONOFF)));
+ alarmClockData.setClazz(cursor.getInt(cursor.getColumnIndex(AlarmOpenHelper.KEY_CLAZZ)));
+
+ alarmClockData.setFinished(cursor.getInt(cursor.getColumnIndex(AlarmOpenHelper.KEY_FINISHED)) == 1);
+ alarmClockData.setIs_local(cursor.getInt(cursor.getColumnIndex(AlarmOpenHelper.KEY_IS_LOCAL)) == 1);
+ alarmClockData.setEdited(cursor.getInt(cursor.getColumnIndex(AlarmOpenHelper.KEY_EDITED)) == 1);
+ alarmClockData.setDeleted(cursor.getInt(cursor.getColumnIndex(AlarmOpenHelper.KEY_DELETED)) == 1);
list.add(alarmClockData);
} while (cursor.moveToNext());
}
@@ -357,27 +391,28 @@ public class AlarmUtils {
}
public List getDeletedAlarm() {
- openDatabase();
List list = new ArrayList<>();
String selectQuery = "SELECT * FROM " + AlarmOpenHelper.TABLE_ALARM + " where deleted = 1";
Cursor cursor = mDatabase.rawQuery(selectQuery, null);
if (cursor.moveToFirst()) {
do {
AlarmClockData alarmClockData = new AlarmClockData();
- alarmClockData.setId(Integer.parseInt(cursor.getString(0)));
- alarmClockData.setType(cursor.getInt(1));
- alarmClockData.setTime(cursor.getString(2));
- alarmClockData.setTitle(cursor.getString(3));
- alarmClockData.setVoice(cursor.getString(4));
- alarmClockData.setVoice_md5(cursor.getString(5));
- alarmClockData.setFile(cursor.getString(6));
- alarmClockData.setFile_md5(cursor.getString(7));
- alarmClockData.setRemind_type(cursor.getInt(8));
- alarmClockData.setIs_onoff(cursor.getInt(9));
- alarmClockData.setFinished(cursor.getInt(10) == 1);
- alarmClockData.setIs_local(cursor.getInt(11) == 1);
- alarmClockData.setEdited(cursor.getInt(12) == 1);
- alarmClockData.setDeleted(cursor.getInt(13) == 1);
+ alarmClockData.setId(cursor.getInt(cursor.getColumnIndex(AlarmOpenHelper.KEY_ID)));
+ alarmClockData.setType(cursor.getInt(cursor.getColumnIndex(AlarmOpenHelper.KEY_TYPE)));
+ alarmClockData.setTime(cursor.getString(cursor.getColumnIndex(AlarmOpenHelper.KEY_TIME)));
+ alarmClockData.setTitle(cursor.getString(cursor.getColumnIndex(AlarmOpenHelper.KEY_TITLE)));
+ alarmClockData.setVoice(cursor.getString(cursor.getColumnIndex(AlarmOpenHelper.KEY_VOICE)));
+ alarmClockData.setVoice_md5(cursor.getString(cursor.getColumnIndex(AlarmOpenHelper.KEY_VOICE_MD5)));
+ alarmClockData.setFile(cursor.getString(cursor.getColumnIndex(AlarmOpenHelper.KEY_FILE)));
+ alarmClockData.setFile_md5(cursor.getString(cursor.getColumnIndex(AlarmOpenHelper.KEY_FILE_MD5)));
+ alarmClockData.setRemind_type(cursor.getInt(cursor.getColumnIndex(AlarmOpenHelper.KEY_REMIND_TYPE)));
+ alarmClockData.setIs_onoff(cursor.getInt(cursor.getColumnIndex(AlarmOpenHelper.KEY_IS_ONOFF)));
+ alarmClockData.setClazz(cursor.getInt(cursor.getColumnIndex(AlarmOpenHelper.KEY_CLAZZ)));
+
+ alarmClockData.setFinished(cursor.getInt(cursor.getColumnIndex(AlarmOpenHelper.KEY_FINISHED)) == 1);
+ alarmClockData.setIs_local(cursor.getInt(cursor.getColumnIndex(AlarmOpenHelper.KEY_IS_LOCAL)) == 1);
+ alarmClockData.setEdited(cursor.getInt(cursor.getColumnIndex(AlarmOpenHelper.KEY_EDITED)) == 1);
+ alarmClockData.setDeleted(cursor.getInt(cursor.getColumnIndex(AlarmOpenHelper.KEY_DELETED)) == 1);
list.add(alarmClockData);
} while (cursor.moveToNext());
}
@@ -386,27 +421,28 @@ public class AlarmUtils {
}
public List getLocalAddAlarm() {
- openDatabase();
List list = new ArrayList<>();
String selectQuery = "SELECT * FROM " + AlarmOpenHelper.TABLE_ALARM + " where is_local = 1";
Cursor cursor = mDatabase.rawQuery(selectQuery, null);
if (cursor.moveToFirst()) {
do {
AlarmClockData alarmClockData = new AlarmClockData();
- alarmClockData.setId(Integer.parseInt(cursor.getString(0)));
- alarmClockData.setType(cursor.getInt(1));
- alarmClockData.setTime(cursor.getString(2));
- alarmClockData.setTitle(cursor.getString(3));
- alarmClockData.setVoice(cursor.getString(4));
- alarmClockData.setVoice_md5(cursor.getString(5));
- alarmClockData.setFile(cursor.getString(6));
- alarmClockData.setFile_md5(cursor.getString(7));
- alarmClockData.setRemind_type(cursor.getInt(8));
- alarmClockData.setIs_onoff(cursor.getInt(9));
- alarmClockData.setFinished(cursor.getInt(10) == 1);
- alarmClockData.setIs_local(cursor.getInt(11) == 1);
- alarmClockData.setEdited(cursor.getInt(12) == 1);
- alarmClockData.setDeleted(cursor.getInt(13) == 1);
+ alarmClockData.setId(cursor.getInt(cursor.getColumnIndex(AlarmOpenHelper.KEY_ID)));
+ alarmClockData.setType(cursor.getInt(cursor.getColumnIndex(AlarmOpenHelper.KEY_TYPE)));
+ alarmClockData.setTime(cursor.getString(cursor.getColumnIndex(AlarmOpenHelper.KEY_TIME)));
+ alarmClockData.setTitle(cursor.getString(cursor.getColumnIndex(AlarmOpenHelper.KEY_TITLE)));
+ alarmClockData.setVoice(cursor.getString(cursor.getColumnIndex(AlarmOpenHelper.KEY_VOICE)));
+ alarmClockData.setVoice_md5(cursor.getString(cursor.getColumnIndex(AlarmOpenHelper.KEY_VOICE_MD5)));
+ alarmClockData.setFile(cursor.getString(cursor.getColumnIndex(AlarmOpenHelper.KEY_FILE)));
+ alarmClockData.setFile_md5(cursor.getString(cursor.getColumnIndex(AlarmOpenHelper.KEY_FILE_MD5)));
+ alarmClockData.setRemind_type(cursor.getInt(cursor.getColumnIndex(AlarmOpenHelper.KEY_REMIND_TYPE)));
+ alarmClockData.setIs_onoff(cursor.getInt(cursor.getColumnIndex(AlarmOpenHelper.KEY_IS_ONOFF)));
+ alarmClockData.setClazz(cursor.getInt(cursor.getColumnIndex(AlarmOpenHelper.KEY_CLAZZ)));
+
+ alarmClockData.setFinished(cursor.getInt(cursor.getColumnIndex(AlarmOpenHelper.KEY_FINISHED)) == 1);
+ alarmClockData.setIs_local(cursor.getInt(cursor.getColumnIndex(AlarmOpenHelper.KEY_IS_LOCAL)) == 1);
+ alarmClockData.setEdited(cursor.getInt(cursor.getColumnIndex(AlarmOpenHelper.KEY_EDITED)) == 1);
+ alarmClockData.setDeleted(cursor.getInt(cursor.getColumnIndex(AlarmOpenHelper.KEY_DELETED)) == 1);
list.add(alarmClockData);
} while (cursor.moveToNext());
}
@@ -421,6 +457,7 @@ public class AlarmUtils {
* @param data
*/
public void setAlarmClockData(List data) {
+ Log.e(TAG, "setAlarmClockData: ");
if (pendingIntents == null) {
pendingIntents = getOldPendingIntentsSet();
}
@@ -473,12 +510,15 @@ public class AlarmUtils {
List deleteData = new ArrayList<>();
for (Map.Entry entry : oldData.entrySet()) {
if (alarmClockDataMap.get(entry.getKey()) == null) {
- deleteData.add(entry.getValue());
+ AlarmClockData alarmClockData = entry.getValue();
+ if (!alarmClockData.isIs_local()) {
+ deleteData.add(alarmClockData);
+ }
}
}
for (AlarmClockData alarmClockData : deleteData) {
if (alarmClockData.isIs_local() || alarmClockData.deleted) {
- Log.e(TAG, "mergeData: skip " + alarmClockData.getId());
+ Log.e(TAG, "mergeData: skip id = " + alarmClockData.getId());
continue;
}
deleteAlarmClock(alarmClockData);
@@ -503,6 +543,18 @@ public class AlarmUtils {
return newData;
}
+ /**
+ * 更新完成状态
+ *
+ * @param mId 闹钟id
+ * @return
+ */
+ public boolean updateAlarmFinished(int mId) {
+ AlarmClockData alarmClockData = getDatabaseSingleAlarm(mId);
+ alarmClockData.setFinished(true);
+ return updateAlarmFinished(alarmClockData);
+ }
+
/**
* 更新完成状态
*
@@ -510,7 +562,6 @@ public class AlarmUtils {
* @return
*/
public boolean updateAlarmFinished(AlarmClockData alarmClockData) {
- openDatabase();
ContentValues values = getValuesFromAlarmClock(alarmClockData);
long id = 0;
mDatabase.beginTransaction();
@@ -531,6 +582,7 @@ public class AlarmUtils {
if (dataBaseAlarms != null && dataBaseAlarms.size() != 0) {
alarmClockData.addAll(dataBaseAlarms);
}
+ Log.e(TAG, "getOldData: " + alarmClockData);
return alarmClockData;
}
@@ -570,10 +622,13 @@ public class AlarmUtils {
}
private HashSet getOldPendingIntentsSet() {
+ Log.e(TAG, "getOldPendingIntentsSet: ");
HashSet pendingIntents = new HashSet<>();
HashMap data = getOldDataMap();
for (AlarmClockData alarmClockData : data.values()) {
- pendingIntents.add(getPendingIntent(alarmClockData));
+ if (!alarmClockData.isIs_local()) {
+ pendingIntents.add(getPendingIntent(alarmClockData));
+ }
}
return pendingIntents;
}
@@ -585,6 +640,7 @@ public class AlarmUtils {
* @return
*/
private PendingIntent getPendingIntent(AlarmClockData alarmClock) {
+ Log.e(TAG, "getPendingIntent: ");
Intent intent = new Intent(MainService.ALARMWAKEUP);
intent.putExtra("title", alarmClock.getTitle());
intent.putExtra("id", alarmClock.getId());
@@ -647,22 +703,22 @@ public class AlarmUtils {
int type = alarm.getType();
String timeString = alarm.getTime();
String title = alarm.getTitle();
- Log.e(TAG, "setAlarm: " + title);
+ Log.e(TAG, "setAlarm: title = " + title);
+ Log.e(TAG, "setAlarm: id = " + id);
long timeStamp = getTimestamp(timeString);
- Log.e(TAG, "setAlarm: " + timeStamp);
+ Log.e(TAG, "setAlarm: timeStamp = " + timeStamp);
boolean finished = alarm.isFinished();
String voiceUrl = alarm.getVoice();
String voiceMd5 = alarm.getVoice_md5();
if (!TextUtils.isEmpty(voiceUrl)) {
- if (!FileUtil.isLocalPath(voiceUrl))
- ariaDownload(voiceUrl, voiceMd5);
+ ariaDownload(voiceUrl, voiceMd5);
}
String fileUrl = alarm.getFile();
String fileMd5 = alarm.getFile_md5();
if (!TextUtils.isEmpty(fileUrl)) {
- if (!FileUtil.isLocalPath(fileUrl))
- ariaDownload(fileUrl, fileMd5);
+ ariaDownload(fileUrl, fileMd5);
}
+ boolean local = alarm.is_local;
switch (type) {
case ONCE:
if (!finished) {
@@ -672,18 +728,18 @@ public class AlarmUtils {
intent.putExtra("id", id);
mContext.sendBroadcast(intent);
} else {
- setOnceAlarm(MainService.ALARMWAKEUP, title, id, timeStamp);
+ setOnceAlarm(MainService.ALARMWAKEUP, title, id, timeStamp, local);
}
}
break;
case LOOP:
- setDayLoopAlarm(MainService.ALARMWAKEUP, title, id, timeString);
+ setDayLoopAlarm(MainService.ALARMWAKEUP, title, id, timeString, local);
break;
case WORKING_DAY:
- setWorkDayAlarm(MainService.ALARMWAKEUP, title, id, timeString);
+ setWorkDayAlarm(MainService.ALARMWAKEUP, title, id, timeString, local);
break;
case OFF_DAY:
- setOffDayAlarm(MainService.ALARMWAKEUP, title, id, timeString);
+ setOffDayAlarm(MainService.ALARMWAKEUP, title, id, timeString, local);
break;
default:
}
@@ -694,12 +750,14 @@ public class AlarmUtils {
* @param requestCode
* @param timestamp 设置一次性闹钟
*/
- public void setOnceAlarm(String action, String extra, int requestCode, long timestamp) {
+ public void setOnceAlarm(String action, String extra, int requestCode, long timestamp, boolean local) {
Intent intent = new Intent(action);
intent.putExtra("title", extra);
intent.putExtra("id", requestCode);
PendingIntent startPendingIntent = PendingIntent.getBroadcast(mContext, requestCode, intent, PendingIntent.FLAG_CANCEL_CURRENT);
- pendingIntents.add(startPendingIntent);
+ if (!local) {
+ pendingIntents.add(startPendingIntent);
+ }
mAlarmManager.setAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, timestamp, startPendingIntent);
Log.e(TAG, "setOnceAlarm: " + "id: " + requestCode + " title: " + extra + " timeString: " + timestamp);
}
@@ -709,7 +767,7 @@ public class AlarmUtils {
* @param requestCode
* @param timeString 设置循环周期为一天的闹钟
*/
- public void setDayLoopAlarm(String action, String extra, int requestCode, String timeString) {
+ public void setDayLoopAlarm(String action, String extra, int requestCode, String timeString, boolean local) {
long timestamp = getTimestamp(timeString);
if (System.currentTimeMillis() > timestamp) {
timestamp += AlarmManager.INTERVAL_DAY;
@@ -718,7 +776,9 @@ public class AlarmUtils {
intent.putExtra("title", extra);
intent.putExtra("id", requestCode);
PendingIntent startPendingIntent = PendingIntent.getBroadcast(mContext, requestCode, intent, PendingIntent.FLAG_CANCEL_CURRENT);
- pendingIntents.add(startPendingIntent);
+ if (!local) {
+ pendingIntents.add(startPendingIntent);
+ }
mAlarmManager.setExact(AlarmManager.RTC_WAKEUP, timestamp, startPendingIntent);
Log.e(TAG, "setDayLoopAlarm: " + "title: " + extra + " timeString: " + timestamp);
// setLoopAlarm(action, extra, requestCode, AlarmManager.INTERVAL_DAY, timestamp);
@@ -729,8 +789,8 @@ public class AlarmUtils {
* @param requestCode
* @param timestamp 设置循环周期为一小时的闹钟
*/
- public void setHourLoopAlarm(String action, String extra, int requestCode, long timestamp) {
- setLoopAlarm(action, extra, requestCode, AlarmManager.INTERVAL_HOUR, timestamp);
+ public void setHourLoopAlarm(String action, String extra, int requestCode, long timestamp, boolean local) {
+ setLoopAlarm(action, extra, requestCode, AlarmManager.INTERVAL_HOUR, timestamp, local);
}
/**
@@ -739,17 +799,19 @@ public class AlarmUtils {
* @param intervalMillis
* @param timestamp 循环闹钟
*/
- public void setLoopAlarm(String action, String extra, int requestCode, long intervalMillis, long timestamp) {
+ public void setLoopAlarm(String action, String extra, int requestCode, long intervalMillis, long timestamp, boolean local) {
Intent intent = new Intent(action);
intent.putExtra("title", extra);
intent.putExtra("id", requestCode);
PendingIntent startPendingIntent = PendingIntent.getBroadcast(mContext, requestCode, intent, PendingIntent.FLAG_CANCEL_CURRENT);
- pendingIntents.add(startPendingIntent);
+ if (!local) {
+ pendingIntents.add(startPendingIntent);
+ }
mAlarmManager.setWindow(AlarmManager.RTC_WAKEUP, timestamp, intervalMillis, startPendingIntent);
Log.e(TAG, "setLoopAlarm: " + "title: " + extra + " timeString: " + timestamp);
}
- public void setWorkDayAlarm(String action, String extra, int requestCode, String timeString) {
+ public void setWorkDayAlarm(String action, String extra, int requestCode, String timeString, boolean local) {
long timestamp = getTimestamp(timeString);
Calendar calendar = Calendar.getInstance();
int day_of_week = calendar.get(Calendar.DAY_OF_WEEK) - 1;
@@ -768,12 +830,14 @@ public class AlarmUtils {
intent.putExtra("title", extra);
intent.putExtra("id", requestCode);
PendingIntent startPendingIntent = PendingIntent.getBroadcast(mContext, requestCode, intent, PendingIntent.FLAG_CANCEL_CURRENT);
- pendingIntents.add(startPendingIntent);
+ if (!local) {
+ pendingIntents.add(startPendingIntent);
+ }
mAlarmManager.setExact(AlarmManager.RTC_WAKEUP, timestamp, startPendingIntent);
Log.e(TAG, "setWorkDayAlarm: " + "title: " + extra + " timeString: " + timestamp);
}
- public void setOffDayAlarm(String action, String extra, int requestCode, String timeString) {
+ public void setOffDayAlarm(String action, String extra, int requestCode, String timeString, boolean local) {
long timestamp = getTimestamp(timeString);
Calendar calendar = Calendar.getInstance();
int day_of_week = calendar.get(Calendar.DAY_OF_WEEK) - 1;
@@ -793,7 +857,9 @@ public class AlarmUtils {
intent.putExtra("title", extra);
intent.putExtra("id", requestCode);
PendingIntent startPendingIntent = PendingIntent.getBroadcast(mContext, requestCode, intent, PendingIntent.FLAG_CANCEL_CURRENT);
- pendingIntents.add(startPendingIntent);
+ if (!local) {
+ pendingIntents.add(startPendingIntent);
+ }
mAlarmManager.setExact(AlarmManager.RTC_WAKEUP, timestamp, startPendingIntent);
Log.e(TAG, "setOffDayAlarm: " + "title: " + extra + " timeString: " + timestamp);
}
diff --git a/app/src/main/java/com/xxpatx/os/alarm/PortAlarmAdapter.java b/app/src/main/java/com/xxpatx/os/alarm/PortAlarmAdapter.java
deleted file mode 100644
index 751197b..0000000
--- a/app/src/main/java/com/xxpatx/os/alarm/PortAlarmAdapter.java
+++ /dev/null
@@ -1,287 +0,0 @@
-package com.xxpatx.os.alarm;
-
-import android.graphics.Bitmap;
-import android.media.AudioAttributes;
-import android.media.MediaPlayer;
-import android.text.TextUtils;
-import android.util.Log;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.ImageView;
-import android.widget.TextView;
-
-import androidx.annotation.NonNull;
-import androidx.constraintlayout.widget.ConstraintLayout;
-import androidx.fragment.app.FragmentActivity;
-import androidx.recyclerview.widget.RecyclerView;
-
-import com.bumptech.glide.Glide;
-import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
-import com.bumptech.glide.request.RequestOptions;
-import com.xxpatx.os.R;
-import com.xxpatx.os.utils.FFmpegUtils;
-import com.xxpatx.os.utils.ScreenUtils;
-import com.xxpatx.os.utils.Utils;
-import com.xxpatx.os.view.JzvdStdRound;
-import com.xxpatx.os.view.ToggleButton;
-
-import java.io.File;
-import java.io.IOException;
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.util.Date;
-import java.util.List;
-import java.util.regex.Pattern;
-
-import io.reactivex.rxjava3.core.Observer;
-import io.reactivex.rxjava3.disposables.Disposable;
-
-public class PortAlarmAdapter extends RecyclerView.Adapter {
-
- private FragmentActivity mContext;
- private List mAlarmClockData;
- private OnLongClickListener mOnLongClickListener;
-
- public void setAlarmClockData(List alarmClockData) {
- this.mAlarmClockData = alarmClockData;
- notifyDataSetChanged();
- }
-
- public void setOnLongClickListener(OnLongClickListener onLongClickListener) {
- this.mOnLongClickListener = onLongClickListener;
- }
-
- public interface OnLongClickListener {
- void onLongClick(AlarmClockData alarmClockData);
- }
-
- @NonNull
- @Override
- public holder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
- mContext = (FragmentActivity) parent.getContext();
- return new PortAlarmAdapter.holder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_alarm_port, parent, false));
- }
-
- @Override
- public void onBindViewHolder(@NonNull holder holder, int position) {
- AlarmClockData alarmClockData = mAlarmClockData.get(position);
- switch (alarmClockData.getType()) {
- case AlarmUtils.ONCE:
- try {
- SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
- Date date = sdf.parse(alarmClockData.getTime());
- SimpleDateFormat hours = new SimpleDateFormat("HH:mm");
- String time = hours.format(date);
- holder.tv_time.setText(time);
- } catch (ParseException e) {
- e.printStackTrace();
- }
- holder.tv_remind_type.setText("一次");
- holder.tv_remind_type.setBackgroundResource(R.drawable.tv_times_bg_once);
- break;
- case AlarmUtils.LOOP:
- holder.tv_time.setText(alarmClockData.getTime());
- holder.tv_remind_type.setText("每天");
- holder.tv_remind_type.setBackgroundResource(R.drawable.tv_times_bg_loop);
- break;
- case AlarmUtils.WORKING_DAY:
- holder.tv_time.setText(alarmClockData.getTime());
- holder.tv_remind_type.setText("周一至周五");
- holder.tv_remind_type.setBackgroundResource(R.drawable.tv_times_bg_work);
- break;
- case AlarmUtils.OFF_DAY:
- holder.tv_time.setText(alarmClockData.getTime());
- holder.tv_remind_type.setText("周六至周日");
- holder.tv_remind_type.setBackgroundResource(R.drawable.tv_times_bg_offday);
- break;
- default:
- }
- String title = alarmClockData.getTitle();
- if (TextUtils.isEmpty(title)) {
- holder.tv_title.setText("无标题");
- } else {
- holder.tv_title.setText(title);
- }
- int is_onoff = alarmClockData.getIs_onoff();
- holder.toggleButton2.setDisable(true);
- if (is_onoff == 1) {
- holder.tv_status.setText("已开启");
- holder.toggleButton2.setToggleOn(false);
- } else {
- holder.tv_status.setText("已关闭");
- holder.toggleButton2.setToggleOff(false);
- }
- int type = alarmClockData.getClazz();
- switch (type){
- case 1:
- default:
- holder.iv_type.setImageDrawable(mContext.getDrawable(R.drawable.icon_alarm_medicine_pressed));
- break;
- case 2:
- holder.iv_type.setImageDrawable(mContext.getDrawable(R.drawable.icon_alarm_look_pressed));
- break;
- case 3:
- holder.iv_type.setImageDrawable(mContext.getDrawable(R.drawable.icon_alarm_reserve_pressed));
- break;
- }
- String voice = alarmClockData.getVoice();
- if (TextUtils.isEmpty(voice)) {
- holder.cl_voice.setVisibility(View.GONE);
- } else {
- holder.cl_voice.setVisibility(View.VISIBLE);
- MediaPlayer mMediaPlayer = new MediaPlayer();
- mMediaPlayer.setAudioAttributes(
- new AudioAttributes.Builder()
- .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
- .build()
- );
- mMediaPlayer.setOnCompletionListener(mp -> Log.e("setOnCompletionListener", "onCompletion: "));
- mMediaPlayer.setOnPreparedListener(mp -> Log.e("setOnPreparedListener", "onPrepared: "));
- mMediaPlayer.setOnErrorListener((mp, what, extra) -> false);
- //设置音频文件到MediaPlayer对象中
- try {
- mMediaPlayer.setDataSource(voice);
- } catch (IOException e) {
- e.printStackTrace();
- }
- //让MediaPlayer对象准备,用这个方法防止加载时耗时导致anr
- mMediaPlayer.prepareAsync();
- FFmpegUtils.getDurationInMilliseconds(voice, new Observer() {
- @Override
- public void onSubscribe(@NonNull Disposable d) {
-
- }
-
- @Override
- public void onNext(@NonNull Integer integer) {
- holder.tv_voice.setText(integer + "秒");
- }
-
- @Override
- public void onError(@NonNull Throwable e) {
-
- }
-
- @Override
- public void onComplete() {
-
- }
- });
- holder.cl_voice.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- mMediaPlayer.start();
- }
- });
- }
- String fileUrl = alarmClockData.getFile();
- if (TextUtils.isEmpty(fileUrl)) {
- holder.cl_vp.setVisibility(View.GONE);
- } else {
- holder.cl_vp.setVisibility(View.VISIBLE);
- if (isImgUrl(fileUrl)) {
- holder.imageView.setVisibility(View.VISIBLE);
- holder.jz_video.setVisibility(View.GONE);
- if (!mContext.isDestroyed()) {
- RequestOptions options = new RequestOptions().transform(new RoundedCorners(ScreenUtils.dip2px(mContext, 16F)));
- Glide.with(mContext).load(fileUrl).apply(options).into(holder.imageView);
- }
- } else {
- holder.imageView.setVisibility(View.GONE);
- holder.jz_video.setVisibility(View.VISIBLE);
- String fileName = Utils.getFileNamefromURL(fileUrl);
- File file = new File(Utils.getDownLoadPath(mContext) + fileName);
- String path;
- if (file.exists() && !file.isDirectory()) {
- path = file.getAbsolutePath();
- } else {
- path = fileUrl;
- }
- holder.jz_video.setUp(path, "");
- holder.jz_video.startButton.setImageDrawable(mContext.getDrawable(R.drawable.play));
- FFmpegUtils.loadVideoScreenshot(path, new Observer() {
- @Override
- public void onSubscribe(@NonNull Disposable d) {
-
- }
-
- @Override
- public void onNext(@NonNull Bitmap bitmap) {
- if (!mContext.isDestroyed()) {
- RequestOptions options = new RequestOptions().transform(new RoundedCorners(ScreenUtils.dip2px(mContext, 16F)));
- Glide.with(mContext).load(bitmap).apply(options).into(holder.jz_video.posterImageView);
-// Glide.with(mContext).load(bitmap).into(holder.imageView);
- }
- holder.jz_video.startButton.setImageDrawable(mContext.getDrawable(R.drawable.play));
- }
-
- @Override
- public void onError(@NonNull Throwable e) {
-
- }
-
- @Override
- public void onComplete() {
-
- }
- });
-
- }
- }
- holder.root.setOnLongClickListener(new View.OnLongClickListener() {
- @Override
- public boolean onLongClick(View view) {
- mOnLongClickListener.onLongClick(alarmClockData);
- return false;
- }
- });
- holder.root.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View view) {
-// Intent intent = new Intent(mContext, AlarmClockEditActivity.class);
-// intent.putExtra("id", alarmClockData.getId());
-// mContext.startActivity(intent);
- }
- });
-
- }
-
- private Pattern mCompile = Pattern.compile(".*?(gif|jpeg|png|jpg|bmp|webp)");
-
- private boolean isImgUrl(String url) {
- if (TextUtils.isEmpty(url) || url.trim().length() == 0) {
- return false;
- }
- return mCompile.matcher(url).matches();
- }
-
- @Override
- public int getItemCount() {
- return mAlarmClockData == null ? 0 : mAlarmClockData.size();
- }
-
- class holder extends RecyclerView.ViewHolder {
- TextView tv_time, tv_remind_type, tv_title, tv_voice, tv_status;
- ConstraintLayout cl_voice, cl_vp, root;
- JzvdStdRound jz_video;
- ImageView imageView,iv_type;
- ToggleButton toggleButton2;
-
- public holder(@NonNull View itemView) {
- super(itemView);
- tv_time = itemView.findViewById(R.id.tv_time);
- tv_remind_type = itemView.findViewById(R.id.tv_remind_type);
- tv_title = itemView.findViewById(R.id.tv_title);
- tv_voice = itemView.findViewById(R.id.tv_voice);
- cl_voice = itemView.findViewById(R.id.cl_voice);
- cl_vp = itemView.findViewById(R.id.cl_vp);
- root = itemView.findViewById(R.id.root);
- jz_video = itemView.findViewById(R.id.jz_video);
- imageView = itemView.findViewById(R.id.imageView);
- iv_type = itemView.findViewById(R.id.iv_type);
- tv_status = itemView.findViewById(R.id.tv_status);
- toggleButton2 = itemView.findViewById(R.id.toggleButton2);
- }
- }
-}
diff --git a/app/src/main/java/com/xxpatx/os/base/BaseApplication.java b/app/src/main/java/com/xxpatx/os/base/BaseApplication.java
index 7dcbdfe..543a135 100644
--- a/app/src/main/java/com/xxpatx/os/base/BaseApplication.java
+++ b/app/src/main/java/com/xxpatx/os/base/BaseApplication.java
@@ -18,6 +18,7 @@ import com.tencent.bugly.crashreport.CrashReport;
import com.tencent.mmkv.MMKV;
import com.xxpatx.os.BuildConfig;
import com.xxpatx.os.alarm.AlarmUtils;
+import com.xxpatx.os.db.ContactCacheUtils;
import com.xxpatx.os.db.WechatContactManager;
import com.xxpatx.os.manager.AmapManager;
import com.xxpatx.os.manager.AppManager;
@@ -46,8 +47,9 @@ public class BaseApplication extends Application {
// 初始化 Toast 框架
Toaster.init(this);
- CrashReport.initCrashReport(getApplicationContext(), "f65d7a4361", false);
+ CrashReport.initCrashReport(getApplicationContext(), "09fec11058", false);
CrashReport.setDeviceModel(getApplicationContext(), Build.MODEL);
+ CrashReport.setDeviceId(this, Utils.getSerial());
xcrash.XCrash.init(this);
aliyunPushInit();
@@ -77,6 +79,7 @@ public class BaseApplication extends Application {
Log.e(TAG, "onCreate: " + e.getMessage());
}
WechatContactManager.init(this);
+ ContactCacheUtils.init(this);
}
private void aliyunPushInit() {
diff --git a/app/src/main/java/com/xxpatx/os/bean/Contact.java b/app/src/main/java/com/xxpatx/os/bean/Contact.java
index e1f9f59..94c378c 100644
--- a/app/src/main/java/com/xxpatx/os/bean/Contact.java
+++ b/app/src/main/java/com/xxpatx/os/bean/Contact.java
@@ -10,7 +10,7 @@ import java.io.Serializable;
public class Contact implements Serializable {
private static final long serialVersionUID = 8814155739557674021L;
- String id;
+ int id;
String name;//名称
int is_urgent;//是否紧急联系人 0否1是
String mobile;//手机号
@@ -32,11 +32,11 @@ public class Contact implements Serializable {
this.simContact = sim;
}
- public String getId() {
+ public int getId() {
return id;
}
- public void setId(String id) {
+ public void setId(int id) {
this.id = id;
}
diff --git a/app/src/main/java/com/xxpatx/os/db/ContactCacheHelper.java b/app/src/main/java/com/xxpatx/os/db/ContactCacheHelper.java
new file mode 100644
index 0000000..1c875e5
--- /dev/null
+++ b/app/src/main/java/com/xxpatx/os/db/ContactCacheHelper.java
@@ -0,0 +1,47 @@
+package com.xxpatx.os.db;
+
+import android.content.Context;
+import android.database.sqlite.SQLiteDatabase;
+import android.database.sqlite.SQLiteOpenHelper;
+
+public class ContactCacheHelper extends SQLiteOpenHelper {
+
+ public static final int DATABASE_VERSION = 1;
+ public static final String DATABASE_NAME = "ContactDatabase.db";
+ // public static final String DATABASE_FILE_NAME = Environment.getExternalStorageDirectory().getPath() + File.separator + DATABASE_NAME;
+ public static final String DATABASE_FILE_NAME = DATABASE_NAME;
+
+ public static final String TABLE_ALARM = "ContactTable";
+
+ public static final String KEY_ID = "id";
+ public static final String KEY_NAME = "name";
+ public static final String KEY_URGENT = "urgent";
+ public static final String KEY_MOBILE = "mobile";
+ public static final String KEY_AVATAR = "avatar";
+ public static final String KEY_TAG = "tag";
+
+
+ private static final String CREATE_CONTACT_TABLE = "CREATE TABLE IF NOT EXISTS " + TABLE_ALARM +
+ "("
+ + KEY_ID + " INTEGER,"
+ + KEY_NAME + " TEXT,"
+ + KEY_URGENT + " INTEGER DEFAULT 0,"
+ + KEY_MOBILE + " TEXT PRIMARY KEY,"
+ + KEY_AVATAR + " TEXT,"
+ + KEY_TAG + " TEXT"
+ + ")";
+
+ public ContactCacheHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
+ super(context, name, factory, version);
+ }
+
+ @Override
+ public void onCreate(SQLiteDatabase sqLiteDatabase) {
+ sqLiteDatabase.execSQL(CREATE_CONTACT_TABLE);
+ }
+
+ @Override
+ public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
+
+ }
+}
diff --git a/app/src/main/java/com/xxpatx/os/db/ContactCacheUtils.java b/app/src/main/java/com/xxpatx/os/db/ContactCacheUtils.java
new file mode 100644
index 0000000..bd8fd60
--- /dev/null
+++ b/app/src/main/java/com/xxpatx/os/db/ContactCacheUtils.java
@@ -0,0 +1,162 @@
+package com.xxpatx.os.db;
+
+import android.content.ContentValues;
+import android.content.Context;
+import android.database.Cursor;
+import android.database.sqlite.SQLiteDatabase;
+import android.os.Environment;
+import android.util.Log;
+
+import com.xxpatx.os.bean.Contact;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+public class ContactCacheUtils {
+ private static final String TAG = "ContactCacheUtils";
+
+ private static ContactCacheUtils sInstance;
+
+ private Context mContext;
+ private SQLiteDatabase mDatabase;
+ private ContactCacheHelper mContactHelper;
+
+ public ContactCacheUtils(Context context) {
+ this.mContext = context.getApplicationContext();
+// this.mContactHelper = new ContactCacheHelper(context, ContactCacheHelper.DATABASE_NAME, null, ContactCacheHelper.DATABASE_VERSION);
+// this.mContactHelper = new ContactCacheHelper(context,
+// context.getExternalCacheDir() + File.separator + ContactCacheHelper.DATABASE_NAME,
+// null, ContactCacheHelper.DATABASE_VERSION);
+ this.mContactHelper = new ContactCacheHelper(context,
+ Environment.getExternalStorageDirectory() + File.separator + ContactCacheHelper.DATABASE_NAME,
+ null, ContactCacheHelper.DATABASE_VERSION);
+ this.mDatabase = mContactHelper.getWritableDatabase();
+ }
+
+ public static void init(Context context) {
+ if (context == null) {
+ throw new RuntimeException("context is NULL");
+ }
+ if (sInstance == null) {
+ sInstance = new ContactCacheUtils(context);
+ }
+ }
+
+ public static ContactCacheUtils getInstance() {
+ if (sInstance == null) {
+ throw new IllegalStateException("You must be init AlarmUtils first");
+ }
+ return sInstance;
+ }
+
+ private ContentValues getValuesFromAlarmClock(Contact contact) {
+ ContentValues values = new ContentValues();
+ values.put(ContactCacheHelper.KEY_ID, contact.getId());
+ values.put(ContactCacheHelper.KEY_NAME, contact.getName());
+ values.put(ContactCacheHelper.KEY_URGENT, contact.getIs_urgent());
+ values.put(ContactCacheHelper.KEY_MOBILE, contact.getMobile());
+ values.put(ContactCacheHelper.KEY_AVATAR, contact.getAvatar());
+ values.put(ContactCacheHelper.KEY_TAG, contact.getTag());
+ return values;
+ }
+
+ /**
+ * 增加数据
+ *
+ * @param contact
+ * @return
+ */
+ public boolean addContact(Contact contact) {
+ ContentValues values = getValuesFromAlarmClock(contact);
+ long id = 0;
+ mDatabase.beginTransaction();
+ try {
+ id = mDatabase.insertWithOnConflict(ContactCacheHelper.TABLE_ALARM, null, values, SQLiteDatabase.CONFLICT_REPLACE);
+ mDatabase.setTransactionSuccessful();
+ } catch (Exception e) {
+ Log.e(TAG, "addContact: " + e.getMessage());
+ } finally {
+ mDatabase.endTransaction();
+ }
+ return id > 0;
+ }
+
+ /**
+ * 批量插入数据
+ *
+ * @param list
+ */
+ public void insertAlarmClockList(List list) {
+ List contentValuesList = new ArrayList<>();
+ for (Contact alarmClockData : list) {
+ ContentValues values = getValuesFromAlarmClock(alarmClockData);
+ contentValuesList.add(values);
+ }
+ mDatabase.beginTransaction();
+ try {
+ for (ContentValues v : contentValuesList) {
+ mDatabase.insertWithOnConflict(ContactCacheHelper.TABLE_ALARM, null, v, SQLiteDatabase.CONFLICT_REPLACE);
+ }
+ mDatabase.setTransactionSuccessful();
+ } catch (Exception e) {
+ Log.e(TAG, "insertListValues: " + e.getMessage());
+ } finally {
+ mDatabase.endTransaction();
+ }
+ }
+
+ /**
+ * 删除数据
+ *
+ * @param contact
+ * @return
+ */
+ public boolean deleteContact(Contact contact) {
+ if (contact == null) {
+ return true;
+ }
+ return deleteContact(contact.getId());
+ }
+
+ public boolean deleteContact(int rowId) {
+ long id = 0;
+ mDatabase.beginTransaction();
+ try {
+ id = mDatabase.delete(ContactCacheHelper.TABLE_ALARM, " id =" + rowId, null);
+ mDatabase.setTransactionSuccessful();
+ } catch (Exception e) {
+ Log.e(TAG, "deleteContact: " + e.getMessage());
+ } finally {
+ mDatabase.endTransaction();
+ }
+ Log.e(TAG, "deleteContact: " + id);
+ return id > 0;
+ }
+
+ /**
+ * 获取所有Alarm
+ *
+ * @return
+ */
+ public List getDatabaseContact() {
+ List list = new ArrayList<>();
+ String selectQuery = "SELECT * FROM " + ContactCacheHelper.TABLE_ALARM;
+ Cursor cursor = mDatabase.rawQuery(selectQuery, null);
+ if (cursor.moveToFirst()) {
+ do {
+ Contact contact = new Contact();
+ contact.setId(cursor.getInt(cursor.getColumnIndex(ContactCacheHelper.KEY_ID)));
+ contact.setName(cursor.getString(cursor.getColumnIndex(ContactCacheHelper.KEY_NAME)));
+ contact.setIs_urgent(cursor.getInt(cursor.getColumnIndex(ContactCacheHelper.KEY_URGENT)));
+ contact.setMobile(cursor.getString(cursor.getColumnIndex(ContactCacheHelper.KEY_MOBILE)));
+ contact.setAvatar(cursor.getString(cursor.getColumnIndex(ContactCacheHelper.KEY_AVATAR)));
+ contact.setTag(cursor.getString(cursor.getColumnIndex(ContactCacheHelper.KEY_TAG)));
+ list.add(contact);
+ } while (cursor.moveToNext());
+ }
+ cursor.close();
+ Log.e(TAG, "getDatabaseContact: " + list);
+ return list;
+ }
+}
diff --git a/app/src/main/java/com/xxpatx/os/fragment/contact/ContactFragment.java b/app/src/main/java/com/xxpatx/os/fragment/contact/ContactFragment.java
index 3eb52e6..4f9efd0 100644
--- a/app/src/main/java/com/xxpatx/os/fragment/contact/ContactFragment.java
+++ b/app/src/main/java/com/xxpatx/os/fragment/contact/ContactFragment.java
@@ -18,8 +18,6 @@ import androidx.recyclerview.widget.GridLayoutManager;
import com.hjq.toast.Toaster;
import com.jeremyliao.liveeventbus.LiveEventBus;
-import com.qweather.sdk.bean.weather.WeatherDailyBean;
-import com.qweather.sdk.bean.weather.WeatherHourlyBean;
import com.qweather.sdk.bean.weather.WeatherNowBean;
import com.tencent.mmkv.MMKV;
import com.xxpatx.os.R;
@@ -35,13 +33,9 @@ import com.xxpatx.os.config.CommonConfig;
import com.xxpatx.os.databinding.FragmentContactHomeBinding;
import com.xxpatx.os.dialog.EditContactDialog;
import com.xxpatx.os.utils.DayUtils;
-import com.xxpatx.os.utils.ScreenUtils;
import com.xxpatx.os.utils.TimeUtils;
-import com.xxpatx.os.view.EquallyDividedItemDecoration;
-import java.text.SimpleDateFormat;
import java.util.ArrayList;
-import java.util.Date;
import java.util.List;
public class ContactFragment extends BaseMvvmFragment {
@@ -139,63 +133,63 @@ public class ContactFragment extends BaseMvvmFragment() {
- @Override
- public void onChanged(@Nullable WeatherHourlyBean.HourlyBean hourlyBean) {
- String imageName = "he" + hourlyBean.getIcon();
- Log.e(TAG, "onSuccess: " + imageName);
- if (isAdded()) {
- int resId = getResources().getIdentifier(imageName, "drawable", mContext.getPackageName());
-// Log.e(TAG, "onSuccess: " + resId);
-// if (resId == 0) {
-// mViewDataBinding.ivPic.setImageDrawable(mContext.getDrawable(R.drawable.he100));
-// } else {
-// mViewDataBinding.ivPic.setImageDrawable(mContext.getDrawable(resId));
-// }
- mViewDataBinding.tvTemp.setText(hourlyBean.getTemp() + "℃");
- }
- }
- });
+// LiveEventBus
+// .get("getWeather24HourlyKey", WeatherHourlyBean.HourlyBean.class)
+// .observe(this, new Observer() {
+// @Override
+// public void onChanged(@Nullable WeatherHourlyBean.HourlyBean hourlyBean) {
+// String imageName = "he" + hourlyBean.getIcon();
+// Log.e(TAG, "onSuccess: " + imageName);
+// if (isAdded()) {
+// int resId = getResources().getIdentifier(imageName, "drawable", mContext.getPackageName());
+//// Log.e(TAG, "onSuccess: " + resId);
+//// if (resId == 0) {
+//// mViewDataBinding.ivPic.setImageDrawable(mContext.getDrawable(R.drawable.he100));
+//// } else {
+//// mViewDataBinding.ivPic.setImageDrawable(mContext.getDrawable(resId));
+//// }
+// mViewDataBinding.tvTemp.setText(hourlyBean.getTemp() + "℃");
+// }
+// }
+// });
+//
+// LiveEventBus
+// .get("getWeather7DKey", WeatherDailyBean.DailyBean.class)
+// .observe(this, new Observer() {
+// @Override
+// public void onChanged(@Nullable WeatherDailyBean.DailyBean dailyBean) {
+// mViewDataBinding.tvWeather.setText(dailyBean.getTempMin() + "℃ - " + dailyBean.getTempMax() + "℃");
+// }
+// });
+//
+// LiveEventBus
+// .get("time", String.class)
+// .observe(this, new Observer() {
+// @Override
+// public void onChanged(@Nullable String s) {
+// mViewDataBinding.tvTime.setText(s);
+// }
+// });
+//
+// LiveEventBus
+// .get("date", String.class)
+// .observe(this, new Observer() {
+// @Override
+// public void onChanged(@Nullable String s) {
+// mViewDataBinding.tvData.setText(s);
+// }
+// });
+//
+// LiveEventBus
+// .get("week", String.class)
+// .observe(this, new Observer() {
+// @Override
+// public void onChanged(@Nullable String s) {
+// mViewDataBinding.tvWeek.setText(s);
+// }
+// });
- LiveEventBus
- .get("getWeather7DKey", WeatherDailyBean.DailyBean.class)
- .observe(this, new Observer() {
- @Override
- public void onChanged(@Nullable WeatherDailyBean.DailyBean dailyBean) {
- mViewDataBinding.tvWeather.setText(dailyBean.getTempMin() + "℃ - " + dailyBean.getTempMax() + "℃");
- }
- });
-
- LiveEventBus
- .get("time", String.class)
- .observe(this, new Observer() {
- @Override
- public void onChanged(@Nullable String s) {
- mViewDataBinding.tvTime.setText(s);
- }
- });
-
- LiveEventBus
- .get("date", String.class)
- .observe(this, new Observer() {
- @Override
- public void onChanged(@Nullable String s) {
- mViewDataBinding.tvData.setText(s);
- }
- });
-
- LiveEventBus
- .get("week", String.class)
- .observe(this, new Observer() {
- @Override
- public void onChanged(@Nullable String s) {
- mViewDataBinding.tvWeek.setText(s);
- }
- });
-
- mViewModel.getContactList().observe(this, new Observer>() {
+ mViewModel.getContactListData().observe(this, new Observer>() {
@Override
public void onChanged(List contacts) {
if (contacts == null || contacts.size() == 0) {
diff --git a/app/src/main/java/com/xxpatx/os/fragment/contact/ContactViewModel.java b/app/src/main/java/com/xxpatx/os/fragment/contact/ContactViewModel.java
index cea1450..f9b9967 100644
--- a/app/src/main/java/com/xxpatx/os/fragment/contact/ContactViewModel.java
+++ b/app/src/main/java/com/xxpatx/os/fragment/contact/ContactViewModel.java
@@ -15,6 +15,7 @@ import com.xxpatx.os.bean.BaseResponse;
import com.xxpatx.os.bean.Contact;
import com.xxpatx.os.config.CommonConfig;
import com.xxpatx.os.databinding.FragmentContactHomeBinding;
+import com.xxpatx.os.db.ContactCacheUtils;
import com.xxpatx.os.gson.GsonUtils;
import com.xxpatx.os.network.NetInterfaceManager;
import com.xxpatx.os.network.UrlAddress;
@@ -40,10 +41,10 @@ public class ContactViewModel extends BaseViewModel> mContactList = new MutableLiveData<>();
+ private MutableLiveData> mContactListData = new MutableLiveData<>();
- public MutableLiveData> getContactList() {
- return mContactList;
+ public MutableLiveData> getContactListData() {
+ return mContactListData;
}
public void getCacheContact() {
@@ -54,7 +55,8 @@ public class ContactViewModel extends BaseViewModel contacts = gson.fromJson(jsonString, type);
if (contacts != null) {
- mContactList.setValue(contacts);
+ contacts.addAll(ContactCacheUtils.getInstance().getDatabaseContact());
+ mContactListData.setValue(contacts);
}
}
getContact();
@@ -75,10 +77,10 @@ public class ContactViewModel extends BaseViewModel());
+ mContactListData.setValue(new ArrayList<>());
}
}
@@ -91,9 +93,10 @@ public class ContactViewModel extends BaseViewModel contacts = gson.fromJson(jsonString, type);
if (contacts == null) {
- mContactList.setValue(new ArrayList<>());
+ mContactListData.setValue(ContactCacheUtils.getInstance().getDatabaseContact());
} else {
- mContactList.setValue(contacts);
+ contacts.addAll(ContactCacheUtils.getInstance().getDatabaseContact());
+ mContactListData.setValue(contacts);
}
onComplete();
}
@@ -112,7 +115,7 @@ public class ContactViewModel extends BaseViewModel() {
diff --git a/app/src/main/java/com/xxpatx/os/fragment/phone/contact/ContactViewModel.java b/app/src/main/java/com/xxpatx/os/fragment/phone/contact/ContactViewModel.java
index e8dc570..c225428 100644
--- a/app/src/main/java/com/xxpatx/os/fragment/phone/contact/ContactViewModel.java
+++ b/app/src/main/java/com/xxpatx/os/fragment/phone/contact/ContactViewModel.java
@@ -111,7 +111,7 @@ public class ContactViewModel extends BaseViewModel() {
diff --git a/app/src/main/java/com/xxpatx/os/fragment/settings/SettingsFragment.java b/app/src/main/java/com/xxpatx/os/fragment/settings/SettingsFragment.java
index 51d58a9..9c27609 100644
--- a/app/src/main/java/com/xxpatx/os/fragment/settings/SettingsFragment.java
+++ b/app/src/main/java/com/xxpatx/os/fragment/settings/SettingsFragment.java
@@ -2,7 +2,6 @@ package com.xxpatx.os.fragment.settings;
import android.content.Intent;
import android.os.Bundle;
-import android.provider.Settings;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
@@ -15,30 +14,18 @@ import androidx.lifecycle.Observer;
import com.blankj.utilcode.util.NetworkUtils;
import com.hjq.toast.Toaster;
import com.jeremyliao.liveeventbus.LiveEventBus;
-import com.qweather.sdk.bean.weather.WeatherDailyBean;
-import com.qweather.sdk.bean.weather.WeatherHourlyBean;
-import com.qweather.sdk.bean.weather.WeatherNowBean;
import com.tencent.mmkv.MMKV;
-import com.xxpatx.os.BuildConfig;
import com.xxpatx.os.R;
-import com.xxpatx.os.activity.alarm.port.PortAlarmActivity;
-import com.xxpatx.os.activity.contact.AddWechatContactActivity;
+import com.xxpatx.os.activity.alarm.list.AlarmListActivity;
import com.xxpatx.os.activity.dailyapp.DailyAppActivity;
import com.xxpatx.os.activity.emergency.EmergencyActivity;
import com.xxpatx.os.activity.setting.SettingActivity;
-import com.xxpatx.os.activity.weather.WeatherActivity;
import com.xxpatx.os.base.mvvm.fragment.BaseMvvmFragment;
import com.xxpatx.os.bean.MapBean;
import com.xxpatx.os.config.CommonConfig;
-import com.xxpatx.os.databinding.FragmentHomeBinding;
import com.xxpatx.os.databinding.FragmentSettingsBinding;
import com.xxpatx.os.manager.AmapManager;
import com.xxpatx.os.utils.ApkUtils;
-import com.xxpatx.os.utils.DayUtils;
-import com.xxpatx.os.utils.TimeUtils;
-
-import java.text.SimpleDateFormat;
-import java.util.Date;
/**
* A simple {@link Fragment} subclass.
@@ -163,7 +150,7 @@ public class SettingsFragment extends BaseMvvmFragment>> getCategorysObservable() {
- return mRetrofit.create(CategorysApi.class)
- .getArticleCategorys(Utils.getSerial())
- .subscribeOn(Schedulers.io())
- .observeOn(AndroidSchedulers.mainThread());
- }
-
public Observable> getArticleListObservable() {
return mRetrofit.create(ArticleListApi.class)
.getArticleList(Utils.getSerial())
@@ -458,7 +445,7 @@ public class NetInterfaceManager {
.observeOn(AndroidSchedulers.mainThread());
}
- public Observable getMailListDeleteObservable(String id) {
+ public Observable getMailListDeleteObservable(int id) {
return mRetrofit.create(MailListDeleteApi.class)
.deleteMailList(Utils.getSerial(), id)
.subscribeOn(Schedulers.io())
@@ -528,20 +515,6 @@ public class NetInterfaceManager {
.observeOn(AndroidSchedulers.mainThread());
}
- public Observable>> getLivenVideoListObservable() {
- return mRetrofit.create(LivenVideoListApi.class)
- .getLivenVideoList(Utils.getSerial())
- .subscribeOn(Schedulers.io())
- .observeOn(AndroidSchedulers.mainThread());
- }
-
- public Observable>> getKnowledgeVideoListObservable() {
- return mRetrofit.create(KnowledgeVideoListApi.class)
- .getKnowledgeVideoList(Utils.getSerial())
- .subscribeOn(Schedulers.io())
- .observeOn(AndroidSchedulers.mainThread());
- }
-
public Observable>> getRegionListObservable(String id) {
return mRetrofit.create(RegionListApi.class)
.getRegionList(id)
diff --git a/app/src/main/java/com/xxpatx/os/network/UrlAddress.java b/app/src/main/java/com/xxpatx/os/network/UrlAddress.java
index d729550..f454cd1 100644
--- a/app/src/main/java/com/xxpatx/os/network/UrlAddress.java
+++ b/app/src/main/java/com/xxpatx/os/network/UrlAddress.java
@@ -117,16 +117,6 @@ public class UrlAddress {
/*获取闹钟*/
public static final String GET_ALARM_CLOCK = "getAlarmClock";
- /**
- * 养生视频分类
- */
- /*养生视频列表*/
- public static final String GET_LIVEN_VIDEO_LIST = "livenVideo/getLivenVideoList";
- /*知识视频列表*/
- public static final String GET_KNOWLEDGE_VIDEO_LIST = "knowledgeVideo/getKnowledgeVideoList";
- /*养生资讯分类*/
- public static final String ARTICLE_CATEGORYS = "article/categorys";
-
/**
* 商品购买
*/
diff --git a/app/src/main/java/com/xxpatx/os/network/api/uiui/CategorysApi.java b/app/src/main/java/com/xxpatx/os/network/api/uiui/CategorysApi.java
deleted file mode 100644
index cf43a8e..0000000
--- a/app/src/main/java/com/xxpatx/os/network/api/uiui/CategorysApi.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package com.xxpatx.os.network.api.uiui;
-
-import com.xxpatx.os.bean.BaseResponse;
-import com.xxpatx.os.bean.CategoryBean;
-import com.xxpatx.os.network.UrlAddress;
-
-import java.util.List;
-
-import io.reactivex.rxjava3.core.Observable;
-import retrofit2.http.GET;
-import retrofit2.http.Query;
-
-public interface CategorysApi {
- @GET(UrlAddress.ARTICLE_CATEGORYS)
- Observable>> getArticleCategorys(
- @Query("sn") String sn
- );
-}
diff --git a/app/src/main/java/com/xxpatx/os/network/api/uiui/KnowledgeVideoListApi.java b/app/src/main/java/com/xxpatx/os/network/api/uiui/KnowledgeVideoListApi.java
deleted file mode 100644
index c62254a..0000000
--- a/app/src/main/java/com/xxpatx/os/network/api/uiui/KnowledgeVideoListApi.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package com.xxpatx.os.network.api.uiui;
-
-import com.uiui.video.bean.VideoInfo;
-import com.xxpatx.os.bean.BaseResponse;
-import com.xxpatx.os.network.UrlAddress;
-
-import java.util.ArrayList;
-
-import io.reactivex.rxjava3.core.Observable;
-import retrofit2.http.GET;
-import retrofit2.http.Query;
-
-public interface KnowledgeVideoListApi {
- @GET(UrlAddress.GET_KNOWLEDGE_VIDEO_LIST)
- Observable>> getKnowledgeVideoList(
- @Query("sn") String sn
- );
-}
diff --git a/app/src/main/java/com/xxpatx/os/network/api/uiui/contact/MailListDeleteApi.java b/app/src/main/java/com/xxpatx/os/network/api/uiui/contact/MailListDeleteApi.java
index f5fa480..2c81602 100644
--- a/app/src/main/java/com/xxpatx/os/network/api/uiui/contact/MailListDeleteApi.java
+++ b/app/src/main/java/com/xxpatx/os/network/api/uiui/contact/MailListDeleteApi.java
@@ -13,6 +13,6 @@ public interface MailListDeleteApi {
@POST(UrlAddress.MAIL_LIST_DELETE)
Observable deleteMailList(
@Field("sn") String sn,
- @Field("id") String id
+ @Field("id") int id
);
}
diff --git a/app/src/main/java/com/xxpatx/os/network/api/uiui/liven/LivenVideoListApi.java b/app/src/main/java/com/xxpatx/os/network/api/uiui/liven/LivenVideoListApi.java
deleted file mode 100644
index ce93dbd..0000000
--- a/app/src/main/java/com/xxpatx/os/network/api/uiui/liven/LivenVideoListApi.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package com.xxpatx.os.network.api.uiui.liven;
-
-import com.uiui.video.bean.VideoInfo;
-import com.xxpatx.os.bean.BaseResponse;
-import com.xxpatx.os.network.UrlAddress;
-
-import java.util.ArrayList;
-
-import io.reactivex.rxjava3.core.Observable;
-import retrofit2.http.GET;
-import retrofit2.http.Query;
-
-public interface LivenVideoListApi {
- @GET(UrlAddress.GET_LIVEN_VIDEO_LIST)
- Observable>> getLivenVideoList(
- @Query("sn") String sn
- );
-}
diff --git a/app/src/main/java/com/xxpatx/os/service/WeAccessibilityService.java b/app/src/main/java/com/xxpatx/os/service/WeAccessibilityService.java
index 3bbacf5..912909c 100644
--- a/app/src/main/java/com/xxpatx/os/service/WeAccessibilityService.java
+++ b/app/src/main/java/com/xxpatx/os/service/WeAccessibilityService.java
@@ -23,6 +23,9 @@ import com.tencent.mmkv.MMKV;
import com.xxpatx.os.bean.Contact;
import com.xxpatx.os.config.CommonConfig;
+/**
+ * 通过微信标签最高支持8.0.49,8.0.50 获取不到数据
+ */
public class WeAccessibilityService extends AccessibilityService {
private static final String TAG = "WeAccessibilityService";
diff --git a/app/src/main/java/com/xxpatx/os/service/main/MainService.java b/app/src/main/java/com/xxpatx/os/service/main/MainService.java
index c90a310..1962194 100644
--- a/app/src/main/java/com/xxpatx/os/service/main/MainService.java
+++ b/app/src/main/java/com/xxpatx/os/service/main/MainService.java
@@ -251,22 +251,23 @@ public class MainService extends BaseRxService
Calendar calendar = Calendar.getInstance();
int day_of_week = calendar.get(Calendar.DAY_OF_WEEK) - 1;
Log.e(TAG, "setNextAlarm: " + day_of_week);
+ boolean local = alarmClockData.isIs_local();
switch (alarmClockData.getType()) {
case AlarmUtils.ONCE:
break;
case AlarmUtils.LOOP:
AlarmUtils.getInstance().setDayLoopAlarm(MainService.ALARMWAKEUP, alarmClockData.getTitle(),
- alarmClockData.getId(), alarmClockData.getTime());
+ alarmClockData.getId(), alarmClockData.getTime(), local);
break;
case AlarmUtils.WORKING_DAY:
if (day_of_week < 5 || day_of_week == 7) {
AlarmUtils.getInstance().setWorkDayAlarm(MainService.ALARMWAKEUP, alarmClockData.getTitle(),
- alarmClockData.getId(), alarmClockData.getTime());
+ alarmClockData.getId(), alarmClockData.getTime(), local);
}
break;
case AlarmUtils.OFF_DAY:
AlarmUtils.getInstance().setOffDayAlarm(MainService.ALARMWAKEUP, alarmClockData.getTitle(),
- alarmClockData.getId(), alarmClockData.getTime());
+ alarmClockData.getId(), alarmClockData.getTime(), local);
default:
}
}
diff --git a/app/src/main/java/com/xxpatx/os/utils/FileUtil.java b/app/src/main/java/com/xxpatx/os/utils/FileUtil.java
index befe5ba..cf01b03 100644
--- a/app/src/main/java/com/xxpatx/os/utils/FileUtil.java
+++ b/app/src/main/java/com/xxpatx/os/utils/FileUtil.java
@@ -1,8 +1,16 @@
package com.xxpatx.os.utils;
+import android.content.ContentResolver;
+import android.content.Context;
+import android.database.Cursor;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+import android.net.Uri;
+import android.provider.MediaStore;
import android.text.TextUtils;
import java.io.File;
+import java.io.FileOutputStream;
import java.util.HashSet;
public class FileUtil {
@@ -56,5 +64,109 @@ public class FileUtil {
}
}
+ public static File uriToFile(Uri uri, Context context) {
+ String path = null;
+ if ("file".equals(uri.getScheme())) {
+ path = uri.getEncodedPath();
+ if (path != null) {
+ path = Uri.decode(path);
+ ContentResolver cr = context.getContentResolver();
+ StringBuffer buff = new StringBuffer();
+ buff.append("(").append(MediaStore.Images.ImageColumns.DATA).append("=").append("'" + path + "'").append(")");
+ Cursor cur = cr.query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, new String[]{MediaStore.Images.ImageColumns._ID, MediaStore.Images.ImageColumns.DATA}, buff.toString(), null, null);
+ int index = 0;
+ int dataIdx = 0;
+ for (cur.moveToFirst(); !cur.isAfterLast(); cur.moveToNext()) {
+ index = cur.getColumnIndex(MediaStore.Images.ImageColumns._ID);
+ index = cur.getInt(index);
+ dataIdx = cur.getColumnIndex(MediaStore.Images.ImageColumns.DATA);
+ path = cur.getString(dataIdx);
+ }
+ cur.close();
+ if (index == 0) {
+ } else {
+ Uri u = Uri.parse("content://media/external/images/media/" + index);
+ System.out.println("temp uri is :" + u);
+ }
+ }
+ if (path != null) {
+ return new File(path);
+ }
+ } else if ("content".equals(uri.getScheme())) {
+ // 4.2.2以后
+ String[] proj = {MediaStore.Images.Media.DATA};
+ Cursor cursor = context.getContentResolver().query(uri, proj, null, null, null);
+ if (cursor.moveToFirst()) {
+ int columnIndex = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
+ path = cursor.getString(columnIndex);
+ }
+ cursor.close();
+
+ return new File(path);
+ } else {
+ //Log.i(TAG, "Uri Scheme:" + uri.getScheme());
+ return new File(uri.toString());
+ }
+ return null;
+ }
+
+ /**
+ * drawable转为file
+ *
+ * @param drawableId drawable的ID
+ * @param fileName 转换后的文件名
+ * @return
+ */
+ public static File drawableToFile(Context context, int drawableId, String fileName) {
+// InputStream is = view.getContext().getResources().openRawResource(R.drawable.logo);
+ Bitmap bitmap = BitmapFactory.decodeResource(context.getResources(), drawableId);
+// Bitmap bitmap = BitmapFactory.decodeStream(is);
+ String defaultPath = context.getFilesDir().getAbsolutePath() + "/defaultGoodInfo";
+ File file = new File(defaultPath);
+ if (!file.exists()) {
+ file.mkdirs();
+ }
+ String defaultImgPath = defaultPath + "/" + fileName;
+ file = new File(defaultImgPath);
+ try {
+ file.createNewFile();
+ FileOutputStream fOut = new FileOutputStream(file);
+ bitmap.compress(Bitmap.CompressFormat.PNG, 100, fOut);
+// is.close();
+ fOut.flush();
+ fOut.close();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return file;
+ }
+
+ /**
+ * bitmap
+ *
+ * @param bitmap bitmap
+ * @param fileName 转换后的文件名
+ * @return
+ */
+ public static File bitmapToFile(Context context, Bitmap bitmap, String fileName) {
+ String defaultPath = context.getFilesDir().getAbsolutePath() + "/defaultGoodInfo";
+ File file = new File(defaultPath);
+ if (!file.exists()) {
+ file.mkdirs();
+ }
+ String defaultImgPath = defaultPath + "/" + fileName;
+ file = new File(defaultImgPath);
+ try {
+ file.createNewFile();
+ FileOutputStream fOut = new FileOutputStream(file);
+ bitmap.compress(Bitmap.CompressFormat.PNG, 100, fOut);
+// is.close();
+ fOut.flush();
+ fOut.close();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return file;
+ }
}
diff --git a/app/src/main/res/layout/activity_add_wechat_contact.xml b/app/src/main/res/layout/activity_add_wechat_contact.xml
index 1980404..f540035 100644
--- a/app/src/main/res/layout/activity_add_wechat_contact.xml
+++ b/app/src/main/res/layout/activity_add_wechat_contact.xml
@@ -240,7 +240,7 @@
app:layout_constraintTop_toTopOf="parent" />
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_add_alarm_port.xml b/app/src/main/res/layout/activity_alarm_add.xml
similarity index 99%
rename from app/src/main/res/layout/activity_add_alarm_port.xml
rename to app/src/main/res/layout/activity_alarm_add.xml
index f57a284..fac640b 100644
--- a/app/src/main/res/layout/activity_add_alarm_port.xml
+++ b/app/src/main/res/layout/activity_alarm_add.xml
@@ -2,13 +2,13 @@
+ tools:context=".activity.alarm.add.AlarmAddActivity">
+ type="com.xxpatx.os.activity.alarm.add.AlarmAddActivity.Click" />
diff --git a/app/src/main/res/layout/activity_add_alarm.xml b/app/src/main/res/layout/activity_alarm_edit.xml
similarity index 79%
rename from app/src/main/res/layout/activity_add_alarm.xml
rename to app/src/main/res/layout/activity_alarm_edit.xml
index 7f8611b..028d11e 100644
--- a/app/src/main/res/layout/activity_add_alarm.xml
+++ b/app/src/main/res/layout/activity_alarm_edit.xml
@@ -2,10 +2,19 @@
+ tools:context=".activity.alarm.edit.AlarmEditActivity">
+
+
+
+
+
-
+ app:layout_constraintTop_toTopOf="parent">
+
+
+
+
+
-
+ app:layout_constraintBottom_toTopOf="@+id/tv_add"
+ app:layout_constraintTop_toBottomOf="@+id/cl_exit">
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="vertical"
+ app:layout_constraintBottom_toTopOf="@+id/tv_add"
+ app:layout_constraintTop_toBottomOf="@+id/cl_exit">
@@ -89,8 +117,8 @@
android:layout_marginStart="8dp"
android:layout_marginEnd="8dp"
android:layout_marginBottom="8dp"
- android:layout_weight="1"
- android:background="@drawable/add_alarm_background">
+ android:background="@drawable/add_alarm_background"
+ android:visibility="gone">
-
-
-
-
@@ -216,22 +236,22 @@
+ android:textSize="12sp" />
+ android:textSize="12sp" />
@@ -249,6 +269,7 @@
@@ -267,8 +288,8 @@
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:text="弹窗"
- android:textColor="@color/title_gray"
- android:textSize="12sp"
+ android:textColor="@color/black"
+ android:textSize="14sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
@@ -281,10 +302,10 @@
-
-
@@ -344,34 +358,22 @@
-
-
@@ -379,21 +381,13 @@
android:id="@+id/cl_pic"
android:layout_width="72dp"
android:layout_height="72dp"
- android:background="@drawable/add"
+ android:background="@drawable/icon_add"
+ android:onClick="@{click::openGallery}"
android:padding="8dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="@+id/textView28"
- app:layout_constraintTop_toBottomOf="@+id/textView28">
+ app:layout_constraintTop_toTopOf="parent">
-
+
-
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_alarm_port.xml b/app/src/main/res/layout/activity_alarm_list.xml
similarity index 98%
rename from app/src/main/res/layout/activity_alarm_port.xml
rename to app/src/main/res/layout/activity_alarm_list.xml
index 83e8d10..6da1a03 100644
--- a/app/src/main/res/layout/activity_alarm_port.xml
+++ b/app/src/main/res/layout/activity_alarm_list.xml
@@ -2,13 +2,13 @@
+ tools:context=".activity.alarm.list.AlarmListActivity">
+ type="com.xxpatx.os.activity.alarm.list.AlarmListActivity.Click" />
+ xmlns:tools="http://schemas.android.com/tools"
+ tools:context=".activity.noti.NoticeInfoActivity">
@@ -10,8 +10,7 @@
+ android:layout_height="match_parent">