Search in sources :

Example 1 with AfterTextChanged

use of org.thoughtcrime.securesms.util.text.AfterTextChanged in project Signal-Android by WhisperSystems.

the class EditProfileNameFragment method onViewCreated.

@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
    this.givenName = view.findViewById(R.id.edit_profile_name_given_name);
    this.familyName = view.findViewById(R.id.edit_profile_name_family_name);
    this.saveButton = view.findViewById(R.id.edit_profile_name_save);
    initializeViewModel();
    this.givenName.setText(Recipient.self().getProfileName().getGivenName());
    this.familyName.setText(Recipient.self().getProfileName().getFamilyName());
    viewModel.onGivenNameChanged(this.givenName.getText().toString());
    view.<Toolbar>findViewById(R.id.toolbar).setNavigationOnClickListener(v -> Navigation.findNavController(view).popBackStack());
    EditTextUtil.addGraphemeClusterLimitFilter(givenName, NAME_MAX_GLYPHS);
    EditTextUtil.addGraphemeClusterLimitFilter(familyName, NAME_MAX_GLYPHS);
    this.givenName.addTextChangedListener(new AfterTextChanged(s -> {
        trimFieldToMaxByteLength(s);
        viewModel.onGivenNameChanged(s.toString());
    }));
    this.familyName.addTextChangedListener(new AfterTextChanged(EditProfileNameFragment::trimFieldToMaxByteLength));
    saveButton.setOnClickListener(v -> viewModel.onSaveClicked(requireContext(), givenName.getText().toString(), familyName.getText().toString()));
    ViewUtil.focusAndMoveCursorToEndAndOpenKeyboard(this.givenName);
}
Also used : CircularProgressButton(com.dd.CircularProgressButton) Bundle(android.os.Bundle) EditTextUtil(org.signal.core.util.EditTextUtil) LayoutInflater(android.view.LayoutInflater) NonNull(androidx.annotation.NonNull) AfterTextChanged(org.thoughtcrime.securesms.util.text.AfterTextChanged) ProfileName(org.thoughtcrime.securesms.profiles.ProfileName) StringUtil(org.thoughtcrime.securesms.util.StringUtil) ViewUtil(org.thoughtcrime.securesms.util.ViewUtil) R(org.thoughtcrime.securesms.R) Editable(android.text.Editable) ViewGroup(android.view.ViewGroup) Nullable(androidx.annotation.Nullable) Toast(android.widget.Toast) Fragment(androidx.fragment.app.Fragment) View(android.view.View) Toolbar(androidx.appcompat.widget.Toolbar) ViewModelProviders(androidx.lifecycle.ViewModelProviders) Navigation(androidx.navigation.Navigation) Recipient(org.thoughtcrime.securesms.recipients.Recipient) EditorInfo(android.view.inputmethod.EditorInfo) EditText(android.widget.EditText) AfterTextChanged(org.thoughtcrime.securesms.util.text.AfterTextChanged)

Example 2 with AfterTextChanged

use of org.thoughtcrime.securesms.util.text.AfterTextChanged in project Signal-Android by WhisperSystems.

the class PaymentsRecoveryPhraseConfirmFragment method onViewCreated.

