/** * Copyright 2016 Alex Yanchenko * * 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 org.droidparts.gram.service; import java.util.ArrayList; import android.content.Context; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.os.ResultReceiver; import org.json.JSONArray; import org.json.JSONObject; import org.droidparts.annotation.inject.InjectDependency; import org.droidparts.bus.EventBus; import org.droidparts.concurrent.service.IntentService; import org.droidparts.gram.contract.Instagram; import org.droidparts.gram.model.Image; import org.droidparts.gram.persist.ImageEntityManager; import org.droidparts.gram.persist.ImageSerializer; import org.droidparts.net.http.RESTClient2; public class ImageIntentService extends IntentService { private static final String ACTION_REFRESH = "refresh"; public static Intent getUpdatePicsIntent(Context ctx, ResultReceiver resultReceiver) { return getIntent(ctx, ImageIntentService.class, ACTION_REFRESH, resultReceiver); } private final Uri refreshUri; private RESTClient2 restClient; private ImageSerializer imageSerializer; @InjectDependency private ImageEntityManager imageEntityManager; public ImageIntentService() { super(ImageIntentService.class.getSimpleName()); refreshUri = Uri.parse(Instagram.Url.POPULAR_MEDIA).buildUpon() .appendQueryParameter(Instagram.Param.CLIENT_ID, Instagram.CLIENT_ID).build(); } @Override public void onCreate() { super.onCreate(); restClient = new RESTClient2(this); imageSerializer = new ImageSerializer(this); } @Override protected Bundle onExecute(String action, Bundle data) throws Exception { if (ACTION_REFRESH.equals(action)) { JSONObject obj = restClient.getJSONObject(refreshUri.toString()); JSONArray arr = obj.getJSONArray("data"); ArrayList<Image> list = imageSerializer.deserializeAll(arr); imageEntityManager.delete().execute(); imageEntityManager.create(list); EventBus.postEvent("REFRESH_COMPLETE", list); return data; } else { throw new UnsupportedOperationException(action); } } }