content: /*
   * CDDL HEADER START
   *
   * The contents of this file are subject to the terms of the Common Development
   * and Distribution License (the "License").
   * You may not use this file except in compliance with the License.
   *
   * You can obtain a copy of the license at
   * src/com/vodafone360/people/VODAFONE.LICENSE.txt or
   * http://github.com/360/360-Engine-for-Android
   * See the License for the specific language governing permissions and
   * limitations under the License.
   *
   * When distributing Covered Code, include this CDDL HEADER in each file and
   * include the License file at src/com/vodafone360/people/VODAFONE.LICENSE.txt.
   * If applicable, add the following below this CDDL HEADER, with the fields
   * enclosed by brackets "[]" replaced with your own identifying information:
   * Portions Copyright [yyyy] [name of copyright owner]
   *
   * CDDL HEADER END
   *
   * Copyright 2010 Vodafone Sales & Services Ltd.  All rights reserved.
   * Use is subject to license terms.
   */
  
  package com.vodafone360.people.engine.upgrade;
  
  import android.content.Context;
  import android.content.SharedPreferences;
  
  import com.vodafone360.people.ApplicationCache;
  import com.vodafone360.people.Settings;
  import com.vodafone360.people.utils.LogUtils;
  import com.vodafone360.people.utils.VersionUtils;
  
  /**
   * Utility class for upgrade related functionality.
   */
  public class UpgradeUtils {
  
      /***
       * Return the PREFS_CHECK_FREQUENCY Preference value.
       * 
       * @param context Context
       * @return Current value for PREFS_CHECK_FREQUENCY or the
       *         PREFS_CHECK_FREQUENCY_DEFAULT
       */
      public static long getCheckFrequency(Context context) {
          SharedPreferences mSharedPreferences = context.getSharedPreferences(
                  ApplicationCache.PREFS_NAME, Context.MODE_WORLD_WRITEABLE);
          return ApplicationCache.FREQUENCY_SETTING_LONG[mSharedPreferences.getInt(
                  ApplicationCache.PREFS_CHECK_FREQUENCY,
                  Settings.PREFS_CHECK_FREQUENCY_DEFAULT)];
      }
  
      /**
       * Caches the mUpgradeStatus value if set, but clears the cache if NULL.
       * 
       * @param context - the context to use
       * @param upgradeStatus - the upgrade properties - can be null
       */
      protected static void cacheUpdate(Context context, UpgradeStatus upgradeStatus) {
          SharedPreferences mSharedPreferences = context.getSharedPreferences(
                  ApplicationCache.PREFS_NAME, Context.MODE_WORLD_WRITEABLE);
          SharedPreferences.Editor mEditor = mSharedPreferences.edit();
  
          if (upgradeStatus != null) {
              LogUtils.logV("UpgradeUtils.cacheUpdate() Save upgradeStatus info");
              mEditor.putInt(ApplicationCache.PREFS_UPGRADE_LATEST_VERSION, upgradeStatus
                      .getLatestVersion());
              mEditor.putString(ApplicationCache.PREFS_UPGRADE_URL, upgradeStatus
                      .getUpgradeUrl());
              mEditor.putString(ApplicationCache.PREFS_UPGRADE_TEXT, upgradeStatus
                      .getUpgradeText(context));
              mEditor.putLong(ApplicationCache.PREFS_LAST_CHECKED_DATE, System
                      .currentTimeMillis());
          } else {
              LogUtils.logV("UpgradeUtils.cacheUpdate() Remove upgradeStatus info");
              mEditor.remove(ApplicationCache.PREFS_LAST_DIALOG_DATE);
              mEditor.remove(ApplicationCache.PREFS_UPGRADE_LATEST_VERSION);
              mEditor.remove(ApplicationCache.PREFS_UPGRADE_URL);
              mEditor.remove(ApplicationCache.PREFS_UPGRADE_TEXT);
              mEditor.remove(ApplicationCache.PREFS_LAST_CHECKED_DATE);
          }
  
          mEditor.commit();
      }
  
      /**
       * Gets an UpgradeStatus object, if one is stored in the Cache.
       * 
       * @param context - the context to use
       * @param checkFrequencyMillis - the frequency with which to check
       * @return the cached UpgradeStatus or null if none available
       */
      protected static UpgradeStatus getCachedUpdate(Context context, long checkFrequencyMillis) {
          SharedPreferences mSharedPreferences = context.getSharedPreferences(
                  ApplicationCache.PREFS_NAME, Context.MODE_WORLD_WRITEABLE);
          long mLastCheckedDate = mSharedPreferences.getLong(
                  ApplicationCache.PREFS_LAST_CHECKED_DATE, -1);
          UpgradeStatus mUpgradeStatus;
  
          if ((mLastCheckedDate == -1)
                  || checkFrequencyMillis < UpgradeUtils.getAgeMillis(mLastCheckedDate)) {
              // Invalid cache (do not check, to old, empty or never checked)
              // LogUtils.logV("UpgradeUtils.getCachedUpdate() No upgrade status in cache - mLastCheckedDate["+mLastCheckedDate+"]");
              return null;
  
          }
  
          mUpgradeStatus = new UpgradeStatus();
          mUpgradeStatus.setLatestVersion(mSharedPreferences.getInt(
                  ApplicationCache.PREFS_UPGRADE_LATEST_VERSION, -1));
          mUpgradeStatus.setUpgradeUrl(mSharedPreferences.getString(
                  ApplicationCache.PREFS_UPGRADE_URL, null));
          mUpgradeStatus.setUpgradeText(mSharedPreferences.getString(
                  ApplicationCache.PREFS_UPGRADE_TEXT, null));
  
          if (mUpgradeStatus.getLatestVersion() == -1) {
              // LogUtils.logV("UpgradeUtils.getCachedUpdate() No cached upgrade status");
              return null;
          } else if (mUpgradeStatus.getLatestVersion() <= VersionUtils.getPackageVersionCode(context)) {
              LogUtils
                      .logW("UpgradeUtils.getCachedUpdate() Old version status should not have been cached!");
              return null;
          } else {
              return mUpgradeStatus;
          }
      }
  
      /**
       * Returns the age of a given System.currentTimeMillis() value.
       * 
       * @param time Time to check
       * @return Age in milliseconds
       */
      protected static long getAgeMillis(long time) {
          return System.currentTimeMillis() - time;
      }
  }
  