@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
    Toolbar toolbar = view.findViewById(R.id.payments_recovery_phrase_confirm_fragment_toolbar);
    EditText word1 = view.findViewById(R.id.payments_recovery_phrase_confirm_fragment_word_1);
    EditText word2 = view.findViewById(R.id.payments_recovery_phrase_confirm_fragment_word_2);
    View seePhraseAgain = view.findViewById(R.id.payments_recovery_phrase_confirm_fragment_see_again);
    View done = view.findViewById(R.id.payments_recovery_phrase_confirm_fragment_done);
    TextInputLayout wordWrapper1 = view.findViewById(R.id.payments_recovery_phrase_confirm_fragment_word1_wrapper);
    TextInputLayout wordWrapper2 = view.findViewById(R.id.payments_recovery_phrase_confirm_fragment_word2_wrapper);
    PaymentsRecoveryPhraseConfirmFragmentArgs args = PaymentsRecoveryPhraseConfirmFragmentArgs.fromBundle(requireArguments());
    validWordCheckMark = AppCompatResources.getDrawable(requireContext(), R.drawable.ic_check_circle_24);
    invalidWordX = AppCompatResources.getDrawable(requireContext(), R.drawable.ic_circle_x_24);
    DrawableCompat.setTint(validWordCheckMark, ContextCompat.getColor(requireContext(), R.color.signal_accent_green));
    DrawableCompat.setTint(invalidWordX, ContextCompat.getColor(requireContext(), R.color.signal_alert_primary));
    PaymentsRecoveryPhraseConfirmViewModel viewModel = ViewModelProviders.of(requireActivity()).get(PaymentsRecoveryPhraseConfirmViewModel.class);
    toolbar.setNavigationOnClickListener(v -> Navigation.findNavController(requireView()).popBackStack());
    word1.addTextChangedListener(new AfterTextChanged(e -> viewModel.validateWord1(e.toString())));
    word2.addTextChangedListener(new AfterTextChanged(e -> viewModel.validateWord2(e.toString())));
    seePhraseAgain.setOnClickListener(v -> Navigation.findNavController(requireView()).popBackStack());
    done.setOnClickListener(v -> {
        SignalStore.paymentsValues().setUserConfirmedMnemonic(true);
        ViewUtil.hideKeyboard(requireContext(), view);
        Toast.makeText(requireContext(), R.string.PaymentRecoveryPhraseConfirmFragment__recovery_phrase_confirmed, Toast.LENGTH_SHORT).show();
        if (args.getFinishOnConfirm()) {
            requireActivity().setResult(Activity.RESULT_OK);
            requireActivity().finish();
        } else {
            Navigation.findNavController(view).popBackStack(R.id.paymentsHome, false);
        }
    });
    viewModel.getViewState().observe(getViewLifecycleOwner(), viewState -> {
        updateValidity(word1, viewState.isWord1Valid());
        updateValidity(word2, viewState.isWord2Valid());
        done.setEnabled(viewState.areAllWordsValid());
        String hint1 = getString(R.string.PaymentRecoveryPhraseConfirmFragment__word_d, viewState.getWord1Index() + 1);
        String hint2 = getString(R.string.PaymentRecoveryPhraseConfirmFragment__word_d, viewState.getWord2Index() + 1);
        wordWrapper1.setHint(hint1);
        wordWrapper2.setHint(hint2);
    });
    viewModel.updateRandomIndices();
}
Also used : EditText(android.widget.EditText) SignalStore(org.thoughtcrime.securesms.keyvalue.SignalStore) Bundle(android.os.Bundle) NonNull(androidx.annotation.NonNull) AppCompatResources(androidx.appcompat.content.res.AppCompatResources) TextInputLayout(com.google.android.material.textfield.TextInputLayout) AfterTextChanged(org.thoughtcrime.securesms.util.text.AfterTextChanged) ViewUtil(org.thoughtcrime.securesms.util.ViewUtil) DrawableCompat(androidx.core.graphics.drawable.DrawableCompat) Drawable(android.graphics.drawable.Drawable) R(org.thoughtcrime.securesms.R) TextView(android.widget.TextView) Nullable(androidx.annotation.Nullable) Toast(android.widget.Toast) Fragment(androidx.fragment.app.Fragment) View(android.view.View) Toolbar(androidx.appcompat.widget.Toolbar) ViewModelProviders(androidx.lifecycle.ViewModelProviders) Navigation(androidx.navigation.Navigation) Activity(android.app.Activity) ContextCompat(androidx.core.content.ContextCompat) EditText(android.widget.EditText) TextInputLayout(com.google.android.material.textfield.TextInputLayout) TextView(android.widget.TextView) View(android.view.View) AfterTextChanged(org.thoughtcrime.securesms.util.text.AfterTextChanged) Toolbar(androidx.appcompat.widget.Toolbar)

