FP2-1214: After a successful update the updater still shows there is an update present

Fingerprint versioning enabled by changing version number type from int to String.

Change-Id: Ifc6978f0fcc54fb52fa7efe7196fe5e9ae9c0cbe
diff --git a/res/values/config.xml b/res/values/config.xml
index 1b3970b..4b6012b 100644
--- a/res/values/config.xml
+++ b/res/values/config.xml
@@ -7,7 +7,7 @@
 	<string name="config_xml" translatable="false">.xml</string>
 	<string name="config_sig" translatable="false">.sig</string>
 	
-    <integer name="defaultVersionNumber">1</integer>
+    <string name="defaultVersionNumber">1</string>
     <string name="defaultVersionName" translatable="false">Almond</string>
     <string name="defaultBuildNumber" translatable="false">1.0</string>
     <string name="defaultBuildDate" translatable="false">0</string>
diff --git a/src/com/fairphone/updater/FairphoneUpdater.java b/src/com/fairphone/updater/FairphoneUpdater.java
index c86898d..3976b89 100644
--- a/src/com/fairphone/updater/FairphoneUpdater.java
+++ b/src/com/fairphone/updater/FairphoneUpdater.java
@@ -200,13 +200,13 @@
     void getSelectedVersionFromSharedPreferences()
     {
         String versionImageType = mSharedPreferences.getString(PREFERENCE_SELECTED_VERSION_TYPE, "");
-        int versionNumber = mSharedPreferences.getInt(PREFERENCE_SELECTED_VERSION_NUMBER, 0);
+        String versionNumber = mSharedPreferences.getString(PREFERENCE_SELECTED_VERSION_NUMBER, "0");
         mSelectedVersion = UpdaterData.getInstance().getVersion(versionImageType, versionNumber);
     }
 
     void getSelectedStoreFromSharedPreferences()
     {
-        int storeNumber = mSharedPreferences.getInt(PREFERENCE_SELECTED_STORE_NUMBER, -1);
+        String storeNumber = mSharedPreferences.getString(PREFERENCE_SELECTED_STORE_NUMBER, "-1");
         mSelectedStore = UpdaterData.getInstance().getStore(storeNumber);
     }
 
@@ -698,25 +698,25 @@
 
     public void setSelectedVersion(Version selectedVersion)
     {
-        int versionNumber = selectedVersion != null ? selectedVersion.getNumber() : 0;
+        String versionNumber = selectedVersion != null ? selectedVersion.getNumber() : "0";
         String versionImageType = selectedVersion != null ? selectedVersion.getImageType() : "";
 
         clearSelectedVersion(versionNumber, versionImageType);
 
         mSelectedVersion = UpdaterData.getInstance().getVersion(versionImageType, versionNumber);
-        clearSelectedStore(-1);
+        clearSelectedStore("-1");
     }
 
     public void clearSelectedItems()
     {
-        clearSelectedVersion(0, "");
-        clearSelectedStore(-1);
+        clearSelectedVersion("0", "");
+        clearSelectedStore("-1");
     }
 
