Skip to content

Instantly share code, notes, and snippets.

@ntorvik
Created July 2, 2015 15:36
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ntorvik/366c6952a86b081371c7 to your computer and use it in GitHub Desktop.
Save ntorvik/366c6952a86b081371c7 to your computer and use it in GitHub Desktop.
public class MainActivity extends Activity {
Application application = (Application) MyApplication.getStaticContext();
MyApplication app = (MyApplication) application;
Database database;
RecyclerView mRecyclerView;
MyTaskListAdapter mTaskListAdapter;
private static FloatingActionMenu actionMenu;
private static boolean mSubMenuOpen;
private static final String DOC_TYPE_EMAIL = "email";
private static final String DOC_TYPE_SMS = "sms";
private static final String BHM_VIEW = "bhm_view";
private Query queryTasks;
private void registerViews() {
com.couchbase.lite.View tasksView = database.getView(BHM_VIEW);
tasksView.setMap(new Mapper() {
@Override
public void map(Map<String, Object> document, Emitter emitter) {
if (DOC_TYPE_EMAIL.equals(document.get("type"))) {
emitter.emit(document.get("created_at"), document);
}
if (DOC_TYPE_SMS.equals(document.get("type"))) {
emitter.emit(document.get("created_at"), document);
}
// emitter.emit(document.get("_id"), document);
}
}, "2");
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.fragment_list_main_new);
setFAB();
mRecyclerView = (RecyclerView) findViewById(R.id.my_recycler_view);
database = app.getDatabase();
registerViews();
mTaskListAdapter = new MyTaskListAdapter(this, new ArrayList<Task>(), database);
mRecyclerView.setAdapter(mTaskListAdapter);
mRecyclerView.setHasFixedSize(true);
mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
DefaultItemAnimator animator = new DefaultItemAnimator();
mRecyclerView.setItemAnimator(animator);
// mRecyclerView.setItemAnimator(new OvershootInRightAnimator());
// mRecyclerView.getItemAnimator().setAddDuration(200);
// mRecyclerView.getItemAnimator().setRemoveDuration(200);
// mRecyclerView.getItemAnimator().setMoveDuration(200);
// mRecyclerView.getItemAnimator().setChangeDuration(200);
mTaskListAdapter.SetOnItemClickListener(new MyTaskListAdapter.OnItemClickListener() {
@Override
public void onItemClick(View view, Task task, int pos) {
String docID = (String) task.getTask_id();
onTaskInteraction(view, docID, false, pos);
}
});
queryTasks = database.getView(BHM_VIEW).createQuery();
redrawTaskView(queryTasks);
database.addChangeListener(new Database.ChangeListener() {
@Override
public void changed(Database.ChangeEvent event) {
redrawTaskView(queryTasks);
//
// runOnUiThread(new Runnable() {
// @Override
// public void run() {
// mRecyclerView.getAdapter().notifyDataSetChanged();
// }
// });
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
Log.d("TAG", "*** Inside onActivtiyResult: resultCode = "+String.valueOf(resultCode));
switch (resultCode) {
case 10: mTaskListAdapter.notifyItemInserted(0);
break;
case 20: mTaskListAdapter.notifyDataSetChanged();
break;
}
super.onActivityResult(requestCode, resultCode, data);
}
private void redrawTaskView(Query queryTasks) {
QueryEnumerator rows = null;
try {
rows = queryTasks.run();
} catch (CouchbaseLiteException e) {
e.printStackTrace();
}
List<Task> task = new ArrayList<>();
for (Iterator<QueryRow> it = rows; it.hasNext(); ) {
QueryRow row = it.next();
// Log.e("TAG", row.getValue().toString());
Map<String, Object> properties = database.getDocument(row.getDocumentId()).getProperties();
Log.d("TAG", "properties: " + String.valueOf(properties));
task.add(new Task((LazyJsonObject) row.getValue()));
}
mTaskListAdapter.dataSet = task;
}
public void deleteTask(int pos, String docID) {
mTaskListAdapter.dataSet.remove(pos);
CBHelper cbh = new CBHelper(docID);
try {
cbh.deleteDoc();
} catch (CouchbaseLiteException e) {
e.printStackTrace();
}
mTaskListAdapter.notifyItemRemoved(pos);
}
private void setFAB() {
/ ** FAB Code removed for brevity ** /
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
public void onTaskInteraction(View view, final String docID, boolean longClick, final int pos) {
Log.d("TAG","Position = "+String.valueOf(pos));
final CBHelper cbh = new CBHelper(docID);
Log.d("TAG","TaskType = "+cbh.getTask_type());
app.setSavedDocID(docID);
final String status = cbh.getTask_status();
if (mSubMenuOpen) {
actionMenu.close(true);
}
DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
switch (which) {
case 0:
if (status.equals("active")) {
cbh.setTask_status_disabled();
}
if (status.equals("disabled")) {
cbh.setTask_status_active();
}
mTaskListAdapter.notifyDataSetChanged();
break;
case 1:
deleteTask(pos, docID);
break;
case 2:
try {
cbh.cloneTask();
} catch (CouchbaseLiteException e) {
e.printStackTrace();
}
mTaskListAdapter.notifyItemInserted(pos);
break;
case 3:
cbh.sendNow();
break;
case 4: {
Intent intent = new Intent();
intent.setClass(getApplicationContext(), EditTaskWizardActivity.class);
startActivityForResult(intent, 20);
}
break;
case DialogInterface.BUTTON_POSITIVE:
//Yes button clicked
break;
case DialogInterface.BUTTON_NEGATIVE:
//No button clicked
break;
}
}
};
final CharSequence[] items = {getString(R.string.context_toggle_status)
+ (status.equals("active") ? "DISABLED" : "ACTIVE"),
getString(R.string.context_task_delete),
getString(R.string.context_task_clone),
getString(R.string.context_task_sendNow),
getString(R.string.context_task_edit)};
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle(R.string.dialog_task_option)
.setItems(items, dialogClickListener)
.setNegativeButton(R.string.Cancel, dialogClickListener)
.show();
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment