package com.google.samples.apps.iosched.injection;
import android.app.Activity;
import android.app.LoaderManager;
import android.content.Context;
import android.net.Uri;
import com.google.samples.apps.iosched.archframework.Model;
import com.google.samples.apps.iosched.explore.ExploreIOModel;
import com.google.samples.apps.iosched.feedback.FeedbackHelper;
import com.google.samples.apps.iosched.feedback.SessionFeedbackModel;
import com.google.samples.apps.iosched.model.ScheduleHelper;
import com.google.samples.apps.iosched.myschedule.MyScheduleModel;
import com.google.samples.apps.iosched.session.SessionDetailModel;
import com.google.samples.apps.iosched.util.SessionsHelper;
import com.google.samples.apps.iosched.videolibrary.VideoLibraryModel;
/**
* Provides a way to inject stub classes when running integration tests.
*/
public class ModelProvider {
private static SessionDetailModel stubSessionDetailModel = null;
private static MyScheduleModel stubMyScheduleModel = null;
private static SessionFeedbackModel stubSessionFeedbackModel = null;
private static VideoLibraryModel stubVideoLibraryModel = null;
private static ExploreIOModel stubExploreIOModel = null;
public static SessionDetailModel provideSessionDetailModel(Uri sessionUri, Context context,
SessionsHelper sessionsHelper, LoaderManager loaderManager) {
if (stubSessionDetailModel != null) {
return stubSessionDetailModel;
} else {
return new SessionDetailModel(sessionUri, context, sessionsHelper, loaderManager);
}
}
public static MyScheduleModel provideMyScheduleModel(ScheduleHelper scheduleHelper,
Context context) {
if (stubMyScheduleModel != null) {
return stubMyScheduleModel.initStaticDataAndObservers();
} else {
return new MyScheduleModel(scheduleHelper, context).initStaticDataAndObservers();
}
}
public static SessionFeedbackModel provideSessionFeedbackModel(Uri sessionUri, Context context,
FeedbackHelper feedbackHelper, LoaderManager loaderManager) {
if (stubSessionFeedbackModel != null) {
return stubSessionFeedbackModel;
} else {
return new SessionFeedbackModel(loaderManager, sessionUri, context, feedbackHelper);
}
}
public static VideoLibraryModel provideVideoLibraryModel(Uri videoUri, Uri myVideosUri,
Uri filterUri, Activity activity, LoaderManager loaderManager) {
if (stubVideoLibraryModel != null) {
return stubVideoLibraryModel;
} else {
return new VideoLibraryModel(activity, loaderManager, videoUri, myVideosUri, filterUri);
}
}
public static ExploreIOModel provideExploreIOModel(Uri sessionsUri, Context context,
LoaderManager loaderManager) {
if (stubExploreIOModel != null) {
return stubExploreIOModel;
} else {
return new ExploreIOModel(context, sessionsUri, loaderManager);
}
}
public static void setStubModel(Model model) {
if (model instanceof ExploreIOModel) {
stubExploreIOModel = (ExploreIOModel) model;
} else if (model instanceof VideoLibraryModel) {
stubVideoLibraryModel = (VideoLibraryModel) model;
} else if (model instanceof SessionFeedbackModel) {
stubSessionFeedbackModel = (SessionFeedbackModel) model;
} else if (model instanceof SessionDetailModel) {
stubSessionDetailModel = (SessionDetailModel) model;
} if (model instanceof MyScheduleModel) {
stubMyScheduleModel = (MyScheduleModel) model;
}
}
}