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