package alm.motiv.AlmendeMotivator;
import alm.motiv.AlmendeMotivator.models.User;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.widget.DrawerLayout;
import android.view.Gravity;
import android.view.KeyEvent;
import android.view.View;
import android.widget.*;
import com.google.analytics.tracking.android.EasyTracker;
import com.mongodb.*;
public class ProfileEditActivity extends Activity{
//menu
private String[] mMenuOptions;
private ListView mDrawerList;
private DrawerLayout mDrawerLayout;
//our user
User user=null;
//edit fields
private EditText sportsInput;
private EditText ageInput;
private EditText goalInput;
private EditText cityInput;
private EditText aboutInput;
//the intent that called this activity this is used to display either the user or a friend's profile
private Intent requestFrom;
private String facebookIdFriend = null;
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_profileviewedit);
//menu
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());
//we want to know whose profile we need to display
requestFrom = getIntent();
try{ facebookIdFriend = requestFrom.getExtras().getString("facebookIdFriend"); }catch (Exception e){ }
new DatabaseThread().execute("select");
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
}
@Override
public void onStart() {
super.onStart();
//google analytics
EasyTracker.getInstance(this).activityStart(this); // Add this method.
}
@Override
public void onStop() {
super.onStop();
//google analytics
EasyTracker.getInstance(this).activityStop(this); // Add this method.
}
//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);
}
}
public void initView(){
//fields
aboutInput = (EditText)findViewById(R.id.aboutInput);
sportsInput = (EditText)findViewById(R.id.sportsInput);
ageInput = (EditText)findViewById(R.id.ageInput);
goalInput = (EditText)findViewById(R.id.goalInput);
cityInput = (EditText)findViewById(R.id.cityInput);
//set content fields with existing data
goalInput.setText(user.getGoal());
aboutInput.setText(user.getAbout());
ageInput.setText(user.getAge());
cityInput.setText(user.getCity());
sportsInput.setText(user.getSports());
}
public void saveUserBtn(View v) throws InterruptedException {
if(validation()&&Cookie.getInstance().internet){
new DatabaseThread().execute("insert");
} else{
Toast.makeText(getApplicationContext(), "You forgot to select a challengee", Toast.LENGTH_SHORT).show();
}
}
private class DrawerItemClickListener implements ListView.OnItemClickListener {
@Override
public void onItemClick(AdapterView parent, View view, int position, long id) {
Menu.selectItem(position, ProfileEditActivity.this);
}
}
@Override
public void onBackPressed() {
finish();
Intent home = new Intent(ProfileEditActivity.this, ChallengeOverviewActivity.class);
startActivity(home);
return;
}
//for validation
private boolean validation(){
boolean succes = true;
if(!Validation.hasText(aboutInput))succes=false;
if(!Validation.isNumeric(ageInput,true))succes=false;
if(!Validation.isLetters(cityInput, false))succes=false;
if(!Validation.hasText(sportsInput))succes=false;
if(!Validation.isLetters(goalInput, false))succes=false;
return succes;
}
class DatabaseThread extends AsyncTask<String, String, String> {
private ProgressDialog simpleWaitDialog;
private boolean redirect = false;
@Override
protected void onPreExecute() {
simpleWaitDialog = ProgressDialog.show(ProfileEditActivity.this,
"Please wait", "Loading");
}
protected void onPostExecute(String result) {
try {
simpleWaitDialog.dismiss();
simpleWaitDialog = null;
} catch (Exception e) {
// nothing
}
if(redirect){
finish();
Intent redirection = new Intent(ProfileEditActivity.this, ProfileActivity.class);
startActivity(redirection);
}else{
initView();
}
}
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("user");
userCollection.setObjectClass(User.class);
// get the current user from database
User current = new User();
if(facebookIdFriend!=null){
current.put("facebookID", facebookIdFriend);
}else{
current.put("facebookID", Cookie.getInstance().userEntryId);
}
User aUser = (User) userCollection.find(current).toArray().get(0);
if(args[0]=="select"){
user = aUser;
}else if(args[0]=="insert"){
insertQuery(current,aUser, userCollection);
redirect=true;
}
}catch (Exception e){
System.out.println(e);
}
}
return null;
}
private void insertQuery(User current, User newUser, DBCollection userCollection){
newUser.setAbout(String.valueOf(aboutInput.getText()));
newUser.setAge(String.valueOf(ageInput.getText()));
newUser.setCity(String.valueOf(cityInput.getText()));
newUser.setGoal(String.valueOf(goalInput.getText()));
newUser.setSports(String.valueOf(sportsInput.getText()));
//overwrite the old one with the new one
userCollection.findAndModify(current, newUser);
}
}
}