Skip to content

Commit ee50c07

Browse files
committed
Fix orientation changes making execute uses cases. Minor refactor and leaks solved.
1 parent a775bfc commit ee50c07

File tree

9 files changed

+95
-49
lines changed

9 files changed

+95
-49
lines changed

presentation/src/main/java/com/fernandocejas/android10/sample/presentation/presenter/UserListPresenter.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,8 @@ public class UserListPresenter implements Presenter {
4444
private final UserModelDataMapper userModelDataMapper;
4545

4646
@Inject
47-
public UserListPresenter(@Named("userList") UseCase getUserListUserCase, UserModelDataMapper userModelDataMapper) {
47+
public UserListPresenter(@Named("userList") UseCase getUserListUserCase,
48+
UserModelDataMapper userModelDataMapper) {
4849
this.getUserListUseCase = getUserListUserCase;
4950
this.userModelDataMapper = userModelDataMapper;
5051
}

presentation/src/main/java/com/fernandocejas/android10/sample/presentation/view/activity/UserDetailsActivity.java

+6-6
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
/**
22
* Copyright (C) 2014 android10.org. All rights reserved.
3+
*
34
* @author Fernando Cejas (the android10 coder)
45
*/
56
package com.fernandocejas.android10.sample.presentation.view.activity;
@@ -23,20 +24,19 @@ public class UserDetailsActivity extends BaseActivity implements HasComponent<Us
2324
private static final String INTENT_EXTRA_PARAM_USER_ID = "org.android10.INTENT_PARAM_USER_ID";
2425
private static final String INSTANCE_STATE_PARAM_USER_ID = "org.android10.STATE_PARAM_USER_ID";
2526

26-
private int userId;
27-
private UserComponent userComponent;
28-
2927
public static Intent getCallingIntent(Context context, int userId) {
3028
Intent callingIntent = new Intent(context, UserDetailsActivity.class);
3129
callingIntent.putExtra(INTENT_EXTRA_PARAM_USER_ID, userId);
32-
3330
return callingIntent;
3431
}
3532

33+
private int userId;
34+
private UserComponent userComponent;
35+
3636
@Override protected void onCreate(Bundle savedInstanceState) {
3737
super.onCreate(savedInstanceState);
3838
requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
39-
setContentView(R.layout.activity_user_details);
39+
setContentView(R.layout.activity_layout);
4040

4141
this.initializeActivity(savedInstanceState);
4242
this.initializeInjector();
@@ -55,7 +55,7 @@ public static Intent getCallingIntent(Context context, int userId) {
5555
private void initializeActivity(Bundle savedInstanceState) {
5656
if (savedInstanceState == null) {
5757
this.userId = getIntent().getIntExtra(INTENT_EXTRA_PARAM_USER_ID, -1);
58-
addFragment(R.id.fl_fragment, UserDetailsFragment.create(this.userId));
58+
addFragment(R.id.fragmentContainer, new UserDetailsFragment());
5959
} else {
6060
this.userId = savedInstanceState.getInt(INSTANCE_STATE_PARAM_USER_ID);
6161
}

presentation/src/main/java/com/fernandocejas/android10/sample/presentation/view/activity/UserListActivity.java

+1-2
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,9 @@ public static Intent getCallingIntent(Context context) {
3131
@Override protected void onCreate(Bundle savedInstanceState) {
3232
super.onCreate(savedInstanceState);
3333
requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
34-
setContentView(R.layout.activity_user_list);
34+
setContentView(R.layout.activity_layout);
3535

3636
this.initializeInjector();
37-
3837
if (savedInstanceState == null) {
3938
addFragment(R.id.fragmentContainer, new UserListFragment());
4039
}

presentation/src/main/java/com/fernandocejas/android10/sample/presentation/view/component/AutoLoadImageView.java

+64-6
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
/**
22
* Copyright (C) 2014 android10.org. All rights reserved.
3+
*
34
* @author Fernando Cejas (the android10 coder)
45
*/
56
package com.fernandocejas.android10.sample.presentation.view.component;
@@ -10,6 +11,8 @@
1011
import android.graphics.BitmapFactory;
1112
import android.net.ConnectivityManager;
1213
import android.net.NetworkInfo;
14+
import android.os.Parcel;
15+
import android.os.Parcelable;
1316
import android.util.AttributeSet;
1417
import android.util.Log;
1518
import android.widget.ImageView;
@@ -29,7 +32,8 @@ public class AutoLoadImageView extends ImageView {
2932

3033
private static final String BASE_IMAGE_NAME_CACHED = "image_";
3134

32-
private int imagePlaceHolderResourceId = -1;
35+
private String imageUrl = null;
36+
private int imagePlaceHolderResId = -1;
3337
private DiskCache cache = new DiskCache(getContext().getCacheDir());
3438

3539
public AutoLoadImageView(Context context) {
@@ -44,15 +48,36 @@ public AutoLoadImageView(Context context, AttributeSet attrs, int defStyle) {
4448
super(context, attrs, defStyle);
4549
}
4650

51+
@Override protected Parcelable onSaveInstanceState() {
52+
Parcelable superState = super.onSaveInstanceState();
53+
SavedState savedState = new SavedState(superState);
54+
savedState.imagePlaceHolderResId = this.imagePlaceHolderResId;
55+
savedState.imageUrl = this.imageUrl;
56+
return savedState;
57+
}
58+
59+
@Override protected void onRestoreInstanceState(Parcelable state) {
60+
if(!(state instanceof SavedState)) {
61+
super.onRestoreInstanceState(state);
62+
return;
63+
}
64+
SavedState savedState = (SavedState)state;
65+
super.onRestoreInstanceState(savedState.getSuperState());
66+
this.imagePlaceHolderResId = savedState.imagePlaceHolderResId;
67+
this.imageUrl = savedState.imageUrl;
68+
this.setImageUrl(this.imageUrl);
69+
}
70+
4771
/**
4872
* Set an image from a remote url.
4973
*
5074
* @param imageUrl The url of the resource to load.
5175
*/
5276
public void setImageUrl(final String imageUrl) {
77+
this.imageUrl = imageUrl;
5378
AutoLoadImageView.this.loadImagePlaceHolder();
54-
if (imageUrl != null) {
55-
this.loadImageFromUrl(imageUrl);
79+
if (this.imageUrl != null) {
80+
this.loadImageFromUrl(this.imageUrl);
5681
} else {
5782
this.loadImagePlaceHolder();
5883
}
@@ -64,7 +89,7 @@ public void setImageUrl(final String imageUrl) {
6489
* @param resourceId The resource id to use as a place holder.
6590
*/
6691
public void setImagePlaceHolder(int resourceId) {
67-
this.imagePlaceHolderResourceId = resourceId;
92+
this.imagePlaceHolderResId = resourceId;
6893
this.loadImagePlaceHolder();
6994
}
7095

@@ -126,11 +151,11 @@ private void loadBitmap(final Bitmap bitmap) {
126151
* Loads the image place holder if any has been assigned.
127152
*/
128153
private void loadImagePlaceHolder() {
129-
if (this.imagePlaceHolderResourceId != -1) {
154+
if (this.imagePlaceHolderResId != -1) {
130155
((Activity) getContext()).runOnUiThread(new Runnable() {
131156
@Override public void run() {
132157
AutoLoadImageView.this.setImageResource(
133-
AutoLoadImageView.this.imagePlaceHolderResourceId);
158+
AutoLoadImageView.this.imagePlaceHolderResId);
134159
}
135160
});
136161
}
@@ -310,4 +335,37 @@ private File buildFileFromFilename(String fileName) {
310335
return new File(fullPath);
311336
}
312337
}
338+
339+
private static class SavedState extends BaseSavedState {
340+
int imagePlaceHolderResId;
341+
String imageUrl;
342+
343+
SavedState(Parcelable superState) {
344+
super(superState);
345+
}
346+
347+
private SavedState(Parcel in) {
348+
super(in);
349+
this.imagePlaceHolderResId = in.readInt();
350+
this.imageUrl = in.readString();
351+
}
352+
353+
@Override
354+
public void writeToParcel(Parcel out, int flags) {
355+
super.writeToParcel(out, flags);
356+
out.writeInt(this.imagePlaceHolderResId);
357+
out.writeString(this.imageUrl);
358+
}
359+
360+
public static final Parcelable.Creator<SavedState> CREATOR =
361+
new Parcelable.Creator<SavedState>() {
362+
public SavedState createFromParcel(Parcel in) {
363+
return new SavedState(in);
364+
}
365+
366+
public SavedState[] newArray(int size) {
367+
return new SavedState[size];
368+
}
369+
};
370+
}
313371
}

presentation/src/main/java/com/fernandocejas/android10/sample/presentation/view/fragment/UserDetailsFragment.java

+3-11
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,6 @@
2828
*/
2929
public class UserDetailsFragment extends BaseFragment implements UserDetailsView {
3030

31-
private static final String ARGUMENT_KEY_USER_ID = "org.android10.ARGUMENT_USER_ID";
32-
3331
@Inject UserDetailsPresenter userDetailsPresenter;
3432

3533
@Bind(R.id.iv_cover) AutoLoadImageView iv_cover;
@@ -45,14 +43,6 @@ public UserDetailsFragment() {
4543
setRetainInstance(true);
4644
}
4745

48-
public static UserDetailsFragment create(int userId) {
49-
UserDetailsFragment userDetailsFragment = new UserDetailsFragment();
50-
Bundle argumentsBundle = new Bundle();
51-
argumentsBundle.putInt(ARGUMENT_KEY_USER_ID, userId);
52-
userDetailsFragment.setArguments(argumentsBundle);
53-
return userDetailsFragment;
54-
}
55-
5646
@Override public void onCreate(Bundle savedInstanceState) {
5747
super.onCreate(savedInstanceState);
5848
this.getComponent(UserComponent.class).inject(this);
@@ -68,7 +58,9 @@ public static UserDetailsFragment create(int userId) {
6858
@Override public void onViewCreated(View view, Bundle savedInstanceState) {
6959
super.onViewCreated(view, savedInstanceState);
7060
this.userDetailsPresenter.setView(this);
71-
this.userDetailsPresenter.initialize();
61+
if (savedInstanceState == null) {
62+
this.loadUserDetails();
63+
}
7264
}
7365

7466
@Override public void onResume() {

presentation/src/main/java/com/fernandocejas/android10/sample/presentation/view/fragment/UserListFragment.java

+8-1
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,9 @@ public UserListFragment() {
7676
@Override public void onViewCreated(View view, Bundle savedInstanceState) {
7777
super.onViewCreated(view, savedInstanceState);
7878
this.userListPresenter.setView(this);
79-
this.loadUserList();
79+
if (savedInstanceState == null) {
80+
this.loadUserList();
81+
}
8082
}
8183

8284
@Override public void onResume() {
@@ -100,6 +102,11 @@ public UserListFragment() {
100102
this.userListPresenter.destroy();
101103
}
102104

105+
@Override public void onDetach() {
106+
super.onDetach();
107+
this.userListListener = null;
108+
}
109+
103110
@Override public void showLoading() {
104111
this.rl_progress.setVisibility(View.VISIBLE);
105112
this.getActivity().setProgressBarIndeterminateVisibility(true);
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,10 @@
11
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
22
android:layout_width="match_parent"
3-
android:layout_height="match_parent"
4-
>
3+
android:layout_height="match_parent">
54

65
<FrameLayout
76
android:id="@+id/fragmentContainer"
87
android:layout_width="match_parent"
9-
android:layout_height="match_parent"
10-
/>
8+
android:layout_height="match_parent" />
119

1210
</RelativeLayout>

presentation/src/main/res/layout/activity_user_details.xml

-12
This file was deleted.

presentation/src/main/res/layout/view_user_details.xml

+9-6
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
3-
android:orientation="vertical"
43
android:layout_width="match_parent"
54
android:layout_height="match_parent"
5+
android:orientation="vertical"
66
>
77

88
<com.fernandocejas.android10.sample.presentation.view.component.AutoLoadImageView
@@ -15,15 +15,16 @@
1515
<TextView
1616
android:id="@+id/tv_fullname"
1717
style="@style/AppTheme.TextViewHeader"
18+
android:freezesText="true"
1819
/>
1920

2021
<LinearLayout
21-
android:orientation="vertical"
2222
android:layout_width="match_parent"
2323
android:layout_height="match_parent"
2424
android:layout_marginLeft="@dimen/activity_horizontal_margin"
25-
android:layout_marginRight="@dimen/activity_horizontal_margin">
26-
25+
android:layout_marginRight="@dimen/activity_horizontal_margin"
26+
android:orientation="vertical"
27+
>
2728
<TextView
2829
style="@style/AppTheme.TextViewTitle"
2930
android:text="@string/view_text_email"
@@ -32,8 +33,8 @@
3233
android:id="@+id/tv_email"
3334
android:layout_width="match_parent"
3435
android:layout_height="wrap_content"
36+
android:freezesText="true"
3537
/>
36-
3738
<TextView
3839
style="@style/AppTheme.TextViewTitle"
3940
android:text="@string/view_text_followers"
@@ -42,6 +43,7 @@
4243
android:id="@+id/tv_followers"
4344
android:layout_width="match_parent"
4445
android:layout_height="wrap_content"
46+
android:freezesText="true"
4547
/>
4648

4749
<TextView
@@ -52,7 +54,8 @@
5254
android:id="@+id/tv_description"
5355
android:layout_width="match_parent"
5456
android:layout_height="wrap_content"
57+
android:freezesText="true"
5558
/>
5659
</LinearLayout>
5760

58-
</LinearLayout>
61+
</LinearLayout>

0 commit comments

Comments
 (0)