Skip to content

Commit 6bc0530

Browse files
committed
Merge pull request #1133 from crankycoder/features/i-hate-master
1132 - Changed the Updater to stop looking in master branch.
2 parents e27b2aa + 100144d commit 6bc0530

File tree

6 files changed

+58
-16
lines changed

6 files changed

+58
-16
lines changed

android/src/main/java/org/mozilla/mozstumbler/client/Updater.java

+18-11
Original file line numberDiff line numberDiff line change
@@ -17,16 +17,19 @@
1717
import org.mozilla.mozstumbler.R;
1818
import org.mozilla.mozstumbler.service.AppGlobals;
1919
import org.mozilla.mozstumbler.service.core.http.IHttpUtil;
20+
import org.mozilla.mozstumbler.service.core.http.IResponse;
2021
import org.mozilla.mozstumbler.service.utils.NetworkInfo;
2122

2223
import java.io.File;
2324
import java.io.IOException;
2425
import java.net.MalformedURLException;
2526
import java.net.URL;
27+
import java.util.List;
28+
import java.util.Map;
2629

2730
public class Updater {
2831
private static final String LOG_TAG = AppGlobals.LOG_PREFIX + Updater.class.getSimpleName();
29-
private static final String VERSION_URL = "https://raw.github.com/mozilla/MozStumbler/master/VERSION";
32+
private static final String LATEST_URL = "https://github.com/mozilla/MozStumbler/releases/latest";
3033
private static final String APK_URL_FORMAT = "https://github.com/mozilla/MozStumbler/releases/download/v%s/MozStumbler-v%s.apk";
3134
private final IHttpUtil httpClient;
3235

@@ -51,20 +54,24 @@ public boolean checkForUpdates(final Activity activity, String api_key) {
5154
return false;
5255
}
5356

54-
new AsyncTask<Void, Void, String>() {
57+
new AsyncTask<Void, Void, IResponse>() {
5558
@Override
56-
public String doInBackground(Void... params) {
57-
try {
58-
return httpClient.getUrlAsString(VERSION_URL);
59-
} catch (IOException ioEx) {
60-
Log.e(LOG_TAG, "", ioEx);
61-
return null;
62-
}
63-
59+
public IResponse doInBackground(Void... params) {
60+
return httpClient.head(LATEST_URL, null);
6461
}
6562

6663
@Override
67-
public void onPostExecute(String latestVersion) {
64+
public void onPostExecute(IResponse response) {
65+
if (response == null) {
66+
return;
67+
}
68+
Map<String, List<String>> headers = response.getHeaders();
69+
Log.i(LOG_TAG, "Got headers: "+ headers.toString());
70+
String locationUrl = headers.get("Location").get(0);
71+
String[] parts = locationUrl.split("/");
72+
String tag = parts[parts.length-1];
73+
String latestVersion = tag.substring(1); // strip the 'v' from the beginning
74+
6875
String installedVersion = PackageUtils.getAppVersion(activity);
6976

7077
Log.d(LOG_TAG, "Installed version: " + installedVersion);

android/src/main/java/org/mozilla/mozstumbler/service/core/http/HTTPResponse.java

+11-3
Original file line numberDiff line numberDiff line change
@@ -28,17 +28,25 @@ public HTTPResponse(int responseCode, Map<String, List<String>> headerFields, by
2828
}
2929
}
3030

31-
public boolean isErrorCode400BadRequest(){
31+
public boolean isErrorCode400BadRequest() {
3232
return 400 == statusCode;
3333
}
3434

35-
public boolean isErrorCode4xx(){
35+
public boolean isErrorCode4xx() {
3636
return statusCode / 100 == 4;
3737
}
3838

39+
@Override
40+
public Map<String, List<String>> getHeaders() {
41+
return headers;
42+
}
3943
@Override
4044
public String getFirstHeader(String key) {
41-
return headers.get(key).get(0);
45+
List<String> matches = headers.get(key);
46+
if (matches != null) {
47+
return matches.get(0);
48+
}
49+
return null;
4250
}
4351

4452
public boolean isSuccessCode2XX() {

android/src/main/java/org/mozilla/mozstumbler/service/core/http/HttpUtil.java

+18-2
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
import android.os.Build;
88

9+
import org.apache.http.protocol.HTTP;
910
import org.mozilla.mozstumbler.client.ClientPrefs;
1011
import org.mozilla.mozstumbler.service.AppGlobals;
1112
import org.mozilla.mozstumbler.service.core.logging.Log;
@@ -130,6 +131,12 @@ public File getUrlAsFile(URL url, File file) throws IOException {
130131

131132
public IResponse get(String urlString, Map<String, String> headers) {
132133

134+
String HTTP_METHOD = "GET";
135+
136+
return getHttpResponse(urlString, headers, HTTP_METHOD);
137+
}
138+
139+
private IResponse getHttpResponse(String urlString, Map<String, String> headers, String HTTP_METHOD) {
133140
URL url = null;
134141
HttpURLConnection httpURLConnection = null;
135142

@@ -146,15 +153,18 @@ public IResponse get(String urlString, Map<String, String> headers) {
146153

147154
try {
148155
httpURLConnection = (HttpURLConnection) url.openConnection();
156+
if (HTTP_METHOD.toUpperCase().equals("HEAD")) {
157+
httpURLConnection.setInstanceFollowRedirects(false);
158+
}
149159
httpURLConnection.setConnectTimeout(5000); // set timeout to 5 seconds
150-
httpURLConnection.setRequestMethod("GET");
160+
161+
httpURLConnection.setRequestMethod(HTTP_METHOD);
151162
httpURLConnection.setRequestProperty(USER_AGENT_HEADER, userAgent);
152163
} catch (IOException e) {
153164
Log.e(LOG_TAG, "Couldn't open a connection: ", e);
154165
return null;
155166
}
156167

157-
158168
// Workaround for a bug in Android mHttpURLConnection. When the library
159169
// reuses a stale connection, the connection may fail with an EOFException
160170
// http://stackoverflow.com/questions/15411213/android-httpsurlconnection-eofexception/17791819#17791819
@@ -180,6 +190,12 @@ public IResponse get(String urlString, Map<String, String> headers) {
180190
return null;
181191
}
182192

193+
@Override
194+
public IResponse head(String urlString, Map<String, String> headers) {
195+
String HTTP_METHOD = "HEAD";
196+
return getHttpResponse(urlString, headers, HTTP_METHOD);
197+
}
198+
183199
@Override
184200
public IResponse post(String urlString, byte[] data, Map<String, String> headers, boolean precompressed) {
185201

android/src/main/java/org/mozilla/mozstumbler/service/core/http/IHttpUtil.java

+2
Original file line numberDiff line numberDiff line change
@@ -30,4 +30,6 @@ public interface IHttpUtil {
3030
IResponse post(String urlString, byte[] data, Map<String, String> headers, boolean precompressed);
3131

3232
IResponse get(String urlString, Map<String, String> headers);
33+
34+
IResponse head(String latestUrl, Map<String, String> headers);
3335
}

android/src/main/java/org/mozilla/mozstumbler/service/core/http/IResponse.java

+4
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66

77
package org.mozilla.mozstumbler.service.core.http;
88

9+
import java.util.List;
10+
import java.util.Map;
911

1012
public interface IResponse {
1113
public int httpResponse();
@@ -18,6 +20,8 @@ public interface IResponse {
1820
public boolean isSuccessCode2XX();
1921
public boolean isErrorCode4xx();
2022

23+
Map<String, List<String>> getHeaders();
24+
2125
public String getFirstHeader(String key);
2226
public boolean isErrorCode400BadRequest();
2327
}

android/src/main/java/org/mozilla/mozstumbler/service/core/http/MockHttpUtil.java

+5
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,11 @@ public IResponse get(String urlString, Map<String, String> headers) {
4141
return null;
4242
}
4343

44+
@Override
45+
public IResponse head(String latestUrl, Map<String, String> headers) {
46+
return null;
47+
}
48+
4449
@Override
4550
public IResponse post(String urlString, byte[] data, Map<String, String> headers, boolean precompressed) {
4651
return null;

0 commit comments

Comments
 (0)