package de.pinyto.ctSESAM;
import android.os.AsyncTask;
import android.widget.ArrayAdapter;
import android.widget.AutoCompleteTextView;
import android.widget.TextView;
import android.widget.Toast;
import java.lang.ref.WeakReference;
/**
* Asynchronously load and decrypt local settings.
*/
public class LoadLocalSettingsTask extends AsyncTask<byte[], Void, byte[]> {
private KgkManager kgkManager;
private PasswordSettingsManager settingsManager;
private WeakReference<MainActivity> mainActivityWeakRef;
LoadLocalSettingsTask(MainActivity mainActivity,
KgkManager kgkManager,
PasswordSettingsManager settingsManager) {
super();
this.mainActivityWeakRef = new WeakReference<>(mainActivity);
this.kgkManager = kgkManager;
this.settingsManager = settingsManager;
}
@Override
protected byte[] doInBackground(byte[]... params) {
byte[] password = params[0];
byte[] salt = params[1];
byte[] ivKey = Crypter.createIvKey(password, salt);
for (int i = 0; i < password.length; i++) {
password[i] = 0x00;
}
return ivKey;
}
@Override
protected void onPostExecute(byte[] ivKey) {
byte[] encryptedKgkBlock = kgkManager.gelLocalKgkBlock();
kgkManager.decryptKgk(new Crypter(ivKey), encryptedKgkBlock);
MainActivity activity = mainActivityWeakRef.get();
if (activity != null && !activity.isFinishing()) {
AutoCompleteTextView autoCompleteTextViewDomain =
(AutoCompleteTextView) activity.findViewById(R.id.autoCompleteTextViewDomain);
try {
settingsManager.loadLocalSettings(kgkManager);
} catch (WrongPasswordException passwordError) {
Toast.makeText(activity.getBaseContext(),
R.string.local_wrong_password, Toast.LENGTH_SHORT).show();
autoCompleteTextViewDomain.dismissDropDown();
kgkManager.reset();
}
TextView loadingMessage =
(TextView) activity.findViewById(R.id.textViewDecryptionMessage);
loadingMessage.setText("");
ArrayAdapter<String> adapter = new ArrayAdapter<>(activity.getBaseContext(),
android.R.layout.simple_dropdown_item_1line, settingsManager.getDomainList());
autoCompleteTextViewDomain.setAdapter(adapter);
}
}
}