package com.fastaccess.ui.modules.search; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.design.widget.AppBarLayout; import android.support.design.widget.TabLayout; import android.text.Editable; import android.view.KeyEvent; import android.view.View; import android.view.inputmethod.EditorInfo; import android.widget.ArrayAdapter; import android.widget.TextView; import com.fastaccess.R; import com.fastaccess.data.dao.FragmentPagerAdapterModel; import com.fastaccess.data.dao.TabsCountStateModel; import com.fastaccess.data.dao.model.SearchHistory; import com.fastaccess.helper.AnimHelper; import com.fastaccess.helper.ViewHelper; import com.fastaccess.ui.adapter.FragmentsPagerAdapter; import com.fastaccess.ui.base.BaseActivity; import com.fastaccess.ui.widgets.FontAutoCompleteEditText; import com.fastaccess.ui.widgets.ForegroundImageView; import com.fastaccess.ui.widgets.ViewPagerView; import java.text.NumberFormat; import java.util.HashSet; import java.util.LinkedHashSet; import butterknife.BindView; import butterknife.OnClick; import butterknife.OnEditorAction; import butterknife.OnTextChanged; import icepick.State; /** * Created by Kosh on 08 Dec 2016, 8:22 PM */ public class SearchActivity extends BaseActivity<SearchMvp.View, SearchPresenter> implements SearchMvp.View { @BindView(R.id.searchEditText) FontAutoCompleteEditText searchEditText; @BindView(R.id.clear) ForegroundImageView clear; @BindView(R.id.tabs) TabLayout tabs; @BindView(R.id.appbar) AppBarLayout appbar; @BindView(R.id.pager) ViewPagerView pager; private NumberFormat numberFormat = NumberFormat.getNumberInstance(); @State HashSet<TabsCountStateModel> tabsCountSet = new LinkedHashSet<>(); private ArrayAdapter<SearchHistory> adapter; @OnTextChanged(value = R.id.searchEditText, callback = OnTextChanged.Callback.AFTER_TEXT_CHANGED) void onTextChange(Editable s) { String text = s.toString(); if (text.length() == 0) { AnimHelper.animateVisibility(clear, false); } else { AnimHelper.animateVisibility(clear, true); } } @OnEditorAction(R.id.searchEditText) boolean onEditor(int actionId, KeyEvent keyEvent) { if (keyEvent != null && keyEvent.getAction() == KeyEvent.KEYCODE_SEARCH) { getPresenter().onSearchClicked(pager, searchEditText); } else if (actionId == EditorInfo.IME_ACTION_SEARCH) { getPresenter().onSearchClicked(pager, searchEditText); } return false; } @OnClick(value = {R.id.clear}) void onClear(View view) { if (view.getId() == R.id.clear) { searchEditText.setText(""); } } @Override protected int layout() { return R.layout.search_layout; } @Override protected boolean isTransparent() { return false; } @Override protected boolean canBack() { return true; } @Override protected boolean isSecured() { return false; } @NonNull @Override public SearchPresenter providePresenter() { return new SearchPresenter(); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setTitle(""); pager.setAdapter(new FragmentsPagerAdapter(getSupportFragmentManager(), FragmentPagerAdapterModel.buildForSearch(this))); tabs.setupWithViewPager(pager); searchEditText.setAdapter(getAdapter()); searchEditText.setOnItemClickListener((parent, view, position, id) -> getPresenter().onSearchClicked(pager, searchEditText)); if (!tabsCountSet.isEmpty()) { setupTab(); } if(getIntent().hasExtra("search")){ searchEditText.setText(getIntent().getStringExtra("search")); onTextChange(searchEditText.getEditableText()); getPresenter().onSearchClicked(pager, searchEditText); } } private void setupTab() { for (TabsCountStateModel model : tabsCountSet) { int index = model.getTabIndex(); int count = model.getCount(); TextView textView = ViewHelper.getTabTextView(tabs, index); if (index == 0) { textView.setText(String.format("%s(%s)", getString(R.string.repos), numberFormat.format(count))); } else if (index == 1) { textView.setText(String.format("%s(%s)", getString(R.string.users), numberFormat.format(count))); } else if (index == 2) { textView.setText(String.format("%s(%s)", getString(R.string.issues), numberFormat.format(count))); } else if (index == 3) { textView.setText(String.format("%s(%s)", getString(R.string.code), numberFormat.format(count))); } } } @Override public void onNotifyAdapter(@Nullable SearchHistory query) { if (query == null) getAdapter().notifyDataSetChanged(); else getAdapter().add(query); } @Override public void onSetCount(int count, int index) { TabsCountStateModel model = new TabsCountStateModel(); model.setCount(count); model.setTabIndex(index); tabsCountSet.add(model); TextView textView = ViewHelper.getTabTextView(tabs, index); if (index == 0) { textView.setText(String.format("%s(%s)", getString(R.string.repos), numberFormat.format(count))); } else if (index == 1) { textView.setText(String.format("%s(%s)", getString(R.string.users), numberFormat.format(count))); } else if (index == 2) { textView.setText(String.format("%s(%s)", getString(R.string.issues), numberFormat.format(count))); } else if (index == 3) { textView.setText(String.format("%s(%s)", getString(R.string.code), numberFormat.format(count))); } } private ArrayAdapter<SearchHistory> getAdapter() { if (adapter == null) adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, getPresenter().getHints()); return adapter; } }