Skip to content

Commit 875a0b8

Browse files
committed
Refactor AddEditTaskActivity / Fragment to use Controller
1 parent 3e021cc commit 875a0b8

File tree

11 files changed

+137
-177
lines changed

11 files changed

+137
-177
lines changed

todoapp/app/src/main/AndroidManifest.xml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,6 @@
3434
</intent-filter>
3535
</activity>
3636
<activity android:name="com.example.android.architecture.blueprints.todoapp.taskdetail.TaskDetailActivity" />
37-
<activity android:name="com.example.android.architecture.blueprints.todoapp.addedittask.AddEditTaskActivity" />
3837
</application>
3938

4039
</manifest>

todoapp/app/src/main/java/com/example/android/architecture/blueprints/todoapp/BaseController.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import android.support.annotation.NonNull;
55
import android.support.v4.widget.DrawerLayout;
66
import android.support.v7.app.ActionBar;
7+
import android.view.MenuItem;
78
import android.view.View;
89

910
import com.bluelinelabs.conductor.Controller;
@@ -34,11 +35,23 @@ protected void onAttach(@NonNull View view) {
3435
ActionBar actionBar = getActionBar();
3536
actionBar.setTitle("");
3637
actionBar.setDisplayHomeAsUpEnabled(false);
38+
actionBar.setHomeAsUpIndicator(0);
3739

3840
DrawerLayout drawerLayout = getDrawerLayout();
3941
drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);
4042
}
4143

44+
@Override
45+
public boolean onOptionsItemSelected(MenuItem item) {
46+
switch (item.getItemId()) {
47+
case android.R.id.home:
48+
// Set the default behavior to be back navigation
49+
getRouter().popCurrentController();
50+
break;
51+
}
52+
return true;
53+
}
54+
4255
@Override
4356
protected void onDestroyView(View view) {
4457
super.onDestroyView(view);

todoapp/app/src/main/java/com/example/android/architecture/blueprints/todoapp/MainActivity.java

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020
import android.support.annotation.VisibleForTesting;
2121
import android.support.design.widget.NavigationView;
2222
import android.support.test.espresso.IdlingResource;
23-
import android.support.v4.view.GravityCompat;
2423
import android.support.v4.widget.DrawerLayout;
2524
import android.support.v7.app.AppCompatActivity;
2625
import android.support.v7.widget.Toolbar;
@@ -71,17 +70,6 @@ protected void onCreate(Bundle savedInstanceState) {
7170
}
7271
}
7372

