Android Open Source - elementary Update Service






From Project

Back to project page elementary.

License

The source code is released under:

MIT License

If you think the Android project elementary listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

/*
 * The MIT License (MIT)/*from ww w  .j a  v  a2 s .  c  om*/
 * Copyright  2012 Steve Guidetti
 * 
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the Software??), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 * 
 * The above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 * 
 * THE SOFTWARE IS PROVIDED AS IS??, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 * THE SOFTWARE.
 */

package com.ultramegatech.ey;

import android.app.IntentService;
import android.content.ContentResolver;
import android.content.ContentUris;
import android.content.ContentValues;
import android.content.Intent;
import android.content.SharedPreferences;
import android.net.Uri;
import android.preference.PreferenceManager;
import android.util.Log;
import com.ultramegatech.ey.provider.Elements;
import com.ultramegatech.ey.util.HttpHelper;
import java.util.Iterator;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

/**
 * This background service checks for and applies data updates.
 *
 * @author Steve Guidetti
 */
public class UpdateService extends IntentService {
    private static final String TAG = "UpdateService";

    /* SharedPreferences keys */
    private static final String KEY_VERSION = "version";
    private static final String KEY_LAST_CHECK = "last_update_check";
    
    /* Minimum number of ms between update checks */
    private static final long CHECK_INTERVAL = 24 * 60 * 60 * 1000;
    
    public UpdateService() {
        super(TAG);
    }

    @Override
    protected void onHandleIntent(Intent intent) {
        if(!HttpHelper.isConnected(this)) {
            return;
        }
        
        final SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
        
        final long lastCheck = preferences.getLong(KEY_LAST_CHECK, 0);
        final long now = System.currentTimeMillis();
        if(now - lastCheck < CHECK_INTERVAL) {
            return;
        }
        
        Log.v(TAG, "Checking for updates");
        
        final int version = preferences.getInt(KEY_VERSION, 0);
        final int newVersion = HttpHelper.getVersion();
        if(newVersion > version) {
            Log.v(TAG, "Downloading updates...");
            
            final ContentValues[] valuesArray = fetchElementData(newVersion);
            if(valuesArray == null) {
                return;
            }

            final ContentResolver cr = getContentResolver();
            Uri uri;
            int changed;
            for(int i = 0; i < valuesArray.length; i++) {
                uri = ContentUris.withAppendedId(Elements.CONTENT_URI_NUMBER,
                        valuesArray[i].getAsLong(Elements.NUMBER));
                changed = cr.update(uri, valuesArray[i], null, null);

                if(changed == 0) {
                    cr.insert(Elements.CONTENT_URI, valuesArray[i]);
                }
            }

            preferences.edit().putInt(KEY_VERSION, newVersion).commit();
            
            Log.v(TAG, "Update completed successfully");
        }
        
        preferences.edit().putLong(KEY_LAST_CHECK, System.currentTimeMillis()).commit();
    }
    
    /**
     * Download and parse the JSON data from the remote server.
     * 
     * @param version The version number of the data to request
     * @return Array of ContentValues objects containing element data
     */
    private static ContentValues[] fetchElementData(int version) {
        try {
            final JSONArray elementsArray = new JSONArray(HttpHelper.getElementData(version));
            final int len = elementsArray.length();

            final ContentValues[] valuesArray = new ContentValues[len];
            for(int i = 0; i < len; i++) {
                valuesArray[i] = parseJsonObject(elementsArray.getJSONObject(i));
            }
            
            return valuesArray;
        } catch(JSONException e) {
            Log.d(TAG, "Error parsing JSON");
        }
        
        return null;
    }
    
    /**
     * Convert a JSONObject to a ContentValues object.
     * 
     * @param object
     * @return ContentValues containing data from the JSONObject
     * @throws JSONException 
     */
    private static ContentValues parseJsonObject(JSONObject object) throws JSONException {
        final ContentValues values = new ContentValues();
        
        final Iterator keys = object.keys();
        while(keys.hasNext()) {
            addValue(values, object, keys.next().toString());
        }
        
        return values;
    }
    
    /**
     * Add a value from a JSONObject to a ContentValues object in the appropriate data type.
     * 
     * @param to
     * @param from
     * @param key The key of the entry to process
     * @throws JSONException 
     */
    private static void addValue(ContentValues to, JSONObject from, String key)
            throws JSONException {
        switch(Elements.getColumnType(key)) {
            case INTEGER:
            case BOOLEAN:
                to.put(key, from.getInt(key));
                break;
            case REAL:
                to.put(key, from.getDouble(key));
                break;
            case TEXT:
                to.put(key, from.getString(key));
                break;
        }
    }
}




Java Source Code List

com.ultramegatech.ey.ElementDetailsActivity.java
com.ultramegatech.ey.ElementListActivity.java
com.ultramegatech.ey.EyPreferenceActivity.java
com.ultramegatech.ey.PeriodicTableActivity.java
com.ultramegatech.ey.UpdateService.java
com.ultramegatech.ey.provider.DatabaseOpenHelper.java
com.ultramegatech.ey.provider.ElementsProvider.java
com.ultramegatech.ey.provider.Elements.java
com.ultramegatech.ey.util.CommonMenuHandler.java
com.ultramegatech.ey.util.ElementUtils.java
com.ultramegatech.ey.util.HttpHelper.java
com.ultramegatech.util.ActionBarWrapper.java
com.ultramegatech.util.Dynamics.java
com.ultramegatech.util.GlideDynamics.java
com.ultramegatech.util.UnitUtils.java
com.ultramegatech.widget.AspectQuotient.java
com.ultramegatech.widget.DynamicZoomControl.java
com.ultramegatech.widget.PeriodicTableBlock.java
com.ultramegatech.widget.PeriodicTableLegend.java
com.ultramegatech.widget.PeriodicTableTouchListener.java
com.ultramegatech.widget.PeriodicTableView.java
com.ultramegatech.widget.ZoomState.java