1 package org.coolreader.crengine; 2 3 import java.util.ArrayList; 4 5 import org.coolreader.CoolReader; 6 import org.coolreader.Dictionaries; 7 import org.coolreader.R; 8 9 import android.content.Context; 10 import android.database.DataSetObserver; 11 import android.os.Bundle; 12 import android.util.Log; 13 import android.view.LayoutInflater; 14 import android.view.View; 15 import android.view.ViewGroup; 16 import android.widget.BaseAdapter; 17 import android.widget.ListView; 18 import android.widget.TextView; 19 20 public class DictsDlg extends BaseDialog { 21 private CoolReader mCoolReader; 22 private ReaderView mReaderView; 23 private LayoutInflater mInflater; 24 private DictList mList; 25 private String mSearchText; 26 27 //DictsDlg mThis; 28 29 public final static int ITEM_POSITION=0; 30 31 class DictListAdapter extends BaseAdapter { areAllItemsEnabled()32 public boolean areAllItemsEnabled() { 33 return true; 34 } 35 isEnabled(int arg0)36 public boolean isEnabled(int arg0) { 37 return true; 38 } 39 getCount()40 public int getCount() { 41 return Dictionaries.getDictListExt(mCoolReader,true).size(); 42 } 43 getItem(int position)44 public Object getItem(int position) { 45 if ( position<0 || position>=Dictionaries.getDictListExt(mCoolReader,true).size() ) 46 return null; 47 return Dictionaries.getDictListExt(mCoolReader,true).get(position); 48 } 49 getItemId(int position)50 public long getItemId(int position) { 51 return position; 52 } 53 54 55 getItemViewType(int position)56 public int getItemViewType(int position) { 57 return ITEM_POSITION; 58 } 59 getViewTypeCount()60 public int getViewTypeCount() { 61 return 4; 62 } 63 getView(int position, View convertView, ViewGroup parent)64 public View getView(int position, View convertView, ViewGroup parent) { 65 View view; 66 int res = R.layout.dict_item; 67 view = mInflater.inflate(res, null); 68 TextView labelView = view.findViewById(R.id.dict_item_shortcut); 69 TextView titleTextView = view.findViewById(R.id.dict_item_title); 70 Dictionaries.DictInfo b = (Dictionaries.DictInfo)getItem(position); 71 if ( labelView!=null ) { 72 labelView.setText(String.valueOf(position+1)); 73 } 74 if ( b!=null ) { 75 if ( titleTextView!=null ) 76 titleTextView.setText(b.name); 77 } else { 78 if ( titleTextView!=null ) 79 titleTextView.setText(""); 80 } 81 return view; 82 } 83 hasStableIds()84 public boolean hasStableIds() { 85 return true; 86 } 87 isEmpty()88 public boolean isEmpty() { 89 return Dictionaries.getDictList().length==0; 90 } 91 92 private ArrayList<DataSetObserver> observers = new ArrayList<>(); 93 registerDataSetObserver(DataSetObserver observer)94 public void registerDataSetObserver(DataSetObserver observer) { 95 observers.add(observer); 96 } 97 unregisterDataSetObserver(DataSetObserver observer)98 public void unregisterDataSetObserver(DataSetObserver observer) { 99 observers.remove(observer); 100 } 101 } 102 103 class DictList extends BaseListView { 104 DictList(Context context)105 public DictList(Context context) { 106 super(context, true); 107 setChoiceMode(ListView.CHOICE_MODE_SINGLE); 108 setLongClickable(true); 109 setAdapter(new DictListAdapter()); 110 setOnItemLongClickListener((arg0, arg1, position, arg3) -> { 111 openContextMenu(DictList.this); 112 return true; 113 }); 114 } 115 116 @Override performItemClick(View view, int position, long id)117 public boolean performItemClick(View view, int position, long id) { 118 //Dict b = mBookInfo.findShortcutDict(position+1); 119 //if ( b==null ) { 120 // mThis.dismiss(); 121 // return true; 122 //selectedItem = position; 123 mCoolReader.mDictionaries.setAdHocDict(Dictionaries.getDictListExt(mCoolReader,true).get(position)); 124 mCoolReader.findInDictionary(mSearchText); 125 if (!mReaderView.getSettings().getBool(mReaderView.PROP_APP_SELECTION_PERSIST, false)) 126 mReaderView.clearSelection(); 127 dismiss(); 128 return true; 129 } 130 131 132 } 133 DictsDlg( CoolReader activity, ReaderView readerView, String search_text )134 public DictsDlg( CoolReader activity, ReaderView readerView, String search_text ) 135 { 136 super(activity, activity.getResources().getString(R.string.win_title_dicts), false, true); 137 //mThis = this; // for inner classes 138 mInflater = LayoutInflater.from(getContext()); 139 mSearchText = search_text; 140 mCoolReader = activity; 141 mReaderView = readerView; 142 //setPositiveButtonImage(R.drawable.cr3_button_add, R.string.mi_Dict_add); 143 View frame = mInflater.inflate(R.layout.dict_list_dialog, null); 144 ViewGroup body = frame.findViewById(R.id.dict_list); 145 mList = new DictList(activity); 146 body.addView(mList); 147 setView(frame); 148 setFlingHandlers(mList, null, null); 149 } 150 151 @Override onPositiveButtonClick()152 protected void onPositiveButtonClick() { 153 // add Dict 154 DictsDlg.this.dismiss(); 155 } 156 157 @Override onNegativeButtonClick()158 protected void onNegativeButtonClick() { 159 DictsDlg.this.dismiss(); 160 } 161 162 @Override onCreate(Bundle savedInstanceState)163 protected void onCreate(Bundle savedInstanceState) { 164 Log.v("cr3", "creating DictsDlg"); 165 //setTitle(mCoolReader.getResources().getString(R.string.win_title_Dicts)); 166 setCancelable(true); 167 super.onCreate(savedInstanceState); 168 registerForContextMenu(mList); 169 } 170 171 } 172