Back to project page PrepayCredit.
The source code is released under:
GNU General Public License
If you think the Android project PrepayCredit listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.
/* * This file is part of Prepay Credit for Android */* w ww . ja v a 2s. c o m*/ * Copyright 2013 Damien O'Reilly * * Prepay Credit for Android is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * Prepay Credit for Android is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with Prepay Credit for Android. If not, see <http://www.gnu.org/licenses/>. * * Report bugs or new features at: https://github.com/DamienOReilly/PrepayCredit * Contact the author at: damienreilly@gmail.com */ package damo.three.ie.fragment; import android.app.Activity; import android.content.Context; import android.content.SharedPreferences; import android.os.Bundle; import android.preference.PreferenceManager; import android.support.v4.app.Fragment; import damo.three.ie.prepay.UpdateAsyncTask; import damo.three.ie.prepayusage.BasicUsageItem; import damo.three.ie.prepayusage.UsageItem; import damo.three.ie.util.JSONUtils; import damo.three.ie.util.UsageUtils; import org.joda.time.DateTime; import org.json.JSONArray; import java.util.List; /** * Fragment which deals with initiating the fetching of users usages and reporting it back to the PrepayCreditActivity. */ public class UpdateFragment extends Fragment { private Boolean working = false; private List<UsageItem> items = null; private DateTime dateTimeNow = null; private SharedPreferences sharedPref = null; private SharedPreferences usageSharedPref = null; private AccountProcessorListener accountProcessorListener; /** * Hold a reference to the parent Activity so we can report the task's * current progress and results. The Android framework will pass us a * reference to the newly created Activity after each configuration change. */ @Override public void onAttach(Activity activity) { super.onAttach(activity); if (!(activity instanceof AccountProcessorListener)) { throw new IllegalStateException("Activity must implement AccountProcessorListener"); } accountProcessorListener = (AccountProcessorListener) activity; sharedPref = PreferenceManager.getDefaultSharedPreferences(getActivity().getApplicationContext()); usageSharedPref = getActivity().getApplicationContext().getSharedPreferences("damo.three.ie.previous_usage", Context.MODE_PRIVATE); } /** * Set the callback to null so we don't accidentally leak the Activity * instance. */ @Override public void onDetach() { super.onDetach(); /* prevents us holding onto an activity which has been destroyed. Should stop potential memory leak */ accountProcessorListener = null; } /** * This method will only be called once when the retained Fragment is first * created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setRetainInstance(true); } /** * Kick off the Usage fetcher. */ public void execute() { working = true; items = null; UpdateAsyncTask updateAsyncTask = new UpdateAsyncTask(this); updateAsyncTask.execute(); } /** * Pass back exception to {@link damo.three.ie.activity.PrepayCreditActivity} * * @param exception The exception to pass back */ public void reportBackException(Exception exception) { working = false; if (accountProcessorListener != null) { accountProcessorListener.onAccountUsageExceptionReceived(exception); } } /** * Pass back exception to {@link damo.three.ie.activity.PrepayCreditActivity} * * @param usages Usages retrieved */ public void reportBackUsages(JSONArray usages) { working = false; items = JSONUtils.jsonToUsageItems(usages); dateTimeNow = new DateTime(); boolean notificationsEnabled = sharedPref.getBoolean("notification", true); SharedPreferences.Editor editor = usageSharedPref.edit(); editor.putLong("last_refreshed_milliseconds", dateTimeNow.getMillis()); editor.putString("usage_info", usages.toString()); editor.commit(); /** * Check if reference to parent activity is null, if it is, app was closed, * and Activity was not re-created. i.e. user manually closed the app while fetching * data **/ if (accountProcessorListener != null) { accountProcessorListener.onAccountUsageReceived(); List<BasicUsageItem> basicUsageItems = UsageUtils.getAllBasicItems(items); UsageUtils.registerInternetExpireAlarm(getActivity().getApplicationContext(), basicUsageItems, notificationsEnabled, true); } } /** * Provide a method to the activity to know if the ASync task is still working * In-case the Activity was re-created. * * @return Are we currently fetching usage */ public Boolean isWorking() { return working; } /** * @return Usages */ public List<UsageItem> getItems() { return items; } /** * @return DateTime the usages were fetched */ public DateTime getDateTime() { return dateTimeNow; } /** * Callback interface through which the fragment will report the task's * progress and results back to the Activity. */ public interface AccountProcessorListener { void onAccountUsageReceived(); void onAccountUsageExceptionReceived(Exception exception); } }