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

Commit f110e2a

Browse files
authored
Fixes #2782 Migrate tray and library panels to viewmodel (#2742)
* Tray ViewModel * History and Bookmarks migration * Resize library tray icons when closing the library panels
1 parent 8f2ba51 commit f110e2a

16 files changed

+399
-261
lines changed

app/src/common/shared/org/mozilla/vrbrowser/VRBrowserActivity.java

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1374,13 +1374,6 @@ public void popWorldBrightness(Object aKey) {
13741374
}
13751375
}
13761376

1377-
@Override
1378-
public void setTrayVisible(boolean visible) {
1379-
if (mTray != null && !mTray.isReleased()) {
1380-
mTray.setTrayVisible(visible);
1381-
}
1382-
}
1383-
13841377
@Override
13851378
public void setControllersVisible(final boolean aVisible) {
13861379
queueRunnable(() -> setControllersVisibleNative(aVisible));

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

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,31 @@ public static void setPrivateMode(@NonNull UITextButton button, boolean isPrivat
165165
button.setPrivateMode(isPrivateMode);
166166
}
167167

168+
@BindingAdapter("activeMode")
169+
public static void setActiveMode(@NonNull UIButton button, boolean isActiveMode) {
170+
button.setActiveMode(isActiveMode);
171+
}
172+
173+
@BindingAdapter("notificationMode")
174+
public static void setNotificationMode(@NonNull UIButton button, boolean isNotificationMode) {
175+
button.setNotificationMode(isNotificationMode);
176+
}
177+
178+
@BindingAdapter("regularModeBackground")
179+
public static void setRegularModeBackground(@NonNull UIButton button, @NonNull Drawable drawable) {
180+
button.setRegularModeBackground(drawable);
181+
}
182+
183+
@BindingAdapter("privateModeBackground")
184+
public static void setPrivateModeBackground(@NonNull UIButton button, @NonNull Drawable drawable) {
185+
button.setPrivateModeBackground(drawable);
186+
}
187+
188+
@BindingAdapter("activeModeBackground")
189+
public static void setActiveModeBackground(@NonNull UIButton button, @NonNull Drawable drawable) {
190+
button.setActiveModeBackground(drawable);
191+
}
192+
168193
@BindingAdapter("android:tooltipText")
169194
public static void setTooltipText(@NonNull UIButton button, @Nullable String text){
170195
button.setTooltipText(text);
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package org.mozilla.vrbrowser.ui.viewmodel;
2+
3+
import android.app.Application;
4+
5+
import androidx.annotation.NonNull;
6+
import androidx.databinding.ObservableBoolean;
7+
import androidx.lifecycle.AndroidViewModel;
8+
import androidx.lifecycle.MutableLiveData;
9+
10+
public class BookmarksViewModel extends AndroidViewModel {
11+
12+
private MutableLiveData<ObservableBoolean> isLoading;
13+
private MutableLiveData<ObservableBoolean> isEmpty;
14+
private MutableLiveData<ObservableBoolean> isNarrow;
15+
16+
public BookmarksViewModel(@NonNull Application application) {
17+
super(application);
18+
19+
isLoading = new MutableLiveData<>(new ObservableBoolean(false));
20+
isEmpty = new MutableLiveData<>(new ObservableBoolean(false));
21+
isNarrow = new MutableLiveData<>(new ObservableBoolean(false));
22+
}
23+
24+
public MutableLiveData<ObservableBoolean> getIsLoading() {
25+
return isLoading;
26+
}
27+
28+
public void setIsLoading(boolean isLoading) {
29+
this.isLoading.setValue(new ObservableBoolean(isLoading));
30+
}
31+
32+
public MutableLiveData<ObservableBoolean> getIsEmpty() {
33+
return isEmpty;
34+
}
35+
36+
public void setIsEmpty(boolean isEmpty) {
37+
this.isEmpty.setValue(new ObservableBoolean(isEmpty));
38+
}
39+
40+
public MutableLiveData<ObservableBoolean> getIsNarrow() {
41+
return isNarrow;
42+
}
43+
44+
public void setIsNarrow(boolean isNarrow) {
45+
this.isNarrow.setValue(new ObservableBoolean(isNarrow));
46+
}
47+
}
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package org.mozilla.vrbrowser.ui.viewmodel;
2+
3+
import android.app.Application;
4+
5+
import androidx.annotation.NonNull;
6+
import androidx.databinding.ObservableBoolean;
7+
import androidx.lifecycle.AndroidViewModel;
8+
import androidx.lifecycle.MutableLiveData;
9+
10+
public class HistoryViewModel extends AndroidViewModel {
11+
12+
private MutableLiveData<ObservableBoolean> isLoading;
13+
private MutableLiveData<ObservableBoolean> isEmpty;
14+
private MutableLiveData<ObservableBoolean> isNarrow;
15+
16+
public HistoryViewModel(@NonNull Application application) {
17+
super(application);
18+
19+
isLoading = new MutableLiveData<>(new ObservableBoolean(false));
20+
isEmpty = new MutableLiveData<>(new ObservableBoolean(false));
21+
isNarrow = new MutableLiveData<>(new ObservableBoolean(false));
22+
}
23+
24+
public MutableLiveData<ObservableBoolean> getIsLoading() {
25+
return isLoading;
26+
}
27+
28+
public void setIsLoading(boolean isLoading) {
29+
this.isLoading.setValue(new ObservableBoolean(isLoading));
30+
}
31+
32+
public MutableLiveData<ObservableBoolean> getIsEmpty() {
33+
return isEmpty;
34+
}
35+
36+
public void setIsEmpty(boolean isEmpty) {
37+
this.isEmpty.setValue(new ObservableBoolean(isEmpty));
38+
}
39+
40+
public MutableLiveData<ObservableBoolean> getIsNarrow() {
41+
return isNarrow;
42+
}
43+
44+
public void setIsNarrow(boolean isNarrow) {
45+
this.isNarrow.setValue(new ObservableBoolean(isNarrow));
46+
}
47+
}
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
package org.mozilla.vrbrowser.ui.viewmodel;
2+
3+
import android.app.Application;
4+
5+
import androidx.annotation.NonNull;
6+
import androidx.databinding.ObservableBoolean;
7+
import androidx.lifecycle.AndroidViewModel;
8+
import androidx.lifecycle.MediatorLiveData;
9+
import androidx.lifecycle.MutableLiveData;
10+
import androidx.lifecycle.Observer;
11+
12+
public class TrayViewModel extends AndroidViewModel {
13+
14+
private MutableLiveData<ObservableBoolean> isMaxWindows;
15+
private MutableLiveData<ObservableBoolean> shouldBeVisible;
16+
private MutableLiveData<ObservableBoolean> isKeyboardVisible;
17+
private MediatorLiveData<ObservableBoolean> isVisible;
18+
19+
public TrayViewModel(@NonNull Application application) {
20+
super(application);
21+
22+
isMaxWindows = new MutableLiveData<>(new ObservableBoolean(true));
23+
shouldBeVisible = new MutableLiveData<>(new ObservableBoolean(true));
24+
isKeyboardVisible = new MutableLiveData<>(new ObservableBoolean(false));
25+
isVisible = new MediatorLiveData<>();
26+
isVisible.addSource(shouldBeVisible, mIsVisibleObserver);
27+
isVisible.addSource(isKeyboardVisible, mIsVisibleObserver);
28+
isVisible.setValue(new ObservableBoolean(false));
29+
}
30+
31+
Observer<ObservableBoolean> mIsVisibleObserver = new Observer<ObservableBoolean>() {
32+
@Override
33+
public void onChanged(ObservableBoolean observableBoolean) {
34+
boolean shouldShow = shouldBeVisible.getValue().get() && !isKeyboardVisible.getValue().get();
35+
if (shouldShow != isVisible.getValue().get()) {
36+
isVisible.setValue(new ObservableBoolean(shouldShow));
37+
}
38+
}
39+
};
40+
41+
public void refresh() {
42+
isMaxWindows.setValue(isMaxWindows.getValue());
43+
shouldBeVisible.setValue(shouldBeVisible.getValue());
44+
isKeyboardVisible.setValue(isKeyboardVisible.getValue());
45+
}
46+
47+
public void setIsMaxWindows(boolean isMaxWindows) {
48+
this.isMaxWindows.setValue(new ObservableBoolean(isMaxWindows));
49+
}
50+
51+
public MutableLiveData<ObservableBoolean> getIsMaxWindows() {
52+
return isMaxWindows;
53+
}
54+
55+
56+
public void setShouldBeVisible(boolean shouldBeVisible) {
57+
this.shouldBeVisible.setValue(new ObservableBoolean(shouldBeVisible));
58+
}
59+
60+
public void setIsKeyboardVisible(boolean isVisible) {
61+
this.isKeyboardVisible.setValue(new ObservableBoolean(isVisible));
62+
}
63+
64+
public void setIsVisible(boolean isVisible) {
65+
this.isVisible.setValue(new ObservableBoolean(isVisible));
66+
}
67+
68+
public MutableLiveData<ObservableBoolean> getIsVisible() {
69+
return isVisible;
70+
}
71+
72+
}

app/src/common/shared/org/mozilla/vrbrowser/ui/viewmodel/WindowViewModel.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -489,7 +489,7 @@ public void setIsActiveWindow(boolean isActiveWindow) {
489489
}
490490

491491
@NonNull
492-
public MutableLiveData<ObservableBoolean> getIsBookmraksVisible() {
492+
public MutableLiveData<ObservableBoolean> getIsBookmarksVisible() {
493493
return isBookmarksVisible;
494494
}
495495

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

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import androidx.annotation.NonNull;
1717
import androidx.annotation.Nullable;
1818
import androidx.databinding.DataBindingUtil;
19+
import androidx.lifecycle.ViewModelProvider;
1920
import androidx.recyclerview.widget.LinearLayoutManager;
2021
import androidx.recyclerview.widget.RecyclerView;
2122

@@ -35,6 +36,7 @@
3536
import org.mozilla.vrbrowser.ui.adapters.CustomLinearLayoutManager;
3637
import org.mozilla.vrbrowser.ui.callbacks.BookmarkItemCallback;
3738
import org.mozilla.vrbrowser.ui.callbacks.BookmarksCallback;
39+
import org.mozilla.vrbrowser.ui.viewmodel.BookmarksViewModel;
3840
import org.mozilla.vrbrowser.ui.widgets.WidgetManagerDelegate;
3941
import org.mozilla.vrbrowser.utils.SystemUtils;
4042

@@ -59,6 +61,7 @@ public class BookmarksView extends FrameLayout implements BookmarksStore.Bookmar
5961

6062
private static final boolean ACCOUNTS_UI_ENABLED = false;
6163

64+
private BookmarksViewModel mViewModel;
6265
private BookmarksBinding mBinding;
6366
private Accounts mAccounts;
6467
private BookmarkAdapter mBookmarkAdapter;
@@ -82,6 +85,11 @@ public BookmarksView(Context aContext, AttributeSet aAttrs, int aDefStyle) {
8285
}
8386

8487
private void initialize(Context aContext) {
88+
mViewModel = new ViewModelProvider(
89+
(VRBrowserActivity)getContext(),
90+
ViewModelProvider.AndroidViewModelFactory.getInstance(((VRBrowserActivity) getContext()).getApplication()))
91+
.get(BookmarksViewModel.class);
92+
8593
mUIThreadExecutor = ((VRBrowserApplication)getContext().getApplicationContext()).getExecutors().mainThread();
8694

8795
mBookmarksViewListeners = new ArrayList<>();
@@ -121,7 +129,7 @@ public void updateUI() {
121129

122130
mLayoutManager = (CustomLinearLayoutManager) mBinding.bookmarksList.getLayoutManager();
123131

124-
mBinding.setIsLoading(true);
132+
mViewModel.setIsLoading(true);
125133

126134
mBinding.setIsSignedIn(mAccounts.isSignedIn());
127135
boolean isSyncEnabled = mAccounts.isEngineEnabled(SyncEngine.Bookmarks.INSTANCE);
@@ -130,7 +138,7 @@ public void updateUI() {
130138
mBinding.setLastSync(mAccounts.lastSync());
131139
mBinding.setIsSyncing(mAccounts.isSyncing());
132140
}
133-
mBinding.setIsNarrow(false);
141+
mViewModel.setIsNarrow(false);
134142
mBinding.setIsAccountsUIEnabled(ACCOUNTS_UI_ENABLED);
135143
mBinding.executePendingBindings();
136144

@@ -346,12 +354,12 @@ private void updateBookmarks() {
346354

347355
private void showBookmarks(List<BookmarkNode> aBookmarks) {
348356
if (aBookmarks == null || aBookmarks.size() == 0) {
349-
mBinding.setIsEmpty(true);
350-
mBinding.setIsLoading(false);
357+
mViewModel.setIsEmpty(true);
358+
mViewModel.setIsLoading(false);
351359

352360
} else {
353-
mBinding.setIsEmpty(false);
354-
mBinding.setIsLoading(false);
361+
mViewModel.setIsEmpty(false);
362+
mViewModel.setIsLoading(false);
355363
mBookmarkAdapter.setBookmarkList(aBookmarks);
356364
}
357365
}
@@ -368,13 +376,13 @@ private void updateLayout() {
368376
double width = Math.ceil(getWidth()/getContext().getResources().getDisplayMetrics().density);
369377
boolean isNarrow = width < SettingsStore.WINDOW_WIDTH_DEFAULT;
370378

371-
if (isNarrow != mBinding.getIsNarrow()) {
379+
if (isNarrow != mViewModel.getIsNarrow().getValue().get()) {
372380
mBookmarkAdapter.setNarrow(isNarrow);
373381

374-
mBinding.setIsNarrow(isNarrow);
382+
mViewModel.setIsNarrow(isNarrow);
375383
mBinding.executePendingBindings();
376384

377-
mBinding.setIsNarrow(isNarrow);
385+
mViewModel.setIsNarrow(isNarrow);
378386
mBinding.executePendingBindings();
379387

380388
requestLayout();

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

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import androidx.annotation.NonNull;
1717
import androidx.annotation.Nullable;
1818
import androidx.databinding.DataBindingUtil;
19+
import androidx.lifecycle.ViewModelProvider;
1920
import androidx.recyclerview.widget.LinearLayoutManager;
2021
import androidx.recyclerview.widget.RecyclerView;
2122
import androidx.recyclerview.widget.RecyclerView.OnScrollListener;
@@ -34,6 +35,7 @@
3435
import org.mozilla.vrbrowser.ui.adapters.HistoryAdapter;
3536
import org.mozilla.vrbrowser.ui.callbacks.HistoryCallback;
3637
import org.mozilla.vrbrowser.ui.callbacks.HistoryItemCallback;
38+
import org.mozilla.vrbrowser.ui.viewmodel.HistoryViewModel;
3739
import org.mozilla.vrbrowser.ui.widgets.WidgetManagerDelegate;
3840
import org.mozilla.vrbrowser.utils.SystemUtils;
3941

@@ -66,6 +68,7 @@ public class HistoryView extends FrameLayout implements HistoryStore.HistoryList
6668

6769
private static final boolean ACCOUNTS_UI_ENABLED = false;
6870

71+
private HistoryViewModel mViewModel;
6972
private HistoryBinding mBinding;
7073
private Accounts mAccounts;
7174
private HistoryAdapter mHistoryAdapter;
@@ -88,6 +91,11 @@ public HistoryView(Context aContext, AttributeSet aAttrs, int aDefStyle) {
8891
}
8992

9093
private void initialize(Context aContext) {
94+
mViewModel = new ViewModelProvider(
95+
(VRBrowserActivity)getContext(),
96+
ViewModelProvider.AndroidViewModelFactory.getInstance(((VRBrowserActivity) getContext()).getApplication()))
97+
.get(HistoryViewModel.class);
98+
9199
mUIThreadExecutor = ((VRBrowserApplication)getContext().getApplicationContext()).getExecutors().mainThread();
92100

93101
mHistoryViewListeners = new ArrayList<>();
@@ -124,7 +132,7 @@ public void updateUI() {
124132
mBinding.historyList.setDrawingCacheEnabled(true);
125133
mBinding.historyList.setDrawingCacheQuality(View.DRAWING_CACHE_QUALITY_HIGH);
126134

127-
mBinding.setIsLoading(true);
135+
mViewModel.setIsLoading(true);
128136

129137
mBinding.setIsSignedIn(mAccounts.isSignedIn());
130138
boolean isSyncEnabled = mAccounts.isEngineEnabled(SyncEngine.History.INSTANCE);
@@ -133,7 +141,7 @@ public void updateUI() {
133141
mBinding.setLastSync(mAccounts.lastSync());
134142
mBinding.setIsSyncing(mAccounts.isSyncing());
135143
}
136-
mBinding.setIsNarrow(false);
144+
mViewModel.setIsNarrow(false);
137145
mBinding.setIsAccountsUIEnabled(ACCOUNTS_UI_ENABLED);
138146
mBinding.executePendingBindings();
139147

@@ -388,12 +396,12 @@ private void addSection(final @NonNull List<VisitInfo> items, @NonNull String se
388396

389397
private void showHistory(List<VisitInfo> historyItems) {
390398
if (historyItems == null || historyItems.size() == 0) {
391-
mBinding.setIsEmpty(true);
392-
mBinding.setIsLoading(false);
399+
mViewModel.setIsEmpty(true);
400+
mViewModel.setIsLoading(false);
393401

394402
} else {
395-
mBinding.setIsEmpty(false);
396-
mBinding.setIsLoading(false);
403+
mViewModel.setIsEmpty(false);
404+
mViewModel.setIsLoading(false);
397405
mHistoryAdapter.setHistoryList(historyItems);
398406
}
399407
}
@@ -410,13 +418,13 @@ private void updateLayout() {
410418
double width = Math.ceil(getWidth()/getContext().getResources().getDisplayMetrics().density);
411419
boolean isNarrow = width < SettingsStore.WINDOW_WIDTH_DEFAULT;
412420

413-
if (isNarrow != mBinding.getIsNarrow()) {
421+
if (isNarrow != mViewModel.getIsNarrow().getValue().get()) {
414422
mHistoryAdapter.setNarrow(isNarrow);
415423

416-
mBinding.setIsNarrow(isNarrow);
424+
mViewModel.setIsNarrow(isNarrow);
417425
mBinding.executePendingBindings();
418426

419-
mBinding.setIsNarrow(isNarrow);
427+
mViewModel.setIsNarrow(isNarrow);
420428
mBinding.executePendingBindings();
421429

422430
requestLayout();

0 commit comments

Comments
 (0)