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