package com.aviary.android.feather.effects;
import java.io.IOException;
import com.aviary.android.feather.R;
import com.aviary.android.feather.library.content.EffectEntry;
import com.aviary.android.feather.library.filters.FilterLoaderFactory;
import com.aviary.android.feather.library.filters.FilterLoaderFactory.Filters;
import com.aviary.android.feather.library.log.LoggerFactory;
import com.aviary.android.feather.library.log.LoggerFactory.Logger;
import com.aviary.android.feather.library.log.LoggerFactory.LoggerType;
import com.aviary.android.feather.library.services.EffectContext;
import com.aviary.android.feather.library.services.EffectContextService;
/**
* The Class EffectLoaderService.
*/
public class EffectLoaderService extends EffectContextService {
public static final String NAME = "effect-loader";
/**
* Instantiates a new effect loader service.
*
* @param context
* the context
*/
public EffectLoaderService( EffectContext context ) {
super( context );
}
/**
* Passing a {@link EffectEntry} return an instance of {@link AbstractEffectPanel} used to create the requested tool.
*
* @param entry
* the entry
* @return the abstract effect panel
*/
public AbstractEffectPanel load( EffectEntry entry ) {
AbstractEffectPanel panel = null;
final EffectContext context = getContext();
switch ( entry.name ) {
case ADJUST:
panel = new AdjustEffectPanel( context, Filters.ADJUST );
break;
case BRIGHTNESS:
panel = new NativeEffectRangePanel( context, Filters.BRIGHTNESS, "brightness" );
break;
case SATURATION:
panel = new NativeEffectRangePanel( context, Filters.SATURATION, "saturation" );
break;
case CONTRAST:
panel = new NativeEffectRangePanel( context, Filters.CONTRAST, "contrast" );
break;
case SHARPNESS:
panel = new NativeEffectRangePanel( context, Filters.SHARPNESS, "sharpen" );
break;
case COLORTEMP:
panel = new NativeEffectRangePanel( context, Filters.COLORTEMP, "temperature" );
break;
case ENHANCE:
panel = new EnhanceEffectPanel( context, Filters.ENHANCE );
break;
case EFFECTS:
panel = new EffectsPanel( context );
break;
case BORDERS:
panel = new BordersPanel( context );
break;
case CROP:
panel = new CropPanel( context );
break;
case RED_EYE:
panel = new DelayedSpotDrawPanel( context, Filters.RED_EYE, false );
break;
case WHITEN:
panel = new DelayedSpotDrawPanel( context, Filters.WHITEN, false );
break;
case BLEMISH:
panel = new DelayedSpotDrawPanel( context, Filters.BLEMISH, false );
break;
case DRAWING:
panel = new DrawingPanel( context );
break;
case STICKERS:
panel = new StickersPanel( context );
break;
case TEXT:
panel = new TextPanel( context );
break;
case MEME:
panel = new MemePanel( context );
break;
default:
Logger logger = LoggerFactory.getLogger( "EffectLoaderService", LoggerType.ConsoleLoggerType );
logger.error( "Effect with " + entry.name + " could not be found" );
break;
}
return panel;
}
/** The Constant mAllEntries. */
static final EffectEntry[] mAllEntries;
static {
mAllEntries = new EffectEntry[] {
new EffectEntry( FilterLoaderFactory.Filters.ENHANCE, R.drawable.feather_tool_icon_enhance, R.string.enhance ),
new EffectEntry( FilterLoaderFactory.Filters.EFFECTS, R.drawable.feather_tool_icon_effects, R.string.effects ),
new EffectEntry( FilterLoaderFactory.Filters.BORDERS, R.drawable.feather_tool_icon_borders, R.string.feather_borders ),
new EffectEntry( FilterLoaderFactory.Filters.STICKERS, R.drawable.feather_tool_icon_stickers, R.string.stickers ),
new EffectEntry( FilterLoaderFactory.Filters.ADJUST, R.drawable.feather_tool_icon_adjust, R.string.adjust ),
new EffectEntry( FilterLoaderFactory.Filters.CROP, R.drawable.feather_tool_icon_crop, R.string.crop ),
new EffectEntry( FilterLoaderFactory.Filters.BRIGHTNESS, R.drawable.feather_tool_icon_brightness, R.string.brightness ),
new EffectEntry( FilterLoaderFactory.Filters.COLORTEMP, R.drawable.feather_tool_icon_temperature, R.string.feather_tool_temperature ),
new EffectEntry( FilterLoaderFactory.Filters.CONTRAST, R.drawable.feather_tool_icon_contrast, R.string.contrast ),
new EffectEntry( FilterLoaderFactory.Filters.SATURATION, R.drawable.feather_tool_icon_saturation, R.string.saturation ),
new EffectEntry( FilterLoaderFactory.Filters.SHARPNESS, R.drawable.feather_tool_icon_sharpen, R.string.sharpen ),
new EffectEntry( FilterLoaderFactory.Filters.DRAWING, R.drawable.feather_tool_icon_draw, R.string.draw ),
new EffectEntry( FilterLoaderFactory.Filters.TEXT, R.drawable.feather_tool_icon_text, R.string.text ),
new EffectEntry( FilterLoaderFactory.Filters.MEME, R.drawable.feather_tool_icon_meme, R.string.meme ),
new EffectEntry( FilterLoaderFactory.Filters.RED_EYE, R.drawable.feather_tool_icon_redeye, R.string.red_eye ),
new EffectEntry( FilterLoaderFactory.Filters.WHITEN, R.drawable.feather_tool_icon_whiten, R.string.whiten ),
new EffectEntry( FilterLoaderFactory.Filters.BLEMISH, R.drawable.feather_tool_icon_blemish, R.string.blemish ), };
}
/**
* Return a list of available effects.
*
* @return the effects
*/
public EffectEntry[] getEffects() {
return mAllEntries;
}
public static final EffectEntry[] getAllEntries() {
return mAllEntries;
}
/**
* Check if the current application context has a valid folder "stickers" inside its assets folder.
*
* @return true, if successful
*/
public boolean hasStickers() {
try {
String[] list = null;
list = getContext().getBaseContext().getAssets().list( "stickers" );
return list.length > 0;
} catch ( IOException e ) {}
return false;
}
/*
* (non-Javadoc)
*
* @see com.aviary.android.feather.library.services.EffectContextService#dispose()
*/
@Override
public void dispose() {}
}