Skip to content

Commit

Permalink
Fixes #2782 Migrate tray and library panels to viewmodel (#2742)
Browse files Browse the repository at this point in the history
* Tray ViewModel

* History and Bookmarks migration

* Resize library tray icons when closing the library panels
  • Loading branch information
keianhzo committed Mar 17, 2020
1 parent 8f2ba51 commit f110e2a
Show file tree
Hide file tree
Showing 16 changed files with 399 additions and 261 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -1374,13 +1374,6 @@ public void popWorldBrightness(Object aKey) {
}
}

@Override
public void setTrayVisible(boolean visible) {
if (mTray != null && !mTray.isReleased()) {
mTray.setTrayVisible(visible);
}
}

@Override
public void setControllersVisible(final boolean aVisible) {
queueRunnable(() -> setControllersVisibleNative(aVisible));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -165,6 +165,31 @@ public static void setPrivateMode(@NonNull UITextButton button, boolean isPrivat
button.setPrivateMode(isPrivateMode);
}

@BindingAdapter("activeMode")
public static void setActiveMode(@NonNull UIButton button, boolean isActiveMode) {
button.setActiveMode(isActiveMode);
}

@BindingAdapter("notificationMode")
public static void setNotificationMode(@NonNull UIButton button, boolean isNotificationMode) {
button.setNotificationMode(isNotificationMode);
}

@BindingAdapter("regularModeBackground")
public static void setRegularModeBackground(@NonNull UIButton button, @NonNull Drawable drawable) {
button.setRegularModeBackground(drawable);
}

@BindingAdapter("privateModeBackground")
public static void setPrivateModeBackground(@NonNull UIButton button, @NonNull Drawable drawable) {
button.setPrivateModeBackground(drawable);
}

@BindingAdapter("activeModeBackground")
public static void setActiveModeBackground(@NonNull UIButton button, @NonNull Drawable drawable) {
button.setActiveModeBackground(drawable);
}

@BindingAdapter("android:tooltipText")
public static void setTooltipText(@NonNull UIButton button, @Nullable String text){
button.setTooltipText(text);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
package org.mozilla.vrbrowser.ui.viewmodel;

import android.app.Application;

import androidx.annotation.NonNull;
import androidx.databinding.ObservableBoolean;
import androidx.lifecycle.AndroidViewModel;
import androidx.lifecycle.MutableLiveData;

public class BookmarksViewModel extends AndroidViewModel {

private MutableLiveData<ObservableBoolean> isLoading;
private MutableLiveData<ObservableBoolean> isEmpty;
private MutableLiveData<ObservableBoolean> isNarrow;

public BookmarksViewModel(@NonNull Application application) {
super(application);

isLoading = new MutableLiveData<>(new ObservableBoolean(false));
isEmpty = new MutableLiveData<>(new ObservableBoolean(false));
isNarrow = new MutableLiveData<>(new ObservableBoolean(false));
}

public MutableLiveData<ObservableBoolean> getIsLoading() {
return isLoading;
}

public void setIsLoading(boolean isLoading) {
this.isLoading.setValue(new ObservableBoolean(isLoading));
}

public MutableLiveData<ObservableBoolean> getIsEmpty() {
return isEmpty;
}

public void setIsEmpty(boolean isEmpty) {
this.isEmpty.setValue(new ObservableBoolean(isEmpty));
}

public MutableLiveData<ObservableBoolean> getIsNarrow() {
return isNarrow;
}

public void setIsNarrow(boolean isNarrow) {
this.isNarrow.setValue(new ObservableBoolean(isNarrow));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
package org.mozilla.vrbrowser.ui.viewmodel;

import android.app.Application;

import androidx.annotation.NonNull;
import androidx.databinding.ObservableBoolean;
import androidx.lifecycle.AndroidViewModel;
import androidx.lifecycle.MutableLiveData;

public class HistoryViewModel extends AndroidViewModel {

private MutableLiveData<ObservableBoolean> isLoading;
private MutableLiveData<ObservableBoolean> isEmpty;
private MutableLiveData<ObservableBoolean> isNarrow;

public HistoryViewModel(@NonNull Application application) {
super(application);

isLoading = new MutableLiveData<>(new ObservableBoolean(false));
isEmpty = new MutableLiveData<>(new ObservableBoolean(false));
isNarrow = new MutableLiveData<>(new ObservableBoolean(false));
}

public MutableLiveData<ObservableBoolean> getIsLoading() {
return isLoading;
}

public void setIsLoading(boolean isLoading) {
this.isLoading.setValue(new ObservableBoolean(isLoading));
}

public MutableLiveData<ObservableBoolean> getIsEmpty() {
return isEmpty;
}

public void setIsEmpty(boolean isEmpty) {
this.isEmpty.setValue(new ObservableBoolean(isEmpty));
}

public MutableLiveData<ObservableBoolean> getIsNarrow() {
return isNarrow;
}

public void setIsNarrow(boolean isNarrow) {
this.isNarrow.setValue(new ObservableBoolean(isNarrow));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
package org.mozilla.vrbrowser.ui.viewmodel;

import android.app.Application;

import androidx.annotation.NonNull;
import androidx.databinding.ObservableBoolean;
import androidx.lifecycle.AndroidViewModel;
import androidx.lifecycle.MediatorLiveData;
import androidx.lifecycle.MutableLiveData;
import androidx.lifecycle.Observer;

public class TrayViewModel extends AndroidViewModel {

private MutableLiveData<ObservableBoolean> isMaxWindows;
private MutableLiveData<ObservableBoolean> shouldBeVisible;
private MutableLiveData<ObservableBoolean> isKeyboardVisible;
private MediatorLiveData<ObservableBoolean> isVisible;

public TrayViewModel(@NonNull Application application) {
super(application);

isMaxWindows = new MutableLiveData<>(new ObservableBoolean(true));
shouldBeVisible = new MutableLiveData<>(new ObservableBoolean(true));
isKeyboardVisible = new MutableLiveData<>(new ObservableBoolean(false));
isVisible = new MediatorLiveData<>();
isVisible.addSource(shouldBeVisible, mIsVisibleObserver);
isVisible.addSource(isKeyboardVisible, mIsVisibleObserver);
isVisible.setValue(new ObservableBoolean(false));
}

Observer<ObservableBoolean> mIsVisibleObserver = new Observer<ObservableBoolean>() {
@Override
public void onChanged(ObservableBoolean observableBoolean) {
boolean shouldShow = shouldBeVisible.getValue().get() && !isKeyboardVisible.getValue().get();
if (shouldShow != isVisible.getValue().get()) {
isVisible.setValue(new ObservableBoolean(shouldShow));
}
}
};

public void refresh() {
isMaxWindows.setValue(isMaxWindows.getValue());
shouldBeVisible.setValue(shouldBeVisible.getValue());
isKeyboardVisible.setValue(isKeyboardVisible.getValue());
}

public void setIsMaxWindows(boolean isMaxWindows) {
this.isMaxWindows.setValue(new ObservableBoolean(isMaxWindows));
}

public MutableLiveData<ObservableBoolean> getIsMaxWindows() {
return isMaxWindows;
}


public void setShouldBeVisible(boolean shouldBeVisible) {
this.shouldBeVisible.setValue(new ObservableBoolean(shouldBeVisible));
}

public void setIsKeyboardVisible(boolean isVisible) {
this.isKeyboardVisible.setValue(new ObservableBoolean(isVisible));
}

public void setIsVisible(boolean isVisible) {
this.isVisible.setValue(new ObservableBoolean(isVisible));
}

public MutableLiveData<ObservableBoolean> getIsVisible() {
return isVisible;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -489,7 +489,7 @@ public void setIsActiveWindow(boolean isActiveWindow) {
}

@NonNull
public MutableLiveData<ObservableBoolean> getIsBookmraksVisible() {
public MutableLiveData<ObservableBoolean> getIsBookmarksVisible() {
return isBookmarksVisible;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.databinding.DataBindingUtil;
import androidx.lifecycle.ViewModelProvider;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

Expand All @@ -35,6 +36,7 @@
import org.mozilla.vrbrowser.ui.adapters.CustomLinearLayoutManager;
import org.mozilla.vrbrowser.ui.callbacks.BookmarkItemCallback;
import org.mozilla.vrbrowser.ui.callbacks.BookmarksCallback;
import org.mozilla.vrbrowser.ui.viewmodel.BookmarksViewModel;
import org.mozilla.vrbrowser.ui.widgets.WidgetManagerDelegate;
import org.mozilla.vrbrowser.utils.SystemUtils;

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

private static final boolean ACCOUNTS_UI_ENABLED = false;

private BookmarksViewModel mViewModel;
private BookmarksBinding mBinding;
private Accounts mAccounts;
private BookmarkAdapter mBookmarkAdapter;
Expand All @@ -82,6 +85,11 @@ public BookmarksView(Context aContext, AttributeSet aAttrs, int aDefStyle) {
}

private void initialize(Context aContext) {
mViewModel = new ViewModelProvider(
(VRBrowserActivity)getContext(),
ViewModelProvider.AndroidViewModelFactory.getInstance(((VRBrowserActivity) getContext()).getApplication()))
.get(BookmarksViewModel.class);

mUIThreadExecutor = ((VRBrowserApplication)getContext().getApplicationContext()).getExecutors().mainThread();

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

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

mBinding.setIsLoading(true);
mViewModel.setIsLoading(true);

mBinding.setIsSignedIn(mAccounts.isSignedIn());
boolean isSyncEnabled = mAccounts.isEngineEnabled(SyncEngine.Bookmarks.INSTANCE);
Expand All @@ -130,7 +138,7 @@ public void updateUI() {
mBinding.setLastSync(mAccounts.lastSync());
mBinding.setIsSyncing(mAccounts.isSyncing());
}
mBinding.setIsNarrow(false);
mViewModel.setIsNarrow(false);
mBinding.setIsAccountsUIEnabled(ACCOUNTS_UI_ENABLED);
mBinding.executePendingBindings();

Expand Down Expand Up @@ -346,12 +354,12 @@ private void updateBookmarks() {

private void showBookmarks(List<BookmarkNode> aBookmarks) {
if (aBookmarks == null || aBookmarks.size() == 0) {
mBinding.setIsEmpty(true);
mBinding.setIsLoading(false);
mViewModel.setIsEmpty(true);
mViewModel.setIsLoading(false);

} else {
mBinding.setIsEmpty(false);
mBinding.setIsLoading(false);
mViewModel.setIsEmpty(false);
mViewModel.setIsLoading(false);
mBookmarkAdapter.setBookmarkList(aBookmarks);
}
}
Expand All @@ -368,13 +376,13 @@ private void updateLayout() {
double width = Math.ceil(getWidth()/getContext().getResources().getDisplayMetrics().density);
boolean isNarrow = width < SettingsStore.WINDOW_WIDTH_DEFAULT;

if (isNarrow != mBinding.getIsNarrow()) {
if (isNarrow != mViewModel.getIsNarrow().getValue().get()) {
mBookmarkAdapter.setNarrow(isNarrow);

mBinding.setIsNarrow(isNarrow);
mViewModel.setIsNarrow(isNarrow);
mBinding.executePendingBindings();

mBinding.setIsNarrow(isNarrow);
mViewModel.setIsNarrow(isNarrow);
mBinding.executePendingBindings();

requestLayout();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.databinding.DataBindingUtil;
import androidx.lifecycle.ViewModelProvider;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import androidx.recyclerview.widget.RecyclerView.OnScrollListener;
Expand All @@ -34,6 +35,7 @@
import org.mozilla.vrbrowser.ui.adapters.HistoryAdapter;
import org.mozilla.vrbrowser.ui.callbacks.HistoryCallback;
import org.mozilla.vrbrowser.ui.callbacks.HistoryItemCallback;
import org.mozilla.vrbrowser.ui.viewmodel.HistoryViewModel;
import org.mozilla.vrbrowser.ui.widgets.WidgetManagerDelegate;
import org.mozilla.vrbrowser.utils.SystemUtils;

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

private static final boolean ACCOUNTS_UI_ENABLED = false;

private HistoryViewModel mViewModel;
private HistoryBinding mBinding;
private Accounts mAccounts;
private HistoryAdapter mHistoryAdapter;
Expand All @@ -88,6 +91,11 @@ public HistoryView(Context aContext, AttributeSet aAttrs, int aDefStyle) {
}

private void initialize(Context aContext) {
mViewModel = new ViewModelProvider(
(VRBrowserActivity)getContext(),
ViewModelProvider.AndroidViewModelFactory.getInstance(((VRBrowserActivity) getContext()).getApplication()))
.get(HistoryViewModel.class);

mUIThreadExecutor = ((VRBrowserApplication)getContext().getApplicationContext()).getExecutors().mainThread();

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

mBinding.setIsLoading(true);
mViewModel.setIsLoading(true);

mBinding.setIsSignedIn(mAccounts.isSignedIn());
boolean isSyncEnabled = mAccounts.isEngineEnabled(SyncEngine.History.INSTANCE);
Expand All @@ -133,7 +141,7 @@ public void updateUI() {
mBinding.setLastSync(mAccounts.lastSync());
mBinding.setIsSyncing(mAccounts.isSyncing());
}
mBinding.setIsNarrow(false);
mViewModel.setIsNarrow(false);
mBinding.setIsAccountsUIEnabled(ACCOUNTS_UI_ENABLED);
mBinding.executePendingBindings();

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

private void showHistory(List<VisitInfo> historyItems) {
if (historyItems == null || historyItems.size() == 0) {
mBinding.setIsEmpty(true);
mBinding.setIsLoading(false);
mViewModel.setIsEmpty(true);
mViewModel.setIsLoading(false);

} else {
mBinding.setIsEmpty(false);
mBinding.setIsLoading(false);
mViewModel.setIsEmpty(false);
mViewModel.setIsLoading(false);
mHistoryAdapter.setHistoryList(historyItems);
}
}
Expand All @@ -410,13 +418,13 @@ private void updateLayout() {
double width = Math.ceil(getWidth()/getContext().getResources().getDisplayMetrics().density);
boolean isNarrow = width < SettingsStore.WINDOW_WIDTH_DEFAULT;

if (isNarrow != mBinding.getIsNarrow()) {
if (isNarrow != mViewModel.getIsNarrow().getValue().get()) {
mHistoryAdapter.setNarrow(isNarrow);

mBinding.setIsNarrow(isNarrow);
mViewModel.setIsNarrow(isNarrow);
mBinding.executePendingBindings();

mBinding.setIsNarrow(isNarrow);
mViewModel.setIsNarrow(isNarrow);
mBinding.executePendingBindings();

requestLayout();
Expand Down

0 comments on commit f110e2a

Please sign in to comment.