Files
Unity-Android-Live-Wallpaper/WallpaperActivity.java
Pavel Dobryakov 7b68d1e8a7 initial
2019-04-20 17:48:35 +03:00

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);
}
}
}