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}