您的位置:首页 > 其它

framework,MTK平台,系统开发修改定时器开关机设置间隔

2016-11-01 18:55 736 查看
之前测试提了一个bug 就是在定时开关机的时候可以设置同一时间,需要修改为在同一时间上开机和关机不能同时开启,否则提示Toast开关机时间间隔需要不少于5分钟,思路1:开关机只有一个则允许打开2:开机和关机功能都打开并且均为一次性操作,且时间差大于10,则允许设置3:开机(关机)一次性,而关机(开机)操作,且时间差大于10,则允许设置4:重复周天操作,且时间差大于10,则允许设置功能实现:红色字体是需要修改的修改文件 1:vendor/mediatek/proprietary/packages/apps/SchedulePowerOnOff/src/com/mediatek/schpwronoff/AlarmClock.java下修改
<span style="color:#ff6666;"> private void saveAlarm() {
final String alert = Alarms.ALARM_ALERT_SILENT;
mEnabled |= mRepeatPref.mIsPressedPositive;
Alarms.setAlarm(this, mId, mEnabled, mHour, mMinutes, mRepeatPref.getDaysOfWeek(), true, "", alert);
if (mEnabled) {
popAlarmSetToast(this.getApplicationContext(), mHour, mMinutes, mRepeatPref.getDaysOfWeek(), mId);
}
}</span>
/  public void bindView(View view, Context context, Cursor cursor) {
修改为
//ONTIM<mengshirui><2016-09-01> start效验开关机是否间隔少于5分钟if (verifyConflict(alarm)) {Toast.makeText(cont,(String.format(getResources().getString(R.string.interval_warning),5)) , Toast.LENGTH_SHORT).show();Alarms.enableAlarm(cont, alarm.mId, !isChecked);4000} else {SetAlarm.popAlarmSetToast(cont, alarm.mHour, alarm.mMinutes, alarm.mDaysOfWeek, alarm.mId);}//ONTIM<mengshirui><2016-09-01> end
//ONTIM<mengshirui><2016-09-01> startprivate boolean verifyConflict(Alarm mAlarm) {Alarm verAlarm;if (mAlarm.mId == 1) {verAlarm = Alarms.getAlarm(getContentResolver(), 2);} else {verAlarm = Alarms.getAlarm(getContentResolver(), 1);}if (verAlarm == null) {return false;}if (isRepeat(verAlarm, mAlarm)) {return true;} else {return false;}}/*** @param verAlarm* @param mAlarm* @return*/private boolean isRepeat(Alarm verAlarm, Alarm mAlarm) {boolean[] mDays = verAlarm.mDaysOfWeek.getBooleanArray();boolean[] days = mAlarm.mDaysOfWeek.getBooleanArray();boolean common = false;Calendar c = Calendar.getInstance();int today = (c.get(Calendar.DAY_OF_WEEK) + 5) % 7;boolean tenMore = (Math.abs((verAlarm.mHour * 60 + verAlarm.mMinutes) - (mAlarm.mHour * 60 + mAlarm.mMinutes)) > 5);for (int i = 0; i < days.length; i++) {for (int j = 0; j < mDays.length; j++) {if (i == j && days[i] == true && mDays[j] == true) {common = true;}}}if (!verAlarm.mEnabled) {return false;}if (verAlarm.mDaysOfWeek.getCoded() == 0 && mAlarm.mDaysOfWeek.getCoded() == 0) {if (tenMore)return false;elsereturn true;}if ((mAlarm.mDaysOfWeek.getCoded() == 0 && mDays[today]) || (verAlarm.mDaysOfWeek.getCoded() == 0 && days[today])) {if (tenMore)return false;elsereturn true;}if (common) {if (tenMore)return false;elsereturn true;}return false;}//ONTIM<mengshirui><2016-09-01> end}
修改 如果不可以设置的话 确定键置灰 (可以不设置)proprietary/packages/apps/SchedulePowerOnOff/src/com/mediatek/schpwronoff/RepeatPreference.java中修改
 <span style="color:#ff6666;">@Overrideprotected void onPrepareDialogBuilder(Builder builder) {CharSequence[] entries = getEntries();builder.setMultiChoiceItems(entries, mDaysOfWeek.getBooleanArray(),new DialogInterface.OnMultiChoiceClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which, boolean isChecked) {mNewDaysOfWeek.set(which, isChecked);}});}</span>
