-
Notifications
You must be signed in to change notification settings - Fork 215
/
LibraryItemContextMenu.java
117 lines (90 loc) · 3.96 KB
/
LibraryItemContextMenu.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
/* -*- Mode: Java; c-basic-offset: 4; tab-width: 4; indent-tabs-mode: nil; -*-
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
package org.mozilla.vrbrowser.ui.views;
import android.content.Context;
import android.util.AttributeSet;
import android.util.Log;
import android.view.LayoutInflater;
import android.widget.FrameLayout;
import androidx.annotation.NonNull;
import androidx.databinding.DataBindingUtil;
import org.mozilla.vrbrowser.R;
import org.mozilla.vrbrowser.browser.engine.SessionStore;
import org.mozilla.vrbrowser.databinding.LibraryItemContextMenuBinding;
import org.mozilla.vrbrowser.ui.callbacks.LibraryItemContextMenuClickCallback;
import org.mozilla.vrbrowser.ui.widgets.WidgetPlacement;
public class LibraryItemContextMenu extends FrameLayout {
private static final String LOGTAG = LibraryItemContextMenu.class.getSimpleName();
public enum LibraryItemType {
BOOKMARKS,
HISTORY
}
public static class LibraryContextMenuItem {
private String url;
private String title;
private LibraryItemType type;
public LibraryContextMenuItem(@NonNull String url, String title, LibraryItemType type) {
this.url = url;
this.title = title;
this.type = type;
}
public String getUrl() {
return url;
}
public String getTitle() {
return title;
}
public LibraryItemType getType() {
return type;
}
}
private LibraryItemContextMenuBinding mBinding;
public LibraryItemContextMenu(Context aContext) {
super(aContext);
initialize(aContext);
}
public LibraryItemContextMenu(Context aContext, AttributeSet aAttrs) {
super(aContext, aAttrs);
initialize(aContext);
}
public LibraryItemContextMenu(Context aContext, AttributeSet aAttrs, int aDefStyle) {
super(aContext, aAttrs, aDefStyle);
initialize(aContext);
}
private void initialize(Context aContext) {
LayoutInflater inflater = LayoutInflater.from(aContext);
mBinding = DataBindingUtil.inflate(inflater, R.layout.library_item_context_menu, this, true);
}
public void setItem(@NonNull LibraryContextMenuItem item) {
mBinding.setItem(item);
SessionStore.get().getBookmarkStore().isBookmarked(item.getUrl()).thenAccept((isBookmarked -> {
mBinding.setIsBookmarked(isBookmarked);
mBinding.bookmark.setText(isBookmarked ? R.string.history_context_remove_bookmarks : R.string.history_context_add_bookmarks);
invalidate();
})).exceptionally(throwable -> {
Log.d(LOGTAG, "Couldn't get the bookmarked status of the history item");
return null;
});
}
public void setContextMenuClickCallback(LibraryItemContextMenuClickCallback callback) {
mBinding.setCallback(callback);
}
public int getMenuHeight() {
if (mBinding.getItem() == null) {
throw new IllegalStateException("setItem must be called before getMenuHeight");
}
switch (mBinding.getItem().getType()) {
case BOOKMARKS:
mBinding.bookmarkLayout.setVisibility(GONE);
mBinding.newWindowLayout.setBackgroundResource(R.drawable.library_context_menu_item_background_single);
return WidgetPlacement.dpDimension(getContext(), R.dimen.library_item_row_height);
case HISTORY:
mBinding.bookmarkLayout.setVisibility(VISIBLE);
mBinding.newWindowLayout.setBackgroundResource(R.drawable.library_context_menu_item_background_top);
return WidgetPlacement.dpDimension(getContext(), R.dimen.library_item_row_height) * 2;
}
return WidgetPlacement.dpDimension(getContext(), R.dimen.library_item_row_height) * 2;
}
}