FP2-1474: Human readable version name in Fairphone Updater
Fixes the human readable version name in Fairphone Updater.
Change-Id: I5f39c4ad6fb866e09774af3ef54bfd46b5c57dd2
diff --git a/src/com/fairphone/updater/FairphoneUpdater.java b/src/com/fairphone/updater/FairphoneUpdater.java
index 2afa176..858962d 100644
--- a/src/com/fairphone/updater/FairphoneUpdater.java
+++ b/src/com/fairphone/updater/FairphoneUpdater.java
@@ -629,7 +629,7 @@
{
if(isVersion)
{
- itemName = getVersionName((Version) item);
+ itemName = ((Version) item).getHumanReadableName();
}
else
{
@@ -639,18 +639,7 @@
return itemName;
}
- public String getVersionName(Version version)
- {
- String itemName = "";
- if (version != null)
- {
- if(mCurrentState != UpdaterState.ZIP_INSTALL) {
- itemName = version.getImageTypeDescription(getResources()) + " ";
- }
- itemName += version.getName() + " " + version.getBuildNumber();
- }
- return itemName;
- }
+
public static String getStoreName(Store store)
{
@@ -664,12 +653,12 @@
public String getDeviceVersionName()
{
- return getVersionName(mDeviceVersion);
+ return mDeviceVersion.getHumanReadableName();
}
public String getLatestVersionName()
{
- return getVersionName(mLatestVersion);
+ return mLatestVersion.getHumanReadableName();
}
public Version getDeviceVersion()
diff --git a/src/com/fairphone/updater/data/Version.java b/src/com/fairphone/updater/data/Version.java
index 8468515..fdae2c6 100644
--- a/src/com/fairphone/updater/data/Version.java
+++ b/src/com/fairphone/updater/data/Version.java
@@ -24,6 +24,8 @@
import java.util.ArrayList;
import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
public class Version extends DownloadableItem implements Comparable<Version>
{
@@ -45,8 +47,6 @@
private final List<Integer> mDependencies;
- public static final String ZIP_INSTALL_VERSION = "999";
-
public Version()
{
super();
@@ -195,4 +195,67 @@
// return mDependencies;
// }
// --Commented out by Inspection STOP (09/02/2015 19:47)
+
+ /**
+ *
+ * @param fingerprint String containing sdfasdf=number.number.nunmber
+ * @return the version as string or null if no version was found
+ */
+ private String getVersionNumberFromFingerPrint(String fingerprint){
+ Pattern pattern = Pattern.compile(".*?\\d+.*?(\\d+)(\\.)(\\d+)(\\.)(\\d+)",Pattern.CASE_INSENSITIVE | Pattern.DOTALL); // is this pattern sufficient?
+ Matcher matcher = pattern.matcher(fingerprint); // get version number from fingerprint
+ if (matcher.find()) {
+ return matcher.group(1) + "." +matcher.group(3) + "." + matcher.group(5);
+ }
+ Log.d(TAG,String.format("Failed to determine version number from fingerprint: %s",fingerprint));
+ return null; /* we don't know what version is here */
+
+ }
+
+ /**
+ * This method uses the different strategies to find a human readable name for this version
+ * It tries to find a pattern of "a.b.c" numbers in the string returned from "getNumber()"
+ * and appends some strings to it
+ * @return A human (english) version name to be displayed on the screen
+ */
+ public String getHumanReadableName() {
+ String fingerprint = getNumber();
+
+ if (fingerprint == null) { /* this for example currently happens on a zip install */
+
+ /* try to make something nice */
+ StringBuffer sb = new StringBuffer();
+
+ if (getName() != null) {
+ sb.append(getName());
+ }
+ if (getBuildNumber() != null) {
+ if (sb.length() != 0) {
+ sb.append(" ");/* it not empty add a space */
+ }
+ sb.append(getBuildNumber());
+ }
+ return sb.toString();
+ }
+
+ String actualNumber = getVersionNumberFromFingerPrint(fingerprint);
+ if (actualNumber == null) {
+ /* we can not extract the a.b.c version number from the fingerprint */
+ /* just return the fingerprint/version thingy that was passed to us*/
+ return fingerprint;
+ }
+
+ //@TODO Version currently only has the concept of image type "AOSP" or Fairphone. this concept
+ //need to be elaborated and different versions shoud be possible.
+ //
+ if (fingerprint.contains("sibon")) {
+ return "Fairphone Open Source OS " + actualNumber;
+ } else if (fingerprint.contains("gms")) {
+ return "Fairphone OS " + actualNumber;
+ } else {
+ /* we do have a version but.. we don't know about it. return the full "number"
+ */
+ return fingerprint;
+ }
+ }
}
diff --git a/src/com/fairphone/updater/data/VersionParserHelper.java b/src/com/fairphone/updater/data/VersionParserHelper.java
index da466de..6cb353f 100644
--- a/src/com/fairphone/updater/data/VersionParserHelper.java
+++ b/src/com/fairphone/updater/data/VersionParserHelper.java
@@ -49,7 +49,7 @@
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 final String CURRENT_VERSION_FINGERPRINT = "ro.build.version.incremental";
private static Version version;
diff --git a/src/com/fairphone/updater/fragments/DownloadAndRestartFragment.java b/src/com/fairphone/updater/fragments/DownloadAndRestartFragment.java
index 85f11b5..99d658c 100644
--- a/src/com/fairphone/updater/fragments/DownloadAndRestartFragment.java
+++ b/src/com/fairphone/updater/fragments/DownloadAndRestartFragment.java
@@ -1,9 +1,5 @@
package com.fairphone.updater.fragments;
-import java.io.File;
-import java.io.IOException;
-import java.util.concurrent.TimeoutException;
-
import android.annotation.SuppressLint;
import android.app.AlertDialog;
import android.app.DownloadManager;
@@ -39,7 +35,6 @@
import com.fairphone.updater.UpdaterService;
import com.fairphone.updater.data.DownloadableItem;
import com.fairphone.updater.data.Store;
-import com.fairphone.updater.data.UpdaterData;
import com.fairphone.updater.data.Version;
import com.fairphone.updater.data.VersionParserHelper;
import com.fairphone.updater.tools.PrivilegeChecker;
@@ -48,6 +43,10 @@
import com.stericson.RootTools.execution.CommandCapture;
import com.stericson.RootTools.execution.Shell;
+import java.io.File;
+import java.io.IOException;
+import java.util.concurrent.TimeoutException;
+
@SuppressLint("ValidFragment")
public class DownloadAndRestartFragment extends BaseFragment
{
@@ -124,9 +123,8 @@
version = new Version();
version.setName(resources.getString(R.string.install) + " " + zipName);
version.setDownloadLink(mainActivity.getZipFilePath());
- version.setNumber(Version.ZIP_INSTALL_VERSION);
- }
- else
+ version.setNumber(null);
+ } else
{
version = mainActivity.getSelectedVersion();
}
diff --git a/src/com/fairphone/updater/fragments/VersionDetailFragment.java b/src/com/fairphone/updater/fragments/VersionDetailFragment.java
index 0632ed6..17dc7f0 100644
--- a/src/com/fairphone/updater/fragments/VersionDetailFragment.java
+++ b/src/com/fairphone/updater/fragments/VersionDetailFragment.java
@@ -7,7 +7,6 @@
import android.content.Context;
import android.content.DialogInterface;
import android.content.res.Resources;
-import android.net.ConnectivityManager;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
@@ -209,7 +208,7 @@
break;
case ANDROID:
- mHeaderText = mainActivity.getVersionName(mSelectedVersion);
+ mHeaderText = mSelectedVersion.getHumanReadableName();
mVersionDetailsTitle = resources.getString(R.string.new_os);
mIsOSChange = deviceVersion.getImageType().equalsIgnoreCase(Version.IMAGE_TYPE_FAIRPHONE);
mIsOlderVersion =
@@ -223,7 +222,7 @@
break;
case FAIRPHONE:
default:
- mHeaderText = mainActivity.getVersionName(mSelectedVersion);
+ mHeaderText = mSelectedVersion.getHumanReadableName();
mVersionDetailsTitle = resources.getString(R.string.older_version);
mIsOSChange = deviceVersion.getImageType().equalsIgnoreCase(Version.IMAGE_TYPE_AOSP);
mIsOlderVersion =
@@ -362,7 +361,7 @@
{
if (mIsOSChange || mIsOlderVersion)
{
- showPopupDialog(mainActivity.getVersionName(mSelectedVersion), mSelectedVersion.hasEraseAllPartitionWarning(),
+ showPopupDialog(mSelectedVersion.getHumanReadableName(), mSelectedVersion.hasEraseAllPartitionWarning(),
new ConfirmationPopupDialogListener()
{
diff --git a/src/com/fairphone/updater/fragments/VersionListFragment.java b/src/com/fairphone/updater/fragments/VersionListFragment.java
index 938d9c3..09fd9f9 100644
--- a/src/com/fairphone/updater/fragments/VersionListFragment.java
+++ b/src/com/fairphone/updater/fragments/VersionListFragment.java
@@ -1,7 +1,5 @@
package com.fairphone.updater.fragments;
-import java.util.List;
-
import android.content.res.Resources;
import android.os.Bundle;
import android.view.LayoutInflater;
@@ -17,6 +15,8 @@
import com.fairphone.updater.data.Version;
import com.fairphone.updater.fragments.VersionDetailFragment.DetailLayoutType;
+import java.util.List;
+
public class VersionListFragment extends BaseFragment
{
@@ -151,7 +151,7 @@
mVersionListContainer.addView(versionLayout);
- versionLayout.setText(mainActivity.getVersionName(version));
+ versionLayout.setText(version.getHumanReadableName());
versionLayout.setOnClickListener(new OnClickListener()
{
@@ -186,7 +186,7 @@
private void setupFairphoneLatestVersion()
{
final Version latestFairphoneVersion = UpdaterData.getInstance().getLatestVersion(Version.IMAGE_TYPE_FAIRPHONE);
- mLatestVersionDetailsButton.setText(mainActivity.getVersionName(latestFairphoneVersion));
+ mLatestVersionDetailsButton.setText(latestFairphoneVersion.getHumanReadableName());
if (mainActivity.getDeviceVersion().compareTo(latestFairphoneVersion) == 0)
{
@@ -233,7 +233,7 @@
mVersionListContainer.addView(versionLayout);
- versionLayout.setText(mainActivity.getVersionName(version));
+ versionLayout.setText(version.getHumanReadableName());
versionLayout.setOnClickListener(new OnClickListener()
{
@@ -269,7 +269,7 @@
private void setupAndroidLatestVersion()
{
final Version latestAOSPVersion = UpdaterData.getInstance().getLatestVersion(Version.IMAGE_TYPE_AOSP);
- mLatestVersionDetailsButton.setText(mainActivity.getVersionName(latestAOSPVersion));
+ mLatestVersionDetailsButton.setText(latestAOSPVersion.getHumanReadableName());
if (mainActivity.getDeviceVersion().compareTo(latestAOSPVersion) == 0)
{