修改为
@Overrideprotected void onPrepareDialogBuilder(Builder builder) {CharSequence[] entries = getEntries();builder.setMultiChoiceItems(entries, mDaysOfWeek.getBooleanArray(),new DialogInterface.OnMultiChoiceClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which, boolean isChecked) {mNewDaysOfWeek.set(which, isChecked);//ONTIM<mengshirui><2016-09-01> startif(isAllFalse(mNewDaysOfWeek.getBooleanArray())){((AlertDialog) dialog).getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(false);}else {((AlertDialog) dialog).getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(true);}//ONTIM<mengshirui><2016-09-01> end}});}//ONTIM<mengshirui><2016-09-01> startprivate boolean isAllFalse(boolean[]  flag){for(boolean b : flag){if(b){return false;}}return true;}//ONTIM<mengshirui><2016-09-01> end
最后在vendor/mediatek/proprietary/packages/apps/SchedulePowerOnOff/src/com/mediatek/schpwronoff/AlarmClock.java
<span style="color:#ff6666;">if (isChecked) {SetAlarm.popAlarmSetToast(cont, alarm.mHour, alarm.mMinutes, alarm.mDaysOfWeek, alarm.mId);}</span>
修改为
 if (isChecked) {//ONTIM<mengshirui><2016-09-01> start效验开关机是否间隔少于5分钟if (verifyConflict(alarm)) {Toast.makeText(cont,(String.format(getResources().getString(R.string.interval_warning),5)) , Toast.LENGTH_SHORT).show();Alarms.enableAlarm(cont, alarm.mId, !isChecked);} else {SetAlarm.popAlarmSetToast(cont, alarm.mHour, alarm.mMinutes, alarm.mDaysOfWeek, alarm.mId);}//ONTIM<mengshirui><2016-09-01> end}
//ONTIM<mengshirui><2016-09-01> startprivate boolean verifyConflict(Alarm mAlarm) {Alarm verAlarm;if (mAlarm.mId == 1) {verAlarm = Alarms.getAlarm(getContentResolver(), 2);} else {verAlarm = Alarms.getAlarm(getContentResolver(), 1);}if (verAlarm == null) {return false;}if (isRepeat(verAlarm, mAlarm)) {return true;} else {return false;}}/*** @param verAlarm* @param mAlarm* @return*/private boolean isRepeat(Alarm verAlarm, Alarm mAlarm) {boolean[] mDays = verAlarm.mDaysOfWeek.getBooleanArray();boolean[] days = mAlarm.mDaysOfWeek.getBooleanArray();boolean common = false;Calendar c = Calendar.getInstance();int today = (c.get(Calendar.DAY_OF_WEEK) + 5) % 7;boolean tenMore = (Math.abs((verAlarm.mHour * 60 + verAlarm.mMinutes) - (mAlarm.mHour * 60 + mAlarm.mMinutes)) > 5);for (int i = 0; i < days.length; i++) {for (int j = 0; j < mDays.length; j++) {if (i == j && days[i] == true && mDays[j] == true) {common = true;}}}if (!verAlarm.mEnabled) {return false;}if (verAlarm.mDaysOfWeek.getCoded() == 0 && mAlarm.mDaysOfWeek.getCoded() == 0) {if (tenMore)return false;elsereturn true;}if ((mAlarm.mDaysOfWeek.getCoded() == 0 && mDays[today]) || (verAlarm.mDaysOfWeek.getCoded() == 0 && days[today])) {if (tenMore)return false;elsereturn true;}if (common) {if (tenMore)return false;elsereturn true;}return false;}//ONTIM<mengshirui><2016-09-01> end
有什么问题可以交流
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: