package com.android.settings.widget.buttons; import android.app.PendingIntent; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.net.Uri; import android.view.View; import android.widget.ImageView; import android.widget.RemoteViews; import com.android.settings.R; import com.android.settings.widget.SettingsAppWidgetProvider; import com.android.settings.widget.WidgetSettings; public abstract class WidgetButton { public static final int BUTTON_WIFI = 0; public static final int BUTTON_BRIGHTNESS = 1; public static final int BUTTON_SYNC = 2; public static final int BUTTON_GPS = 3; public static final int BUTTON_BLUETOOTH = 4; public static final int BUTTON_DATA = 5; public static final int BUTTON_SOUND = 6; public static final int BUTTON_2G3G = 7; public static final int BUTTON_SCREEN_TIMEOUT = 8; public static final int BUTTON_AUTO_ROTATE = 9; public static final int BUTTON_FLASHLIGHT = 10; public static final int BUTTON_AIRPLANE = 11; public static final int BUTTON_LOCK_SCREEN = 12; public static final int BUTTON_WIFI_AP = 13; // This widget keeps track of two sets of states: // "3-state": STATE_DISABLED, STATE_ENABLED, STATE_INTERMEDIATE // "5-state": STATE_DISABLED, STATE_ENABLED, STATE_TURNING_ON, // STATE_TURNING_OFF, STATE_UNKNOWN /* * TO be defined by child classes */ //The name of the preference to be read String preferenceName = null; //Identifier for the Button for Intents int buttonID; int currentState; int currentIcon; public WidgetButton() { //SettingsAppWidgetProvider.logD("Creating WidgetButton "); initButton(); } abstract void initButton(); abstract public void toggleState(Context context); abstract public void updateState(Context context, SharedPreferences globalPreferences, int[] appWidgetIds); /** * Set the button visibility and register intent * * @param context * @param views * @param preferences * @param appWidgetId * @return */ public void updateView(Context context, RemoteViews views, SharedPreferences globalPreferences, SharedPreferences widgetPreferences, int appWidgetId) { int buttonPosi = widgetPreferences.getInt(preferenceName, -1); if (buttonPosi>0) { int buttonLayout=getButton(buttonPosi); Integer buttonSep=getSep(buttonPosi); int buttonIcon=getImg(buttonPosi); int buttonState=getInd(buttonPosi); //SettingsAppWidgetProvider.logD(">> updateView IN. Widget: "+appWidgetId+" Button:"+buttonID); //SettingsAppWidgetProvider.logD("updateView -> Is Visible"); //Set it visible views.setViewVisibility(buttonLayout, View.VISIBLE); if (buttonSep!=null) { views.setViewVisibility(buttonSep, View.VISIBLE); } //SettingsAppWidgetProvider.logD("updateView -> Will register Intent"); //Register the Intent views.setOnClickPendingIntent(buttonLayout, getLaunchPendingIntent( context, appWidgetId, buttonID)); //SettingsAppWidgetProvider.logD("updateView -> Set current Icon"); //Update icon to the one set by updateState views.setImageViewResource(buttonIcon,currentIcon); //SettingsAppWidgetProvider.logD("updateView -> Set current State"); views.setImageViewResource(buttonState, getButtonState(widgetPreferences)); } } /** * Creates PendingIntent to notify the widget of a button click. * * @param context * @param appWidgetId * @return */ private static PendingIntent getLaunchPendingIntent(Context context, int appWidgetId, int buttonId) { Intent launchIntent = new Intent(); launchIntent.setClass(context, SettingsAppWidgetProvider.class); launchIntent.addCategory(Intent.CATEGORY_ALTERNATIVE); launchIntent.setData(Uri.parse("custom:" + buttonId)); PendingIntent pi = PendingIntent.getBroadcast(context, 0 /* * no * requestCode */, launchIntent, 0 /* no flags */); return pi; } public int getButtonState(SharedPreferences widgetPreferences) { //preferences.getBoolean("useRoundCorners", true) boolean useRoundCorners = widgetPreferences.getBoolean(WidgetSettings.USE_ROUND_CORNERS, true); boolean useVerticalLayout = widgetPreferences.getBoolean(WidgetSettings.USE_VERTICAL, true); if (useRoundCorners) { if (isLeft(widgetPreferences)) { if (currentState == SettingsAppWidgetProvider.STATE_ENABLED) { return useVerticalLayout? R.drawable.appwidget_settings_ind_on_v_l : R.drawable.appwidget_settings_ind_on_l; } else if (currentState == SettingsAppWidgetProvider.STATE_DISABLED) { return useVerticalLayout? R.drawable.appwidget_settings_ind_off_v_l :R.drawable.appwidget_settings_ind_off_l; } else if (currentState == SettingsAppWidgetProvider.STATE_ENABLED_RED) { return useVerticalLayout? R.drawable.appwidget_settings_ind_on_red_v_l :R.drawable.appwidget_settings_ind_on_red_l; } else if (currentState == SettingsAppWidgetProvider.STATE_DISABLED_RED) { return useVerticalLayout? R.drawable.appwidget_settings_ind_mid_red_v_l :R.drawable.appwidget_settings_ind_mid_red_l; } else { return useVerticalLayout? R.drawable.appwidget_settings_ind_mid_v_l :R.drawable.appwidget_settings_ind_mid_l; } } else if (isRight(widgetPreferences)) { if (currentState == SettingsAppWidgetProvider.STATE_ENABLED) { return useVerticalLayout? R.drawable.appwidget_settings_ind_on_v_r : R.drawable.appwidget_settings_ind_on_r; } else if (currentState == SettingsAppWidgetProvider.STATE_DISABLED) { return useVerticalLayout? R.drawable.appwidget_settings_ind_off_v_r : R.drawable.appwidget_settings_ind_off_r; } else if (currentState == SettingsAppWidgetProvider.STATE_ENABLED_RED) { return useVerticalLayout? R.drawable.appwidget_settings_ind_on_red_v_r : R.drawable.appwidget_settings_ind_on_red_r; } else if (currentState == SettingsAppWidgetProvider.STATE_DISABLED_RED) { return useVerticalLayout? R.drawable.appwidget_settings_ind_mid_red_v_r : R.drawable.appwidget_settings_ind_mid_red_r; } else { return useVerticalLayout? R.drawable.appwidget_settings_ind_mid_v_r : R.drawable.appwidget_settings_ind_mid_r; } } } if (currentState == SettingsAppWidgetProvider.STATE_ENABLED) { return useVerticalLayout? R.drawable.appwidget_settings_ind_on_v_c :R.drawable.appwidget_settings_ind_on_c; } else if (currentState == SettingsAppWidgetProvider.STATE_DISABLED) { return useVerticalLayout? R.drawable.appwidget_settings_ind_off_v_c : R.drawable.appwidget_settings_ind_off_c; } else if (currentState == SettingsAppWidgetProvider.STATE_ENABLED_RED) { return useVerticalLayout? R.drawable.appwidget_settings_ind_on_red_v_c : R.drawable.appwidget_settings_ind_on_red_c; } else if (currentState == SettingsAppWidgetProvider.STATE_DISABLED_RED) { return useVerticalLayout? R.drawable.appwidget_settings_ind_mid_red_v_c : R.drawable.appwidget_settings_ind_mid_red_c; } else { return useVerticalLayout? R.drawable.appwidget_settings_ind_mid_v_c : R.drawable.appwidget_settings_ind_mid_c; } } private boolean isRight(SharedPreferences widgetPreferences) { return widgetPreferences.getInt(WidgetSettings.LAST_BUTTON, 6)==widgetPreferences.getInt(preferenceName, -1); } private boolean isLeft(SharedPreferences widgetPreferences) { return widgetPreferences.getInt(preferenceName, -1)==1; } protected boolean isVisible(SharedPreferences preferences, int appWidgetId) { return preferences.getInt(preferenceName, -1)!=-1; } public Integer getSep(int posi) { switch (posi) { case 1: return R.id.sep_w1; case 2: return R.id.sep_w2; case 3: return R.id.sep_w3; case 4: return R.id.sep_w4; case 5: return R.id.sep_w5; case 6: return R.id.sep_w6; case 7: return R.id.sep_w7; case 8: return R.id.sep_w8; case 9: return R.id.sep_w9; // case 10: //No return as this will be the last button } return null; } public int getInd(int posi) { switch (posi) { case 1: return R.id.ind_w1; case 2: return R.id.ind_w2; case 3: return R.id.ind_w3; case 4: return R.id.ind_w4; case 5: return R.id.ind_w5; case 6: return R.id.ind_w6; case 7: return R.id.ind_w7; case 8: return R.id.ind_w8; case 9: return R.id.ind_w9; case 10:return R.id.ind_w10; } return -1; } public int getImg(int posi) { switch (posi) { case 1: return R.id.img_w1; case 2: return R.id.img_w2; case 3: return R.id.img_w3; case 4: return R.id.img_w4; case 5: return R.id.img_w5; case 6: return R.id.img_w6; case 7: return R.id.img_w7; case 8: return R.id.img_w8; case 9: return R.id.img_w9; case 10:return R.id.img_w10; } return -1; } public int getButton(int posi) { switch (posi) { case 1: return R.id.btn_w1; case 2: return R.id.btn_w2; case 3: return R.id.btn_w3; case 4: return R.id.btn_w4; case 5: return R.id.btn_w5; case 6: return R.id.btn_w6; case 7: return R.id.btn_w7; case 8: return R.id.btn_w8; case 9: return R.id.btn_w9; case 10:return R.id.btn_w10; } return -1; } }