Skip to content

Commit 5d5bbca

Browse files
committed
Animated tabs in Saved Messages and Profiles (does not animate with Reduce Motion enabled)
1 parent 4eb6ecd commit 5d5bbca

11 files changed

+119
-98
lines changed

app/src/main/java/org/thunderdog/challegram/config/Config.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -249,8 +249,6 @@ public static boolean useCloudPlayback (TdApi.Message playPauseFile) {
249249

250250
public static final boolean NEED_ONLINE = true; // !BuildConfig.DEBUG;
251251

252-
public static final boolean USE_ICON_TABS = false;
253-
254252
/* TODO: Missing Android API
255253
* TextUtils.CHAR_SEQUENCE_CREATOR doesn't support ImageSpan (or whatever alternative),
256254
* therefore it's impossible to display even static custom emoji in notifications

app/src/main/java/org/thunderdog/challegram/navigation/ViewPagerTopView.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -499,7 +499,11 @@ public void addItemAtIndex (String item, int index) {
499499
}
500500

501501
public void addItem (int item) {
502-
addItemAtIndex(new Item(item), -1);
502+
addItem(new Item(item));
503+
}
504+
505+
public void addItem (Item item) {
506+
addItemAtIndex(item, -1);
503507
}
504508

505509
public void addItemAtIndex (int item, int index) {

app/src/main/java/org/thunderdog/challegram/ui/MessagesController.java

Lines changed: 12 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1427,21 +1427,8 @@ protected void onMeasure (int widthMeasureSpec, int heightMeasureSpec) {
14271427
TGLegacyManager.instance().addEmojiListener(this);
14281428

14291429
if (needTabs()) {
1430-
/*headerCell = new ViewPagerHeaderViewCompact(context);
1431-
FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) ((ViewPagerHeaderViewCompact) headerCell).getRecyclerView().getLayoutParams();
1432-
if (getBackButton() != BackHeaderButton.TYPE_NONE) {
1433-
params.leftMargin = Screen.dp(56f);
1434-
params.rightMargin = getMenuButtonsWidth();
1435-
}
1436-
if (useCenteredTitle()) {
1437-
params.width = ViewGroup.LayoutParams.WRAP_CONTENT;
1438-
params.gravity = Gravity.CENTER_HORIZONTAL;
1439-
}
1440-
}
1441-
headerCell.getTopView().setOnItemClickListener(this);
1442-
headerCell.getTopView().setItems(sections);*/
1443-
14441430
pagerHeaderView = new ViewPagerHeaderViewCompact(context);
1431+
pagerHeaderView.getTopView().setShowLabelOnActiveOnly(!Settings.instance().needReduceMotion());
14451432
addThemeInvalidateListener(pagerHeaderView.getTopView());
14461433
fparams = (FrameLayoutFix.LayoutParams) pagerHeaderView.getRecyclerView().getLayoutParams();
14471434
fparams.leftMargin = Screen.dp(56f);
@@ -1451,12 +1438,18 @@ protected void onMeasure (int widthMeasureSpec, int heightMeasureSpec) {
14511438

14521439
List<SharedBaseController<?>> mediaControllers = new ArrayList<>(8);
14531440
ProfileController.fillMediaControllers(mediaControllers, context(), tdlib());
1454-
String[] items = new String[mediaControllers.size() + 1];
1455-
items[0] = Lang.getString(R.string.TabMessages).toUpperCase();
1456-
int i = 1;
1441+
List<ViewPagerTopView.Item> items = new ArrayList<ViewPagerTopView.Item>(mediaControllers.size() + 1);
1442+
items.add(new ViewPagerTopView.Item(
1443+
Lang.getString(R.string.TabMessages).toUpperCase(),
1444+
R.drawable.baseline_chat_bubble_24,
1445+
null
1446+
));
14571447
for (SharedBaseController<?> c : mediaControllers) {
1458-
items[i] = c.getName().toString().toUpperCase();
1459-
i++;
1448+
items.add(new ViewPagerTopView.Item(
1449+
c.getName().toString().toUpperCase(),
1450+
c.getIcon(),
1451+
null
1452+
));
14601453
}
14611454
pagerHeaderView.getTopView().setItems(items);
14621455

app/src/main/java/org/thunderdog/challegram/ui/ProfileController.java

Lines changed: 18 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1664,11 +1664,8 @@ public void onScrollStateChanged (@NonNull RecyclerView recyclerView, int newSta
16641664
topView.setSelectionColorId(ColorId.profileSectionActive);
16651665
topView.setTextFromToColorId(ColorId.textLight, ColorId.profileSectionActiveContent);
16661666
addThemeInvalidateListener(topView);
1667-
if (Config.USE_ICON_TABS) {
1668-
// topView.setItems(getPagerIcons());
1669-
} else {
1670-
topView.setItems(getPagerTitles());
1671-
}
1667+
topView.setShowLabelOnActiveOnly(!isEditing() && !Settings.instance().needReduceMotion());
1668+
topView.setItems(getPagerTitles());
16721669
topCellView.getRecyclerView().setLayoutParams(FrameLayoutFix.newParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
16731670
topView.setLayoutParams(FrameLayoutFix.newParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.MATCH_PARENT));
16741671
topCellView.setLayoutParams(params);
@@ -2666,6 +2663,14 @@ private void removeTopItem (int index) {
26662663
onItemsHeightProbablyChanged();
26672664
}
26682665

2666+
private static ViewPagerTopView.Item newItem (SharedBaseController<?> c) {
2667+
return new ViewPagerTopView.Item(
2668+
c.getName().toString().toUpperCase(),
2669+
c.getIcon(),
2670+
null
2671+
);
2672+
}
2673+
26692674
private void checkChannelMembers () {
26702675
final boolean needMembers = supergroupFull != null && supergroupFull.canGetMembers;
26712676
final SharedMembersController existingMembersController = getMembersController();
@@ -2677,11 +2682,7 @@ private void checkChannelMembers () {
26772682
controllers.add(c);
26782683
registerController(c);
26792684
pagerAdapter.notifyItemInserted(controllers.size() - 1);
2680-
if (Config.USE_ICON_TABS) {
2681-
// topCellView.getTopView().addItem(c.getIcon());
2682-
} else {
2683-
topCellView.getTopView().addItem(c.getName().toString().toUpperCase());
2684-
}
2685+
topCellView.getTopView().addItem(newItem(c));
26852686
} else {
26862687
int i = controllers.indexOf(existingMembersController);
26872688
if (i == -1) {
@@ -5687,24 +5688,13 @@ public int getControllerCount () {
56875688

56885689
private final ArrayList<SharedBaseController<?>> controllers = new ArrayList<>(6);
56895690

5690-
/*private int[] getPagerIcons () {
5691-
ArrayList<SharedBaseController> controllers = getControllers();
5692-
int[] icons = new int[controllers.size()];
5693-
int i = 0;
5694-
for (SharedBaseController c : controllers) {
5695-
icons[i++] = c.getIcon();
5696-
}
5697-
return icons;
5698-
}*/
5699-
5700-
private String[] getPagerTitles () {
5691+
private List<ViewPagerTopView.Item> getPagerTitles () {
57015692
ArrayList<SharedBaseController<?>> controllers = getControllers();
5702-
String[] strings = new String[controllers.size()];
5703-
int i = 0;
5693+
List<ViewPagerTopView.Item> items = new ArrayList<>(controllers.size());
57045694
for (SharedBaseController<?> c : controllers) {
5705-
strings[i++] = c.getName().toString().toUpperCase();
5695+
items.add(newItem(c));
57065696
}
5707-
return strings;
5697+
return items;
57085698
}
57095699

57105700
private ArrayList<SharedBaseController<?>> getControllers () {
@@ -5824,11 +5814,7 @@ private void addControllerTab (SharedBaseController<?> c) {
58245814
registerController(c);
58255815
controllers.add(c);
58265816
pagerAdapter.notifyItemInserted(controllers.size() - 1);
5827-
if (Config.USE_ICON_TABS) {
5828-
// topCellView.getTopView().addItem(c.getIcon());
5829-
} else {
5830-
topCellView.getTopView().addItem(c.getName().toString().toUpperCase());
5831-
}
5817+
topCellView.getTopView().addItem(newItem(c));
58325818
pagerAdapter.notifyDataSetChanged();
58335819
}
58345820

@@ -5976,7 +5962,7 @@ private void addMediaTab (TdApi.SearchMessagesFilter filter) {
59765962
controllers.add(c);
59775963
registerController(c);
59785964
pagerAdapter.notifyItemInserted(controllers.size() - 1);
5979-
topCellView.getTopView().addItem(c.getName().toString().toUpperCase());
5965+
topCellView.getTopView().addItem(newItem(c));
59805966
} else {
59815967
SharedBaseController<?> c = controllers.get(visualIndex);
59825968
if (SharedBaseController.isMediaController(c) && c.provideSearchFilter().getConstructor() == filter.getConstructor()) {
@@ -5986,7 +5972,7 @@ private void addMediaTab (TdApi.SearchMessagesFilter filter) {
59865972
controllers.add(visualIndex, c);
59875973
registerController(c);
59885974
pagerAdapter.notifyItemInserted(visualIndex);
5989-
topCellView.getTopView().addItemAtIndex(c.getName().toString().toUpperCase(), visualIndex);
5975+
topCellView.getTopView().addItemAtIndex(newItem(c), visualIndex);
59905976
}
59915977
pagerAdapter.notifyDataSetChanged();
59925978
}

app/src/main/java/org/thunderdog/challegram/ui/SharedBaseController.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import android.view.View;
2121
import android.view.ViewGroup;
2222

23+
import androidx.annotation.DrawableRes;
2324
import androidx.annotation.NonNull;
2425
import androidx.annotation.Nullable;
2526
import androidx.annotation.StringRes;
@@ -283,7 +284,9 @@ protected int calculateInitialLoadCount () { // override if otherwise needed
283284

284285
@Override
285286
public abstract CharSequence getName ();
286-
// public abstract @DrawableRes int getIcon ();
287+
288+
@DrawableRes
289+
public abstract int getIcon ();
287290

288291
public final @Nullable String getCurrentQuery () {
289292
return currentQuery;

app/src/main/java/org/thunderdog/challegram/ui/SharedChatsController.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,17 @@ public CharSequence getName () {
8787
throw new IllegalStateException();
8888
}
8989

90+
@Override
91+
public int getIcon () {
92+
switch (mode) {
93+
case Mode.GROUPS_IN_COMMON:
94+
return R.drawable.baseline_group_24;
95+
case Mode.SIMILAR_CHANNELS:
96+
return R.drawable.baseline_bullhorn_24;
97+
}
98+
throw new IllegalStateException();
99+
}
100+
90101
@Override
91102
protected TdApi.Function<?> buildRequest (long chatId, long messageThreadId, String query, long offset, String secretOffset, int limit) {
92103
switch (mode) {

app/src/main/java/org/thunderdog/challegram/ui/SharedCommonController.java

Lines changed: 19 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -66,44 +66,36 @@ public void destroy () {
6666
}
6767
}
6868

69-
/*@Override
70-
public int getIcon () {
71-
switch (filter.getConstructor()) {
72-
case TdApi.SearchMessagesFilterDocument.CONSTRUCTOR: {
73-
return R.drawable.baseline_insert_drive_file_20;
74-
}
75-
case TdApi.SearchMessagesFilterAudio.CONSTRUCTOR: {
76-
return R.drawable.baseline_music_note_20;
77-
}
78-
case TdApi.SearchMessagesFilterUrl.CONSTRUCTOR: {
79-
return R.drawable.baseline_language_20;
80-
}
81-
case TdApi.SearchMessagesFilterVoiceNote.CONSTRUCTOR: {
82-
return R.drawable.baseline_mic_20;
83-
}
84-
}
85-
return 0;
86-
}*/
87-
8869
@Override
8970
public CharSequence getName () {
9071
switch (filter.getConstructor()) {
91-
case TdApi.SearchMessagesFilterDocument.CONSTRUCTOR: {
72+
case TdApi.SearchMessagesFilterDocument.CONSTRUCTOR:
9273
return Lang.getString(R.string.TabDocs);
93-
}
94-
case TdApi.SearchMessagesFilterAudio.CONSTRUCTOR: {
74+
case TdApi.SearchMessagesFilterAudio.CONSTRUCTOR:
9575
return Lang.getString(R.string.TabAudio);
96-
}
97-
case TdApi.SearchMessagesFilterUrl.CONSTRUCTOR: {
76+
case TdApi.SearchMessagesFilterUrl.CONSTRUCTOR:
9877
return Lang.getString(R.string.TabLinks);
99-
}
100-
case TdApi.SearchMessagesFilterVoiceNote.CONSTRUCTOR: {
78+
case TdApi.SearchMessagesFilterVoiceNote.CONSTRUCTOR:
10179
return Lang.getString(R.string.TabVoiceMessages);
102-
}
10380
}
10481
return "";
10582
}
10683

84+
@Override
85+
public int getIcon () {
86+
switch (filter.getConstructor()) {
87+
case TdApi.SearchMessagesFilterDocument.CONSTRUCTOR:
88+
return R.drawable.baseline_insert_drive_file_24;
89+
case TdApi.SearchMessagesFilterAudio.CONSTRUCTOR:
90+
return R.drawable.baseline_music_note_24;
91+
case TdApi.SearchMessagesFilterUrl.CONSTRUCTOR:
92+
return R.drawable.baseline_language_24;
93+
case TdApi.SearchMessagesFilterVoiceNote.CONSTRUCTOR:
94+
return R.drawable.baseline_mic_24;
95+
}
96+
return 0;
97+
}
98+
10799
@Override
108100
protected boolean canSearch () {
109101
return filter != null;

app/src/main/java/org/thunderdog/challegram/ui/SharedMediaController.java

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import android.view.View;
2020
import android.view.ViewConfiguration;
2121

22+
import androidx.annotation.DrawableRes;
2223
import androidx.annotation.Nullable;
2324
import androidx.recyclerview.widget.GridLayoutManager;
2425

@@ -65,17 +66,6 @@ public SharedMediaController setFilter (TdApi.SearchMessagesFilter filter) {
6566
return this;
6667
}
6768

68-
/*@Override
69-
public int getIcon () {
70-
switch (type) {
71-
case TYPE_PHOTOS_AND_VIDEOS:
72-
return R.drawable.baseline_image_20;
73-
case TYPE_GIFS:
74-
return R.drawable.baseline_gif_20;
75-
}
76-
return 0;
77-
}*/
78-
7969
@Override
8070
public CharSequence getName () {
8171
switch (provideSearchFilter().getConstructor()) {
@@ -93,6 +83,24 @@ public CharSequence getName () {
9383
return "";
9484
}
9585

86+
@DrawableRes
87+
@Override
88+
public int getIcon () {
89+
switch (provideSearchFilter().getConstructor()) {
90+
case TdApi.SearchMessagesFilterPhotoAndVideo.CONSTRUCTOR:
91+
return R.drawable.baseline_image_24;
92+
case TdApi.SearchMessagesFilterVideo.CONSTRUCTOR:
93+
return R.drawable.baseline_videocam_24;
94+
case TdApi.SearchMessagesFilterPhoto.CONSTRUCTOR:
95+
return R.drawable.baseline_camera_alt_24;
96+
case TdApi.SearchMessagesFilterAnimation.CONSTRUCTOR:
97+
return R.drawable.deproko_baseline_gif_24;
98+
case TdApi.SearchMessagesFilterVideoNote.CONSTRUCTOR:
99+
return R.drawable.deproko_baseline_msg_video_24;
100+
}
101+
return 0;
102+
}
103+
96104
@Override
97105
protected boolean supportsMessageContent () {
98106
return true;

app/src/main/java/org/thunderdog/challegram/ui/SharedMembersController.java

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import android.content.Context;
1818
import android.view.View;
1919

20+
import androidx.annotation.DrawableRes;
2021
import androidx.annotation.Nullable;
2122
import androidx.annotation.UiThread;
2223

@@ -53,11 +54,6 @@ public SharedMembersController (Context context, Tdlib tdlib) {
5354
super(context, tdlib);
5455
}
5556

56-
/*@Override
57-
public int getIcon () {
58-
return R.drawable.baseline_group_20;
59-
}*/
60-
6157
private boolean forceAdmins;
6258

6359
public void setForceAdmins (boolean forceAdmins) {
@@ -79,6 +75,22 @@ public CharSequence getName () {
7975
return Lang.getString(forceAdmins ? R.string.TabAdmins : R.string.TabMembers);
8076
}
8177

78+
@DrawableRes
79+
@Override
80+
public int getIcon () {
81+
if (specificFilter != null) {
82+
switch (specificFilter.getConstructor()) {
83+
case TdApi.SupergroupMembersFilterAdministrators.CONSTRUCTOR:
84+
return R.drawable.baseline_stars_24;
85+
case TdApi.SupergroupMembersFilterBanned.CONSTRUCTOR:
86+
return R.drawable.baseline_gavel_24;
87+
case TdApi.SupergroupMembersFilterRestricted.CONSTRUCTOR:
88+
return R.drawable.baseline_block_24;
89+
}
90+
}
91+
return forceAdmins ? R.drawable.baseline_stars_24 : R.drawable.baseline_group_24;
92+
}
93+
8294
@Override
8395
protected CharSequence buildTotalCount (ArrayList<DoubleTextWrapper> data) {
8496
int res = forceAdmins ? R.string.xAdmins : R.string.xMembers;

app/src/main/java/org/thunderdog/challegram/ui/SharedRestrictionController.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,11 @@ public CharSequence getName () {
6868
return Lang.getString(R.string.TabMedia);
6969
}
7070

71+
@Override
72+
public int getIcon () {
73+
return R.drawable.baseline_image_24;
74+
}
75+
7176
@Override
7277
protected InlineResult<?> parseObject (TdApi.Object object) {
7378
return null;

0 commit comments

Comments
 (0)