package com.firstbuild.androidapp.paragon.myrecipes; import android.app.Activity; import android.graphics.Bitmap; import android.graphics.Color; import android.os.Bundle; import android.app.Fragment; import android.util.Log; import android.util.TypedValue; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.animation.BounceInterpolator; import android.widget.AdapterView; import android.widget.BaseAdapter; import android.widget.EditText; import android.widget.ImageView; import android.widget.RadioGroup; import android.widget.TextView; import android.widget.Toast; import com.firstbuild.androidapp.R; import com.firstbuild.androidapp.paragon.ParagonMainActivity; import com.firstbuild.androidapp.paragon.datamodel.RecipeInfo; import com.firstbuild.androidapp.paragon.datamodel.RecipeManager; import com.firstbuild.androidapp.paragon.datamodel.StageInfo; import com.firstbuild.androidapp.viewutil.SwipeMenu; import com.firstbuild.androidapp.viewutil.SwipeMenuCreator; import com.firstbuild.androidapp.viewutil.SwipeMenuItem; import com.firstbuild.androidapp.viewutil.SwipeMenuListView; /** * A simple {@link Fragment} subclass. */ public class RecipeEditFragment extends Fragment { private String TAG = RecipeEditFragment.class.getSimpleName(); private EditText editIngredients; private EditText editDirections; private SwipeMenuListView stageListView; private RadioGroup groupDetail; private StageListAdapter stageListAdapter; private EditText editName; private ParagonMainActivity attached = null; private View layoutStages; private ImageView imageTitle; private String imageFileName; public RecipeEditFragment() { // Required empty public constructor } @Override public void onAttach(Activity activity) { super.onAttach(activity); attached = (ParagonMainActivity) getActivity(); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment View view = inflater.inflate(R.layout.fragment_recipe_edit, container, false); editName = (EditText) view.findViewById(R.id.edit_name); editIngredients = (EditText) view.findViewById(R.id.edit_ingredients); editDirections = (EditText) view.findViewById(R.id.edit_directions); groupDetail = (RadioGroup) view.findViewById(R.id.group_recipe_detail); layoutStages = view.findViewById(R.id.layout_stages); imageTitle = (ImageView) view.findViewById(R.id.image_title); view.findViewById(R.id.layout_title_image).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { attached.dispatchTakePictureIntent(); } }); groupDetail.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { @Override public void onCheckedChanged(RadioGroup group, int checkedId) { switch (checkedId) { case R.id.radio_ingredients: editIngredients.setVisibility(View.VISIBLE); editDirections.setVisibility(View.GONE); layoutStages.setVisibility(View.GONE); break; case R.id.radio_directions: editIngredients.setVisibility(View.GONE); editDirections.setVisibility(View.VISIBLE); layoutStages.setVisibility(View.GONE); break; case R.id.radio_settings: editIngredients.setVisibility(View.GONE); editDirections.setVisibility(View.GONE); layoutStages.setVisibility(View.VISIBLE); break; } } }); groupDetail.check(R.id.radio_ingredients); stageListAdapter = new StageListAdapter(); stageListView = (SwipeMenuListView) view.findViewById(R.id.list_stages); stageListView.setAdapter(stageListAdapter); // step 1. create a MenuCreator SwipeMenuCreator creator = new SwipeMenuCreator() { @Override public void create(SwipeMenu menu) { SwipeMenuItem item; // create "delete" item item = new SwipeMenuItem(attached.getApplicationContext()); item.setBackground(R.color.colorParagonHighlight); item.setWidth(dp2px(90)); item.setTitle("Delete"); item.setTitleSize(18); item.setTitleColor(Color.WHITE); menu.addMenuItem(item); } }; // set creator stageListView.setMenuCreator(creator); // step 2. listener item click event stageListView.setOnMenuItemClickListener(new SwipeMenuListView.OnMenuItemClickListener() { @Override public boolean onMenuItemClick(int position, SwipeMenu menu, int index) { switch (index) { case 1: // delete Log.d(TAG, "onMenuItemClick 1"); RecipeManager.getInstance().getCurrentRecipe().deleteStage(position); stageListAdapter.notifyDataSetChanged(); break; } return false; } }); // other setting stageListView.setCloseInterpolator(new BounceInterpolator()); // test item long click stageListView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { @Override public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) { Toast.makeText(attached.getApplicationContext(), position + " long click", Toast.LENGTH_SHORT).show(); return false; } }); stageListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { RecipeManager.getInstance().setCurrentStage(position); attached.nextStep(ParagonMainActivity.ParagonSteps.STEP_EDIT_STAGE); } }); view.findViewById(R.id.fab_add_stage).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { attached.nextStep(ParagonMainActivity.ParagonSteps.STEP_EDIT_STAGE); } }); view.findViewById(R.id.btn_cook).setVisibility(View.GONE); view.findViewById(R.id.btn_save).setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View v) { RecipeInfo recipe = RecipeManager.getInstance().getCurrentRecipe(); recipe.setName(editName.getText().toString()); recipe.setIngredients(editIngredients.getText().toString()); recipe.setDirections(editDirections.getText().toString()); recipe.setImageFileName(imageFileName); RecipeManager.getInstance().restoreCurrentRecipe(); attached.getFragmentManager().popBackStack(); } }); getCurrentRecipe(); return view; } private int dp2px(int dp) { return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, attached.getResources().getDisplayMetrics()); } private void getCurrentRecipe() { RecipeInfo recipe = RecipeManager.getInstance().getCurrentRecipe(); editName.setText(recipe.getName()); editIngredients.setText(recipe.getIngredients()); editDirections.setText(recipe.getDirections()); } public void setRecipeImage(Bitmap imageBitmap, String currentPhotoPath) { imageTitle.setImageBitmap(imageBitmap); imageFileName = currentPhotoPath; } public class StageListAdapter extends BaseAdapter { @Override public int getCount() { return RecipeManager.getInstance().getCurrentRecipe().numStage(); } @Override public StageInfo getItem(int position) { return RecipeManager.getInstance().getCurrentRecipe().getStage(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { StageInfo stage = getItem(position); if (stage.getType() == StageInfo.TYPE_ADD_ITEM) { convertView = View.inflate(attached.getApplicationContext(), R.layout.adapter_stage_add, null); } else { convertView = View.inflate(attached.getApplicationContext(), R.layout.adapter_stage_item, null); } new ViewHolder(convertView); ViewHolder holder = (ViewHolder) convertView.getTag(); if (stage.getType() == StageInfo.TYPE_ADD_ITEM) { // do nothing } else { holder.name.setText("Stage " + (position + 1)); } return convertView; } class ViewHolder { TextView name; public ViewHolder(View view) { name = (TextView) view.findViewById(R.id.text_name); view.setTag(this); } } } }