/*
* Copyright (C) 2014 SCVNGR, Inc. d/b/a LevelUp
*
* 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.scvngr.levelup.core.net.request.factory;
import android.content.Context;
import android.net.Uri;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import com.scvngr.levelup.core.annotation.AccessTokenRequired;
import com.scvngr.levelup.core.annotation.LevelUpApi;
import com.scvngr.levelup.core.annotation.RequiresPermission;
import com.scvngr.levelup.core.model.Interstitial;
import com.scvngr.levelup.core.net.AbstractRequest;
import com.scvngr.levelup.core.net.AccessTokenRetriever;
import com.scvngr.levelup.core.net.HttpMethod;
import com.scvngr.levelup.core.net.LevelUpRequest;
import com.scvngr.levelup.core.net.Permissions;
import com.scvngr.levelup.core.util.DeviceUtil;
import com.scvngr.levelup.core.util.NullUtils;
/**
* Request factory for dealing with {@link Interstitial}s.
*/
@LevelUpApi(contract = LevelUpApi.Contract.PUBLIC)
public final class InterstitialRequestFactory extends AbstractRequestFactory {
/**
* @param context the Application context.
* @param retriever the {@link AccessTokenRetriever} to use to retrieve the
* {@link com.scvngr.levelup.core.model.AccessToken}.
*/
public InterstitialRequestFactory(@NonNull final Context context,
@Nullable final AccessTokenRetriever retriever) {
super(context, retriever);
}
/**
* Build a request to get the {@link Interstitial} for the order passed.
*
* @param orderUuid the UUID of the {@link com.scvngr.levelup.core.model.Order} @see
* {@link com.scvngr.levelup.core.model.Order#getUuid()}
* @return an {@link AbstractRequest} to use to get the {@link Interstitial} for the
* {@link com.scvngr.levelup.core.model.Order}.
*/
@NonNull
@AccessTokenRequired
@LevelUpApi(contract = LevelUpApi.Contract.PUBLIC)
@RequiresPermission({Permissions.PERMISSION_CREATE_ORDERS, Permissions.PERMISSION_READ_QR_CODE})
public AbstractRequest buildInterstitialForOrderRequest(@NonNull final String orderUuid) {
return new LevelUpRequest(getContext(), HttpMethod.GET,
LevelUpRequest.API_VERSION_CODE_V15, NullUtils.format(
"orders/%s/interstitial", orderUuid), null, null,
getAccessTokenRetriever());
}
/**
* Build a request to get the image for the {@link Interstitial} passed.
*
* @param interstitial the {@link Interstitial} to get the image URL for.
* @return an {@link AbstractRequest} to use to get the image for the {@link Interstitial}
* passed.
*/
@NonNull
@LevelUpApi(contract = LevelUpApi.Contract.PUBLIC)
public AbstractRequest buildInterstitialImageRequest(@NonNull final Interstitial interstitial) {
final String deviceDensity = DeviceUtil.getDeviceDensityString(getContext());
final Uri.Builder builder = Uri.parse(interstitial.getImageUrl()).buildUpon();
builder.appendQueryParameter(PARAM_DENSITY, deviceDensity);
builder.appendQueryParameter(PARAM_WIDTH, DEFAULT_WIDTH);
builder.appendQueryParameter(PARAM_HEIGHT, DEFAULT_HEIGHT);
return new LevelUpRequest(getContext(), HttpMethod.GET, NullUtils.nonNullContract(builder
.build()), null, getAccessTokenRetriever());
}
}