/* * Copyright 2016 Google Inc. All rights reserved. * * 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.google.samples.apps.iosched.myschedule; import android.content.Context; import android.os.Handler; import android.support.test.InstrumentationRegistry; import com.google.samples.apps.iosched.Config; import com.google.samples.apps.iosched.model.ScheduleHelper; import com.google.samples.apps.iosched.model.ScheduleItem; import java.util.ArrayList; /** * A stub {@link MyScheduleModel}, to be injected using {@link com.google.samples.apps.iosched * .injection.Injection}. It overrides {@link #updateData(DataQueryCallback)} to bypass the {@link * ScheduleHelper#getScheduleDataAsync(LoadScheduleDataListener, long, long)} mechanism. Use the * classes in {@link com.google.samples.apps.iosched.mockdata} to provide the mock data. */ public class StubMyScheduleModel extends MyScheduleModel { private ArrayList<ScheduleItem> mMockScheduleDataDay1; private ArrayList<ScheduleItem> mMockScheduleDataDay2; /** * @param context Pass in the context using {@link * InstrumentationRegistry#getTargetContext()} * @param mockScheduleDataDay1 Stub data for day 1 of the conference * @param mockScheduleDataDay2 Stub data for day 2 of the conference */ public StubMyScheduleModel(Context context, ArrayList<ScheduleItem> mockScheduleDataDay1, ArrayList<ScheduleItem> mockScheduleDataDay2) { super(null, context); mMockScheduleDataDay1 = mockScheduleDataDay1; mMockScheduleDataDay2 = mockScheduleDataDay2; } public void setMockScheduleDataDay1(ArrayList<ScheduleItem> mockScheduleDataDay1) { mMockScheduleDataDay1 = mockScheduleDataDay1; } public void setMockScheduleDataDay2(ArrayList<ScheduleItem> mockScheduleDataDay2) { mMockScheduleDataDay2 = mockScheduleDataDay2; } public void fireContentObserver() { mObserver.cancelPendingCallback(); mObserver.onChange(true); } /** * This bypasses the use of {@link ScheduleHelper} to get the data and sets the data as per the * mock data passed in the constructor. */ @Override protected void updateData(final DataQueryCallback callback) { for (int i = 0; i < Config.CONFERENCE_DAYS.length; i++) { /** * The key in {@link #mScheduleData} is 1 for the first day, 2 for the second etc */ final int dayId = i + 1; // Immediately use cached data if available if (mScheduleData.containsKey(dayId)) { if (callback != null) { callback.onModelUpdated(this, MyScheduleQueryEnum.SCHEDULE); } } // Update cached data with mock data, simulate delay Handler h = new Handler(); Runnable r = new Runnable() { @Override public void run() { // Only update day 1 and day 2 with mock data if (dayId < 3) { updateCache(dayId, dayId == 1 ? mMockScheduleDataDay1 : mMockScheduleDataDay2, callback); } } }; h.postDelayed(r, 200); } } }