package cgeo.geocaching; import cgeo.geocaching.network.StatusUpdater; import cgeo.geocaching.network.StatusUpdater.Status; import cgeo.geocaching.utils.AndroidRxUtils; import cgeo.geocaching.utils.Log; import android.content.Intent; import android.content.res.Resources; import android.net.Uri; import android.os.Bundle; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; import butterknife.BindView; import butterknife.ButterKnife; import butterknife.Unbinder; import io.reactivex.disposables.CompositeDisposable; import io.reactivex.functions.Consumer; public class StatusFragment extends Fragment { @BindView(R.id.status_icon) protected ImageView statusIcon; @BindView(R.id.status_message) protected TextView statusMessage; private CompositeDisposable statusSubscription = new CompositeDisposable(); private Unbinder unbinder; @Override public View onCreateView(final LayoutInflater inflater, final ViewGroup container, final Bundle savedInstanceState) { super.onCreateView(inflater, container, savedInstanceState); final ViewGroup statusGroup = (ViewGroup) inflater.inflate(R.layout.status, container, false); unbinder = ButterKnife.bind(this, statusGroup); statusSubscription.add(AndroidRxUtils.bindFragment(this, StatusUpdater.LATEST_STATUS) .subscribe(new Consumer<Status>() { @Override public void accept(final Status status) { if (status == Status.NO_STATUS) { statusGroup.setVisibility(View.INVISIBLE); return; } final Resources res = getResources(); final String packageName = getActivity().getPackageName(); if (status.icon != null) { final int iconId = res.getIdentifier(status.icon, "drawable", packageName); if (iconId != 0) { statusIcon.setImageResource(iconId); statusIcon.setVisibility(View.VISIBLE); } else { Log.w("StatusHandler: could not find icon corresponding to @drawable/" + status.icon); statusIcon.setVisibility(View.GONE); } } else { statusIcon.setVisibility(View.GONE); } String message = status.message; if (status.messageId != null) { final int messageId = res.getIdentifier(status.messageId, "string", packageName); if (messageId != 0) { message = res.getString(messageId); } } statusMessage.setText(message); statusGroup.setVisibility(View.VISIBLE); if (status.url != null) { statusGroup.setOnClickListener(new OnClickListener() { @Override public void onClick(final View v) { startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(status.url))); } }); } else { statusGroup.setClickable(false); } } })); return statusGroup; } @Override public void onDestroyView() { statusSubscription.clear(); super.onDestroyView(); unbinder.unbind(); } }