package com.youplayer.player.frame;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.pm.ActivityInfo;
import android.os.Handler;
import android.os.Message;
import android.view.LayoutInflater;
import android.view.View;
import android.view.WindowManager;
import android.widget.FrameLayout;
import com.youplayer.core.You_Core;
import com.youplayer.core.struct.You_core_push_or_pop_page_data_t;
import com.youplayer.player.YouPlayerAbsoluteLayout;
import com.youplayer.player.YouExplorer;
import com.youplayer.player.YouPlayerFullScreenPlayer;
import com.youplayer.player.R;
//import com.youplayer.player.Util;
import com.youplayer.player.frame.YouPlayerContainerView.OnHideListener;
//import com.youplayer.util.YouUtility;
import com.youplayer.util.LOG;
public class YouPlayerAppFrame implements YouPlayerActionHandler{
private static final String TAG = "AppFrame";
public static final int STATE_EXPLORER = 0;
public static final int STATE_FULLPLAYER = 1;
public static final int HANDLER_LEFT_MENU = 0x01;
public static final int HANDLER_RIGHT_MENU = 0x02;
public static final int HANDLER_UPDATE_RIGHT_MENU = 0x03;
public static final int HANDLER_LANDSCAPE = 0x04;
public static final int HANDLER_PORTRAIT = 0x05;
public static final int HANDLER_HIDE_RIGHT = 0x06;
public static final int HANDLER_HIDE_LEFT = 0x07;
public static final int HANDLER_CHANNEL_JUMP = 0x08;
/**应用上下文*/
private Activity context;
/**根视图*/
private FrameLayout rootLayout;
/**视图-浏览导航视图*/
public static YouPlayerAbsoluteLayout youExplorer;
/**视图容器*/
private YouPlayerContainerView container;
/**全屏播放控制器*/
private YouPlayerViewControler fullPlayerControler;
/**当前视图*/
private View currentView;
/**当前状态*/
private int currentState = -1;
private Handler mHandler;
private AlertDialog dialog;
private boolean fullPlayerHasAdd = false;
public boolean isStartFromExternal = false;
public boolean isStartPlayFromExternal = false;
public boolean isPlayBackground = false;
public YouPlayerAppFrame(Activity context){
this.context = context;
rootLayout = (FrameLayout) context.findViewById(R.id.root_layout);
initHandler();
}
public void initYouExplorerLayout(){
youExplorer = (YouPlayerAbsoluteLayout) LayoutInflater.from(context).inflate(R.layout.youplayer_explorer, null);
container = (YouPlayerContainerView) youExplorer.findViewById(R.id.container_layout);
currentView = youExplorer;
currentState = STATE_FULLPLAYER;
container.setOnHideListener(new ContainerHideListener());
rootLayout.addView(currentView);
}
public View getRootLayout(){
return this.rootLayout;
}
public View getCurrentView(){
return this.currentView;
}
public int getCurrentState(){
return this.currentState;
}
public YouPlayerContainerView getContainer() {
return container;
}
public YouPlayerViewControler getFullPlayerControler() {
return fullPlayerControler;
}
private void initHandler() {
mHandler = new Handler(context.getMainLooper()) {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case HANDLER_LANDSCAPE:
setFullScreen(context);
break;
case HANDLER_PORTRAIT:
setPortraitScreen(context);
break;
case HANDLER_HIDE_LEFT:
YouPlayerEventControler.fn_core_service_request(You_Core.FN_COMMON_BTN_CONTEXT_MENU, You_Core.FN_UI_EVT_TOUCH_UP, null, null);
break;
default:
break;
}
super.handleMessage(msg);
}
};
}
@Override
public boolean action_callback(int page_id, int page_action,
Object core_data, Object ui_data) {
switch (page_id) {
case You_Core.FN_PAGE_ROOTPAGE:
LOG.i(TAG, " ","handlerRootCallBack : " + page_id + " page_action : " + page_action );
return handlerRootCallBack(page_id, page_action, core_data, ui_data);
default:
LOG.i(TAG," ","handlerPageCallBack : " + page_id + " page_action : " + page_action );
return false;
}
}
private boolean handlerRootCallBack(int page_id, int page_action,
Object core_data, Object ui_data) {
int page_type = 0;
switch (page_action) {
case You_Core.FN_PAGE_EVT_CREATE:
if (String.valueOf(You_Core.FN_PAGE_EXPLORER).equals(core_data.toString())) {
initYouExplorerLayout();
LOG.i(TAG, " ", "initYouExplorerLayout : ");
}
return true;
case You_Core.FN_PAGE_EVT_PUSH:
page_type = ((You_core_push_or_pop_page_data_t) core_data).page_type;
switch (page_type) {
case You_Core.FN_PAGE_FULL_SCREEN_PLAYER:
if (currentState == STATE_EXPLORER) {
if (null != getContainer().getCurrentViewControler()) {
getContainer().getCurrentViewControler().onPause();
getContainer().getCurrentViewControler().onStop();
}
}
rootLayout.removeAllViews();
fullPlayerControler = YouPlayerViewControlerFactory.createViewByPageType(context.getApplicationContext(), page_type, core_data, ui_data);
currentView = fullPlayerControler.getView();
currentState = STATE_FULLPLAYER;
mHandler.sendEmptyMessageDelayed(HANDLER_LANDSCAPE, 50);
return true;
}
case You_Core.FN_PAGE_EVT_POP:
if (isStartPlayFromExternal && isPlayBackground) {
LOG.e(TAG, " FN_PAGE_EVT_POP ", " killProcess ");
exitApp();
return true;
}
isStartPlayFromExternal = false;
fullPlayerHasAdd = false;
fullPlayerControler.finish();
rootLayout.removeAllViews();
currentView = youExplorer;
// 设置屏幕为竖屏
mHandler.sendEmptyMessageDelayed(HANDLER_PORTRAIT, 50);
return true;
case You_Core.FN_PAGE_EVT_EXIT_APP:
YouPlayerEventControler.fn_core_service_request(You_Core.FN_REPORT_PLAYER_INFO_END, You_Core.FN_UI_EVT_TOUCH_UP,null /*LocalMediaUtil.getMediaFileData()*/, null);
//showExitDialog();
exitApp();
return true;
}
return false;
}
public void showExitDialog() {
dialog = new AlertDialog.Builder(context)
.setTitle(R.string.dialog_title)
.setMessage(R.string.alert_dialog_message)
.setNegativeButton(R.string.dialog_cancel, null)
.setPositiveButton(R.string.dialog_ok,new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
exitApp();
}
}).show();
}
public void cancelDialog() {
if (dialog != null && dialog.isShowing())
dialog.dismiss();
}
public void exitApp() {
YouPlayerEventControler.fn_core_service_request(You_Core.FN_COREPAGE_BTN_STOP, You_Core.FN_UI_EVT_TOUCH_UP, null, null);
youExplorer = null;
YouExplorer.instance.finish();
if(fullPlayerControler!= null){
((YouPlayerFullScreenPlayer)fullPlayerControler).exitFullPlayerApp();
}
}
private class ContainerHideListener implements OnHideListener{
@Override
public void goHide(int hideType) {
switch (hideType) {
case YouPlayerContainerView.HIDE_LEFT:
YouPlayerEventControler.fn_core_service_request(You_Core.FN_COMMON_VIEW, You_Core.FN_UI_EVT_DRAG_LEFT, null, null);
LOG.i(TAG, "ContainerHideListener ", "ContainerView.HIDE_LEFT ");
break;
case YouPlayerContainerView.HIDE_RIGHT:
YouPlayerEventControler.fn_core_service_request(You_Core.FN_COMMON_VIEW, You_Core.FN_UI_EVT_DRAG_RIGHT, null, null);
break;
default:
break;
}
}
}
public void setFullScreen(Activity context){
if(context != null){
try {
fullPlayerControler.getView().setKeepScreenOn(true);
context.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
context.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
} catch (Exception e) {
e.printStackTrace();
}
}
}
public void setPortraitScreen(Activity context) {
if(context != null){
try {
if(fullPlayerControler != null)
{
// fullPlayerControler.getView().setKeepScreenOn(false);
View view = fullPlayerControler.getView();
if(view != null)
view.setKeepScreenOn(false);
}
final WindowManager.LayoutParams attrs = context.getWindow().getAttributes();
attrs.flags &= (~WindowManager.LayoutParams.FLAG_FULLSCREEN);
context.getWindow().setAttributes(attrs);
context.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
context.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
} catch (Exception e) {
e.printStackTrace();
}
}
}
public void addFullScreenPlayer() {
// 显示全屏播放视图控制器
if(!fullPlayerHasAdd && currentState == STATE_FULLPLAYER){
rootLayout.addView(currentView);
((YouPlayerFullScreenPlayer)fullPlayerControler).viewHasAdded();
fullPlayerHasAdd = true;
fullPlayerControler.onStart();
fullPlayerControler.onResume();
}
}
public void addYouExplorer() {
if (currentState == STATE_EXPLORER ) {
if (null != rootLayout && rootLayout.getChildCount() == 0) {
rootLayout.addView(currentView);
if (null != getContainer().getCurrentViewControler()) {
LOG.i(TAG, "CurrentViewControler :", getContainer().getCurrentViewControler().getClass().toString());
getContainer().getCurrentViewControler().onStart();
getContainer().getCurrentViewControler().onResume();
}
}
}
}
}