Added pinning of messages

pull/197/head
M66B 4 years ago
parent 8c8ac653e7
commit 03be95278d

@ -1458,6 +1458,7 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB
args.putLong("id", intent.getLongExtra("id", -1));
args.putBoolean("filter_archive", intent.getBooleanExtra("filter_archive", true));
args.putBoolean("found", found);
args.putBoolean("pinned", intent.getBooleanExtra("pinned", false));
FragmentMessages fragment = new FragmentMessages();
fragment.setArguments(args);

@ -116,6 +116,7 @@ import androidx.core.content.FileProvider;
import androidx.core.content.pm.ShortcutInfoCompat;
import androidx.core.content.pm.ShortcutManagerCompat;
import androidx.core.graphics.ColorUtils;
import androidx.core.graphics.drawable.IconCompat;
import androidx.fragment.app.DialogFragment;
import androidx.fragment.app.Fragment;
import androidx.lifecycle.Lifecycle;
@ -4157,6 +4158,7 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
popupMenu.getMenu().findItem(R.id.menu_manage_keywords).setVisible(message.accountProtocol == EntityAccount.TYPE_IMAP);
popupMenu.getMenu().findItem(R.id.menu_share).setEnabled(message.content);
popupMenu.getMenu().findItem(R.id.menu_pin).setVisible(ShortcutManagerCompat.isRequestPinShortcutSupported(context));
popupMenu.getMenu().findItem(R.id.menu_event).setEnabled(message.content);
popupMenu.getMenu().findItem(R.id.menu_print).setEnabled(hasWebView && message.content);
popupMenu.getMenu().findItem(R.id.menu_print).setVisible(Helper.canPrint(context));
@ -4228,6 +4230,9 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
} else if (itemId == R.id.menu_share) {
onMenuShare(message, false);
return true;
} else if (itemId == R.id.menu_pin) {
onMenuPin(message);
return true;
} else if (itemId == R.id.menu_event) {
if (ActivityBilling.isPro(context))
onMenuShare(message, true);
@ -4886,6 +4891,65 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
}.execute(context, owner, args, "message:share");
}
private void onMenuPin(TupleMessageEx message) {
Bundle args = new Bundle();
args.putLong("id", message.id);
args.putLong("account", message.account);
args.putString("folderType", message.folderType);
args.putSerializable("addresses", message.from);
new SimpleTask<ContactInfo[]>() {
@Override
protected ContactInfo[] onExecute(Context context, Bundle args) {
long account = args.getLong("account");
String folderType = args.getString("folderType");
Address[] addresses = (Address[]) args.getSerializable("addresses");
return ContactInfo.get(context, account, folderType, addresses);
}
@Override
protected void onExecuted(Bundle args, ContactInfo[] contactInfo) {
Intent thread = new Intent(context, ActivityView.class);
thread.setAction("thread:" + message.id);
thread.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
thread.putExtra("account", message.account);
thread.putExtra("folder", message.folder);
thread.putExtra("thread", message.thread);
thread.putExtra("filter_archive", true);
thread.putExtra("pinned", true);
Bitmap bm;
if (contactInfo[0].hasPhoto())
bm = contactInfo[0].getPhotoBitmap();
else {
int resid = R.drawable.baseline_mail_24;
Drawable d = context.getDrawable(resid);
bm = Bitmap.createBitmap(
d.getIntrinsicWidth(),
d.getIntrinsicHeight(),
Bitmap.Config.ARGB_8888);
}
String label = (TextUtils.isEmpty(message.subject) ? context.getString(R.string.app_name) : message.subject);
IconCompat icon = IconCompat.createWithBitmap(bm);
String id = "message:" + message.id;
ShortcutInfoCompat.Builder builder = new ShortcutInfoCompat.Builder(context, id)
.setIcon(icon)
.setShortLabel(label)
.setLongLabel(label)
.setIntent(thread);
ShortcutManagerCompat.requestPinShortcut(context, builder.build(), null);
}
@Override
protected void onException(Bundle args, Throwable ex) {
Log.unexpectedError(parentFragment.getParentFragmentManager(), ex);
}
}.execute(context, owner, args, "message:pin");
}
private void onMenuPrint(TupleMessageEx message) {
Bundle args = new Bundle();
args.putLong("id", message.id);

@ -277,6 +277,7 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences.
private long id;
private boolean filter_archive;
private boolean found;
private boolean pinned;
private BoundaryCallbackMessages.SearchCriteria criteria = null;
private boolean pane;
@ -388,6 +389,7 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences.
id = args.getLong("id", -1);
filter_archive = args.getBoolean("filter_archive", true);
found = args.getBoolean("found", false);
pinned = args.getBoolean("pinned", false);
criteria = (BoundaryCallbackMessages.SearchCriteria) args.getSerializable("criteria");
pane = args.getBoolean("pane", false);
primary = args.getLong("primary", -1);
@ -4836,6 +4838,9 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences.
private boolean handleThreadActions(
@NonNull PagedList<TupleMessageEx> messages,
ArrayList<MessageTarget> targets, List<Long> removed) {
if (messages.size() == 0 && pinned)
return false;
// Auto close / next
if (messages.size() == 0 && (autoclose || onclose != null)) {
handleAutoClose();

@ -72,6 +72,10 @@
android:id="@+id/menu_share"
android:title="@string/title_share" />
<item
android:id="@+id/menu_pin"
android:title="@string/title_pin" />
<item
android:id="@+id/menu_event"
android:title="@string/title_event" />

Loading…
Cancel
Save