1
0
Fork 0
mirror of https://github.com/M66B/FairEmail.git synced 2025-03-19 02:15:28 +00:00

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) {

View file

@ -72,6 +72,17 @@
app:layout_constraintStart_toEndOf="@id/spResize"
app:layout_constraintTop_toTopOf="@id/spResize" />
<CheckBox
android:id="@+id/cbPrivacy"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="12dp"
android:checked="true"
android:text="@string/title_add_image_privacy"
android:textAppearance="@style/TextAppearance.AppCompat.Medium"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/spResize" />
<CheckBox
android:id="@+id/cbNotAgain"
android:layout_width="wrap_content"
@ -80,7 +91,7 @@
android:text="@string/title_no_ask_again"
android:textAppearance="@style/TextAppearance.AppCompat.Small"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/spResize" />
app:layout_constraintTop_toBottomOf="@id/cbPrivacy" />
<eu.faircode.email.FixedTextView
android:id="@+id/tvNotAgain"

View file

@ -838,6 +838,7 @@
<string name="title_add_image_inline">Insert</string>
<string name="title_add_image_attach">Attach</string>
<string name="title_add_image_resize">Resize</string>
<string name="title_add_image_privacy">Remove location</string>
<string name="title_add_resize_pixels">&lt; %1$d pixels</string>
<string name="title_add_image_select">Select file</string>
<string name="title_add_attachment">Add attachment</string>