diff --git a/app/src/com/trovebox/android/app/AlbumsFragment.java b/app/src/com/trovebox/android/app/AlbumsFragment.java index b486abd..fa53f3a 100644 --- a/app/src/com/trovebox/android/app/AlbumsFragment.java +++ b/app/src/com/trovebox/android/app/AlbumsFragment.java @@ -143,6 +143,12 @@ public void run(Photo photo) { .loadImage(photo.getUrl(thumbSize.toString()), image); } + }, new Runnable() { + + @Override + public void run() { + mImageWorker.loadImage(null, image); + } }, loadingControl); } else { diff --git a/app/src/com/trovebox/android/app/FacebookFragment.java b/app/src/com/trovebox/android/app/FacebookFragment.java index 692ce50..6600c20 100644 --- a/app/src/com/trovebox/android/app/FacebookFragment.java +++ b/app/src/com/trovebox/android/app/FacebookFragment.java @@ -157,7 +157,8 @@ public void run(Photo photo) { new PostPhotoTask(photo).execute(); } }; - PhotoUtils.validateUrlForSizeExistAsyncAndRun(photo, thumbSize, runnable, loadingControl); + PhotoUtils.validateUrlForSizeExistAsyncAndRun(photo, thumbSize, runnable, null, + loadingControl); } private void performFacebookLogout() diff --git a/app/src/com/trovebox/android/app/SelectAlbumsActivity.java b/app/src/com/trovebox/android/app/SelectAlbumsActivity.java index 978b744..5571d4e 100644 --- a/app/src/com/trovebox/android/app/SelectAlbumsActivity.java +++ b/app/src/com/trovebox/android/app/SelectAlbumsActivity.java @@ -230,6 +230,12 @@ public void run(Photo photo) { .loadImage(photo.getUrl(thumbSize.toString()), vh.cover); } + }, new Runnable() { + + @Override + public void run() { + mImageWorker.loadImage(null, vh.cover); + } }, SelectAlbumsUiFragment.this); } else { diff --git a/common/res/values-pt/strings.xml b/common/res/values-pt/strings.xml index fe1a901..1c9c000 100644 --- a/common/res/values-pt/strings.xml +++ b/common/res/values-pt/strings.xml @@ -25,6 +25,9 @@ Mostre todas ENVIADA! + + %1$s tirada em %2$s + Enviando %1$s Falha no envio diff --git a/common/src/com/trovebox/android/common/fragment/gallery/GalleryFragment.java b/common/src/com/trovebox/android/common/fragment/gallery/GalleryFragment.java index 34e0750..0701ba8 100644 --- a/common/src/com/trovebox/android/common/fragment/gallery/GalleryFragment.java +++ b/common/src/com/trovebox/android/common/fragment/gallery/GalleryFragment.java @@ -431,6 +431,12 @@ public void run(Photo photo) { photo, photo.getUrl(thumbSize.toString())); mImageWorker.loadImage(fo, imageView); } + }, new Runnable() { + + @Override + public void run() { + mImageWorker.loadImage(null, imageView); + } }, loadingControl); } }; diff --git a/common/src/com/trovebox/android/common/fragment/photo_details/PhotoDetailsFragment.java b/common/src/com/trovebox/android/common/fragment/photo_details/PhotoDetailsFragment.java index 9f6cdb7..756e235 100644 --- a/common/src/com/trovebox/android/common/fragment/photo_details/PhotoDetailsFragment.java +++ b/common/src/com/trovebox/android/common/fragment/photo_details/PhotoDetailsFragment.java @@ -501,7 +501,15 @@ public void run(Photo photo) { GuiUtils.noAlertError(TAG, ex); } } - }, loadingControl); + }, + new Runnable() { + + @Override + public void run() { + mImageWorker.loadImage(null, imageView); + } + }, + loadingControl); loadingControl.stopLoading(); @@ -601,6 +609,12 @@ public void run(Photo photo) { String url = photo.getUrl(thumbSize.toString()); mImageWorker2.loadImage(url, imageView); } + }, new Runnable() { + + @Override + public void run() { + mImageWorker2.loadImage(null, imageView); + } }, null); return view; } diff --git a/common/src/com/trovebox/android/common/model/Photo.java b/common/src/com/trovebox/android/common/model/Photo.java index 686d12f..2912776 100644 --- a/common/src/com/trovebox/android/common/model/Photo.java +++ b/common/src/com/trovebox/android/common/model/Photo.java @@ -35,6 +35,8 @@ public class Photo implements Parcelable { protected String mId; protected final List mTags; protected String mAppId; + protected String mHost; + protected String mToken; protected final Map mUrls; protected String mTitle; protected String mDescription; @@ -149,6 +151,42 @@ public String getAppId() { return mAppId; } + /** + * Returns the host of the server on which this Photo is located. + * + * @return host + */ + public String getHost() { + return mHost; + } + + /** + * Set the host of the server on which the Photo is located + * + * @param host + */ + public void setHost(String host) { + mHost = host; + } + + /** + * Returns the access token of the photo. + * + * @return token + */ + public String getToken() { + return mToken; + } + + /** + * Set the access token of the photo + * + * @param token + */ + public void setToken(String token) { + mToken = token; + } + /** * Get URL for a specific size. Examples are: 50x50xCR and 640x960 . CR * stands for cropped. @@ -247,6 +285,8 @@ public void writeToParcel(Parcel out, int flags) { out.writeString(mTitle); out.writeString(mDescription); out.writeString(mAppId); + out.writeString(mHost); + out.writeString(mToken); out.writeStringList(mTags); out.writeInt(mPermission); out.writeLong(mDateTaken.getTime()); @@ -283,6 +323,8 @@ private Photo(Parcel in) { mTitle = in.readString(); mDescription = in.readString(); mAppId = in.readString(); + mHost = in.readString(); + mToken = in.readString(); in.readStringList(mTags); mPermission = in.readInt(); mDateTaken = new Date(in.readLong()); diff --git a/common/src/com/trovebox/android/common/model/utils/PhotoUtils.java b/common/src/com/trovebox/android/common/model/utils/PhotoUtils.java index 8d1bc71..c07c8f1 100644 --- a/common/src/com/trovebox/android/common/model/utils/PhotoUtils.java +++ b/common/src/com/trovebox/android/common/model/utils/PhotoUtils.java @@ -54,10 +54,13 @@ public class PhotoUtils { * @param photo the photo to check * @param photoSize the required photo size * @param runnable the runnable which will run with the validated photo + * @param preSizeRetrievalRunnable runnable to run before the retrieval task + * started * @param loadingControl the loading control to display loading indicator */ public static void validateUrlForSizeExistAsyncAndRun(Photo photo, ReturnSizes photoSize, - RunnableWithParameter runnable, LoadingControl loadingControl) { + RunnableWithParameter runnable, Runnable preSizeRetrievalRunnable, + LoadingControl loadingControl) { String size = photoSize.toString(); if (photo.getUrl(size) != null) { CommonUtils.debug(TAG, "Url for the size " + size + " exists. Running action."); @@ -65,6 +68,9 @@ public static void validateUrlForSizeExistAsyncAndRun(Photo photo, ReturnSizes p } else { CommonUtils.debug(TAG, "Url for the size " + size + " doesn't exist. Running size retrieval task."); + if (preSizeRetrievalRunnable != null) { + preSizeRetrievalRunnable.run(); + } new RetrieveThumbUrlTask(photo, photoSize, runnable, loadingControl).execute(); } } @@ -154,7 +160,7 @@ public static Photo getThePhotoWithReturnSize(Photo photo, ReturnSizes photoSize TrackerUtils.trackBackgroundEvent("getThePhotoWithReturnSize", TAG); long start = System.currentTimeMillis(); PhotoResponse response = CommonConfigurationUtils.getApi().getPhoto(photo.getId(), - photoSize); + photoSize, photo.getToken(), photo.getHost()); photo = response.getPhoto(); TrackerUtils.trackDataLoadTiming(System.currentTimeMillis() - start, "getThePhotoWithReturnSize", TAG); @@ -204,6 +210,7 @@ public static String getShareUrl(Photo photo, boolean appendToken) { private static class RetrieveThumbUrlTask extends SimpleAsyncTaskEx { private Photo mPhoto; + private Photo mPhoto2; private ReturnSizes photoSize; private RunnableWithParameter runnable; @@ -218,9 +225,7 @@ public RetrieveThumbUrlTask(Photo photo, ReturnSizes photoSize, @Override protected Boolean doInBackground(Void... params) { try { - Photo mPhoto2 = getThePhotoWithReturnSize(mPhoto, photoSize); - String size = photoSize.toString(); - mPhoto.putUrl(size, mPhoto2.getUrl(size)); + mPhoto2 = getThePhotoWithReturnSize(mPhoto, photoSize); return true; } catch (Exception e) { GuiUtils.error(TAG, R.string.errorCouldNotGetPhoto, e); @@ -230,7 +235,13 @@ protected Boolean doInBackground(Void... params) { @Override protected void onSuccessPostExecute() { - runnable.run(mPhoto); + try { + String size = photoSize.toString(); + mPhoto.putUrl(size, mPhoto2.getUrl(size)); + runnable.run(mPhoto); + } catch (Exception ex) { + GuiUtils.error(TAG, R.string.errorCouldNotGetPhoto, ex); + } } } diff --git a/common/src/com/trovebox/android/common/net/ITroveboxApi.java b/common/src/com/trovebox/android/common/net/ITroveboxApi.java index 6578aec..7c67c7e 100644 --- a/common/src/com/trovebox/android/common/net/ITroveboxApi.java +++ b/common/src/com/trovebox/android/common/net/ITroveboxApi.java @@ -67,13 +67,15 @@ AlbumResponse getAlbum(String albumId) throws ClientProtocolException, * * @param photoId id of the photo * @param returnSize which sizes should be returned + * @param token access token for the photo if required + * @param host alternate host * @return the photo * @throws IOException * @throws ClientProtocolException * @throws JSONException * @throws IllegalStateException */ - PhotoResponse getPhoto(String photoId, ReturnSizes returnSize) + PhotoResponse getPhoto(String photoId, ReturnSizes returnSize, String token, String host) throws ClientProtocolException, IOException, IllegalStateException, JSONException; diff --git a/common/src/com/trovebox/android/common/net/TroveboxApi.java b/common/src/com/trovebox/android/common/net/TroveboxApi.java index d905358..f961502 100644 --- a/common/src/com/trovebox/android/common/net/TroveboxApi.java +++ b/common/src/com/trovebox/android/common/net/TroveboxApi.java @@ -79,15 +79,20 @@ public AlbumResponse getAlbum(String albumId) throws ClientProtocolException, IO } @Override - public PhotoResponse getPhoto(String photoId, ReturnSizes returnSize) + public PhotoResponse getPhoto(String photoId, ReturnSizes returnSize, String token, String host) throws ClientProtocolException, IOException, IllegalStateException, JSONException { - ApiRequest request = new ApiRequest(ApiRequest.GET, "/photo/" + photoId - + "/view.json"); + StringBuilder path = new StringBuilder("/photo/" + photoId); + + if (!TextUtils.isEmpty(token)) { + path.append("/token-" + token); + } + path.append("/view.json"); + ApiRequest request = new ApiRequest(ApiRequest.GET, path.toString()); if (returnSize != null) { request.addParameter("returnSizes", returnSize.toString()); } - ApiResponse response = execute(request); + ApiResponse response = TextUtils.isEmpty(host) ? execute(request) : execute(request, host); return new PhotoResponse(RequestType.PHOTO, response.getJSONObject()); } diff --git a/common/src/com/trovebox/android/common/service/AbstractUploaderService.java b/common/src/com/trovebox/android/common/service/AbstractUploaderService.java index cccbdca..1f654da 100644 --- a/common/src/com/trovebox/android/common/service/AbstractUploaderService.java +++ b/common/src/com/trovebox/android/common/service/AbstractUploaderService.java @@ -270,6 +270,8 @@ public boolean isCancelled() { if (uploadResponse.isSuccess()) { Log.i(TAG, "Upload to Trovebox completed for: " + photoUpload.getPhotoUri()); photo = uploadResponse.getPhoto(); + photo.setHost(photoUpload.getHost()); + photo.setToken(photoUpload.getToken()); TrackerUtils.trackDataLoadTiming(System.currentTimeMillis() - start, "photoUpload", TAG); } else { diff --git a/test/src/com/trovebox/android/test/GalleryActivityTest.java b/test/src/com/trovebox/android/test/GalleryActivityTest.java index 664e840..d64f969 100644 --- a/test/src/com/trovebox/android/test/GalleryActivityTest.java +++ b/test/src/com/trovebox/android/test/GalleryActivityTest.java @@ -58,7 +58,8 @@ public void testLoadsImages() throws ClientProtocolException, R.raw.json_photos_get))).times(2); getApiMock().getPhoto( (String) EasyMock.anyObject(), - (ReturnSizes) EasyMock.anyObject() + (ReturnSizes) EasyMock.anyObject(), + (String) EasyMock.anyObject(), (String) EasyMock.anyObject() ); PowerMock .expectLastCall() diff --git a/test/src/com/trovebox/android/test/PhotoDetailsActivityTest.java b/test/src/com/trovebox/android/test/PhotoDetailsActivityTest.java index 7f10166..406bd28 100644 --- a/test/src/com/trovebox/android/test/PhotoDetailsActivityTest.java +++ b/test/src/com/trovebox/android/test/PhotoDetailsActivityTest.java @@ -47,7 +47,8 @@ public void testPreconditions() throws JSONException, getApiMock().getPhoto( (String) EasyMock.anyObject(), - (ReturnSizes) EasyMock.anyObject() + (ReturnSizes) EasyMock.anyObject(), + (String) EasyMock.anyObject(), (String) EasyMock.anyObject() ); PowerMock .expectLastCall()