package au.id.teda.broadband.usage.fragments; import android.os.Bundle; import android.view.GestureDetector; import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; import android.view.GestureDetector.SimpleOnGestureListener; import android.view.View.OnTouchListener; import android.widget.RelativeLayout; import android.widget.TextView; import au.id.teda.broadband.usage.R; import au.id.teda.broadband.usage.helper.NotificationHelper; public class UsageSummaryFragment extends BaseFragment { // View inflated by fragment private View mFragmentView; // TextViews for dev private TextView mLayoutUsed; private TextView mCurrentMonth; private TextView mDaysNumber; private TextView mDaysDescription; private TextView mDaysSummary; private TextView mPeakNumber; private TextView mPeakDescription; private TextView mPeakSummary; private TextView mOffpeakNumber; private TextView mOffpeakDescription; private TextView mOffpeakSummary; private TextView mUploadsNumber; private TextView mFreezoneNumber; private TextView mUpTimeNumber; private TextView mIpAddress; // Gesture detector class private GestureDetector mGestureDetector; // Prefrence key to store summary state private final static String PREF_SUMMARY_STATE_KEY = "pref_summary_state_key"; /** * 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_usage_summary, container, false); // Set reference for textviews mLayoutUsed = (TextView) mFragmentView.findViewById(R.id.fragment_usage_summary_size); mCurrentMonth = (TextView) mFragmentView.findViewById(R.id.fragment_usage_summary_current_month); mDaysNumber = (TextView) mFragmentView.findViewById(R.id.fragment_usage_summary_days_number); mDaysDescription = (TextView) mFragmentView.findViewById(R.id.fragment_usage_summary_days_description); mDaysSummary = (TextView) mFragmentView.findViewById(R.id.fragment_usage_summary_days_summary); mPeakNumber = (TextView) mFragmentView.findViewById(R.id.fragment_usage_summary_peak_number); mPeakDescription = (TextView) mFragmentView.findViewById(R.id.fragment_usage_summary_peak_description); mPeakSummary = (TextView) mFragmentView.findViewById(R.id.fragment_usage_summary_peak_summary); mOffpeakNumber = (TextView) mFragmentView.findViewById(R.id.fragment_usage_summary_offpeak_number); mOffpeakDescription = (TextView) mFragmentView.findViewById(R.id.fragment_usage_summary_offpeak_description); mOffpeakSummary = (TextView) mFragmentView.findViewById(R.id.fragment_usage_summary_offpeak_summary); mUploadsNumber = (TextView) mFragmentView.findViewById(R.id.fragment_usage_summary_uploads_number); mFreezoneNumber = (TextView) mFragmentView.findViewById(R.id.fragment_usage_summary_freezone_number); mUpTimeNumber = (TextView) mFragmentView.findViewById(R.id.fragment_rollover_uptime_uptime_number); mIpAddress = (TextView) mFragmentView.findViewById(R.id.fragment_rollover_uptime_description); // Setup the touch listener for chart mFragmentView.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { return mGestureDetector.onTouchEvent(event); //mGestureDetector.onTouchEvent(event); //return false; } }); return mFragmentView; } /** * Called 4th in the fragment life cycle */ @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); // Set gesture reference mGestureDetector = new GestureDetector(new MyGestureDetector()); } /** * First call in the death of fragment */ @Override public void onPause() { super.onPause(); // Remember summary state mEditor.putBoolean(PREF_SUMMARY_STATE_KEY, isVeiwSoFar()); mEditor.commit(); } @Override protected void loadFragmentView(){ // Used in both sofar and remaining views for phone if (mLayoutHelper.isLayoutPhonePort(mLayoutUsed)){ mCurrentMonth.setText(mAccountStatus.getCurrentMonthString()); mDaysDescription.setText(mAccountStatus.getRolloverDateString()); mPeakSummary.setText(mAccountInfo.getPeakQuotaString()); mOffpeakSummary.setText(mAccountInfo.getOffpeakQuotaString()); mUpTimeNumber.setText(mAccountStatus.getUpTimeDaysString()); mIpAddress.setText(mAccountStatus.getIpAddressStrng()); } else if (mLayoutHelper.isLayout_w1024dp(mLayoutUsed)){ // Nothing to see here } setSummaryView(); checkUsageStatus(); } private void setSummaryView() { // Set view flipper to last view boolean soFar = mSettings.getBoolean(PREF_SUMMARY_STATE_KEY, true); if (soFar){ setUsageSoFar(); } else { setUsageToGo(); } } private void setUsageToGo() { mPeakNumber.setText(mAccountStatus.getPeakDataRemaingGbString()); mOffpeakNumber.setText(mAccountStatus.getOffpeakDataRemaingGbString()); mUploadsNumber.setText(mAccountStatus.getUploadsDataUsedGbString()); mFreezoneNumber.setText(mAccountStatus.getFreezoneDataUsedGbString()); // Set this even though it is hidden. Used for switching mDaysSummary.setText(mContext.getString(R.string.fragment_usage_summary_days_to_go)); // Only set text if loading phone layout if (mLayoutHelper.isLayoutPhonePort(mLayoutUsed)){ mDaysNumber.setText(mAccountStatus.getDaysToGoString()); mPeakDescription.setText(mAccountStatus.getPeakShapedRemainingString()); mOffpeakDescription.setText(mAccountStatus.getOffpeakShapedRemainingString()); } } private void setUsageSoFar() { mPeakNumber.setText(mAccountStatus.getPeakDataUsedGbString()); mOffpeakNumber.setText(mAccountStatus.getOffpeakDataUsedGbString()); mUploadsNumber.setText(mAccountStatus.getUploadsDataUsedGbString()); mFreezoneNumber.setText(mAccountStatus.getFreezoneDataUsedGbString()); // Set this even though it is hidden. Used for switching mDaysSummary.setText(mContext.getString(R.string.fragment_usage_summary_days_so_far)); // Only set text if loading phone layout if (mLayoutHelper.isLayoutPhonePort(mLayoutUsed)){ mDaysNumber.setText(mAccountStatus.getDaysSoFarString()); mPeakDescription.setText(mAccountStatus.getPeakShapedUsedString()); mOffpeakDescription.setText(mAccountStatus.getOffpeakShapedUsedString()); } } private boolean isVeiwSoFar(){ CharSequence days = mDaysSummary.getText(); CharSequence soFar = mContext.getString(R.string.fragment_usage_summary_days_so_far); if (days.equals(soFar)){ return true; } else { return false; } } private void checkUsageStatus() { NotificationHelper mNotification = new NotificationHelper(mContext); //TODO: Test layout logic better if(mNotification.isPeakQuotaNear()){ setPeakWarning(); } if(mNotification.isPeakQuotaOver()){ setPeakError(); } if(mNotification.isOffpeakQuotaNear()){ setOffpeakWarning(); } if(mNotification.isOffpeakQuotaOver()){ setOffpeakError(); } } private void setPeakWarning(){ RelativeLayout mLayoutContaner = (RelativeLayout) mFragmentView.findViewById(R.id.fragment_usage_summary_peak_container); mLayoutContaner.setBackgroundDrawable((getResources().getDrawable(R.drawable.shape_flash_warning))); } private void setPeakError(){ RelativeLayout mLayoutContaner = (RelativeLayout) mFragmentView.findViewById(R.id.fragment_usage_summary_peak_container); mLayoutContaner.setBackgroundDrawable((getResources().getDrawable(R.drawable.shape_flash_error))); } private void setOffpeakWarning(){ RelativeLayout mLayoutContaner = (RelativeLayout) mFragmentView.findViewById(R.id.fragment_usage_summary_offpeak_container); mLayoutContaner.setBackgroundDrawable((getResources().getDrawable(R.drawable.shape_flash_warning))); } private void setOffpeakError(){ RelativeLayout mLayoutContaner = (RelativeLayout) mFragmentView.findViewById(R.id.fragment_usage_summary_offpeak_container); mLayoutContaner.setBackgroundDrawable((getResources().getDrawable(R.drawable.shape_flash_error))); } class MyGestureDetector extends SimpleOnGestureListener { @Override public boolean onDoubleTap(MotionEvent event) { if (isVeiwSoFar()){ setUsageToGo(); } else { setUsageSoFar(); } return false; } // It is necessary to return true from onDown for the onFling event to // register @Override public boolean onDown(MotionEvent e) { return true; } } }