package uk.ivanc.archimvp.view; import android.content.Context; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.Toolbar; import android.text.Editable; import android.text.TextWatcher; import android.view.KeyEvent; import android.view.View; import android.view.inputmethod.EditorInfo; import android.view.inputmethod.InputMethodManager; import android.widget.EditText; import android.widget.ImageButton; import android.widget.ProgressBar; import android.widget.TextView; import java.util.List; import uk.ivanc.archimvp.R; import uk.ivanc.archimvp.RepositoryAdapter; import uk.ivanc.archimvp.model.Repository; import uk.ivanc.archimvp.presenter.MainPresenter; public class MainActivity extends AppCompatActivity implements MainMvpView { private MainPresenter presenter; private RecyclerView reposRecycleView; private Toolbar toolbar; private EditText editTextUsername; private ProgressBar progressBar; private TextView infoTextView; private ImageButton searchButton; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //Set up presenter presenter = new MainPresenter(); presenter.attachView(this); setContentView(R.layout.activity_main); progressBar = (ProgressBar) findViewById(R.id.progress); infoTextView = (TextView) findViewById(R.id.text_info); //Set up ToolBar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); //Set up RecyclerView reposRecycleView = (RecyclerView) findViewById(R.id.repos_recycler_view); setupRecyclerView(reposRecycleView); // Set up search button searchButton = (ImageButton) findViewById(R.id.button_search); searchButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { presenter.loadRepositories(editTextUsername.getText().toString()); } }); //Set up username EditText editTextUsername = (EditText) findViewById(R.id.edit_text_username); editTextUsername.addTextChangedListener(mHideShowButtonTextWatcher); editTextUsername.setOnEditorActionListener(new TextView.OnEditorActionListener() { @Override public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { if (actionId == EditorInfo.IME_ACTION_SEARCH) { presenter.loadRepositories(editTextUsername.getText().toString()); return true; } return false; } }); } // MainMvpView interface methods implementation @Override protected void onDestroy() { presenter.detachView(); super.onDestroy(); } @Override public Context getContext() { return this; } @Override public void showRepositories(List<Repository> repositories) { RepositoryAdapter adapter = (RepositoryAdapter) reposRecycleView.getAdapter(); adapter.setRepositories(repositories); adapter.notifyDataSetChanged(); reposRecycleView.requestFocus(); hideSoftKeyboard(); progressBar.setVisibility(View.INVISIBLE); infoTextView.setVisibility(View.INVISIBLE); reposRecycleView.setVisibility(View.VISIBLE); } @Override public void showMessage(int stringId) { progressBar.setVisibility(View.INVISIBLE); infoTextView.setVisibility(View.VISIBLE); reposRecycleView.setVisibility(View.INVISIBLE); infoTextView.setText(getString(stringId)); } @Override public void showProgressIndicator() { progressBar.setVisibility(View.VISIBLE); infoTextView.setVisibility(View.INVISIBLE); reposRecycleView.setVisibility(View.INVISIBLE); } private void setupRecyclerView(RecyclerView recyclerView) { RepositoryAdapter adapter = new RepositoryAdapter(); adapter.setCallback(new RepositoryAdapter.Callback() { @Override public void onItemClick(Repository repository) { startActivity(RepositoryActivity.newIntent(MainActivity.this, repository)); } }); recyclerView.setAdapter(adapter); recyclerView.setLayoutManager(new LinearLayoutManager(this)); } private void hideSoftKeyboard() { InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(editTextUsername.getWindowToken(), 0); } private TextWatcher mHideShowButtonTextWatcher = new TextWatcher() { @Override public void beforeTextChanged(CharSequence charSequence, int start, int count, int after) { } @Override public void onTextChanged(CharSequence charSequence, int start, int before, int count) { searchButton.setVisibility(charSequence.length() > 0 ? View.VISIBLE : View.GONE); } @Override public void afterTextChanged(Editable editable) { } }; }