package au.id.teda.broadband.usage.activity;
import android.preference.Preference;
import android.preference.PreferenceScreen;
import android.widget.CheckBox;
import au.id.teda.broadband.usage.helper.AccountInfoHelper;
import com.actionbarsherlock.app.SherlockPreferenceActivity;
import com.actionbarsherlock.view.MenuItem;
import android.accounts.Account;
import android.accounts.AccountManager;
import android.content.ContentResolver;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
import android.os.Bundle;
import android.preference.ListPreference;
import android.preference.PreferenceManager;
import au.id.teda.broadband.usage.R;
import au.id.teda.broadband.usage.authenticator.AccountAuthenticator;
import au.id.teda.broadband.usage.syncadapter.DummyContentProvider;
// For +3.0 this should be preference fragment
public class SettingsActivity extends SherlockPreferenceActivity implements OnSharedPreferenceChangeListener {
//private static final String DEBUG_TAG = BaseActivity.DEBUG_TAG;
public static final long HALF_HOUR = 60 * 30;
public static final long HOUR = HALF_HOUR * 2;
public static final long THREE_HOURS = HOUR * 3;
public static final long SIX_HOURS = THREE_HOURS * 2;
public static final long TWELVE_HOURS = SIX_HOURS * 2;
public static final long TWENTY_FOUR_HOURS = TWELVE_HOURS * 2;
// Activity shared preferences
SharedPreferences mSettings;
private AccountInfoHelper mInfo;
private ListPreference mFreqListPreference;
private ListPreference mDaysToGoListPreference;
private ListPreference mAnyTimeNearPreference;
private ListPreference mPeakNearPreference;
private ListPreference mOffpeakNearPreference;
private CheckBox mAnyTimeOverCheckBox;
private CheckBox mPeakOverCheckBox;
private CheckBox mOffpeakOverCheckBox;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Loads the XML preferences file.
addPreferencesFromResource(R.xml.preferences);
mSettings = PreferenceManager.getDefaultSharedPreferences(this);
mFreqListPreference = (ListPreference) getPreferenceScreen().findPreference(this.getString(R.string.pref_sync_freq_key));
mDaysToGoListPreference = (ListPreference) getPreferenceScreen().findPreference(this.getString(R.string.pref_notify_days2go_array_key));
mAnyTimeNearPreference = (ListPreference) getPreferenceScreen().findPreference(this.getString(R.string.pref_notify_anytime_near_array_key));
mPeakNearPreference = (ListPreference) getPreferenceScreen().findPreference(this.getString(R.string.pref_notify_peak_near_array_key));
mOffpeakNearPreference = (ListPreference) getPreferenceScreen().findPreference(this.getString(R.string.pref_notify_offpeak_near_array_key));
// Show home (up) button on action bar
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
Preference mAnytimeCheckBox = findPreference(this.getString(R.string.pref_notify_anytime_over_checkbox_key));
Preference mPeakCheckBox = findPreference(this.getString(R.string.pref_notify_peak_over_checkbox_key));
Preference mOffpeakCheckBox = findPreference(this.getString(R.string.pref_notify_offpeak_over_checkbox_key));
PreferenceScreen preferenceScreen = getPreferenceScreen();
mInfo = new AccountInfoHelper(this);
if (mInfo.isAccountAnyTime()){
preferenceScreen.removePreference(mPeakCheckBox);
preferenceScreen.removePreference(mPeakNearPreference);
preferenceScreen.removePreference(mOffpeakCheckBox);
preferenceScreen.removePreference(mOffpeakNearPreference);
} else {
preferenceScreen.removePreference(mAnytimeCheckBox);
preferenceScreen.removePreference(mAnyTimeNearPreference);
}
}
@Override
protected void onResume() {
super.onResume();
// Registers a callback to be invoked whenever a user changes a preference.
getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
setListPreferenceSummaries();
}
private void setListPreferenceSummaries() {
mFreqListPreference.setSummary(mFreqListPreference.getEntry());
mDaysToGoListPreference.setSummary(mDaysToGoListPreference.getEntry());
mAnyTimeNearPreference.setSummary(mAnyTimeNearPreference.getEntry());
mPeakNearPreference.setSummary(mPeakNearPreference.getEntry());
mOffpeakNearPreference.setSummary(mOffpeakNearPreference.getEntry());
}
@Override
protected void onPause() {
super.onPause();
// Unregisters the listener set in onResume().
// It's best practice to unregister listeners when your app isn't using them to cut down on
// unnecessary system overhead. You do this in onPause().
getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);
}
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
setListPreferenceSummaries();
if (key.equals(this.getString(R.string.pref_sync_freq_key))){
setSyncFrequency(key);
mFreqListPreference.setSummary(mFreqListPreference.getEntry());
}
}
// Handle options menu clicks
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
// This is called when the Home (Up) button is pressed in the Action Bar.
Intent mMainActivityInetnt = new Intent(this, MainActivity.class);
mMainActivityInetnt.addFlags(
Intent.FLAG_ACTIVITY_CLEAR_TOP |
Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(mMainActivityInetnt);
finish();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
private static Account getAccount(AccountManager accountManager) {
Account[] accounts = accountManager.getAccountsByType(AccountAuthenticator.ACCOUNT_TYPE);
Account account;
if (accounts.length > 0) {
account = accounts[0];
} else {
account = null;
}
return account;
}
/**
* @param key
*/
private void setSyncFrequency(String key) {
long freq;
String pref_value = mSettings.getString(key, "twenty_four_hour");
if (pref_value.equals("half_hour")){
freq = HALF_HOUR;
} else if (pref_value.equals("hour")){
freq = HOUR;
} else if (pref_value.equals("three_hours")){
freq = THREE_HOURS;
} else if (pref_value.equals("six_hours")){
freq = SIX_HOURS;
} else if (pref_value.equals("twelve_hours")){
freq = TWELVE_HOURS;
} else {
freq = TWENTY_FOUR_HOURS;
}
// Get accounts based on account type
AccountManager accountManager = AccountManager.get(this);
Account account = getAccount(accountManager);
ContentResolver.addPeriodicSync(account, DummyContentProvider.PROVIDER, new Bundle(), freq);
}
}