// Path: app/src/main/java/me/martinez/sergio/daggertwobasearchitecture/di/components/AppComponent.java
// @Singleton @Component(modules = AppModule.class)
// public interface AppComponent {
//   void inject(App app);
//   A provideA();
//   List<String> provideDiInjectionHistory();
//   Log4Me provideLog4Me();
// }
// 
// Path: app/src/main/java/me/martinez/sergio/daggertwobasearchitecture/di/modules/ActivityModule.java
// @Module
// public class ActivityModule {
// 
//   BaseInjectionActivity baseInjectionActivity;
// 
//   public ActivityModule(BaseInjectionActivity baseInjectionActivity) {
//     this.baseInjectionActivity = baseInjectionActivity;
//   }
// 
//   @Provides @PerActivity B provideB(){
//     return new B();
//   }
// 
// }
// 
// Path: app/src/main/java/me/martinez/sergio/daggertwobasearchitecture/fragments/MainFragment.java
// public class MainFragment extends BaseFragment<MainFragmentComponent> {
// 
//   @Inject B b;
//   @Inject A a;
//   @Inject C c;
//   @Inject List<String> diInjectioHistoric;
// 
//   @Override
//   public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
//     return inflater.inflate(R.layout.fragment_main, container, false);
//   }
// 
//   @Override public void onStart() {
//     super.onStart();
//     testDI();
//   }
// 
//   private void testDI() {
//     diInjectioHistoric.add(MainFragment.class.getName());
//     diInjectioHistoric.add(b.toString());
//     diInjectioHistoric.add(a.toString());
//     diInjectioHistoric.add(c.toString());
//   }
// 
//   //region dependency injection Methods
//   @Override protected void initDIComponent() {
//     fragmentComponent = (getParentComponent(MainActivityComponent.class)).plus(
//         new FragmentModule(this), new MainFragmentModule(this));
//     fragmentComponent.injectFragment(this);
//   }
// 
//   public interface Pluser{
//     MainFragmentComponent plus(FragmentModule secondFragmentModule, MainFragmentModule baseFragmentModule);
//   }
//   //endregion
// }
// 
// Path: app/src/main/java/me/martinez/sergio/daggertwobasearchitecture/test/A.java
// public class A {}
// 
// Path: app/src/main/java/me/martinez/sergio/daggertwobasearchitecture/utils/Log4Me.java
// public interface Log4Me {
//   void log(String message, int logLevel, Object clazz);
//   void log(String message, int logLevel);
//   void log(String message);
// }


import dagger.Component;
import java.util.List;
import me.martinez.sergio.daggertwobasearchitecture.di.components.AppComponent;
import me.martinez.sergio.daggertwobasearchitecture.di.modules.ActivityModule;
import me.martinez.sergio.daggertwobasearchitecture.di.anotations.scopes.PerActivity;
import me.martinez.sergio.daggertwobasearchitecture.fragments.MainFragment;
import me.martinez.sergio.daggertwobasearchitecture.test.A;
import me.martinez.sergio.daggertwobasearchitecture.utils.Log4Me;
/*
 *  Copyright (C) 2015 Sergio Martinez Open Source Project
 *
 *  Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *  You may obtain a copy of the License at
 *
 *  http://www.apache.org/licenses/LICENSE-2.0
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 */

package me.martinez.sergio.daggertwobasearchitecture.activities;


/**
 * Created by Sergio Martinez Rodriguez
 * Date 15/7/15.
 */
@PerActivity
@Component(dependencies = AppComponent.class, modules = {ActivityModule.class, MainActivityModule.class})
public interface MainActivityComponent extends MainFragment.Pluser{
  void injectActivity(MainActivity mainActivity);
  A provideA();
  List<String> provideDiInjectionHistory();
// Path: app/src/main/java/me/martinez/sergio/daggertwobasearchitecture/di/components/AppComponent.java
// @Singleton @Component(modules = AppModule.class)
// public interface AppComponent {
//   void inject(App app);
//   A provideA();
//   List<String> provideDiInjectionHistory();
//   Log4Me provideLog4Me();
// }
// 
// Path: app/src/main/java/me/martinez/sergio/daggertwobasearchitecture/di/modules/ActivityModule.java
// @Module
// public class ActivityModule {
// 
//   BaseInjectionActivity baseInjectionActivity;
// 
//   public ActivityModule(BaseInjectionActivity baseInjectionActivity) {
//     this.baseInjectionActivity = baseInjectionActivity;
//   }
// 
//   @Provides @PerActivity B provideB(){
//     return new B();
//   }
// 
// }
// 
// Path: app/src/main/java/me/martinez/sergio/daggertwobasearchitecture/fragments/MainFragment.java
// public class MainFragment extends BaseFragment<MainFragmentComponent> {
// 
//   @Inject B b;
//   @Inject A a;
//   @Inject C c;
//   @Inject List<String> diInjectioHistoric;
// 
//   @Override
//   public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
//     return inflater.inflate(R.layout.fragment_main, container, false);
//   }
// 
//   @Override public void onStart() {
//     super.onStart();
//     testDI();
//   }
// 
//   private void testDI() {
//     diInjectioHistoric.add(MainFragment.class.getName());
//     diInjectioHistoric.add(b.toString());
//     diInjectioHistoric.add(a.toString());
//     diInjectioHistoric.add(c.toString());
//   }
// 
//   //region dependency injection Methods
//   @Override protected void initDIComponent() {
//     fragmentComponent = (getParentComponent(MainActivityComponent.class)).plus(
//         new FragmentModule(this), new MainFragmentModule(this));
//     fragmentComponent.injectFragment(this);
//   }
// 
//   public interface Pluser{
//     MainFragmentComponent plus(FragmentModule secondFragmentModule, MainFragmentModule baseFragmentModule);
//   }
//   //endregion
// }
// 
// Path: app/src/main/java/me/martinez/sergio/daggertwobasearchitecture/test/A.java
// public class A {}
// 
// Path: app/src/main/java/me/martinez/sergio/daggertwobasearchitecture/utils/Log4Me.java
// public interface Log4Me {
//   void log(String message, int logLevel, Object clazz);
//   void log(String message, int logLevel);
//   void log(String message);
// }


// Path: app/src/main/java/me/martinez/sergio/daggertwobasearchitecture/activities/MainActivityComponent.java
import dagger.Component;
import java.util.List;
import me.martinez.sergio.daggertwobasearchitecture.di.components.AppComponent;
import me.martinez.sergio.daggertwobasearchitecture.di.modules.ActivityModule;
import me.martinez.sergio.daggertwobasearchitecture.di.anotations.scopes.PerActivity;
import me.martinez.sergio.daggertwobasearchitecture.fragments.MainFragment;
import me.martinez.sergio.daggertwobasearchitecture.test.A;
import me.martinez.sergio.daggertwobasearchitecture.utils.Log4Me;

/*
 *  Copyright (C) 2015 Sergio Martinez Open Source Project
 *
 *  Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *  You may obtain a copy of the License at
 *
 *  http://www.apache.org/licenses/LICENSE-2.0
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 */

package me.martinez.sergio.daggertwobasearchitecture.activities;


/**
 * Created by Sergio Martinez Rodriguez
 * Date 15/7/15.
 */
@PerActivity
@Component(dependencies = AppComponent.class, modules = {ActivityModule.class, MainActivityModule.class})
public interface MainActivityComponent extends MainFragment.Pluser{
  void injectActivity(MainActivity mainActivity);
  A provideA();
  List<String> provideDiInjectionHistory();
  Log4Me provideLog4Me();