diff options
Diffstat (limited to 'main/src/cgeo/geocaching/StatusFragment.java')
| -rw-r--r-- | main/src/cgeo/geocaching/StatusFragment.java | 129 |
1 files changed, 54 insertions, 75 deletions
diff --git a/main/src/cgeo/geocaching/StatusFragment.java b/main/src/cgeo/geocaching/StatusFragment.java index 4f70f0e..3672a3b 100644 --- a/main/src/cgeo/geocaching/StatusFragment.java +++ b/main/src/cgeo/geocaching/StatusFragment.java @@ -1,15 +1,17 @@ package cgeo.geocaching; +import cgeo.geocaching.network.StatusUpdater; import cgeo.geocaching.network.StatusUpdater.Status; -import cgeo.geocaching.utils.IObserver; import cgeo.geocaching.utils.Log; +import rx.Subscription; +import rx.android.observables.AndroidObservable; +import rx.functions.Action1; + import android.content.Intent; import android.content.res.Resources; import android.net.Uri; import android.os.Bundle; -import android.os.Handler; -import android.os.Message; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; @@ -20,91 +22,68 @@ import android.widget.TextView; public class StatusFragment extends Fragment { - private ViewGroup status; - private ImageView statusIcon; - private TextView statusMessage; - - final private StatusHandler statusHandler = new StatusHandler(); + private Subscription statusSubscription; @Override public View onCreateView(final LayoutInflater inflater, final ViewGroup container, final Bundle savedInstanceState) { super.onCreateView(inflater, container, savedInstanceState); - status = (ViewGroup) inflater.inflate(R.layout.status, container, false); - statusIcon = (ImageView) status.findViewById(R.id.status_icon); - statusMessage = (TextView) status.findViewById(R.id.status_message); - return status; - } - - @Override - public void onResume() { - super.onResume(); - CgeoApplication.getInstance().getStatusUpdater().addObserver(statusHandler); - } - - @Override - public void onPause() { - CgeoApplication.getInstance().getStatusUpdater().deleteObserver(statusHandler); - super.onPause(); - } - - private class StatusHandler extends Handler implements IObserver<Status> { - - @Override - public void update(final Status data) { - obtainMessage(0, data).sendToTarget(); - } - - @Override - public void handleMessage(final Message msg) { - final Status data = (Status) msg.obj; - updateDisplay(data != null && data.message != null ? data : Status.defaultStatus()); - } - - private void updateDisplay(final Status data) { - - if (data == null) { - status.setVisibility(View.INVISIBLE); - return; - } - - final Resources res = getResources(); - final String packageName = getActivity().getPackageName(); + final ViewGroup statusGroup = (ViewGroup) inflater.inflate(R.layout.status, container, false); + final ImageView statusIcon = (ImageView) statusGroup.findViewById(R.id.status_icon); + final TextView statusMessage = (TextView) statusGroup.findViewById(R.id.status_message); + statusSubscription = AndroidObservable.fromFragment(this, StatusUpdater.latestStatus).subscribe(new Action1<Status>() { + @Override + public void call(final Status status) { + if (status == null) { + statusGroup.setVisibility(View.INVISIBLE); + return; + } - if (data.icon != null) { - final int iconId = res.getIdentifier(data.icon, "drawable", packageName); - if (iconId != 0) { - statusIcon.setImageResource(iconId); - statusIcon.setVisibility(View.VISIBLE); + 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 { - Log.w("StatusHandler: could not find icon corresponding to @drawable/" + data.icon); statusIcon.setVisibility(View.GONE); } - } else { - statusIcon.setVisibility(View.GONE); - } - String message = data.message; - if (data.messageId != null) { - final int messageId = res.getIdentifier(data.messageId, "string", packageName); - if (messageId != 0) { - message = res.getString(messageId); + 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); - status.setVisibility(View.VISIBLE); + statusMessage.setText(message); + statusGroup.setVisibility(View.VISIBLE); - if (data.url != null) { - status.setOnClickListener(new OnClickListener() { - @Override - public void onClick(final View v) { - startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(data.url))); - } - }); - } else { - status.setClickable(false); + 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 onDestroy() { + statusSubscription.unsubscribe(); + super.onDestroy(); } + } |
