mirror of
https://github.com/TeamNewPipe/NewPipe.git
synced 2025-10-03 01:39:38 +02:00
Merge d63db94477
into 3a2d427a46
This commit is contained in:
commit
f669e8d8a2
3 changed files with 73 additions and 16 deletions
|
@ -184,12 +184,17 @@ public class MainActivity extends AppCompatActivity {
|
|||
}
|
||||
openMiniPlayerUponPlayerStarted();
|
||||
|
||||
if (PermissionHelper.checkPostNotificationsPermission(this,
|
||||
PermissionHelper.POST_NOTIFICATIONS_REQUEST_CODE)) {
|
||||
// Schedule worker for checking for new streams and creating corresponding notifications
|
||||
// if this is enabled by the user.
|
||||
NotificationWorker.initialize(this);
|
||||
}
|
||||
PermissionHelper.checkPostNotificationsPermissionOnStartup(
|
||||
this,
|
||||
notificationAllowed -> {
|
||||
// Schedule worker for checking for new streams and creating corresponding
|
||||
// notifications if this is enabled by the user.
|
||||
if (Boolean.TRUE.equals(notificationAllowed)) {
|
||||
NotificationWorker.initialize(this);
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
if (!UpdateSettingsFragment.wasUserAskedForConsent(this)
|
||||
&& !App.getApp().isFirstRun()
|
||||
&& ReleaseVersionUtil.INSTANCE.isReleaseApk()) {
|
||||
|
|
|
@ -1,10 +1,12 @@
|
|||
package org.schabi.newpipe.util;
|
||||
|
||||
import android.Manifest;
|
||||
import android.annotation.SuppressLint;
|
||||
import android.app.Activity;
|
||||
import android.content.ActivityNotFoundException;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.SharedPreferences;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.net.Uri;
|
||||
import android.os.Build;
|
||||
|
@ -12,14 +14,21 @@ import android.provider.Settings;
|
|||
import android.text.Html;
|
||||
import android.widget.Toast;
|
||||
|
||||
import androidx.activity.ComponentActivity;
|
||||
import androidx.activity.result.ActivityResultCallback;
|
||||
import androidx.activity.result.ActivityResultLauncher;
|
||||
import androidx.activity.result.contract.ActivityResultContracts;
|
||||
import androidx.annotation.RequiresApi;
|
||||
import androidx.appcompat.app.AlertDialog;
|
||||
import androidx.core.app.ActivityCompat;
|
||||
import androidx.core.content.ContextCompat;
|
||||
import androidx.preference.PreferenceManager;
|
||||
|
||||
import org.schabi.newpipe.R;
|
||||
import org.schabi.newpipe.settings.NewPipeSettings;
|
||||
|
||||
import java.util.function.Consumer;
|
||||
|
||||
public final class PermissionHelper {
|
||||
public static final int POST_NOTIFICATIONS_REQUEST_CODE = 779;
|
||||
public static final int DOWNLOAD_DIALOG_REQUEST_CODE = 778;
|
||||
|
@ -83,17 +92,59 @@ public final class PermissionHelper {
|
|||
return true;
|
||||
}
|
||||
|
||||
public static boolean checkPostNotificationsPermission(final Activity activity,
|
||||
final int requestCode) {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU
|
||||
&& ContextCompat.checkSelfPermission(activity,
|
||||
Manifest.permission.POST_NOTIFICATIONS)
|
||||
!= PackageManager.PERMISSION_GRANTED) {
|
||||
ActivityCompat.requestPermissions(activity,
|
||||
new String[] {Manifest.permission.POST_NOTIFICATIONS}, requestCode);
|
||||
return false;
|
||||
|
||||
/**
|
||||
* Check that we have the notification permission or ask the user for permission.
|
||||
*
|
||||
* @param activity main activity
|
||||
* @param userChoice a callback that gets called with the user choice
|
||||
*/
|
||||
public static void checkPostNotificationsPermissionOnStartup(
|
||||
final ComponentActivity activity,
|
||||
final Consumer<Boolean> userChoice) {
|
||||
|
||||
// On Android before TIRAMISU, notifications are always allowed to be sent
|
||||
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU) {
|
||||
userChoice.accept(true);
|
||||
return;
|
||||
}
|
||||
return true;
|
||||
|
||||
// if we have the permission already, continue
|
||||
if (ContextCompat.checkSelfPermission(activity, Manifest.permission.POST_NOTIFICATIONS)
|
||||
== PackageManager.PERMISSION_GRANTED) {
|
||||
userChoice.accept(true);
|
||||
return;
|
||||
}
|
||||
|
||||
// if we already asked the user, don’t ask again
|
||||
final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(activity);
|
||||
final String wasAskedKey = activity.getString(
|
||||
R.string.user_was_asked_notification_permission_on_startup_key);
|
||||
if (prefs.getBoolean(wasAskedKey, false)) {
|
||||
userChoice.accept(false);
|
||||
return;
|
||||
}
|
||||
|
||||
// else let’s ask the user for permission
|
||||
@SuppressLint("ApplySharedPref")
|
||||
final ActivityResultCallback<Boolean> cb = isGranted -> {
|
||||
// first make sure that we only ever ask the user once on startup
|
||||
final SharedPreferences prefs2 =
|
||||
PreferenceManager.getDefaultSharedPreferences(activity);
|
||||
// commit setting before doing anything else
|
||||
prefs2.edit().putBoolean(wasAskedKey, true).commit();
|
||||
|
||||
// forward the user choice
|
||||
userChoice.accept(isGranted);
|
||||
};
|
||||
|
||||
final ActivityResultLauncher<String> notificationRequestReference =
|
||||
activity.registerForActivityResult(
|
||||
new ActivityResultContracts.RequestPermission(),
|
||||
cb
|
||||
);
|
||||
|
||||
notificationRequestReference.launch(Manifest.permission.POST_NOTIFICATIONS);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -1443,6 +1443,7 @@
|
|||
|
||||
<string name="recaptcha_cookies_key">recaptcha_cookies_key</string>
|
||||
|
||||
<string name="user_was_asked_notification_permission_on_startup_key">user_was_asked_notification_permission_on_startup</string>
|
||||
<string name="enable_streams_notifications">enable_streams_notifications</string>
|
||||
<string name="streams_notifications_interval_key">streams_notifications_interval</string>
|
||||
<string name="streams_notifications_interval_default">14400</string>
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue