/* Copyright (c) 2019-2024, Arm Limited and Contributors * * SPDX-License-Identifier: Apache-2.0 * * Licensed under the Apache License, Version 2.0 the "License"; * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.khronos.vulkan_samples; import android.app.AlertDialog; import android.app.PendingIntent; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.net.Uri; import android.os.Bundle; import androidx.core.app.ActivityCompat; import androidx.core.app.NotificationCompat; import androidx.core.app.NotificationManagerCompat; import androidx.core.content.FileProvider; import android.view.View; import com.google.androidgamesdk.GameActivity; import com.khronos.vulkan_samples.common.Notifications; import java.io.File; import java.util.concurrent.Semaphore; public class NativeSampleActivity extends GameActivity { private Context context; private final Semaphore semaphore = new Semaphore(0, true); @Override protected void onCreate(Bundle instance) { super.onCreate(instance); Notifications.initNotificationChannel(this); context = this; } @Override public void onWindowFocusChanged(boolean hasFocus) { super.onWindowFocusChanged(hasFocus); if (hasFocus) { View decorView = getWindow().getDecorView(); decorView.setSystemUiVisibility( View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY | View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_FULLSCREEN); } } /*** * Handle the application when an error is thrown and display a message */ public void fatalError(String message) { final NativeSampleActivity activity = this; ApplicationInfo applicationInfo = activity.getApplicationInfo(); this.runOnUiThread(new Runnable() { public void run() { AlertDialog.Builder builder = new AlertDialog.Builder(activity); builder.setTitle("Vulkan Samples"); builder.setMessage(message); builder.setPositiveButton("Close", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { semaphore.release(); } }); builder.setCancelable(false); AlertDialog dialog = builder.create(); dialog.show(); } }); try { semaphore.acquire(); } catch (InterruptedException e) { } activity.finish(); } }