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

Commit

Permalink
Fixes #3812 Fixes #3813 Add-ons tabs life cycle fixes (#3821)
Browse files Browse the repository at this point in the history
* Addons tabs fixes

* Addons List refresh fixes

* Handle Addon tabs state updates
  • Loading branch information
keianhzo authored Aug 18, 2020
1 parent b7a36be commit 3afa6fa
Show file tree
Hide file tree
Showing 7 changed files with 117 additions and 72 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -49,12 +49,11 @@ public AddonOptionsDetailsView(@NonNull Context context, @NonNull AddonOptionsDe
mContext = context;
mBinding = binding;
mWidgetManager = ((VRBrowserActivity)context);
}

public void bind(Addon addon) {
mBinding.setLifecycleOwner((VRBrowserActivity) mContext);
mBinding.executePendingBindings();
}

public void bind(Addon addon) {
// Update addon
if (addon != null) {
// If the addon is not installed we set the homepage link
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,18 +28,15 @@ public class AddonOptionsPermissionsView extends RecyclerView.ViewHolder {
private AddonsOptionsPermissionsViewAdapter mAdapter;
private WidgetManagerDelegate mWidgetManager;

@SuppressLint("ClickableViewAccessibility")
public AddonOptionsPermissionsView(@NonNull Context context, @NonNull AddonOptionsPermissionsBinding binding) {
super(binding.getRoot());

mContext = context;
mBinding = binding;
mWidgetManager = ((VRBrowserActivity)context);
}

@SuppressLint("ClickableViewAccessibility")
public void bind(Addon addon) {
mBinding.setLifecycleOwner((VRBrowserActivity) mContext);
mBinding.setAddon(addon);
mAdapter = new AddonsOptionsPermissionsViewAdapter();
mBinding.permissionsList.setAdapter(mAdapter);
mBinding.permissionsList.setOnTouchListener((v, event) -> {
Expand All @@ -51,7 +48,10 @@ public void bind(Addon addon) {
mBinding.permissionsList.setItemViewCacheSize(20);
mBinding.permissionsList.setDrawingCacheEnabled(true);
mBinding.permissionsList.setDrawingCacheQuality(View.DRAWING_CACHE_QUALITY_HIGH);
mBinding.executePendingBindings();
}

public void bind(Addon addon) {
mBinding.setAddon(addon);

// Update permissions list
if (addon != null) {
Expand All @@ -66,6 +66,8 @@ public void bind(Addon addon) {
.sorted()
.collect(Collectors.toList()));
}

mBinding.executePendingBindings();
}

protected RecyclerView.OnScrollListener mScrollListener = new RecyclerView.OnScrollListener() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,13 +38,13 @@ public AddonOptionsView(@NonNull Context context, @NonNull AddonOptionsBinding b
mBinding = binding;
mDelegate = delegate;
mWidgetManager = ((VRBrowserActivity)context);

mBinding.setLifecycleOwner((VRBrowserActivity) mContext);
mBinding.setDelegate(this);
}

public void bind(Addon addon) {
mBinding.setLifecycleOwner((VRBrowserActivity) mContext);
mBinding.setAddon(addon);
mBinding.setDelegate(this);
mBinding.executePendingBindings();

// Update addon bindings
if (addon != null) {
Expand All @@ -64,13 +64,17 @@ public void bind(Addon addon) {
addon.getInstalledState() != null &&
addon.getInstalledState().getOptionsPageUrl() != null);
}

mBinding.executePendingBindings();
}

private void setAddonEnabled(@NonNull Addon addon, boolean isEnabled) {
if (isEnabled) {
mWidgetManager.getServicesProvider().getAddons().getAddonManager().enableAddon(addon, EnableSource.USER, addon1 -> {
mBinding.setAddon(addon1);
mBinding.addonPrivateMode.setVisibility(View.VISIBLE);
mBinding.addonSettings.setVisibility(View.VISIBLE);
mBinding.addonSettings.setEnabled(true);
return null;

}, throwable -> {
Expand All @@ -80,8 +84,10 @@ private void setAddonEnabled(@NonNull Addon addon, boolean isEnabled) {

} else {
mWidgetManager.getServicesProvider().getAddons().getAddonManager().disableAddon(addon, EnableSource.USER, addon1 -> {
mBinding.setAddon(addon1);
mBinding.addonPrivateMode.setVisibility(View.GONE);
mBinding.addonSettings.setVisibility(View.GONE);
mBinding.addonSettings.setEnabled(false);
return null;

}, throwable -> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ public class AddonsListView extends RecyclerView.ViewHolder implements AddonsMan
private AddonsDelegate mDelegate;
private WidgetManagerDelegate mWidgetManager;

@SuppressLint("ClickableViewAccessibility")
public AddonsListView(@NonNull Context context, @NonNull AddonsListBinding binding, @NonNull AddonsDelegate delegate) {
super(binding.getRoot());

Expand All @@ -65,10 +66,7 @@ public AddonsListView(@NonNull Context context, @NonNull AddonsListBinding bindi
);
mBinding = binding;
mUIThreadExecutor = ((VRBrowserActivity) mContext).getServicesProvider().getExecutors().mainThread();
}

@SuppressLint("ClickableViewAccessibility")
public void bind() {
mBinding.setLifecycleOwner((VRBrowserActivity) mContext);
mBinding.setViewModel(mViewModel);
mBinding.addonsList.setAdapter(mAdapter);
Expand All @@ -83,15 +81,28 @@ public void bind() {
mBinding.addonsList.setDrawingCacheQuality(View.DRAWING_CACHE_QUALITY_HIGH);

mViewModel.setIsLoading(true);
}

mBinding.executePendingBindings();
public void bind() {
((VRBrowserActivity) mContext).getServicesProvider().getAddons().getAddons(true).thenApplyAsync(addons -> {
if (addons == null || addons.size() == 0) {
mViewModel.setIsEmpty(true);
mViewModel.setIsLoading(false);

} else {
mViewModel.setIsEmpty(false);
mViewModel.setIsLoading(false);
mAdapter.updateAddons(addons);
mBinding.getRoot().post(() -> mBinding.addonsList.scrollToPosition(0));
}

mBinding.addonsList.setOnTouchListener((v, event) -> {
v.requestFocusFromTouch();
return false;
mBinding.executePendingBindings();
return null;

}, mUIThreadExecutor).exceptionally(throwable -> {
Log.d(LOGTAG, String.valueOf(throwable.getMessage()));
return null;
});

updateAddons();
}

protected RecyclerView.OnScrollListener mScrollListener = new RecyclerView.OnScrollListener() {
Expand Down Expand Up @@ -120,32 +131,6 @@ private AddonsManagerAdapter.Style createAddonStyle(@NonNull Context context) {
);
}

private void updateAddons() {
((VRBrowserActivity) mContext).getServicesProvider().getAddons().getAddons(true).thenApplyAsync(addons -> {
showAddons(addons);
return null;
}, mUIThreadExecutor).exceptionally(throwable -> {
Log.d(LOGTAG, String.valueOf(throwable.getMessage()));
return null;
});
}

private void showAddons(List<Addon> addonItems) {
if (addonItems == null || addonItems.size() == 0) {
mViewModel.setIsEmpty(true);
mViewModel.setIsLoading(false);

} else {
mViewModel.setIsEmpty(false);
mViewModel.setIsLoading(false);
mAdapter.updateAddons(addonItems);
mAdapter.notifyDataSetChanged();
mBinding.addonsList.smoothScrollToPosition(0);
}

mBinding.executePendingBindings();
}

// AddonsViewDelegate

@Override
Expand Down Expand Up @@ -189,7 +174,8 @@ private void showInstallAddonDialog(final @NonNull Addon addon) {
mWidgetManager.getServicesProvider().getExecutors().mainThread().execute(() -> {
CancellableOperation installTask = mWidgetManager.getServicesProvider().getAddons().getAddonManager().installAddon(addon, addon1 -> {
showDownloadingAddonSuccessDialog(addon1);
updateAddons();
mAdapter.updateAddon(addon1);
mBinding.getRoot().post(() -> mBinding.addonsList.smoothScrollToPosition(0));
return null;

}, (s, throwable) -> {
Expand Down Expand Up @@ -232,17 +218,20 @@ private void showDownloadingAddonSuccessDialog(final @NonNull Addon addon) {
})
.withCheckboxText(mContext.getString(R.string.addons_download_success_dialog_checkbox))
.withCallback((index, isChecked) -> {
mWidgetManager.getServicesProvider().getAddons().getAddonManager().setAddonAllowedInPrivateBrowsing(
addon,
isChecked,
addon1 -> {
mAdapter.updateAddon(addon1);
return null;
if (isChecked) {
mWidgetManager.getServicesProvider().getAddons().getAddonManager().setAddonAllowedInPrivateBrowsing(
addon,
true,
addon1 -> {
mAdapter.updateAddon(addon1);
mBinding.getRoot().post(() -> mBinding.addonsList.smoothScrollToPosition(0));
return null;
},
throwable -> {
Log.d(LOGTAG, String.valueOf(throwable.getMessage()));
return null;
});
throwable -> {
Log.d(LOGTAG, String.valueOf(throwable.getMessage()));
return null;
});
}
})
.build();
mWidgetManager.getFocusedWindow().showConfirmPrompt(data);
Expand Down
8 changes: 6 additions & 2 deletions app/src/common/shared/org/mozilla/vrbrowser/browser/Addons.kt
Original file line number Diff line number Diff line change
Expand Up @@ -92,12 +92,16 @@ class Addons(val context: Context, private val sessionStore: SessionStore) {
onCloseTabOverride = {
_, sessionId ->
val session: Session? = sessionStore.getSession(sessionId)
delegate.windows.onTabsClose(listOf(session))
if (session != null) {
delegate.windows.closeTab(session)
}
},
onSelectTabOverride = {
_, sessionId ->
val session: Session? = sessionStore.getSession(sessionId)
delegate.windows.onTabSelect(session)
if (session != null) {
delegate.windows.selectTab(session)
}
},
onExtensionsLoaded = { extensions ->
addonUpdater.registerForFutureUpdates(extensions)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1036,7 +1036,15 @@ public void setSession(@NonNull Session aSession, @SetSessionActiveState int pre
setSession(aSession, SESSION_RELEASE_DISPLAY, previousSessionState);
}

public void setSession(@NonNull Session aSession, @SetSessionActiveState int previousSessionState, boolean hidePanel) {
setSession(aSession, SESSION_RELEASE_DISPLAY, previousSessionState, hidePanel);
}

public void setSession(@NonNull Session aSession, @OldSessionDisplayAction int aDisplayAction, @SetSessionActiveState int previousSessionState) {
setSession(aSession, SESSION_RELEASE_DISPLAY, previousSessionState, true);
}

public void setSession(@NonNull Session aSession, @OldSessionDisplayAction int aDisplayAction, @SetSessionActiveState int previousSessionState, boolean hidePanel) {
if (mSession != aSession) {
Session oldSession = mSession;
if (oldSession != null) {
Expand All @@ -1056,17 +1064,23 @@ public void setSession(@NonNull Session aSession, @OldSessionDisplayAction int a

mViewModel.setIsPrivateSession(mSession.isPrivateMode());

if (oldSession != null) {
onCurrentSessionChange(oldSession.getGeckoSession(), aSession.getGeckoSession());
} else {
onCurrentSessionChange(null, aSession.getGeckoSession());
if (hidePanel) {
if (oldSession != null) {
onCurrentSessionChange(oldSession.getGeckoSession(), aSession.getGeckoSession());
} else {
onCurrentSessionChange(null, aSession.getGeckoSession());
}
}

for (WindowListener listener: mListeners) {
listener.onSessionChanged(oldSession, aSession);
}
}
mCaptureOnPageStop = false;
hideLibraryPanel();

if (hidePanel) {
hideLibraryPanel();
}
}

public void setDrmUsed(boolean isEnabled) {
Expand Down
Loading

0 comments on commit 3afa6fa

Please sign in to comment.