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

来源:互联网 发布:java.util在哪个jar包 编辑:程序博客网 时间:2024/05/16 08:48

之前测试提了一个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>

修改为

//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> start    private 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;            else                return true;        }        if ((mAlarm.mDaysOfWeek.getCoded() == 0 && mDays[today]) || (verAlarm.mDaysOfWeek.getCoded() == 0 && days[today])) {            if (tenMore)                return false;            else                return true;        }        if (common) {            if (tenMore)                return false;            else                return true;        }        return false;    }    //ONTIM<mengshirui><2016-09-01> end}

修改 如果不可以设置的话 确定键置灰 (可以不设置)

proprietary/packages/apps/SchedulePowerOnOff/src/com/mediatek/schpwronoff/RepeatPreference.java
中修改
 <span style="color:#ff6666;">@Override    protected void onPrepareDialogBuilder(Builder builder) {        CharSequence[] entries = getEntries();        builder.setMultiChoiceItems(entries, mDaysOfWeek.getBooleanArray(),                new DialogInterface.OnMultiChoiceClickListener() {                    @Override                    public void onClick(DialogInterface dialog, int which, boolean isChecked) {                        mNewDaysOfWeek.set(which, isChecked);                    }                });    }</span>

修改为

@Override    protected void onPrepareDialogBuilder(Builder builder) {        CharSequence[] entries = getEntries();        builder.setMultiChoiceItems(entries, mDaysOfWeek.getBooleanArray(),                new DialogInterface.OnMultiChoiceClickListener() {                    @Override                    public void onClick(DialogInterface dialog, int which, boolean isChecked) {                        mNewDaysOfWeek.set(which, isChecked);                        //ONTIM<mengshirui><2016-09-01> start                        if(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> start    private 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> start    private 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;            else                return true;        }        if ((mAlarm.mDaysOfWeek.getCoded() == 0 && mDays[today]) || (verAlarm.mDaysOfWeek.getCoded() == 0 && days[today])) {            if (tenMore)                return false;            else                return true;        }        if (common) {            if (tenMore)                return false;            else                return true;        }        return false;    }    //ONTIM<mengshirui><2016-09-01> end


有什么问题可以交流



1 0
原创粉丝点击