Browse Source

Change browsers update system

shortcuts
Geoffrey Métais 10 years ago
parent
commit
69f4fd44b0
  1. 2
      vlc-android/src/org/videolan/vlc/gui/browser/BaseBrowserAdapter.java
  2. 103
      vlc-android/src/org/videolan/vlc/gui/browser/BaseBrowserFragment.java
  3. 19
      vlc-android/src/org/videolan/vlc/gui/browser/FileBrowserFragment.java
  4. 9
      vlc-android/src/org/videolan/vlc/gui/browser/MediaBrowserFragment.java
  5. 21
      vlc-android/src/org/videolan/vlc/gui/browser/NetworkBrowserFragment.java
  6. 42
      vlc-android/src/org/videolan/vlc/gui/browser/StorageBrowserFragment.java
  7. 1
      vlc-android/src/org/videolan/vlc/gui/network/MRLPanelFragment.java

2
vlc-android/src/org/videolan/vlc/gui/browser/BaseBrowserAdapter.java

@ -220,7 +220,7 @@ public class BaseBrowserAdapter extends RecyclerView.Adapter<BaseBrowserAdapter.
}
public void clear() {
dispatchUpdate(new ArrayList<MediaLibraryItem>());
dispatchUpdate(new ArrayList<MediaLibraryItem>(0));
}
public boolean isEmpty(){

103
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<BaseBrowserFragment> {
static class BrowserFragmentHandler extends WeakHandler<BaseBrowserFragment> {
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);
}
}
}
}

19
vlc-android/src/org/videolan/vlc/gui/browser/FileBrowserFragment.java

@ -107,26 +107,13 @@ public class FileBrowserFragment<T extends BaseBrowserAdapter> 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<T extends BaseBrowserAdapter> 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

9
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();

21
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);

42
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<MediaLibraryItem> 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();

1
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();
}

Loading…
Cancel
Save