MTK在设置/显示下增加永不休眠选项

来源:互联网 发布:淘宝店铺图片大全 编辑:程序博客网 时间:2024/05/21 22:33

一、首先在资源文件中加入选项

       在package/app/Settings/res/values/arrays.xml文件中加入永不休眠选项

<!-- Display settings.  The delay in inactivity before the screen is turned off. These are shown in a list dialog. --><string-array name="screen_timeout_entries">        <item>15 seconds</item>        <item>30 seconds</item>        <item>1 minute</item>        <item>2 minutes</item>        <item>5 minutes</item>        <item>10 minutes</item>        <item>30 minutes</item><item>Never</item> <!--add code --></span></string-array>

<string-array name="screen_timeout_values" translatable="false">        <!-- Do not translate. -->        <item>15000</item>        <!-- Do not translate. -->        <item>30000</item>        <!-- Do not translate. -->        <item>60000</item>        <!-- Do not translate. -->        <item>120000</item>        <!-- Do not translate. -->        <item>300000</item>        <!-- Do not translate. -->        <item>600000</item>        <!-- Do not translate. -->        <item>1800000</item><item>0</item> <!--add code  --></span></string-array>

由于在资源文件中不能设置最大值,所以在Never选项对应的值这里我设置为 0;这个0仅作为标记,后面在代码中进行判断再替换它的值。


二、在framework/base/services/core/java/com/android/server/power/PowerManagerService.java文件中加入判断选项

private int getScreenOffTimeoutLocked(int sleepTimeout) {        int timeout = mScreenOffTimeoutSetting;        if (isMaximumScreenOffTimeoutFromDeviceAdminEnforcedLocked()) {            timeout = Math.min(timeout, mMaximumScreenOffTimeoutFromDeviceAdmin);        }        if (mUserActivityTimeoutOverrideFromWindowManager >= 0) {            timeout = (int)Math.min(timeout, mUserActivityTimeoutOverrideFromWindowManager);        }        if (sleepTimeout >= 0) {            timeout = Math.min(timeout, sleepTimeout);        }//add  code start for never sleep  startif (timeout < 1) {            timeout = Integer.MAX_VALUE;        }//add  code start for never sleep  end</span>        if (mUserActivityTimeoutMin) {            timeout = (int)Math.min(timeout, mUserActivityTimeoutOverrideFromCMD);        }        return Math.max(timeout, mMinimumScreenOffTimeoutConfig);    }

由于time的值的获得是由:

int timeout = mScreenOffTimeoutSetting;


 而mScreenOffTimeoutSetting的值的获得是由:

mScreenOffTimeoutSetting = Settings.System.getIntForUser(resolver,                Settings.System.SCREEN_OFF_TIMEOUT, DEFAULT_SCREEN_OFF_TIMEOUT,                UserHandle.USER_CURRENT);
因此,timeout的值就是读取到资源文件的值;当timeout的值为0的时候,也就是永不休眠选项。把这个值修改成最大值,手机就不会休眠了。


三、修改package/app/Settings/src/com/android/settings/DisplaySettings.java选项的summary的值

如果仅仅修改上面的代码,休眠选项的summary显示就会出现错误如下图:

               

private void updateTimeoutPreferenceDescription(long currentTimeout) {        ListPreference preference = mScreenTimeoutPreference;        String summary;        if (currentTimeout < 0) {            // Unsupported value            summary = "";        }else if (currentTimeout == 0){    final CharSequence[] entries = preference.getEntries();            final CharSequence[] values = preference.getEntryValues();    summary = entries[values.length - 1].toString();</span>} else{            final CharSequence[] entries = preference.getEntries();            final CharSequence[] values = preference.getEntryValues();            if (entries == null || entries.length == 0) {                summary = "";            } else {                int best = 0;                for (int i = 0; i < <span style="color:#ff0000;">values.length-1</span>; i++) {                    long timeout = Long.parseLong(values[i].toString());                    if (currentTimeout >= timeout) {                        best = i;                    }                    }                summary = preference.getContext().getString(R.string.screen_timeout_summary,                        entries[best]);            }        }        preference.setSummary(summary);    }

        首先应该判断currentTimeout的值是不是0,如果是0就是永不休眠选项,那么对应的summary的值应该是entries[values.length - 1].toString();  这个只是修改永不休眠选项的summary的值,由于我们把永不休眠选项的值设置为0。并且放在screen_timeout_values的最后一个item,因此每次循环到最后,当 i = values.length-1 的时候timeout的是值都为0;因此currentTimeout 永远大于或者等于 timeout,因此best  = values.length-1,就造成了上图的现象,因为上面我们已经处理了永不休眠选项的summary,因此把 i<values.length 改成   i< values.length-1  ,这个时候只需要不循环到最后那个item就行了。此时任务完成 bingo:

                                                                                                         









1 0
原创粉丝点击