diff --git a/res/layout/profile_preference_view.xml b/res/layout/profile_preference_view.xml
index 8734d5c7c8..006ed5ecc2 100644
--- a/res/layout/profile_preference_view.xml
+++ b/res/layout/profile_preference_view.xml
@@ -18,12 +18,13 @@
android:layout_marginLeft="10dp"
android:layout_marginStart="10dp">
-
+
Updating profile
Updating and encrypting profile
Profile photo
+ Too long
Using custom: %s
@@ -1446,6 +1447,7 @@
Transport icon
+
diff --git a/src/org/thoughtcrime/securesms/ApplicationPreferencesActivity.java b/src/org/thoughtcrime/securesms/ApplicationPreferencesActivity.java
index fcdc34798d..5accf142f6 100644
--- a/src/org/thoughtcrime/securesms/ApplicationPreferencesActivity.java
+++ b/src/org/thoughtcrime/securesms/ApplicationPreferencesActivity.java
@@ -42,6 +42,7 @@ import org.thoughtcrime.securesms.preferences.AppProtectionPreferenceFragment;
import org.thoughtcrime.securesms.preferences.AppearancePreferenceFragment;
import org.thoughtcrime.securesms.preferences.CorrectedPreferenceFragment;
import org.thoughtcrime.securesms.preferences.NotificationsPreferenceFragment;
+import org.thoughtcrime.securesms.preferences.ProfilePreference;
import org.thoughtcrime.securesms.preferences.SmsMmsPreferenceFragment;
import org.thoughtcrime.securesms.preferences.ChatsPreferenceFragment;
import org.thoughtcrime.securesms.service.KeyCachingService;
@@ -171,6 +172,8 @@ public class ApplicationPreferencesActivity extends PassphraseRequiredActionBarA
}
private void setCategorySummaries() {
+ ((ProfilePreference)this.findPreference(PREFERENCE_CATEGORY_PROFILE)).refresh();
+
this.findPreference(PREFERENCE_CATEGORY_SMS_MMS)
.setSummary(SmsMmsPreferenceFragment.getSummary(getActivity()));
this.findPreference(PREFERENCE_CATEGORY_NOTIFICATIONS)
@@ -284,7 +287,8 @@ public class ApplicationPreferencesActivity extends PassphraseRequiredActionBarA
Intent intent = new Intent(preference.getContext(), CreateProfileActivity.class);
intent.putExtra(CreateProfileActivity.EXCLUDE_SYSTEM, true);
- ((BaseActionBarActivity)getActivity()).startActivitySceneTransition(intent, getActivity().findViewById(R.id.avatar), "avatar");
+ getActivity().startActivity(intent);
+// ((BaseActionBarActivity)getActivity()).startActivitySceneTransition(intent, getActivity().findViewById(R.id.avatar), "avatar");
return true;
}
}
diff --git a/src/org/thoughtcrime/securesms/CreateProfileActivity.java b/src/org/thoughtcrime/securesms/CreateProfileActivity.java
index 568b2da403..502cae79e3 100644
--- a/src/org/thoughtcrime/securesms/CreateProfileActivity.java
+++ b/src/org/thoughtcrime/securesms/CreateProfileActivity.java
@@ -12,7 +12,9 @@ import android.os.Bundle;
import android.provider.MediaStore;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
+import android.text.Editable;
import android.text.TextUtils;
+import android.text.TextWatcher;
import android.util.Log;
import android.util.Pair;
import android.view.KeyEvent;
@@ -48,6 +50,7 @@ import org.thoughtcrime.securesms.util.ViewUtil;
import org.thoughtcrime.securesms.util.concurrent.ListenableFuture;
import org.thoughtcrime.securesms.util.task.ProgressDialogAsyncTask;
import org.whispersystems.signalservice.api.SignalServiceAccountManager;
+import org.whispersystems.signalservice.api.crypto.ProfileCipher;
import org.whispersystems.signalservice.api.util.StreamDetails;
import java.io.ByteArrayInputStream;
@@ -177,6 +180,23 @@ public class CreateProfileActivity extends PassphraseRequiredActionBarActivity i
startActivityForResult(chooserIntent, REQUEST_CODE_AVATAR);
});
+ this.name.addTextChangedListener(new TextWatcher() {
+ @Override
+ public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
+ @Override
+ public void onTextChanged(CharSequence s, int start, int before, int count) {}
+ @Override
+ public void afterTextChanged(Editable s) {
+ if (s.toString().getBytes().length > ProfileCipher.NAME_PADDED_LENGTH) {
+ name.setError(getString(R.string.CreateProfileActivity_too_long));
+ finishButton.setEnabled(false);
+ } else if (name.getError() != null || !finishButton.isEnabled()) {
+ name.setError(null);
+ finishButton.setEnabled(true);
+ }
+ }
+ });
+
this.finishButton.setOnClickListener(view -> {
handleUpload();
});
diff --git a/src/org/thoughtcrime/securesms/contacts/avatars/ContactPhotoFactory.java b/src/org/thoughtcrime/securesms/contacts/avatars/ContactPhotoFactory.java
index 7a9ad21601..5cd79b7e4e 100644
--- a/src/org/thoughtcrime/securesms/contacts/avatars/ContactPhotoFactory.java
+++ b/src/org/thoughtcrime/securesms/contacts/avatars/ContactPhotoFactory.java
@@ -83,6 +83,7 @@ public class ContactPhotoFactory {
.load(new AvatarPhotoUri(address))
.asBitmap()
.diskCacheStrategy(DiskCacheStrategy.NONE)
+ .skipMemoryCache(true)
.centerCrop()
.into(targetSize, targetSize)
.get();
diff --git a/src/org/thoughtcrime/securesms/preferences/ProfilePreference.java b/src/org/thoughtcrime/securesms/preferences/ProfilePreference.java
index ac975b9dcf..11060d6131 100644
--- a/src/org/thoughtcrime/securesms/preferences/ProfilePreference.java
+++ b/src/org/thoughtcrime/securesms/preferences/ProfilePreference.java
@@ -2,9 +2,12 @@ package org.thoughtcrime.securesms.preferences;
import android.content.Context;
+import android.graphics.drawable.Drawable;
import android.os.AsyncTask;
import android.os.Build;
import android.preference.Preference;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
import android.support.annotation.RequiresApi;
import android.text.TextUtils;
import android.util.AttributeSet;
@@ -16,11 +19,16 @@ import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.contacts.avatars.ContactPhoto;
import org.thoughtcrime.securesms.contacts.avatars.ContactPhotoFactory;
import org.thoughtcrime.securesms.database.Address;
+import org.thoughtcrime.securesms.profiles.AvatarHelper;
import org.thoughtcrime.securesms.util.TextSecurePreferences;
import org.thoughtcrime.securesms.util.ViewUtil;
public class ProfilePreference extends Preference {
+ private ImageView avatarView;
+ private TextView profileNameView;
+ private TextView profileNumberView;
+
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
public ProfilePreference(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
@@ -50,27 +58,42 @@ public class ProfilePreference extends Preference {
protected void onBindView(View view) {
super.onBindView(view);
- final ImageView avatar = ViewUtil.findById(view, R.id.avatar);
- final TextView profileName = ViewUtil.findById(view, R.id.profile_name);
- final TextView profileNumber = ViewUtil.findById(view, R.id.number);
- final Address localAddress = Address.fromSerialized(TextSecurePreferences.getLocalNumber(getContext()));
+ avatarView = ViewUtil.findById(view, R.id.avatar);
+ profileNameView = ViewUtil.findById(view, R.id.profile_name);
+ profileNumberView = ViewUtil.findById(view, R.id.number);
+
+ refresh();
+ }
+
+ public void refresh() {
+ if (profileNumberView == null) return;
+
+ final Address localAddress = Address.fromSerialized(TextSecurePreferences.getLocalNumber(getContext()));
+ final String profileName = TextSecurePreferences.getProfileName(getContext());
- new AsyncTask() {
+ new AsyncTask() {
@Override
- protected ContactPhoto doInBackground(Void... params) {
- return ContactPhotoFactory.getSignalAvatarContactPhoto(getContext(), localAddress, null, getContext().getResources().getDimensionPixelSize(R.dimen.contact_photo_target_size));
+ protected @NonNull Drawable doInBackground(Void... params) {
+ if (AvatarHelper.getAvatarFile(getContext(), localAddress).exists()) {
+ return ContactPhotoFactory.getSignalAvatarContactPhoto(getContext(), localAddress, profileName,
+ getContext().getResources().getDimensionPixelSize(R.dimen.contact_photo_target_size))
+ .asDrawable(getContext(), 0);
+ } else {
+ return ContactPhotoFactory.getResourceContactPhoto(R.drawable.ic_camera_alt_white_24dp)
+ .asDrawable(getContext(), getContext().getResources().getColor(R.color.grey_400));
+ }
}
@Override
- protected void onPostExecute(ContactPhoto contactPhoto) {
- avatar.setImageDrawable(contactPhoto.asDrawable(getContext(), 0));
+ protected void onPostExecute(@NonNull Drawable contactPhoto) {
+ avatarView.setImageDrawable(contactPhoto);
}
}.execute();
- if (!TextUtils.isEmpty(TextSecurePreferences.getProfileName(getContext()))) {
- profileName.setText(TextSecurePreferences.getProfileName(getContext()));
+ if (!TextUtils.isEmpty(profileName)) {
+ profileNameView.setText(profileName);
}
- profileNumber.setText(localAddress.toPhoneString());
+ profileNumberView.setText(localAddress.toPhoneString());
}
}