mirror of
https://github.com/PavelDoGreat/Unity-Android-Live-Wallpaper.git
synced 2026-01-08 22:08:05 -05:00
163 lines
4.7 KiB
Java
163 lines
4.7 KiB
Java
package change.packagename.here;
|
|
|
|
import android.annotation.TargetApi;
|
|
import android.app.WallpaperColors;
|
|
import android.content.res.Configuration;
|
|
import android.graphics.Color;
|
|
import android.os.Build;
|
|
import android.service.wallpaper.WallpaperService;
|
|
import android.util.Log;
|
|
import android.view.MotionEvent;
|
|
import android.view.SurfaceHolder;
|
|
import android.view.WindowInsets;
|
|
import android.content.Context;
|
|
|
|
import com.unity3d.player.UnityPlayer;
|
|
|
|
class MyUnityPlayer extends UnityPlayer
|
|
{
|
|
public MyUnityPlayer (Context var)
|
|
{
|
|
super(var);
|
|
}
|
|
}
|
|
|
|
public class WallpaperActivity extends WallpaperService
|
|
{
|
|
MyUnityPlayer mUnityPlayer;
|
|
int mVisibleSurfaces = 0;
|
|
|
|
@Override public void onCreate ()
|
|
{
|
|
super.onCreate();
|
|
mUnityPlayer = new MyUnityPlayer(getApplicationContext());
|
|
}
|
|
|
|
@Override public void onDestroy ()
|
|
{
|
|
mUnityPlayer.quit();
|
|
super.onDestroy();
|
|
}
|
|
|
|
@Override public Engine onCreateEngine ()
|
|
{
|
|
return new MyEngine();
|
|
}
|
|
|
|
@Override public void onLowMemory ()
|
|
{
|
|
super.onLowMemory();
|
|
mUnityPlayer.lowMemory();
|
|
}
|
|
|
|
@Override public void onTrimMemory(int level)
|
|
{
|
|
super.onTrimMemory(level);
|
|
if (level == TRIM_MEMORY_RUNNING_CRITICAL)
|
|
mUnityPlayer.lowMemory();
|
|
}
|
|
|
|
@Override public void onConfigurationChanged (Configuration newConfig)
|
|
{
|
|
super.onConfigurationChanged(newConfig);
|
|
mUnityPlayer.configurationChanged(newConfig);
|
|
}
|
|
|
|
void Log (String message)
|
|
{
|
|
Log.d("LiveWallpaper", message);
|
|
}
|
|
|
|
class MyEngine extends Engine
|
|
{
|
|
SurfaceHolder mHolder;
|
|
boolean isPreview = false;
|
|
|
|
@Override public void onCreate (SurfaceHolder holder)
|
|
{
|
|
Log("Create");
|
|
super.onCreate(holder);
|
|
isPreview = isPreview();
|
|
setTouchEventsEnabled(true);
|
|
setOffsetNotificationsEnabled(false);
|
|
mUnityPlayer.UnitySendMessage("AppController", "TriggerIsWallpaper", isPreview ? "true" : "false");
|
|
}
|
|
|
|
@Override public void onDestroy ()
|
|
{
|
|
Log("Destroy");
|
|
super.onDestroy();
|
|
}
|
|
|
|
@Override public void onApplyWindowInsets (WindowInsets insets)
|
|
{
|
|
super.onApplyWindowInsets(insets);
|
|
int insetTop = 40;
|
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
|
|
insetTop = insets.getStableInsetTop();
|
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P)
|
|
insetTop += 140;
|
|
mUnityPlayer.UnitySendMessage("AppController", "ReceiveWindowInset", Integer.toString(insetTop));
|
|
}
|
|
|
|
@TargetApi(Build.VERSION_CODES.O_MR1)
|
|
@Override public WallpaperColors onComputeColors ()
|
|
{
|
|
Color color = Color.valueOf(Color.BLACK);
|
|
return new WallpaperColors(color, color, color);
|
|
}
|
|
|
|
@Override public void onSurfaceCreated (SurfaceHolder holder)
|
|
{
|
|
Log("SurfaceCreated");
|
|
super.onSurfaceCreated(holder);
|
|
mHolder = holder;
|
|
}
|
|
|
|
@Override public void onSurfaceChanged (SurfaceHolder holder, int format, int width, int height)
|
|
{
|
|
Log("SurfaceChanged, width: " + width + ", height: " + height);
|
|
super.onSurfaceChanged(holder, format, width, height);
|
|
mHolder = holder;
|
|
mUnityPlayer.displayChanged(0, mHolder.getSurface());
|
|
}
|
|
|
|
@Override public void onVisibilityChanged (boolean visible)
|
|
{
|
|
Log("VisibilityChanged, isPreview: " + isPreview + ", visible: " + visible);
|
|
super.onVisibilityChanged(visible);
|
|
|
|
if (visible)
|
|
{
|
|
mVisibleSurfaces++;
|
|
if (mHolder != null)
|
|
mUnityPlayer.displayChanged(0, mHolder.getSurface());
|
|
mUnityPlayer.windowFocusChanged(true);
|
|
mUnityPlayer.resume();
|
|
mUnityPlayer.UnitySendMessage("AppController", "TriggerVisible", isPreview ? "true" : "false");
|
|
return;
|
|
}
|
|
|
|
mVisibleSurfaces--;
|
|
mVisibleSurfaces = Math.max(mVisibleSurfaces, 0);
|
|
if (mVisibleSurfaces == 0)
|
|
{
|
|
mUnityPlayer.displayChanged(0, null);
|
|
mUnityPlayer.windowFocusChanged(false);
|
|
mUnityPlayer.pause();
|
|
}
|
|
}
|
|
|
|
@Override public void onSurfaceDestroyed (SurfaceHolder holder)
|
|
{
|
|
Log("SurfaceDestroyed");
|
|
super.onSurfaceDestroyed(holder);
|
|
}
|
|
|
|
@Override public void onTouchEvent (MotionEvent event)
|
|
{
|
|
super.onTouchEvent(event);
|
|
mUnityPlayer.injectEvent(event);
|
|
}
|
|
}
|
|
} |