74-
@Override
75-
public boolean onOptionsItemSelected(MenuItem item) {
76-
switch (item.getItemId()) {
77-
case android.R.id.home:
78-
// Open the navigation drawer when the home icon is selected from the toolbar.
79-
mDrawerLayout.openDrawer(GravityCompat.START);
80-
return true;
81-
}
82-
return super.onOptionsItemSelected(item);
83-
}
84-
8573
@Override
8674
public void onBackPressed() {
8775
if (!router.handleBack()) {

todoapp/app/src/main/java/com/example/android/architecture/blueprints/todoapp/addedittask/AddEditTaskActivity.java

Lines changed: 0 additions & 89 deletions
This file was deleted.

todoapp/app/src/main/java/com/example/android/architecture/blueprints/todoapp/addedittask/AddEditTaskFragment.java

Lines changed: 52 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -16,91 +16,110 @@
1616

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

19-
import android.app.Activity;
2019
import android.os.Bundle;
2120
import android.support.annotation.NonNull;
22-
import android.support.annotation.Nullable;
2321
import android.support.design.widget.FloatingActionButton;
2422
import android.support.design.widget.Snackbar;
25-
import android.support.v4.app.Fragment;
23+
import android.support.v7.app.ActionBar;
2624
import android.view.LayoutInflater;
2725
import android.view.View;
2826
import android.view.ViewGroup;
2927
import android.widget.TextView;
3028

29+
import com.example.android.architecture.blueprints.todoapp.BaseController;
30+
import com.example.android.architecture.blueprints.todoapp.Injection;
3131
import com.example.android.architecture.blueprints.todoapp.R;
32-
33-
import static com.google.common.base.Preconditions.checkNotNull;
32+
import com.example.android.architecture.blueprints.todoapp.util.BundleBuilder;
3433

3534
/**
3635
* Main UI for the add task screen. Users can enter a task title and description.
3736
*/
38-
public class AddEditTaskFragment extends Fragment implements AddEditTaskContract.View {
37+
public class AddEditTaskFragment extends BaseController implements AddEditTaskContract.View {
3938

40-
public static final String ARGUMENT_EDIT_TASK_ID = "EDIT_TASK_ID";
39+
private static final String ARGUMENT_EDIT_TASK_ID = "EDIT_TASK_ID";
4140

4241
private AddEditTaskContract.Presenter mPresenter;
4342

43+
private final String mTaskId;
44+
4445
private TextView mTitle;
4546

4647
private TextView mDescription;
4748

48-
public static AddEditTaskFragment newInstance() {
49-
return new AddEditTaskFragment();
49+
public AddEditTaskFragment() {
50+
this(new Bundle());
5051
}
5152

52-
public AddEditTaskFragment() {
53-
// Required empty public constructor
53+
public AddEditTaskFragment(String taskId) {
54+
this(new BundleBuilder(new Bundle())
55+
.putString(ARGUMENT_EDIT_TASK_ID, taskId)
56+
.build());
5457
}
5558

56-
@Override
57-
public void onResume() {
58-
super.onResume();
59-
mPresenter.start();
59+
public AddEditTaskFragment(Bundle args) {
60+
super(args);
61+
mTaskId = args.getString(ARGUMENT_EDIT_TASK_ID);
6062
}
6163

6264
@Override
6365
public void setPresenter(@NonNull AddEditTaskContract.Presenter presenter) {
64-
mPresenter = checkNotNull(presenter);
66+
// todo: remove
6567
}
6668

69+
@NonNull
6770
@Override
68-
public void onActivityCreated(Bundle savedInstanceState) {
69-
super.onActivityCreated(savedInstanceState);
71+
protected View onCreateView(@NonNull LayoutInflater inflater, @NonNull ViewGroup container) {
72+
View root = inflater.inflate(R.layout.addtask_frag, container, false);
73+
mTitle = (TextView) root.findViewById(R.id.add_task_title);
74+
mDescription = (TextView) root.findViewById(R.id.add_task_description);
7075

7176
FloatingActionButton fab =
72-
(FloatingActionButton) getActivity().findViewById(R.id.fab_edit_task_done);
77+
(FloatingActionButton) root.findViewById(R.id.fab_edit_task_done);
7378
fab.setImageResource(R.drawable.ic_done);
7479
fab.setOnClickListener(new View.OnClickListener() {
7580
@Override
7681
public void onClick(View v) {
7782
mPresenter.saveTask(mTitle.getText().toString(), mDescription.getText().toString());
7883
}
7984
});
80-
}
81-
82-
@Nullable
83-
@Override
84-
public View onCreateView(LayoutInflater inflater, ViewGroup container,
85-
Bundle savedInstanceState) {
86-
View root = inflater.inflate(R.layout.addtask_frag, container, false);
87-
mTitle = (TextView) root.findViewById(R.id.add_task_title);
88-
mDescription = (TextView) root.findViewById(R.id.add_task_description);
8985

9086
setHasOptionsMenu(true);
91-
setRetainInstance(true);
87+
88+
// Create the presenter
89+
mPresenter = new AddEditTaskPresenter(
90+
mTaskId,
91+
Injection.provideTasksRepository(getApplicationContext()),
92+
this);
93+
9294
return root;
9395
}
9496

97+
@Override
98+
protected void onAttach(@NonNull View view) {
99+
super.onAttach(view);
100+
101+
// Configure Activity level UI.
102+
ActionBar actionBar = getActionBar();
103+
if (mTaskId == null) {
104+
actionBar.setTitle(R.string.add_task);
105+
} else {
106+
actionBar.setTitle(R.string.edit_task);
107+
}
108+
actionBar.setDisplayHomeAsUpEnabled(true);
109+
actionBar.setDisplayShowHomeEnabled(true);
110+
111+
// Start Presenter
112+
mPresenter.start();
113+
}
114+
95115
@Override
96116
public void showEmptyTaskError() {
97-
Snackbar.make(mTitle, getString(R.string.empty_task_message), Snackbar.LENGTH_LONG).show();
117+
Snackbar.make(mTitle, getResources().getString(R.string.empty_task_message), Snackbar.LENGTH_LONG).show();
98118
}
99119

100120
@Override
101121
public void showTasksList() {
102-
getActivity().setResult(Activity.RESULT_OK);
103-
getActivity().finish();
122+
getRouter().popCurrentController();
104123
}
105124

106125
@Override
@@ -112,9 +131,4 @@ public void setTitle(String title) {
112131
public void setDescription(String description) {
113132
mDescription.setText(description);
114133
}
115-
116-
@Override
117-
public boolean isActive() {
118-
return isAdded();
119-
}
120-
}
134+
}

todoapp/app/src/main/java/com/example/android/architecture/blueprints/todoapp/statistics/StatisticsController.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,11 @@
1717
package com.example.android.architecture.blueprints.todoapp.statistics;
1818

1919
import android.support.annotation.NonNull;
20+
import android.support.v4.view.GravityCompat;
2021
import android.support.v4.widget.DrawerLayout;
2122
import android.support.v7.app.ActionBar;
2223
import android.view.LayoutInflater;
24+
import android.view.MenuItem;
2325
import android.view.View;
2426
import android.view.ViewGroup;
2527
import android.widget.TextView;
@@ -49,6 +51,8 @@ protected View onCreateView(@NonNull final LayoutInflater inflater,
4951
View root = inflater.inflate(R.layout.statistics_frag, container, false);
5052
mStatisticsTV = (TextView) root.findViewById(R.id.statistics);
5153

54+
setHasOptionsMenu(true);
55+
5256
setActive(true);
5357

5458
mPresenter = new StatisticsPresenter(
@@ -73,6 +77,17 @@ protected void onAttach(@NonNull View view) {
7377
mPresenter.start();
7478
}
7579

80+
@Override
81+
public boolean onOptionsItemSelected(MenuItem item) {
82+
switch (item.getItemId()) {
83+
case android.R.id.home:
84+
// Open the navigation drawer when the home icon is selected from the toolbar.
85+
getDrawerLayout().openDrawer(GravityCompat.START);
86+
break;
87+
}
88+
return true;
89+
}
90+
7691
@Override
7792
public void setProgressIndicator(boolean active) {
7893
if (active) {

todoapp/app/src/main/java/com/example/android/architecture/blueprints/todoapp/taskdetail/TaskDetailFragment.java

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

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

19+
import static com.google.common.base.Preconditions.checkNotNull;
20+
1921
import android.app.Activity;
2022
import android.content.Intent;
2123
import android.os.Bundle;
@@ -35,12 +37,8 @@
3537
import android.widget.TextView;
3638

3739
import com.example.android.architecture.blueprints.todoapp.R;
38-
import com.example.android.architecture.blueprints.todoapp.addedittask.AddEditTaskActivity;
39-
import com.example.android.architecture.blueprints.todoapp.addedittask.AddEditTaskFragment;
4040
import com.google.common.base.Preconditions;
4141

42-
import static com.google.common.base.Preconditions.checkNotNull;
43-
4442
/**
4543
* Main UI for the task detail screen.
4644
*/
@@ -162,9 +160,7 @@ public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
162160

163161
@Override
164162
public void showEditTask(@NonNull String taskId) {
165-
Intent intent = new Intent(getContext(), AddEditTaskActivity.class);
166-
intent.putExtra(AddEditTaskFragment.ARGUMENT_EDIT_TASK_ID, taskId);
167-
startActivityForResult(intent, REQUEST_EDIT_TASK);
163+
// todo: implement task editing
168164
}
169165

170166
@Override

0 commit comments

Comments
 (0)