package com.iwedia.gui.components.dialogs; import android.content.Context; import android.content.res.TypedArray; import android.text.InputType; import android.util.Log; import android.view.View; import com.iwedia.gui.MainActivity; import com.iwedia.gui.R; import com.iwedia.gui.components.A4TVButton; import com.iwedia.gui.components.A4TVDialog; import com.iwedia.gui.components.A4TVEditText; import com.iwedia.gui.components.A4TVSpinner; import com.iwedia.gui.components.A4TVSpinner.OnSelectA4TVSpinnerListener; import com.iwedia.gui.components.A4TVToast; import com.iwedia.gui.components.A4TVVideoView; import com.iwedia.gui.mainmenu.DialogManager; import com.iwedia.gui.mainmenu.MainMenuContent; import java.util.ArrayList; public class PiPSettingsDialog extends A4TVDialog implements A4TVDialogInterface, android.view.View.OnClickListener { // fields for creating dialogs private ArrayList<ArrayList<Integer>> contentList = new ArrayList<ArrayList<Integer>>(), contentListIDs = new ArrayList<ArrayList<Integer>>(); // TODO: How to generate unique ID!? public static final int PIP_SETTINGS_SET_POSITION = 10001; public static final int PIP_SETTINGS_SET_SIZE = 10002; public static final int PIP_SETTINGS_CUSTOM_X_POSITION = 10003; public static final int PIP_SETTINGS_CUSTOM_Y_POSITION = 10004; public static final int PIP_SETTINGS_CUSTOM_POSITION_APPLY = 10005; public static final int PIP_SETTINGS_CUSTOM_WIDTH = 10006; public static final int PIP_SETTINGS_CUSTOM_HEIGHT = 10007; public static final int PIP_SETTINGS_CUSTOM_SIZE_APPLY = 10008; private Context ctx; private A4TVSpinner pipPositionSpinner, pipSizeSpinner; private A4TVEditText pipCustomXposition, pipCustomYPosition, pipCustomWidth, pipCustomHeight; private A4TVButton pipCustomPositionApply, pipCustomSizeApply; private ArrayList<Integer> titleIDs = new ArrayList<Integer>(); public PiPSettingsDialog(Context context) { super(context, checkTheme(context), 0); ctx = context; // fill lists returnArrayListsWithDialogContents(contentList, contentListIDs, titleIDs); // set content to dialog fillDialog(); // set attributes setDialogAttributes(); init(); } @Override public void onClick(View v) { switch (v.getId()) { case PIP_SETTINGS_CUSTOM_SIZE_APPLY: { int pip_width = Integer.parseInt(pipCustomWidth.getText() .toString()); int pip_height = Integer.parseInt(pipCustomHeight.getText() .toString()); Log.d(TAG, "width = " + pip_width + " height = " + pip_height); if (isSizeValid(pip_width, pip_height)) { MainActivity.sharedPrefs.edit() .putInt(MainActivity.PIP_SIZE, 2).commit(); MainActivity.sharedPrefs.edit() .putInt(MainActivity.PIP_WIDTH, pip_width).commit(); MainActivity.sharedPrefs.edit() .putInt(MainActivity.PIP_HEIGHT, pip_height) .commit(); MainActivity.activity.updatePIPCoordinates(); updatePiPWindow(); } else { new A4TVToast(ctx).showToast(R.string.pip_size_not_valid); } } break; case PIP_SETTINGS_CUSTOM_POSITION_APPLY: { int pip_x = Integer.parseInt(pipCustomXposition.getText() .toString()); int pip_y = Integer.parseInt(pipCustomYPosition.getText() .toString()); Log.d(TAG, "X = " + pip_x + " Y = " + pip_y); if (isPositionValid(pip_x, pip_y)) { MainActivity.sharedPrefs.edit() .putInt(MainActivity.PIP_POSITION, 4).commit(); MainActivity.sharedPrefs.edit() .putInt(MainActivity.PIP_X, pip_x).commit(); MainActivity.sharedPrefs.edit() .putInt(MainActivity.PIP_Y, pip_y).commit(); MainActivity.activity.updatePIPCoordinates(); updatePiPWindow(); } else { new A4TVToast(ctx) .showToast(R.string.pip_position_not_valid); } } break; default: break; } } @Override public void fillDialog() { View view = DialogManager.dialogCreator.fillDialogWithContents( contentList, contentListIDs, titleIDs, null, this, null); setContentView(view); } @Override public void setDialogAttributes() { getWindow().getAttributes().width = MainActivity.dialogWidth; getWindow().getAttributes().height = MainActivity.dialogHeight; } @Override public void show() { fillViews(); super.show(); } /** Fill views with data */ private void fillViews() { int spinnerSelector; // Get stored value for PIP position. If not defined than take default: // upper left spinnerSelector = MainActivity.sharedPrefs.getInt( MainActivity.PIP_POSITION, 0); pipPositionSpinner.setSelection(spinnerSelector); if (spinnerSelector < 4) { showCustomPositionFields(false); } // Get stored value for PIP size. If not defined than take default: 1/9 spinnerSelector = MainActivity.sharedPrefs.getInt( MainActivity.PIP_SIZE, 0); pipSizeSpinner.setSelection(spinnerSelector); if (spinnerSelector < 2) { showCustomSizeFields(false); } MainActivity.activity.updatePIPCoordinates(); updateCustomFields(); } /** * Function that load theme * * @param ctx * @return */ private static int checkTheme(Context ctx) { TypedArray atts = ctx.getTheme().obtainStyledAttributes( new int[] { R.attr.A4TVDialog }); int i = atts.getResourceId(0, 0); atts.recycle(); return i; } private void init() { /** Spinners */ pipPositionSpinner = (A4TVSpinner) findViewById(PIP_SETTINGS_SET_POSITION); pipSizeSpinner = (A4TVSpinner) findViewById(PIP_SETTINGS_SET_SIZE); /** Edit text fields */ pipCustomXposition = (A4TVEditText) findViewById(PIP_SETTINGS_CUSTOM_X_POSITION); pipCustomXposition.setInputType(InputType.TYPE_CLASS_NUMBER); pipCustomYPosition = (A4TVEditText) findViewById(PIP_SETTINGS_CUSTOM_Y_POSITION); pipCustomYPosition.setInputType(InputType.TYPE_CLASS_NUMBER); pipCustomWidth = (A4TVEditText) findViewById(PIP_SETTINGS_CUSTOM_WIDTH); pipCustomWidth.setInputType(InputType.TYPE_CLASS_NUMBER); pipCustomHeight = (A4TVEditText) findViewById(PIP_SETTINGS_CUSTOM_HEIGHT); pipCustomHeight.setInputType(InputType.TYPE_CLASS_NUMBER); /** Buttons */ pipCustomPositionApply = (A4TVButton) findViewById(PIP_SETTINGS_CUSTOM_POSITION_APPLY); pipCustomSizeApply = (A4TVButton) findViewById(PIP_SETTINGS_CUSTOM_SIZE_APPLY); /** OnClick listeners */ pipPositionSpinner .setOnSelectA4TVSpinnerListener(new OnSelectA4TVSpinnerListener() { @Override public void onSelect(A4TVSpinner spinner, int index, String[] contents) { if (index < 4) { showCustomPositionFields(false); MainActivity.sharedPrefs.edit() .putInt(MainActivity.PIP_POSITION, index) .commit(); MainActivity.activity.updatePIPCoordinates(); updateCustomFields(); updatePiPWindow(); } else { /** Custom size settings */ Log.d(TAG, "PiP custom position"); showCustomPositionFields(true); } } }); pipSizeSpinner .setOnSelectA4TVSpinnerListener(new OnSelectA4TVSpinnerListener() { @Override public void onSelect(A4TVSpinner spinner, int index, String[] contents) { if (index < 2) { MainActivity.sharedPrefs.edit() .putInt(MainActivity.PIP_SIZE, index) .commit(); showCustomSizeFields(false); MainActivity.activity.updatePIPCoordinates(); updateCustomFields(); updatePiPWindow(); } else { /** Custom size settings */ Log.d(TAG, "PiP custom size"); showCustomSizeFields(true); } } }); } private void showCustomSizeFields(boolean show) { if (show) { setLayoutDisplayMode(R.string.pip_width, DisplayMode.SHOW); setLayoutDisplayMode(R.string.pip_height, DisplayMode.SHOW); setLayoutDisplayMode(R.string.pip_size_apply, DisplayMode.SHOW); } else { setLayoutDisplayMode(R.string.pip_width, DisplayMode.DISABLE); setLayoutDisplayMode(R.string.pip_height, DisplayMode.DISABLE); setLayoutDisplayMode(R.string.pip_size_apply, DisplayMode.DISABLE); } } private void showCustomPositionFields(boolean show) { if (show) { setLayoutDisplayMode(R.string.pip_x_coordinate, DisplayMode.SHOW); setLayoutDisplayMode(R.string.pip_y_coordinate, DisplayMode.SHOW); setLayoutDisplayMode(R.string.pip_coordinate_apply, DisplayMode.SHOW); } else { setLayoutDisplayMode(R.string.pip_x_coordinate, DisplayMode.DISABLE); setLayoutDisplayMode(R.string.pip_y_coordinate, DisplayMode.DISABLE); setLayoutDisplayMode(R.string.pip_coordinate_apply, DisplayMode.DISABLE); } } public void updateCustomFields() { pipCustomXposition.setText(Integer .toString(MainActivity.pipWindowCoordinateLeft)); pipCustomYPosition.setText(Integer .toString(MainActivity.pipWindowCoordinateTop)); pipCustomWidth.setText(Integer.toString(MainActivity.pipWindowWidth)); pipCustomHeight.setText(Integer.toString(MainActivity.pipWindowHeight)); } public void updatePiPWindow() { /** * Currently not functional because android VideoVide is actualy never * called */ // if (MainActivity.activity.getDualVideoManager() // .getSecondaryDisplayUnit().isPlaying() if ((MainActivity.activity.getDualVideoManager() .getSecondaryDisplayUnit().getVisibility() == View.VISIBLE) && (MainActivity.activity.getDualVideoManager() .getSecondaryDisplayUnit().getPlayMode() == A4TVVideoView.PIP_DISPLAY_MODE)) { Log.d(TAG, "PIP is currently active and needs to be repositioned"); MainActivity.activity.getDualVideoManager() .getSecondaryDisplayUnit().gotoPIP(); } else if ((MainActivity.activity.getPrimaryMultimediaVideoView() != null) && (MainActivity.activity.getMultimediaMode() == MainActivity.MULTIMEDIA_PIP)) { Log.d(TAG, "PIP is currently active (multimedia) and needs to be repositioned"); MainActivity.activity.getPrimaryMultimediaVideoView().gotoPIP(); } } public boolean isPositionValid(int new_x, int new_y) { if (new_x + MainActivity.pipWindowWidth <= 1920) { if (new_y + MainActivity.pipWindowHeight <= 1080) { return true; } } return false; } public boolean isSizeValid(int new_width, int new_height) { if ((MainActivity.pipWindowCoordinateLeft + new_width) <= 1920) { if ((MainActivity.pipWindowCoordinateTop + new_height) <= 1080) { return true; } } return false; } @Override public void returnArrayListsWithDialogContents( ArrayList<ArrayList<Integer>> contentList, ArrayList<ArrayList<Integer>> contentListIDs, ArrayList<Integer> titleIDs) { // clear old data in lists contentList.clear(); contentListIDs.clear(); titleIDs.clear(); // title titleIDs.add(R.drawable.tv_menu_icon); titleIDs.add(R.drawable.pip_icon); titleIDs.add(R.string.tv_settings_menu_pip_settings); ArrayList<Integer> list = new ArrayList<Integer>(); /** PiP position selector */ list.add(MainMenuContent.TAGA4TVTextView); list.add(MainMenuContent.TAGA4TVSpinner); contentList.add(list); list = new ArrayList<Integer>(); list.add(R.string.tv_menu_pip_settings_position); list.add(PIP_SETTINGS_SET_POSITION); contentListIDs.add(list); /** PiP custom x value */ list = new ArrayList<Integer>(); list.add(MainMenuContent.TAGA4TVTextView); list.add(MainMenuContent.TAGA4TVEditText); contentList.add(list); list = new ArrayList<Integer>(); list.add(R.string.pip_x_coordinate); list.add(PIP_SETTINGS_CUSTOM_X_POSITION); contentListIDs.add(list); /** PiP custom y value */ list = new ArrayList<Integer>(); list.add(MainMenuContent.TAGA4TVTextView); list.add(MainMenuContent.TAGA4TVEditText); contentList.add(list); list = new ArrayList<Integer>(); list.add(R.string.pip_y_coordinate); list.add(PIP_SETTINGS_CUSTOM_Y_POSITION); contentListIDs.add(list); /** Apply coordinates */ list = new ArrayList<Integer>(); list.add(MainMenuContent.TAGA4TVTextView); list.add(MainMenuContent.TAGA4TVButton); contentList.add(list); list = new ArrayList<Integer>(); list.add(R.string.pip_coordinate_apply); list.add(PIP_SETTINGS_CUSTOM_POSITION_APPLY); contentListIDs.add(list); /** PiP size selector */ list = new ArrayList<Integer>(); list.add(MainMenuContent.TAGA4TVTextView); list.add(MainMenuContent.TAGA4TVSpinner); contentList.add(list); list = new ArrayList<Integer>(); list.add(R.string.tv_menu_pip_settings_size); list.add(PIP_SETTINGS_SET_SIZE); contentListIDs.add(list); /** PiP custom width */ list = new ArrayList<Integer>(); list.add(MainMenuContent.TAGA4TVTextView); list.add(MainMenuContent.TAGA4TVEditText); contentList.add(list); list = new ArrayList<Integer>(); list.add(R.string.pip_width); list.add(PIP_SETTINGS_CUSTOM_WIDTH); contentListIDs.add(list); /** PiP custom height */ list = new ArrayList<Integer>(); list.add(MainMenuContent.TAGA4TVTextView); list.add(MainMenuContent.TAGA4TVEditText); contentList.add(list); list = new ArrayList<Integer>(); list.add(R.string.pip_height); list.add(PIP_SETTINGS_CUSTOM_HEIGHT); contentListIDs.add(list); /** Apply size */ list = new ArrayList<Integer>(); list.add(MainMenuContent.TAGA4TVTextView); list.add(MainMenuContent.TAGA4TVButton); contentList.add(list); list = new ArrayList<Integer>(); list.add(R.string.pip_size_apply); list.add(PIP_SETTINGS_CUSTOM_SIZE_APPLY); contentListIDs.add(list); } }