|
|
@ -9,11 +9,17 @@
|
|
|
|
package at.bitfire.davdroid.ui;
|
|
|
|
package at.bitfire.davdroid.ui;
|
|
|
|
|
|
|
|
|
|
|
|
import android.accounts.Account;
|
|
|
|
import android.accounts.Account;
|
|
|
|
|
|
|
|
import android.content.ContentResolver;
|
|
|
|
|
|
|
|
import android.content.Context;
|
|
|
|
import android.content.Intent;
|
|
|
|
import android.content.Intent;
|
|
|
|
|
|
|
|
import android.content.SyncStatusObserver;
|
|
|
|
import android.os.Bundle;
|
|
|
|
import android.os.Bundle;
|
|
|
|
import android.provider.CalendarContract;
|
|
|
|
import android.provider.CalendarContract;
|
|
|
|
import android.provider.ContactsContract;
|
|
|
|
import android.provider.ContactsContract;
|
|
|
|
|
|
|
|
import android.support.v4.app.LoaderManager;
|
|
|
|
import android.support.v4.app.NavUtils;
|
|
|
|
import android.support.v4.app.NavUtils;
|
|
|
|
|
|
|
|
import android.support.v4.content.AsyncTaskLoader;
|
|
|
|
|
|
|
|
import android.support.v4.content.Loader;
|
|
|
|
import android.support.v7.app.AppCompatActivity;
|
|
|
|
import android.support.v7.app.AppCompatActivity;
|
|
|
|
import android.support.v7.preference.EditTextPreference;
|
|
|
|
import android.support.v7.preference.EditTextPreference;
|
|
|
|
import android.support.v7.preference.ListPreference;
|
|
|
|
import android.support.v7.preference.ListPreference;
|
|
|
@ -23,10 +29,7 @@ import android.support.v7.preference.SwitchPreferenceCompat;
|
|
|
|
import android.text.TextUtils;
|
|
|
|
import android.text.TextUtils;
|
|
|
|
import android.view.MenuItem;
|
|
|
|
import android.view.MenuItem;
|
|
|
|
|
|
|
|
|
|
|
|
import java.util.logging.Level;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import at.bitfire.davdroid.AccountSettings;
|
|
|
|
import at.bitfire.davdroid.AccountSettings;
|
|
|
|
import at.bitfire.davdroid.App;
|
|
|
|
|
|
|
|
import at.bitfire.davdroid.InvalidAccountException;
|
|
|
|
import at.bitfire.davdroid.InvalidAccountException;
|
|
|
|
import at.bitfire.davdroid.R;
|
|
|
|
import at.bitfire.davdroid.R;
|
|
|
|
import at.bitfire.davdroid.ui.setup.DetectConfigurationFragment;
|
|
|
|
import at.bitfire.davdroid.ui.setup.DetectConfigurationFragment;
|
|
|
@ -66,7 +69,7 @@ public class AccountSettingsActivity extends AppCompatActivity {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public static class AccountSettingsFragment extends PreferenceFragmentCompat {
|
|
|
|
public static class AccountSettingsFragment extends PreferenceFragmentCompat implements LoaderManager.LoaderCallbacks<AccountSettings> {
|
|
|
|
Account account;
|
|
|
|
Account account;
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
@Override
|
|
|
@ -74,7 +77,8 @@ public class AccountSettingsActivity extends AppCompatActivity {
|
|
|
|
super.onCreate(savedInstanceState);
|
|
|
|
super.onCreate(savedInstanceState);
|
|
|
|
|
|
|
|
|
|
|
|
account = getArguments().getParcelable(EXTRA_ACCOUNT);
|
|
|
|
account = getArguments().getParcelable(EXTRA_ACCOUNT);
|
|
|
|
refresh();
|
|
|
|
|
|
|
|
|
|
|
|
getLoaderManager().initLoader(0, getArguments(), this);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
@Override
|
|
|
@ -82,13 +86,14 @@ public class AccountSettingsActivity extends AppCompatActivity {
|
|
|
|
addPreferencesFromResource(R.xml.settings_account);
|
|
|
|
addPreferencesFromResource(R.xml.settings_account);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public void refresh() {
|
|
|
|
@Override
|
|
|
|
final AccountSettings settings;
|
|
|
|
public Loader<AccountSettings> onCreateLoader(int id, Bundle args) {
|
|
|
|
|
|
|
|
return new AccountSettingsLoader(getContext(), (Account)args.getParcelable(EXTRA_ACCOUNT));
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
@Override
|
|
|
|
settings = new AccountSettings(getActivity(), account);
|
|
|
|
public void onLoadFinished(Loader<AccountSettings> loader, final AccountSettings settings) {
|
|
|
|
} catch(InvalidAccountException e) {
|
|
|
|
if (settings == null) {
|
|
|
|
App.log.log(Level.INFO, "Account is invalid or doesn't exist (anymore)", e);
|
|
|
|
|
|
|
|
getActivity().finish();
|
|
|
|
getActivity().finish();
|
|
|
|
return;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -100,7 +105,7 @@ public class AccountSettingsActivity extends AppCompatActivity {
|
|
|
|
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
|
|
|
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
|
|
|
LoginCredentials credentials = newValue != null ? new LoginCredentials(account.name, (String) newValue) : null;
|
|
|
|
LoginCredentials credentials = newValue != null ? new LoginCredentials(account.name, (String) newValue) : null;
|
|
|
|
LoginCredentialsChangeFragment.newInstance(account, credentials).show(getFragmentManager(), null);
|
|
|
|
LoginCredentialsChangeFragment.newInstance(account, credentials).show(getFragmentManager(), null);
|
|
|
|
refresh();
|
|
|
|
getLoaderManager().restartLoader(0, getArguments(), AccountSettingsFragment.this);
|
|
|
|
return false;
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
});
|
|
|
|
});
|
|
|
@ -118,7 +123,7 @@ public class AccountSettingsActivity extends AppCompatActivity {
|
|
|
|
@Override
|
|
|
|
@Override
|
|
|
|
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
|
|
|
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
|
|
|
settings.setSyncInterval(ContactsContract.AUTHORITY, Long.parseLong((String)newValue));
|
|
|
|
settings.setSyncInterval(ContactsContract.AUTHORITY, Long.parseLong((String)newValue));
|
|
|
|
refresh();
|
|
|
|
getLoaderManager().restartLoader(0, getArguments(), AccountSettingsFragment.this);
|
|
|
|
return false;
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
});
|
|
|
|
});
|
|
|
@ -139,7 +144,7 @@ public class AccountSettingsActivity extends AppCompatActivity {
|
|
|
|
@Override
|
|
|
|
@Override
|
|
|
|
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
|
|
|
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
|
|
|
settings.setSyncInterval(CalendarContract.AUTHORITY, Long.parseLong((String)newValue));
|
|
|
|
settings.setSyncInterval(CalendarContract.AUTHORITY, Long.parseLong((String)newValue));
|
|
|
|
refresh();
|
|
|
|
getLoaderManager().restartLoader(0, getArguments(), AccountSettingsFragment.this);
|
|
|
|
return false;
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
});
|
|
|
|
});
|
|
|
@ -160,7 +165,7 @@ public class AccountSettingsActivity extends AppCompatActivity {
|
|
|
|
@Override
|
|
|
|
@Override
|
|
|
|
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
|
|
|
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
|
|
|
settings.setSyncInterval(TaskProvider.ProviderName.OpenTasks.authority, Long.parseLong((String)newValue));
|
|
|
|
settings.setSyncInterval(TaskProvider.ProviderName.OpenTasks.authority, Long.parseLong((String)newValue));
|
|
|
|
refresh();
|
|
|
|
getLoaderManager().restartLoader(0, getArguments(), AccountSettingsFragment.this);
|
|
|
|
return false;
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
});
|
|
|
|
});
|
|
|
@ -175,7 +180,7 @@ public class AccountSettingsActivity extends AppCompatActivity {
|
|
|
|
@Override
|
|
|
|
@Override
|
|
|
|
public boolean onPreferenceChange(Preference preference, Object wifiOnly) {
|
|
|
|
public boolean onPreferenceChange(Preference preference, Object wifiOnly) {
|
|
|
|
settings.setSyncWiFiOnly((Boolean)wifiOnly);
|
|
|
|
settings.setSyncWiFiOnly((Boolean)wifiOnly);
|
|
|
|
refresh();
|
|
|
|
getLoaderManager().restartLoader(0, getArguments(), AccountSettingsFragment.this);
|
|
|
|
return false;
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
});
|
|
|
|
});
|
|
|
@ -192,11 +197,57 @@ public class AccountSettingsActivity extends AppCompatActivity {
|
|
|
|
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
|
|
|
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
|
|
|
String ssid = (String)newValue;
|
|
|
|
String ssid = (String)newValue;
|
|
|
|
settings.setSyncWifiOnlySSID(!TextUtils.isEmpty(ssid) ? ssid : null);
|
|
|
|
settings.setSyncWifiOnlySSID(!TextUtils.isEmpty(ssid) ? ssid : null);
|
|
|
|
refresh();
|
|
|
|
getLoaderManager().restartLoader(0, getArguments(), AccountSettingsFragment.this);
|
|
|
|
return false;
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
});
|
|
|
|
});
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
|
|
|
public void onLoaderReset(Loader<AccountSettings> loader) {
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private static class AccountSettingsLoader extends AsyncTaskLoader<AccountSettings> implements SyncStatusObserver {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
final Account account;
|
|
|
|
|
|
|
|
Object listenerHandle;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public AccountSettingsLoader(Context context, Account account) {
|
|
|
|
|
|
|
|
super(context);
|
|
|
|
|
|
|
|
this.account = account;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
|
|
|
protected void onStartLoading() {
|
|
|
|
|
|
|
|
forceLoad();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
listenerHandle = ContentResolver.addStatusChangeListener(ContentResolver.SYNC_OBSERVER_TYPE_SETTINGS, this);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
|
|
|
protected void onStopLoading() {
|
|
|
|
|
|
|
|
ContentResolver.removeStatusChangeListener(listenerHandle);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
|
|
|
public AccountSettings loadInBackground() {
|
|
|
|
|
|
|
|
AccountSettings settings;
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
|
|
|
settings = new AccountSettings(getContext(), account);
|
|
|
|
|
|
|
|
} catch(InvalidAccountException e) {
|
|
|
|
|
|
|
|
return null;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
return settings;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
|
|
|
public void onStatusChanged(int which) {
|
|
|
|
|
|
|
|
forceLoad();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|