Added option to remove EXIF location

This commit is contained in:
M66B
2020-04-18 12:06:10 +02:00
parent a1669915e7
commit 873d568d23
3 changed files with 50 additions and 9 deletions

View File

@@ -97,6 +97,7 @@ import androidx.constraintlayout.widget.Group;
import androidx.core.content.FileProvider;
import androidx.cursoradapter.widget.SimpleCursorAdapter;
import androidx.documentfile.provider.DocumentFile;
import androidx.exifinterface.media.ExifInterface;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction;
@@ -460,7 +461,7 @@ public class FragmentCompose extends FragmentBase {
etBody.setInputContentListener(new EditTextCompose.IInputContentListener() {
@Override
public void onInputContent(Uri uri) {
onAddAttachment(Arrays.asList(uri), true, 0);
onAddAttachment(Arrays.asList(uri), true, 0, false);
}
});
@@ -1701,7 +1702,7 @@ public class FragmentCompose extends FragmentBase {
case REQUEST_ATTACHMENT:
case REQUEST_RECORD_AUDIO:
if (resultCode == RESULT_OK && data != null)
onAddAttachment(getUris(data), false, 0);
onAddAttachment(getUris(data), false, 0, false);
break;
case REQUEST_OPENPGP:
if (resultCode == RESULT_OK && data != null)
@@ -1876,16 +1877,18 @@ public class FragmentCompose extends FragmentBase {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getContext());
boolean add_inline = prefs.getBoolean("add_inline", true);
boolean resize_images = prefs.getBoolean("resize_images", true);
boolean privacy_images = prefs.getBoolean("privacy_images", false);
int resize = prefs.getInt("resize", FragmentCompose.REDUCED_IMAGE_SIZE);
onAddAttachment(uri, add_inline, resize_images ? resize : 0);
onAddAttachment(uri, add_inline, resize_images ? resize : 0, privacy_images);
}
private void onAddAttachment(List<Uri> uris, boolean image, int resize) {
private void onAddAttachment(List<Uri> uris, boolean image, int resize, boolean privacy) {
Bundle args = new Bundle();
args.putLong("id", working);
args.putParcelableArrayList("uris", new ArrayList<>(uris));
args.putBoolean("image", image);
args.putInt("resize", resize);
args.putBoolean("privacy", privacy);
args.putCharSequence("body", etBody.getText());
args.putInt("start", etBody.getSelectionStart());
@@ -1896,13 +1899,14 @@ public class FragmentCompose extends FragmentBase {
List<Uri> uris = args.getParcelableArrayList("uris");
boolean image = args.getBoolean("image");
int resize = args.getInt("resize");
boolean privacy = args.getBoolean("privacy");
CharSequence body = args.getCharSequence("body");
int start = args.getInt("start");
SpannableStringBuilder s = new SpannableStringBuilder(body);
for (Uri uri : uris) {
EntityAttachment attachment = addAttachment(context, id, uri, image, resize);
EntityAttachment attachment = addAttachment(context, id, uri, image, resize, privacy);
if (!image)
continue;
@@ -2710,8 +2714,8 @@ public class FragmentCompose extends FragmentBase {
}
private static EntityAttachment addAttachment(
Context context, long id, Uri uri, boolean image, int resize) throws IOException {
Log.w("Add attachment uri=" + uri + " image=" + image + " resize=" + resize);
Context context, long id, Uri uri, boolean image, int resize, boolean privacy) throws IOException {
Log.w("Add attachment uri=" + uri + " image=" + image + " resize=" + resize + " privacy=" + privacy);
if (!"content".equals(uri.getScheme()) &&
!Helper.hasPermission(context, Manifest.permission.READ_EXTERNAL_STORAGE)) {
@@ -2832,6 +2836,20 @@ public class FragmentCompose extends FragmentBase {
if (resize > 0)
resizeAttachment(context, attachment, resize);
if (privacy)
try {
ExifInterface exif = new ExifInterface(file.getAbsolutePath());
exif.setAttribute(ExifInterface.TAG_GPS_LATITUDE_REF, null);
exif.setAttribute(ExifInterface.TAG_GPS_LATITUDE, null);
exif.setAttribute(ExifInterface.TAG_GPS_LONGITUDE_REF, null);
exif.setAttribute(ExifInterface.TAG_GPS_LONGITUDE, null);
exif.setAttribute(ExifInterface.TAG_GPS_ALTITUDE_REF, null);
exif.setAttribute(ExifInterface.TAG_GPS_ALTITUDE, null);
exif.saveAttributes();
} catch (IOException ex) {
Log.w(ex);
}
} catch (Throwable ex) {
// Reset progress on failure
Log.e(ex);
@@ -3446,7 +3464,7 @@ public class FragmentCompose extends FragmentBase {
if (uris != null)
for (Uri uri : uris)
try {
addAttachment(context, data.draft.id, uri, false, 0);
addAttachment(context, data.draft.id, uri, false, 0, false);
} catch (IOException ex) {
Log.e(ex);
}
@@ -4697,6 +4715,7 @@ public class FragmentCompose extends FragmentBase {
boolean add_inline = prefs.getBoolean("add_inline", true);
boolean resize_images = prefs.getBoolean("resize_images", true);
int resize = prefs.getInt("resize", FragmentCompose.REDUCED_IMAGE_SIZE);
boolean privacy_images = prefs.getBoolean("privacy_images", false);
boolean image_dialog = prefs.getBoolean("image_dialog", true);
final ViewGroup dview = (ViewGroup) LayoutInflater.from(getContext()).inflate(R.layout.dialog_add_image, null);
@@ -4704,12 +4723,14 @@ public class FragmentCompose extends FragmentBase {
final CheckBox cbResize = dview.findViewById(R.id.cbResize);
final Spinner spResize = dview.findViewById(R.id.spResize);
final TextView tvResize = dview.findViewById(R.id.tvResize);
final CheckBox cbPrivacy = dview.findViewById(R.id.cbPrivacy);
final CheckBox cbNotAgain = dview.findViewById(R.id.cbNotAgain);
final TextView tvNotAgain = dview.findViewById(R.id.tvNotAgain);
rgAction.check(add_inline ? R.id.rbInline : R.id.rbAttach);
cbResize.setChecked(resize_images);
spResize.setEnabled(resize_images);
cbPrivacy.setChecked(privacy_images);
final int[] resizeValues = getResources().getIntArray(R.array.resizeValues);
for (int pos = 0; pos < resizeValues.length; pos++)
@@ -4747,6 +4768,14 @@ public class FragmentCompose extends FragmentBase {
}
});
cbPrivacy.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
prefs.edit().putBoolean("privacy_images", isChecked).apply();
spResize.setEnabled(isChecked);
}
});
cbNotAgain.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {