diff --git a/renderdoc/core/replay_proxy.cpp b/renderdoc/core/replay_proxy.cpp index da72fb7fae..5f32c94343 100644 --- a/renderdoc/core/replay_proxy.cpp +++ b/renderdoc/core/replay_proxy.cpp @@ -246,6 +246,7 @@ ReplayProxy::ReplayProxy(ReadSerialiser &reader, WriteSerialiser &writer, IRepla m_Proxy(proxy), m_Remote(NULL), m_Replay(NULL), + m_PreviewWindow(NULL), m_RemoteServer(false) { m_StructuredFile = new SDFile; diff --git a/renderdoccmd/CMakeLists.txt b/renderdoccmd/CMakeLists.txt index 94a5158e9e..19267ec3ff 100644 --- a/renderdoccmd/CMakeLists.txt +++ b/renderdoccmd/CMakeLists.txt @@ -224,6 +224,7 @@ if(ANDROID) # Copy in android package files, replacing the package name with the architecture-specific package name configure_file(android/Loader.java ${CMAKE_CURRENT_BINARY_DIR}/src/org/renderdoc/renderdoccmd/Loader.java) + configure_file(android/DummyService.java ${CMAKE_CURRENT_BINARY_DIR}/src/org/renderdoc/renderdoccmd/DummyService.java) configure_file(android/AndroidManifest.xml ${CMAKE_CURRENT_BINARY_DIR}/AndroidManifest.xml) configure_file(android/icon.png ${CMAKE_CURRENT_BINARY_DIR}/res/drawable/icon.png COPYONLY) diff --git a/renderdoccmd/android/AndroidManifest.xml b/renderdoccmd/android/AndroidManifest.xml index 81be33408a..f3e2bac896 100644 --- a/renderdoccmd/android/AndroidManifest.xml +++ b/renderdoccmd/android/AndroidManifest.xml @@ -7,7 +7,8 @@ - + + @@ -15,7 +16,9 @@ - + + + diff --git a/renderdoccmd/android/DummyService.java b/renderdoccmd/android/DummyService.java new file mode 100644 index 0000000000..3ecb70a334 --- /dev/null +++ b/renderdoccmd/android/DummyService.java @@ -0,0 +1,48 @@ +package @RENDERDOC_ANDROID_PACKAGE_NAME@; +import android.app.Notification; +import android.content.Intent; +import android.os.Binder; +import android.os.Handler; +import android.os.HandlerThread; +import android.os.IBinder; +import android.os.Looper; +import android.os.Message; +import android.os.Process; + +public class DummyService extends android.app.Service +{ + private Looper serviceLooper; + private Handler serviceHandler; + + @Override + public void onCreate() { + HandlerThread thread = new HandlerThread("DummyServiceThread", Process.THREAD_PRIORITY_BACKGROUND); + thread.start(); + + serviceLooper = thread.getLooper(); + serviceHandler = new Handler(serviceLooper); + } + + @Override + public int onStartCommand(Intent intent, int flags, int startId) { + Notification notification = new Notification.Builder(this) + .setPriority(Notification.PRIORITY_LOW) + .setSmallIcon(R.drawable.icon) + .setContentTitle("RenderDoc Dummy Foreground Service") + .setContentText("RenderDoc needs this dummy foreground service to prevent cached app freezer from interrupting the network connection") + .build(); + startForeground(startId, notification); + + // If we get killed, don't restart + return START_NOT_STICKY; + } + + @Override + public IBinder onBind(Intent intent) { + return null; + } + + @Override + public void onDestroy() { + } +} \ No newline at end of file diff --git a/renderdoccmd/android/Loader.java b/renderdoccmd/android/Loader.java index a97ec49dff..7c3a186cba 100644 --- a/renderdoccmd/android/Loader.java +++ b/renderdoccmd/android/Loader.java @@ -1,9 +1,11 @@ package @RENDERDOC_ANDROID_PACKAGE_NAME@; -import android.os.Build; import android.app.Activity; -import android.view.WindowManager; -import android.os.Environment; +import android.content.Context; import android.content.Intent; +import android.os.Build; +import android.os.Environment; +import android.os.PowerManager; +import android.view.WindowManager; public class Loader extends android.app.NativeActivity { @@ -17,6 +19,11 @@ protected void onCreate(android.os.Bundle savedInstanceState) { super.onCreate(savedInstanceState); getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); + Context context = getApplicationContext(); + if(context != null) { + context.startService(new Intent(this, DummyService.class)); + } + // if we're running on something older than Android M (6.0), return now // before requesting permissions as it's not supported if(Build.VERSION.SDK_INT < Build.VERSION_CODES.M)