mirror of
https://github.com/android10/Android-CleanArchitecture.git
synced 2026-03-13 10:13:41 +08:00
Move injection logic to activity. PerActivity scope used.
This commit is contained in:
@@ -0,0 +1,9 @@
|
||||
/**
|
||||
* Copyright (C) 2015 android10.org. All rights reserved.
|
||||
* @author Fernando Cejas (the android10 coder)
|
||||
*/
|
||||
package com.fernandocejas.android10.sample.presentation.internal.di;
|
||||
|
||||
public interface HasComponent<C> {
|
||||
C getComponent();
|
||||
}
|
||||
@@ -5,6 +5,8 @@ import android.app.Fragment;
|
||||
import android.app.FragmentTransaction;
|
||||
import android.os.Bundle;
|
||||
import com.fernandocejas.android10.sample.presentation.AndroidApplication;
|
||||
import com.fernandocejas.android10.sample.presentation.internal.di.components.ApplicationComponent;
|
||||
import com.fernandocejas.android10.sample.presentation.internal.di.modules.ActivityModule;
|
||||
import com.fernandocejas.android10.sample.presentation.navigation.Navigator;
|
||||
import javax.inject.Inject;
|
||||
|
||||
@@ -18,11 +20,9 @@ public abstract class BaseActivity extends Activity {
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
this.initializeInjector();
|
||||
this.getApplicationComponent().inject(this);
|
||||
}
|
||||
|
||||
private void initializeInjector() {((AndroidApplication)getApplication()).inject(this);}
|
||||
|
||||
/**
|
||||
* Adds a {@link Fragment} to this activity's layout.
|
||||
*
|
||||
@@ -34,4 +34,22 @@ public abstract class BaseActivity extends Activity {
|
||||
fragmentTransaction.add(containerViewId, fragment);
|
||||
fragmentTransaction.commit();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the Main Application component for dependency injection.
|
||||
*
|
||||
* @return {@link com.fernandocejas.android10.sample.presentation.internal.di.components.ApplicationComponent}
|
||||
*/
|
||||
protected ApplicationComponent getApplicationComponent() {
|
||||
return ((AndroidApplication)getApplication()).getApplicationComponent();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get an Activity module for dependency injection.
|
||||
*
|
||||
* @return {@link com.fernandocejas.android10.sample.presentation.internal.di.modules.ActivityModule}
|
||||
*/
|
||||
protected ActivityModule getActivityModule() {
|
||||
return new ActivityModule(this);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,17 +9,21 @@ import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.view.Window;
|
||||
import com.fernandocejas.android10.sample.presentation.R;
|
||||
import com.fernandocejas.android10.sample.presentation.internal.di.HasComponent;
|
||||
import com.fernandocejas.android10.sample.presentation.internal.di.components.Dagger_UserComponent;
|
||||
import com.fernandocejas.android10.sample.presentation.internal.di.components.UserComponent;
|
||||
import com.fernandocejas.android10.sample.presentation.view.fragment.UserDetailsFragment;
|
||||
|
||||
/**
|
||||
* Activity that shows details of a certain user.
|
||||
*/
|
||||
public class UserDetailsActivity extends BaseActivity {
|
||||
public class UserDetailsActivity extends BaseActivity implements HasComponent<UserComponent>{
|
||||
|
||||
private static final String INTENT_EXTRA_PARAM_USER_ID = "org.android10.INTENT_PARAM_USER_ID";
|
||||
private static final String INSTANCE_STATE_PARAM_USER_ID = "org.android10.STATE_PARAM_USER_ID";
|
||||
|
||||
private int userId;
|
||||
private UserComponent userComponent;
|
||||
|
||||
public static Intent getCallingIntent(Context context, int userId) {
|
||||
Intent callingIntent = new Intent(context, UserDetailsActivity.class);
|
||||
@@ -33,6 +37,7 @@ public class UserDetailsActivity extends BaseActivity {
|
||||
requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
|
||||
setContentView(R.layout.activity_user_details);
|
||||
|
||||
this.initializeInjector();
|
||||
this.initializeActivity(savedInstanceState);
|
||||
}
|
||||
|
||||
@@ -54,4 +59,15 @@ public class UserDetailsActivity extends BaseActivity {
|
||||
this.userId = savedInstanceState.getInt(INSTANCE_STATE_PARAM_USER_ID);
|
||||
}
|
||||
}
|
||||
|
||||
private void initializeInjector() {
|
||||
this.userComponent = Dagger_UserComponent.builder()
|
||||
.applicationComponent(getApplicationComponent())
|
||||
.activityModule(getActivityModule())
|
||||
.build();
|
||||
}
|
||||
|
||||
@Override public UserComponent getComponent() {
|
||||
return userComponent;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,22 +9,41 @@ import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.view.Window;
|
||||
import com.fernandocejas.android10.sample.presentation.R;
|
||||
import com.fernandocejas.android10.sample.presentation.internal.di.HasComponent;
|
||||
import com.fernandocejas.android10.sample.presentation.internal.di.components.Dagger_UserComponent;
|
||||
import com.fernandocejas.android10.sample.presentation.internal.di.components.UserComponent;
|
||||
import com.fernandocejas.android10.sample.presentation.model.UserModel;
|
||||
import com.fernandocejas.android10.sample.presentation.view.fragment.UserListFragment;
|
||||
|
||||
/**
|
||||
* Activity that shows a list of Users.
|
||||
*/
|
||||
public class UserListActivity extends BaseActivity implements UserListFragment.UserListListener {
|
||||
public class UserListActivity extends BaseActivity implements HasComponent<UserComponent>,
|
||||
UserListFragment.UserListListener {
|
||||
|
||||
public static Intent getCallingIntent(Context context) {
|
||||
return new Intent(context, UserListActivity.class);
|
||||
}
|
||||
|
||||
private UserComponent userComponent;
|
||||
|
||||
@Override protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
|
||||
setContentView(R.layout.activity_user_list);
|
||||
|
||||
this.initializeInjector();
|
||||
}
|
||||
|
||||
private void initializeInjector() {
|
||||
this.userComponent = Dagger_UserComponent.builder()
|
||||
.applicationComponent(getApplicationComponent())
|
||||
.activityModule(getActivityModule())
|
||||
.build();
|
||||
}
|
||||
|
||||
@Override public UserComponent getComponent() {
|
||||
return userComponent;
|
||||
}
|
||||
|
||||
@Override public void onUserClicked(UserModel userModel) {
|
||||
|
||||
@@ -7,9 +7,7 @@ package com.fernandocejas.android10.sample.presentation.view.fragment;
|
||||
import android.app.Fragment;
|
||||
import android.os.Bundle;
|
||||
import android.widget.Toast;
|
||||
import com.fernandocejas.android10.sample.presentation.AndroidApplication;
|
||||
import com.fernandocejas.android10.sample.presentation.internal.di.components.ApplicationComponent;
|
||||
import com.fernandocejas.android10.sample.presentation.internal.di.modules.ActivityModule;
|
||||
import com.fernandocejas.android10.sample.presentation.internal.di.HasComponent;
|
||||
|
||||
/**
|
||||
* Base {@link android.app.Fragment} class for every fragment in this application.
|
||||
@@ -31,20 +29,10 @@ public abstract class BaseFragment extends Fragment {
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the Android Main Application component for dependency injection.
|
||||
*
|
||||
* @return {@link com.fernandocejas.android10.sample.presentation.internal.di.components.ApplicationComponent}
|
||||
* Gets a component for dependency injection by its type.
|
||||
*/
|
||||
protected ApplicationComponent getApplicationComponent() {
|
||||
return ((AndroidApplication)getActivity().getApplication()).getApplicationComponent();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get an Activity module for dependency injection.
|
||||
*
|
||||
* @return {@link com.fernandocejas.android10.sample.presentation.internal.di.modules.ActivityModule}
|
||||
*/
|
||||
protected ActivityModule getActivityModule() {
|
||||
return new ActivityModule(getActivity());
|
||||
@SuppressWarnings("unchecked")
|
||||
protected <C> C getComponent(Class<C> componentType) {
|
||||
return componentType.cast(((HasComponent<C>)getActivity()).getComponent());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,7 +16,7 @@ import butterknife.ButterKnife;
|
||||
import butterknife.InjectView;
|
||||
import butterknife.OnClick;
|
||||
import com.fernandocejas.android10.sample.presentation.R;
|
||||
import com.fernandocejas.android10.sample.presentation.internal.di.components.Dagger_UserComponent;
|
||||
import com.fernandocejas.android10.sample.presentation.internal.di.components.UserComponent;
|
||||
import com.fernandocejas.android10.sample.presentation.model.UserModel;
|
||||
import com.fernandocejas.android10.sample.presentation.presenter.UserDetailsPresenter;
|
||||
import com.fernandocejas.android10.sample.presentation.view.UserDetailsView;
|
||||
@@ -55,12 +55,6 @@ public class UserDetailsFragment extends BaseFragment implements UserDetailsView
|
||||
return userDetailsFragment;
|
||||
}
|
||||
|
||||
@Override public void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
this.initializeInjector();
|
||||
this.initialize();
|
||||
}
|
||||
|
||||
@Override public View onCreateView(LayoutInflater inflater, ViewGroup container,
|
||||
Bundle savedInstanceState) {
|
||||
|
||||
@@ -72,7 +66,7 @@ public class UserDetailsFragment extends BaseFragment implements UserDetailsView
|
||||
|
||||
@Override public void onActivityCreated(Bundle savedInstanceState) {
|
||||
super.onActivityCreated(savedInstanceState);
|
||||
this.userDetailsPresenter.initialize(this.userId);
|
||||
this.initialize();
|
||||
}
|
||||
|
||||
@Override public void onResume() {
|
||||
@@ -85,17 +79,11 @@ public class UserDetailsFragment extends BaseFragment implements UserDetailsView
|
||||
this.userDetailsPresenter.pause();
|
||||
}
|
||||
|
||||
private void initializeInjector() {
|
||||
Dagger_UserComponent.builder()
|
||||
.applicationComponent(getApplicationComponent())
|
||||
.activityModule(getActivityModule())
|
||||
.build()
|
||||
.inject(this);
|
||||
}
|
||||
|
||||
private void initialize() {
|
||||
this.getComponent(UserComponent.class).inject(this);
|
||||
this.userDetailsPresenter.setView(this);
|
||||
this.userId = getArguments().getInt(ARGUMENT_KEY_USER_ID);
|
||||
this.userDetailsPresenter.initialize(this.userId);
|
||||
}
|
||||
|
||||
@Override public void renderUser(UserModel user) {
|
||||
|
||||
@@ -17,7 +17,7 @@ import butterknife.ButterKnife;
|
||||
import butterknife.InjectView;
|
||||
import butterknife.OnClick;
|
||||
import com.fernandocejas.android10.sample.presentation.R;
|
||||
import com.fernandocejas.android10.sample.presentation.internal.di.components.Dagger_UserComponent;
|
||||
import com.fernandocejas.android10.sample.presentation.internal.di.components.UserComponent;
|
||||
import com.fernandocejas.android10.sample.presentation.model.UserModel;
|
||||
import com.fernandocejas.android10.sample.presentation.presenter.UserListPresenter;
|
||||
import com.fernandocejas.android10.sample.presentation.view.UserListView;
|
||||
@@ -59,12 +59,6 @@ public class UserListFragment extends BaseFragment implements UserListView {
|
||||
}
|
||||
}
|
||||
|
||||
@Override public void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
this.initializeInjector();
|
||||
this.initialize();
|
||||
}
|
||||
|
||||
@Override public View onCreateView(LayoutInflater inflater, ViewGroup container,
|
||||
Bundle savedInstanceState) {
|
||||
|
||||
@@ -77,6 +71,7 @@ public class UserListFragment extends BaseFragment implements UserListView {
|
||||
|
||||
@Override public void onActivityCreated(Bundle savedInstanceState) {
|
||||
super.onActivityCreated(savedInstanceState);
|
||||
this.initialize();
|
||||
this.loadUserList();
|
||||
}
|
||||
|
||||
@@ -90,15 +85,8 @@ public class UserListFragment extends BaseFragment implements UserListView {
|
||||
this.userListPresenter.pause();
|
||||
}
|
||||
|
||||
private void initializeInjector() {
|
||||
Dagger_UserComponent.builder()
|
||||
.applicationComponent(getApplicationComponent())
|
||||
.activityModule(getActivityModule())
|
||||
.build()
|
||||
.inject(this);
|
||||
}
|
||||
|
||||
private void initialize() {
|
||||
this.getComponent(UserComponent.class).inject(this);
|
||||
this.userListPresenter.setView(this);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user