19fd8e6171bbdc37f5516fe15b2d96f4ae926ef1aChris Craik/*
29fd8e6171bbdc37f5516fe15b2d96f4ae926ef1aChris Craik * Copyright (C) 2017 The Android Open Source Project
39fd8e6171bbdc37f5516fe15b2d96f4ae926ef1aChris Craik *
49fd8e6171bbdc37f5516fe15b2d96f4ae926ef1aChris Craik * Licensed under the Apache License, Version 2.0 (the "License");
59fd8e6171bbdc37f5516fe15b2d96f4ae926ef1aChris Craik * you may not use this file except in compliance with the License.
69fd8e6171bbdc37f5516fe15b2d96f4ae926ef1aChris Craik * You may obtain a copy of the License at
79fd8e6171bbdc37f5516fe15b2d96f4ae926ef1aChris Craik *
89fd8e6171bbdc37f5516fe15b2d96f4ae926ef1aChris Craik *      http://www.apache.org/licenses/LICENSE-2.0
99fd8e6171bbdc37f5516fe15b2d96f4ae926ef1aChris Craik *
109fd8e6171bbdc37f5516fe15b2d96f4ae926ef1aChris Craik * Unless required by applicable law or agreed to in writing, software
119fd8e6171bbdc37f5516fe15b2d96f4ae926ef1aChris Craik * distributed under the License is distributed on an "AS IS" BASIS,
129fd8e6171bbdc37f5516fe15b2d96f4ae926ef1aChris Craik * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
139fd8e6171bbdc37f5516fe15b2d96f4ae926ef1aChris Craik * See the License for the specific language governing permissions and
149fd8e6171bbdc37f5516fe15b2d96f4ae926ef1aChris Craik * limitations under the License.
159fd8e6171bbdc37f5516fe15b2d96f4ae926ef1aChris Craik */
169fd8e6171bbdc37f5516fe15b2d96f4ae926ef1aChris Craik
179fd8e6171bbdc37f5516fe15b2d96f4ae926ef1aChris Craikpackage android.arch.paging.integration.testapp;
189fd8e6171bbdc37f5516fe15b2d96f4ae926ef1aChris Craik
19ef346ae131affbba6345e00d833103acc5743c8aChris Craikimport android.arch.paging.BoundedDataSource;
209fd8e6171bbdc37f5516fe15b2d96f4ae926ef1aChris Craikimport android.graphics.Color;
219fd8e6171bbdc37f5516fe15b2d96f4ae926ef1aChris Craikimport android.support.annotation.ColorInt;
229fd8e6171bbdc37f5516fe15b2d96f4ae926ef1aChris Craik
239fd8e6171bbdc37f5516fe15b2d96f4ae926ef1aChris Craikimport java.util.ArrayList;
249fd8e6171bbdc37f5516fe15b2d96f4ae926ef1aChris Craikimport java.util.List;
259fd8e6171bbdc37f5516fe15b2d96f4ae926ef1aChris Craik
269fd8e6171bbdc37f5516fe15b2d96f4ae926ef1aChris Craik/**
279fd8e6171bbdc37f5516fe15b2d96f4ae926ef1aChris Craik * Sample data source with artificial data.
289fd8e6171bbdc37f5516fe15b2d96f4ae926ef1aChris Craik */
2924418e9aafa6ae3128ae47cf7087eda46dae4f5dChris Craikclass ItemDataSource extends BoundedDataSource<Item> {
3024418e9aafa6ae3128ae47cf7087eda46dae4f5dChris Craik    private static final int COUNT = 500;
319fd8e6171bbdc37f5516fe15b2d96f4ae926ef1aChris Craik
329fd8e6171bbdc37f5516fe15b2d96f4ae926ef1aChris Craik    @ColorInt
339fd8e6171bbdc37f5516fe15b2d96f4ae926ef1aChris Craik    private static final int[] COLORS = new int[] {
349fd8e6171bbdc37f5516fe15b2d96f4ae926ef1aChris Craik            Color.RED,
359fd8e6171bbdc37f5516fe15b2d96f4ae926ef1aChris Craik            Color.BLUE,
369fd8e6171bbdc37f5516fe15b2d96f4ae926ef1aChris Craik            Color.BLACK,
379fd8e6171bbdc37f5516fe15b2d96f4ae926ef1aChris Craik    };
389fd8e6171bbdc37f5516fe15b2d96f4ae926ef1aChris Craik
399fd8e6171bbdc37f5516fe15b2d96f4ae926ef1aChris Craik    private static int sGenerationId;
409fd8e6171bbdc37f5516fe15b2d96f4ae926ef1aChris Craik    private final int mGenerationId = sGenerationId++;
419fd8e6171bbdc37f5516fe15b2d96f4ae926ef1aChris Craik
429fd8e6171bbdc37f5516fe15b2d96f4ae926ef1aChris Craik    @Override
43f0d13608aae3b4700d84c1c4532abbea56ea7a28Chris Craik    public int countItems() {
4424418e9aafa6ae3128ae47cf7087eda46dae4f5dChris Craik        return COUNT;
459fd8e6171bbdc37f5516fe15b2d96f4ae926ef1aChris Craik    }
469fd8e6171bbdc37f5516fe15b2d96f4ae926ef1aChris Craik
479fd8e6171bbdc37f5516fe15b2d96f4ae926ef1aChris Craik    @Override
4824418e9aafa6ae3128ae47cf7087eda46dae4f5dChris Craik    public List<Item> loadRange(int startPosition, int loadCount) {
499fd8e6171bbdc37f5516fe15b2d96f4ae926ef1aChris Craik        if (isInvalid()) {
509fd8e6171bbdc37f5516fe15b2d96f4ae926ef1aChris Craik            // abort!
519fd8e6171bbdc37f5516fe15b2d96f4ae926ef1aChris Craik            return null;
529fd8e6171bbdc37f5516fe15b2d96f4ae926ef1aChris Craik        }
539fd8e6171bbdc37f5516fe15b2d96f4ae926ef1aChris Craik
549fd8e6171bbdc37f5516fe15b2d96f4ae926ef1aChris Craik        List<Item> items = new ArrayList<>();
55114bdca94b6571ef9f45ea6e826715141741d49eChris Craik        int end = Math.min(COUNT, startPosition + loadCount);
569fd8e6171bbdc37f5516fe15b2d96f4ae926ef1aChris Craik        int bgColor = COLORS[mGenerationId % COLORS.length];
579fd8e6171bbdc37f5516fe15b2d96f4ae926ef1aChris Craik
589fd8e6171bbdc37f5516fe15b2d96f4ae926ef1aChris Craik        try {
5924418e9aafa6ae3128ae47cf7087eda46dae4f5dChris Craik            Thread.sleep(1000);
609fd8e6171bbdc37f5516fe15b2d96f4ae926ef1aChris Craik        } catch (InterruptedException e) {
619fd8e6171bbdc37f5516fe15b2d96f4ae926ef1aChris Craik            e.printStackTrace();
629fd8e6171bbdc37f5516fe15b2d96f4ae926ef1aChris Craik        }
6324418e9aafa6ae3128ae47cf7087eda46dae4f5dChris Craik        for (int i = startPosition; i != end; i++) {
649fd8e6171bbdc37f5516fe15b2d96f4ae926ef1aChris Craik            items.add(new Item(i, "item " + i, bgColor));
659fd8e6171bbdc37f5516fe15b2d96f4ae926ef1aChris Craik        }
669fd8e6171bbdc37f5516fe15b2d96f4ae926ef1aChris Craik
679fd8e6171bbdc37f5516fe15b2d96f4ae926ef1aChris Craik        if (isInvalid()) {
689fd8e6171bbdc37f5516fe15b2d96f4ae926ef1aChris Craik            // abort!
699fd8e6171bbdc37f5516fe15b2d96f4ae926ef1aChris Craik            return null;
709fd8e6171bbdc37f5516fe15b2d96f4ae926ef1aChris Craik        }
719fd8e6171bbdc37f5516fe15b2d96f4ae926ef1aChris Craik        return items;
729fd8e6171bbdc37f5516fe15b2d96f4ae926ef1aChris Craik    }
739fd8e6171bbdc37f5516fe15b2d96f4ae926ef1aChris Craik}
74