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

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

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



        15 seconds
        30 seconds
        1 minute
        2 minutes
        5 minutes
        10 minutes
        30 minutes
Never 


        
        15000
        
        30000
        
        60000
        
        120000
        
        300000
        
        600000
        
        1800000
0 

由于在资源文件中不能设置最大值,所以在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  start
	if (timeout < 1) {
            timeout = Integer.MAX_VALUE;
        }
	//add  code start for never sleep  end

        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显示就会出现错误如下图:

MTK在设置/显示下增加永不休眠选项_第1张图片               MTK在设置/显示下增加永不休眠选项_第2张图片

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();

	} 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 < values.length-1; 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

                                                                                                         MTK在设置/显示下增加永不休眠选项_第3张图片









你可能感兴趣的:(MTK)