1d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber/* 2d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber * Copyright (C) 2017 The Android Open Source Project 3d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber * 4d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber * Licensed under the Apache License, Version 2.0 (the "License"); 5d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber * you may not use this file except in compliance with the License. 6d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber * You may obtain a copy of the License at 7d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber * 8d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber * http://www.apache.org/licenses/LICENSE-2.0 9d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber * 10d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber * Unless required by applicable law or agreed to in writing, software 11d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber * distributed under the License is distributed on an "AS IS" BASIS, 12d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber * See the License for the specific language governing permissions and 14d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber * limitations under the License. 15d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber */ 1677245813007cf903b4b73f5d0cd20313fbf0e510Andreas Huber 1777245813007cf903b4b73f5d0cd20313fbf0e510Andreas Huberpackage android.support.v17.leanback.widget; 18d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber 19d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huberimport android.graphics.Bitmap; 20d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber 214a8b9a2363b7b7b4f98022e6d9aae8b8aa8e35e5Andreas Huber/** 22d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber * Class to be implemented by app to provide seeking data and thumbnails to UI. 23d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber */ 24d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huberpublic class PlaybackSeekDataProvider { 25d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber 26d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber /** 2777245813007cf903b4b73f5d0cd20313fbf0e510Andreas Huber * Client to receive result for {@link PlaybackSeekDataProvider#getThumbnail(int, 28d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber * ResultCallback)}. 29d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber */ 30d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber public static class ResultCallback { 3177245813007cf903b4b73f5d0cd20313fbf0e510Andreas Huber 3277245813007cf903b4b73f5d0cd20313fbf0e510Andreas Huber /** 33d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber * Client of thumbnail bitmap being loaded. PlaybackSeekDataProvider must invoke this method 34d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber * in UI thread such as in {@link android.os.AsyncTask#onPostExecute(Object)}. 35d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber * 36d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber * @param bitmap Result of bitmap. 37d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber * @param index Index of {@link #getSeekPositions()}. 38d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber */ 39d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber public void onThumbnailLoaded(Bitmap bitmap, int index) { 40d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber } 41d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber } 42d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber 43d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber /** 44d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber * Get a list of sorted seek positions. The positions should not change after user starts 45e1957358f11031a554c57d4fb46988dd6044acc1Andreas Huber * seeking. 46d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber * 47d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber * @return A list of sorted seek positions. 48d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber */ 49d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber public long[] getSeekPositions() { 50d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber return null; 51d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber } 52d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber 5377245813007cf903b4b73f5d0cd20313fbf0e510Andreas Huber /** 5477245813007cf903b4b73f5d0cd20313fbf0e510Andreas Huber * Called to get thumbnail bitmap. This method is called on UI thread. When provider finds 55d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber * cache bitmap, it may invoke {@link ResultCallback#onThumbnailLoaded(Bitmap, int)} 56d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber * immediately. Provider may start background thread and invoke 57d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber * {@link ResultCallback#onThumbnailLoaded(Bitmap, int)} later in UI thread. The method might 58d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber * be called multiple times for the same position, PlaybackSeekDataProvider must guarantee 5977245813007cf903b4b73f5d0cd20313fbf0e510Andreas Huber * to replace pending {@link ResultCallback} with the new one. When seeking right, 6077245813007cf903b4b73f5d0cd20313fbf0e510Andreas Huber * getThumbnail() will be called with increasing index; when seeking left, getThumbnail() will 6196fc6cc65ca93009a759a3a874b82a35771b9714Andreas Huber * be called with decreasing index. The increment of index can be used by subclass to determine 6296fc6cc65ca93009a759a3a874b82a35771b9714Andreas Huber * prefetch direction. 63d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber * 64d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber * @param index Index of position in {@link #getSeekPositions()}. 65d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber * @param callback The callback to receive the result on UI thread. It may be called within 66d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber * getThumbnail() if hit cache directly. 67d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber */ 68d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber public void getThumbnail(int index, ResultCallback callback) { 69d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber } 7096fc6cc65ca93009a759a3a874b82a35771b9714Andreas Huber 7196fc6cc65ca93009a759a3a874b82a35771b9714Andreas Huber /** 7296fc6cc65ca93009a759a3a874b82a35771b9714Andreas Huber * Called when seek stops, Provider should cancel pending requests for the thumbnails. 7396fc6cc65ca93009a759a3a874b82a35771b9714Andreas Huber */ 7496fc6cc65ca93009a759a3a874b82a35771b9714Andreas Huber public void reset() { 7596fc6cc65ca93009a759a3a874b82a35771b9714Andreas Huber } 7696fc6cc65ca93009a759a3a874b82a35771b9714Andreas Huber} 7796fc6cc65ca93009a759a3a874b82a35771b9714Andreas Huber