X-Git-Url: http://git.hungrycats.org/cgi-bin/gitweb.cgi?p=xscreensaver;a=blobdiff_plain;f=android%2Fxscreensaver%2Fsrc%2Forg%2Fjwz%2Fxscreensaver%2FWallpaper.java;fp=android%2Fxscreensaver%2Fsrc%2Forg%2Fjwz%2Fxscreensaver%2FWallpaper.java;h=93896f2632c84c9f70ee339ac9b0f542d80d6932;hp=0000000000000000000000000000000000000000;hb=78add6e627ee5f10e1fa6f3852602ea5066eee5a;hpb=39809ded547bdbb08207d3e514950425215b4410 diff --git a/android/xscreensaver/src/org/jwz/xscreensaver/Wallpaper.java b/android/xscreensaver/src/org/jwz/xscreensaver/Wallpaper.java new file mode 100644 index 00000000..93896f26 --- /dev/null +++ b/android/xscreensaver/src/org/jwz/xscreensaver/Wallpaper.java @@ -0,0 +1,128 @@ +/* -*- Mode: java; indent-tabs-mode: nil; c-basic-offset: 2 -*- + * xscreensaver, Copyright (c) 2016-2018 Jamie Zawinski + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation. No representations are made about the suitability of this + * software for any purpose. It is provided "as is" without express or + * implied warranty. + * + * The superclass of every saver's Wallpaper. + * + * Each Wallpaper needs a distinct subclass in order to show up in the list. + * We know which saver we are running by the subclass name; we know which + * API to use by how the subclass calls super(). + */ + +package org.jwz.xscreensaver; + +import android.content.res.Configuration; +import android.service.wallpaper.WallpaperService; +import android.view.GestureDetector; +import android.view.SurfaceHolder; +import android.util.Log; +import java.lang.RuntimeException; +import java.lang.Thread; +import org.jwz.xscreensaver.jwxyz; +import android.graphics.PixelFormat; +import android.view.WindowManager; +import android.view.Display; +import android.graphics.Point; + +public class Wallpaper extends WallpaperService +/*implements GestureDetector.OnGestureListener, + GestureDetector.OnDoubleTapListener, */ { + + /* TODO: Input! */ + private Engine engine; + + @Override + public Engine onCreateEngine() { + // Log.d("xscreensaver", "tid = " + Thread.currentThread().getId()); + engine = new XScreenSaverGLEngine(); + return engine; + } + + @Override + public void onConfigurationChanged(Configuration config) { + super.onConfigurationChanged(config); + Log.d("xscreensaver", "wallpaper onConfigurationChanged"); + /* + WindowManager wm = (WindowManager) this.getSystemService(Context.WINDOW_SERVICE); + Display display = wm.getDefaultDisplay(); + Point size = new Point(); + display.getSize(size); + int width = size.x; + int height = size.y; + engine.onSurfaceChanged(engine.getSurfaceHolder(), PixelFormat.RGBA_8888, width, height); + */ + + } + + class XScreenSaverGLEngine extends Engine { + + private boolean initTried = false; + private jwxyz jwxyz_obj; + + @Override + public void onSurfaceCreated (SurfaceHolder holder) { + super.onSurfaceCreated(holder); + + if (!initTried) { + initTried = true; + } else { + if (jwxyz_obj != null) { + jwxyz_obj.close(); + jwxyz_obj = null; + } + } + } + + @Override + public void onVisibilityChanged(final boolean visible) { + if (jwxyz_obj != null) { + if (visible) + jwxyz_obj.start(); + else + jwxyz_obj.pause(); + } + } + + @Override + public void onSurfaceChanged (SurfaceHolder holder, int format, + int width, int height) { + + super.onSurfaceChanged(holder, format, width, height); + + if (width == 0 || height == 0) { + jwxyz_obj.close(); + jwxyz_obj = null; + } + + Log.d ("xscreensaver", + String.format("surfaceChanged: %dx%d", width, height)); + + if (jwxyz_obj == null) { + jwxyz_obj = new jwxyz (jwxyz.saverNameOf(Wallpaper.this), + Wallpaper.this, null, width, height, + holder.getSurface(), null); + } else { + jwxyz_obj.resize (width, height); + } + + jwxyz_obj.start(); + } + + @Override + public void onSurfaceDestroyed (SurfaceHolder holder) { + super.onSurfaceDestroyed (holder); + + if (jwxyz_obj != null) { + jwxyz_obj.close(); + jwxyz_obj = null; + } + } + } +}