mirror of
https://github.com/etesync/android
synced 2025-06-25 01:18:58 +00:00
Selectable calendars
This commit is contained in:
parent
f32493986b
commit
777e124b54
@ -139,7 +139,7 @@ public class CollectionInfo {
|
|||||||
if (supportsVTODO != null)
|
if (supportsVTODO != null)
|
||||||
values.put(Collections.SUPPORTS_VTODO, supportsVTODO ? 1 : 0);
|
values.put(Collections.SUPPORTS_VTODO, supportsVTODO ? 1 : 0);
|
||||||
|
|
||||||
values.put(Collections.SELECTED, selected);
|
values.put(Collections.SELECTED, selected ? 1 : 0);
|
||||||
return values;
|
return values;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -127,7 +127,7 @@ public class CalendarsSyncAdapterService extends Service {
|
|||||||
private Map<String, CollectionInfo> remoteCalendars(long service) {
|
private Map<String, CollectionInfo> remoteCalendars(long service) {
|
||||||
Map<String, CollectionInfo> collections = new LinkedHashMap<>();
|
Map<String, CollectionInfo> collections = new LinkedHashMap<>();
|
||||||
@Cleanup Cursor cursor = db.query(ServiceDB.Collections._TABLE, ServiceDB.Collections._COLUMNS,
|
@Cleanup Cursor cursor = db.query(ServiceDB.Collections._TABLE, ServiceDB.Collections._COLUMNS,
|
||||||
ServiceDB.Collections.SERVICE_ID + "=? AND " + ServiceDB.Collections.SUPPORTS_VEVENT + "!=0",
|
ServiceDB.Collections.SERVICE_ID + "=? AND " + ServiceDB.Collections.SUPPORTS_VEVENT + "!=0 AND selected",
|
||||||
new String[] { String.valueOf(service) }, null, null, null);
|
new String[] { String.valueOf(service) }, null, null, null);
|
||||||
while (cursor.moveToNext()) {
|
while (cursor.moveToNext()) {
|
||||||
ContentValues values = new ContentValues();
|
ContentValues values = new ContentValues();
|
||||||
|
@ -130,7 +130,7 @@ public class TasksSyncAdapterService extends Service {
|
|||||||
private Map<String, CollectionInfo> remoteTaskLists(long service) {
|
private Map<String, CollectionInfo> remoteTaskLists(long service) {
|
||||||
Map<String, CollectionInfo> collections = new LinkedHashMap<>();
|
Map<String, CollectionInfo> collections = new LinkedHashMap<>();
|
||||||
@Cleanup Cursor cursor = db.query(Collections._TABLE, Collections._COLUMNS,
|
@Cleanup Cursor cursor = db.query(Collections._TABLE, Collections._COLUMNS,
|
||||||
Collections.SERVICE_ID + "=? AND " + Collections.SUPPORTS_VTODO + "!=0",
|
Collections.SERVICE_ID + "=? AND " + Collections.SUPPORTS_VTODO + "!=0 AND selected",
|
||||||
new String[] { String.valueOf(service) }, null, null, null);
|
new String[] { String.valueOf(service) }, null, null, null);
|
||||||
while (cursor.moveToNext()) {
|
while (cursor.moveToNext()) {
|
||||||
ContentValues values = new ContentValues();
|
ContentValues values = new ContentValues();
|
||||||
|
@ -42,6 +42,8 @@ import android.view.MenuItem;
|
|||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.widget.ArrayAdapter;
|
import android.widget.ArrayAdapter;
|
||||||
|
import android.widget.CheckBox;
|
||||||
|
import android.widget.CompoundButton;
|
||||||
import android.widget.ListView;
|
import android.widget.ListView;
|
||||||
import android.widget.ProgressBar;
|
import android.widget.ProgressBar;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
@ -174,6 +176,7 @@ public class AccountActivity extends AppCompatActivity implements Toolbar.OnMenu
|
|||||||
progress.setVisibility(info.carddav.refreshing ? View.VISIBLE : View.GONE);
|
progress.setVisibility(info.carddav.refreshing ? View.VISIBLE : View.GONE);
|
||||||
|
|
||||||
ListView list = (ListView)findViewById(R.id.address_books);
|
ListView list = (ListView)findViewById(R.id.address_books);
|
||||||
|
list.setEnabled(!info.carddav.refreshing);
|
||||||
AddressBookAdapter adapter = new AddressBookAdapter(this);
|
AddressBookAdapter adapter = new AddressBookAdapter(this);
|
||||||
adapter.addAll(info.carddav.collections);
|
adapter.addAll(info.carddav.collections);
|
||||||
list.setAdapter(adapter);
|
list.setAdapter(adapter);
|
||||||
@ -186,6 +189,7 @@ public class AccountActivity extends AppCompatActivity implements Toolbar.OnMenu
|
|||||||
progress.setVisibility(info.caldav.refreshing ? View.VISIBLE : View.GONE);
|
progress.setVisibility(info.caldav.refreshing ? View.VISIBLE : View.GONE);
|
||||||
|
|
||||||
ListView list = (ListView)findViewById(R.id.calendars);
|
ListView list = (ListView)findViewById(R.id.calendars);
|
||||||
|
list.setEnabled(!info.caldav.refreshing);
|
||||||
CalendarAdapter adapter = new CalendarAdapter(this);
|
CalendarAdapter adapter = new CalendarAdapter(this);
|
||||||
adapter.addAll(info.caldav.collections);
|
adapter.addAll(info.caldav.collections);
|
||||||
list.setAdapter(adapter);
|
list.setAdapter(adapter);
|
||||||
@ -271,7 +275,8 @@ public class AccountActivity extends AppCompatActivity implements Toolbar.OnMenu
|
|||||||
|
|
||||||
private List<CollectionInfo> readCollections(SQLiteDatabase db, long service) {
|
private List<CollectionInfo> readCollections(SQLiteDatabase db, long service) {
|
||||||
List<CollectionInfo> collections = new LinkedList<>();
|
List<CollectionInfo> collections = new LinkedList<>();
|
||||||
@Cleanup Cursor cursor = db.query(Collections._TABLE, Collections._COLUMNS, Collections.SERVICE_ID + "=?", new String[]{String.valueOf(service)}, null, null, null);
|
@Cleanup Cursor cursor = db.query(Collections._TABLE, Collections._COLUMNS, Collections.SERVICE_ID + "=?", new String[]{String.valueOf(service)},
|
||||||
|
null, null, Collections.SUPPORTS_VEVENT + " DESC," + Collections.DISPLAY_NAME);
|
||||||
while (cursor.moveToNext()) {
|
while (cursor.moveToNext()) {
|
||||||
ContentValues values = new ContentValues();
|
ContentValues values = new ContentValues();
|
||||||
DatabaseUtils.cursorRowToContentValues(cursor, values);
|
DatabaseUtils.cursorRowToContentValues(cursor, values);
|
||||||
@ -321,10 +326,29 @@ public class AccountActivity extends AppCompatActivity implements Toolbar.OnMenu
|
|||||||
if (v == null)
|
if (v == null)
|
||||||
v = LayoutInflater.from(getContext()).inflate(R.layout.account_calendar_item, parent, false);
|
v = LayoutInflater.from(getContext()).inflate(R.layout.account_calendar_item, parent, false);
|
||||||
|
|
||||||
CollectionInfo info = getItem(position);
|
final CollectionInfo info = getItem(position);
|
||||||
|
|
||||||
|
CheckBox select = (CheckBox)v.findViewById(R.id.selected);
|
||||||
|
select.setChecked(info.selected);
|
||||||
|
select.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
|
||||||
|
@Override
|
||||||
|
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
|
||||||
|
OpenHelper dbHelper = new OpenHelper(getContext());
|
||||||
|
try {
|
||||||
|
SQLiteDatabase db = dbHelper.getWritableDatabase();
|
||||||
|
ContentValues values = new ContentValues(1);
|
||||||
|
values.put(Collections.SELECTED, isChecked ? 1 : 0);
|
||||||
|
db.update(Collections._TABLE, values, Collections.ID + "=?", new String[]{String.valueOf(info.id)});
|
||||||
|
} finally {
|
||||||
|
dbHelper.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
if (info.color != null) {
|
||||||
View vColor = v.findViewById(R.id.color);
|
View vColor = v.findViewById(R.id.color);
|
||||||
vColor.setBackgroundColor(info.color);
|
vColor.setBackgroundColor(info.color);
|
||||||
|
}
|
||||||
|
|
||||||
TextView tv = (TextView)v.findViewById(R.id.title);
|
TextView tv = (TextView)v.findViewById(R.id.title);
|
||||||
tv.setText(TextUtils.isEmpty(info.displayName) ? info.url : info.displayName);
|
tv.setText(TextUtils.isEmpty(info.displayName) ? info.url : info.displayName);
|
||||||
|
@ -76,7 +76,7 @@ public class DavResourceFinder {
|
|||||||
|
|
||||||
httpClient = HttpClient.create(context);
|
httpClient = HttpClient.create(context);
|
||||||
httpClient = HttpClient.addLogger(httpClient, log);
|
httpClient = HttpClient.addLogger(httpClient, log);
|
||||||
httpClient = HttpClient.addAuthentication(httpClient, credentials.getUserName(), credentials.getPassword(), credentials.isAuthPreemptive());
|
httpClient = HttpClient.addAuthentication(httpClient, credentials.userName, credentials.password, credentials.authPreemptive);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -86,7 +86,7 @@ public class DavResourceFinder {
|
|||||||
calDavConfig = findInitialConfiguration(Service.CALDAV);
|
calDavConfig = findInitialConfiguration(Service.CALDAV);
|
||||||
|
|
||||||
return new Configuration(
|
return new Configuration(
|
||||||
credentials.getUserName(), credentials.getPassword(), credentials.isAuthPreemptive(),
|
credentials.userName, credentials.password, credentials.authPreemptive,
|
||||||
cardDavConfig, calDavConfig,
|
cardDavConfig, calDavConfig,
|
||||||
log.toString()
|
log.toString()
|
||||||
);
|
);
|
||||||
@ -94,7 +94,7 @@ public class DavResourceFinder {
|
|||||||
|
|
||||||
protected Configuration.ServiceInfo findInitialConfiguration(@NonNull Service service) {
|
protected Configuration.ServiceInfo findInitialConfiguration(@NonNull Service service) {
|
||||||
// user-given base URI (either mailto: URI or http(s):// URL)
|
// user-given base URI (either mailto: URI or http(s):// URL)
|
||||||
final URI baseURI = credentials.getUri();
|
final URI baseURI = credentials.uri;
|
||||||
|
|
||||||
// domain for service discovery
|
// domain for service discovery
|
||||||
String discoveryFQDN = null;
|
String discoveryFQDN = null;
|
||||||
|
@ -122,7 +122,7 @@ public class DetectConfigurationFragment extends DialogFragment implements Loade
|
|||||||
public ServerConfigurationLoader(Context context, Bundle args) {
|
public ServerConfigurationLoader(Context context, Bundle args) {
|
||||||
super(context);
|
super(context);
|
||||||
this.context = context;
|
this.context = context;
|
||||||
credentials = (LoginCredentialsFragment.LoginCredentials)args.getSerializable(ARG_LOGIN_CREDENTIALS);
|
credentials = (LoginCredentialsFragment.LoginCredentials)args.getParcelable(ARG_LOGIN_CREDENTIALS);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -10,6 +10,8 @@ package at.bitfire.davdroid.ui.setup;
|
|||||||
|
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
import android.os.Parcel;
|
||||||
|
import android.os.Parcelable;
|
||||||
import android.support.v4.app.DialogFragment;
|
import android.support.v4.app.DialogFragment;
|
||||||
import android.support.v4.app.Fragment;
|
import android.support.v4.app.Fragment;
|
||||||
import android.support.v7.widget.AppCompatCheckBox;
|
import android.support.v7.widget.AppCompatCheckBox;
|
||||||
@ -22,14 +24,13 @@ import android.widget.CompoundButton;
|
|||||||
import android.widget.EditText;
|
import android.widget.EditText;
|
||||||
import android.widget.LinearLayout;
|
import android.widget.LinearLayout;
|
||||||
|
|
||||||
import java.io.Serializable;
|
|
||||||
import java.net.IDN;
|
import java.net.IDN;
|
||||||
import java.net.URI;
|
import java.net.URI;
|
||||||
import java.net.URISyntaxException;
|
import java.net.URISyntaxException;
|
||||||
|
|
||||||
import at.bitfire.davdroid.R;
|
import at.bitfire.davdroid.R;
|
||||||
import at.bitfire.davdroid.ui.widget.EditPassword;
|
import at.bitfire.davdroid.ui.widget.EditPassword;
|
||||||
import lombok.Data;
|
import lombok.RequiredArgsConstructor;
|
||||||
|
|
||||||
public class LoginCredentialsFragment extends Fragment implements CompoundButton.OnCheckedChangeListener {
|
public class LoginCredentialsFragment extends Fragment implements CompoundButton.OnCheckedChangeListener {
|
||||||
|
|
||||||
@ -75,7 +76,7 @@ public class LoginCredentialsFragment extends Fragment implements CompoundButton
|
|||||||
if (credentials != null) {
|
if (credentials != null) {
|
||||||
// login data OK, continue with DetectConfigurationFragment
|
// login data OK, continue with DetectConfigurationFragment
|
||||||
Bundle args = new Bundle(1);
|
Bundle args = new Bundle(1);
|
||||||
args.putSerializable(DetectConfigurationFragment.ARG_LOGIN_CREDENTIALS, credentials);
|
args.putParcelable(DetectConfigurationFragment.ARG_LOGIN_CREDENTIALS, credentials);
|
||||||
|
|
||||||
DialogFragment dialog = new DetectConfigurationFragment();
|
DialogFragment dialog = new DetectConfigurationFragment();
|
||||||
dialog.setArguments(args);
|
dialog.setArguments(args);
|
||||||
@ -169,11 +170,41 @@ public class LoginCredentialsFragment extends Fragment implements CompoundButton
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Data
|
@RequiredArgsConstructor
|
||||||
public class LoginCredentials implements Serializable {
|
public static class LoginCredentials implements Parcelable {
|
||||||
final URI uri;
|
public final URI uri;
|
||||||
final String userName, password;
|
public final String userName, password;
|
||||||
final boolean authPreemptive;
|
public final boolean authPreemptive;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int describeContents() {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void writeToParcel(Parcel dest, int flags) {
|
||||||
|
dest.writeSerializable(uri);
|
||||||
|
dest.writeString(userName);
|
||||||
|
dest.writeString(password);
|
||||||
|
dest.writeInt(authPreemptive ? 1 : 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static final Parcelable.Creator CREATOR = new Parcelable.Creator<LoginCredentials>() {
|
||||||
|
@Override
|
||||||
|
public LoginCredentials createFromParcel(Parcel source) {
|
||||||
|
LoginCredentials credentials = new LoginCredentials(
|
||||||
|
(URI)source.readSerializable(),
|
||||||
|
source.readString(), source.readString(),
|
||||||
|
source.readInt() != 0 ? true : false
|
||||||
|
);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public LoginCredentials[] newArray(int size) {
|
||||||
|
return new LoginCredentials[0];
|
||||||
|
}
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -16,6 +16,7 @@
|
|||||||
android:gravity="center_vertical">
|
android:gravity="center_vertical">
|
||||||
|
|
||||||
<CheckBox
|
<CheckBox
|
||||||
|
android:id="@+id/selected"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginRight="4dp"/>
|
android:layout_marginRight="4dp"/>
|
||||||
|
@ -9,6 +9,7 @@
|
|||||||
|
|
||||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
android:orientation="vertical"
|
android:orientation="vertical"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
@ -49,6 +50,7 @@
|
|||||||
<ListView
|
<ListView
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
|
android:choiceMode="singleChoice"
|
||||||
android:id="@+id/address_books"/>
|
android:id="@+id/address_books"/>
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
@ -86,6 +88,7 @@
|
|||||||
<ListView
|
<ListView
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
|
android:choiceMode="multipleChoice"
|
||||||
android:id="@+id/calendars"/>
|
android:id="@+id/calendars"/>
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
Loading…
Reference in New Issue
Block a user