188257c64fd28b11c082b56f2f81edca8641c410cSiyamed Sinir/* 288257c64fd28b11c082b56f2f81edca8641c410cSiyamed Sinir * Copyright (C) 2017 The Android Open Source Project 388257c64fd28b11c082b56f2f81edca8641c410cSiyamed Sinir * 488257c64fd28b11c082b56f2f81edca8641c410cSiyamed Sinir * Licensed under the Apache License, Version 2.0 (the "License"); 588257c64fd28b11c082b56f2f81edca8641c410cSiyamed Sinir * you may not use this file except in compliance with the License. 688257c64fd28b11c082b56f2f81edca8641c410cSiyamed Sinir * You may obtain a copy of the License at 788257c64fd28b11c082b56f2f81edca8641c410cSiyamed Sinir * 888257c64fd28b11c082b56f2f81edca8641c410cSiyamed Sinir * http://www.apache.org/licenses/LICENSE-2.0 988257c64fd28b11c082b56f2f81edca8641c410cSiyamed Sinir * 1088257c64fd28b11c082b56f2f81edca8641c410cSiyamed Sinir * Unless required by applicable law or agreed to in writing, software 1188257c64fd28b11c082b56f2f81edca8641c410cSiyamed Sinir * distributed under the License is distributed on an "AS IS" BASIS, 1288257c64fd28b11c082b56f2f81edca8641c410cSiyamed Sinir * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1388257c64fd28b11c082b56f2f81edca8641c410cSiyamed Sinir * See the License for the specific language governing permissions and 1488257c64fd28b11c082b56f2f81edca8641c410cSiyamed Sinir * limitations under the License. 1588257c64fd28b11c082b56f2f81edca8641c410cSiyamed Sinir */ 1688257c64fd28b11c082b56f2f81edca8641c410cSiyamed Sinir 1788257c64fd28b11c082b56f2f81edca8641c410cSiyamed Sinirpackage com.example.android.support.text.emoji; 1888257c64fd28b11c082b56f2f81edca8641c410cSiyamed Sinir 1988257c64fd28b11c082b56f2f81edca8641c410cSiyamed Sinirimport android.content.Context; 2088257c64fd28b11c082b56f2f81edca8641c410cSiyamed Sinirimport android.os.Bundle; 2188257c64fd28b11c082b56f2f81edca8641c410cSiyamed Sinirimport android.view.LayoutInflater; 2288257c64fd28b11c082b56f2f81edca8641c410cSiyamed Sinirimport android.view.View; 2388257c64fd28b11c082b56f2f81edca8641c410cSiyamed Sinirimport android.view.ViewGroup; 2488257c64fd28b11c082b56f2f81edca8641c410cSiyamed Sinirimport android.widget.ArrayAdapter; 2588257c64fd28b11c082b56f2f81edca8641c410cSiyamed Sinirimport android.widget.ListView; 2688257c64fd28b11c082b56f2f81edca8641c410cSiyamed Sinirimport android.widget.TextView; 2788257c64fd28b11c082b56f2f81edca8641c410cSiyamed Sinir 28def582a5836579a3fadabfdbe4413cb1652bf098Aurimas Liutikasimport androidx.annotation.NonNull; 29def582a5836579a3fadabfdbe4413cb1652bf098Aurimas Liutikasimport androidx.fragment.app.Fragment; 30def582a5836579a3fadabfdbe4413cb1652bf098Aurimas Liutikas 3188257c64fd28b11c082b56f2f81edca8641c410cSiyamed Sinirimport java.util.List; 3288257c64fd28b11c082b56f2f81edca8641c410cSiyamed Sinir 3388257c64fd28b11c082b56f2f81edca8641c410cSiyamed Sinir/** 3488257c64fd28b11c082b56f2f81edca8641c410cSiyamed Sinir * UI to list all supported emojis. 3588257c64fd28b11c082b56f2f81edca8641c410cSiyamed Sinir */ 3688257c64fd28b11c082b56f2f81edca8641c410cSiyamed Sinir 3788257c64fd28b11c082b56f2f81edca8641c410cSiyamed Sinirpublic class ListFragment extends Fragment { 3888257c64fd28b11c082b56f2f81edca8641c410cSiyamed Sinir 3988257c64fd28b11c082b56f2f81edca8641c410cSiyamed Sinir private ListView mListView; 4088257c64fd28b11c082b56f2f81edca8641c410cSiyamed Sinir 4188257c64fd28b11c082b56f2f81edca8641c410cSiyamed Sinir static ListFragment newInstance() { 4288257c64fd28b11c082b56f2f81edca8641c410cSiyamed Sinir ListFragment fragment = new ListFragment(); 4388257c64fd28b11c082b56f2f81edca8641c410cSiyamed Sinir return fragment; 4488257c64fd28b11c082b56f2f81edca8641c410cSiyamed Sinir } 4588257c64fd28b11c082b56f2f81edca8641c410cSiyamed Sinir 4688257c64fd28b11c082b56f2f81edca8641c410cSiyamed Sinir @Override 4788257c64fd28b11c082b56f2f81edca8641c410cSiyamed Sinir public View onCreateView(LayoutInflater inflater, ViewGroup container, 4888257c64fd28b11c082b56f2f81edca8641c410cSiyamed Sinir Bundle savedInstanceState) { 4988257c64fd28b11c082b56f2f81edca8641c410cSiyamed Sinir final View view = inflater.inflate(R.layout.fragment_list, container, false); 5088257c64fd28b11c082b56f2f81edca8641c410cSiyamed Sinir mListView = view.findViewById(R.id.list); 5188257c64fd28b11c082b56f2f81edca8641c410cSiyamed Sinir loadList(); 5288257c64fd28b11c082b56f2f81edca8641c410cSiyamed Sinir return view; 5388257c64fd28b11c082b56f2f81edca8641c410cSiyamed Sinir } 5488257c64fd28b11c082b56f2f81edca8641c410cSiyamed Sinir 5588257c64fd28b11c082b56f2f81edca8641c410cSiyamed Sinir private void loadList() { 5688257c64fd28b11c082b56f2f81edca8641c410cSiyamed Sinir final ArrayAdapter<EmojiRepo.EmojiData> adapter = new MyArrayAdapter(getActivity(), 5788257c64fd28b11c082b56f2f81edca8641c410cSiyamed Sinir R.layout.list_item_emoji, R.id.text, EmojiRepo.getEmojis()); 5888257c64fd28b11c082b56f2f81edca8641c410cSiyamed Sinir final int index = mListView.getFirstVisiblePosition(); 5988257c64fd28b11c082b56f2f81edca8641c410cSiyamed Sinir mListView.setAdapter(adapter); 6088257c64fd28b11c082b56f2f81edca8641c410cSiyamed Sinir mListView.setSelection(index); 6188257c64fd28b11c082b56f2f81edca8641c410cSiyamed Sinir } 6288257c64fd28b11c082b56f2f81edca8641c410cSiyamed Sinir 6388257c64fd28b11c082b56f2f81edca8641c410cSiyamed Sinir private static class MyArrayAdapter extends ArrayAdapter<EmojiRepo.EmojiData> { 6488257c64fd28b11c082b56f2f81edca8641c410cSiyamed Sinir MyArrayAdapter(Context context, int resource, int textViewResourceId, 6588257c64fd28b11c082b56f2f81edca8641c410cSiyamed Sinir List<EmojiRepo.EmojiData> objects) { 6688257c64fd28b11c082b56f2f81edca8641c410cSiyamed Sinir super(context, resource, textViewResourceId, objects); 6788257c64fd28b11c082b56f2f81edca8641c410cSiyamed Sinir } 6888257c64fd28b11c082b56f2f81edca8641c410cSiyamed Sinir 6988257c64fd28b11c082b56f2f81edca8641c410cSiyamed Sinir @NonNull 7088257c64fd28b11c082b56f2f81edca8641c410cSiyamed Sinir @Override 7188257c64fd28b11c082b56f2f81edca8641c410cSiyamed Sinir public View getView(int position, View convertView, ViewGroup parent) { 7288257c64fd28b11c082b56f2f81edca8641c410cSiyamed Sinir View view = super.getView(position, convertView, parent); 7388257c64fd28b11c082b56f2f81edca8641c410cSiyamed Sinir ViewHolder holder = (ViewHolder) view.getTag(); 7488257c64fd28b11c082b56f2f81edca8641c410cSiyamed Sinir if (holder == null) { 7588257c64fd28b11c082b56f2f81edca8641c410cSiyamed Sinir holder = new ViewHolder(); 7688257c64fd28b11c082b56f2f81edca8641c410cSiyamed Sinir holder.mEmojiTextView = view.findViewById(R.id.emoji); 7788257c64fd28b11c082b56f2f81edca8641c410cSiyamed Sinir holder.mTextView = view.findViewById(R.id.text); 7888257c64fd28b11c082b56f2f81edca8641c410cSiyamed Sinir } 7988257c64fd28b11c082b56f2f81edca8641c410cSiyamed Sinir 8088257c64fd28b11c082b56f2f81edca8641c410cSiyamed Sinir EmojiRepo.EmojiData item = getItem(position); 8188257c64fd28b11c082b56f2f81edca8641c410cSiyamed Sinir holder.mEmojiTextView.setText(item.getEmoji()); 8288257c64fd28b11c082b56f2f81edca8641c410cSiyamed Sinir holder.mTextView.setText(item.getCodepointString()); 8388257c64fd28b11c082b56f2f81edca8641c410cSiyamed Sinir holder.mTextView.setContentDescription(holder.mTextView.getText()); 8488257c64fd28b11c082b56f2f81edca8641c410cSiyamed Sinir return view; 8588257c64fd28b11c082b56f2f81edca8641c410cSiyamed Sinir } 8688257c64fd28b11c082b56f2f81edca8641c410cSiyamed Sinir } 8788257c64fd28b11c082b56f2f81edca8641c410cSiyamed Sinir 8888257c64fd28b11c082b56f2f81edca8641c410cSiyamed Sinir private static class ViewHolder { 8988257c64fd28b11c082b56f2f81edca8641c410cSiyamed Sinir TextView mEmojiTextView; 9088257c64fd28b11c082b56f2f81edca8641c410cSiyamed Sinir TextView mTextView; 9188257c64fd28b11c082b56f2f81edca8641c410cSiyamed Sinir } 9288257c64fd28b11c082b56f2f81edca8641c410cSiyamed Sinir 9388257c64fd28b11c082b56f2f81edca8641c410cSiyamed Sinir} 94