/*
* Tweetings - Twitter client for Android
*
* Copyright (C) 2012-2013 RBD Solutions Limited <apps@tweetings.net>
* Copyright (C) 2012 Mariotaku Lee <mariotaku.lee@gmail.com>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.dwdesign.tweetings.activity;
import java.util.ArrayList;
import java.util.List;
import com.dwdesign.tweetings.Constants;
import com.dwdesign.tweetings.R;
import com.dwdesign.tweetings.provider.TweetStore.Accounts;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.support.v4.widget.SimpleCursorAdapter;
import android.util.SparseBooleanArray;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import android.widget.Toast;
public class SelectAccountActivity extends BaseDialogActivity implements OnItemClickListener, OnClickListener {
private ListView mListView;
private SimpleCursorAdapter mAdapter;
private Cursor mCursor;
private final List<Long> mActivatedUsersId = new ArrayList<Long>();
public Cursor getAccountsCursor(final boolean activated_only) {
final Uri uri = Accounts.CONTENT_URI;
final String[] cols = new String[] { Accounts._ID, Accounts.USER_ID, Accounts.USERNAME, Accounts.IS_ACTIVATED };
final String where = activated_only ? Accounts.IS_ACTIVATED + " = " + 1 : null;
return getContentResolver().query(uri, cols, where, null, null);
}
@Override
public void onBackPressed() {
if (mActivatedUsersId.size() <= 0) {
Toast.makeText(this, R.string.no_account_selected, Toast.LENGTH_SHORT).show();
return;
}
final Bundle bundle = new Bundle();
final long[] ids = new long[mActivatedUsersId.size()];
int i = 0;
for (final Long id_long : mActivatedUsersId) {
ids[i] = id_long;
i++;
}
bundle.putLongArray(INTENT_KEY_IDS, ids);
setResult(RESULT_OK, new Intent().putExtras(bundle));
finish();
}
@Override
public void onClick(final View view) {
switch (view.getId()) {
case R.id.save: {
onBackPressed();
break;
}
}
}
@Override
public void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
final Bundle bundle = savedInstanceState != null ? savedInstanceState : getIntent().getExtras();
setContentView(R.layout.select_account);
mListView = (ListView) findViewById(android.R.id.list);
final String[] from = new String[] { Accounts.USERNAME };
final int[] to = new int[] { android.R.id.text1 };
mCursor = getAccountsCursor(bundle != null ? bundle.getBoolean(INTENT_KEY_ACTIVATED_ONLY, false) : false);
if (mCursor == null) {
finish();
return;
}
mAdapter = new SimpleCursorAdapter(this, android.R.layout.simple_list_item_multiple_choice, mCursor, from, to,
0);
mListView.setAdapter(mAdapter);
mListView.setOnItemClickListener(this);
mListView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
final long[] activated_ids = bundle != null ? bundle.getLongArray(Constants.INTENT_KEY_IDS) : null;
mActivatedUsersId.clear();
if (activated_ids == null) {
mCursor.moveToFirst();
while (!mCursor.isAfterLast()) {
final boolean is_activated = mCursor.getInt(mCursor.getColumnIndexOrThrow(Accounts.IS_ACTIVATED)) == 1;
final long user_id = mCursor.getLong(mCursor.getColumnIndexOrThrow(Accounts.USER_ID));
if (is_activated) {
mActivatedUsersId.add(user_id);
}
mListView.setItemChecked(mCursor.getPosition(), is_activated);
mCursor.moveToNext();
}
} else {
for (final long id : activated_ids) {
mCursor.moveToFirst();
while (!mCursor.isAfterLast()) {
final long user_id = mCursor.getLong(mCursor.getColumnIndexOrThrow(Accounts.USER_ID));
if (id == user_id) {
mListView.setItemChecked(mCursor.getPosition(), true);
mActivatedUsersId.add(user_id);
}
mCursor.moveToNext();
}
}
}
}
@Override
public void onDestroy() {
if (mCursor != null && !mCursor.isClosed()) {
mCursor.close();
}
super.onDestroy();
}
@Override
public void onItemClick(final AdapterView<?> adapter, final View view, final int position, final long id) {
if (mCursor == null || mCursor.isClosed()) return;
final int choise_mode = mListView.getChoiceMode();
if (choise_mode == ListView.CHOICE_MODE_NONE) return;
final SparseBooleanArray checkedpositions = mListView.getCheckedItemPositions();
final boolean checked = checkedpositions.get(position, false);
mCursor.moveToPosition(position);
final long user_id = mCursor.getLong(mCursor.getColumnIndexOrThrow(Accounts.USER_ID));
if (!checked) {
if (mActivatedUsersId.contains(user_id)) {
mActivatedUsersId.remove(user_id);
}
} else if (!mActivatedUsersId.contains(user_id)) {
mActivatedUsersId.add(user_id);
}
}
@Override
public void onSaveInstanceState(final Bundle outState) {
final int ids_size = mActivatedUsersId.size();
final long[] ids = new long[ids_size];
for (int i = 0; i < ids_size; i++) {
ids[i] = mActivatedUsersId.get(i);
}
outState.putLongArray(Constants.INTENT_KEY_IDS, ids);
super.onSaveInstanceState(outState);
}
}