Skip to content

Commit 6cd01b8

Browse files
committed
cleaning up the task detail fragments, only getting what's necessary
1 parent d494af2 commit 6cd01b8

File tree

13 files changed

+104
-104
lines changed

13 files changed

+104
-104
lines changed

todo-mvp-loaders/app/src/main/java/com/example/android/architecture/blueprints/todoapp/taskdetail/TaskDetailActivity.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,8 @@ protected void onCreate(Bundle savedInstanceState) {
6767
taskId,
6868
Injection.provideTasksRepository(getApplicationContext()),
6969
taskDetailFragment,
70-
new TaskLoader(taskId, getApplicationContext()));
70+
new TaskLoader(taskId, getApplicationContext()),
71+
getSupportLoaderManager());
7172

7273
taskDetailFragment.setPresenter(mTaskDetailPresenter);
7374
}

todo-mvp-loaders/app/src/main/java/com/example/android/architecture/blueprints/todoapp/taskdetail/TaskDetailContract.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616

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

19-
import android.support.annotation.Nullable;
19+
import com.example.android.architecture.blueprints.todoapp.util.BasePresenter;
2020

2121
/**
2222
* This specifies the contract between the view and the presenter.
@@ -25,7 +25,7 @@ public interface TaskDetailContract {
2525

2626
interface View {
2727

28-
void setProgressIndicator(boolean active);
28+
void setLoadingIndicator(boolean active);
2929

3030
void showMissingTask();
3131

@@ -48,14 +48,14 @@ interface View {
4848
void showTaskMarkedActive();
4949
}
5050

51-
interface UserActionsListener {
51+
interface Presenter extends BasePresenter {
5252

53-
void editTask(@Nullable String taskId);
53+
void editTask();
5454

55-
void deleteTask(@Nullable String taskId);
55+
void deleteTask();
5656

57-
void completeTask(@Nullable String taskId);
57+
void completeTask();
5858

59-
void activateTask(@Nullable String taskId);
59+
void activateTask();
6060
}
6161
}

todo-mvp-loaders/app/src/main/java/com/example/android/architecture/blueprints/todoapp/taskdetail/TaskDetailFragment.java

Lines changed: 10 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -48,16 +48,14 @@ public class TaskDetailFragment extends Fragment implements TaskDetailContract.V
4848

4949
public static final int REQUEST_EDIT_TASK = 1;
5050

51-
private TaskDetailPresenter mTaskDetailPresenter;
51+
private TaskDetailContract.Presenter mPresenter;
5252

5353
private TextView mDetailTitle;
5454

5555
private TextView mDetailDescription;
5656

5757
private CheckBox mDetailCompleteStatus;
5858

59-
private String mTaskId;
60-
6159
public static TaskDetailFragment newInstance(String taskId) {
6260
Bundle arguments = new Bundle();
6361
arguments.putString(ARGUMENT_TASK_ID, taskId);
@@ -67,9 +65,9 @@ public static TaskDetailFragment newInstance(String taskId) {
6765
}
6866

6967
@Override
70-
public void onActivityCreated(Bundle savedInstanceState) {
71-
super.onActivityCreated(savedInstanceState);
72-
mTaskId = getArguments().getString(ARGUMENT_TASK_ID);
68+
public void onResume() {
69+
super.onResume();
70+
mPresenter.resume();
7371
}
7472

7573
@Nullable
@@ -89,28 +87,22 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container,
8987
fab.setOnClickListener(new View.OnClickListener() {
9088
@Override
9189
public void onClick(View v) {
92-
mTaskDetailPresenter.editTask(mTaskId);
90+
mPresenter.editTask();
9391
}
9492
});
9593

9694
return root;
9795
}
9896

99-
@Override
100-
public void onResume() {
101-
super.onResume();
102-
mTaskDetailPresenter.startLoader(this);
103-
}
104-
10597
public void setPresenter(@NonNull TaskDetailPresenter presenter) {
106-
mTaskDetailPresenter = checkNotNull(presenter);
98+
mPresenter = checkNotNull(presenter);
10799
}
108100

109101
@Override
110102
public boolean onOptionsItemSelected(MenuItem item) {
111103
switch (item.getItemId()) {
112104
case R.id.menu_delete:
113-
mTaskDetailPresenter.deleteTask(mTaskId);
105+
mPresenter.deleteTask();
114106
return true;
115107
}
116108
return false;
@@ -123,7 +115,7 @@ public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
123115
}
124116

125117
@Override
126-
public void setProgressIndicator(boolean active) {
118+
public void setLoadingIndicator(boolean active) {
127119
if (active) {
128120
mDetailTitle.setText("");
129121
mDetailDescription.setText(getString(R.string.loading));
@@ -153,9 +145,9 @@ public void showCompletionStatus(final boolean complete) {
153145
@Override
154146
public void onClick(View v) {
155147
if (complete) {
156-
mTaskDetailPresenter.activateTask(mTaskId);
148+
mPresenter.activateTask();
157149
} else {
158-
mTaskDetailPresenter.completeTask(mTaskId);
150+
mPresenter.completeTask();
159151
}
160152
}
161153
});

todo-mvp-loaders/app/src/main/java/com/example/android/architecture/blueprints/todoapp/taskdetail/TaskDetailPresenter.java

Lines changed: 29 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232
* Listens to user actions from the UI ({@link TaskDetailFragment}), retrieves the data and updates
3333
* the UI as required.
3434
*/
35-
public class TaskDetailPresenter implements TaskDetailContract.UserActionsListener,
35+
public class TaskDetailPresenter implements TaskDetailContract.Presenter,
3636
LoaderManager.LoaderCallbacks<Task> {
3737

3838
private static final int TASK_QUERY = 3;
@@ -43,61 +43,63 @@ public class TaskDetailPresenter implements TaskDetailContract.UserActionsListen
4343

4444
private TaskLoader mTaskLoader;
4545

46+
private LoaderManager mLoaderManager;
47+
4648
@Nullable
4749
private String mTaskId;
4850

4951
public TaskDetailPresenter(@Nullable String taskId,
5052
@NonNull TasksRepository tasksRepository,
5153
@NonNull TaskDetailContract.View taskDetailView,
52-
@NonNull TaskLoader taskLoader) {
54+
@NonNull TaskLoader taskLoader,
55+
@NonNull LoaderManager loaderManager) {
5356
mTaskId = taskId;
5457
mTasksRepository = checkNotNull(tasksRepository, "tasksRepository cannot be null!");
5558
mTaskDetailView = checkNotNull(taskDetailView, "taskDetailView cannot be null!");
56-
mTaskLoader = checkNotNull(taskLoader, "taskLoader cannot be nulL!");
59+
mTaskLoader = checkNotNull(taskLoader, "taskLoader cannot be null!");
60+
mLoaderManager = checkNotNull(loaderManager, "loaderManager cannot be null!");
61+
}
62+
63+
@Override
64+
public void resume() {
65+
openTask();
5766
}
5867

59-
/**
60-
* This starts the {@link LoaderManager}, querying the task. It returns the TaskDetailPresenter
61-
* so it can be chained with the constructor. This isn't called from the constructor to enable
62-
* writing unit tests for the non loader methods in the TaskDetailPresenter (creating an
63-
* instance from a unit test would fail if this method were called from it).
64-
*/
65-
public TaskDetailPresenter startLoader(TaskDetailFragment fragment) {
66-
fragment.getLoaderManager().initLoader(TASK_QUERY, null, this);
67-
return this;
68+
private void openTask() {
69+
mLoaderManager.initLoader(TASK_QUERY, null, this);
6870
}
6971

7072
@Override
71-
public void editTask(@Nullable String taskId) {
72-
if (null == taskId || taskId.isEmpty()) {
73+
public void editTask() {
74+
if (null == mTaskId || mTaskId.isEmpty()) {
7375
mTaskDetailView.showMissingTask();
7476
return;
7577
}
76-
mTaskDetailView.showEditTask(taskId);
78+
mTaskDetailView.showEditTask(mTaskId);
7779
}
7880

7981
@Override
80-
public void deleteTask(@Nullable String taskId) {
81-
mTasksRepository.deleteTask(taskId);
82+
public void deleteTask() {
83+
mTasksRepository.deleteTask(mTaskId);
8284
mTaskDetailView.showTaskDeleted();
8385
}
8486

85-
public void completeTask(@Nullable String taskId) {
86-
if (null == taskId || taskId.isEmpty()) {
87+
public void completeTask() {
88+
if (null == mTaskId || mTaskId.isEmpty()) {
8789
mTaskDetailView.showMissingTask();
8890
return;
8991
}
90-
mTasksRepository.completeTask(taskId);
92+
mTasksRepository.completeTask(mTaskId);
9193
mTaskDetailView.showTaskMarkedComplete();
9294
}
9395

9496
@Override
95-
public void activateTask(@Nullable String taskId) {
96-
if (null == taskId || taskId.isEmpty()) {
97+
public void activateTask() {
98+
if (null == mTaskId || mTaskId.isEmpty()) {
9799
mTaskDetailView.showMissingTask();
98100
return;
99101
}
100-
mTasksRepository.activateTask(taskId);
102+
mTasksRepository.activateTask(mTaskId);
101103
mTaskDetailView.showTaskMarkedActive();
102104
}
103105

@@ -117,15 +119,15 @@ private void showTask(Task task) {
117119
mTaskDetailView.showDescription(description);
118120
}
119121
mTaskDetailView.showCompletionStatus(task.isCompleted());
120-
mTaskDetailView.setProgressIndicator(false);
122+
mTaskDetailView.setLoadingIndicator(false);
121123
}
122124

123125
@Override
124126
public Loader<Task> onCreateLoader(int id, Bundle args) {
125127
if (mTaskId == null) {
126128
return null;
127129
}
128-
mTaskDetailView.setProgressIndicator(true);
130+
mTaskDetailView.setLoadingIndicator(true);
129131
return mTaskLoader;
130132
}
131133

@@ -140,6 +142,7 @@ public void onLoadFinished(Loader<Task> loader, Task data) {
140142

141143
@Override
142144
public void onLoaderReset(Loader<Task> loader) {
143-
145+
// no-op
144146
}
147+
145148
}

todo-mvp-loaders/app/src/main/java/com/example/android/architecture/blueprints/todoapp/util/BasePresenter.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,4 @@ public interface BasePresenter {
44

55
void resume();
66

7-
void pause();
8-
97
}

todo-mvp-loaders/app/src/test/java/com/example/android/architecture/blueprints/todoapp/taskdetail/TaskDetailPresenterTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ public void getActiveTaskFromRepositoryAndLoadIntoView() {
7575

7676
// Then progress indicator is hidden and title, description and completion status are shown
7777
// in UI
78-
verify(mTaskDetailFragment).setProgressIndicator(false);
78+
verify(mTaskDetailFragment).setLoadingIndicator(false);
7979
verify(mTaskDetailFragment).showTitle(TITLE_TEST);
8080
verify(mTaskDetailFragment).showDescription(DESCRIPTION_TEST);
8181
}
@@ -87,7 +87,7 @@ public void getCompletedTaskFromRepositoryAndLoadIntoView() {
8787

8888
// Then progress indicator is hidden and title, description and completion status are shown
8989
// in UI
90-
verify(mTaskDetailFragment).setProgressIndicator(false);
90+
verify(mTaskDetailFragment).setLoadingIndicator(false);
9191
verify(mTaskDetailFragment).showTitle(TITLE_TEST);
9292
verify(mTaskDetailFragment).showDescription(DESCRIPTION_TEST);
9393
verify(mTaskDetailFragment).showCompletionStatus(true);

todo-mvp/app/src/main/java/com/example/android/architecture/blueprints/todoapp/taskdetail/TaskDetailActivity.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,8 +62,7 @@ protected void onCreate(Bundle savedInstanceState) {
6262
}
6363

6464
// Create the presenter
65-
new TaskDetailPresenter(
66-
Injection.provideTasksRepository(getApplicationContext()), taskDetailFragment);
65+
new TaskDetailPresenter(taskId, Injection.provideTasksRepository(getApplicationContext()), taskDetailFragment);
6766
}
6867

6968
@Override

todo-mvp/app/src/main/java/com/example/android/architecture/blueprints/todoapp/taskdetail/TaskDetailContract.java

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616

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

19-
import android.support.annotation.Nullable;
19+
import com.example.android.architecture.blueprints.todoapp.util.BasePresenter;
2020

2121
/**
2222
* This specifies the contract between the view and the presenter.
@@ -25,7 +25,7 @@ public interface TaskDetailContract {
2525

2626
interface View {
2727

28-
void setProgressIndicator(boolean active);
28+
void setLoadingIndicator(boolean active);
2929

3030
void showMissingTask();
3131

@@ -47,21 +47,19 @@ interface View {
4747

4848
void showTaskMarkedActive();
4949

50-
void setActionListener(UserActionsListener listener);
50+
void setPresenter(Presenter listener);
5151

5252
boolean isActive();
5353
}
5454

55-
interface UserActionsListener {
55+
interface Presenter extends BasePresenter{
5656

57-
void openTask(@Nullable String taskId);
57+
void editTask();
5858

59-
void editTask(@Nullable String taskId);
59+
void deleteTask();
6060

61-
void deleteTask(@Nullable String taskId);
61+
void completeTask();
6262

63-
void completeTask(@Nullable String taskId);
64-
65-
void activateTask(@Nullable String taskId);
63+
void activateTask();
6664
}
6765
}

0 commit comments

Comments
 (0)