From 6edca0eeb6920caf644c222585ed3930e065615f Mon Sep 17 00:00:00 2001 From: "daniel.boehrs" Date: Fri, 5 Oct 2018 14:07:00 +0200 Subject: [PATCH] add status/footer to "your profile" settings #76 --- AndroidManifest.xml | 6 ++--- res/layout/profile_create_activity.xml | 17 ++++++++++++++ res/values/strings.xml | 1 + .../securesms/CreateProfileActivity.java | 23 +++++++++++++++++++ .../securesms/connect/DcHelper.java | 1 + .../securesms/profiles/AvatarHelper.java | 16 ++++++++----- 6 files changed, 55 insertions(+), 9 deletions(-) diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 3cd00045c..c4e916fcc 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -458,15 +458,15 @@ + android:authorities="${applicationId}.provider.securesms" /> + android:authorities="${applicationId}.provider.securesms.mms" /> diff --git a/res/layout/profile_create_activity.xml b/res/layout/profile_create_activity.xml index f8678ca14..3852a921f 100644 --- a/res/layout/profile_create_activity.xml +++ b/res/layout/profile_create_activity.xml @@ -43,6 +43,23 @@ + + + + + + Please enter your system defined secret to unlock Delta Chat. Sent with my Delta Chat Messenger: https://delta.chat + Status text diff --git a/src/org/thoughtcrime/securesms/CreateProfileActivity.java b/src/org/thoughtcrime/securesms/CreateProfileActivity.java index 5c16d43f5..1c7c62d65 100644 --- a/src/org/thoughtcrime/securesms/CreateProfileActivity.java +++ b/src/org/thoughtcrime/securesms/CreateProfileActivity.java @@ -16,6 +16,7 @@ import android.provider.MediaStore; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.annotation.RequiresApi; +import android.support.design.widget.TextInputEditText; import android.text.Editable; import android.text.TextUtils; import android.text.TextWatcher; @@ -95,6 +96,7 @@ public class CreateProfileActivity extends BaseActionBarActivity implements Inje private EditText name; private EmojiToggle emojiToggle; private EmojiDrawer emojiDrawer; + private TextInputEditText statusView; private View reveal; private Intent nextIntent; @@ -118,6 +120,7 @@ public class CreateProfileActivity extends BaseActionBarActivity implements Inje initializeEmojiInput(); initializeProfileName(getIntent().getBooleanExtra(EXCLUDE_SYSTEM, false)); initializeProfileAvatar(getIntent().getBooleanExtra(EXCLUDE_SYSTEM, false)); + initializeStatusText(); ApplicationContext.getInstance(this).injectDependencies(this); } @@ -229,6 +232,7 @@ public class CreateProfileActivity extends BaseActionBarActivity implements Inje this.container = ViewUtil.findById(this, R.id.container); this.finishButton = ViewUtil.findById(this, R.id.finish_button); this.reveal = ViewUtil.findById(this, R.id.reveal); + this.statusView = ViewUtil.findById(this, R.id.status_text); this.nextIntent = getIntent().getParcelableExtra(NEXT_INTENT); this.avatar.setImageDrawable(new ResourceContactPhoto(R.drawable.ic_camera_alt_white_24dp).asDrawable(this, getResources().getColor(R.color.grey_400))); @@ -374,6 +378,14 @@ public class CreateProfileActivity extends BaseActionBarActivity implements Inje this.name.setOnClickListener(v -> container.showSoftkey(name)); } + private void initializeStatusText() { + String status = DcHelper.get(this, DcHelper.CONFIG_SELF_STATUS); + if (status.isEmpty()) { + status = getString(R.string.default_status_text); + } + statusView.setText(status); + } + private Intent createAvatarSelectionIntent(@Nullable File captureFile, boolean includeClear, boolean includeCamera) { List extraIntents = new LinkedList<>(); Intent galleryIntent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.INTERNAL_CONTENT_URI); @@ -440,6 +452,7 @@ public class CreateProfileActivity extends BaseActionBarActivity implements Inje Context context = CreateProfileActivity.this; byte[] profileKey = ProfileKeyUtil.getProfileKey(CreateProfileActivity.this); DcHelper.set(context, DcHelper.CONFIG_DISPLAY_NAME, name); + setStatusText(); TextSecurePreferences.setProfileName(context, name); try { @@ -470,6 +483,16 @@ public class CreateProfileActivity extends BaseActionBarActivity implements Inje }.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); } + private void setStatusText() { + String newStatus = statusView.getText().toString().trim(); + String defaultStatus = getString(R.string.default_status_text); + if (newStatus.equals(defaultStatus)) { + DcHelper.set(this, DcHelper.CONFIG_SELF_STATUS, null); + } else { + DcHelper.set(this, DcHelper.CONFIG_SELF_STATUS, newStatus); + } + } + private void handleFinishedLegacy() { finishButton.setProgress(0); if (nextIntent != null) startActivity(nextIntent); diff --git a/src/org/thoughtcrime/securesms/connect/DcHelper.java b/src/org/thoughtcrime/securesms/connect/DcHelper.java index 901d7fb12..4bc68cf3a 100644 --- a/src/org/thoughtcrime/securesms/connect/DcHelper.java +++ b/src/org/thoughtcrime/securesms/connect/DcHelper.java @@ -20,6 +20,7 @@ public class DcHelper { public static final String CONFIG_SERVER_FLAGS = "server_flags"; public static final String CONFIG_DISPLAY_NAME = "displayname"; public static final String CONFIG_SELF_STATUS = "selfstatus"; + public static final String CONFIG_SELF_AVATAR = "selfavatar"; public static final String CONFIG_E2EE_ENABLED = "e2ee_enabled"; public static ApplicationDcContext getContext(Context context) { diff --git a/src/org/thoughtcrime/securesms/profiles/AvatarHelper.java b/src/org/thoughtcrime/securesms/profiles/AvatarHelper.java index e8bacc323..f7957b87d 100644 --- a/src/org/thoughtcrime/securesms/profiles/AvatarHelper.java +++ b/src/org/thoughtcrime/securesms/profiles/AvatarHelper.java @@ -7,6 +7,7 @@ import android.support.annotation.Nullable; import com.annimon.stream.Stream; +import org.thoughtcrime.securesms.connect.DcHelper; import org.thoughtcrime.securesms.database.Address; import java.io.File; @@ -42,11 +43,12 @@ public class AvatarHelper { } public static void delete(@NonNull Context context, @NonNull Address address) { - delete(getAvatarFile(context, address)); + delete(context, getAvatarFile(context, address)); } - public static void delete(@NonNull File avatar) { + public static void delete(@NonNull Context context, @NonNull File avatar) { avatar.delete(); + DcHelper.set(context, DcHelper.CONFIG_SELF_AVATAR, null); } public static @NonNull File getAvatarFile(@NonNull Context context, @NonNull Address address) { @@ -67,23 +69,25 @@ public class AvatarHelper { delete(context, address); } else { File avatar = getAvatarFile(context, address); - writeAvatarFile(avatar, data); + writeAvatarFile(context, avatar, data); } } public static void setAvatar(@NonNull Context context, @NonNull String address, @Nullable byte[] data) throws IOException { File avatar = getAvatarFile(context, address); if (data == null) { - delete(avatar); + delete(context, avatar); } else { - writeAvatarFile(avatar, data); + writeAvatarFile(context, avatar, data); } } - private static void writeAvatarFile(@NonNull File avatar, @Nullable byte[] data) throws IOException { + private static void writeAvatarFile(@NonNull Context context, @NonNull File avatar, @Nullable byte[] data) throws IOException { FileOutputStream out = new FileOutputStream(avatar); out.write(data); out.close(); + String path = avatar.getPath(); + DcHelper.set(context, DcHelper.CONFIG_SELF_AVATAR, path); } }