1 /*
2  * Copyright (C) 2017 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.example.android.support.text.emoji;
18 
19 import android.content.Context;
20 import android.os.Bundle;
21 import android.view.LayoutInflater;
22 import android.view.View;
23 import android.view.ViewGroup;
24 import android.widget.ArrayAdapter;
25 import android.widget.ListView;
26 import android.widget.TextView;
27 
28 import androidx.fragment.app.Fragment;
29 
30 import org.jspecify.annotations.NonNull;
31 
32 import java.util.List;
33 
34 /**
35  * UI to list all supported emojis.
36  */
37 
38 public class ListFragment extends Fragment {
39 
40     private ListView mListView;
41 
newInstance()42     static ListFragment newInstance() {
43         ListFragment fragment = new ListFragment();
44         return fragment;
45     }
46 
47     @Override
onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)48     public View onCreateView(LayoutInflater inflater, ViewGroup container,
49             Bundle savedInstanceState) {
50         final View view = inflater.inflate(R.layout.fragment_list, container, false);
51         mListView = view.findViewById(R.id.list);
52         loadList();
53         return view;
54     }
55 
loadList()56     private void loadList() {
57         final ArrayAdapter<EmojiRepo.EmojiData> adapter = new MyArrayAdapter(getActivity(),
58                 R.layout.list_item_emoji, R.id.text, EmojiRepo.getEmojis());
59         final int index = mListView.getFirstVisiblePosition();
60         mListView.setAdapter(adapter);
61         mListView.setSelection(index);
62     }
63 
64     private static class MyArrayAdapter extends ArrayAdapter<EmojiRepo.EmojiData> {
MyArrayAdapter(Context context, int resource, int textViewResourceId, List<EmojiRepo.EmojiData> objects)65         MyArrayAdapter(Context context, int resource, int textViewResourceId,
66                 List<EmojiRepo.EmojiData> objects) {
67             super(context, resource, textViewResourceId, objects);
68         }
69 
70         @Override
getView(int position, View convertView, ViewGroup parent)71         public @NonNull View getView(int position, View convertView, ViewGroup parent) {
72             View view = super.getView(position, convertView, parent);
73             ViewHolder holder = (ViewHolder) view.getTag();
74             if (holder == null) {
75                 holder = new ViewHolder();
76                 holder.mEmojiTextView = view.findViewById(R.id.emoji);
77                 holder.mTextView = view.findViewById(R.id.text);
78             }
79 
80             EmojiRepo.EmojiData item = getItem(position);
81             holder.mEmojiTextView.setText(item.getEmoji());
82             holder.mTextView.setText(item.getCodepointString());
83             holder.mTextView.setContentDescription(holder.mTextView.getText());
84             return view;
85         }
86     }
87 
88     private static class ViewHolder {
89         TextView mEmojiTextView;
90         TextView mTextView;
91     }
92 
93 }
94