package couchbase.kitchensync;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnKeyListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.AdapterView.OnItemLongClickListener;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.Toast;
import com.couchbase.lite.Database;
import com.couchbase.lite.Document;
import com.couchbase.lite.LiveQuery;
import com.couchbase.lite.Manager;
import com.couchbase.lite.QueryRow;
import com.couchbase.lite.replicator.Replication;
import com.couchbase.lite.util.Log;
import com.couchbase.lite.Mapper;
import com.couchbase.lite.Emitter;
import com.couchbase.lite.android.AndroidContext;
import com.couchbase.lite.CouchbaseLiteException;
import java.net.MalformedURLException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.UUID;
import java.util.ArrayList;
import java.net.URL;
import java.io.IOException;
public class MainActivity extends Activity implements Replication.ChangeListener,
OnItemClickListener, OnItemLongClickListener, OnKeyListener {
private static final String TAG = "MainActivity";
private Manager manager;
private Database database;
private com.couchbase.lite.View viewItemsByDate;
private LiveQuery liveQuery;
private KitchenSyncListAdapter kitchenSyncArrayAdapter;
private ListView itemListView;
private EditText addItemEditText;
//Step 13 - Deploy on device or Deploy on emulator
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
itemListView = (ListView)findViewById(R.id.itemListView);
itemListView.setOnItemClickListener(this);
itemListView.setOnItemLongClickListener(this);
addItemEditText = (EditText)findViewById(R.id.newItemText);
addItemEditText.setOnKeyListener(this);
addItemEditText.requestFocus();
//Couchbase initialization code goes here - See steps 4, 6, 9, and 16.
//Step 4 - Start Couchbase Lite
//Step 6 - Call the 'initItemListAdapter' method
//Step 9 - Call the 'startLiveQuery' method within the 'onCreate' method
//Step 15 - Call the 'startSync' method within the 'onCreate' method
}
//Step 1 - created 'startCBLite' method
{
//Step 2 - Get reference to database object
//Step 3 - Create Index to allow for Fast Queries
}
@Override
public void changed(Replication.ChangeEvent event) {
Replication replication = event.getSource();
Log.d(TAG, "Replication : " + replication + " changed.");
if (!replication.isRunning()) {
String msg = String.format("Replicator %s not running", replication);
Log.d(TAG, msg);
}
else {
int processed = replication.getCompletedChangesCount();
int total = replication.getChangesCount();
String msg = String.format("Replicator processed %d / %d", processed, total);
Log.d(TAG, msg);
}
}
public boolean onKey(View v, int keyCode, KeyEvent event) {
if ((event.getAction() == KeyEvent.ACTION_DOWN)
&& (keyCode == KeyEvent.KEYCODE_ENTER)) {
String inputText = addItemEditText.getText().toString();
// Don't do anything until our liveQuery is initialized.
if(!inputText.equals("") && liveQuery != null) {
try {
createListItem(inputText);
Toast.makeText(getApplicationContext(), "Created new list item!", Toast.LENGTH_LONG).show();
} catch (Exception e) {
Toast.makeText(getApplicationContext(), "Error creating document, see logs for details", Toast.LENGTH_LONG).show();
Log.e(TAG, "Error creating document.", e);
}
}
addItemEditText.setText("");
return true;
}
return false;
}
private Document createListItem(String text) throws Exception {
SimpleDateFormat dateFormatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
UUID uuid = UUID.randomUUID();
Calendar calendar = GregorianCalendar.getInstance();
long currentTime = calendar.getTimeInMillis();
String currentTimeString = dateFormatter.format(calendar.getTime());
String id = currentTime + "-" + uuid.toString();
// Step 7 - Create document from text box's field entry. code replaces this
return null;
}
//Step 5 - Initialize 'DataAdapter' for our list view
//Step 8 - Create 'startLiveQuery' method to do 'LiveQuery'
//Step 14 - Create startSync() method
/**
* Handle click on item in list
*/
public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
// Step 10 code goes here
// This code handles checkbox touches. Couchbase Lite documents are like versioned-maps.
// To change a Document, add a new Revision.
}
/**
* Handle long-click on item in list
*/
public boolean onItemLongClick(AdapterView<?> adapterView, View view, int position, long id) {
// Step 11 code goes here - Deleting Items
return true;
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.list, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
// if (id == R.id.action_settings) {
// return true;
// }
return super.onOptionsItemSelected(item);
}
}