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 17bdc4c86d3dff74f6634a38e2f7b316b0e823a2c8Alan Viverettepackage androidx.paging.integration.testapp; 189fd8e6171bbdc37f5516fe15b2d96f4ae926ef1aChris Craik 19bdc4c86d3dff74f6634a38e2f7b316b0e823a2c8Alan Viveretteimport androidx.lifecycle.LiveData; 20bdc4c86d3dff74f6634a38e2f7b316b0e823a2c8Alan Viveretteimport androidx.lifecycle.ViewModel; 21bdc4c86d3dff74f6634a38e2f7b316b0e823a2c8Alan Viveretteimport androidx.paging.DataSource; 22bdc4c86d3dff74f6634a38e2f7b316b0e823a2c8Alan Viveretteimport androidx.paging.LivePagedListBuilder; 23bdc4c86d3dff74f6634a38e2f7b316b0e823a2c8Alan Viveretteimport androidx.paging.PagedList; 249fd8e6171bbdc37f5516fe15b2d96f4ae926ef1aChris Craik 259fd8e6171bbdc37f5516fe15b2d96f4ae926ef1aChris Craik/** 269fd8e6171bbdc37f5516fe15b2d96f4ae926ef1aChris Craik * Sample ViewModel backed by an artificial data source 279fd8e6171bbdc37f5516fe15b2d96f4ae926ef1aChris Craik */ 289adfe48e0670127286c20420be729aa9eab204dcChris Craik@SuppressWarnings("WeakerAccess") 299adfe48e0670127286c20420be729aa9eab204dcChris Craikpublic class PagedListItemViewModel extends ViewModel { 309fd8e6171bbdc37f5516fe15b2d96f4ae926ef1aChris Craik private ItemDataSource mDataSource; 319adfe48e0670127286c20420be729aa9eab204dcChris Craik private final Object mDataSourceLock = new Object(); 329fd8e6171bbdc37f5516fe15b2d96f4ae926ef1aChris Craik 335dc2fd49c2887578d8b76a9014e1b43d088c7fdaChris Craik private final DataSource.Factory<Integer, Item> mFactory = 345dc2fd49c2887578d8b76a9014e1b43d088c7fdaChris Craik new DataSource.Factory<Integer, Item>() { 355dc2fd49c2887578d8b76a9014e1b43d088c7fdaChris Craik @Override 365dc2fd49c2887578d8b76a9014e1b43d088c7fdaChris Craik public DataSource<Integer, Item> create() { 375dc2fd49c2887578d8b76a9014e1b43d088c7fdaChris Craik ItemDataSource newDataSource = new ItemDataSource(); 385dc2fd49c2887578d8b76a9014e1b43d088c7fdaChris Craik synchronized (mDataSourceLock) { 395dc2fd49c2887578d8b76a9014e1b43d088c7fdaChris Craik mDataSource = newDataSource; 405dc2fd49c2887578d8b76a9014e1b43d088c7fdaChris Craik return mDataSource; 415dc2fd49c2887578d8b76a9014e1b43d088c7fdaChris Craik } 425dc2fd49c2887578d8b76a9014e1b43d088c7fdaChris Craik } 435dc2fd49c2887578d8b76a9014e1b43d088c7fdaChris Craik }; 445dc2fd49c2887578d8b76a9014e1b43d088c7fdaChris Craik 455dc2fd49c2887578d8b76a9014e1b43d088c7fdaChris Craik private LiveData<PagedList<Item>> mLivePagedList = 465dc2fd49c2887578d8b76a9014e1b43d088c7fdaChris Craik new LivePagedListBuilder<>(mFactory, 20).build(); 475dc2fd49c2887578d8b76a9014e1b43d088c7fdaChris Craik 489fd8e6171bbdc37f5516fe15b2d96f4ae926ef1aChris Craik void invalidateList() { 499adfe48e0670127286c20420be729aa9eab204dcChris Craik synchronized (mDataSourceLock) { 509adfe48e0670127286c20420be729aa9eab204dcChris Craik if (mDataSource != null) { 519adfe48e0670127286c20420be729aa9eab204dcChris Craik mDataSource.invalidate(); 529adfe48e0670127286c20420be729aa9eab204dcChris Craik } 539fd8e6171bbdc37f5516fe15b2d96f4ae926ef1aChris Craik } 549fd8e6171bbdc37f5516fe15b2d96f4ae926ef1aChris Craik } 559fd8e6171bbdc37f5516fe15b2d96f4ae926ef1aChris Craik 5624418e9aafa6ae3128ae47cf7087eda46dae4f5dChris Craik LiveData<PagedList<Item>> getLivePagedList() { 579fd8e6171bbdc37f5516fe15b2d96f4ae926ef1aChris Craik return mLivePagedList; 589fd8e6171bbdc37f5516fe15b2d96f4ae926ef1aChris Craik } 599fd8e6171bbdc37f5516fe15b2d96f4ae926ef1aChris Craik} 60