diff --git a/CHANGELOG.md b/CHANGELOG.md index b0cdf15147..a17bbd6d01 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ For support you can use [the contact form](https://contact.faircode.eu/?product= ### Next version +* Added option to add send-to-self to Android's share menu * Added seperate filter settings for archive, trash and spam folder * Small improvements and minor bug fixes * Updated [translations](https://crowdin.com/project/open-source-email) diff --git a/app/src/amazon/AndroidManifest.xml b/app/src/amazon/AndroidManifest.xml index 0f2748d785..f3ad5a708c 100644 --- a/app/src/amazon/AndroidManifest.xml +++ b/app/src/amazon/AndroidManifest.xml @@ -337,6 +337,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . + + Copyright 2018-2023 by Marcel Bokhorst (M66B) +*/ + +import android.content.ComponentName; +import android.content.Context; +import android.content.Intent; +import android.net.Uri; +import android.os.Build; +import android.os.Bundle; +import android.text.TextUtils; + +import androidx.annotation.RequiresApi; +import androidx.core.net.MailTo; + +import java.util.ArrayList; +import java.util.Arrays; + +public class ActivitySendSelf extends ActivityBase { + @Override + @RequiresApi(api = Build.VERSION_CODES.M) + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + new SimpleTask() { + @Override + protected EntityIdentity onExecute(Context context, Bundle args) { + DB db = DB.getInstance(context); + return db.identity().getPrimaryIdentity(); + } + + @Override + protected void onExecuted(Bundle args, EntityIdentity identity) { + Intent intent = getIntent(); + + if (identity != null) { + Uri uri = intent.getData(); + if (uri != null && "mailto".equals(uri.getScheme())) { + String mailto = uri.toString(); + int s = mailto.indexOf(':'); + int q = mailto.indexOf('?', s); + if (s > 0) { + String query = (q < 0 ? mailto.substring(s + 1) : mailto.substring(s + 1, q)); + intent.setData(Uri.parse(MailTo.MAILTO_SCHEME + Uri.encode(identity.email) + query)); + } + } else + intent.putExtra(Intent.EXTRA_EMAIL, new String[]{identity.email}); + } + + intent.setClass(ActivitySendSelf.this, ActivityCompose.class); + startActivity(intent); + finish(); + } + + @Override + protected void onException(Bundle args, Throwable ex) { + Log.unexpectedError(getSupportFragmentManager(), ex); + //finish(); + } + }.execute(this, new Bundle(), "send:self"); + } +} diff --git a/app/src/main/java/eu/faircode/email/DaoIdentity.java b/app/src/main/java/eu/faircode/email/DaoIdentity.java index 126f1306e6..55b55420a6 100644 --- a/app/src/main/java/eu/faircode/email/DaoIdentity.java +++ b/app/src/main/java/eu/faircode/email/DaoIdentity.java @@ -86,6 +86,13 @@ public interface DaoIdentity { @Query("SELECT * FROM identity WHERE id = :id") EntityIdentity getIdentity(long id); + @Query("SELECT identity.* FROM identity" + + " JOIN account ON account.id = identity.account" + + " JOIN folder ON folder.account = identity.account AND folder.type = '" + EntityFolder.DRAFTS + "'" + + " WHERE account.`primary` AND account.synchronize" + + " AND identity.`primary` AND identity.synchronize") + EntityIdentity getPrimaryIdentity(); + @Query("SELECT * FROM identity WHERE uuid = :uuid") EntityIdentity getIdentityByUUID(String uuid); diff --git a/app/src/main/java/eu/faircode/email/FragmentOptionsMisc.java b/app/src/main/java/eu/faircode/email/FragmentOptionsMisc.java index 2bfc6077b2..09edb3ea7d 100644 --- a/app/src/main/java/eu/faircode/email/FragmentOptionsMisc.java +++ b/app/src/main/java/eu/faircode/email/FragmentOptionsMisc.java @@ -109,6 +109,7 @@ public class FragmentOptionsMisc extends FragmentBase implements SharedPreferenc private View view; private ImageButton ibHelp; private SwitchCompat swPowerMenu; + private SwitchCompat swSendSelf; private SwitchCompat swExternalSearch; private SwitchCompat swSortAnswers; private SwitchCompat swExternalAnswer; @@ -355,6 +356,7 @@ public class FragmentOptionsMisc extends FragmentBase implements SharedPreferenc ibHelp = view.findViewById(R.id.ibHelp); swPowerMenu = view.findViewById(R.id.swPowerMenu); + swSendSelf = view.findViewById(R.id.swSendSelf); swExternalSearch = view.findViewById(R.id.swExternalSearch); swSortAnswers = view.findViewById(R.id.swSortAnswers); swExternalAnswer = view.findViewById(R.id.swExternalAnswer); @@ -534,6 +536,13 @@ public class FragmentOptionsMisc extends FragmentBase implements SharedPreferenc } }); + swSendSelf.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton compoundButton, boolean checked) { + Helper.enableComponent(getContext(), ActivitySendSelf.class, checked); + } + }); + swExternalSearch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton compoundButton, boolean checked) { @@ -2397,6 +2406,7 @@ public class FragmentOptionsMisc extends FragmentBase implements SharedPreferenc swSortAnswers.setChecked(prefs.getBoolean("sort_answers", false)); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) swPowerMenu.setChecked(Helper.isComponentEnabled(getContext(), ServicePowerControl.class)); + swSendSelf.setChecked(Helper.isComponentEnabled(getContext(), ActivitySendSelf.class)); swExternalSearch.setChecked(Helper.isComponentEnabled(getContext(), ActivitySearch.class)); swExternalAnswer.setChecked(Helper.isComponentEnabled(getContext(), ActivityAnswer.class)); swShortcuts.setChecked(prefs.getBoolean("shortcuts", true)); diff --git a/app/src/main/res/layout/fragment_options_misc.xml b/app/src/main/res/layout/fragment_options_misc.xml index 8c0642f8a1..2636f9bc27 100644 --- a/app/src/main/res/layout/fragment_options_misc.xml +++ b/app/src/main/res/layout/fragment_options_misc.xml @@ -86,6 +86,17 @@ app:layout_constraintTop_toBottomOf="@id/tvCaptionGeneral" app:switchPadding="12dp" /> + + FairEmail Copyright Ⓒ 2018–2023 by M. Bokhorst FairEmail search + Send to self FairEmail template Changelog FairEmail is an open source email app focused on privacy and security. For this reason some features might work differently from what you are used to. @@ -791,6 +792,7 @@ Max AES key size: %1$s Add actions to the Android power menu + Add \'send to self\' to Android\'s share menu Allow other apps to search in messages Sort reply templates by frequency of use Provide reply templates to other apps diff --git a/app/src/play/AndroidManifest.xml b/app/src/play/AndroidManifest.xml index a077380740..e0bff1db87 100644 --- a/app/src/play/AndroidManifest.xml +++ b/app/src/play/AndroidManifest.xml @@ -337,6 +337,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + +