demosystem tracks
[andemo] / src / android / main.c
index 4921087..88d7fb5 100644 (file)
@@ -5,8 +5,9 @@
 #include <sys/time.h>
 #include <EGL/egl.h>
 #include <GLES2/gl2.h>
-#include "demo.h"
+#include <android/window.h>
 #include "android_native_app_glue.h"
+#include "demo.h"
 #include "logger.h"
 #include "demosys.h"
 
@@ -16,6 +17,7 @@ static int handle_touch_input(struct android_app *app, AInputEvent *ev);
 static int init_gl(void);
 static void destroy_gl(void);
 static unsigned long get_time_msec(void);
+static void hide_navbar(struct android_app *state);
 
 struct android_app *app;
 
@@ -36,8 +38,12 @@ void android_main(struct android_app *app_ptr)
        app->onAppCmd = handle_command;
        app->onInputEvent = handle_input;
 
+       hide_navbar(app);
+
        start_logger();
 
+       printf("Running %d bit version\n", (int)sizeof(void*) << 3);
+
        for(;;) {
                int num_events;
                struct android_poll_source *pollsrc;
@@ -79,6 +85,7 @@ static void handle_command(struct android_app *app, int32_t cmd)
                break;
 
        case APP_CMD_INIT_WINDOW:
+               ANativeActivity_setWindowFlags(app->activity, AWINDOW_FLAG_KEEP_SCREEN_ON, 0);
                if(init_gl() == -1) {
                        exit(1);
                }
@@ -266,3 +273,39 @@ static unsigned long get_time_msec(void)
        }
        return (ts.tv_sec - ts0.tv_sec) * 1000 + (ts.tv_nsec - ts0.tv_nsec) / 1000000;
 }
+
+static void hide_navbar(struct android_app *state)
+{
+       JNIEnv *env;
+       jclass cactivity, cwin, cview;
+       jobject win, view;
+       jmethodID get_window, get_decor_view, set_system_ui_visibility;
+       jfieldID field_flag_fs, field_flag_hidenav, field_flag_immersive;
+       int flag_fs, flag_hidenav, flag_immersive;
+
+       (*state->activity->vm)->AttachCurrentThread(state->activity->vm, &env, 0);
+
+       cactivity = (*env)->FindClass(env, "android/app/NativeActivity");
+       get_window = (*env)->GetMethodID(env, cactivity, "getWindow", "()Landroid/view/Window;");
+
+       cwin = (*env)->FindClass(env, "android/view/Window");
+       get_decor_view = (*env)->GetMethodID(env, cwin, "getDecorView", "()Landroid/view/View;");
+
+       cview = (*env)->FindClass(env, "android/view/View");
+       set_system_ui_visibility = (*env)->GetMethodID(env, cview, "setSystemUiVisibility", "(I)V");
+
+       win = (*env)->CallObjectMethod(env, state->activity->clazz, get_window);
+       view = (*env)->CallObjectMethod(env, win, get_decor_view);
+
+       field_flag_fs = (*env)->GetStaticFieldID(env, cview, "SYSTEM_UI_FLAG_FULLSCREEN", "I");
+       field_flag_hidenav = (*env)->GetStaticFieldID(env, cview, "SYSTEM_UI_FLAG_HIDE_NAVIGATION", "I");
+       field_flag_immersive = (*env)->GetStaticFieldID(env, cview, "SYSTEM_UI_FLAG_IMMERSIVE_STICKY", "I");
+
+       flag_fs = (*env)->GetStaticIntField(env, cview, field_flag_fs);
+       flag_hidenav = (*env)->GetStaticIntField(env, cview, field_flag_hidenav);
+       flag_immersive = (*env)->GetStaticIntField(env, cview, field_flag_immersive);
+
+       (*env)->CallVoidMethod(env, view, set_system_ui_visibility, flag_fs | flag_hidenav | flag_immersive);
+
+       (*state->activity->vm)->DetachCurrentThread(state->activity->vm);
+}