package alm.motiv.AlmendeMotivator; import alm.motiv.AlmendeMotivator.facebook.FacebookMainActivity; import alm.motiv.AlmendeMotivator.facebook.FacebookManager; import alm.motiv.AlmendeMotivator.models.Message; import android.app.Activity; import android.app.AlertDialog; import android.app.ProgressDialog; import android.content.DialogInterface; import android.content.Intent; import android.os.AsyncTask; import android.os.Bundle; import android.support.v4.widget.DrawerLayout; import android.text.format.Time; import android.view.Gravity; import android.view.KeyEvent; import android.view.View; import android.widget.*; import com.mongodb.*; import com.squareup.picasso.Picasso; import java.util.ArrayList; public class MessageViewActivity extends Activity{ Intent home; Intent k; private String[] mMenuOptions; private ListView mDrawerList; private ListView listView; private DrawerLayout mDrawerLayout; private String message; private String date; private String facebookId = Cookie.getInstance().userEntryId; private ArrayList<String> receivedMessages = new ArrayList<String>(); Intent intent; private String challenger; private String challengee; private ProgressDialog simpleWaitDialog; private EditText mEdit; class GetReceiver extends AsyncTask<String, String, String> { protected String doInBackground(String... args) { if(Cookie.getInstance().internet){ try{ MongoClient client = Database.getInstance(); DB db = client.getDB(Database.uri.getDatabase()); DBCollection userCollection = db.getCollection("messages"); userCollection.setObjectClass(Message.class); challenger = intent.getExtras().getString("challenger"); challengee = intent.getExtras().getString("challengee"); BasicDBObject query = new BasicDBObject(); query.put("Author", challenger); query.put("Receiver", challengee); DBCursor cursor = userCollection.find(query); if(cursor.count()==0){ challengee = intent.getExtras().getString("challenger"); challenger = intent.getExtras().getString("challengee"); } }catch(Exception e){ System.out.println(e); } } return null; } @Override protected void onPostExecute(String string) { UpdateMessages u = new UpdateMessages(); u.execute(); } } @Override public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_message); intent = getIntent(); GetReceiver gr = new GetReceiver(); gr.execute(); mMenuOptions = getResources().getStringArray(R.array.profile_array); mDrawerList = (ListView) findViewById(R.id.left_drawer); mDrawerList.setAdapter(new ArrayAdapter<String>(this, R.layout.list_item_menu, mMenuOptions)); mDrawerList.setOnItemClickListener(new DrawerItemClickListener()); listView = (ListView) findViewById(R.id.listView); View footer = View.inflate(this,R.layout.acitivity_message_footer,null); listView.addFooterView(footer); mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); } //on menu pressed public boolean onKeyUp(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_MENU) { mDrawerLayout.openDrawer(Gravity.LEFT); return true; } else { return super.onKeyUp(keyCode, event); } } private class DrawerItemClickListener implements ListView.OnItemClickListener { @Override public void onItemClick(AdapterView parent, View view, int position, long id) { Menu.selectItem(position, MessageViewActivity.this); } } public void showMessages(){ ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.list_item_detail_message, receivedMessages); listView.setAdapter(adapter); } public void sendMessage(View v) throws InterruptedException { if(Cookie.getInstance().internet){ mEdit = (EditText)findViewById(R.id.messageInput); message = Cookie.getInstance().userName + ": " + mEdit.getText().toString(); DatabaseThread db = new DatabaseThread(); db.execute(); } } class UpdateMessages extends AsyncTask<String, String, String> { protected String doInBackground(String... args) { if(Cookie.getInstance().internet){ try{ MongoClient client = Database.getInstance(); DB db = client.getDB(Database.uri.getDatabase()); DBCollection userCollection = db.getCollection("messages"); userCollection.setObjectClass(Message.class); getMessages(userCollection); }catch (Exception e){ System.out.println(e); } } return null; } @Override protected void onPreExecute() { simpleWaitDialog = ProgressDialog.show(MessageViewActivity.this, "Please wait", "Processing"); } @Override protected void onPostExecute(String result) { try { simpleWaitDialog.dismiss(); simpleWaitDialog = null; } catch (Exception e) { // nothing } showMessages(); } } class DatabaseThread extends AsyncTask<String, String, String> { protected String doInBackground(String... args) { if(Cookie.getInstance().internet){ try{ MongoClient client = Database.getInstance(); DB db = client.getDB(Database.uri.getDatabase()); DBCollection userCollection = db.getCollection("messages"); userCollection.setObjectClass(Message.class); //DBObject query = QueryBuilder.start("Author").is(challenger).get(); //query = QueryBuilder.start("Receiver").is(challengee).get(); //DBCursor cursor = userCollection.find(query); BasicDBObject query = new BasicDBObject(); query.put("Author", challenger); query.put("Receiver", challengee); DBCursor cursor = userCollection.find(query); System.out.println("ff tellen: " + cursor.count()); if(cursor.count()==0){ ArrayList<String> messages = new ArrayList<String>(); messages.add(message); Message challenge = new Message(challenger, challengee, "Test Message", messages, "Normal message", "0"); userCollection.insert(challenge, WriteConcern.ACKNOWLEDGED); } else{ BasicDBObject update = new BasicDBObject(); update.put("$push", new BasicDBObject("Content", message)); long time= System.currentTimeMillis(); update.put("$set", new BasicDBObject("Date", time)); Message newFriend = new Message(); newFriend.put("Receiver", challengee); userCollection.update(newFriend, update); } getMessages(userCollection); }catch (Exception e){ System.out.println(e); } } return null; } @Override protected void onPreExecute() { simpleWaitDialog = ProgressDialog.show(MessageViewActivity.this, "Please wait", "Processing"); } @Override protected void onPostExecute(String result) { simpleWaitDialog.setMessage("Process completed."); simpleWaitDialog.dismiss(); Toast.makeText(getApplicationContext(), "Message Send!", Toast.LENGTH_LONG).show(); mEdit.setText(""); showMessages(); } } public void getMessages(DBCollection userCollection){ Message current = new Message(); current.put("Receiver", challengee); current.put("Author", challenger); if(userCollection.find(current).toArray().size() > 0){ Message newUser = (Message) userCollection.find(current).toArray().get(0); ArrayList<String> arrayMessages = (ArrayList<String>)newUser.get("Content"); int noOfMessages = arrayMessages.size(); receivedMessages.clear(); for(int i = 0; i < noOfMessages; i++){ receivedMessages.add(arrayMessages.get(i)); } } } @Override public void onBackPressed() { finish(); home = new Intent(MessageViewActivity.this, MessageActivity.class); startActivity(home); return; } }