Import - Add basic import activity

pull/4/head
Tal Hacohen 7 years ago
parent 2261d6e385
commit 466870ff50

@ -184,6 +184,7 @@
android:parentActivityName=".ui.AccountsActivity">
</activity>
<activity android:name=".ui.ViewCollectionActivity"/>
<activity android:name=".ui.importlocal.ImportActivity"/>
<activity android:name=".ui.AccountSettingsActivity"/>
<activity android:name=".ui.CreateCollectionActivity"/>
<activity android:name=".ui.EditCollectionActivity"/>

@ -1,20 +1,27 @@
package com.etesync.syncadapter.resource;
import android.accounts.Account;
import android.content.ContentProviderClient;
import android.content.ContentResolver;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.DatabaseUtils;
import android.net.Uri;
import android.provider.CalendarContract;
import android.provider.CalendarContract.Calendars;
import android.provider.CalendarContract.Events;
import android.util.Log;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import at.bitfire.ical4android.AndroidCalendar;
import static android.R.attr.id;
import static org.spongycastle.asn1.x500.style.RFC4519Style.c;
import at.bitfire.ical4android.AndroidEvent;
import at.bitfire.ical4android.AndroidEventFactory;
import at.bitfire.ical4android.CalendarStorageException;
import at.bitfire.ical4android.Event;
import lombok.Cleanup;
/**
* Created by tal on 27/03/17.
@ -24,7 +31,7 @@ public class CalendarAccount {
private static final String TAG = "CalendarAccount";
public String accountName;
public List<CalendarAccount.Calendar> calendars = new ArrayList<>();
public List<LocalCalendar> calendars = new ArrayList<>();
private static final String[] CAL_COLS = new String[] {
Calendars._ID, Calendars.DELETED, Calendars.NAME, Calendars.CALENDAR_DISPLAY_NAME,
@ -58,6 +65,7 @@ public class CalendarAccount {
List<CalendarAccount> calendarAccounts = new ArrayList<>(cur.getCount());
CalendarAccount calendarAccount = null;
ContentProviderClient contentProviderClient = resolver.acquireContentProviderClient(CalendarContract.CONTENT_URI);
while (cur.moveToNext()) {
if (getLong(cur, Calendars.DELETED) != 0)
continue;
@ -68,24 +76,26 @@ public class CalendarAccount {
calendarAccounts.add(calendarAccount);
}
CalendarAccount.Calendar calendar = new Calendar();
calendar.id = getLong(cur, Calendars._ID);
if (calendar.id == -1) {
long id = getLong(cur, Calendars._ID);
if (id == -1) {
continue;
}
calendar.name = getString(cur, Calendars.NAME);
calendar.displayName = getString(cur, Calendars.CALENDAR_DISPLAY_NAME);
calendar.accountType = getString(cur, Calendars.ACCOUNT_TYPE);
calendar.owner = getString(cur, Calendars.OWNER_ACCOUNT);
calendar.isActive = getLong(cur, Calendars.VISIBLE) == 1;
calendar.timezone = getString(cur, Calendars.CALENDAR_TIME_ZONE);
final String[] args = new String[] { String.valueOf(calendar.id) };
final String[] args = new String[] { String.valueOf(id) };
Cursor eventsCur = resolver.query(Events.CONTENT_URI, CAL_ID_COLS, CAL_ID_WHERE, args, null);
calendar.numEntries = eventsCur.getCount();
Account account = new Account(accountName, getString(cur, Calendars.ACCOUNT_TYPE));
try {
LocalCalendar localCalendar = LocalCalendar.findByName(account, contentProviderClient,
LocalCalendar.Factory.INSTANCE, getString(cur, Calendars.NAME));
if (localCalendar != null) calendarAccount.calendars.add(localCalendar);
} catch (Exception ex) {
ex.printStackTrace();
}
eventsCur.close();
calendarAccount.calendars.add(calendar);
}
contentProviderClient.close();
cur.close();
return calendarAccounts;
}
@ -117,27 +127,22 @@ public class CalendarAccount {
return accountName + " calendars:" + calendars.size();
}
private boolean differ(final String lhs, final String rhs) {
if (lhs == null)
return rhs != null;
return rhs == null || !lhs.equals(rhs);
}
public static class Calendar {
public long id;
public String name;
public String displayName;
public String owner;
public String accountType;
public boolean isActive;
public String timezone;
public int numEntries;
static class Factory implements AndroidEventFactory {
static final LocalEvent.Factory INSTANCE = new LocalEvent.Factory();
@Override
public String toString() {
return displayName + " ( " + id + " )";
public AndroidEvent newInstance(AndroidCalendar calendar, long id, ContentValues baseInfo) {
return new LocalEvent(calendar, id, baseInfo);
}
}
@Override
public AndroidEvent newInstance(AndroidCalendar calendar, Event event) {
return new LocalEvent(calendar, event, null, null);
}
@Override
public AndroidEvent[] newArray(int size) {
return new LocalEvent[size];
}
}
}

@ -27,6 +27,7 @@ import com.etesync.syncadapter.model.EntryEntity;
import com.etesync.syncadapter.model.JournalEntity;
import com.etesync.syncadapter.resource.LocalAddressBook;
import com.etesync.syncadapter.resource.LocalCalendar;
import com.etesync.syncadapter.ui.importlocal.ImportActivity;
import com.etesync.syncadapter.ui.journalviewer.ListEntriesFragment;
import java.io.FileNotFoundException;
@ -167,8 +168,6 @@ public class ViewCollectionActivity extends AppCompatActivity implements Refresh
}
public void onImport(MenuItem item) {
getSupportFragmentManager().beginTransaction()
.add(ImportFragment.newInstance(account, info), null)
.commit();
startActivity(ImportActivity.newIntent(ViewCollectionActivity.this, account, info));
}
}

@ -0,0 +1,128 @@
package com.etesync.syncadapter.ui.importlocal;
import android.accounts.Account;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.MenuItem;
import android.view.View;
import android.view.LayoutInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import android.widget.ExpandableListView;
import android.widget.TextView;
import com.etesync.syncadapter.App;
import com.etesync.syncadapter.R;
import com.etesync.syncadapter.model.CollectionInfo;
import com.etesync.syncadapter.resource.CalendarAccount;
import com.etesync.syncadapter.resource.LocalCalendar;
import com.etesync.syncadapter.resource.LocalEvent;
import com.etesync.syncadapter.ui.ImportFragment;
import java.util.List;
import static com.etesync.syncadapter.resource.CalendarAccount.loadAll;
public class ImportActivity extends AppCompatActivity {
public final static String EXTRA_ACCOUNT = "account",
EXTRA_COLLECTION_INFO = "collectionInfo";
private Account account;
protected CollectionInfo info;
public static Intent newIntent(Context context, Account account, CollectionInfo info) {
Intent intent = new Intent(context, ImportActivity.class);
intent.putExtra(ImportActivity.EXTRA_ACCOUNT, account);
intent.putExtra(ImportActivity.EXTRA_COLLECTION_INFO, info);
return intent;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_import);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
account = getIntent().getExtras().getParcelable(EXTRA_ACCOUNT);
info = (CollectionInfo) getIntent().getExtras().getSerializable(EXTRA_COLLECTION_INFO);
findViewById(R.id.import_button_account).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View aView) {
importAccount();
}
});
findViewById(R.id.import_button_file).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View aView) {
importFile();
}
});
}
private void importFile() {
getSupportFragmentManager().beginTransaction()
.add(ImportFragment.newInstance(account, info), null)
.commit();
}
private void importAccount() {
final List<CalendarAccount> calendarAccountList = CalendarAccount.loadAll(getContentResolver());
ExpandableListView listCalendar = (ExpandableListView) findViewById(R.id.calendars);
final ExpandableListAdapter adapter = new ExpandableListAdapter(this, calendarAccountList);
listCalendar.setAdapter(adapter);
listCalendar.setOnChildClickListener(new ExpandableListView.OnChildClickListener() {
@Override
public boolean onChildClick(ExpandableListView aExpandableListView, View aView, int groupPosition, int childPosition, long aL) {
Toast.makeText(ImportActivity.this,
calendarAccountList.get(groupPosition).calendars.get(childPosition).toString(),
Toast.LENGTH_SHORT).show();
//todo import
LocalCalendar localCalendar = (LocalCalendar) calendarAccountList.get(groupPosition).calendars.get(childPosition);
return false;
}
});
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == android.R.id.home) {
if (!getSupportFragmentManager().popBackStackImmediate()) {
finish();
}
return true;
}
return false;
}
@Override
protected void onResume() {
super.onResume();
App app = (App) getApplicationContext();
if (app.getCertManager() != null)
app.getCertManager().appInForeground = true;
}
@Override
protected void onPause() {
super.onPause();
App app = (App) getApplicationContext();
if (app.getCertManager() != null)
app.getCertManager().appInForeground = false;
}
}

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/import_button_file"
android:text="@string/import_button_file"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/import_button_account"
android:text="@string/import_button_account"/>
</LinearLayout>

@ -248,4 +248,9 @@
<string name="loading">Loading...</string>
<string name="loading_error_title">Loading Error</string>
<string name="loading_error_content">Refresh</string>
<!-- Import Activity -->
<string name="import_button_file">Import from flie</string>
<string name="import_button_account">Import from account</string>
</resources>

Loading…
Cancel
Save