| <?xml version="1.0" encoding="utf-8"?> | |||||
| <selector xmlns:android="http://schemas.android.com/apk/res/android"> | |||||
| <item android:state_selected="true" android:state_pressed="false" android:color="@color/android_yellow_dark" /> | |||||
| <item android:state_selected="true" android:state_pressed="true" android:color="@color/black" /> | |||||
| <item android:state_pressed="true" android:color="@color/black" /> | |||||
| <item android:state_pressed="false" android:color="@color/white" /> | |||||
| </selector> |
| <?xml version="1.0" encoding="utf-8"?> | |||||
| <selector xmlns:android="http://schemas.android.com/apk/res/android"> | |||||
| <item android:state_window_focused="false" android:state_selected="true" android:drawable="@android:color/transparent" /> | |||||
| <item android:state_selected="true" android:drawable="@android:color/transparent" /> | |||||
| <item android:state_pressed="true" android:state_selected="false" android:drawable="@android:color/transparent" /> | |||||
| <item android:state_selected="false" android:drawable="@color/black" /> | |||||
| </selector> |
| android:layout_height="50dp" | android:layout_height="50dp" | ||||
| android:layout_marginRight="10dp" | android:layout_marginRight="10dp" | ||||
| android:background="@drawable/glassbg_black" | android:background="@drawable/glassbg_black" | ||||
| android:src="@drawable/ic_menu_choose_equipment" | |||||
| app:drawBorder="true" | |||||
| app:drawBorderColor="@color/android_blue_dark" | |||||
| app:drawBorderWidth="3dp"/> | |||||
| android:src="@drawable/ic_menu_choose_equipment" | |||||
| app:drawImgBorder="true" | |||||
| app:drawImgBorderColor="@color/white" | |||||
| app:drawImgBorderWidth="4dp" /> | |||||
| <LinearLayout | <LinearLayout | ||||
| android:id="@+id/chooseArcherySetupTxt" | android:id="@+id/chooseArcherySetupTxt" | ||||
| android:layout_weight="1" | android:layout_weight="1" | ||||
| android:orientation="vertical" > | android:orientation="vertical" > | ||||
| <ch.spherIC.recurvebowsight.components.FontTextView | |||||
| <ch.spherIC.recurvebowsight.components.XTextView | |||||
| android:id="@+id/chooseArcherySetupTxtMain" | android:id="@+id/chooseArcherySetupTxtMain" | ||||
| android:layout_width="match_parent" | |||||
| android:layout_width="wrap_content" | |||||
| android:layout_height="wrap_content" | android:layout_height="wrap_content" | ||||
| android:background="@color/qrt_translucent_white" | |||||
| android:gravity="bottom|left" | android:gravity="bottom|left" | ||||
| android:lines="1" | android:lines="1" | ||||
| android:paddingLeft="2dp" | android:paddingLeft="2dp" | ||||
| android:paddingRight="2dp" | |||||
| android:scrollHorizontally="true" | android:scrollHorizontally="true" | ||||
| android:text="Hoyt / Avalon" | android:text="Hoyt / Avalon" | ||||
| android:textAppearance="?android:attr/textAppearanceMediumInverse" | android:textAppearance="?android:attr/textAppearanceMediumInverse" | ||||
| android:textColor="@color/android_blue_dark" | |||||
| android:textColor="@color/black" | |||||
| android:textSize="18sp" | android:textSize="18sp" | ||||
| app:drawBorder="true" | |||||
| app:drawBorderColor="@color/black" | |||||
| app:drawBorderWidth="1dp" | |||||
| app:font="@string/TitilliumWeb_Bold" /> | app:font="@string/TitilliumWeb_Bold" /> | ||||
| <ch.spherIC.recurvebowsight.components.FontTextView | <ch.spherIC.recurvebowsight.components.FontTextView |
| android:layout_width="fill_parent" | android:layout_width="fill_parent" | ||||
| android:layout_height="fill_parent" | android:layout_height="fill_parent" | ||||
| android:background="@drawable/bg_about" | android:background="@drawable/bg_about" | ||||
| android:orientation="vertical" | |||||
| android:padding="10dp" > | |||||
| android:orientation="vertical" > | |||||
| <ListView | <ListView | ||||
| android:id="@+id/chooseArcerySetupItemsList" | android:id="@+id/chooseArcerySetupItemsList" |
| android:lines="1" | android:lines="1" | ||||
| android:paddingLeft="2dp" | android:paddingLeft="2dp" | ||||
| android:textAppearance="?android:attr/textAppearanceMediumInverse" | android:textAppearance="?android:attr/textAppearanceMediumInverse" | ||||
| android:textColor="@color/white" | |||||
| android:textColor="@color/list_item_textcolor" | |||||
| android:textSize="18sp" | android:textSize="18sp" | ||||
| app:font="@string/TitilliumWeb_Regular" /> | app:font="@string/TitilliumWeb_Regular" /> | ||||
| <color name="translucent">#00000000</color> | <color name="translucent">#00000000</color> | ||||
| <color name="semi_translucent_black">#80000000</color> | <color name="semi_translucent_black">#80000000</color> | ||||
| <color name="semi_translucent_white">#80FFFFFF</color> | |||||
| <color name="qrt_translucent_white">#BDFFFFFF</color> | |||||
| <color name="black">#FF000000</color> | <color name="black">#FF000000</color> | ||||
| <color name="yellow">#AAFFFFAA</color> | <color name="yellow">#AAFFFFAA</color> | ||||
| <color name="white">#FFFFFFFF</color> | <color name="white">#FFFFFFFF</color> |
| List<IRiser> risers = RiserDao.getInstance().loadAll(); | List<IRiser> risers = RiserDao.getInstance().loadAll(); | ||||
| risers.add(0, new Riser(-999, getResources().getString(R.string.caption_NoSelection), "", null, null, null)); | risers.add(0, new Riser(-999, getResources().getString(R.string.caption_NoSelection), "", null, null, null)); | ||||
| this.scRiserSpinner.setAdapter(new FontArrayAdapter<IRiser>(this, R.layout.rbs_spinner, risers, this.scRiserSpinner)); | |||||
| this.scRiserSpinner.setAdapter(new FontArrayAdapter<IRiser>(this, R.layout.rbs_spinner, risers, | |||||
| this.scRiserSpinner)); | |||||
| List<ISight> sights = SightDao.getInstance().loadAll(); | List<ISight> sights = SightDao.getInstance().loadAll(); | ||||
| sights.add(0, new Sight(-999, getResources().getString(R.string.caption_NoSelection), "", null, null, "", null, null)); | |||||
| this.scSightSpinner.setAdapter(new FontArrayAdapter<ISight>(this, R.layout.rbs_spinner, sights, this.scSightSpinner)); | |||||
| sights.add(0, | |||||
| new Sight(-999, getResources().getString(R.string.caption_NoSelection), "", null, null, "", null, null)); | |||||
| this.scSightSpinner.setAdapter(new FontArrayAdapter<ISight>(this, R.layout.rbs_spinner, sights, | |||||
| this.scSightSpinner)); | |||||
| addRiserAndSightSpinnerListeners(); | addRiserAndSightSpinnerListeners(); | ||||
| } | } | ||||
| RBSMainActivity.this.scHeVSTxtFld.setVisibility(View.INVISIBLE); | RBSMainActivity.this.scHeVSTxtFld.setVisibility(View.INVISIBLE); | ||||
| RBSMainActivity.this.scHeVSTxtFld.setLayoutParams(new LinearLayout.LayoutParams(RBSMainActivity.this.scHeVSTxtFld | |||||
| .getLayoutParams().width, | |||||
| RBSMainActivity.this.scHeVSTxtFld | |||||
| .getLayoutParams().height, 0f)); | |||||
| RBSMainActivity.this.scHeVSTxtFld.setLayoutParams(new LinearLayout.LayoutParams(RBSMainActivity.this.scHeVSTxtFld.getLayoutParams().width, | |||||
| RBSMainActivity.this.scHeVSTxtFld.getLayoutParams().height, | |||||
| 0f)); | |||||
| RBSMainActivity.this.scHeVSSpinner.setVisibility(View.VISIBLE); | RBSMainActivity.this.scHeVSSpinner.setVisibility(View.VISIBLE); | ||||
| LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(RBSMainActivity.this.scHeVSSpinner.getLayoutParams().width, | LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(RBSMainActivity.this.scHeVSSpinner.getLayoutParams().width, | ||||
| 1f); | 1f); | ||||
| params.gravity = Gravity.FILL_VERTICAL; | params.gravity = Gravity.FILL_VERTICAL; | ||||
| RBSMainActivity.this.scHeVSSpinner.setLayoutParams(params); | RBSMainActivity.this.scHeVSSpinner.setLayoutParams(params); | ||||
| RBSMainActivity.this.scHeVSSpinner.setAdapter(new FontArrayAdapter<String>(RBSMainActivity.this, R.layout.rbs_spinner, | |||||
| listHeVis, RBSMainActivity.this.scHeVSSpinner)); | |||||
| RBSMainActivity.this.scHeVSSpinner.setAdapter(new FontArrayAdapter<String>(RBSMainActivity.this, | |||||
| R.layout.rbs_spinner, | |||||
| listHeVis, | |||||
| RBSMainActivity.this.scHeVSSpinner)); | |||||
| RBSMainActivity.this.scHeVSSpinner.setSelection(0); | RBSMainActivity.this.scHeVSSpinner.setSelection(0); | ||||
| if (RBSMainActivity.this.selectedArcherySetup != null | if (RBSMainActivity.this.selectedArcherySetup != null | ||||
| && RBSMainActivity.this.selectedArcherySetup.getSight().getId() == sight.getId()) { | && RBSMainActivity.this.selectedArcherySetup.getSight().getId() == sight.getId()) { | ||||
| RBSMainActivity.this.scHeVSSpinner.setSelectionByVal(DF.format(RBSMainActivity.this.selectedArcherySetup | |||||
| .getSightHorSetting())); | |||||
| RBSMainActivity.this.scHeVSSpinner.setSelectionByVal(DF.format(RBSMainActivity.this.selectedArcherySetup.getSightHorSetting())); | |||||
| } | } | ||||
| RBSMainActivity.this.scaVTxtFld.setText(DF.format(sight.getAV())); | RBSMainActivity.this.scaVTxtFld.setText(DF.format(sight.getAV())); | ||||
| RBSMainActivity.this.scaHTxtFld.setText(DF.format(sight.getAH())); | RBSMainActivity.this.scaHTxtFld.setText(DF.format(sight.getAH())); | ||||
| + DF.format(sight.getVertSkalaRangeMax())); | + DF.format(sight.getVertSkalaRangeMax())); | ||||
| } else { | } else { | ||||
| RBSMainActivity.this.scHeVSSpinner.setVisibility(View.INVISIBLE); | RBSMainActivity.this.scHeVSSpinner.setVisibility(View.INVISIBLE); | ||||
| RBSMainActivity.this.scHeVSSpinner.setLayoutParams(new LinearLayout.LayoutParams(RBSMainActivity.this.scHeVSSpinner | |||||
| .getLayoutParams().width, | |||||
| RBSMainActivity.this.scHeVSSpinner | |||||
| .getLayoutParams().height, 0f)); | |||||
| RBSMainActivity.this.scHeVSSpinner.setLayoutParams(new LinearLayout.LayoutParams(RBSMainActivity.this.scHeVSSpinner.getLayoutParams().width, | |||||
| RBSMainActivity.this.scHeVSSpinner.getLayoutParams().height, | |||||
| 0f)); | |||||
| RBSMainActivity.this.scHeVSTxtFld.setVisibility(View.VISIBLE); | RBSMainActivity.this.scHeVSTxtFld.setVisibility(View.VISIBLE); | ||||
| RBSMainActivity.this.scHeVSTxtFld.setLayoutParams(new LinearLayout.LayoutParams(RBSMainActivity.this.scHeVSTxtFld | |||||
| .getLayoutParams().width, | |||||
| RBSMainActivity.this.scHeVSTxtFld | |||||
| .getLayoutParams().height, 1f)); | |||||
| RBSMainActivity.this.scHeVSSpinner.setAdapter(new FontArrayAdapter<String>(RBSMainActivity.this, R.layout.rbs_spinner, | |||||
| RBSMainActivity.this.scHeVSTxtFld.setLayoutParams(new LinearLayout.LayoutParams(RBSMainActivity.this.scHeVSTxtFld.getLayoutParams().width, | |||||
| RBSMainActivity.this.scHeVSTxtFld.getLayoutParams().height, | |||||
| 1f)); | |||||
| RBSMainActivity.this.scHeVSSpinner.setAdapter(new FontArrayAdapter<String>(RBSMainActivity.this, | |||||
| R.layout.rbs_spinner, | |||||
| new ArrayList<String>(), | new ArrayList<String>(), | ||||
| RBSMainActivity.this.scHeVSSpinner)); | RBSMainActivity.this.scHeVSSpinner)); | ||||
| RBSMainActivity.this.scaVTxtFld.setText(""); | RBSMainActivity.this.scaVTxtFld.setText(""); | ||||
| private void xTextViewDown(final XTextView view) { | private void xTextViewDown(final XTextView view) { | ||||
| view.setDrawborderColor(getResources().getColor(R.color.android_blue_dark)); | |||||
| view.setTextColor(getResources().getColor(R.color.android_blue_dark)); | |||||
| view.setDrawborderColor(getResources().getColor(R.color.android_yellow_dark)); | |||||
| view.setTextColor(getResources().getColor(R.color.android_yellow_dark)); | |||||
| } | } | ||||
| private void xTextViewUp(final XTextView view) { | private void xTextViewUp(final XTextView view) { | ||||
| view.setDrawborderColor(getResources().getColor(R.color.android_blue)); | |||||
| view.setTextColor(getResources().getColor(R.color.android_blue)); | |||||
| view.setDrawborderColor(getResources().getColor(R.color.android_yellow)); | |||||
| view.setTextColor(getResources().getColor(R.color.android_yellow)); | |||||
| } | } | ||||
| private void deactivateXTextView(final XTextView view) { | private void deactivateXTextView(final XTextView view) { | ||||
| Double vVh = Double.valueOf(this.scVvisHTxtFld.getText().toString()) + Double.valueOf(this.scaHTxtFld.getText().toString()); | Double vVh = Double.valueOf(this.scVvisHTxtFld.getText().toString()) + Double.valueOf(this.scaHTxtFld.getText().toString()); | ||||
| Double vVv = Double.valueOf(this.scVvisVTxtFld.getText().toString()) + Double.valueOf(this.scaVTxtFld.getText().toString()); | Double vVv = Double.valueOf(this.scVvisVTxtFld.getText().toString()) + Double.valueOf(this.scaVTxtFld.getText().toString()); | ||||
| Double a = Double.valueOf(this.bowPulloutTxtFld.getText().toString()) * 10; | Double a = Double.valueOf(this.bowPulloutTxtFld.getText().toString()) * 10; | ||||
| Double heVs = this.scHeVSSpinner.getVisibility() == View.VISIBLE ? Double.valueOf(this.scHeVSSpinner.getSelectedItem().toString()) | |||||
| : Double.valueOf(this.scHeVSTxtFld.getText().toString()); | |||||
| Double heVs = this.scHeVSSpinner.getVisibility() == View.VISIBLE ? Double.valueOf(this.scHeVSSpinner.getSelectedItem().toString()) : Double.valueOf(this.scHeVSTxtFld.getText().toString()); | |||||
| Double lhNA = this.selectedArcherySetup.getHNA() * 10; | Double lhNA = this.selectedArcherySetup.getHNA() * 10; | ||||
| Double dltH = (Double.valueOf(this.arrowNockHeightTxtFld.getText().toString()) | Double dltH = (Double.valueOf(this.arrowNockHeightTxtFld.getText().toString()) | ||||
| - Double.valueOf(this.targetCenterHeightTxtFld.getText().toString())) * Math.pow(10, 3); | - Double.valueOf(this.targetCenterHeightTxtFld.getText().toString())) * Math.pow(10, 3); | ||||
| Double ldistH = Double.valueOf(this.shootingDistanzTxtFld.getText().toString()) * Math.pow(10, 3); | Double ldistH = Double.valueOf(this.shootingDistanzTxtFld.getText().toString()) * Math.pow(10, 3); | ||||
| Double minSkala = this.scVertScaleRngTxtFld.getText().toString().contains("-") | |||||
| ? Double.valueOf(this.scVertScaleRngTxtFld.getText().toString().substring(0, | |||||
| this.scVertScaleRngTxtFld.getText().toString() | |||||
| .indexOf('-'))) : 0d; | |||||
| Double maxSkala = this.scVertScaleRngTxtFld.getText().toString().contains("-") | |||||
| ? Double.valueOf(this.scVertScaleRngTxtFld.getText().toString().substring(this.scVertScaleRngTxtFld.getText().toString() | |||||
| .indexOf('-') + 1, | |||||
| this.scVertScaleRngTxtFld.getText().toString() | |||||
| .length())) : 0d; | |||||
| Double minSkala = this.scVertScaleRngTxtFld.getText().toString().contains("-") ? Double.valueOf(this.scVertScaleRngTxtFld.getText().toString().substring(0, | |||||
| this.scVertScaleRngTxtFld.getText().toString().indexOf('-'))) : 0d; | |||||
| Double maxSkala = this.scVertScaleRngTxtFld.getText().toString().contains("-") ? Double.valueOf(this.scVertScaleRngTxtFld.getText().toString().substring(this.scVertScaleRngTxtFld.getText().toString().indexOf('-') + 1, | |||||
| this.scVertScaleRngTxtFld.getText().toString().length())) : 0d; | |||||
| // PIN auf Höhe Pfeil | // PIN auf Höhe Pfeil | ||||
| x0 = (a + vVh + heVs) * Math.cos(Math.toRadians(this.startAngle)); | x0 = (a + vVh + heVs) * Math.cos(Math.toRadians(this.startAngle)); |
| import android.content.Context; | import android.content.Context; | ||||
| import android.view.LayoutInflater; | import android.view.LayoutInflater; | ||||
| import android.view.MotionEvent; | |||||
| import android.view.View; | import android.view.View; | ||||
| import android.view.View.OnTouchListener; | |||||
| import android.view.ViewGroup; | import android.view.ViewGroup; | ||||
| import android.widget.ArrayAdapter; | import android.widget.ArrayAdapter; | ||||
| ImageView checkBoxView = (ImageView) spinnerItem.findViewById(R.id.spinner_item_checkBox); | ImageView checkBoxView = (ImageView) spinnerItem.findViewById(R.id.spinner_item_checkBox); | ||||
| textView.setText(getItem(position).toString()); | textView.setText(getItem(position).toString()); | ||||
| spinnerItem.setBackgroundColor(getContext().getResources().getColor(android.R.color.background_dark)); | |||||
| spinnerItem.setOnTouchListener(new DropDownOnTouchListener()); | |||||
| spinnerItem.setBackgroundResource(R.drawable.list_item_background); | |||||
| if (this.parentSpinner.getSelectedItemPosition() == position) { | if (this.parentSpinner.getSelectedItemPosition() == position) { | ||||
| textView.setFont(getContext(), "fonts/TitilliumWeb-Bold.ttf"); | textView.setFont(getContext(), "fonts/TitilliumWeb-Bold.ttf"); | ||||
| textView.setTextColor(getContext().getResources().getColor(R.color.android_blue_dark)); | |||||
| textView.setSelected(true); | |||||
| // textView.setTextColor(getContext().getResources().getColor(R.color.android_blue_dark)); | |||||
| checkBoxView.setVisibility(View.VISIBLE); | checkBoxView.setVisibility(View.VISIBLE); | ||||
| } else { | } else { | ||||
| checkBoxView.setVisibility(View.INVISIBLE); | checkBoxView.setVisibility(View.INVISIBLE); | ||||
| protected LayoutInflater getLayoutInflater() { | protected LayoutInflater getLayoutInflater() { | ||||
| return (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); | return (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); | ||||
| } | } | ||||
| /** | |||||
| * @author FC Smilari | |||||
| */ | |||||
| class DropDownOnTouchListener implements OnTouchListener { | |||||
| @Override | |||||
| public boolean onTouch(final View v, final MotionEvent event) { | |||||
| switch (event.getAction()) { | |||||
| case MotionEvent.ACTION_DOWN: { | |||||
| v.setBackgroundColor(getContext().getResources().getColor(R.color.android_blue)); | |||||
| ((FontTextView) v.findViewById(R.id.spinner_item_view)).setTextColor(getContext().getResources().getColor(R.color.black)); | |||||
| break; | |||||
| } | |||||
| } | |||||
| return false; | |||||
| } | |||||
| } | |||||
| } | } |
| */ | */ | ||||
| private void init(final AttributeSet attrs) { | private void init(final AttributeSet attrs) { | ||||
| TypedArray a = getContext().obtainStyledAttributes(attrs, R.styleable.XTextView); | |||||
| this.drawborder = a.getBoolean(R.styleable.XTextView_drawBorder, false); | |||||
| this.drawborderColor = a.getColor(R.styleable.XTextView_drawBorderColor, 0xffff0000); | |||||
| this.drawborderWidth = a.getDimensionPixelSize(R.styleable.XTextView_drawBorderWidth, 1); | |||||
| TypedArray a = getContext().obtainStyledAttributes(attrs, R.styleable.XImageView); | |||||
| this.drawborder = a.getBoolean(R.styleable.XImageView_drawImgBorder, false); | |||||
| this.drawborderColor = a.getColor(R.styleable.XImageView_drawImgBorderColor, 0xffff0000); | |||||
| this.drawborderWidth = a.getDimensionPixelSize(R.styleable.XImageView_drawImgBorderWidth, 1); | |||||
| if (this.drawborder) { | if (this.drawborder) { | ||||
| setPadding(getPaddingLeft() + this.drawborderWidth, getPaddingTop() + this.drawborderWidth, getPaddingRight() + this.drawborderWidth, | setPadding(getPaddingLeft() + this.drawborderWidth, getPaddingTop() + this.drawborderWidth, getPaddingRight() + this.drawborderWidth, |
| import android.widget.AdapterView.OnItemClickListener; | import android.widget.AdapterView.OnItemClickListener; | ||||
| import android.widget.ListView; | import android.widget.ListView; | ||||
| import android.widget.TextView; | |||||
| import ch.spherIC.recurvebowsight.R; | import ch.spherIC.recurvebowsight.R; | ||||
| import ch.spherIC.recurvebowsight.RBSMainActivity; | import ch.spherIC.recurvebowsight.RBSMainActivity; | ||||
| final ListView listView = (ListView) findViewById(R.id.chooseArcerySetupItemsList); | final ListView listView = (ListView) findViewById(R.id.chooseArcerySetupItemsList); | ||||
| List<IArcherySetup> setups = new ArrayList<IArcherySetup>(); | List<IArcherySetup> setups = new ArrayList<IArcherySetup>(); | ||||
| setups.add(new ArcherySetup(-999, "", null, null, null, null, null, null, null, null, null, null, null, null, null, null)); | |||||
| setups.add(new ArcherySetup(-999, "", null, null, null, null, null, null, null, null, null, null, null, null, | |||||
| null, null)); | |||||
| setups.addAll(ArcherySetupDao.getInstance().loadAll()); | setups.addAll(ArcherySetupDao.getInstance().loadAll()); | ||||
| listView.setAdapter(new ArcerySetupArrayAdapter(getContext(), R.layout.rbs_archerysetup_item, setups)); | listView.setAdapter(new ArcerySetupArrayAdapter(getContext(), R.layout.rbs_archerysetup_item, setups)); | ||||
| listView.setOnItemClickListener(new OnItemClickListener() { | listView.setOnItemClickListener(new OnItemClickListener() { | ||||
| @Override | @Override | ||||
| public void onItemClick(final AdapterView<?> parent, final View view, final int position, final long id) { | |||||
| public void onItemClick(final AdapterView<?> parent, final View view, final int position, | |||||
| final long id) { | |||||
| ChooseArcherySetupDlg.this.archerySetup = (IArcherySetup) listView.getItemAtPosition(position); | ChooseArcherySetupDlg.this.archerySetup = (IArcherySetup) listView.getItemAtPosition(position); | ||||
| dismiss(); | dismiss(); | ||||
| } | } | ||||
| }); | }); | ||||
| ((TextView) findViewById(android.R.id.title)).setTextColor(getContext().getResources().getColor(R.color.android_blue)); | |||||
| // ((TextView) findViewById(android.R.id.title)).setTextColor(getContext().getResources().getColor(R.color.android_blue)); | |||||
| setOnDismissListener(new OnDismissListener() { | setOnDismissListener(new OnDismissListener() { | ||||
| @Override | @Override |