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