mirror of
https://github.com/TeamNewPipe/NewPipe
synced 2025-08-29 05:37:49 +00:00
Show error panel in EmptyFragment
This commit is contained in:
parent
fe58ec85ed
commit
9697112db6
@ -35,7 +35,7 @@ import java.util.concurrent.TimeUnit
|
|||||||
class ErrorPanelHelper(
|
class ErrorPanelHelper(
|
||||||
private val fragment: Fragment,
|
private val fragment: Fragment,
|
||||||
rootView: View,
|
rootView: View,
|
||||||
onRetry: Runnable
|
onRetry: Runnable?,
|
||||||
) {
|
) {
|
||||||
private val context: Context = rootView.context!!
|
private val context: Context = rootView.context!!
|
||||||
|
|
||||||
@ -56,13 +56,16 @@ class ErrorPanelHelper(
|
|||||||
errorPanelRoot.findViewById(R.id.error_open_in_browser)
|
errorPanelRoot.findViewById(R.id.error_open_in_browser)
|
||||||
|
|
||||||
private var errorDisposable: Disposable? = null
|
private var errorDisposable: Disposable? = null
|
||||||
|
private var retryShouldBeShown: Boolean = (onRetry != null)
|
||||||
|
|
||||||
init {
|
init {
|
||||||
|
if (onRetry != null) {
|
||||||
errorDisposable = errorRetryButton.clicks()
|
errorDisposable = errorRetryButton.clicks()
|
||||||
.debounce(300, TimeUnit.MILLISECONDS)
|
.debounce(300, TimeUnit.MILLISECONDS)
|
||||||
.observeOn(AndroidSchedulers.mainThread())
|
.observeOn(AndroidSchedulers.mainThread())
|
||||||
.subscribe { onRetry.run() }
|
.subscribe { onRetry.run() }
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private fun ensureDefaultVisibility() {
|
private fun ensureDefaultVisibility() {
|
||||||
errorTextView.isVisible = true
|
errorTextView.isVisible = true
|
||||||
@ -101,7 +104,7 @@ class ErrorPanelHelper(
|
|||||||
errorActionButton.setOnClickListener(null)
|
errorActionButton.setOnClickListener(null)
|
||||||
}
|
}
|
||||||
|
|
||||||
errorRetryButton.isVisible = true
|
errorRetryButton.isVisible = retryShouldBeShown
|
||||||
showAndSetOpenInBrowserButtonAction(errorInfo)
|
showAndSetOpenInBrowserButtonAction(errorInfo)
|
||||||
} else if (errorInfo.throwable is AccountTerminatedException) {
|
} else if (errorInfo.throwable is AccountTerminatedException) {
|
||||||
errorTextView.setText(R.string.account_terminated)
|
errorTextView.setText(R.string.account_terminated)
|
||||||
@ -130,7 +133,7 @@ class ErrorPanelHelper(
|
|||||||
errorInfo.throwable !is ContentNotSupportedException
|
errorInfo.throwable !is ContentNotSupportedException
|
||||||
) {
|
) {
|
||||||
// show retry button only for content which is not unavailable or unsupported
|
// show retry button only for content which is not unavailable or unsupported
|
||||||
errorRetryButton.isVisible = true
|
errorRetryButton.isVisible = retryShouldBeShown
|
||||||
}
|
}
|
||||||
showAndSetOpenInBrowserButtonAction(errorInfo)
|
showAndSetOpenInBrowserButtonAction(errorInfo)
|
||||||
}
|
}
|
||||||
|
@ -32,7 +32,8 @@ public enum UserAction {
|
|||||||
PREFERENCES_MIGRATION("migration of preferences"),
|
PREFERENCES_MIGRATION("migration of preferences"),
|
||||||
SHARE_TO_NEWPIPE("share to newpipe"),
|
SHARE_TO_NEWPIPE("share to newpipe"),
|
||||||
CHECK_FOR_NEW_APP_VERSION("check for new app version"),
|
CHECK_FOR_NEW_APP_VERSION("check for new app version"),
|
||||||
OPEN_INFO_ITEM_DIALOG("open info item dialog");
|
OPEN_INFO_ITEM_DIALOG("open info item dialog"),
|
||||||
|
GETTING_MAIN_SCREEN_TAB("getting main screen tab");
|
||||||
|
|
||||||
private final String message;
|
private final String message;
|
||||||
|
|
||||||
|
@ -9,14 +9,52 @@ import androidx.annotation.Nullable;
|
|||||||
|
|
||||||
import org.schabi.newpipe.BaseFragment;
|
import org.schabi.newpipe.BaseFragment;
|
||||||
import org.schabi.newpipe.R;
|
import org.schabi.newpipe.R;
|
||||||
|
import org.schabi.newpipe.error.ErrorInfo;
|
||||||
|
import org.schabi.newpipe.error.ErrorPanelHelper;
|
||||||
|
|
||||||
public class BlankFragment extends BaseFragment {
|
public class BlankFragment extends BaseFragment {
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
final ErrorInfo errorInfo;
|
||||||
|
@Nullable
|
||||||
|
ErrorPanelHelper errorPanel = null;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Builds a blank fragment that just says the app name and suggests clicking on search.
|
||||||
|
*/
|
||||||
|
public BlankFragment() {
|
||||||
|
this(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param errorInfo if null acts like {@link BlankFragment}, else shows an error panel.
|
||||||
|
*/
|
||||||
|
public BlankFragment(@Nullable final ErrorInfo errorInfo) {
|
||||||
|
this.errorInfo = errorInfo;
|
||||||
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
@Override
|
@Override
|
||||||
public View onCreateView(final LayoutInflater inflater, @Nullable final ViewGroup container,
|
public View onCreateView(final LayoutInflater inflater, @Nullable final ViewGroup container,
|
||||||
final Bundle savedInstanceState) {
|
final Bundle savedInstanceState) {
|
||||||
setTitle("NewPipe");
|
setTitle("NewPipe");
|
||||||
return inflater.inflate(R.layout.fragment_blank, container, false);
|
final View view = inflater.inflate(R.layout.fragment_blank, container, false);
|
||||||
|
if (errorInfo != null) {
|
||||||
|
errorPanel = new ErrorPanelHelper(this, view, null);
|
||||||
|
errorPanel.showError(errorInfo);
|
||||||
|
view.findViewById(R.id.blank_page_content).setVisibility(View.GONE);
|
||||||
|
}
|
||||||
|
return view;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onDestroyView() {
|
||||||
|
super.onDestroyView();
|
||||||
|
|
||||||
|
if (errorPanel != null) {
|
||||||
|
errorPanel.dispose();
|
||||||
|
errorPanel = null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -36,7 +36,9 @@ import com.google.android.material.tabs.TabLayout;
|
|||||||
import org.schabi.newpipe.BaseFragment;
|
import org.schabi.newpipe.BaseFragment;
|
||||||
import org.schabi.newpipe.R;
|
import org.schabi.newpipe.R;
|
||||||
import org.schabi.newpipe.databinding.FragmentMainBinding;
|
import org.schabi.newpipe.databinding.FragmentMainBinding;
|
||||||
|
import org.schabi.newpipe.error.ErrorInfo;
|
||||||
import org.schabi.newpipe.error.ErrorUtil;
|
import org.schabi.newpipe.error.ErrorUtil;
|
||||||
|
import org.schabi.newpipe.error.UserAction;
|
||||||
import org.schabi.newpipe.local.playlist.LocalPlaylistFragment;
|
import org.schabi.newpipe.local.playlist.LocalPlaylistFragment;
|
||||||
import org.schabi.newpipe.settings.tabs.Tab;
|
import org.schabi.newpipe.settings.tabs.Tab;
|
||||||
import org.schabi.newpipe.settings.tabs.TabsManager;
|
import org.schabi.newpipe.settings.tabs.TabsManager;
|
||||||
@ -302,10 +304,9 @@ public class MainFragment extends BaseFragment implements TabLayout.OnTabSelecte
|
|||||||
final Fragment fragment;
|
final Fragment fragment;
|
||||||
try {
|
try {
|
||||||
fragment = tab.getFragment(context);
|
fragment = tab.getFragment(context);
|
||||||
} catch (final Exception e) {
|
} catch (final Throwable t) {
|
||||||
ErrorUtil.showUiErrorSnackbar(context, "Getting fragment item", e);
|
return new BlankFragment(new ErrorInfo(t, UserAction.GETTING_MAIN_SCREEN_TAB,
|
||||||
// TODO: show an error fragment instead
|
"Tab " + tab.getClass().getSimpleName() + ":" + tab.getTabName(context)));
|
||||||
return new BlankFragment();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (fragment instanceof BaseFragment) {
|
if (fragment instanceof BaseFragment) {
|
||||||
|
@ -4,7 +4,9 @@
|
|||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent">
|
android:layout_height="match_parent">
|
||||||
|
|
||||||
<include layout="@layout/main_bg" />
|
<include
|
||||||
|
android:id="@+id/blank_page_content"
|
||||||
|
layout="@layout/main_bg" />
|
||||||
|
|
||||||
<include
|
<include
|
||||||
android:id="@+id/error_panel"
|
android:id="@+id/error_panel"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user