package com.V4Creations.vtulife.view.fragments;
import android.content.Context;
import android.os.Bundle;
import android.support.v4.app.ListFragment;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.ProgressBar;
import android.widget.TextView;
import com.V4Creations.vtulife.R;
import com.V4Creations.vtulife.controller.adapters.DirectoryListingAdapter;
import com.V4Creations.vtulife.controller.adapters.VTULifeFragmentAdapter.FragmentInfo;
import com.V4Creations.vtulife.controller.server.ResourceLoaderManager;
import com.V4Creations.vtulife.model.ActionBarStatus;
import com.V4Creations.vtulife.model.ResourceItem;
import com.V4Creations.vtulife.model.ResourceStackItem;
import com.V4Creations.vtulife.model.interfaces.ResourceLoaderInterface;
import com.V4Creations.vtulife.util.GoogleAnalyticsManager;
import com.V4Creations.vtulife.view.activity.VTULifeMainActivity;
import com.google.analytics.tracking.android.EasyTracker;
import de.keyboardsurfer.android.widget.crouton.Style;
public class DirectoryListingFragment extends ListFragment implements
ResourceLoaderInterface, FragmentInfo {
String TAG = "DirectoryListingMainFragment";
private VTULifeMainActivity activity;
private ActionBarStatus mActionBarStatus;
private DirectoryListingAdapter mAdapter;
private LinearLayout progressLinearLayout;
private ProgressBar progressBar;
private TextView progressTextView;
private EasyTracker mEasyTracker;
private ResourceLoaderManager mResourceLoaderManager;
public DirectoryListingFragment() {
mActionBarStatus = new ActionBarStatus();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
activity = (VTULifeMainActivity) getActivity();
return inflater.inflate(R.layout.fragment_directory, null);
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
mEasyTracker = GoogleAnalyticsManager.getGoogleAnalyticsTracker(activity);
initView();
hideProgressLinearLayout();
initResourceLoader();
}
private void initResourceLoader() {
mResourceLoaderManager = new ResourceLoaderManager(activity, this);
mResourceLoaderManager.loadDirectory(null, -1);
}
private void initView() {
initListView();
progressLinearLayout = (LinearLayout) getView().findViewById(
R.id.progressLinearLayout);
progressBar = (ProgressBar) getView().findViewById(R.id.progressBar);
progressTextView = (TextView) getView().findViewById(
R.id.progressTextView);
}
private void initListView() {
mAdapter = new DirectoryListingAdapter(activity);
setListAdapter(mAdapter);
}
@Override
public void onListItemClick(ListView l, View view, int position, long id) {
super.onListItemClick(l, view, position, id);
ResourceItem resourceItem = mAdapter.getItem(position);
GoogleAnalyticsManager.infomGoogleAnalytics(mEasyTracker,
GoogleAnalyticsManager.CATEGORY_NOTES,
GoogleAnalyticsManager.ACTION_FOLDER, resourceItem.name, 0L);
if (resourceItem.ext.equals("dir")) {
mResourceLoaderManager.loadDirectory(resourceItem.href, position);
} else {
mResourceLoaderManager.downloadFile(activity, resourceItem.href);
activity.showCrouton(R.string.downloading_started, Style.INFO,
false);
}
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.directory_listing_main_layout, menu);
super.onCreateOptionsMenu(menu, inflater);
}
@Override
public void onPrepareOptionsMenu(Menu menu) {
super.onPrepareOptionsMenu(menu);
if (activity != null && !activity.isNavigationDrawerOpen()) {
MenuItem backMenuItem = menu.findItem(R.id.menu_back);
MenuItem refreshMenuItem = menu.findItem(R.id.menu_refresh);
if (mResourceLoaderManager != null
&& mResourceLoaderManager.isGoBack()) {
backMenuItem.setEnabled(true);
backMenuItem.setIcon(R.drawable.ic_action_previous_item);
} else {
backMenuItem.setEnabled(false);
backMenuItem
.setIcon(R.drawable.ic_action_previous_item_disabled);
}
if (mResourceLoaderManager != null
&& !mResourceLoaderManager.isReloading()) {
refreshMenuItem.setIcon(R.drawable.ic_action_refresh);
refreshMenuItem.setEnabled(true);
} else {
refreshMenuItem.setIcon(R.drawable.ic_action_refresh_disabled);
refreshMenuItem.setEnabled(false);
}
}
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
super.onOptionsItemSelected(item);
switch (item.getItemId()) {
case R.id.menu_back:
mResourceLoaderManager.goBack();
return true;
case R.id.menu_refresh:
mResourceLoaderManager.reload();
return true;
}
return false;
}
private void hideProgressLinearLayout() {
progressLinearLayout.setVisibility(View.GONE);
}
private void showProgressLinearLayout() {
progressLinearLayout.setVisibility(View.VISIBLE);
progressBar.setVisibility(View.VISIBLE);
progressTextView.setText(R.string.please_wait_);
}
private void showReload() {
progressLinearLayout.setVisibility(View.VISIBLE);
progressBar.setVisibility(View.GONE);
progressTextView.setText(R.string.please_reload);
}
@Override
public String getTitle(Context context) {
return DirectoryListingFragment.getFeatureName(context);
}
@Override
public ActionBarStatus getActionBarStatus() {
return mActionBarStatus;
}
public static String getFeatureName(Context context) {
return context.getString(R.string.notes);
}
@Override
public void onStartLoading() {
mAdapter.clear();
showProgressLinearLayout();
mActionBarStatus.subTitle = getString(R.string.loading);
callActionBarReflect();
}
private void callActionBarReflect() {
activity.reflectActionBarChange(mActionBarStatus,
VTULifeMainActivity.ID_DIRECTORY_LISTING_FRAGMENT, true);
}
@Override
public void onLoadingSuccess(ResourceStackItem resourceStackItem) {
hideProgressLinearLayout();
if (resourceStackItem.mResourceItems.size() != 0)
mAdapter.supportAddAll(resourceStackItem.mResourceItems);
else {
activity.showCrouton(R.string.empty_folder, Style.INFO, false);
if (mResourceLoaderManager.isGoBack())
mResourceLoaderManager.goBack();
else
showReload();
}
mActionBarStatus.subTitle = resourceStackItem.mDirName;
callActionBarReflect();
}
@Override
public void onLoadingFailure(String message, String trackMessage) {
activity.showCrouton(message, Style.ALERT, false);
mActionBarStatus.subTitle = null;
callActionBarReflect();
showReload();
GoogleAnalyticsManager.infomGoogleAnalytics(mEasyTracker,
GoogleAnalyticsManager.CATEGORY_NOTES,
GoogleAnalyticsManager.ACTION_NETWORK_ERROR, trackMessage, 0L);
}
}