package io.hefuyi.listener.ui.fragment;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.Toolbar;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.afollestad.appthemeengine.ATE;
import java.util.List;
import javax.inject.Inject;
import butterknife.BindView;
import butterknife.ButterKnife;
import io.hefuyi.listener.ListenerApp;
import io.hefuyi.listener.R;
import io.hefuyi.listener.RxBus;
import io.hefuyi.listener.event.MetaChangedEvent;
import io.hefuyi.listener.injector.component.ApplicationComponent;
import io.hefuyi.listener.injector.component.DaggerFoldersComponent;
import io.hefuyi.listener.injector.component.FoldersComponent;
import io.hefuyi.listener.injector.module.FolderModule;
import io.hefuyi.listener.mvp.contract.FoldersContract;
import io.hefuyi.listener.mvp.model.FolderInfo;
import io.hefuyi.listener.ui.adapter.FolderAdapter;
import io.hefuyi.listener.util.ATEUtil;
import io.hefuyi.listener.util.DensityUtil;
import io.hefuyi.listener.widget.DividerItemDecoration;
import io.hefuyi.listener.widget.fastscroller.FastScrollRecyclerView;
import rx.Subscription;
import rx.android.schedulers.AndroidSchedulers;
import rx.functions.Action1;
import rx.schedulers.Schedulers;
/**
* A simple {@link Fragment} subclass.
*/
public class FoldersFragment extends Fragment implements FoldersContract.View{
@Inject
FoldersContract.Presenter mPresenter;
@BindView(R.id.recyclerview)
FastScrollRecyclerView recyclerView;
@BindView(R.id.view_empty)
View emptyView;
@BindView(R.id.toolbar)
Toolbar toolbar;
private FolderAdapter mAdapter;
@Override
public void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
injectDependences();
mPresenter.attachView(this);
mAdapter = new FolderAdapter((AppCompatActivity) getActivity(), null);
}
private void injectDependences() {
ApplicationComponent applicationComponent = ((ListenerApp) getActivity().getApplication()).getApplicationComponent();
FoldersComponent foldersComponent = DaggerFoldersComponent.builder()
.applicationComponent(applicationComponent)
.folderModule(new FolderModule())
.build();
foldersComponent.inject(this);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_list_layout, container, false);
ButterKnife.bind(this, rootView);
return rootView;
}
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
ATE.apply(this, ATEUtil.getATEKey(getActivity()));
if (Build.VERSION.SDK_INT < 21 && view.findViewById(R.id.status_bar) != null) {
view.findViewById(R.id.status_bar).setVisibility(View.GONE);
if (Build.VERSION.SDK_INT >= 19) {
int statusBarHeight = DensityUtil.getStatusBarHeight(getContext());
view.findViewById(R.id.toolbar).setPadding(0, statusBarHeight, 0, 0);
}
}
((AppCompatActivity) getActivity()).setSupportActionBar(toolbar);
final ActionBar ab = ((AppCompatActivity) getActivity()).getSupportActionBar();
ab.setHomeAsUpIndicator(R.drawable.ic_menu);
ab.setDisplayHomeAsUpEnabled(true);
ab.setTitle(R.string.folders);
recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
recyclerView.setAdapter(mAdapter);
recyclerView.addItemDecoration(new DividerItemDecoration(getActivity(), DividerItemDecoration.VERTICAL_LIST, false));
mPresenter.subscribe();
subscribeMetaChangedEvent();
}
@Override
public void onActivityCreated(final Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
setHasOptionsMenu(true);
}
@Override
public void onDestroyView() {
super.onDestroyView();
mPresenter.unsubscribe();
RxBus.getInstance().unSubscribe(this);
}
@Override
public void showEmptyView() {
recyclerView.setVisibility(View.GONE);
emptyView.setVisibility(View.VISIBLE);
}
@Override
public void showFolders(List<FolderInfo> folderInfos) {
recyclerView.setVisibility(View.VISIBLE);
emptyView.setVisibility(View.GONE);
mAdapter.setFolderList(folderInfos);
}
private void subscribeMetaChangedEvent() {
Subscription subscription = RxBus.getInstance()
.toObservable(MetaChangedEvent.class)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.distinctUntilChanged()
.subscribe(new Action1<MetaChangedEvent>() {
@Override
public void call(MetaChangedEvent event) {
mAdapter.notifyDataSetChanged();
}
}, new Action1<Throwable>() {
@Override
public void call(Throwable throwable) {
}
});
RxBus.getInstance().addSubscription(this, subscription);
}
}