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 }
133 }
134 }
135
136 @Override
137 protected void onBackendConnected() {
138 if (getIntent() != null) {
139 String jid = getIntent().getStringExtra("account");
140 if (jid != null) {
141 this.account = xmppConnectionService.findAccountByJid(jid);
142 if (this.account.getXmppConnection() != null) {
143 this.support = this.account.getXmppConnection().getFeatures().pubsub();
144 }
145 if (this.avatarUri == null) {
146 if (this.account.getAvatar() != null || this.defaultUri == null) {
147 this.avatar.setImageBitmap(this.account.getImage(
148 getApplicationContext(), 384));
149 if (this.defaultUri != null) {
150 this.avatar
151 .setOnLongClickListener(this.backToDefaultListener);
152 } else {
153 this.secondaryHint.setVisibility(View.INVISIBLE);
154 }
155 if (!support) {
156 this.hintOrWarning.setTextColor(getWarningTextColor());
157 this.hintOrWarning.setText(R.string.error_publish_avatar_no_server_support);
158 }
159 } else {
160 this.avatarUri = this.defaultUri;
161 loadImageIntoPreview(this.defaultUri);
162 this.secondaryHint.setVisibility(View.INVISIBLE);
163 }
164 } else {
165 loadImageIntoPreview(avatarUri);
166 }
167 this.accountTextView.setText(this.account.getJid());
168 }
169 }
170
171 }
172
173 protected void loadImageIntoPreview(Uri uri) {
174 Bitmap bm = xmppConnectionService.getFileBackend().cropCenterSquare(
175 uri, 384);
176 this.avatar.setImageBitmap(bm);
177 if (support) {
178 enablePublishButton();
179 this.publishButton.setText(R.string.publish_avatar);
180 this.hintOrWarning.setText(R.string.publish_avatar_explanation);
181 this.hintOrWarning.setTextColor(getPrimaryTextColor());
182 } else {
183 disablePublishButton();
184 this.hintOrWarning.setTextColor(getWarningTextColor());
185 this.hintOrWarning.setText(R.string.error_publish_avatar_no_server_support);
186 }
187 if (this.defaultUri != null && uri.equals(this.defaultUri)) {
188 this.secondaryHint.setVisibility(View.INVISIBLE);
189 this.avatar.setOnLongClickListener(null);
190 } else if (this.defaultUri != null ) {
191 this.secondaryHint.setVisibility(View.VISIBLE);
192 this.avatar.setOnLongClickListener(this.backToDefaultListener);
193 }
194 }
195
196 protected void enablePublishButton() {
197 this.publishButton.setEnabled(true);
198 this.publishButton.setTextColor(getPrimaryTextColor());
199 }
200
201 protected void disablePublishButton() {
202 this.publishButton.setEnabled(false);
203 this.publishButton.setTextColor(getSecondaryTextColor());
204 }
205
206}