blob: f8d040dacd13f28cbec1ddf7bc9cd2e021ea86da [file] [log] [blame]
/*-------------------------------------------------------------------------
* drawElements Quality Program Tester Core
* ----------------------------------------
*
* Copyright 2014 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*//*!
* \file
* \brief ExecServer service.
*//*--------------------------------------------------------------------*/
package com.drawelements.deqp.execserver;
import android.app.Service;
import android.app.Notification;
import android.app.Notification.Builder;
import android.app.PendingIntent;
import android.content.Intent;
import android.os.Binder;
import android.os.IBinder;
import com.drawelements.deqp.execserver.ExecServerActivity;
import com.drawelements.deqp.testercore.Log;
import com.drawelements.deqp.R;
public class ExecService extends Service {
public static final String LOG_TAG = "dEQP";
public static final int DEFAULT_PORT = 50016;
private int m_curPort = -1;
private boolean m_isRunning = false;
static {
System.loadLibrary("deqp");
}
long m_server = 0; //!< Server pointer.
// \note No IPC handling, all clients must be in same process
public class LocalBinder extends Binder {
ExecService getService () {
return ExecService.this;
}
}
private final IBinder m_binder = new LocalBinder();
@Override
public int onStartCommand (Intent intent, int flags, int startId) {
final int port = intent != null ? intent.getIntExtra("port", DEFAULT_PORT) : DEFAULT_PORT;
if (m_isRunning && (m_curPort != port)) {
Log.i(LOG_TAG, String.format("Port changed (old: %d, new: %d), killing old server", m_curPort, port));
stopServer();
m_isRunning = false;
}
if (!m_isRunning) {
startServer(port);
m_isRunning = true;
m_curPort = port;
Log.i(LOG_TAG, String.format("Listening on port %d", m_curPort));
}
// Intent to launch when notification is clicked.
Intent launchIntent = new Intent(this, ExecServerActivity.class);
launchIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
PendingIntent pm = PendingIntent.getActivity(this, 0, launchIntent, 0);
// Start as foreground service.
Notification.Builder builder = new Notification.Builder(this);
Notification notification = builder.setContentIntent(pm)
.setSmallIcon(R.drawable.deqp_app_small).setTicker("ExecServer is running in the background.")
.setWhen(System.currentTimeMillis()).setAutoCancel(true).setContentTitle("dEQP ExecServer")
.setContentText("ExecServer is running in the background.").build();
startForeground(1, notification);
return START_STICKY; // Keep us running until explictly stopped
}
@Override
public IBinder onBind (Intent intent) {
return m_binder;
}
@Override
public void onDestroy () {
if (m_isRunning) {
stopServer();
m_isRunning = false;
}
}
private native void startServer (int port);
private native void stopServer ();
}