Skip to content

Commit

Permalink
Update to ABS 4.0.0 Final (changes since RC1)
Browse files Browse the repository at this point in the history
Three changes:

* Remove use of ABS 'plugin-support-lib' as this is back in the ABS lib
itself

* Adapt our activities to use RoboGuice-supporting subclasses of the
ActionBarSherlock activity and fragment classes.

* ProGuard rule to ensure that the
constructor of the ActionBarSherlock implementation classes aren't
over-aggressivly removed (the 'native' one is invoked via reflection).
  • Loading branch information
rtyley committed Mar 8, 2012
1 parent c83ca5c commit dd1f558
Show file tree
Hide file tree
Showing 9 changed files with 275 additions and 16 deletions.
7 changes: 1 addition & 6 deletions app/pom.xml
Expand Up @@ -31,7 +31,7 @@
</parent>

<properties>
<abs.version>4.0.0-RC1</abs.version>
<abs.version>4.0.0</abs.version>
</properties>
<repositories>
<repository>
Expand Down Expand Up @@ -81,11 +81,6 @@
<type>jar</type>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.actionbarsherlock</groupId>
<artifactId>plugin-support-lib</artifactId>
<version>${abs.version}</version>
</dependency>
<dependency>
<groupId>com.madgag</groupId>
<artifactId>android-viewholder-listviews</artifactId>
Expand Down
@@ -0,0 +1,131 @@
/*
* Copyright 2012 Jake Wharton
*
* 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 com.github.mobile.gauges.roboguice;

import android.content.Intent;
import android.content.res.Configuration;
import android.os.Bundle;

import com.actionbarsherlock.app.SherlockActivity;
import com.google.inject.Inject;

import roboguice.RoboGuice;
import roboguice.activity.event.OnActivityResultEvent;
import roboguice.activity.event.OnConfigurationChangedEvent;
import roboguice.activity.event.OnContentChangedEvent;
import roboguice.activity.event.OnCreateEvent;
import roboguice.activity.event.OnDestroyEvent;
import roboguice.activity.event.OnNewIntentEvent;
import roboguice.activity.event.OnPauseEvent;
import roboguice.activity.event.OnRestartEvent;
import roboguice.activity.event.OnResumeEvent;
import roboguice.activity.event.OnStartEvent;
import roboguice.activity.event.OnStopEvent;
import roboguice.event.EventManager;
import roboguice.inject.ContentViewListener;
import roboguice.inject.RoboInjector;

/**
* An example of how to make your own Robo-enabled Sherlock activity. Feel free
* to do with with any of the other Sherlock activity types!
*/
public class RoboSherlockActivity extends SherlockActivity {
protected EventManager eventManager;

@Inject
ContentViewListener ignored; // BUG find a better place to put this

@Override
protected void onCreate(Bundle savedInstanceState) {
final RoboInjector injector = RoboGuice.getInjector(this);
eventManager = injector.getInstance(EventManager.class);
injector.injectMembersWithoutViews(this);
super.onCreate(savedInstanceState);
eventManager.fire(new OnCreateEvent(savedInstanceState));
}

@Override
protected void onRestart() {
super.onRestart();
eventManager.fire(new OnRestartEvent());
}

@Override
protected void onStart() {
super.onStart();
eventManager.fire(new OnStartEvent());
}

@Override
protected void onResume() {
super.onResume();
eventManager.fire(new OnResumeEvent());
}

@Override
protected void onPause() {
super.onPause();
eventManager.fire(new OnPauseEvent());
}

@Override
protected void onNewIntent( Intent intent ) {
super.onNewIntent(intent);
eventManager.fire(new OnNewIntentEvent());
}

@Override
protected void onStop() {
try {
eventManager.fire(new OnStopEvent());
} finally {
super.onStop();
}
}

@Override
protected void onDestroy() {
try {
eventManager.fire(new OnDestroyEvent());
} finally {
try {
RoboGuice.destroyInjector(this);
} finally {
super.onDestroy();
}
}
}

@Override
public void onConfigurationChanged(Configuration newConfig) {
final Configuration currentConfig = getResources().getConfiguration();
super.onConfigurationChanged(newConfig);
eventManager.fire(new OnConfigurationChangedEvent(currentConfig, newConfig));
}

@Override
public void onContentChanged() {
super.onContentChanged();
RoboGuice.getInjector(this).injectViewMembers(this);
eventManager.fire(new OnContentChangedEvent());
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
eventManager.fire(new OnActivityResultEvent(requestCode, resultCode, data));
}
}
@@ -0,0 +1,109 @@
package com.github.mobile.gauges.roboguice;

import android.os.Bundle;
import android.view.View;

import com.actionbarsherlock.app.SherlockFragmentActivity;
import com.actionbarsherlock.app.SherlockListFragment;

import roboguice.RoboGuice;

import roboguice.RoboGuice;
import roboguice.activity.event.*;
import roboguice.event.EventManager;
import roboguice.inject.ContentViewListener;
import roboguice.inject.RoboInjector;

import android.content.Intent;
import android.content.res.Configuration;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;

import com.google.inject.Inject;

