From 851a92a271786208c740639188f852836e2a6b30 Mon Sep 17 00:00:00 2001 From: Vavassor Date: Fri, 10 Mar 2017 15:12:40 -0500 Subject: [PATCH] Refreshing uses since_id wherever applicable. Also, reverted the notification icon. --- .../keylesspalace/tusky/AccountAdapter.java | 5 +-- .../keylesspalace/tusky/AccountFragment.java | 28 ++++-------- .../keylesspalace/tusky/BlocksAdapter.java | 5 +-- .../keylesspalace/tusky/FollowAdapter.java | 5 +-- .../tusky/FooterActionListener.java | 20 --------- .../keylesspalace/tusky/LoginActivity.java | 2 +- .../com/keylesspalace/tusky/MastodonAPI.java | 2 + .../tusky/NotificationsAdapter.java | 6 +-- .../tusky/NotificationsFragment.java | 26 ++++-------- .../tusky/PreferencesActivity.java | 1 - .../keylesspalace/tusky/TimelineAdapter.java | 5 +-- .../keylesspalace/tusky/TimelineFragment.java | 32 ++++++-------- .../main/res/drawable-hdpi-v11/ic_notify.png | Bin 789 -> 675 bytes .../main/res/drawable-mdpi-v11/ic_notify.png | Bin 531 -> 453 bytes .../main/res/drawable-xhdpi-v11/ic_notify.png | Bin 1068 -> 888 bytes .../res/drawable-xxhdpi-v11/ic_notify.png | Bin 1701 -> 1343 bytes app/src/main/res/values/strings.xml | 40 +----------------- 17 files changed, 43 insertions(+), 134 deletions(-) delete mode 100644 app/src/main/java/com/keylesspalace/tusky/FooterActionListener.java diff --git a/app/src/main/java/com/keylesspalace/tusky/AccountAdapter.java b/app/src/main/java/com/keylesspalace/tusky/AccountAdapter.java index ab7653a6..3334b19c 100644 --- a/app/src/main/java/com/keylesspalace/tusky/AccountAdapter.java +++ b/app/src/main/java/com/keylesspalace/tusky/AccountAdapter.java @@ -25,15 +25,12 @@ import java.util.List; abstract class AccountAdapter extends RecyclerView.Adapter { List accountList; AccountActionListener accountActionListener; - FooterActionListener footerActionListener; FooterViewHolder.State footerState; - AccountAdapter(AccountActionListener accountActionListener, - FooterActionListener footerActionListener) { + AccountAdapter(AccountActionListener accountActionListener) { super(); accountList = new ArrayList<>(); this.accountActionListener = accountActionListener; - this.footerActionListener = footerActionListener; footerState = FooterViewHolder.State.LOADING; } diff --git a/app/src/main/java/com/keylesspalace/tusky/AccountFragment.java b/app/src/main/java/com/keylesspalace/tusky/AccountFragment.java index 4afc04c1..e754abcb 100644 --- a/app/src/main/java/com/keylesspalace/tusky/AccountFragment.java +++ b/app/src/main/java/com/keylesspalace/tusky/AccountFragment.java @@ -37,8 +37,7 @@ import java.util.List; import retrofit2.Call; import retrofit2.Callback; -public class AccountFragment extends Fragment implements AccountActionListener, - FooterActionListener { +public class AccountFragment extends Fragment implements AccountActionListener { private static final String TAG = "Account"; // logging tag public enum Type { @@ -106,7 +105,7 @@ public class AccountFragment extends Fragment implements AccountActionListener, AccountAdapter adapter = (AccountAdapter) view.getAdapter(); Account account = adapter.getItem(adapter.getItemCount() - 2); if (account != null) { - fetchAccounts(account.id); + fetchAccounts(account.id, null); } else { fetchAccounts(); } @@ -114,9 +113,9 @@ public class AccountFragment extends Fragment implements AccountActionListener, }; recyclerView.addOnScrollListener(scrollListener); if (type == Type.BLOCKS) { - adapter = new BlocksAdapter(this, this); + adapter = new BlocksAdapter(this); } else { - adapter = new FollowAdapter(this, this); + adapter = new FollowAdapter(this); } recyclerView.setAdapter(adapter); @@ -151,7 +150,7 @@ public class AccountFragment extends Fragment implements AccountActionListener, super.onDestroyView(); } - private void fetchAccounts(final String fromId) { + private void fetchAccounts(final String fromId, String uptoId) { Callback> cb = new Callback>() { @Override public void onResponse(Call> call, retrofit2.Response> response) { @@ -167,22 +166,22 @@ public class AccountFragment extends Fragment implements AccountActionListener, switch (type) { default: case FOLLOWS: { - api.accountFollowing(accountId, fromId, null, null).enqueue(cb); + api.accountFollowing(accountId, fromId, uptoId, null).enqueue(cb); break; } case FOLLOWERS: { - api.accountFollowers(accountId, fromId, null, null).enqueue(cb); + api.accountFollowers(accountId, fromId, uptoId, null).enqueue(cb); break; } case BLOCKS: { - api.blocks(fromId, null, null).enqueue(cb); + api.blocks(fromId, uptoId, null).enqueue(cb); break; } } } private void fetchAccounts() { - fetchAccounts(null); + fetchAccounts(null, null); } private static boolean findAccount(List accounts, String id) { @@ -229,15 +228,6 @@ public class AccountFragment extends Fragment implements AccountActionListener, } } - public void onLoadMore() { - Account account = adapter.getItem(adapter.getItemCount() - 2); - if (account != null) { - fetchAccounts(account.id); - } else { - fetchAccounts(); - } - } - public void onViewAccount(String id) { Intent intent = new Intent(getContext(), AccountActivity.class); intent.putExtra("id", id); diff --git a/app/src/main/java/com/keylesspalace/tusky/BlocksAdapter.java b/app/src/main/java/com/keylesspalace/tusky/BlocksAdapter.java index 37bfc403..739cec35 100644 --- a/app/src/main/java/com/keylesspalace/tusky/BlocksAdapter.java +++ b/app/src/main/java/com/keylesspalace/tusky/BlocksAdapter.java @@ -35,9 +35,8 @@ class BlocksAdapter extends AccountAdapter { private Set unblockedAccountPositions; - BlocksAdapter(AccountActionListener accountActionListener, - FooterActionListener footerActionListener) { - super(accountActionListener, footerActionListener); + BlocksAdapter(AccountActionListener accountActionListener) { + super(accountActionListener); unblockedAccountPositions = new HashSet<>(); } diff --git a/app/src/main/java/com/keylesspalace/tusky/FollowAdapter.java b/app/src/main/java/com/keylesspalace/tusky/FollowAdapter.java index 140e32d0..6512aff2 100644 --- a/app/src/main/java/com/keylesspalace/tusky/FollowAdapter.java +++ b/app/src/main/java/com/keylesspalace/tusky/FollowAdapter.java @@ -31,9 +31,8 @@ class FollowAdapter extends AccountAdapter { private static final int VIEW_TYPE_ACCOUNT = 0; private static final int VIEW_TYPE_FOOTER = 1; - FollowAdapter(AccountActionListener accountActionListener, - FooterActionListener footerActionListener) { - super(accountActionListener, footerActionListener); + FollowAdapter(AccountActionListener accountActionListener) { + super(accountActionListener); } @Override diff --git a/app/src/main/java/com/keylesspalace/tusky/FooterActionListener.java b/app/src/main/java/com/keylesspalace/tusky/FooterActionListener.java deleted file mode 100644 index da89a4f9..00000000 --- a/app/src/main/java/com/keylesspalace/tusky/FooterActionListener.java +++ /dev/null @@ -1,20 +0,0 @@ -/* Copyright 2017 Andrew Dawson - * - * This file is part of Tusky. - * - * Tusky is free software: you can redistribute it and/or modify it under the terms of the GNU - * General Public License as published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * Tusky is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even - * the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General - * Public License for more details. - * - * You should have received a copy of the GNU General Public License along with Tusky. If not, see - * . */ - -package com.keylesspalace.tusky; - -public interface FooterActionListener { - void onLoadMore(); -} diff --git a/app/src/main/java/com/keylesspalace/tusky/LoginActivity.java b/app/src/main/java/com/keylesspalace/tusky/LoginActivity.java index dca07f90..32b3374f 100644 --- a/app/src/main/java/com/keylesspalace/tusky/LoginActivity.java +++ b/app/src/main/java/com/keylesspalace/tusky/LoginActivity.java @@ -82,7 +82,7 @@ public class LoginActivity extends BaseActivity { private void redirectUserToAuthorizeAndLogin() { /* To authorize this app and log in it's necessary to redirect to the domain given, * activity_login there, and the server will redirect back to the app with its response. */ - String endpoint = getString(R.string.endpoint_authorize); + String endpoint = MastodonAPI.ENDPOINT_AUTHORIZE; String redirectUri = getOauthRedirectUri(); Map parameters = new HashMap<>(); parameters.put("client_id", clientId); diff --git a/app/src/main/java/com/keylesspalace/tusky/MastodonAPI.java b/app/src/main/java/com/keylesspalace/tusky/MastodonAPI.java index 51d8ec05..e881f996 100644 --- a/app/src/main/java/com/keylesspalace/tusky/MastodonAPI.java +++ b/app/src/main/java/com/keylesspalace/tusky/MastodonAPI.java @@ -25,6 +25,8 @@ import retrofit2.http.Path; import retrofit2.http.Query; public interface MastodonAPI { + String ENDPOINT_AUTHORIZE = "/oauth/authorize"; + @GET("api/v1/timelines/home") Call> homeTimeline( @Query("max_id") String maxId, diff --git a/app/src/main/java/com/keylesspalace/tusky/NotificationsAdapter.java b/app/src/main/java/com/keylesspalace/tusky/NotificationsAdapter.java index 5b8ea652..630b9568 100644 --- a/app/src/main/java/com/keylesspalace/tusky/NotificationsAdapter.java +++ b/app/src/main/java/com/keylesspalace/tusky/NotificationsAdapter.java @@ -44,16 +44,13 @@ class NotificationsAdapter extends RecyclerView.Adapter implements AdapterItemRe private List notifications; private StatusActionListener statusListener; private FollowListener followListener; - private FooterActionListener footerListener; private FooterViewHolder.State footerState; - NotificationsAdapter(StatusActionListener statusListener, FollowListener followListener, - FooterActionListener footerListener) { + NotificationsAdapter(StatusActionListener statusListener, FollowListener followListener) { super(); notifications = new ArrayList<>(); this.statusListener = statusListener; this.followListener = followListener; - this.footerListener = footerListener; footerState = FooterViewHolder.State.LOADING; } @@ -187,7 +184,6 @@ class NotificationsAdapter extends RecyclerView.Adapter implements AdapterItemRe interface FollowListener { void onViewAccount(String id); - void onFollow(String id); } private static class FollowViewHolder extends RecyclerView.ViewHolder { diff --git a/app/src/main/java/com/keylesspalace/tusky/NotificationsFragment.java b/app/src/main/java/com/keylesspalace/tusky/NotificationsFragment.java index 8a410661..7d3f84ed 100644 --- a/app/src/main/java/com/keylesspalace/tusky/NotificationsFragment.java +++ b/app/src/main/java/com/keylesspalace/tusky/NotificationsFragment.java @@ -38,7 +38,7 @@ import retrofit2.Call; import retrofit2.Callback; public class NotificationsFragment extends SFragment implements - SwipeRefreshLayout.OnRefreshListener, StatusActionListener, FooterActionListener, + SwipeRefreshLayout.OnRefreshListener, StatusActionListener, NotificationsAdapter.FollowListener { private static final String TAG = "Notifications"; // logging tag @@ -91,14 +91,14 @@ public class NotificationsFragment extends SFragment implements NotificationsAdapter adapter = (NotificationsAdapter) view.getAdapter(); Notification notification = adapter.getItem(adapter.getItemCount() - 2); if (notification != null) { - sendFetchNotificationsRequest(notification.id); + sendFetchNotificationsRequest(notification.id, null); } else { sendFetchNotificationsRequest(); } } }; recyclerView.addOnScrollListener(scrollListener); - adapter = new NotificationsAdapter(this, this, this); + adapter = new NotificationsAdapter(this, this); recyclerView.setAdapter(adapter); TabLayout layout = (TabLayout) getActivity().findViewById(R.id.tab_layout); @@ -116,8 +116,6 @@ public class NotificationsFragment extends SFragment implements }; layout.addOnTabSelectedListener(onTabSelectedListener); - sendFetchNotificationsRequest(); - return rootView; } @@ -133,10 +131,10 @@ public class NotificationsFragment extends SFragment implements scrollListener.reset(); } - private void sendFetchNotificationsRequest(final String fromId) { + private void sendFetchNotificationsRequest(final String fromId, String uptoId) { MastodonAPI api = ((BaseActivity) getActivity()).mastodonAPI; - api.notifications(fromId, null, null).enqueue(new Callback>() { + api.notifications(fromId, uptoId, null).enqueue(new Callback>() { @Override public void onResponse(Call> call, retrofit2.Response> response) { onFetchNotificationsSuccess(response.body(), fromId); @@ -150,7 +148,7 @@ public class NotificationsFragment extends SFragment implements } private void sendFetchNotificationsRequest() { - sendFetchNotificationsRequest(null); + sendFetchNotificationsRequest(null, null); } private static boolean findNotification(List notifications, String id) { @@ -193,13 +191,9 @@ public class NotificationsFragment extends SFragment implements } public void onRefresh() { - sendFetchNotificationsRequest(); - } - - public void onLoadMore() { - Notification notification = adapter.getItem(adapter.getItemCount() - 2); + Notification notification = adapter.getItem(0); if (notification != null) { - sendFetchNotificationsRequest(notification.id); + sendFetchNotificationsRequest(null, notification.id); } else { sendFetchNotificationsRequest(); } @@ -241,8 +235,4 @@ public class NotificationsFragment extends SFragment implements public void onViewAccount(String id) { super.viewAccount(id); } - - public void onFollow(String id) { - super.follow(id); - } } diff --git a/app/src/main/java/com/keylesspalace/tusky/PreferencesActivity.java b/app/src/main/java/com/keylesspalace/tusky/PreferencesActivity.java index ffc2811a..17fd82c7 100644 --- a/app/src/main/java/com/keylesspalace/tusky/PreferencesActivity.java +++ b/app/src/main/java/com/keylesspalace/tusky/PreferencesActivity.java @@ -20,7 +20,6 @@ import android.content.SharedPreferences; import android.os.Bundle; import android.preference.PreferenceManager; import android.support.annotation.Nullable; -import android.support.v7.app.AppCompatActivity; public class PreferencesActivity extends BaseActivity implements SharedPreferences.OnSharedPreferenceChangeListener { diff --git a/app/src/main/java/com/keylesspalace/tusky/TimelineAdapter.java b/app/src/main/java/com/keylesspalace/tusky/TimelineAdapter.java index 428413cf..877c8545 100644 --- a/app/src/main/java/com/keylesspalace/tusky/TimelineAdapter.java +++ b/app/src/main/java/com/keylesspalace/tusky/TimelineAdapter.java @@ -32,15 +32,12 @@ class TimelineAdapter extends RecyclerView.Adapter implements AdapterItemRemover private List statuses; private StatusActionListener statusListener; - private FooterActionListener footerListener; private FooterViewHolder.State footerState; - TimelineAdapter(StatusActionListener statusListener, - FooterActionListener footerListener) { + TimelineAdapter(StatusActionListener statusListener) { super(); statuses = new ArrayList<>(); this.statusListener = statusListener; - this.footerListener = footerListener; footerState = FooterViewHolder.State.LOADING; } diff --git a/app/src/main/java/com/keylesspalace/tusky/TimelineFragment.java b/app/src/main/java/com/keylesspalace/tusky/TimelineFragment.java index 9788c108..b8c0bfbc 100644 --- a/app/src/main/java/com/keylesspalace/tusky/TimelineFragment.java +++ b/app/src/main/java/com/keylesspalace/tusky/TimelineFragment.java @@ -18,6 +18,7 @@ package com.keylesspalace.tusky; import android.content.Context; import android.graphics.drawable.Drawable; import android.os.Bundle; +import android.support.annotation.Nullable; import android.support.design.widget.TabLayout; import android.support.v4.widget.SwipeRefreshLayout; import android.support.v7.widget.DividerItemDecoration; @@ -35,12 +36,11 @@ import retrofit2.Call; import retrofit2.Callback; public class TimelineFragment extends SFragment implements - SwipeRefreshLayout.OnRefreshListener, StatusActionListener, FooterActionListener { + SwipeRefreshLayout.OnRefreshListener, StatusActionListener { private static final String TAG = "Timeline"; // logging tag - public enum Kind { + enum Kind { HOME, - MENTIONS, PUBLIC, TAG, USER, @@ -106,14 +106,14 @@ public class TimelineFragment extends SFragment implements TimelineAdapter adapter = (TimelineAdapter) view.getAdapter(); Status status = adapter.getItem(adapter.getItemCount() - 2); if (status != null) { - sendFetchTimelineRequest(status.id); + sendFetchTimelineRequest(status.id, null); } else { sendFetchTimelineRequest(); } } }; recyclerView.addOnScrollListener(scrollListener); - adapter = new TimelineAdapter(this, this); + adapter = new TimelineAdapter(this); recyclerView.setAdapter(adapter); if (jumpToTopAllowed()) { @@ -156,7 +156,7 @@ public class TimelineFragment extends SFragment implements scrollListener.reset(); } - private void sendFetchTimelineRequest(final String fromId) { + private void sendFetchTimelineRequest(@Nullable final String fromId, @Nullable String uptoId) { MastodonAPI api = ((BaseActivity) getActivity()).mastodonAPI; Callback> cb = new Callback>() { @@ -174,30 +174,30 @@ public class TimelineFragment extends SFragment implements switch (kind) { default: case HOME: { - api.homeTimeline(fromId, null, null).enqueue(cb); + api.homeTimeline(fromId, uptoId, null).enqueue(cb); break; } case PUBLIC: { - api.publicTimeline(null, fromId, null, null).enqueue(cb); + api.publicTimeline(null, fromId, uptoId, null).enqueue(cb); break; } case TAG: { - api.hashtagTimeline(hashtagOrId, null, fromId, null, null).enqueue(cb); + api.hashtagTimeline(hashtagOrId, null, fromId, uptoId, null).enqueue(cb); break; } case USER: { - api.accountStatuses(hashtagOrId, fromId, null, null).enqueue(cb); + api.accountStatuses(hashtagOrId, fromId, uptoId, null).enqueue(cb); break; } case FAVOURITES: { - api.favourites(fromId, null, null).enqueue(cb); + api.favourites(fromId, uptoId, null).enqueue(cb); break; } } } private void sendFetchTimelineRequest() { - sendFetchTimelineRequest(null); + sendFetchTimelineRequest(null, null); } private static boolean findStatus(List statuses, String id) { @@ -240,13 +240,9 @@ public class TimelineFragment extends SFragment implements } public void onRefresh() { - sendFetchTimelineRequest(); - } - - public void onLoadMore() { - Status status = adapter.getItem(adapter.getItemCount() - 2); + Status status = adapter.getItem(0); if (status != null) { - sendFetchTimelineRequest(status.id); + sendFetchTimelineRequest(null, status.id); } else { sendFetchTimelineRequest(); } diff --git a/app/src/main/res/drawable-hdpi-v11/ic_notify.png b/app/src/main/res/drawable-hdpi-v11/ic_notify.png index 5cb8246bd10f2cfd262cb0dee06d1230b2e4bbd9..610161ea69eba741eef1ff416143582acf83064d 100644 GIT binary patch delta 651 zcmV;60(AYA2BQU#B!6m2L_t(|+GAiC1;ZKq|Nmbeh?9W09*C=fSZ|;l!VkprfcOs( ze*xllAXY?@X9QwdAU2|hV?==X;(rLZ1;na&)P?|Y11%lH0>lTQj(H7=G6L#BA@vZ5 zgJ|WTN~mN00kIE}dX9iRL8}D(4eFp-BR1);HK=mA?wu5Fs4ZaV=tVHS&2IBWneHGL$bG|?gE+@kizkpbVnhr|&j{u59 z>Tv?%zfe7MsU2P0p$0!7QoSe;KY{A`LhaCD1LChx!}k!Oo)w7qB86x%wL`}c$?(l2 zq#F=83dGFRc7ISXk_9ITs4YcO`yGhYX;B!)BUu6}rMd7V;y*}gYiLz>A%_qM#9>jx z1Fb+|-~kYG(8@vDXbu83H`vkCG@_|V!&m!L>L5__;SQRG{Ydhhpo$Yo?jyEn1%((i zje!z63#E=q{f`NXp^o)M6W@rYR|u;136h#DN*%-m#DANxIO-e_??w}w1;hqGoDRer zpt%hlya72Bi#^FeY)7o4KvA>qKji>aoy-AZJ~Z=vpsfi|PHiSCTA@*tj+SOf0sDd2 z97j(6fu=TslqdwHi^WJZ!qGl&MyiBi;5=CgAE-$Vh^v7385W0tfn9@Y=3vKkHgLj}J0*L*9*aC<>K_xg2hrmD~wF=N?DkS)+)GpN< zafB2xU;?Okp+!{_0P10o;1E!>#?rd0EePs91Mwp~4tWX09iY}FJqIK}CA=QA2~zhY=%Q@l}A&sIk6U_$atn?TjIGUf>^4 zDb#`sQ6r6s&?!Ug3|WGq1tRD(UB2Y6r__+XBIr+K`G?SHB(707bX2_}PhGRgC5 zvkaycyb00?&2LQ`NDd4J*$Vl~B?)E~co0-ZM#+ENH#4d@ngusO8#oT08RJQU%DDzK zXxRh1z*2Al{4{iwVRymvm_ZG=1k<8S{0#D(@^>uGDX0eUK4wrYVZqc|vZ;;rrz4#2 z2j^o3G-E9ZP=9nN6UO+>Y!}O<$yRVI!G7wnRp1H5xRLe45l+Y0?reg9CjP4E7$_=+ zPr)K^z`<#W{X9%q3W_qI?vTAR6yeO{z_;<{P9ohhAWs<3ep$_F{yoIeN3fZF+)hy} zJsHrHFc{|Xe2A0Zpo#4$!{$>2G$jM_g+VWm?+$U&$$vI0!RwUm#FqidwQuL~HI{vG z)tGxJgZ?%b^@hrZ?y=B~FZ3b&?%<^hvVKEy4_!8NOvTKD! z*9g8CzJG@JpQ5wWSLIm+*Iq_)3v6;cOYKzl)pbx~*jy9(SL*G=((M=I8((dk;Qd==>3rbd&!_Gr95u1-5*evF)0~fg*yakVVPt^%KYDF)d&qE<6My-G4 zV_q7lC*D(hHM>k6a0rTys{0&+sR#EHov9;k9d=SE<@;#KEPiUhA@DBMt;4vNjW`yy zS$+fOz)5fh+yEae_9L64e?}0dg~7f+d2IUs%t!~!_fFaz-iAoe21g0TM( z5RFHTJ5-G^IToCOdY=hTiaHF$&p|#R)o^2|%PR4xNrtMaC4a~DZBWftIOH{f_%jec z0b(9YnbVekm*6Go_BRUm!1Fu1vfmk0DCqNtzEjp0FUXqFt zP|k+tU}C@}AQmPk2^%2gWL#ha5DQY0Pe92t4H^XRpd^(NDEL+bu^UYq0}O)!002@n V$07s5WFG(k002ovPDHLkV1m2#rtts( delta 505 zcmVKf^WDzQ z&c$N?X+aPqKn4_m56XFkjCvYoR1+RhK$Y%w#L=Bz>7k@$RMr+bhf|taiN3aEU zIW^xFk&;n_wy3=M8R!8U;7g<Eb-fH}6%(LR$uh77})3Jics1c8DS@WlkBW=6AM8#I9Z zh-K?bfie%$Z+|mbRGg1FZPPW}i%*@vGd~Xr#|N&cBv)5m0%3|O9E?(Nz+?05lT{A; z#v)KO9r7BFb@O_GHi^HZ1_@)TtrGO(QXwedARPIWf_}>I(!3U)RjB@4O zn#xqYXaU#yh!o=V&4Fw7xuc!%9JQ4v?M2hH3TZoZCUWf4M{R)n(`49lct?B2Rw0_5 zXAoJZAXS=V&f4tQIi<8~X(wO|bh2+37zbBMyH44@38^YO35(!e(=I$~aAn)B=HN}8 v(~bPe)U2>1q&B!53iL_t(|+U;3OY)w%VyF?@WX!38~IBQ7LH|=%6Gb zDnc4mg5)KH5CoGFr4lhQ5e6C)f)^4IN>r%CNc{hw__XzHkF}Hi;yBK|@7~k<&V5bZ zO4j6c?|s%jzq`+_L0y9K$#_IYxs`@%?$mQ)n`bLucSS$2ej$ zfwhwOci@N+R)2B3&Dno04ZOYwv93ySs%#}tD-HS*EHI2yCdK&%4z_jk+?592Vi+e6 zY?b1iv^D!B%FQ#zFwO??FG_7C&?pVsVi;o**dfKaXiI#I_k0R_4Pq21TZc-J8MYFb zt}Od9gBZt@7>zdX{&mXW3aF?HkfJp*0t8X>J=sjDk*xu3D zB|Kse0e`oGpV@YGrdFZeWfiEzn8`NdU2JA+;!ObefFBiGnyBHKNPx=VOD+PbIz7dL zbSUC_YBD{7_)_Q+?r8APK`qOTMsE@7Jb*VuaI`8dm~?1yI}7;zFx$}EWQu7I^n}O^ z=&QZSt$&K&cPjRsRA-rPsYT$Ukc3lr;t*{$kALlZz{U5P@%M#m`~Lc*A57BRU3(^YqOH+=}_ve*Itb>`jsj9hTcEcI3_cY&D6-wJh zhX-^XZM`2<{NQ4buGEEKCAf-8ZSbj&RirIDHIt=Bq15*b8$ZGMHtMIi@`w)uv~r7W z7FvN+=bQ~mJoRDAqNrqJ+|26ef%x;_SSLzAz&L(avuHTC%O&3=Pz+5 r-#{1WpMT&qr?-H&SQlz000000NkvXXu0mjf`Pin% delta 1047 zcmV+y1nB$t2CN8>B!BZsL_t(|+U;6PNL4`?)@#s1u1N&7D@u(bdLgxlAZk&XJwSVa zkDwM|w5W(^R|`um2wH>{MD(CS(Q1)*qxR6+1!ZR3qBccER@`f4YBx{cz<*&FX6BqZ zXO4pS!-wbI^Upv3e`o&3{9{JO1dRi79480Z0@MRB;4P2@{(lmZ^j(a27;ny4E1d;w z0`3BT9CKo0?vRYE(NsJW*a7r9_UIMK%nV!k0^p$&9x>SkVJW{G`00dCY>q0MibsIc zz=$(?G(vMmY$$)x89TZV$OsB~I%)$dfQ7&!pceQ}?^yU8wqQiPU*)Sb+vXRri}+w^HA33cLh!fR*o>A2Ez!lgnz~zvSdJut|T5%3~J;Yx65F% zMoxaaB?Fj_QJDdoHG|d?&oYCFSoE386@e*>8M;JfK%K@3Bg9i*FY{8mY;-BEQ=9Zik2MmW9w4#|L&R|7r>JU2B$tA%>1-3gCUUbj%6 zz_V2$@V>B8Wg#DQ5?-B{t;$THR(dAz45za+$I~0K0dbQsx>Mj=LHj*TH-z^^nzG_H zaKwTEttN@AORU53xtxpb8-;h5By|*Peid@(?0=_WBr;tou}{Lk9JnR62r2Fll9I=O zIg+uf6vs@KL*Drpqy;61L;qggjWv4`bjOI&Kw#{}&`84@|!z$w}uJbePrv2(SirIYY= zsOQRn4nrfFRV_f;4os;+7LjyYj~w`=TSp{lV@r8>4{}jK%6A5CY;giBeRR{B{9GMT zo94MDgID_fRqA|XNfxC_yev2MRSzl(Nq=?LHEgdp_)PaNfTL79WeeSp)xb&Mql=6N zTXzJt0h_bK6j_oUyAvZcr@cEfx(DbVg-Z=KM@3loWO;O{5f-(n@`LSb)>0|~Y*Dvq zd1CAGuZWV^fX^0TGs%c#j3rSiUP6w?I@fW|VN>)Rr+2l)8=d$kjqyPL0e=-%*bx0M R?REeF002ovPDHLkV1hau@|get diff --git a/app/src/main/res/drawable-xxhdpi-v11/ic_notify.png b/app/src/main/res/drawable-xxhdpi-v11/ic_notify.png index 63ddf6d55ceb962fadf9fcb893393aa015be37d7..cf90f68879d69de6db5d2d8bca4ad30bfcaeb302 100644 GIT binary patch delta 1325 zcmV+|1=9MZ4ZjMIBYy=3NklsO6MkH&NY}pM;O^uO1rjYDQ_MwTvXpC(b<2t9#)a$wTZQr}|-8fqh2G#;r3j|@TF>n^}G=K0J@EfokSO)w6+z#yc zKMK5G3JYX}ycdG;20J~OIapHmb9AWMQlYvnV?eqlh0QRm*;*0_QFbVSq zn2GC-2Yao6uYjpeg;iOck-%Rjad5qv8>Zc{WNV|&;`9-$H_Lsnjcd{yvNu831^GEg zoO6CX7GUQH*?)WstgD+q2RP#3y3xo-AL|XaC+j3mA}zv3{00v4+0RCU{bRa_gQwvq zoY}KMg0I5{`}cGaXfa2ehj^8c;OoA@M}ZFFGz1oLw)8;~e6=9k70A~?pmfgcIVj0j zipkG49WJ1sO+kMFwv^y23V6%pYrpCOt>(<0wUT@d=70E_p|UvjfFDf(<7{dy$=?;u zy{@&&0?p?9qMIf8O6K^=Q(2rS({@|2b9Ip53$u=oIRZ^rS)c)&fO91IO5^x?kB_*@ z0`27lJyU|8UcjF+G6S-&6`wedSFD6b>yBXd)K^)cVVt0!O7OFl@sXnX*=IW^=;J>7 z7|Y2FFn^j+(W(o?yS1nLXumtKgyREKC;e3yr@7#lP4UToBf$@V*rvn9bc7)I=|0%5 ziAM#2{ijNA>xMz33I;I8hlA%nfo*)W2I`U++a(ypsxa-YWMX87bO8jLB^bofFl>$! ztZRrDT0B~Y!CV#$L}1|i$N7St#nd(y3E3sp0#%fd=axos>3Zk*TM#_NlkPWsGp5MC3d%Z z`1=qW8(Tca79H_cJ__QU%>c8p3&X-jw#9dGvG3v`uD-zQz-cPXq6}t_)q?MKFctn- zIDd66_!pyY*deTn7u4Aox!I0 z+C@uQ#;b}5gC(L3PBH-Snf8W;(0}fMezpx(oR3xrc9qHi?wS{zUYK#M6EwIR@yPds zC%!TOyj02J~PjGTQFrUBrZUz!?r_d4creBqiY&a(`N6 z!of>AgSB-T3$_U!b>U}xWuBR0sCDk9%{4=mu)jm+pg6a?3(cDGG$WiMD`M}0;4cr{ z<04o*SWfg43V+p-Z%dgvIH25nv$RfZQ$U<7yGJ*YB2~i_YXrqP z<>l?iNC>sWrph4$Tdh*VDvFdqDO1_N8~YSpt0qlp+W(OxPEM70H=kxxo{z#{Pxol; z-iU?O- jiHd4~009C7PzQejSC7J)pplV800000NkvXXu0mjfLCJ|z delta 1686 zcmV;H25I@f3Z)H@BYy^LNkllTT~D+22qqh{76*9Z#)IRqfybepje37QqjAv zGr4JeZ0_xweY@}Dnw#X8kn5Y-x!>*1&d$ywktj-0iZW6}2!Bxmm;zV|NC92~>;d!u z1_1vO2I#Xr^h}C$P`6~Hkx~Yj3+Mp+3>XsrWr%F7C!1x3Ow2^UO27dToE)GrCKeJg zQvuHc{t@BHQ5th%jw8^R)I2H=n=JVBpl1WitZ4{|UTdLB1gz&MAE6997nPXYQQ5)XwG?0c-oB-*WX0`fM%sS+`*fPD&`LBR8X z?I94A22|K2s7qt;Hoz!{?s&il8v6GGS^!4^CaKdFIe!Z^e$h_nX`9ITLDO-ZN#_6- z1F`|dJ8lJ05)$5UkEk`RLS zYQN;1t8wtWThg6txI7*vJI4cl58;42#ScNxFbDV=Q0maD0(2WXeZ9lp-VkQdCS7vs zG-gkeq<`CC=xo-Rr%>57j50}`4ndDF4Sy_c=`$_tJQ(bgWN%c6XTB9WHDvD2HP4}! z1iWv-(Pa*sXNOoy+3yS$DuQM+4Sp`oo<<8!{v^e-mXObCvpEEImxF`+tVxpX#cH^F`N6dMgbb!*ka(pBsfu z$trg;Oc}%GY zdXZtEOVXKT;LMNCx{>4jm5Gp`Z7PB|MX?(son<~9>6go&R9O2g;@WjuMNkjJfE-M3 z^MBz4&X9$9#(z*mFWoAF1{k|dg`{(%k3!X5E>}rMV?a>9ilB@xyYShSnhvzfxdtt* zw1|gfObGhYrD@@B=HTz;JMX|}_lWpN#$<_o<)Zf{W8lMp33+tKN0{?yFEOtm-J35J zhtIBK419~rm>WgBq}ybh#~@mnN3WDBi+^si8*p46z4Jw`CoxWvHcb>~x#(V{IL9@* z=xoqTDkD!6IY*5r6#8v>p8wWmS&n7Iyx|%V-jS69zK{B-(abRL2cXJDA8#REm7agV z<=Mp^<6zkZud7EpbQXkAVQls)cW`RTYZNw41U%`8Etk4Hx5_2M-bt0jGM7H<*MFld zcO-?n!N6&#(WCfwA>eW0(j)+%zd*AAxBoW)cM8VM0@?M-xHkh{wq7tJ2i7r-VeWFd zVXx6N%%U~*MvL5SikslyDrmN~GUFVtV;NBIk5NrlK{_o1Zd3R&VO{#$J^dPMiN}gb!df;^@}Zax9Tn#4?pnbl@3PC z!FV%PVdo)+|I2k8n_y6S*h^K$q~Xgi_@%vGXTU@9z4@|qY4!~;?9}Qyy2)U>#HH{K zRU1!ZjD`8rH8fke9s6kiA`iQGb^RK{*2bXQUsQs#powuGw^Vp{geKIvTq{ni(CEN`XD?&csaBb`;MwY~cm0$YQ2T0HM;b{;@2lXITnchz>-92isg zPb`vzeMB{u$(bjP?cNt21%JE>+rLf?^WKareUt{282VL3=>fO14ZlNmoL*+}5}cWf z*lGU%zMM`MjfXXVl=`4|i0K+rSx0`QShs|Z7!^{UbP^_pSo{~c#;QRdGj@7dr|NoP z-sKDZM^&|#;8dY zs!$07uch1RTE*mDjx5<|C!2-)-{U9>W3`kF;xCV{h^Hz2KSBg#>EAu{x2^Q-64Fg3 gic*xKj1>6~f~Z)+*AH!f-~a#s07*qoM6N<$f_H#3oB#j- diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 06d8e24f..94fa8373 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -6,42 +6,6 @@ oauth2redirect com.keylesspalace.tusky.PREFERENCES - /api/v1/statuses - /api/v1/media - /api/v1/timelines/home - /api/v1/timelines/mentions - /api/v1/timelines/public - /api/v1/timelines/tag/%s - /api/v1/notifications - /api/v1/follows - /api/v1/statuses/%s - /api/v1/accounts/%s - /api/v1/accounts/verify_credentials - /api/v1/accounts/%s/statuses - /api/v1/accounts/%s/following - /api/v1/accounts/%s/followers - /api/v1/accounts/relationships - /api/v1/blocks - /api/v1/favourites - /api/v1/statuses/%s - /api/v1/statuses/%s/reblog - /api/v1/statuses/%s/unreblog - /api/v1/statuses/%s/favourite - /api/v1/statuses/%s/unfavourite - /api/v1/statuses/%s/context - /api/v1/statuses/%s/reblogged_by - /api/v1/statuses/%s/favourited_by - /api/v1/accounts/%s/follow - /api/v1/accounts/%s/unfollow - /api/v1/accounts/%s/block - /api/v1/accounts/%s/unblock - /api/v1/reports - /api/v1/apps - /oauth/authorize - /oauth/token - /api/v1/devices/register - /api/v1/devices/unregister - An unidentified authorization error occurred. Notifications could not be fetched. The status is too long! @@ -157,12 +121,12 @@ Privacy options Welcome back! Share - Share toot URL to... + Share toot URL to… Mute Unmute That user wasn\'t unmuted. That user wasn\'t muted. - Search accounts... + Search accounts… NSFW