package com.roboo.like.google.fragments;
import java.io.DataOutputStream;
import java.util.LinkedList;
import android.annotation.SuppressLint;
import android.os.Bundle;
import android.os.Handler;
import android.support.v4.app.LoaderManager.LoaderCallbacks;
import android.support.v4.content.Loader;
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.AbsListView;
import android.widget.AdapterView;
import android.widget.AbsListView.OnScrollListener;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import com.roboo.like.google.BusLineActivity;
import com.roboo.like.google.R;
import com.roboo.like.google.adapters.BusStationAdapter;
import com.roboo.like.google.async.BusStationAsyncTaskLoader;
import com.roboo.like.google.models.BusItem;
import com.roboo.like.google.models.BusStationItem;
import com.roboo.like.google.utils.NetWorkUtils;
@SuppressLint("NewApi")
public class BusStationFragment extends BaseWithProgressFragment implements
LoaderCallbacks<LinkedList<BusStationItem>>
{
private static final long NEXT_QUERY_DELAY_TIME = 10000L;
private ListView mListView;
public static final String ARG_BUS_LINE = "bus_line";
public static final String ARG_BUS_ITEM = "bus_item";
private LinkedList<BusStationItem> mData;
private View mHeaderView;
private BusStationAdapter mAdapter;
private int mListViewFirstPosition = 0;
private Handler mHandler = new Handler();
private Runnable mQueryRunnable = new Runnable()
{
@Override
public void run()
{
if (mProgressBar.getVisibility() == View.GONE)
{
doLoadData();
}
}
};
public static BusStationFragment newInstance(String busLineUrl)
{
BusStationFragment fragment = new BusStationFragment();
Bundle bundle = new Bundle();
bundle.putString(ARG_BUS_LINE, busLineUrl);
fragment.setArguments(bundle);
return fragment;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
{
View view = null;
if (savedInstanceState == null)
{
view = inflater.inflate(R.layout.fragment_bus_line, null);// TODO
mListView = (ListView) view.findViewById(R.id.dlv_list);
}
mHeaderView = createHeaderView();
mListView.addHeaderView(mHeaderView);
return view;
}
@Override
public void onActivityCreated(Bundle savedInstanceState)
{
super.onActivityCreated(savedInstanceState);
doLoadData();
setListener();
}
@Override
public void onPause()
{
super.onPause();
mHandler.removeCallbacks(mQueryRunnable);
}
@Override
public void onResume()
{
super.onResume();
if (mData != null)
{
mHandler.postDelayed(mQueryRunnable, NEXT_QUERY_DELAY_TIME);
}
}
private void doLoadData()
{
getActivity().getSupportLoaderManager().restartLoader(0, null, this);
mProgressBar.setVisibility(View.VISIBLE);
}
/***
* 为ListView通过代码创建一个HeaderView
*
* @return
*/
private View createHeaderView()
{
mHeaderView = LayoutInflater.from(getActivity()).inflate(
R.layout.listview_bus_station_header_view, null);// TODO ListView的HeaderView布局文件
return mHeaderView;
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater)
{
inflater.inflate(R.menu.activity_bus, menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item)
{
switch (item.getItemId())
{
case R.id.menu_refresh:// 重试
onRefresh();
break;
}
return super.onOptionsItemSelected(item);
}
private void onRefresh()
{
mHeaderView.setVisibility(View.GONE);
mData = new LinkedList<BusStationItem>();
mAdapter = new BusStationAdapter(getActivity(), mData);
mListView.setAdapter(mAdapter);
doLoadData();
}
public void setListener()
{
mListView.setOnItemClickListener(getOnItemClickListener());
mListView.setOnScrollListener(new OnScrollListener()
{
@Override
public void onScrollStateChanged(AbsListView view, int scrollState)
{
if (scrollState == OnScrollListener.SCROLL_STATE_IDLE)
{
mListViewFirstPosition = view.getFirstVisiblePosition();
}
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount)
{}
});
}
private OnItemClickListener getOnItemClickListener()
{
return new OnItemClickListener()
{
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id)
{
BusStationItem item = (BusStationItem) parent.getAdapter()
.getItem(position);
BusItem busItem = new BusItem();
busItem.busNo = item.busNo;
busItem.busUrl = item.stationUrl;
BusLineActivity.actionBusLine(getActivity(), busItem);
}
};
}
@Override
public Loader<LinkedList<BusStationItem>> onCreateLoader(int id, Bundle args)
{
return new BusStationAsyncTaskLoader(getActivity(), getArguments()
.getString(ARG_BUS_LINE, null));
}
@Override
public void onLoadFinished(Loader<LinkedList<BusStationItem>> loader,
LinkedList<BusStationItem> data)
{
mProgressBar.setVisibility(View.GONE);
mHandler.postDelayed(mQueryRunnable, NEXT_QUERY_DELAY_TIME);
if (data != null)
{
mData = data;
mHeaderView.setVisibility(View.VISIBLE);
mAdapter = new BusStationAdapter(getActivity(), mData);
mListView.setAdapter(mAdapter);
if (mListViewFirstPosition > 0)
{
mListView.setSelection(mListViewFirstPosition);
}
}
else
{
if (NetWorkUtils.isNetworkAvailable(getActivity()))
{
}
else
{
}
}
}
@Override
public void onLoaderReset(Loader<LinkedList<BusStationItem>> loader)
{
}
/***
* 执行Root 命令
*
* @param command
* 要执行的命令[chmod 777 /data/misc/wifi/wpa_supplicant.conf]
* @return true 命令成功执行 或者 false 命令执行失败
*/
public static boolean runRootCommand(String command)
{
Process process = null;
DataOutputStream os = null;
try
{
process = Runtime.getRuntime().exec("su");
os = new DataOutputStream(process.getOutputStream());
os.writeBytes(command + "\n");
os.writeBytes("exit\n");
os.flush();
process.waitFor();
}
catch (Exception e)
{
return false;
}
finally
{
try
{
if (os != null)
{
os.close();
}
process.destroy();
}
catch (Exception e)
{}
}
return true;
}
}