Compare commits

...

3 Commits

Author SHA1 Message Date
Greyson Parrelli
20996c985b Bump version to 5.0.9 2021-01-08 17:39:13 -05:00
Greyson Parrelli
e5e9a7108e Add extra conditions for the SMS banner. 2021-01-08 17:31:54 -05:00
Alan Evans
51dfee9cd3 Allow empty group creation. 2021-01-08 12:55:04 -04:00
7 changed files with 27 additions and 36 deletions

View File

@@ -62,14 +62,14 @@ protobuf {
} }
def canonicalVersionCode = 759 def canonicalVersionCode = 759
def canonicalVersionName = "5.0.8" def canonicalVersionName = "5.0.9"
def postFixSize = 10 def postFixSize = 10
def abiPostFix = ['universal' : 0, def abiPostFix = ['universal' : 5,
'armeabi-v7a' : 1, 'armeabi-v7a' : 6,
'arm64-v8a' : 2, 'arm64-v8a' : 7,
'x86' : 3, 'x86' : 8,
'x86_64' : 4] 'x86_64' : 9]
def keystores = [ 'debug' : loadKeystoreProperties('keystore.debug.properties') ] def keystores = [ 'debug' : loadKeystoreProperties('keystore.debug.properties') ]

View File

@@ -8,6 +8,7 @@ import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment; import androidx.fragment.app.Fragment;
import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.phonenumbers.PhoneNumberFormatter;
import org.thoughtcrime.securesms.util.SmsUtil; import org.thoughtcrime.securesms.util.SmsUtil;
import org.thoughtcrime.securesms.util.TextSecurePreferences; import org.thoughtcrime.securesms.util.TextSecurePreferences;
import org.thoughtcrime.securesms.util.Util; import org.thoughtcrime.securesms.util.Util;
@@ -41,6 +42,6 @@ public class DefaultSmsReminder extends Reminder {
TextSecurePreferences.setPromptedDefaultSmsProvider(context, false); TextSecurePreferences.setPromptedDefaultSmsProvider(context, false);
} }
return !isDefault && !TextSecurePreferences.hasPromptedDefaultSmsProvider(context); return !isDefault && !TextSecurePreferences.hasPromptedDefaultSmsProvider(context) && PhoneNumberFormatter.getLocalCountryCode() != 91;
} }
} }

View File

@@ -3,6 +3,7 @@ package org.thoughtcrime.securesms.groups.ui.creategroup;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.os.Bundle; import android.os.Bundle;
import android.util.Pair;
import android.view.MenuItem; import android.view.MenuItem;
import android.view.View; import android.view.View;
@@ -40,7 +41,6 @@ public class CreateGroupActivity extends ContactSelectionActivity {
private static final String TAG = Log.tag(CreateGroupActivity.class); private static final String TAG = Log.tag(CreateGroupActivity.class);
private static final int MINIMUM_GROUP_SIZE = 1;
private static final short REQUEST_CODE_ADD_DETAILS = 17275; private static final short REQUEST_CODE_ADD_DETAILS = 17275;
private View next; private View next;
@@ -68,7 +68,6 @@ public class CreateGroupActivity extends ContactSelectionActivity {
next = findViewById(R.id.next); next = findViewById(R.id.next);
disableNext();
next.setOnClickListener(v -> handleNextPressed()); next.setOnClickListener(v -> handleNextPressed());
} }
@@ -107,10 +106,6 @@ public class CreateGroupActivity extends ContactSelectionActivity {
if (contactsFragment.hasQueryFilter()) { if (contactsFragment.hasQueryFilter()) {
getToolbar().clear(); getToolbar().clear();
} }
if (contactsFragment.getSelectedContactsCount() < MINIMUM_GROUP_SIZE) {
disableNext();
}
} }
private void enableNext() { private void enableNext() {
@@ -167,28 +162,33 @@ public class CreateGroupActivity extends ContactSelectionActivity {
resolved = Recipient.resolvedList(ids); resolved = Recipient.resolvedList(ids);
Pair<Boolean, List<RecipientId>> result;
boolean gv2 = Stream.of(recipientsAndSelf).allMatch(r -> r.getGroupsV2Capability() == Recipient.Capability.SUPPORTED); boolean gv2 = Stream.of(recipientsAndSelf).allMatch(r -> r.getGroupsV2Capability() == Recipient.Capability.SUPPORTED);
if (!gv2 && Stream.of(resolved).anyMatch(r -> !r.hasE164())) if (!gv2 && Stream.of(resolved).anyMatch(r -> !r.hasE164()))
{ {
Log.w(TAG, "Invalid GV1 group..."); Log.w(TAG, "Invalid GV1 group...");
ids = Collections.emptyList(); ids = Collections.emptyList();
result = Pair.create(false, ids);
} else {
result = Pair.create(true, ids);
} }
stopwatch.split("gv1-check"); stopwatch.split("gv1-check");
return ids; return result;
}, ids -> { }, result -> {
dismissibleDialog.dismiss(); dismissibleDialog.dismiss();
stopwatch.stop(TAG); stopwatch.stop(TAG);
if (ids.isEmpty()) { if (result.first) {
startActivityForResult(AddGroupDetailsActivity.newIntent(this, result.second), REQUEST_CODE_ADD_DETAILS);
} else {
new AlertDialog.Builder(this) new AlertDialog.Builder(this)
.setMessage(R.string.CreateGroupActivity_some_contacts_cannot_be_in_legacy_groups) .setMessage(R.string.CreateGroupActivity_some_contacts_cannot_be_in_legacy_groups)
.setPositiveButton(android.R.string.ok, (d, w) -> d.dismiss()) .setPositiveButton(android.R.string.ok, (d, w) -> d.dismiss())
.show(); .show();
} else {
startActivityForResult(AddGroupDetailsActivity.newIntent(this, ids), REQUEST_CODE_ADD_DETAILS);
} }
}); });
} }

