package com.iwedia.gui.components; import android.app.Dialog; import android.content.Context; import android.graphics.PixelFormat; import android.util.Log; import android.view.KeyEvent; import android.view.View; import android.view.Window; import android.view.WindowManager; import android.widget.LinearLayout; import com.iwedia.gui.MainActivity; import com.iwedia.gui.components.dialogs.ChannelScanDialog; import com.iwedia.gui.components.dialogs.MultimediaShowDialog; import com.iwedia.gui.listeners.MainKeyListener; import com.iwedia.gui.osd.IOSDHandler; import com.iwedia.gui.osd.OSDGlobal; import java.util.ArrayList; /** * Dialog with theme change * * @author Branimir Pavlovic */ public abstract class A4TVDialog extends Dialog implements OSDGlobal { public static final String TAG = "A4TVDialog"; private boolean menuEnabled = true; private static ArrayList<A4TVDialog> mA4tvDialogs = null; private int mDescriptionId = 0; public class DisplayMode { public static final int HIDE = 0; public static final int DISABLE = 1; public static final int SHOW = 2; }; public A4TVDialog(Context context, int theme, int descriptionId) { super(context, theme); this.mDescriptionId = descriptionId; requestWindowFeature(Window.FEATURE_NO_TITLE); // hide statusbar of Android // could also be done later getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); getWindow().setFlags( WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED, WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED); getWindow().setFormat(PixelFormat.RGBA_8888); getWindow().addFlags(WindowManager.LayoutParams.FLAG_DITHER); getWindow().getDecorView().getBackground().setDither(true); if (mA4tvDialogs == null) { mA4tvDialogs = new ArrayList<A4TVDialog>(); } } @Override public String toString() { return this.getClass().getSimpleName(); } @Override public void show() { if (!(this instanceof MultimediaShowDialog)) { mA4tvDialogs.add(0, this); } super.show(); } @Override public void cancel() { if (mA4tvDialogs.size() > 0) { int index = mA4tvDialogs.indexOf(this); if (index > -1) { mA4tvDialogs.remove(index); } } super.cancel(); } @Override public void hide() { // fix for scan dialog while scanning if (this instanceof ChannelScanDialog && ChannelScanDialog.isScanning()) { super.hide(); return; } super.cancel(); } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { MainActivity.activity.getScreenSaverDialog().updateScreensaverTimer(); switch (keyCode) { case KeyEvent.KEYCODE_MENU: case KeyEvent.KEYCODE_M: { if (MainActivity.isInFirstTimeInstall) { return true; } if (MainActivity.sharedPrefs.getBoolean( MainActivity.SERVICE_MODE_START, false)) { return true; } if (menuEnabled) { cancel(); // close all other dialogs MainActivity.activity.getDialogManager().hideAllDialogs(); MainKeyListener.returnToStoredAppState(); return true; } else { return true; } } case KeyEvent.KEYCODE_INFO: { Log.i(TAG, "list Lenght: " + mA4tvDialogs.size()); MainActivity.activity.getPageCurl().info(); // cancelDialogs(); return true; } // /////////////////////////////////////////////////////////////////// // VOLUME UP // /////////////////////////////////////////////////////////////////// // case KeyEvent.KEYCODE_F6: case KeyEvent.KEYCODE_VOLUME_UP: { IOSDHandler curlHandler = MainActivity.activity.getPageCurl(); curlHandler.volume(VOLUME_UP, false); return true; } // /////////////////////////////////////////////////////////////////// // VOLUME DOWN // /////////////////////////////////////////////////////////////////// // case 135: { // case KeyEvent.KEYCODE_F5: { case KeyEvent.KEYCODE_VOLUME_DOWN: { IOSDHandler curlHandler = MainActivity.activity.getPageCurl(); curlHandler.volume(VOLUME_DOWN, false); return true; } // /////////////////////////////////////////////////////////////////// // VOLUME MUTE // /////////////////////////////////////////////////////////////////// case KeyEvent.KEYCODE_MUTE: { IOSDHandler curlHandler = MainActivity.activity.getPageCurl(); curlHandler.volume(VOLUME_MUTE, false); return true; } default: break; } return super.onKeyDown(keyCode, event); } public void setMenuButtonEnabled(boolean isEnabled) { menuEnabled = isEnabled; } // private void cancelDialogs() { // this.cancel(); // } public static ArrayList<A4TVDialog> getListOfDialogs() { return mA4tvDialogs; } public void setLayoutDisplayMode(int layoutID, int displayMode) { LinearLayout layout = (LinearLayout) findViewById(layoutID); if (layout == null) { Log.e(TAG, "Layout ID is not valid"); return; } switch (displayMode) { case DisplayMode.HIDE: /* * TODO HIDE properly, lines still stay and we don't have * generic way to calculate id's */ // layout.setVisibility(View.INVISIBLE); return; case DisplayMode.DISABLE: { layout.setVisibility(View.VISIBLE); int childComponentCount = layout.getChildCount(); for (int i = 0; i < childComponentCount; i++) { layout.getChildAt(i).setEnabled(false); layout.getChildAt(i).setFocusable(false); } } break; case DisplayMode.SHOW: { layout.setVisibility(View.VISIBLE); int childComponentCount = layout.getChildCount(); for (int i = 0; i < childComponentCount; i++) { layout.getChildAt(i).setEnabled(true); layout.getChildAt(i).setFocusable(true); } } break; default: return; } } }