package com.android.smap.fragments;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Bundle;
import android.os.IBinder;
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.view.View.OnClickListener;
import android.widget.AbsListView;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import com.android.smap.GatewayApp;
import com.android.smap.R;
import com.android.smap.activities.FragmentContainerActivity;
import com.android.smap.adapters.DialogueAdapter;
import com.android.smap.api.models.Contact;
import com.android.smap.api.models.Dialogue;
import com.android.smap.api.models.Distribution;
import com.android.smap.api.services.SmsDialogueHandler;
import com.android.smap.di.DataManager;
import com.android.smap.models.SmapTextMessage;
import com.android.smap.sms.GatewayService;
import com.android.smap.sms.GatewayService.LocalBinder;
import com.android.smap.ui.ViewQuery;
import com.android.smap.utils.MWAnimUtil;
import com.google.inject.Inject;
import com.mjw.android.swipe.DistributionDetailsSwipeListener;
import com.mjw.android.swipe.MultiChoiceSwipeListener;
import com.mjw.android.swipe.SwipeListView;
import org.smap.DialogueHandler;
import org.smap.surveyConverser.SurveyConverser;
import java.util.List;
public class DistributionDetailFragment extends BaseFragment implements
OnClickListener{
public static final String EXTRA_DISTRIBUTION_ID = DistributionDetailFragment.class
.getCanonicalName()
+ "id";
public GatewayService mService;
public boolean mBound = false;
@Inject
private DataManager mDataManager;
private Distribution mModel;
private DialogueAdapter mAdapter;
private int mDistributionId;
private SwipeListView mSwipeListView;
private View mProgressBar;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Bundle b = getArguments();
if (b != null) {
mDistributionId = (int) b.getLong(EXTRA_DISTRIBUTION_ID);
}
// get all necessary local data
mDataManager = GatewayApp.getDependencyContainer().getDataManager();
mModel = mDataManager.getDistribution(mDistributionId);
}
@Override
public View onCreateContentView(LayoutInflater inflater, Bundle savedInstanceState) {
LinearLayout view = (LinearLayout) inflater.inflate(
R.layout.fragment_distribution_detail,
null);
ViewQuery query = new ViewQuery(view);
mSwipeListView = (SwipeListView) query.find(R.id.list_contacts).get();
setupContactsList();
TextView textView = (TextView) view.findViewById(R.id.txt_distribution_name);
textView.setText(mModel.getName());
int completed = mModel.getCompletedCount();
int total = mModel.getMembersCount();
String template = getActivity().getResources().getString(
R.string.template_quotient);
String completedProgress = String.format(template, completed, total);
query.find(R.id.txt_completed_progress).text(completedProgress);
query.find(R.id.btn_submit).onClick(this).get();
// grow the progress bar out
mProgressBar = query.find(R.id.view_progress).get();
return view;
}
@Override
public void onStart() {
super.onStart();
// Bind to LocalService
Intent intent = new Intent(this.getActivity(), GatewayService.class);
this.getActivity().bindService(intent, mConnection, Context.BIND_AUTO_CREATE);
//bindService(intent, mConnection, Context.BIND_AUTO_CREATE);
}
@Override
public void onResume() {
super.onResume();
mModel = mDataManager.getDistribution(mDistributionId);
// TODO get this from distribution
mAdapter.setModel(mModel.getDialogues());
if (mModel != null) {
float percent = mModel.getCompletionPercentage();
MWAnimUtil.growRight(mProgressBar, percent);
}
}
private void setupContactsList() {
mAdapter = new DialogueAdapter(getActivity(), mModel.getDialogues(),
mSwipeListView);
mSwipeListView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);
mSwipeListView
.setMultiChoiceModeListener(new AbsListView.MultiChoiceModeListener() {
@Override
public void onItemCheckedStateChanged(ActionMode mode,
int position,
long id, boolean checked) {
mode.setTitle("Remove ("
+ mSwipeListView.getCountSelected()
+ ")");
}
@Override
public boolean onActionItemClicked(ActionMode mode,
MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_delete:
mSwipeListView.dismissSelected();
mode.finish();
return true;
default:
return false;
}
}
@Override
public boolean onCreateActionMode(ActionMode mode,
Menu menu) {
MenuInflater inflater = mode.getMenuInflater();
inflater.inflate(R.menu.menu_choice_items, menu);
return true;
}
@Override
public void onDestroyActionMode(ActionMode mode) {
mSwipeListView.unselectedChoiceStates();
}
@Override
public boolean onPrepareActionMode(ActionMode mode,
Menu menu) {
return false;
}
});
mSwipeListView.setSwipeListViewListener(new DistributionDetailsSwipeListener(
mAdapter));
mSwipeListView.setAdapter(mAdapter);
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
inflater = getActivity().getMenuInflater();
inflater.inflate(R.menu.menu_add, menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
boolean handled = false;
switch (item.getItemId()) {
case android.R.id.home: // Actionbar home/up icon
getActivity().onBackPressed();
break;
case R.id.action_add: // Actionbar home/up icon
Bundle b = new Bundle();
b.putInt(ContactSelectFragment.EXTRA_DISTRIBUTION_ID, mDistributionId);
startActivity(new FragmentContainerActivity.Builder(getActivity(), ContactSelectFragment.class)
.arguments(b)
.title(R.string.ab_select_contacts).build());
break;
}
return handled;
}
@Override
public void onClick(View arg0) {
// each dialogue in distribution
List<Dialogue> dialogues = mModel.getDialogues();
for (Dialogue dialogue : dialogues) {
Contact contact = dialogue.getContact();
contact.setActiveDialogue(dialogue);
DialogueHandler handler = new SmsDialogueHandler(dialogue, mService);
SurveyConverser.beginDialogue(handler);
}
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putInt(EXTRA_DISTRIBUTION_ID, mDistributionId);
}
/** Defines callbacks for service binding, passed to bindService() */
private ServiceConnection mConnection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName className,
IBinder service) {
// We've bound to GatewayService, cast the IBinder and get LocalService instance
LocalBinder binder = (LocalBinder) service;
mService = binder.getService();
mBound = true;
}
@Override
public void onServiceDisconnected(ComponentName arg0) {
mBound = false;
}
};
}