diff options
Diffstat (limited to 'src/com/android')
-rw-r--r-- | src/com/android/tv/MainActivity.java | 6 | ||||
-rw-r--r-- | src/com/android/tv/data/ProgramDataManager.java | 112 | ||||
-rw-r--r-- | src/com/android/tv/guide/ProgramGuide.java | 10 | ||||
-rw-r--r-- | src/com/android/tv/guide/ProgramManager.java | 27 |
4 files changed, 23 insertions, 132 deletions
diff --git a/src/com/android/tv/MainActivity.java b/src/com/android/tv/MainActivity.java index e39b5f9c..e550700f 100644 --- a/src/com/android/tv/MainActivity.java +++ b/src/com/android/tv/MainActivity.java @@ -2839,10 +2839,8 @@ public class MainActivity extends Activity Debug.getTimer(Debug.TAG_START_UP_TIMER).log("MainActivity.MyOnTuneListener.onTune"); mChannel = channel; mWasUnderShrunkenTvView = wasUnderShrunkenTvView; - if (mBackendKnobs.fetchProgramsAsNeeded()) { - // Fetch complete projection of tuned channel. - mProgramDataManager.onChannelTuned(channel.getId()); - } + // Fetch complete projection of tuned channel. + mProgramDataManager.onChannelTuned(channel.getId()); } @Override diff --git a/src/com/android/tv/data/ProgramDataManager.java b/src/com/android/tv/data/ProgramDataManager.java index f329d6c2..2cf5da45 100644 --- a/src/com/android/tv/data/ProgramDataManager.java +++ b/src/com/android/tv/data/ProgramDataManager.java @@ -80,11 +80,6 @@ public class ProgramDataManager implements MemoryManageable { private static final long CURRENT_PROGRAM_UPDATE_WAIT_MS = TimeUnit.SECONDS.toMillis(5); @VisibleForTesting static final long PROGRAM_GUIDE_SNAP_TIME_MS = TimeUnit.MINUTES.toMillis(30); - // Default fetch hours - private static final long FETCH_HOURS_MS = TimeUnit.HOURS.toMillis(24); - // Load data earlier for smooth scrolling. - private static final long BUFFER_HOURS_MS = TimeUnit.HOURS.toMillis(6); - // TODO: Use TvContract constants, once they become public. private static final String PARAM_START_TIME = "start_time"; private static final String PARAM_END_TIME = "end_time"; @@ -148,9 +143,6 @@ public class ProgramDataManager implements MemoryManageable { private final LruCache<Long, Program> mZeroLengthProgramCache = new LruCache<>(10); // Current tuned channel. private long mTunedChannelId; - // Hours of data to be fetched, it is updated during horizontal scroll. - // Note that it should never exceed programGuideMaxHours. - private long mMaxFetchHoursMs = FETCH_HOURS_MS; @MainThread public ProgramDataManager(Context context) { @@ -293,73 +285,23 @@ public class ProgramDataManager implements MemoryManageable { * Prefetch program data if needed. * * @param channelId ID of the channel to prefetch - * @param selectedProgramIndex index of selected program. */ - public void prefetchChannel(long channelId, int selectedProgramIndex) { + public void prefetchChannel(long channelId) { long startTimeMs = Utils.floorTime( mClock.currentTimeMillis() - PROGRAM_GUIDE_SNAP_TIME_MS, PROGRAM_GUIDE_SNAP_TIME_MS); - if (!mBackendKnobsFlags.fetchProgramsAsNeeded()) { - if (mCompleteInfoChannelIds.add(channelId)) { - long endTimeMs = startTimeMs + TimeUnit.HOURS.toMillis(getFetchDuration()); - mCompleteInfoChannelIds.clear(); - new SingleChannelPrefetchTask(channelId, startTimeMs, endTimeMs) - .executeOnDbThread(); - } - } else { - long programGuideMaxHoursMs = - TimeUnit.HOURS.toMillis(mBackendKnobsFlags.programGuideMaxHours()); - long endTimeMs = 0; - if (mMaxFetchHoursMs < programGuideMaxHoursMs - && isHorizontalLoadNeeded(startTimeMs, channelId, selectedProgramIndex)) { - // Horizontal scrolling needs to load data of further days. - mMaxFetchHoursMs = - Math.min(programGuideMaxHoursMs, mMaxFetchHoursMs + FETCH_HOURS_MS); - mCompleteInfoChannelIds.clear(); - } - // Load max hours complete data for first channel. - if (mCompleteInfoChannelIds.isEmpty()) { - endTimeMs = startTimeMs + programGuideMaxHoursMs; - } else if (!mCompleteInfoChannelIds.contains(channelId)) { - endTimeMs = startTimeMs + mMaxFetchHoursMs; - } - - if (endTimeMs > 0) { - mCompleteInfoChannelIds.add(channelId); - new SingleChannelPrefetchTask(channelId, startTimeMs, endTimeMs) - .executeOnDbThread(); - } + if (mCompleteInfoChannelIds.add(channelId)) { + long endTimeMs = startTimeMs + TimeUnit.HOURS.toMillis(getFetchDuration()); + mCompleteInfoChannelIds.clear(); + new SingleChannelPrefetchTask(channelId, startTimeMs, endTimeMs).executeOnDbThread(); } } - /** - * Check if enough data is present for horizontal scroll, otherwise prefetch programs. - * - * <p>If end time of current program is past {@code BUFFER_HOURS_MS} less than the fetched time - * we need to prefetch proceeding programs. - * - * @param startTimeMs Fetch start time, it is used to get fetch end time. - * @param channelId - * @param selectedProgramIndex - * @return {@code true} If data load is needed, else {@code false}. - */ - private boolean isHorizontalLoadNeeded( - long startTimeMs, long channelId, int selectedProgramIndex) { - long marginEndTime = startTimeMs + mMaxFetchHoursMs - BUFFER_HOURS_MS; - return (mChannelIdProgramCache.containsKey(channelId) - && mChannelIdProgramCache.get(channelId).size() > selectedProgramIndex - && mChannelIdProgramCache - .get(channelId) - .get(selectedProgramIndex) - .getEndTimeUtcMillis() - > marginEndTime); - } - public void onChannelTuned(long channelId) { mTunedChannelId = channelId; - prefetchChannel(channelId, 0); + prefetchChannel(channelId); } /** A Callback interface to receive notification on program data retrieval from DB. */ @@ -372,14 +314,6 @@ public class ProgramDataManager implements MemoryManageable { void onProgramUpdated(); /** - * Called when we update complete program data of specific channel during scrolling. Data is - * loaded from DB on request basis. - * - * @param channelId - */ - void onSingleChannelUpdated(long channelId); - - /** * Called when we update program data during scrolling. Data is loaded from DB on request * basis. It loads data based on horizontal scrolling as well. */ @@ -637,10 +571,7 @@ public class ProgramDataManager implements MemoryManageable { } programMap.clear(); - String[] projection = - mBackendKnobsFlags.fetchProgramsAsNeeded() - ? ProgramImpl.PARTIAL_PROJECTION - : ProgramImpl.PROJECTION; + String[] projection = ProgramImpl.PARTIAL_PROJECTION; if (TvProviderUtils.checkSeriesIdColumn(mContext, Programs.CONTENT_URI)) { if (Utils.isProgramsUri(uri)) { projection = @@ -723,19 +654,15 @@ public class ProgramDataManager implements MemoryManageable { PROGRAM_GUIDE_SNAP_TIME_MS) - currentTime; // Issue second pre-fetch immediately after the first partial update - if (!mBackendKnobsFlags.fetchProgramsAsNeeded() - && mChannelIdProgramCache.isEmpty()) { + if (mChannelIdProgramCache.isEmpty()) { nextMessageDelayedTime = 0; } mChannelIdProgramCache = programs; - if (mBackendKnobsFlags.fetchProgramsAsNeeded()) { - // Since cache has partial data we need to reset the map of complete data. - clearChannelInfoMap(); - // Get complete projection of tuned channel. - if (mBackendKnobsFlags.fetchProgramsAsNeeded()) { - prefetchChannel(mTunedChannelId, 0); - } - } + // Since cache has partial data we need to reset the map of complete data. + clearChannelInfoMap(); + // Get complete projection of tuned channel. + prefetchChannel(mTunedChannelId); + notifyProgramUpdated(); if (mFromEmptyCacheTimeEvent != null) { mPerformanceMonitor.stopTimer( @@ -755,7 +682,6 @@ public class ProgramDataManager implements MemoryManageable { private void clearChannelInfoMap() { mCompleteInfoChannelIds.clear(); - mMaxFetchHoursMs = FETCH_HOURS_MS; } private long getFetchDuration() { @@ -809,11 +735,7 @@ public class ProgramDataManager implements MemoryManageable { @Override protected void onPostExecute(ArrayList<Program> programs) { mChannelIdProgramCache.put(mChannelId, programs); - if (mBackendKnobsFlags.fetchProgramsAsNeeded()) { - notifyChannelUpdated(); - } else { - notifySingleChannelUpdated(mChannelId); - } + notifyChannelUpdated(); } } @@ -823,12 +745,6 @@ public class ProgramDataManager implements MemoryManageable { } } - private void notifySingleChannelUpdated(long channelId) { - for (Callback callback : mCallbacks) { - callback.onSingleChannelUpdated(channelId); - } - } - private void notifyChannelUpdated() { for (Callback callback : mCallbacks) { callback.onChannelUpdated(); diff --git a/src/com/android/tv/guide/ProgramGuide.java b/src/com/android/tv/guide/ProgramGuide.java index bddcc8bb..8ae61e8a 100644 --- a/src/com/android/tv/guide/ProgramGuide.java +++ b/src/com/android/tv/guide/ProgramGuide.java @@ -41,9 +41,11 @@ import android.view.ViewGroup.LayoutParams; import android.view.ViewTreeObserver; import android.view.accessibility.AccessibilityManager; import android.view.accessibility.AccessibilityManager.AccessibilityStateChangeListener; + import androidx.leanback.widget.OnChildSelectedListener; import androidx.leanback.widget.SearchOrbView; import androidx.leanback.widget.VerticalGridView; + import com.android.tv.ChannelTuner; import com.android.tv.MainActivity; import com.android.tv.R; @@ -65,8 +67,9 @@ import com.android.tv.ui.ViewUtils; import com.android.tv.ui.hideable.AutoHideScheduler; import com.android.tv.util.TvInputManagerHelper; import com.android.tv.util.Utils; -import com.android.tv.common.flags.BackendKnobsFlags; + import com.android.tv.common.flags.UiFlags; + import java.util.ArrayList; import java.util.List; import java.util.concurrent.TimeUnit; @@ -187,7 +190,6 @@ public class ProgramGuide mActivity = activity; TvSingletons singletons = TvSingletons.getSingletons(mActivity); mPerformanceMonitor = singletons.getPerformanceMonitor(); - BackendKnobsFlags backendKnobsFlags = singletons.getBackendKnobs(); mUiFlags = singletons.getUiFlags(); mProgramManager = new ProgramManager( @@ -195,9 +197,7 @@ public class ProgramGuide channelDataManager, programDataManager, dvrDataManager, - dvrScheduleManager, - backendKnobsFlags, - mUiFlags); + dvrScheduleManager); mChannelTuner = channelTuner; mTracker = tracker; mPreShowRunnable = preShowRunnable; diff --git a/src/com/android/tv/guide/ProgramManager.java b/src/com/android/tv/guide/ProgramManager.java index 76b00365..0fa20df4 100644 --- a/src/com/android/tv/guide/ProgramManager.java +++ b/src/com/android/tv/guide/ProgramManager.java @@ -35,9 +35,6 @@ import com.android.tv.dvr.data.ScheduledRecording; import com.android.tv.util.TvInputManagerHelper; import com.android.tv.util.Utils; -import com.android.tv.common.flags.BackendKnobsFlags; -import com.android.tv.common.flags.UiFlags; - import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -65,7 +62,6 @@ public class ProgramManager { private final ProgramDataManager mProgramDataManager; private final DvrDataManager mDvrDataManager; // Only set if DVR is enabled private final DvrScheduleManager mDvrScheduleManager; - private final BackendKnobsFlags mBackendKnobsFlags; private long mStartUtcMillis; private long mEndUtcMillis; @@ -133,20 +129,6 @@ public class ProgramManager { updateTableEntriesWithoutNotification(false); notifyTableEntriesUpdated(); } - - @Override - public void onSingleChannelUpdated(long channelId) { - boolean parentalControlsEnabled = - mTvInputManagerHelper - .getParentalControlSettings() - .isParentalControlsEnabled(); - // Inline the updating of the mChannelIdEntriesMap here so we can only call - // getParentalControlSettings once. - List<TableEntry> entries = - createProgramEntries(channelId, parentalControlsEnabled); - mChannelIdEntriesMap.put(channelId, entries); - notifyTableEntriesUpdated(); - } }; private final DvrDataManager.ScheduledRecordingListener mScheduledRecordingListener = @@ -226,15 +208,12 @@ public class ProgramManager { ChannelDataManager channelDataManager, ProgramDataManager programDataManager, @Nullable DvrDataManager dvrDataManager, - @Nullable DvrScheduleManager dvrScheduleManager, - BackendKnobsFlags backendKnobsFlags, - UiFlags uiFlags) { + @Nullable DvrScheduleManager dvrScheduleManager) { mTvInputManagerHelper = tvInputManagerHelper; mChannelDataManager = channelDataManager; mProgramDataManager = programDataManager; mDvrDataManager = dvrDataManager; mDvrScheduleManager = dvrScheduleManager; - mBackendKnobsFlags = backendKnobsFlags; } void programGuideVisibilityChanged(boolean visible) { @@ -444,9 +423,7 @@ public class ProgramManager { * one (e.g., whose channelId is INVALID_ID), when it corresponds to a gap between programs. */ TableEntry getTableEntry(long channelId, int index) { - if (mBackendKnobsFlags.fetchProgramsAsNeeded()) { - mProgramDataManager.prefetchChannel(channelId, index); - } + mProgramDataManager.prefetchChannel(channelId); return mChannelIdEntriesMap.get(channelId).get(index); } |