package com.xda.one.ui; import com.xda.one.R; import com.xda.one.parser.ContentParser; import android.content.Context; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v4.app.DialogFragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.EditText; import android.widget.GridView; import android.widget.ImageButton; import java.util.ArrayList; import java.util.Map; import java.util.regex.Pattern; public class SelectEmoticonFragment extends DialogFragment { private final View.OnClickListener mOnClickListener = new View.OnClickListener() { @Override public void onClick(final View v) { final String string = (String) v.getTag(); final int start = mEditText.getSelectionStart(); mEditText.getText().insert(start, string); dismiss(); } }; private EditText mEditText; public SelectEmoticonFragment(final EditText txt) { mEditText = txt; } public static SelectEmoticonFragment createInstance(final EditText editText) { return new SelectEmoticonFragment(editText); } @Override public void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); setStyle(DialogFragment.STYLE_NORMAL, android.R.style.Theme_DeviceDefault_Light_Dialog); } @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { return inflater.inflate(R.layout.select_emoticon_fragment, container, false); } @Override public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); getDialog().setTitle("Insert Smilie"); final GridView gridView = (GridView) view.findViewById(R.id.select_emoticon_grid); gridView.setAdapter(new EmoticonAdapter(getActivity(), mOnClickListener)); } private static class EmoticonAdapter extends BaseAdapter { private final ArrayList<Map.Entry<Pattern, Integer>> mEmoticons; private final LayoutInflater mLayoutInflater; private final View.OnClickListener mOnClickListener; public EmoticonAdapter(final Context context, final View.OnClickListener onClickListener) { mOnClickListener = onClickListener; mEmoticons = new ArrayList<>(ContentParser.EMOTICONS_MAP.entrySet()); mLayoutInflater = LayoutInflater.from(context); } @Override public int getCount() { return mEmoticons.size(); } @Override public Map.Entry<Pattern, Integer> getItem(final int position) { return mEmoticons.get(position); } @Override public long getItemId(final int position) { return 0; } @Override public View getView(final int position, final View convertView, final ViewGroup parent) { final View view = convertView == null ? mLayoutInflater.inflate(R.layout.select_emoticon_grid_item, parent, false) : convertView; final Map.Entry<Pattern, Integer> entry = getItem(position); final ImageButton imageButton = (ImageButton) view; imageButton.setImageResource(entry.getValue()); imageButton.setTag(entry.getKey().pattern()); imageButton.setOnClickListener(mOnClickListener); return view; } } }