version:3.1

fix:
update:更改主页样式,完善闹钟
This commit is contained in:
2022-09-14 20:35:53 +08:00
parent 563d6f39a8
commit cce03a09b4
13 changed files with 262 additions and 111 deletions

View File

@@ -89,7 +89,7 @@ public class MainActivity extends BaseActivity implements MainContact.MainView {
mMainPresenter.setLifecycle(lifecycleSubject);
if (BuildConfig.DEBUG) {
SystemClock.setCurrentTimeMillis(1662123600000L);//09-02
// SystemClock.setCurrentTimeMillis(1662123600000L);//09-02
// SystemClock.setCurrentTimeMillis(1662210000000L);//09-03
}

View File

@@ -1,5 +1,7 @@
package com.uiui.aios.adapter;
import android.content.Context;
import android.content.Intent;
import android.media.AudioAttributes;
import android.media.MediaPlayer;
import android.text.TextUtils;
@@ -24,25 +26,44 @@ import io.reactivex.rxjava3.core.Observer;
import io.reactivex.rxjava3.disposables.Disposable;
public class NotificationAdapter extends RecyclerView.Adapter<NotificationAdapter.Holder> {
private Context mContext;
private List<AlarmClockData> dataList;
private OnClickListener mOnClickListener;
public void setDataList(List<AlarmClockData> data) {
this.dataList = data;
notifyDataSetChanged();
}
public void setOnClickListener(OnClickListener listener) {
this.mOnClickListener = listener;
}
public interface OnClickListener {
void onClick();
}
@NonNull
@Override
public Holder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
return new Holder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_notification, parent, false));
mContext = parent.getContext();
return new Holder(LayoutInflater.from(mContext).inflate(R.layout.item_notification, parent, false));
}
@Override
public void onBindViewHolder(@NonNull Holder holder, int position) {
AlarmClockData alarmClockData = dataList.get(position);
holder.tv_title.setText("提醒事件:" + alarmClockData.getTitle());
holder.tv_time.setText("提醒时间:" + alarmClockData.getTime());
holder.tv_time.setText(alarmClockData.getTime());
String voice = alarmClockData.getVoice();
holder.root.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (mOnClickListener != null) {
mOnClickListener.onClick();
}
}
});
if (TextUtils.isEmpty(voice)) {
holder.cl_voice.setVisibility(View.GONE);
} else {
@@ -104,9 +125,11 @@ public class NotificationAdapter extends RecyclerView.Adapter<NotificationAdapte
TextView tv_time;
TextView tv_voice;
ConstraintLayout cl_voice;
ConstraintLayout root;
public Holder(@NonNull View itemView) {
super(itemView);
root = itemView.findViewById(R.id.root);
tv_title = itemView.findViewById(R.id.tv_title);
tv_time = itemView.findViewById(R.id.tv_time);
tv_voice = itemView.findViewById(R.id.tv_voice);

View File

@@ -33,6 +33,7 @@ import java.util.Comparator;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.TimeZone;
@@ -209,6 +210,19 @@ public class AlarmUtils {
return id > 0;
}
public void deleteAllAlarmClock() {
HashSet<PendingIntent> pendingIntents = getOldPendingIntents();
Iterator<PendingIntent> pendingIntentIterator = pendingIntents.iterator();
while (pendingIntentIterator.hasNext()) {
PendingIntent pendingIntent = pendingIntentIterator.next();
alarmManager.cancel(pendingIntent);
pendingIntentIterator.remove();
}
List<AlarmClockData> alarmClockData = getAllAlarms();
for (AlarmClockData data : alarmClockData) {
deleteAlarmClock(data.getId());
}
}
/**
* 获取所有Alarm
@@ -258,9 +272,15 @@ public class AlarmUtils {
if (pendingIntents == null) {
pendingIntents = getOldPendingIntents();
}
for (PendingIntent pendingIntent : pendingIntents) {
Iterator<PendingIntent> pendingIntentIterator = pendingIntents.iterator();
while (pendingIntentIterator.hasNext()) {
PendingIntent pendingIntent = pendingIntentIterator.next();
alarmManager.cancel(pendingIntent);
pendingIntentIterator.remove();
}
// for (PendingIntent pendingIntent : pendingIntents) {
//
// }
List<AlarmClockData> newData = mergeData(data);
for (AlarmClockData clockData : newData) {
setAlarm(clockData);
@@ -276,8 +296,10 @@ public class AlarmUtils {
*/
private List<AlarmClockData> mergeData(List<AlarmClockData> alarmClockDataList) {
HashMap<Integer, AlarmClockData> alarmClockDataMap = new HashMap<>();
for (AlarmClockData alarmClockData : alarmClockDataList) {
alarmClockDataMap.put(alarmClockData.getId(), alarmClockData);
if (alarmClockDataList != null) {
for (AlarmClockData alarmClockData : alarmClockDataList) {
alarmClockDataMap.put(alarmClockData.getId(), alarmClockData);
}
}
HashMap<Integer, AlarmClockData> oldData = getOldData();
List<AlarmClockData> deleteData = new ArrayList<>();
@@ -291,6 +313,9 @@ public class AlarmUtils {
}
List<AlarmClockData> newData = new ArrayList<>();
if (alarmClockDataList == null) {
return newData;
}
for (AlarmClockData alarm : alarmClockDataList) {
AlarmClockData oldAlarm = oldData.get(alarm.getId());
if (oldAlarm == null) {
@@ -403,12 +428,14 @@ public class AlarmUtils {
int hour = Integer.parseInt(timeSplit[0]);
int minute = Integer.parseInt(timeSplit[1]);
Calendar c = Calendar.getInstance();
c.set(c.get(Calendar.YEAR), c.get(Calendar.MONTH),
c.get(Calendar.DAY_OF_MONTH), hour, minute, 0);
int year = c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH);
int day = c.get(Calendar.DAY_OF_MONTH);
c.set(year, month, day, hour, minute, 0);
long mTimeInfo = c.getTimeInMillis();
Log.e(TAG, "getTimestamp: " + mTimeInfo);
long actualTime = mTimeInfo > System.currentTimeMillis() ? mTimeInfo : mTimeInfo + ONE_DAY_TIME;
return actualTime;
// long actualTime = mTimeInfo > System.currentTimeMillis() ? mTimeInfo : mTimeInfo + ONE_DAY_TIME;
return mTimeInfo;
} else {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm");
try {
@@ -434,13 +461,13 @@ public class AlarmUtils {
}
/*一次性*/
private static final int ONCE = 1;
public static final int ONCE = 1;
/*每天*/
private static final int LOOP = 2;
public static final int LOOP = 2;
/*周一到周五*/
private static final int WORKING_DAY = 3;
public static final int WORKING_DAY = 3;
/*休息日*/
private static final int OFF_DAY = 4;
public static final int OFF_DAY = 4;
/**
* 设置闹钟
@@ -475,13 +502,13 @@ public class AlarmUtils {
}
break;
case LOOP:
setDayLoopAlarm(MainService.ALARMWAKEUP, title, id, timeStamp);
setDayLoopAlarm(MainService.ALARMWAKEUP, title, id, timeString);
break;
case WORKING_DAY:
setWorkDayAlarm(MainService.ALARMWAKEUP, title, id, timeString);
break;
case OFF_DAY:
setOffDayAlarm(MainService.ALARMWAKEUP, title, id, timeString);
break;
default:
}
@@ -498,17 +525,28 @@ public class AlarmUtils {
intent.putExtra("id", requestCode);
PendingIntent startPendingIntent = PendingIntent.getBroadcast(mContext, requestCode, intent, PendingIntent.FLAG_CANCEL_CURRENT);
pendingIntents.add(startPendingIntent);
alarmManager.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, timestamp, startPendingIntent);
alarmManager.setAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, timestamp, startPendingIntent);
Log.e(TAG, "setOnceAlarm: " + "id: " + requestCode + " title: " + extra + " timeString: " + timestamp);
}
/**
* @param action
* @param requestCode
* @param timestamp 设置循环周期为一天的闹钟
* @param timeString 设置循环周期为一天的闹钟
*/
public void setDayLoopAlarm(String action, String extra, int requestCode, long timestamp) {
setLoopAlarm(action, extra, requestCode, AlarmManager.INTERVAL_DAY, timestamp);
public void setDayLoopAlarm(String action, String extra, int requestCode, String timeString) {
long timestamp = getTimestamp(timeString);
if (System.currentTimeMillis() > timestamp) {
timestamp += AlarmManager.INTERVAL_DAY;
}
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);
alarmManager.setExact(AlarmManager.RTC_WAKEUP, timestamp, startPendingIntent);
Log.e(TAG, "setDayLoopAlarm: " + "title: " + extra + " timeString: " + timestamp);
// setLoopAlarm(action, extra, requestCode, AlarmManager.INTERVAL_DAY, timestamp);
}
/**
@@ -536,24 +574,49 @@ public class AlarmUtils {
Log.e(TAG, "setLoopAlarm: " + "title: " + extra + " timeString: " + timestamp);
}
public void setWorkDayAlarm(String action, String extra, int requestCode, long intervalMillis, long timestamp) {
public void setWorkDayAlarm(String action, String extra, int requestCode, String timeString) {
long timestamp = getTimestamp(timeString);
Calendar calendar = Calendar.getInstance();
int day_of_week = calendar.get(Calendar.DAY_OF_WEEK) - 1;
switch (day_of_week) {
case 6:
case 7:
timestamp += (8 - day_of_week) * AlarmManager.INTERVAL_DAY;
break;
default:
}
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);
alarmManager.setWindow(AlarmManager.RTC_WAKEUP, timestamp, intervalMillis, startPendingIntent);
Log.e(TAG, "setLoopAlarm: " + "title: " + extra + " timeString: " + timestamp);
alarmManager.setExact(AlarmManager.RTC_WAKEUP, timestamp, startPendingIntent);
Log.e(TAG, "setWorkDayAlarm: " + "title: " + extra + " timeString: " + timestamp);
}
public void setOffDayAlarm(String action, String extra, int requestCode, long intervalMillis, long timestamp) {
public void setOffDayAlarm(String action, String extra, int requestCode, String timeString) {
long timestamp = getTimestamp(timeString);
Calendar calendar = Calendar.getInstance();
int day_of_week = calendar.get(Calendar.DAY_OF_WEEK) - 1;
switch (day_of_week) {
case 6:
if (System.currentTimeMillis() > timestamp) {
timestamp += AlarmManager.INTERVAL_DAY;
}
break;
case 7:
break;
default:
timestamp += (6 - day_of_week) * AlarmManager.INTERVAL_DAY;
break;
}
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);
alarmManager.setWindow(AlarmManager.RTC_WAKEUP, timestamp, intervalMillis, startPendingIntent);
Log.e(TAG, "setLoopAlarm: " + "title: " + extra + " timeString: " + timestamp);
alarmManager.setExact(AlarmManager.RTC_WAKEUP, timestamp, startPendingIntent);
Log.e(TAG, "setOffDayAlarm: " + "title: " + extra + " timeString: " + timestamp);
}

View File

@@ -311,6 +311,12 @@ public class CustomFragment extends Fragment implements NetworkUtils.OnNetworkSt
}
});
notificationAdapter = new NotificationAdapter();
notificationAdapter.setOnClickListener(new NotificationAdapter.OnClickListener() {
@Override
public void onClick() {
getAlarm();
}
});
rv_noti.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
@@ -416,10 +422,21 @@ public class CustomFragment extends Fragment implements NetworkUtils.OnNetworkSt
getAlarmClock();
}
@Override
public void onStart() {
super.onStart();
}
@Override
public void onPause() {
super.onPause();
}
@Override
public void onResume() {
super.onResume();
// setAlarm();
getAlarmClock();
setSosNumber();
}
@@ -506,6 +523,8 @@ public class CustomFragment extends Fragment implements NetworkUtils.OnNetworkSt
@Override
public void setAlarmClockEmpty() {
showNoData("温馨提示", "当前没有数据");
rv_noti.setVisibility(View.GONE);
iv_note_nodata.setVisibility(View.VISIBLE);
}
@Override
@@ -516,17 +535,33 @@ public class CustomFragment extends Fragment implements NetworkUtils.OnNetworkSt
}
private void getAlarmClock() {
AlarmClockData alarmClockData = AlarmUtils.getInstance().getRecentAlarmClock();
List<AlarmClockData> data = new ArrayList<>();
if (alarmClockData != null) {
data.add(alarmClockData);
notificationAdapter.setDataList(data);
rv_noti.setVisibility(View.VISIBLE);
iv_note_nodata.setVisibility(View.GONE);
} else {
rv_noti.setVisibility(View.GONE);
iv_note_nodata.setVisibility(View.VISIBLE);
}
NetInterfaceManager.getInstance().getAlarmClock(new NetInterfaceManager.AlarmClockCallback() {
@Override
public void setAlarmClock(List<AlarmClockData> alarmClockList) {
AlarmClockData alarmClockData = AlarmUtils.getInstance().getRecentAlarmClock();
List<AlarmClockData> data = new ArrayList<>();
if (alarmClockData != null) {
data.add(alarmClockData);
notificationAdapter.setDataList(data);
rv_noti.setVisibility(View.VISIBLE);
iv_note_nodata.setVisibility(View.GONE);
} else {
rv_noti.setVisibility(View.GONE);
iv_note_nodata.setVisibility(View.VISIBLE);
}
}
@Override
public void setAlarmClockEmpty() {
rv_noti.setVisibility(View.GONE);
iv_note_nodata.setVisibility(View.VISIBLE);
}
@Override
public void onError() {
}
});
}
private void showNoData(String title, String msg) {

View File

@@ -646,15 +646,15 @@ public class NetInterfaceManager {
}
public void getAlarmClock(boolean refresh, BehaviorSubject<ActivityEvent> lifecycle, AlarmClockCallback callback) {
ConnectMode connectMode = ConnectMode.ONE_MINUTE;
if (refresh) {
connectMode = ConnectMode.DEFAULT;
}
if (ConnectManager.getInstance().isNeedConnect(URLAddress.GET_ALARM_CLOCK, connectMode)) {
getAlarmClock(lifecycle, callback);
} else {
getAlarmClockCache(lifecycle, callback);
}
// ConnectMode connectMode = ConnectMode.DEFAULT;
// if (refresh) {
// connectMode = ConnectMode.DEFAULT;
// }
// if (ConnectManager.getInstance().isNeedConnect(URLAddress.GET_ALARM_CLOCK, connectMode)) {
getAlarmClock(lifecycle, callback);
// } else {
// getAlarmClockCache(lifecycle, callback);
// }
}
public void getAlarmClockCache(BehaviorSubject<ActivityEvent> lifecycle, AlarmClockCallback callback) {

View File

@@ -57,34 +57,23 @@ public class MainSPresenter implements MainSContact.Presenter {
@Override
public void getAlarmClock() {
NetInterfaceManager.getInstance().getAlarmClockObservable()
.subscribe(new Observer<BaseResponse<List<AlarmClockData>>>() {
@Override
public void onSubscribe(Disposable d) {
Log.e("getAlarmClock", "onSubscribe: ");
}
NetInterfaceManager.getInstance().getAlarmClock(true, getLifecycle(), new NetInterfaceManager.AlarmClockCallback() {
@Override
public void setAlarmClock(List<AlarmClockData> alarmClockList) {
AlarmUtils.getInstance().setAlarmClockData(alarmClockList);
}
@Override
public void onNext(BaseResponse<List<AlarmClockData>> listBaseResponse) {
Log.e("getAlarmClock", "onNext: "+listBaseResponse);
if (listBaseResponse.code == 200) {
List<AlarmClockData> data = listBaseResponse.data;
AlarmUtils.getInstance().setAlarmClockData(data);
} else {
@Override
public void setAlarmClockEmpty() {
AlarmUtils.getInstance().deleteAllAlarmClock();
AlarmUtils.getInstance().setAlarmClockData(null);
}
}
}
@Override
public void onError() {
@Override
public void onError(Throwable e) {
Log.e("getAlarmClock", "onError: " + e.getMessage());
onComplete();
}
}
});
@Override
public void onComplete() {
Log.e("getAlarmClock", "onComplete: ");
}
});
}
}

View File

@@ -17,6 +17,7 @@ import com.arialyy.aria.core.task.DownloadTask;
import com.blankj.utilcode.util.NetworkUtils;
import com.uiui.aios.BuildConfig;
import com.uiui.aios.activity.NoticeActivity;
import com.uiui.aios.alarm.AlarmUtils;
import com.uiui.aios.base.BaseService;
import com.uiui.aios.bean.AlarmClockData;
import com.uiui.aios.bean.BaseResponse;
@@ -30,6 +31,8 @@ import com.uiui.aios.utils.Utils;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Calendar;
import java.util.HashMap;
import java.util.List;
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers;
@@ -131,12 +134,14 @@ public class MainService extends BaseService implements MainSContact.MainSView,
private class AlarmReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.e(TAG, "onReceive: " + System.currentTimeMillis());
String action = intent.getAction();
if (TextUtils.isEmpty(action)) return;
Log.e(TAG, "onReceive: " + action);
String title = intent.getStringExtra("title");
int code = intent.getIntExtra("id", -1);
Log.e(TAG, "onReceive: title = " + title);
setNextAlarm(code);
if (ALARMWAKEUP.equals(action)) {
Intent noticeIntent = new Intent();
noticeIntent.putExtra("id", code);
@@ -147,6 +152,32 @@ public class MainService extends BaseService implements MainSContact.MainSView,
}
}
public void setNextAlarm(int code) {
HashMap<Integer, AlarmClockData> clockDataHashMap = AlarmUtils.getInstance().getOldData();
AlarmClockData alarmClockData = clockDataHashMap.get(code);
Log.e(TAG, "setNextAlarm: " + alarmClockData);
if (alarmClockData != null) {
Calendar calendar = Calendar.getInstance();
int day_of_week = calendar.get(Calendar.DAY_OF_WEEK) - 1;
Log.e(TAG, "setNextAlarm: " + day_of_week);
switch (alarmClockData.getType()) {
case AlarmUtils.ONCE:
break;
case AlarmUtils.LOOP:
AlarmUtils.getInstance().setDayLoopAlarm(MainService.ALARMWAKEUP, alarmClockData.getTitle(), alarmClockData.getId(), alarmClockData.getTime());
break;
case AlarmUtils.WORKING_DAY:
if (day_of_week < 5 || day_of_week == 7) {
AlarmUtils.getInstance().setDayLoopAlarm(MainService.ALARMWAKEUP, alarmClockData.getTitle(), alarmClockData.getId(), alarmClockData.getTime());
}
break;
case AlarmUtils.OFF_DAY:
AlarmUtils.getInstance().setOffDayAlarm(MainService.ALARMWAKEUP, alarmClockData.getTitle(), alarmClockData.getId(), alarmClockData.getTime());
default:
}
}
}
//监听时间和日期变化
public void registerTimeReceiver() {
mTimeChangedReceiver = new TimeChangedReceiver();
@@ -173,7 +204,7 @@ public class MainService extends BaseService implements MainSContact.MainSView,
Log.e(TAG, "TimeChangedReceiver:" + "timezone changed");
} else if (Intent.ACTION_TIME_TICK.equals(intent.getAction())) {
Log.e(TAG, "TimeChangedReceiver:" + "time tick");
isScreenshot();
// isScreenshot();
}
}
}
@@ -189,7 +220,7 @@ public class MainService extends BaseService implements MainSContact.MainSView,
String topPackageName = ForegroundAppUtil.getForegroundPackageName(MainService.this);
Log.e(TAG, "isScreenshot: " + topPackageName);
String pkg = AppUsedTimeUtils.getInstance().getAppPackageName();
if (TextUtils.isEmpty(pkg)|| BuildConfig.APPLICATION_ID.equals(pkg)) {
if (TextUtils.isEmpty(pkg) || BuildConfig.APPLICATION_ID.equals(pkg)) {
return;
}