Skip to content
This repository was archived by the owner on Jul 25, 2024. It is now read-only.

Commit 58e0675

Browse files
committed
Improved class file structure.
1 parent 8444666 commit 58e0675

File tree

7 files changed

+47
-57
lines changed

7 files changed

+47
-57
lines changed

app/src/main/java/com/zulip/android/activities/MessageListFragment.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@
5353
import com.zulip.android.util.ZLog;
5454
import com.zulip.android.viewholders.HeaderSpaceItemDecoration;
5555
import com.zulip.android.viewholders.stickyheaders.StickyLayoutManager;
56-
import com.zulip.android.viewholders.stickyheaders.interfaces.RetrieveHeaderView;
56+
import com.zulip.android.viewholders.stickyheaders.RetrieveHeaderView;
5757
import com.zulip.android.viewholders.stickyheaders.interfaces.StickyHeaderListener;
5858

5959
import org.json.JSONObject;
@@ -62,7 +62,6 @@
6262
import java.util.ArrayList;
6363
import java.util.Arrays;
6464
import java.util.Calendar;
65-
import java.util.Date;
6665
import java.util.List;
6766

6867
import retrofit2.Call;

app/src/main/java/com/zulip/android/activities/RecyclerMessageAdapter.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@
5252
import com.zulip.android.viewholders.LoadingHolder;
5353
import com.zulip.android.viewholders.MessageHeaderParent;
5454
import com.zulip.android.viewholders.MessageHolder;
55-
import com.zulip.android.viewholders.stickyheaders.interfaces.RetrieveHeaderView;
55+
import com.zulip.android.viewholders.stickyheaders.RetrieveHeaderView;
5656
import com.zulip.android.viewholders.stickyheaders.interfaces.StickyHeaderHandler;
5757

5858
import java.io.IOException;

app/src/main/java/com/zulip/android/viewholders/stickyheaders/GetStickyHeaderPosition.java

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414
import android.view.ViewTreeObserver;
1515

1616

17-
import com.zulip.android.viewholders.stickyheaders.interfaces.RetrieveHeaderView;
1817
import com.zulip.android.viewholders.stickyheaders.interfaces.StickyHeaderListener;
1918

2019
import java.util.List;
@@ -58,7 +57,7 @@ void setHeaderPositions(List<Integer> headerPositions) {
5857
this.headerPositions = headerPositions;
5958
}
6059

