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}