package com.qubling.sidekick.ui.release; import java.util.Comparator; import com.qubling.sidekick.R; import com.qubling.sidekick.fetch.Fetcher; import com.qubling.sidekick.instance.Gravatar; import com.qubling.sidekick.instance.Module; import com.qubling.sidekick.instance.Release; import com.qubling.sidekick.model.ModuleModel; import com.qubling.sidekick.model.ReleaseModel; import com.qubling.sidekick.search.ResultSet; import com.qubling.sidekick.search.Schema; import com.qubling.sidekick.search.Search; import com.qubling.sidekick.ui.module.ModuleFragment; import com.qubling.sidekick.widget.ModuleListAdapter; import android.graphics.Color; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.Button; import android.widget.ListView; import android.widget.QuickContactBadge; import android.widget.RatingBar; import android.widget.TextView; import android.widget.AdapterView.OnItemClickListener; public class ReleaseInfoFragment extends ModuleFragment { private Schema searchSession; private Release release; private Module module; private Search<Module> moduleSearch; public void setRelease(Release release) { this.release = release; updateReleaseInfo(); } public Release getRelease() { return release; } private void updateReleaseInfo() { TextView releaseName = (TextView) getActivity().findViewById(R.id.release_name); StringBuilder distVersion = new StringBuilder(); distVersion.append(release.getName()); distVersion.append('-'); distVersion.append(release.getVersion()); releaseName.setText(distVersion); TextView authorFullName = (TextView) getActivity().findViewById(R.id.module_author_fullname); authorFullName.setText(release.getAuthor().getFullName()); TextView releaseMeta = (TextView) getActivity().findViewById(R.id.release_metadata); releaseMeta.setText("License: " + (release.getLicense() == null ? "..." : release.getLicense())); TextView authorPauseId = (TextView) getActivity().findViewById(R.id.module_author_pauseid); authorPauseId.setText(release.getAuthorPauseId()); // Set the rating bar RatingBar distRating = (RatingBar) getActivity().findViewById(R.id.module_release_rating); distRating.setRating((float) release.getRatingMean()); // Set the rating count TextView distRatingCount = (TextView) getActivity().findViewById(R.id.module_release_rating_count); distRatingCount.setText(String.valueOf(release.getRatingCount())); // Set the favorite count Button favoriteCount = (Button) getActivity().findViewById(R.id.module_release_favorite); if (release.getFavoriteCount() > 0) { favoriteCount.setText(release.getFavoriteCount() + "++ "); favoriteCount.setBackgroundResource(R.drawable.btn_favorite_others); favoriteCount.setShadowLayer(1.5f, 1f, 1f, R.color.favorite_text_shadow_color); } // Not favorited yet, set it to a blank else { favoriteCount.setText("++ "); favoriteCount.setBackgroundResource(R.drawable.btn_favorite_default); favoriteCount.setShadowLayer(0, 0, 0, Color.TRANSPARENT); } // Mark this as our favorite if (release.isMyFavorite()) { favoriteCount.setBackgroundResource(R.drawable.btn_favorite_mine); } // Set the quick contact badge to the author's picture Gravatar gravatar = release.getAuthor().getGravatar(); QuickContactBadge badge = (QuickContactBadge) getActivity().findViewById(R.id.module_author_avatar); if (gravatar != null && gravatar.getBitmap() != null) { badge.setImageBitmap(gravatar.getBitmap()); } // No user picture, set to default else { badge.setImageResource(R.drawable.ic_contact_picture); } } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); searchSession = new Schema(this.getActivity()); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.release_view_fragment, container, false); } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); fetchRelease(); } private void fetchRelease() { fetchReleaseMetadata(); fetchReleaseModules(); } private void fetchReleaseMetadata() { ReleaseModel releases = searchSession.getReleaseModel(); Fetcher<Release> releaseFetch = releases.fetch(); releaseFetch.getResultSet().add(release); Search<Release> releaseMetaSearch = searchSession.doFetch(releaseFetch, new Fetcher.OnFinished<Release>() { @Override public void onFinishedFetch(Fetcher<Release> fetcher, ResultSet<Release> results) { // Don't do anything if we don't have an activity (i.e., don't NPE either) if (getActivity() == null) return; updateReleaseInfo(); } }); releaseMetaSearch.start(); } private void fetchReleaseModules() { ModuleModel modules = searchSession.getModuleModel(); Fetcher<Module> modulesFetch = modules.fetchModulesForRelease(release); moduleSearch = searchSession.doFetch(modulesFetch, new Fetcher.OnFinished<Module>() { @Override public void onFinishedFetch(Fetcher<Module> fetcher, ResultSet<Module> results) { results.sort(new Comparator<Module>() { @Override public int compare(Module a, Module b) { return a.getName().compareToIgnoreCase(b.getName()); } }); if (getActivity() == null) return; ModuleListAdapter adapter = new ModuleListAdapter(getActivity(), moduleSearch, R.layout.module_list_item_simplified); ListView moduleListView = (ListView) getActivity().findViewById(R.id.release_modules_list); moduleListView.setAdapter(adapter); if (module != null) { int position = adapter.setCurrentModule(module); moduleListView.setSelection(position); } moduleListView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View row, int position, long id) { ListView moduleListView = (ListView) parent; Module currentModule = (Module) moduleListView.getItemAtPosition(position); // This happens when you click on the progress throbber item if (currentModule == null) return; getModuleActivity().onModuleClick(currentModule); ModuleListAdapter adapter = (ModuleListAdapter) parent.getAdapter(); adapter.setCurrentModule(position); module = adapter.getItem(position); } }); } }); moduleSearch.start(); } public void selectModule(Module module) { this.module = module; ListView moduleListView = (ListView) getActivity().findViewById(R.id.release_modules_list); if (moduleListView == null) return; ModuleListAdapter adapter = (ModuleListAdapter) moduleListView.getAdapter(); if (adapter == null) return; adapter.setCurrentModule(module); } }