com.asksven.betterbatterystats.data.KbReader.java Source code

Java tutorial

Introduction

Here is the source code for com.asksven.betterbatterystats.data.KbReader.java

Source

/*
 * Copyright (C) 2011-2012 asksven
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.asksven.betterbatterystats.data;

/**
 * @author sven
 *
 */

import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.List;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;

import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.preference.PreferenceManager;
import android.util.Log;

import com.asksven.betterbatterystats.LogSettings;
import com.asksven.betterbatterystats.StatsActivity;
import com.asksven.betterbatterystats.services.KbReaderService;
import com.asksven.betterbatterystats.services.WriteBootReferenceService;
import com.google.gson.Gson;

public class KbReader {
    private static final String URL = "http://asksven.github.com/BetterBatteryStats-Knowledge-Base/kb_v1.0.json";

    private static long MAX_CACHE_AGE_MILLIS = 1000 * 60 * 1440; // 24 hours

    private static final String TAG = "KbReader";

    private static KbReader m_singleton = null;

    private KbData m_cache = null;

    private KbReader() {

    }

    public static KbReader getInstance() {
        if (m_singleton == null) {
            m_singleton = new KbReader();
        }

        return m_singleton;
    }

    public KbData read(Context ctx) {
        if (LogSettings.DEBUG) {
            Log.i(TAG, "read called");
        }
        if (m_cache == null) {
            if (LogSettings.DEBUG) {
                Log.i(TAG, "Cache is empty");
            }
            SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(ctx);

            // first check if cache is present and not outdated
            KbDbHelper myDB = KbDbHelper.getInstance(ctx);

            List<KbEntry> myEntries = myDB.fetchAllRows();

            // if cache exists and is not outdaten use it
            long cachedMillis = sharedPrefs.getLong("cache_updated", 0);
            long dateMillis = Calendar.getInstance().getTimeInMillis();
            boolean useCaching = sharedPrefs.getBoolean("cache_kb", true);

            // if cache is not empty, cache not older than 24 hours and caching is on
            if ((myEntries != null) && (myEntries.size() > 0) && (useCaching)
                    && ((dateMillis - cachedMillis) < MAX_CACHE_AGE_MILLIS)) {
                m_cache = new KbData();
                m_cache.setEntries(myEntries);
            } else {
                if (LogSettings.DEBUG) {
                    Log.i(TAG, "Starting service to retrieve KB");
                }
                // start async service to retrieve KB if not already running
                if (!KbReaderService.isTransactional()) {
                    Intent serviceIntent = new Intent(ctx, KbReaderService.class);
                    ctx.startService(serviceIntent);
                }
            }
        } else {
            if (LogSettings.DEBUG) {
                Log.i(TAG, "returning cached KB");
            }
        }
        return m_cache;
    }
}