package au.id.teda.broadband.usage.helper; import java.util.Calendar; import java.util.Locale; import android.annotation.SuppressLint; import android.content.Context; import android.content.SharedPreferences; import android.preference.PreferenceManager; import au.id.teda.broadband.usage.R; import au.id.teda.broadband.usage.activity.BaseActivity; public class AccountInfoHelper { //private static final String DEBUG_TAG = BaseActivity.DEBUG_TAG; // Set static string values for preference keys private final static String PREF_ACCOUNT_KEY = "pref_account_key"; private final static String PREF_PLAN_KEY = "pref_plan_key"; private final static String PREF_PRODUCT_KEY = "pref_product"; private final static String PREF_IS_ANYTIME_KEY = "pref_is_anytime_key"; private final static String PREF_OFFPEAK_START_KEY = "pref_offpeak_start"; private final static String PREF_OFFPEAK_END_KEY = "pref_offpeak_end"; private final static String PREF_ANYTIME_QUOTA_KEY = "pref_anytime_quota_key"; private final static String PREF_PEAK_QUOTA_KEY = "pref_peak_quota"; private final static String PREF_OFFPEAK_QUOTA_KEY = "pref_offpeak_quota"; private final static long GB = 1000000000; private final static long MB = 1000000; // Activity context private static Context mContext; // Activity shared preferences SharedPreferences mSettings; SharedPreferences.Editor mEditor; // Class constructor public AccountInfoHelper(Context context) { AccountInfoHelper.mContext = context; mSettings = PreferenceManager.getDefaultSharedPreferences(mContext); mEditor = mSettings.edit(); } public void setAccountInfo(String userAccount, String plan, String product, boolean isAnytime, long offpeakStartTime, long offpeakEndTime, long anyTimeQuota, long peakQuota, long offpeakQuota){ mEditor.putString(PREF_ACCOUNT_KEY, userAccount); mEditor.putString(PREF_PLAN_KEY, plan); mEditor.putString(PREF_PRODUCT_KEY, product); mEditor.putBoolean(PREF_IS_ANYTIME_KEY, isAnytime); mEditor.putLong(PREF_OFFPEAK_START_KEY, offpeakStartTime); mEditor.putLong(PREF_OFFPEAK_END_KEY, offpeakEndTime); mEditor.putLong(PREF_ANYTIME_QUOTA_KEY, anyTimeQuota); mEditor.putLong(PREF_PEAK_QUOTA_KEY, peakQuota); mEditor.putLong(PREF_OFFPEAK_QUOTA_KEY, offpeakQuota); // Commit values to preferences mEditor.commit(); } /** * Method for checking if all account information exists * @return true if all data present */ public boolean isInfoSet() { // Check if anytime account and plan/product is set if (isAccountAnyTime() && isPlanSet() && isProductSet()){ // No need to check for peak/offpeak start times since this is an anytime account return true; // Else check if not an anytime account and plan/product set } else if (!isAccountAnyTime() && isPlanSet() && isProductSet()) { // Check to see if we have all the account information stored if (isOffpeakStartSet() && isOffpeakEndSet() && isPeakQuotaSet() && isOffpeakQuotaSet()) { // Looks like it does so lets return true return true; } else { // Doesn't seem to be all there so return false return false; } // Default return } else { return false; } } /** * Method for getting account plan * @return shared preference string */ @SuppressLint("DefaultLocale") public String getPlan(){ return mSettings.getString(PREF_PLAN_KEY, mContext.getResources().getString(R.string.fragment_product_plan_plan)).toUpperCase(Locale.getDefault()); } /** * Check if plan has been set * @return true if plan string length is greater then 0 */ public boolean isPlanSet(){ // Check plan string length is greater then 0 if (getPlan().length() > 0){ // Looks like it is so return true return true; } else { // Else it must be 0 and not set so return false return false; } } /** * Method for getting account product * @return shared preference string */ @SuppressLint("DefaultLocale") public String getProduct(){ return mSettings.getString(PREF_PRODUCT_KEY , mContext.getResources().getString(R.string.fragment_product_plan_product)).toUpperCase(Locale.getDefault()); } /** * Check if product has been set * @return true if product string length is greater then 0 */ @SuppressLint("DefaultLocale") public boolean isProductSet(){ // Check product string length is greater then 0 if (getProduct().length() > 0){ // Looks like it is so return true return true; } else { // Else it must be 0 and not set so return false return false; } } @SuppressLint("DefaultLocale") public String getProductPlanString(){ return getPlan().toUpperCase(Locale.getDefault()) + " (" + getProduct().toUpperCase() + ")"; } public boolean isAccountAnyTime(){ return mSettings.getBoolean(PREF_IS_ANYTIME_KEY, false); } /** * Method for getting off peak start time * @return shared preference string */ public long getOffpeakStartTime(){ return mSettings.getLong(PREF_OFFPEAK_START_KEY, 0); } /** * Check if off peak start time is set * @return true of string length is greater then 0 */ public boolean isOffpeakStartSet(){ // Check if string length is greater then 0 if (getOffpeakStartTime() != 0){ // Looks like it is so return true return true; } else { // Else it must be 0 and not set so return false return false; } } /** * Method for getting off peak end time * @return shared preference string */ public long getOffpeakEndTime(){ return mSettings.getLong(PREF_OFFPEAK_END_KEY, 0); } public String getOffpeakEndTimeString(){ long millis = getOffpeakEndTime(); Calendar cal = Calendar.getInstance(); cal.setTimeInMillis(millis); int hours = cal.get(Calendar.HOUR_OF_DAY); int mins = cal.get(Calendar.MINUTE); String hoursString = ""; if (hours < 10){ hoursString = "0" + String.valueOf(hours); } String minsString = ""; if (mins < 10){ minsString = "0" + String.valueOf(mins); } String time = hoursString + ":" + minsString; return time; } public String getOffpeakEndTimeAmPmString(){ long millis = getOffpeakEndTime(); Calendar cal = Calendar.getInstance(); cal.setTimeInMillis(millis); int am_pm = cal.get(Calendar.AM_PM); if (am_pm == 0){ return "(am)"; } else { return "(pm)"; } } public String getOffpeakStartTimeAmPmString(){ long millis = getOffpeakStartTime(); Calendar cal = Calendar.getInstance(); cal.setTimeInMillis(millis); int am_pm = cal.get(Calendar.AM_PM); if (am_pm == 0){ return "(am)"; } else { return "(pm)"; } } public String getOffpeakStartTimeString(){ long millis = getOffpeakStartTime(); Calendar cal = Calendar.getInstance(); cal.setTimeInMillis(millis); int hours = cal.get(Calendar.HOUR_OF_DAY); int mins = cal.get(Calendar.MINUTE); String hoursString = ""; if (hours < 10){ hoursString = "0" + String.valueOf(hours); } String minsString = ""; if (mins < 10){ minsString = "0" + String.valueOf(mins); } String time = hoursString + ":" + minsString; return time; } public int getPeakHours(){ long offpeakEnd = getOffpeakEndTime(); long offpeakStart = getOffpeakStartTime(); Calendar cal1 = Calendar.getInstance(); cal1.setTimeInMillis(offpeakEnd); int start = cal1.get(Calendar.HOUR_OF_DAY); Calendar cal2 = Calendar.getInstance(); cal2.setTimeInMillis(offpeakStart); int end = cal2.get(Calendar.HOUR_OF_DAY); if (end > start){ return (24 - ( end - start)); } else { return (24 - ( start - end)); } } public String getPeakHourString(){ int hours = getPeakHours(); return String.valueOf(hours); } public int getOffpeakHours(){ return (24 - getPeakHours()); } public String getOffpeakHourString(){ int hours = getOffpeakHours(); return String.valueOf(hours); } /** * Check if off peak start time is set * @return true of string length is greater then 0 */ public boolean isOffpeakEndSet(){ // Check if string length is greater then 0 if (getOffpeakEndTime() != 0){ // Looks like it is so return true return true; } else { // Else it must be 0 and not set so return false return false; } } public long getAnyTimeQuota(){ return mSettings.getLong(PREF_ANYTIME_QUOTA_KEY, 0); } public int getAnyTimeQuotaGb(){ return (int) (getAnyTimeQuota() / GB); } public long getAnyTimeQuotaMb(){ return (getAnyTimeQuota() / MB); } public long getAnyTimeQuotaDailyMb(){ long quota = getAnyTimeQuotaMb() * 12; long days = 360; if (days > 0 && quota > 0){ return ( quota / days); } else { return 0; } } public long getAnyTimeQuotaHourlyMb(){ long quota = getAnyTimeQuotaDailyMb(); long hours = 24; if (hours > 0 && quota > 0){ return ( quota / hours); } else { return 0; } } public long getAnyTimeQuotaDailyGb(){ long quota = getAnyTimeQuotaMb() * 12; long days = 360; return ( quota / days); } public String getAnyTimeQuotaString(){ long quota = getAnyTimeQuotaGb(); if (quota < 10){ return "/ 0" + Long.toString(quota) + " (Gb) anytime"; } else { return "/ " + Long.toString(quota) + " (Gb) anytime"; } } /** * Method for getting peak quota value * @return shared preference Long */ public long getPeakQuota(){ return mSettings.getLong(PREF_PEAK_QUOTA_KEY, 0); } public int getPeakQuotaGb(){ return (int) (getPeakQuota() / GB); } public long getPeakQuotaMb(){ return (getPeakQuota() / MB); } public long getPeakQuotaDailyMb(){ long quota = getPeakQuotaMb() * 12; long days = 360; if (days > 0 && quota > 0){ return ( quota / days); } else { return 0; } } public long getPeakQuotaHourlyMb(){ long quota = getPeakQuotaDailyMb(); long hours = getPeakHours(); if (hours > 0 && quota > 0){ return ( quota / hours); } else { return 0; } } public long getPeakQuotaDailyGb(){ long quota = getPeakQuotaGb() * 12; long days = 360; return ( quota / days); } public String getPeakQuotaString(){ long quota = getPeakQuotaGb(); if (quota < 10){ return "/ 0" + Long.toString(quota) + " (Gb) peak"; } else { return "/ " + Long.toString(quota) + " (Gb) peak"; } } /** * Method for checking if peak quota has been set * @return true if long is greater then 0 */ public boolean isPeakQuotaSet(){ // Check Long value length is greater then 0 if (getPeakQuota() > 0){ // Looks like it is so return true return true; } else { // Else it must be 0 and not set so return false return false; } } /** * Method for getting off peak quota vale * @return shared preference Long */ public long getOffpeakQuota(){ return mSettings.getLong(PREF_OFFPEAK_QUOTA_KEY, 0); } public int getOffpeakQuotaGb(){ return (int) (getOffpeakQuota() / GB); } public long getOffpeakQuotaMb(){ return (getOffpeakQuota() / MB); } public long getOffpeakQuotaDailyMb(){ long quota = getOffpeakQuotaMb() * 12; long days = 360; if (days > 0 && quota > 0){ return ( quota / days); } else { return 0; } } public long getOffpeakQuotaHourlyMb(){ long quota = getOffpeakQuotaDailyMb(); long hours = getOffpeakHours(); if (hours > 0 && quota > 0){ return ( quota / hours); } else { return 0; } } public long getOffpeakQuotaDailyGb(){ long quota = getOffpeakQuotaGb() * 12; long days = 360; return ( quota / days); } public String getOffpeakQuotaString(){ long quota = getOffpeakQuotaGb(); if (quota < 10){ return "/ 0" + Long.toString(quota) + " (Gb) offpeak"; } else { return "/ " + Long.toString(quota) + " (Gb) offpeak"; } } /** * Method for checking if off peak quota has been set * @return true if long is greater then 0 */ public boolean isOffpeakQuotaSet(){ // Check Long value length is greater then 0 if (getOffpeakQuota() > 0){ // Looks like it is so return true return true; } else { // Else it must be 0 and not set so return false return false; } } public boolean isNowOffpeakTime(){ Calendar start = Calendar.getInstance(); start.setTimeInMillis(getOffpeakStartTime()); Calendar end = Calendar.getInstance(); end.setTimeInMillis(getOffpeakEndTime()); Calendar now = Calendar.getInstance(); int hourStart = start.get(Calendar.HOUR_OF_DAY); int hourEnd = end.get(Calendar.HOUR_OF_DAY); int hourNow = now.get(Calendar.HOUR_OF_DAY); if (hourNow > hourStart && hourNow < hourEnd){ return true; } else { return false; } } public String getDataPeriodString(){ if (isNowOffpeakTime()){ return "Currently: <b>Offpeak</b>"; } else { return "Currently: <b>Peak</b>"; } } public String getPeriodString(){ if (isNowOffpeakTime()){ return "OFFPEAK"; } else { return "PEAK"; } } }