package org.gulup.view;
import java.util.Observable;
import java.util.Observer;
import org.gulup.core.GBaseAction;
import org.gulup.core.GData;
import org.gulup.utils.Constant;
import org.gulup.utils.GlobalUtil;
import org.gulup.utils.ScreenUtil;
import org.gulup.utils.ViewUtil;
import android.content.pm.ActivityInfo;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.content.res.Configuration;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.support.v7.app.ActionBarActivity;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Toast;
/**
* @author gulup
* @version 创建时间:2014-9-15 下午2:35:23 类说明
*/
public abstract class GBaseView extends ActionBarActivity implements Observer {
/*
* public ScreenUtil su; protected int screenHeight; protected int
* screenWidth;
*/
private Toast toast;
protected void onCreate(Bundle savedInstanceState) {
this.onCreate(savedInstanceState, true);
}
protected void onCreate(Bundle savedInstanceState, boolean isFull) {
if (isFull) {
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
}
super.onCreate(savedInstanceState);
setScreenDirection();
ViewUtil.inject(this);
GlobalUtil.setCurrentView(this);
init();
if (ScreenUtil.getScreenHeight() > ScreenUtil.getScreenWidth()) {
setVertical();
} else {
setLandScape();
}
}
public void setScreenDirection() {
if (GlobalUtil.getDirection() == null
|| GlobalUtil.getDirection().isEmpty()
|| GlobalUtil.getDirection() == "") {
ApplicationInfo appInfo = null;
try {
appInfo = this.getPackageManager().getApplicationInfo(
getPackageName(), PackageManager.GET_META_DATA);
if (appInfo.metaData == null) {
GlobalUtil.setDirection("u");
}else{
String direction = appInfo.metaData.getString("direction");
if (direction == null || direction.isEmpty()
|| direction == "") {
direction = "u";
}
GlobalUtil.setDirection(direction);
}
} catch (NameNotFoundException e) {
e.printStackTrace();
}
}
if (GlobalUtil.getDirection().equals(Constant.PORTRAIT)) {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
} else if (GlobalUtil.getDirection().equals(Constant.LANDSCAPE)) {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
} else if (GlobalUtil.getDirection().equals(Constant.UNSPECIFIED)) {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
}
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
ScreenUtil.setWidthAndHighByActivity(this);
if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
setLandScape();
} else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {
setVertical();
}
}
/**
* 橫屏佈局設置
*/
public void setLandScape() {
}
/**
* 豎屏佈局設置
*/
public void setVertical() {
}
/**
* 將action與view綁定起來的方法,交由註解綁定,不需要顯式調用
*
* @param action
* 需要與view綁定的action
* @return 返回綁定是否成功
*/
public boolean setAction(GBaseAction action) {
if (action != null) {
action.addObserver(this);
} else {
return false;
}
return true;
}
/**
* action請求成功後的回調方法,需要重寫
*
* @param form
* 回調成功後返回的數據,裏面包含請求標識requestType和返回的數據data
*/
public abstract void requestSuccess(GData data);
/**
* 請求失敗後的回調方法,需要重寫
*
* @param requestType
* 回調失敗後回傳的請求標識
*/
public abstract void requestFail(GData data);
/**
* 需要在設置橫豎屏佈局之前初始化的動作,都寫在這裏
*/
public void init() {
}
/**
* 控件默认调用的点击事件
*
* @param view
*/
public void onClick(View view) {
}
/**
* 數據回調處理,通知界面數據已經更新
*
*/
@Override
public void update(Observable observable, Object data) {
GData resData = (GData) data;
if (resData.isSuccess()) {
requestSuccess(resData);
} else {
requestFail(resData);
}
}
/**
* 添加,替换指定Fragment到指定布局
*
* @param id
* 需要替换的布局id
* @param fragment
* 需要替换的Fragment
*/
public void addFragment(int id, Fragment fragment) {
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager
.beginTransaction();
fragmentTransaction.replace(id, fragment);
fragmentTransaction.commit();
}
/**
* 顯示提示語句
*
* @param messageStr
*/
public void showToast(CharSequence messageStr) {
if (null == toast) {
toast = Toast.makeText(this, messageStr, Toast.LENGTH_SHORT);
} else {
toast.setText(messageStr);
}
toast.show();
}
}