diff --git a/examples/pgp/PgpConnect.java b/examples/pgp/PgpConnect.java index fb2ef17..db498f0 100644 --- a/examples/pgp/PgpConnect.java +++ b/examples/pgp/PgpConnect.java @@ -63,6 +63,11 @@ public class PgpConnect extends Fragment { Log.d("gio", "onActivityResult(" + requestCode + "): " + resultCode); super.onActivityResult(requestCode, resultCode, data); //activityResult(requestCode, resultCode); + if (resultCode != Activity.RESULT_OK) { + Log.d("gio", "onActivityResult: not OK"); + stringResult(requestCode, null); + return; + } switch (data.getAction()) { case OpenPgpApi.ACTION_DECRYPT_VERIFY: { Log.d("gio", "action decrypt"); diff --git a/examples/pgp/jni_android.c b/examples/pgp/jni_android.c index e3c88a7..ebfc1f3 100644 --- a/examples/pgp/jni_android.c +++ b/examples/pgp/jni_android.c @@ -66,8 +66,12 @@ Decrypt(JNIEnv* env, jobject p, char* cdata, int datalen, int chint) { } void stringResult(JNIEnv* env, jclass cls, jint requestCode, jobject response) { - char* str = (*env)->GetStringUTFChars(env, response, NULL); - goStringResult(env, cls, requestCode, str); + if (response == 0) { + goStringResult(env, cls, requestCode, 0); + } else { + char* str = (*env)->GetStringUTFChars(env, response, NULL); + goStringResult(env, cls, requestCode, str); + } } const char* diff --git a/examples/pgp/jni_android.go b/examples/pgp/jni_android.go index cd7d788..b9dbac4 100644 --- a/examples/pgp/jni_android.go +++ b/examples/pgp/jni_android.go @@ -70,7 +70,7 @@ var ( chint int ) -func (p PGP) Decrypt(data string) string { +func (p PGP) Decrypt(data string) (string, error) { ch := make(chan string) chmux.Lock() if fragChans == nil { @@ -87,10 +87,15 @@ func (p PGP) Decrypt(data string) string { retc := C.Decrypt(env, (C.jobject)(p), (*C.char)(unsafe.Pointer(cdata)), (C.int)(len(data)), C.int(curint)) defer C.free(unsafe.Pointer(retc)) }) - return <-ch + switch x := <-ch; { + case x == "": + return "", fmt.Errorf("Decryption failed") + default: + return x, nil + } } -func (p PGP) Encrypt(id, data string) string { +func (p PGP) Encrypt(id, data string) (string, error) { ch := make(chan string) chmux.Lock() if fragChans == nil { @@ -109,7 +114,12 @@ func (p PGP) Encrypt(id, data string) string { retc := C.Encrypt(env, (C.jobject)(p), (*C.char)(unsafe.Pointer(cid)), (C.int)(len(id)), (*C.char)(unsafe.Pointer(cdata)), (C.int)(len(data)), C.int(curint)) defer C.free(unsafe.Pointer(retc)) }) - return <-ch + switch x := <-ch; { + case x == "": + return "", fmt.Errorf("Encryption failed") + default: + return x, nil + } } func RunInJVM(f func(env *C.JNIEnv)) { diff --git a/examples/pgp/os_android.go b/examples/pgp/os_android.go index 798815f..8b69462 100644 --- a/examples/pgp/os_android.go +++ b/examples/pgp/os_android.go @@ -47,10 +47,19 @@ func callJni() { labchan <- fmt.Sprintf("Activity = %d", h.Activity) time.Sleep(time.Second / 5) - val := pgp.Encrypt("greg_pomerantz@yahoo.com", "hi there") - //val := pgp.Encrypt("root@example.com", "hi there") + val, err := pgp.Encrypt("greg_pomerantz@yahoo.com", "hi there") + if err != nil { + fmt.Printf("Encryption error: %s", err) + labchan <- err.Error() + return + } log.Print("val = ", val) - val2 := pgp.Decrypt(val) + val2, err := pgp.Decrypt(val) + if err != nil { + fmt.Printf("Decryption error: %s", err) + labchan <- err.Error() + return + } labchan <- "result = " + val2 }