package com.iwedia.gui.graphics;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
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.comm.teletext.TeletextMode;
import com.iwedia.gui.MainActivity;
import com.iwedia.gui.R;
import com.iwedia.gui.components.A4TVToast;
import com.iwedia.gui.components.A4TVVideoView;
import com.iwedia.gui.listeners.MainKeyListener;
public class TeletextDialogView extends SurfaceView {
public static final String TAG = "TeletextDialogView";
private LinearLayout mTeletextLayout;
private TTXTActionCallback mTTXTActionCallback;
public TeletextDialogView(Context context) {
super(context);
mTeletextLayout = (LinearLayout) MainActivity.activity
.findViewById(R.id.teletextLayout);
FrameLayout.LayoutParams teletextLayoutParams = new FrameLayout.LayoutParams(
MainActivity.screenWidth, MainActivity.screenHeight);
teletextLayoutParams.gravity = Gravity.CENTER;
mTeletextLayout.setLayoutParams(teletextLayoutParams);
getHolder().setFormat(PixelFormat.RGBA_8888);
getHolder().addCallback(getSurfaceCallback());
setZOrderOnTop(true);
mTeletextLayout.addView(this);
setBackgroundColor(Color.TRANSPARENT);
setVisibility(View.INVISIBLE);
}
public boolean show(TeletextMode teletextMode, int trackIndex) {
Log.i(TAG, "show teletextMode[" + teletextMode + "] trackIndex["
+ trackIndex + "]");
if (getVisibility() == View.VISIBLE) {
if (!showTTXT(teletextMode, trackIndex)) {
A4TVToast toast = new A4TVToast(getContext());
toast.showToast(R.string.no_teletext_available);
}
} else {
mTTXTActionCallback = new TTXTActionCallback(teletextMode,
trackIndex) {
@Override
public boolean showTTXTCommand(TeletextMode teletextMode,
int trackIndex) {
return showTTXT(teletextMode, trackIndex);
}
};
setVisibility(View.VISIBLE);
}
return true;
}
public boolean hide() throws RemoteException {
Log.i(TAG, "hide");
if (!service().getTeletextControl().deselectCurrentTeletextTrack()) {
return false;
}
setVisibility(View.INVISIBLE);
return true;
}
public TeletextMode getMode() throws RemoteException {
return service().getTeletextControl().getTeletextMode();
}
public void setMode(TeletextMode teletextMode) throws RemoteException {
service().getTeletextControl().setTeletextMode(teletextMode);
}
@Override
protected void onDraw(Canvas canvas) {
Log.d(TAG, "onDraw");
}
private SurfaceHolder.Callback getSurfaceCallback() {
return new SurfaceHolder.Callback() {
public void surfaceChanged(SurfaceHolder holder, int format, int w,
int h) {
Log.e(TAG, "surfaceChanged w[" + w + "] h[" + h + "]");
// 1 - update surface handle in MW
activity().getPrimaryVideoView().updateGFXDisplaySurface(3,
holder.getSurface());
// 2 - call callback
if (mTTXTActionCallback != null) {
if (!mTTXTActionCallback.callShowTTXT()) {
A4TVToast toast = new A4TVToast(getContext());
toast.showToast(R.string.no_teletext_available);
setVisibility(View.INVISIBLE);
}
mTTXTActionCallback = null;
}
}
public void surfaceCreated(SurfaceHolder holder) {
Log.e(TAG, "surfaceCreated");
}
public void surfaceDestroyed(SurfaceHolder holder) {
Log.e(TAG, "surfaceDestroyed");
// 1 - stop ttx
try {
service().getTeletextControl()
.deselectCurrentTeletextTrack();
} catch (RemoteException e) {
e.printStackTrace();
}
// - clear surface handle in MW
A4TVVideoView videoView = activity().getPrimaryVideoView();
if (videoView != null) {
videoView.updateGFXDisplaySurface(3, null);
}
}
};
}
public abstract class TTXTActionCallback {
private int mTrackIndex;
private TeletextMode mTeletextMode;
public TTXTActionCallback(TeletextMode teletextMode, int trackIndex) {
mTrackIndex = trackIndex;
mTeletextMode = teletextMode;
}
public boolean callShowTTXT() {
Log.e(TAG, "callShowTTXT[" + mTeletextMode + "]");
return showTTXT(mTeletextMode, mTrackIndex);
}
public abstract boolean showTTXTCommand(TeletextMode teletextMode,
int trackIndex);
}
private IDTVManagerProxy service() {
return MainActivity.service;
}
private MainActivity activity() {
return MainActivity.activity;
}
private boolean showTTXT(TeletextMode teletextMode, int trackIndex) {
boolean res = true;
try {
switch (teletextMode) {
case FULL:
Log.e(TAG, "show teletextMode[" + teletextMode + "]");
if (mTeletextLayout.getWidth() != MainActivity.screenWidth) {
FrameLayout.LayoutParams teletextLayoutParams = new FrameLayout.LayoutParams(
MainActivity.screenWidth,
MainActivity.screenHeight);
teletextLayoutParams.gravity = Gravity.CENTER;
mTeletextLayout.setLayoutParams(teletextLayoutParams);
requestLayout();
mTTXTActionCallback = new TTXTActionCallback(
teletextMode, trackIndex) {
@Override
public boolean showTTXTCommand(
TeletextMode teletextMode, int trackIndex) {
return showTTXT(teletextMode, trackIndex);
}
};
} else {
service().getTeletextControl().setTeletextMode(
teletextMode);
service().getTeletextControl().setTeletextBgAlpha(0);
if (service().getTeletextControl()
.setCurrentTeletextTrack(trackIndex) != true) {
res = false;
} else {
MainKeyListener
.setAppState(MainKeyListener.TELETEXT);
}
}
break;
case MIX:
Log.e(TAG, "show teletextMode[" + teletextMode + "]");
service().getTeletextControl()
.deselectCurrentTeletextTrack();
if (mTeletextLayout.getWidth() != MainActivity.screenWidth) {
FrameLayout.LayoutParams teletextLayoutParams = new FrameLayout.LayoutParams(
MainActivity.screenWidth,
MainActivity.screenHeight);
teletextLayoutParams.gravity = Gravity.CENTER;
mTeletextLayout.setLayoutParams(teletextLayoutParams);
requestLayout();
mTTXTActionCallback = new TTXTActionCallback(
teletextMode, trackIndex) {
@Override
public boolean showTTXTCommand(
TeletextMode teletextMode, int trackIndex) {
return showTTXT(teletextMode, trackIndex);
}
};
} else {
service().getTeletextControl().setTeletextMode(
teletextMode);
service().getTeletextControl().setTeletextBgAlpha(255);
if (service().getTeletextControl()
.setCurrentTeletextTrack(trackIndex) != true) {
res = false;
}
}
break;
case HALF:
Log.e(TAG, "show teletextMode[" + teletextMode + "]");
service().getTeletextControl()
.deselectCurrentTeletextTrack();
if (mTeletextLayout.getWidth() != MainActivity.screenWidth / 2) {
FrameLayout.LayoutParams teletextLayoutParams = new FrameLayout.LayoutParams(
MainActivity.screenWidth / 2,
MainActivity.screenHeight);
teletextLayoutParams.gravity = Gravity.RIGHT;
mTeletextLayout.setLayoutParams(teletextLayoutParams);
requestLayout();
mTTXTActionCallback = new TTXTActionCallback(
teletextMode, trackIndex) {
@Override
public boolean showTTXTCommand(
TeletextMode teletextMode, int trackIndex) {
return showTTXT(teletextMode, trackIndex);
}
};
} else {
service().getTeletextControl().setTeletextMode(
teletextMode);
service().getTeletextControl().setTeletextBgAlpha(0);
if (service().getTeletextControl()
.setCurrentTeletextTrack(trackIndex) != true) {
res = false;
}
}
break;
default:
Log.e(TAG, "show teletextMode[" + teletextMode + "]");
service().getTeletextControl().setTeletextMode(
TeletextMode.OFF);
service().getTeletextControl().setTeletextBgAlpha(0);
service().getTeletextControl()
.deselectCurrentTeletextTrack();
res = false;
break;
}
} catch (Exception e) {
e.printStackTrace();
}
return res;
}
}