/** * galaxy inc. * meetup client for android */ package com.galaxy.meetup.client.android.ui.fragments; import android.content.DialogInterface; import android.database.Cursor; import android.os.Bundle; import android.support.v4.content.Loader; import android.view.LayoutInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import com.galaxy.meetup.client.android.R; import com.galaxy.meetup.client.android.content.EsAccount; import com.galaxy.meetup.client.android.content.EsCursorLoader; import com.galaxy.meetup.client.android.content.EsNetworkData; import com.galaxy.meetup.client.android.content.EsProvider; import com.galaxy.meetup.client.android.ui.view.BarGraphView; /** * * @author sihai * */ public class NetworkStatisticsFragment extends EsFragment implements android.content.DialogInterface.OnClickListener, android.support.v4.app.LoaderManager.LoaderCallbacks { protected static final String sSortColumns[]; protected static final int sValueColumns[][] = { { 2, 3 }, { 2 }, { 3 }, { 4, 5 }, { 4 }, { 5 }, { 6 } }; protected EsAccount mAccount; protected BarGraphView mBarGraphView; protected int mPendingViewType; protected int mViewType; static { String as[] = new String[7]; as[0] = (new StringBuilder("(")).append(NetworkStatisticsQuery.PROJECTION[2]).append("+").append(NetworkStatisticsQuery.PROJECTION[3]).append(")").toString(); as[1] = NetworkStatisticsQuery.PROJECTION[2]; as[2] = NetworkStatisticsQuery.PROJECTION[3]; as[3] = (new StringBuilder("(")).append(NetworkStatisticsQuery.PROJECTION[4]).append("+").append(NetworkStatisticsQuery.PROJECTION[5]).append(")").toString(); as[4] = NetworkStatisticsQuery.PROJECTION[4]; as[5] = NetworkStatisticsQuery.PROJECTION[5]; as[6] = NetworkStatisticsQuery.PROJECTION[6]; sSortColumns = as; } public NetworkStatisticsFragment() { mViewType = 0; } private void updateTitle(EsFragmentActivity esfragmentactivity) { CharSequence acharsequence[] = getResources().getTextArray(R.array.network_statistics_types); if(android.os.Build.VERSION.SDK_INT >= 11) esfragmentactivity.setTitle(acharsequence[mViewType]); else esfragmentactivity.setTitlebarTitle((String)acharsequence[mViewType]); } protected final boolean isEmpty() { return false; } public void onClick(DialogInterface dialoginterface, int i) { if(-2 == i) { dialoginterface.dismiss(); } else if(-1 == i) { if(mPendingViewType != mViewType) { mViewType = mPendingViewType; getLoaderManager().restartLoader(0, null, this); updateTitle((EsFragmentActivity)getActivity()); } dialoginterface.dismiss(); } else { mPendingViewType = i; } } public final void onCreate(Bundle bundle) { super.onCreate(bundle); if(bundle != null && bundle.containsKey("view_type")) { mViewType = bundle.getInt("view_type"); mPendingViewType = mViewType; } mAccount = (EsAccount)getActivity().getIntent().getParcelableExtra("account"); setHasOptionsMenu(true); getLoaderManager().initLoader(0, null, this); } public final Loader onCreateLoader(int i, Bundle bundle) { Loader loader = null; if(0 == i) { android.net.Uri uri = EsProvider.appendAccountParameter(EsProvider.NETWORK_DATA_STATS_URI, mAccount); loader = new EsCursorLoader(getActivity(), uri, NetworkStatisticsQuery.PROJECTION, null, null, (new StringBuilder()).append(sSortColumns[mViewType]).append(" DESC").toString()); } return loader; } public final View onCreateView(LayoutInflater layoutinflater, ViewGroup viewgroup, Bundle bundle) { View view = layoutinflater.inflate(R.layout.network_statistics_fragment, viewgroup, false); mBarGraphView = (BarGraphView)view.findViewById(R.id.bar_graph); return view; } public final void onLoadFinished(Loader loader, Object obj) { Cursor cursor = (Cursor)obj; int i = cursor.getCount(); BarGraphView.RowInfo arowinfo[] = new BarGraphView.RowInfo[i]; cursor.moveToFirst(); for(int j = 0; j < i; j++) { arowinfo[j] = new BarGraphView.RowInfo(); arowinfo[j].mLabel = cursor.getString(1); arowinfo[j].mValue = 0L; int k = sValueColumns[mViewType].length; for(int l = 0; l < k; l++) { BarGraphView.RowInfo rowinfo = arowinfo[j]; rowinfo.mValue = rowinfo.mValue + cursor.getLong(sValueColumns[mViewType][l]); } cursor.moveToNext(); } mBarGraphView.update(arowinfo, getResources().getStringArray(R.array.network_statistics_types_units)[mViewType]); } public final void onLoaderReset(Loader loader) { } public final void onMenuItemSelected(MenuItem menuitem) { int i = menuitem.getItemId(); if(i == R.id.customize) { mPendingViewType = mViewType; android.app.AlertDialog.Builder builder = new android.app.AlertDialog.Builder(getActivity()); builder.setTitle(R.string.menu_network_customize); builder.setSingleChoiceItems(R.array.network_statistics_types, mViewType, this); builder.setPositiveButton(R.string.ok, this); builder.setNegativeButton(R.string.cancel, this); builder.setCancelable(true); builder.show(); } else if(i == R.id.clear) { EsNetworkData.resetStatsData(getActivity(), mAccount); getLoaderManager().restartLoader(0, null, this); } } public final void onResume() { super.onResume(); updateTitle((EsFragmentActivity)getActivity()); } public final void onSaveInstanceState(Bundle bundle) { super.onSaveInstanceState(bundle); bundle.putInt("view_type", mViewType); } public static interface NetworkStatisticsQuery { public static final String PROJECTION[] = { "_id", "name", "sent", "recv", "network_duration", "process_duration", "req_count" }; } }