package com.roboo.like.google.fragments;
import java.io.DataOutputStream;
import java.util.LinkedList;
import android.annotation.SuppressLint;
import android.os.Bundle;
import android.support.v4.app.LoaderManager.LoaderCallbacks;
import android.support.v4.content.Loader;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.AbsListView.OnScrollListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.ListView;
import android.widget.Toast;
import com.roboo.like.google.BaseActivity;
import com.roboo.like.google.BusLineActivity;
import com.roboo.like.google.R;
import com.roboo.like.google.SettingsActivity;
import com.roboo.like.google.adapters.BusAdapter;
import com.roboo.like.google.async.BusAsyncTaskLoader;
import com.roboo.like.google.models.BusItem;
import com.roboo.like.google.utils.NetWorkUtils;
@SuppressLint("NewApi")
public class BusFragment extends BaseWithProgressFragment implements LoaderCallbacks<LinkedList<BusItem>>
{
private ListView mListView;
private LinkedList<BusItem> mData;
private BusAdapter mAdapter;
private View mHeaderView;
private View mEmptyView;
private String mBusNo = "110";
private int mListViewFirstPosition = 0;
private Button mBtnRetry;
public static BusFragment newInstance()
{
BusFragment fragment = new BusFragment();
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, null);// TODO
mListView = (ListView) view.findViewById(R.id.dlv_list);
}
mHeaderView = createHeaderView();
mEmptyView = createEmptyView();
mListView.addHeaderView(mHeaderView);
return view;
}
private View createEmptyView()
{
mEmptyView = LayoutInflater.from(getActivity()).inflate(R.layout.listview_bus_empty_view, null);// TODO ListView的HeaderView布局文件
mBtnRetry = (Button) mEmptyView.findViewById(R.id.btn_retry);
return mEmptyView;
}
/***
* 为ListView创建一个HeaderView
*
* @return
*/
private View createHeaderView()
{
mHeaderView = LayoutInflater.from(getActivity()).inflate(R.layout.listview_bus_header_view, null);// TODO ListView的HeaderView布局文件
final EditText editText = (EditText) mHeaderView.findViewById(R.id.et_text);
ImageButton ibtnSearch = (ImageButton) mHeaderView.findViewById(R.id.ibtn_search);
ibtnSearch.setOnClickListener(new OnClickListener()
{
public void onClick(View v)
{
if (!TextUtils.isEmpty(editText.getText()))
{
if (TextUtils.isDigitsOnly(editText.getText()))
{
mBusNo = editText.getText().toString();
BaseActivity baseActivity = (BaseActivity) getActivity();
baseActivity.hideKeyBoard(editText);
editText.setText(null);
onRefresh();
}
else
{
Toast.makeText(getActivity(), "输入的线路番号不合法", Toast.LENGTH_SHORT).show();
}
}
else
{
Toast.makeText(getActivity(), "请输入的线路番号", Toast.LENGTH_SHORT).show();
}
}
});
return mHeaderView;
}
private void doLoadData()
{
getActivity().getSupportLoaderManager().restartLoader(0, null, this);
mProgressBar.setVisibility(View.VISIBLE);
mEmptyView.setVisibility(View.GONE);
mListView.setVisibility(View.VISIBLE);
}
@Override
public void onActivityCreated(Bundle savedInstanceState)
{
super.onActivityCreated(savedInstanceState);
if (mData == null)
{
onRefresh();
// doLoadData();
// }
// else
// {
// mProgressBar.setVisibility(View.GONE);
// mAdapter = new BusAdapter(getActivity(), mData);
// mListView.setAdapter(mAdapter);
}
setListener();
}
@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;
case R.id.menu_settings://设置
SettingsActivity.actionSettings(getActivity());
break;
}
return super.onOptionsItemSelected(item);
}
/**
* 刷新
*/
private void onRefresh()
{
mHeaderView.setVisibility(View.GONE);
mData = new LinkedList<BusItem>();
mAdapter = new BusAdapter(getActivity(), mData);
mListView.setAdapter(mAdapter);
doLoadData();
}
public void setListener()
{
mListView.setOnItemClickListener(new OnItemClickListener()
{
public void onItemClick(AdapterView<?> parent, View view, int position, long id)
{
BusItem item = (BusItem) parent.getAdapter().getItem(position);
BusItem invertItem = getInvertBusItem(item);
if (invertItem != null)
{
BusLineActivity.actionBusLine(getActivity(), item, invertItem);
}
else
{
BusLineActivity.actionBusLine(getActivity(), item);
}
}
private BusItem getInvertBusItem(BusItem busItem)
{
BusItem invertItem = null;
for (BusItem item : mData)
{
if ((busItem.busNo.equals(item.busNo)) && (!busItem.busUrl.equals(item.busUrl)))
{
invertItem = item;
}
}
return invertItem;
}
});
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)
{}
});
}
@Override
public Loader<LinkedList<BusItem>> onCreateLoader(int id, Bundle args)
{
return new BusAsyncTaskLoader(getActivity(), mBusNo);
}
@Override
public void onLoadFinished(Loader<LinkedList<BusItem>> loader, LinkedList<BusItem> data)
{
mProgressBar.setVisibility(View.GONE);
mHeaderView.setVisibility(View.VISIBLE);
if (data != null)
{
mData = data;
mAdapter = new BusAdapter(getActivity(), mData);
mListView.setAdapter(mAdapter);
if (mListViewFirstPosition > 0)
{
mListView.setSelection(mListViewFirstPosition);
}
}
else
{
mEmptyView.setVisibility(View.VISIBLE);
// mListView.setVisibility(View.GONE);
mBtnRetry.setOnClickListener(new OnClickListener()
{
public void onClick(View v)
{
if (NetWorkUtils.isNetworkAvailable(getActivity()))
{
}
else
{
}
}
});
}
}
@Override
public void onLoaderReset(Loader<LinkedList<BusItem>> 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;
}
}