package com.iwedia.gui.content_list; import android.app.Activity; import android.content.res.TypedArray; import android.graphics.Color; import android.os.RemoteException; import android.view.Gravity; import android.view.KeyEvent; import android.view.View; import android.view.View.OnClickListener; import android.view.View.OnFocusChangeListener; import android.view.View.OnLongClickListener; import android.view.ViewGroup.LayoutParams; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.ScrollView; import com.iwedia.comm.enums.FilterType; import com.iwedia.gui.MainActivity; import com.iwedia.gui.R; import com.iwedia.gui.components.A4TVAlertDialog; import com.iwedia.gui.components.A4TVButton; import com.iwedia.gui.components.A4TVDialog; import com.iwedia.gui.components.A4TVEditText; import com.iwedia.gui.components.A4TVTextView; import com.iwedia.gui.components.A4TVToast; import java.util.ArrayList; /** * OnLong press listener for content list tabs * * @author Sasa Jagodin */ public class TabOnLongPress implements OnLongClickListener { /** Grid id */ private int serviceListIndex = 0; /** Reference of main activity */ private Activity activity; /** Small context dialog that has drop down items */ private A4TVDialog dialogContext; /** Constructor 1 */ public TabOnLongPress(Activity activity, int serviceListIndex) { super(); // Take reference of main activity this.activity = activity; // Get filter type this.serviceListIndex = serviceListIndex; } @Override public boolean onLongClick(View arg0) { dialogContext = ((MainActivity) activity).getDialogManager() .getContextSmallDialog(); // Show dialog for adding in favorite list // fill dialog with desired view if (dialogContext != null) { dialogContext .setContentView(fillDialogWithElements(serviceListIndex)); // set dialog size dialogContext.getWindow().getAttributes().width = MainActivity.dialogWidth / 2; dialogContext.getWindow().getAttributes().height = MainActivity.dialogHeight / 2; // show drop down dialog dialogContext.show(); } return true; } /** * Creates view for context dialog * * @param allList_favoriteList * add or remove from favourites * @return */ private View fillDialogWithElements(final int serviceListIndex) { LinearLayout mainLinLayout = new LinearLayout(activity); mainLinLayout.setLayoutParams(new LayoutParams( LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); mainLinLayout.setOrientation(LinearLayout.VERTICAL); // get drawable from theme for image source TypedArray atts = activity.getTheme().obtainStyledAttributes( new int[] { R.attr.DialogContextBackground }); int backgroundID = atts.getResourceId(0, 0); atts.recycle(); mainLinLayout.setBackgroundResource(backgroundID); // layout of dialog title LinearLayout titleLinearLayout = new LinearLayout(activity); titleLinearLayout.setLayoutParams(new LinearLayout.LayoutParams( LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT)); titleLinearLayout.setOrientation(LinearLayout.VERTICAL); titleLinearLayout.setPadding( (int) activity.getResources().getDimension( R.dimen.a4tvdialog_padding_left), (int) activity.getResources().getDimension( R.dimen.a4tvdialog_spinner_padding_top), 0, 0); A4TVTextView text = new A4TVTextView(activity, null); text.setLayoutParams(new LinearLayout.LayoutParams( LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); text.setText(activity.getResources().getString( R.string.spinner_choose_title)); text.setTextSize(activity.getResources().getDimension( R.dimen.a4tvdialog_textview_size)); // add title titleLinearLayout.addView(text); // add title layout to main layout mainLinLayout.addView(titleLinearLayout); // create horizontal line ImageView horizLine = new ImageView(activity); horizLine.setLayoutParams(new LinearLayout.LayoutParams( android.widget.LinearLayout.LayoutParams.MATCH_PARENT, android.widget.LinearLayout.LayoutParams.WRAP_CONTENT)); // get drawable from theme for image source atts = activity.getTheme().obtainStyledAttributes( new int[] { R.attr.DialogSmallUpperDividerLine }); backgroundID = atts.getResourceId(0, 0); horizLine.setBackgroundResource(backgroundID); // add horiz line to main layout mainLinLayout.addView(horizLine); // create scroll view ScrollView mainScrollView = new ScrollView(activity); mainScrollView.setLayoutParams(new LinearLayout.LayoutParams( LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT)); mainScrollView.setScrollbarFadingEnabled(false); mainScrollView.setScrollBarStyle(View.SCROLLBARS_INSIDE_INSET); // add scrollview to main view mainLinLayout.addView(mainScrollView); LinearLayout contentLinearLayout = new LinearLayout(activity); contentLinearLayout.setLayoutParams(new ScrollView.LayoutParams( LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); contentLinearLayout.setOrientation(LinearLayout.VERTICAL); contentLinearLayout.setGravity(Gravity.CENTER_HORIZONTAL | Gravity.TOP); // add content layout to scroll view mainScrollView.addView(contentLinearLayout); /** GET FIELDS FOR CREATING DROP DOWN ITEMS */ ArrayList<String> stringList = loadDropDownItems(serviceListIndex); for (int i = 0; i < stringList.size(); i++) { // create small layout final LinearLayout smallLayoutHorizontal = new LinearLayout( activity); smallLayoutHorizontal.setOrientation(LinearLayout.HORIZONTAL); smallLayoutHorizontal .setLayoutParams(new LinearLayout.LayoutParams( LayoutParams.MATCH_PARENT, MainActivity.dialogListElementHeight)); smallLayoutHorizontal.setPadding(15, 5, 15, 5); smallLayoutHorizontal.setGravity(Gravity.CENTER_VERTICAL); // create drop box item A4TVButton button = new A4TVButton(activity, null); button.setLayoutParams(new LinearLayout.LayoutParams( LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); button.setText(stringList.get(i)); button.setGravity(Gravity.CENTER); button.setId(i); // for creating difference between first buttons button.setTag(stringList.get(i)); button.setOnClickListener(new OnClickListener() { @Override public void onClick(View vi) { // /////////////////////////////////////////////////////////////////////////// // Create service list // /////////////////////////////////////////////////////////////////////////// if (vi.getTag().equals( activity.getResources().getString( R.string.service_list_create))) { MainActivity.activity.runOnUiThread(new Runnable() { @Override public void run() { final A4TVAlertDialog askDialog = new A4TVAlertDialog( MainActivity.activity); askDialog .setTitleOfAlertDialog("Create service list"); final A4TVEditText editText = new A4TVEditText( askDialog.getContext()); editText.setEms(40); askDialog.setView(editText); editText.setOnKeyListener(new View.OnKeyListener() { @Override public boolean onKey(View v, int keyCode, KeyEvent event) { if (event.getAction() == KeyEvent.ACTION_DOWN) { switch (keyCode) { case KeyEvent.KEYCODE_DPAD_CENTER: case KeyEvent.KEYCODE_ENTER: try { String serviceListName = editText .getText() .toString(); if (MainActivity.service .getServiceControl() .createServiceList( serviceListName)) { MainActivity.activity .getContentListHandler() .reinitFilterOptionArray(); new A4TVToast( activity) .showToast(R.string.service_list_created); } askDialog.cancel(); } catch (RemoteException e) { e.printStackTrace(); } break; case KeyEvent.KEYCODE_CLEAR: case KeyEvent.KEYCODE_FUNCTION: case KeyEvent.KEYCODE_F10: { v.onKeyDown( KeyEvent.KEYCODE_DEL, new KeyEvent(0, 0)); return true; } case KeyEvent.KEYCODE_BACK: askDialog.cancel(); return true; default: return false; } } return false; } }); askDialog.show(); } }); dialogContext.cancel(); } // //////////////////////////////////////////////////// // Cancel context dialog // /////////////////////////////////////////////////// if (vi.getTag().equals( activity.getResources().getString( R.string.service_list_delete))) { try { MainActivity.service.getServiceControl() .deleteServiceList(serviceListIndex); MainActivity.activity.getContentListHandler() .reinitFilterOptionArray(); MainActivity.activity.getContentListHandler() .filterContent(FilterType.ALL, false); new A4TVToast(activity) .showToast(R.string.service_list_deleted); dialogContext.cancel(); } catch (RemoteException e) { e.printStackTrace(); } } if (vi.getTag().equals( activity.getResources().getString( R.string.service_list_rename))) { MainActivity.activity.runOnUiThread(new Runnable() { @Override public void run() { final A4TVAlertDialog askDialog = new A4TVAlertDialog( MainActivity.activity); askDialog .setTitleOfAlertDialog("Rename service list"); final A4TVEditText editText = new A4TVEditText( askDialog.getContext()); editText.setEms(40); askDialog.setView(editText); editText.setOnKeyListener(new View.OnKeyListener() { @Override public boolean onKey(View v, int keyCode, KeyEvent event) { if (event.getAction() == KeyEvent.ACTION_DOWN) { switch (keyCode) { case KeyEvent.KEYCODE_DPAD_CENTER: case KeyEvent.KEYCODE_ENTER: try { String serviceListName = editText .getText() .toString(); if (MainActivity.service .getServiceControl() .renameList( serviceListIndex, serviceListName)) { MainActivity.activity .getContentListHandler() .reinitFilterOptionArray(); } MainActivity.activity .getContentListHandler() .filterContent( FilterType.ALL, false); new A4TVToast(activity) .showToast(R.string.service_list_renamed); askDialog.cancel(); } catch (RemoteException e) { e.printStackTrace(); } break; case KeyEvent.KEYCODE_CLEAR: case KeyEvent.KEYCODE_FUNCTION: case KeyEvent.KEYCODE_F10: { v.onKeyDown( KeyEvent.KEYCODE_DEL, new KeyEvent(0, 0)); return true; } case KeyEvent.KEYCODE_BACK: askDialog.cancel(); return true; default: return false; } } return false; } }); askDialog.show(); } }); dialogContext.cancel(); } if (vi.getTag().equals( activity.getResources().getString( R.string.service_list_sort))) { new A4TVToast(activity) .showToast(R.string.not_implemented); dialogContext.cancel(); } if (vi.getTag().equals( activity.getResources().getString(R.string.cancel))) { // Close context dialog dialogContext.cancel(); } } }); // set focus listener of button button.setOnFocusChangeListener(new OnFocusChangeListener() { @Override public void onFocusChange(View v, boolean hasFocus) { // get drawable from theme for small layout // background TypedArray atts = activity.getTheme() .obtainStyledAttributes( new int[] { R.attr.LayoutFocusDrawable }); int backgroundID = atts.getResourceId(0, 0); atts.recycle(); if (hasFocus) { smallLayoutHorizontal.getChildAt(0).setSelected(true); smallLayoutHorizontal .setBackgroundResource(backgroundID); } else { smallLayoutHorizontal.getChildAt(0).setSelected(false); smallLayoutHorizontal .setBackgroundColor(Color.TRANSPARENT); } } }); button.setBackgroundColor(Color.TRANSPARENT); smallLayoutHorizontal.addView(button); // add view contentLinearLayout.addView(smallLayoutHorizontal); if (i < stringList.size() - 1) { // create horizontal line ImageView horizLineSmall = new ImageView(activity); android.widget.LinearLayout.LayoutParams params = new LinearLayout.LayoutParams( dialogContext.getWindow().getAttributes().width - 10, android.widget.LinearLayout.LayoutParams.WRAP_CONTENT); params.gravity = Gravity.CENTER_HORIZONTAL; horizLineSmall.setLayoutParams(params); // get drawable from theme for image source atts = activity.getTheme().obtainStyledAttributes( new int[] { R.attr.DialogContextDividerLine }); backgroundID = atts.getResourceId(0, 0); horizLineSmall.setImageResource(backgroundID); // add view contentLinearLayout.addView(horizLineSmall); } } return mainLinLayout; } /** * Load strings for long click drop down menu * * @param gridID * ID of selected grid * @return ArrayList of strings */ ArrayList<String> loadDropDownItems(int filterType) { ArrayList<String> stringList = new ArrayList<String>(); switch (filterType) { case FilterType.ALL: case FilterType.INPUTS: case FilterType.APPS: case FilterType.WIDGETS: stringList.add(activity.getResources().getString( R.string.service_list_create)); stringList.add(activity.getResources().getString( R.string.cancel)); break; default: stringList.add(activity.getResources().getString( R.string.service_list_create)); stringList.add(activity.getResources().getString( R.string.service_list_delete)); stringList.add(activity.getResources().getString( R.string.service_list_rename)); stringList.add(activity.getResources().getString( R.string.service_list_sort)); stringList.add(activity.getResources().getString( R.string.cancel)); break; } return stringList; } }