/**
* Copyright (c) 2013-2014. Francisco Contreras, Holland Salazar.
* Copyright (c) 2015. Tobias Strebitzer, Francisco Contreras, Holland Salazar.
* All rights reserved.
* <p/>
* Redistribution and use in source and binary forms, with or without modification, are
* permitted provided that the following conditions are met:
* <p/>
* Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this list of
* conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
* Neither the name of the Baker Framework nor the names of its contributors may be used to
* endorse or promote products derived from this software without specific prior written
* permission.
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
* SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package com.bakerframework.baker.handler;
import android.app.Activity;
import android.util.Log;
import com.bakerframework.baker.BakerApplication;
import com.bakerframework.baker.R;
import com.bakerframework.baker.model.Issue;
import com.bakerframework.baker.plugin.BakerPlugin;
import org.solovyev.android.checkout.Sku;
import java.lang.reflect.Constructor;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class PluginManager {
private final List<BakerPlugin> plugins;
public PluginManager() {
plugins = new ArrayList<>();
List<String> pluginClassNames = Arrays.asList(BakerApplication.getInstance().getResources().getStringArray(R.array.baker_plugins));
for (String pluginClassName : pluginClassNames) {
try {
Class pluginClass = Class.forName("com.bakerframework.baker.plugin." + pluginClassName);
Class[] types = {};
Constructor constructor = pluginClass.getConstructor(types);
BakerPlugin plugin = (BakerPlugin) constructor.newInstance();
plugins.add(plugin);
} catch (Exception e) {
Log.e("BakerApplication", "Plugin Error: " + e.getMessage());
}
}
Log.d("BakerApplication", "Initialized " + plugins.size() + " plugins");
}
// Activity Events
public void onSplashActivityCreated(Activity activity) {
for(BakerPlugin plugin : plugins) {
plugin.onSplashActivityCreated(activity);
}
}
public void onShelfActivityCreated(Activity activity) {
for(BakerPlugin plugin : plugins) {
plugin.onShelfActivityCreated(activity);
}
}
public void onIssueActivityCreated(Activity activity) {
for(BakerPlugin plugin : plugins) {
plugin.onIssueActivityCreated(activity);
}
}
// Shelf / Issue Events
public void onIssueDownloadClicked(Issue issue) {
for(BakerPlugin plugin : plugins) {
plugin.onIssueDownloadClicked(issue);
}
}
public void onIssuePurchaseClicked(Issue issue) {
for(BakerPlugin plugin : plugins) {
plugin.onIssuePurchaseClicked(issue);
}
}
public void onIssueArchiveClicked(Issue issue) {
for(BakerPlugin plugin : plugins) {
plugin.onIssueArchiveClicked(issue);
}
}
// Issue Navigation Events
public void onIssuePageOpened(Issue issue, String pageTitle, int pageIndex) {
for(BakerPlugin plugin : plugins) {
plugin.onIssuePageOpened(issue, pageTitle, pageIndex);
}
}
// Purchase Events
public void onIssueReadClicked(Issue issue) {
for(BakerPlugin plugin : plugins) {
plugin.onIssueReadClicked(issue);
}
}
public void onSubscribeClicked(Sku subscription) {
for(BakerPlugin plugin : plugins) {
plugin.onSubscribeClicked(subscription);
}
}
}