Target SDK 33 and ask for notification permission

when creating account and when signing in
This commit is contained in:
Torsten Grote
2023-06-27 10:48:04 -03:00
parent 3bb39c2aa3
commit d0c59a6d75
6 changed files with 48 additions and 3 deletions

View File

@@ -19,10 +19,17 @@ import org.briarproject.nullsafety.ParametersNotNullByDefault;
import javax.annotation.Nullable;
import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts.RequestPermission;
import static android.Manifest.permission.POST_NOTIFICATIONS;
import static android.content.Context.INPUT_METHOD_SERVICE;
import static android.content.pm.PackageManager.PERMISSION_GRANTED;
import static android.os.Build.VERSION.SDK_INT;
import static android.view.View.INVISIBLE;
import static android.view.View.VISIBLE;
import static android.view.inputmethod.EditorInfo.IME_ACTION_DONE;
import static androidx.core.content.ContextCompat.checkSelfPermission;
import static org.briarproject.bramble.api.crypto.PasswordStrengthEstimator.QUITE_WEAK;
import static org.briarproject.briar.android.util.UiUtils.setError;
@@ -38,6 +45,10 @@ public class SetPasswordFragment extends SetupFragment {
private StrengthMeter strengthMeter;
private Button nextButton;
private final ActivityResultLauncher<String> requestPermissionLauncher =
registerForActivityResult(new RequestPermission(), isGranted ->
setPassword());
public static SetPasswordFragment newInstance() {
return new SetPasswordFragment();
}
@@ -121,6 +132,18 @@ public class SetPasswordFragment extends SetupFragment {
IBinder token = passwordEntry.getWindowToken();
Object o = requireContext().getSystemService(INPUT_METHOD_SERVICE);
((InputMethodManager) o).hideSoftInputFromWindow(token, 0);
if (SDK_INT >= 33 &&
checkSelfPermission(requireContext(), POST_NOTIFICATIONS) !=
PERMISSION_GRANTED) {
// this calls setPassword() when it returns
requestPermissionLauncher.launch(POST_NOTIFICATIONS);
} else {
setPassword();
}
}
private void setPassword() {
viewModel.setPassword(passwordEntry.getText().toString());
}
}

View File

@@ -22,13 +22,19 @@ import org.briarproject.nullsafety.ParametersNotNullByDefault;
import javax.annotation.Nullable;
import javax.inject.Inject;
import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts.RequestPermission;
import androidx.appcompat.app.AlertDialog;
import androidx.lifecycle.LifecycleOwner;
import androidx.lifecycle.ViewModelProvider;
import static android.Manifest.permission.POST_NOTIFICATIONS;
import static android.content.pm.PackageManager.PERMISSION_GRANTED;
import static android.os.Build.VERSION.SDK_INT;
import static android.view.View.INVISIBLE;
import static android.view.View.VISIBLE;
import static android.view.inputmethod.EditorInfo.IME_ACTION_DONE;
import static androidx.core.content.ContextCompat.checkSelfPermission;
import static org.briarproject.bramble.api.crypto.DecryptionResult.KEY_STRENGTHENER_ERROR;
import static org.briarproject.bramble.api.crypto.DecryptionResult.SUCCESS;
import static org.briarproject.briar.android.login.LoginUtils.createKeyStrengthenerErrorDialog;
@@ -52,6 +58,10 @@ public class PasswordFragment extends BaseFragment implements TextWatcher {
private TextInputLayout input;
private TextInputEditText password;
private final ActivityResultLauncher<String> requestPermissionLauncher =
registerForActivityResult(new RequestPermission(), isGranted ->
validatePassword());
@Override
public void injectFragment(ActivityComponent component) {
component.inject(this);
@@ -109,6 +119,17 @@ public class PasswordFragment extends BaseFragment implements TextWatcher {
hideSoftKeyboard(password);
signInButton.setVisibility(INVISIBLE);
progress.setVisibility(VISIBLE);
if (SDK_INT >= 33 &&
checkSelfPermission(requireContext(), POST_NOTIFICATIONS) !=
PERMISSION_GRANTED) {
// this calls validatePassword() when it returns
requestPermissionLauncher.launch(POST_NOTIFICATIONS);
} else {
validatePassword();
}
}
private void validatePassword() {
viewModel.validatePassword(password.getText().toString());
}