Example 3 with AfterTextChanged

use of org.thoughtcrime.securesms.util.text.AfterTextChanged in project Signal-Android by WhisperSystems.

the class ShareInterstitialActivity method initializeViews.

private void initializeViews(@NonNull MultiShareArgs args) {
    confirm = findViewById(R.id.share_confirm);
    toolbar = findViewById(R.id.toolbar);
    preview = findViewById(R.id.link_preview);
    confirm.setOnClickListener(unused -> onConfirm());
    SelectionAwareEmojiEditText text = findViewById(R.id.text);
    toolbar.setNavigationOnClickListener(unused -> finish());
    text.addTextChangedListener(new AfterTextChanged(editable -> {
        linkPreviewViewModel.onTextChanged(this, editable.toString(), text.getSelectionStart(), text.getSelectionEnd());
        viewModel.onDraftTextChanged(editable.toString());
    }));
    // noinspection CodeBlock2Expr
    text.setOnSelectionChangedListener(((selStart, selEnd) -> {
        linkPreviewViewModel.onTextChanged(this, text.getText().toString(), text.getSelectionStart(), text.getSelectionEnd());
    }));
    preview.setCloseClickedListener(linkPreviewViewModel::onUserCancel);
    int defaultRadius = getResources().getDimensionPixelSize(R.dimen.thumbnail_default_radius);
    preview.setCorners(defaultRadius, defaultRadius);
    text.setText(args.getDraftText());
    ViewUtil.focusAndMoveCursorToEndAndOpenKeyboard(text);
    contactsRecycler = findViewById(R.id.selected_list);
    contactsRecycler.setAdapter(adapter);
    RecyclerView.ItemAnimator itemAnimator = Objects.requireNonNull(contactsRecycler.getItemAnimator());
    ShareFlowConstants.applySelectedContactsRecyclerAnimationSpeeds(itemAnimator);
    confirm.addOnLayoutChangeListener((v, left, top, right, bottom, oldLeft, oldTop, oldRight, oldBottom) -> {
        int pad = Math.abs(v.getWidth() + ViewUtil.dpToPx(16));
        ViewUtil.setPaddingEnd(contactsRecycler, pad);
    });
}
Also used : Context(android.content.Context) Bundle(android.os.Bundle) Stream(com.annimon.stream.Stream) NonNull(androidx.annotation.NonNull) Intent(android.content.Intent) ViewUtil(org.thoughtcrime.securesms.util.ViewUtil) R(org.thoughtcrime.securesms.R) DynamicTheme(org.thoughtcrime.securesms.util.DynamicTheme) View(android.view.View) ViewModelProviders(androidx.lifecycle.ViewModelProviders) Recipient(org.thoughtcrime.securesms.recipients.Recipient) RecyclerView(androidx.recyclerview.widget.RecyclerView) LinkPreviewView(org.thoughtcrime.securesms.components.LinkPreviewView) CircularProgressButton(com.dd.CircularProgressButton) AfterTextChanged(org.thoughtcrime.securesms.util.text.AfterTextChanged) LinkPreviewViewModel(org.thoughtcrime.securesms.linkpreview.LinkPreviewViewModel) DefaultItemAnimator(androidx.recyclerview.widget.DefaultItemAnimator) Objects(java.util.Objects) PassphraseRequiredActivity(org.thoughtcrime.securesms.PassphraseRequiredActivity) SelectionAwareEmojiEditText(org.thoughtcrime.securesms.components.SelectionAwareEmojiEditText) LinkPreviewRepository(org.thoughtcrime.securesms.linkpreview.LinkPreviewRepository) DynamicNoActionBarTheme(org.thoughtcrime.securesms.util.DynamicNoActionBarTheme) MultiShareArgs(org.thoughtcrime.securesms.sharing.MultiShareArgs) MultiShareDialogs(org.thoughtcrime.securesms.sharing.MultiShareDialogs) Toolbar(androidx.appcompat.widget.Toolbar) ShareFlowConstants(org.thoughtcrime.securesms.sharing.ShareFlowConstants) GlideApp(org.thoughtcrime.securesms.mms.GlideApp) RecyclerView(androidx.recyclerview.widget.RecyclerView) AfterTextChanged(org.thoughtcrime.securesms.util.text.AfterTextChanged) SelectionAwareEmojiEditText(org.thoughtcrime.securesms.components.SelectionAwareEmojiEditText)

