|
1 | 1 | package com.zulip.android.activities;
|
2 | 2 |
|
3 | 3 | import android.Manifest;
|
| 4 | +import java.sql.SQLException; |
| 5 | +import java.util.Arrays; |
| 6 | +import java.util.HashMap; |
| 7 | +import java.util.List; |
| 8 | +import java.util.Locale; |
| 9 | +import java.util.concurrent.Callable; |
| 10 | +import java.util.ArrayList; |
| 11 | +import java.util.concurrent.TimeUnit; |
| 12 | + |
4 | 13 | import android.animation.Animator;
|
5 | 14 | import android.annotation.SuppressLint;
|
6 | 15 | import android.annotation.TargetApi;
|
|
29 | 38 | import android.os.Handler;
|
30 | 39 | import android.provider.MediaStore;
|
31 | 40 | import android.support.design.widget.AppBarLayout;
|
| 41 | +import android.support.design.widget.CoordinatorLayout; |
32 | 42 | import android.support.design.widget.FloatingActionButton;
|
| 43 | +import android.support.design.widget.Snackbar; |
33 | 44 | import android.support.v4.app.ActionBarDrawerToggle;
|
34 | 45 | import android.support.v4.app.ActivityCompat;
|
35 | 46 | import android.support.v4.app.FragmentManager;
|
|
47 | 58 | import android.text.TextUtils;
|
48 | 59 | import android.text.TextWatcher;
|
49 | 60 | import android.util.Log;
|
| 61 | +import android.view.Gravity; |
50 | 62 | import android.view.Menu;
|
51 | 63 | import android.view.MenuItem;
|
52 | 64 | import android.view.View;
|
@@ -539,6 +551,7 @@ public Cursor runQuery(CharSequence charSequence) {
|
539 | 551 | }
|
540 | 552 | handleOnFragmentChange();
|
541 | 553 | calendar = Calendar.getInstance();
|
| 554 | + setupSnackBar(); |
542 | 555 | }
|
543 | 556 |
|
544 | 557 | /**
|
@@ -2040,6 +2053,66 @@ public void onNewMessages(Message[] messages) {
|
2040 | 2053 | if (narrowedList != null) {
|
2041 | 2054 | narrowedList.onNewMessages(messages);
|
2042 | 2055 | }
|
| 2056 | + showSnackbarNotification(messages); //Show notification |
| 2057 | + } |
| 2058 | + |
| 2059 | + Snackbar snackbar; |
| 2060 | + |
| 2061 | + private void setupSnackBar() { |
| 2062 | + final CoordinatorLayout coordinatorLayout = (CoordinatorLayout) findViewById(R.id.coordinatorLayout); |
| 2063 | + snackbar = Snackbar.make(coordinatorLayout, "", Snackbar.LENGTH_LONG); |
| 2064 | + View v = snackbar.getView(); |
| 2065 | + CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) v.getLayoutParams(); |
| 2066 | + params.gravity = Gravity.TOP; |
| 2067 | + v.setLayoutParams(params); |
| 2068 | + } |
| 2069 | + |
| 2070 | + NarrowFilter narrowFilter; |
| 2071 | + |
| 2072 | + private void showSnackbarNotification(Message[] messages) { |
| 2073 | + MutedTopics mutedTopics = MutedTopics.get(); |
| 2074 | + String prevId = null; |
| 2075 | + int nonMutedMessagesCount = 0; |
| 2076 | + Message tempMessage = null; //Stores a temporary message which is non-muted, later used for retrieving Stream/Topic |
| 2077 | + for (Message message : messages) { //Check if all messages from same topic/private and remove all the muted messages |
| 2078 | + if (message.getType() == MessageType.STREAM_MESSAGE && mutedTopics.isTopicMute(message)) |
| 2079 | + continue; |
| 2080 | + nonMutedMessagesCount++; |
| 2081 | + if (prevId != null && !prevId.equals(message.getIdForHolder())) { |
| 2082 | + prevId = null; |
| 2083 | + tempMessage = null; |
| 2084 | + break; |
| 2085 | + } |
| 2086 | + prevId = message.getIdForHolder(); |
| 2087 | + if (tempMessage == null) tempMessage = message; |
| 2088 | + } |
| 2089 | + if (nonMutedMessagesCount == 0) return; |
| 2090 | + if (prevId == null) { |
| 2091 | + snackbar.setText(getResources().getQuantityString(R.plurals.new_message_mul_sender, nonMutedMessagesCount, nonMutedMessagesCount)); |
| 2092 | + narrowFilter = null; |
| 2093 | + if (narrowedList != null) { |
| 2094 | + narrowedList = null; |
| 2095 | + getSupportFragmentManager().popBackStack(NARROW, |
| 2096 | + FragmentManager.POP_BACK_STACK_INCLUSIVE); |
| 2097 | + } |
| 2098 | + snackbar.setAction(R.string.SHOW, new View.OnClickListener() { |
| 2099 | + @Override |
| 2100 | + public void onClick(View view) { |
| 2101 | + homeList.showLatestMessages(); |
| 2102 | + } |
| 2103 | + }); |
| 2104 | + } else { |
| 2105 | + String name = (tempMessage.getType() == MessageType.PRIVATE_MESSAGE) ? getString(R.string.notify_private, tempMessage.getSenderFullName()) : getString(R.string.notify_stream, tempMessage.getStream().getName() , tempMessage.getSubject()); |
| 2106 | + snackbar.setText(getResources().getQuantityString(R.plurals.new_message, nonMutedMessagesCount, nonMutedMessagesCount, name)); |
| 2107 | + narrowFilter = (tempMessage.getType() == MessageType.PRIVATE_MESSAGE) ? new NarrowFilterPM(Arrays.asList(tempMessage.getRecipients(app))) : new NarrowFilterStream(tempMessage.getStream(), tempMessage.getSubject()); |
| 2108 | + snackbar.setAction(R.string.SHOW, new View.OnClickListener() { |
| 2109 | + @Override |
| 2110 | + public void onClick(View view) { |
| 2111 | + doNarrow(narrowFilter); |
| 2112 | + } |
| 2113 | + }); |
| 2114 | + } |
| 2115 | + snackbar.show(); |
2043 | 2116 | }
|
2044 | 2117 |
|
2045 | 2118 | // Intent Extra constants
|
|
0 commit comments