|
|
/*
|
|
|
* Copyright © 2013 – 2016 Ricki Hirner (bitfire web engineering).
|
|
|
* All rights reserved. This program and the accompanying materials
|
|
|
* are made available under the terms of the GNU Public License v3.0
|
|
|
* which accompanies this distribution, and is available at
|
|
|
* http://www.gnu.org/licenses/gpl.html
|
|
|
*/
|
|
|
|
|
|
package at.bitfire.davdroid.ui;
|
|
|
|
|
|
import android.accounts.Account;
|
|
|
import android.content.Intent;
|
|
|
import android.os.Bundle;
|
|
|
import android.provider.CalendarContract;
|
|
|
import android.provider.ContactsContract;
|
|
|
import android.support.v4.app.NavUtils;
|
|
|
import android.support.v7.app.AppCompatActivity;
|
|
|
import android.support.v7.preference.EditTextPreference;
|
|
|
import android.support.v7.preference.ListPreference;
|
|
|
import android.support.v7.preference.Preference;
|
|
|
import android.support.v7.preference.PreferenceFragmentCompat;
|
|
|
import android.support.v7.preference.SwitchPreferenceCompat;
|
|
|
import android.text.TextUtils;
|
|
|
import android.view.MenuItem;
|
|
|
|
|
|
import java.util.logging.Level;
|
|
|
|
|
|
import at.bitfire.davdroid.AccountSettings;
|
|
|
import at.bitfire.davdroid.App;
|
|
|
import at.bitfire.davdroid.InvalidAccountException;
|
|
|
import at.bitfire.davdroid.R;
|
|
|
import at.bitfire.ical4android.TaskProvider;
|
|
|
import at.bitfire.vcard4android.GroupMethod;
|
|
|
|
|
|
public class AccountSettingsActivity extends AppCompatActivity {
|
|
|
public final static String EXTRA_ACCOUNT = "account";
|
|
|
|
|
|
private Account account;
|
|
|
|
|
|
@Override
|
|
|
protected void onCreate(Bundle savedInstanceState) {
|
|
|
super.onCreate(savedInstanceState);
|
|
|
|
|
|
account = getIntent().getParcelableExtra(EXTRA_ACCOUNT);
|
|
|
setTitle(getString(R.string.settings_title, account.name));
|
|
|
|
|
|
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
|
|
|
|
|
if (savedInstanceState == null)
|
|
|
getSupportFragmentManager().beginTransaction()
|
|
|
.replace(android.R.id.content, AccountSettingsFragment.instantiate(this, AccountSettingsFragment.class.getName(), getIntent().getExtras()))
|
|
|
.commit();
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
public boolean onOptionsItemSelected(MenuItem item) {
|
|
|
if (item.getItemId() == android.R.id.home) {
|
|
|
Intent intent = new Intent(this, AccountActivity.class);
|
|
|
intent.putExtra(AccountActivity.EXTRA_ACCOUNT, account);
|
|
|
NavUtils.navigateUpTo(this, intent);
|
|
|
return true;
|
|
|
} else
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
|
|
|
public static class AccountSettingsFragment extends PreferenceFragmentCompat {
|
|
|
Account account;
|
|
|
|
|
|
@Override
|
|
|
public void onCreate(Bundle savedInstanceState) {
|
|
|
super.onCreate(savedInstanceState);
|
|
|
|
|
|
account = getArguments().getParcelable(EXTRA_ACCOUNT);
|
|
|
refresh();
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
public void onCreatePreferences(Bundle bundle, String s) {
|
|
|
addPreferencesFromResource(R.xml.settings_account);
|
|
|
}
|
|
|
|
|
|
public void refresh() {
|
|
|
final AccountSettings settings;
|
|
|
|
|
|
try {
|
|
|
settings = new AccountSettings(getActivity(), account);
|
|
|
} catch(InvalidAccountException e) {
|
|
|
App.log.log(Level.INFO, "Account is invalid or doesn't exist (anymore)", e);
|
|
|
getActivity().finish();
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
// category: authentication
|
|
|
final EditTextPreference prefUserName = (EditTextPreference)findPreference("username");
|
|
|
prefUserName.setSummary(settings.username());
|
|
|
prefUserName.setText(settings.username());
|
|
|
prefUserName.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
|
|
|
@Override
|
|
|
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
|
|
settings.username((String)newValue);
|
|
|
refresh();
|
|
|
return false;
|
|
|
}
|
|
|
});
|
|
|
|
|
|
final EditTextPreference prefPassword = (EditTextPreference)findPreference("password");
|
|
|
prefPassword.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
|
|
|
@Override
|
|
|
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
|
|
settings.password((String)newValue);
|
|
|
refresh();
|
|
|
return false;
|
|
|
}
|
|
|
});
|
|
|
|
|
|
// category: synchronization
|
|
|
final ListPreference prefSyncContacts = (ListPreference)findPreference("sync_interval_contacts");
|
|
|
final Long syncIntervalContacts = settings.getSyncInterval(ContactsContract.AUTHORITY);
|
|
|
if (syncIntervalContacts != null) {
|
|
|
prefSyncContacts.setValue(syncIntervalContacts.toString());
|
|
|
if (syncIntervalContacts == AccountSettings.SYNC_INTERVAL_MANUALLY)
|
|
|
prefSyncContacts.setSummary(R.string.settings_sync_summary_manually);
|
|
|
else
|
|
|
prefSyncContacts.setSummary(getString(R.string.settings_sync_summary_periodically, syncIntervalContacts / 60));
|
|
|
prefSyncContacts.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
|
|
|
@Override
|
|
|
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
|
|
settings.setSyncInterval(ContactsContract.AUTHORITY, Long.parseLong((String)newValue));
|
|
|
refresh();
|
|
|
return false;
|
|
|
}
|
|
|
});
|
|
|
} else {
|
|
|
prefSyncContacts.setEnabled(false);
|
|
|
prefSyncContacts.setSummary(R.string.settings_sync_summary_not_available);
|
|
|
}
|
|
|
|
|
|
final ListPreference prefSyncCalendars = (ListPreference)findPreference("sync_interval_calendars");
|
|
|
final Long syncIntervalCalendars = settings.getSyncInterval(CalendarContract.AUTHORITY);
|
|
|
if (syncIntervalCalendars != null) {
|
|
|
prefSyncCalendars.setValue(syncIntervalCalendars.toString());
|
|
|
if (syncIntervalCalendars == AccountSettings.SYNC_INTERVAL_MANUALLY)
|
|
|
prefSyncCalendars.setSummary(R.string.settings_sync_summary_manually);
|
|
|
else
|
|
|
prefSyncCalendars.setSummary(getString(R.string.settings_sync_summary_periodically, syncIntervalCalendars / 60));
|
|
|
prefSyncCalendars.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
|
|
|
@Override
|
|
|
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
|
|
settings.setSyncInterval(CalendarContract.AUTHORITY, Long.parseLong((String)newValue));
|
|
|
refresh();
|
|
|
return false;
|
|
|
}
|
|
|
});
|
|
|
} else {
|
|
|
prefSyncCalendars.setEnabled(false);
|
|
|
prefSyncCalendars.setSummary(R.string.settings_sync_summary_not_available);
|
|
|
}
|
|
|
|
|
|
final ListPreference prefSyncTasks = (ListPreference)findPreference("sync_interval_tasks");
|
|
|
final Long syncIntervalTasks = settings.getSyncInterval(TaskProvider.ProviderName.OpenTasks.authority);
|
|
|
if (syncIntervalTasks != null) {
|
|
|
prefSyncTasks.setValue(syncIntervalTasks.toString());
|
|
|
if (syncIntervalTasks == AccountSettings.SYNC_INTERVAL_MANUALLY)
|
|
|
prefSyncTasks.setSummary(R.string.settings_sync_summary_manually);
|
|
|
else
|
|
|
prefSyncTasks.setSummary(getString(R.string.settings_sync_summary_periodically, syncIntervalTasks / 60));
|
|
|
prefSyncTasks.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
|
|
|
@Override
|
|
|
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
|
|
settings.setSyncInterval(TaskProvider.ProviderName.OpenTasks.authority, Long.parseLong((String)newValue));
|
|
|
refresh();
|
|
|
return false;
|
|
|
}
|
|
|
});
|
|
|
} else {
|
|
|
prefSyncTasks.setEnabled(false);
|
|
|
prefSyncTasks.setSummary(R.string.settings_sync_summary_not_available);
|
|
|
}
|
|
|
|
|
|
final SwitchPreferenceCompat prefWifiOnly = (SwitchPreferenceCompat)findPreference("sync_wifi_only");
|
|
|
prefWifiOnly.setChecked(settings.getSyncWifiOnly());
|
|
|
prefWifiOnly.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
|
|
|
@Override
|
|
|
public boolean onPreferenceChange(Preference preference, Object wifiOnly) {
|
|
|
settings.setSyncWiFiOnly((Boolean)wifiOnly);
|
|
|
refresh();
|
|
|
return false;
|
|
|
}
|
|
|
});
|
|
|
|
|
|
final EditTextPreference prefWifiOnlySSID = (EditTextPreference)findPreference("sync_wifi_only_ssid");
|
|
|
final String onlySSID = settings.getSyncWifiOnlySSID();
|
|
|
prefWifiOnlySSID.setText(onlySSID);
|
|
|
if (onlySSID != null)
|
|
|
prefWifiOnlySSID.setSummary(getString(R.string.settings_sync_wifi_only_ssid_on, onlySSID));
|
|
|
else
|
|
|
prefWifiOnlySSID.setSummary(R.string.settings_sync_wifi_only_ssid_off);
|
|
|
prefWifiOnlySSID.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
|
|
|
@Override
|
|
|
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
|
|
String ssid = (String)newValue;
|
|
|
settings.setSyncWifiOnlySSID(!TextUtils.isEmpty(ssid) ? ssid : null);
|
|
|
refresh();
|
|
|
return false;
|
|
|
}
|
|
|
});
|
|
|
|
|
|
// category: CardDAV
|
|
|
final SwitchPreferenceCompat prefRFC6868 = (SwitchPreferenceCompat)findPreference("vcard_rfc6868");
|
|
|
if (syncIntervalContacts != null) {
|
|
|
prefRFC6868.setChecked(settings.getVCardRFC6868());
|
|
|
prefRFC6868.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
|
|
|
@Override
|
|
|
public boolean onPreferenceChange(Preference preference, Object o) {
|
|
|
settings.setVCardRFC6868((Boolean)o);
|
|
|
refresh();
|
|
|
return false;
|
|
|
}
|
|
|
});
|
|
|
} else
|
|
|
prefRFC6868.setEnabled(false);
|
|
|
|
|
|
final ListPreference prefGroupMethod = (ListPreference)findPreference("contact_group_method");
|
|
|
if (syncIntervalContacts != null) {
|
|
|
prefGroupMethod.setValue(settings.getGroupMethod().name());
|
|
|
prefGroupMethod.setSummary(prefGroupMethod.getEntry());
|
|
|
prefGroupMethod.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
|
|
|
@Override
|
|
|
public boolean onPreferenceChange(Preference preference, Object o) {
|
|
|
String name = (String)o;
|
|
|
settings.setGroupMethod(GroupMethod.valueOf(name));
|
|
|
refresh();
|
|
|
return false;
|
|
|
}
|
|
|
});
|
|
|
} else
|
|
|
prefGroupMethod.setEnabled(false);
|
|
|
|
|
|
// category: CalDAV
|
|
|
final EditTextPreference prefTimeRangePastDays = (EditTextPreference)findPreference("time_range_past_days");
|
|
|
if (syncIntervalCalendars != null) {
|
|
|
Integer pastDays = settings.getTimeRangePastDays();
|
|
|
if (pastDays != null) {
|
|
|
prefTimeRangePastDays.setText(pastDays.toString());
|
|
|
prefTimeRangePastDays.setSummary(getResources().getQuantityString(R.plurals.settings_sync_time_range_past_days, pastDays, pastDays));
|
|
|
} else {
|
|
|
prefTimeRangePastDays.setText(null);
|
|
|
prefTimeRangePastDays.setSummary(R.string.settings_sync_time_range_past_none);
|
|
|
}
|
|
|
prefTimeRangePastDays.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
|
|
|
@Override
|
|
|
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
|
|
int days;
|
|
|
try {
|
|
|
days = Integer.parseInt((String)newValue);
|
|
|
} catch(NumberFormatException ignored) {
|
|
|
days = -1;
|
|
|
}
|
|
|
settings.setTimeRangePastDays(days < 0 ? null : days);
|
|
|
refresh();
|
|
|
return false;
|
|
|
}
|
|
|
});
|
|
|
} else
|
|
|
prefTimeRangePastDays.setEnabled(false);
|
|
|
|
|
|
final SwitchPreferenceCompat prefManageColors = (SwitchPreferenceCompat)findPreference("manage_calendar_colors");
|
|
|
if (syncIntervalCalendars != null || syncIntervalTasks != null) {
|
|
|
prefManageColors.setChecked(settings.getManageCalendarColors());
|
|
|
prefManageColors.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
|
|
|
@Override
|
|
|
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
|
|
settings.setManageCalendarColors((Boolean)newValue);
|
|
|
refresh();
|
|
|
return false;
|
|
|
}
|
|
|
});
|
|
|
} else
|
|
|
prefManageColors.setEnabled(false);
|
|
|
|
|
|
}
|
|
|
}
|
|
|
|
|
|
}
|