Introduce TaskViewsIterator and TaskViewsIterable

- Create TaskViewsIterator to iterate all the current TaskViews inside
  RecentsView.
- Create TaskViewsIterable with TaskViewsIterator as its iterator.
- Create `mTaskViewsIterable`, an instance of TaskViewsIterable that
  used to make the TaskViews iterable.
- Current `getTaskViews()` return `mTaskViewsIterable` directly.
- Change `getTaskViews()` to be a public function, thus it can be
  used outside of the RecentsView.

Some follow-up work includes:
- Replace all the call sites of `getTaskViewAt(0)` with
  `getFirstTaskView()`
- Replace `0` as the index of the first TaskView  with
  `getFirstTaskViewIndex()`
- Audit all the call sites of iterating the TaskViews, let them use
  `getTaskViews()` or IterableTaskViews.iterator() if index is needed.

Flag: EXEMPT as no functionality changes
Bug: 379942019
Test: Ensure the TaskViews required are correct in the following
      scrnarios:
      1. Swiping up from home screen to enter overview with empty or
         multiple tasks
      2. Swiping up from a fullscreen app to enter overview with
         one or multiple tasks
      3. Dimissing one or multiple tasks, exit and enter overview w/o
         newly opened tasks
      4. Remvoing all the tasks, reenter overview w/o newly opened
         tasks
Change-Id: I930ce92b7e0bc37005af74a58fd4c0ce3013e5cb
2 files changed