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 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">