mirror of
https://github.com/gsantner/dandelion
synced 2024-11-22 12:22:08 +01:00
Reworked sharing from activity #12
This commit is contained in:
parent
f7ce310703
commit
a3b10f090e
4 changed files with 97 additions and 182 deletions
|
@ -31,8 +31,6 @@ import android.content.Intent;
|
||||||
import android.content.IntentFilter;
|
import android.content.IntentFilter;
|
||||||
import android.content.pm.PackageManager;
|
import android.content.pm.PackageManager;
|
||||||
import android.graphics.Bitmap;
|
import android.graphics.Bitmap;
|
||||||
import android.graphics.Canvas;
|
|
||||||
import android.graphics.Paint;
|
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.Environment;
|
import android.os.Environment;
|
||||||
|
@ -511,177 +509,22 @@ public class MainActivity extends AppCompatActivity
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
case R.id.action_share: {
|
case R.id.action_share_link: {
|
||||||
final CharSequence[] options = {getString(R.string.share_link), getString(R.string.share_screenshot), getString(R.string.take_screenshot)};
|
|
||||||
new AlertDialog.Builder(MainActivity.this)
|
|
||||||
.setItems(options, new DialogInterface.OnClickListener() {
|
|
||||||
@Override
|
|
||||||
public void onClick(DialogInterface dialog, int item) {
|
|
||||||
if (options[item].equals(getString(R.string.share_link))) {
|
|
||||||
Intent sharingIntent = new Intent(Intent.ACTION_SEND);
|
Intent sharingIntent = new Intent(Intent.ACTION_SEND);
|
||||||
sharingIntent.setType("text/plain");
|
sharingIntent.setType("text/plain");
|
||||||
sharingIntent.putExtra(Intent.EXTRA_SUBJECT, webView.getTitle());
|
sharingIntent.putExtra(Intent.EXTRA_SUBJECT, webView.getTitle());
|
||||||
sharingIntent.putExtra(Intent.EXTRA_TEXT, webView.getUrl());
|
sharingIntent.putExtra(Intent.EXTRA_TEXT, webView.getUrl());
|
||||||
startActivity(Intent.createChooser(sharingIntent, "Share using"));
|
startActivity(Intent.createChooser(sharingIntent, "Share using"));
|
||||||
}
|
return true;
|
||||||
if (options[item].equals(getString(R.string.share_screenshot))) {
|
|
||||||
if (android.os.Build.VERSION.SDK_INT >= 23) {
|
|
||||||
int hasWRITE_EXTERNAL_STORAGE = checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE);
|
|
||||||
if (hasWRITE_EXTERNAL_STORAGE != PackageManager.PERMISSION_GRANTED) {
|
|
||||||
if (!shouldShowRequestPermissionRationale(Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
|
|
||||||
new AlertDialog.Builder(MainActivity.this)
|
|
||||||
.setMessage(R.string.permissions_screenshot)
|
|
||||||
.setPositiveButton(getString(android.R.string.yes), new DialogInterface.OnClickListener() {
|
|
||||||
@Override
|
|
||||||
public void onClick(DialogInterface dialog, int which) {
|
|
||||||
if (android.os.Build.VERSION.SDK_INT >= 23)
|
|
||||||
requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
|
|
||||||
REQUEST_CODE_ASK_PERMISSIONS);
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.setNegativeButton(getString(android.R.string.no), null)
|
|
||||||
.show();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
|
|
||||||
REQUEST_CODE_ASK_PERMISSIONS);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
File directory = new File(Environment.getExternalStorageDirectory() + "/Pictures/Diaspora/");
|
case R.id.action_take_screenshot: {
|
||||||
if (!directory.exists()) {
|
makeScreenshotOfWebView(false);
|
||||||
directory.mkdirs();
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
Date date = new Date();
|
case R.id.action_share_screenshot: {
|
||||||
DateFormat dateFormat = new SimpleDateFormat("dd-MM-yy_HH-mm", Locale.getDefault());
|
makeScreenshotOfWebView(true);
|
||||||
|
|
||||||
String filename = getString(R.string.toast_screenshot) + " " + Environment.getExternalStorageDirectory() + "/Pictures/Diaspora/" + dateFormat.format(date) + ".jpg";
|
|
||||||
Snackbar.make(swipeRefreshLayout, filename, Snackbar.LENGTH_LONG).show();
|
|
||||||
|
|
||||||
webView.measure(View.MeasureSpec.makeMeasureSpec(
|
|
||||||
View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED),
|
|
||||||
View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));
|
|
||||||
webView.layout(0, 0, webView.getMeasuredWidth(),
|
|
||||||
webView.getMeasuredHeight());
|
|
||||||
webView.setDrawingCacheEnabled(true);
|
|
||||||
webView.buildDrawingCache();
|
|
||||||
Bitmap bm = Bitmap.createBitmap(webView.getMeasuredWidth(),
|
|
||||||
webView.getMeasuredHeight(), Bitmap.Config.ARGB_8888);
|
|
||||||
|
|
||||||
Canvas bigcanvas = new Canvas(bm);
|
|
||||||
Paint paint = new Paint();
|
|
||||||
int iHeight = bm.getHeight();
|
|
||||||
bigcanvas.drawBitmap(bm, 0, iHeight, paint);
|
|
||||||
webView.draw(bigcanvas);
|
|
||||||
System.out.println("1111111111111111111111="
|
|
||||||
+ bigcanvas.getWidth());
|
|
||||||
System.out.println("22222222222222222222222="
|
|
||||||
+ bigcanvas.getHeight());
|
|
||||||
|
|
||||||
try {
|
|
||||||
OutputStream fOut;
|
|
||||||
File file = new File(Environment.getExternalStorageDirectory() + "/Pictures/Diaspora/", dateFormat.format(date) + ".jpg");
|
|
||||||
fOut = new FileOutputStream(file);
|
|
||||||
|
|
||||||
bm.compress(Bitmap.CompressFormat.PNG, 50, fOut);
|
|
||||||
fOut.flush();
|
|
||||||
fOut.close();
|
|
||||||
bm.recycle();
|
|
||||||
} catch (Exception e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
Intent sharingIntent = new Intent(Intent.ACTION_SEND);
|
|
||||||
sharingIntent.setType("image/png");
|
|
||||||
sharingIntent.putExtra(Intent.EXTRA_SUBJECT, webView.getTitle());
|
|
||||||
sharingIntent.putExtra(Intent.EXTRA_TEXT, webView.getUrl());
|
|
||||||
Uri bmpUri = Uri.fromFile(new File(Environment.getExternalStorageDirectory() + "/Pictures/Diaspora/"
|
|
||||||
+ dateFormat.format(date) + ".jpg"));
|
|
||||||
sharingIntent.putExtra(Intent.EXTRA_STREAM, bmpUri);
|
|
||||||
startActivity(Intent.createChooser(sharingIntent, "Share using"));
|
|
||||||
File file = new File(Environment.getExternalStorageDirectory() + "/Pictures/Diaspora/"
|
|
||||||
+ dateFormat.format(date) + ".jpg");
|
|
||||||
Uri uri = Uri.fromFile(file);
|
|
||||||
Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, uri);
|
|
||||||
sendBroadcast(intent);
|
|
||||||
}
|
|
||||||
if (options[item].equals(getString(R.string.take_screenshot))) {
|
|
||||||
if (android.os.Build.VERSION.SDK_INT >= 23) {
|
|
||||||
int hasWRITE_EXTERNAL_STORAGE = checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE);
|
|
||||||
if (hasWRITE_EXTERNAL_STORAGE != PackageManager.PERMISSION_GRANTED) {
|
|
||||||
if (!shouldShowRequestPermissionRationale(Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
|
|
||||||
new AlertDialog.Builder(MainActivity.this)
|
|
||||||
.setMessage(R.string.permissions_screenshot)
|
|
||||||
.setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
|
|
||||||
@Override
|
|
||||||
public void onClick(DialogInterface dialog, int which) {
|
|
||||||
if (android.os.Build.VERSION.SDK_INT >= 23)
|
|
||||||
requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
|
|
||||||
REQUEST_CODE_ASK_PERMISSIONS);
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.setNegativeButton(android.R.string.no, null)
|
|
||||||
.show();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
|
|
||||||
REQUEST_CODE_ASK_PERMISSIONS);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
File directory = new File(Environment.getExternalStorageDirectory() + "/Pictures/Diaspora/");
|
|
||||||
if (!directory.exists()) {
|
|
||||||
directory.mkdirs();
|
|
||||||
}
|
|
||||||
|
|
||||||
Date date = new Date();
|
|
||||||
DateFormat dateFormat = new SimpleDateFormat("dd-MM-yy_HH-mm", Locale.getDefault());
|
|
||||||
|
|
||||||
String filename = getString(R.string.toast_screenshot) + " " + Environment.getExternalStorageDirectory() + "/Pictures/Diaspora/" + dateFormat.format(date) + ".jpg";
|
|
||||||
Snackbar.make(swipeRefreshLayout, filename, Snackbar.LENGTH_LONG).show();
|
|
||||||
|
|
||||||
webView.measure(View.MeasureSpec.makeMeasureSpec(
|
|
||||||
View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED),
|
|
||||||
View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));
|
|
||||||
webView.layout(0, 0, webView.getMeasuredWidth(),
|
|
||||||
webView.getMeasuredHeight());
|
|
||||||
webView.setDrawingCacheEnabled(true);
|
|
||||||
webView.buildDrawingCache();
|
|
||||||
Bitmap bm = Bitmap.createBitmap(webView.getMeasuredWidth(),
|
|
||||||
webView.getMeasuredHeight(), Bitmap.Config.ARGB_8888);
|
|
||||||
|
|
||||||
Canvas bigcanvas = new Canvas(bm);
|
|
||||||
Paint paint = new Paint();
|
|
||||||
int iHeight = bm.getHeight();
|
|
||||||
bigcanvas.drawBitmap(bm, 0, iHeight, paint);
|
|
||||||
webView.draw(bigcanvas);
|
|
||||||
System.out.println("1111111111111111111111="
|
|
||||||
+ bigcanvas.getWidth());
|
|
||||||
System.out.println("22222222222222222222222="
|
|
||||||
+ bigcanvas.getHeight());
|
|
||||||
|
|
||||||
try {
|
|
||||||
OutputStream fOut;
|
|
||||||
File file = new File(Environment.getExternalStorageDirectory() + "/Pictures/Diaspora/", dateFormat.format(date) + ".jpg");
|
|
||||||
fOut = new FileOutputStream(file);
|
|
||||||
|
|
||||||
bm.compress(Bitmap.CompressFormat.PNG, 50, fOut);
|
|
||||||
fOut.flush();
|
|
||||||
fOut.close();
|
|
||||||
bm.recycle();
|
|
||||||
} catch (Exception e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
File file = new File(Environment.getExternalStorageDirectory() + "/Pictures/Diaspora/"
|
|
||||||
+ dateFormat.format(date) + ".jpg");
|
|
||||||
Uri uri = Uri.fromFile(file);
|
|
||||||
Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, uri);
|
|
||||||
sendBroadcast(intent);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}).show();
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -728,9 +571,86 @@ public class MainActivity extends AppCompatActivity
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return super.onOptionsItemSelected(item);
|
return super.onOptionsItemSelected(item);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private boolean makeScreenshotOfWebView(boolean hasToShareScreenshot) {
|
||||||
|
if (android.os.Build.VERSION.SDK_INT >= 23) {
|
||||||
|
int hasWRITE_EXTERNAL_STORAGE = checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE);
|
||||||
|
if (hasWRITE_EXTERNAL_STORAGE != PackageManager.PERMISSION_GRANTED) {
|
||||||
|
if (!shouldShowRequestPermissionRationale(Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
|
||||||
|
new AlertDialog.Builder(MainActivity.this)
|
||||||
|
.setMessage(R.string.permissions_screenshot)
|
||||||
|
.setNegativeButton(android.R.string.no, null)
|
||||||
|
.setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(DialogInterface dialog, int which) {
|
||||||
|
if (android.os.Build.VERSION.SDK_INT >= 23)
|
||||||
|
requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
|
||||||
|
REQUEST_CODE_ASK_PERMISSIONS);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.show();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
|
||||||
|
REQUEST_CODE_ASK_PERMISSIONS);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Date dateNow = new Date();
|
||||||
|
DateFormat dateFormat = new SimpleDateFormat("yy_MM_dd--HH_mm_ss", Locale.getDefault());
|
||||||
|
File fileSaveDirectory = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES) + "/Diaspora");
|
||||||
|
|
||||||
|
String fileSaveName = String.format("DfA_%s.jpg", dateFormat.format(dateNow));
|
||||||
|
if (!fileSaveDirectory.exists()) {
|
||||||
|
fileSaveDirectory.mkdirs();
|
||||||
|
}
|
||||||
|
|
||||||
|
Snackbar.make(swipeRefreshLayout, getString(R.string.toast_screenshot) + " " + fileSaveName, Snackbar.LENGTH_LONG).show();
|
||||||
|
|
||||||
|
Bitmap bitmap = null;
|
||||||
|
webView.setDrawingCacheEnabled(true);
|
||||||
|
bitmap = Bitmap.createBitmap(webView.getDrawingCache());
|
||||||
|
webView.setDrawingCacheEnabled(false);
|
||||||
|
|
||||||
|
OutputStream bitmapWriter = null;
|
||||||
|
try {
|
||||||
|
bitmapWriter = new FileOutputStream(new File(fileSaveDirectory, fileSaveName));
|
||||||
|
bitmap.compress(Bitmap.CompressFormat.JPEG, 85, bitmapWriter);
|
||||||
|
bitmapWriter.flush();
|
||||||
|
bitmap.recycle();
|
||||||
|
} catch (Exception e) {
|
||||||
|
return false;
|
||||||
|
} finally {
|
||||||
|
if (bitmapWriter != null) {
|
||||||
|
try {
|
||||||
|
bitmapWriter.close();
|
||||||
|
} catch (IOException _ignored) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Only show share intent when Action Share Screenshot was selected
|
||||||
|
if (hasToShareScreenshot) {
|
||||||
|
Intent sharingIntent = new Intent(Intent.ACTION_SEND);
|
||||||
|
sharingIntent.setType("image/jpeg");
|
||||||
|
sharingIntent.putExtra(Intent.EXTRA_SUBJECT, webView.getTitle());
|
||||||
|
sharingIntent.putExtra(Intent.EXTRA_TEXT, webView.getUrl());
|
||||||
|
Uri bmpUri = Uri.fromFile(new File(fileSaveDirectory, fileSaveName));
|
||||||
|
sharingIntent.putExtra(Intent.EXTRA_STREAM, bmpUri);
|
||||||
|
startActivity(Intent.createChooser(sharingIntent, getString(R.string.share_dotdodot)));
|
||||||
|
}
|
||||||
|
|
||||||
|
File file = new File(fileSaveDirectory, fileSaveName);
|
||||||
|
Uri uri = Uri.fromFile(file);
|
||||||
|
Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, uri);
|
||||||
|
sendBroadcast(intent);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
private void alertFormElements() {
|
private void alertFormElements() {
|
||||||
|
|
||||||
|
|
|
@ -18,22 +18,15 @@
|
||||||
android:title="@string/compose" />
|
android:title="@string/compose" />
|
||||||
|
|
||||||
<item
|
<item
|
||||||
android:id="@+id/action_share"
|
|
||||||
android:icon="@drawable/ic_share_white_24dp"
|
|
||||||
android:title="@string/jb_share"
|
|
||||||
app:showAsAction="always" />
|
|
||||||
|
|
||||||
<!--
|
|
||||||
<item
|
|
||||||
android:id="@+id/action_share2"
|
|
||||||
android:icon="@drawable/ic_share_white_24dp"
|
android:icon="@drawable/ic_share_white_24dp"
|
||||||
android:title="@string/jb_share"
|
android:title="@string/jb_share"
|
||||||
app:showAsAction="always" >
|
app:showAsAction="always" >
|
||||||
<menu>
|
<menu>
|
||||||
<item android:id="@+id/item1" android:title="@string/search_alert_people"></item>
|
<item android:id="@+id/action_share_screenshot" android:title="@string/share_screenshot"></item>
|
||||||
<item android:id="@+id/item2" android:title="@string/search_alert_tag"></item>
|
<item android:id="@+id/action_take_screenshot" android:title="@string/take_screenshot"></item>
|
||||||
|
<item android:id="@+id/action_share_link" android:title="@string/share_link"></item>
|
||||||
</menu>
|
</menu>
|
||||||
</item> -->
|
</item>
|
||||||
|
|
||||||
<!-- Keep right most -->
|
<!-- Keep right most -->
|
||||||
<item
|
<item
|
||||||
|
|
|
@ -165,5 +165,6 @@ along with this program. If not, see http://www.gnu.org/licenses.<br> <br
|
||||||
<string name="context_menu_open_external_browser">In externem Browser öffnen…</string>
|
<string name="context_menu_open_external_browser">In externem Browser öffnen…</string>
|
||||||
<string name="toast_saved_image_to_location">Speichere Bild als</string>
|
<string name="toast_saved_image_to_location">Speichere Bild als</string>
|
||||||
<string name="toast_link_address_copied">Linkadresse kopiert …</string>
|
<string name="toast_link_address_copied">Linkadresse kopiert …</string>
|
||||||
|
<string name="share_dotdodot">Teilen…</string>
|
||||||
|
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
@ -209,4 +209,5 @@
|
||||||
<string name="context_menu_copy_link">Copy link address to clipboard</string>
|
<string name="context_menu_copy_link">Copy link address to clipboard</string>
|
||||||
<string name="toast_saved_image_to_location">Saving image to</string>
|
<string name="toast_saved_image_to_location">Saving image to</string>
|
||||||
<string name="prefix_https" translatable="false">https://</string>
|
<string name="prefix_https" translatable="false">https://</string>
|
||||||
|
<string name="share_dotdodot">Share…</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
Loading…
Reference in a new issue