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