diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 67218f62d7..ff5cd0aa9b 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -249,10 +249,6 @@
android:launchMode="singleTask"
android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize"/>
-
-
@@ -414,10 +410,6 @@
-
-
diff --git a/app/src/main/java/org/thoughtcrime/securesms/ContactSelectionListFragment.java b/app/src/main/java/org/thoughtcrime/securesms/ContactSelectionListFragment.java
index 84cb24ce54..5d2c0d2c85 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/ContactSelectionListFragment.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/ContactSelectionListFragment.java
@@ -271,7 +271,7 @@ public final class ContactSelectionListFragment extends Fragment
RecyclerViewConcatenateAdapterStickyHeader concatenateAdapter = new RecyclerViewConcatenateAdapterStickyHeader();
- if (listCallback != null && FeatureFlags.newGroupUI()) {
+ if (listCallback != null) {
if (FeatureFlags.groupsV2create() && FeatureFlags.groupsV2internalTest()) {
headerAdapter = new FixedViewsAdapter(createNewGroupItem(listCallback), createNewGroupsV1GroupItem(listCallback));
} else {
@@ -518,7 +518,7 @@ public final class ContactSelectionListFragment extends Fragment
private void markContactSelected(@NonNull SelectedContact selectedContact) {
cursorRecyclerViewAdapter.addSelectedContact(selectedContact);
- if (isMulti() && FeatureFlags.newGroupUI()) {
+ if (isMulti()) {
addChipForSelectedContact(selectedContact);
}
}
diff --git a/app/src/main/java/org/thoughtcrime/securesms/GroupCreateActivity.java b/app/src/main/java/org/thoughtcrime/securesms/GroupCreateActivity.java
deleted file mode 100644
index 699ddd7d29..0000000000
--- a/app/src/main/java/org/thoughtcrime/securesms/GroupCreateActivity.java
+++ /dev/null
@@ -1,629 +0,0 @@
-/*
- * Copyright (C) 2014 Open Whisper Systems
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-
-package org.thoughtcrime.securesms;
-
-import android.app.Activity;
-import android.content.Context;
-import android.content.Intent;
-import android.graphics.Bitmap;
-import android.graphics.BitmapFactory;
-import android.graphics.drawable.Drawable;
-import android.os.AsyncTask;
-import android.os.Bundle;
-import android.text.TextUtils;
-import android.view.Menu;
-import android.view.MenuInflater;
-import android.view.MenuItem;
-import android.view.View;
-import android.widget.EditText;
-import android.widget.ImageView;
-import android.widget.ListView;
-import android.widget.TextView;
-import android.widget.Toast;
-
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-import androidx.core.content.ContextCompat;
-
-import com.bumptech.glide.load.engine.DiskCacheStrategy;
-import com.bumptech.glide.request.target.SimpleTarget;
-import com.bumptech.glide.request.transition.Transition;
-
-import org.thoughtcrime.securesms.components.PushRecipientsPanel;
-import org.thoughtcrime.securesms.components.PushRecipientsPanel.RecipientsPanelChangedListener;
-import org.thoughtcrime.securesms.contacts.ContactsCursorLoader.DisplayMode;
-import org.thoughtcrime.securesms.contacts.RecipientsEditor;
-import org.thoughtcrime.securesms.contacts.avatars.ContactColors;
-import org.thoughtcrime.securesms.contacts.avatars.ResourceContactPhoto;
-import org.thoughtcrime.securesms.conversation.ConversationActivity;
-import org.thoughtcrime.securesms.database.DatabaseFactory;
-import org.thoughtcrime.securesms.database.GroupDatabase;
-import org.thoughtcrime.securesms.database.GroupDatabase.GroupRecord;
-import org.thoughtcrime.securesms.database.RecipientDatabase;
-import org.thoughtcrime.securesms.database.ThreadDatabase;
-import org.thoughtcrime.securesms.groups.GroupId;
-import org.thoughtcrime.securesms.groups.GroupManager;
-import org.thoughtcrime.securesms.groups.GroupManager.GroupActionResult;
-import org.thoughtcrime.securesms.logging.Log;
-import org.thoughtcrime.securesms.mediasend.AvatarSelectionActivity;
-import org.thoughtcrime.securesms.mediasend.AvatarSelectionBottomSheetDialogFragment;
-import org.thoughtcrime.securesms.mediasend.Media;
-import org.thoughtcrime.securesms.mms.DecryptableStreamUriLoader.DecryptableUri;
-import org.thoughtcrime.securesms.mms.GlideApp;
-import org.thoughtcrime.securesms.profiles.AvatarHelper;
-import org.thoughtcrime.securesms.profiles.edit.EditProfileActivity;
-import org.thoughtcrime.securesms.recipients.Recipient;
-import org.thoughtcrime.securesms.recipients.RecipientId;
-import org.thoughtcrime.securesms.util.BitmapUtil;
-import org.thoughtcrime.securesms.util.DynamicTheme;
-import org.thoughtcrime.securesms.util.FeatureFlags;
-import org.thoughtcrime.securesms.util.SelectedRecipientsAdapter;
-import org.thoughtcrime.securesms.util.SelectedRecipientsAdapter.OnRecipientDeletedListener;
-import org.thoughtcrime.securesms.util.TextSecurePreferences;
-import org.thoughtcrime.securesms.util.task.ProgressDialogAsyncTask;
-import org.whispersystems.libsignal.util.guava.Optional;
-
-import java.io.IOException;
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Set;
-
-/**
- * Activity to create and update {@link GroupId.V1} groups
- *
- * @author Jake McGinty
- */
-public class GroupCreateActivity extends PassphraseRequiredActionBarActivity
- implements OnRecipientDeletedListener,
- RecipientsPanelChangedListener
-{
-
- private final static String TAG = GroupCreateActivity.class.getSimpleName();
-
- private static final String GROUP_ID_EXTRA = "group_id";
- private static final String GROUP_THREAD_EXTRA = "group_thread";
-
- private final DynamicTheme dynamicTheme = new DynamicTheme();
-
- private static final short REQUEST_CODE_SELECT_AVATAR = 26165;
- private static final int PICK_CONTACT = 1;
-
- private EditText groupName;
- private ListView listView;
- private ImageView avatar;
- private TextView creatingText;
- private Bitmap avatarBmp;
-
- @NonNull private Optional groupToUpdate = Optional.absent();
-
- public static Intent newEditGroupIntent(@NonNull Context context, @NonNull GroupId.V1 groupId) {
- Intent intent = new Intent(context, GroupCreateActivity.class);
- intent.putExtra(GroupCreateActivity.GROUP_ID_EXTRA, groupId.toString());
- return intent;
- }
-
- @Override
- protected void onPreCreate() {
- dynamicTheme.onCreate(this);
- }
-
- @Override
- protected void onCreate(Bundle state, boolean ready) {
- setContentView(R.layout.group_create_activity);
- //noinspection ConstantConditions
- initializeAppBar();
- initializeResources();
- initializeExistingGroup();
- }
-
- @Override
- public void onResume() {
- super.onResume();
- dynamicTheme.onResume(this);
- updateViewState();
- }
-
- private boolean isSignalGroup() {
- return TextSecurePreferences.isPushRegistered(this) && !getAdapter().hasNonPushMembers();
- }
-
- private void disableSignalGroupViews(int reasonResId) {
- View pushDisabled = findViewById(R.id.push_disabled);
- pushDisabled.setVisibility(View.VISIBLE);
- ((TextView) findViewById(R.id.push_disabled_reason)).setText(reasonResId);
- avatar.setEnabled(false);
- groupName.setEnabled(false);
- }
-
- private void enableSignalGroupViews() {
- findViewById(R.id.push_disabled).setVisibility(View.GONE);
- avatar.setEnabled(true);
- groupName.setEnabled(true);
- }
-
- @SuppressWarnings("ConstantConditions")
- private void updateViewState() {
- if (!TextSecurePreferences.isPushRegistered(this)) {
- disableSignalGroupViews(R.string.GroupCreateActivity_youre_not_registered_for_signal);
- getSupportActionBar().setTitle(R.string.GroupCreateActivity_actionbar_mms_title);
- } else if (getAdapter().hasNonPushMembers()) {
- disableSignalGroupViews(R.string.GroupCreateActivity_contacts_dont_support_push);
- getSupportActionBar().setTitle(R.string.GroupCreateActivity_actionbar_mms_title);
- } else {
- enableSignalGroupViews();
- getSupportActionBar().setTitle(groupToUpdate.isPresent()
- ? R.string.GroupCreateActivity_actionbar_edit_title
- : R.string.GroupCreateActivity_actionbar_title);
- }
- }
-
- private static boolean isActiveInDirectory(Recipient recipient) {
- return recipient.resolve().getRegistered() == RecipientDatabase.RegisteredState.REGISTERED;
- }
-
- private void addSelectedContacts(@NonNull Recipient... recipients) {
- new AddMembersTask(this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, recipients);
- }
-
- private void addSelectedContacts(@NonNull Collection recipients) {
- addSelectedContacts(recipients.toArray(new Recipient[recipients.size()]));
- }
-
- private void initializeAppBar() {
- Drawable upIcon = ContextCompat.getDrawable(this, R.drawable.ic_arrow_left_24);
- getSupportActionBar().setHomeAsUpIndicator(upIcon);
- getSupportActionBar().setDisplayHomeAsUpEnabled(true);
- }
-
- private void initializeResources() {
- RecipientsEditor recipientsEditor = findViewById(R.id.recipients_text);
- PushRecipientsPanel recipientsPanel = findViewById(R.id.recipients);
-
- listView = findViewById(R.id.selected_contacts_list);
- avatar = findViewById(R.id.avatar);
- groupName = findViewById(R.id.group_name);
- creatingText = findViewById(R.id.creating_group_text);
-
- SelectedRecipientsAdapter adapter = new SelectedRecipientsAdapter(this);
- adapter.setOnRecipientDeletedListener(this);
- listView.setAdapter(adapter);
-
- recipientsEditor.setHint(R.string.recipients_panel__add_members);
- recipientsPanel.setPanelChangeListener(this);
-
- findViewById(R.id.contacts_button).setOnClickListener(new AddRecipientButtonListener());
-
- avatar.setImageDrawable(getDefaultGroupAvatar());
- avatar.setOnClickListener(view -> AvatarSelectionBottomSheetDialogFragment.create(avatarBmp != null, false, REQUEST_CODE_SELECT_AVATAR, true).show(getSupportFragmentManager(), null));
- }
-
- private Drawable getDefaultGroupAvatar() {
- return new ResourceContactPhoto(R.drawable.ic_group_outline_34, R.drawable.ic_group_outline_20).asDrawable(this, ContactColors.UNKNOWN_COLOR.toConversationColor(this));
- }
-
- private void initializeExistingGroup() {
- final GroupId groupId = GroupId.parseNullableOrThrow(getIntent().getStringExtra(GROUP_ID_EXTRA));
-
- if (groupId != null) {
- GroupId.V1 groupIdV1 = groupId.requireV1();
-
- new FillExistingGroupInfoAsyncTask(this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, groupIdV1);
-
- if (FeatureFlags.newGroupUI()) {
- avatar.setOnClickListener(v -> startActivity(EditProfileActivity.getIntentForGroupProfile(this, groupIdV1)));
- }
- }
- }
-
- @Override
- public boolean onPrepareOptionsMenu(Menu menu) {
- MenuInflater inflater = this.getMenuInflater();
- menu.clear();
-
- inflater.inflate(R.menu.group_create, menu);
- super.onPrepareOptionsMenu(menu);
- return true;
- }
-
- @Override
- public boolean onOptionsItemSelected(MenuItem item) {
- super.onOptionsItemSelected(item);
- switch (item.getItemId()) {
- case android.R.id.home:
- finish();
- return true;
- case R.id.menu_create_group:
- if (groupToUpdate.isPresent()) handleGroupUpdate();
- else handleGroupCreate();
- return true;
- }
-
- return false;
- }
-
- @Override
- public void onRecipientDeleted(Recipient recipient) {
- getAdapter().remove(recipient);
- updateViewState();
- }
-
- @Override
- public void onRecipientsPanelUpdate(List recipients) {
- if (recipients != null && !recipients.isEmpty()) addSelectedContacts(recipients);
- }
-
- private void handleGroupCreate() {
- if (getAdapter().getCount() < 1) {
- Log.i(TAG, getString(R.string.GroupCreateActivity_contacts_no_members));
- Toast.makeText(getApplicationContext(), R.string.GroupCreateActivity_contacts_no_members, Toast.LENGTH_SHORT).show();
- return;
- }
- if (isSignalGroup()) {
- new CreateSignalGroupTask(this, avatarBmp, getGroupName(), getAdapter().getRecipients()).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
- } else {
- new CreateMmsGroupTask(this, getAdapter().getRecipients()).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
- }
- }
-
- private void handleGroupUpdate() {
- new UpdateSignalGroupV1Task(this, groupToUpdate.get().id, avatarBmp,
- getGroupName(), getAdapter().getRecipients()).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
- }
-
- private void handleOpenConversation(long threadId, Recipient recipient) {
- Intent intent = new Intent(this, ConversationActivity.class);
- intent.putExtra(ConversationActivity.THREAD_ID_EXTRA, threadId);
- intent.putExtra(ConversationActivity.DISTRIBUTION_TYPE_EXTRA, ThreadDatabase.DistributionTypes.DEFAULT);
- intent.putExtra(ConversationActivity.RECIPIENT_EXTRA, recipient.getId());
- startActivity(intent);
- finish();
- }
-
- private SelectedRecipientsAdapter getAdapter() {
- return (SelectedRecipientsAdapter) listView.getAdapter();
- }
-
- private @Nullable String getGroupName() {
- return groupName.getText() != null ? groupName.getText().toString() : null;
- }
-
- @Override
- public void onActivityResult(int reqCode, int resultCode, final Intent data) {
- super.onActivityResult(reqCode, resultCode, data);
-
- if (data == null || resultCode != Activity.RESULT_OK)
- return;
-
- switch (reqCode) {
- case PICK_CONTACT:
- List selected = data.getParcelableArrayListExtra(PushContactSelectionActivity.KEY_SELECTED_RECIPIENTS);
-
- for (RecipientId contact : selected) {
- Recipient recipient = Recipient.resolved(contact);
- addSelectedContacts(recipient);
- }
-
- break;
- case REQUEST_CODE_SELECT_AVATAR:
- if (data.getBooleanExtra("delete", false)) {
- avatarBmp = null;
- avatar.setImageDrawable(getDefaultGroupAvatar());
- return;
- }
-
- final Media result = data.getParcelableExtra(AvatarSelectionActivity.EXTRA_MEDIA);
- final DecryptableUri decryptableUri = new DecryptableUri(result.getUri());
-
- GlideApp.with(this)
- .asBitmap()
- .load(decryptableUri)
- .skipMemoryCache(true)
- .diskCacheStrategy(DiskCacheStrategy.NONE)
- .centerCrop()
- .override(AvatarHelper.AVATAR_DIMENSIONS, AvatarHelper.AVATAR_DIMENSIONS)
- .into(new SimpleTarget() {
- @Override
- public void onResourceReady(@NonNull Bitmap resource, Transition super Bitmap> transition) {
- setAvatar(decryptableUri, resource);
- }
- });
- }
- }
-
- private class AddRecipientButtonListener implements View.OnClickListener {
- @Override
- public void onClick(View v) {
- Intent intent = new Intent(GroupCreateActivity.this, PushContactSelectionActivity.class);
- if (groupToUpdate.isPresent()) {
- intent.putExtra(ContactSelectionListFragment.DISPLAY_MODE, DisplayMode.FLAG_PUSH);
- } else {
- intent.putExtra(ContactSelectionListFragment.DISPLAY_MODE, DisplayMode.FLAG_PUSH | DisplayMode.FLAG_SMS);
- }
- startActivityForResult(intent, PICK_CONTACT);
- }
- }
-
- private static class CreateMmsGroupTask extends AsyncTask {
- private final GroupCreateActivity activity;
- private final Set members;
-
- public CreateMmsGroupTask(GroupCreateActivity activity, Set members) {
- this.activity = activity;
- this.members = members;
- }
-
- @Override
- protected GroupActionResult doInBackground(Void... avoid) {
- List memberAddresses = new LinkedList<>();
-
- for (Recipient recipient : members) {
- memberAddresses.add(recipient.getId());
- }
- memberAddresses.add(Recipient.self().getId());
-
- GroupId.Mms groupId = DatabaseFactory.getGroupDatabase(activity).getOrCreateMmsGroupForMembers(memberAddresses);
- RecipientId groupRecipientId = DatabaseFactory.getRecipientDatabase(activity).getOrInsertFromGroupId(groupId);
- Recipient groupRecipient = Recipient.resolved(groupRecipientId);
- long threadId = DatabaseFactory.getThreadDatabase(activity).getThreadIdFor(groupRecipient, ThreadDatabase.DistributionTypes.DEFAULT);
-
- return new GroupActionResult(groupRecipient, threadId);
- }
-
- @Override
- protected void onPostExecute(GroupActionResult result) {
- activity.handleOpenConversation(result.getThreadId(), result.getGroupRecipient());
- }
-
- @Override
- protected void onProgressUpdate(Void... values) {
- super.onProgressUpdate(values);
- }
- }
-
- private abstract static class SignalGroupTask extends AsyncTask> {
-
- protected GroupCreateActivity activity;
- protected Bitmap avatar;
- protected Set members;
- protected String name;
-
- public SignalGroupTask(GroupCreateActivity activity,
- Bitmap avatar,
- String name,
- Set members)
- {
- this.activity = activity;
- this.avatar = avatar;
- this.name = name;
- this.members = members;
- }
-
- @Override
- protected void onPreExecute() {
- activity.findViewById(R.id.group_details_layout).setVisibility(View.GONE);
- activity.findViewById(R.id.creating_group_layout).setVisibility(View.VISIBLE);
- activity.findViewById(R.id.menu_create_group).setVisibility(View.GONE);
- final int titleResId = activity.groupToUpdate.isPresent()
- ? R.string.GroupCreateActivity_updating_group
- : R.string.GroupCreateActivity_creating_group;
- activity.creatingText.setText(activity.getString(titleResId, activity.getGroupName()));
- }
-
- @Override
- protected void onPostExecute(Optional groupActionResultOptional) {
- if (activity.isFinishing()) return;
- activity.findViewById(R.id.group_details_layout).setVisibility(View.VISIBLE);
- activity.findViewById(R.id.creating_group_layout).setVisibility(View.GONE);
- activity.findViewById(R.id.menu_create_group).setVisibility(View.VISIBLE);
- }
- }
-
- private static class CreateSignalGroupTask extends SignalGroupTask {
- public CreateSignalGroupTask(GroupCreateActivity activity, Bitmap avatar, String name, Set members) {
- super(activity, avatar, name, members);
- }
-
- @Override
- protected Optional doInBackground(Void... aVoid) {
- return Optional.of(GroupManager.createGroupV1(activity, members, BitmapUtil.toByteArray(avatar), name, false));
- }
-
- @Override
- protected void onPostExecute(Optional result) {
- if (result.isPresent() && result.get().getThreadId() > -1) {
- if (!activity.isFinishing()) {
- activity.handleOpenConversation(result.get().getThreadId(), result.get().getGroupRecipient());
- }
- } else {
- super.onPostExecute(result);
- Toast.makeText(activity.getApplicationContext(),
- R.string.GroupCreateActivity_contacts_invalid_number, Toast.LENGTH_LONG).show();
- }
- }
- }
-
- private static class UpdateSignalGroupV1Task extends SignalGroupTask {
- private final GroupId.V1 groupId;
-
- UpdateSignalGroupV1Task(GroupCreateActivity activity, GroupId.V1 groupId,
- Bitmap avatar, String name, Set members)
- {
- super(activity, avatar, name, members);
- this.groupId = groupId;
- }
-
- @Override
- protected Optional doInBackground(Void... aVoid) {
- return Optional.fromNullable(GroupManager.updateGroup(activity, groupId, members, BitmapUtil.toByteArray(avatar), name));
- }
-
- @Override
- protected void onPostExecute(Optional result) {
- if (result.isPresent() && result.get().getThreadId() > -1) {
- if (!activity.isFinishing()) {
- Intent intent = activity.getIntent();
- intent.putExtra(GROUP_THREAD_EXTRA, result.get().getThreadId());
- intent.putExtra(GROUP_ID_EXTRA, result.get().getGroupRecipient().requireGroupId().toString());
- activity.setResult(RESULT_OK, intent);
- activity.finish();
- }
- } else {
- super.onPostExecute(result);
- Toast.makeText(activity.getApplicationContext(),
- R.string.GroupCreateActivity_contacts_invalid_number, Toast.LENGTH_LONG).show();
- }
- }
- }
-
- private static class AddMembersTask extends AsyncTask> {
- static class Result {
- Optional recipient;
- boolean isPush;
- String reason;
-
- public Result(@Nullable Recipient recipient, boolean isPush, @Nullable String reason) {
- this.recipient = Optional.fromNullable(recipient);
- this.isPush = isPush;
- this.reason = reason;
- }
- }
-
- private GroupCreateActivity activity;
- private boolean failIfNotPush;
-
- public AddMembersTask(@NonNull GroupCreateActivity activity) {
- this.activity = activity;
- this.failIfNotPush = activity.groupToUpdate.isPresent();
- }
-
- @Override
- protected List doInBackground(Recipient... recipients) {
- final List results = new LinkedList<>();
-
- for (Recipient recipient : recipients) {
- boolean isPush = isActiveInDirectory(recipient);
-
- if (failIfNotPush && !isPush) {
- results.add(new Result(null, false, activity.getString(R.string.GroupCreateActivity_cannot_add_non_push_to_existing_group,
- recipient.getDisplayName(activity))));
- } else if (TextUtils.equals(TextSecurePreferences.getLocalNumber(activity), recipient.getE164().or(""))) {
- results.add(new Result(null, false, activity.getString(R.string.GroupCreateActivity_youre_already_in_the_group)));
- } else {
- results.add(new Result(recipient, isPush, null));
- }
- }
- return results;
- }
-
- @Override
- protected void onPostExecute(List results) {
- if (activity.isFinishing()) return;
-
- for (Result result : results) {
- if (result.recipient.isPresent()) {
- activity.getAdapter().add(result.recipient.get(), result.isPush);
- } else {
- Toast.makeText(activity, result.reason, Toast.LENGTH_SHORT).show();
- }
- }
- activity.updateViewState();
- }
- }
-
- private static class FillExistingGroupInfoAsyncTask extends ProgressDialogAsyncTask> {
- private GroupCreateActivity activity;
-
- public FillExistingGroupInfoAsyncTask(GroupCreateActivity activity) {
- super(activity,
- R.string.GroupCreateActivity_loading_group_details,
- R.string.please_wait);
- this.activity = activity;
- }
-
- @Override
- protected Optional doInBackground(GroupId.V1... groupIds) {
- final GroupDatabase db = DatabaseFactory.getGroupDatabase(activity);
- final List recipients = db.getGroupMembers(groupIds[0], GroupDatabase.MemberSet.FULL_MEMBERS_EXCLUDING_SELF);
- final Optional group = db.getGroup(groupIds[0]);
- final Set existingContacts = new HashSet<>(recipients.size());
- existingContacts.addAll(recipients);
-
- if (group.isPresent()) {
- Bitmap avatar = null;
- try {
- avatar = BitmapFactory.decodeStream(AvatarHelper.getAvatar(getContext(), group.get().getRecipientId()));
- } catch (IOException e) {
- Log.w(TAG, "Failed to read avatar.");
- }
- return Optional.of(new GroupData(groupIds[0],
- existingContacts,
- avatar,
- BitmapUtil.toByteArray(avatar),
- group.get().getTitle()));
- } else {
- return Optional.absent();
- }
- }
-
- @Override
- protected void onPostExecute(Optional group) {
- super.onPostExecute(group);
-
- if (group.isPresent() && !activity.isFinishing()) {
- activity.groupToUpdate = group;
-
- activity.groupName.setText(group.get().name);
- if (group.get().avatarBmp != null) {
- activity.setAvatar(group.get().avatarBytes, group.get().avatarBmp);
- }
- SelectedRecipientsAdapter adapter = new SelectedRecipientsAdapter(activity, group.get().recipients);
- adapter.setOnRecipientDeletedListener(activity);
- activity.listView.setAdapter(adapter);
- activity.updateViewState();
- }
- }
- }
-
- private void setAvatar(T model, Bitmap bitmap) {
- avatarBmp = bitmap;
- GlideApp.with(this)
- .load(model)
- .circleCrop()
- .skipMemoryCache(true)
- .diskCacheStrategy(DiskCacheStrategy.NONE)
- .into(avatar);
- }
-
- private static class GroupData {
- GroupId.V1 id;
- Set recipients;
- Bitmap avatarBmp;
- byte[] avatarBytes;
- String name;
-
- GroupData(GroupId.V1 id, Set recipients, Bitmap avatarBmp, byte[] avatarBytes, String name) {
- this.id = id;
- this.recipients = recipients;
- this.avatarBmp = avatarBmp;
- this.avatarBytes = avatarBytes;
- this.name = name;
- }
- }
-}
diff --git a/app/src/main/java/org/thoughtcrime/securesms/RecipientPreferenceActivity.java b/app/src/main/java/org/thoughtcrime/securesms/RecipientPreferenceActivity.java
deleted file mode 100644
index 375f9f1818..0000000000
--- a/app/src/main/java/org/thoughtcrime/securesms/RecipientPreferenceActivity.java
+++ /dev/null
@@ -1,774 +0,0 @@
-package org.thoughtcrime.securesms;
-
-import android.annotation.SuppressLint;
-import android.content.Context;
-import android.content.Intent;
-import android.database.Cursor;
-import android.graphics.Color;
-import android.graphics.drawable.Drawable;
-import android.media.Ringtone;
-import android.media.RingtoneManager;
-import android.net.Uri;
-import android.os.AsyncTask;
-import android.os.Build;
-import android.os.Bundle;
-import android.provider.Settings;
-import android.telephony.PhoneNumberUtils;
-import android.util.Pair;
-import android.view.LayoutInflater;
-import android.view.MenuItem;
-import android.view.View;
-import android.view.ViewGroup;
-import android.view.WindowManager;
-import android.widget.ImageView;
-import android.widget.TextView;
-import android.widget.Toast;
-
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-import androidx.appcompat.widget.Toolbar;
-import androidx.core.view.ViewCompat;
-import androidx.fragment.app.Fragment;
-import androidx.loader.app.LoaderManager;
-import androidx.loader.content.Loader;
-import androidx.preference.CheckBoxPreference;
-import androidx.preference.ListPreference;
-import androidx.preference.Preference;
-import androidx.preference.PreferenceCategory;
-import androidx.recyclerview.widget.RecyclerView;
-
-import com.bumptech.glide.load.DataSource;
-import com.bumptech.glide.load.engine.DiskCacheStrategy;
-import com.bumptech.glide.load.engine.GlideException;
-import com.bumptech.glide.request.RequestListener;
-import com.bumptech.glide.request.target.Target;
-import com.google.android.material.appbar.CollapsingToolbarLayout;
-
-import org.thoughtcrime.securesms.color.MaterialColor;
-import org.thoughtcrime.securesms.color.MaterialColors;
-import org.thoughtcrime.securesms.components.SwitchPreferenceCompat;
-import org.thoughtcrime.securesms.components.ThreadPhotoRailView;
-import org.thoughtcrime.securesms.contacts.avatars.ContactPhoto;
-import org.thoughtcrime.securesms.contacts.avatars.FallbackContactPhoto;
-import org.thoughtcrime.securesms.contacts.avatars.ProfileContactPhoto;
-import org.thoughtcrime.securesms.contacts.avatars.ResourceContactPhoto;
-import org.thoughtcrime.securesms.database.DatabaseFactory;
-import org.thoughtcrime.securesms.database.IdentityDatabase.IdentityRecord;
-import org.thoughtcrime.securesms.database.MediaDatabase;
-import org.thoughtcrime.securesms.database.RecipientDatabase;
-import org.thoughtcrime.securesms.database.RecipientDatabase.VibrateState;
-import org.thoughtcrime.securesms.database.loaders.RecipientMediaLoader;
-import org.thoughtcrime.securesms.dependencies.ApplicationDependencies;
-import org.thoughtcrime.securesms.jobs.MultiDeviceContactUpdateJob;
-import org.thoughtcrime.securesms.logging.Log;
-import org.thoughtcrime.securesms.mediaoverview.MediaOverviewActivity;
-import org.thoughtcrime.securesms.mms.GlideApp;
-import org.thoughtcrime.securesms.mms.GlideRequests;
-import org.thoughtcrime.securesms.notifications.NotificationChannels;
-import org.thoughtcrime.securesms.permissions.Permissions;
-import org.thoughtcrime.securesms.preferences.CorrectedPreferenceFragment;
-import org.thoughtcrime.securesms.preferences.widgets.ColorPickerPreference;
-import org.thoughtcrime.securesms.preferences.widgets.ContactPreference;
-import org.thoughtcrime.securesms.recipients.LiveRecipient;
-import org.thoughtcrime.securesms.recipients.Recipient;
-import org.thoughtcrime.securesms.recipients.RecipientId;
-import org.thoughtcrime.securesms.recipients.RecipientUtil;
-import org.thoughtcrime.securesms.recipients.ui.managerecipient.ManageRecipientActivity;
-import org.thoughtcrime.securesms.util.CommunicationActions;
-import org.thoughtcrime.securesms.util.DynamicDarkToolbarTheme;
-import org.thoughtcrime.securesms.util.DynamicTheme;
-import org.thoughtcrime.securesms.util.FeatureFlags;
-import org.thoughtcrime.securesms.util.IdentityUtil;
-import org.thoughtcrime.securesms.util.ServiceUtil;
-import org.thoughtcrime.securesms.util.TextSecurePreferences;
-import org.thoughtcrime.securesms.util.ThemeUtil;
-import org.thoughtcrime.securesms.util.Util;
-import org.thoughtcrime.securesms.util.ViewUtil;
-import org.thoughtcrime.securesms.util.concurrent.ListenableFuture;
-import org.thoughtcrime.securesms.util.concurrent.SimpleTask;
-import org.whispersystems.libsignal.util.guava.Optional;
-
-import java.util.concurrent.ExecutionException;
-
-@SuppressLint("StaticFieldLeak")
-public class RecipientPreferenceActivity extends PassphraseRequiredActionBarActivity implements LoaderManager.LoaderCallbacks
-{
- private static final String TAG = RecipientPreferenceActivity.class.getSimpleName();
-
- public static final String RECIPIENT_ID = "recipient";
-
- private static final String PREFERENCE_MUTED = "pref_key_recipient_mute";
- private static final String PREFERENCE_MESSAGE_TONE = "pref_key_recipient_ringtone";
- private static final String PREFERENCE_CALL_TONE = "pref_key_recipient_call_ringtone";
- private static final String PREFERENCE_MESSAGE_VIBRATE = "pref_key_recipient_vibrate";
- private static final String PREFERENCE_CALL_VIBRATE = "pref_key_recipient_call_vibrate";
- private static final String PREFERENCE_BLOCK = "pref_key_recipient_block";
- private static final String PREFERENCE_COLOR = "pref_key_recipient_color";
- private static final String PREFERENCE_IDENTITY = "pref_key_recipient_identity";
- private static final String PREFERENCE_ABOUT = "pref_key_number";
- private static final String PREFERENCE_CUSTOM_NOTIFICATIONS = "pref_key_recipient_custom_notifications";
-
- private final DynamicTheme dynamicTheme = new DynamicDarkToolbarTheme();
-
- private ImageView avatar;
- private GlideRequests glideRequests;
- private RecipientId recipientId;
- private TextView threadPhotoRailLabel;
- private ThreadPhotoRailView threadPhotoRailView;
- private CollapsingToolbarLayout toolbarLayout;
-
- public static @NonNull Intent getLaunchIntent(@NonNull Context context, @NonNull RecipientId id) {
- if (FeatureFlags.newGroupUI()) {
- return ManageRecipientActivity.newIntent(context, id);
- }
-
- return getOldLaunchIntent(context, id);
- }
-
- @Deprecated
- public static Intent getOldLaunchIntent(@NonNull Context context, @NonNull RecipientId id) {
- Intent intent = new Intent(context, RecipientPreferenceActivity.class);
- intent.putExtra(RecipientPreferenceActivity.RECIPIENT_ID, id);
-
- return intent;
- }
-
- @Override
- public void onPreCreate() {
- dynamicTheme.onCreate(this);
- }
-
- @Override
- public void onCreate(Bundle instanceState, boolean ready) {
- setContentView(R.layout.recipient_preference_activity);
- this.glideRequests = GlideApp.with(this);
- this.recipientId = getIntent().getParcelableExtra(RECIPIENT_ID);
-
- LiveRecipient recipient = Recipient.live(recipientId);
-
- initializeToolbar();
- setHeader(recipient.get());
- recipient.observe(this, this::setHeader);
-
- LoaderManager.getInstance(this).initLoader(0, null, this);
- }
-
- @Override
- public void onResume() {
- super.onResume();
- dynamicTheme.onResume(this);
- }
-
- @Override
- protected void onActivityResult(int requestCode, int resultCode, Intent data) {
- super.onActivityResult(requestCode, resultCode, data);
- Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.preference_fragment);
- fragment.onActivityResult(requestCode, resultCode, data);
- }
-
- @Override
- public boolean onOptionsItemSelected(MenuItem item) {
- super.onOptionsItemSelected(item);
- switch (item.getItemId()) {
- case android.R.id.home:
- onBackPressed();
- return true;
- }
-
- return false;
- }
-
- private void initializeToolbar() {
- this.toolbarLayout = findViewById(R.id.collapsing_toolbar);
- this.avatar = findViewById(R.id.avatar);
- this.threadPhotoRailView = findViewById(R.id.recent_photos);
- this.threadPhotoRailLabel = findViewById(R.id.rail_label);
-
- this.toolbarLayout.setExpandedTitleColor(ThemeUtil.getThemedColor(this, R.attr.conversation_title_color));
- this.toolbarLayout.setCollapsedTitleTextColor(ThemeUtil.getThemedColor(this, R.attr.conversation_title_color));
-
- this.threadPhotoRailView.setListener(mediaRecord ->
- startActivity(MediaPreviewActivity.intentFromMediaRecord(RecipientPreferenceActivity.this,
- mediaRecord,
- ViewCompat.getLayoutDirection(threadPhotoRailView) == ViewCompat.LAYOUT_DIRECTION_LTR)));
-
- SimpleTask.run(
- () -> DatabaseFactory.getThreadDatabase(this).getThreadIdFor(recipientId),
- (threadId) -> {
- if (threadId == null) {
- Log.i(TAG, "No thread id for recipient.");
- } else {
- this.threadPhotoRailLabel.setOnClickListener(v -> startActivity(MediaOverviewActivity.forThread(this, threadId)));
- }
- }
- );
-
- Toolbar toolbar = findViewById(R.id.toolbar);
- setSupportActionBar(toolbar);
- getSupportActionBar().setDisplayHomeAsUpEnabled(true);
- getSupportActionBar().setLogo(null);
-
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
- getWindow().setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS, WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
- getWindow().setStatusBarColor(Color.TRANSPARENT);
-
- ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.recipient_preference_root), (v, insets) -> {
- ViewUtil.setTopMargin(toolbar, insets.getSystemWindowInsetTop());
- return insets;
- });
- }
- }
-
- private void setHeader(@NonNull Recipient recipient) {
- ContactPhoto contactPhoto = recipient.isLocalNumber() ? new ProfileContactPhoto(recipient, recipient.getProfileAvatar())
- : recipient.getContactPhoto();
- FallbackContactPhoto fallbackPhoto = recipient.isLocalNumber() ? new ResourceContactPhoto(R.drawable.ic_profile_outline_40, R.drawable.ic_profile_outline_20, R.drawable.ic_person_large)
- : recipient.getFallbackContactPhoto();
-
- glideRequests.load(contactPhoto)
- .fallback(fallbackPhoto.asCallCard(this))
- .error(fallbackPhoto.asCallCard(this))
- .diskCacheStrategy(DiskCacheStrategy.ALL)
- .addListener(new RequestListener() {
- @Override
- public boolean onLoadFailed(@Nullable GlideException e, Object model, Target target, boolean isFirstResource) {
- avatar.setOnClickListener(null);
- return false;
- }
-
- @Override
- public boolean onResourceReady(Drawable resource, Object model, Target target, DataSource dataSource, boolean isFirstResource) {
- avatar.setOnClickListener(v -> startActivity(AvatarPreviewActivity.intentFromRecipientId(RecipientPreferenceActivity.this, recipient.getId()),
- AvatarPreviewActivity.createTransitionBundle(RecipientPreferenceActivity.this, avatar)));
- return false;
- }
- })
- .into(this.avatar);
-
- if (contactPhoto == null) this.avatar.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
- else this.avatar.setScaleType(ImageView.ScaleType.CENTER_CROP);
-
- this.avatar.setBackgroundColor(recipient.getColor().toActionBarColor(this));
- this.toolbarLayout.setTitle(recipient.getDisplayName(this));
- this.toolbarLayout.setContentScrimColor(recipient.getColor().toActionBarColor(this));
- }
-
- @Override
- public @NonNull Loader onCreateLoader(int id, Bundle args) {
- return new RecipientMediaLoader(this, recipientId, RecipientMediaLoader.MediaType.GALLERY, MediaDatabase.Sorting.Newest);
- }
-
- @Override
- public void onLoadFinished(@NonNull Loader loader, Cursor data) {
- if (data != null && data.getCount() > 0) {
- this.threadPhotoRailLabel.setVisibility(View.VISIBLE);
- this.threadPhotoRailView.setVisibility(View.VISIBLE);
- } else {
- this.threadPhotoRailLabel.setVisibility(View.GONE);
- this.threadPhotoRailView.setVisibility(View.GONE);
- }
-
- this.threadPhotoRailView.setCursor(glideRequests, data);
-
- Bundle bundle = new Bundle();
- bundle.putParcelable(RECIPIENT_ID, recipientId);
- initFragment(R.id.preference_fragment, new RecipientPreferenceFragment(), null, bundle);
- }
-
- @Override
- public void onLoaderReset(@NonNull Loader loader) {
- this.threadPhotoRailView.setCursor(glideRequests, null);
- }
-
- public static class RecipientPreferenceFragment extends CorrectedPreferenceFragment {
- private LiveRecipient recipient;
- private boolean canHaveSafetyNumber;
-
- @Override
- public void onCreate(Bundle icicle) {
- Log.i(TAG, "onCreate (fragment)");
- super.onCreate(icicle);
-
- initializeRecipients();
-
- this.canHaveSafetyNumber = recipient.get().isRegistered() && !recipient.get().isLocalNumber();
-
- Preference customNotificationsPref = this.findPreference(PREFERENCE_CUSTOM_NOTIFICATIONS);
-
- if (NotificationChannels.supported()) {
- ((SwitchPreferenceCompat) customNotificationsPref).setChecked(recipient.get().getNotificationChannel() != null);
- customNotificationsPref.setOnPreferenceChangeListener(new CustomNotificationsChangedListener());
-
- this.findPreference(PREFERENCE_MESSAGE_TONE).setDependency(PREFERENCE_CUSTOM_NOTIFICATIONS);
- this.findPreference(PREFERENCE_MESSAGE_VIBRATE).setDependency(PREFERENCE_CUSTOM_NOTIFICATIONS);
-
- if (recipient.get().getNotificationChannel() != null) {
- final Context context = requireContext();
- new AsyncTask() {
- @Override
- protected Void doInBackground(Void... voids) {
- RecipientDatabase db = DatabaseFactory.getRecipientDatabase(getContext());
- db.setMessageRingtone(recipient.getId(), NotificationChannels.getMessageRingtone(context, recipient.get()));
- db.setMessageVibrate(recipient.getId(), NotificationChannels.getMessageVibrate(context, recipient.get()) ? VibrateState.ENABLED : VibrateState.DISABLED);
- NotificationChannels.ensureCustomChannelConsistency(context);
- return null;
- }
- }.executeOnExecutor(AsyncTask.SERIAL_EXECUTOR);
- }
- } else {
- customNotificationsPref.setVisible(false);
- }
-
- this.findPreference(PREFERENCE_MESSAGE_TONE)
- .setOnPreferenceChangeListener(new RingtoneChangeListener(false));
- this.findPreference(PREFERENCE_MESSAGE_TONE)
- .setOnPreferenceClickListener(new RingtoneClickedListener(false));
- this.findPreference(PREFERENCE_CALL_TONE)
- .setOnPreferenceChangeListener(new RingtoneChangeListener(true));
- this.findPreference(PREFERENCE_CALL_TONE)
- .setOnPreferenceClickListener(new RingtoneClickedListener(true));
- this.findPreference(PREFERENCE_MESSAGE_VIBRATE)
- .setOnPreferenceChangeListener(new VibrateChangeListener(false));
- this.findPreference(PREFERENCE_CALL_VIBRATE)
- .setOnPreferenceChangeListener(new VibrateChangeListener(true));
- this.findPreference(PREFERENCE_MUTED)
- .setOnPreferenceClickListener(new MuteClickedListener());
- this.findPreference(PREFERENCE_BLOCK)
- .setOnPreferenceClickListener(new BlockClickedListener());
- this.findPreference(PREFERENCE_COLOR)
- .setOnPreferenceChangeListener(new ColorChangeListener());
- ((ContactPreference)this.findPreference(PREFERENCE_ABOUT))
- .setListener(new AboutNumberClickedListener());
- }
-
- @Override
- public void onCreatePreferences(@Nullable Bundle savedInstanceState, String rootKey) {
- Log.i(TAG, "onCreatePreferences...");
- addPreferencesFromResource(R.xml.recipient_preferences);
- }
-
- @Override
- public void onRequestPermissionsResult(int requestCode, @NonNull String permissions[], @NonNull int[] grantResults) {
- Permissions.onRequestPermissionsResult(this, requestCode, permissions, grantResults);
- }
-
- @Override
- public void onResume() {
- super.onResume();
- setSummaries(recipient.get());
- }
-
- @Override
- public void onDestroy() {
- super.onDestroy();
- }
-
- @Override
- public void onActivityResult(int requestCode, int resultCode, Intent data) {
- if (requestCode == 1 && resultCode == RESULT_OK && data != null) {
- Uri uri = data.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI);
-
- findPreference(PREFERENCE_MESSAGE_TONE).getOnPreferenceChangeListener().onPreferenceChange(findPreference(PREFERENCE_MESSAGE_TONE), uri);
- } else if (requestCode == 2 && resultCode == RESULT_OK && data != null) {
- Uri uri = data.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI);
-
- findPreference(PREFERENCE_CALL_TONE).getOnPreferenceChangeListener().onPreferenceChange(findPreference(PREFERENCE_CALL_TONE), uri);
- }
- }
-
- @Override
- public RecyclerView onCreateRecyclerView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState) {
- RecyclerView recyclerView = super.onCreateRecyclerView(inflater, parent, savedInstanceState);
- recyclerView.setItemAnimator(null);
- recyclerView.setLayoutAnimation(null);
- return recyclerView;
- }
-
- private void initializeRecipients() {
- this.recipient = Recipient.live(getArguments().getParcelable(RECIPIENT_ID));
- this.recipient.observe(this, this::setSummaries);
- }
-
- private void setSummaries(Recipient recipient) {
- CheckBoxPreference mutePreference = (CheckBoxPreference) this.findPreference(PREFERENCE_MUTED);
- Preference customPreference = this.findPreference(PREFERENCE_CUSTOM_NOTIFICATIONS);
- Preference ringtoneMessagePreference = this.findPreference(PREFERENCE_MESSAGE_TONE);
- Preference ringtoneCallPreference = this.findPreference(PREFERENCE_CALL_TONE);
- ListPreference vibrateMessagePreference = (ListPreference) this.findPreference(PREFERENCE_MESSAGE_VIBRATE);
- ListPreference vibrateCallPreference = (ListPreference) this.findPreference(PREFERENCE_CALL_VIBRATE);
- ColorPickerPreference colorPreference = (ColorPickerPreference) this.findPreference(PREFERENCE_COLOR);
- Preference blockPreference = this.findPreference(PREFERENCE_BLOCK);
- Preference identityPreference = this.findPreference(PREFERENCE_IDENTITY);
- PreferenceCategory callCategory = (PreferenceCategory)this.findPreference("call_settings");
- PreferenceCategory aboutCategory = (PreferenceCategory)this.findPreference("about");
- PreferenceCategory aboutDivider = (PreferenceCategory)this.findPreference("about_divider");
- ContactPreference aboutPreference = (ContactPreference)this.findPreference(PREFERENCE_ABOUT);
- PreferenceCategory privacyCategory = (PreferenceCategory) this.findPreference("privacy_settings");
- PreferenceCategory divider = (PreferenceCategory) this.findPreference("divider");
-
- mutePreference.setChecked(recipient.isMuted());
-
- ringtoneMessagePreference.setSummary(ringtoneMessagePreference.isEnabled() ? getRingtoneSummary(getContext(), recipient.getMessageRingtone()) : "");
- ringtoneCallPreference.setSummary(getRingtoneSummary(getContext(), recipient.getCallRingtone()));
-
- Pair vibrateMessageSummary = getVibrateSummary(getContext(), recipient.getMessageVibrate());
- Pair vibrateCallSummary = getVibrateSummary(getContext(), recipient.getCallVibrate());
-
- vibrateMessagePreference.setSummary(vibrateMessagePreference.isEnabled() ? vibrateMessageSummary.first : "");
- vibrateMessagePreference.setValueIndex(vibrateMessageSummary.second);
-
- vibrateCallPreference.setSummary(vibrateCallSummary.first);
- vibrateCallPreference.setValueIndex(vibrateCallSummary.second);
-
- blockPreference.setVisible(RecipientUtil.isBlockable(recipient));
- if (recipient.isBlocked()) blockPreference.setTitle(R.string.RecipientPreferenceActivity_unblock);
- else blockPreference.setTitle(R.string.RecipientPreferenceActivity_block);
-
- if (recipient.isLocalNumber()) {
- mutePreference.setVisible(false);
- customPreference.setVisible(false);
- ringtoneMessagePreference.setVisible(false);
- vibrateMessagePreference.setVisible(false);
-
- if (identityPreference != null) identityPreference.setVisible(false);
- if (aboutCategory != null) aboutCategory.setVisible(false);
- if (aboutDivider != null) aboutDivider.setVisible(false);
- if (privacyCategory != null) privacyCategory.setVisible(false);
- if (divider != null) divider.setVisible(false);
- if (callCategory != null) callCategory.setVisible(false);
- }
-
- if (recipient.isGroup()) {
- if (colorPreference != null) colorPreference.setVisible(false);
- if (identityPreference != null) identityPreference.setVisible(false);
- if (callCategory != null) callCategory.setVisible(false);
- if (aboutCategory != null) aboutCategory.setVisible(false);
- if (aboutDivider != null) aboutDivider.setVisible(false);
- if (divider != null) divider.setVisible(false);
- } else {
- colorPreference.setColors(MaterialColors.CONVERSATION_PALETTE.asConversationColorArray(requireActivity()));
- colorPreference.setColor(recipient.getColor().toActionBarColor(requireActivity()));
-
- aboutPreference.setTitle(recipient.getDisplayName(requireContext()));
- aboutPreference.setSummary(recipient.resolve().getE164().or(""));
- aboutPreference.setState(recipient.getRegistered() == RecipientDatabase.RegisteredState.REGISTERED, recipient.isBlocked());
-
- IdentityUtil.getRemoteIdentityKey(getActivity(), recipient).addListener(new ListenableFuture.Listener>() {
- @Override
- public void onSuccess(Optional result) {
- if (result.isPresent()) {
- if (identityPreference != null) identityPreference.setOnPreferenceClickListener(new IdentityClickedListener(result.get()));
- if (identityPreference != null) identityPreference.setEnabled(true);
- } else if (canHaveSafetyNumber) {
- if (identityPreference != null) identityPreference.setSummary(R.string.RecipientPreferenceActivity_available_once_a_message_has_been_sent_or_received);
- if (identityPreference != null) identityPreference.setEnabled(false);
- } else {
- if (identityPreference != null) getPreferenceScreen().removePreference(identityPreference);
- }
- }
-
- @Override
- public void onFailure(ExecutionException e) {
- if (identityPreference != null) getPreferenceScreen().removePreference(identityPreference);
- }
- });
- }
-
- if (recipient.isMmsGroup() && privacyCategory != null) {
- privacyCategory.setVisible(false);
- }
- }
-
- private @NonNull String formatRecipient(@NonNull Recipient recipient) {
- if (recipient.getE164().isPresent()) return PhoneNumberUtils.formatNumber(recipient.requireE164());
- else if (recipient.getEmail().isPresent()) return recipient.requireEmail();
- else return "";
- }
-
- private @NonNull String getRingtoneSummary(@NonNull Context context, @Nullable Uri ringtone) {
- if (ringtone == null) {
- return context.getString(R.string.preferences__default);
- } else if (ringtone.toString().isEmpty()) {
- return context.getString(R.string.preferences__silent);
- } else {
- Ringtone tone = RingtoneManager.getRingtone(getActivity(), ringtone);
-
- if (tone != null) {
- return tone.getTitle(context);
- }
- }
-
- return context.getString(R.string.preferences__default);
- }
-
- private @NonNull Pair getVibrateSummary(@NonNull Context context, @NonNull VibrateState vibrateState) {
- if (vibrateState == VibrateState.DEFAULT) {
- return new Pair<>(context.getString(R.string.preferences__default), 0);
- } else if (vibrateState == VibrateState.ENABLED) {
- return new Pair<>(context.getString(R.string.RecipientPreferenceActivity_enabled), 1);
- } else {
- return new Pair<>(context.getString(R.string.RecipientPreferenceActivity_disabled), 2);
- }
- }
-
- private class RingtoneChangeListener implements Preference.OnPreferenceChangeListener {
-
- private final boolean calls;
-
- RingtoneChangeListener(boolean calls) {
- this.calls = calls;
- }
-
- @Override
- public boolean onPreferenceChange(Preference preference, Object newValue) {
- final Context context = preference.getContext();
-
- Uri value = (Uri)newValue;
-
- Uri defaultValue;
-
- if (calls) defaultValue = TextSecurePreferences.getCallNotificationRingtone(context);
- else defaultValue = TextSecurePreferences.getNotificationRingtone(context);
-
- if (defaultValue.equals(value)) value = null;
- else if (value == null) value = Uri.EMPTY;
-
-
- new AsyncTask() {
- @Override
- protected Void doInBackground(Uri... params) {
- if (calls) {
- DatabaseFactory.getRecipientDatabase(context).setCallRingtone(recipient.getId(), params[0]);
- } else {
- DatabaseFactory.getRecipientDatabase(context).setMessageRingtone(recipient.getId(), params[0]);
- NotificationChannels.updateMessageRingtone(context, recipient.get(), params[0]);
- }
- return null;
- }
- }.executeOnExecutor(AsyncTask.SERIAL_EXECUTOR, value);
-
- return false;
- }
- }
-
- private class RingtoneClickedListener implements Preference.OnPreferenceClickListener {
-
- private final boolean calls;
-
- RingtoneClickedListener(boolean calls) {
- this.calls = calls;
- }
-
- @Override
- public boolean onPreferenceClick(Preference preference) {
- Uri current;
- Uri defaultUri;
-
- if (calls) {
- current = recipient.get().getCallRingtone();
- defaultUri = TextSecurePreferences.getCallNotificationRingtone(getContext());
- } else {
- current = recipient.get().getMessageRingtone();
- defaultUri = TextSecurePreferences.getNotificationRingtone(getContext());
- }
-
- if (current == null) current = Settings.System.DEFAULT_NOTIFICATION_URI;
- else if (current.toString().isEmpty()) current = null;
-
- Intent intent = new Intent(RingtoneManager.ACTION_RINGTONE_PICKER);
- intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_SILENT, true);
- intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_DEFAULT, true);
- intent.putExtra(RingtoneManager.EXTRA_RINGTONE_DEFAULT_URI, defaultUri);
- intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE, calls ? RingtoneManager.TYPE_RINGTONE : RingtoneManager.TYPE_NOTIFICATION);
- intent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, current);
-
- startActivityForResult(intent, calls ? 2 : 1);
-
- return true;
- }
- }
-
- private class VibrateChangeListener implements Preference.OnPreferenceChangeListener {
-
- private final boolean call;
-
- VibrateChangeListener(boolean call) {
- this.call = call;
- }
-
- @Override
- public boolean onPreferenceChange(Preference preference, Object newValue) {
- int value = Integer.parseInt((String) newValue);
- final VibrateState vibrateState = VibrateState.fromId(value);
- final Context context = preference.getContext();
-
- new AsyncTask() {
- @Override
- protected Void doInBackground(Void... params) {
- if (call) {
- DatabaseFactory.getRecipientDatabase(context).setCallVibrate(recipient.getId(), vibrateState);
- }
- else {
- DatabaseFactory.getRecipientDatabase(context).setMessageVibrate(recipient.getId(), vibrateState);
- NotificationChannels.updateMessageVibrate(context, recipient.get(), vibrateState);
- }
- return null;
- }
- }.executeOnExecutor(AsyncTask.SERIAL_EXECUTOR);
-
- return false;
- }
- }
-
- private class ColorChangeListener implements Preference.OnPreferenceChangeListener {
-
- @Override
- public boolean onPreferenceChange(Preference preference, Object newValue) {
- final Context context = getContext();
- if (context == null) return true;
-
- final int value = (Integer) newValue;
- final MaterialColor selectedColor = MaterialColors.CONVERSATION_PALETTE.getByColor(context, value);
- final MaterialColor currentColor = recipient.get().getColor();
-
- if (selectedColor == null) return true;
-
- if (preference.isEnabled() && !currentColor.equals(selectedColor)) {
- new AsyncTask() {
- @Override
- protected Void doInBackground(Void... params) {
- DatabaseFactory.getRecipientDatabase(context).setColor(recipient.getId(), selectedColor);
-
- if (recipient.get().resolve().getRegistered() == RecipientDatabase.RegisteredState.REGISTERED) {
- ApplicationDependencies.getJobManager().add(new MultiDeviceContactUpdateJob(recipient.getId()));
- }
- return null;
- }
- }.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
- }
- return true;
- }
- }
-
- private class MuteClickedListener implements Preference.OnPreferenceClickListener {
-
- @Override
- public boolean onPreferenceClick(Preference preference) {
- if (recipient.get().isMuted()) handleUnmute(preference.getContext());
- else handleMute(preference.getContext());
-
- return true;
- }
-
- private void handleMute(@NonNull Context context) {
- MuteDialog.show(context, until -> setMuted(context, recipient.get(), until));
-
- setSummaries(recipient.get());
- }
-
- private void handleUnmute(@NonNull Context context) {
- setMuted(context, recipient.get(), 0);
- }
-
- private void setMuted(@NonNull final Context context, final Recipient recipient, final long until) {
- new AsyncTask() {
- @Override
- protected Void doInBackground(Void... params) {
- DatabaseFactory.getRecipientDatabase(context)
- .setMuted(recipient.getId(), until);
- return null;
- }
- }.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
- }
- }
-
- private class IdentityClickedListener implements Preference.OnPreferenceClickListener {
-
- private final IdentityRecord identityKey;
-
- private IdentityClickedListener(IdentityRecord identityKey) {
- Log.i(TAG, "Identity record: " + identityKey);
- this.identityKey = identityKey;
- }
-
- @Override
- public boolean onPreferenceClick(Preference preference) {
- startActivity(VerifyIdentityActivity.newIntent(preference.getContext(), identityKey));
-
- return true;
- }
- }
-
- private class BlockClickedListener implements Preference.OnPreferenceClickListener {
- @Override
- public boolean onPreferenceClick(Preference preference) {
- Context context = preference.getContext();
-
- if (recipient.get().isBlocked()) {
- BlockUnblockDialog.showUnblockFor(context, getLifecycle(), recipient.get(), () -> RecipientUtil.unblock(context, recipient.get()));
- } else {
- BlockUnblockDialog.showBlockFor(context, getLifecycle(), recipient.get(), () -> RecipientUtil.block(context, recipient.get()));
- }
-
- return true;
- }
- }
-
- private class AboutNumberClickedListener implements ContactPreference.Listener {
-
- @Override
- public void onMessageClicked() {
- CommunicationActions.startConversation(getContext(), recipient.get(), null);
- }
-
- @Override
- public void onSecureCallClicked() {
- CommunicationActions.startVoiceCall(getActivity(), recipient.get());
- }
-
- @Override
- public void onSecureVideoClicked() {
- CommunicationActions.startVideoCall(getActivity(), recipient.get());
- }
-
- @Override
- public void onInSecureCallClicked() {
- CommunicationActions.startInsecureCall(requireActivity(), recipient.get());
- }
-
- @Override
- public void onLongClick() {
- if (recipient.get().hasE164()) {
- Util.copyToClipboard(requireContext(), recipient.get().requireE164());
- ServiceUtil.getVibrator(requireContext()).vibrate(250);
- Toast.makeText(requireContext(), R.string.RecipientBottomSheet_copied_to_clipboard, Toast.LENGTH_SHORT).show();
- }
- }
- }
-
- private class CustomNotificationsChangedListener implements Preference.OnPreferenceChangeListener {
-
- @Override
- public boolean onPreferenceChange(Preference preference, Object newValue) {
- final Context context = preference.getContext();
- final boolean enabled = (boolean) newValue;
-
- new AsyncTask() {
- @Override
- protected Void doInBackground(Void... params) {
- if (enabled) {
- String channel = NotificationChannels.createChannelFor(context, recipient.get());
- DatabaseFactory.getRecipientDatabase(context).setNotificationChannel(recipient.getId(), channel);
- } else {
- NotificationChannels.deleteChannelFor(context, recipient.get());
- DatabaseFactory.getRecipientDatabase(context).setNotificationChannel(recipient.getId(), null);
- }
- return null;
- }
- }.executeOnExecutor(AsyncTask.SERIAL_EXECUTOR);
-
- return true;
- }
- }
- }
-}
diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/AvatarImageView.java b/app/src/main/java/org/thoughtcrime/securesms/components/AvatarImageView.java
index 9e5d90e7aa..95d4fea29a 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/components/AvatarImageView.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/components/AvatarImageView.java
@@ -16,7 +16,6 @@ import androidx.fragment.app.FragmentActivity;
import com.bumptech.glide.load.engine.DiskCacheStrategy;
import org.thoughtcrime.securesms.R;
-import org.thoughtcrime.securesms.RecipientPreferenceActivity;
import org.thoughtcrime.securesms.color.MaterialColor;
import org.thoughtcrime.securesms.contacts.avatars.ContactColors;
import org.thoughtcrime.securesms.contacts.avatars.ContactPhoto;
@@ -26,8 +25,8 @@ import org.thoughtcrime.securesms.mms.GlideApp;
import org.thoughtcrime.securesms.mms.GlideRequests;
import org.thoughtcrime.securesms.recipients.Recipient;
import org.thoughtcrime.securesms.recipients.ui.bottomsheet.RecipientBottomSheetDialogFragment;
+import org.thoughtcrime.securesms.recipients.ui.managerecipient.ManageRecipientActivity;
import org.thoughtcrime.securesms.util.AvatarUtil;
-import org.thoughtcrime.securesms.util.FeatureFlags;
import org.thoughtcrime.securesms.util.ThemeUtil;
import java.util.Objects;
@@ -165,7 +164,7 @@ public final class AvatarImageView extends AppCompatImageView {
if (quickContactEnabled) {
super.setOnClickListener(v -> {
Context context = getContext();
- if (FeatureFlags.newGroupUI() && recipient.isPushGroup()) {
+ if (recipient.isPushGroup()) {
context.startActivity(ManageGroupActivity.newIntent(context, recipient.requireGroupId().requirePush()),
ManageGroupActivity.createTransitionBundle(context, this));
} else {
@@ -173,7 +172,7 @@ public final class AvatarImageView extends AppCompatImageView {
RecipientBottomSheetDialogFragment.create(recipient.getId(), null)
.show(((FragmentActivity) context).getSupportFragmentManager(), "BOTTOM");
} else {
- context.startActivity(RecipientPreferenceActivity.getLaunchIntent(context, recipient.getId()));
+ context.startActivity(ManageRecipientActivity.newIntent(context, recipient.getId()));
}
}
});
diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationActivity.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationActivity.java
index ae1b1fd5fa..64c858b9e7 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationActivity.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationActivity.java
@@ -82,14 +82,12 @@ import org.greenrobot.eventbus.ThreadMode;
import org.thoughtcrime.securesms.ApplicationContext;
import org.thoughtcrime.securesms.BlockUnblockDialog;
import org.thoughtcrime.securesms.ExpirationDialog;
-import org.thoughtcrime.securesms.GroupCreateActivity;
import org.thoughtcrime.securesms.GroupMembersDialog;
import org.thoughtcrime.securesms.MainActivity;
import org.thoughtcrime.securesms.MuteDialog;
import org.thoughtcrime.securesms.PassphraseRequiredActionBarActivity;
import org.thoughtcrime.securesms.PromptMmsActivity;
import org.thoughtcrime.securesms.R;
-import org.thoughtcrime.securesms.RecipientPreferenceActivity;
import org.thoughtcrime.securesms.ShortcutLauncherActivity;
import org.thoughtcrime.securesms.TransportOption;
import org.thoughtcrime.securesms.VerifyIdentityActivity;
@@ -207,6 +205,7 @@ import org.thoughtcrime.securesms.recipients.RecipientExporter;
import org.thoughtcrime.securesms.recipients.RecipientFormattingException;
import org.thoughtcrime.securesms.recipients.RecipientId;
import org.thoughtcrime.securesms.recipients.RecipientUtil;
+import org.thoughtcrime.securesms.recipients.ui.managerecipient.ManageRecipientActivity;
import org.thoughtcrime.securesms.registration.RegistrationNavigationActivity;
import org.thoughtcrime.securesms.service.KeyCachingService;
import org.thoughtcrime.securesms.sms.MessageSender;
@@ -225,7 +224,6 @@ import org.thoughtcrime.securesms.util.DrawableUtil;
import org.thoughtcrime.securesms.util.DynamicDarkToolbarTheme;
import org.thoughtcrime.securesms.util.DynamicLanguage;
import org.thoughtcrime.securesms.util.DynamicTheme;
-import org.thoughtcrime.securesms.util.FeatureFlags;
import org.thoughtcrime.securesms.util.IdentityUtil;
import org.thoughtcrime.securesms.util.MediaUtil;
import org.thoughtcrime.securesms.util.MessageUtil;
@@ -757,10 +755,8 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
menu.findItem(R.id.menu_distribution_conversation).setChecked(true);
}
inflater.inflate(R.menu.conversation_active_group_options, menu);
- } else if (isActiveV2Group || isActiveGroup && FeatureFlags.newGroupUI()) {
+ } else if (isActiveV2Group || isActiveGroup) {
inflater.inflate(R.menu.conversation_active_group_options, menu);
- } else if (isActiveGroup) {
- inflater.inflate(R.menu.conversation_push_group_options, menu);
}
}
@@ -803,9 +799,7 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
hideMenuItem(menu, R.id.menu_mute_notifications);
}
- if (FeatureFlags.newGroupUI()) {
- hideMenuItem(menu, R.id.menu_group_recipients);
- }
+ hideMenuItem(menu, R.id.menu_group_recipients);
if (isActiveV2Group) {
hideMenuItem(menu, R.id.menu_mute_notifications);
@@ -884,7 +878,6 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
case R.id.menu_group_recipients: handleDisplayGroupRecipients(); return true;
case R.id.menu_distribution_broadcast: handleDistributionBroadcastEnabled(item); return true;
case R.id.menu_distribution_conversation: handleDistributionConversationEnabled(item); return true;
- case R.id.menu_edit_group: handleEditPushGroupV1(); return true;
case R.id.menu_group_settings: handleManageGroup(); return true;
case R.id.menu_leave: handleLeavePushGroup(); return true;
case R.id.menu_invite: handleInviteLink(); return true;
@@ -1042,14 +1035,14 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
}
private void handleConversationSettings() {
- if (FeatureFlags.newGroupUI() && isGroupConversation()) {
+ if (isGroupConversation()) {
handleManageGroup();
return;
}
if (isInMessageRequest()) return;
- Intent intent = RecipientPreferenceActivity.getLaunchIntent(this, recipient.getId());
+ Intent intent = ManageRecipientActivity.newIntent(this, recipient.getId());
startActivitySceneTransition(intent, titleView.findViewById(R.id.contact_photo_image), "avatar");
}
@@ -1206,10 +1199,6 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
null);
}
- private void handleEditPushGroupV1() {
- startActivityForResult(GroupCreateActivity.newEditGroupIntent(ConversationActivity.this, recipient.get().requireGroupId().requireV1()), GROUP_EDIT);
- }
-
private void handleManageGroup() {
startActivityForResult(ManageGroupActivity.newIntent(ConversationActivity.this, recipient.get().requireGroupId()),
GROUP_EDIT,
diff --git a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/addtogroup/AddToGroupsActivity.java b/app/src/main/java/org/thoughtcrime/securesms/groups/ui/addtogroup/AddToGroupsActivity.java
index 1203dfde4c..3616717e38 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/addtogroup/AddToGroupsActivity.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/groups/ui/addtogroup/AddToGroupsActivity.java
@@ -15,12 +15,10 @@ import com.annimon.stream.Stream;
import org.thoughtcrime.securesms.ContactSelectionActivity;
import org.thoughtcrime.securesms.ContactSelectionListFragment;
-import org.thoughtcrime.securesms.GroupCreateActivity;
import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.contacts.ContactsCursorLoader;
import org.thoughtcrime.securesms.groups.ui.addtogroup.AddToGroupViewModel.Event;
import org.thoughtcrime.securesms.recipients.RecipientId;
-import org.thoughtcrime.securesms.util.FeatureFlags;
import org.whispersystems.libsignal.util.guava.Optional;
import java.util.ArrayList;
@@ -44,10 +42,6 @@ public final class AddToGroupsActivity extends ContactSelectionActivity {
@NonNull RecipientId recipientId,
@NonNull List currentGroupsMemberOf)
{
- if (!FeatureFlags.newGroupUI()) {
- return new Intent(context, GroupCreateActivity.class);
- }
-
Intent intent = new Intent(context, AddToGroupsActivity.class);
intent.putExtra(ContactSelectionListFragment.MULTI_SELECT, false);
diff --git a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/creategroup/CreateGroupActivity.java b/app/src/main/java/org/thoughtcrime/securesms/groups/ui/creategroup/CreateGroupActivity.java
index 4b9ca31283..33008a0ec0 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/creategroup/CreateGroupActivity.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/groups/ui/creategroup/CreateGroupActivity.java
@@ -13,7 +13,6 @@ import com.annimon.stream.Stream;
import org.thoughtcrime.securesms.ContactSelectionActivity;
import org.thoughtcrime.securesms.ContactSelectionListFragment;
-import org.thoughtcrime.securesms.GroupCreateActivity;
import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.contacts.ContactsCursorLoader;
import org.thoughtcrime.securesms.groups.ui.creategroup.details.AddGroupDetailsActivity;
@@ -30,10 +29,6 @@ public class CreateGroupActivity extends ContactSelectionActivity {
private View next;
public static Intent newIntent(@NonNull Context context) {
- if (!FeatureFlags.newGroupUI()) {
- return new Intent(context, GroupCreateActivity.class);
- }
-
Intent intent = new Intent(context, CreateGroupActivity.class);
intent.putExtra(ContactSelectionListFragment.MULTI_SELECT, true);
diff --git a/app/src/main/java/org/thoughtcrime/securesms/recipients/ui/bottomsheet/RecipientDialogViewModel.java b/app/src/main/java/org/thoughtcrime/securesms/recipients/ui/bottomsheet/RecipientDialogViewModel.java
index 0b33647a93..c325f10535 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/recipients/ui/bottomsheet/RecipientDialogViewModel.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/recipients/ui/bottomsheet/RecipientDialogViewModel.java
@@ -16,7 +16,6 @@ import androidx.lifecycle.ViewModelProvider;
import org.thoughtcrime.securesms.BlockUnblockDialog;
import org.thoughtcrime.securesms.R;
-import org.thoughtcrime.securesms.RecipientPreferenceActivity;
import org.thoughtcrime.securesms.VerifyIdentityActivity;
import org.thoughtcrime.securesms.database.IdentityDatabase;
import org.thoughtcrime.securesms.groups.GroupId;
@@ -27,6 +26,7 @@ import org.thoughtcrime.securesms.groups.ui.addtogroup.AddToGroupsActivity;
import org.thoughtcrime.securesms.recipients.Recipient;
import org.thoughtcrime.securesms.recipients.RecipientId;
import org.thoughtcrime.securesms.recipients.RecipientUtil;
+import org.thoughtcrime.securesms.recipients.ui.managerecipient.ManageRecipientActivity;
import org.thoughtcrime.securesms.util.CommunicationActions;
import org.thoughtcrime.securesms.util.Util;
import org.thoughtcrime.securesms.util.livedata.LiveDataUtil;
@@ -112,7 +112,7 @@ final class RecipientDialogViewModel extends ViewModel {
}
void onAvatarClicked(@NonNull Activity activity) {
- activity.startActivity(RecipientPreferenceActivity.getLaunchIntent(activity, recipientDialogRepository.getRecipientId()));
+ activity.startActivity(ManageRecipientActivity.newIntent(activity, recipientDialogRepository.getRecipientId()));
}
void onMakeGroupAdminClicked(@NonNull Activity activity) {
diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/FeatureFlags.java b/app/src/main/java/org/thoughtcrime/securesms/util/FeatureFlags.java
index c7e34d245f..05a4b40a44 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/util/FeatureFlags.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/util/FeatureFlags.java
@@ -58,7 +58,6 @@ public final class FeatureFlags {
private static final String REMOTE_DELETE = "android.remoteDelete";
private static final String PROFILE_FOR_CALLING = "android.profileForCalling";
private static final String CALLING_PIP = "android.callingPip";
- private static final String NEW_GROUP_UI_KILL_SWITCH = "android.newGroupUI.KillSwitch";
private static final String VERSIONED_PROFILES = "android.versionedProfiles";
private static final String GROUPS_V2 = "android.groupsv2";
private static final String GROUPS_V2_CREATE = "android.groupsv2.create";
@@ -78,7 +77,6 @@ public final class FeatureFlags {
REMOTE_DELETE,
PROFILE_FOR_CALLING,
CALLING_PIP,
- NEW_GROUP_UI_KILL_SWITCH,
VERSIONED_PROFILES,
GROUPS_V2,
GROUPS_V2_CREATE,
@@ -235,11 +233,6 @@ public final class FeatureFlags {
return getBoolean(CALLING_PIP, false);
}
- /** New group UI elements. */
- public static boolean newGroupUI() {
- return !getBoolean(NEW_GROUP_UI_KILL_SWITCH, false);
- }
-
/** Read and write versioned profile information. */
public static boolean versionedProfiles() {
return getBoolean(VERSIONED_PROFILES, false);
diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/SelectedRecipientsAdapter.java b/app/src/main/java/org/thoughtcrime/securesms/util/SelectedRecipientsAdapter.java
deleted file mode 100644
index e0db8112ec..0000000000
--- a/app/src/main/java/org/thoughtcrime/securesms/util/SelectedRecipientsAdapter.java
+++ /dev/null
@@ -1,165 +0,0 @@
-package org.thoughtcrime.securesms.util;
-
-import android.content.Context;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.BaseAdapter;
-import android.widget.ImageButton;
-import android.widget.TextView;
-
-import org.thoughtcrime.securesms.R;
-import org.thoughtcrime.securesms.recipients.Recipient;
-import org.whispersystems.libsignal.util.guava.Optional;
-
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Set;
-
-public class SelectedRecipientsAdapter extends BaseAdapter {
- @NonNull private Context context;
- @Nullable private OnRecipientDeletedListener onRecipientDeletedListener;
- @NonNull private List recipients;
-
- public SelectedRecipientsAdapter(@NonNull Context context) {
- this(context, Collections.emptyList());
- }
-
- public SelectedRecipientsAdapter(@NonNull Context context,
- @NonNull Collection existingRecipients)
- {
- this.context = context;
- this.recipients = wrapExistingMembers(existingRecipients);
- }
-
- public void add(@NonNull Recipient recipient, boolean isPush) {
- if (!find(recipient).isPresent()) {
- RecipientWrapper wrapper = new RecipientWrapper(recipient, true, isPush);
- this.recipients.add(0, wrapper);
- notifyDataSetChanged();
- }
- }
-
- public Optional find(@NonNull Recipient recipient) {
- RecipientWrapper found = null;
- for (RecipientWrapper wrapper : recipients) {
- if (wrapper.getRecipient().equals(recipient)) found = wrapper;
- }
- return Optional.fromNullable(found);
- }
-
- public void remove(@NonNull Recipient recipient) {
- Optional match = find(recipient);
- if (match.isPresent()) {
- recipients.remove(match.get());
- notifyDataSetChanged();
- }
- }
-
- public Set getRecipients() {
- final Set recipientSet = new HashSet<>(recipients.size());
- for (RecipientWrapper wrapper : recipients) {
- recipientSet.add(wrapper.getRecipient());
- }
- return recipientSet;
- }
-
- @Override
- public int getCount() {
- return recipients.size();
- }
-
- public boolean hasNonPushMembers() {
- for (RecipientWrapper wrapper : recipients) {
- if (!wrapper.isPush()) return true;
- }
- return false;
- }
-
- @Override
- public Object getItem(int position) {
- return recipients.get(position);
- }
-
- @Override
- public long getItemId(int position) {
- return position;
- }
-
- @Override
- public View getView(final int position, View v, final ViewGroup parent) {
- if (v == null) {
- v = LayoutInflater.from(context).inflate(R.layout.selected_recipient_list_item, parent, false);
- }
-
- final RecipientWrapper rw = (RecipientWrapper)getItem(position);
- final Recipient p = rw.getRecipient();
- final boolean modifiable = rw.isModifiable();
-
- TextView name = (TextView) v.findViewById(R.id.name);
- TextView phone = (TextView) v.findViewById(R.id.phone);
- ImageButton delete = (ImageButton) v.findViewById(R.id.delete);
-
- name.setText(p.getDisplayName(v.getContext()));
- phone.setText(p.getE164().or(""));
- delete.setVisibility(modifiable ? View.VISIBLE : View.GONE);
- delete.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View view) {
- if (onRecipientDeletedListener != null) {
- onRecipientDeletedListener.onRecipientDeleted(recipients.get(position).getRecipient());
- }
- }
- });
-
- return v;
- }
-
- private static List wrapExistingMembers(Collection recipients) {
- final LinkedList wrapperList = new LinkedList<>();
- for (Recipient recipient : recipients) {
- wrapperList.add(new RecipientWrapper(recipient, false, true));
- }
- return wrapperList;
- }
-
- public void setOnRecipientDeletedListener(@Nullable OnRecipientDeletedListener listener) {
- onRecipientDeletedListener = listener;
- }
-
- public interface OnRecipientDeletedListener {
- void onRecipientDeleted(Recipient recipient);
- }
-
- public static class RecipientWrapper {
- private final Recipient recipient;
- private final boolean modifiable;
- private final boolean push;
-
- public RecipientWrapper(final @NonNull Recipient recipient,
- final boolean modifiable,
- final boolean push)
- {
- this.recipient = recipient;
- this.modifiable = modifiable;
- this.push = push;
- }
-
- public @NonNull Recipient getRecipient() {
- return recipient;
- }
-
- public boolean isModifiable() {
- return modifiable;
- }
-
- public boolean isPush() {
- return push;
- }
- }
-}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/recipient_preference_scrim_bottom.xml b/app/src/main/res/drawable/recipient_preference_scrim_bottom.xml
deleted file mode 100644
index 472ad8ba1e..0000000000
--- a/app/src/main/res/drawable/recipient_preference_scrim_bottom.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/recipient_preference_scrim_top.xml b/app/src/main/res/drawable/recipient_preference_scrim_top.xml
deleted file mode 100644
index a088f60e06..0000000000
--- a/app/src/main/res/drawable/recipient_preference_scrim_top.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/layout/group_create_activity.xml b/app/src/main/res/layout/group_create_activity.xml
deleted file mode 100644
index 9ac6b33bd0..0000000000
--- a/app/src/main/res/layout/group_create_activity.xml
+++ /dev/null
@@ -1,102 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/app/src/main/res/layout/recipient_preference_activity.xml b/app/src/main/res/layout/recipient_preference_activity.xml
deleted file mode 100644
index 2531456398..0000000000
--- a/app/src/main/res/layout/recipient_preference_activity.xml
+++ /dev/null
@@ -1,99 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/layout/selected_recipient_list_item.xml b/app/src/main/res/layout/selected_recipient_list_item.xml
deleted file mode 100644
index 38e2d048fb..0000000000
--- a/app/src/main/res/layout/selected_recipient_list_item.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/menu/conversation_push_group_options.xml b/app/src/main/res/menu/conversation_push_group_options.xml
deleted file mode 100644
index 2a7f2713da..0000000000
--- a/app/src/main/res/menu/conversation_push_group_options.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
diff --git a/app/src/main/res/menu/group_create.xml b/app/src/main/res/menu/group_create.xml
deleted file mode 100644
index 7c1044c62d..0000000000
--- a/app/src/main/res/menu/group_create.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml
index 0a8b404253..5bde206530 100644
--- a/app/src/main/res/values/arrays.xml
+++ b/app/src/main/res/values/arrays.xml
@@ -236,12 +236,6 @@
- @string/arrays__disabled
-
- - 0
- - 1
- - 2
-
-
- @string/arrays__name_and_message
- @string/arrays__name_only
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 3c929d5f87..8b84bbcc79 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -430,25 +430,6 @@
GIFs
Stickers
-
- New group
- Edit group
- Manage group
- Group name
- New MMS group
- You have selected a contact that doesn\'t support Signal groups, so this group will be MMS.
- You\'re not registered for Signal messages and calls, so Signal groups are disabled. Please try registering in Settings > Advanced.
- You need at least one person in your group!
- One of the members of your group has a number that can\'t be read correctly. Please fix or remove that contact and try again.
- Group avatar
- Apply
- Creating %1$s…
- Updating %1$s…
- Couldn\'t add %1$s because they\'re not a Signal user.
- Loading group details…
- You\'re already in the group.
- Remove member
-
Add member?
Add \"%1$s\" to \"%2$s\"?
@@ -1657,20 +1638,6 @@
Shared media
-
- Mute conversation
- Custom notifications
- System notification settings
- Notification sound
- Vibrate
- Block
- Color
- View safety number
- Chat settings
- Privacy
- Call settings
- Ringtone
-
Signal Call
diff --git a/app/src/main/res/xml/recipient_preferences.xml b/app/src/main/res/xml/recipient_preferences.xml
deleted file mode 100644
index f57a179104..0000000000
--- a/app/src/main/res/xml/recipient_preferences.xml
+++ /dev/null
@@ -1,84 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file