Skip to content

Commit

Permalink
First approach, just using a utility class to restore activity graph. :)
Browse files Browse the repository at this point in the history
  • Loading branch information
PaNaVTEC committed Mar 28, 2015
1 parent a3482fe commit 487b3db
Show file tree
Hide file tree
Showing 9 changed files with 161 additions and 48 deletions.
6 changes: 6 additions & 0 deletions app/build.gradle
Original file line number Diff line number Diff line change
@@ -1,9 +1,15 @@
buildscript {
repositories {
mavenCentral()
}

dependencies {
classpath 'com.jakewharton.hugo:hugo-plugin:1.2.1'
}
}

apply plugin: 'com.android.application'
apply plugin: 'com.jakewharton.hugo'

def STRING = "String"
def BOOLEAN = "boolean"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,6 @@
import android.widget.TextView;
import butterknife.InjectView;
import butterknife.OnClick;
import java.util.Arrays;
import java.util.List;
import javax.inject.Inject;
import me.panavtec.cleancontacts.R;
import me.panavtec.cleancontacts.presentation.detail.DetailPresenter;
Expand Down Expand Up @@ -50,14 +48,28 @@ public class DetailActivity extends BaseActivity

@Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
coordinator = new Coordinator(this, COORDINATE_END_TRANSITION, COORDINATE_SHOW_CONTACT);
parseArguments();
initTransitionElements();
initUi();
presenter.onCreate(contactMd5);
parseArguments();
presenter.onCreate(this);
}

@Override public int onCreateViewId() {
return R.layout.activity_detail;
}

@Override protected void onResume() {
super.onResume();
presenter.onResume();
presenter.obtainContact(contactMd5);
}

@Override protected void onPause() {
super.onPause();
presenter.onPause();
}

