mirror of
https://github.com/etesync/android
synced 2025-05-05 00:19:07 +00:00
Import - Split ImportActivity to fragments and activity
This commit is contained in:
parent
33a310344b
commit
7cac473c74
@ -5,34 +5,21 @@ import android.app.Activity;
|
|||||||
import android.app.ProgressDialog;
|
import android.app.ProgressDialog;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.graphics.Typeface;
|
|
||||||
import android.os.AsyncTask;
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.provider.CalendarContract;
|
import android.support.v4.app.Fragment;
|
||||||
import android.support.v7.app.AppCompatActivity;
|
import android.support.v7.app.AppCompatActivity;
|
||||||
|
import android.view.KeyEvent;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.MenuItem;
|
import android.view.MenuItem;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.widget.BaseExpandableListAdapter;
|
|
||||||
import android.widget.ExpandableListView;
|
|
||||||
import android.widget.TextView;
|
|
||||||
import android.widget.Toast;
|
|
||||||
|
|
||||||
import com.etesync.syncadapter.App;
|
import com.etesync.syncadapter.App;
|
||||||
import com.etesync.syncadapter.R;
|
import com.etesync.syncadapter.R;
|
||||||
import com.etesync.syncadapter.model.CollectionInfo;
|
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 com.etesync.syncadapter.ui.ImportFragment;
|
||||||
|
|
||||||
import java.util.List;
|
public class ImportActivity extends AppCompatActivity implements SelectImportMethod, OnImportCallback {
|
||||||
|
|
||||||
import at.bitfire.ical4android.CalendarStorageException;
|
|
||||||
import at.bitfire.ical4android.Event;
|
|
||||||
|
|
||||||
public class ImportActivity extends AppCompatActivity {
|
|
||||||
public final static String EXTRA_ACCOUNT = "account",
|
public final static String EXTRA_ACCOUNT = "account",
|
||||||
EXTRA_COLLECTION_INFO = "collectionInfo";
|
EXTRA_COLLECTION_INFO = "collectionInfo";
|
||||||
|
|
||||||
@ -57,56 +44,63 @@ public class ImportActivity extends AppCompatActivity {
|
|||||||
account = getIntent().getExtras().getParcelable(EXTRA_ACCOUNT);
|
account = getIntent().getExtras().getParcelable(EXTRA_ACCOUNT);
|
||||||
info = (CollectionInfo) getIntent().getExtras().getSerializable(EXTRA_COLLECTION_INFO);
|
info = (CollectionInfo) getIntent().getExtras().getSerializable(EXTRA_COLLECTION_INFO);
|
||||||
|
|
||||||
findViewById(R.id.import_button_account).setOnClickListener(new View.OnClickListener() {
|
if (savedInstanceState == null)
|
||||||
@Override
|
getSupportFragmentManager().beginTransaction()
|
||||||
public void onClick(View aView) {
|
.add(R.id.fragment_container, new ImportActivity.SelectImportFragment())
|
||||||
importAccount();
|
.commit();
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
findViewById(R.id.import_button_file).setOnClickListener(new View.OnClickListener() {
|
|
||||||
@Override
|
|
||||||
public void onClick(View aView) {
|
|
||||||
importFile();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void importFile() {
|
@Override
|
||||||
|
public void importFile() {
|
||||||
getSupportFragmentManager().beginTransaction()
|
getSupportFragmentManager().beginTransaction()
|
||||||
.add(ImportFragment.newInstance(account, info), null)
|
.add(ImportFragment.newInstance(account, info), null)
|
||||||
.commit();
|
.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
|
@Override
|
||||||
public boolean onChildClick(ExpandableListView aExpandableListView, View aView, int groupPosition, int childPosition, long aL) {
|
public void importAccount() {
|
||||||
new ImportEvents().execute(calendarAccountList.get(groupPosition).calendars.get(childPosition));
|
if (info.type == CollectionInfo.Type.CALENDAR) {
|
||||||
return false;
|
getSupportFragmentManager().beginTransaction()
|
||||||
|
.replace(R.id.fragment_container,
|
||||||
|
LocalCalendarImportFragment.newInstance(account, info))
|
||||||
|
.addToBackStack(LocalCalendarImportFragment.class.getName())
|
||||||
|
.commit();
|
||||||
|
} else if (info.type == CollectionInfo.Type.ADDRESS_BOOK) {
|
||||||
|
getSupportFragmentManager().beginTransaction()
|
||||||
|
.replace(R.id.fragment_container,
|
||||||
|
LocalContactImportFragment.newInstance(account, info))
|
||||||
|
.addToBackStack(LocalContactImportFragment.class.getName())
|
||||||
|
.commit();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void popBackStack() {
|
||||||
|
if (!getSupportFragmentManager().popBackStackImmediate()) {
|
||||||
|
finish();
|
||||||
|
} else {
|
||||||
|
setTitle(getString(R.string.import_dialog_title));
|
||||||
}
|
}
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onOptionsItemSelected(MenuItem item) {
|
public boolean onOptionsItemSelected(MenuItem item) {
|
||||||
if (item.getItemId() == android.R.id.home) {
|
if (item.getItemId() == android.R.id.home) {
|
||||||
if (!getSupportFragmentManager().popBackStackImmediate()) {
|
popBackStack();
|
||||||
finish();
|
|
||||||
}
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onKeyDown(int keyCode, KeyEvent event) {
|
||||||
|
if (keyCode == KeyEvent.KEYCODE_BACK) {
|
||||||
|
popBackStack();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return super.onKeyDown(keyCode, event);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onResume() {
|
protected void onResume() {
|
||||||
super.onResume();
|
super.onResume();
|
||||||
@ -125,152 +119,65 @@ public class ImportActivity extends AppCompatActivity {
|
|||||||
app.getCertManager().appInForeground = false;
|
app.getCertManager().appInForeground = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public class ExpandableListAdapter extends BaseExpandableListAdapter {
|
@Override
|
||||||
|
public void onImportSuccess() {
|
||||||
private Context context;
|
//todo tom what would you like to do?
|
||||||
private List<CalendarAccount> calendarAccounts;
|
finish();
|
||||||
|
|
||||||
public ExpandableListAdapter(Context context, List<CalendarAccount> calendarAccounts) {
|
|
||||||
this.context = context;
|
|
||||||
this.calendarAccounts = calendarAccounts;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Object getChild(int groupPosition, int childPosititon) {
|
public void onImportFailed() {
|
||||||
return calendarAccounts.get(groupPosition).calendars
|
//todo tom what would you like to do?
|
||||||
.get(childPosititon).getDisplayName();
|
finish();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static class SelectImportFragment extends Fragment {
|
||||||
|
|
||||||
|
private SelectImportMethod mSelectImportMethod;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public long getChildId(int groupPosition, int childPosition) {
|
public void onAttach(Context context) {
|
||||||
return childPosition;
|
super.onAttach(context);
|
||||||
}
|
// This makes sure that the container activity has implemented
|
||||||
|
// the callback interface. If not, it throws an exception
|
||||||
@Override
|
|
||||||
public View getChildView(int groupPosition, final int childPosition,
|
|
||||||
boolean isLastChild, View convertView, ViewGroup parent) {
|
|
||||||
|
|
||||||
final String childText = (String) getChild(groupPosition, childPosition);
|
|
||||||
|
|
||||||
if (convertView == null) {
|
|
||||||
LayoutInflater inflater = (LayoutInflater) context
|
|
||||||
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
|
|
||||||
convertView = inflater.inflate(R.layout.list_item, null);
|
|
||||||
}
|
|
||||||
//Todo add viewholder after we decide about the UI
|
|
||||||
|
|
||||||
TextView txtListChild = (TextView) convertView
|
|
||||||
.findViewById(R.id.lblListItem);
|
|
||||||
|
|
||||||
txtListChild.setText(childText);
|
|
||||||
return convertView;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getChildrenCount(int groupPosition) {
|
|
||||||
return calendarAccounts.get(groupPosition).calendars
|
|
||||||
.size();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Object getGroup(int groupPosition) {
|
|
||||||
return calendarAccounts.get(groupPosition).toString();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getGroupCount() {
|
|
||||||
return calendarAccounts.size();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public long getGroupId(int groupPosition) {
|
|
||||||
return groupPosition;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public View getGroupView(int groupPosition, boolean isExpanded,
|
|
||||||
View convertView, ViewGroup parent) {
|
|
||||||
String headerTitle = (String) getGroup(groupPosition);
|
|
||||||
if (convertView == null) {
|
|
||||||
LayoutInflater inflater = (LayoutInflater) context
|
|
||||||
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
|
|
||||||
convertView = inflater.inflate(R.layout.list_group, null);
|
|
||||||
}
|
|
||||||
//Todo add viewholder after we decide about the UI
|
|
||||||
|
|
||||||
TextView lblListHeader = (TextView) convertView
|
|
||||||
.findViewById(R.id.lblListHeader);
|
|
||||||
lblListHeader.setTypeface(null, Typeface.BOLD);
|
|
||||||
lblListHeader.setText(headerTitle);
|
|
||||||
|
|
||||||
return convertView;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean hasStableIds() {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isChildSelectable(int groupPosition, int childPosition) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
protected class ImportEvents extends AsyncTask<LocalCalendar, Integer, Boolean> {
|
|
||||||
ProgressDialog progressDialog;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void onPreExecute() {
|
|
||||||
progressDialog = new ProgressDialog(ImportActivity.this);
|
|
||||||
progressDialog.setTitle(R.string.import_dialog_title);
|
|
||||||
progressDialog.setMessage(getString(R.string.import_dialog_adding_entries));
|
|
||||||
progressDialog.setCanceledOnTouchOutside(false);
|
|
||||||
progressDialog.setIndeterminate(false);
|
|
||||||
progressDialog.setIcon(R.drawable.ic_import_export_black);
|
|
||||||
progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
|
|
||||||
progressDialog.show();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected Boolean doInBackground(LocalCalendar... calendars) {
|
|
||||||
return importEvents(calendars[0]);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void onProgressUpdate(Integer... progress) {
|
|
||||||
if (progressDialog != null)
|
|
||||||
progressDialog.setProgress(progress[0]);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void onPostExecute(Boolean result) {
|
|
||||||
progressDialog.dismiss();
|
|
||||||
}
|
|
||||||
|
|
||||||
private boolean importEvents(LocalCalendar fromCalendar) {
|
|
||||||
try {
|
try {
|
||||||
LocalCalendar localCalendar = LocalCalendar.findByName(account,
|
mSelectImportMethod = (SelectImportMethod) getActivity();
|
||||||
ImportActivity.this.getContentResolver().acquireContentProviderClient(CalendarContract.CONTENT_URI),
|
} catch (ClassCastException e) {
|
||||||
LocalCalendar.Factory.INSTANCE, info.url);
|
throw new ClassCastException(getActivity().toString()
|
||||||
LocalEvent[] localEvents = fromCalendar.getAll();
|
+ " must implement MyInterface ");
|
||||||
progressDialog.setMax(localEvents.length);
|
}
|
||||||
int progress = 0;
|
}
|
||||||
for (LocalEvent currentLocalEvent : localEvents) {
|
|
||||||
Event event = currentLocalEvent.getEvent();
|
@SuppressWarnings("deprecation")
|
||||||
|
@Override
|
||||||
|
public void onAttach(Activity activity) {
|
||||||
|
super.onAttach(activity);
|
||||||
|
// This makes sure that the container activity has implemented
|
||||||
|
// the callback interface. If not, it throws an exception
|
||||||
try {
|
try {
|
||||||
LocalEvent localEvent = new LocalEvent(localCalendar, event, event.uid, null);
|
mSelectImportMethod = (SelectImportMethod) activity;
|
||||||
localEvent.addAsDirty();
|
} catch (ClassCastException e) {
|
||||||
} catch (CalendarStorageException e) {
|
throw new ClassCastException(activity.toString()
|
||||||
e.printStackTrace();
|
+ " must implement MyInterface ");
|
||||||
}
|
}
|
||||||
publishProgress(++progress);
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
} catch (Exception aE) {
|
|
||||||
aE.printStackTrace();
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
||||||
|
View v = inflater.inflate(R.layout.fragment_import, container, false);
|
||||||
|
v.findViewById(R.id.import_button_account).setOnClickListener(new View.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View aView) {
|
||||||
|
mSelectImportMethod.importAccount();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
v.findViewById(R.id.import_button_file).setOnClickListener(new View.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View aView) {
|
||||||
|
mSelectImportMethod.importFile();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return v;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,266 @@
|
|||||||
|
package com.etesync.syncadapter.ui.importlocal;
|
||||||
|
|
||||||
|
import android.accounts.Account;
|
||||||
|
import android.app.Activity;
|
||||||
|
import android.app.ProgressDialog;
|
||||||
|
import android.content.Context;
|
||||||
|
import android.graphics.Typeface;
|
||||||
|
import android.os.AsyncTask;
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.provider.CalendarContract;
|
||||||
|
import android.support.v4.app.ListFragment;
|
||||||
|
import android.view.LayoutInflater;
|
||||||
|
import android.view.View;
|
||||||
|
import android.view.ViewGroup;
|
||||||
|
import android.widget.BaseExpandableListAdapter;
|
||||||
|
import android.widget.ExpandableListView;
|
||||||
|
import android.widget.TextView;
|
||||||
|
|
||||||
|
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 java.util.List;
|
||||||
|
|
||||||
|
import at.bitfire.ical4android.CalendarStorageException;
|
||||||
|
import at.bitfire.ical4android.Event;
|
||||||
|
|
||||||
|
import static com.etesync.syncadapter.Constants.KEY_ACCOUNT;
|
||||||
|
import static com.etesync.syncadapter.Constants.KEY_COLLECTION_INFO;
|
||||||
|
|
||||||
|
public class LocalCalendarImportFragment extends ListFragment {
|
||||||
|
|
||||||
|
private Account account;
|
||||||
|
private CollectionInfo info;
|
||||||
|
private OnImportCallback importCallback;
|
||||||
|
|
||||||
|
public static LocalCalendarImportFragment newInstance(Account account, CollectionInfo info) {
|
||||||
|
LocalCalendarImportFragment frag = new LocalCalendarImportFragment();
|
||||||
|
Bundle args = new Bundle(1);
|
||||||
|
args.putParcelable(KEY_ACCOUNT, account);
|
||||||
|
args.putSerializable(KEY_COLLECTION_INFO, info);
|
||||||
|
frag.setArguments(args);
|
||||||
|
return frag;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onCreate(Bundle savedInstanceState) {
|
||||||
|
super.onCreate(savedInstanceState);
|
||||||
|
setRetainInstance(true);
|
||||||
|
|
||||||
|
account = getArguments().getParcelable(KEY_ACCOUNT);
|
||||||
|
info = (CollectionInfo) getArguments().getSerializable(KEY_COLLECTION_INFO);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
||||||
|
return inflater.inflate(R.layout.fragment_local_import, container, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onViewCreated(View view, Bundle savedInstanceState) {
|
||||||
|
super.onViewCreated(view, savedInstanceState);
|
||||||
|
|
||||||
|
importAccount();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onAttach(Context context) {
|
||||||
|
super.onAttach(context);
|
||||||
|
// This makes sure that the container activity has implemented
|
||||||
|
// the callback interface. If not, it throws an exception
|
||||||
|
try {
|
||||||
|
importCallback = (OnImportCallback) getActivity();
|
||||||
|
} catch (ClassCastException e) {
|
||||||
|
throw new ClassCastException(getActivity().toString()
|
||||||
|
+ " must implement MyInterface ");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("deprecation")
|
||||||
|
@Override
|
||||||
|
public void onAttach(Activity activity) {
|
||||||
|
super.onAttach(activity);
|
||||||
|
// This makes sure that the container activity has implemented
|
||||||
|
// the callback interface. If not, it throws an exception
|
||||||
|
try {
|
||||||
|
importCallback = (OnImportCallback) activity;
|
||||||
|
} catch (ClassCastException e) {
|
||||||
|
throw new ClassCastException(activity.toString()
|
||||||
|
+ " must implement MyInterface ");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void importAccount() {
|
||||||
|
final List<CalendarAccount> calendarAccountList = CalendarAccount.loadAll(getContext().getContentResolver());
|
||||||
|
|
||||||
|
ExpandableListView listCalendar = (ExpandableListView) getListView();
|
||||||
|
|
||||||
|
final LocalCalendarImportFragment.ExpandableListAdapter adapter =
|
||||||
|
new LocalCalendarImportFragment.ExpandableListAdapter(getContext(), calendarAccountList);
|
||||||
|
listCalendar.setAdapter(adapter);
|
||||||
|
|
||||||
|
listCalendar.setOnChildClickListener(new ExpandableListView.OnChildClickListener() {
|
||||||
|
@Override
|
||||||
|
public boolean onChildClick(ExpandableListView aExpandableListView, View aView, int groupPosition, int childPosition, long aL) {
|
||||||
|
new ImportEvents().execute(calendarAccountList.get(groupPosition).calendars.get(childPosition));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private class ExpandableListAdapter extends BaseExpandableListAdapter {
|
||||||
|
|
||||||
|
private Context context;
|
||||||
|
private List<CalendarAccount> calendarAccounts;
|
||||||
|
|
||||||
|
public ExpandableListAdapter(Context context, List<CalendarAccount> calendarAccounts) {
|
||||||
|
this.context = context;
|
||||||
|
this.calendarAccounts = calendarAccounts;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Object getChild(int groupPosition, int childPosititon) {
|
||||||
|
return calendarAccounts.get(groupPosition).calendars
|
||||||
|
.get(childPosititon).getDisplayName();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public long getChildId(int groupPosition, int childPosition) {
|
||||||
|
return childPosition;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public View getChildView(int groupPosition, final int childPosition,
|
||||||
|
boolean isLastChild, View convertView, ViewGroup parent) {
|
||||||
|
|
||||||
|
final String childText = (String) getChild(groupPosition, childPosition);
|
||||||
|
|
||||||
|
if (convertView == null) {
|
||||||
|
LayoutInflater inflater = (LayoutInflater) context
|
||||||
|
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
|
||||||
|
convertView = inflater.inflate(R.layout.list_item, null);
|
||||||
|
}
|
||||||
|
//Todo add viewholder after we decide about the UI
|
||||||
|
|
||||||
|
TextView txtListChild = (TextView) convertView
|
||||||
|
.findViewById(R.id.lblListItem);
|
||||||
|
|
||||||
|
txtListChild.setText(childText);
|
||||||
|
return convertView;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getChildrenCount(int groupPosition) {
|
||||||
|
return calendarAccounts.get(groupPosition).calendars
|
||||||
|
.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Object getGroup(int groupPosition) {
|
||||||
|
return calendarAccounts.get(groupPosition).toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getGroupCount() {
|
||||||
|
return calendarAccounts.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public long getGroupId(int groupPosition) {
|
||||||
|
return groupPosition;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public View getGroupView(int groupPosition, boolean isExpanded,
|
||||||
|
View convertView, ViewGroup parent) {
|
||||||
|
String headerTitle = (String) getGroup(groupPosition);
|
||||||
|
if (convertView == null) {
|
||||||
|
LayoutInflater inflater = (LayoutInflater) context
|
||||||
|
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
|
||||||
|
convertView = inflater.inflate(R.layout.list_group, null);
|
||||||
|
}
|
||||||
|
//Todo add viewholder after we decide about the UI
|
||||||
|
|
||||||
|
TextView lblListHeader = (TextView) convertView
|
||||||
|
.findViewById(R.id.lblListHeader);
|
||||||
|
lblListHeader.setTypeface(null, Typeface.BOLD);
|
||||||
|
lblListHeader.setText(headerTitle);
|
||||||
|
|
||||||
|
return convertView;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean hasStableIds() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isChildSelectable(int groupPosition, int childPosition) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected class ImportEvents extends AsyncTask<LocalCalendar, Integer, Boolean> {
|
||||||
|
ProgressDialog progressDialog;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onPreExecute() {
|
||||||
|
progressDialog = new ProgressDialog(getActivity());
|
||||||
|
progressDialog.setTitle(R.string.import_dialog_title);
|
||||||
|
progressDialog.setMessage(getString(R.string.import_dialog_adding_entries));
|
||||||
|
progressDialog.setCanceledOnTouchOutside(false);
|
||||||
|
progressDialog.setCancelable(false);
|
||||||
|
progressDialog.setIndeterminate(false);
|
||||||
|
progressDialog.setIcon(R.drawable.ic_import_export_black);
|
||||||
|
progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
|
||||||
|
progressDialog.show();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Boolean doInBackground(LocalCalendar... calendars) {
|
||||||
|
return importEvents(calendars[0]);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onProgressUpdate(Integer... progress) {
|
||||||
|
if (progressDialog != null)
|
||||||
|
progressDialog.setProgress(progress[0]);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onPostExecute(Boolean result) {
|
||||||
|
progressDialog.dismiss();
|
||||||
|
if (result) importCallback.onImportSuccess();
|
||||||
|
else importCallback.onImportFailed();
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean importEvents(LocalCalendar fromCalendar) {
|
||||||
|
try {
|
||||||
|
LocalCalendar localCalendar = LocalCalendar.findByName(account,
|
||||||
|
getContext().getContentResolver().acquireContentProviderClient(CalendarContract.CONTENT_URI),
|
||||||
|
LocalCalendar.Factory.INSTANCE, info.url);
|
||||||
|
LocalEvent[] localEvents = fromCalendar.getAll();
|
||||||
|
progressDialog.setMax(localEvents.length);
|
||||||
|
int progress = 0;
|
||||||
|
for (LocalEvent currentLocalEvent : localEvents) {
|
||||||
|
Event event = currentLocalEvent.getEvent();
|
||||||
|
try {
|
||||||
|
LocalEvent localEvent = new LocalEvent(localCalendar, event, event.uid, null);
|
||||||
|
localEvent.addAsDirty();
|
||||||
|
} catch (CalendarStorageException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
publishProgress(++progress);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
} catch (Exception aE) {
|
||||||
|
aE.printStackTrace();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,11 @@
|
|||||||
|
package com.etesync.syncadapter.ui.importlocal;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by tal on 30/03/17.
|
||||||
|
*/
|
||||||
|
|
||||||
|
public interface OnImportCallback {
|
||||||
|
void onImportSuccess();
|
||||||
|
|
||||||
|
void onImportFailed();
|
||||||
|
}
|
@ -0,0 +1,11 @@
|
|||||||
|
package com.etesync.syncadapter.ui.importlocal;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by tal on 30/03/17.
|
||||||
|
*/
|
||||||
|
|
||||||
|
public interface SelectImportMethod {
|
||||||
|
void importFile();
|
||||||
|
|
||||||
|
void importAccount();
|
||||||
|
}
|
@ -1,54 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
xmlns:tools="http://schemas.android.com/tools"
|
android:id="@+id/fragment_container"
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:padding="@dimen/activity_margin"
|
android:padding="@dimen/activity_margin">
|
||||||
android:orientation="vertical">
|
</FrameLayout>
|
||||||
|
|
||||||
<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
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:orientation="vertical">
|
|
||||||
|
|
||||||
<android.support.v7.widget.Toolbar
|
|
||||||
android:id="@+id/caldav_menu"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:theme="@style/toolbar_theme"
|
|
||||||
style="@style/toolbar_style"
|
|
||||||
app:navigationIcon="@drawable/ic_event_light"
|
|
||||||
app:title="@string/settings_caldav"
|
|
||||||
android:elevation="2dp" tools:ignore="UnusedAttribute"/>
|
|
||||||
|
|
||||||
<ProgressBar
|
|
||||||
android:id="@+id/caldav_refreshing"
|
|
||||||
style="@style/Widget.AppCompat.ProgressBar.Horizontal"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:visibility="gone"
|
|
||||||
android:indeterminate="true"/>
|
|
||||||
|
|
||||||
<ExpandableListView
|
|
||||||
android:id="@+id/calendars"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:choiceMode="singleChoice"
|
|
||||||
android:descendantFocusability="beforeDescendants"/>
|
|
||||||
|
|
||||||
</LinearLayout>
|
|
||||||
|
|
||||||
</LinearLayout>
|
|
||||||
|
18
app/src/main/res/layout/fragment_import.xml
Normal file
18
app/src/main/res/layout/fragment_import.xml
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:orientation="horizontal">
|
||||||
|
|
||||||
|
<Button
|
||||||
|
android:id="@+id/import_button_file"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="@string/import_button_file"/>
|
||||||
|
|
||||||
|
<Button
|
||||||
|
android:id="@+id/import_button_account"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="@string/import_button_account"/>
|
||||||
|
</LinearLayout>
|
9
app/src/main/res/layout/fragment_local_import.xml
Normal file
9
app/src/main/res/layout/fragment_local_import.xml
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<ExpandableListView
|
||||||
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:id="@android:id/list"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:choiceMode="singleChoice"
|
||||||
|
android:descendantFocusability="beforeDescendants"/>
|
||||||
|
|
Loading…
Reference in New Issue
Block a user