package com.noshufou.android.su; import com.noshufou.android.su.provider.PermissionsProvider.Logs; import com.noshufou.android.su.widget.LogAdapter; import com.noshufou.android.su.widget.PinnedHeaderListView; import android.database.Cursor; import android.os.Bundle; import android.support.v4.app.ListFragment; import android.support.v4.app.LoaderManager; import android.support.v4.content.CursorLoader; import android.support.v4.content.Loader; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.View.OnClickListener; import android.widget.ListView; import android.widget.TextView; public class LogFragment extends ListFragment implements LoaderManager.LoaderCallbacks<Cursor>, FragmentWithLog, OnClickListener { private static final String TAG = "Su.LogFragment"; private LogAdapter mAdapter = null; private TextView mLogCountTextView = null; public static LogFragment newInstance() { return new LogFragment(); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_log, container, false); mLogCountTextView = (TextView) view.findViewById(R.id.log_count); View clearLogButton = view.findViewById(R.id.clear_log_button); if (clearLogButton != null) { clearLogButton.setOnClickListener(this); } return view; } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); ListFragment appList = (ListFragment) getActivity().getSupportFragmentManager() .findFragmentById(R.id.app_list); if (appList != null) { appList.getListView().clearChoices(); appList.getListView().invalidateViews(); } setupListView(); getLoaderManager().initLoader(0, null, this); } private void setupListView() { final ListView list = getListView(); final LayoutInflater inflater = getActivity().getLayoutInflater(); list.setDividerHeight(0); mAdapter = new LogAdapter(null, getActivity()); setListAdapter(mAdapter); if (list instanceof PinnedHeaderListView && mAdapter.getDisplaySectionHeadersEnabled()) { PinnedHeaderListView pinnedHeaderListView = (PinnedHeaderListView) list; View pinnedHeader = inflater.inflate(R.layout.log_list_section, list, false); pinnedHeaderListView.setPinnedHeaderView(pinnedHeader); } list.setOnScrollListener(mAdapter); } @Override public void onClick(View view) { switch (view.getId()) { case R.id.clear_log_button: clearLog(); break; } } @Override public Loader<Cursor> onCreateLoader(int id, Bundle args) { return new CursorLoader(getActivity(), Logs.CONTENT_URI, LogAdapter.PROJECTION, null, null, null); } @Override public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) { mAdapter.swapCursor(cursor); mLogCountTextView.setText(getString(R.string.log_count, cursor!=null?cursor.getCount():0)); mLogCountTextView.setVisibility(View.VISIBLE); } @Override public void onLoaderReset(Loader<Cursor> loader) { mAdapter.swapCursor(null); } public void clearLog(View view) { clearLog(); } @Override public void clearLog() { getActivity().getContentResolver().delete(Logs.CONTENT_URI, null, null); } }