package uk.ac.cam.echo.activities; import android.app.Activity; import android.app.SearchManager; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.ServiceConnection; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.AsyncTask; import android.os.Bundle; import android.os.IBinder; import android.util.Log; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.ImageView; import android.widget.SearchView; import android.widget.TableLayout; import android.widget.TableRow; import java.io.IOException; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.URL; import java.util.ArrayList; import java.util.Collection; import java.util.List; import uk.ac.cam.echo.BitmapUtil; import uk.ac.cam.echo.R; import uk.ac.cam.echo.Toaster; import uk.ac.cam.echo.client.ClientApi; import uk.ac.cam.echo.client.data.InterestData; import uk.ac.cam.echo.client.data.UserData; import uk.ac.cam.echo.data.Interest; import uk.ac.cam.echo.data.User; import uk.ac.cam.echo.services.EchoService; public class UserSettingsActivity extends Activity implements View.OnClickListener { private EchoService echoService; private ServiceConnection connection = new ServiceConnection() { public void onServiceConnected(ComponentName className, IBinder service) { echoService = ((EchoService.LocalBinder)service).getService(); api = echoService.getApi(); user = echoService.getUser(); Log.d("USER", "user is now " + user.getUsername()); onServiceReady(); } public void onServiceDisconnected(ComponentName className) { echoService = null; } }; ClientApi api; User user; Bitmap avatarBM; private List<EditText> editTextList = new ArrayList<EditText>(); private ImageView avatar; private EditText display; private EditText email; private EditText phone; private EditText interest; private EditText job; private EditText company; private Button update; // Original attribute values to compare private String displayText; private String emailText; private String phoneText; private String interestText; private String jobText; private String companyText; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_user_settings); avatar = (ImageView)findViewById(R.id.avatarImg); display = (EditText)findViewById(R.id.dispNameInput); email = (EditText)findViewById(R.id.emailInput); phone = (EditText)findViewById(R.id.phoneInput); interest = (EditText)findViewById(R.id.interestInput); job = (EditText)findViewById(R.id.jobInput); company = (EditText)findViewById(R.id.companyInput); update = (Button)findViewById(R.id.updateUserButton); update.setOnClickListener(this); Log.d("USER", "onCreate"); } @Override protected void onResume() { super.onResume(); Intent service = new Intent(this, EchoService.class); Log.d("UserSettingsActivity", "onResume - binding EchoService"); bindService(service, connection, Context.BIND_AUTO_CREATE); } @Override protected void onPause() { super.onPause(); unbindService(connection); } private void onServiceReady() { getActionBar().setTitle(user.getUsername()); new AsyncTask<Void,Void,Bitmap>() { @Override protected Bitmap doInBackground(Void... voids) { displayText = user.getDisplayName(); emailText = user.getEmail(); emailText = emailText == null ? "" : emailText; phoneText = user.getPhoneNumber(); phoneText = phoneText == null ? "" : phoneText; jobText = user.getJobTitle(); jobText = jobText == null ? "" : jobText; companyText = user.getCompany(); companyText = companyText==null ? "" : companyText; StringBuilder interestBuilder = new StringBuilder(); List<Interest> interests = (List<Interest>) user.getInterests(); for(Interest interest : interests) { interestBuilder.append(interest.getName() + " "); } interestText = interestBuilder.toString(); if(user.getAvatarLink() != null) { Bitmap bimage = BitmapUtil.getBitmapFromURL(user.getAvatarLink() + "&s=200"); Log.d("BITMAP", (bimage==null) + ""); return bimage; } return null; } @Override protected void onPostExecute(Bitmap bitmap) { super.onPostExecute(bitmap); if(!displayText.equals("")) display.setText(displayText); if(!emailText.equals("")) email.setText(emailText); if(!phoneText.equals("")) phone.setText(phoneText); if(!jobText.equals("")) job.setText(jobText); if(!companyText.equals("")) company.setText(companyText); if(!interestText.equals("")) interest.setText(interestText); avatar.setImageBitmap(bitmap); } }.execute(); Log.d("USER", "onServerReady"); } // Set up action-bar and Search functionality @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu items for use in the action bar getMenuInflater().inflate(R.menu.user_profile, menu); return true; } // Attaching functionality to menu-items @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle presses on the action bar items switch (item.getItemId()) { case R.id.action_update: update.performClick(); return true; default: return super.onOptionsItemSelected(item); } } // Update the user account @Override public void onClick(View view) { if(view.getId() == R.id.updateUserButton) { new AsyncTask<String, Void, Boolean>() { @Override protected Boolean doInBackground(String... args) { Log.d("USER", ""+(user == null)); if(!args[0].equals(displayText)) ((UserData)user).setDisplayName(args[0]); if(!args[1].equals(emailText)) user.setEmail(args[1]); if(!args[2].equals(phoneText)) user.setPhoneNumber(args[2]); if(!args[3].equals(jobText)) user.setJobTitle(args[3]); if(!args[4].equals(companyText)) user.setCompany(args[4]); if(!args[5].equals(interestText)) { List<Interest> ints = (List<Interest>) user.getInterests(); for(Interest i : ints) { Log.d("Interest", " deleting " + ((((InterestData)i).getResource()==null)?"null":"not null")); i.delete(); } String[] interests = args[5].split(" "); for(String interestName : interests) { Interest i = api.newInterest(user); i.setName(interestName); i.save(); } } user.save(); return true; } @Override protected void onPostExecute(Boolean aBoolean) { super.onPostExecute(aBoolean); Toaster.displayShort(getApplicationContext(), "User updated!"); } }.execute(display.getText().toString(), //args[0] email.getText().toString(), //args[1] phone.getText().toString(), //args[2] job.getText().toString(), //args[3] company.getText().toString(), //args[4] interest.getText().toString()); //args[5] } } }