package edu.mit.mitmobile2;
import java.util.Collections;
import java.util.List;
import uk.co.senab.actionbarpulltorefresh.library.PullToRefreshAttacher;
import uk.co.senab.actionbarpulltorefresh.library.PullToRefreshAttacher.DefaultHeaderTransformer;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.res.Configuration;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup.LayoutParams;
import android.widget.FrameLayout;
import android.widget.LinearLayout;
import android.widget.ScrollView;
import edu.mit.mitmobile2.MITTitleBar.OnMITTitleBarListener;
import edu.mit.mitmobile2.libraries.LibraryModel.UserIdentity;
public abstract class NewModuleActivity extends Activity {
private static String TAG = "NewModuleActivity";
private MITTitleBar mTitleBar;
private LinearLayout mMainLayout;
private View mContentView;
private LayoutInflater mInflater;
protected Global app;
protected abstract NewModule getNewModule();
protected abstract boolean isScrollable();
protected abstract void onOptionSelected(String optionId);
protected abstract boolean isModuleHomeActivity();
protected MITTitleBar getTitleBar() {
if (mTitleBar == null) {
throw new RuntimeException("getTitleBar() can not be called before setContentView()");
}
return mTitleBar;
}
protected void addSecondaryTitle(String title) {
MITPlainSecondaryTitleBar secondaryTitleBar = new MITPlainSecondaryTitleBar(this);
secondaryTitleBar.setTitle(title);
getTitleBar().addSecondaryBar(secondaryTitleBar);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
app = (Global)getApplication();
mInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
/**
* Use it to add TitleBar items by use {@link NewModuleActivity#addPrimaryMenuItem(List)
* , NewModuleActivity#addSecondaryMenuItem(List)}}
*/
protected void refreshTitleBarOptions() {
mTitleBar.clearMenuItems();
List<MITMenuItem> primaryItems = getPrimaryMenuItems();
List<String> blackList = getMenuItemBlackList();
if (primaryItems != null) {
for (MITMenuItem item : primaryItems) {
if (!blackList.contains(item.getId())) {
mTitleBar.addPrimaryItem(item);
}
}
}
List<MITMenuItem> secondaryItems = getSecondaryMenuItems();
if (secondaryItems != null) {
for (MITMenuItem item : secondaryItems) {
if (!blackList.contains(item.getId())) {
mTitleBar.addSecondaryItem(item);
}
}
}
mTitleBar.requestLayout();
}
// default implementation for primary, and secondary menu items.
protected List<MITMenuItem> getPrimaryMenuItems() {
return getNewModule().getPrimaryOptions();
}
protected List<MITMenuItem> getSecondaryMenuItems() {
return getNewModule().getSecondaryOptions();
}
protected List<String> getMenuItemBlackList() {
return Collections.emptyList();
}
protected void initContentView() {
super.setContentView(R.layout.new_module_main);
mMainLayout = (LinearLayout) findViewById(R.id.newModuleMain);
mTitleBar = (MITTitleBar) findViewById(R.id.mitTitleBar);
initViews();
refreshTitleBarOptions();
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
if (mTitleBar != null) {
mTitleBar.notifiyScreenChanged();
}
}
@Override
public void setContentView(int layoutResID) {
initContentView();
View view = mInflater.inflate(layoutResID, null);
wrapContentView(view);
mMainLayout.addView(mContentView, new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
}
protected void setContentView(View view, boolean fullRefresh) {
if (fullRefresh || (mMainLayout == null)) {
initContentView();
}
if (mContentView != null) {
mMainLayout.removeViewAt(mMainLayout.getChildCount()-1);
}
wrapContentView(view);
mMainLayout.addView(mContentView, new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
}
private void wrapContentView(View view) {
if (isScrollable()) {
ScrollView scrollView = new ScrollView(this);
scrollView.addView(view, new ScrollView.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
mContentView = scrollView;
} else {
mContentView = view;
}
}
private void initViews() {
mTitleBar.setOnTitleBarListener(new OnMITTitleBarListener() {
@Override
public void onOptionItemSelected(String optionId) {
if (!getNewModule().onItemSelected(NewModuleActivity.this, optionId)) {
onOptionSelected(optionId);
}
}
@Override
public void onHomeSelected() {
HomeScreenActivity.goHome(NewModuleActivity.this);
}
@Override
public void onModuleHomeSelected() {
Intent intent = new Intent(NewModuleActivity.this, getNewModule().getModuleHomeActivity());
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
}
});
mTitleBar.setTextForModuleBtn(getNewModule().getLongName());
mTitleBar.setModuleButtonEnabled(!isModuleHomeActivity());
}
public interface OnBackPressedListener {
public boolean onBackPressed();
}
OnBackPressedListener mBackPressedListener;
public void setOnBackPressedListener(OnBackPressedListener backPressedListener) {
mBackPressedListener = backPressedListener;
}
@Override
public void onBackPressed() {
if (mBackPressedListener != null) {
if (mBackPressedListener.onBackPressed()) {
return;
}
}
super.onBackPressed();
}
public interface OnPausedListener {
public void onPaused();
}
OnPausedListener mPausedListener;
public void setOnPausedListener(OnPausedListener pausedListener) {
mPausedListener = pausedListener;
}
@Override
protected void onPause() {
if (mPausedListener != null) {
mPausedListener.onPaused();
}
super.onPause();
}
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_MENU) {
mTitleBar.showOverflowMenu();
return true;
}
return super.onKeyUp(keyCode, event);
}
public void showFullScreen(View view) {
FrameLayout fullScreenFrameLayout = (FrameLayout) findViewById(R.id.newModuleMainFullScreenFrameLayout);
fullScreenFrameLayout.removeAllViews();
fullScreenFrameLayout.addView(view, new FrameLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
fullScreenFrameLayout.setVisibility(View.VISIBLE);
}
public void hideFullScreen() {
FrameLayout fullScreenFrameLayout = (FrameLayout) findViewById(R.id.newModuleMainFullScreenFrameLayout);
fullScreenFrameLayout.removeAllViews();
fullScreenFrameLayout.setVisibility(View.GONE);
}
public PullToRefreshAttacher createPullToRefreshAttacher() {
PullToRefreshAttacher pullToRefreshAttacher = new PullToRefreshAttacher(this);
DefaultHeaderTransformer ht = (DefaultHeaderTransformer) pullToRefreshAttacher
.getHeaderTransformer();
ht.setPullText("Swipe to refresh");
ht.setRefreshingText("Refreshing...");
return pullToRefreshAttacher;
}
protected Handler getTouchStoneHandler(final Context context,
final String target) {
Handler TouchStoneHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
if (msg.arg1 == MobileWebApi.SUCCESS) {
UserIdentity userIdentity = (UserIdentity) msg.obj;
Log.d(TAG,
"shbidentity = " + userIdentity.getShibIdentity());
Log.d(TAG, "username = " + userIdentity.getUsername());
Log.d(TAG, "mit identity = " + userIdentity.isMITIdentity()
+ "");
if (userIdentity.getShibIdentity() != null
&& userIdentity.getShibIdentity().length() > 1) {
try {
Class<?> c = Class.forName(target);
Intent i = new Intent(context, c);
startActivity(i);
} catch (ClassNotFoundException e) {
Log.d(TAG, e.toString() + " occurs in context = "
+ context.toString());
}
}
}
}
};
return TouchStoneHandler;
}
}