Skip to content
This repository has been archived by the owner on May 23, 2020. It is now read-only.

Avoid usage of nulls in navi #76

Merged
merged 3 commits into from
Oct 31, 2016
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 17 additions & 15 deletions navi/src/main/java/com/trello/navi2/Event.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import android.content.res.Configuration;
import android.os.Bundle;
import android.os.PersistableBundle;
import android.support.annotation.NonNull;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
Expand All @@ -26,7 +27,8 @@
* are called *before* their super calls are made. Events that are neither are called *after*
* their super calls.
*
* @param <T> the callback type for the event
* @param <T> the callback type for the event. If Object, then the value is just a signal and has
* no contents.
*/
public final class Event<T> {

Expand All @@ -50,7 +52,7 @@ public final class Event<T> {
/**
* Emits {@link Activity#onStart()} and {@link Fragment#onStart()}. Emitted after super().
*/
public static final Event<Void> START = new Event<>(Type.START, Void.class);
public static final Event<Object> START = new Event<>(Type.START, Object.class);

/**
* Emits {@link Activity#onPostCreate(Bundle)}. Emitted after super().
Expand All @@ -66,22 +68,22 @@ public final class Event<T> {
/**
* Emits {@link Activity#onResume()} and {@link Fragment#onResume()}. Emitted after super().
*/
public static final Event<Void> RESUME = new Event<>(Type.RESUME, Void.class);
public static final Event<Object> RESUME = new Event<>(Type.RESUME, Object.class);

/**
* Emits {@link Activity#onPause()} and {@link Fragment#onPause()}. Emitted before super().
*/
public static final Event<Void> PAUSE = new Event<>(Type.PAUSE, Void.class);
public static final Event<Object> PAUSE = new Event<>(Type.PAUSE, Object.class);

/**
* Emits {@link Activity#onStop()} and {@link Fragment#onStop()}. Emitted before super().
*/
public static final Event<Void> STOP = new Event<>(Type.STOP, Void.class);
public static final Event<Object> STOP = new Event<>(Type.STOP, Object.class);

/**
* Emits {@link Activity#onDestroy()} and {@link Fragment#onDestroy()}. Emitted before super().
*/
public static final Event<Void> DESTROY = new Event<>(Type.DESTROY, Void.class);
public static final Event<Object> DESTROY = new Event<>(Type.DESTROY, Object.class);

/**
* Emits {@link Activity#onSaveInstanceState(Bundle)} and
Expand Down Expand Up @@ -120,7 +122,7 @@ public final class Event<T> {
/**
* Emits {@link Activity#onRestart()}. Emitted after super().
*/
public static final Event<Void> RESTART = new Event<>(Type.RESTART, Void.class);
public static final Event<Object> RESTART = new Event<>(Type.RESTART, Object.class);

/**
* Emits {@link Activity#onRestoreInstanceState(Bundle)}. Emitted after super().
Expand All @@ -143,19 +145,19 @@ public final class Event<T> {
/**
* Emits {@link Activity#onBackPressed()}. Emitted after super().
*/
public static final Event<Void> BACK_PRESSED = new Event<>(Type.BACK_PRESSED, Void.class);
public static final Event<Object> BACK_PRESSED = new Event<>(Type.BACK_PRESSED, Object.class);

/**
* Emits {@link Activity#onAttachedToWindow()}. Emitted after super().
*/
public static final Event<Void> ATTACHED_TO_WINDOW =
new Event<>(Type.ATTACHED_TO_WINDOW, Void.class);
public static final Event<Object> ATTACHED_TO_WINDOW =
new Event<>(Type.ATTACHED_TO_WINDOW, Object.class);

/**
* Emits {@link Activity#onDetachedFromWindow()}. Emitted after super().
*/
public static final Event<Void> DETACHED_FROM_WINDOW =
new Event<>(Type.DETACHED_FROM_WINDOW, Void.class);
public static final Event<Object> DETACHED_FROM_WINDOW =
new Event<>(Type.DETACHED_FROM_WINDOW, Object.class);

/**
* Emits {@link Fragment#onAttach(Context)}. Emitted after super().
Expand Down Expand Up @@ -187,19 +189,19 @@ public final class Event<T> {
/**
* Emits {@link Fragment#onDestroyView()}. Emitted before super().
*/
public static final Event<Void> DESTROY_VIEW = new Event<>(Type.DESTROY_VIEW, Void.class);
public static final Event<Object> DESTROY_VIEW = new Event<>(Type.DESTROY_VIEW, Object.class);

/**
* Emits {@link Fragment#onDetach()}. Emitted before super().
*/
public static final Event<Void> DETACH = new Event<>(Type.DETACH, Void.class);
public static final Event<Object> DETACH = new Event<>(Type.DETACH, Object.class);

private final Type eventType;

private final Class<T> callbackType;

// This is purposefully hidden so that we can control available events
private Event(Type eventType, Class<T> callbackType) {
private Event(@NonNull Type eventType, @NonNull Class<T> callbackType) {
this.eventType = eventType;
this.callbackType = callbackType;
}
Expand Down
4 changes: 3 additions & 1 deletion navi/src/main/java/com/trello/navi2/Listener.java
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
package com.trello.navi2;

import android.support.annotation.NonNull;

/**
* Listener callback.
*
* @param <T> the callback type; can be Void in cases where event has no metadata
*/
public interface Listener<T> {
void call(T t);
void call(@NonNull T t);
}
7 changes: 4 additions & 3 deletions navi/src/main/java/com/trello/navi2/NaviComponent.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package com.trello.navi2;

import android.support.annotation.NonNull;

/**
* Represents an Android component (Activity, Fragment) that can have listeners.
*/
Expand All @@ -23,14 +25,13 @@ public interface NaviComponent {
* @param <T> the callback type for the event
* @throws IllegalArgumentException if this component cannot handle the event
*/
<T> void addListener(Event<T> event, Listener<T> listener);
<T> void addListener(@NonNull Event<T> event, @NonNull Listener<T> listener);

/**
* Removes a listener from this component.
*
* @param <T> the callback type for the event
* @param listener the listener for that event
* @throws IllegalArgumentException if this component cannot handle the event
*/
<T> void removeListener(Listener<T> listener);
<T> void removeListener(@NonNull Listener<T> listener);
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,11 +20,11 @@ public class NaviActivity extends Activity implements NaviComponent {
return base.handlesEvents(events);
}

@Override public final <T> void addListener(Event<T> event, Listener<T> listener) {
@Override public final <T> void addListener(@NonNull Event<T> event, @NonNull Listener<T> listener) {
base.addListener(event, listener);
}

@Override public final <T> void removeListener(Listener<T> listener) {
@Override public final <T> void removeListener(@NonNull Listener<T> listener) {
base.removeListener(listener);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,11 +25,11 @@ public class NaviDialogFragment extends DialogFragment implements NaviComponent
return base.handlesEvents(events);
}

@Override public final <T> void addListener(Event<T> event, Listener<T> listener) {
@Override public final <T> void addListener(@NonNull Event<T> event, @NonNull Listener<T> listener) {
base.addListener(event, listener);
}

@Override public final <T> void removeListener(Listener<T> listener) {
@Override public final <T> void removeListener(@NonNull Listener<T> listener) {
base.removeListener(listener);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,11 +25,11 @@ public class NaviFragment extends Fragment implements NaviComponent {
return base.handlesEvents(events);
}

@Override public final <T> void addListener(Event<T> event, Listener<T> listener) {
@Override public final <T> void addListener(@NonNull Event<T> event, @NonNull Listener<T> listener) {
base.addListener(event, listener);
}

@Override public final <T> void removeListener(Listener<T> listener) {
@Override public final <T> void removeListener(@NonNull Listener<T> listener) {
base.removeListener(listener);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,11 +21,11 @@ public class NaviAppCompatActivity extends AppCompatActivity implements NaviComp
return base.handlesEvents(events);
}

@Override public final <T> void addListener(Event<T> event, Listener<T> listener) {
@Override public final <T> void addListener(@NonNull Event<T> event, @NonNull Listener<T> listener) {
base.addListener(event, listener);
}

@Override public final <T> void removeListener(Listener<T> listener) {
@Override public final <T> void removeListener(@NonNull Listener<T> listener) {
base.removeListener(listener);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,11 +25,11 @@ public class NaviAppCompatDialogFragment extends DialogFragment implements NaviC
return base.handlesEvents(events);
}

@Override public final <T> void addListener(Event<T> event, Listener<T> listener) {
@Override public final <T> void addListener(@NonNull Event<T> event, @NonNull Listener<T> listener) {
base.addListener(event, listener);
}

@Override public final <T> void removeListener(Listener<T> listener) {
@Override public final <T> void removeListener(@NonNull Listener<T> listener) {
base.removeListener(listener);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,11 +25,11 @@ public class NaviDialogFragment extends DialogFragment implements NaviComponent
return base.handlesEvents(events);
}

@Override public final <T> void addListener(Event<T> event, Listener<T> listener) {
@Override public final <T> void addListener(@NonNull Event<T> event, @NonNull Listener<T> listener) {
base.addListener(event, listener);
}

@Override public final <T> void removeListener(Listener<T> listener) {
@Override public final <T> void removeListener(@NonNull Listener<T> listener) {
base.removeListener(listener);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,11 +25,11 @@ public class NaviFragment extends Fragment implements NaviComponent {
return base.handlesEvents(events);
}

@Override public final <T> void addListener(Event<T> event, Listener<T> listener) {
@Override public final <T> void addListener(@NonNull Event<T> event, @NonNull Listener<T> listener) {
base.addListener(event, listener);
}

@Override public final <T> void removeListener(Listener<T> listener) {
@Override public final <T> void removeListener(@NonNull Listener<T> listener) {
base.removeListener(listener);
}

Expand Down
15 changes: 15 additions & 0 deletions navi/src/main/java/com/trello/navi2/internal/Constants.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package com.trello.navi2.internal;

final class Constants {

/**
* Acts as a signal for events that have no data associated with them.
*
* We reuse a single Object to avoid any extra allocations.
*/
static final Object SIGNAL = new Object();

private Constants() {
throw new AssertionError("No instances!");
}
}
Loading