package com.android.settings.widget.buttons;
import android.content.Context;
import android.content.SharedPreferences;
import android.net.ConnectivityManager;
import android.provider.Settings;
import com.android.settings.R;
import com.android.settings.widget.SettingsAppWidgetProvider;
import com.android.settings.widget.WidgetSettings;
public class MobileDataButton extends WidgetButton {
public static final String MOBILE_DATA_CHANGED = "com.android.internal.telephony.MOBILE_DATA_CHANGED";
static MobileDataButton ownButton=null;
static boolean stateChangeRequest=false;
public static boolean getDataRomingEnabled(Context context) {
return Settings.Secure.getInt(context.getContentResolver(),
Settings.Secure.DATA_ROAMING,0) > 0;
}
/**
* Gets the state of data
*
* @return true if enabled.
*/
private static boolean getDataState(Context context) {
ConnectivityManager cm = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
return cm.getMobileDataEnabled();
}
/**
* Toggles the state of data.
*
*/
@Override
public void toggleState(Context context) {
boolean enabled = getDataState(context);
SharedPreferences preferences = context.getSharedPreferences(WidgetSettings.WIDGET_PREF_MAIN,
Context.MODE_PRIVATE);
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
if (enabled) {
cm.setMobileDataEnabled(false);
if (preferences.getBoolean(WidgetSettings.AUTO_DISABLE_3G, false)) {
NetworkModeButton.getInstance().toggleState(context,SettingsAppWidgetProvider.STATE_DISABLED);
}
} else {
if (preferences.getBoolean(WidgetSettings.AUTO_ENABLE_3G, false) &&
NetworkModeButton.getInstance().isDisabled(context)) {
SettingsAppWidgetProvider.logD("MobileData: Will enable 3G first");
NetworkModeButton.getInstance().toggleState(context,SettingsAppWidgetProvider.STATE_ENABLED);
stateChangeRequest=true;
} else {
cm.setMobileDataEnabled(true);
}
}
}
@Override
public void updateState(Context context,
SharedPreferences globalPreferences, int[] appWidgetIds) {
if (stateChangeRequest) {
currentIcon=R.drawable.ic_appwidget_settings_data_on;
if (globalPreferences.getBoolean(WidgetSettings.MONITOR_DATA_ROAMING, true) && getDataRomingEnabled(context)) {
currentState=SettingsAppWidgetProvider.STATE_DISABLED_RED;
} else {
currentState=SettingsAppWidgetProvider.STATE_INTERMEDIATE;
}
} else if (getDataState(context)) {
currentIcon=R.drawable.ic_appwidget_settings_data_on;
if (globalPreferences.getBoolean(WidgetSettings.MONITOR_DATA_ROAMING, true) && getDataRomingEnabled(context)) {
currentState=SettingsAppWidgetProvider.STATE_ENABLED_RED;
} else {
currentState=SettingsAppWidgetProvider.STATE_ENABLED;
}
} else {
currentIcon=R.drawable.ic_appwidget_settings_data_off;
if (globalPreferences.getBoolean(WidgetSettings.MONITOR_DATA_ROAMING, true) && getDataRomingEnabled(context)) {
currentState=SettingsAppWidgetProvider.STATE_DISABLED_RED;
} else {
currentState=SettingsAppWidgetProvider.STATE_DISABLED;
}
}
}
public static MobileDataButton getInstance() {
if (ownButton==null)
ownButton = new MobileDataButton();
return ownButton;
}
@Override
void initButton() {
buttonID=WidgetButton.BUTTON_DATA;
preferenceName=WidgetSettings.TOGGLE_DATA;
}
public void networkModeChanged(Context context, int networkMode) {
if (stateChangeRequest) {
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
cm.setMobileDataEnabled(true);
stateChangeRequest=false;
}
}
}