blob: d51341bbd95ac28ec80b953beb11fd1c49717cd8 [file] [log] [blame]
// Copyright 2021 The Chromium Authors. All rights reserved.
// 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.followmanagement;
import android.app.Activity;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.LinearLayout;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import org.chromium.chrome.browser.feed.R;
import org.chromium.chrome.browser.feed.webfeed.WebFeedFaviconFetcher;
import org.chromium.ui.modelutil.LayoutViewBuilder;
import org.chromium.ui.modelutil.MVCListAdapter.ModelList;
import org.chromium.ui.modelutil.SimpleRecyclerViewAdapter;
import org.chromium.ui.widget.Toast;
/**
* Sets up the model, adapter, and mediator for FollowManagement 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 FollowManagementCoordinator {
private static final String TAG = "FollowMMCoordinator";
private FollowManagementMediator mMediator;
private AppCompatActivity mActivity;
private final View mView;
public FollowManagementCoordinator(Activity activity) {
mActivity = (AppCompatActivity) activity;
ModelList listItems = new ModelList();
SimpleRecyclerViewAdapter adapter = new SimpleRecyclerViewAdapter(listItems);
// Register types for both the full and empty states.
adapter.registerType(FollowManagementItemProperties.DEFAULT_ITEM_TYPE,
new LayoutViewBuilder<FollowManagementItemView>(R.layout.follow_management_item),
FollowManagementItemViewBinder::bind);
adapter.registerType(FollowManagementItemProperties.EMPTY_ITEM_TYPE,
new LayoutViewBuilder<LinearLayout>(R.layout.follow_management_empty_state),
(unusedModel, unusedView, unusedKey) -> {});
adapter.registerType(FollowManagementItemProperties.LOADING_ITEM_TYPE,
new LayoutViewBuilder<LinearLayout>(R.layout.follow_management_loading_state),
(unusedModel, unusedView, unusedKey) -> {});
// Inflate the XML for the activity.
mView = LayoutInflater.from(activity).inflate(R.layout.follow_management_activity, null);
RecyclerView recyclerView = (RecyclerView) mView.findViewById(R.id.follow_management_list);
// With the recycler view, we need to explicitly set a layout manager.
LinearLayoutManager manager = new LinearLayoutManager(activity);
recyclerView.setLayoutManager(manager);
recyclerView.setAdapter(adapter);
// Set up the toolbar and back button.
Toolbar toolbar = (Toolbar) mView.findViewById(R.id.action_bar);
mActivity.setSupportActionBar(toolbar);
mActivity.getSupportActionBar().setDisplayHomeAsUpEnabled(true);
toolbar.setNavigationOnClickListener(this::handleBackArrowClick);
mMediator = new FollowManagementMediator(
activity, listItems, new MediatorObserver(), WebFeedFaviconFetcher.createDefault());
}
public View getView() {
return mView;
}
private void handleBackArrowClick(View view) {
// Navigate back.
mActivity.finish();
}
private class MediatorObserver implements FollowManagementMediator.Observer {
@Override
public void networkConnectionError() {
Toast.makeText(mActivity, R.string.feed_follow_no_connection_error, Toast.LENGTH_LONG)
.show();
}
@Override
public void otherOperationError() {
Toast.makeText(mActivity, R.string.feed_follow_unknown_error, Toast.LENGTH_LONG).show();
}
}
}