diff --git a/DroidFish/AndroidManifest.xml b/DroidFish/AndroidManifest.xml
index 415069a..e99888d 100644
--- a/DroidFish/AndroidManifest.xml
+++ b/DroidFish/AndroidManifest.xml
@@ -123,5 +123,14 @@
-
+
+
+
+
diff --git a/DroidFish/res/values/strings.xml b/DroidFish/res/values/strings.xml
index 5f1ee82..9d14728 100644
--- a/DroidFish/res/values/strings.xml
+++ b/DroidFish/res/values/strings.xml
@@ -33,8 +33,9 @@ you are not actively using the program.\
Copy Game to Clipboard
Copy Position to Clipboard
Paste from Clipboard
- Share
- Share PGN game
+ Share Game
+ Share as Text
+ Share as Image
Load from last file
Load game from PGN file
Load position from file
diff --git a/DroidFish/res/xml/filepaths.xml b/DroidFish/res/xml/filepaths.xml
new file mode 100644
index 0000000..b73a289
--- /dev/null
+++ b/DroidFish/res/xml/filepaths.xml
@@ -0,0 +1,3 @@
+
+
+
diff --git a/DroidFish/src/org/petero/droidfish/DroidFish.java b/DroidFish/src/org/petero/droidfish/DroidFish.java
index a7166ec..09e6216 100644
--- a/DroidFish/src/org/petero/droidfish/DroidFish.java
+++ b/DroidFish/src/org/petero/droidfish/DroidFish.java
@@ -21,9 +21,11 @@ package org.petero.droidfish;
import java.io.File;
import java.io.FileFilter;
+import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
+import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
@@ -97,6 +99,8 @@ import android.content.pm.ResolveInfo;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.content.res.Resources.NotFoundException;
+import android.graphics.Bitmap;
+import android.graphics.Canvas;
import android.graphics.Typeface;
import android.graphics.drawable.StateListDrawable;
import android.media.MediaPlayer;
@@ -108,7 +112,9 @@ import android.os.Handler;
import android.os.Vibrator;
import android.preference.PreferenceManager;
import android.support.v4.app.ActivityCompat;
+import android.support.v4.app.ShareCompat;
import android.support.v4.content.ContextCompat;
+import android.support.v4.content.FileProvider;
import android.support.v4.view.MotionEventCompat;
import android.support.v4.widget.DrawerLayout;
import android.text.Html;
@@ -2217,10 +2223,12 @@ public class DroidFish extends Activity
}
private final Dialog boardMenuDialog() {
- final int CLIPBOARD = 0;
- final int FILEMENU = 1;
- final int SHARE = 2;
- final int GET_FEN = 3;
+ final int CLIPBOARD = 0;
+ final int FILEMENU = 1;
+ final int SHARE_GAME = 2;
+ final int SHARE_TEXT = 3;
+ final int SHARE_IMAG = 4;
+ final int GET_FEN = 5;
setAutoMode(AutoMode.OFF);
List lst = new ArrayList();
@@ -2229,7 +2237,9 @@ public class DroidFish extends Activity
if (storageAvailable()) {
lst.add(getString(R.string.option_file)); actions.add(FILEMENU);
}
- lst.add(getString(R.string.share)); actions.add(SHARE);
+ lst.add(getString(R.string.share_game)); actions.add(SHARE_GAME);
+ lst.add(getString(R.string.share_text)); actions.add(SHARE_TEXT);
+ lst.add(getString(R.string.share_image)); actions.add(SHARE_IMAG);
if (hasFenProvider(getPackageManager())) {
lst.add(getString(R.string.get_fen)); actions.add(GET_FEN);
}
@@ -2239,19 +2249,22 @@ public class DroidFish extends Activity
builder.setItems(lst.toArray(new CharSequence[lst.size()]), new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int item) {
switch (finalActions.get(item)) {
- case CLIPBOARD: {
+ case CLIPBOARD:
showDialog(CLIPBOARD_DIALOG);
break;
- }
- case FILEMENU: {
+ case FILEMENU:
removeDialog(FILE_MENU_DIALOG);
showDialog(FILE_MENU_DIALOG);
break;
- }
- case SHARE: {
- shareGame();
+ case SHARE_GAME:
+ shareGameOrText(true);
+ break;
+ case SHARE_TEXT:
+ shareGameOrText(false);
+ break;
+ case SHARE_IMAG:
+ shareImage();
break;
- }
case GET_FEN:
getFen();
break;
@@ -2262,15 +2275,50 @@ public class DroidFish extends Activity
return alert;
}
- private final void shareGame() {
+ private final void shareGameOrText(boolean game) {
Intent i = new Intent(Intent.ACTION_SEND);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
- i.setType("text/plain");
+ i.setType(game ? "application/x-chess-pgn" : "text/plain");
i.putExtra(Intent.EXTRA_TEXT, ctrl.getPGN());
try {
- startActivity(Intent.createChooser(i, getString(R.string.share_pgn_game)));
+ startActivity(Intent.createChooser(i, getString(game ? R.string.share_game :
+ R.string.share_text)));
+ } catch (ActivityNotFoundException ex) {
+ }
+ }
+
+ private final void shareImage() {
+ View v = findViewById(R.id.main);
+ Bitmap b = Bitmap.createBitmap(v.getWidth(), v.getHeight(),
+ Bitmap.Config.ARGB_8888);
+ Canvas c = new Canvas(b);
+ v.draw(c);
+ File imgDir = new File(getFilesDir(), "images");
+ imgDir.mkdirs();
+ File file = new File(imgDir, "screenshot.png");
+ try {
+ OutputStream os = null;
+ try {
+ os = new FileOutputStream(file);
+ b.compress(Bitmap.CompressFormat.PNG, 100, os);
+ } finally {
+ if (os != null)
+ os.close();
+ }
+ } catch (IOException e) {
+ Toast.makeText(getApplicationContext(), e.getMessage(), Toast.LENGTH_LONG).show();
+ return;
+ }
+
+ String authority = "org.petero.droidfish.fileprovider";
+ Uri uri = FileProvider.getUriForFile(this, authority, file);
+
+ Intent i = new Intent(Intent.ACTION_SEND);
+ i.putExtra(Intent.EXTRA_STREAM, uri);
+ i.setType("image/png");
+ try {
+ startActivity(Intent.createChooser(i, getString(R.string.share_image)));
} catch (ActivityNotFoundException ex) {
- // Ignore
}
}