View File

@@ -106,13 +106,7 @@ public class AddGroupDetailsFragment extends LoggingFragment {
name.addTextChangedListener(new AfterTextChanged(editable -> viewModel.setName(editable.toString()))); name.addTextChangedListener(new AfterTextChanged(editable -> viewModel.setName(editable.toString())));
toolbar.setNavigationOnClickListener(unused -> callback.onNavigationButtonPressed()); toolbar.setNavigationOnClickListener(unused -> callback.onNavigationButtonPressed());
create.setOnClickListener(v -> handleCreateClicked()); create.setOnClickListener(v -> handleCreateClicked());
viewModel.getMembers().observe(getViewLifecycleOwner(), recipients -> { viewModel.getMembers().observe(getViewLifecycleOwner(), members::setMembers);
members.setMembers(recipients);
if (recipients.isEmpty()) {
toast(R.string.AddGroupDetailsFragment__groups_require_at_least_two_members);
callback.onNavigationButtonPressed();
}
});
viewModel.getCanSubmitForm().observe(getViewLifecycleOwner(), isFormValid -> setCreateEnabled(isFormValid, true)); viewModel.getCanSubmitForm().observe(getViewLifecycleOwner(), isFormValid -> setCreateEnabled(isFormValid, true));
viewModel.getIsMms().observe(getViewLifecycleOwner(), isMms -> { viewModel.getIsMms().observe(getViewLifecycleOwner(), isMms -> {
mmsWarning.setVisibility(isMms ? View.VISIBLE : View.GONE); mmsWarning.setVisibility(isMms ? View.VISIBLE : View.GONE);
@@ -230,10 +224,6 @@ public class AddGroupDetailsFragment extends LoggingFragment {
case ERROR_INVALID_NAME: case ERROR_INVALID_NAME:
name.setError(getString(R.string.AddGroupDetailsFragment__this_field_is_required)); name.setError(getString(R.string.AddGroupDetailsFragment__this_field_is_required));
break; break;
case ERROR_INVALID_MEMBER_COUNT:
toast(R.string.AddGroupDetailsFragment__groups_require_at_least_two_members);
callback.onNavigationButtonPressed();
break;
default: default:
throw new IllegalStateException("Unexpected error: " + error.getErrorType().name()); throw new IllegalStateException("Unexpected error: " + error.getErrorType().name());
} }

View File

@@ -124,11 +124,6 @@ public final class AddGroupDetailsViewModel extends ViewModel {
return; return;
} }
if (memberIds.isEmpty()) {
groupCreateResult.postValue(GroupCreateResult.error(GroupCreateResult.Error.Type.ERROR_INVALID_MEMBER_COUNT));
return;
}
repository.createGroup(memberIds, repository.createGroup(memberIds,
avatarBytes, avatarBytes,
groupName, groupName,

View File

@@ -86,8 +86,7 @@ abstract class GroupCreateResult {
ERROR_IO, ERROR_IO,
ERROR_BUSY, ERROR_BUSY,
ERROR_FAILED, ERROR_FAILED,
ERROR_INVALID_NAME, ERROR_INVALID_NAME
ERROR_INVALID_MEMBER_COUNT
} }
} }

View File

@@ -110,6 +110,12 @@ public class PhoneNumberFormatter {
} }
} }
public static int getLocalCountryCode() {
Optional<PhoneNumber> localNumber = get(ApplicationDependencies.getApplication()).localNumber;
return localNumber != null && localNumber.isPresent() ? localNumber.get().countryCode : 0;
}
public String format(@Nullable String number) { public String format(@Nullable String number) {
if (number == null) return "Unknown"; if (number == null) return "Unknown";
if (GroupId.isEncodedGroup(number)) return number; if (GroupId.isEncodedGroup(number)) return number;