package com.airlocksoftware.hackernews.fragment; import android.content.Context; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.LoaderManager; import android.support.v4.content.Loader; import android.text.Html; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import com.airlocksoftware.hackernews.R; import com.airlocksoftware.hackernews.loader.AboutUserLoader; import com.airlocksoftware.hackernews.model.User; import com.airlocksoftware.holo.actionbar.interfaces.ActionBarClient; import com.airlocksoftware.holo.actionbar.interfaces.ActionBarController; import com.airlocksoftware.holo.type.FontText; import com.airlocksoftware.holo.utils.ViewUtils; /** Fragment that displays the user's name, karma, and about summary. **/ public class AboutUserFragment extends Fragment implements ActionBarClient, LoaderManager.LoaderCallbacks<User> { // State String mUsername; FontText mUsernameText, mCreatedText, mTotalText, mAvgText, mDescriptionText; View mError, mLoading, mAboutUserContainer; // Constants public static final String USERNAME = AboutUserFragment.class.getSimpleName() + ".username"; public AboutUserFragment() { // default no-arg constructor } @Override public void onCreate(Bundle savedState) { super.onCreate(savedState); Bundle args = getArguments(); if (args != null) mUsername = args.getString(USERNAME); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View root = inflater.inflate(R.layout.frg_aboutuser, container, false); ViewUtils.fixBackgroundRepeat(root); findViews(root); showLoading(); return root; } private void findViews(View root) { mAboutUserContainer = root.findViewById(R.id.cnt_about_user); mUsernameText = (FontText) root.findViewById(R.id.txt_username); mCreatedText = (FontText) root.findViewById(R.id.txt_created); mTotalText = (FontText) root.findViewById(R.id.txt_karma_total); mAvgText = (FontText) root.findViewById(R.id.txt_karma_avg); mDescriptionText = (FontText) root.findViewById(R.id.txt_description); mError = root.findViewById(R.id.cnt_error); mLoading = root.findViewById(R.id.cnt_loading); } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); // restoring saved state if (savedInstanceState != null) { mUsername = savedInstanceState.getString(USERNAME); } getLoaderManager().initLoader(0, null, this); } @Override public void onSaveInstanceState(Bundle outState) { outState.putString(USERNAME, mUsername); super.onSaveInstanceState(outState); } @Override public Loader<User> onCreateLoader(int id, Bundle args) { return new AboutUserLoader(getActivity(), mUsername); } @Override public void onLoadFinished(Loader<User> loader, User data) { if (data != null) { bindData(data); showContent(); } else { showError(); } } private void bindData(User data) { mUsernameText.setText(data.username); mCreatedText.setText(data.created); mTotalText.setText(Integer.toString(data.karma)); if (data.avg != -1.0f) mAvgText.setText(Float.toString(data.avg)); mDescriptionText.setText(Html.fromHtml(data.aboutHtml)); } @Override public void onLoaderReset(Loader<User> loader) { // do nothing } @Override public void setupActionBar(Context context, ActionBarController ab) { ab.setTitleText(context.getString(R.string.about_user)); } @Override public void cleanupActionBar(Context context, ActionBarController ab) { ab.setTitleText(null); } private void showLoading() { mError.setVisibility(View.GONE); mLoading.setVisibility(View.VISIBLE); mAboutUserContainer.setVisibility(View.GONE); } private void showError() { mAboutUserContainer.setVisibility(View.GONE); mError.setVisibility(View.VISIBLE); mLoading.setVisibility(View.GONE); } private void showContent() { mAboutUserContainer.setVisibility(View.VISIBLE); mError.setVisibility(View.GONE); mLoading.setVisibility(View.GONE); } }