mirror of
https://github.com/etesync/android
synced 2025-02-09 06:02:42 +00:00
Setup Encryption: use the more reliable AsyncTask over AsyncTaskLoader.
I had issues with not being able to add accounts in some cases.
This commit is contained in:
parent
660d5b94ba
commit
b33e5003d4
@ -16,16 +16,11 @@ import android.app.ProgressDialog;
|
|||||||
import android.content.ContentResolver;
|
import android.content.ContentResolver;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.DialogInterface;
|
import android.content.DialogInterface;
|
||||||
import android.content.Intent;
|
import android.os.AsyncTask;
|
||||||
import android.database.sqlite.SQLiteDatabase;
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.provider.CalendarContract;
|
import android.provider.CalendarContract;
|
||||||
import android.provider.ContactsContract;
|
|
||||||
import android.support.annotation.NonNull;
|
import android.support.annotation.NonNull;
|
||||||
import android.support.v4.app.DialogFragment;
|
import android.support.v4.app.DialogFragment;
|
||||||
import android.support.v4.app.LoaderManager;
|
|
||||||
import android.support.v4.content.AsyncTaskLoader;
|
|
||||||
import android.support.v4.content.Loader;
|
|
||||||
import android.support.v7.app.AlertDialog;
|
import android.support.v7.app.AlertDialog;
|
||||||
|
|
||||||
import com.etesync.syncadapter.AccountSettings;
|
import com.etesync.syncadapter.AccountSettings;
|
||||||
@ -39,10 +34,8 @@ import com.etesync.syncadapter.journalmanager.Exceptions;
|
|||||||
import com.etesync.syncadapter.journalmanager.UserInfoManager;
|
import com.etesync.syncadapter.journalmanager.UserInfoManager;
|
||||||
import com.etesync.syncadapter.model.CollectionInfo;
|
import com.etesync.syncadapter.model.CollectionInfo;
|
||||||
import com.etesync.syncadapter.model.JournalEntity;
|
import com.etesync.syncadapter.model.JournalEntity;
|
||||||
import com.etesync.syncadapter.model.ServiceDB;
|
|
||||||
import com.etesync.syncadapter.model.ServiceEntity;
|
import com.etesync.syncadapter.model.ServiceEntity;
|
||||||
import com.etesync.syncadapter.resource.LocalTaskList;
|
import com.etesync.syncadapter.resource.LocalTaskList;
|
||||||
import com.etesync.syncadapter.ui.DebugInfoActivity;
|
|
||||||
import com.etesync.syncadapter.ui.setup.BaseConfigurationFinder.Configuration;
|
import com.etesync.syncadapter.ui.setup.BaseConfigurationFinder.Configuration;
|
||||||
import com.etesync.syncadapter.utils.AndroidCompat;
|
import com.etesync.syncadapter.utils.AndroidCompat;
|
||||||
|
|
||||||
@ -51,11 +44,10 @@ import java.util.logging.Level;
|
|||||||
import at.bitfire.ical4android.TaskProvider;
|
import at.bitfire.ical4android.TaskProvider;
|
||||||
import io.requery.Persistable;
|
import io.requery.Persistable;
|
||||||
import io.requery.sql.EntityDataStore;
|
import io.requery.sql.EntityDataStore;
|
||||||
import lombok.Cleanup;
|
|
||||||
import okhttp3.HttpUrl;
|
import okhttp3.HttpUrl;
|
||||||
import okhttp3.OkHttpClient;
|
import okhttp3.OkHttpClient;
|
||||||
|
|
||||||
public class SetupEncryptionFragment extends DialogFragment implements LoaderManager.LoaderCallbacks<Configuration> {
|
public class SetupEncryptionFragment extends DialogFragment {
|
||||||
private static final String KEY_CONFIG = "config";
|
private static final String KEY_CONFIG = "config";
|
||||||
|
|
||||||
public static SetupEncryptionFragment newInstance(BaseConfigurationFinder.Configuration config) {
|
public static SetupEncryptionFragment newInstance(BaseConfigurationFinder.Configuration config) {
|
||||||
@ -82,60 +74,48 @@ public class SetupEncryptionFragment extends DialogFragment implements LoaderMan
|
|||||||
public void onCreate(Bundle savedInstanceState) {
|
public void onCreate(Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
|
|
||||||
getLoaderManager().initLoader(0, getArguments(), this);
|
new SetupEncryptionLoader(getContext(), (Configuration) getArguments().getSerializable(KEY_CONFIG)).execute();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
private class SetupEncryptionLoader extends AsyncTask<Void, Void, Configuration> {
|
||||||
public Loader<Configuration> onCreateLoader(int id, Bundle args) {
|
|
||||||
return new SetupEncryptionLoader(getContext(), (Configuration)args.getSerializable(KEY_CONFIG));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onLoadFinished(Loader<Configuration> loader, Configuration config) {
|
|
||||||
try {
|
|
||||||
if (createAccount(config.userName, config)) {
|
|
||||||
getActivity().setResult(Activity.RESULT_OK);
|
|
||||||
getActivity().finish();
|
|
||||||
}
|
|
||||||
} catch (InvalidAccountException e) {
|
|
||||||
App.log.severe("Account creation failed!");
|
|
||||||
new AlertDialog.Builder(getActivity())
|
|
||||||
.setTitle(R.string.account_creation_failed)
|
|
||||||
.setIcon(R.drawable.ic_error_dark)
|
|
||||||
.setMessage(e.getLocalizedMessage())
|
|
||||||
.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
|
|
||||||
@Override
|
|
||||||
public void onClick(DialogInterface dialog, int which) {
|
|
||||||
// dismiss
|
|
||||||
}
|
|
||||||
}).show();
|
|
||||||
}
|
|
||||||
|
|
||||||
dismissAllowingStateLoss();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onLoaderReset(Loader<Configuration> loader) {
|
|
||||||
}
|
|
||||||
|
|
||||||
static class SetupEncryptionLoader extends AsyncTaskLoader<Configuration> {
|
|
||||||
final Context context;
|
final Context context;
|
||||||
final Configuration config;
|
final Configuration config;
|
||||||
|
|
||||||
public SetupEncryptionLoader(Context context, Configuration config) {
|
public SetupEncryptionLoader(Context context, Configuration config) {
|
||||||
super(context);
|
super();
|
||||||
this.context = context;
|
this.context = context;
|
||||||
this.config = config;
|
this.config = config;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onStartLoading() {
|
protected void onPostExecute(Configuration result) {
|
||||||
forceLoad();
|
try {
|
||||||
|
if (createAccount(config.userName, config)) {
|
||||||
|
getActivity().setResult(Activity.RESULT_OK);
|
||||||
|
getActivity().finish();
|
||||||
|
}
|
||||||
|
} catch (InvalidAccountException e) {
|
||||||
|
App.log.severe("Account creation failed!");
|
||||||
|
new AlertDialog.Builder(getActivity())
|
||||||
|
.setTitle(R.string.account_creation_failed)
|
||||||
|
.setIcon(R.drawable.ic_error_dark)
|
||||||
|
.setMessage(e.getLocalizedMessage())
|
||||||
|
.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(DialogInterface dialog, int which) {
|
||||||
|
// dismiss
|
||||||
|
}
|
||||||
|
}).show();
|
||||||
|
}
|
||||||
|
|
||||||
|
dismissAllowingStateLoss();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Configuration loadInBackground() {
|
protected Configuration doInBackground(Void... aVoids) {
|
||||||
|
App.log.info("Started deriving key");
|
||||||
config.password = Crypto.deriveKey(config.userName, config.rawPassword);
|
config.password = Crypto.deriveKey(config.userName, config.rawPassword);
|
||||||
|
App.log.info("Finished deriving key");
|
||||||
|
|
||||||
try {
|
try {
|
||||||
Crypto.CryptoManager cryptoManager;
|
Crypto.CryptoManager cryptoManager;
|
||||||
|
Loading…
Reference in New Issue
Block a user