/*
* Copyright (c) 2015 PocketHub
*
* 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.pockethub.android.ui;
import android.os.Bundle;
import android.os.Parcelable;
import android.support.annotation.CallSuper;
import com.github.pockethub.android.ui.roboactivities.RoboAppCompatActivity;
import com.trello.rxlifecycle2.LifecycleProvider;
import com.trello.rxlifecycle2.LifecycleTransformer;
import com.trello.rxlifecycle2.RxLifecycle;
import com.trello.rxlifecycle2.android.ActivityEvent;
import com.trello.rxlifecycle2.android.RxLifecycleAndroid;
import io.reactivex.Observable;
import io.reactivex.subjects.BehaviorSubject;
/**
* Activity that display dialogs
*/
public abstract class BaseActivity extends
RoboAppCompatActivity implements DialogResultListener, LifecycleProvider<ActivityEvent> {
private final BehaviorSubject<ActivityEvent> lifecycleSubject = BehaviorSubject.create();
@CallSuper
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
lifecycleSubject.onNext(ActivityEvent.CREATE);
}
@Override
public final Observable<ActivityEvent> lifecycle() {
return lifecycleSubject;
}
@Override
public final <T> LifecycleTransformer<T> bindUntilEvent(ActivityEvent event) {
return RxLifecycle.bindUntilEvent(lifecycleSubject, event);
}
@Override
public final <T> LifecycleTransformer<T> bindToLifecycle() {
return RxLifecycleAndroid.bindActivity(lifecycleSubject);
}
@Override
@CallSuper
protected void onStart() {
super.onStart();
lifecycleSubject.onNext(ActivityEvent.START);
}
@Override
@CallSuper
protected void onResume() {
super.onResume();
lifecycleSubject.onNext(ActivityEvent.RESUME);
}
@Override
@CallSuper
protected void onPause() {
lifecycleSubject.onNext(ActivityEvent.PAUSE);
super.onPause();
}
@Override
@CallSuper
protected void onStop() {
lifecycleSubject.onNext(ActivityEvent.STOP);
super.onStop();
}
@Override
@CallSuper
protected void onDestroy() {
lifecycleSubject.onNext(ActivityEvent.DESTROY);
super.onDestroy();
}
/**
* Get intent extra
*
* @param name
* @return parcelable
*/
@SuppressWarnings("unchecked")
protected <V extends Parcelable> V getParcelableExtra(final String name) {
return (V) getIntent().getParcelableExtra(name);
}
/**
* Get intent extra
*
* @param name
* @return int
*/
protected int getIntExtra(final String name) {
return getIntent().getIntExtra(name, -1);
}
/**
* Get intent extra
*
* @param name
* @return int array
*/
protected int[] getIntArrayExtra(final String name) {
return getIntent().getIntArrayExtra(name);
}
/**
* Get intent extra
*
* @param name
* @return boolean array
*/
protected boolean[] getBooleanArrayExtra(final String name) {
return getIntent().getBooleanArrayExtra(name);
}
/**
* Get intent extra
*
* @param name
* @return string
*/
protected String getStringExtra(final String name) {
return getIntent().getStringExtra(name);
}
/**
* Get intent extra
*
* @param name
* @return string array
*/
protected String[] getStringArrayExtra(final String name) {
return getIntent().getStringArrayExtra(name);
}
/**
* Get intent extra
*
* @param name
* @return char sequence array
*/
protected CharSequence[] getCharSequenceArrayExtra(final String name) {
return getIntent().getCharSequenceArrayExtra(name);
}
@Override
public void onDialogResult(int requestCode, int resultCode, Bundle arguments) {
// Intentionally left blank
}
}