Skip to content

Commit

Permalink
Incompatible hardware detetction added to OpenCV Manager(Feature open…
Browse files Browse the repository at this point in the history
  • Loading branch information
asmorkalov committed Apr 10, 2013
1 parent aef8e6b commit ec6f0e1
Show file tree
Hide file tree
Showing 4 changed files with 135 additions and 42 deletions.
42 changes: 31 additions & 11 deletions android/service/engine/src/org/opencv/engine/BinderConnector.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,23 +4,43 @@

public class BinderConnector
{
public BinderConnector(MarketConnector Market)
{
Init(Market);
public BinderConnector(MarketConnector Market) {
mMarket = Market;
}

public boolean Init() {
boolean result = false;
if (mIsReady)
result = Init(mMarket);

return result;
}

public native IBinder Connect();

public boolean Disconnect()
{
Final();
return true;
}
if (mIsReady)
Final();

static
{
System.loadLibrary("OpenCVEngine");
System.loadLibrary("OpenCVEngine_jni");
return mIsReady;
}

private native boolean Init(MarketConnector Market);
public native void Final();
private native void Final();
private static boolean mIsReady = false;
private MarketConnector mMarket;

static {
try {
System.loadLibrary("OpenCVEngine");
System.loadLibrary("OpenCVEngine_jni");
mIsReady = true;
}
catch(UnsatisfiedLinkError e) {
mIsReady = false;
e.printStackTrace();
}
}

}
16 changes: 12 additions & 4 deletions android/service/engine/src/org/opencv/engine/HardwareDetector.java
Original file line number Diff line number Diff line change
Expand Up @@ -47,9 +47,17 @@ public class HardwareDetector

public static native int DetectKnownPlatforms();

static
{
System.loadLibrary("OpenCVEngine");
System.loadLibrary("OpenCVEngine_jni");
public static boolean mIsReady = false;

static {
try {
System.loadLibrary("OpenCVEngine");
System.loadLibrary("OpenCVEngine_jni");
mIsReady = true;
}
catch(UnsatisfiedLinkError e) {
mIsReady = false;
e.printStackTrace();
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,31 +3,62 @@
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.os.RemoteException;
import android.util.Log;


public class OpenCVEngineService extends Service
{
private static final String TAG = "OpenCVEngine/Service";
private IBinder mEngineInterface;
private IBinder mEngineInterface = null;
private MarketConnector mMarket;
private BinderConnector mNativeBinder;
public void onCreate()
{

public void onCreate() {
Log.i(TAG, "Service starting");
super.onCreate();
Log.i(TAG, "Engine binder component creating");
mMarket = new MarketConnector(getBaseContext());
mNativeBinder = new BinderConnector(mMarket);
mEngineInterface = mNativeBinder.Connect();
Log.i(TAG, "Service started successfully");
if (mNativeBinder.Init()) {
mEngineInterface = mNativeBinder.Connect();
Log.i(TAG, "Service started successfully");
} else {
Log.e(TAG, "Cannot initialize native part of OpenCV Manager!");
Log.e(TAG, "Using stub instead");

mEngineInterface = new OpenCVEngineInterface.Stub() {

@Override
public boolean installVersion(String version) throws RemoteException {
// TODO Auto-generated method stub
return false;
}

@Override
public String getLibraryList(String version) throws RemoteException {
// TODO Auto-generated method stub
return null;
}

@Override
public String getLibPathByVersion(String version) throws RemoteException {
// TODO Auto-generated method stub
return null;
}

@Override
public int getEngineVersion() throws RemoteException {
return -1;
}
};
}
}

public IBinder onBind(Intent intent)
{
public IBinder onBind(Intent intent) {
Log.i(TAG, "Service onBind called for intent " + intent.toString());
return mEngineInterface;
}

public boolean onUnbind(Intent intent)
{
Log.i(TAG, "Service onUnbind called for intent " + intent.toString());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,26 @@ public class ManagerActivity extends Activity
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

if (!HardwareDetector.mIsReady) {
Log.e(TAG, "Cannot initialize native part of OpenCV Manager!");

AlertDialog dialog = new AlertDialog.Builder(this).create();

dialog.setTitle("OpenCV Manager Error");
dialog.setMessage("OpenCV Manager is incompatible with this device. Please replace it with an appropriate package.");
dialog.setCancelable(false);
dialog.setButton("OK", new DialogInterface.OnClickListener() {

public void onClick(DialogInterface dialog, int which) {
finish();
}
});

dialog.show();
return;
}

setContentView(R.layout.main);

TextView OsVersionView = (TextView)findViewById(R.id.OsVersionValue);
Expand Down Expand Up @@ -186,6 +206,20 @@ public void onItemClick(AdapterView<?> adapter, View view, int position, long id
}
});

mPackageChangeReciever = new BroadcastReceiver() {

@Override
public void onReceive(Context context, Intent intent) {
Log.d("OpenCVManager/Reciever", "Bradcast message " + intent.getAction() + " reciever");
Log.d("OpenCVManager/Reciever", "Filling package list on broadcast message");
if (!bindService(new Intent("org.opencv.engine.BIND"), new OpenCVEngineServiceConnection(), Context.BIND_AUTO_CREATE))
{
TextView EngineVersionView = (TextView)findViewById(R.id.EngineVersionValue);
EngineVersionView.setText("not avaliable");
}
}
};

IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_PACKAGE_ADDED);
filter.addAction(Intent.ACTION_PACKAGE_CHANGED);
Expand All @@ -199,17 +233,23 @@ public void onItemClick(AdapterView<?> adapter, View view, int position, long id
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(mPackageChangeReciever);
if (mPackageChangeReciever != null)
unregisterReceiver(mPackageChangeReciever);
}

@Override
protected void onResume() {
super.onResume();
Log.d(TAG, "Filling package list on resume");
if (!bindService(new Intent("org.opencv.engine.BIND"), new OpenCVEngineServiceConnection(), Context.BIND_AUTO_CREATE))
{
TextView EngineVersionView = (TextView)findViewById(R.id.EngineVersionValue);
EngineVersionView.setText("not avaliable");
if (HardwareDetector.mIsReady) {
Log.d(TAG, "Filling package list on resume");
OpenCVEngineServiceConnection connection = new OpenCVEngineServiceConnection();
if (!bindService(new Intent("org.opencv.engine.BIND"), connection, Context.BIND_AUTO_CREATE)) {
Log.e(TAG, "Cannot bind to OpenCV Manager service!");
TextView EngineVersionView = (TextView)findViewById(R.id.EngineVersionValue);
if (EngineVersionView != null)
EngineVersionView.setText("not avaliable");
unbindService(connection);
}
}
}

Expand All @@ -225,19 +265,7 @@ protected void onResume() {
protected int ManagerApiLevel = 0;
protected String ManagerVersion;

protected BroadcastReceiver mPackageChangeReciever = new BroadcastReceiver() {

@Override
public void onReceive(Context context, Intent intent) {
Log.d("OpenCVManager/Reciever", "Bradcast message " + intent.getAction() + " reciever");
Log.d("OpenCVManager/Reciever", "Filling package list on broadcast message");
if (!bindService(new Intent("org.opencv.engine.BIND"), new OpenCVEngineServiceConnection(), Context.BIND_AUTO_CREATE))
{
TextView EngineVersionView = (TextView)findViewById(R.id.EngineVersionValue);
EngineVersionView.setText("not avaliable");
}
}
};
protected BroadcastReceiver mPackageChangeReciever = null;

protected class OpenCVEngineServiceConnection implements ServiceConnection
{
Expand All @@ -246,6 +274,12 @@ public void onServiceDisconnected(ComponentName name) {

public void onServiceConnected(ComponentName name, IBinder service) {
OpenCVEngineInterface EngineService = OpenCVEngineInterface.Stub.asInterface(service);
if (EngineService == null) {
Log.e(TAG, "Cannot connect to OpenCV Manager Service!");
unbindService(this);
return;
}

try {
ManagerApiLevel = EngineService.getEngineVersion();
} catch (RemoteException e) {
Expand Down

0 comments on commit ec6f0e1

Please sign in to comment.