public class RoboSherlockFragmentActivity extends SherlockFragmentActivity {
protected EventManager eventManager;

@Inject ContentViewListener ignored; // BUG find a better place to put this

@Override
protected void onCreate(Bundle savedInstanceState) {
final RoboInjector injector = RoboGuice.getInjector(this);
eventManager = injector.getInstance(EventManager.class);
injector.injectMembersWithoutViews(this);
super.onCreate(savedInstanceState);
eventManager.fire(new OnCreateEvent(savedInstanceState));
}

@Override
protected void onRestart() {
super.onRestart();
eventManager.fire(new OnRestartEvent());
}

@Override
protected void onStart() {
super.onStart();
eventManager.fire(new OnStartEvent());
}

@Override
protected void onResume() {
super.onResume();
eventManager.fire(new OnResumeEvent());
}

@Override
protected void onPause() {
super.onPause();
eventManager.fire(new OnPauseEvent());
}

@Override
protected void onNewIntent( Intent intent ) {
super.onNewIntent(intent);
eventManager.fire(new OnNewIntentEvent());
}

@Override
protected void onStop() {
try {
eventManager.fire(new OnStopEvent());
} finally {
super.onStop();
}
}

@Override
protected void onDestroy() {
try {
eventManager.fire(new OnDestroyEvent());
} finally {
try {
RoboGuice.destroyInjector(this);
} finally {
super.onDestroy();
}
}
}

@Override
public void onConfigurationChanged(Configuration newConfig) {
final Configuration currentConfig = getResources().getConfiguration();
super.onConfigurationChanged(newConfig);
eventManager.fire(new OnConfigurationChangedEvent(currentConfig, newConfig));
}

@Override
public void onContentChanged() {
super.onContentChanged();
RoboGuice.getInjector(this).injectViewMembers(this);
eventManager.fire(new OnContentChangedEvent());
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
eventManager.fire(new OnActivityResultEvent(requestCode, resultCode, data));
}
}
@@ -0,0 +1,24 @@
package com.github.mobile.gauges.roboguice;

import roboguice.RoboGuice;

import android.os.Bundle;
import android.support.v4.app.ListFragment;
import android.view.View;

import com.actionbarsherlock.app.SherlockActivity;
import com.actionbarsherlock.app.SherlockListFragment;

public abstract class RoboSherlockListFragment extends SherlockListFragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
RoboGuice.getInjector(getActivity()).injectMembersWithoutViews(this);
}

@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
RoboGuice.getInjector(getActivity()).injectViewMembers(this);
}
}
Expand Up @@ -19,13 +19,12 @@
import android.os.Bundle;

import com.github.mobile.gauges.R.layout;

import roboguice.activity.RoboFragmentActivity;
import com.github.mobile.gauges.roboguice.RoboSherlockFragmentActivity;

/**
* Activity to display list of gauge summaries
*/
public class GaugeListActivity extends RoboFragmentActivity {
public class GaugeListActivity extends RoboSherlockFragmentActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
Expand Down
Expand Up @@ -28,16 +28,16 @@
import com.github.mobile.gauges.R.id;
import com.github.mobile.gauges.R.layout;
import com.github.mobile.gauges.core.Gauge;
import com.github.mobile.gauges.roboguice.RoboSherlockFragmentActivity;
import com.viewpagerindicator.TitlePageIndicator;

import roboguice.activity.RoboFragmentActivity;
import roboguice.inject.InjectExtra;
import roboguice.inject.InjectView;

/**
* Activity to view a specific {@link Gauge}'s traffic, content, and referrer information
*/
public class GaugeViewActivity extends RoboFragmentActivity {
public class GaugeViewActivity extends RoboSherlockFragmentActivity {

@InjectView(id.tpi_header)
private TitlePageIndicator indicator;
Expand Down
Expand Up @@ -29,17 +29,16 @@
import com.github.mobile.gauges.R.id;
import com.github.mobile.gauges.R.menu;
import com.madgag.android.listviews.ViewHoldingListAdapter;
import com.github.mobile.gauges.roboguice.RoboSherlockListFragment;

import java.util.List;

import roboguice.fragment.RoboListFragment;

/**
* List loading fragment for a specific type
*
* @param <E>
*/
public abstract class ListLoadingFragment<E> extends RoboListFragment implements LoaderCallbacks<List<E>> {
public abstract class ListLoadingFragment<E> extends RoboSherlockListFragment implements LoaderCallbacks<List<E>> {

@Override
public void onActivityCreated(Bundle savedInstanceState) {
Expand Down
Expand Up @@ -32,6 +32,7 @@
import com.github.mobile.gauges.R.id;
import com.github.mobile.gauges.R.layout;
import com.github.mobile.gauges.core.Gauge;
import com.github.mobile.gauges.roboguice.RoboSherlockFragmentActivity;
import com.github.mobile.gauges.ui.GaugeListLoader;
import com.google.inject.Inject;

Expand All @@ -42,13 +43,12 @@
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;

import roboguice.activity.RoboFragmentActivity;
import roboguice.inject.InjectView;

/**
* Activity to display list of gauge summaries
*/
public class AirTrafficActivity extends RoboFragmentActivity implements LoaderCallbacks<List<Gauge>> {
public class AirTrafficActivity extends RoboSherlockFragmentActivity implements LoaderCallbacks<List<Gauge>> {

private static final String CHANNEL_PREFIX = "private-";

Expand Down
2 changes: 2 additions & 0 deletions proguard.cfg
Expand Up @@ -55,3 +55,5 @@
public *** startFinalizer(java.lang.Class,java.lang.Object);
*** startFinalizer(java.lang.Class,java.lang.Object);
}

-keepclassmembers class * extends com.actionbarsherlock.ActionBarSherlock { public <init>(...); }

1 comment on commit dd1f558

@JakeWharton
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

:trollface: 👍

Sorry the rendering fix couldn't make it into final. Maintenance releases should come fairly quickly and I hope to get that resolved ASAP.

Please sign in to comment.