package au.id.teda.broadband.usage.fragments; import au.id.teda.broadband.usage.chart.ChartBuilder; import au.id.teda.broadband.usage.chart.PieChart; import org.achartengine.GraphicalView; import android.os.Bundle; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.ViewGroup.LayoutParams; import android.view.ViewTreeObserver; import android.view.ViewTreeObserver.OnGlobalLayoutListener; import android.widget.LinearLayout; import android.widget.TextView; import au.id.teda.broadband.usage.R; import au.id.teda.broadband.usage.chart.CustomDonughtChart; import au.id.teda.broadband.usage.chart.DailyAverageChart; public class PeakUsageFragment extends BaseFragment { // BaseFragment used to load the standard methods // View inflated by fragment private View mFragmentView; // Fragment page title public static String PAGE_TITLE = "PEAK"; private ChartBuilder mChartBuilder; /** * Called 3rd in the fragment life cycle */ @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Set fragment layout to be inflated mFragmentView = inflater.inflate(R.layout.fragment_peak_usage, container, false); mChartBuilder = new ChartBuilder(mContext); return mFragmentView; } @Override protected void loadFragmentView(){ loadDonughtChart(); loadDonughtChartText(); loadDailyAverageChart(); loadPieChart(); } private void loadPieChart() { // Set layout container for chart final LinearLayout mContainerLayout = (LinearLayout) mFragmentView.findViewById(R.id.fragment_peak_upload_download_chart); // Initialize chart class PieChart mPieChart = new PieChart(mContext); // Set chart values long upload = (mAccountStatus.getUploadsDataUsed()); long peak = mAccountStatus.getOffpeakDataUsed(); long offpeak = mAccountStatus.getPeakDataUsed(); long quota = mAccountInfo.getPeakQuota(); // Guestimate peak upload value long peakUpload = mChartBuilder.peakUploadGuess(peak, offpeak, upload); // Calculate download less estimate upload in peak long download = peak - peakUpload; // Set data for pie chart mPieChart.setData(peakUpload, download, quota); // Set layout parameters for chart view LayoutParams mChartViewParams = new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT); // Add chart view to layout view GraphicalView mGraphicalView = (GraphicalView) mPieChart.getPieChartView(); mContainerLayout.removeAllViews(); mContainerLayout.addView(mGraphicalView, mChartViewParams); // Set text view references TextView mUploadData = (TextView) mFragmentView.findViewById(R.id.fragment_peak_upload_download_upload_number); TextView mDownloadData = (TextView) mFragmentView.findViewById(R.id.fragment_peak_upload_download_download_number); // Set text for view mUploadData.setText(dataToGbString(peakUpload)); mDownloadData.setText(dataToGbString(download)); } private void loadDonughtChart() { // Set layout container for chart final LinearLayout mContainerLayout = (LinearLayout) mFragmentView.findViewById(R.id.fragment_peak_usage_donught); // Listen for view being inflated ViewTreeObserver mViewTreeObserver = mContainerLayout.getViewTreeObserver(); mViewTreeObserver.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { @Override public void onGlobalLayout() { // Get layout parameters LayoutParams parms = mContainerLayout.getLayoutParams(); // Set height equal to parent layout width parms.height = getView().getWidth(); } }); // Initialize chart class CustomDonughtChart mChart = new CustomDonughtChart(mContext); mChart.setDays(mAccountStatus.getDaysSoFar(), mAccountStatus.getDaysToGo()); mChart.setUsage(mAccountStatus.getPeakDataUsed(), mAccountInfo.getPeakQuota()); // Set layout parameters for chart view LayoutParams mChartViewParams = new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT); // Add chart view to layout view mContainerLayout.removeAllViews(); mContainerLayout.addView(mChart, mChartViewParams); } private void loadDonughtChartText() { // Set layout container for chart text final LinearLayout mTextContainer = (LinearLayout) mFragmentView.findViewById(R.id.fragment_peak_usage_donught_text_container); // Listen for view being inflated ViewTreeObserver mViewTreeObserver = mTextContainer.getViewTreeObserver(); mViewTreeObserver.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { @Override public void onGlobalLayout() { // Get layout parameters LayoutParams parms = mTextContainer.getLayoutParams(); // Set height equal to layout width parms.height = getView().getWidth(); } }); // Set text view references TextView mPeakPercent = (TextView) mFragmentView.findViewById(R.id.fragment_peak_usage_donught_text_percent); TextView mPeakUsed = (TextView) mFragmentView.findViewById(R.id.fragment_peak_usage_donught_text_period); // Set text in text views mPeakPercent.setText(mAccountStatus.getPeakDataUsedPercentString()); mPeakUsed.setText(mContext.getString(R.string.fragment_peak_usage_used)); } private void loadDailyAverageChart() { // Set layout container for chart final LinearLayout mContainerLayout = (LinearLayout) mFragmentView.findViewById(R.id.fragment_peak_usage_daily_chart); // Initialize chart class DailyAverageChart mChart = new DailyAverageChart(mContext); int average = mAccountStatus.getPeakDailyAverageUsedMb(); int quota = (int) mAccountInfo.getPeakQuotaDailyMb(); // Check to make sure info status is set so we don't get divided by zero errors if (!mAccountInfo.isInfoSet() || !mAccountStatus.isStatusSet()){ average = 2; quota = 1; } // Set chart data mChart.setData(average, quota); // Set layout parameters for chart view LayoutParams mChartViewParams = new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT); // Add chart view to layout view mContainerLayout.addView(mChart, mChartViewParams); // Set text view references TextView mDailyPeak = (TextView) mFragmentView.findViewById(R.id.fragment_peak_usage_daily_number); TextView mDailyPeakVariation = (TextView) mFragmentView.findViewById(R.id.fragment_peak_usage_daily_description_right); mDailyPeak.setText(IntUsageToString(mAccountStatus.getPeakDailyAverageUsedMb())); mDailyPeakVariation.setText(IntUsageToString(mAccountStatus.getPeakAverageVariationMb())); } }