/* * Copyright (C) 2013 Fairphone Project * * 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.fairphone.updater; import android.content.Context; import android.content.SharedPreferences; import android.content.SharedPreferences.Editor; import android.content.res.Resources; import android.text.TextUtils; import android.util.Log; public class Version { public static final String FAIRPHONE_UPDATE_VERSION_NUMBER = "FairphoneUpdateVersionNumber"; public static final String FAIRPHONE_UPDATE_VERSION_NAME = "FairphoneUpdateVersionName"; public static final String FAIRPHONE_UPDATE_VERSION_ANDROID = "FairphoneUpdateVersionAndroid"; public static final String FAIRPHONE_UPDATE_VERSION_DOWNLOAD_LINK = "FairphoneUpdateVersionDownloadLink"; public static final String FAIRPHONE_UPDATE_VERSION_MD5 = "FairphoneUpdateVersionMD5"; private String mNumber; private String mName; private String mAndroid; private String mDownloadLink; private String mMd5Sum; private String mChangeLog; public static Version getVersionFromSharedPreferences(Context context) { Version version = new Version(); SharedPreferences sharedPrefs = context.getSharedPreferences( FairphoneUpdater.FAIRPHONE_UPDATER_PREFERENCES, Context.MODE_PRIVATE); Resources resources = context.getResources(); String defaultVersionNumber = resources .getString(R.string.defaultVersionNumber); version.setNumber(sharedPrefs.getString( FAIRPHONE_UPDATE_VERSION_NUMBER, defaultVersionNumber)); String defaultVersionName = resources .getString(R.string.defaultVersionName); version.setName(sharedPrefs.getString(FAIRPHONE_UPDATE_VERSION_NAME, defaultVersionName)); String defaultVersionAndroid = resources .getString(R.string.defaultAndroidVersionNumber); version.setAndroid(sharedPrefs.getString( FAIRPHONE_UPDATE_VERSION_ANDROID, defaultVersionAndroid)); version.setDownloadLink(sharedPrefs.getString( FAIRPHONE_UPDATE_VERSION_DOWNLOAD_LINK, "")); version.setMd5Sum(sharedPrefs.getString(FAIRPHONE_UPDATE_VERSION_MD5, "")); if (TextUtils.isEmpty(version.getMd5Sum()) || TextUtils.isEmpty(version.getMd5Sum())) { return null; } return version; } public void saveToSharedPreferences(Context context) { SharedPreferences sharedPrefs = context.getSharedPreferences( FairphoneUpdater.FAIRPHONE_UPDATER_PREFERENCES, Context.MODE_PRIVATE); Editor editor = sharedPrefs.edit(); editor.putString(FAIRPHONE_UPDATE_VERSION_NUMBER, getNumber()); editor.putString(FAIRPHONE_UPDATE_VERSION_NAME, getName()); editor.putString(FAIRPHONE_UPDATE_VERSION_ANDROID, getAndroid()); editor.putString(FAIRPHONE_UPDATE_VERSION_DOWNLOAD_LINK, getDownloadLink()); editor.putString(FAIRPHONE_UPDATE_VERSION_MD5, getMd5Sum()); editor.commit(); } public String getNumber() { return mNumber; } public void setNumber(String number) { this.mNumber = number; } public String getName() { return mName; } public void setName(String mName) { this.mName = mName; } public String getDownloadLink() { return mDownloadLink; } public void setDownloadLink(String mDownloadLink) { this.mDownloadLink = mDownloadLink; } public String getMd5Sum() { return mMd5Sum; } public void setMd5Sum(String mMd5Sum) { this.mMd5Sum = mMd5Sum; } public String getChangeLog() { return mChangeLog; } public void setChangeLog(String mChangeLog) { this.mChangeLog = mChangeLog; } public String getAndroid() { return mAndroid; } public void setAndroid(String mAndroid) { this.mAndroid = mAndroid; } public boolean isNewerVersionThan(Version version) { boolean result = false; try { result = Version .isNewVersion(version.getNumber(), this.getNumber()); } catch (Throwable t) { Log.e(Version.class.getSimpleName(), "Invalid Number for Version", t); } return result; } private static boolean isNewVersion(String versionA, String versionB) throws IllegalArgumentException { int[] versionAints = getVersionInt(versionA); int[] versionBints = getVersionInt(versionB); if (versionAints[0] == versionBints[0]) { return versionAints[1] < versionBints[1]; } return versionAints[0] < versionBints[0]; } private static int[] getVersionInt(String version) { if (version == null) { throw new IllegalArgumentException("String is null"); } String[] intStrs = version.split("\\."); if (intStrs == null || intStrs.length != 2) { throw new IllegalArgumentException("String " + version + " not have the correct format [X.Y]"); } int[] ints = new int[2]; try { ints[0] = Integer.parseInt(intStrs[0]); ints[1] = Integer.parseInt(intStrs[1]); } catch (Throwable t) { throw new IllegalArgumentException( "String " + version + " should contain numbers separated by a dot [ReleaseNumber.VersionNumber]"); } return ints; } public void deleteFromSharedPreferences(Context context) { setNumber(null); setName(null); setAndroid(null); setDownloadLink(null); setMd5Sum(null); saveToSharedPreferences(context); } }