private void initTransitionElements() {
coordinator = new Coordinator(this, COORDINATE_END_TRANSITION, COORDINATE_SHOW_CONTACT);
windowTransitionListener.setupListener(this);
imageLoader.loadWithoutEffects(thumbnail, contactImageView);
windowTransitionListener.start();
Expand All @@ -68,7 +80,7 @@ private void parseArguments() {
thumbnail = getIntent().getStringExtra(CONTACT_THUMBNAIL_EXTRA);
}

private void initUi() {
@Override public void initUi() {
initToolbar();
}

Expand All @@ -79,20 +91,6 @@ private void initToolbar() {
}
}

@Override public int onCreateViewId() {
return R.layout.activity_detail;
}

@Override protected void onResume() {
super.onResume();
presenter.onResume();
}

@Override protected void onPause() {
super.onPause();
presenter.onPause();
}

@Override public void showContactData(PresentationContact contact) {
this.contact = contact;
coordinator.completeAction(COORDINATE_SHOW_CONTACT);
Expand Down Expand Up @@ -167,7 +165,7 @@ private void showAddress() {
coordinator.completeAction(COORDINATE_END_TRANSITION);
}

protected List<Object> getModules() {
return Arrays.<Object>asList(new DetailModule(this));
@Override protected Object newDiModule() {
return new DetailModule(this);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@
import com.carlosdelachica.easyrecycleradapters.adapter.EasyRecyclerAdapter;
import com.carlosdelachica.easyrecycleradapters.adapter.EasyViewHolder;
import com.carlosdelachica.easyrecycleradapters.recycler_view_manager.EasyRecyclerViewManager;
import java.util.Arrays;
import java.util.List;
import javax.inject.Inject;
import me.panavtec.cleancontacts.R;
Expand All @@ -26,7 +25,7 @@
import me.panavtec.cleancontacts.ui.imageloader.ImageLoader;
import me.panavtec.cleancontacts.ui.items.ContactViewHolder;

public class MainActivity extends BaseActivity
public class MainActivity extends BaseActivity<MainModule>
implements MainView, SwipeRefreshLayout.OnRefreshListener, EasyViewHolder.OnItemClickListener {

@Inject MainPresenter presenter;
Expand All @@ -43,11 +42,10 @@ public class MainActivity extends BaseActivity

@Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
initUi();
presenter.onCreate();
presenter.onCreate(this);
}

private void initUi() {
@Override public void initUi() {
initToolbar();
initRecyclerView();
initRefreshLayout();
Expand Down Expand Up @@ -122,8 +120,9 @@ public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
swipeRefreshLayout.setRefreshing(true);
}

@Override protected List<Object> getModules() {
return Arrays.<Object>asList(new MainModule(this));

@Override protected MainModule newDiModule() {
return new MainModule(this);
}

@Override public void onItemClick(int position, View view) {
Expand All @@ -134,4 +133,5 @@ public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
(TextView) view.findViewById(R.id.nameTextView));
detailActionCommand.execute();
}

}
64 changes: 52 additions & 12 deletions app/src/main/java/me/panavtec/cleancontacts/ui/BaseActivity.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,21 +2,51 @@

import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.util.Log;
import butterknife.ButterKnife;
import dagger.ObjectGraph;
import hugo.weaving.DebugLog;
import java.util.ArrayList;
import java.util.List;
import me.panavtec.cleancontacts.CleanContactsApp;
import me.panavtec.cleancontacts.di.ActivityModule;

public class BaseActivity extends ActionBarActivity {
public abstract class BaseActivity<T> extends ActionBarActivity
implements ConfigurationHandler.ConfigurationHandlerListener {

private ObjectGraph activityGraph;
private T diModule;

@Override protected void onCreate(Bundle savedInstanceState) {
activityGraph = new ActivityInjector(this).createGraph(getModules());
ConfigurationHandler configurationHandler = new ConfigurationHandler(this);

@Override public void destroyThemAll() {
activityGraph = null;
}

@DebugLog @Override protected void onStart() {
super.onStart();
}

@DebugLog @Override protected void onStop() {
super.onStop();
}

@DebugLog @Override protected void onCreate(Bundle savedInstanceState) {
createActivityModule();
super.onCreate(savedInstanceState);
injectView();
configurationHandler.create();
}

@DebugLog @Override protected void onResume() {
super.onResume();
}

@DebugLog @Override protected void onPause() {
super.onPause();
}

private void injectView() {
int layoutId = onCreateViewId();
if (layoutId != 0) {
setContentView(layoutId);
Expand All @@ -28,25 +58,33 @@ public int onCreateViewId() {
return 0;
}

@Override protected void onDestroy() {
activityGraph = null;
@DebugLog @Override protected void onDestroy() {
configurationHandler.destroy();
super.onDestroy();
}

public ObjectGraph getActivityGraph() {
return activityGraph;
}

public void inject(Object obj) {
if (activityGraph != null) {
activityGraph.inject(obj);
private void createActivityModule() {
Object savedObjectGraph = getLastCustomNonConfigurationInstance();
Log.d("MainActivity", "graph: " + savedObjectGraph);
if (savedObjectGraph == null) {
diModule = newDiModule();
activityGraph = new ActivityInjector(this).createGraph(diModule);
} else {
activityGraph = (ObjectGraph) savedObjectGraph;
activityGraph.inject(this);
}
}

protected List<Object> getModules() {
return new ArrayList<>();
@Override public Object onRetainCustomNonConfigurationInstance() {
return activityGraph;
}

protected abstract T newDiModule();

static class ActivityInjector {

private ActionBarActivity activity;
Expand All @@ -55,8 +93,10 @@ public ActivityInjector(ActionBarActivity activity) {
this.activity = activity;
}

public ObjectGraph createGraph() {
return createGraph(new ArrayList<>());
public ObjectGraph createGraph(Object module) {
ArrayList<Object> modules = new ArrayList<>();
modules.add(module);
return createGraph(modules);
}

public ObjectGraph createGraph(List<Object> modules) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
package me.panavtec.cleancontacts.ui;

import android.os.Handler;
import android.os.Message;
import hugo.weaving.DebugLog;

public class ConfigurationHandler {

private static final int MSG_REALLY_DESTROYED = 1;
private ConfigurationHandlerListener configurationHandlerListener;

static interface ConfigurationHandlerListener {
void destroyThemAll();
}

public ConfigurationHandler(ConfigurationHandlerListener configurationHandlerListener) {
this.configurationHandlerListener = configurationHandlerListener;
}

boolean mStopped;
boolean mReallyStopped;

Handler mHandler = new Handler() {
@DebugLog @Override public void handleMessage(Message msg) {
switch (msg.what) {
case MSG_REALLY_DESTROYED:
if (mStopped) {
doReallyDestroy();
mHandler = null;
}
break;
}
}
};

void doReallyDestroy() {
if (!mReallyStopped) {
mReallyStopped = true;
mHandler.removeMessages(MSG_REALLY_DESTROYED);
configurationHandlerListener.destroyThemAll();
}
}

public void destroy() {
mStopped = true;
mHandler.sendEmptyMessage(MSG_REALLY_DESTROYED);
}

public void create() {
mStopped = false;
mReallyStopped = false;
mHandler.removeMessages(MSG_REALLY_DESTROYED);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,8 @@ public class DetailPresenter extends Presenter {
private final Bus bus;
private final InteractorInvoker interactorInvoker;
private final GetContactInteractor getContactInteractor;
private final DetailView detailView;
private final PresentationContactMapper presentationContactMapper;
private DetailView detailView;

public DetailPresenter(Bus bus, InteractorInvoker interactorInvoker,
GetContactInteractor getContactInteractor, DetailView detailView, PresentationContactMapper presentationContactMapper) {
Expand All @@ -24,6 +24,11 @@ public DetailPresenter(Bus bus, InteractorInvoker interactorInvoker,
this.presentationContactMapper = presentationContactMapper;
}

public void onCreate(DetailView detailView) {
this.detailView = detailView;
detailView.initUi();
}

@Override public void onResume() {
bus.register(this);
}
Expand All @@ -32,7 +37,7 @@ public DetailPresenter(Bus bus, InteractorInvoker interactorInvoker,
bus.unregister(this);
}

public void onCreate(String contactMd5) {
public void obtainContact(String contactMd5) {
getContactInteractor.setData(contactMd5);
interactorInvoker.execute(getContactInteractor);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,6 @@ public interface DetailView {
void showContactData(PresentationContact contact);

void showGetContactError();

void initUi();
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@ public class MainPresenter extends Presenter {
private final Bus bus;
private final InteractorInvoker interactorInvoker;
private final GetContactsInteractor getContactsInteractor;
private final MainView mainView;
private final ListMapper<Contact, PresentationContact> listMapper;
private MainView mainView;

public MainPresenter(Bus bus, InteractorInvoker interactorInvoker,
GetContactsInteractor getContactsInteractor, MainView mainView,
Expand All @@ -25,22 +25,28 @@ public MainPresenter(Bus bus, InteractorInvoker interactorInvoker,
this.getContactsInteractor = getContactsInteractor;
this.mainView = mainView;
this.listMapper = listMapper;
System.out.println("MainActivity - Create Presenter");
}

public void onCreate() {
interactorInvoker.execute(getContactsInteractor);
public void onCreate(MainView mainView) {
this.mainView = mainView;
mainView.initUi();
}

@Override public void onResume() {
bus.register(this);
interactorInvoker.execute(getContactsInteractor);
System.out.println("MainActivity - Presenter - onResume");
}

@Override public void onPause() {
bus.unregister(this);
}

public void onEvent(GetContactsEvent event) {
System.out.println("MainActivity - Presenter - onEvent");
if (event.getError() == null) {
System.out.println("MainActivity - Presenter - onEvent - NoError");
mainView.refreshContactsList(listMapper.modelToData(event.getContacts()));
} else {
mainView.showGetContactsError();
Expand Down
Loading

0 comments on commit 487b3db

Please sign in to comment.