/*
* *
* Copyright (C) 2014 Open Whisper Systems
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
* /
*/
package org.anhonesteffort.flock;
import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;
import ezvcard.VCard;
import ezvcard.VCardVersion;
import ezvcard.property.StructuredName;
import ezvcard.property.Uid;
import net.fortuna.ical4j.model.ConstraintViolationException;
import net.fortuna.ical4j.model.Date;
import net.fortuna.ical4j.model.component.VEvent;
import net.fortuna.ical4j.model.property.CalScale;
import net.fortuna.ical4j.model.property.Description;
import net.fortuna.ical4j.model.property.Version;
import net.fortuna.ical4j.util.Calendars;
import org.anhonesteffort.flock.util.guava.Optional;
import org.anhonesteffort.flock.auth.DavAccount;
import org.anhonesteffort.flock.sync.OwsWebDav;
import org.anhonesteffort.flock.webdav.ComponentETagPair;
import org.anhonesteffort.flock.webdav.InvalidComponentException;
import org.anhonesteffort.flock.webdav.PropertyParseException;
import org.anhonesteffort.flock.webdav.WebDavConstants;
import org.anhonesteffort.flock.webdav.caldav.CalDavCollection;
import org.anhonesteffort.flock.webdav.caldav.CalDavStore;
import org.anhonesteffort.flock.webdav.carddav.CardDavCollection;
import org.anhonesteffort.flock.webdav.carddav.CardDavStore;
import org.apache.commons.lang.StringUtils;
import org.apache.jackrabbit.webdav.DavException;
import org.apache.jackrabbit.webdav.DavServletResponse;
import org.apache.jackrabbit.webdav.property.DavPropertyName;
import org.apache.jackrabbit.webdav.property.DavPropertyNameSet;
import org.apache.jackrabbit.webdav.property.DavPropertySet;
import org.apache.jackrabbit.webdav.property.DefaultDavProperty;
import java.io.IOException;
import java.util.Calendar;
import java.util.List;
import java.util.UUID;
import javax.net.ssl.SSLException;
/**
* Programmer: rhodey
*/
public class ServerTestsFragment extends Fragment {
private static final String TAG = "org.anhonesteffort.flock.ServerTestsFragment";
private static final String KEY_HREF_DAV_HOST = "KEY_HREF_DAV_HOST";
private static final String KEY_DAV_USERNAME = "KEY_DAV_USERNAME";
private static final int CODE_ERROR_CARDDAV_CURRENT_USER_PRINCIPAL = 100;
private static final int CODE_ERROR_CALDAV_CURRENT_USER_PRINCIPAL = 101;
private static final int CODE_ERROR_CALDAV_CALENDAR_HOMESET = 102;
private static final int CODE_ERROR_CARDDAV_ADDRESSBOOK_HOMESET = 103;
private static final int CODE_ERROR_CALDAV_CREATE_DELETE_COLLECTION = 104;
private static final int CODE_ERROR_CALDAV_CREATE_EDIT_COLLECTION_PROPERTIES = 105;
private static final int CODE_ERROR_CARDDAV_CREATE_DELETE_CONTACTS = 106;
private static final int CODE_ERROR_CALDAV_CREATE_DELETE_EVENTS = 107;
private SetupActivity setupActivity;
private AsyncTask asyncTask;
private Optional<String> hrefDavHost = Optional.absent();
private Optional<String> davUsername = Optional.absent();
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
if (savedInstanceState != null) {
hrefDavHost = Optional.fromNullable(savedInstanceState.getString(KEY_HREF_DAV_HOST));
davUsername = Optional.fromNullable(savedInstanceState.getString(KEY_DAV_USERNAME));
}
}
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
super.onSaveInstanceState(savedInstanceState);
TextView davHostView = (TextView)getView().findViewById(R.id.href_webdav_host);
TextView davUsernameView = (TextView)getView().findViewById(R.id.account_username);
if (davHostView.getText() != null)
savedInstanceState.putString(KEY_HREF_DAV_HOST, davHostView.getText().toString());
if (davUsernameView.getText() != null)
savedInstanceState.putString(KEY_DAV_USERNAME, davUsernameView.getText().toString());
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
if (activity instanceof SetupActivity)
this.setupActivity = (SetupActivity) activity;
else
throw new ClassCastException(activity.toString() + " not what I expected D: !");
}
@Override
public View onCreateView(LayoutInflater inflater,
ViewGroup container,
Bundle savedInstanceState)
{
View view = inflater.inflate(R.layout.fragment_server_tests, container, false);
initButtons();
initForm();
return view;
}
@Override
public void onPause() {
super.onPause();
if (asyncTask != null && !asyncTask.isCancelled())
asyncTask.cancel(true);
}
private void initButtons() {
getActivity().findViewById(R.id.button_next).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
handleStartTests();
}
});
}
private void initForm() {
TextView davHostView = (TextView)getActivity().findViewById(R.id.href_webdav_host);
TextView davUsernameView = (TextView)getActivity().findViewById(R.id.account_username);
if (hrefDavHost.isPresent())
davHostView.setText(hrefDavHost.get());
if (davUsername.isPresent())
davUsernameView.setText(davUsername.get());
}
private void handleTestsSucceeded() {
Log.d(TAG, "handleTestsSucceeded()");
String webDavHost = ((TextView)getView().findViewById(R.id.href_webdav_host)).getText().toString().trim();
String username = ((TextView)getView().findViewById(R.id.account_username)).getText().toString().trim();
Toast.makeText(getActivity(),
R.string.tests_completed_successfully,
Toast.LENGTH_SHORT).show();
if (StringUtils.isNotEmpty(webDavHost) && StringUtils.isNotEmpty(username))
setupActivity.setDavTestOptions(webDavHost, username);
setupActivity.updateFragmentUsingState(SetupActivity.STATE_CONFIGURE_SERVICE_PROVIDER);
}
private void handleStartTests() {
Log.d(TAG, "handleStartTests()");
if (asyncTask == null || asyncTask.isCancelled()) {
((Button) getActivity().findViewById(R.id.button_next)).setText(R.string.stop_tests);
startTests();
}
else {
((Button) getActivity().findViewById(R.id.button_next)).setText(R.string.restart_tests);
asyncTask.cancel(true);
asyncTask = null;
}
}
private void startTests() {
asyncTask = new AsyncTask<String, Void, Bundle>() {
private TextView currentTest;
private ImageView testErrorImage;
private ProgressBar progressBar;
private int progress = 0;
@Override
protected void onPreExecute() {
Log.d(TAG, "startTests()");
currentTest = (TextView) getView().findViewById(R.id.text_current_test);
testErrorImage = (ImageView) getView().findViewById(R.id.image_current_test_failed);
progressBar = (ProgressBar) getView().findViewById(R.id.progress_server_tests);
currentTest.setText(R.string.tests_not_yet_started);
testErrorImage.setVisibility(View.GONE);
progressBar.setMax(9);
progressBar.setProgress(0);
}
private void handleCardDavTestCurrentUserPrincipal(Bundle result, DavAccount testAccount) {
try {
CardDavStore cardDavStore = DavAccountHelper.getCardDavStore(getActivity(), testAccount);
Optional<String> currentUserPrincipal = cardDavStore.getCurrentUserPrincipal();
if (currentUserPrincipal.isPresent())
result.putInt(ErrorToaster.KEY_STATUS_CODE, ErrorToaster.CODE_SUCCESS);
else
result.putInt(ErrorToaster.KEY_STATUS_CODE, CODE_ERROR_CARDDAV_CURRENT_USER_PRINCIPAL);
} catch (DavException e) {
Log.e(TAG, "carddav current user principal", e);
if (e.getErrorCode() == WebDavConstants.SC_UNAUTHORIZED)
result.putInt(ErrorToaster.KEY_STATUS_CODE, ErrorToaster.CODE_UNAUTHORIZED);
else
result.putInt(ErrorToaster.KEY_STATUS_CODE, CODE_ERROR_CARDDAV_CURRENT_USER_PRINCIPAL);
} catch (SSLException e) {
ErrorToaster.handleBundleError(e, result);
} catch (IOException e) {
ErrorToaster.handleBundleError(e, result);
}
}
private void handleCalDavTestCurrentUserPrincipal(Bundle result, DavAccount testAccount) {
try {
CalDavStore calDavStore = DavAccountHelper.getCalDavStore(getActivity(), testAccount);
Optional<String> currentUserPrincipal = calDavStore.getCurrentUserPrincipal();
if (currentUserPrincipal.isPresent())
result.putInt(ErrorToaster.KEY_STATUS_CODE, ErrorToaster.CODE_SUCCESS);
else
result.putInt(ErrorToaster.KEY_STATUS_CODE, CODE_ERROR_CALDAV_CURRENT_USER_PRINCIPAL);
} catch (DavException e) {
Log.e(TAG, "calddav current user principal", e);
if (e.getErrorCode() == WebDavConstants.SC_UNAUTHORIZED)
result.putInt(ErrorToaster.KEY_STATUS_CODE, ErrorToaster.CODE_UNAUTHORIZED);
else
result.putInt(ErrorToaster.KEY_STATUS_CODE, CODE_ERROR_CALDAV_CURRENT_USER_PRINCIPAL);
} catch (SSLException e) {
ErrorToaster.handleBundleError(e, result);
} catch (IOException e) {
ErrorToaster.handleBundleError(e, result);
}
}
private void handleCardDavTestAddressbookHomeset(Bundle result, DavAccount testAccount) {
try {
CardDavStore cardDavStore = DavAccountHelper.getCardDavStore(getActivity(), testAccount);
Optional<String> addressbookHomeset = cardDavStore.getAddressbookHomeSet();
if (addressbookHomeset.isPresent())
result.putInt(ErrorToaster.KEY_STATUS_CODE, ErrorToaster.CODE_SUCCESS);
else
result.putInt(ErrorToaster.KEY_STATUS_CODE, CODE_ERROR_CARDDAV_ADDRESSBOOK_HOMESET);
} catch (DavException e) {
Log.e(TAG, "carddav addressbook homeset", e);
result.putInt(ErrorToaster.KEY_STATUS_CODE, CODE_ERROR_CARDDAV_ADDRESSBOOK_HOMESET);
} catch (PropertyParseException e) {
Log.e(TAG, "carddav addressbook homeset", e);
result.putInt(ErrorToaster.KEY_STATUS_CODE, CODE_ERROR_CARDDAV_ADDRESSBOOK_HOMESET);
} catch (SSLException e) {
ErrorToaster.handleBundleError(e, result);
} catch (IOException e) {
ErrorToaster.handleBundleError(e, result);
}
}
private void handleCalDavTestCalendarHomeset(Bundle result, DavAccount testAccount) {
try {
CalDavStore calDavStore = DavAccountHelper.getCalDavStore(getActivity(), testAccount);
Optional<String> calendarHomeset = calDavStore.getCalendarHomeSet();
if (calendarHomeset.isPresent())
result.putInt(ErrorToaster.KEY_STATUS_CODE, ErrorToaster.CODE_SUCCESS);
else
result.putInt(ErrorToaster.KEY_STATUS_CODE, CODE_ERROR_CALDAV_CALENDAR_HOMESET);
} catch (DavException e) {
Log.e(TAG, "caldav calendar homeset", e);
result.putInt(ErrorToaster.KEY_STATUS_CODE, CODE_ERROR_CALDAV_CALENDAR_HOMESET);
} catch (PropertyParseException e) {
Log.e(TAG, "caldav calendar homeset", e);
result.putInt(ErrorToaster.KEY_STATUS_CODE, CODE_ERROR_CALDAV_CALENDAR_HOMESET);
} catch (SSLException e) {
ErrorToaster.handleBundleError(e, result);
} catch (IOException e) {
ErrorToaster.handleBundleError(e, result);
}
}
private void handleCalDavTestCreateDeleteCollection(Bundle result, DavAccount testAccount) {
try {
CalDavStore calDavStore = DavAccountHelper.getCalDavStore(getActivity(), testAccount);
Optional<String> calendarHomeset = calDavStore.getCalendarHomeSet();
if (!calendarHomeset.isPresent()) {
result.putInt(ErrorToaster.KEY_STATUS_CODE, CODE_ERROR_CALDAV_CALENDAR_HOMESET);
return;
}
String tempCollectionPath = calendarHomeset.get().concat("delete-me/");
calDavStore.addCollection(tempCollectionPath);
Optional<CalDavCollection> tempCollection = calDavStore.getCollection(tempCollectionPath);
if (!tempCollection.isPresent()) {
result.putInt(ErrorToaster.KEY_STATUS_CODE, CODE_ERROR_CALDAV_CREATE_DELETE_COLLECTION);
return;
}
calDavStore.removeCollection(tempCollectionPath);
tempCollection = calDavStore.getCollection(tempCollectionPath);
if (tempCollection.isPresent())
result.putInt(ErrorToaster.KEY_STATUS_CODE, CODE_ERROR_CALDAV_CREATE_DELETE_COLLECTION);
else
result.putInt(ErrorToaster.KEY_STATUS_CODE, ErrorToaster.CODE_SUCCESS);
} catch (DavException e) {
Log.e(TAG, "caldav create delete collection", e);
result.putInt(ErrorToaster.KEY_STATUS_CODE, CODE_ERROR_CALDAV_CREATE_DELETE_COLLECTION);
} catch (PropertyParseException e) {
Log.e(TAG, "caldav create delete collection", e);
result.putInt(ErrorToaster.KEY_STATUS_CODE, CODE_ERROR_CALDAV_CREATE_DELETE_COLLECTION);
} catch (SSLException e) {
ErrorToaster.handleBundleError(e, result);
} catch (IOException e) {
ErrorToaster.handleBundleError(e, result);
}
}
private void handleCalDavTestCreateEditCollectionProperties(Bundle result,
DavAccount testAccount)
{
final String TEMP_DISPLAY_NAME = "TEMP DISPLAY NAME";
try {
CalDavStore calDavStore = DavAccountHelper.getCalDavStore(getActivity(), testAccount);
Optional<String> calendarHomeset = calDavStore.getCalendarHomeSet();
if (!calendarHomeset.isPresent()) {
result.putInt(ErrorToaster.KEY_STATUS_CODE, CODE_ERROR_CALDAV_CALENDAR_HOMESET);
return;
}
String tempCollectionPath = calendarHomeset.get().concat("delete-me/");
calDavStore.addCollection(tempCollectionPath);
Optional<CalDavCollection> tempCollection = calDavStore.getCollection(tempCollectionPath);
if (!tempCollection.isPresent()) {
result.putInt(ErrorToaster.KEY_STATUS_CODE, CODE_ERROR_CALDAV_CREATE_DELETE_COLLECTION);
return;
}
tempCollection.get().setDisplayName(TEMP_DISPLAY_NAME);
if (!tempCollection.get().getDisplayName().isPresent() ||
!tempCollection.get().getDisplayName().get().equals(TEMP_DISPLAY_NAME))
{
result.putInt(ErrorToaster.KEY_STATUS_CODE, CODE_ERROR_CALDAV_CREATE_EDIT_COLLECTION_PROPERTIES);
return;
}
final DavPropertyName TEST_PROP_NAME = DavPropertyName.create("X-TEST-XPROPERTIES", OwsWebDav.NAMESPACE);
final String TEST_PROP_VALUE = "TEST PROPERTY VALUE";
DavPropertySet setProps = new DavPropertySet();
DavPropertyNameSet fetchPropNames = new DavPropertyNameSet();
setProps.add(new DefaultDavProperty<String>(TEST_PROP_NAME, TEST_PROP_VALUE));
fetchPropNames.add(TEST_PROP_NAME);
tempCollection.get().patchProperties(setProps, new DavPropertyNameSet());
tempCollection.get().fetchProperties(fetchPropNames);
Optional<String> gotTestProp = tempCollection.get().getProperty(TEST_PROP_NAME, String.class);
if (!gotTestProp.isPresent() || !gotTestProp.get().equals(TEST_PROP_VALUE)) {
result.putInt(ErrorToaster.KEY_STATUS_CODE, CODE_ERROR_CALDAV_CREATE_EDIT_COLLECTION_PROPERTIES);
return;
}
calDavStore.removeCollection(tempCollectionPath);
result.putInt(ErrorToaster.KEY_STATUS_CODE, ErrorToaster.CODE_SUCCESS);
} catch (DavException e) {
Log.e(TAG, "caldav create edit collection properties", e);
result.putInt(ErrorToaster.KEY_STATUS_CODE, CODE_ERROR_CALDAV_CREATE_EDIT_COLLECTION_PROPERTIES);
} catch (PropertyParseException e) {
Log.e(TAG, "caldav create edit collection properties", e);
result.putInt(ErrorToaster.KEY_STATUS_CODE, CODE_ERROR_CALDAV_CREATE_EDIT_COLLECTION_PROPERTIES);
} catch (SSLException e) {
ErrorToaster.handleBundleError(e, result);
} catch (IOException e) {
ErrorToaster.handleBundleError(e, result);
}
}
private void handleCardDavTestCreateDeleteContacts(Bundle result,
DavAccount testAccount)
{
try {
CardDavStore cardDavStore = DavAccountHelper.getCardDavStore(getActivity(), testAccount);
List<CardDavCollection> collections = cardDavStore.getCollections();
if (collections.size() == 0) {
result.putInt(ErrorToaster.KEY_STATUS_CODE, CODE_ERROR_CARDDAV_CREATE_DELETE_CONTACTS);
return;
}
CardDavCollection testCollection = collections.get(0);
final StructuredName structuredName = new StructuredName();
structuredName.setFamily("Strangelove");
structuredName.setGiven("?");
structuredName.addPrefix("Dr");
structuredName.addSuffix("");
VCard putVCard = new VCard();
putVCard.setVersion(VCardVersion.V3_0);
putVCard.setUid(new Uid(UUID.randomUUID().toString()));
putVCard.setStructuredName(structuredName);
putVCard.setFormattedName("you need this too");
final String EXTENDED_PROPERTY_NAME = "X-EXTENDED-PROPERTY-NAME";
final String EXTENDED_PROPERTY_VALUE = "THIS IS A LINE LONG ENOUGH TO BE SPLIT IN TWO BY THE VCARD FOLDING NONSENSE WHY DOES THIS EXIST?!?!??!?!?!?!?!??";
putVCard.setExtendedProperty(EXTENDED_PROPERTY_NAME, EXTENDED_PROPERTY_VALUE);
testCollection.addComponent(putVCard);
Optional<ComponentETagPair<VCard>> gotVCard = testCollection.getComponent(putVCard.getUid().getValue());
if (!gotVCard.isPresent()) {
result.putInt(ErrorToaster.KEY_STATUS_CODE, CODE_ERROR_CARDDAV_CREATE_DELETE_CONTACTS);
return;
}
if (!gotVCard.get().getComponent().getStructuredName().getFamily().equals(structuredName.getFamily())) {
result.putInt(ErrorToaster.KEY_STATUS_CODE, CODE_ERROR_CARDDAV_CREATE_DELETE_CONTACTS);
return;
}
if (gotVCard.get().getComponent().getExtendedProperty(EXTENDED_PROPERTY_NAME) == null ||
!gotVCard.get().getComponent().getExtendedProperty(EXTENDED_PROPERTY_NAME).getValue().equals(EXTENDED_PROPERTY_VALUE))
{
result.putInt(ErrorToaster.KEY_STATUS_CODE, CODE_ERROR_CARDDAV_CREATE_DELETE_CONTACTS);
return;
}
testCollection.removeComponent(putVCard.getUid().getValue());
if (testCollection.getComponent(putVCard.getUid().getValue()).isPresent())
result.putInt(ErrorToaster.KEY_STATUS_CODE, CODE_ERROR_CARDDAV_CREATE_DELETE_CONTACTS);
else
result.putInt(ErrorToaster.KEY_STATUS_CODE, ErrorToaster.CODE_SUCCESS);
} catch (DavException e) {
Log.e(TAG, "carddav create delete contacts", e);
result.putInt(ErrorToaster.KEY_STATUS_CODE, CODE_ERROR_CARDDAV_CREATE_DELETE_CONTACTS);
} catch (PropertyParseException e) {
Log.e(TAG, "carddav create delete contacts", e);
result.putInt(ErrorToaster.KEY_STATUS_CODE, CODE_ERROR_CARDDAV_CREATE_DELETE_CONTACTS);
} catch (InvalidComponentException e) {
Log.e(TAG, "carddav create delete contacts", e);
result.putInt(ErrorToaster.KEY_STATUS_CODE, CODE_ERROR_CARDDAV_CREATE_DELETE_CONTACTS);
} catch (SSLException e) {
ErrorToaster.handleBundleError(e, result);
} catch (IOException e) {
ErrorToaster.handleBundleError(e, result);
}
}
private void handleCalDavTestCreateDeleteEvents(Bundle result, DavAccount testAccount) {
try {
CalDavStore calDavStore = DavAccountHelper.getCalDavStore(getActivity(), testAccount);
Optional<String> calendarHomeset = calDavStore.getCalendarHomeSet();
if (!calendarHomeset.isPresent()) {
result.putInt(ErrorToaster.KEY_STATUS_CODE, CODE_ERROR_CALDAV_CALENDAR_HOMESET);
return;
}
String tempCollectionPath = calendarHomeset.get().concat("delete-me/");
calDavStore.addCollection(tempCollectionPath);
Optional<CalDavCollection> tempCollection = calDavStore.getCollection(tempCollectionPath);
if (!tempCollection.isPresent()) {
result.putInt(ErrorToaster.KEY_STATUS_CODE, CODE_ERROR_CALDAV_CREATE_DELETE_COLLECTION);
return;
}
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.MONTH, Calendar.JUNE);
calendar.set(Calendar.DAY_OF_MONTH, 5);
net.fortuna.ical4j.model.Calendar putCalendar = new net.fortuna.ical4j.model.Calendar();
putCalendar.getProperties().add(Version.VERSION_2_0);
putCalendar.getProperties().add(CalScale.GREGORIAN);
Date putStartDate = new Date(calendar.getTime());
Date putEndDate = new Date(putStartDate.getTime() + (1000 * 60 * 60 * 24));
VEvent vEventPut = new VEvent(putStartDate, putEndDate, "Delete Me!");
vEventPut.getProperties().add(new net.fortuna.ical4j.model.property.Uid(UUID.randomUUID().toString()));
vEventPut.getProperties().add(new Description("THIS IS A LINE LONG ENOUGH TO BE SPLIT IN TWO BY THE ICAL FOLDING NONSENSE WHY DOES THIS EXIST?!?!??!?!?!?!?!??"));
putCalendar.getComponents().add(vEventPut);
tempCollection.get().addComponent(putCalendar);
Optional<ComponentETagPair<net.fortuna.ical4j.model.Calendar>> gotCalendar =
tempCollection.get().getComponent(Calendars.getUid(putCalendar).getValue());
if (!gotCalendar.isPresent()) {
result.putInt(ErrorToaster.KEY_STATUS_CODE, CODE_ERROR_CALDAV_CREATE_DELETE_EVENTS);
return;
}
VEvent vEventGot = (VEvent) gotCalendar.get().getComponent().getComponent(VEvent.VEVENT);
if (vEventGot == null ||
!vEventGot.getSummary().getValue().equals(vEventPut.getSummary().getValue()))
{
result.putInt(ErrorToaster.KEY_STATUS_CODE, CODE_ERROR_CALDAV_CREATE_DELETE_EVENTS);
return;
}
tempCollection.get().removeComponent(Calendars.getUid(putCalendar).getValue());
gotCalendar = tempCollection.get().getComponent(Calendars.getUid(putCalendar).getValue());
if (gotCalendar.isPresent()) {
result.putInt(ErrorToaster.KEY_STATUS_CODE, CODE_ERROR_CALDAV_CREATE_DELETE_EVENTS);
return;
}
calDavStore.removeCollection(tempCollectionPath);
result.putInt(ErrorToaster.KEY_STATUS_CODE, ErrorToaster.CODE_SUCCESS);
} catch (DavException e) {
Log.e(TAG, "caldav create delete events", e);
result.putInt(ErrorToaster.KEY_STATUS_CODE, CODE_ERROR_CALDAV_CREATE_DELETE_EVENTS);
} catch (PropertyParseException e) {
Log.e(TAG, "caldav create delete events", e);
result.putInt(ErrorToaster.KEY_STATUS_CODE, CODE_ERROR_CALDAV_CREATE_DELETE_EVENTS);
} catch (InvalidComponentException e) {
Log.e(TAG, "caldav create delete events", e);
result.putInt(ErrorToaster.KEY_STATUS_CODE, CODE_ERROR_CALDAV_CREATE_DELETE_EVENTS);
} catch (ConstraintViolationException e) {
Log.e(TAG, "caldav create delete events", e);
result.putInt(ErrorToaster.KEY_STATUS_CODE, CODE_ERROR_CALDAV_CREATE_DELETE_EVENTS);
} catch (SSLException e) {
ErrorToaster.handleBundleError(e, result);
} catch (IOException e) {
ErrorToaster.handleBundleError(e, result);
}
}
@Override
protected Bundle doInBackground(String... params) {
String webDavHost = ((TextView)getView().findViewById(R.id.href_webdav_host)).getText().toString().trim();
String username = ((TextView)getView().findViewById(R.id.account_username)).getText().toString().trim();
String password = ((TextView)getView().findViewById(R.id.account_password)).getText().toString().trim();
Bundle result = new Bundle();
if (StringUtils.isEmpty(username)) {
result.putInt(ErrorToaster.KEY_STATUS_CODE, ErrorToaster.CODE_EMPTY_ACCOUNT_ID);
return result;
}
if (StringUtils.isEmpty(password)) {
result.putInt(ErrorToaster.KEY_STATUS_CODE, ErrorToaster.CODE_SHORT_PASSWORD);
return result;
}
DavAccount testAccount = new DavAccount(username, password, webDavHost);
progress++;
publishProgress();
handleCardDavTestCurrentUserPrincipal(result, testAccount);
if (result.getInt(ErrorToaster.KEY_STATUS_CODE) == ErrorToaster.CODE_SUCCESS) {
progress++;
publishProgress();
handleCalDavTestCurrentUserPrincipal(result, testAccount);
}
if (result.getInt(ErrorToaster.KEY_STATUS_CODE) == ErrorToaster.CODE_SUCCESS) {
progress++;
publishProgress();
handleCardDavTestAddressbookHomeset(result, testAccount);
}
if (result.getInt(ErrorToaster.KEY_STATUS_CODE) == ErrorToaster.CODE_SUCCESS) {
progress++;
publishProgress();
handleCalDavTestCalendarHomeset(result, testAccount);
}
if (result.getInt(ErrorToaster.KEY_STATUS_CODE) == ErrorToaster.CODE_SUCCESS) {
progress++;
publishProgress();
handleCalDavTestCreateDeleteCollection(result, testAccount);
}
if (result.getInt(ErrorToaster.KEY_STATUS_CODE) == ErrorToaster.CODE_SUCCESS) {
progress++;
publishProgress();
handleCalDavTestCreateEditCollectionProperties(result, testAccount);
}
if (result.getInt(ErrorToaster.KEY_STATUS_CODE) == ErrorToaster.CODE_SUCCESS) {
progress++;
publishProgress();
handleCardDavTestCreateDeleteContacts(result, testAccount);
}
if (result.getInt(ErrorToaster.KEY_STATUS_CODE) == ErrorToaster.CODE_SUCCESS) {
progress++;
publishProgress();
handleCalDavTestCreateDeleteEvents(result, testAccount);
if (result.getInt(ErrorToaster.KEY_STATUS_CODE) == ErrorToaster.CODE_SUCCESS) {
progress++;
publishProgress();
}
}
return result;
}
@Override
protected void onProgressUpdate(final Void... values) {
progressBar.setProgress(progress);
switch (progress) {
case 0:
currentTest.setText(R.string.tests_not_yet_started);
break;
case 1:
currentTest.setText(R.string.test_dav_current_user_principal);
break;
case 2:
currentTest.setText(R.string.test_dav_current_user_principal);
break;
case 3:
currentTest.setText(R.string.test_carddav_addressbook_homeset);
break;
case 4:
currentTest.setText(R.string.test_caldav_calendar_homeset);
break;
case 5:
currentTest.setText(R.string.test_caldav_create_and_delete_collections);
break;
case 6:
currentTest.setText(R.string.test_caldav_create_and_edit_collection_properties);
break;
case 7:
currentTest.setText(R.string.test_carddav_create_and_delete_contacts);
break;
case 8:
currentTest.setText(R.string.test_caldav_create_and_delete_events);
break;
}
}
@Override
protected void onCancelled() {
currentTest.setText(R.string.tests_interrupted);
progressBar.setProgress(0);
}
@Override
protected void onPostExecute(Bundle result) {
Log.d(TAG, "STATUS: " + result.getInt(ErrorToaster.KEY_STATUS_CODE));
asyncTask = null;
testErrorImage.setVisibility(View.VISIBLE);
((Button)getActivity().findViewById(R.id.button_next)).setText(R.string.restart_tests);
switch (result.getInt(ErrorToaster.KEY_STATUS_CODE)) {
case ErrorToaster.CODE_SUCCESS:
testErrorImage.setVisibility(View.GONE);
handleTestsSucceeded();
break;
case CODE_ERROR_CARDDAV_CURRENT_USER_PRINCIPAL:
Toast.makeText(getActivity(),
R.string.test_error_carddav_current_user_principal,
Toast.LENGTH_LONG).show();
break;
case CODE_ERROR_CALDAV_CURRENT_USER_PRINCIPAL:
Toast.makeText(getActivity(),
R.string.test_error_carddav_current_user_principal,
Toast.LENGTH_LONG).show();
break;
case CODE_ERROR_CARDDAV_ADDRESSBOOK_HOMESET:
Toast.makeText(getActivity(),
R.string.test_error_carddav_addressbook_homeset,
Toast.LENGTH_LONG).show();
break;
case CODE_ERROR_CALDAV_CALENDAR_HOMESET:
Toast.makeText(getActivity(),
R.string.test_error_caldav_calendar_homeset,
Toast.LENGTH_LONG).show();
break;
case CODE_ERROR_CALDAV_CREATE_DELETE_COLLECTION:
Toast.makeText(getActivity(),
R.string.test_error_caldav_create_and_delete_collections,
Toast.LENGTH_LONG).show();
break;
case CODE_ERROR_CALDAV_CREATE_EDIT_COLLECTION_PROPERTIES:
Toast.makeText(getActivity(),
R.string.test_error_caldav_create_and_edit_collection_properties,
Toast.LENGTH_LONG).show();
break;
case CODE_ERROR_CARDDAV_CREATE_DELETE_CONTACTS:
Toast.makeText(getActivity(),
R.string.test_error_carddav_create_and_delete_contacts,
Toast.LENGTH_LONG).show();
break;
case CODE_ERROR_CALDAV_CREATE_DELETE_EVENTS:
Toast.makeText(getActivity(),
R.string.test_error_caldav_create_and_delete_events,
Toast.LENGTH_LONG).show();
break;
default:
ErrorToaster.handleDisplayToastBundledError(getActivity(), result);
}
((TextView)getView().findViewById(R.id.account_password)).setText("");
}
}.execute();
}
}