Back to project page Muzei.
The source code is released under:
Apache License
If you think the Android project Muzei listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.
/* * Copyright 2014 Google Inc./*w ww . j av a2s.c o m*/ * * 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.example.muzei.examplesource500px; import android.content.Intent; import android.net.Uri; import android.text.TextUtils; import android.util.Log; import com.google.android.apps.muzei.api.Artwork; import com.google.android.apps.muzei.api.RemoteMuzeiArtSource; import java.util.Random; import retrofit.ErrorHandler; import retrofit.RequestInterceptor; import retrofit.RestAdapter; import retrofit.RetrofitError; import static com.example.muzei.examplesource500px.FiveHundredPxService.Photo; import static com.example.muzei.examplesource500px.FiveHundredPxService.PhotosResponse; public class FiveHundredPxExampleArtSource extends RemoteMuzeiArtSource { private static final String TAG = "500pxExample"; private static final String SOURCE_NAME = "FiveHundredPxExampleArtSource"; private static final int ROTATE_TIME_MILLIS = 3 * 60 * 60 * 1000; // rotate every 3 hours public FiveHundredPxExampleArtSource() { super(SOURCE_NAME); } @Override public void onCreate() { super.onCreate(); setUserCommands(BUILTIN_COMMAND_ID_NEXT_ARTWORK); } @Override protected void onTryUpdate(int reason) throws RetryException { String currentToken = (getCurrentArtwork() != null) ? getCurrentArtwork().getToken() : null; RestAdapter restAdapter = new RestAdapter.Builder() .setEndpoint("https://api.500px.com") .setRequestInterceptor(new RequestInterceptor() { @Override public void intercept(RequestFacade request) { request.addQueryParam("consumer_key", Config.CONSUMER_KEY); } }) .setErrorHandler(new ErrorHandler() { @Override public Throwable handleError(RetrofitError retrofitError) { int statusCode = retrofitError.getResponse().getStatus(); if (retrofitError.getKind() == RetrofitError.Kind.NETWORK || (500 <= statusCode && statusCode < 600)) { return new RetryException(); } scheduleUpdate(System.currentTimeMillis() + ROTATE_TIME_MILLIS); return retrofitError; } }) .build(); FiveHundredPxService service = restAdapter.create(FiveHundredPxService.class); PhotosResponse response = service.getPopularPhotos(); if (response == null || response.photos == null) { throw new RetryException(); } if (response.photos.size() == 0) { Log.w(TAG, "No photos returned from API."); scheduleUpdate(System.currentTimeMillis() + ROTATE_TIME_MILLIS); return; } Random random = new Random(); Photo photo; String token; while (true) { photo = response.photos.get(random.nextInt(response.photos.size())); token = Integer.toString(photo.id); if (response.photos.size() <= 1 || !TextUtils.equals(token, currentToken)) { break; } } publishArtwork(new Artwork.Builder() .title(photo.name) .byline(photo.user.fullname) .imageUri(Uri.parse(photo.image_url)) .token(token) .viewIntent(new Intent(Intent.ACTION_VIEW, Uri.parse("http://500px.com/photo/" + photo.id))) .build()); scheduleUpdate(System.currentTimeMillis() + ROTATE_TIME_MILLIS); } }