chromium/chrome/browser/feed/android/java/src/org/chromium/chrome/browser/feed/feedmanagement/FeedManagementCoordinator.java

// Copyright 2021 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

package org.chromium.chrome.browser.feed.feedmanagement;

import android.app.Activity;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ListView;

import androidx.appcompat.app.AppCompatActivity;

import org.chromium.chrome.browser.feed.R;
import org.chromium.chrome.browser.feed.StreamKind;
import org.chromium.ui.modelutil.LayoutViewBuilder;
import org.chromium.ui.modelutil.MVCListAdapter.ModelList;
import org.chromium.ui.modelutil.ModelListAdapter;

/**
 * Sets up the model, adapter, and mediator for FeedManagement surface.  It is based on the doc at
 * https://chromium.googlesource.com/chromium/src/+/HEAD/docs/ui/android/mvc_simple_list_tutorial.md
 */
public class FeedManagementCoordinator {
    private FeedManagementMediator mMediator;
    private AppCompatActivity mActivity;
    private final View mView;

    public FeedManagementCoordinator(Activity activity, @StreamKind int feedType) {
        mActivity = (AppCompatActivity) activity;
        ModelList listItems = new ModelList();

        // Once this is attached to the ListView, there is no need to hold a reference to it.
        ModelListAdapter adapter = new ModelListAdapter(listItems);
        adapter.registerType(
                FeedManagementItemProperties.DEFAULT_ITEM_TYPE,
                new LayoutViewBuilder<FeedManagementItemView>(R.layout.feed_management_list_item),
                FeedManagementItemViewBinder::bind);

        // Inflate the XML.
        mView = LayoutInflater.from(mActivity).inflate(R.layout.feed_management_activity, null);
        ListView listView = (ListView) mView.findViewById(R.id.feed_management_menu);
        listView.setAdapter(adapter);

        mMediator = new FeedManagementMediator(mActivity, listItems, feedType);
    }

    public View getView() {
        return mView;
    }
}