* update
@@ -11,8 +11,6 @@ | ||
11 | 11 | |
12 | 12 | public abstract class DictEngine |
13 | 13 | { |
14 | - protected static DictEngine instance = null; | |
15 | - | |
16 | 14 | final static int SIZEOF_BLOCK_INFO = 12; |
17 | 15 | final static int SIZEOF_DIC_HEADER = 64; |
18 | 16 | final static int SIZEOF_WORD_ITEM = 8; |
@@ -53,11 +51,6 @@ | ||
53 | 51 | |
54 | 52 | abstract void ReadDataAtBlock(byte[] blockData, int block); |
55 | 53 | |
56 | - public static DictEngine getInstance() | |
57 | - { | |
58 | - return instance; | |
59 | - } | |
60 | - | |
61 | 54 | public int GetNumWordInDic() |
62 | 55 | { |
63 | 56 | return numWordInDic; |
@@ -50,23 +50,6 @@ | ||
50 | 50 | |
51 | 51 | public class DictEngineExternal extends DictEngine |
52 | 52 | { |
53 | - public static DictEngine getInstance() { | |
54 | - if (instance == null) { | |
55 | - try | |
56 | - { | |
57 | - if (instance == null) | |
58 | - instance = new DictEngineExternal(); | |
59 | - | |
60 | - | |
61 | - } catch (Exception e) { | |
62 | - //e.printStackTrace(); | |
63 | - Log.d("DictEngineExternal - getInstance:", e.getMessage()); | |
64 | - } | |
65 | - } | |
66 | - | |
67 | - return instance; | |
68 | - } | |
69 | - | |
70 | 53 | RandomAccessFile fDic = null; |
71 | 54 | |
72 | 55 | public DictEngineExternal() |
@@ -53,24 +53,7 @@ | ||
53 | 53 | public class DictEngineInternal extends DictEngine |
54 | 54 | { |
55 | 55 | DataInputStream fDic = null; |
56 | - | |
57 | - public static DictEngine getInstance() { | |
58 | - if (instance == null) { | |
59 | - try | |
60 | - { | |
61 | - if (instance == null) | |
62 | - instance = new DictEngineInternal(); | |
63 | - | |
64 | - } catch (Exception e) { | |
65 | - //e.printStackTrace(); | |
66 | - Log.d("DictEngineInternal - getInstance:", e.getMessage()); | |
67 | - } | |
68 | - } | |
69 | - | |
70 | - return instance; | |
71 | - } | |
72 | 56 | |
73 | - | |
74 | 57 | public DictEngineInternal() |
75 | 58 | { |
76 | 59 |
@@ -5,6 +5,7 @@ | ||
5 | 5 | import android.view.LayoutInflater; |
6 | 6 | import android.view.View; |
7 | 7 | import android.view.ViewGroup; |
8 | +import android.widget.ViewFlipper; | |
8 | 9 | |
9 | 10 | import androidx.annotation.Nullable; |
10 | 11 | import androidx.lifecycle.ViewModelProviders; |
@@ -19,6 +20,7 @@ | ||
19 | 20 | import com.xynotec.dictdroid.ui.base.BaseFragment; |
20 | 21 | import com.xynotec.dictdroid.ui.main.search.SearchNavigator; |
21 | 22 | import com.xynotec.dictdroid.ui.main.search.SearchViewModel; |
23 | +import com.xynotec.utils.Util; | |
22 | 24 | |
23 | 25 | import javax.inject.Inject; |
24 | 26 |
@@ -32,6 +34,11 @@ | ||
32 | 34 | public class SearchFragment extends BaseFragment<FragmentSearchBinding, SearchViewModel> |
33 | 35 | implements SearchNavigator { |
34 | 36 | |
37 | + final static int SEARCH_VIEW = 0; | |
38 | + final static int MEAN_VIEW = 1; | |
39 | + | |
40 | + int curView = SEARCH_VIEW; | |
41 | + | |
35 | 42 | @Inject |
36 | 43 | SearchFragmentAdapter mSearchFragmentAdapter; |
37 | 44 |
@@ -40,6 +47,8 @@ | ||
40 | 47 | |
41 | 48 | private SearchViewModel mSearchViewModel; |
42 | 49 | |
50 | + LinearLayoutManager linearLayoutManager; | |
51 | + ViewFlipper viewFlipper; | |
43 | 52 | RecyclerView rvWord; |
44 | 53 | MeanView meanView; |
45 | 54 |
@@ -57,8 +66,12 @@ | ||
57 | 66 | |
58 | 67 | DividerItemDecoration dividerItemDecoration = new DividerItemDecoration(context, DividerItemDecoration.VERTICAL); |
59 | 68 | |
69 | + viewFlipper = view.findViewById(R.id.viewFlipper); | |
70 | + | |
71 | + linearLayoutManager = new LinearLayoutManager(context); | |
72 | + | |
60 | 73 | rvWord = view.findViewById(R.id.rvWord); |
61 | - rvWord.setLayoutManager(new LinearLayoutManager(context)); | |
74 | + rvWord.setLayoutManager(linearLayoutManager); | |
62 | 75 | rvWord.addItemDecoration(dividerItemDecoration); |
63 | 76 | rvWord.setAdapter(mSearchFragmentAdapter); |
64 | 77 |
@@ -81,4 +94,43 @@ | ||
81 | 94 | return mSearchViewModel; |
82 | 95 | } |
83 | 96 | |
97 | + public void OnEditSearch(String word) | |
98 | + { | |
99 | + showWordListView(); | |
100 | + int posWord = mSearchFragmentAdapter.getDictEngine().OnEditSearch(word); | |
101 | + linearLayoutManager.scrollToPositionWithOffset(posWord, 0); | |
102 | + } | |
103 | + | |
104 | + public void OnSubmitSearch(String word) | |
105 | + { | |
106 | + int posWord = mSearchFragmentAdapter.getDictEngine().OnEditSearch(word); | |
107 | + String wordFind =mSearchFragmentAdapter.getDictEngine().GetWord(posWord); | |
108 | + if (wordFind.compareToIgnoreCase(word) == 0) | |
109 | + showMean(posWord); | |
110 | + } | |
111 | + | |
112 | + void showMean(int index) { | |
113 | + | |
114 | + Util.hideEmulatorKeyboard(getActivity()); | |
115 | + | |
116 | + viewFlipper.setDisplayedChild(MEAN_VIEW); | |
117 | + curView = MEAN_VIEW; | |
118 | + | |
119 | + String word = mSearchFragmentAdapter.getDictEngine().GetWord(index); | |
120 | + //String mean = HtmlConverter.String_htmlEncode(mSearchFragmentAdapter.getDictEngine().GetMeanWord(index)); | |
121 | + | |
122 | + //DictDbHelper.getInstance().AddHistory(word, mean); | |
123 | + | |
124 | + //meanView.setWordMean(word, mean); | |
125 | + } | |
126 | + | |
127 | + void showWordListView() | |
128 | + { | |
129 | + if (curView != SEARCH_VIEW) | |
130 | + { | |
131 | + viewFlipper.setDisplayedChild(SEARCH_VIEW); | |
132 | + curView = SEARCH_VIEW; | |
133 | + } | |
134 | + } | |
135 | + | |
84 | 136 | } |
@@ -40,6 +40,11 @@ | ||
40 | 40 | return mDictEngine.GetNumWordInDic(); |
41 | 41 | } |
42 | 42 | |
43 | + public DictEngine getDictEngine() | |
44 | + { | |
45 | + return mDictEngine; | |
46 | + } | |
47 | + | |
43 | 48 | public class WordViewHolder extends BaseViewHolder |
44 | 49 | implements SearchViewItemModel.SearchViewItemModelListener { |
45 | 50 |
@@ -19,6 +19,7 @@ | ||
19 | 19 | import com.xynotec.dictdroid.ende.databinding.ActivityMainBinding; |
20 | 20 | import com.xynotec.dictdroid.engine.DictEngine; |
21 | 21 | import com.xynotec.dictdroid.ui.base.BaseActivity; |
22 | +import com.xynotec.dictdroid.ui.main.search.SearchFragment; | |
22 | 23 | |
23 | 24 | import androidx.annotation.NonNull; |
24 | 25 | import androidx.appcompat.app.ActionBarDrawerToggle; |
@@ -27,6 +28,7 @@ | ||
27 | 28 | |
28 | 29 | import androidx.appcompat.app.AppCompatActivity; |
29 | 30 | import androidx.appcompat.widget.Toolbar; |
31 | +import androidx.fragment.app.Fragment; | |
30 | 32 | import androidx.lifecycle.ViewModelProviders; |
31 | 33 | import androidx.navigation.NavController; |
32 | 34 | import androidx.navigation.Navigation; |
@@ -44,6 +46,9 @@ | ||
44 | 46 | public class MainActivity extends BaseActivity<ActivityMainBinding, MainViewModel> |
45 | 47 | implements MainNavigator, SearchBar.OnSearchBarTextChange { |
46 | 48 | |
49 | + final static int SEARCH_FRAGMENT = 0; | |
50 | + | |
51 | + | |
47 | 52 | private AppBarConfiguration mAppBarConfiguration; |
48 | 53 | |
49 | 54 | @Inject |
@@ -173,14 +178,27 @@ | ||
173 | 178 | |
174 | 179 | @Override |
175 | 180 | public void onTextChange(String text) { |
181 | + tabLayout.getTabAt(SEARCH_FRAGMENT).select(); | |
182 | + SearchFragment searchFragment = (SearchFragment)getFragment(SEARCH_FRAGMENT); | |
183 | + searchFragment.OnEditSearch(text); | |
176 | 184 | |
177 | 185 | } |
178 | 186 | |
179 | 187 | @Override |
180 | 188 | public void onTextSubmit(String text) { |
189 | + text = text.trim(); | |
181 | 190 | |
191 | + tabLayout.getTabAt(SEARCH_FRAGMENT).select(); | |
192 | + SearchFragment searchFragment = (SearchFragment)getFragment(SEARCH_FRAGMENT); | |
193 | + searchFragment.OnSubmitSearch(text); | |
182 | 194 | } |
183 | 195 | |
196 | + private Fragment getFragment(int index) | |
197 | + { | |
198 | + FixedIconTabsAdapter adapter = (FixedIconTabsAdapter)viewPager.getAdapter(); | |
199 | + return adapter.getItem(index); | |
200 | + } | |
201 | + | |
184 | 202 | private void setupViewPager(ViewPager viewPager) { |
185 | 203 | FixedIconTabsAdapter adapter = new FixedIconTabsAdapter(getSupportFragmentManager()); |
186 | 204 | viewPager.setAdapter(adapter); |