package com.iwedia.gui.graphics;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.PixelFormat;
import android.os.RemoteException;
import android.util.Log;
import android.view.Gravity;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.widget.FrameLayout;
import android.widget.LinearLayout;
import com.iwedia.comm.IDTVManagerProxy;
import com.iwedia.gui.MainActivity;
import com.iwedia.gui.R;
import com.iwedia.gui.components.A4TVVideoView;
public class MhegDialogView extends SurfaceView {
public static final String TAG = "MhegDialogView";
private LinearLayout mMHEGLayout;
private MHEGActionCallback mMHEGActionCallback;
private boolean mIsOn;
public MhegDialogView(Context context) {
super(context);
mMHEGLayout = (LinearLayout) activity().findViewById(R.id.mhegLayout);
FrameLayout.LayoutParams mhegLayoutParams = new FrameLayout.LayoutParams(
MainActivity.DEFAULT_HD_REGION_WIDTH,
MainActivity.DEFAULT_HD_REGION_HEIGHT);
mhegLayoutParams.gravity = Gravity.CENTER;
mMHEGLayout.setLayoutParams(mhegLayoutParams);
getHolder().setFormat(PixelFormat.RGBA_8888);
getHolder().addCallback(getSurfaceCallback());
setZOrderOnTop(true);
mMHEGLayout.addView(this);
setVisibility(View.INVISIBLE);
}
@Override
protected void onDraw(Canvas canvas) {
}
public boolean show() {
Log.i(TAG, "show");
if (getVisibility() == View.VISIBLE) {
Log.i(TAG, "show already visible");
if (!showMHEG()) {
mIsOn = false;
} else {
mIsOn = false;
}
} else {
Log.i(TAG, "show hidden");
mMHEGActionCallback = new MHEGActionCallback() {
@Override
public boolean showMHEGCommand() {
return showMHEG();
}
};
Log.i(TAG, "show hidden setVisibility VISIBLE");
setVisibility(View.VISIBLE);
}
return true;
}
public boolean hide() throws RemoteException {
Log.i(TAG, "hide");
if (!service().getMhegControl().hide()) {
return false;
}
// setVisibility(View.INVISIBLE);
return true;
}
private SurfaceHolder.Callback getSurfaceCallback() {
return new SurfaceHolder.Callback() {
public void surfaceChanged(SurfaceHolder holder, int format, int w,
int h) {
Log.i(TAG, "surfaceChanged w[" + w + "] h[" + h + "]");
// 1 - update surface handle in MW
activity().getPrimaryVideoView().updateGFXDisplaySurface(5,
holder.getSurface());
// 2 - call callback
if (mMHEGActionCallback != null) {
if (!mMHEGActionCallback.showMHEGCommand()) {
setVisibility(View.INVISIBLE);
}
mMHEGActionCallback = null;
}
}
public void surfaceCreated(SurfaceHolder holder) {
Log.i(TAG, "surfaceCreated");
}
public void surfaceDestroyed(SurfaceHolder holder) {
Log.i(TAG, "surfaceDestroyed");
A4TVVideoView videoView = activity().getPrimaryVideoView();
if (videoView != null) {
videoView.updateGFXDisplaySurface(5, null);
}
}
};
}
private boolean showMHEG() {
boolean res = false;
Log.i(TAG, "showMHEG");
try {
service().getMhegControl().show();
res = true;
} catch (Exception e) {
e.printStackTrace();
}
return res;
}
public abstract class MHEGActionCallback {
public MHEGActionCallback() {
}
public abstract boolean showMHEGCommand();
}
private IDTVManagerProxy service() {
return MainActivity.service;
}
private MainActivity activity() {
return MainActivity.activity;
}
}