diff --git a/MyTracks/res/layout/track_edit.xml b/MyTracks/res/layout/track_edit.xml index ad5dad6e9..b179b81dd 100644 --- a/MyTracks/res/layout/track_edit.xml +++ b/MyTracks/res/layout/track_edit.xml @@ -41,20 +41,20 @@ limitations under the License. android:layout_width="match_parent" android:orientation="horizontal" > - + android:layout_width="wrap_content" /> parent, View view, int position, long id) { setActivityTypeIcon(TrackIconUtils.getIconValue( TrackEditActivity.this, (String) activityType.getAdapter().getItem(position))); } }); activityType.setOnFocusChangeListener(new View.OnFocusChangeListener() { - @Override + @Override public void onFocusChange(View v, boolean hasFocus) { if (!hasFocus) { setActivityTypeIcon(TrackIconUtils.getIconValue( @@ -104,15 +109,6 @@ public class TrackEditActivity extends AbstractMyTracksActivity } }); - activityTypeIcon = (ImageButton) findViewById(R.id.track_edit_activity_type_icon); - activityTypeIcon.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - new ChooseActivityTypeDialogFragment().show(getSupportFragmentManager(), - ChooseActivityTypeDialogFragment.CHOOSE_ACTIVITY_TYPE_DIALOG_TAG); - } - }); - iconValue = null; if (bundle != null) { iconValue = bundle.getString(ICON_VALUE_KEY); @@ -120,14 +116,64 @@ public class TrackEditActivity extends AbstractMyTracksActivity if (iconValue == null) { iconValue = track.getIcon(); } - setActivityTypeIcon(iconValue); + + // Add a border around the icon + Options options = new BitmapFactory.Options(); + options.inJustDecodeBounds = true; + BitmapFactory.decodeResource(getResources(), R.drawable.track_airplane, options); + final int padding = 4; + final int width = options.outWidth + 2 * padding; + final int height = options.outHeight + 2 * padding; + + activityTypeIcon = (Spinner) findViewById(R.id.track_edit_activity_type_icon); + ArrayAdapter activityTypeIconAdapter = new ArrayAdapter( + this, android.R.layout.simple_spinner_item, + new StringBuilder[] {new StringBuilder(iconValue)}) { + @Override + public View getView(int position, View convertView, android.view.ViewGroup parent) { + ImageView imageView; + if (convertView != null) { + imageView = (ImageView) convertView; + } else { + imageView = new ImageView(getContext()); + } + imageView.setImageResource(TrackIconUtils.getIconDrawable(getItem(position).toString())); + imageView.setMinimumHeight(height); + imageView.setMinimumWidth(width); + imageView.setPadding(padding, padding, padding, padding); + return imageView; + } + }; + activityTypeIcon.setAdapter(activityTypeIconAdapter); + activityTypeIcon.setOnTouchListener(new View.OnTouchListener() { + @Override + public boolean onTouch(View v, MotionEvent event) { + if (event.getAction() == MotionEvent.ACTION_UP) { + new ChooseActivityTypeDialogFragment().show(getSupportFragmentManager(), + ChooseActivityTypeDialogFragment.CHOOSE_ACTIVITY_TYPE_DIALOG_TAG); + } + return true; + } + }); + activityTypeIcon.setOnKeyListener(new View.OnKeyListener() { + @Override + public boolean onKey(View v, int keyCode, KeyEvent event) { + if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER) { + new ChooseActivityTypeDialogFragment().show(getSupportFragmentManager(), + ChooseActivityTypeDialogFragment.CHOOSE_ACTIVITY_TYPE_DIALOG_TAG); + return true; + } else { + return false; + } + } + }); description = (EditText) findViewById(R.id.track_edit_description); description.setText(track.getDescription()); Button save = (Button) findViewById(R.id.track_edit_save); save.setOnClickListener(new View.OnClickListener() { - @Override + @Override public void onClick(View v) { track.setName(name.getText().toString()); String category = activityType.getText().toString(); @@ -152,7 +198,7 @@ public class TrackEditActivity extends AbstractMyTracksActivity } else { setTitle(R.string.menu_edit); cancel.setOnClickListener(new View.OnClickListener() { - @Override + @Override public void onClick(View v) { finish(); } @@ -174,12 +220,17 @@ public class TrackEditActivity extends AbstractMyTracksActivity /** * Sets the activity type icon. - * + * * @param value the icon value */ private void setActivityTypeIcon(String value) { iconValue = value; - activityTypeIcon.setImageResource(TrackIconUtils.getIconDrawable(value)); + ArrayAdapter adapter = + (ArrayAdapter) activityTypeIcon.getAdapter(); + StringBuilder stringBuilder = adapter.getItem(0); + stringBuilder.delete(0, stringBuilder.length()); + stringBuilder.append(value); + adapter.notifyDataSetChanged(); } @Override