package com.android.settings.widget.buttons; import android.content.Context; import android.content.SharedPreferences; import android.provider.Settings; import com.android.settings.R; import com.android.settings.widget.SettingsAppWidgetProvider; import com.android.settings.widget.WidgetSettings; public class ScreenTimeoutButton extends WidgetButton { public static final int SCREEN_MINIMUM_TIMEOUT = 15000; public static final int SCREEN_LOW_TIMEOUT = 30000; public static final int SCREEN_NORMAL_TIMEOUT = 60000; public static final int SCREEN_HI_TIMEOUT = 120000; public static final int SCREEN_MAX_TIMEOUT = 300000; private static final int MODE_15_60_300= 0; private static final int MODE_30_120_300 = 1; private static final int DEFAULT_SETTTING = 0; static ScreenTimeoutButton ownButton=null; private int currentMode; public static int getScreenTtimeout(Context context) { return Settings.System.getInt( context.getContentResolver(), Settings.System.SCREEN_OFF_TIMEOUT, 0); } public void toggleState(Context context) { int screentimeout=getScreenTtimeout(context); if (screentimeout<SCREEN_MINIMUM_TIMEOUT) { if (currentMode==MODE_15_60_300) { screentimeout=SCREEN_MINIMUM_TIMEOUT; } else { screentimeout=SCREEN_LOW_TIMEOUT; } } else if (screentimeout<SCREEN_LOW_TIMEOUT) { if (currentMode==MODE_15_60_300) { screentimeout=SCREEN_NORMAL_TIMEOUT; } else { screentimeout=SCREEN_LOW_TIMEOUT; } } else if (screentimeout<SCREEN_NORMAL_TIMEOUT) { if (currentMode==MODE_15_60_300) { screentimeout=SCREEN_NORMAL_TIMEOUT; } else { screentimeout=SCREEN_HI_TIMEOUT; } } else if (screentimeout<SCREEN_HI_TIMEOUT) { if (currentMode==MODE_15_60_300) { screentimeout=SCREEN_MAX_TIMEOUT; } else { screentimeout=SCREEN_HI_TIMEOUT; } } else if (screentimeout<SCREEN_MAX_TIMEOUT) { screentimeout=SCREEN_MAX_TIMEOUT; } else if (currentMode==MODE_30_120_300) { screentimeout=SCREEN_LOW_TIMEOUT; } else { screentimeout=SCREEN_MINIMUM_TIMEOUT; } Settings.System.putInt( context.getContentResolver(), Settings.System.SCREEN_OFF_TIMEOUT, screentimeout); } public static ScreenTimeoutButton getInstance() { if (ownButton==null) ownButton = new ScreenTimeoutButton(); return ownButton; } @Override void initButton() { buttonID=WidgetButton.BUTTON_SCREEN_TIMEOUT; preferenceName=WidgetSettings.TOGGLE_SCREEN_TIMEOUT; } @Override public void updateState(Context context, SharedPreferences globalPreferences, int[] appWidgetIds) { currentMode=globalPreferences.getInt(WidgetSettings.SCREEN_TIMEOUT_SPINNER, DEFAULT_SETTTING); int timeout=getScreenTtimeout(context); //TODO: ADD support for the possible values if (timeout <=SCREEN_LOW_TIMEOUT) { currentIcon=R.drawable.ic_appwidget_settings_screen_timeout_off; currentState=SettingsAppWidgetProvider.STATE_DISABLED; } else if (timeout <=SCREEN_HI_TIMEOUT) { currentIcon=R.drawable.ic_appwidget_settings_screen_timeout_off; currentState=SettingsAppWidgetProvider.STATE_INTERMEDIATE; } else { currentIcon=R.drawable.ic_appwidget_settings_screen_timeout_on; currentState=SettingsAppWidgetProvider.STATE_ENABLED; } } }