Loading app/src/main/AndroidManifest.xml +1 −1 Original line number Diff line number Diff line Loading @@ -47,7 +47,7 @@ </activity> <activity android:name=".ui.AddCalendarActivity" android:label="@string/activity_add_account" android:label="@string/activity_add_calendar" android:parentActivityName=".ui.CalendarListActivity"> <intent-filter> <action android:name="android.intent.action.VIEW"/> Loading app/src/main/java/at/bitfire/icsdroid/ui/AddCalendarActivity.java +1 −0 Original line number Diff line number Diff line Loading @@ -45,4 +45,5 @@ public class AddCalendarActivity extends AppCompatActivity { outState.putString(STATE_USERNAME, username); outState.putString(STATE_PASSWORD, password); } } app/src/main/java/at/bitfire/icsdroid/ui/AddCalendarDetailsFragment.java +41 −72 Original line number Diff line number Diff line package at.bitfire.icsdroid.ui; import android.accounts.AccountManager; import android.content.ContentValues; import android.content.Context; import android.os.Bundle; import android.support.v4.app.Fragment; import android.text.Editable; import android.text.TextWatcher; import android.util.Log; import android.view.LayoutInflater; import android.view.Menu; Loading @@ -13,11 +11,9 @@ import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.EditText; import org.apache.commons.lang3.StringUtils; import android.provider.CalendarContract.Calendars; import android.widget.TextView; import android.widget.Toast; import at.bitfire.ical4android.AndroidCalendar; Loading @@ -25,73 +21,63 @@ 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 { private static final String TAG = "ICSdroid.CreateCalendar"; public class AddCalendarDetailsFragment extends Fragment implements TitleColorFragment.OnChangeListener { private static final String TAG = "ICSdroid.CreateCalendar", STATE_TITLE = "title", STATE_COLOR = "color"; private static final String STATE_COLOR = "color"; String title; int color = 0xff2F80C7; AddCalendarActivity activity; TitleColorFragment fragTitleColor; TextView textURL; EditText editTitle; ColorButton colorButton; String title; int color = 0xffFF0000; @Override public void onAttach(Context context) { super.onAttach(context); activity = (AddCalendarActivity)context; } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle inState) { View v = inflater.inflate(R.layout.add_calendar_details, container, false); setHasOptionsMenu(true); textURL = (TextView)v.findViewById(R.id.url); editTitle = (EditText)v.findViewById(R.id.title); editTitle.addTextChangedListener(this); colorButton = (ColorButton)v.findViewById(R.id.color); if (inState != null) colorButton.setColor(color = inState.getInt(STATE_COLOR)); colorButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { new AmbilWarnaDialog(getActivity(), color, new AmbilWarnaDialog.OnAmbilWarnaListener() { @Override public void onCancel(AmbilWarnaDialog ambilWarnaDialog) { } @Override public void onOk(AmbilWarnaDialog ambilWarnaDialog, int newColor) { colorButton.setColor(color = 0xff000000 | newColor); } }).show(); } }); return v; } @Override public void onActivityCreated(Bundle inState) { super.onActivityCreated(inState); activity = (AddCalendarActivity)getActivity(); textURL.setText(activity.url.toString()); if (inState == null) { if (inState != null) { title = inState.getString(STATE_TITLE); color = inState.getInt(STATE_COLOR); } else { String path = activity.url.getPath(); editTitle.setText(path.substring(path.lastIndexOf('/') + 1)); } title = path.substring(path.lastIndexOf('/') + 1); } fragTitleColor = new TitleColorFragment(); Bundle args = new Bundle(3); args.putString(TitleColorFragment.ARG_URL, activity.url.toString()); args.putString(TitleColorFragment.ARG_TITLE, title); args.putInt(TitleColorFragment.ARG_COLOR, color); fragTitleColor.setArguments(args); fragTitleColor.setOnChangeListener(this); getChildFragmentManager().beginTransaction() .add(R.id.title_color, fragTitleColor) .commit(); return v; } @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putString(STATE_TITLE, title); outState.putInt(STATE_COLOR, color); } @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { inflater.inflate(R.menu.menu_create_calendar, menu); } @Override public void onPrepareOptionsMenu(Menu menu) { Loading @@ -99,11 +85,6 @@ public class AddCalendarDetailsFragment extends Fragment implements TextWatcher itemGo.setEnabled(StringUtils.isNotBlank(title)); } @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { inflater.inflate(R.menu.menu_create_calendar, menu); } @Override public boolean onOptionsItemSelected(MenuItem item) { if (item.getItemId() == R.id.create_calendar) { Loading @@ -115,25 +96,14 @@ public class AddCalendarDetailsFragment extends Fragment implements TextWatcher } /* dynamic changes */ @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { } @Override public void afterTextChanged(Editable s) { title = editTitle.getText().toString(); activity.invalidateOptionsMenu(); public void onChangeTitleColor(String title, int color) { this.title = title; this.color = color; getActivity().invalidateOptionsMenu(); } /* actions */ private boolean createCalendar() { AppAccount.makeAvailable(getContext()); Loading @@ -160,5 +130,4 @@ public class AddCalendarDetailsFragment extends Fragment implements TextWatcher return false; } } } app/src/main/java/at/bitfire/icsdroid/ui/AddCalendarEnterUrlFragment.java +45 −67 Original line number Diff line number Diff line package at.bitfire.icsdroid.ui; import android.app.Activity; import android.net.Uri; import android.os.Bundle; import android.support.v4.app.Fragment; Loading @@ -12,9 +13,7 @@ import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.CompoundButton; import android.widget.EditText; import android.widget.Switch; import android.widget.TextView; import org.apache.commons.lang3.StringUtils; Loading @@ -24,46 +23,41 @@ import java.net.URL; import at.bitfire.icsdroid.R; public class AddCalendarEnterUrlFragment extends Fragment implements CompoundButton.OnCheckedChangeListener, TextWatcher { public class AddCalendarEnterUrlFragment extends Fragment implements TextWatcher, CredentialsFragment.OnCredentialsChangeListener { private static final String TAG = "ICSdroid.EnterUrl"; AddCalendarActivity activity; CredentialsFragment credentials; EditText editURL; TextView insecureAuthWarning; EditText editURL, editUsername, editPassword; TextView insecureAuthWarning, textUsername, textPassword; Switch switchAuthRequired; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { Log.i(TAG, "Create fragment view"); public void onAttach(Activity activity) { super.onAttach(activity); this.activity = (AddCalendarActivity)activity; } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v = inflater.inflate(R.layout.add_calendar_enter_url, container, false); setHasOptionsMenu(true); editURL = (EditText)v.findViewById(R.id.url); switchAuthRequired = (Switch)v.findViewById(R.id.requires_authentication); insecureAuthWarning = (TextView)v.findViewById(R.id.insecure_authentication_warning); textUsername = (TextView)v.findViewById(R.id.user_name_label); editUsername = (EditText)v.findViewById(R.id.user_name); textPassword = (TextView)v.findViewById(R.id.password_label); editPassword = (EditText)v.findViewById(R.id.password); switchAuthRequired.setOnCheckedChangeListener(this); Uri createUri = getActivity().getIntent().getData(); editURL.addTextChangedListener(this); editUsername.addTextChangedListener(this); editPassword.addTextChangedListener(this); return v; } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); activity = (AddCalendarActivity)getActivity(); Uri createUri = activity.getIntent().getData(); if (createUri != null) editURL.setText(createUri.toString()); credentials = new CredentialsFragment(); credentials.setOnChangeListener(this); getChildFragmentManager().beginTransaction() .add(R.id.credentials, credentials) .commit(); insecureAuthWarning = (TextView)v.findViewById(R.id.insecure_authentication_warning); return v; } @Override Loading @@ -74,33 +68,21 @@ public class AddCalendarEnterUrlFragment extends Fragment implements CompoundBut @Override public void onPrepareOptionsMenu(Menu menu) { MenuItem itemNext = menu.findItem(R.id.next); itemNext.setEnabled( activity.url != null && (!activity.authRequired || (StringUtils.isNotBlank(activity.username) && StringUtils.isNotBlank(activity.password))) ); boolean urlOK = StringUtils.isNotBlank(editURL.getText().toString()), authOK = !credentials.authRequired || (StringUtils.isNotBlank(credentials.username) && StringUtils.isNotBlank(credentials.password)); itemNext.setEnabled(urlOK && authOK); } /* dynamic changes */ @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if (isChecked) { activity.authRequired = true; textUsername.setVisibility(View.VISIBLE); editUsername.setVisibility(View.VISIBLE); textPassword.setVisibility(View.VISIBLE); editPassword.setVisibility(View.VISIBLE); } else { activity.authRequired = false; textUsername.setVisibility(View.GONE); editUsername.setVisibility(View.GONE); textPassword.setVisibility(View.GONE); editPassword.setVisibility(View.GONE); } updateAuthFields(); activity.invalidateOptionsMenu(); public void onChangeCredentials(boolean authRequired, String username, String password) { activity.authRequired = authRequired; activity.username = username; activity.password = password; updateHttpWarning(); getActivity().invalidateOptionsMenu(); } @Override Loading @@ -117,35 +99,31 @@ public class AddCalendarEnterUrlFragment extends Fragment implements CompoundBut activity.url = null; try { activity.url = new URL(urlString); String protocol = activity.url.getProtocol(); if ((!"http".equals(protocol) && !"https".equals(protocol) || StringUtils.isBlank(activity.url.getAuthority()))) activity.url = null; URL url = new URL(urlString); String protocol = url.getProtocol(); if ((("http".equals(protocol) || "https".equals(protocol)) && StringUtils.isNotBlank(url.getAuthority()))) activity.url = url; } catch (MalformedURLException e) { Log.d(TAG, "Invalid URL", e); } } @Override public void afterTextChanged(Editable s) { editURL.setTextColor(getResources().getColor(activity.url != null ? R.color.secondary_text_default_material_light : R.color.redorange)); } updateAuthFields(); activity.invalidateOptionsMenu(); @Override public void afterTextChanged(Editable s) { updateHttpWarning(); getActivity().invalidateOptionsMenu(); } void updateAuthFields() { if (activity.authRequired) { insecureAuthWarning.setVisibility(activity.url != null && "https".equals(activity.url.getProtocol()) ? View.GONE : View.VISIBLE); activity.username = editUsername.getText().toString(); activity.password = editPassword.getText().toString(); } else { void updateHttpWarning() { // warn if auth. required and not using HTTPS if (credentials.authRequired && activity.url != null) insecureAuthWarning.setVisibility("https".equals(activity.url.getProtocol()) ? View.GONE : View.VISIBLE); else insecureAuthWarning.setVisibility(View.GONE); activity.username = null; activity.password = null; } } Loading app/src/main/java/at/bitfire/icsdroid/ui/AddCalendarValidationFragment.java +20 −16 Original line number Diff line number Diff line package at.bitfire.icsdroid.ui; import android.app.Activity; import android.app.Dialog; import android.app.FragmentTransaction; import android.app.ProgressDialog; import android.content.Context; import android.os.Bundle; 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.view.View; import android.widget.Toast; import java.io.IOException; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.URL; import at.bitfire.ical4android.Event; import at.bitfire.ical4android.InvalidCalendarException; Loading @@ -23,26 +22,28 @@ import at.bitfire.icsdroid.R; import lombok.Cleanup; public class AddCalendarValidationFragment extends DialogFragment implements LoaderManager.LoaderCallbacks<ResourceInfo> { AddCalendarActivity activity; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); public void onAttach(Activity activity) { super.onAttach(activity); this.activity = (AddCalendarActivity)activity; } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); activity = (AddCalendarActivity)getActivity(); Loader<ResourceInfo> loader = getLoaderManager().initLoader(0, null, this); public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getLoaderManager().initLoader(0, null, this); } @Override public Dialog onCreateDialog(Bundle savedInstanceState) { setCancelable(false); ProgressDialog progress = new ProgressDialog(getActivity()); progress.setCancelable(false); progress.setMessage(getString(R.string.please_wait)); progress.setMessage(getString(R.string.add_calendar_validating)); return progress; } Loading Loading @@ -84,7 +85,7 @@ public class AddCalendarValidationFragment extends DialogFragment implements Loa protected static class ResourceInfoLoader extends AsyncTaskLoader<ResourceInfo> { ResourceInfo info; boolean started; boolean loaded; public ResourceInfoLoader(AddCalendarActivity activity) { super(activity); Loading @@ -95,9 +96,10 @@ public class AddCalendarValidationFragment extends DialogFragment implements Loa @Override protected void onStartLoading() { synchronized(this) { if (started == false) started = true; if (!loaded) { forceLoad(); loaded = true; } } } Loading @@ -106,6 +108,8 @@ public class AddCalendarValidationFragment extends DialogFragment implements Loa HttpURLConnection conn; try { conn = (HttpURLConnection) info.url.openConnection(); conn.setConnectTimeout(7000); conn.setReadTimeout(20000); if (info.authRequired) { String basicCredentials = info.username + ":" + info.password; conn.setRequestProperty("Authorization", "Basic " + Base64.encodeToString(basicCredentials.getBytes(), 0)); Loading Loading
app/src/main/AndroidManifest.xml +1 −1 Original line number Diff line number Diff line Loading @@ -47,7 +47,7 @@ </activity> <activity android:name=".ui.AddCalendarActivity" android:label="@string/activity_add_account" android:label="@string/activity_add_calendar" android:parentActivityName=".ui.CalendarListActivity"> <intent-filter> <action android:name="android.intent.action.VIEW"/> Loading
app/src/main/java/at/bitfire/icsdroid/ui/AddCalendarActivity.java +1 −0 Original line number Diff line number Diff line Loading @@ -45,4 +45,5 @@ public class AddCalendarActivity extends AppCompatActivity { outState.putString(STATE_USERNAME, username); outState.putString(STATE_PASSWORD, password); } }
app/src/main/java/at/bitfire/icsdroid/ui/AddCalendarDetailsFragment.java +41 −72 Original line number Diff line number Diff line package at.bitfire.icsdroid.ui; import android.accounts.AccountManager; import android.content.ContentValues; import android.content.Context; import android.os.Bundle; import android.support.v4.app.Fragment; import android.text.Editable; import android.text.TextWatcher; import android.util.Log; import android.view.LayoutInflater; import android.view.Menu; Loading @@ -13,11 +11,9 @@ import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.EditText; import org.apache.commons.lang3.StringUtils; import android.provider.CalendarContract.Calendars; import android.widget.TextView; import android.widget.Toast; import at.bitfire.ical4android.AndroidCalendar; Loading @@ -25,73 +21,63 @@ 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 { private static final String TAG = "ICSdroid.CreateCalendar"; public class AddCalendarDetailsFragment extends Fragment implements TitleColorFragment.OnChangeListener { private static final String TAG = "ICSdroid.CreateCalendar", STATE_TITLE = "title", STATE_COLOR = "color"; private static final String STATE_COLOR = "color"; String title; int color = 0xff2F80C7; AddCalendarActivity activity; TitleColorFragment fragTitleColor; TextView textURL; EditText editTitle; ColorButton colorButton; String title; int color = 0xffFF0000; @Override public void onAttach(Context context) { super.onAttach(context); activity = (AddCalendarActivity)context; } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle inState) { View v = inflater.inflate(R.layout.add_calendar_details, container, false); setHasOptionsMenu(true); textURL = (TextView)v.findViewById(R.id.url); editTitle = (EditText)v.findViewById(R.id.title); editTitle.addTextChangedListener(this); colorButton = (ColorButton)v.findViewById(R.id.color); if (inState != null) colorButton.setColor(color = inState.getInt(STATE_COLOR)); colorButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { new AmbilWarnaDialog(getActivity(), color, new AmbilWarnaDialog.OnAmbilWarnaListener() { @Override public void onCancel(AmbilWarnaDialog ambilWarnaDialog) { } @Override public void onOk(AmbilWarnaDialog ambilWarnaDialog, int newColor) { colorButton.setColor(color = 0xff000000 | newColor); } }).show(); } }); return v; } @Override public void onActivityCreated(Bundle inState) { super.onActivityCreated(inState); activity = (AddCalendarActivity)getActivity(); textURL.setText(activity.url.toString()); if (inState == null) { if (inState != null) { title = inState.getString(STATE_TITLE); color = inState.getInt(STATE_COLOR); } else { String path = activity.url.getPath(); editTitle.setText(path.substring(path.lastIndexOf('/') + 1)); } title = path.substring(path.lastIndexOf('/') + 1); } fragTitleColor = new TitleColorFragment(); Bundle args = new Bundle(3); args.putString(TitleColorFragment.ARG_URL, activity.url.toString()); args.putString(TitleColorFragment.ARG_TITLE, title); args.putInt(TitleColorFragment.ARG_COLOR, color); fragTitleColor.setArguments(args); fragTitleColor.setOnChangeListener(this); getChildFragmentManager().beginTransaction() .add(R.id.title_color, fragTitleColor) .commit(); return v; } @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putString(STATE_TITLE, title); outState.putInt(STATE_COLOR, color); } @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { inflater.inflate(R.menu.menu_create_calendar, menu); } @Override public void onPrepareOptionsMenu(Menu menu) { Loading @@ -99,11 +85,6 @@ public class AddCalendarDetailsFragment extends Fragment implements TextWatcher itemGo.setEnabled(StringUtils.isNotBlank(title)); } @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { inflater.inflate(R.menu.menu_create_calendar, menu); } @Override public boolean onOptionsItemSelected(MenuItem item) { if (item.getItemId() == R.id.create_calendar) { Loading @@ -115,25 +96,14 @@ public class AddCalendarDetailsFragment extends Fragment implements TextWatcher } /* dynamic changes */ @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { } @Override public void afterTextChanged(Editable s) { title = editTitle.getText().toString(); activity.invalidateOptionsMenu(); public void onChangeTitleColor(String title, int color) { this.title = title; this.color = color; getActivity().invalidateOptionsMenu(); } /* actions */ private boolean createCalendar() { AppAccount.makeAvailable(getContext()); Loading @@ -160,5 +130,4 @@ public class AddCalendarDetailsFragment extends Fragment implements TextWatcher return false; } } }
app/src/main/java/at/bitfire/icsdroid/ui/AddCalendarEnterUrlFragment.java +45 −67 Original line number Diff line number Diff line package at.bitfire.icsdroid.ui; import android.app.Activity; import android.net.Uri; import android.os.Bundle; import android.support.v4.app.Fragment; Loading @@ -12,9 +13,7 @@ import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.CompoundButton; import android.widget.EditText; import android.widget.Switch; import android.widget.TextView; import org.apache.commons.lang3.StringUtils; Loading @@ -24,46 +23,41 @@ import java.net.URL; import at.bitfire.icsdroid.R; public class AddCalendarEnterUrlFragment extends Fragment implements CompoundButton.OnCheckedChangeListener, TextWatcher { public class AddCalendarEnterUrlFragment extends Fragment implements TextWatcher, CredentialsFragment.OnCredentialsChangeListener { private static final String TAG = "ICSdroid.EnterUrl"; AddCalendarActivity activity; CredentialsFragment credentials; EditText editURL; TextView insecureAuthWarning; EditText editURL, editUsername, editPassword; TextView insecureAuthWarning, textUsername, textPassword; Switch switchAuthRequired; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { Log.i(TAG, "Create fragment view"); public void onAttach(Activity activity) { super.onAttach(activity); this.activity = (AddCalendarActivity)activity; } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v = inflater.inflate(R.layout.add_calendar_enter_url, container, false); setHasOptionsMenu(true); editURL = (EditText)v.findViewById(R.id.url); switchAuthRequired = (Switch)v.findViewById(R.id.requires_authentication); insecureAuthWarning = (TextView)v.findViewById(R.id.insecure_authentication_warning); textUsername = (TextView)v.findViewById(R.id.user_name_label); editUsername = (EditText)v.findViewById(R.id.user_name); textPassword = (TextView)v.findViewById(R.id.password_label); editPassword = (EditText)v.findViewById(R.id.password); switchAuthRequired.setOnCheckedChangeListener(this); Uri createUri = getActivity().getIntent().getData(); editURL.addTextChangedListener(this); editUsername.addTextChangedListener(this); editPassword.addTextChangedListener(this); return v; } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); activity = (AddCalendarActivity)getActivity(); Uri createUri = activity.getIntent().getData(); if (createUri != null) editURL.setText(createUri.toString()); credentials = new CredentialsFragment(); credentials.setOnChangeListener(this); getChildFragmentManager().beginTransaction() .add(R.id.credentials, credentials) .commit(); insecureAuthWarning = (TextView)v.findViewById(R.id.insecure_authentication_warning); return v; } @Override Loading @@ -74,33 +68,21 @@ public class AddCalendarEnterUrlFragment extends Fragment implements CompoundBut @Override public void onPrepareOptionsMenu(Menu menu) { MenuItem itemNext = menu.findItem(R.id.next); itemNext.setEnabled( activity.url != null && (!activity.authRequired || (StringUtils.isNotBlank(activity.username) && StringUtils.isNotBlank(activity.password))) ); boolean urlOK = StringUtils.isNotBlank(editURL.getText().toString()), authOK = !credentials.authRequired || (StringUtils.isNotBlank(credentials.username) && StringUtils.isNotBlank(credentials.password)); itemNext.setEnabled(urlOK && authOK); } /* dynamic changes */ @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if (isChecked) { activity.authRequired = true; textUsername.setVisibility(View.VISIBLE); editUsername.setVisibility(View.VISIBLE); textPassword.setVisibility(View.VISIBLE); editPassword.setVisibility(View.VISIBLE); } else { activity.authRequired = false; textUsername.setVisibility(View.GONE); editUsername.setVisibility(View.GONE); textPassword.setVisibility(View.GONE); editPassword.setVisibility(View.GONE); } updateAuthFields(); activity.invalidateOptionsMenu(); public void onChangeCredentials(boolean authRequired, String username, String password) { activity.authRequired = authRequired; activity.username = username; activity.password = password; updateHttpWarning(); getActivity().invalidateOptionsMenu(); } @Override Loading @@ -117,35 +99,31 @@ public class AddCalendarEnterUrlFragment extends Fragment implements CompoundBut activity.url = null; try { activity.url = new URL(urlString); String protocol = activity.url.getProtocol(); if ((!"http".equals(protocol) && !"https".equals(protocol) || StringUtils.isBlank(activity.url.getAuthority()))) activity.url = null; URL url = new URL(urlString); String protocol = url.getProtocol(); if ((("http".equals(protocol) || "https".equals(protocol)) && StringUtils.isNotBlank(url.getAuthority()))) activity.url = url; } catch (MalformedURLException e) { Log.d(TAG, "Invalid URL", e); } } @Override public void afterTextChanged(Editable s) { editURL.setTextColor(getResources().getColor(activity.url != null ? R.color.secondary_text_default_material_light : R.color.redorange)); } updateAuthFields(); activity.invalidateOptionsMenu(); @Override public void afterTextChanged(Editable s) { updateHttpWarning(); getActivity().invalidateOptionsMenu(); } void updateAuthFields() { if (activity.authRequired) { insecureAuthWarning.setVisibility(activity.url != null && "https".equals(activity.url.getProtocol()) ? View.GONE : View.VISIBLE); activity.username = editUsername.getText().toString(); activity.password = editPassword.getText().toString(); } else { void updateHttpWarning() { // warn if auth. required and not using HTTPS if (credentials.authRequired && activity.url != null) insecureAuthWarning.setVisibility("https".equals(activity.url.getProtocol()) ? View.GONE : View.VISIBLE); else insecureAuthWarning.setVisibility(View.GONE); activity.username = null; activity.password = null; } } Loading
app/src/main/java/at/bitfire/icsdroid/ui/AddCalendarValidationFragment.java +20 −16 Original line number Diff line number Diff line package at.bitfire.icsdroid.ui; import android.app.Activity; import android.app.Dialog; import android.app.FragmentTransaction; import android.app.ProgressDialog; import android.content.Context; import android.os.Bundle; 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.view.View; import android.widget.Toast; import java.io.IOException; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.URL; import at.bitfire.ical4android.Event; import at.bitfire.ical4android.InvalidCalendarException; Loading @@ -23,26 +22,28 @@ import at.bitfire.icsdroid.R; import lombok.Cleanup; public class AddCalendarValidationFragment extends DialogFragment implements LoaderManager.LoaderCallbacks<ResourceInfo> { AddCalendarActivity activity; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); public void onAttach(Activity activity) { super.onAttach(activity); this.activity = (AddCalendarActivity)activity; } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); activity = (AddCalendarActivity)getActivity(); Loader<ResourceInfo> loader = getLoaderManager().initLoader(0, null, this); public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getLoaderManager().initLoader(0, null, this); } @Override public Dialog onCreateDialog(Bundle savedInstanceState) { setCancelable(false); ProgressDialog progress = new ProgressDialog(getActivity()); progress.setCancelable(false); progress.setMessage(getString(R.string.please_wait)); progress.setMessage(getString(R.string.add_calendar_validating)); return progress; } Loading Loading @@ -84,7 +85,7 @@ public class AddCalendarValidationFragment extends DialogFragment implements Loa protected static class ResourceInfoLoader extends AsyncTaskLoader<ResourceInfo> { ResourceInfo info; boolean started; boolean loaded; public ResourceInfoLoader(AddCalendarActivity activity) { super(activity); Loading @@ -95,9 +96,10 @@ public class AddCalendarValidationFragment extends DialogFragment implements Loa @Override protected void onStartLoading() { synchronized(this) { if (started == false) started = true; if (!loaded) { forceLoad(); loaded = true; } } } Loading @@ -106,6 +108,8 @@ public class AddCalendarValidationFragment extends DialogFragment implements Loa HttpURLConnection conn; try { conn = (HttpURLConnection) info.url.openConnection(); conn.setConnectTimeout(7000); conn.setReadTimeout(20000); if (info.authRequired) { String basicCredentials = info.username + ":" + info.password; conn.setRequestProperty("Authorization", "Basic " + Base64.encodeToString(basicCredentials.getBytes(), 0)); Loading