package com.zedeff.twittererer.ui.activities;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.support.annotation.StringRes;
import android.support.v4.widget.SwipeRefreshLayout;
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.InputFilter;
import android.text.InputType;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.inputmethod.EditorInfo;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import com.zedeff.twittererer.App;
import com.zedeff.twittererer.R;
import com.zedeff.twittererer.models.TimelineItem;
import com.zedeff.twittererer.presenters.TimelinePresenter;
import com.zedeff.twittererer.ui.adapters.TimelineAdapter;
import com.zedeff.twittererer.views.TimelineView;
import java.util.List;
import javax.inject.Inject;
import butterknife.BindView;
import butterknife.ButterKnife;
public class TimelineActivity extends AppCompatActivity implements TimelineView {
@Inject
TimelinePresenter presenter;
@BindView(R.id.swipe_refresh)
SwipeRefreshLayout swipeRefresh;
@BindView(R.id.tweets)
RecyclerView tweetList;
@BindView(R.id.no_tweets)
TextView noTweetsView;
TimelineAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_timeline);
DaggerActivityComponent.builder()
.baseApplicationComponent(App.component())
.build()
.inject(this);
setSupportActionBar((Toolbar) findViewById(R.id.ab_toolbar));
initTweetList();
swipeRefresh.setColorSchemeResources(R.color.brand_blue, R.color.dark_blue);
swipeRefresh.setOnRefreshListener(presenter::refreshTweets);
presenter.initialise(this);
}
private void initTweetList() {
ButterKnife.bind(this);
LinearLayoutManager lm = new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false);
tweetList.setLayoutManager(lm);
adapter = new TimelineAdapter();
tweetList.setAdapter(adapter);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_timeline, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == R.id.action_tweet) {
showNewTweetDialog();
return true;
}
return super.onOptionsItemSelected(item);
}
private void showNewTweetDialog() {
final EditText tweetText = new EditText(this);
tweetText.setId(R.id.tweet_text);
tweetText.setSingleLine();
tweetText.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_SENTENCES);
tweetText.setFilters(new InputFilter[]{new InputFilter.LengthFilter(140)});
tweetText.setImeOptions(EditorInfo.IME_ACTION_DONE);
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage(R.string.label_what_is_happening);
builder.setPositiveButton(R.string.action_tweet, (dialog, which) -> presenter.tweet(tweetText.getText().toString()));
AlertDialog alert = builder.create();
alert.setView(tweetText, 64, 0, 64, 0);
alert.show();
tweetText.setOnEditorActionListener((v, actionId, event) -> {
if (actionId == EditorInfo.IME_ACTION_DONE) {
alert.getButton(DialogInterface.BUTTON_POSITIVE).callOnClick();
return true;
}
return false;
});
}
@Override
public void showTimeline(List<TimelineItem> timelineItems) {
swipeRefresh.setVisibility(View.VISIBLE);
tweetList.setVisibility(View.VISIBLE);
noTweetsView.setVisibility(View.GONE);
adapter.setItems(timelineItems);
swipeRefresh.setRefreshing(false);
}
@Override
public void showNoTweets() {
swipeRefresh.setVisibility(View.GONE);
tweetList.setVisibility(View.GONE);
noTweetsView.setVisibility(View.VISIBLE);
swipeRefresh.setRefreshing(false);
}
@Override
public void showMessage(@StringRes int messageResId) {
Toast.makeText(this, messageResId, Toast.LENGTH_LONG).show();
}
}