blob: 015e8959a89c896f897b253e419da66bd8a6ea32 [file] [log] [blame]
/*
* 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 java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
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 implements Comparable<Version> {
public static final String DEFAULT_RELEASE_NOTES_LANG = "en";
private static final String TAG = Version.class.getSimpleName();
private static final String DEPENDENCY_SEPARATOR = ",";
public static final String FAIRPHONE_VERSION_NUMBER = "FairphoneUpdateVersionNumber";
public static final String FAIRPHONE_VERSION_NAME = "FairphoneUpdateVersionName";
public static final String FAIRPHONE_VERSION_BUILD_NUMBER = "FairphoneUpdateVersionBuildNumber";
public static final String FAIRPHONE_ANDROID_VERSION = "FairphoneUpdateAndroidVersion";
public static final String FAIRPHONE_VERSION_OTA_DOWNLOAD_LINK = "FairphoneUpdateVersionOTADownloadLink";
public static final String FAIRPHONE_VERSION_THUMBNAIL_DOWNLOAD_LINK = "FairphoneUpdateVersionThumbnailDownloadLink";
public static final String FAIRPHONE_VERSION_OTA_MD5 = "FairphoneUpdateVersionOTAMD5";
public static final String IMAGE_TYPE_AOSP = "AOSP";
public static final String IMAGE_TYPE_FAIRPHONE = "FAIRPHONE";
private int mNumber;
private String mName;
private String mAndroidVersion;
private String mOTADownloadLink;
private String mOTAMd5Sum;
private String mBuildNumber;
private Map<String,String> mReleaseNotesMap;
private String mReleaseDate;
private String mThumbnailImageLink;
private ArrayList<Integer> mDependencies;
private String mImageType;
private boolean mErasePartitionsWarning;
public Version() {
mDependencies = new ArrayList<Integer>();
mReleaseNotesMap = new HashMap<String, String>();
mNumber = 0;
mName = "";
mAndroidVersion = "";
mOTADownloadLink = "";
mOTAMd5Sum = "";
mBuildNumber = "";
mReleaseDate = "";
mThumbnailImageLink = "";
mImageType = IMAGE_TYPE_FAIRPHONE;
mErasePartitionsWarning = false;
}
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();
int defaultVersionNumber = resources.getInteger(R.integer.defaultVersionNumber);
version.setNumber(sharedPrefs.getInt(FAIRPHONE_VERSION_NUMBER, defaultVersionNumber));
String defaultVersionName = resources.getString(R.string.defaultVersionName);
version.setName(sharedPrefs.getString(FAIRPHONE_VERSION_NAME, defaultVersionName));
String defaultVersionBuildNumber = resources.getString(R.string.defaultBuildNumber);
version.setBuildNumber(sharedPrefs.getString(FAIRPHONE_VERSION_BUILD_NUMBER,
defaultVersionBuildNumber));
String defaultVersionAndroid = resources.getString(R.string.defaultAndroidVersionNumber);
version.setAndroidVersion(sharedPrefs.getString(FAIRPHONE_ANDROID_VERSION,
defaultVersionAndroid));
version.setDownloadLink(sharedPrefs.getString(FAIRPHONE_VERSION_OTA_DOWNLOAD_LINK, ""));
version.setThumbnailLink(sharedPrefs.getString(FAIRPHONE_VERSION_THUMBNAIL_DOWNLOAD_LINK,
""));
version.setMd5Sum(sharedPrefs.getString(FAIRPHONE_VERSION_OTA_MD5, ""));
if (TextUtils.isEmpty(version.getMd5Sum()) || TextUtils.isEmpty(version.getMd5Sum())) {
return null;
}
version.setEraseAllPartitionWarning(false);
return version;
}
public void saveToSharedPreferences(Context context) {
SharedPreferences sharedPrefs = context.getSharedPreferences(
FairphoneUpdater.FAIRPHONE_UPDATER_PREFERENCES, Context.MODE_PRIVATE);
Editor editor = sharedPrefs.edit();
editor.putInt(FAIRPHONE_VERSION_NUMBER, getNumber());
editor.putString(FAIRPHONE_VERSION_NAME, getName());
editor.putString(FAIRPHONE_ANDROID_VERSION, getAndroidVersion());
editor.putString(FAIRPHONE_VERSION_BUILD_NUMBER, getBuildNumber());
editor.putString(FAIRPHONE_VERSION_OTA_DOWNLOAD_LINK, getDownloadLink());
editor.putString(FAIRPHONE_VERSION_THUMBNAIL_DOWNLOAD_LINK, getThumbnailLink());
editor.putString(FAIRPHONE_VERSION_OTA_MD5, getMd5Sum());
editor.commit();
}
public boolean hasEraseAllPartitionWarning(){
return mErasePartitionsWarning;
}
public void setEraseAllPartitionWarning(boolean erasePartitionsWarning){
mErasePartitionsWarning = erasePartitionsWarning;
}
public int getNumber() {
return mNumber;
}
public void setNumber(String number) {
try {
this.mNumber = Integer.valueOf(number);
} catch (NumberFormatException e) {
this.mNumber = 0;
}
}
public void setNumber(int number) {
this.mNumber = number;
}
public String getName() {
return mName;
}
public void setName(String mName) {
this.mName = mName;
}
public String getDownloadLink() {
return mOTADownloadLink;
}
public void setDownloadLink(String mDownloadLink) {
this.mOTADownloadLink = mDownloadLink;
}
public String getMd5Sum() {
return mOTAMd5Sum;
}
public void setMd5Sum(String mMd5Sum) {
this.mOTAMd5Sum = mMd5Sum;
}
public String getAndroidVersion() {
return mAndroidVersion;
}
public void setAndroidVersion(String mAndroid) {
this.mAndroidVersion = mAndroid;
}
public boolean isNewerVersionThan(Version version) {
boolean result = false;
try {
result = this.getNumber() > version.getNumber();
} catch (Throwable t) {
Log.e(Version.class.getSimpleName(), "Invalid Number for Version", t);
}
return result;
}
public void deleteFromSharedPreferences(Context context) {
setNumber(1);
setName(null);
setBuildNumber(null);
setAndroidVersion(null);
resetReleaseNotes();
setReleaseDate(null);
setMd5Sum(null);
setThumbnailLink(null);
setDownloadLink(null);
saveToSharedPreferences(context);
}
public void setBuildNumber(String buildNumber) {
mBuildNumber = buildNumber;
}
public String getBuildNumber() {
return mBuildNumber;
}
public void setReleaseNotes(String language, String releaseNotes) {
mReleaseNotesMap.put(language.toLowerCase(), releaseNotes);
}
public String getReleaseNotes(String language) {
String releaseNotes = "";
if(mReleaseNotesMap.containsKey(language)){
releaseNotes = mReleaseNotesMap.get(language);
}else if(mReleaseNotesMap.containsKey(DEFAULT_RELEASE_NOTES_LANG)){
releaseNotes = mReleaseNotesMap.get(DEFAULT_RELEASE_NOTES_LANG);
}
return TextUtils.isEmpty(releaseNotes) ? "" : releaseNotes;
}
public void resetReleaseNotes(){
mReleaseNotesMap.clear();
}
public void setReleaseDate(String releaseDate) {
mReleaseDate = releaseDate;
}
public String getReleaseDate() {
return mReleaseDate;
}
public void setThumbnailLink(String thumbnailImageLink) {
mThumbnailImageLink = thumbnailImageLink;
}
public String getThumbnailLink() {
return mThumbnailImageLink;
}
public void setVersionDependencies(String dependencyList) {
if (TextUtils.isEmpty(dependencyList)) {
mDependencies.clear();
} else {
String[] dependencies = dependencyList.split(DEPENDENCY_SEPARATOR);
for (String dependency : dependencies) {
try {
mDependencies.add(Integer.valueOf(dependency));
} catch (NumberFormatException e) {
Log.e(TAG, "Invalid dependency");
}
}
}
}
public ArrayList<Integer> getVersionDependencies() {
return mDependencies;
}
public void setImageType(String imageType) {
mImageType = imageType;
}
public String getImageType() {
return mImageType;
}
public String getImageTypeDescription(Resources resources) {
return Version.getImageTypeDescription(mImageType, resources);
}
public static String getImageTypeDescription(String imageType, Resources resources) {
String description = resources.getString(R.string.fairphone);
if(imageType.equalsIgnoreCase(IMAGE_TYPE_AOSP)){
description = resources.getString(R.string.android);
}
if(imageType.equalsIgnoreCase(IMAGE_TYPE_FAIRPHONE)){
description = resources.getString(R.string.fairphone);
}
return description;
}
public String getAndroidVersion(Resources resources) {
String retVal = "";
if(!TextUtils.isEmpty(mAndroidVersion)){
StringBuilder sb = new StringBuilder();
sb.append(resources.getString(R.string.android));
sb.append(" ");
sb.append(mAndroidVersion);
retVal = sb.toString();
}
return retVal;
}
@Override
public int compareTo(Version another) {
int retVal;
if (another != null) {
if (this.getNumber() < another.getNumber()) {
retVal = 1;
} else if (this.getNumber() == another.getNumber()) {
retVal = 0;
} else {
retVal = -1;
}
} else {
retVal = 1;
}
return retVal;
}
}