package com.android.settings.widget.buttons;
import android.content.ContentResolver;
import android.content.Context;
import android.content.SharedPreferences;
import android.net.ConnectivityManager;
import com.android.settings.R;
import com.android.settings.widget.SettingsAppWidgetProvider;
import com.android.settings.widget.WidgetSettings;
public class SyncButton extends WidgetButton {
static SyncButton ownButton=null;
/**
* Toggle auto-sync
*
* @param context
*/
public void toggleState(Context context) {
ConnectivityManager connManager = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
boolean backgroundData = getBackgroundDataState(context);
boolean sync = ContentResolver.getMasterSyncAutomatically();
// four cases to handle:
// setting toggled from off to on:
// 1. background data was off, sync was off: turn on both
if (!backgroundData && !sync) {
connManager.setBackgroundDataSetting(true);
ContentResolver.setMasterSyncAutomatically(true);
}
// 2. background data was off, sync was on: turn on background data
if (!backgroundData && sync) {
connManager.setBackgroundDataSetting(true);
}
// 3. background data was on, sync was off: turn on sync
if (backgroundData && !sync) {
ContentResolver.setMasterSyncAutomatically(true);
}
// setting toggled from on to off:
// 4. background data was on, sync was on: turn off sync
if (backgroundData && sync) {
ContentResolver.setMasterSyncAutomatically(false);
}
}
public void toggleState(Context context, int newState) {
if(getSync(context) && newState==SettingsAppWidgetProvider.STATE_DISABLED) {
toggleState(context);
} else if(!getSync(context) && newState==SettingsAppWidgetProvider.STATE_ENABLED) {
toggleState(context);
}
}
/**
* Gets the state of background data.
*
* @param context
* @return true if enabled
*/
private static boolean getBackgroundDataState(Context context) {
ConnectivityManager connManager = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
return connManager.getBackgroundDataSetting();
}
/**
* Gets the state of auto-sync.
*
* @param context
* @return true if enabled
*/
private static boolean getSync(Context context) {
boolean backgroundData = getBackgroundDataState(context);
boolean sync = ContentResolver.getMasterSyncAutomatically();
return backgroundData && sync;
}
public void updateState(Context context,
SharedPreferences globalPreferences, int[] appWidgetIds) {
if (getSync(context)) {
currentIcon=R.drawable.ic_appwidget_settings_sync_on;
currentState=SettingsAppWidgetProvider.STATE_ENABLED;
} else {
currentIcon=R.drawable.ic_appwidget_settings_sync_off;
currentState=SettingsAppWidgetProvider.STATE_DISABLED;
}
}
public static SyncButton getInstance() {
if (ownButton==null)
ownButton = new SyncButton();
return ownButton;
}
@Override
void initButton() {
buttonID=WidgetButton.BUTTON_SYNC;
preferenceName=WidgetSettings.TOGGLE_SYNC;
}
}