-    private void clearSelectedVersion(int versionNumber, String versionImageType)
+    private void clearSelectedVersion(String versionNumber, String versionImageType)
     {
         Editor editor = mSharedPreferences.edit();
-        editor.putInt(PREFERENCE_SELECTED_VERSION_NUMBER, versionNumber);
+        editor.putString(PREFERENCE_SELECTED_VERSION_NUMBER, versionNumber);
         editor.putString(PREFERENCE_SELECTED_VERSION_TYPE, versionImageType);
         editor.commit();
 
@@ -725,18 +725,18 @@
 
     public void setSelectedStore(Store selectedStore)
     {
-        int storeNumber = selectedStore != null ? selectedStore.getNumber() : -1;
+        String storeNumber = selectedStore != null ? selectedStore.getNumber() : "-1";
 
         clearSelectedStore(storeNumber);
 
         mSelectedStore = UpdaterData.getInstance().getStore(storeNumber);
-        clearSelectedVersion(0, "");
+        clearSelectedVersion("0", "");
     }
 
-    private void clearSelectedStore(int storeNumber)
+    private void clearSelectedStore(String storeNumber)
     {
         Editor editor = mSharedPreferences.edit();
-        editor.putInt(PREFERENCE_SELECTED_STORE_NUMBER, storeNumber);
+        editor.putString(PREFERENCE_SELECTED_STORE_NUMBER, storeNumber);
         editor.commit();
 
         mSelectedStore = null;
diff --git a/src/com/fairphone/updater/data/DownloadableItem.java b/src/com/fairphone/updater/data/DownloadableItem.java
index 1513fca..e35f38c 100644
--- a/src/com/fairphone/updater/data/DownloadableItem.java
+++ b/src/com/fairphone/updater/data/DownloadableItem.java
@@ -16,19 +16,19 @@
 
 package com.fairphone.updater.data;
 
-import java.util.HashMap;
-import java.util.Map;
-
 import android.text.TextUtils;
 import android.util.Log;
 
+import java.util.HashMap;
+import java.util.Map;
+
 public abstract class DownloadableItem
 {
     private static final String TAG = DownloadableItem.class.getSimpleName();
 
     public static final String DEFAULT_NOTES_LANG = "en";
 
-    private int mNumber;
+    private String mNumber;
 
     private String mName;
 
@@ -46,7 +46,7 @@
 
     DownloadableItem()
     {
-        mNumber = 0;
+        mNumber = "";
         mName = "";
         mOTADownloadLink = "";
         mOTAMd5Sum = "";
@@ -70,25 +70,13 @@
         mReleaseNotesMap = other.mReleaseNotesMap;
     }
 
-    public int getNumber()
+    public String getNumber()
     {
         return mNumber;
     }
 
     public void setNumber(String number)
     {
-        try
-        {
-            this.mNumber = Integer.valueOf(number);
-        } catch (NumberFormatException e)
-        {
-            Log.w(TAG, "Error decoding version number. Defaulting to 0: " + e.getLocalizedMessage());
-            this.mNumber = 0;
-        }
-    }
-
-    public void setNumber(int number)
-    {
         this.mNumber = number;
     }
 
@@ -129,7 +117,7 @@
 
         if (item != null)
         {
-            result = this.mNumber > item.mNumber;
+            result = !this.mNumber.equals(item.mNumber);
         }
         else
         {
diff --git a/src/com/fairphone/updater/data/Store.java b/src/com/fairphone/updater/data/Store.java
index 0b5813e..e6b8a09 100644
--- a/src/com/fairphone/updater/data/Store.java
+++ b/src/com/fairphone/updater/data/Store.java
@@ -33,7 +33,7 @@
         int retVal;
         if (another != null)
         {
-            if (this.getNumber() > another.getNumber())
+            if (!this.getNumber().equals(another.getNumber()))
             {
                 retVal = 1;
             }
diff --git a/src/com/fairphone/updater/data/UpdaterData.java b/src/com/fairphone/updater/data/UpdaterData.java
index 3daacb2..fff710d 100644
--- a/src/com/fairphone/updater/data/UpdaterData.java
+++ b/src/com/fairphone/updater/data/UpdaterData.java
@@ -16,15 +16,15 @@
 
     private static UpdaterData mInstance;
 
-    private int mLatestAOSPVersionNumber;
+    private String mLatestAOSPVersionNumber;
 
-    private int mLatestFairphoneVersionNumber;
+    private String mLatestFairphoneVersionNumber;
 
-    private final Map<Integer, Version> mAOSPVersionMap;
+    private final Map<String, Version> mAOSPVersionMap;
 
-    private final Map<Integer, Version> mFairphoneVersionMap;
+    private final Map<String, Version> mFairphoneVersionMap;
     
-    private final Map<Integer, Store> mAppStoresMap;
+    private final Map<String, Store> mAppStoresMap;
 
     public static UpdaterData getInstance()
     {
@@ -37,8 +37,8 @@
 
     private UpdaterData()
     {
-        mLatestAOSPVersionNumber = 0;
-        mLatestFairphoneVersionNumber = 0;
+        mLatestAOSPVersionNumber = "0";
+        mLatestFairphoneVersionNumber = "0";
         mAOSPVersionMap = new HashMap<>();
         mFairphoneVersionMap = new HashMap<>();
         mAppStoresMap = new HashMap<>();
@@ -46,8 +46,8 @@
 
     public void resetUpdaterData()
     {
-        mLatestAOSPVersionNumber = 0;
-        mLatestFairphoneVersionNumber = 0;
+        mLatestAOSPVersionNumber = "0";
+        mLatestFairphoneVersionNumber = "0";
         mAOSPVersionMap.clear();
         mFairphoneVersionMap.clear();
         mAppStoresMap.clear();
@@ -58,16 +58,16 @@
         mLatestAOSPVersionNumber = getLatestVersionFromTag(latestVersion);
     }
 
-    private static int getLatestVersionFromTag(String latestVersion)
+    private static String getLatestVersionFromTag(String latestVersion)
     {
-        int latestVersionNumber;
+        String latestVersionNumber;
         try
         {
-            latestVersionNumber = Integer.valueOf(latestVersion);
+            latestVersionNumber = latestVersion;
         } catch (NumberFormatException e)
         {
             Log.w(TAG, "Error decoding latest version number. Defaulting to 0: " + e.getLocalizedMessage());
-            latestVersionNumber = 0;
+            latestVersionNumber = "0";
         }
         return latestVersionNumber;
     }
@@ -145,7 +145,7 @@
 	    return mapToOrderedStoreList(mAppStoresMap.values());
     }
 
-    public Version getVersion(String imageType, int versionNumber)
+    public Version getVersion(String imageType, String versionNumber)
     {
         Version version = null;
         if (Version.IMAGE_TYPE_AOSP.equalsIgnoreCase(imageType))
@@ -160,7 +160,7 @@
         return version;
     }
     
-    public Store getStore(int storeNumber)
+    public Store getStore(String storeNumber)
     {
         return mAppStoresMap.get(storeNumber);
     }
diff --git a/src/com/fairphone/updater/data/Version.java b/src/com/fairphone/updater/data/Version.java
index 29ba80a..8468515 100644
--- a/src/com/fairphone/updater/data/Version.java
+++ b/src/com/fairphone/updater/data/Version.java
@@ -45,7 +45,7 @@
 
     private final List<Integer> mDependencies;
 
-    public static final int ZIP_INSTALL_VERSION = 999;
+    public static final String ZIP_INSTALL_VERSION = "999";
 
     public Version()
     {
@@ -147,7 +147,7 @@
         int retVal;
         if (another != null)
         {
-            if (this.getNumber() < another.getNumber() && this.mImageType.equalsIgnoreCase(another.mImageType))
+            if (!this.getNumber().equals(another.getNumber()) && this.mImageType.equalsIgnoreCase(another.mImageType))
             {
                 retVal = 1;
             }
diff --git a/src/com/fairphone/updater/data/VersionParserHelper.java b/src/com/fairphone/updater/data/VersionParserHelper.java
index c2b7fcf..da466de 100644
--- a/src/com/fairphone/updater/data/VersionParserHelper.java
+++ b/src/com/fairphone/updater/data/VersionParserHelper.java
@@ -49,6 +49,8 @@
     private static final String CURRENT_ANDROID_VERSION = "fairphone.ota.android_version";
     private static final String CURRENT_VERSION_IMAGE_TYPE = "fairphone.ota.image_type";
     private static final String CURRENT_VERSION_BUILD_DATE = "ro.build.date.utc";
+    private static final String CURRENT_VERSION_FINGERPRINT = "ro.build.fingerprint";
+
 
     private static Version version;
     public static Version getDeviceVersion(Context context)
@@ -64,10 +66,10 @@
 
             try
             {
-                versionBuilder.setNumber(Integer.valueOf(getSystemData(context, CURRENT_VERSION_NUMBER, knownFPDevice)));
+                versionBuilder.setNumber(getSystemData(context, CURRENT_VERSION_FINGERPRINT, knownFPDevice));
             } catch (NumberFormatException e)
             {
-                int defaultVersionNumber = context.getResources().getInteger(R.integer.defaultVersionNumber);
+                String defaultVersionNumber = context.getResources().getString(R.string.defaultVersionNumber);
                 Log.w(TAG, "Error parsing current version number. Defaulting to " + defaultVersionNumber + ": " + e.getLocalizedMessage());
                 versionBuilder.setNumber(defaultVersionNumber);
             }
@@ -92,7 +94,7 @@
 		String result;
 	    switch (property) {
 		    case CURRENT_VERSION_NUMBER:
-			    result = Utils.getprop(CURRENT_VERSION_NUMBER, useDefaults ? String.valueOf(context.getResources().getInteger(R.integer.defaultVersionNumber)) : "");
+			    result = Utils.getprop(CURRENT_VERSION_NUMBER, useDefaults ? String.valueOf(context.getResources().getString(R.string.defaultVersionNumber)) : "");
 			    break;
 		    case CURRENT_VERSION_NAME:
 			    result = Utils.getprop(CURRENT_VERSION_NAME, useDefaults ? context.getResources().getString(R.string.defaultVersionName) : "");
@@ -112,6 +114,9 @@
 		    case CURRENT_BETA_STATUS:
 			    result = Utils.getprop(CURRENT_BETA_STATUS, useDefaults ? context.getResources().getString(R.string.defaultBetaStatus) : "0");
 			    break;
+            case CURRENT_VERSION_FINGERPRINT:
+                result = Utils.getprop(CURRENT_VERSION_FINGERPRINT, useDefaults ? "" : ""); // TODO: define default value for fingerprint
+                break;
 		    default:
 			    result = "";
 			    break;
diff --git a/src/com/fairphone/updater/tools/Utils.java b/src/com/fairphone/updater/tools/Utils.java
index 1fc64cc..bb4e038 100644
--- a/src/com/fairphone/updater/tools/Utils.java
+++ b/src/com/fairphone/updater/tools/Utils.java
@@ -80,7 +80,7 @@
     private static final double PERCENT_100 = 100d;
     private static final char CHAR_SPACE = ' ';
     private static final char CHAR_ZERO = '0';
-    public static final int GAPPS_STORE_NUMBER = 0;
+    public static final String GAPPS_STORE_NUMBER = "0";
 
     private static double getPartitionSizeInGBytes(File path)
     {
@@ -371,7 +371,6 @@
         if (item != null)
         {
             filename.append(type);
-            filename.append(item.getNumber());
         }
         filename.append(".zip");
         return filename;