Example 4 with AfterTextChanged

use of org.thoughtcrime.securesms.util.text.AfterTextChanged in project Signal-Android by WhisperSystems.

the class PaymentsRecoveryEntryFragment method onViewCreated.

@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
    Toolbar toolbar = view.findViewById(R.id.payments_recovery_entry_fragment_toolbar);
    TextView message = view.findViewById(R.id.payments_recovery_entry_fragment_message);
    TextInputLayout wrapper = view.findViewById(R.id.payments_recovery_entry_fragment_word_wrapper);
    MaterialAutoCompleteTextView word = view.findViewById(R.id.payments_recovery_entry_fragment_word);
    View next = view.findViewById(R.id.payments_recovery_entry_fragment_next);
    PaymentsRecoveryEntryViewModel viewModel = ViewModelProviders.of(this).get(PaymentsRecoveryEntryViewModel.class);
    toolbar.setNavigationOnClickListener(t -> Navigation.findNavController(view).popBackStack(R.id.paymentsHome, false));
    viewModel.getState().observe(getViewLifecycleOwner(), state -> {
        message.setText(getString(R.string.PaymentsRecoveryEntryFragment__enter_word_d, state.getWordIndex() + 1));
        word.setHint(getString(R.string.PaymentsRecoveryEntryFragment__word_d, state.getWordIndex() + 1));
        wrapper.setError(state.canMoveToNext() || TextUtils.isEmpty(state.getCurrentEntry()) ? null : getString(R.string.PaymentsRecoveryEntryFragment__invalid_word));
        next.setEnabled(state.canMoveToNext());
        String inTextView = word.getText().toString();
        String inState = Util.firstNonNull(state.getCurrentEntry(), "");
        if (!inTextView.equals(inState)) {
            word.setText(inState);
        }
    });
    viewModel.getEvents().observe(getViewLifecycleOwner(), event -> {
        if (event == PaymentsRecoveryEntryViewModel.Events.GO_TO_CONFIRM) {
            SafeNavigation.safeNavigate(Navigation.findNavController(view), PaymentsRecoveryEntryFragmentDirections.actionPaymentsRecoveryEntryToPaymentsRecoveryPhrase(false).setWords(viewModel.getWords()));
        }
    });
    ArrayAdapter<String> wordAdapter = new ArrayAdapter<>(requireContext(), R.layout.support_simple_spinner_dropdown_item, Mnemonic.BIP39_WORDS_ENGLISH);
    word.setAdapter(wordAdapter);
    word.addTextChangedListener(new AfterTextChanged(e -> viewModel.onWordChanged(e.toString())));
    next.setOnClickListener(v -> viewModel.onNextClicked());
}
Also used : MaterialAutoCompleteTextView(com.google.android.material.textfield.MaterialAutoCompleteTextView) Bundle(android.os.Bundle) Util(org.thoughtcrime.securesms.util.Util) NonNull(androidx.annotation.NonNull) TextInputLayout(com.google.android.material.textfield.TextInputLayout) AfterTextChanged(org.thoughtcrime.securesms.util.text.AfterTextChanged) TextUtils(android.text.TextUtils) Mnemonic(org.thoughtcrime.securesms.payments.Mnemonic) R(org.thoughtcrime.securesms.R) ArrayAdapter(android.widget.ArrayAdapter) TextView(android.widget.TextView) Nullable(androidx.annotation.Nullable) MaterialAutoCompleteTextView(com.google.android.material.textfield.MaterialAutoCompleteTextView) SafeNavigation(org.thoughtcrime.securesms.util.navigation.SafeNavigation) Fragment(androidx.fragment.app.Fragment) View(android.view.View) Toolbar(androidx.appcompat.widget.Toolbar) ViewModelProviders(androidx.lifecycle.ViewModelProviders) Navigation(androidx.navigation.Navigation) TextView(android.widget.TextView) MaterialAutoCompleteTextView(com.google.android.material.textfield.MaterialAutoCompleteTextView) TextInputLayout(com.google.android.material.textfield.TextInputLayout) TextView(android.widget.TextView) MaterialAutoCompleteTextView(com.google.android.material.textfield.MaterialAutoCompleteTextView) View(android.view.View) AfterTextChanged(org.thoughtcrime.securesms.util.text.AfterTextChanged) ArrayAdapter(android.widget.ArrayAdapter) Toolbar(androidx.appcompat.widget.Toolbar)

