/*
* *************************************************************************
* NetworkBrowserFragment.java
* **************************************************************************
* Copyright © 2015 VLC authors and VideoLAN
* Author: Geoffrey Métais
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
* ***************************************************************************
*/
package org.videolan.vlc.gui.browser;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.net.ConnectivityManager;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.View;
import org.videolan.vlc.MediaDatabase;
import org.videolan.vlc.MediaWrapper;
import org.videolan.vlc.R;
import org.videolan.vlc.util.AndroidDevices;
import java.util.ArrayList;
public class NetworkBrowserFragment extends BaseBrowserFragment {
public NetworkBrowserFragment() {
ROOT = "smb";
mHandler = new BrowserFragmentHandler(this);
mAdapter = new NetworkBrowserAdapter(this);
}
@Override
public void onCreate(Bundle bundle) {
super.onCreate(bundle);
if (mMrl == null)
mMrl = ROOT;
mRoot = ROOT.equals(mMrl);
}
public void onStart(){
super.onStart();
//Handle network connection state
IntentFilter filter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);
getActivity().registerReceiver(networkReceiver, filter);
}
@Override
protected Fragment createFragment() {
return new NetworkBrowserFragment();
}
@Override
public void onStop() {
super.onStop();
getActivity().unregisterReceiver(networkReceiver);
}
@Override
protected void update() {
if (!AndroidDevices.hasLANConnection())
updateEmptyView();
else
super.update();
}
protected void updateDisplay() {
if (mRoot)
updateFavorites();
mAdapter.notifyDataSetChanged();
parseSubDirectories();
}
@Override
protected void browseRoot() {
ArrayList<MediaWrapper> favs = MediaDatabase.getInstance().getAllNetworkFav();
if (!favs.isEmpty()) {
mFavorites = favs.size();
for (MediaWrapper fav : favs) {
mAdapter.addItem(fav, false, true);
}
mAdapter.addItem("Network favorites", false, true);
}
mMediaBrowser.discoverNetworkShares();
}
@Override
protected String getCategoryTitle() {
return getString(R.string.network_browsing);
}
private void updateFavorites(){
ArrayList<MediaWrapper> favs = MediaDatabase.getInstance().getAllNetworkFav();
int newSize = favs.size(), totalSize = mAdapter.getItemCount();
if (newSize == 0 && mFavorites == 0)
return;
for (int i = 1 ; i <= mFavorites ; ++i){ //remove former favorites
mAdapter.removeItem(totalSize-i, mReadyToDisplay);
}
if (newSize == 0)
mAdapter.removeItem(totalSize-mFavorites-1, mReadyToDisplay); //also remove separator if no more fav
else {
if (mFavorites == 0)
mAdapter.addItem("Network favorites", false, false); //add header if needed
for (MediaWrapper fav : favs)
mAdapter.addItem(fav, false, false); //add new favorites
}
mFavorites = newSize; //update count
}
public void toggleFavorite() {
MediaDatabase db = MediaDatabase.getInstance();
if (db.networkFavExists(mCurrentMedia.getUri()))
db.deleteNetworkFav(mCurrentMedia.getUri());
else
db.addNetworkFavItem(mCurrentMedia.getUri(), mCurrentMedia.getTitle());
getActivity().supportInvalidateOptionsMenu();
}
/**
* Update views visibility and emptiness info
*/
protected void updateEmptyView() {
if (AndroidDevices.hasLANConnection()) {
if (mAdapter.isEmpty()) {
mEmptyView.setText(mRoot ? R.string.network_shares_discovery : R.string.network_empty);
mEmptyView.setVisibility(View.VISIBLE);
mRecyclerView.setVisibility(View.GONE);
mSwipeRefreshLayout.setEnabled(false);
} else {
if (mEmptyView.getVisibility() == View.VISIBLE) {
mEmptyView.setVisibility(View.GONE);
mRecyclerView.setVisibility(View.VISIBLE);
mSwipeRefreshLayout.setEnabled(true);
}
}
} else {
if (mEmptyView.getVisibility() == View.GONE) {
mEmptyView.setText(R.string.network_connection_needed);
mEmptyView.setVisibility(View.VISIBLE);
mRecyclerView.setVisibility(View.GONE);
mSwipeRefreshLayout.setEnabled(false);
}
}
}
private final BroadcastReceiver networkReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (mReadyToDisplay && ConnectivityManager.CONNECTIVITY_ACTION.equals(action)) {
update();
}
}
};
}