61-
RecyclerView.ViewHolder updateHeaderState(int firstVisiblePosition, Map<Integer, View> visibleHeaders,
60+
void updateHeaderState(int firstVisiblePosition, Map<Integer, View> visibleHeaders,
6261
RetrieveHeaderView retrieveHeaderView) {
6362
int headerPositionToShow = getHeaderPositionToShow(
6463
firstVisiblePosition, visibleHeaders.get(firstVisiblePosition));
@@ -70,12 +69,11 @@ RecyclerView.ViewHolder updateHeaderState(int firstVisiblePosition, Map<Integer,
7069
lastBoundPosition = INVALID_POSITION;
7170
} else {
7271
// We don't want to attach yet if header view is not at edge
73-
if (checkMargins && headerAwayFromEdge(headerToCopy)) return null;
72+
if (checkMargins && headerAwayFromEdge(headerToCopy)) return;
7473
RecyclerView.ViewHolder viewHolder =
7574
retrieveHeaderView.getViewHolderForPosition(headerPositionToShow);
7675
attachHeader(viewHolder, headerPositionToShow);
7776
lastBoundPosition = headerPositionToShow;
78-
return viewHolder;
7977
}
8078
} else if (checkMargins) {
8179
/*
@@ -88,7 +86,6 @@ RecyclerView.ViewHolder updateHeaderState(int firstVisiblePosition, Map<Integer,
8886
}
8987
}
9088
checkHeaderPositions(visibleHeaders);
91-
return null;
9289
}
9390

9491
// This checks visible headers and their positions to determine if the sticky header needs
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package com.zulip.android.viewholders.stickyheaders;
2+
3+
import android.support.design.widget.CoordinatorLayout;
4+
import android.support.v7.widget.RecyclerView;
5+
import android.view.ViewGroup;
6+
7+
import com.zulip.android.ZulipApp;
8+
9+
public class RetrieveHeaderView {
10+
11+
public static int DEFAULT_VIEW_TYPE = -1;
12+
13+
private final RecyclerView recyclerView;
14+
15+
private RecyclerView.ViewHolder currentViewHolder;
16+
private int currentViewType;
17+
18+
RetrieveHeaderView(RecyclerView recyclerView) {
19+
this.recyclerView = recyclerView;
20+
this.currentViewType = DEFAULT_VIEW_TYPE;
21+
}
22+
23+
RecyclerView.ViewHolder getViewHolderForPosition(int position) {
24+
if (currentViewType != recyclerView.getAdapter().getItemViewType(position)) {
25+
currentViewType = recyclerView.getAdapter().getItemViewType(position);
26+
currentViewHolder = recyclerView.getAdapter().createViewHolder(
27+
(ViewGroup) recyclerView.getParent(), currentViewType);
28+
}
29+
//set top margin for sticky header to 0 as in message_header.xml it is present which is only required when header is in between of messages
30+
CoordinatorLayout.LayoutParams layoutParams = (CoordinatorLayout.LayoutParams) currentViewHolder.itemView.getLayoutParams();
31+
layoutParams.setMargins(0, ZulipApp.get().getZulipActivity().getFloatingHeaderTopMargin(), 0, 0);
32+
33+
//set viewHolder in ZulipActivity
34+
//adjust it when message list get scrolled
35+
ZulipApp.get().getZulipActivity().setViewHolder(currentViewHolder);
36+
return currentViewHolder;
37+
}
38+
}

app/src/main/java/com/zulip/android/viewholders/stickyheaders/StickyLayoutManager.java

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,13 @@
44

55
import android.content.Context;
66
import android.support.annotation.Nullable;
7-
import android.support.design.widget.CoordinatorLayout;
87
import android.support.v7.widget.LinearLayoutManager;
98
import android.support.v7.widget.RecyclerView;
109
import android.util.Log;
1110
import android.view.View;
1211

1312
import com.zulip.android.ZulipApp;
14-
import com.zulip.android.util.RemoveViewsOnScroll;
1513
import com.zulip.android.viewholders.MessageHeaderParent;
16-
import com.zulip.android.viewholders.stickyheaders.interfaces.RetrieveHeaderView;
1714
import com.zulip.android.viewholders.stickyheaders.interfaces.StickyHeaderHandler;
1815
import com.zulip.android.viewholders.stickyheaders.interfaces.StickyHeaderListener;
1916

@@ -27,7 +24,7 @@ public class StickyLayoutManager extends LinearLayoutManager {
2724
private GetStickyHeaderPosition positioner;
2825
private StickyHeaderHandler headerHandler;
2926
private List<Integer> headerPositions;
30-
private RetrieveHeaderView.RecyclerRetrieveHeaderView viewRetriever;
27+
private RetrieveHeaderView viewRetriever;
3128
private RecyclerView recyclerView;
3229
@Nullable
3330
private StickyHeaderListener listener;
@@ -78,11 +75,8 @@ private void cacheHeaderPositions() {
7875
public int scrollVerticallyBy(int dy, RecyclerView.Recycler recycler, RecyclerView.State state) {
7976
int scroll = super.scrollVerticallyBy(dy, recycler, state);
8077
if (Math.abs(scroll) > 0) {
81-
RecyclerView.ViewHolder viewHolder = positioner.updateHeaderState(
78+
positioner.updateHeaderState(
8279
findFirstVisibleItemPosition(), getVisibleHeaders(), viewRetriever);
83-
if (viewHolder != null) {
84-
ZulipApp.get().getZulipActivity().setViewHolder(viewHolder);
85-
}
8680
}
8781
return scroll;
8882
}
@@ -126,7 +120,7 @@ public void setStickyHeaderListener(@Nullable StickyHeaderListener listener) {
126120
public void onAttachedToWindow(RecyclerView view) {
127121
super.onAttachedToWindow(view);
128122
recyclerView = view;
129-
viewRetriever = new RetrieveHeaderView.RecyclerRetrieveHeaderView(recyclerView);
123+
viewRetriever = new RetrieveHeaderView(recyclerView);
130124
positioner = new GetStickyHeaderPosition(recyclerView);
131125
positioner.setListener(listener);
132126
}

app/src/main/java/com/zulip/android/viewholders/stickyheaders/interfaces/RetrieveHeaderView.java

Lines changed: 0 additions & 40 deletions
This file was deleted.

app/src/main/java/com/zulip/android/viewholders/stickyheaders/interfaces/StickyHeaderListener.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package com.zulip.android.viewholders.stickyheaders.interfaces;
22

3+
import com.zulip.android.viewholders.stickyheaders.RetrieveHeaderView;
4+
35
/**
46
* A listener that can be set by calling {@link com.zulip.android.viewholders.stickyheaders.StickyLayoutManager#setStickyHeaderListener(StickyHeaderListener)}
57
* <p>

0 commit comments

Comments
 (0)