Skip to content

Commit 13765ab

Browse files
committed
Applies changes made in MVP to MVP-Loaders
Also: - Fixes orientation change in tests - Fixes and syncs build.gradle files
1 parent ffc37e9 commit 13765ab

File tree

28 files changed

+412
-305
lines changed

28 files changed

+412
-305
lines changed

todo-mvp-loaders/app/build.gradle

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -59,8 +59,7 @@ dependencies {
5959
compile "com.android.support:recyclerview-v7:$rootProject.supportLibraryVersion"
6060
compile "com.android.support:support-v4:$rootProject.supportLibraryVersion"
6161
compile "com.google.guava:guava:$rootProject.guavaVersion"
62-
compile "com.github.bumptech.glide:glide:$rootProject.glideVersion"
63-
compile 'com.android.support.test.espresso:espresso-idling-resource:2.2.1'
62+
compile "com.android.support.test.espresso:espresso-idling-resource:$rootProject.espressoVersion"
6463

6564
// Dependencies for local unit tests
6665
testCompile "junit:junit:$rootProject.ext.junitVersion"
@@ -78,9 +77,12 @@ dependencies {
7877
androidTestCompile 'com.google.dexmaker:dexmaker-mockito:1.2'
7978

8079
// Espresso UI Testing
81-
androidTestCompile "com.android.support.test.espresso:espresso-core:$rootProject.ext.espressoVersion"
82-
androidTestCompile ("com.android.support.test.espresso:espresso-contrib:$rootProject.ext.espressoVersion") {
83-
exclude module: 'recyclerview-v7'
84-
}
85-
androidTestCompile "com.android.support.test.espresso:espresso-intents:$rootProject.ext.espressoVersion"
80+
androidTestCompile "com.android.support.test.espresso:espresso-core:$rootProject.espressoVersion"
81+
androidTestCompile ("com.android.support.test.espresso:espresso-contrib:$rootProject.espressoVersion")
82+
androidTestCompile "com.android.support.test.espresso:espresso-intents:$rootProject.espressoVersion"
83+
84+
// Resolve conflicts between main and test APK:
85+
androidTestCompile "com.android.support:support-annotations:$rootProject.supportLibraryVersion"
86+
androidTestCompile "com.android.support:support-v4:$rootProject.supportLibraryVersion"
87+
androidTestCompile "com.android.support:recyclerview-v7:$rootProject.supportLibraryVersion"
8688
}

todo-mvp-loaders/app/src/androidTest/java/com/example/android/architecture/blueprints/todoapp/TestUtils.java

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818

1919
import android.app.Activity;
2020
import android.content.pm.ActivityInfo;
21+
import android.content.res.Configuration;
2122
import android.support.test.rule.ActivityTestRule;
2223

2324
/**
@@ -30,8 +31,24 @@ public static void rotateToLandscape(ActivityTestRule<? extends Activity> activi
3031
.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
3132
}
3233

33-
public void rotateToPortrait(ActivityTestRule<? extends Activity> activityTestRule) {
34+
public static void rotateToPortrait(ActivityTestRule<? extends Activity> activityTestRule) {
3435
activityTestRule.getActivity()
3536
.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
3637
}
38+
39+
public static void rotateOrientation(ActivityTestRule<? extends Activity> activityTestRule) {
40+
int currentOrientation =
41+
activityTestRule.getActivity().getResources().getConfiguration().orientation;
42+
43+
switch (currentOrientation) {
44+
case Configuration.ORIENTATION_LANDSCAPE:
45+
rotateToPortrait(activityTestRule);
46+
break;
47+
case Configuration.ORIENTATION_PORTRAIT:
48+
rotateToLandscape(activityTestRule);
49+
break;
50+
default:
51+
rotateToLandscape(activityTestRule);
52+
}
53+
}
3754
}

todo-mvp-loaders/app/src/androidTest/java/com/example/android/architecture/blueprints/todoapp/tasks/AppNavigationTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ public void clickOnListNavigationItem_ShowsListScreen() {
9494
.perform(navigateTo(R.id.list_navigation_menu_item));
9595

9696
// Check that Tasks Activity was opened.
97-
onView(withId(R.id.tasks_list)).check(matches(isDisplayed()));
97+
onView(withId(R.id.tasksContainer)).check(matches(isDisplayed()));
9898
}
9999

100100
@Test

todo-mvp-loaders/app/src/androidTest/java/com/example/android/architecture/blueprints/todoapp/tasks/TasksScreenTest.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -64,11 +64,11 @@
6464
@LargeTest
6565
public class TasksScreenTest {
6666

67-
private final static String TITLE1 = "TO DO TEST 1";
67+
private final static String TITLE1 = "TITLE1";
6868

69-
private final static String DESCRIPTION = "TO DO DESCRIPTION";
69+
private final static String DESCRIPTION = "DESCR";
7070

71-
private final static String TITLE2 = "TO DO TEST 2";
71+
private final static String TITLE2 = "TITLE2";
7272

7373
/**
7474
* {@link ActivityTestRule} is a JUnit {@link Rule @Rule} to launch your activity under test.
@@ -357,7 +357,7 @@ public void orientationChange_FilterActivePersists() {
357357
onView(withText(TITLE1)).check(matches(not(isDisplayed())));
358358

359359
// when rotating the screen
360-
TestUtils.rotateToLandscape(mTasksActivityTestRule);
360+
TestUtils.rotateOrientation(mTasksActivityTestRule);
361361

362362
// then nothing changes
363363
onView(withText(TITLE1)).check(doesNotExist());

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

Lines changed: 24 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,9 @@
2323
import android.support.v7.app.AppCompatActivity;
2424
import android.support.v7.widget.Toolbar;
2525

26+
import com.example.android.architecture.blueprints.todoapp.Injection;
2627
import com.example.android.architecture.blueprints.todoapp.R;
28+
import com.example.android.architecture.blueprints.todoapp.data.source.TaskLoader;
2729
import com.example.android.architecture.blueprints.todoapp.util.ActivityUtils;
2830
import com.example.android.architecture.blueprints.todoapp.util.EspressoIdlingResource;
2931

@@ -40,40 +42,41 @@ protected void onCreate(Bundle savedInstanceState) {
4042
// Set up the toolbar.
4143
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
4244
setSupportActionBar(toolbar);
45+
ActionBar actionBar = getSupportActionBar();
46+
actionBar.setDisplayHomeAsUpEnabled(true);
47+
actionBar.setDisplayShowHomeEnabled(true);
4348

44-
// If there's a Task ID in the Bundle, this is an edit. Otherwise it's a new task.
45-
String taskId = null;
49+
AddEditTaskFragment addEditTaskFragment =
50+
(AddEditTaskFragment) getSupportFragmentManager().findFragmentById(R.id.contentFrame);
4651

52+
String taskId = null;
53+
if (addEditTaskFragment == null) {
54+
addEditTaskFragment = AddEditTaskFragment.newInstance();
4755

48-
if (null == savedInstanceState) {
49-
AddEditTaskFragment addEditTaskFragment = AddEditTaskFragment.newInstance();
50-
// Edit or creation?
5156
if (getIntent().hasExtra(AddEditTaskFragment.ARGUMENT_EDIT_TASK_ID)) {
52-
// Edit mode.
5357
taskId = getIntent().getStringExtra(
5458
AddEditTaskFragment.ARGUMENT_EDIT_TASK_ID);
59+
actionBar.setTitle(R.string.edit_task);
5560
Bundle bundle = new Bundle();
5661
bundle.putString(AddEditTaskFragment.ARGUMENT_EDIT_TASK_ID, taskId);
5762
addEditTaskFragment.setArguments(bundle);
63+
} else {
64+
actionBar.setTitle(R.string.add_task);
5865
}
59-
ActivityUtils.addFragmentToActivity(getSupportFragmentManager(), addEditTaskFragment,
60-
R.id.contentFrame);
61-
}
6266

63-
setActionBar();
67+
ActivityUtils.addFragmentToActivity(getSupportFragmentManager(),
68+
addEditTaskFragment, R.id.contentFrame);
69+
}
6470

65-
}
71+
// Create the loader and presenter
72+
TaskLoader taskLoader = new TaskLoader(taskId, getApplicationContext());
73+
AddEditTaskPresenter addEditTaskPresenter = new AddEditTaskPresenter(
74+
taskId,
75+
Injection.provideTasksRepository(getApplicationContext()),
76+
addEditTaskFragment,
77+
taskLoader);
6678

67-
private void setActionBar() {
68-
ActionBar actionBar = getSupportActionBar();
69-
actionBar.setDisplayHomeAsUpEnabled(true);
70-
actionBar.setDisplayShowHomeEnabled(true);
71-
if (getIntent().hasExtra(AddEditTaskFragment.ARGUMENT_EDIT_TASK_ID)) {
72-
actionBar.setTitle(R.string.edit_task);
73-
} else {
74-
// New TO-DO.
75-
actionBar.setTitle(R.string.add_task);
76-
}
79+
addEditTaskFragment.setPresenter(addEditTaskPresenter);
7780
}
7881

7982
@Override

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

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@
1717
package com.example.android.architecture.blueprints.todoapp.addedittask;
1818

1919
import android.app.Activity;
20-
import android.content.Context;
2120
import android.os.Bundle;
21+
import android.support.annotation.NonNull;
2222
import android.support.annotation.Nullable;
2323
import android.support.design.widget.FloatingActionButton;
2424
import android.support.design.widget.Snackbar;
@@ -28,9 +28,9 @@
2828
import android.view.ViewGroup;
2929
import android.widget.TextView;
3030

31-
import com.example.android.architecture.blueprints.todoapp.Injection;
3231
import com.example.android.architecture.blueprints.todoapp.R;
33-
import com.example.android.architecture.blueprints.todoapp.data.source.TaskLoader;
32+
33+
import static com.google.common.base.Preconditions.checkNotNull;
3434

3535
/**
3636
* Main UI for the add task screen. Users can enter a task title and description.
@@ -39,14 +39,14 @@ public class AddEditTaskFragment extends Fragment implements AddEditTaskContract
3939

4040
public static final String ARGUMENT_EDIT_TASK_ID = "EDIT_TASK_ID";
4141

42-
private AddEditTaskContract.UserActionsListener mActionListener;
43-
4442
private TextView mTitle;
4543

4644
private TextView mDescription;
4745

4846
private String mEditedTaskId;
4947

48+
private AddEditTaskPresenter mTasksPresenter;
49+
5050
public static AddEditTaskFragment newInstance() {
5151
return new AddEditTaskFragment();
5252
}
@@ -55,30 +55,28 @@ public AddEditTaskFragment() {
5555
// Required empty public constructor
5656
}
5757

58+
public void setPresenter(@NonNull AddEditTaskPresenter presenter) {
59+
mTasksPresenter = checkNotNull(presenter);
60+
}
61+
5862
@Override
5963
public void onActivityCreated(Bundle savedInstanceState) {
6064
super.onActivityCreated(savedInstanceState);
6165

6266
setTaskIdIfAny();
6367

64-
Context context = getContext();
65-
66-
mActionListener = new AddEditTaskPresenter(mEditedTaskId,
67-
Injection.provideTasksRepository(context), this,
68-
new TaskLoader(mEditedTaskId, context)).startLoader(this);
69-
7068
FloatingActionButton fab =
7169
(FloatingActionButton) getActivity().findViewById(R.id.fab_edit_task_done);
7270
fab.setImageResource(R.drawable.ic_done);
7371
fab.setOnClickListener(new View.OnClickListener() {
7472
@Override
7573
public void onClick(View v) {
7674
if (isNewTask()) {
77-
mActionListener.createTask(
75+
mTasksPresenter.createTask(
7876
mTitle.getText().toString(),
7977
mDescription.getText().toString());
8078
} else {
81-
mActionListener.updateTask(
79+
mTasksPresenter.updateTask(
8280
mEditedTaskId,
8381
mTitle.getText().toString(),
8482
mDescription.getText().toString());
@@ -101,6 +99,12 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container,
10199
return root;
102100
}
103101

102+
@Override
103+
public void onResume() {
104+
super.onResume();
105+
mTasksPresenter.startLoader(this);
106+
}
107+
104108
@Override
105109
public void showEmptyTaskError() {
106110
Snackbar.make(mTitle, getString(R.string.empty_task_message), Snackbar.LENGTH_LONG).show();

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

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,9 @@
2626
import android.support.v7.widget.Toolbar;
2727
import android.view.MenuItem;
2828

29+
import com.example.android.architecture.blueprints.todoapp.Injection;
2930
import com.example.android.architecture.blueprints.todoapp.R;
31+
import com.example.android.architecture.blueprints.todoapp.data.source.TasksLoader;
3032
import com.example.android.architecture.blueprints.todoapp.tasks.TasksActivity;
3133
import com.example.android.architecture.blueprints.todoapp.util.ActivityUtils;
3234

@@ -54,17 +56,26 @@ protected void onCreate(Bundle savedInstanceState) {
5456
// Set up the navigation drawer.
5557
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
5658
mDrawerLayout.setStatusBarBackground(R.color.colorPrimaryDark);
57-
5859
NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
5960
if (navigationView != null) {
6061
setupDrawerContent(navigationView);
6162
}
6263

63-
if (null == savedInstanceState) {
64+
StatisticsFragment statisticsFragment = (StatisticsFragment) getSupportFragmentManager()
65+
.findFragmentById(R.id.contentFrame);
66+
if (statisticsFragment == null) {
67+
statisticsFragment = StatisticsFragment.newInstance();
6468
ActivityUtils.addFragmentToActivity(getSupportFragmentManager(),
65-
StatisticsFragment.newInstance(), R.id.contentFrame);
69+
statisticsFragment, R.id.contentFrame);
6670
}
6771

72+
TasksLoader tasksLoader = new TasksLoader(getApplicationContext(),
73+
Injection.provideTasksRepository(getApplicationContext()));
74+
75+
StatisticsPresenter mStatisticsPresenter = new StatisticsPresenter(statisticsFragment,
76+
tasksLoader);
77+
78+
statisticsFragment.setPresenter(mStatisticsPresenter);
6879
}
6980

7081
@Override

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ interface View {
2525

2626
void setProgressIndicator(boolean active);
2727

28-
void displayStatistics(int numberOfIncompleteTasks, int numberOfCompletedTasks);
28+
void showStatistics(int numberOfIncompleteTasks, int numberOfCompletedTasks);
2929

3030
void showLoadingStatisticsError();
3131
}

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

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

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

19-
import android.content.Context;
2019
import android.os.Bundle;
20+
import android.support.annotation.NonNull;
2121
import android.support.annotation.Nullable;
2222
import android.support.v4.app.Fragment;
2323
import android.view.LayoutInflater;
2424
import android.view.View;
2525
import android.view.ViewGroup;
2626
import android.widget.TextView;
2727

28-
import com.example.android.architecture.blueprints.todoapp.Injection;
2928
import com.example.android.architecture.blueprints.todoapp.R;
30-
import com.example.android.architecture.blueprints.todoapp.data.source.TasksLoader;
29+
30+
import static com.google.common.base.Preconditions.checkNotNull;
3131

3232
/**
3333
* Main UI for the statistics screen.
@@ -36,19 +36,14 @@ public class StatisticsFragment extends Fragment implements StatisticsContract.V
3636

3737
private TextView mStatisticsTV;
3838

39+
private StatisticsPresenter mTasksPresenter;
40+
3941
public static StatisticsFragment newInstance() {
4042
return new StatisticsFragment();
4143
}
4244

43-
@Override
44-
public void onActivityCreated(Bundle savedInstanceState) {
45-
super.onActivityCreated(savedInstanceState);
46-
47-
Context context = getContext();
48-
49-
new StatisticsPresenter(this,
50-
new TasksLoader(context, Injection.provideTasksRepository(context)))
51-
.startLoader(this);
45+
public void setPresenter(@NonNull StatisticsPresenter presenter) {
46+
mTasksPresenter = checkNotNull(presenter);
5247
}
5348

5449
@Nullable
@@ -60,6 +55,11 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container,
6055
return root;
6156
}
6257

58+
@Override
59+
public void onResume() {
60+
super.onResume();
61+
mTasksPresenter.startLoader(this);
62+
}
6363

6464
@Override
6565
public void setProgressIndicator(boolean active) {
@@ -71,7 +71,7 @@ public void setProgressIndicator(boolean active) {
7171
}
7272

7373
@Override
74-
public void displayStatistics(int numberOfIncompleteTasks, int numberOfCompletedTasks) {
74+
public void showStatistics(int numberOfIncompleteTasks, int numberOfCompletedTasks) {
7575
if (numberOfCompletedTasks == 0 && numberOfIncompleteTasks == 0) {
7676
mStatisticsTV.setText(getResources().getString(R.string.statistics_no_tasks));
7777
} else {

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ private void loadStatistics(List<Task> tasks) {
9393

9494
mStatisticsView.setProgressIndicator(false);
9595

96-
mStatisticsView.displayStatistics(activeTasks, completedTasks);
96+
mStatisticsView.showStatistics(activeTasks, completedTasks);
9797
}
9898
}
9999
}

0 commit comments

Comments
 (0)