PublishProfilePictureActivity.java

  1package eu.siacs.conversations.ui;
  2
  3import android.app.PendingIntent;
  4import android.content.Intent;
  5import android.graphics.Bitmap;
  6import android.net.Uri;
  7import android.os.Bundle;
  8import android.util.Log;
  9import android.view.MenuItem;
 10import android.view.View;
 11import android.view.View.OnClickListener;
 12import android.widget.Button;
 13import android.widget.ImageView;
 14import android.widget.TextView;
 15import eu.siacs.conversations.R;
 16import eu.siacs.conversations.entities.Account;
 17import eu.siacs.conversations.utils.PhoneHelper;
 18import eu.siacs.conversations.xmpp.pep.Avatar;
 19
 20public class PublishProfilePictureActivity extends XmppActivity {
 21
 22	private static final int REQUEST_CHOOSE_FILE = 0xac23;
 23
 24	private ImageView avatar;
 25	private TextView accountTextView;
 26	private TextView hintOrWarning;
 27	private Button cancelButton;
 28	private Button publishButton;
 29
 30	private Uri avatarUri;
 31
 32	private Account account;
 33
 34	private UiCallback<Avatar> avatarPublication = new UiCallback<Avatar>() {
 35
 36		@Override
 37		public void success(Avatar object) {
 38			runOnUiThread(new Runnable() {
 39
 40				@Override
 41				public void run() {
 42					finish();
 43				}
 44			});
 45		}
 46
 47		@Override
 48		public void error(final int errorCode, Avatar object) {
 49			runOnUiThread(new Runnable() {
 50
 51				@Override
 52				public void run() {
 53					hintOrWarning.setText(errorCode);
 54					hintOrWarning.setTextColor(getWarningTextColor());
 55					publishButton.setText(R.string.publish_avatar);
 56					enablePublishButton();
 57				}
 58			});
 59
 60		}
 61
 62		@Override
 63		public void userInputRequried(PendingIntent pi, Avatar object) {
 64		}
 65	};
 66
 67	@Override
 68	public void onCreate(Bundle savedInstanceState) {
 69		super.onCreate(savedInstanceState);
 70		setContentView(R.layout.activity_publish_profile_picture);
 71		this.avatar = (ImageView) findViewById(R.id.account_image);
 72		this.cancelButton = (Button) findViewById(R.id.cancel_button);
 73		this.publishButton = (Button) findViewById(R.id.publish_button);
 74		this.accountTextView = (TextView) findViewById(R.id.account);
 75		this.hintOrWarning = (TextView) findViewById(R.id.hint_or_warning);
 76		this.publishButton.setOnClickListener(new OnClickListener() {
 77
 78			@Override
 79			public void onClick(View v) {
 80				if (avatarUri != null) {
 81					publishButton.setText(R.string.publishing);
 82					disablePublishButton();
 83					xmppConnectionService.publishAvatar(account, avatarUri,
 84							avatarPublication);
 85				}
 86			}
 87		});
 88		this.cancelButton.setOnClickListener(new OnClickListener() {
 89
 90			@Override
 91			public void onClick(View v) {
 92				finish();
 93			}
 94		});
 95		this.avatar.setOnClickListener(new OnClickListener() {
 96
 97			@Override
 98			public void onClick(View v) {
 99				Intent attachFileIntent = new Intent();
100				attachFileIntent.setType("image/*");
101				attachFileIntent.setAction(Intent.ACTION_GET_CONTENT);
102				Intent chooser = Intent.createChooser(attachFileIntent,
103						getString(R.string.attach_file));
104				startActivityForResult(chooser, REQUEST_CHOOSE_FILE);
105			}
106		});
107	}
108
109	@Override
110	protected void onActivityResult(int requestCode, int resultCode,
111			final Intent data) {
112		super.onActivityResult(requestCode, resultCode, data);
113		if (resultCode == RESULT_OK) {
114			if (requestCode == REQUEST_CHOOSE_FILE) {
115				this.avatarUri = data.getData();
116			}
117		}
118	}
119
120	@Override
121	public boolean onOptionsItemSelected(MenuItem menuItem) {
122		super.onOptionsItemSelected(menuItem);
123		switch (menuItem.getItemId()) {
124		case android.R.id.home:
125			finish();
126			break;
127		}
128		return true;
129	}
130
131	@Override
132	protected void onBackendConnected() {
133		if (getIntent() != null) {
134			String jid = getIntent().getStringExtra("account");
135			if (jid != null) {
136				this.account = xmppConnectionService.findAccountByJid(jid);
137				if (this.avatarUri == null) {
138					if (this.account.getAvatar() != null) {
139						this.avatar.setImageBitmap(this.account.getImage(
140								getApplicationContext(), 384));
141					} else {
142						this.avatarUri = PhoneHelper
143								.getSefliUri(getApplicationContext());
144						if (this.avatarUri != null) {
145							loadImageIntoPreview(this.avatarUri);
146						}
147					}
148				} else {
149					loadImageIntoPreview(avatarUri);
150				}
151				this.accountTextView.setText(this.account.getJid());
152			}
153		}
154
155	}
156
157	protected void loadImageIntoPreview(Uri uri) {
158		Bitmap bm = xmppConnectionService.getFileBackend().cropCenterSquare(
159				uri, 384);
160		this.avatar.setImageBitmap(bm);
161		enablePublishButton();
162		this.publishButton.setText(R.string.publish_avatar);
163		this.hintOrWarning.setText(R.string.publish_avatar_explanation);
164		this.hintOrWarning.setTextColor(getPrimaryTextColor());
165	}
166
167	protected void enablePublishButton() {
168		this.publishButton.setEnabled(true);
169		this.publishButton.setTextColor(getPrimaryTextColor());
170	}
171
172	protected void disablePublishButton() {
173		this.publishButton.setEnabled(false);
174		this.publishButton.setTextColor(getSecondaryTextColor());
175	}
176
177}