improved notifications

fixed #302
This commit is contained in:
Mariotaku Lee 2016-01-28 12:10:30 +08:00
parent a5b8d582ff
commit 15e3244ffb
28 changed files with 64 additions and 43 deletions

View File

@ -266,10 +266,7 @@ public class ComposeActivity extends ThemedFragmentActivity implements OnMenuIte
@Override
public void onBackPressed() {
if (mTask != null && mTask.getStatus() == AsyncTask.Status.RUNNING) return;
final String text = mEditText != null ? ParseUtils.parseString(mEditText.getText()) : null;
final boolean textChanged = text != null && !text.isEmpty() && !text.equals(mOriginalText);
final boolean isEditingDraft = INTENT_ACTION_EDIT_DRAFT.equals(getIntent().getAction());
if (textChanged || hasMedia() || isEditingDraft) {
if (hasComposingStatus()) {
saveToDrafts();
Toast.makeText(this, R.string.status_saved_to_draft, Toast.LENGTH_SHORT).show();
finish();
@ -278,6 +275,13 @@ public class ComposeActivity extends ThemedFragmentActivity implements OnMenuIte
}
}
protected boolean hasComposingStatus() {
final String text = mEditText != null ? ParseUtils.parseString(mEditText.getText()) : null;
final boolean textChanged = text != null && !text.isEmpty() && !text.equals(mOriginalText);
final boolean isEditingDraft = INTENT_ACTION_EDIT_DRAFT.equals(getIntent().getAction());
return textChanged || hasMedia() || isEditingDraft;
}
@Override
public void onSaveInstanceState(final Bundle outState) {
outState.putLongArray(EXTRA_ACCOUNT_IDS, mAccountsAdapter.getSelectedAccountIds());
@ -520,7 +524,7 @@ public class ComposeActivity extends ThemedFragmentActivity implements OnMenuIte
final float x = event.getRawX(), y = event.getRawY();
final Window window = getWindow();
if (!TwidereViewUtils.hitView(x, y, window.getDecorView())
&& window.peekDecorView() != null) {
&& window.peekDecorView() != null && !hasComposingStatus()) {
onBackPressed();
return true;
}

View File

@ -4,6 +4,7 @@ import android.content.Context;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.graphics.Typeface;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.content.ContextCompat;
import android.text.SpannableString;
@ -19,12 +20,13 @@ import org.oshkimaadziig.george.androidutils.SpanFormatter;
* Created by mariotaku on 16/1/1.
*/
public class ActivityTitleSummaryMessage {
int icon;
int color;
CharSequence title;
CharSequence summary;
final int icon;
final int color;
@NonNull
final CharSequence title;
final CharSequence summary;
ActivityTitleSummaryMessage(int icon, int color, CharSequence title, CharSequence summary) {
ActivityTitleSummaryMessage(int icon, int color, @NonNull CharSequence title, @Nullable CharSequence summary) {
this.icon = icon;
this.color = color;
this.title = title;
@ -83,7 +85,7 @@ public class ActivityTitleSummaryMessage {
if (!first) {
summaryBuilder.append('\n');
}
summaryBuilder.append(status.text_unescaped);
summaryBuilder.append(status.text_unescaped.replace('\n', ' '));
first = false;
}
return new ActivityTitleSummaryMessage(typeIcon, color, title, summaryBuilder.toString());
@ -170,7 +172,7 @@ public class ActivityTitleSummaryMessage {
if (!firstLine) {
sb.append("\n");
}
sb.append(item.description);
sb.append(item.description.replace('\n', ' '));
firstLine = false;
}
return new ActivityTitleSummaryMessage(typeIcon, defaultColor, title, sb);
@ -201,8 +203,11 @@ public class ActivityTitleSummaryMessage {
case Activity.Action.QUOTE: {
final ParcelableStatus status = ParcelableActivity.getActivityStatus(activity);
if (status == null) return null;
final String text = status.text_unescaped;
return new ActivityTitleSummaryMessage(0, 0, text, text);
final SpannableString title = new SpannableString(manager.getDisplayName(status,
nameFirst, false));
title.setSpan(new StyleSpan(Typeface.BOLD), 0, title.length(),
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
return new ActivityTitleSummaryMessage(0, 0, title, status.text_unescaped);
}
}
return null;
@ -279,10 +284,12 @@ public class ActivityTitleSummaryMessage {
return color;
}
@NonNull
public CharSequence getTitle() {
return title;
}
@Nullable
public CharSequence getSummary() {
return summary;
}

View File

@ -124,6 +124,7 @@ import org.mariotaku.twidere.util.Utils;
import org.mariotaku.twidere.util.collection.CompactHashSet;
import org.mariotaku.twidere.util.dagger.GeneralComponentHelper;
import org.mariotaku.twidere.util.message.UnreadCountUpdatedEvent;
import org.oshkimaadziig.george.androidutils.SpanFormatter;
import java.io.File;
import java.io.FileNotFoundException;
@ -1279,7 +1280,6 @@ public final class TwidereDataProvider extends ContentProvider implements Consta
builder.setDeleteIntent(getMarkReadDeleteIntent(context, AUTHORITY_HOME, accountId,
statusId, false));
builder.setNumber(statusesCount);
builder.setColor(pref.getNotificationLightColor());
applyNotificationPreferences(builder, pref, pref.getHomeTimelineNotificationType());
try {
nm.notify("home_" + accountId, Utils.getNotificationId(NOTIFICATION_ID_HOME_TIMELINE, accountId), builder.build());
@ -1310,6 +1310,9 @@ public final class TwidereDataProvider extends ContentProvider implements Consta
if (count == 0) return;
c.moveToFirst();
builder.setSmallIcon(R.drawable.ic_stat_mention);
builder.setNumber(count);
builder.setCategory(NotificationCompat.CATEGORY_SOCIAL);
applyNotificationPreferences(builder, pref, pref.getHomeTimelineNotificationType());
final Resources resources = context.getResources();
final String title = resources.getQuantityString(R.plurals.N_new_interactions,
@ -1326,7 +1329,7 @@ public final class TwidereDataProvider extends ContentProvider implements Consta
while (!c.isAfterLast()) {
if (messageLines == 5) {
style.setSummaryText(resources.getString(R.string.N_more, count - c.getPosition()));
style.addLine(resources.getString(R.string.and_N_more, count - c.getPosition()));
break;
}
final ParcelableActivity activity = ci.newObject(c);
@ -1334,7 +1337,13 @@ public final class TwidereDataProvider extends ContentProvider implements Consta
mUserColorNameManager, activity, activity.sources, 0, false,
mUseStarForLikes, mNameFirst);
if (message != null) {
style.addLine(message.getTitle());
final CharSequence summary = message.getSummary();
if (TextUtils.isEmpty(summary)) {
style.addLine(message.getTitle());
} else {
style.addLine(SpanFormatter.format(resources.getString(R.string.title_summary_line_format),
message.getTitle(), summary));
}
messageLines++;
}
c.moveToNext();

View File

@ -288,6 +288,7 @@ public class BackgroundOperationService extends IntentService implements Constan
builder.setTicker(title);
builder.setContentTitle(title);
builder.setContentText(text);
builder.setCategory(NotificationCompat.CATEGORY_PROGRESS);
builder.setOngoing(true);
final Notification notification = builder.build();
startForeground(NOTIFICATION_ID_SEND_DIRECT_MESSAGE, notification);

View File

@ -367,7 +367,7 @@
<string name="none">لا شيء</string>
<string name="large">كبير</string>
<string name="small">صغير</string>
<string name="and_more">و <xliff:g id="count">%d</xliff:g> أخرون</string>
<string name="and_N_more">و <xliff:g id="count">%d</xliff:g> أخرون</string>
<string name="clear_search_history">محو سجل البحث</string>
<string name="permission_description_none">لا يوجد صلاحيات مُحتاجة.</string>
<string name="permission_description_refresh">تحديث الخط الزمني (بما في ذلك الرسائل الخاصة)</string>

View File

@ -372,7 +372,7 @@
<string name="none">Dengún</string>
<string name="large">Grande</string>
<string name="small">Pequeñu</string>
<string name="and_more">y <xliff:g id="count">%d</xliff:g> más</string>
<string name="and_N_more">y <xliff:g id="count">%d</xliff:g> más</string>
<string name="clear_search_history">Llimpiar historia de guetes</string>
<string name="permission_description_none">Nun se necesiten permisos</string>
<string name="permission_description_refresh">Anovar llinia temporal (incluyendo mensaxes direutos)</string>

View File

@ -355,7 +355,7 @@
<string name="none">Cap</string>
<string name="large">Gran</string>
<string name="small">Petit</string>
<string name="and_more">i <xliff:g id="count">%d</xliff:g> més</string>
<string name="and_N_more">i <xliff:g id="count">%d</xliff:g> més</string>
<string name="clear_search_history">Neteja l\'historial de cerques</string>
<string name="permission_description_none">No calen permisos</string>
<string name="permission_description_refresh">Actualitza la cronologia (inclou els missatges directes)</string>

View File

@ -370,7 +370,7 @@
<string name="none">Nichts</string>
<string name="large">Groß</string>
<string name="small">Klein</string>
<string name="and_more">und <xliff:g id="count">%d</xliff:g> weitere</string>
<string name="and_N_more">und <xliff:g id="count">%d</xliff:g> weitere</string>
<string name="clear_search_history">Suchbegriffe löschen</string>
<string name="permission_description_none">Keine Erlaubnis notwendig</string>
<string name="permission_description_refresh">Zeit zwischen Aktualisierungen (auch für Direct Messages)</string>

View File

@ -373,7 +373,7 @@
<string name="none">Ninguno</string>
<string name="large">Grande</string>
<string name="small">Pequeño</string>
<string name="and_more">y <xliff:g id="count">%d</xliff:g> más</string>
<string name="and_N_more">y <xliff:g id="count">%d</xliff:g> más</string>
<string name="clear_search_history">Limpiar historial de búsqueda</string>
<string name="permission_description_none">No se necesitan permisos</string>
<string name="permission_description_refresh">Actualizar cronología (incluyendo mensajes directos)</string>

View File

@ -373,7 +373,7 @@
<string name="none">هیچ‌کدام</string>
<string name="large">بزرگ</string>
<string name="small">کوچک</string>
<string name="and_more">و <xliff:g id="count">%d</xliff:g> بیش‌تر</string>
<string name="and_N_more">و <xliff:g id="count">%d</xliff:g> بیش‌تر</string>
<string name="clear_search_history">پاک‌سازی تاریخچه‌ی جستجو</string>
<string name="permission_description_none">هیچ دسترسی‌ای نیاز نیست</string>
<string name="permission_description_refresh">تازه‌سازی خط‌زمان (شامل پیام‌های مستقیم)</string>

View File

@ -354,7 +354,7 @@
<string name="none">Ei mitään</string>
<string name="large">Suuri</string>
<string name="small">Pieni</string>
<string name="and_more">ja <xliff:g id="count">%d</xliff:g> muuta</string>
<string name="and_N_more">ja <xliff:g id="count">%d</xliff:g> muuta</string>
<string name="clear_search_history">Tyhjennä hakuhistoria</string>
<string name="permission_description_none">Oikeuksia ei tarvita</string>
<string name="permission_description_refresh">Päivitä aikajana (mukaanlukien yksityisviestit)</string>

View File

@ -373,7 +373,7 @@
<string name="none">Aucun</string>
<string name="large">Grand</string>
<string name="small">Petit</string>
<string name="and_more">et <xliff:g id="count">%d</xliff:g> de plus</string>
<string name="and_N_more">et <xliff:g id="count">%d</xliff:g> de plus</string>
<string name="clear_search_history">Supprimer l\'historique de recherche</string>
<string name="permission_description_none">Aucune permission nécessaire</string>
<string name="permission_description_refresh">Actualiser le fil d\'actualité (inclu les messages privés)</string>

View File

@ -354,7 +354,7 @@
<string name="none">Ništa</string>
<string name="large">Veliko</string>
<string name="small">Malo</string>
<string name="and_more">i <xliff:g id="count">%d</xliff:g> više</string>
<string name="and_N_more">i <xliff:g id="count">%d</xliff:g> više</string>
<string name="clear_search_history">Očisti povijest pretraživanja</string>
<string name="permission_description_none">Dopuštenja nisu potrebna</string>
<string name="permission_description_refresh">Osvježi timeline (uključujući izravne poruke)</string>

View File

@ -373,7 +373,7 @@
<string name="none">Semmi</string>
<string name="large">Nagy</string>
<string name="small">Kicsi</string>
<string name="and_more">és még <xliff:g id="count">%d</xliff:g> további elem</string>
<string name="and_N_more">és még <xliff:g id="count">%d</xliff:g> további elem</string>
<string name="clear_search_history">Keresési történet törlése</string>
<string name="permission_description_none">Nincs szükség engedélyekre</string>
<string name="permission_description_refresh">Kezdőlap (és privát üzenetek) frissítése</string>

View File

@ -361,7 +361,7 @@
<string name="none">Tidak ada</string>
<string name="large">Banyak</string>
<string name="small">Sedikit</string>
<string name="and_more">dan <xliff:g id="count">%d</xliff:g> lebih lagi</string>
<string name="and_N_more">dan <xliff:g id="count">%d</xliff:g> lebih lagi</string>
<string name="clear_search_history">Bersihkan riwayat pencarian</string>
<string name="permission_description_none">Tidak ada ijin yang diperlukan</string>
<string name="permission_description_refresh">Memperbaharui timeline (termasuk direct messages)</string>

View File

@ -354,7 +354,7 @@
<string name="none">Nessuno</string>
<string name="large">Grande</string>
<string name="small">Piccolo</string>
<string name="and_more">e altri <xliff:g id="count">%d</xliff:g></string>
<string name="and_N_more">e altri <xliff:g id="count">%d</xliff:g></string>
<string name="clear_search_history">Cancella cronologia ricerche</string>
<string name="permission_description_none">Nessun permesso richiesto</string>
<string name="permission_description_refresh">Aggiorna timeline (inclusi DM)</string>

View File

@ -373,7 +373,7 @@
<string name="none">なし</string>
<string name="large"></string>
<string name="small"></string>
<string name="and_more"><xliff:g id="count">%d</xliff:g></string>
<string name="and_N_more"><xliff:g id="count">%d</xliff:g></string>
<string name="clear_search_history">検索履歴を消去</string>
<string name="permission_description_none">権限は必要ありません</string>
<string name="permission_description_refresh">タイムラインの更新 (DMを含める)</string>

View File

@ -354,7 +354,7 @@
<string name="none">없음</string>
<string name="large">크게</string>
<string name="small">작게</string>
<string name="and_more"><xliff:g id="count">%d</xliff:g>개 이상</string>
<string name="and_N_more"><xliff:g id="count">%d</xliff:g>개 이상</string>
<string name="clear_search_history">검색 기록 지우기</string>
<string name="permission_description_none">아무런 권한을 필요로 하지 않습니다</string>
<string name="permission_description_refresh">타임라인 새로고침 (쪽지 포함)</string>

View File

@ -337,7 +337,7 @@
<string name="none">Geen</string>
<string name="large">Groot</string>
<string name="small">Klein</string>
<string name="and_more">en <xliff:g id="count">%d</xliff:g> meer</string>
<string name="and_N_more">en <xliff:g id="count">%d</xliff:g> meer</string>
<string name="clear_search_history">Wis zoek geschiedenis</string>
<string name="permission_description_none">Geen toestemming nodig</string>
<string name="permission_description_refresh">Vernieuw tijdlijn (inclusief berichten)</string>

View File

@ -373,7 +373,7 @@
<string name="none">Ingen</string>
<string name="large">Stor</string>
<string name="small">Liten</string>
<string name="and_more">og <xliff:g id="count">%d</xliff:g> flere</string>
<string name="and_N_more">og <xliff:g id="count">%d</xliff:g> flere</string>
<string name="clear_search_history">Tøm søkehistorikken</string>
<string name="permission_description_none">Ingen tillatelser trengs</string>
<string name="permission_description_refresh">Oppdater tidslinje (inkludert direktemeldinger)</string>

View File

@ -334,7 +334,7 @@
<string name="none">Brak</string>
<string name="large">Duży</string>
<string name="small">Mały</string>
<string name="and_more">oraz <xliff:g id="count">%d</xliff:g> więcej</string>
<string name="and_N_more">oraz <xliff:g id="count">%d</xliff:g> więcej</string>
<string name="clear_search_history">Wyczyść historię wyszukiwania</string>
<string name="permission_description_none">Nie są wymagane pozwolenia</string>
<string name="permission_description_refresh">Odśwież strumień (razem z wiadomościami)</string>

View File

@ -368,7 +368,7 @@
<string name="none">Nenhum</string>
<string name="large">Grande</string>
<string name="small">Pequeno</string>
<string name="and_more">e <xliff:g id="count">%d</xliff:g> mais</string>
<string name="and_N_more">e <xliff:g id="count">%d</xliff:g> mais</string>
<string name="clear_search_history">Limpar histórico de buscas</string>
<string name="permission_description_none">Nenhuma permissão requerida</string>
<string name="permission_description_refresh">Atualizar timeline (inclusive MD)</string>

View File

@ -367,7 +367,7 @@
<string name="none">Никак</string>
<string name="large">Большой</string>
<string name="small">Маленький</string>
<string name="and_more">и еще <xliff:g id="count">%d</xliff:g></string>
<string name="and_N_more">и еще <xliff:g id="count">%d</xliff:g></string>
<string name="clear_search_history">Очистить историю поиска</string>
<string name="permission_description_none">Разрешения не требуются</string>
<string name="permission_description_refresh">Обновить ленту (вкл. личн. сообщения)</string>

View File

@ -359,7 +359,7 @@
<string name="none">Hiçbiri</string>
<string name="large">Büyük</string>
<string name="small">Küçük</string>
<string name="and_more">ve <xliff:g id="count">%d</xliff:g> daha</string>
<string name="and_N_more">ve <xliff:g id="count">%d</xliff:g> daha</string>
<string name="clear_search_history">Arama geçmişini temizle</string>
<string name="permission_description_none">Herhangi bir izin gerekmez</string>
<string name="permission_description_refresh">Zaman akışını yenile (Direkt mesajlar dahil)</string>

View File

@ -354,7 +354,7 @@
<string name="none">Нічого</string>
<string name="large">Великий</string>
<string name="small">Малий</string>
<string name="and_more">і ще <xliff:g id="count">%d</xliff:g></string>
<string name="and_N_more">і ще <xliff:g id="count">%d</xliff:g></string>
<string name="clear_search_history">Очистити історію пошуку</string>
<string name="permission_description_none">Дозволи не потрібні</string>
<string name="permission_description_refresh">Оновити стрічку (включаючи особисті повідомленння)</string>

View File

@ -373,7 +373,7 @@
<string name="none"></string>
<string name="large">大尺寸</string>
<string name="small">小尺寸</string>
<string name="and_more">和其他<xliff:g id="count">%d</xliff:g></string>
<string name="and_N_more">和其他<xliff:g id="count">%d</xliff:g></string>
<string name="clear_search_history">清除搜索历史</string>
<string name="permission_description_none">没有需要的权限</string>
<string name="permission_description_refresh">刷新时间线(包括私信)</string>

View File

@ -360,7 +360,7 @@
<string name="none"></string>
<string name="large">大尺寸</string>
<string name="small">小尺寸</string>
<string name="and_more">和其他<xliff:g id="count">%d</xliff:g></string>
<string name="and_N_more">和其他<xliff:g id="count">%d</xliff:g></string>
<string name="clear_search_history">清除搜尋歷史</string>
<string name="permission_description_none">沒有需要的權限</string>
<string name="permission_description_refresh">刷新時間軸(包括私信)</string>

View File

@ -379,7 +379,7 @@
<string name="none">None</string>
<string name="large">Large</string>
<string name="small">Small</string>
<string name="and_more">and <xliff:g id="count">%d</xliff:g> more</string>
<string name="and_N_more">and <xliff:g id="count">%d</xliff:g> more</string>
<string name="clear_search_history">Clear search history</string>
<string name="permission_description_none">No permissions needed</string>
<string name="permission_description_refresh">Refresh timeline (including direct messages)</string>
@ -837,6 +837,6 @@
<string name="open_poll_in_official_app">Open poll in official app</string>
<string name="action_vote">Vote</string>
<string name="label_poll">Poll</string>
<string name="poll_summary_format"><xliff:g id="poll_count">%s</xliff:g> · <xliff:g id="poll_time_left">%s</xliff:g></string>
<string name="N_more" tools:ignore="PluralsCandidate"><xliff:g id="count">%d</xliff:g> more</string>
<string name="poll_summary_format"><xliff:g id="poll_count">%1$s</xliff:g> · <xliff:g id="poll_time_left">%2$s</xliff:g></string>
<string name="title_summary_line_format"><xliff:g id="title">%1$s</xliff:g>: <xliff:g id="summary">%2$s</xliff:g></string>
</resources>