Add broken support for auto sharing screenshots taken on android

This commit is contained in:
UnknownShadow200 2020-09-27 16:03:07 +10:00
parent fe44fb336d
commit 2cdd20b4ae
4 changed files with 50 additions and 8 deletions

View File

@ -465,6 +465,23 @@ public class MainActivity extends Activity implements SurfaceHolder.Callback2 {
// wait for dialog to be closed
// TODO: this fails because multiple dialog boxes show
}
public String shareScreenshot(String path) {
try {
File file = new File(getExternalAppDir() + path);
Intent intent = new Intent();
intent.setAction(Intent.ACTION_SEND);
intent.putExtra(Intent.EXTRA_TEXT, "Check out my app.");
intent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(file));
intent.setType("image/png");
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
startActivity(Intent.createChooser(intent, "share via"));
} catch (Exception ex) {
return ex.toString();
}
return "";
}
// ======================================
// ---------------- HTTP ----------------

View File

@ -568,8 +568,16 @@ void Game_TakeScreenshot(void) {
res = stream.Close(&stream);
if (res) { Logger_Warn2(res, "closing", &path); return; }
Chat_Add1("&eTaken screenshot as: %s", &filename);
#ifdef CC_BUILD_ANDROID
filename.length = 0;
JavaCall_String_String("shareScreenshot", &path, &filename);
if (!filename.length) return;
Chat_AddRaw("&cError sharing screenshot");
Chat_Add1(" &c%s", &filename);
#endif
#endif
}

View File

@ -1938,21 +1938,36 @@ void JavaCall_String_Void(const char* name, const String* value) {
(*env)->DeleteLocalRef(env, args[0].l);
}
void JavaCall_Void_String(const char* name, String* dst) {
static void ReturnString(JNIEnv* env, jobject obj, String* dst) {
const jchar* src;
jsize len;
if (!obj) return;
src = (*env)->GetStringChars(env, obj, NULL);
len = (*env)->GetStringLength(env, obj);
String_AppendUtf16(dst, src, len * 2);
(*env)->ReleaseStringChars(env, obj, src);
(*env)->DeleteLocalRef(env, obj);
}
void JavaCall_Void_String(const char* name, String* dst) {
JNIEnv* env;
jobject obj;
JavaGetCurrentEnv(env);
obj = JavaCallObject(env, name, "()Ljava/lang/String;", NULL);
if (!obj) return;
ReturnString(env, obj, dst);
}
src = (*env)->GetStringChars(env, obj, NULL);
len = (*env)->GetStringLength(env, obj);
String_AppendUtf16(dst, src, len * 2);
void JavaCall_String_String(const char* name, const String* arg, String* dst) {
JNIEnv* env;
jobject obj;
jvalue args[1];
JavaGetCurrentEnv(env);
(*env)->ReleaseStringChars(env, obj, src);
(*env)->DeleteLocalRef(env, obj);
args[0].l = JavaMakeString(env, arg);
obj = JavaCallObject(env, name, "(Ljava/lang/String;)Ljava/lang/String;", args);
ReturnString(env, obj, dst);
(*env)->DeleteLocalRef(env, args[0].l);
}
#endif

View File

@ -258,5 +258,7 @@ jobject JavaCallObject(JNIEnv* env, const char* name, const char* sig, jvalue* a
void JavaCall_String_Void(const char* name, const String* value);
/* Calls a method in the activity class that takes no arguments and returns a string. */
void JavaCall_Void_String(const char* name, String* dst);
/* Calls a method in the activity class that takes a string and returns a string. */
void JavaCall_String_String(const char* name, const String* arg, String* dst);
#endif
#endif