diff --git a/vlc-android/src/org/videolan/vlc/gui/browser/BaseBrowserAdapter.java b/vlc-android/src/org/videolan/vlc/gui/browser/BaseBrowserAdapter.java index 5033b4713..fd73dc2ff 100644 --- a/vlc-android/src/org/videolan/vlc/gui/browser/BaseBrowserAdapter.java +++ b/vlc-android/src/org/videolan/vlc/gui/browser/BaseBrowserAdapter.java @@ -220,7 +220,7 @@ public class BaseBrowserAdapter extends RecyclerView.Adapter()); + dispatchUpdate(new ArrayList(0)); } public boolean isEmpty(){ diff --git a/vlc-android/src/org/videolan/vlc/gui/browser/BaseBrowserFragment.java b/vlc-android/src/org/videolan/vlc/gui/browser/BaseBrowserFragment.java index b6714003b..c98582848 100644 --- a/vlc-android/src/org/videolan/vlc/gui/browser/BaseBrowserFragment.java +++ b/vlc-android/src/org/videolan/vlc/gui/browser/BaseBrowserFragment.java @@ -29,7 +29,6 @@ import android.os.Bundle; import android.os.Message; import android.support.annotation.Nullable; import android.support.design.widget.BottomSheetDialogFragment; -import android.support.design.widget.FloatingActionButton; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentTransaction; @@ -86,7 +85,6 @@ public abstract class BaseBrowserFragment extends MediaBrowserFragment implement public static final String KEY_CONTENT_LIST = "key_content_list"; public static final String KEY_POSITION = "key_list"; - protected FloatingActionButton mFAB; protected BrowserFragmentHandler mHandler; protected MediaBrowser mMediaBrowser; @@ -161,14 +159,18 @@ public abstract class BaseBrowserFragment extends MediaBrowserFragment implement @Override public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); - mFAB = (FloatingActionButton) getActivity().findViewById(R.id.fab); - if (mFAB != null) - mFAB.setImageResource(R.drawable.ic_fab_play); if (!mAdapter.isEmpty()) { - updateEmptyView(); mAdapter.notifyItemRangeInserted(0, mAdapter.getItemCount()); - parseSubDirectories(); - } + onUpdateFinished(mAdapter); + } else if (!(this instanceof NetworkBrowserFragment)) + refresh(); + } + + @Override + public void onStart() { + super.onStart(); + mFabPlay.setImageResource(R.drawable.ic_fab_play); + updateFab(); } @Override @@ -226,16 +228,6 @@ public abstract class BaseBrowserFragment extends MediaBrowserFragment implement return mCurrentMedia != null ? mrl : null; } - @Override - protected void display() { - if (!mReadyToDisplay) { - mReadyToDisplay = true; - update(); - return; - } - updateDisplay(); - } - public void goBack(){ if (!mRoot) getActivity().getSupportFragmentManager().popBackStack(); @@ -260,11 +252,12 @@ public abstract class BaseBrowserFragment extends MediaBrowserFragment implement @Override public void onMediaAdded(int index, Media media) { - boolean empty = mAdapter.isEmpty(); - mAdapter.addItem(new MediaWrapper(media), mReadyToDisplay && mRoot, false); - if (empty && mReadyToDisplay) - updateEmptyView(); - if (mRoot && (empty || mSwipeRefreshLayout.isRefreshing())) + boolean wasEmtpy = mAdapter.isEmpty(); + mAdapter.addItem(new MediaWrapper(media), true, false); + if (!wasEmtpy) + return; + updateEmptyView(); + if (wasEmtpy) mHandler.sendEmptyMessage(BrowserFragmentHandler.MSG_HIDE_LOADING); } @@ -276,9 +269,8 @@ public abstract class BaseBrowserFragment extends MediaBrowserFragment implement @Override public void onBrowseEnd() { releaseBrowser(); + onUpdateFinished(mAdapter); mHandler.sendEmptyMessage(BrowserFragmentHandler.MSG_HIDE_LOADING); - if (mReadyToDisplay) - display(); if (!isResumed()) goBack = true; } @@ -311,46 +303,10 @@ public abstract class BaseBrowserFragment extends MediaBrowserFragment implement } } - protected void update(){ - update(false); - } - - protected void update(boolean force){ - if (mReadyToDisplay) { - if (force || mAdapter.isEmpty()) { - refresh(); - } else { - updateDisplay(); - } - } - } - - protected void updateDisplay() { - updateEmptyView(); - if (!mAdapter.isEmpty()) { - if (mSavedPosition > 0) { - mLayoutManager.scrollToPositionWithOffset(mSavedPosition, 0); - mSavedPosition = 0; - } - } - mAdapter.notifyDataSetChanged(); - parseSubDirectories(); - if (mFAB != null) { - if (mAdapter.getMediaCount() > 0) { - mFAB.setVisibility(View.VISIBLE); - mFAB.setOnClickListener(this); - } else { - mFAB.setVisibility(View.INVISIBLE); - mFAB.setOnClickListener(null); - } - } - } - @Override public void refresh() { mHandler.sendEmptyMessageDelayed(BrowserFragmentHandler.MSG_SHOW_LOADING, 300); - if (!mRoot) - mAdapter.clear(); + mAdapter.clear(); mFoldersContentLists.clear(); if (mMediaBrowser == null) mMediaBrowser = new MediaBrowser(VLCInstance.get(), this); @@ -375,7 +331,7 @@ public abstract class BaseBrowserFragment extends MediaBrowserFragment implement return MediaBrowser.Flag.Interact; } - protected static class BrowserFragmentHandler extends WeakHandler { + static class BrowserFragmentHandler extends WeakHandler { static final int MSG_SHOW_LOADING = 0; static final int MSG_HIDE_LOADING = 1; @@ -785,7 +741,28 @@ public abstract class BaseBrowserFragment extends MediaBrowserFragment implement if (mActionMode == null) mRecyclerView.openContextMenu(position); } + public void onUpdateFinished(RecyclerView.Adapter adapter) { + parseSubDirectories(); updateEmptyView(); + if (!mAdapter.isEmpty()) { + if (mSavedPosition > 0) { + mLayoutManager.scrollToPositionWithOffset(mSavedPosition, 0); + mSavedPosition = 0; + } + } + updateFab(); + } + + private void updateFab() { + if (mFabPlay != null) { + if (mAdapter.getMediaCount() > 0) { + mFabPlay.setVisibility(View.VISIBLE); + mFabPlay.setOnClickListener(this); + } else { + mFabPlay.setVisibility(View.INVISIBLE); + mFabPlay.setOnClickListener(null); + } + } } } diff --git a/vlc-android/src/org/videolan/vlc/gui/browser/FileBrowserFragment.java b/vlc-android/src/org/videolan/vlc/gui/browser/FileBrowserFragment.java index 6ae0838aa..d0ec9655f 100644 --- a/vlc-android/src/org/videolan/vlc/gui/browser/FileBrowserFragment.java +++ b/vlc-android/src/org/videolan/vlc/gui/browser/FileBrowserFragment.java @@ -107,26 +107,13 @@ public class FileBrowserFragment extends BaseBrows if (TextUtils.equals(AndroidDevices.EXTERNAL_PUBLIC_DIRECTORY, mediaDirLocation)) directory.setDisplayTitle(VLCApplication.getAppResources().getString(R.string.internal_memory)); devices.add(directory); - mAdapter.addItem(directory, false, false); - mAdapter.dispatchUpdate(devices); - parseSubDirectories(); } + mAdapter.dispatchUpdate(devices); mHandler.sendEmptyMessage(BrowserFragmentHandler.MSG_HIDE_LOADING); } }); } - public void onStart(){ - super.onStart(); - } - - @Override - public void onResume() { - super.onResume(); - if (mReadyToDisplay) - update(); - } - @Override public void onStop() { super.onStop(); @@ -147,9 +134,7 @@ public class FileBrowserFragment extends BaseBrows builder.setView(input); builder.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() { @Override - public void onClick(DialogInterface dialogInterface, int which) { - return; - } + public void onClick(DialogInterface dialogInterface, int which) {} }); builder.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() { @Override diff --git a/vlc-android/src/org/videolan/vlc/gui/browser/MediaBrowserFragment.java b/vlc-android/src/org/videolan/vlc/gui/browser/MediaBrowserFragment.java index 7e82643d6..443549c4c 100644 --- a/vlc-android/src/org/videolan/vlc/gui/browser/MediaBrowserFragment.java +++ b/vlc-android/src/org/videolan/vlc/gui/browser/MediaBrowserFragment.java @@ -91,15 +91,6 @@ public abstract class MediaBrowserFragment extends PlaybackServiceFragment imple } } - @Override - public void onStop() { - super.onStop(); - if (mFabPlay != null) { - mFabPlay.setOnClickListener(null); - setFabPlayVisibility(false); - } - } - @Override public void onPause() { super.onPause(); diff --git a/vlc-android/src/org/videolan/vlc/gui/browser/NetworkBrowserFragment.java b/vlc-android/src/org/videolan/vlc/gui/browser/NetworkBrowserFragment.java index 106b8dcdb..8fb8f60d1 100644 --- a/vlc-android/src/org/videolan/vlc/gui/browser/NetworkBrowserFragment.java +++ b/vlc-android/src/org/videolan/vlc/gui/browser/NetworkBrowserFragment.java @@ -30,7 +30,6 @@ import android.content.IntentFilter; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.os.Bundle; -import android.support.design.widget.FloatingActionButton; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.view.MenuItem; @@ -74,10 +73,8 @@ public class NetworkBrowserFragment extends BaseBrowserFragment { if (mSkipRefresh) parseSubDirectories(); if (mRoot) { - mFAB = (FloatingActionButton) getActivity().findViewById(R.id.fab); - mFAB.setImageResource(R.drawable.ic_fab_add); - mFAB.setVisibility(View.VISIBLE); - mFAB.setOnClickListener(this); + mFabPlay.setImageResource(R.drawable.ic_fab_add); + mFabPlay.setOnClickListener(this); } } @@ -91,17 +88,11 @@ public class NetworkBrowserFragment extends BaseBrowserFragment { super.onStop(); getActivity().unregisterReceiver(networkReceiver); if (mRoot) { - mFAB.setVisibility(View.INVISIBLE); - mFAB.setOnClickListener(null); + mFabPlay.setVisibility(View.INVISIBLE); + mFabPlay.setOnClickListener(null); } } - protected void updateDisplay() { - if (mRoot) - updateFavorites(); - super.updateDisplay(); - } - protected boolean handleContextItemSelected(MenuItem item, final int position) { int id = item.getItemId(); if (! (mAdapter.getItem(position) instanceof MediaWrapper)) @@ -113,13 +104,13 @@ public class NetworkBrowserFragment extends BaseBrowserFragment { db = MediaDatabase.getInstance(); db.addNetworkFavItem(mw.getUri(), mw.getTitle(), mw.getArtworkURL()); if (isRootDirectory()) - updateDisplay(); + updateFavorites(); return true; case R.id.network_remove_favorite: db = MediaDatabase.getInstance(); db.deleteNetworkFav(mw.getUri()); if (isRootDirectory()) - updateDisplay(); + updateFavorites(); return true; case R.id.network_edit_favorite: showAddServerDialog(mw); diff --git a/vlc-android/src/org/videolan/vlc/gui/browser/StorageBrowserFragment.java b/vlc-android/src/org/videolan/vlc/gui/browser/StorageBrowserFragment.java index 620725ed5..5b2ab7240 100644 --- a/vlc-android/src/org/videolan/vlc/gui/browser/StorageBrowserFragment.java +++ b/vlc-android/src/org/videolan/vlc/gui/browser/StorageBrowserFragment.java @@ -26,7 +26,6 @@ package org.videolan.vlc.gui.browser; import android.databinding.DataBindingUtil; import android.net.Uri; import android.os.Bundle; -import android.support.design.widget.FloatingActionButton; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentTransaction; import android.text.TextUtils; @@ -45,6 +44,7 @@ import org.videolan.vlc.util.AndroidDevices; import org.videolan.vlc.util.CustomDirectories; import java.io.File; +import java.util.ArrayList; public class StorageBrowserFragment extends FileBrowserFragment { @@ -77,18 +77,16 @@ public class StorageBrowserFragment extends FileBrowserFragment { public void onStart() { super.onStart(); if (mRoot) { - mFAB = (FloatingActionButton) getActivity().findViewById(R.id.fab); - mFAB.setImageResource(R.drawable.ic_fab_add); - mFAB.setVisibility(View.VISIBLE); - mFAB.setOnClickListener(this); + mFabPlay.setImageResource(R.drawable.ic_fab_add); + mFabPlay.setOnClickListener(this); } } @Override public void onStop() { super.onStop(); - mFAB.setVisibility(View.GONE); - mFAB.setOnClickListener(null); + mFabPlay.setVisibility(View.GONE); + mFabPlay.setOnClickListener(null); } @Override @@ -96,7 +94,7 @@ public class StorageBrowserFragment extends FileBrowserFragment { super.onViewCreated(view, savedInstanceState); if (VLCApplication.showTvUi()) { if (mRoot) - mFAB.requestFocus(); + mFabPlay.requestFocus(); else mRecyclerView.requestFocus(); } @@ -113,13 +111,14 @@ public class StorageBrowserFragment extends FileBrowserFragment { String[] storages = mMediaLibrary.getDevices(); String[] customDirectories = CustomDirectories.getCustomDirectories(); Storage storage; + ArrayList storagesList = new ArrayList<>(); for (String mediaDirLocation : storages) { if (TextUtils.isEmpty(mediaDirLocation)) continue; storage = new Storage(Uri.fromFile(new File(mediaDirLocation))); if (TextUtils.equals(AndroidDevices.EXTERNAL_PUBLIC_DIRECTORY, mediaDirLocation)) storage.setName(getString(R.string.internal_memory)); - mAdapter.addItem(storage, true, false); + storagesList.add(storage); } customLoop: for (String customDir : customDirectories) { @@ -130,19 +129,12 @@ public class StorageBrowserFragment extends FileBrowserFragment { continue customLoop; } storage = new Storage(Uri.parse(customDir)); - mAdapter.addItem(storage, true, false); + storagesList.add(storage); } - updateEmptyView(); - parseSubDirectories(); + mAdapter.dispatchUpdate(storagesList); mHandler.sendEmptyMessage(BrowserFragmentHandler.MSG_HIDE_LOADING); } - @Override - protected void update() { - ((StorageBrowserAdapter)mAdapter).updateMediaDirs(); - super.update(); - } - @Override public void onMediaAdded(int index, Media media) { if (media.getType() != Media.Type.Directory) @@ -150,20 +142,6 @@ public class StorageBrowserFragment extends FileBrowserFragment { super.onMediaAdded(index, media); } - protected void updateDisplay() { - updateEmptyView(); - parseSubDirectories(); - if (isRootDirectory()) - ((StorageBrowserAdapter)mAdapter).updateMediaDirs(); - if (!mAdapter.isEmpty()) { - if (mSavedPosition > 0) { - mLayoutManager.scrollToPositionWithOffset(mSavedPosition, 0); - mSavedPosition = 0; - } - } - mAdapter.notifyDataSetChanged(); - } - public void browse (MediaWrapper media, int position, boolean scanned){ FragmentTransaction ft = getActivity().getSupportFragmentManager().beginTransaction(); Fragment next = createFragment(); diff --git a/vlc-android/src/org/videolan/vlc/gui/network/MRLPanelFragment.java b/vlc-android/src/org/videolan/vlc/gui/network/MRLPanelFragment.java index 703285150..7ef0986c4 100644 --- a/vlc-android/src/org/videolan/vlc/gui/network/MRLPanelFragment.java +++ b/vlc-android/src/org/videolan/vlc/gui/network/MRLPanelFragment.java @@ -83,6 +83,7 @@ public class MRLPanelFragment extends Fragment implements IHistory, View.OnKeyLi public void onStart(){ super.onStart(); + getActivity().findViewById(R.id.fab).setVisibility(View.INVISIBLE); getActivity().supportInvalidateOptionsMenu(); updateHistory(); }