2018-08-23

2018-08-23  本文已影响0人  谢二富康去哦

/*

* Copyright 2016, The Android Open Source Project

*

* Licensed under the Apache License, Version 2.0 (the "License");

* you may not use this file except in compliance with the License.

* You may obtain a copy of the License at

*

*      http://www.apache.org/licenses/LICENSE-2.0

*

* Unless required by applicable law or agreed to in writing, software

* distributed under the License is distributed on an "AS IS" BASIS,

* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

* See the License for the specific language governing permissions and

* limitations under the License.

*/

package com.example.android.architecture.blueprints.todoapp.taskdetail;

import android.support.annotation.NonNull;

import android.support.annotation.Nullable;

import com.example.android.architecture.blueprints.todoapp.data.Task;

import com.example.android.architecture.blueprints.todoapp.data.source.TasksDataSource;

import com.example.android.architecture.blueprints.todoapp.data.source.TasksRepository;

import com.google.common.base.Strings;

import static com.google.common.base.Preconditions.checkNotNull;

/**

* Listens to user actions from the UI ({@link TaskDetailFragment}), retrieves the data and updates

* the UI as required.

*/

public class TaskDetailPresenter implements TaskDetailContract.Presenter {

    private final TasksRepository mTasksRepository;

    private final TaskDetailContract.View mTaskDetailView;

    @Nullable

    private String mTaskId;

    public TaskDetailPresenter(@Nullable String taskId,

                              @NonNull TasksRepository tasksRepository,

                              @NonNull TaskDetailContract.View taskDetailView) {

        mTaskId = taskId;

        mTasksRepository = checkNotNull(tasksRepository, "tasksRepository cannot be null!");

        mTaskDetailView = checkNotNull(taskDetailView, "taskDetailView cannot be null!");

        mTaskDetailView.setPresenter(this);

    }

    @Override

    public void start() {

        openTask();

    }

    private void openTask() {

        if (Strings.isNullOrEmpty(mTaskId)) {

            mTaskDetailView.showMissingTask();

            return;

        }

        mTaskDetailView.setLoadingIndicator(true);

        mTasksRepository.getTask(mTaskId, new TasksDataSource.GetTaskCallback() {

            @Override

            public void onTaskLoaded(Task task) {

                // The view may not be able to handle UI updates anymore

                if (!mTaskDetailView.isActive()) {

                    return;

                }

                mTaskDetailView.setLoadingIndicator(false);

                if (null == task) {

                    mTaskDetailView.showMissingTask();

                } else {

                    showTask(task);

                }

            }

            @Override

            public void onDataNotAvailable() {

                // The view may not be able to handle UI updates anymore

                if (!mTaskDetailView.isActive()) {

                    return;

                }

                mTaskDetailView.showMissingTask();

            }

        });

    }

    @Override

    public void editTask() {

        if (Strings.isNullOrEmpty(mTaskId)) {

            mTaskDetailView.showMissingTask();

            return;

        }

        mTaskDetailView.showEditTask(mTaskId);

    }

    @Override

    public void deleteTask() {

        if (Strings.isNullOrEmpty(mTaskId)) {

            mTaskDetailView.showMissingTask();

            return;

        }

        mTasksRepository.deleteTask(mTaskId);

        mTaskDetailView.showTaskDeleted();

    }

    @Override

    public void completeTask() {

        if (Strings.isNullOrEmpty(mTaskId)) {

            mTaskDetailView.showMissingTask();

            return;

        }

        mTasksRepository.completeTask(mTaskId);

        mTaskDetailView.showTaskMarkedComplete();

    }

    @Override

    public void activateTask() {

        if (Strings.isNullOrEmpty(mTaskId)) {

            mTaskDetailView.showMissingTask();

            return;

        }

        mTasksRepository.activateTask(mTaskId);

        mTaskDetailView.showTaskMarkedActive();

    }

    private void showTask(@NonNull Task task) {

        String title = task.getTitle();

        String description = task.getDescription();

        if (Strings.isNullOrEmpty(title)) {

            mTaskDetailView.hideTitle();

        } else {

            mTaskDetailView.showTitle(title);

        }

        if (Strings.isNullOrEmpty(description)) {

            mTaskDetailView.hideDescription();

        } else {

            mTaskDetailView.showDescription(description);

        }

        mTaskDetailView.showCompletionStatus(task.isCompleted());

    }

}

上一篇 下一篇

猜你喜欢

热点阅读