Allow to retrieve connection status

This tells, if a connection to APG *might* be possible (right version of
APG found)
This commit is contained in:
Markus Doits 2011-01-23 21:37:06 +00:00
parent 66263ab6e3
commit 3372e57157

View File

@ -29,7 +29,7 @@ import org.thialfihar.android.apg.IApgService;
* </p> * </p>
* *
* @author Markus Doits <markus.doits@googlemail.com> * @author Markus Doits <markus.doits@googlemail.com>
* @version 0.9 * @version 0.9.1
* *
*/ */
public class ApgCon { public class ApgCon {
@ -87,6 +87,7 @@ public class ApgCon {
private final static int api_version = 1; // aidl api-version it expects private final static int api_version = 1; // aidl api-version it expects
private final Context mContext; private final Context mContext;
private final error connection_status;
private boolean async_running = false; private boolean async_running = false;
private Object callback_object; private Object callback_object;
private String callback_method; private String callback_method;
@ -121,6 +122,7 @@ public class ApgCon {
* *
*/ */
public static enum error { public static enum error {
NO_ERROR,
/** /**
* generic error * generic error
*/ */
@ -144,7 +146,8 @@ public class ApgCon {
/** /**
* found APG but without AIDL interface * found APG but without AIDL interface
*/ */
APG_AIDL_MISSING APG_AIDL_MISSING,
APG_API_MISSMATCH
} }
private static enum ret { private static enum ret {
@ -169,12 +172,14 @@ public class ApgCon {
Log.v(TAG, "EncryptionService created"); Log.v(TAG, "EncryptionService created");
mContext = ctx; mContext = ctx;
error tmp_connection_status = null;
try { try {
Log.v(TAG, "Searching for the right APG version"); Log.v(TAG, "Searching for the right APG version");
ServiceInfo apg_services[] = ctx.getPackageManager().getPackageInfo("org.thialfihar.android.apg", ServiceInfo apg_services[] = ctx.getPackageManager().getPackageInfo("org.thialfihar.android.apg",
PackageManager.GET_SERVICES | PackageManager.GET_META_DATA).services; PackageManager.GET_SERVICES | PackageManager.GET_META_DATA).services;
if (apg_services == null) { if (apg_services == null) {
Log.e(TAG, "Could not fetch services"); Log.e(TAG, "Could not fetch services");
tmp_connection_status = error.GENERIC;
} else { } else {
boolean apg_service_found = false; boolean apg_service_found = false;
for (ServiceInfo inf : apg_services) { for (ServiceInfo inf : apg_services) {
@ -185,12 +190,15 @@ public class ApgCon {
Log.w(TAG, "Could not determine ApgService API"); Log.w(TAG, "Could not determine ApgService API");
Log.w(TAG, "This probably won't work!"); Log.w(TAG, "This probably won't work!");
warning_list.add("(LOCAL) Could not determine ApgService API"); warning_list.add("(LOCAL) Could not determine ApgService API");
tmp_connection_status = error.APG_API_MISSMATCH;
} else if (inf.metaData.getInt("api_version") != api_version) { } else if (inf.metaData.getInt("api_version") != api_version) {
Log.w(TAG, "Found ApgService API version" + inf.metaData.getInt("api_version") + " but exspected " + api_version); Log.w(TAG, "Found ApgService API version" + inf.metaData.getInt("api_version") + " but exspected " + api_version);
Log.w(TAG, "This probably won't work!"); Log.w(TAG, "This probably won't work!");
warning_list.add("(LOCAL) Found ApgService API version" + inf.metaData.getInt("api_version") + " but exspected " + api_version); warning_list.add("(LOCAL) Found ApgService API version" + inf.metaData.getInt("api_version") + " but exspected " + api_version);
tmp_connection_status = error.APG_API_MISSMATCH;
} else { } else {
Log.v(TAG, "Found api_version " + api_version + ", everything should work"); Log.v(TAG, "Found api_version " + api_version + ", everything should work");
tmp_connection_status = error.NO_ERROR;
} }
} }
} }
@ -199,6 +207,7 @@ public class ApgCon {
Log.e(TAG, "Could not find APG with AIDL interface, this probably won't work"); Log.e(TAG, "Could not find APG with AIDL interface, this probably won't work");
error_list.add("(LOCAL) Could not find APG with AIDL interface, this probably won't work"); error_list.add("(LOCAL) Could not find APG with AIDL interface, this probably won't work");
result.putInt(ret.ERROR.name(), error.APG_AIDL_MISSING.ordinal()); result.putInt(ret.ERROR.name(), error.APG_AIDL_MISSING.ordinal());
tmp_connection_status = error.APG_NOT_FOUND;
} }
} }
} catch (PackageManager.NameNotFoundException e) { } catch (PackageManager.NameNotFoundException e) {
@ -207,7 +216,10 @@ public class ApgCon {
Log.e(TAG, "Could not find APG, is it installed?"); Log.e(TAG, "Could not find APG, is it installed?");
error_list.add("(LOCAL) Could not find APG, is it installed?"); error_list.add("(LOCAL) Could not find APG, is it installed?");
result.putInt(ret.ERROR.name(), error.APG_NOT_FOUND.ordinal()); result.putInt(ret.ERROR.name(), error.APG_NOT_FOUND.ordinal());
tmp_connection_status = error.APG_NOT_FOUND;
} }
connection_status = tmp_connection_status;
} }
/** try to connect to the apg service */ /** try to connect to the apg service */
@ -649,6 +661,10 @@ public class ApgCon {
return result; return result;
} }
public error get_connection_status() {
return connection_status;
}
/** /**
* Clears all unfetched errors * Clears all unfetched errors
* *