From a17685fd105f176cfdb8256a994d679f70a23c6a Mon Sep 17 00:00:00 2001 From: Christian Basler Date: Sun, 6 Sep 2015 17:45:21 +0200 Subject: [PATCH] Added some actions --- .../apps/abit/ComposeMessageActivity.java | 8 ++- .../apps/abit/ComposeMessageFragment.java | 24 +++---- .../apps/abit/MessageDetailFragment.java | 65 ++++++++++++++++-- .../dissem/apps/abit/MessageListActivity.java | 35 +++++++++- .../dissem/apps/abit/MessageListFragment.java | 61 ++++++++++++---- .../abit/listeners/ActionBarListener.java | 24 +++++++ .../abit/{ => listeners}/MessageListener.java | 6 +- .../dissem/apps/abit/service/Singleton.java | 2 +- .../ch/dissem/apps/abit/utils/Drawables.java | 32 +++++++++ .../res/drawable-hdpi/ic_action_delete.png | Bin 642 -> 399 bytes .../drawable-hdpi/ic_action_mark_unread.png | Bin 0 -> 347 bytes .../drawable-hdpi/ic_action_placeholder.png | Bin 0 -> 678 bytes .../res/drawable-hdpi/ic_action_reply.png | Bin 486 -> 632 bytes .../res/drawable-mdpi/ic_action_delete.png | Bin 428 -> 257 bytes .../drawable-mdpi/ic_action_mark_unread.png | Bin 0 -> 257 bytes .../drawable-mdpi/ic_action_placeholder.png | Bin 0 -> 433 bytes .../res/drawable-mdpi/ic_action_reply.png | Bin 330 -> 412 bytes .../res/drawable-xhdpi/ic_action_delete.png | Bin 775 -> 491 bytes .../drawable-xhdpi/ic_action_mark_unread.png | Bin 0 -> 394 bytes .../drawable-xhdpi/ic_action_placeholder.png | Bin 0 -> 844 bytes .../res/drawable-xhdpi/ic_action_reply.png | Bin 623 -> 849 bytes .../res/drawable-xxhdpi/ic_action_delete.png | Bin 1171 -> 849 bytes .../drawable-xxhdpi/ic_action_mark_unread.png | Bin 0 -> 620 bytes .../drawable-xxhdpi/ic_action_placeholder.png | Bin 0 -> 1391 bytes .../res/drawable-xxhdpi/ic_action_reply.png | Bin 929 -> 1364 bytes .../res/drawable-xxxhdpi/ic_action_delete.png | Bin 0 -> 1072 bytes .../res/drawable-xxxhdpi/ic_action_reply.png | Bin 0 -> 1929 bytes .../res/layout/fragment_subscribtions.xml | 31 +++++++++ app/src/main/res/menu/message.xml | 25 +++++++ app/src/main/res/menu/message_list.xml | 11 +++ app/src/main/res/values-de/strings.xml | 6 ++ app/src/main/res/values/strings.xml | 3 + 32 files changed, 297 insertions(+), 36 deletions(-) create mode 100644 app/src/main/java/ch/dissem/apps/abit/listeners/ActionBarListener.java rename app/src/main/java/ch/dissem/apps/abit/{ => listeners}/MessageListener.java (97%) create mode 100644 app/src/main/java/ch/dissem/apps/abit/utils/Drawables.java mode change 100644 => 100755 app/src/main/res/drawable-hdpi/ic_action_delete.png create mode 100644 app/src/main/res/drawable-hdpi/ic_action_mark_unread.png create mode 100644 app/src/main/res/drawable-hdpi/ic_action_placeholder.png mode change 100644 => 100755 app/src/main/res/drawable-hdpi/ic_action_reply.png mode change 100644 => 100755 app/src/main/res/drawable-mdpi/ic_action_delete.png create mode 100644 app/src/main/res/drawable-mdpi/ic_action_mark_unread.png create mode 100644 app/src/main/res/drawable-mdpi/ic_action_placeholder.png mode change 100644 => 100755 app/src/main/res/drawable-mdpi/ic_action_reply.png mode change 100644 => 100755 app/src/main/res/drawable-xhdpi/ic_action_delete.png create mode 100644 app/src/main/res/drawable-xhdpi/ic_action_mark_unread.png create mode 100644 app/src/main/res/drawable-xhdpi/ic_action_placeholder.png mode change 100644 => 100755 app/src/main/res/drawable-xhdpi/ic_action_reply.png mode change 100644 => 100755 app/src/main/res/drawable-xxhdpi/ic_action_delete.png create mode 100644 app/src/main/res/drawable-xxhdpi/ic_action_mark_unread.png create mode 100644 app/src/main/res/drawable-xxhdpi/ic_action_placeholder.png mode change 100644 => 100755 app/src/main/res/drawable-xxhdpi/ic_action_reply.png create mode 100755 app/src/main/res/drawable-xxxhdpi/ic_action_delete.png create mode 100755 app/src/main/res/drawable-xxxhdpi/ic_action_reply.png create mode 100644 app/src/main/res/layout/fragment_subscribtions.xml create mode 100644 app/src/main/res/menu/message.xml create mode 100644 app/src/main/res/menu/message_list.xml diff --git a/app/src/main/java/ch/dissem/apps/abit/ComposeMessageActivity.java b/app/src/main/java/ch/dissem/apps/abit/ComposeMessageActivity.java index c64fde7..a8f35fc 100644 --- a/app/src/main/java/ch/dissem/apps/abit/ComposeMessageActivity.java +++ b/app/src/main/java/ch/dissem/apps/abit/ComposeMessageActivity.java @@ -3,11 +3,15 @@ package ch.dissem.apps.abit; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; +import ch.dissem.bitmessage.entity.BitmessageAddress; /** * Compose a new message. */ public class ComposeMessageActivity extends AppCompatActivity { + public static final String EXTRA_IDENTITY = "ch.dissem.abit.Message.SENDER"; + public static final String EXTRA_RECIPIENT = "ch.dissem.abit.Message.RECIPIENT"; + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -21,8 +25,10 @@ public class ComposeMessageActivity extends AppCompatActivity { getSupportActionBar().setHomeButtonEnabled(false); // Display the fragment as the main content. + ComposeMessageFragment fragment = new ComposeMessageFragment(); + fragment.setArguments(getIntent().getExtras()); getSupportFragmentManager().beginTransaction() - .replace(R.id.content, new ComposeMessageFragment()) + .replace(R.id.content, fragment) .commit(); } } diff --git a/app/src/main/java/ch/dissem/apps/abit/ComposeMessageFragment.java b/app/src/main/java/ch/dissem/apps/abit/ComposeMessageFragment.java index 27615a0..88145fb 100644 --- a/app/src/main/java/ch/dissem/apps/abit/ComposeMessageFragment.java +++ b/app/src/main/java/ch/dissem/apps/abit/ComposeMessageFragment.java @@ -9,19 +9,13 @@ import android.widget.Toast; import ch.dissem.bitmessage.BitmessageContext; import ch.dissem.bitmessage.entity.BitmessageAddress; +import static ch.dissem.apps.abit.ComposeMessageActivity.EXTRA_IDENTITY; +import static ch.dissem.apps.abit.ComposeMessageActivity.EXTRA_RECIPIENT; + /** * Compose a new message. */ public class ComposeMessageFragment extends Fragment { - /** - * The fragment argument representing the sender identity. - */ - public static final String ARG_IDENTITY = "from"; - /** - * The fragment argument representing the recipient. - */ - public static final String ARG_RECIPIENT = "to"; - private BitmessageContext bmCtx; private BitmessageAddress identity; private BitmessageAddress recipient; @@ -37,11 +31,11 @@ public class ComposeMessageFragment extends Fragment { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (getArguments() != null) { - if (getArguments().containsKey(ARG_IDENTITY)) { - identity = (BitmessageAddress) getArguments().getSerializable(ARG_IDENTITY); + if (getArguments().containsKey(EXTRA_IDENTITY)) { + identity = (BitmessageAddress) getArguments().getSerializable(EXTRA_IDENTITY); } - if (getArguments().containsKey(ARG_RECIPIENT)) { - recipient = (BitmessageAddress) getArguments().getSerializable(ARG_RECIPIENT); + if (getArguments().containsKey(EXTRA_RECIPIENT)) { + recipient = (BitmessageAddress) getArguments().getSerializable(EXTRA_RECIPIENT); } } setHasOptionsMenu(true); @@ -51,6 +45,10 @@ public class ComposeMessageFragment extends Fragment { public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.fragment_compose_message, container, false); + if (recipient != null) { + EditText recipientInput = (EditText) rootView.findViewById(R.id.recipient); + recipientInput.setText(recipient.toString()); + } EditText body = (EditText) rootView.findViewById(R.id.body); body.setInputType(EditorInfo.TYPE_TEXT_VARIATION_SHORT_MESSAGE | EditorInfo.TYPE_TEXT_FLAG_MULTI_LINE); body.setImeOptions(EditorInfo.IME_ACTION_SEND | EditorInfo.IME_FLAG_NO_ENTER_ACTION); diff --git a/app/src/main/java/ch/dissem/apps/abit/MessageDetailFragment.java b/app/src/main/java/ch/dissem/apps/abit/MessageDetailFragment.java index 03b3c30..dfe0d14 100644 --- a/app/src/main/java/ch/dissem/apps/abit/MessageDetailFragment.java +++ b/app/src/main/java/ch/dissem/apps/abit/MessageDetailFragment.java @@ -1,16 +1,18 @@ package ch.dissem.apps.abit; +import android.content.Intent; import android.os.Bundle; import android.support.v4.app.Fragment; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; +import android.view.*; import android.widget.ImageView; import android.widget.TextView; import ch.dissem.apps.abit.service.Singleton; +import ch.dissem.apps.abit.utils.Drawables; +import ch.dissem.bitmessage.BitmessageContext; import ch.dissem.bitmessage.entity.BitmessageAddress; import ch.dissem.bitmessage.entity.Plaintext; import ch.dissem.bitmessage.entity.valueobject.Label; +import com.mikepenz.google_material_typeface_library.GoogleMaterial; import java.util.Iterator; @@ -29,10 +31,11 @@ public class MessageDetailFragment extends Fragment { public static final String ARG_ITEM = "item"; /** - * The dummy content this fragment is presenting. + * The content this fragment is presenting. */ private Plaintext item; + /** * Mandatory empty constructor for the fragment manager to instantiate the * fragment (e.g. upon screen orientation changes). @@ -50,6 +53,7 @@ public class MessageDetailFragment extends Fragment { // to load content from a content provider. item = (Plaintext) getArguments().getSerializable(ARG_ITEM); } + setHasOptionsMenu(true); } @Override @@ -84,4 +88,57 @@ public class MessageDetailFragment extends Fragment { } return rootView; } + + @Override + public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { + inflater.inflate(R.menu.message, menu); + + Drawables.addIcon(getActivity(), menu, R.id.reply, GoogleMaterial.Icon.gmd_reply); + Drawables.addIcon(getActivity(), menu, R.id.delete, GoogleMaterial.Icon.gmd_delete); + Drawables.addIcon(getActivity(), menu, R.id.mark_unread, GoogleMaterial.Icon.gmd_markunread); + Drawables.addIcon(getActivity(), menu, R.id.archive, GoogleMaterial.Icon.gmd_archive); + + super.onCreateOptionsMenu(menu, inflater); + } + + @Override + public boolean onOptionsItemSelected(MenuItem menuItem) { + BitmessageContext bmc = Singleton.getBitmessageContext(getActivity()); + switch (menuItem.getItemId()) { + case R.id.reply: + Intent replyIntent = new Intent(getActivity().getApplicationContext(), ComposeMessageActivity.class); + replyIntent.putExtra(ComposeMessageActivity.EXTRA_RECIPIENT, item.getFrom()); + replyIntent.putExtra(ComposeMessageActivity.EXTRA_IDENTITY, item.getTo()); + startActivity(replyIntent); + return true; + case R.id.delete: + if (isInTrash(item)) { + bmc.messages().remove(item); + } else { + item.getLabels().clear(); + item.addLabels(bmc.messages().getLabels(Label.Type.TRASH)); + bmc.messages().save(item); + } + return true; + case R.id.mark_unread: + item.addLabels(bmc.messages().getLabels(Label.Type.UNREAD)); + bmc.messages().save(item); + return true; + case R.id.archive: + item.getLabels().clear(); + bmc.messages().save(item); + return true; + default: + return false; + } + } + + private boolean isInTrash(Plaintext item) { + for (Label label : item.getLabels()) { + if (label.getType() == Label.Type.TRASH) { + return true; + } + } + return false; + } } diff --git a/app/src/main/java/ch/dissem/apps/abit/MessageListActivity.java b/app/src/main/java/ch/dissem/apps/abit/MessageListActivity.java index 7c24cb1..84c2dc0 100644 --- a/app/src/main/java/ch/dissem/apps/abit/MessageListActivity.java +++ b/app/src/main/java/ch/dissem/apps/abit/MessageListActivity.java @@ -8,6 +8,7 @@ import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.AdapterView; +import ch.dissem.apps.abit.listeners.ActionBarListener; import ch.dissem.apps.abit.service.Singleton; import ch.dissem.bitmessage.BitmessageContext; import ch.dissem.bitmessage.entity.BitmessageAddress; @@ -51,7 +52,7 @@ import java.util.ArrayList; *

*/ public class MessageListActivity extends AppCompatActivity - implements MessageListFragment.Callbacks { + implements MessageListFragment.Callbacks, ActionBarListener { public static final String EXTRA_SHOW_MESSAGE = "ch.dissem.abit.ShowMessage"; public static final String ACTION_SHOW_INBOX = "ch.dissem.abit.ShowInbox"; @@ -157,7 +158,30 @@ public class MessageListActivity extends AppCompatActivity ArrayList drawerItems = new ArrayList<>(); for (Label label : bmc.messages().getLabels()) { - drawerItems.add(new PrimaryDrawerItem().withName(label.toString()).withTag(label)); + PrimaryDrawerItem item = new PrimaryDrawerItem().withName(label.toString()).withTag(label); + switch (label.getType()) { + case INBOX: + item.withIcon(GoogleMaterial.Icon.gmd_inbox); + break; + case DRAFT: + item.withIcon(CommunityMaterial.Icon.cmd_file); + break; + case SENT: + item.withIcon(CommunityMaterial.Icon.cmd_send); + break; + case BROADCAST: + item.withIcon(CommunityMaterial.Icon.cmd_rss); + break; + case UNREAD: + item.withIcon(GoogleMaterial.Icon.gmd_markunread_mailbox); + break; + case TRASH: + item.withIcon(GoogleMaterial.Icon.gmd_delete); + break; + default: + item.withIcon(CommunityMaterial.Icon.cmd_label); + } + drawerItems.add(item); } new DrawerBuilder() @@ -168,7 +192,7 @@ public class MessageListActivity extends AppCompatActivity .addStickyDrawerItems( new SecondaryDrawerItem() .withName(getString(R.string.subscriptions)) - .withIcon(CommunityMaterial.Icon.cmd_rss), + .withIcon(CommunityMaterial.Icon.cmd_rss_box), new SecondaryDrawerItem() .withName(R.string.settings) .withIcon(GoogleMaterial.Icon.gmd_settings) @@ -254,6 +278,11 @@ public class MessageListActivity extends AppCompatActivity } } + @Override + public void updateTitle(CharSequence title) { + getSupportActionBar().setTitle(title); + } + public Label getSelectedLabel() { return selectedLabel; } diff --git a/app/src/main/java/ch/dissem/apps/abit/MessageListFragment.java b/app/src/main/java/ch/dissem/apps/abit/MessageListFragment.java index abbd60d..45ef52b 100644 --- a/app/src/main/java/ch/dissem/apps/abit/MessageListFragment.java +++ b/app/src/main/java/ch/dissem/apps/abit/MessageListFragment.java @@ -6,17 +6,17 @@ import android.graphics.Typeface; import android.os.Bundle; import android.support.design.widget.FloatingActionButton; import android.support.v4.app.ListFragment; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; +import android.view.*; import android.widget.ArrayAdapter; import android.widget.ImageView; import android.widget.ListView; import android.widget.TextView; +import ch.dissem.apps.abit.listeners.ActionBarListener; import ch.dissem.apps.abit.service.Singleton; import ch.dissem.bitmessage.BitmessageContext; import ch.dissem.bitmessage.entity.Plaintext; import ch.dissem.bitmessage.entity.valueobject.Label; +import ch.dissem.bitmessage.ports.MessageRepository; /** * A list fragment representing a list of Messages. This fragment @@ -39,12 +39,15 @@ public class MessageListFragment extends ListFragment { * The fragment's current callback object, which is notified of list item * clicks. */ - private Callbacks mCallbacks = sDummyCallbacks; + private Callbacks callbacks = dummyCallbacks; /** * The current activated item position. Only used on tablets. */ - private int mActivatedPosition = ListView.INVALID_POSITION; + private int activatedPosition = ListView.INVALID_POSITION; + + private Label currentLabel; + private MenuItem emptyTrashMenuItem; private BitmessageContext bmc; @@ -64,7 +67,7 @@ public class MessageListFragment extends ListFragment { * A dummy implementation of the {@link Callbacks} interface that does * nothing. Used only when this fragment is not attached to an activity. */ - private static Callbacks sDummyCallbacks = new Callbacks() { + private static Callbacks dummyCallbacks = new Callbacks() { @Override public void onItemSelected(Plaintext plaintext) { } @@ -82,6 +85,7 @@ public class MessageListFragment extends ListFragment { super.onCreate(savedInstanceState); bmc = Singleton.getBitmessageContext(getActivity()); + setHasOptionsMenu(true); } @Override @@ -92,6 +96,7 @@ public class MessageListFragment extends ListFragment { } public void updateList(Label label) { + currentLabel = label; setListAdapter(new ArrayAdapter( getActivity(), android.R.layout.simple_list_item_activated_1, @@ -120,6 +125,12 @@ public class MessageListFragment extends ListFragment { return convertView; } }); + if (getActivity() instanceof ActionBarListener) { + ((ActionBarListener) getActivity()).updateTitle(label.toString()); + } + if (emptyTrashMenuItem != null) { + emptyTrashMenuItem.setVisible(label != null && label.getType() == Label.Type.TRASH); + } } @Override @@ -158,7 +169,7 @@ public class MessageListFragment extends ListFragment { throw new IllegalStateException("Activity must implement fragment's callbacks."); } - mCallbacks = (Callbacks) activity; + callbacks = (Callbacks) activity; } @Override @@ -166,7 +177,31 @@ public class MessageListFragment extends ListFragment { super.onDetach(); // Reset the active callbacks interface to the dummy implementation. - mCallbacks = sDummyCallbacks; + callbacks = dummyCallbacks; + } + + @Override + public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { + inflater.inflate(R.menu.message_list, menu); + emptyTrashMenuItem = menu.findItem(R.id.empty_trash); + super.onCreateOptionsMenu(menu, inflater); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + switch (item.getItemId()) { + case R.id.empty_trash: + if (currentLabel.getType() != Label.Type.TRASH) return true; + + MessageRepository repo = bmc.messages(); + for (Plaintext message : repo.findMessages(currentLabel)) { + repo.remove(message); + } + updateList(currentLabel); + return true; + default: + return false; + } } @Override @@ -175,15 +210,15 @@ public class MessageListFragment extends ListFragment { // Notify the active callbacks interface (the activity, if the // fragment is attached to one) that an item has been selected. - mCallbacks.onItemSelected((Plaintext) listView.getItemAtPosition(position)); + callbacks.onItemSelected((Plaintext) listView.getItemAtPosition(position)); } @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); - if (mActivatedPosition != ListView.INVALID_POSITION) { + if (activatedPosition != ListView.INVALID_POSITION) { // Serialize and persist the activated item position. - outState.putInt(STATE_ACTIVATED_POSITION, mActivatedPosition); + outState.putInt(STATE_ACTIVATED_POSITION, activatedPosition); } } @@ -201,11 +236,11 @@ public class MessageListFragment extends ListFragment { private void setActivatedPosition(int position) { if (position == ListView.INVALID_POSITION) { - getListView().setItemChecked(mActivatedPosition, false); + getListView().setItemChecked(activatedPosition, false); } else { getListView().setItemChecked(position, true); } - mActivatedPosition = position; + activatedPosition = position; } } diff --git a/app/src/main/java/ch/dissem/apps/abit/listeners/ActionBarListener.java b/app/src/main/java/ch/dissem/apps/abit/listeners/ActionBarListener.java new file mode 100644 index 0000000..11b309a --- /dev/null +++ b/app/src/main/java/ch/dissem/apps/abit/listeners/ActionBarListener.java @@ -0,0 +1,24 @@ +/* + * Copyright 2015 Christian Basler + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package ch.dissem.apps.abit.listeners; + +/** + * Created by chris on 06.09.15. + */ +public interface ActionBarListener { + void updateTitle(CharSequence title); +} diff --git a/app/src/main/java/ch/dissem/apps/abit/MessageListener.java b/app/src/main/java/ch/dissem/apps/abit/listeners/MessageListener.java similarity index 97% rename from app/src/main/java/ch/dissem/apps/abit/MessageListener.java rename to app/src/main/java/ch/dissem/apps/abit/listeners/MessageListener.java index c9adc4f..104ef70 100644 --- a/app/src/main/java/ch/dissem/apps/abit/MessageListener.java +++ b/app/src/main/java/ch/dissem/apps/abit/listeners/MessageListener.java @@ -14,9 +14,10 @@ * limitations under the License. */ -package ch.dissem.apps.abit; +package ch.dissem.apps.abit.listeners; import android.annotation.TargetApi; +import android.app.Notification; import android.app.NotificationManager; import android.app.PendingIntent; import android.content.Context; @@ -33,6 +34,9 @@ import android.text.Spannable; import android.text.SpannableString; import android.text.Spanned; import android.text.style.StyleSpan; +import ch.dissem.apps.abit.Identicon; +import ch.dissem.apps.abit.MessageListActivity; +import ch.dissem.apps.abit.R; import ch.dissem.bitmessage.BitmessageContext; import ch.dissem.bitmessage.entity.Plaintext; diff --git a/app/src/main/java/ch/dissem/apps/abit/service/Singleton.java b/app/src/main/java/ch/dissem/apps/abit/service/Singleton.java index 8b0c68a..46b46e1 100644 --- a/app/src/main/java/ch/dissem/apps/abit/service/Singleton.java +++ b/app/src/main/java/ch/dissem/apps/abit/service/Singleton.java @@ -1,7 +1,7 @@ package ch.dissem.apps.abit.service; import android.content.Context; -import ch.dissem.apps.abit.MessageListener; +import ch.dissem.apps.abit.listeners.MessageListener; import ch.dissem.apps.abit.repositories.AndroidAddressRepository; import ch.dissem.apps.abit.repositories.AndroidInventory; import ch.dissem.apps.abit.repositories.AndroidMessageRepository; diff --git a/app/src/main/java/ch/dissem/apps/abit/utils/Drawables.java b/app/src/main/java/ch/dissem/apps/abit/utils/Drawables.java new file mode 100644 index 0000000..d646608 --- /dev/null +++ b/app/src/main/java/ch/dissem/apps/abit/utils/Drawables.java @@ -0,0 +1,32 @@ +/* + * Copyright 2015 Christian Basler + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package ch.dissem.apps.abit.utils; + +import android.content.Context; +import android.view.Menu; +import ch.dissem.apps.abit.R; +import com.mikepenz.google_material_typeface_library.GoogleMaterial; +import com.mikepenz.iconics.IconicsDrawable; + +/** + * Some helper methods to work with drawables. + */ +public class Drawables { + public static void addIcon(Context ctx, Menu menu, int menuItem, GoogleMaterial.Icon icon) { + menu.findItem(menuItem).setIcon(new IconicsDrawable(ctx, icon).colorRes(R.color.primary_text_default_material_dark).actionBar()); + } +} diff --git a/app/src/main/res/drawable-hdpi/ic_action_delete.png b/app/src/main/res/drawable-hdpi/ic_action_delete.png old mode 100644 new mode 100755 index 4bb5259e1b93ae16b05c0c524be2a009525b72ee..d912755d26e13bf4041b0a32f5bc945d68fb648c GIT binary patch delta 373 zcmV-*0gC>D1&;%eBYy!_Nkl<ZXhZFpO-chn5QV=8y72&Bz?GK}Tu8iy%bY-5gdpM~ z<OD8r3&n+yOJtP`<N$6ILTE5y7EX6nr3V>(v+Y+u@73#?Fd5MEXVCNh5rN;HpeFE_ zCNKo9jD+5SS0gqH^H}IOlj#z;b~f||EHW`)mV8zMN5BJc(tnaPokyNcOVH<cy|(jx zn1{e)hCrnGTudS`0YqS@QnE;|Cs5lW)$&>IK(k<O8`Wscw0(AkA_S&2y3FLb_vDWd zn0X2Wuy>vq5%8#G#A*U1p>zid3dusUP)Pw<sG)#fWCz;ir*LhdlBjx-X$xr!m2Syl z=h{Lg{j`O&g>L@)7JBONBX9bsJ1$+q=6U4T=q+&JDdNB`fw==8`j_$y7y+lALI&&y z@C>XC*gYgNffSrb+yLhl?38S?0$#k$r$(X#JR)_96@gCWH6+&r3?g+3>HP$@g#k7( TT1Q=|00000NkvXXu0mjfJ)x*Q delta 618 zcmV-w0+s!b1A+yRBYy%(Nkl<Zc-rk*OG^S#6t*Y5ppb~D2!a+B1c8t7JyD?HMqC;} z)S`zQ7ZKV<A;F-K7Ha9rpW;um?}G_M3P-wg9Agd~yw08b-Sf>k_uO-5TrNi(am0~- zBkgv3I+MvP{HF1Ee7@W5PT11;a5%i>^?Ki-tpR#(O9FnsUw=1Ye9PnUe3VM1DccbU z27|{m(C71&bzNWUS54D`<3ix^r+yIF9vcFkPG>Tk&CaIN=|wJHwrxisl}gRQ=mW(5 z8H~P$J{xh~9JCHd5_-k4#2}WK;h|7y9h2X{kh+;gYf|gPB(~)QxJVTm-tU>RM7n&l ziU6@KCxAuxVt*9@Vp~oi5{c|$vVsK!3d9y$%&2Qt5wj6Yd=A$?7@ldEFtovYIfi42 zK`dMB1<dcv``CHi%qY=lbd$<9ud&Y-djJbJ=&~xjL?W?5qGALBfj}It|3nDn5egS* zC$ZDU(Dvi^2>%bcLG>!HvCp_C#xWdA3}O+}c9rLlDSuR#ta~)o1mJ;y7y*WYY68R* zBY=Fpr<wqg!oFk(?WiU|Ofdq;=^LsE5L1$X+X4b^F#<eksU|>7$&z8l%*ksAZ4y(A z0MERbw5E_ijhLeK5VrrS!jo84yr9Fx6@?zCh!en5D=PFraTFfNEA&8q6duSa^gwPD z9=KCT;A2*t0IJ7Rg{Aa~I05EuOq}}T8@f6%#P@(+NhXs^I8BA&kxPWa6O4K_-cI!H z)J@|W`wG05V>s59A3MI^PV<uzmF<x}Wk(!w#1YHn3w4VJ<9!QSi~s-t07*qoM6N<$ Ef`()wZ~y=R diff --git a/app/src/main/res/drawable-hdpi/ic_action_mark_unread.png b/app/src/main/res/drawable-hdpi/ic_action_mark_unread.png new file mode 100644 index 0000000000000000000000000000000000000000..c9ce72462afd9eec60c99f24a6f6374b5273a58f GIT binary patch literal 347 zcmV-h0i^zkP)<h;3K|Lk000e1NJLTq001xm001xu1^@s6R|5Hm0003ZNkl<Zc-rk) zK?=e!5Y*}es;!>=h2T*U#D91bQLJyOMSVqsC;wD8Fv1dwplwZs85k&KvpbWdo6t^& zAP9mW2%;GjMKKZ1JabaTz+U+9%smazfJXyU;mxCXTYFly6ZM7b9~-%$X1}WVu6phv z>9s-O7u4vLY52y#Mz|G*j*%6L)hT@C2oF(vQ^!Y~3wOdniIJ>=@T^4m0JZWax{yKg zp^6EF%MXoY7!#;GL*zEUXrp#^4#L=35i2TvBRoZnp79vDav$e_K}_VV$U=Blac8{K zGag~AX~RKgMI41A-8~?B?sT&eVoe)QVk;`qTg%xh$p^x{UL{^e#^C7-;jOp}-9cXF tXn+Q2fCgy5i-G_Cu|*IBK@bG-9#6$BFeoiTS5W`}002ovPDHLkV1l^$k+T2* literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-hdpi/ic_action_placeholder.png b/app/src/main/res/drawable-hdpi/ic_action_placeholder.png new file mode 100644 index 0000000000000000000000000000000000000000..cde7713adafb858e31d495ae647969ec49a05c61 GIT binary patch literal 678 zcmV;X0$KfuP)<h;3K|Lk000e1NJLTq001xm001xu1^@s6R|5Hm0007QNkl<Zc-rln z$xB=@9LJygxPS|YLZKZ*R8T64Raz<Sp_CC?L=X=Z*Mki8;M!rlX(_FER*^0sp4^Hp z6-8X?idy}j#&6&^Fofid<1<N>1U{E6lkfK>?`8Ro<9JAsNaQ_u?V)`w7;{V|bp8-5 zf{YuqO#wf^W5;BIfKl*{%S!@9pqzLBlDRqo@P*YiZ6F`~0;Ql6d<BQ#lH(Z6gCHmY zOKb!k(+MJqN!W!zw2TWf{m8WVCa{-)aM7r=nGnwAc%KL1JRjIgt<yl)EsBpapi6um zIE(4{1XO`)F5hkbzW{!)!{xtHEj|sba)Ne2E+_y8*D&yp#Akp%T-g@LQfVL{5w!s} z6PPaS$*)Pu+Ep5uQ!w{=mX$1S_|Y8t?5Q?z&ej$c1}Zd&kMdlFftMN$G<#j7YCsQY z0oj!AqYau4GGqFD1A0LNzaf+v=;8J?KS3U7q_2k#*w-!-EN~+;;`)N4un?RIhICN( z6apQRMX)s9Dl7WIX#)l(BxOx*2I?h^W(*jZl#~Um0c*e-um-FFYrq<?2I3p|d=mp@ zl185l7#Nh4J#{mX3cd-hL23;c@C(l1E9{UH??A)uc*0;Ed}jw4Q%6b`I{>q!<s&<- z-TyPOi-Bhv4ZKwq$T-q;FXUHsGuKKlwMqj))fc>#6eb!1!(d->fg7eeLlj3llRWJZ z)#(RMbO$<;!Eb>uCN__|)fUCgPNMftrb0~CfHhzZ+;Ia*f|yxUSPr*I+!oYhd1<DD z-Q5CVQ-XRSQGED+_^UxGEo@s9r5ula`Z4u<w4kx5=3feKr+e-H3ce+T(S})+umAu6 M07*qoM6N<$f?EF}U;qFB literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-hdpi/ic_action_reply.png b/app/src/main/res/drawable-hdpi/ic_action_reply.png old mode 100644 new mode 100755 index be372f5c96467ac0d30703bfacfe87b700e29789..7414772f6a8ecd0e21d26893c7786ba7e9d1ff8a GIT binary patch delta 608 zcmV-m0-ycn1Na1xBYy%vNkl<ZXhZGT&C3o^7{~F?llPU^Y$OW{vanNZu)s$C1v~jK z?4?++lVm3;DgOY8k}RHuSV&38OR*s2t*h>-yD`tqnKN@g&oecrW;1iHGr#Zkc4p3; zfseU?>o)={bp*!<j1lPQfiZ<TI<T|(7=e-t591#Gbarjx0)Kr*;1~|#%n$)W{1N;d zB0wQNf<8EaY4L*tD2pEyK$ZBx031bJRb$!LKy;e$e%<(rcX*ALc!3{@ZN2rhHv2$` z56`!;2|?fS9P@aJ->p^F7^I5H6<>b!N8H8ZzCcm{QqrcaQ$OK0p0zbB&u;?g%kxz_ z|Kbtubg7X#fPYzvp9Xq^tN4-=jpYCkx<mYxN%v~Sv6LxP7Wx^N@u3Yt6F{sriy~e~ zV~D>vX}w7tDF6jT&K{5?qBJS?iff1>Zyc!riw$uL4;$5I?5a)a6kdCa6<CdRSeqiG zH0K*Gq;#e>5h&hK*IuhW=2l@NwqhH0Os=?JH=f{n6MuXTKwUbeevL+Cc404eV`YWV zI2bsO_jM4t01I`eRDfwsn{WvGDnMeVzBwy^sz~Gj6#6#f1olh`{)Mx3wa_I3RW;EC zpjdA|j$_T_Mtm#9SyScc17JFx`T&Uaw&Nt$;}tH=8lZrPlexYQwl?52qDIak{w4k! zeMO*HI9X2S?)P{yw*{vrKS2)`1E8sG=RA*eI)EEP1qj_cCx-(wPoW$Sce3fb20Dq! uF&+VOyw<197=b>$nX}dyfgG>(Y4Z>NhHNn~mN@PJ0000<MNUMnLSTa4zZQ-F delta 461 zcmV;;0W$vh1m**fBYy#{Nkl<Zc-rk)%Syvg5G^Vqin>%#@rfXU3VGBtiE)vwhPaF1 zrie(?A8?bkQmL))RX!!Z=DAQL2166_ymbx?f#!01PVUUynQ1f#1OkCTApC}=X$y*? z9CJy&)oLwDlJwAQHf=7+i=y}l`{GW3uIo$q@*PH=I{~VyE`Nu~b0q-5x&rb~Ve;Gv zfZMEsY&S}t3juJOwK(#%7XY_e2g&C+^0gL#OKNKv`PvF#<PosFVdR;~vV7+I{zTY3 z&l|7OZMH$apM?CtKC%8IZ20YsrCZoN?BWoxZF{DSfZa(+K8-O^ZFY+nMjn6iQV{tc z69nNMLQZpaGk=`$E;fHHntUX7?p)WM<m&534JUCM1i={BB5)EXRc4@EVj|bT9*F2= zOrvQ};WF>yZ8OV7W}4<K62m_BxJh~nhGER*DgqmB<WWlC{Xr79#JZ!Rin(sqS_nSA zmmnjxOYa5J6mxJjH->nhWg^S6rV4Fn{_4ik2w*W0^+tO<&yl|8xo9aJ$C(agtt&QD zs(d1mwjaRyYZg~DR{7V1t&tclj>K@6Kp+qZgfj6BOeYXEP;B)?00000NkvXXu0mjf D*0$ME diff --git a/app/src/main/res/drawable-mdpi/ic_action_delete.png b/app/src/main/res/drawable-mdpi/ic_action_delete.png old mode 100644 new mode 100755 index 95258c3d0d287aa4a99cf57b769719d7de066a9b..864553a0637d42fb1fcfdf3d41b1151e535c2338 GIT binary patch delta 230 zcmV<C02%+R1AzjNBYyzMNkl<ZSV!&FF^YmQ5J2HiENtxUEXBqvc#G}aM%XI|o<Q&l zf{j)lW3ON%Y-eY`%@zxiPLz%D&w>auFx_PG<|UA{JULoV-d_MbYM_G;^#3@zBUbn+ zJ=z>V+GKpysE3rfI3eX_d?LZ!L=Iqt_tHu3)NQbTIe>o}K40Ia<PuIQNw&H5B>>Ax zfLQ>9fiMsT!ax`Z1GNSgXg7S4e=)BGm}1xv;DB{4Ko@TqJYXVC{)HXBYXKS#U$(5| gOIFsYVO0Q}0TP`fA#>OmW&i*H07*qoM6N<$f->x3L;wH) delta 403 zcmV;E0c`$(0;~g&BYy#NNkl<Zc-rk(O-sW-6s!t@ClT}~h!=~8d?&X=0==amQk3Gc z5}|mIl8Xiptq6ie>A_!<pB86e1rJub+n1j5U?A-7dvA7jwro3{HrmjPD2nzy&kJ1F z4Sxe;PFa>ajT5kK`wIB_3%>84HBP{BoS|h|FI3_OVHh5hKz|Sf)<y`R*>hD@+j*Yv z5^)?KHAaBvit{~1;|t&(joz0X0p?%1hHIH4;t3QkmNi@fg#>~58U*HR6TlU_M4^R2 z^96H7e2}K;9?rFkf<2lLxC0*4@f7@4V?(v3%N#KyqS)aka{jw|AHWlKdy5@jE0_0y zOrg&)&T)-e`+q4(;7!*9%#r;0of?>MDn<a(KI#%+j-&z;0|h3M3XBaD7)zRPWMIOP z7y(?f8(jj-kyKz{puj*<fy_XGOwxos0~7Wn6>xM3;C*O|5vc2W3p+YT;n@n!XCRy~ xr;#^dk|YOcaKiVWuY%tk<6Qg4r48Nq25#P3>hA3p3Jd@M002ovPDHLkV1jn!v9tgH diff --git a/app/src/main/res/drawable-mdpi/ic_action_mark_unread.png b/app/src/main/res/drawable-mdpi/ic_action_mark_unread.png new file mode 100644 index 0000000000000000000000000000000000000000..f74f84a9259a037b6fc5ee3aea349dc1f52e364e GIT binary patch literal 257 zcmV+c0sj7pP)<h;3K|Lk000e1NJLTq001BW001Be1^@s6b9#F80002UNkl<Zc-rlj zT?&IR5QN2oxr6`cLoX@P($ceO?49fcCXkoXXpOC~10RIM?99VvF^WVY(Z6Y)=NOy= z5&HyC;28*YhyV$g0+^eciEkgY;IUDViM3i^^Akw9ZonPr6~>x(8`erqZQmXkKnF7J z)eC}H<C=Ff)*99{p$(EdL2hq?Xr5W)+%f+86^x*Ff>hv2Q_Xed827xh`7<;{FQDMJ zrGe{$XX74ozy>MFC*xp)NH2ULN=C5+I7EQo{*Z`7qP_J35O?VYq08Ei00000NkvXX Hu0mjf{?BgO literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-mdpi/ic_action_placeholder.png b/app/src/main/res/drawable-mdpi/ic_action_placeholder.png new file mode 100644 index 0000000000000000000000000000000000000000..6fd4dcd7dd3393a258d3c18c09cb4ff9d84f1d5b GIT binary patch literal 433 zcmV;i0Z#sjP)<h;3K|Lk000e1NJLTq001BW001Be1^@s6b9#F80004aNkl<Zc-muN zAQJrl|34pyd5KWR0mLN?)CNF9<$*X0iO&MW5>U*FBpwgMS`4%RK!b~bI0c9o0r3eS zJ_E%d_A($&1>!1NS?&SEdyy=~g%1F65Vb8&Bf?^ITu3d;y^#!U1mYGvmi7Q~1rk4; zQp<UPcps9189<zk#{nSAW03eqfLMeQ2Skz)^yoN^5(iA6f&=DK;(+y3aKLU-EcAmW zGH)o~9-93q!Ol>#oS|li;IiBf&E=LryqO9ium^~B(Zsy5IUoZ~Q8E=B5P>FELW~1a zsOW&GQ3s4VVAKJ`I3OKOQ4$p$5KfE(%+VAXQqcjbKztHO%o$g4Yy-q)pkf%xr-}oh zW*Gr-DG<AmQaNp)mIKJGj;pEQfKEyrzyWQ7ff^?B(d&7rI0$b?lUo86FCwNhL#$&= z&@7pNB-e^2=SGWu!KecU+yQE6mNX&Bm7>WR(W-x#4ee}zI-;^j;^IKO0EmwQaXAn( b5^E*^zvitJ#sOu800000NkvXXu0mjf_qV67 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-mdpi/ic_action_reply.png b/app/src/main/res/drawable-mdpi/ic_action_reply.png old mode 100644 new mode 100755 index f93102a77b29c80856d49fe27ea4be564aef8399..a25803b295f16129331b38dd17b1260d13d9aad8 GIT binary patch delta 385 zcmV-{0e=3<0-OVoB!6Q`L_t(oNA1?TN&`_4#_?Yeyj2!f+S!SvPat^dd<F}j#=_D< zOA$*gEd>j)6j2Z@ECdlOEJP8n3?#6|-MBf4*(L*9?GE36X1+6LYbuUf#rpaH{SKsd zU<j|>FmMXMBJOZj1we?;W4j7~hIka-bAYUP&jA(?Pd0kifq$5HRNowLxW^4HafQzm zQ?@z<MdEonPdLF5p4$N_0%%7(tM`Hf9G8X214tFmYF=Qs%(D6~fPlHh7NRSK(d`j5 z3x!EH@m@sGEfcmXGW@WY0uVVxehAlpU>I>RwTiF$D6aE9Dsvg-L1Y)vAjUC?DNJLu zNi258Is)cLlzIWk>qM(fIDi?<)u9@KJ2*`RXoe`eif6Hmk^0u$=ma1OQ5GO_#;}43 ztl=RGQFa8`obW`<w4EQ4FzPDKao8z9<fr_S#Tb^b-wl92PF~^b7{_Ck0KdpmJdj#_ fZeAat@(z3hvZp{H<%LrI00000NkvXXu0mjfN}8tK delta 303 zcmV+~0nq-O1IhxBB!3Y}L_t(|+GAiC1*2dTkO|Dq%>(P}>zN0{a#K^&U=tIQnFHbg zpwB}=mebt<|NsAIG&3^`hgnWn2Y@UG274s3<#clZ)aNnimea)n`}gl>0{T1_o8>fj z0LXG+f{VvxITU9A9heTnKz1^a4gu=1w6?b9r-sjy2w08}&wl_p&c?<@oGi;hzM;T! zWIWlz!oq~!zQ+g+pn19^I|7*U6R70~paXgX0|U8fnh1fo1jwI?#}R%s&xZE)_I%JB zfuYve*ti{3rjS(-0S$;Ewj6*a;v#Ggh>VQnqDxT>EC)1^)b#`Px&qa*(ycNASq8Lp z5>R~**}kT<Iw%IEhvC^EK?;e00d>GA7zM)y004xHArOipFsJ|k002ovPDHLkV1fcD Bg_ZyS diff --git a/app/src/main/res/drawable-xhdpi/ic_action_delete.png b/app/src/main/res/drawable-xhdpi/ic_action_delete.png old mode 100644 new mode 100755 index 35c97c1364da66b6b34000dd6dbeead3527f4f81..37e9c219cb4f028f2715714dad4f178f5c726040 GIT binary patch delta 466 zcmV;@0WJQA2I~WmBYy$1Nkl<ZcwX(Au`WhI5QV=#(NL;IB-9FerB|R3ox~H+YIy>Q zPBdOYsVAW(5m75?BxJb1sL1Y_f8FGsTko0K`F3{hDR#ubztO<!#{k>`11I1sFz^QO z5NvS;7J+SGy0F_`fm7hVP*=2k(g5awor>beMFfNs;Hjvpf`7%e02YARKk~$huM5Th zgm3`_jNiUz;Gv-Q&!x2hHh|UAWD{P01)P`WFo05G-FkO`ufV`(K;_NppR9HW_OFu4 z9c2Jmsmz@vyH)~a060=Mkf7aDVi<rzuhY5%5+Eued<7JGo&gFy&wwui9)by7q=fJg zROopKD)c-AJ%0rK7w~V;KEOuEPS933!AmG1Y=sqiw!#WMTVY#aTVY#aTVY#aTVY$_ z1TUe4_;)LOC_J}Q3J>i&u&)Hku)+txjIs$q`vOG%>MsMp7O-5s15J1foGBqP0L%ls zz?8C)3hf(k3_Mn7za<#}B3N|5W<v;3d_0T2QHl?37E6GL6`imKEOig0Gh>ejUObq- z11{B*AA`%@q<SFD^#;%!dCwBM1A2BK&9~zYXpX#R2?yT+A7H3PL9tS??f?J)07*qo IM6N<$g2z|RIRF3v delta 752 zcmV<M0uTM`1BV8XBYy(UNkl<Zc-rk+TWb?h5RTX41;k=Oyr9ts5tJ5l+a#<j30)zz zmRL-ih6+9?GzRg~w?0HjDJU(JqEesoQ}WZ|_sJGYu~)jYlkI#kY}!3%=FE5IoHJ*V zM8aS&7z_r3!4Mv@*=!+`$$ZB1>p>)!%e|@B>lb6;e5q6#Nq?u)e-0}k;dLws@I3F{ zQ3yaJyo)0N-}3qV?cD^k{vy@{U?2FfS6dM9DDDxkunz$bVoyN7-#^u8G={j#7mLL! z6n<_to9AOeK)2gH3#abFfg(bF8uDoy0h@vBy9uJ-D&#%%yrM4Gb?;EON~e9_zkp5b z8P9qQ{?}1<{eJ_>Puid@+En3up-^~&fvtz=^lq|F+mRE18Cj0N`K@KL9613P$VyZM z(6$kvU<tG$Tmr4g3E=sS!AwAY2s%$&6SS@7DD3rmr*T%_$E;MC@&-#|^BA0^juq;p zZrY%&fk=wl?e;kwRo9UiJw!5-bsVR}nM1}`#h*3EOn)FX{*Uk2hHcr0eW}ALDuV#d zoJ19eHfT#70a%|KOoN%K@(zHIev0Q~q^(JYa=Bc-TB%en(*cI{|Ag<@hHcr0eW@eR zHNBN;)0R2{q)!2j5zrAl|2rBZU`a3nmNZ7dqF@9pY9yd_qEg_UU<pf#0F~u3%*woA z1k7uUfPb1`1k^NUf>Tli(3Uy^kgYwJB7nBk5x`2V6aloQaS1qrOTf{%1jYoHz?eD$ zSiq1XfVMR50ZG9<AgPW3&+~3b5kOlS2^bb6U|1ai)oS&U6alOnX{-RBks^S$R2D`< z{%ZW6q*AHhYAeIIrL76v1lKeZ&^eLyz-<J)6lu5$PpTz=n-fT=hdBGQYB#_gY4I%# zcn$;pehf}i$DHfBHwW@7GvD{G@$v#k#`*hSJm2!?atP&*cz&S-pBMNpXfuur-zfVg i3<iV2U@#aA;ovVZA{%#?*voPN0000<MNUMnLSTYW24GA8 diff --git a/app/src/main/res/drawable-xhdpi/ic_action_mark_unread.png b/app/src/main/res/drawable-xhdpi/ic_action_mark_unread.png new file mode 100644 index 0000000000000000000000000000000000000000..35083d1a58497d7967701dd54f9d11e914ef1b63 GIT binary patch literal 394 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7T#lEU<~whaSW-r^>$WZ)*%NG*S~@; zyj>l;UkR~@uGG+I)jO}$=JMy|yi4L0%&h5bM^CC;EPhazIjOuqBduvJAJ7;OxS`Rt zNc(3-<Ss>4l}Y!fsX8(+2{beWFtJU_?mjhrGoRCauJlRyCzl>Ps&Dmp%_-A^TN;&o zK4zXdI#F=q^$45(pcuUi)6b~dp3W9N8J;4zGp;yk=JMs6zpdWEEfcHWuW~5-PL0QL ziR}mFPaaZ!q;Qf+?EIHG>mG5>)%<03Ks`z4roE=p<>DTBjkwcJD`b*1CE0`?YTHd& zV{<e+mUEs;c7MlQm9H}MUscB(y<XLOOuw~O$xTdf*$)kek8W>SPc5|1J^V*_W2uP$ zmm8P0bK1^LI&16va;sU@nbU9C<|;9X<sU8kk+bh}-~E>Dm2wlp0_LzQaX5hd$iSk& jzzAg4Pk;mjLqqgGhW=3f^X$xzf<Z!_u6{1-oD!M<?k}Ak literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xhdpi/ic_action_placeholder.png b/app/src/main/res/drawable-xhdpi/ic_action_placeholder.png new file mode 100644 index 0000000000000000000000000000000000000000..ae7c98f89c4e2d11a04a06b2084b3e63108d3975 GIT binary patch literal 844 zcmV-S1GD^zP)<h;3K|Lk000e1NJLTq002M$002M;1^@s6s%dfF0009MNkl<Zc-rlo z-AhzK7{-rgVHbg=L{>`FMNovndLfw=NU#WjecFdcAeG)Igp`SRB@r1R-DE+~7h+r8 zlpsaf2UcqRPuugt95@`#%sIPzj`I$^13v`ko!NPw-JLTZ?|NR!rC2PU0#h0EI}EOS z+zSTT2!4as6#Hxj%iy5rLcu_X!1EOQy94fet`rP*6Ziu15p`8yGuTI;5=9GWpt^|o z7WIkR<+)Ta;7i~G*Z{VIUhoin0)I7-X)|De1S_+ifSaCcMG2n=Z@{WSw23+J3)H(N zejAuBQ*;zh!CqIy=fU?B#rx1x;C$3P!Abnp41|XnV`%~{Qr1Ac&p4>&B)-cqiOp3Y z^gVc{sk_2Od=prT7~r&ej8&^gTdCsTf?D+&BN6qhELMi<*&ZceBoH%E&deWZ-=~Qw zfEt_PTMYte_13Q@#^o}<0`$(G1z!y@d7B1It>MI{T`buWUsu69n>KrF7;ub<c%sLK z0RxN-n6zQQJw^t+vSGkuMh3jgN@P7atf&jsZBe^E4m5<uRtws}QK~Oje4pBj`!3UJ z?_8k%A{b@DwZOPK!D48|I8@RG3c)7~AGc1fUjh8x4^}iWgGt3##cW_+FgCz6F@H<6 zgQT^!!9~BL8m0ymV&a;T8er<=2UyS4fccoXonn9(AO?s5Vt^PR28aP-fEXYKhyh}N z7$62j8n8~?>*+dKWPBhp8xyxZ>9N>LLnkwgkHp3eF$;;4DiGMFIToY4zypj8XbhbQ z2RT{lv3Q5d^9v>{v~j-}p=`2HR>^13UCHGLB`h|(b~A+k?Vwv@n$zTJEF%LRFfyQE z!+>5!2Hdul5x&4c{Le%SoQzDM3G%f?@gG6XcA6Zm3UlCefVf2I$xu9TE2hnCDE^S2 zN9bbO?3su*M`GICcPU+73=jjv05L!e5Ci^W1NvjcbZZV_Ol>AyG9YIV@(1kJ>@AiI z?Ycadis4rxHw<kqXxco=>|i591L$=5av*h$au0jrGB#0vTpekxsAF#W+5E<=#`zC3 WyK6wXy9ZYQ0000<MNUMnLSTXd6?Lls literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xhdpi/ic_action_reply.png b/app/src/main/res/drawable-xhdpi/ic_action_reply.png old mode 100644 new mode 100755 index ea7c4eacbb20115898b86547994141c2dbd52ff3..8b1d03323c480f2b9a19583738875b34ac708a17 GIT binary patch delta 827 zcmV-B1H}CA1knbNBYy)JNkl<ZcwX(A&&y3g7{@=aANjSA;<aEyb{5J;%0l6_uvNAe z{unD8$&ZCBQ6#dlAbDehjT8xyUx|bwzxAz|I^E8>Gjq<&x#!$DQ*XW9GiPR=&+~nr zd1mgNA@eqqx%~_P1_fkJU<iTC1u!JRAq0jH$eh3s0+|b-)qh=JJ@Be)z}pIeIbaoV zE=K?|eiv{*M*uQ@xAFSD+yGe5+c3)tK+*Fy?6Uzd>iMhylzBcI09BsP0>C)WPd$J= zW~*}*Ra2P+Rp9LPtnU5-pMiJ48{mcc`|kOEl5Q@qjhj@)OZrX5_z64#9sv)4Z%M2i zGicq#hj`xCrhh-cW8k)d^3V6hCjIIFh~atHniU?`3<y`>M$bb5r11PW1D*qyfVYjT zj1&TGc)o0@zkut&4M2%BYV%b<+nz5oQffF4e2huJ2f(B}UuLJa(KEp7SP=RKKz9EC z&H@i(K=1*edAbk+MSGPOP6JPyLhuD(Av7&~ny$C_zJHXUaA*V}1V9&+@C7((O6*#2 zLjiPA2`ZXS0Sb%YRtG>Am2eZd8f<;TgG`sUN1Ypv0WU)#)K!3;CuDc{3cLpv0*isA zz;a+&=%Oq7%lPAf4prW*DS(iiP<0_97%PF*z#3p3ps&&Nf9U$I0JprYuQ5T@*gi@K zy%AaqY<~ha0~?HTT()UfI1K!Db+pez36C4sl@me%6z5t2Yz4Lfvkv1f1M`yr;MyIU z0I>Ebe+a}*6C!1HegKa6svxEUiixqTVvGU6&anX4ZZ2b`j?t!5<6R#WqySK*gqQ%V zZTian0I+eySe3^oCkdczcSr$1^T>%ifPH|Jp?{{jK*{iv3qmRd6vM$@o2LR`=h_17 z2bP!*ypmyR07WIV@dF9f4~I;F^$a*MX$2IOphBmOpU5a595mIY!a%o3m8}g0*vVDl zMZ3y!cvcXkgp01-piKZSHO79f#HecWLRS<J+d!Z3R4d%c8Neb}ML5kN;G>Y><EGc3 zeKhJcD4<W?O0m{K0V$~VY0N<Zeeza{wGIkMLA6g~{s)T^enH4%LpuNf002ovPDHLk FV1f&(cwhhk delta 599 zcmV-d0;v7b2JZxrBYy%mNkl<Zc-rlnO-lk%6o#$nlQt1;`k+k|waghO9mP-(bmPVr zgGw1iWswy@R12YkXc0tE)UWZU**S0pnf#hTXRi007tT)S&hy?gckVrB0s$6_#bU8o zEEbE!@<_U_=c?7}I63foy*`5Qnx_4dGeE#w2v5!cJ3J`^YJaubD8Lt+;mH`#4xWSo z2p<ZC4qCx0Z-AKjQagC14FIq)nE9hl@X8t>;E%h(D`^121K4RV@X8q=;Lm!6SIPhc zfd%i}3A{1}2>1)9@Jbj^E|(`@!Mk(=kFf(X3`4g^Bof&+O>;9Ik1ygF(!#^cU%7>M z5I-=^GZ?dv=6__f*(u-Q^ZEQF+|;!P@c#nF{e-M5Boc`QKjClvfNzdqF!&7_v4{8L z8GI_0nwA0HmJv^}SZv7?co^_bCitfK2#3S#<YwQ#Hb5q<l6d|*nDCa#WM&6$0t|K| zu?Z(C?Ezc`tOr|OnNX253+|;q2XxvB!wl}?W(S{Xw}01;Mx$#(e;C5D8hE6^rsvf~ z78Iqf1vohkT9!5Abn6Yje@6qADTv^j1OIt+xEQWTTMu+o55O%io(_As_80aaF>{nF zigu|y;nBI2PN(O6uMfhF91g+&NNc0jwXiT_n&z_djge$BIcHn!9^lovA#HaED>?nH z3F5&A;!p)&k=S(}h89_0o1?f{!pCfAil?GUS|HgTZ;12<675VN`H_@Z#B!t!XqZ6S l02YhIVzF2(7K`P({s5=M)cYxsgctw-002ovPDHLkV1n|k6zTu~ diff --git a/app/src/main/res/drawable-xxhdpi/ic_action_delete.png b/app/src/main/res/drawable-xxhdpi/ic_action_delete.png old mode 100644 new mode 100755 index cfb99e17625e1bc3f13513ee978ca7c8ea6787a9..ef8e4bb424fe7f4ac8587f423d15167d4a64fbb6 GIT binary patch literal 849 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7Ro>V3zQ7aSW-5dpmb`m#CwN>-8TV zCW3#M49$dmd3sC*m|6cHu>Wwh<<V>YKg^EIh8J!ea4|Fz+wWj-@rb%=+`;2_e7|2= zciH$&pPI#1|Lak;tKRz*q&LSbWij*Gz1&hT;E#Zd1B-~TM&5kRj)o+rqi>BF1p|B* z?5I^!VCv!&*?ykI<$yiQE$2cu3*NhR!T<Se*yl06eSS2?drrgVxewPTtXHv#<@wv^ zAF<wcF4H;5_p3cCnD)FVJ$(CYq0fQFnGCllUjBUJX4ly)p<5G8zGh|H`^Iirw{LsH z-UFr&9`ww<W1f7rY+B9CjX#tN*ne0hzpbBc!IE=M<U+RpxjAYN(pW46*Prieu=-|i z?e4&`M*TwEp-Oh23a?K>^BA<<FPKF1y*j#|S!VXVt26iZFNozmy>TZ;LBQMzmQDxe z*n9ijXxh7F?(c2cEe+AzcFPOb9KM;>(olVlm*>R3M{fifXXUYExLxbw*zoA;L%{`- zk=jZJy29Jt8`4tNb}(qi$;vU#nz&VoX-!3G#gJBb<0DfZ^V`=t<&UoJQ~tH<^D+0D z*t4MzHWUjVd-MH3Y;xW9{{b7{$>}qw&z)_Mwx2~#@^d?f1yc;$Hw*Km6aU!mu-}v1 zRPWwr(G<10`vB*2H=dj88`|6M*ekhn-r$d6>f334Me{%J2ZkSaH1ki-2xPj&Yr^@w z@iDhu->r?Gr7CQg>Y9y$4!qLLc;BM-P@^D&Q9kgt`&s@2x8pyoP5*a)ae(3h+pE@E o_Do%+u7uK~gJI*NZ}tpTuL}|nY}zsjm{k}&UHx3vIVCg!0Dm)ZegFUf delta 1151 zcmV-_1c3X|29pVpBYy;1Nkl<Zc-rk<`%6?o6t?#Zdf0=Yi2BKjp6ui9?$s7GSN8`| zOUOk<$y!81K@w4@WmBn?FiKnd$v?$E&CUlSY!<rfuI|ja-v<NB-Fs)wobR49GiM&R zu8trGf*=TjAP9mW2!bGpU}I}*>xl3B7gDLzmHnpH*49g#n}3@}sm(HxOeW7qB9Zsu zaClwP?+Vho<nvMTyGE^+foL>3T%qFsN<zXkwOR)7)>fH-9~&DR$En%U3CLBOfLtzj zf|}hY0k8<q^B$C%<o-z#P(=cyO&BP%4e1~O)g|CXnFJ(BKy3*~kN^^(j{qpKr>Ex} zM#wU_s>cA!q<?x`!+*Gk1e6(a$Ye5SrT216QUndCDC}FY0z;wDFS%Bzpc`6{eEX4i zEEWr+tW+v>24x3M;fT%1+j>(J(IN_YE6Vu<1y{4*Ut(HA*&@Rmk)^q*sp*F5xKT?> z%T=lHOR4x`4U}DKT7-;{RgL1u#>P%cr81Scki$-p6@M~Ab`1^cpeu_14-tbJBAXvv zB>=LM01`j~NB{|_h=2))37Bx608EZcZ(`2D9?)z$oxZGMERf6Pj>Y3~PbxO!fbwS` zD`ZwVB1YiM^So#BhGj#c(C1nX&``FKAq$xxTi^n5Si2){+<nA`L=k<G-eC$-{O__T zX|)Q9UVlYi$kXKAhq6#+dwcuEKnCPWbzA-Y{im=-D3M597lqwvY;3$MzaPo(5F)3= z3D@u+?!moy2G1f7weEy)(B)9Z8jlIYUBqo%Bn6o;lZJLeEdkOXu9${#1w9X`@N?hy z?_sRa)zx+SFnl%2Kv^gg4KZYZEJd<?S4)6Y^nc54GgPMMlSg0NjG#y5nb!ylV{MS> zCH3x+`pmt9c-G`GX~rOVQ^wjZUDL0cEg<i}KrFA>0%jcuLCk5kfGGzoU`n$Ej5}Zf z<C-mC!~qK!(L4?qa9|E#K(h<#b-)GnYPNt*2P~jdvjwy{U;%Av3BaU>?F2wZ%`PbF zfPV{$swE&6i#@iT0LZA>1vNO}f*RBk;QRh<+X;Y-Y6-wRt?dLrMzsWB1%&McKt{C$ zU@w^M1VBc$1Yn6smDc(kR9c0MY6-wr(W1Fm8`FyF?X1{^D3x5Yn1ChqCu~I`kp+w6 zKnr!+Ve^I!6&o^2uz+ccEnqqb7BFG41%FHg!2+@tTR>Jl0iNd#SsaKP3W5uIWw8bH z1;GNkEw+H}AXq?$#f@-UJpnkI$Ku(r<{-GBxWz6guATtj_n%r!z!UWZn3J;#7WRM& zs!qz<qahyV7@+p^0;3iYFdDdHEfIG|qgTuDw3IzBJ)c;hzp{btp`wU~a7$(b-FQLw z^_Ni=%H$6E9l$1OoP>+RRn1E35q!!7Z>pKf{AtenEbREa$-23=X70f@*m?6Alo8~G zqYU^dlM2bfF_POy7vrFf?T_`~_x91nxQ7RD5ClOG1VIo4K@bE%5CriL{s7)|T+`%{ R0IL81002ovPDHLkV1k7b8gKvr diff --git a/app/src/main/res/drawable-xxhdpi/ic_action_mark_unread.png b/app/src/main/res/drawable-xxhdpi/ic_action_mark_unread.png new file mode 100644 index 0000000000000000000000000000000000000000..968b84969b6cfddd35c457f341a77d6883af16a5 GIT binary patch literal 620 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7Ro>U^4b}aSW-r^>)r_ze526Z97G! z6xLM8#hz$#>7CB1SF-T@18Kn^PD2(Up~eY6nDz<trL1aekaev3yYESS=1a@ZTZ3<1 zo^YBGXdntW(*Cq4a=Ojr(pP~T8D4fLtbAD%7#KMm7?=ba7+4e(l$oR^m3Qr5=cs&Y z_e1rQHqEW`U*CDXb48$Fzoeky^__0<KjK|<f+Bvn=5X(Kb<uTAZ>c|W{ZZJHLt1Ud zj~tDB6CN(N`u1yKsl~JF7uG!qnZ*C&{;DT&M&1q&)2*&$9hmdU>U*BdJLalM!k&f+ z(&ooN`gb!HYrKl7F5Dv+&ATd9Ah35L$NmqY&JUxdTl?S6-LSk_SHk6v=RGBjKUwo- zogZ>riR*XvEB%^e?5X)+vzAtpkkdo;UF*FL%<!`MRwp%&wer}tCvt%;@fFu^WbHAr z>#3f&rB})7|CL#P!jd&>ZdV*p|Cjk<wcoW%v+`6Q+kP{=maDsV+1lh&cOJiJ40QR) zuk`28^xjta4RRlJ7iCx|=at1MtNq&Ewec!X#DtsoW}Q>@JFsuAJjmtI+jd%PxSEpY znxnDPL}Y7DhG}2jwF#;x|GG~3CK0dMawt8`w_?fL!-hSl^G%h-p7s~J#pGsN-|AcE zZ1u?af7p@ht>urK&SYyUrVCyAtjzKuP5=@SNO1yWF8Bb9Ax8!#4yH{S4e~i%pV()k d#43nW_L<ZA+K&)D?oW*%uBWS?%Q~loCIAY1{wV+e literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxhdpi/ic_action_placeholder.png b/app/src/main/res/drawable-xxhdpi/ic_action_placeholder.png new file mode 100644 index 0000000000000000000000000000000000000000..55f33b9dfc75330a1b9a1704384ff16e51620755 GIT binary patch literal 1391 zcma)6`8yPN9R4!n%!F}{bJe<M%dMedNRCZRSXW`Bt;rSEIT*)ODAYv8-B>)tj?6Yi z3{lS68dGxYRIZ_MPm~-_So;U;^X%t&-uLr-etDngec$K#<Y3*LV3I15005YavxCRM z#{CO%(F2|-PB;O8h=q%TomV1vrDFRU?3{dm-8U}RSCv+qU4eh680JqFKLW3<veUb` zZP#-g-Y_qn-P76VuzcOOG_>CFVQA9+@E0^8keNSL@@#@RH<28<ezuI6Ab3?i^eTW| zo?OYhRPRvzMgj|AXp#6vVmspZt)41eh}8;8F)gHI@c5XPs`&aII(_QJ<|$eHHPQTl zzWz?B4Z1=XZr=QzaGnb<`nM`4tg6`{{aF_%+jcuCvGMb;u^}~xLyuKAEfe~hQF$t; z>Y+`lMQQ?^A>%LbK#gSWyiGuJ5#6MHrTQ-NdcWRZ)Wh@snI&%>>x;B@r|NpoRB#OE zkzOLN^98)MH1o7a{>c3?z1>7d`<s3+T1L|sPgxfa=n8@XD;?b3v&I+uc3NNeSfyCo z8xh<?`On*XW<K_VMFX1}&gaNCo>AhgmXBMW)W)l3%=2bV$mSTGp2tN)2s5JVBz0vJ zGj;5W^yVfR34hJld5`;^s;_}Bc%$#HT_%N-9vVLCXFxD;S6xtjahe8e&0ch+XOK>& zish=vMH!opuPl#=DLrnSc9qQCPyfKi%F-Yy-Xn}aJ<HxL2$i78V`kj!8A0?4Bwv`= zAd=g{kZrS`b!7HSD7Y^q6?>-~e=K2b_^whQFCf386l}2PBfn2CFKxDSyz#^f9dpr< zq-KZ4m5C2Tt;uP-zM896kZ~H0s;D6rif|qe!H6YTXZ@{CGcjMOtzKJ*7<-SbjA_W# zl#7ElvjDF@7V8A!M1>NSZCyCsTO_Fk;*73DNSv?{xsE7HV%X~fLzro2AP>03*JS|q zB9z*P0UK6A_2x2NyWyqNQX7Qmj3LKU1u#$YotM#gR%Y&1eRl9sr6hzqv2c@<v~JQy zSybZ}gcXanHj&i`Ayw6CSKbYf)mxI_Z!KNHhz8qOvXc90XU}fFHn`!8(Qw#$)XWIs zhI51R^CLJ-zsp<7Sb;x3MH<Ub^mt^6y8Fa<N}@AoBSQx=ML|&%j;vj-4YNBfIIrXf zsM#SonWK$vPX#`xL7E~cu2wz~rHuet^6oM1B7h~o6aWXp7$6RWegM#PAOnQ|_i+iG zuCM^b)+RRR9SAoSM=jc$07b(Z#id-4-&GFdS}*EQXoG+npm{vA5*IE<ng;lgK5}|o zX-E7h^oEfo2AR@=oK;+w9^ic)AjTQI<krx~L-^Kn6XjRBbvg)R=8Bk>ldIoZ&6_ze zl0`I2iPe#I*q?$ADTRR<3;s`YOyxrN85La}q|_Xn64CIdyYGP$w9xWF7qAMz`D39j z7{o6?aX7}3kD;rvjkdfRf8Hzcc38U>_=d77!jB2M8KL1@LCdnEmL-<jHhJ;C{&;N) z#*TcLuMmM|d^sBpdE%2?2$?ak?M3CU-ca{7JLVdd1CN{ZF&n)HUFmUXw$*1iJ=gZW zN3CG`76nuv;s>-=;f&g>Z=<=Yv*hlYy6(7|kTBW*40a$AMA!gPgIQEwbC$*AWq`VM z{Bs!-eyKoAuC0-yv73Iuw*Qkb1nFhuTk#-G<ADH+f5bX?0(f2Fc%@z;uF9)(p~Mw5 zeQ))SDOcuJ_2z){`<i>ClHo(P-^6LU7?F$HX=1Z6`RKfk5kl8O!J)lsGy(n;V~J`j iv-su1boLxG{MqUxq+4w)#k(&U9E{6pH-{#BT;@OKQFf02 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxhdpi/ic_action_reply.png b/app/src/main/res/drawable-xxhdpi/ic_action_reply.png old mode 100644 new mode 100755 index 9b6d9efdf8c8f64f5f26fcfad31d1d1f2a48b453..15a3089bef7e8cfb774de2f9521f5eee81acda66 GIT binary patch literal 1364 zcmcIk`8(8k0RDXEV6evhgxs{QCn`-uG>$PDW=wWU3XOCPo76aFP4S&_grXR9OqONI zlgT)CBqpC-#Y5XRWx^_qCLL6!B$D0M{s;TZ{_tMU`~LjqGZ|D}ZF6k^fNsdPpokS^ z{|kb~3O~D;?gapTbx4puix>M=^kgP2(711FlgE@WezWl^nw!vW>I8$96y3p{bT{az zx@q@(AScKv&mr3D$Fh?1bI!)c|7bXRe?NcAgVu#Nmq;GnW0y1dGYgHriJul)he!EC zzmIpShggCbx~!9HK~@z)#0%}!-k3IPpakZw@(~#o#U5@X$1hkR#Hwb@xiLQOKMcg$ zBBTo}|GCT2V?h>-_NJ~+_D&XK*QvUtDyP3c!w1Bw8;c*(v~1qvpE+tW^~hZx+)Zz$ zfU=L)byp`(_9HCJx-g%>3L-Rxx7t+TETwqtD9wjhWr)%_eTXU6G}MO(^`UU3`vwUM zSqXql8$AYcklH#+O{OW#fs|@#>F6)vcOp#oG)Klzf7n{zV7H{JHc?X+7qrxTM!n1; zvBS#d{f@zQ^?Q5udbO=O4IM133sFh*saT0|);#Vj#!t^?9NcC^R5dr_QA3U+wcK4W zEU5S`BY?5@MPIoFb8f)eh{~BZQBsso)~j}QSK#EOi-Epb_)4S_i~ITdPHpl`n+Js@ z;92nu7mo}er0;3q)%?Ij?ZhG21NkJJ)!YRgc749}yxgzmkf0CU+8fle?5hbG+kE0j zIs4Mx)vqsBKc3|xZxpUsSBtuV9;PWOze_x^8I(I@DuPQl`^)LK61d=N*`CsN&4lq) zFM#}fg(==3C*q+moFE0nxuFEx_D4}Fi<gT$b6%T9wgm_+#`)Iy?bo$k1xsw5@Xp%C zx(CHLbWOcIeIyC**J8)ih9&lse5F+45-AD{0in5SzvTM6Dh>yPGN{Gaa3K-V0iow` zV|qziS1<*~Bp3;c;1V~1Tua$r8-;PYP{eY{bQP)J!Ackl$Kh?5Ihi#xXIdbhetnOk z@EqOH;w=@m+!daS;)5?(O(YMK2lBAgobIyRngjQ*AikCd+8>>MvazZ|zYdH%=eC1q zhm}0#P2jkvP14&Kbv*4lo}J`9fJj`5B1W2F2+W6ZX44${=OwijH`sGi=a5v_iDXE_ z?6Mp-fE?Hl5f9c07op2Ri=|mxlD$m^UBK3|DWZDLeTTLRP8%r{GG*OUvD;cuTU%oe zetPjG`;3>4SF+t1>hZ!<F$f~WUrA5IoVh&HFfGzIC@4De)<@YZIvKnc2@}XMWaH@K zmWrI!pEeP8`|?xw-C2InNJ5)a6ozPT9X0Bt*YmD*TG91$KGjUmLVrCVr355`?FxH= zs~~>pT4T$dRH(-#e8jMgvSY#F6Su6R@ghm^t1mqjvJ$h8IChNpv=-W1zguAf8(e8K zYp-^eJZ@s?&@6|OE9I+Ep4(FS*cA3J)<(r3^8=qCqmZ}!N~nGrUM{|!lDU^>=J5K| zj0ri6dMItVe*-7oIXQ{BOjo{hnD?Rk_i*KrMmzYkpIgfcaFoVJQ@Us@?$XnYBDCM} z;RutPbG>Kq;ak}0tU3mq6OKrCkmfH-?#48c=}AO(3#%sACFWXg?V5Z2_mQyjgp%r= vV}2L+o1L{F7wp!M5+PY3bhG>){8uFM+ljamTKK+|w*(;+M$nA__NjjWBUxk# delta 908 zcmV;719SY;3ZVy(BYy*ENkl<Zc-rlpS&I`v6ouo88}1L{lM5pFXx2^>@(@W#Kto_a zA}XjTOki9`QDh9txPgi|xXe?2N`6{A7kVU&qv@qOb-Vj~P;a5BoKsb|s_yO1<p?2! z5JCtcgb+dqA%qY@2$^OwnQW6rB`h!=kGGdfrK{a;cMsLDB!7OPP*|q{7R9Flb7nXk z?kE<EH#Wql0hYz50drh-wi2HP%xUC9=sR19PXjEAPXl6Jc4moB1L7O`yCCl3Eb(c8 zW$|f%VMe3T&LHB`0D}w$gWWjcE(H;v2ACE9eo*mgfT1-XhpY!-#HRrfX*QdCA^xMV z;?sbL;$zu)5`RT}8W0i@4I_U!s`xY@1ifBwKg54(LVOw!LVSq!+?4n<AOQV-e;-Ev z3zOp00H4(B^@DMUFHN2;Cj76-IYUm_nXI4?fw0?Ii9>v^efQDU(7vF(lO+)Sxr+gD zrCP0CY`5FT<mNS%;&(co12KzlqWwa9i+0U%oC~Qj!+&+%LkST7uZEfN5&ga_{ZFj; zjYi`L{><y7iNC3>!Hfl&#fcmFDG+~pMts83R8B+yN5DOrCh@161a7%L(R{aa9HV75 zjp9$uhF9`G)rl`#Id3Pip7sV4K4ANLLY)EV*qbaEu(4B;|ID3_-I%bVE+%Bn1k8ln z>UKwI+kb}om<gpU-v6jNC&)EBO|Wai0x#n%Ut380Q)`0hELe!^=-5ptm&-lvd0=Y^ z8TkzkPv<I?O4DRMdUGt0#1B)FK9G|v`f|(51sLm#<2d<DRYXM131itfpU>yt8=M9A z)ZdtT)o{yNlJc!q>#)I%!dH2#N4*K!3bQ0ecz^j~6EW#bA`&+;6VTzuTFO#twc1%M zM?a$Gm(|CCX=K+Br83%dT@Yfz%?RuNL)UdrB`$xgsXX1=9sLa0hnG@Kk?0BvO)qHR zna_NV_*J=xOGME1YeLZX!{RUi%TQ~E@SmakC7HRow4vc8JuD}u{~`Q0oTR&|6Z58G zf`84|RK1z_=Y%XfBaHa#YA@U3GC|5fY*j}~&ewbXBKGwsb6LdZrwXJ_RL%vttiz9W zC^12j-!#DTa>Nfd>6i)pWSKS-XuzD2LMVQ=QbA1Mhg+4HKm#l<NBnp<A%qY@2qA<J iLI@#*5JCv?&2K=j8dJOJuh0Mh002ovP6b4+LSTZa=Ca8E diff --git a/app/src/main/res/drawable-xxxhdpi/ic_action_delete.png b/app/src/main/res/drawable-xxxhdpi/ic_action_delete.png new file mode 100755 index 0000000000000000000000000000000000000000..b66482880bc46ca477f73b47fa90e2b4843e5ed9 GIT binary patch literal 1072 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H1|$#LC7xzrVE*pu;uum9_jayrwrHS;YxtG` zX~C8o9lcAB?VoV&*e$(fLI;lpd2bZ9wq{*D<J_%ddi4i0G7}FRYEXz;(JIfg=!k<4 z+o!a<<>%{i@6FwN{$BPup7kf0eopaASor0O<UED|nI;AShA#Dhnm;)W3;{Ncj~=Hp zvot*76p^==R$vhEU-09{O$NpV6--BupJ(G>I4Z1RS7+wH@It9E_yAWy-lEKH4W$nr zyHpuZewoPZ6Z>zz(XNJsdyE!*G4ns1yI-r$Ct$<4@7x=)xgT4fOExV0v--fL9^+f@ zKg~X{xw17Oj&Z}ae{lw9-abz7VrUcJ^7L=sa^`=3c{WrWc<=XhYwm-;ik-O(%pu1A zeK-%eCX_xC{;IfvZO^QvDGUa#ryiR!9r$r(mz5yHu2sc<3>Xt?(qiXwFvMQ9tee4L zV7GalA4|i!S2FfK3=;Dr!_}D_!b|()mw7WBJ3c|!*gxS^JX5-z56dxi0fuAg*RFOl zTnL@}xSf;XvGMCyF5C<;ueC0IJZvLd|Kx+;7KQ`Oho#f?)|cEak!3jZr9PXTVL$U# zM}~mM-;Xjk+;4oPz_8-u??;RW-aC{EFkJaj`;p;6`2s5rhO9sPDi}Uk2gtH8nAXMH zF#M2R!N=4fwO?P3;SXO3JEKGIeQ|z<I`&n~3=59E?;erHK4sj&FB7Q!;YdAGxlLup z!~4hYGyBa@?6?)*uzOLRFvA_DbF+ZF_YLhJUJT>3vjQ$}c^~Xtai4|ZdBf}jfyNw; zzpX!TRA^`XpPKVfHo;&sQ;bowz?OKX*G=#2C#_}Jz;TDc?^dJFlK+wwJURYLwlDY5 zX5e9KcR!fL$YIBrePCMbzXkV&7(^8^R{arUl(6CLZ$5pXwJ(mRU3}m51KncR{+&B} z`4-!am$?-xI*iX7FCW-w`RnKh_7A*281^ulMMwVJEpM&MeBqGtrfPo11;4xg+b1v} uvWvz%hmRjOGcq}RWa;Xk&r2xB?PsVIX>YU%Fs}xd1Pq?8elF{r5}E*~Z^_^Q literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxxhdpi/ic_action_reply.png b/app/src/main/res/drawable-xxxhdpi/ic_action_reply.png new file mode 100755 index 0000000000000000000000000000000000000000..2f08cc88d29c1b6abd86c457052a15378c8b801f GIT binary patch literal 1929 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 R>XE!y;7n&YG~2V%{sTO)I`#kn literal 0 HcmV?d00001 diff --git a/app/src/main/res/layout/fragment_subscribtions.xml b/app/src/main/res/layout/fragment_subscribtions.xml new file mode 100644 index 0000000..cd73e5b --- /dev/null +++ b/app/src/main/res/layout/fragment_subscribtions.xml @@ -0,0 +1,31 @@ +<?xml version="1.0" encoding="utf-8"?> +<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto" + android:layout_width="match_parent" + android:layout_height="match_parent"> + + <ListView + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:id="@id/android:list" + + android:paddingBottom="88dp" + android:clipToPadding="false" + android:scrollbarStyle="outsideOverlay" + + android:layout_alignParentTop="true" + android:layout_alignParentLeft="true" + android:layout_alignParentStart="true" + android:layout_alignParentBottom="true"/> + + <android.support.design.widget.FloatingActionButton + android:id="@+id/fab_compose_message" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:src="@drawable/ic_fab_compose_message" + app:elevation="8dp" + android:layout_alignParentBottom="true" + android:layout_alignParentEnd="true" + android:layout_alignParentRight="true" + android:layout_margin="16dp"/> +</RelativeLayout> \ No newline at end of file diff --git a/app/src/main/res/menu/message.xml b/app/src/main/res/menu/message.xml new file mode 100644 index 0000000..aee2121 --- /dev/null +++ b/app/src/main/res/menu/message.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="utf-8"?> + +<menu xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto"> + <item + android:id="@+id/reply" + app:showAsAction="ifRoom" + android:icon="@drawable/ic_action_placeholder" + android:title="@string/reply"/> + <item + android:id="@+id/delete" + app:showAsAction="ifRoom" + android:icon="@drawable/ic_action_placeholder" + android:title="@string/delete"/> + <item + android:id="@+id/mark_unread" + app:showAsAction="ifRoom" + android:icon="@drawable/ic_action_placeholder" + android:title="@string/mark_unread"/> + <item + android:id="@+id/archive" + app:showAsAction="ifRoom" + android:icon="@drawable/ic_action_placeholder" + android:title="@string/archive"/> +</menu> \ No newline at end of file diff --git a/app/src/main/res/menu/message_list.xml b/app/src/main/res/menu/message_list.xml new file mode 100644 index 0000000..75f182b --- /dev/null +++ b/app/src/main/res/menu/message_list.xml @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="utf-8"?> + +<menu xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto"> + <item + android:id="@+id/empty_trash" + app:showAsAction="never" + android:icon="@drawable/ic_action_placeholder" + android:title="@string/empty_trash" + android:visible="false"/> +</menu> \ No newline at end of file diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 25eeaba..552ee71 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -24,4 +24,10 @@ <string name="manage_identity">Identität verwalten</string> <string name="subscribe">Abonnieren</string> <string name="title_activity_open_bitmessage_link">Kontakt importieren</string> + <string name="delete">Löschen</string> + <string name="reply">Antworten</string> + <string name="n_new_messages">%d neue Nachrichten</string> + <string name="archive">Archiv</string> + <string name="empty_trash">Papierkorb leeren</string> + <string name="mark_unread">Als ungelesen markieren</string> </resources> \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 9dad53f..2034dac 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -27,4 +27,7 @@ <string name="n_new_messages">%d new messages</string> <string name="reply">Reply</string> <string name="delete">Delete</string> + <string name="mark_unread">Mark unread</string> + <string name="archive">Archive</string> + <string name="empty_trash">Empty Trash</string> </resources>