Commit 13594f58ae0e7ba808c69695e9827cc5af70ff8a

Authored by chudinhbka@gmail.com
1 parent cb2ba72a7e
Exists in master and in 1 other branch development

update PedometerActivity.java

Showing 1 changed file with 13 additions and 1 deletions Inline Diff

app/src/main/java/com/dinhcv/lifelogpedometer/activity/PedometerActivity.java
1 package com.dinhcv.lifelogpedometer.activity; 1 package com.dinhcv.lifelogpedometer.activity;
2 2
3 import android.Manifest; 3 import android.Manifest;
4 import android.content.Intent; 4 import android.content.Intent;
5 import android.os.Build; 5 import android.os.Build;
6 import android.os.Bundle; 6 import android.os.Bundle;
7 import android.support.design.widget.TabLayout; 7 import android.support.design.widget.TabLayout;
8 import android.support.v4.app.Fragment; 8 import android.support.v4.app.Fragment;
9 import android.support.v4.app.FragmentManager; 9 import android.support.v4.app.FragmentManager;
10 import android.support.v4.app.FragmentPagerAdapter; 10 import android.support.v4.app.FragmentPagerAdapter;
11 import android.support.v4.content.PermissionChecker; 11 import android.support.v4.content.PermissionChecker;
12 import android.support.v4.view.ViewPager; 12 import android.support.v4.view.ViewPager;
13 import android.support.v7.widget.PopupMenu; 13 import android.support.v7.widget.PopupMenu;
14 import android.support.v7.widget.Toolbar; 14 import android.support.v7.widget.Toolbar;
15 import android.view.Gravity; 15 import android.view.Gravity;
16 import android.view.MenuItem; 16 import android.view.MenuItem;
17 import android.view.View; 17 import android.view.View;
18 import android.view.Window; 18 import android.view.Window;
19 import android.view.WindowManager; 19 import android.view.WindowManager;
20 import android.widget.ImageView; 20 import android.widget.ImageView;
21 import android.widget.PopupWindow; 21 import android.widget.PopupWindow;
22 import android.widget.TextView; 22 import android.widget.TextView;
23 import android.widget.Toast; 23 import android.widget.Toast;
24 24
25 import com.dinhcv.lifelogpedometer.R; 25 import com.dinhcv.lifelogpedometer.R;
26 import com.dinhcv.lifelogpedometer.model.Shareprefer.Setting; 26 import com.dinhcv.lifelogpedometer.model.Shareprefer.Setting;
27 import com.dinhcv.lifelogpedometer.utils.Debug; 27 import com.dinhcv.lifelogpedometer.utils.Debug;
28 import com.dinhcv.lifelogpedometer.utils.Utils; 28 import com.dinhcv.lifelogpedometer.utils.Utils;
29 29
30 import java.util.ArrayList; 30 import java.util.ArrayList;
31 import java.util.List; 31 import java.util.List;
32 32
33 public class PedometerActivity extends ActivityBase { 33 public class PedometerActivity extends ActivityBase {
34 private Toolbar mToolBar; 34 private Toolbar mToolBar;
35 private ViewPager mViewPager; 35 private ViewPager mViewPager;
36 private int mCurrentTab = 0; 36 private int mCurrentTab = 0;
37 private TabLayout mTabLayout; 37 private TabLayout mTabLayout;
38 private TextView tvPageTitle; 38 private TextView tvPageTitle;
39 private ImageView ivHome; 39 private ImageView ivHome;
40 private ImageView imvMenu; 40 private ImageView imvMenu;
41 41
42 private TopFragment mTopFragment; 42 private TopFragment mTopFragment;
43 private HistoryFragment mHistoryFragment; 43 private HistoryFragment mHistoryFragment;
44 private SnsFragment mSnsFragment; 44 private SnsFragment mSnsFragment;
45 45
46 private int[] tabIcons = { 46 private int[] tabIcons = {
47 com.dinhcv.lifelogpedometer.R.drawable.ic_date, 47 com.dinhcv.lifelogpedometer.R.drawable.ic_date,
48 R.drawable.ic_history, 48 R.drawable.ic_history,
49 R.drawable.ic_rank, 49 R.drawable.ic_rank,
50 R.drawable.ic_map, 50 R.drawable.ic_map,
51 R.drawable.ic_sns 51 R.drawable.ic_sns
52 }; 52 };
53 53
54 public enum TAB { 54 public enum TAB {
55 DATE_TAB(0), 55 DATE_TAB(0),
56 HISTORY_TAB(1), 56 HISTORY_TAB(1),
57 RANK_TAB(2), 57 RANK_TAB(2),
58 MAP_TAB(3), 58 MAP_TAB(3),
59 SNS_TAB(4); 59 SNS_TAB(4);
60 60
61 private final int index; 61 private final int index;
62 62
63 TAB(int index) { 63 TAB(int index) {
64 this.index = index; 64 this.index = index;
65 } 65 }
66 66
67 public int getValue() { 67 public int getValue() {
68 return index; 68 return index;
69 } 69 }
70 } 70 }
71 71
72 @Override 72 @Override
73 protected void onCreate(Bundle savedInstanceState) { 73 protected void onCreate(Bundle savedInstanceState) {
74 super.onCreate(savedInstanceState); 74 super.onCreate(savedInstanceState);
75 75
76 setContentView(R.layout.activity_pedometer); 76 setContentView(R.layout.activity_pedometer);
77 getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE); 77 getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
78 78
79 initView(); 79 initView();
80 80
81 if (android.support.v4.BuildConfig.DEBUG && Build.VERSION.SDK_INT >= 23 && PermissionChecker 81 if (android.support.v4.BuildConfig.DEBUG && Build.VERSION.SDK_INT >= 23 && PermissionChecker
82 .checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != 82 .checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) !=
83 PermissionChecker.PERMISSION_GRANTED) { 83 PermissionChecker.PERMISSION_GRANTED) {
84 requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 0); 84 requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 0);
85 } 85 }
86 } 86 }
87 87
88 private void initView() { 88 private void initView() {
89 89
90 tvPageTitle = (TextView) findViewById(R.id.tv_pageTitle); 90 tvPageTitle = (TextView) findViewById(R.id.tv_pageTitle);
91 ivHome = (ImageView) findViewById(R.id.iv_home); 91 ivHome = (ImageView) findViewById(R.id.iv_home);
92 imvMenu = (ImageView) findViewById(R.id.imv_menu); 92 imvMenu = (ImageView) findViewById(R.id.imv_menu);
93 93
94 mViewPager = (ViewPager) findViewById(R.id.viewpager); 94 mViewPager = (ViewPager) findViewById(R.id.viewpager);
95 mViewPager.setOffscreenPageLimit(5); 95 mViewPager.setOffscreenPageLimit(5);
96 setupViewPager(mViewPager); 96 setupViewPager(mViewPager);
97 mTabLayout = (TabLayout) findViewById(R.id.tabs); 97 mTabLayout = (TabLayout) findViewById(R.id.tabs);
98 mTabLayout.setupWithViewPager(mViewPager); 98 mTabLayout.setupWithViewPager(mViewPager);
99 //Set tab selected 99 //Set tab selected
100 TabLayout.Tab tab = mTabLayout.getTabAt(mCurrentTab); 100 TabLayout.Tab tab = mTabLayout.getTabAt(mCurrentTab);
101 if (tab != null) { 101 if (tab != null) {
102 tab.select(); 102 tab.select();
103 } 103 }
104 104
105 changeColorStatusBar(); 105 changeColorStatusBar();
106 setupTabIcons(); 106 setupTabIcons();
107 107
108 //SonLT Add 108 //SonLT Add
109 ivHome.setOnClickListener(new View.OnClickListener() { 109 ivHome.setOnClickListener(new View.OnClickListener() {
110 @Override 110 @Override
111 public void onClick(View v) { 111 public void onClick(View v) {
112 switch (mCurrentTab){ 112 switch (mCurrentTab){
113 case 0: mTopFragment.clickBackToHome(); break; 113 case 0: mTopFragment.clickBackToHome(); break;
114 case 1: mHistoryFragment.clickBackToHome(); break; 114 case 1: mHistoryFragment.clickBackToHome(); break;
115 case 4: mSnsFragment.handleToolbarClick(0); break; 115 case 4: mSnsFragment.handleToolbarClick(0); break;
116 default: break; 116 default: break;
117 } 117 }
118 } 118 }
119 }); 119 });
120 120
121 imvMenu.setOnClickListener(new View.OnClickListener() { 121 imvMenu.setOnClickListener(new View.OnClickListener() {
122 @Override 122 @Override
123 public void onClick(View v) { 123 public void onClick(View v) {
124 //Creating the instance of PopupMenu 124 //Creating the instance of PopupMenu
125 PopupMenu popup = new PopupMenu(PedometerActivity.this, imvMenu); 125 PopupMenu popup = new PopupMenu(PedometerActivity.this, imvMenu);
126 //Inflating the Popup using xml file 126 //Inflating the Popup using xml file
127 popup.getMenuInflater().inflate(R.menu.main, popup.getMenu()); 127 popup.getMenuInflater().inflate(R.menu.main, popup.getMenu());
128 128
129 //registering popup with OnMenuItemClickListener 129 //registering popup with OnMenuItemClickListener
130 popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { 130 popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
131 public boolean onMenuItemClick(MenuItem item) { 131 public boolean onMenuItemClick(MenuItem item) {
132 switch (item.getItemId()){ 132 switch (item.getItemId()){
133 case R.id.action_setting: 133 case R.id.action_setting:
134 Toast.makeText( 134 Toast.makeText(
135 PedometerActivity.this, 135 PedometerActivity.this,
136 "Have not spec : " + item.getTitle(), 136 "Have not spec : " + item.getTitle(),
137 Toast.LENGTH_SHORT 137 Toast.LENGTH_SHORT
138 ).show(); 138 ).show();
139 break; 139 break;
140 case R.id.action_profile: 140 case R.id.action_profile:
141 Toast.makeText( 141 Toast.makeText(
142 PedometerActivity.this, 142 PedometerActivity.this,
143 "Have not spec : " + item.getTitle(), 143 "Have not spec : " + item.getTitle(),
144 Toast.LENGTH_SHORT 144 Toast.LENGTH_SHORT
145 ).show(); 145 ).show();
146 break; 146 break;
147 case R.id.action_logout: 147 case R.id.action_logout:
148 logout(); 148 logout();
149 break; 149 break;
150 default: 150 default:
151 Debug.warn("Not run here"); 151 Debug.warn("Not run here");
152 break; 152 break;
153 } 153 }
154 154
155 return true; 155 return true;
156 } 156 }
157 }); 157 });
158 158
159 popup.show(); //showing popup menu 159 popup.show(); //showing popup menu
160 } 160 }
161 }); //closing the setOnClickListener method 161 }); //closing the setOnClickListener method
162 } 162 }
163 163
164 private void setupTabIcons() { 164 private void setupTabIcons() {
165 mTabLayout.getTabAt(0).setIcon(tabIcons[0]); 165 mTabLayout.getTabAt(0).setIcon(tabIcons[0]);
166 mTabLayout.getTabAt(1).setIcon(tabIcons[1]); 166 mTabLayout.getTabAt(1).setIcon(tabIcons[1]);
167 mTabLayout.getTabAt(2).setIcon(tabIcons[2]); 167 mTabLayout.getTabAt(2).setIcon(tabIcons[2]);
168 mTabLayout.getTabAt(3).setIcon(tabIcons[3]); 168 mTabLayout.getTabAt(3).setIcon(tabIcons[3]);
169 mTabLayout.getTabAt(4).setIcon(tabIcons[4]); 169 mTabLayout.getTabAt(4).setIcon(tabIcons[4]);
170 } 170 }
171 171
172 172
173 private void setTabView() { 173 private void setTabView() {
174 174
175 for (int i = 0; i < mTabLayout.getTabCount(); i++) { 175 for (int i = 0; i < mTabLayout.getTabCount(); i++) {
176 TextView tv = (TextView) mTabLayout.getChildAt(0).findViewById(android.R.id.title); 176 TextView tv = (TextView) mTabLayout.getChildAt(0).findViewById(android.R.id.title);
177 //tv.setTextColor(Color.BLACK); 177 //tv.setTextColor(Color.BLACK);
178 tv.setPadding(10, 10, 10, 15); 178 tv.setPadding(10, 10, 10, 15);
179 tv.setTextSize((float) 20.0); 179 tv.setTextSize((float) 20.0);
180 //tv.setTypeface(null, Typeface.BOLD); 180 //tv.setTypeface(null, Typeface.BOLD);
181 //tv.setBackgroundResource(R.drawable.icon); 181 //tv.setBackgroundResource(R.drawable.icon);
182 tv.setHeight(100); 182 tv.setHeight(100);
183 tv.setWidth(100); 183 tv.setWidth(100);
184 } 184 }
185 185
186 } 186 }
187 187
188 private void changeColorStatusBar() { 188 private void changeColorStatusBar() {
189 if (android.os.Build.VERSION.SDK_INT >= 21) { 189 if (android.os.Build.VERSION.SDK_INT >= 21) {
190 Window window = this.getWindow(); 190 Window window = this.getWindow();
191 window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); 191 window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
192 window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); 192 window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
193 // window.setStatusBarColor(Utils.getColorWrapper(this, R.color.white)); 193 // window.setStatusBarColor(Utils.getColorWrapper(this, R.color.white));
194 } 194 }
195 } 195 }
196 196
197 // @Override 197 // @Override
198 // public boolean onCreateOptionsMenu(Menu menu) { 198 // public boolean onCreateOptionsMenu(Menu menu) {
199 // getMenuInflater().inflate(R.menu.setting_menu, menu); 199 // getMenuInflater().inflate(R.menu.setting_menu, menu);
200 // return true; 200 // return true;
201 // } 201 // }
202 202
203 @Override 203 @Override
204 public boolean onOptionsItemSelected(MenuItem item) { 204 public boolean onOptionsItemSelected(MenuItem item) {
205 return super.onOptionsItemSelected(item); 205 return super.onOptionsItemSelected(item);
206 } 206 }
207 207
208 /** 208 /**
209 * Setup pager 209 * Setup pager
210 * 210 *
211 * @param viewPager: view pager 211 * @param viewPager: view pager
212 */ 212 */
213 private void setupViewPager(ViewPager viewPager) { 213 private void setupViewPager(ViewPager viewPager) {
214 ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager()); 214 ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
215 mTopFragment = new TopFragment(); 215 mTopFragment = new TopFragment();
216 adapter.addFragment(mTopFragment, getString(R.string.date)); 216 adapter.addFragment(mTopFragment, getString(R.string.date));
217 mHistoryFragment = new HistoryFragment(); 217 mHistoryFragment = new HistoryFragment();
218 adapter.addFragment(mHistoryFragment, getString(R.string.history)); 218 adapter.addFragment(mHistoryFragment, getString(R.string.history));
219 adapter.addFragment(new RankFragment(), getString(R.string.ranking)); 219 adapter.addFragment(new RankFragment(), getString(R.string.ranking));
220 adapter.addFragment(new MapFragment(), getString(R.string.map)); 220 adapter.addFragment(new MapFragment(), getString(R.string.map));
221 mSnsFragment = new SnsFragment(); 221 mSnsFragment = new SnsFragment();
222 adapter.addFragment(mSnsFragment, getString(R.string.sns)); 222 adapter.addFragment(mSnsFragment, getString(R.string.sns));
223 viewPager.setAdapter(adapter); 223 viewPager.setAdapter(adapter);
224 } 224 }
225 225
226 /** 226 /**
227 * Class FragmentPagerAdapter 227 * Class FragmentPagerAdapter
228 */ 228 */
229 class ViewPagerAdapter extends FragmentPagerAdapter { 229 class ViewPagerAdapter extends FragmentPagerAdapter {
230 private final List<Fragment> mFragmentList = new ArrayList<>(); 230 private final List<Fragment> mFragmentList = new ArrayList<>();
231 private final List<String> mFragmentTitleList = new ArrayList<>(); 231 private final List<String> mFragmentTitleList = new ArrayList<>();
232 232
233 public ViewPagerAdapter(FragmentManager manager) { 233 public ViewPagerAdapter(FragmentManager manager) {
234 super(manager); 234 super(manager);
235 } 235 }
236 236
237 @Override 237 @Override
238 public Fragment getItem(int position) { 238 public Fragment getItem(int position) {
239 return mFragmentList.get(position); 239 return mFragmentList.get(position);
240 } 240 }
241 241
242 @Override 242 @Override
243 public int getCount() { 243 public int getCount() {
244 return mFragmentList.size(); 244 return mFragmentList.size();
245 } 245 }
246 246
247 private void addFragment(Fragment fragment, String title) { 247 private void addFragment(Fragment fragment, String title) {
248 mFragmentList.add(fragment); 248 mFragmentList.add(fragment);
249 mFragmentTitleList.add(title); 249 mFragmentTitleList.add(title);
250 } 250 }
251 251
252 @Override 252 @Override
253 public CharSequence getPageTitle(int position) { 253 public CharSequence getPageTitle(int position) {
254 return mFragmentTitleList.get(position); 254 return mFragmentTitleList.get(position);
255 } 255 }
256 } 256 }
257 257
258 @Override 258 @Override
259 protected void onResume() { 259 protected void onResume() {
260 super.onResume(); 260 super.onResume();
261 mViewPager.addOnPageChangeListener(mPageChangeListener); 261 mViewPager.addOnPageChangeListener(mPageChangeListener);
262 } 262 }
263 263
264 @Override 264 @Override
265 protected void onPause() { 265 protected void onPause() {
266 super.onPause(); 266 super.onPause();
267 mViewPager.removeOnPageChangeListener(mPageChangeListener); 267 mViewPager.removeOnPageChangeListener(mPageChangeListener);
268 } 268 }
269 269
270 private int mLastTab = 0; 270 private int mLastTab = 0;
271 private final ViewPager.OnPageChangeListener mPageChangeListener = new ViewPager 271 private final ViewPager.OnPageChangeListener mPageChangeListener = new ViewPager
272 .OnPageChangeListener 272 .OnPageChangeListener
273 () { 273 () {
274 @Override 274 @Override
275 public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { 275 public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
276 //Nothing here 276 //Nothing here
277 } 277 }
278 278
279 @Override 279 @Override
280 public void onPageSelected(int position) { 280 public void onPageSelected(int position) {
281 ViewPagerAdapter adapter = (ViewPagerAdapter) mViewPager.getAdapter(); 281 ViewPagerAdapter adapter = (ViewPagerAdapter) mViewPager.getAdapter();
282 SettingFragmentPresenter presenter = (SettingFragmentPresenter) adapter.getItem 282 SettingFragmentPresenter presenter = (SettingFragmentPresenter) adapter.getItem
283 (position); 283 (position);
284 presenter.onInvalidate(false);
285 284
286 switch (position) { 285 switch (position) {
287 case 4: 286 case 4:
288 tvPageTitle.setText(getString(R.string.sns_fragment)); 287 tvPageTitle.setText(getString(R.string.sns_fragment));
289 ivHome.setVisibility(View.VISIBLE); 288 ivHome.setVisibility(View.VISIBLE);
290 break; 289 break;
291 case 1: 290 case 1:
292 tvPageTitle.setText(getString(R.string.today)); 291 tvPageTitle.setText(getString(R.string.today));
293 ivHome.setVisibility(View.VISIBLE); 292 ivHome.setVisibility(View.VISIBLE);
294 break; 293 break;
295 294
296 case 0: 295 case 0:
297 tvPageTitle.setText(getString(R.string.home)); 296 tvPageTitle.setText(getString(R.string.home));
298 ivHome.setVisibility(View.GONE); 297 ivHome.setVisibility(View.GONE);
299 break; 298 break;
300 299
301 default: 300 default:
302 tvPageTitle.setText(getString(R.string.home)); 301 tvPageTitle.setText(getString(R.string.home));
303 ivHome.setVisibility(View.GONE); 302 ivHome.setVisibility(View.GONE);
304 break; 303 break;
305 } 304 }
306 // if (position == 1){ 305 // if (position == 1){
307 // tvPageTitle.setText(getString(R.string.today)); 306 // tvPageTitle.setText(getString(R.string.today));
308 // ivHome.setVisibility(View.VISIBLE); 307 // ivHome.setVisibility(View.VISIBLE);
309 // }else { 308 // }else {
310 // tvPageTitle.setText(getString(R.string.home)); 309 // tvPageTitle.setText(getString(R.string.home));
311 // ivHome.setVisibility(View.GONE); 310 // ivHome.setVisibility(View.GONE);
312 // } 311 // }
313 312
313 presenter.onInvalidate(false);
314 mLastTab = position; 314 mLastTab = position;
315 mCurrentTab = position; 315 mCurrentTab = position;
316 } 316 }
317 317
318 @Override 318 @Override
319 public void onPageScrollStateChanged(int state) { 319 public void onPageScrollStateChanged(int state) {
320 //Nothing here 320 //Nothing here
321 if (state == ViewPager.SCROLL_STATE_SETTLING) { 321 if (state == ViewPager.SCROLL_STATE_SETTLING) {
322 if (mLastTab >= 0) { 322 if (mLastTab >= 0) {
323 ViewPagerAdapter adapter = (ViewPagerAdapter) mViewPager.getAdapter(); 323 ViewPagerAdapter adapter = (ViewPagerAdapter) mViewPager.getAdapter();
324 SettingFragmentPresenter presenter = (SettingFragmentPresenter) adapter 324 SettingFragmentPresenter presenter = (SettingFragmentPresenter) adapter
325 .getItem(mLastTab); 325 .getItem(mLastTab);
326 326
327 Debug.normal("Save data in tab:" + mLastTab); 327 Debug.normal("Save data in tab:" + mLastTab);
328 presenter.onSaveData(); 328 presenter.onSaveData();
329 } 329 }
330 } 330 }
331 } 331 }
332 }; 332 };
333 333
334 public void setVisibleIconHome(boolean isVisible){ 334 public void setVisibleIconHome(boolean isVisible){
335 if (isVisible) { 335 if (isVisible) {
336 ivHome.setVisibility(View.VISIBLE); 336 ivHome.setVisibility(View.VISIBLE);
337 }else { 337 }else {
338 ivHome.setVisibility(View.GONE); 338 ivHome.setVisibility(View.GONE);
339 } 339 }
340
341 setTitleTop(isVisible);
340 } 342 }
343
344 public void setTitleTop(boolean isVisible){
345 if (isVisible) {
346 tvPageTitle.setText(getString(R.string.today));
347 }else {
348 tvPageTitle.setText(getString(R.string.home));
349 }
350 }
351
352
341 353
342 private void logout(){ 354 private void logout(){
343 // clear data 355 // clear data
344 Setting.clearUserIdSharepre(PedometerActivity.this); 356 Setting.clearUserIdSharepre(PedometerActivity.this);
345 // go to login 357 // go to login
346 Intent intent = new Intent(PedometerActivity.this, LoginActivity.class); 358 Intent intent = new Intent(PedometerActivity.this, LoginActivity.class);
347 intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 359 intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
348 intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 360 intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
349 startActivity(intent); 361 startActivity(intent);
350 } 362 }
351 363
352 } 364 }