package com.odoo.addons.mail;
import java.util.ArrayList;
import java.util.List;
import android.content.Context;
import android.content.Intent;
import android.content.res.Resources;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.LoaderManager.LoaderCallbacks;
import android.support.v4.content.CursorLoader;
import android.support.v4.content.Loader;
import android.support.v4.widget.SwipeRefreshLayout.OnRefreshListener;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import android.widget.Toast;
import com.odoo.App;
import com.odoo.R;
import com.odoo.addons.mail.models.MailGroup;
import com.odoo.addons.mail.providers.group.MailGroupProvider;
import com.odoo.orm.ODataRow;
import com.odoo.support.AppScope;
import com.odoo.support.fragment.AsyncTaskListener;
import com.odoo.support.fragment.BaseFragment;
import com.odoo.support.fragment.SyncStatusObserverListener;
import com.odoo.support.listview.OCursorListAdapter;
import com.odoo.support.listview.OCursorListAdapter.OnRowViewClickListener;
import com.odoo.support.listview.OCursorListAdapter.OnViewBindListener;
import com.odoo.util.OControls;
import com.odoo.util.drawer.DrawerItem;
public class Groups extends BaseFragment implements LoaderCallbacks<Cursor>,
OnRefreshListener, SyncStatusObserverListener, OnItemClickListener,
OnRowViewClickListener, OnViewBindListener {
public static final String TAG = Groups.class.getSimpleName();
private Context mContext = null;
private OCursorListAdapter mAdapter;
private ListView groupList = null;
public static final String KEY = "group_id";
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
mContext = getActivity();
setHasOptionsMenu(true);
setHasSyncStatusObserver(TAG, this, db());
scope = new AppScope(mContext);
return inflater.inflate(R.layout.groups, container, false);
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
setHasSwipeRefreshView(view, R.id.swipe_container, this);
groupList = (ListView) view.findViewById(R.id.listGroups);
mAdapter = new OCursorListAdapter(getActivity(), null,
R.layout.groups_list_item);
mAdapter.setOnViewBindListener(this);
groupList.setOnItemClickListener(this);
mAdapter.setOnRowViewClickListener(R.id.btnJoinGroup, this);
mAdapter.setOnRowViewClickListener(R.id.btnUnJoinGroup, this);
groupList.setAdapter(mAdapter);
getLoaderManager().initLoader(0, null, this);
}
@Override
public Object databaseHelper(Context context) {
return new MailGroup(context);
}
@Override
public List<DrawerItem> drawerMenus(Context context) {
Resources res = context.getResources();
List<DrawerItem> menu = new ArrayList<DrawerItem>();
menu.add(new DrawerItem(TAG, context
.getString(R.string.drawer_group_title), true));
menu.add(new DrawerItem(TAG, res.getString(R.string.drawer_group), 0,
R.drawable.ic_action_social_group, object("group")));
Intent intent = null;
String note_package = "com.odoo.notes";
App app = (App) context.getApplicationContext();
if (app.appInstalled(note_package)) {
intent = app.getPackageManager().getLaunchIntentForPackage(
note_package);
} else {
intent = new Intent(Intent.ACTION_VIEW,
Uri.parse("market://details?id=" + note_package));
}
menu.add(new DrawerItem(TAG, res.getString(R.string.drawer_notes), true));
menu.add(new DrawerItem(TAG, res.getString(R.string.drawer_notes), 0,
R.drawable.ic_action_notes, intent));
return menu;
}
private Fragment object(String value) {
Groups group = new Groups();
Bundle bundle = new Bundle();
bundle.putString("group", value);
group.setArguments(bundle);
return group;
}
@Override
public Loader<Cursor> onCreateLoader(int arg0, Bundle arg1) {
if (db().isEmptyTable()) {
scope.main().requestSync(MailGroupProvider.AUTHORITY);
setSwipeRefreshing(true);
}
return new CursorLoader(mContext, db().uri(), db().projection(), null,
null, null);
}
@Override
public void onLoadFinished(Loader<Cursor> arg0, Cursor cursor) {
mAdapter.changeCursor(cursor);
}
@Override
public void onLoaderReset(Loader<Cursor> arg0) {
mAdapter.changeCursor(null);
}
@Override
public void onRefresh() {
if (app().inNetwork()) {
scope.main().requestSync(MailGroupProvider.AUTHORITY);
} else {
hideRefreshingProgress();
Toast.makeText(getActivity(), _s(R.string.no_connection),
Toast.LENGTH_LONG).show();
}
}
@Override
public void onStatusChange(Boolean refreshing) {
if (!refreshing)
hideRefreshingProgress();
else
setSwipeRefreshing(true);
}
@Override
public void onItemClick(AdapterView<?> arg0, View view, int position,
long arg3) {
Cursor cr = mAdapter.getCursor();
cr.moveToPosition(position);
Integer has_joined = cr.getInt(cr.getColumnIndex("has_followed"));
if (has_joined == 1) {
Mail mail = new Mail();
Bundle bundle = new Bundle();
bundle.putInt(KEY, cr.getInt(cr.getColumnIndex("id")));
bundle.putString(Mail.KEY, Mail.Type.Group.toString());
mail.setArguments(bundle);
startFragment(mail, true);
} else {
Toast.makeText(getActivity(), _s(R.string.first_join_group),
Toast.LENGTH_LONG).show();
}
}
@Override
public void onRowViewClick(int position, Cursor cursor, View view,
final View parent) {
final int group_id = cursor.getInt(cursor.getColumnIndex("id"));
final MailGroup group = new MailGroup(getActivity());
if (inNetwork()) {
switch (view.getId()) {
case R.id.btnJoinGroup:
scope.main().newBackgroundTask(new AsyncTaskListener() {
@Override
public Object onPerformTask() {
group.followUnfollowGroup(group_id, true);
return null;
}
@Override
public void onFinish(Object result) {
Toast.makeText(getActivity(),
_s(R.string.toast_group_followed),
Toast.LENGTH_LONG).show();
OControls.setGone(parent, R.id.btnJoinGroup);
OControls.setVisible(parent, R.id.btnUnJoinGroup);
}
}).execute();
break;
case R.id.btnUnJoinGroup:
scope.main().newBackgroundTask(new AsyncTaskListener() {
@Override
public Object onPerformTask() {
group.followUnfollowGroup(group_id, false);
return null;
}
@Override
public void onFinish(Object result) {
Toast.makeText(getActivity(),
_s(R.string.toast_group_unfollowed),
Toast.LENGTH_LONG).show();
OControls.setGone(parent, R.id.btnUnJoinGroup);
OControls.setVisible(parent, R.id.btnJoinGroup);
}
}).execute();
break;
default:
break;
}
} else {
Toast.makeText(getActivity(), _s(R.string.no_connection),
Toast.LENGTH_LONG).show();
}
}
@Override
public void onViewBind(View view, Cursor cursor, ODataRow row) {
int followed = cursor.getInt(cursor.getColumnIndex("has_followed"));
view.findViewById(R.id.btnJoinGroup).setVisibility(
(followed == 1) ? View.GONE : View.VISIBLE);
view.findViewById(R.id.btnUnJoinGroup).setVisibility(
(followed == 0) ? View.GONE : View.VISIBLE);
}
}