package au.id.teda.broadband.usage.fragments; import java.text.DecimalFormat; import java.text.NumberFormat; import android.app.Activity; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.content.SharedPreferences; import android.os.Bundle; import android.preference.PreferenceManager; import au.id.teda.broadband.usage.R; import au.id.teda.broadband.usage.activity.BaseActivity; import au.id.teda.broadband.usage.authenticator.AccountAuthenticator; import au.id.teda.broadband.usage.helper.AccountInfoHelper; import au.id.teda.broadband.usage.helper.AccountStatusHelper; import au.id.teda.broadband.usage.helper.LayoutHelper; import com.actionbarsherlock.app.SherlockFragment; public abstract class BaseFragment extends SherlockFragment { //protected final static String DEBUG_TAG = BaseActivity.DEBUG_TAG; // Helper classes protected AccountInfoHelper mAccountInfo; protected AccountStatusHelper mAccountStatus; protected AccountAuthenticator mAccountAuthenticator; protected LayoutHelper mLayoutHelper; // Activity shared preferences protected SharedPreferences mSettings; protected SharedPreferences.Editor mEditor; // Receive sync broadcasts protected SyncReceiver mSyncReceiver; protected IntentFilter filter; // Activity context to be used protected Context mContext; protected int GB = 1000000000; /** * Called 1st in the fragment life cycle */ @Override public void onAttach(Activity activity) { super.onAttach(activity); // Load helper classes mAccountInfo = new AccountInfoHelper(activity); mAccountStatus = new AccountStatusHelper(activity); mAccountAuthenticator = new AccountAuthenticator(activity); mLayoutHelper = new LayoutHelper(activity); // Set up shared preferences mSettings = PreferenceManager.getDefaultSharedPreferences(activity); mEditor = mSettings.edit(); } /** * Called 2nd in the fragment life cycle */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Set context for fragment. // Activity extends context so we get it from there mContext = getActivity(); // Setup broadcast receiver for background sync String BROADCAST = getString(R.string.sync_broadcast_action); filter = new IntentFilter(BROADCAST); mSyncReceiver = new SyncReceiver(); } /** * Called 4th in the fragment life cycle */ @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); if (mAccountInfo.isInfoSet() && mAccountStatus.isStatusSet()) { loadFragmentView(); } } /** * Called 5th in the fragment life cycle */ @Override public void onResume() { super.onResume(); // Register broadcast receiver for background sync getActivity().registerReceiver(mSyncReceiver, filter); } /** * Called 1st in the death of fragment */ @Override public void onPause() { super.onPause(); // Unregister broadcast receiver for background sync getActivity().unregisterReceiver(mSyncReceiver); } // Return formated string value for int stored in db protected String IntUsageToString (long usage){ NumberFormat numberFormat = new DecimalFormat("#,###"); return numberFormat.format(usage); } protected String dataToGbString(long data){ long dataGb = (data / GB); String used = Long.toString(dataGb); if (dataGb < 10 ){ used = "0" + used; } return used; } protected abstract void loadFragmentView(); private class SyncReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent i) { String MESSAGE = getString(R.string.sync_broadcast_message); String SYNC_START = getString(R.string.sync_broadcast_start); String SYNC_COMPLETE = getString(R.string.sync_broadcast_complete); String msg = i.getStringExtra(MESSAGE); if (msg.equals(SYNC_START)){ // Nothing to do see here move along } else if (msg.equals(SYNC_COMPLETE)){ if (mAccountInfo.isInfoSet() && mAccountStatus.isStatusSet()) { loadFragmentView(); } } } } }