From d0c59a6d75694002b22c1b85f88d5936bdeb6122 Mon Sep 17 00:00:00 2001 From: Torsten Grote Date: Tue, 27 Jun 2023 10:48:04 -0300 Subject: [PATCH] Target SDK 33 and ask for notification permission when creating account and when signing in --- bramble-android/build.gradle | 2 +- briar-android/build.gradle | 2 +- briar-android/src/main/AndroidManifest.xml | 1 + .../android/account/SetPasswordFragment.java | 23 +++++++++++++++++++ .../briar/android/login/PasswordFragment.java | 21 +++++++++++++++++ .../src/main/res/layout/info_view.xml | 2 +- 6 files changed, 48 insertions(+), 3 deletions(-) diff --git a/bramble-android/build.gradle b/bramble-android/build.gradle index cc6786f48..5ca4b8a51 100644 --- a/bramble-android/build.gradle +++ b/bramble-android/build.gradle @@ -12,7 +12,7 @@ android { defaultConfig { minSdkVersion 21 - targetSdkVersion 31 + targetSdkVersion 33 versionCode 10504 versionName "1.5.4" consumerProguardFiles 'proguard-rules.txt' diff --git a/briar-android/build.gradle b/briar-android/build.gradle index 88dcd1b2b..fa172c88e 100644 --- a/briar-android/build.gradle +++ b/briar-android/build.gradle @@ -25,7 +25,7 @@ android { defaultConfig { minSdkVersion 21 - targetSdkVersion 31 + targetSdkVersion 33 versionCode 10504 versionName "1.5.4" applicationId "org.briarproject.briar.android" diff --git a/briar-android/src/main/AndroidManifest.xml b/briar-android/src/main/AndroidManifest.xml index fd765c9f4..873971ae8 100644 --- a/briar-android/src/main/AndroidManifest.xml +++ b/briar-android/src/main/AndroidManifest.xml @@ -30,6 +30,7 @@ android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="18" tools:ignore="ScopedStorage" /> + diff --git a/briar-android/src/main/java/org/briarproject/briar/android/account/SetPasswordFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/account/SetPasswordFragment.java index 9d0047570..601cb59ff 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/account/SetPasswordFragment.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/account/SetPasswordFragment.java @@ -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 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()); } + } diff --git a/briar-android/src/main/java/org/briarproject/briar/android/login/PasswordFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/login/PasswordFragment.java index 30d224c0a..7f5640444 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/login/PasswordFragment.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/login/PasswordFragment.java @@ -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 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()); } diff --git a/briar-android/src/main/res/layout/info_view.xml b/briar-android/src/main/res/layout/info_view.xml index c7cf40f7b..8a884a4d8 100644 --- a/briar-android/src/main/res/layout/info_view.xml +++ b/briar-android/src/main/res/layout/info_view.xml @@ -13,10 +13,10 @@ android:layout_margin="@dimen/margin_medium" android:contentDescription="@string/info" android:drawablePadding="@dimen/margin_medium" - android:drawableTint="?attr/colorControlNormal" android:gravity="center_vertical" app:drawableLeftCompat="@drawable/ic_info_dark" app:drawableStartCompat="@drawable/ic_info_dark" + app:drawableTint="?attr/colorControlNormal" tools:text="Did you know that if you took all the veins out of your body and laid them out end to end, you would die?" /> \ No newline at end of file