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.view.MenuItem;
  9import android.view.View;
 10import android.view.View.OnClickListener;
 11import android.view.View.OnLongClickListener;
 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 TextView secondaryHint;
 28	private Button cancelButton;
 29	private Button publishButton;
 30
 31	private Uri avatarUri;
 32	private Uri defaultUri;
 33
 34	private Account account;
 35
 36	private UiCallback<Avatar> avatarPublication = new UiCallback<Avatar>() {
 37
 38		@Override
 39		public void success(Avatar object) {
 40			runOnUiThread(new Runnable() {
 41
 42				@Override
 43				public void run() {
 44					finish();
 45				}
 46			});
 47		}
 48
 49		@Override
 50		public void error(final int errorCode, Avatar object) {
 51			runOnUiThread(new Runnable() {
 52
 53				@Override
 54				public void run() {
 55					hintOrWarning.setText(errorCode);
 56					hintOrWarning.setTextColor(getWarningTextColor());
 57					publishButton.setText(R.string.publish_avatar);
 58					enablePublishButton();
 59				}
 60			});
 61
 62		}
 63
 64		@Override
 65		public void userInputRequried(PendingIntent pi, Avatar object) {
 66		}
 67	};
 68
 69	private OnLongClickListener backToDefaultListener = new OnLongClickListener() {
 70
 71		@Override
 72		public boolean onLongClick(View v) {
 73			avatarUri = defaultUri;
 74			loadImageIntoPreview(defaultUri);
 75			return true;
 76		}
 77	};
 78
 79	@Override
 80	public void onCreate(Bundle savedInstanceState) {
 81		super.onCreate(savedInstanceState);
 82		setContentView(R.layout.activity_publish_profile_picture);
 83		this.avatar = (ImageView) findViewById(R.id.account_image);
 84		this.cancelButton = (Button) findViewById(R.id.cancel_button);
 85		this.publishButton = (Button) findViewById(R.id.publish_button);
 86		this.accountTextView = (TextView) findViewById(R.id.account);
 87		this.hintOrWarning = (TextView) findViewById(R.id.hint_or_warning);
 88		this.secondaryHint = (TextView) findViewById(R.id.secondary_hint);
 89		this.publishButton.setOnClickListener(new OnClickListener() {
 90
 91			@Override
 92			public void onClick(View v) {
 93				if (avatarUri != null) {
 94					publishButton.setText(R.string.publishing);
 95					disablePublishButton();
 96					xmppConnectionService.publishAvatar(account, avatarUri,
 97							avatarPublication);
 98				}
 99			}
100		});
101		this.cancelButton.setOnClickListener(new OnClickListener() {
102
103			@Override
104			public void onClick(View v) {
105				finish();
106			}
107		});
108		this.avatar.setOnClickListener(new OnClickListener() {
109
110			@Override
111			public void onClick(View v) {
112				Intent attachFileIntent = new Intent();
113				attachFileIntent.setType("image/*");
114				attachFileIntent.setAction(Intent.ACTION_GET_CONTENT);
115				Intent chooser = Intent.createChooser(attachFileIntent,
116						getString(R.string.attach_file));
117				startActivityForResult(chooser, REQUEST_CHOOSE_FILE);
118			}
119		});
120		this.defaultUri = PhoneHelper.getSefliUri(getApplicationContext());
121	}
122
123	@Override
124	protected void onActivityResult(int requestCode, int resultCode,
125			final Intent data) {
126		super.onActivityResult(requestCode, resultCode, data);
127		if (resultCode == RESULT_OK) {
128			if (requestCode == REQUEST_CHOOSE_FILE) {
129				this.avatarUri = data.getData();
130			}
131		}
132	}
133
134	@Override
135	public boolean onOptionsItemSelected(MenuItem menuItem) {
136		super.onOptionsItemSelected(menuItem);
137		switch (menuItem.getItemId()) {
138		case android.R.id.home:
139			finish();
140			break;
141		}
142		return true;
143	}
144
145	@Override
146	protected void onBackendConnected() {
147		if (getIntent() != null) {
148			String jid = getIntent().getStringExtra("account");
149			if (jid != null) {
150				this.account = xmppConnectionService.findAccountByJid(jid);
151				if (this.avatarUri == null) {
152					if (this.account.getAvatar() != null) {
153						this.avatar.setImageBitmap(this.account.getImage(
154								getApplicationContext(), 384));
155						this.avatar
156								.setOnLongClickListener(this.backToDefaultListener);
157					} else {
158						if (this.defaultUri != null) {
159							this.avatarUri = this.defaultUri;
160							loadImageIntoPreview(this.defaultUri);
161						}
162					}
163				} else {
164					loadImageIntoPreview(avatarUri);
165				}
166				this.accountTextView.setText(this.account.getJid());
167			}
168		}
169
170	}
171
172	protected void loadImageIntoPreview(Uri uri) {
173		Bitmap bm = xmppConnectionService.getFileBackend().cropCenterSquare(
174				uri, 384);
175		this.avatar.setImageBitmap(bm);
176		enablePublishButton();
177		this.publishButton.setText(R.string.publish_avatar);
178		this.hintOrWarning.setText(R.string.publish_avatar_explanation);
179		this.hintOrWarning.setTextColor(getPrimaryTextColor());
180		if (this.defaultUri != null && uri.equals(this.defaultUri)) {
181			this.secondaryHint.setVisibility(View.INVISIBLE);
182			this.avatar.setOnLongClickListener(null);
183		} else {
184			this.secondaryHint.setVisibility(View.VISIBLE);
185			this.avatar.setOnLongClickListener(this.backToDefaultListener);
186		}
187	}
188
189	protected void enablePublishButton() {
190		this.publishButton.setEnabled(true);
191		this.publishButton.setTextColor(getPrimaryTextColor());
192	}
193
194	protected void disablePublishButton() {
195		this.publishButton.setEnabled(false);
196		this.publishButton.setTextColor(getSecondaryTextColor());
197	}
198
199}