Fix toast crash on API 33

You shouldn't call getView() on toasts.
Also simplified some duplicate code.
This commit is contained in:
Stypox 2023-01-12 11:39:25 +01:00
parent 48ae830262
commit b6e6d39985
No known key found for this signature in database
GPG key ID: 4BDF1B40A49FDD23
5 changed files with 20 additions and 25 deletions

View file

@ -631,8 +631,7 @@ public class RouterActivity extends AppCompatActivity {
} }
if (selectedChoiceKey.equals(getString(R.string.popup_player_key)) if (selectedChoiceKey.equals(getString(R.string.popup_player_key))
&& !PermissionHelper.isPopupEnabled(this)) { && !PermissionHelper.isPopupEnabledElseAsk(this)) {
PermissionHelper.showPopupEnablementToast(this);
finish(); finish();
return; return;
} }

View file

@ -1066,8 +1066,7 @@ public final class VideoDetailFragment
} }
private void openPopupPlayer(final boolean append) { private void openPopupPlayer(final boolean append) {
if (!PermissionHelper.isPopupEnabled(activity)) { if (!PermissionHelper.isPopupEnabledElseAsk(activity)) {
PermissionHelper.showPopupEnablementToast(activity);
return; return;
} }

View file

@ -143,11 +143,9 @@ public final class PlayQueueActivity extends AppCompatActivity
NavigationHelper.playOnMainPlayer(this, player.getPlayQueue(), true); NavigationHelper.playOnMainPlayer(this, player.getPlayQueue(), true);
return true; return true;
case R.id.action_switch_popup: case R.id.action_switch_popup:
if (PermissionHelper.isPopupEnabled(this)) { if (PermissionHelper.isPopupEnabledElseAsk(this)) {
this.player.setRecovery(); this.player.setRecovery();
NavigationHelper.playOnPopupPlayer(this, player.getPlayQueue(), true); NavigationHelper.playOnPopupPlayer(this, player.getPlayQueue(), true);
} else {
PermissionHelper.showPopupEnablementToast(this);
} }
return true; return true;
case R.id.action_switch_background: case R.id.action_switch_background:

View file

@ -156,8 +156,7 @@ public final class NavigationHelper {
public static void playOnPopupPlayer(final Context context, public static void playOnPopupPlayer(final Context context,
final PlayQueue queue, final PlayQueue queue,
final boolean resumePlayback) { final boolean resumePlayback) {
if (!PermissionHelper.isPopupEnabled(context)) { if (!PermissionHelper.isPopupEnabledElseAsk(context)) {
PermissionHelper.showPopupEnablementToast(context);
return; return;
} }
@ -183,8 +182,7 @@ public final class NavigationHelper {
public static void enqueueOnPlayer(final Context context, public static void enqueueOnPlayer(final Context context,
final PlayQueue queue, final PlayQueue queue,
final PlayerType playerType) { final PlayerType playerType) {
if ((playerType == PlayerType.POPUP) && !PermissionHelper.isPopupEnabled(context)) { if (playerType == PlayerType.POPUP && !PermissionHelper.isPopupEnabledElseAsk(context)) {
PermissionHelper.showPopupEnablementToast(context);
return; return;
} }

View file

@ -9,8 +9,6 @@ import android.content.pm.PackageManager;
import android.net.Uri; import android.net.Uri;
import android.os.Build; import android.os.Build;
import android.provider.Settings; import android.provider.Settings;
import android.view.Gravity;
import android.widget.TextView;
import android.widget.Toast; import android.widget.Toast;
import androidx.annotation.RequiresApi; import androidx.annotation.RequiresApi;
@ -128,18 +126,21 @@ public final class PermissionHelper {
} }
} }
public static boolean isPopupEnabled(final Context context) { /**
return Build.VERSION.SDK_INT < Build.VERSION_CODES.M * Determines whether the popup is enabled, and if it is not, starts the system activity to
|| checkSystemAlertWindowPermission(context); * request the permission with {@link #checkSystemAlertWindowPermission(Context)} and shows a
} * toast to the user explaining why the permission is needed.
*
public static void showPopupEnablementToast(final Context context) { * @param context the Android context
final Toast toast = * @return whether the popup is enabled
Toast.makeText(context, R.string.msg_popup_permission, Toast.LENGTH_LONG); */
final TextView messageView = toast.getView().findViewById(android.R.id.message); public static boolean isPopupEnabledElseAsk(final Context context) {
if (messageView != null) { if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M
messageView.setGravity(Gravity.CENTER); || checkSystemAlertWindowPermission(context)) {
return true;
} else {
Toast.makeText(context, R.string.msg_popup_permission, Toast.LENGTH_LONG).show();
return false;
} }
toast.show();
} }
} }