package com.lateensoft.pathfinder.toolkit.views;
import android.app.ActionBar;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import com.google.common.base.Preconditions;
import com.lateensoft.pathfinder.toolkit.MainActivity;
import android.app.Activity;
import android.view.View;
import roboguice.fragment.RoboFragment;
public abstract class BasePageFragment extends RoboFragment{
private View rootView;
private boolean isWaitingForResult = false;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
}
@Override
public void onResume() {
super.onResume();
if (!isWaitingForResult) {
onResumeWithoutResult();
}
updateTitle();
isWaitingForResult = false;
hideKeyboardDelayed(100);
}
protected void onResumeWithoutResult() { }
@Override
public final void onPrepareOptionsMenu(final Menu menu) {
super.onPrepareOptionsMenu(menu);
new MainActivityAction() {
@Override public void performOnMainActivity(MainActivity activity) {
if (!activity.isDrawerOpen()) {
onPreparePageOptionsMenu(menu);
}
}
}.performAction();
}
protected void onPreparePageOptionsMenu(Menu menu) { }
@Override
public void startActivityForResult(Intent intent, int requestCode) {
super.startActivityForResult(intent, requestCode);
isWaitingForResult = true;
}
public void setTitle(String title) {
Activity a = getActivity();
if (a != null) {
ActionBar ab = a.getActionBar();
if (ab != null) {
ab.setTitle(title);
}
}
}
public void setTitle(int resId) {
Activity a = getActivity();
if (a != null) {
ActionBar ab = a.getActionBar();
if (ab != null) {
ab.setTitle(resId);
}
}
}
public void setSubtitle(String subtitle) {
Activity a = getActivity();
if (a != null) {
ActionBar ab = a.getActionBar();
if (ab != null) {
ab.setSubtitle(subtitle);
}
}
}
/** Sets the default title and subtitle for the fragment */
public abstract void updateTitle();
public View getRootView() {
return rootView;
}
protected void setRootView(View rootView) {
this.rootView = rootView;
}
public Context getContext() {
Activity a = getActivity();
return Preconditions.checkNotNull(a);
}
public void switchToPage(final Class<? extends BasePageFragment> fragment) {
new MainActivityAction() {
@Override public void performOnMainActivity(MainActivity activity) {
activity.showFragment(fragment);
}
}.performAction();
}
public void hideKeyboardDelayed(final long delay) {
new MainActivityAction() {
@Override public void performOnMainActivity(MainActivity activity) {
activity.hideKeyboardDelayed(delay);
}
}.performAction();
}
private abstract class MainActivityAction {
public abstract void performOnMainActivity(MainActivity activity);
public void performAction() {
Activity a = BasePageFragment.this.getActivity();
if (a instanceof MainActivity) {
performOnMainActivity((MainActivity) a);
}
}
}
/** There appears to be a conflict between some of the android SDK and JDK libraries, which
* causes some kind of ambiguity between Object.class() and Object.class(), especially for support fragments.
* This is a quick and dirty fix */
@Deprecated
@SuppressWarnings("unchecked")
public <T extends BasePageFragment> Class<T> getSupportClass() {
return (Class<T>) ((Object) this).getClass();
}
}