美文网首页
2018-08-23

2018-08-23

作者: 谢二富康去哦 | 来源:发表于2018-08-23 14:29 被阅读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());

        }

    }

    相关文章

      网友评论

          本文标题:2018-08-23

          本文链接:https://www.haomeiwen.com/subject/iqzpiftx.html