package com.iwedia.gui.components.dialogs; import android.content.Context; import android.content.DialogInterface; import android.content.res.TypedArray; import android.util.Log; import android.view.KeyEvent; 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.A4TVPasswordDialog; import com.iwedia.gui.components.A4TVSpinner; import com.iwedia.gui.components.A4TVSpinner.OnSelectA4TVSpinnerListener; import com.iwedia.gui.components.A4TVToast; import com.iwedia.gui.listeners.MainKeyListener; import com.iwedia.gui.mainmenu.DialogManager; import com.iwedia.gui.mainmenu.MainMenuContent; import com.iwedia.gui.osd.IOSDHandler; import java.util.ArrayList; /** * Parental guidance dialog * * @author Branimir Pavlovic */ public class ParentalGuidanceDialog extends A4TVDialog implements A4TVDialogInterface, android.view.View.OnClickListener { public static final String TAG = "ParentalGuidanceDialog"; public static final int PARENTAL_CONTROL_INDEX_OFFSET = 3; /** IDs for buttons */ public static final int TV_MENU_PARENTIAL_SECURITY_SETTINGS_PARENTIAL_GUIDANCE = 12345234; // fields for creating dialogs private ArrayList<ArrayList<Integer>> contentList = new ArrayList<ArrayList<Integer>>(), contentListIDs = new ArrayList<ArrayList<Integer>>(); private ArrayList<Integer> titleIDs = new ArrayList<Integer>(); private static A4TVSpinner buttonParentalSpinner; public static A4TVPasswordDialog parentalAlertDialog = null; public ParentalGuidanceDialog(Context context) { super(context, checkTheme(context), 0); // fill lists returnArrayListsWithDialogContents(contentList, contentListIDs, titleIDs); // set content to dialog fillDialog(); // set attributes setDialogAttributes(); init(context); } /** Init parental control dialog */ public static void initParentalControlDialog(Context context) { parentalAlertDialog = new A4TVPasswordDialog(context, true); } private void init(final Context ctx) { buttonParentalSpinner = (A4TVSpinner) findViewById(TV_MENU_PARENTIAL_SECURITY_SETTINGS_PARENTIAL_GUIDANCE); buttonParentalSpinner .setOnSelectA4TVSpinnerListener(new OnSelectA4TVSpinnerListener() { @Override public void onSelect(A4TVSpinner spinner, int index, String[] contents) { PasswordSecurityDialog .wrongPasswordEntered(null, false); if (PasswordSecurityDialog.waitFor10Minutes) { new A4TVToast(ctx) .showToast(R.string.enter_password_no_more_attempts_active); } else { // show alert dialog ParentalGuidanceDialog.showAlertDialogForUser( index, ctx, contents[index]); } } }); } public static void showAlertDialogForUser(final int parentalLevel, final Context ctx, final String buttonText) { final A4TVPasswordDialog alertDialog = new A4TVPasswordDialog(ctx, true); final A4TVEditText editText1 = alertDialog.getEditText1(); alertDialog.getEditText2().setVisibility(View.GONE); alertDialog.getEditText3().setVisibility(View.GONE); alertDialog.setTitleOfAlertDialog(R.string.parental_state_change) .setCancelable(true); alertDialog.setOnCancelListener(new OnCancelListener() { @Override public void onCancel(DialogInterface dialog) { alertDialog.getNegativeButton().performClick(); } }); alertDialog.setNegativeButton(R.string.button_text_cancel, new android.view.View.OnClickListener() { @Override public void onClick(View v) { alertDialog.cancel(); buttonParentalSpinner.getDialogContext().dismiss(); buttonParentalSpinner.setSelected(false); editText1.setText(""); } }); alertDialog.setPositiveButton(R.string.button_text_set, new android.view.View.OnClickListener() { @Override public void onClick(View v) { boolean isPinValid = false; try { if (editText1.getText().toString().length() == 4) { isPinValid = MainActivity.service .getParentalControl().checkPinCode( Integer.valueOf(editText1 .getText().toString())); } } catch (Exception e) { e.printStackTrace(); } if (isPinValid) { // TODO change parental control level int offset = 0, parentalLevelOffset = 0; Log.d(TAG, "Initial parentalLevelOffset :" + parentalLevelOffset); try { if (parentalLevel != 0) { offset = PARENTAL_CONTROL_INDEX_OFFSET; } parentalLevelOffset = parentalLevel + offset; Log.d(TAG, "PARENTAL INDEX" + parentalLevelOffset); MainActivity.service.getParentalControl() .setParentalRate(parentalLevelOffset); } catch (Exception e) { new A4TVToast(ctx) .showToast(R.string.parental_error); e.printStackTrace(); } if (parentalLevelOffset == 0) { new A4TVToast(ctx) .showToast(R.string.parental_guidance_is_off); } else { String guidanceLevelString = ctx .getResources() .getString( R.string.parental_guidance_is_set_on) + " " + String.valueOf(parentalLevelOffset); new A4TVToast(ctx) .showToast(guidanceLevelString); } buttonParentalSpinner.setText(buttonText); buttonParentalSpinner.getDialogContext().cancel(); buttonParentalSpinner.setSelected(false); alertDialog.cancel(); } // ////////////////////// // Wrong pin // ////////////////////// else { editText1.setText(""); A4TVToast toast = new A4TVToast(ctx); toast.showToast(R.string.wrong_pin_entered); editText1.requestFocus(); PasswordSecurityDialog.wrongPasswordEntered( alertDialog, false); } } }); // show dialog alertDialog.show(); } /** Show alert dialog when parental control is activated */ public static void showParentalControlAlertDialog( final MainActivity activity) { parentalAlertDialog .setTitleOfAlertDialog(R.string.parental_control_activated); final A4TVEditText editText1 = parentalAlertDialog.getEditText1(); parentalAlertDialog.getEditText2().setVisibility(View.GONE); parentalAlertDialog.getEditText3().setVisibility(View.GONE); parentalAlertDialog.setOnKeyListener(new OnKeyListener() { @Override public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) { if (MainKeyListener.getAppState() == MainKeyListener.CLEAN_SCREEN) { if (event.getAction() == KeyEvent.ACTION_DOWN) { switch (keyCode) { // /////////////////////////////////////////////// // CHANNEL UP // /////////////////////////////////////////////// case KeyEvent.KEYCODE_F4: case KeyEvent.KEYCODE_CHANNEL_UP: { if (MainKeyListener.getAppState() == MainKeyListener.CLEAN_SCREEN) { changeChannelUp(activity); parentalAlertDialog.cancel(); } return true; } // /////////////////////////////////////////////////// // CHANNEL DOWN // /////////////////////////////////////////////////// case KeyEvent.KEYCODE_F3: case KeyEvent.KEYCODE_CHANNEL_DOWN: { if (MainKeyListener.getAppState() == MainKeyListener.CLEAN_SCREEN) { changeChannelDown(activity); parentalAlertDialog.cancel(); } return true; } // /////////////////////////////////////////////////////////////////////// // MAIN MENU // //////////////////////////////////////////////////////////////////////// case KeyEvent.KEYCODE_MENU: case KeyEvent.KEYCODE_M: { if (MainKeyListener.enableKeyCodeMenu) { parentalAlertDialog.cancel(); // Show main menu MainKeyListener .setAppState(MainKeyListener.MAIN_MENU); // If main menu isn't created create it if (((MainActivity) activity) .getMainMenuHandler() == null) { ((MainActivity) activity) .initMainMenu(); } // Show main menu ((MainActivity) activity) .getMainMenuHandler() .showMainMenu(); } return true; } // ////////////////////////////////////////////////////////////// // VOLUME UP // ////////////////////////////////////////////////////////////// // case KeyEvent.KEYCODE_F6: case KeyEvent.KEYCODE_VOLUME_UP: { IOSDHandler mCurlHandler = activity .getPageCurl(); mCurlHandler.volume(VOLUME_UP, false); return true; } // /////////////////////////////////////////////////////////////////// // VOLUME DOWN // /////////////////////////////////////////////////////////////////// // case KeyEvent.KEYCODE_F5: case KeyEvent.KEYCODE_VOLUME_DOWN: { IOSDHandler mCurlHandler = activity .getPageCurl(); mCurlHandler.volume(VOLUME_DOWN, false); return true; } // /////////////////////////////////////////////////////////////////// // VOLUME MUTE // /////////////////////////////////////////////////////////////////// case KeyEvent.KEYCODE_MUTE: { IOSDHandler curlHandler = activity .getPageCurl(); curlHandler.volume(VOLUME_MUTE, false); return true; } default: break; } return false; } else { // Action up return false; } } return false; } }); parentalAlertDialog.setCancelable(false); parentalAlertDialog.setOnCancelListener(new OnCancelListener() { @Override public void onCancel(DialogInterface dialog) { } }); parentalAlertDialog.setNegativeButton(R.string.button_text_cancel, new android.view.View.OnClickListener() { @Override public void onClick(View v) { parentalAlertDialog.cancel(); } }); parentalAlertDialog.setPositiveButton(R.string.parental_control_ok, new android.view.View.OnClickListener() { @Override public void onClick(View v) { boolean isPinValid = false; try { if (editText1.getText().toString().length() == 4) { isPinValid = MainActivity.service .getParentalControl().checkPinCode( Integer.valueOf(editText1 .getText().toString())); } } catch (Exception e) { e.printStackTrace(); } if (isPinValid) { // Start playback of secured channel try { // MainActivity.service.getContentListControl().startVideoPlayback(); MainActivity.service .getVideoControl() .setCurrentVideoTrack( MainActivity.activity .getCurrentVideoTrackIndex()); MainActivity.service .getAudioControl() .setCurrentAudioTrack( MainActivity.activity .getCurrentAudioTrackIndex()); // Hide parental control check service layer activity.getCheckServiceType() .hideParentalControlLayer(); } catch (Exception e) { e.printStackTrace(); } parentalAlertDialog.cancel(); } // ////////////////////// // Wrong pin // ////////////////////// else { editText1.setText(""); A4TVToast toast = new A4TVToast(activity); toast.showToast(R.string.wrong_pin_entered); editText1.requestFocus(); PasswordSecurityDialog.wrongPasswordEntered( parentalAlertDialog, false); } } }); Log.d(TAG, "IS PARENTAL VISIBLE" + parentalAlertDialog.isShowing() + ""); // show dialog parentalAlertDialog.show(); // Show parental control check service layer activity.getCheckServiceType().showParentalControlLayer(); } @Override public void show() { fillViews(); super.show(); } private void fillViews() { int parentalLevel = 0; try { parentalLevel = MainActivity.service.getParentalControl() .getParentalRate(); } catch (Exception e) { e.printStackTrace(); } if (parentalLevel == 0) { buttonParentalSpinner.setSelection(parentalLevel); } else { if (parentalLevel >= PARENTAL_CONTROL_INDEX_OFFSET + 1) { buttonParentalSpinner.setSelection(parentalLevel - PARENTAL_CONTROL_INDEX_OFFSET); } else { buttonParentalSpinner.setSelection(0); } } } @Override public void onClick(View v) { } @Override public void fillDialog() { View view = DialogManager.dialogCreator.fillDialogWithContents( contentList, contentListIDs, titleIDs, null, this, null);// , // pictureBackgroundID); setContentView(view); } @Override public void setDialogAttributes() { getWindow().getAttributes().width = MainActivity.dialogWidth; getWindow().getAttributes().height = MainActivity.dialogHeight; } /** * 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; } @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.settings_icon); titleIDs.add(R.drawable.tv_menu_icon); titleIDs.add(R.drawable.security); titleIDs.add(R.string.tv_menu_parential_security_settings); // parentail guidance****************************************** ArrayList<Integer> 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_parential_security_settings_parential_guidance); list.add(TV_MENU_PARENTIAL_SECURITY_SETTINGS_PARENTIAL_GUIDANCE); contentListIDs.add(list); } private static void changeChannelUp(MainActivity activity) { IOSDHandler curlHandler = activity.getPageCurl(); curlHandler .prepareChannelAndChange(SCENARIO_CHANNEL_CHANGE, CHANNEL_UP); } private static void changeChannelDown(MainActivity activity) { IOSDHandler curlHandler = activity.getPageCurl(); curlHandler.prepareChannelAndChange(SCENARIO_CHANNEL_CHANGE, CHANNEL_DOWN); } // private static void changeChannelTogglePrevious(MainActivity activity) { // IOSDHandler curlHandler = activity.getPageCurl(); // curlHandler.prepareChannelAndChange( // SCENARIO_TOGGLE_PREVIOUS_CHANNEL_CHANGE, // CHANNEL_TOGGLE_PREVIOUS); // } }