diff --git a/app/src/main/java/org/schabi/newpipe/settings/VideoAudioSettingsFragment.java b/app/src/main/java/org/schabi/newpipe/settings/VideoAudioSettingsFragment.java index 9bbdd650d..7bb931309 100644 --- a/app/src/main/java/org/schabi/newpipe/settings/VideoAudioSettingsFragment.java +++ b/app/src/main/java/org/schabi/newpipe/settings/VideoAudioSettingsFragment.java @@ -1,12 +1,64 @@ package org.schabi.newpipe.settings; +import android.content.SharedPreferences; +import android.os.Build; import android.os.Bundle; +import android.provider.Settings; +import android.view.View; + +import androidx.annotation.Nullable; + +import com.google.android.material.snackbar.Snackbar; import org.schabi.newpipe.R; +import org.schabi.newpipe.util.PermissionHelper; public class VideoAudioSettingsFragment extends BasePreferenceFragment { + + private SharedPreferences.OnSharedPreferenceChangeListener listener; + + @Override + public void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + listener = (sharedPreferences, s) -> { + + // on M and above, if user chooses to minimise to popup player on exit and the app doesn't have + // display over other apps permission, show a snackbar to let the user give permission + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && + s.equals(getString(R.string.minimize_on_exit_key))) { + + String newSetting = sharedPreferences.getString(s, null); + if (newSetting != null + && newSetting.equals(getString(R.string.minimize_on_exit_popup_key)) + && !Settings.canDrawOverlays(getContext())) { + + Snackbar.make(getListView(), R.string.permission_display_over_apps, Snackbar.LENGTH_INDEFINITE) + .setAction(R.string.settings, + view -> PermissionHelper.checkSystemAlertWindowPermission(getContext())) + .show(); + + } + } + }; + } + + @Override public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { addPreferencesFromResource(R.xml.video_audio_settings); } + + @Override + public void onResume() { + super.onResume(); + getPreferenceManager().getSharedPreferences().registerOnSharedPreferenceChangeListener(listener); + + } + + @Override + public void onPause() { + super.onPause(); + getPreferenceManager().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(listener); + } } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index e1b2cc0a4..2d69ea402 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -227,6 +227,7 @@ Using default tabs, error while reading saved tabs Restore defaults Do you want to restore the defaults? + Give permission to display over other apps Sorry, that should not have happened. Guru Meditation.