Example 5 with AfterTextChanged

use of org.thoughtcrime.securesms.util.text.AfterTextChanged in project Signal-Android by WhisperSystems.

the class AddGroupDetailsFragment method onViewCreated.

@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
    create = view.findViewById(R.id.create);
    name = view.findViewById(R.id.name);
    toolbar = view.findViewById(R.id.toolbar);
    disappearingMessagesRow = view.findViewById(R.id.group_disappearing_messages_row);
    setCreateEnabled(false, false);
    GroupMemberListView members = view.findViewById(R.id.member_list);
    ImageView avatar = view.findViewById(R.id.group_avatar);
    View mmsWarning = view.findViewById(R.id.mms_warning);
    LearnMoreTextView gv2Warning = view.findViewById(R.id.gv2_warning);
    View addLater = view.findViewById(R.id.add_later);
    TextView disappearingMessageValue = view.findViewById(R.id.group_disappearing_messages_value);
    members.initializeAdapter(getViewLifecycleOwner());
    avatarPlaceholder = VectorDrawableCompat.create(getResources(), R.drawable.ic_camera_outline_32_ultramarine, requireActivity().getTheme());
    if (savedInstanceState == null) {
        avatar.setImageDrawable(new InsetDrawable(avatarPlaceholder, ViewUtil.dpToPx(AVATAR_PLACEHOLDER_INSET_DP)));
    }
    initializeViewModel();
    avatar.setOnClickListener(v -> showAvatarPicker());
    members.setRecipientClickListener(this::handleRecipientClick);
    EditTextUtil.addGraphemeClusterLimitFilter(name, FeatureFlags.getMaxGroupNameGraphemeLength());
    name.addTextChangedListener(new AfterTextChanged(editable -> viewModel.setName(editable.toString())));
    toolbar.setNavigationOnClickListener(unused -> callback.onNavigationButtonPressed());
    create.setOnClickListener(v -> handleCreateClicked());
    viewModel.getMembers().observe(getViewLifecycleOwner(), list -> {
        addLater.setVisibility(list.isEmpty() ? View.VISIBLE : View.GONE);
        members.setMembers(list);
    });
    viewModel.getCanSubmitForm().observe(getViewLifecycleOwner(), isFormValid -> setCreateEnabled(isFormValid, true));
    viewModel.getIsMms().observe(getViewLifecycleOwner(), isMms -> {
        disappearingMessagesRow.setVisibility(isMms ? View.GONE : View.VISIBLE);
        mmsWarning.setVisibility(isMms ? View.VISIBLE : View.GONE);
        name.setHint(isMms ? R.string.AddGroupDetailsFragment__group_name_optional : R.string.AddGroupDetailsFragment__group_name_required);
        toolbar.setTitle(isMms ? R.string.AddGroupDetailsFragment__create_group : R.string.AddGroupDetailsFragment__name_this_group);
    });
    viewModel.getNonGv2CapableMembers().observe(getViewLifecycleOwner(), nonGv2CapableMembers -> {
        gv2Warning.setVisibility(nonGv2CapableMembers.isEmpty() ? View.GONE : View.VISIBLE);
        gv2Warning.setText(requireContext().getResources().getQuantityString(R.plurals.AddGroupDetailsFragment__d_members_do_not_support_new_groups_so_this_group_cannot_be_created, nonGv2CapableMembers.size(), nonGv2CapableMembers.size()));
        gv2Warning.setLearnMoreVisible(true);
        gv2Warning.setOnLinkClickListener(v -> NonGv2MemberDialog.showNonGv2Members(requireContext(), getViewLifecycleOwner(), nonGv2CapableMembers));
    });
    viewModel.getAvatar().observe(getViewLifecycleOwner(), avatarBytes -> {
        if (avatarBytes == null) {
            avatar.setImageDrawable(new InsetDrawable(avatarPlaceholder, ViewUtil.dpToPx(AVATAR_PLACEHOLDER_INSET_DP)));
        } else {
            GlideApp.with(this).load(avatarBytes).circleCrop().skipMemoryCache(true).diskCacheStrategy(DiskCacheStrategy.NONE).into(avatar);
        }
    });
    viewModel.getDisappearingMessagesTimer().observe(getViewLifecycleOwner(), timer -> disappearingMessageValue.setText(ExpirationUtil.getExpirationDisplayValue(requireContext(), timer)));
    disappearingMessagesRow.setOnClickListener(v -> {
        startActivityForResult(RecipientDisappearingMessagesActivity.forCreateGroup(requireContext(), viewModel.getDisappearingMessagesTimer().getValue()), REQUEST_DISAPPEARING_TIMER);
    });
    name.requestFocus();
    getParentFragmentManager().setFragmentResultListener(AvatarPickerFragment.REQUEST_KEY_SELECT_AVATAR, getViewLifecycleOwner(), (key, bundle) -> handleMediaResult(bundle));
}
Also used : SignalStore(org.thoughtcrime.securesms.keyvalue.SignalStore) Arrays(java.util.Arrays) Bundle(android.os.Bundle) EditTextUtil(org.signal.core.util.EditTextUtil) NonNull(androidx.annotation.NonNull) AvatarPickerFragment(org.thoughtcrime.securesms.avatar.picker.AvatarPickerFragment) MaterialAlertDialogBuilder(com.google.android.material.dialog.MaterialAlertDialogBuilder) ImageView(android.widget.ImageView) ViewUtil(org.thoughtcrime.securesms.util.ViewUtil) Drawable(android.graphics.drawable.Drawable) R(org.thoughtcrime.securesms.R) VectorDrawableCompat(androidx.vectordrawable.graphics.drawable.VectorDrawableCompat) SafeNavigation(org.thoughtcrime.securesms.util.navigation.SafeNavigation) RecipientId(org.thoughtcrime.securesms.recipients.RecipientId) Media(org.thoughtcrime.securesms.mediasend.Media) View(android.view.View) ViewModelProviders(androidx.lifecycle.ViewModelProviders) Recipient(org.thoughtcrime.securesms.recipients.Recipient) DecryptableStreamUriLoader(org.thoughtcrime.securesms.mms.DecryptableStreamUriLoader) RecipientDisappearingMessagesActivity(org.thoughtcrime.securesms.recipients.ui.disappearingmessages.RecipientDisappearingMessagesActivity) ViewGroup(android.view.ViewGroup) Objects(java.util.Objects) StringRes(androidx.annotation.StringRes) FeatureFlags(org.thoughtcrime.securesms.util.FeatureFlags) List(java.util.List) TextView(android.widget.TextView) Nullable(androidx.annotation.Nullable) Toolbar(androidx.appcompat.widget.Toolbar) ExpireTimerSettingsFragment(org.thoughtcrime.securesms.components.settings.app.privacy.expire.ExpireTimerSettingsFragment) BitmapUtil(org.thoughtcrime.securesms.util.BitmapUtil) GlideApp(org.thoughtcrime.securesms.mms.GlideApp) Context(android.content.Context) Intent(android.content.Intent) ExpirationUtil(org.thoughtcrime.securesms.util.ExpirationUtil) AvatarSelectionActivity(org.thoughtcrime.securesms.mediasend.AvatarSelectionActivity) GroupMemberListView(org.thoughtcrime.securesms.groups.ui.GroupMemberListView) Toast(android.widget.Toast) DiskCacheStrategy(com.bumptech.glide.load.engine.DiskCacheStrategy) CircularProgressButton(com.dd.CircularProgressButton) CustomTarget(com.bumptech.glide.request.target.CustomTarget) InsetDrawable(android.graphics.drawable.InsetDrawable) AvatarHelper(org.thoughtcrime.securesms.profiles.AvatarHelper) LayoutInflater(android.view.LayoutInflater) AfterTextChanged(org.thoughtcrime.securesms.util.text.AfterTextChanged) NonGv2MemberDialog(org.thoughtcrime.securesms.groups.ui.creategroup.dialogs.NonGv2MemberDialog) Bitmap(android.graphics.Bitmap) Transition(com.bumptech.glide.request.transition.Transition) LearnMoreTextView(org.thoughtcrime.securesms.util.views.LearnMoreTextView) Navigation(androidx.navigation.Navigation) LoggingFragment(org.thoughtcrime.securesms.LoggingFragment) Activity(android.app.Activity) EditText(android.widget.EditText) LearnMoreTextView(org.thoughtcrime.securesms.util.views.LearnMoreTextView) TextView(android.widget.TextView) LearnMoreTextView(org.thoughtcrime.securesms.util.views.LearnMoreTextView) InsetDrawable(android.graphics.drawable.InsetDrawable) ImageView(android.widget.ImageView) ImageView(android.widget.ImageView) View(android.view.View) TextView(android.widget.TextView) GroupMemberListView(org.thoughtcrime.securesms.groups.ui.GroupMemberListView) LearnMoreTextView(org.thoughtcrime.securesms.util.views.LearnMoreTextView) AfterTextChanged(org.thoughtcrime.securesms.util.text.AfterTextChanged) GroupMemberListView(org.thoughtcrime.securesms.groups.ui.GroupMemberListView)

Aggregations

AfterTextChanged (org.thoughtcrime.securesms.util.text.AfterTextChanged)15 View (android.view.View)13 EditText (android.widget.EditText)12 Bundle (android.os.Bundle)11 NonNull (androidx.annotation.NonNull)11 Toolbar (androidx.appcompat.widget.Toolbar)11 R (org.thoughtcrime.securesms.R)11 Nullable (androidx.annotation.Nullable)10 TextView (android.widget.TextView)9 Toast (android.widget.Toast)8 ViewModelProviders (androidx.lifecycle.ViewModelProviders)8 Intent (android.content.Intent)7 LayoutInflater (android.view.LayoutInflater)7 ViewGroup (android.view.ViewGroup)7 Navigation (androidx.navigation.Navigation)7 Fragment (androidx.fragment.app.Fragment)6 CircularProgressButton (com.dd.CircularProgressButton)6 ViewUtil (org.thoughtcrime.securesms.util.ViewUtil)6 Context (android.content.Context)5 Recipient (org.thoughtcrime.securesms.recipients.Recipient)5