package com.openerp.addons.message;
import android.annotation.SuppressLint;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.graphics.Color;
import android.os.AsyncTask;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
import android.view.ActionMode;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AbsListView.MultiChoiceModeListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.AdapterView.OnItemLongClickListener;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.SearchView;
import android.widget.TextView;
import android.widget.Toast;
import com.openerp.OEArguments;
import com.openerp.OETouchListener;
import com.openerp.R;
import com.openerp.orm.OEDataRow;
import com.openerp.orm.OEHelper;
import com.openerp.orm.OEValues;
import com.openerp.providers.message.MessageProvider;
import com.openerp.receivers.DataSetChangeReceiver;
import com.openerp.receivers.SyncFinishReceiver;
import com.openerp.support.AppScope;
import com.openerp.support.BaseFragment;
import com.openerp.support.fragment.FragmentListener;
import com.openerp.support.listview.OEListAdapter;
import com.openerp.util.HTMLHelper;
import com.openerp.util.OEDate;
import com.openerp.util.StringHelper;
import com.openerp.util.drawer.DrawerItem;
import com.openerp.util.drawer.DrawerListener;
import org.json.JSONArray;
import org.json.JSONObject;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.TimeZone;
public class Message extends BaseFragment implements
OETouchListener.OnPullListener, OnItemLongClickListener,
OnItemClickListener {
public static final String TAG = "com.openerp.addons.message.Message";
private enum MType {
INBOX, TOME, TODO, ARCHIVE, GROUP
}
Integer mGroupId = null;
Integer mSelectedItemPosition = -1;
Integer selectedCounter = 0;
MType mType = MType.INBOX;
String mCurrentType = "inbox";
View mView = null;
SearchView mSearchView = null;
OETouchListener mTouchAttacher;
ActionMode mActionMode;
@SuppressLint("UseSparseArrays")
HashMap<Integer, Boolean> mMultiSelectedRows = new HashMap<Integer, Boolean>();
OEListAdapter mListViewAdapter = null;
ListView mListView = null;
List<Object> mMessageObjects = new ArrayList<Object>();
Integer tag_color_count = 0;
Boolean isSynced = false;
/**
* Background data operations
*/
MessagesLoader mMessageLoader = null;
StarredOperation mStarredOperation = null;
ReadUnreadOperation mReadUnreadOperation = null;
HashMap<String, Integer> message_row_indexes = new HashMap<String, Integer>();
HashMap<String, Integer> message_model_colors = new HashMap<String, Integer>();
int[] background_resources = new int[]{
R.drawable.message_listview_bg_toread_selector,
R.drawable.message_listview_bg_tonotread_selector};
int[] starred_drawables = new int[]{R.drawable.ic_action_starred,
R.drawable.ic_action_unstarred};
String tag_colors[] = new String[]{"#A4C400", "#00ABA9", "#1BA1E2",
"#AA00FF", "#D80073", "#A20025", "#FA6800", "#6D8764", "#76608A",
"#EBB035"};
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
if (savedInstanceState != null) {
mSelectedItemPosition = savedInstanceState.getInt(
"mSelectedItemPosition", -1);
}
setHasOptionsMenu(true);
mView = inflater.inflate(R.layout.fragment_message, container, false);
scope = new AppScope(getActivity());
return mView;
}
private void init() {
Log.d(TAG, "Message->init()");
mListView = (ListView) mView.findViewById(R.id.lstMessages);
mListView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);
mListView.setOnItemLongClickListener(this);
mListView.setOnItemClickListener(this);
mListView.setMultiChoiceModeListener(mMessageViewMultiChoiceListener);
mListViewAdapter = new OEListAdapter(getActivity(),
R.layout.fragment_message_listview_items, mMessageObjects) {
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View mView = convertView;
if (mView == null)
mView = getActivity().getLayoutInflater().inflate(
getResource(), parent, false);
mView = handleRowView(mView, position);
return mView;
}
};
mListView.setAdapter(mListViewAdapter);
mTouchAttacher = scope.main().getTouchAttacher();
mTouchAttacher.setPullableView(mListView, this);
initData();
}
private void initData() {
Log.d(TAG, "Message->initData()");
if (mSelectedItemPosition > -1) {
return;
}
Bundle bundle = getArguments();
if (bundle != null) {
if (mMessageLoader != null) {
mMessageLoader.cancel(true);
mMessageLoader = null;
}
if (bundle.containsKey("type")) {
mCurrentType = bundle.getString("type");
String title = "Archive";
if (mCurrentType.equals("inbox")) {
mMessageLoader = new MessagesLoader(MType.INBOX);
mMessageLoader.execute((Void) null);
title = "Inbox";
} else if (mCurrentType.equals("to-me")) {
title = "To-Me";
mMessageLoader = new MessagesLoader(MType.TOME);
mMessageLoader.execute((Void) null);
} else if (mCurrentType.equals("to-do")) {
title = "To-DO";
mMessageLoader = new MessagesLoader(MType.TODO);
mMessageLoader.execute((Void) null);
} else if (mCurrentType.equals("archive")) {
mMessageLoader = new MessagesLoader(MType.ARCHIVE);
mMessageLoader.execute((Void) null);
}
scope.main().setTitle(title);
} else {
if (bundle.containsKey("group_id")) {
mGroupId = bundle.getInt("group_id");
mMessageLoader = new MessagesLoader(MType.GROUP);
mMessageLoader.execute((Void) null);
} else {
scope.main().setTitle("Inbox");
mMessageLoader = new MessagesLoader(MType.INBOX);
mMessageLoader.execute((Void) null);
}
}
}
}
// Handling each row view
private View handleRowView(View mView, final int position) {
final OEDataRow row = (OEDataRow) mMessageObjects.get(position);
boolean to_read = row.getBoolean("to_read");
mView.setBackgroundResource((to_read) ? background_resources[1]
: background_resources[0]);
TextView txvSubject, txvBody, txvFrom, txvDate, txvTag, txvchilds;
final ImageView imgStarred = (ImageView) mView
.findViewById(R.id.imgMessageStarred);
final boolean starred = row.getBoolean("starred");
imgStarred.setImageResource((starred) ? starred_drawables[0]
: starred_drawables[1]);
imgStarred.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Handling Starred click event
mMultiSelectedRows.put(position, true);
mStarredOperation = new StarredOperation((starred) ? false
: true);
mStarredOperation.execute();
}
});
txvSubject = (TextView) mView.findViewById(R.id.txvMessageSubject);
txvBody = (TextView) mView.findViewById(R.id.txvMessageBody);
txvFrom = (TextView) mView.findViewById(R.id.txvMessageFrom);
txvDate = (TextView) mView.findViewById(R.id.txvMessageDate);
txvTag = (TextView) mView.findViewById(R.id.txvMessageTag);
txvchilds = (TextView) mView.findViewById(R.id.txvChilds);
if (!to_read) {
txvSubject.setTextColor(Color.BLACK);
txvFrom.setTextColor(Color.BLACK);
} else {
txvSubject.setTextColor(Color.parseColor("#414141"));
txvFrom.setTextColor(Color.parseColor("#414141"));
}
String subject = row.getString("subject");
if (subject.equals("false")) {
subject = row.getString("type");
}
if (!row.getString("record_name").equals("false"))
subject = row.getString("record_name");
txvSubject.setText(subject);
if (row.getInt("childs") > 0) {
txvchilds.setVisibility(View.VISIBLE);
txvchilds.setText(row.getString("childs") + " reply");
} else
txvchilds.setVisibility(View.GONE);
txvBody.setText(HTMLHelper.htmlToString(row.getString("body")));
String date = row.getString("date");
txvDate.setText(OEDate.getDate(date, TimeZone.getDefault().getID()));
String from = row.getString("email_from");
if (from.equals("false")) {
OEDataRow author_id = row.getM2ORecord("author_id").browse();
if (author_id != null)
from = row.getM2ORecord("author_id").browse().getString("name");
}
txvFrom.setText(from);
String model_name = row.getString("model");
if (model_name.equals("false")) {
model_name = StringHelper.capitalizeString(row.getString("type"));
} else {
String[] model_parts = TextUtils.split(model_name, "\\.");
@SuppressWarnings({"unchecked", "rawtypes"})
HashSet unique_parts = new HashSet(Arrays.asList(model_parts));
model_name = StringHelper.capitalizeString(TextUtils.join(" ",
unique_parts.toArray()));
}
int tag_color = 0;
if (message_model_colors.containsKey(model_name)) {
tag_color = message_model_colors.get(model_name);
} else {
tag_color = Color.parseColor(tag_colors[tag_color_count]);
message_model_colors.put(model_name, tag_color);
tag_color_count++;
if (tag_color_count > tag_colors.length) {
tag_color_count = 0;
}
}
if (row.getString("model").equals("mail.group")) {
String res_id = row.getString("res_id");
if (MailGroup.mMenuGroups.containsKey("group_" + res_id)) {
OEDataRow grp = (OEDataRow) MailGroup.mMenuGroups.get("group_"
+ res_id);
model_name = grp.getString("name");
tag_color = grp.getInt("tag_color");
}
}
txvTag.setBackgroundColor(tag_color);
txvTag.setText(model_name);
return mView;
}
MultiChoiceModeListener mMessageViewMultiChoiceListener = new MultiChoiceModeListener() {
@Override
public void onItemCheckedStateChanged(ActionMode mode, int position,
long id, boolean checked) {
mMultiSelectedRows.put(position, checked);
if (checked) {
selectedCounter++;
} else {
selectedCounter--;
}
if (selectedCounter != 0) {
mode.setTitle(selectedCounter + "");
}
}
@SuppressLint("UseSparseArrays")
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_message_mark_unread_selected:
mReadUnreadOperation = new ReadUnreadOperation(true);
mReadUnreadOperation.execute();
mode.finish();
return true;
case R.id.menu_message_mark_read_selected:
mReadUnreadOperation = new ReadUnreadOperation(false);
mReadUnreadOperation.execute();
mode.finish();
return true;
case R.id.menu_message_more_move_to_archive_selected:
mReadUnreadOperation = new ReadUnreadOperation(false);
mReadUnreadOperation.execute();
mode.finish();
return true;
case R.id.menu_message_more_add_star_selected:
mStarredOperation = new StarredOperation(true);
mStarredOperation.execute();
mode.finish();
return true;
case R.id.menu_message_more_remove_star_selected:
mStarredOperation = new StarredOperation(false);
mStarredOperation.execute();
mode.finish();
return true;
default:
return false;
}
}
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
MenuInflater inflater = mode.getMenuInflater();
inflater.inflate(R.menu.menu_fragment_message_context, menu);
return true;
}
@Override
public void onDestroyActionMode(ActionMode mode) {
selectedCounter = 0;
mListView.clearChoices();
}
@Override
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
return false;
}
};
private int getStatusMessage(MType type) {
switch (type) {
case INBOX:
return R.string.message_inbox_all_read;
case TOME:
return R.string.message_tome_all_read;
case TODO:
return R.string.message_todo_all_read;
case GROUP:
return R.string.message_no_group_message;
default:
break;
}
return 0;
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.menu_fragment_message, menu);
mSearchView = (SearchView) menu.findItem(R.id.menu_message_search)
.getActionView();
// Hidning compose menu for group messages.
Bundle bundle = getArguments();
if (bundle != null && bundle.containsKey("group_id")) {
MenuItem compose = menu.findItem(R.id.menu_message_compose);
compose.setVisible(false);
}
//FIXME 将init在此处调用,防止mSearchView还未初始化出现空指针错误
init();
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_message_compose:
getActivity().startActivity(
new Intent(getActivity(), MessageComposeActivity.class));
return true;
default:
return super.onOptionsItemSelected(item);
}
}
@Override
public Object databaseHelper(Context context) {
return new MessageDB(context);
}
@Override
public List<DrawerItem> drawerMenus(Context context) {
List<DrawerItem> drawerItems = new ArrayList<DrawerItem>();
MessageDB db = new MessageDB(context);
// if (db.isInstalledOnServer()) {
String message_group_title = context.getResources().getString(R.string.message_group_title);
String locale_inbox = context.getResources().getString(R.string.message_drawer_item_inbox);
String locale_tome = context.getResources().getString(R.string.message_drawer_item_tome);
String locale_todo = context.getResources().getString(R.string.message_drawer_item_todo);
String locale_archives = context.getResources().getString(R.string.message_drawer_item_archives);
drawerItems.add(new DrawerItem(TAG, message_group_title, true));
drawerItems
.add(new DrawerItem(TAG, locale_inbox, count(MType.INBOX,
context), R.drawable.ic_action_inbox,
getFragment("inbox")
));
drawerItems.add(new DrawerItem(TAG, locale_tome, count(MType.TOME,
context), R.drawable.ic_action_user, getFragment("to-me")));
drawerItems.add(new DrawerItem(TAG, locale_todo, count(MType.TODO,
context), R.drawable.ic_action_todo, getFragment("to-do")));
drawerItems.add(new DrawerItem(TAG, locale_archives, 0,
R.drawable.ic_action_archive, getFragment("archive")));
// }
return drawerItems;
}
private int count(MType type, Context context) {
int count = 0;
MessageDB db = new MessageDB(context);
String where = null;
String whereArgs[] = null;
HashMap<String, Object> obj = getWhere(type);
where = (String) obj.get("where");
whereArgs = (String[]) obj.get("whereArgs");
count = db.count(where, whereArgs);
return count;
}
public HashMap<String, Object> getWhere(MType type) {
HashMap<String, Object> map = new HashMap<String, Object>();
String where = null;
String[] whereArgs = null;
switch (type) {
case INBOX:
where = "to_read = ? AND starred = ?";
whereArgs = new String[]{"true", "false"};
break;
case TOME:
where = "res_id = ? AND to_read = ?";
whereArgs = new String[]{"0", "true"};
break;
case TODO:
where = "to_read = ? AND starred = ?";
whereArgs = new String[]{"true", "true"};
break;
case GROUP:
where = "res_id = ? AND model = ?";
whereArgs = new String[]{mGroupId + "", "mail.group"};
break;
default:
where = null;
whereArgs = null;
break;
}
map.put("where", where);
map.put("whereArgs", whereArgs);
return map;
}
private BaseFragment getFragment(String value) {
Message message = new Message();
Bundle bundle = new Bundle();
bundle.putString("type", value);
message.setArguments(bundle);
return message;
}
public class MessagesLoader extends AsyncTask<Void, Void, Boolean> {
MType messageType = null;
public MessagesLoader(MType type) {
messageType = type;
mView.findViewById(R.id.loadingProgress)
.setVisibility(View.VISIBLE);
}
@Override
protected Boolean doInBackground(Void... arg0) {
HashMap<String, Object> map = getWhere(messageType);
String where = (String) map.get("where");
String whereArgs[] = (String[]) map.get("whereArgs");
mType = messageType;
List<OEDataRow> result = db().select(where, whereArgs, null, null, "date DESC");
HashMap<String, OEDataRow> parent_list_details = new HashMap<String, OEDataRow>();
mMessageObjects.clear();
if (result.size() > 0) {
int i = 0;
for (OEDataRow row : result) {
boolean isParent = true;
String key = row.getString("parent_id");
if (key.equals("false")) {
key = row.getString("id");
} else {
isParent = false;
}
if (!parent_list_details.containsKey(key)) {
// Fetching row parent message
OEDataRow newRow = null;
if (isParent) {
newRow = row;
} else {
newRow = db().select(Integer.parseInt(key));
}
int childs = db().count("parent_id = ? ", new String[]{key});
newRow.put("childs", childs);
parent_list_details.put(key, null);
message_row_indexes.put(key, i);
i++;
mMessageObjects.add(newRow);
}
}
}
return true;
}
@Override
protected void onPostExecute(final Boolean success) {
mView.findViewById(R.id.loadingProgress).setVisibility(View.GONE);
mListViewAdapter.notifiyDataChange(mMessageObjects);
mSearchView
.setOnQueryTextListener(getQueryListener(mListViewAdapter));
mMessageLoader = null;
checkMessageStatus();
}
}
private void checkMessageStatus() {
// Fetching parent ids from Child row with order by date desc
if (mMessageObjects.size() == 0) {
if (db().isEmptyTable() && !isSynced) {
isSynced = true;
if (mView.findViewById(R.id.waitingForSyncToStart) != null) {
mView.findViewById(R.id.waitingForSyncToStart)
.setVisibility(View.VISIBLE);
}
try {
Thread.sleep(2000);
if (mGroupId != null) {
Bundle group_bundle = new Bundle();
JSONArray ids = new JSONArray();
ids.put(mGroupId);
group_bundle.putString("group_ids", ids.toString());
scope.main().requestSync(MessageProvider.AUTHORITY,
group_bundle);
} else {
scope.main().requestSync(MessageProvider.AUTHORITY);
}
} catch (Exception e) {
}
} else {
mView.findViewById(R.id.waitingForSyncToStart).setVisibility(
View.GONE);
TextView txvMsg = (TextView) mView
.findViewById(R.id.txvMessageAllReadMessage);
Integer res_id = getStatusMessage(mType);
if (res_id > 0) {
txvMsg.setVisibility(View.VISIBLE);
txvMsg.setText(getStatusMessage(mType));
}
}
}
}
/**
* On message item click
*/
@Override
public void onItemClick(AdapterView<?> adapter, View view, int position,
long id) {
mSelectedItemPosition = position;
OEDataRow row = (OEDataRow) mMessageObjects.get(position);
MessageDetail detail = new MessageDetail();
Bundle bundle = new Bundle();
bundle.putInt("message_id", row.getInt("id"));
bundle.putInt("position", position);
detail.setArguments(bundle);
FragmentListener listener = (FragmentListener) getActivity();
listener.startDetailFragment(detail);
}
/**
* on message item long press
*/
@Override
public boolean onItemLongClick(AdapterView<?> adapter, View view,
int position, long id) {
return false;
}
/**
* on pulled for sync message
*/
@Override
public void onPullStarted(View arg0) {
scope.main().requestSync(MessageProvider.AUTHORITY);
}
@Override
public void onResume() {
super.onResume();
scope.context().registerReceiver(messageSyncFinish,
new IntentFilter(SyncFinishReceiver.SYNC_FINISH));
scope.context().registerReceiver(datasetChangeReceiver,
new IntentFilter(DataSetChangeReceiver.DATA_CHANGED));
}
@Override
public void onPause() {
super.onPause();
scope.context().unregisterReceiver(messageSyncFinish);
scope.context().unregisterReceiver(datasetChangeReceiver);
Bundle outState = new Bundle();
outState.putInt("mSelectedItemPosition", mSelectedItemPosition);
onSaveInstanceState(outState);
}
/*
* Used for Synchronization : Register receiver and unregister receiver
*
* SyncFinishReceiver
*/
private SyncFinishReceiver messageSyncFinish = new SyncFinishReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
mTouchAttacher.setPullComplete();
scope.main().refreshDrawer(TAG);
mListViewAdapter.clear();
mMessageObjects.clear();
mListViewAdapter.notifiyDataChange(mMessageObjects);
new MessagesLoader(mType).execute();
}
};
private DataSetChangeReceiver datasetChangeReceiver = new DataSetChangeReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
try {
mView.findViewById(R.id.waitingForSyncToStart).setVisibility(
View.GONE);
String id = intent.getExtras().getString("id");
String model = intent.getExtras().getString("model");
if (model.equals("mail.message")) {
OEDataRow row = db().select(Integer.parseInt(id));
if (!row.getString("parent_id").equals("false")) {
row = db().select(row.getInt("parent_id"));
}
row.put("childs", 0);
int parent_id = row.getInt("id");
if (message_row_indexes.containsKey(parent_id + "")
&& mMessageObjects.size() > 0) {
mMessageObjects.remove(Integer
.parseInt(message_row_indexes.get(
parent_id + "").toString()));
}
mMessageObjects.add(0, row);
message_row_indexes.put(parent_id + "", parent_id);
mListViewAdapter.notifiyDataChange(mMessageObjects);
}
} catch (Exception e) {
}
}
};
/**
* Making message read or unread or Archive
*/
public class ReadUnreadOperation extends AsyncTask<Void, Void, Boolean> {
ProgressDialog mProgressDialog = null;
boolean mToRead = false;
boolean isConnection = true;
OEHelper mOE = null;
public ReadUnreadOperation(boolean toRead) {
mOE = db().getOEInstance();
if (mOE == null)
isConnection = false;
mToRead = toRead;
mProgressDialog = new ProgressDialog(getActivity());
mProgressDialog.setMessage("Working...");
if (isConnection) {
mProgressDialog.show();
}
}
@Override
protected Boolean doInBackground(Void... params) {
if (!isConnection)
return false;
boolean flag = false;
for (int position : mMultiSelectedRows.keySet()) {
if (mMultiSelectedRows.get(position)) {
OEDataRow row = (OEDataRow) mMessageObjects.get(position);
String default_model = "false";
JSONArray ids = new JSONArray();
int parent_id = 0, res_id = 0;
if (row.getString("parent_id").equals("false")) {
parent_id = row.getInt("id");
res_id = row.getInt("res_id");
default_model = row.getString("model");
} else {
parent_id = row.getInt("parent_id");
}
ids.put(parent_id);
for (OEDataRow child : db().select("parent_id = ? ",
new String[]{parent_id + ""})) {
ids.put(child.getInt("id"));
}
if (toggleReadUnread(mOE, ids, default_model, res_id,
parent_id, mToRead)) {
flag = true;
}
}
}
return flag;
}
@Override
protected void onPostExecute(Boolean result) {
if (result) {
ArrayList<Integer> keys = new ArrayList<Integer>(
mMultiSelectedRows.keySet());
for (int position = keys.size() - 1; position >= 0; position--) {
if (!mToRead && !mType.equals(MType.ARCHIVE)) {
mMessageObjects.remove(position);
}
}
mListViewAdapter.notifiyDataChange(mMessageObjects);
if (mMessageObjects.size() == 0) {
TextView txvMsg = (TextView) mView
.findViewById(R.id.txvMessageAllReadMessage);
txvMsg.setVisibility(View.VISIBLE);
txvMsg.setText(getStatusMessage(mType));
}
DrawerListener drawer = (DrawerListener) getActivity();
drawer.refreshDrawer(TAG);
drawer.refreshDrawer(MailGroup.TAG);
} else {
Toast.makeText(getActivity(), "No connection",
Toast.LENGTH_LONG).show();
}
mMultiSelectedRows.clear();
mProgressDialog.dismiss();
}
}
/* Method for Make Message as Read,Unread and Archive */
private boolean toggleReadUnread(OEHelper oe, JSONArray ids,
String default_model, int res_id, int parent_id, boolean to_read) {
boolean flag = false;
JSONObject newContext = new JSONObject();
OEArguments args = new OEArguments();
try {
if (default_model.equals("false")) {
newContext.put("default_model", false);
} else {
newContext.put("default_model", default_model);
}
newContext.put("default_res_id", res_id);
newContext.put("default_parent_id", parent_id);
// Param 1 : message_ids list
args.add(ids);
// Param 2 : to_read - boolean value
args.add((to_read) ? false : true);
// Param 3 : create_missing - If table does not contain any value
// for
// this row than create new one
args.add(true);
// Param 4 : context
args.add(newContext);
// Creating Local Database Requirement Values
OEValues values = new OEValues();
String value = (to_read) ? "true" : "false";
values.put("starred", false);
values.put("to_read", value);
int result = (Integer) oe.call_kw("set_message_read", args, null);
if (result > 0) {
for (int i = 0; i < ids.length(); i++) {
int id = ids.getInt(i);
db().update(values, id);
}
flag = true;
}
} catch (Exception e) {
e.printStackTrace();
}
return flag;
}
/**
* Marking each row starred/unstarred in background
*/
public class StarredOperation extends AsyncTask<Void, Void, Boolean> {
boolean mStarred = false;
ProgressDialog mProgressDialog = null;
boolean isConnection = true;
OEHelper mOE = null;
public StarredOperation(boolean starred) {
mStarred = starred;
mOE = db().getOEInstance();
if (mOE == null)
isConnection = false;
mProgressDialog = new ProgressDialog(getActivity());
mProgressDialog.setMessage("Working...");
if (isConnection) {
mProgressDialog.show();
}
}
@Override
protected Boolean doInBackground(Void... params) {
if (!isConnection) {
return false;
}
JSONArray mIds = new JSONArray();
for (int position : mMultiSelectedRows.keySet()) {
if (mMultiSelectedRows.get(position)) {
OEDataRow row = (OEDataRow) mMessageObjects.get(position);
mIds.put(row.getInt("id"));
}
}
OEArguments args = new OEArguments();
// Param 1 : message_ids list
args.add(mIds);
// Param 2 : starred - boolean value
args.add(mStarred);
// Param 3 : create_missing - If table does not contain any value
// for
// this row than create new one
args.add(true);
// Creating Local Database Requirement Values
OEValues values = new OEValues();
String value = (mStarred) ? "true" : "false";
values.put("starred", value);
boolean response = (Boolean) mOE.call_kw("set_message_starred", args, null);
response = (!mStarred && !response) ? true : response;
if (response) {
try {
for (int i = 0; i < mIds.length(); i++)
db().update(values, mIds.getInt(i));
} catch (Exception e) {
}
}
return response;
}
@Override
protected void onPostExecute(Boolean result) {
if (result) {
for (int position : mMultiSelectedRows.keySet()) {
OEDataRow row = (OEDataRow) mMessageObjects.get(position);
row.put("starred", mStarred);
}
mListViewAdapter.notifiyDataChange(mMessageObjects);
DrawerListener drawer = (DrawerListener) getActivity();
drawer.refreshDrawer(TAG);
drawer.refreshDrawer(MailGroup.TAG);
} else {
Toast.makeText(getActivity(), "No connection",
Toast.LENGTH_LONG).show();
}
mMultiSelectedRows.clear();
mProgressDialog.dismiss();
}
}
}