package com.badoo.chateau.example.ui.conversations.list; import android.content.Intent; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import com.badoo.barf.mvp.PresenterFactory; import com.badoo.chateau.core.usecases.conversations.DeleteConversations; import com.badoo.chateau.core.usecases.conversations.LoadConversations; import com.badoo.chateau.core.usecases.conversations.SubscribeToConversationUpdates; import com.badoo.chateau.example.R; import com.badoo.chateau.example.data.model.ExampleConversation; import com.badoo.chateau.example.ui.BaseActivity; import com.badoo.chateau.example.ui.ExampleConfiguration; import com.badoo.chateau.example.ui.Injector; import com.badoo.chateau.example.ui.chat.ChatActivity; import com.badoo.chateau.example.ui.conversations.create.selectusers.SelectUserActivity; import com.badoo.chateau.example.ui.conversations.list.CreateConversationPresenter.CreateConversationFlowListener; import com.badoo.chateau.example.ui.conversations.list.CreateConversationPresenter.CreateConversationView; import com.badoo.chateau.extras.ViewFinder; import com.badoo.chateau.ui.conversations.list.BaseConversationListPresenter; import com.badoo.chateau.ui.conversations.list.ConversationListPresenter; import com.badoo.chateau.ui.conversations.list.ConversationListPresenter.ConversationListFlowListener; import com.badoo.chateau.ui.conversations.list.ConversationListPresenter.ConversationListView; public class ConversationListActivity extends BaseActivity implements ConversationListFlowListener<ExampleConversation>, CreateConversationFlowListener { public static class DefaultConfiguration extends ExampleConfiguration<ConversationListActivity> { @Override public void inject(ConversationListActivity target) { createConversationListView(target); createCreateConversationView(target); } protected ExampleConversationListView createConversationListView(@NonNull ConversationListActivity activity) { final PresenterFactory<ConversationListView<ExampleConversation>, ConversationListPresenter<ExampleConversation>> presenterFactory = new PresenterFactory<>(v -> createConversationListPresenter(v, activity)); final ExampleConversationListView view = new ExampleConversationListView(ViewFinder.from(activity), activity.getToolbar(), presenterFactory); activity.registerPresenter(presenterFactory.get()); return view; } protected ConversationListPresenter<ExampleConversation> createConversationListPresenter(@NonNull ConversationListView<ExampleConversation> view, @NonNull ConversationListFlowListener<ExampleConversation> flowListener) { final LoadConversations<ExampleConversation> loadConversations = new LoadConversations<>(getConversationRepo()); final SubscribeToConversationUpdates subscribeToConversationUpdates = new SubscribeToConversationUpdates(getConversationRepo()); final DeleteConversations deleteConversations = new DeleteConversations(getConversationRepo()); return new BaseConversationListPresenter<>(view, flowListener, loadConversations, subscribeToConversationUpdates, deleteConversations); } protected CreateConversationView createCreateConversationView(@NonNull ConversationListActivity activity) { return new CreateConversationViewImpl(ViewFinder.from(activity), new PresenterFactory<>(v -> createCreateConversationPresenter(v, activity))); } protected CreateConversationPresenter createCreateConversationPresenter(@NonNull CreateConversationView view, @NonNull CreateConversationFlowListener flowListener) { return new CreateConversationPresenterImpl(flowListener); } } @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_conversations); setTitle(R.string.title_activity_conversations); Injector.inject(this); } @Override public void requestOpenConversation(@NonNull ExampleConversation conversation) { final Intent intent = ChatActivity.create(this, conversation.getId(), conversation.getName()); startActivity(intent); } @Override public void requestCreateNewConversation() { final Intent intent = new Intent(this, SelectUserActivity.class); startActivity(intent); } }