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

Commit 5a17c77

Browse files
keianhzoMortimerGoro
authored andcommitted
Library polishing (#1879)
1 parent 629c3b9 commit 5a17c77

15 files changed

Lines changed: 200 additions & 150 deletions

app/src/common/shared/org/mozilla/vrbrowser/browser/BookmarksStore.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,6 @@ class BookmarksStore constructor(val context: Context) {
4444

4545
fun addBookmark(aURL: String, aTitle: String) = GlobalScope.future {
4646
storage.addItem(BookmarkRoot.Mobile.id, aURL, aTitle, null)
47-
notifyListeners()
4847
notifyAddedListeners()
4948
}
5049

app/src/common/shared/org/mozilla/vrbrowser/ui/adapters/BookmarkAdapter.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,10 +153,12 @@ public BookmarkViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int view
153153
int ev = motionEvent.getActionMasked();
154154
switch (ev) {
155155
case MotionEvent.ACTION_UP:
156+
binding.setIsHovered(true);
156157
mBookmarkItemCallback.onMore(view, binding.getItem());
157158
return true;
158159

159160
case MotionEvent.ACTION_DOWN:
161+
binding.setIsHovered(true);
160162
return true;
161163
}
162164
return false;
@@ -166,10 +168,12 @@ public BookmarkViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int view
166168
int ev = motionEvent.getActionMasked();
167169
switch (ev) {
168170
case MotionEvent.ACTION_UP:
171+
binding.setIsHovered(true);
169172
mBookmarkItemCallback.onDelete(view, binding.getItem());
170173
return true;
171174

172175
case MotionEvent.ACTION_DOWN:
176+
binding.setIsHovered(true);
173177
return true;
174178
}
175179
return false;
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package org.mozilla.vrbrowser.ui.adapters;
2+
3+
import android.content.Context;
4+
import android.util.AttributeSet;
5+
6+
import androidx.recyclerview.widget.LinearLayoutManager;
7+
8+
// There seems to be a bug int he RecyclerView adapter that makes it crash sometimes when updating the dataset
9+
// This seems to be the only thing that works until there is a ew RecyclerView version > 1.0.0 that fixes it
10+
public class CustomLinearLayoutManager extends LinearLayoutManager {
11+
12+
public CustomLinearLayoutManager(Context context) {
13+
super(context);
14+
}
15+
16+
public CustomLinearLayoutManager(Context context, int orientation, boolean reverseLayout) {
17+
super(context, orientation, reverseLayout);
18+
}
19+
20+
public CustomLinearLayoutManager(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
21+
super(context, attrs, defStyleAttr, defStyleRes);
22+
}
23+
24+
@Override
25+
public boolean supportsPredictiveItemAnimations() {
26+
return false;
27+
}
28+
}

app/src/common/shared/org/mozilla/vrbrowser/ui/adapters/HistoryAdapter.java

Lines changed: 123 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
import org.mozilla.vrbrowser.R;
1818
import org.mozilla.vrbrowser.databinding.HistoryItemBinding;
19+
import org.mozilla.vrbrowser.databinding.HistoryItemHeaderBinding;
1920
import org.mozilla.vrbrowser.ui.callbacks.HistoryItemCallback;
2021
import org.mozilla.vrbrowser.ui.widgets.WidgetPlacement;
2122
import org.mozilla.vrbrowser.utils.AnimationHelper;
@@ -27,10 +28,13 @@
2728
import mozilla.components.concept.storage.VisitInfo;
2829
import mozilla.components.concept.storage.VisitType;
2930

30-
public class HistoryAdapter extends RecyclerView.Adapter<HistoryAdapter.HistoryItemViewHolder> {
31+
public class HistoryAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
3132

3233
static final String LOGTAG = SystemUtils.createLogtag(HistoryAdapter.class);
3334

35+
private static final int TYPE_HEADER = 0;
36+
private static final int TYPE_ITEM = 1;
37+
3438
private static final int ICON_ANIMATION_DURATION = 200;
3539

3640
private List<? extends VisitInfo> mHistoryList;
@@ -120,75 +124,99 @@ public int getItemPosition(long id) {
120124

121125
@SuppressLint("ClickableViewAccessibility")
122126
@Override
123-
public HistoryItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
124-
HistoryItemBinding binding = DataBindingUtil
125-
.inflate(LayoutInflater.from(parent.getContext()), R.layout.history_item,
126-
parent, false);
127-
binding.setCallback(mHistoryItemCallback);
128-
binding.setIsHovered(false);
129-
binding.layout.setOnHoverListener((view, motionEvent) -> {
130-
int ev = motionEvent.getActionMasked();
131-
switch (ev) {
132-
case MotionEvent.ACTION_HOVER_ENTER:
133-
binding.setIsHovered(true);
134-
return false;
135-
136-
case MotionEvent.ACTION_HOVER_EXIT:
137-
binding.setIsHovered(false);
138-
return false;
139-
}
140-
141-
return false;
142-
});
143-
binding.layout.setOnTouchListener((view, motionEvent) -> {
144-
int ev = motionEvent.getActionMasked();
145-
switch (ev) {
146-
case MotionEvent.ACTION_UP:
147-
return false;
148-
149-
case MotionEvent.ACTION_DOWN:
150-
binding.setIsHovered(true);
151-
return false;
152-
153-
case MotionEvent.ACTION_CANCEL:
154-
binding.setIsHovered(false);
155-
return false;
156-
}
157-
return false;
158-
});
159-
binding.more.setOnHoverListener(mIconHoverListener);
160-
binding.more.setOnTouchListener((view, motionEvent) -> {
161-
int ev = motionEvent.getActionMasked();
162-
switch (ev) {
163-
case MotionEvent.ACTION_UP:
164-
mHistoryItemCallback.onMore(view, binding.getItem());
165-
return true;
166-
167-
case MotionEvent.ACTION_DOWN:
168-
return true;
169-
}
170-
return false;
171-
});
172-
binding.trash.setOnHoverListener(mIconHoverListener);
173-
binding.trash.setOnTouchListener((view, motionEvent) -> {
174-
int ev = motionEvent.getActionMasked();
175-
switch (ev) {
176-
case MotionEvent.ACTION_UP:
177-
mHistoryItemCallback.onDelete(view, binding.getItem());
178-
return true;
179-
180-
case MotionEvent.ACTION_DOWN:
181-
return true;
182-
}
183-
return false;
184-
});
185-
return new HistoryItemViewHolder(binding);
127+
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
128+
if (viewType == TYPE_ITEM) {
129+
HistoryItemBinding binding = DataBindingUtil
130+
.inflate(LayoutInflater.from(parent.getContext()), R.layout.history_item,
131+
parent, false);
132+
binding.setCallback(mHistoryItemCallback);
133+
binding.setIsHovered(false);
134+
binding.layout.setOnHoverListener((view, motionEvent) -> {
135+
int ev = motionEvent.getActionMasked();
136+
switch (ev) {
137+
case MotionEvent.ACTION_HOVER_ENTER:
138+
binding.setIsHovered(true);
139+
return false;
140+
141+
case MotionEvent.ACTION_HOVER_EXIT:
142+
binding.setIsHovered(false);
143+
return false;
144+
}
145+
146+
return false;
147+
});
148+
binding.layout.setOnTouchListener((view, motionEvent) -> {
149+
int ev = motionEvent.getActionMasked();
150+
switch (ev) {
151+
case MotionEvent.ACTION_UP:
152+
return false;
153+
154+
case MotionEvent.ACTION_DOWN:
155+
binding.setIsHovered(true);
156+
return false;
157+
158+
case MotionEvent.ACTION_CANCEL:
159+
binding.setIsHovered(false);
160+
return false;
161+
}
162+
return false;
163+
});
164+
binding.more.setOnHoverListener(mIconHoverListener);
165+
binding.more.setOnTouchListener((view, motionEvent) -> {
166+
int ev = motionEvent.getActionMasked();
167+
switch (ev) {
168+
case MotionEvent.ACTION_UP:
169+
binding.setIsHovered(true);
170+
mHistoryItemCallback.onMore(view, binding.getItem());
171+
return true;
172+
173+
case MotionEvent.ACTION_DOWN:
174+
binding.setIsHovered(true);
175+
return true;
176+
}
177+
return false;
178+
});
179+
binding.trash.setOnHoverListener(mIconHoverListener);
180+
binding.trash.setOnTouchListener((view, motionEvent) -> {
181+
int ev = motionEvent.getActionMasked();
182+
switch (ev) {
183+
case MotionEvent.ACTION_UP:
184+
binding.setIsHovered(true);
185+
mHistoryItemCallback.onDelete(view, binding.getItem());
186+
return true;
187+
188+
case MotionEvent.ACTION_DOWN:
189+
binding.setIsHovered(true);
190+
return true;
191+
}
192+
return false;
193+
});
194+
195+
return new HistoryItemViewHolder(binding);
196+
197+
} else if (viewType == TYPE_HEADER){
198+
HistoryItemHeaderBinding binding = DataBindingUtil
199+
.inflate(LayoutInflater.from(parent.getContext()), R.layout.history_item_header,
200+
parent, false);
201+
202+
return new HistoryItemViewHeaderHolder(binding);
203+
}
204+
205+
throw new RuntimeException("there is no type that matches the type " + viewType + " + make sure your using types correctly");
186206
}
187207

188208
@Override
189-
public void onBindViewHolder(@NonNull HistoryItemViewHolder holder, int position) {
190-
holder.binding.setItem(mHistoryList.get(position));
191-
holder.binding.executePendingBindings();
209+
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
210+
if (holder instanceof HistoryItemViewHolder) {
211+
HistoryItemViewHolder item = (HistoryItemViewHolder) holder;
212+
item.binding.setItem(mHistoryList.get(position));
213+
item.binding.executePendingBindings();
214+
215+
} else if (holder instanceof HistoryItemViewHeaderHolder) {
216+
HistoryItemViewHeaderHolder item = (HistoryItemViewHeaderHolder) holder;
217+
item.binding.setTitle(mHistoryList.get(position).getTitle());
218+
item.binding.executePendingBindings();
219+
}
192220
}
193221

194222
@Override
@@ -202,14 +230,16 @@ public long getItemId(int position) {
202230
return historyItem.getVisitTime();
203231
}
204232

205-
static class HistoryItemViewHolder extends RecyclerView.ViewHolder {
233+
@Override
234+
public int getItemViewType(int position) {
235+
if (isPositionHeader(position))
236+
return TYPE_HEADER;
206237

207-
final HistoryItemBinding binding;
238+
return TYPE_ITEM;
239+
}
208240

209-
HistoryItemViewHolder(@NonNull HistoryItemBinding binding) {
210-
super(binding.getRoot());
211-
this.binding = binding;
212-
}
241+
private boolean isPositionHeader(int position) {
242+
return mHistoryList.get(position).getVisitType() == VisitType.NOT_A_VISIT;
213243
}
214244

215245
private View.OnHoverListener mIconHoverListener = (view, motionEvent) -> {
@@ -236,4 +266,24 @@ static class HistoryItemViewHolder extends RecyclerView.ViewHolder {
236266
return false;
237267
};
238268

269+
static class HistoryItemViewHolder extends RecyclerView.ViewHolder {
270+
271+
final HistoryItemBinding binding;
272+
273+
HistoryItemViewHolder(@NonNull HistoryItemBinding binding) {
274+
super(binding.getRoot());
275+
this.binding = binding;
276+
}
277+
}
278+
279+
static class HistoryItemViewHeaderHolder extends RecyclerView.ViewHolder {
280+
281+
final HistoryItemHeaderBinding binding;
282+
283+
HistoryItemViewHeaderHolder(@NonNull HistoryItemHeaderBinding binding) {
284+
super(binding.getRoot());
285+
this.binding = binding;
286+
}
287+
}
288+
239289
}

app/src/common/shared/org/mozilla/vrbrowser/ui/adapters/LanguagesAdapter.java

Lines changed: 0 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
package org.mozilla.vrbrowser.ui.adapters;
22

33
import android.annotation.SuppressLint;
4-
import android.content.Context;
5-
import android.util.AttributeSet;
64
import android.view.LayoutInflater;
75
import android.view.MotionEvent;
86
import android.view.View;
@@ -12,7 +10,6 @@
1210
import androidx.annotation.NonNull;
1311
import androidx.annotation.Nullable;
1412
import androidx.databinding.DataBindingUtil;
15-
import androidx.recyclerview.widget.LinearLayoutManager;
1613
import androidx.recyclerview.widget.RecyclerView;
1714

1815
import org.mozilla.gecko.util.ThreadUtils;
@@ -190,28 +187,4 @@ public long getItemId(int position) {
190187
return position;
191188
}
192189

193-
// There seems to be a bug int he RecyclerView adapter that makes it crash sometimes when updating the dataset
194-
// This seems to be the only thing that works until there is a ew RecyclerView version > 1.0.0
195-
public static class CustLinearLayoutManager extends LinearLayoutManager {
196-
197-
public CustLinearLayoutManager(Context context) {
198-
super(context);
199-
}
200-
201-
public CustLinearLayoutManager(Context context, int orientation, boolean reverseLayout) {
202-
super(context, orientation, reverseLayout);
203-
}
204-
205-
public CustLinearLayoutManager(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
206-
super(context, attrs, defStyleAttr, defStyleRes);
207-
}
208-
209-
// Something is happening here
210-
211-
@Override
212-
public boolean supportsPredictiveItemAnimations() {
213-
return false;
214-
}
215-
}
216-
217190
}

app/src/common/shared/org/mozilla/vrbrowser/ui/views/BookmarksView.java

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -147,10 +147,10 @@ private void showBookmarks(List<BookmarkNode> aBookmarks) {
147147
mBinding.setIsEmpty(false);
148148
mBinding.setIsLoading(false);
149149
mBookmarkAdapter.setBookmarkList(aBookmarks);
150+
mBinding.bookmarksList.post(() -> mBinding.bookmarksList.smoothScrollToPosition(
151+
mBookmarkAdapter.getItemCount() > 0 ? mBookmarkAdapter.getItemCount() - 1 : 0));
150152
}
151153
mBinding.executePendingBindings();
152-
mBinding.bookmarksList.post(() -> mBinding.bookmarksList.smoothScrollToPosition(
153-
mBookmarkAdapter.getItemCount() > 0 ? mBookmarkAdapter.getItemCount() - 1 : 0));
154154
}
155155

156156
// BookmarksStore.BookmarksViewListener
@@ -165,6 +165,10 @@ public void onBookmarksUpdated() {
165165

166166
@Override
167167
public void onBookmarkAdded() {
168-
// Nothing to do
168+
if (mIgnoreNextListener) {
169+
mIgnoreNextListener = false;
170+
return;
171+
}
172+
syncBookmarks();
169173
}
170174
}

app/src/common/shared/org/mozilla/vrbrowser/ui/views/HistoryView.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,7 @@ private void syncHistory() {
155155
.sorted((o1, o2) -> Long.valueOf(o2.getVisitTime() - o1.getVisitTime()).intValue())
156156
.collect(Collectors.toList());
157157

158-
addSection(orderedItems, getResources().getString(R.string.history_section_today), currentTime, todayLimit);
158+
addSection(orderedItems, getResources().getString(R.string.history_section_today), Long.MAX_VALUE, todayLimit);
159159
addSection(orderedItems, getResources().getString(R.string.history_section_yesterday), todayLimit, yesterdayLimit);
160160
addSection(orderedItems, getResources().getString(R.string.history_section_last_week), yesterdayLimit, oneWeekLimit);
161161
addSection(orderedItems, getResources().getString(R.string.history_section_older), oneWeekLimit, 0);
@@ -175,7 +175,7 @@ private void addSection(final @NonNull List<VisitInfo> items, @NonNull String se
175175

176176
if (items.get(i).getVisitTime() < rangeStart && items.get(i).getVisitTime() > rangeEnd) {
177177
items.add(i, new VisitInfo(
178-
"",
178+
section,
179179
section,
180180
rangeStart,
181181
VisitType.NOT_A_VISIT
@@ -194,9 +194,9 @@ private void showHistory(List<VisitInfo> historyItems) {
194194
mBinding.setIsEmpty(false);
195195
mBinding.setIsLoading(false);
196196
mHistoryAdapter.setHistoryList(historyItems);
197+
mBinding.historyList.post(() -> mBinding.historyList.smoothScrollToPosition(0));
197198
}
198199
mBinding.executePendingBindings();
199-
mBinding.historyList.post(() -> mBinding.historyList.smoothScrollToPosition(0));
200200
}
201201

202202
// HistoryStore.HistoryListener

0 commit comments

Comments
 (0)