-
Notifications
You must be signed in to change notification settings - Fork 215
/
TopBarWidget.java
127 lines (100 loc) · 3.94 KB
/
TopBarWidget.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
118
119
120
121
122
123
124
125
126
127
/* -*- 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.widgets;
import android.content.Context;
import android.util.AttributeSet;
import org.mozilla.geckoview.GeckoSession;
import org.mozilla.vrbrowser.R;
import org.mozilla.vrbrowser.audio.AudioEngine;
import org.mozilla.vrbrowser.browser.SessionStore;
import org.mozilla.vrbrowser.ui.views.UIButton;
public class TopBarWidget extends UIWidget implements SessionStore.SessionChangeListener, WidgetManagerDelegate.UpdateListener {
private UIButton mCloseButton;
private AudioEngine mAudio;
private UIWidget mBrowserWidget;
public TopBarWidget(Context aContext) {
super(aContext);
initialize(aContext);
}
public TopBarWidget(Context aContext, AttributeSet aAttrs) {
super(aContext, aAttrs);
initialize(aContext);
}
public TopBarWidget(Context aContext, AttributeSet aAttrs, int aDefStyle) {
super(aContext, aAttrs, aDefStyle);
initialize(aContext);
}
private void initialize(Context aContext) {
inflate(aContext, R.layout.top_bar, this);
mCloseButton = findViewById(R.id.negativeButton);
mCloseButton.setOnClickListener(view -> {
view.requestFocusFromTouch();
if (mAudio != null) {
mAudio.playSound(AudioEngine.Sound.CLICK);
}
SessionStore.get().exitPrivateMode();
});
mAudio = AudioEngine.fromContext(aContext);
SessionStore.get().addSessionChangeListener(this);
mWidgetManager.addUpdateListener(this);
handleSessionState();
}
@Override
protected void initializeWidgetPlacement(WidgetPlacement aPlacement) {
Context context = getContext();
aPlacement.width = WidgetPlacement.dpDimension(context, R.dimen.top_bar_width);
aPlacement.height = WidgetPlacement.dpDimension(context, R.dimen.top_bar_height);
aPlacement.worldWidth = WidgetPlacement.floatDimension(getContext(), R.dimen.window_world_width) * aPlacement.width/getWorldWidth();
//aPlacement.translationY = WidgetPlacement.unitFromMeters(context, R.dimen.top_bar_world_y);
aPlacement.anchorX = 0.5f;
aPlacement.anchorY = 0.0f;
aPlacement.parentAnchorX = 0.5f;
aPlacement.parentAnchorY = 1.0f;
aPlacement.opaque = false;
}
@Override
public void releaseWidget() {
SessionStore.get().removeSessionChangeListener(this);
mWidgetManager.removeUpdateListener(this);
super.releaseWidget();
}
public void setBrowserWidget(UIWidget aWidget) {
if (aWidget != null) {
mWidgetPlacement.parentHandle = aWidget.getHandle();
}
mBrowserWidget = aWidget;
}
// SessionStore.SessionChangeListener
@Override
public void onNewSession(GeckoSession aSession, int aId) {
}
@Override
public void onRemoveSession(GeckoSession aSession, int aId) {
}
@Override
public void onCurrentSessionChange(GeckoSession aSession, int aId) {
handleSessionState();
}
@Override
public void setVisible(boolean isVisible) {
getPlacement().visible = isVisible;
if (isVisible)
mWidgetManager.addWidget(this);
else
mWidgetManager.removeWidget(this);
}
private void handleSessionState() {
boolean isPrivateMode = SessionStore.get().isCurrentSessionPrivate();
setVisible(isPrivateMode);
mCloseButton.setPrivateMode(isPrivateMode);
}
// WidgetManagerDelegate.UpdateListener
@Override
public void onWidgetUpdate(Widget aWidget) {
if (aWidget == mBrowserWidget && isVisible()) {
mWidgetManager.updateWidget(this);
}
}
}