Loading app/src/main/java/at/bitfire/icsdroid/SyncAdapter.java +5 −0 Original line number Diff line number Diff line Loading @@ -11,6 +11,7 @@ import android.content.Intent; import android.content.SyncResult; import android.os.Bundle; import android.support.v7.app.NotificationCompat; import android.util.Base64; import android.util.Log; import org.apache.commons.codec.Charsets; Loading Loading @@ -69,6 +70,10 @@ public class SyncAdapter extends AbstractThreadedSyncAdapter { Log.i(TAG, "Fetching remote calendar " + calendar.getUrl()); @Cleanup("disconnect") HttpURLConnection conn = (HttpURLConnection)new URL(calendar.getUrl()).openConnection(); conn.setRequestProperty("User-Agent", "ICSdroid/" + Constants.VERSION + " (Android)"); if (calendar.getUsername() != null && calendar.getPassword() != null) { String basicCredentials = calendar.getUsername() + ":" + calendar.getPassword(); conn.setRequestProperty("Authorization", "Basic " + Base64.encodeToString(basicCredentials.getBytes(), 0)); } if (calendar.getETag()!= null) conn.setRequestProperty("If-None-Match", calendar.getETag()); Loading app/src/main/java/at/bitfire/icsdroid/db/LocalCalendar.java +11 −5 Original line number Diff line number Diff line Loading @@ -20,15 +20,19 @@ import lombok.Getter; public class LocalCalendar extends AndroidCalendar { protected static final String public static final String COLUMN_ETAG = Calendars.CAL_SYNC1, COLUMN_LAST_MODIFIED = Calendars.CAL_SYNC2, COLUMN_LAST_SYNC = Calendars.CAL_SYNC3, COLUMN_ERROR_MESSAGE = Calendars.CAL_SYNC4; COLUMN_USERNAME = Calendars.CAL_SYNC2, COLUMN_PASSWORD = Calendars.CAL_SYNC3, COLUMN_LAST_MODIFIED = Calendars.CAL_SYNC4, COLUMN_LAST_SYNC = Calendars.CAL_SYNC5, COLUMN_ERROR_MESSAGE = Calendars.CAL_SYNC6; @Getter protected String url, // URL of iCalendar file eTag; // iCalendar ETag at last successful sync eTag, // iCalendar ETag at last successful sync username, // HTTP username (or null if no auth. required) password; // HTTP password (or null if no auth. required) @Getter long lastModified, // iCalendar Last-Modified at last successful sync (or 0) lastSync; // time of last sync @Getter String errorMessage; // error message (HTTP status or exception name) of last sync (or null) Loading @@ -50,6 +54,8 @@ public class LocalCalendar extends AndroidCalendar { protected void populate(ContentValues info) { super.populate(info); url = info.getAsString(Calendars.NAME); username = info.getAsString(COLUMN_USERNAME); password = info.getAsString(COLUMN_PASSWORD); eTag = info.getAsString(COLUMN_ETAG); if (info.containsKey(COLUMN_LAST_MODIFIED)) Loading app/src/main/java/at/bitfire/icsdroid/ui/AddCalendarDetailsFragment.java +3 −0 Original line number Diff line number Diff line Loading @@ -24,6 +24,7 @@ import at.bitfire.ical4android.AndroidCalendar; import at.bitfire.ical4android.CalendarStorageException; import at.bitfire.icsdroid.AppAccount; import at.bitfire.icsdroid.R; import at.bitfire.icsdroid.db.LocalCalendar; import yuku.ambilwarna.AmbilWarnaDialog; public class AddCalendarDetailsFragment extends Fragment implements TextWatcher { Loading Loading @@ -145,6 +146,8 @@ public class AddCalendarDetailsFragment extends Fragment implements TextWatcher calInfo.put(Calendars.OWNER_ACCOUNT, AppAccount.account.name); calInfo.put(Calendars.SYNC_EVENTS, 1); calInfo.put(Calendars.VISIBLE, 1); calInfo.put(LocalCalendar.COLUMN_USERNAME, activity.authRequired ? activity.username : null); calInfo.put(LocalCalendar.COLUMN_PASSWORD, activity.authRequired ? activity.password : null); calInfo.put(Calendars.CALENDAR_ACCESS_LEVEL, Calendars.CAL_ACCESS_READ); try { AndroidCalendar.create(AppAccount.account, activity.getContentResolver(), calInfo); Loading app/src/main/java/at/bitfire/icsdroid/ui/AddCalendarValidationFragment.java +16 −8 Original line number Diff line number Diff line Loading @@ -9,6 +9,7 @@ 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.util.Base64; import android.widget.Toast; import java.io.IOException; Loading @@ -22,15 +23,18 @@ import at.bitfire.icsdroid.R; import lombok.Cleanup; public class AddCalendarValidationFragment extends DialogFragment implements LoaderManager.LoaderCallbacks<ResourceInfo> { public static final String ARG_URL = "url"; AddCalendarActivity activity; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); activity = (AddCalendarActivity)getActivity(); } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); activity = (AddCalendarActivity)getActivity(); Loader<ResourceInfo> loader = getLoaderManager().initLoader(0, null, this); } Loading @@ -47,7 +51,7 @@ public class AddCalendarValidationFragment extends DialogFragment implements Loa @Override public Loader<ResourceInfo> onCreateLoader(int id, Bundle args) { return new ResourceInfoLoader(getActivity(), activity.url); return new ResourceInfoLoader(activity); } @Override Loading Loading @@ -78,14 +82,14 @@ public class AddCalendarValidationFragment extends DialogFragment implements Loa // loader static class ResourceInfoLoader extends AsyncTaskLoader<ResourceInfo> { protected static class ResourceInfoLoader extends AsyncTaskLoader<ResourceInfo> { ResourceInfo info; boolean started; public ResourceInfoLoader(Context context, URL url) { super(context); public ResourceInfoLoader(AddCalendarActivity activity) { super(activity); info = new ResourceInfo(url); info = new ResourceInfo(activity.url, activity.authRequired, activity.username, activity.password); } @Override Loading @@ -102,6 +106,10 @@ public class AddCalendarValidationFragment extends DialogFragment implements Loa HttpURLConnection conn; try { conn = (HttpURLConnection) info.url.openConnection(); if (info.authRequired) { String basicCredentials = info.username + ":" + info.password; conn.setRequestProperty("Authorization", "Basic " + Base64.encodeToString(basicCredentials.getBytes(), 0)); } info.statusCode = conn.getResponseCode(); info.statusMessage = conn.getResponseMessage(); Loading app/src/main/java/at/bitfire/icsdroid/ui/ResourceInfo.java +7 −1 Original line number Diff line number Diff line Loading @@ -5,6 +5,9 @@ import java.net.URL; public class ResourceInfo { final URL url; final boolean authRequired; final String username; final String password; Exception exception; Loading @@ -13,8 +16,11 @@ public class ResourceInfo { int eventsFound = -1; ResourceInfo(URL url) { ResourceInfo(URL url, boolean authRequired, String username, String password) { this.url = url; this.authRequired = authRequired; this.username = username; this.password = password; } } Loading
app/src/main/java/at/bitfire/icsdroid/SyncAdapter.java +5 −0 Original line number Diff line number Diff line Loading @@ -11,6 +11,7 @@ import android.content.Intent; import android.content.SyncResult; import android.os.Bundle; import android.support.v7.app.NotificationCompat; import android.util.Base64; import android.util.Log; import org.apache.commons.codec.Charsets; Loading Loading @@ -69,6 +70,10 @@ public class SyncAdapter extends AbstractThreadedSyncAdapter { Log.i(TAG, "Fetching remote calendar " + calendar.getUrl()); @Cleanup("disconnect") HttpURLConnection conn = (HttpURLConnection)new URL(calendar.getUrl()).openConnection(); conn.setRequestProperty("User-Agent", "ICSdroid/" + Constants.VERSION + " (Android)"); if (calendar.getUsername() != null && calendar.getPassword() != null) { String basicCredentials = calendar.getUsername() + ":" + calendar.getPassword(); conn.setRequestProperty("Authorization", "Basic " + Base64.encodeToString(basicCredentials.getBytes(), 0)); } if (calendar.getETag()!= null) conn.setRequestProperty("If-None-Match", calendar.getETag()); Loading
app/src/main/java/at/bitfire/icsdroid/db/LocalCalendar.java +11 −5 Original line number Diff line number Diff line Loading @@ -20,15 +20,19 @@ import lombok.Getter; public class LocalCalendar extends AndroidCalendar { protected static final String public static final String COLUMN_ETAG = Calendars.CAL_SYNC1, COLUMN_LAST_MODIFIED = Calendars.CAL_SYNC2, COLUMN_LAST_SYNC = Calendars.CAL_SYNC3, COLUMN_ERROR_MESSAGE = Calendars.CAL_SYNC4; COLUMN_USERNAME = Calendars.CAL_SYNC2, COLUMN_PASSWORD = Calendars.CAL_SYNC3, COLUMN_LAST_MODIFIED = Calendars.CAL_SYNC4, COLUMN_LAST_SYNC = Calendars.CAL_SYNC5, COLUMN_ERROR_MESSAGE = Calendars.CAL_SYNC6; @Getter protected String url, // URL of iCalendar file eTag; // iCalendar ETag at last successful sync eTag, // iCalendar ETag at last successful sync username, // HTTP username (or null if no auth. required) password; // HTTP password (or null if no auth. required) @Getter long lastModified, // iCalendar Last-Modified at last successful sync (or 0) lastSync; // time of last sync @Getter String errorMessage; // error message (HTTP status or exception name) of last sync (or null) Loading @@ -50,6 +54,8 @@ public class LocalCalendar extends AndroidCalendar { protected void populate(ContentValues info) { super.populate(info); url = info.getAsString(Calendars.NAME); username = info.getAsString(COLUMN_USERNAME); password = info.getAsString(COLUMN_PASSWORD); eTag = info.getAsString(COLUMN_ETAG); if (info.containsKey(COLUMN_LAST_MODIFIED)) Loading
app/src/main/java/at/bitfire/icsdroid/ui/AddCalendarDetailsFragment.java +3 −0 Original line number Diff line number Diff line Loading @@ -24,6 +24,7 @@ import at.bitfire.ical4android.AndroidCalendar; import at.bitfire.ical4android.CalendarStorageException; import at.bitfire.icsdroid.AppAccount; import at.bitfire.icsdroid.R; import at.bitfire.icsdroid.db.LocalCalendar; import yuku.ambilwarna.AmbilWarnaDialog; public class AddCalendarDetailsFragment extends Fragment implements TextWatcher { Loading Loading @@ -145,6 +146,8 @@ public class AddCalendarDetailsFragment extends Fragment implements TextWatcher calInfo.put(Calendars.OWNER_ACCOUNT, AppAccount.account.name); calInfo.put(Calendars.SYNC_EVENTS, 1); calInfo.put(Calendars.VISIBLE, 1); calInfo.put(LocalCalendar.COLUMN_USERNAME, activity.authRequired ? activity.username : null); calInfo.put(LocalCalendar.COLUMN_PASSWORD, activity.authRequired ? activity.password : null); calInfo.put(Calendars.CALENDAR_ACCESS_LEVEL, Calendars.CAL_ACCESS_READ); try { AndroidCalendar.create(AppAccount.account, activity.getContentResolver(), calInfo); Loading
app/src/main/java/at/bitfire/icsdroid/ui/AddCalendarValidationFragment.java +16 −8 Original line number Diff line number Diff line Loading @@ -9,6 +9,7 @@ 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.util.Base64; import android.widget.Toast; import java.io.IOException; Loading @@ -22,15 +23,18 @@ import at.bitfire.icsdroid.R; import lombok.Cleanup; public class AddCalendarValidationFragment extends DialogFragment implements LoaderManager.LoaderCallbacks<ResourceInfo> { public static final String ARG_URL = "url"; AddCalendarActivity activity; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); activity = (AddCalendarActivity)getActivity(); } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); activity = (AddCalendarActivity)getActivity(); Loader<ResourceInfo> loader = getLoaderManager().initLoader(0, null, this); } Loading @@ -47,7 +51,7 @@ public class AddCalendarValidationFragment extends DialogFragment implements Loa @Override public Loader<ResourceInfo> onCreateLoader(int id, Bundle args) { return new ResourceInfoLoader(getActivity(), activity.url); return new ResourceInfoLoader(activity); } @Override Loading Loading @@ -78,14 +82,14 @@ public class AddCalendarValidationFragment extends DialogFragment implements Loa // loader static class ResourceInfoLoader extends AsyncTaskLoader<ResourceInfo> { protected static class ResourceInfoLoader extends AsyncTaskLoader<ResourceInfo> { ResourceInfo info; boolean started; public ResourceInfoLoader(Context context, URL url) { super(context); public ResourceInfoLoader(AddCalendarActivity activity) { super(activity); info = new ResourceInfo(url); info = new ResourceInfo(activity.url, activity.authRequired, activity.username, activity.password); } @Override Loading @@ -102,6 +106,10 @@ public class AddCalendarValidationFragment extends DialogFragment implements Loa HttpURLConnection conn; try { conn = (HttpURLConnection) info.url.openConnection(); if (info.authRequired) { String basicCredentials = info.username + ":" + info.password; conn.setRequestProperty("Authorization", "Basic " + Base64.encodeToString(basicCredentials.getBytes(), 0)); } info.statusCode = conn.getResponseCode(); info.statusMessage = conn.getResponseMessage(); Loading
app/src/main/java/at/bitfire/icsdroid/ui/ResourceInfo.java +7 −1 Original line number Diff line number Diff line Loading @@ -5,6 +5,9 @@ import java.net.URL; public class ResourceInfo { final URL url; final boolean authRequired; final String username; final String password; Exception exception; Loading @@ -13,8 +16,11 @@ public class ResourceInfo { int eventsFound = -1; ResourceInfo(URL url) { ResourceInfo(URL url, boolean authRequired, String username, String password) { this.url = url; this.authRequired = authRequired; this.username = username; this.password = password; } }