blob: 84fc67dfee93903142b81781efba20df7cf15844 [file] [log] [blame]
/*
* Copyright (C) 2011 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.calendar.selectcalendars;
import android.app.ActionBar;
import android.app.ExpandableListActivity;
import android.content.AsyncQueryHandler;
import android.database.Cursor;
import android.database.MatrixCursor;
import android.os.Bundle;
import android.provider.CalendarContract.Calendars;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.ExpandableListView;
import com.android.calendar.R;
import com.android.calendar.Utils;
public class SelectSyncedCalendarsMultiAccountActivity extends ExpandableListActivity
implements View.OnClickListener {
private static final String TAG = "Calendar";
private static final String EXPANDED_KEY = "is_expanded";
private static final String ACCOUNT_UNIQUE_KEY = "ACCOUNT_KEY";
private MatrixCursor mAccountsCursor = null;
private ExpandableListView mList;
private SelectSyncedCalendarsMultiAccountAdapter mAdapter;
private static final String[] PROJECTION = new String[] {
Calendars._ID,
Calendars.ACCOUNT_TYPE,
Calendars.ACCOUNT_NAME,
Calendars.ACCOUNT_TYPE + " || " + Calendars.ACCOUNT_NAME + " AS " +
ACCOUNT_UNIQUE_KEY,
};
@Override
protected void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.select_calendars_multi_accounts_fragment);
mList = getExpandableListView();
mList.setEmptyView(findViewById(R.id.loading));
// Start a background sync to get the list of calendars from the server.
Utils.startCalendarMetafeedSync(null);
findViewById(R.id.btn_done).setOnClickListener(this);
findViewById(R.id.btn_discard).setOnClickListener(this);
}
@Override
public void onClick(View view) {
if (view.getId() == R.id.btn_done) {
if (mAdapter != null) {
mAdapter.doSaveAction();
}
finish();
} else if (view.getId() == R.id.btn_discard) {
finish();
}
}
@Override
protected void onResume() {
super.onResume();
if (mAdapter != null) {
mAdapter.startRefreshStopDelay();
}
new AsyncQueryHandler(getContentResolver()) {
@Override
protected void onQueryComplete(int token, Object cookie, Cursor cursor) {
mAccountsCursor = Utils.matrixCursorFromCursor(cursor);
mAdapter = new SelectSyncedCalendarsMultiAccountAdapter(
findViewById(R.id.calendars).getContext(), mAccountsCursor,
SelectSyncedCalendarsMultiAccountActivity.this);
mList.setAdapter(mAdapter);
// TODO initialize from sharepref
int count = mList.getCount();
for(int i = 0; i < count; i++) {
mList.expandGroup(i);
}
}
}.startQuery(0, null, Calendars.CONTENT_URI, PROJECTION,
"1) GROUP BY (" + ACCOUNT_UNIQUE_KEY, //Cheap hack to make WHERE a GROUP BY query
null /* selectionArgs */,
Calendars.ACCOUNT_NAME /*sort order*/);
//TODO change to something that supports group by queries.
}
@Override
protected void onPause() {
super.onPause();
if (mAdapter != null) {
mAdapter.cancelRefreshStopDelay();
}
}
@Override
protected void onStop() {
super.onStop();
if (mAdapter != null) {
mAdapter.closeChildrenCursors();
}
if (mAccountsCursor != null && !mAccountsCursor.isClosed()) {
mAccountsCursor.close();
}
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
boolean[] isExpanded;
mList = getExpandableListView();
if(mList != null) {
int count = mList.getCount();
isExpanded = new boolean[count];
for(int i = 0; i < count; i++) {
isExpanded[i] = mList.isGroupExpanded(i);
}
} else {
isExpanded = null;
}
outState.putBooleanArray(EXPANDED_KEY, isExpanded);
//TODO Store this to preferences instead so it remains on restart
}
@Override
protected void onRestoreInstanceState(Bundle state) {
super.onRestoreInstanceState(state);
mList = getExpandableListView();
boolean[] isExpanded = state.getBooleanArray(EXPANDED_KEY);
if(mList != null && isExpanded != null && mList.getCount() >= isExpanded.length) {
for(int i = 0; i < isExpanded.length; i++) {
if(isExpanded[i] && !mList.isGroupExpanded(i)) {
mList.expandGroup(i);
} else if(!isExpanded[i] && mList.isGroupExpanded(i)){
mList.collapseGroup(i);
}
}
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getActionBar()
.setDisplayOptions(ActionBar.DISPLAY_HOME_AS_UP, ActionBar.DISPLAY_HOME_AS_UP);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
Utils.returnToCalendarHome(this);
return true;
}
return super.onOptionsItemSelected(item);
}
}