package uk.ivanc.archi;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import com.squareup.picasso.Picasso;
import rx.Subscription;
import rx.android.schedulers.AndroidSchedulers;
import rx.functions.Action1;
import uk.ivanc.archi.model.GithubService;
import uk.ivanc.archi.model.Repository;
import uk.ivanc.archi.model.User;
public class RepositoryActivity extends AppCompatActivity {
private static final String EXTRA_REPOSITORY = "EXTRA_REPOSITORY";
private static final String TAG = "RepositoryActivity";
private Toolbar toolbar;
private TextView descriptionText;
private TextView homepageText;
private TextView languageText;
private TextView forkText;
private TextView ownerNameText;
private TextView ownerEmailText;
private TextView ownerLocationText;
private ImageView ownerImage;
private View ownerLayout;
private Subscription subscription;
public static Intent newIntent(Context context, Repository repository) {
Intent intent = new Intent(context, RepositoryActivity.class);
intent.putExtra(EXTRA_REPOSITORY, repository);
return intent;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_repository);
toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
ActionBar actionBar = getSupportActionBar();
if (actionBar != null) {
actionBar.setDisplayHomeAsUpEnabled(true);
}
descriptionText = (TextView) findViewById(R.id.text_repo_description);
homepageText = (TextView) findViewById(R.id.text_homepage);
languageText = (TextView) findViewById(R.id.text_language);
forkText = (TextView) findViewById(R.id.text_fork);
ownerNameText = (TextView) findViewById(R.id.text_owner_name);
ownerEmailText = (TextView) findViewById(R.id.text_owner_email);
ownerLocationText = (TextView) findViewById(R.id.text_owner_location);
ownerImage = (ImageView) findViewById(R.id.image_owner);
ownerLayout = findViewById(R.id.layout_owner);
Repository repository = getIntent().getParcelableExtra(EXTRA_REPOSITORY);
bindRepositoryData(repository);
loadFullUser(repository.owner.url);
}
@Override
protected void onDestroy() {
super.onDestroy();
if (subscription != null) subscription.unsubscribe();
}
private void bindRepositoryData(final Repository repository) {
setTitle(repository.name);
descriptionText.setText(repository.description);
homepageText.setText(repository.homepage);
homepageText.setVisibility(repository.hasHomepage() ? View.VISIBLE : View.GONE);
languageText.setText(getString(R.string.text_language, repository.language));
languageText.setVisibility(repository.hasLanguage() ? View.VISIBLE : View.GONE);
forkText.setVisibility(repository.isFork() ? View.VISIBLE : View.GONE);
//Preload image for user because we already have it before loading the full user
Picasso.with(this)
.load(repository.owner.avatarUrl)
.placeholder(R.drawable.placeholder)
.into(ownerImage);
}
private void bindOwnerData(final User owner) {
ownerNameText.setText(owner.name);
ownerEmailText.setText(owner.email);
ownerEmailText.setVisibility(owner.hasEmail() ? View.VISIBLE : View.GONE);
ownerLocationText.setText(owner.location);
ownerLocationText.setVisibility(owner.hasLocation() ? View.VISIBLE : View.GONE);
}
private void loadFullUser(String url) {
ArchiApplication application = ArchiApplication.get(this);
GithubService githubService = application.getGithubService();
subscription = githubService.userFromUrl(url)
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(application.defaultSubscribeScheduler())
.subscribe(new Action1<User>() {
@Override
public void call(User user) {
Log.i(TAG, "Full user data loaded " + user);
bindOwnerData(user);
ownerLayout.setVisibility(View.VISIBLE);
}
});
}
}