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