diff options
Diffstat (limited to 'main/src')
| -rw-r--r-- | main/src/cgeo/geocaching/StatusFragment.java | 110 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/cgeo.java | 70 |
2 files changed, 110 insertions, 70 deletions
diff --git a/main/src/cgeo/geocaching/StatusFragment.java b/main/src/cgeo/geocaching/StatusFragment.java new file mode 100644 index 0000000..5a9a5b4 --- /dev/null +++ b/main/src/cgeo/geocaching/StatusFragment.java @@ -0,0 +1,110 @@ +package cgeo.geocaching; + +import cgeo.geocaching.network.StatusUpdater.Status; +import cgeo.geocaching.utils.IObserver; +import cgeo.geocaching.utils.Log; + +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; +import android.view.View.OnClickListener; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.TextView; + +public class StatusFragment extends Fragment { + + private ViewGroup status; + private ImageView statusIcon; + private TextView statusMessage; + + final private StatusHandler statusHandler = new StatusHandler(); + + @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 : null); + } + + private void updateDisplay(final Status data) { + + if (data == null) { + status.setVisibility(View.INVISIBLE); + return; + } + + final Resources res = getResources(); + final String packageName = getActivity().getPackageName(); + + if (data.icon != null) { + final int iconId = res.getIdentifier(data.icon, "drawable", packageName); + if (iconId != 0) { + statusIcon.setImageResource(iconId); + statusIcon.setVisibility(View.VISIBLE); + } 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); + } + } + + statusMessage.setText(message); + status.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); + } + } + + } +} diff --git a/main/src/cgeo/geocaching/cgeo.java b/main/src/cgeo/geocaching/cgeo.java index cb2de66..29c287a 100644 --- a/main/src/cgeo/geocaching/cgeo.java +++ b/main/src/cgeo/geocaching/cgeo.java @@ -8,10 +8,8 @@ import cgeo.geocaching.enumerations.StatusCode; import cgeo.geocaching.geopoint.Geopoint; import cgeo.geocaching.geopoint.Units; import cgeo.geocaching.maps.CGeoMap; -import cgeo.geocaching.network.StatusUpdater.Status; import cgeo.geocaching.ui.Formatter; import cgeo.geocaching.utils.GeoDirHandler; -import cgeo.geocaching.utils.IObserver; import cgeo.geocaching.utils.Log; import cgeo.geocaching.utils.RunnableWithArgument; import cgeo.geocaching.utils.Version; @@ -29,7 +27,6 @@ import android.content.pm.ResolveInfo; import android.content.res.Configuration; import android.location.Address; import android.location.Geocoder; -import android.net.Uri; import android.os.Bundle; import android.os.Handler; import android.os.Message; @@ -38,8 +35,6 @@ import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; -import android.view.ViewGroup; -import android.widget.ImageView; import android.widget.RelativeLayout; import android.widget.TextView; @@ -174,69 +169,6 @@ public class cgeo extends AbstractActivity { } }; - 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 : null); - } - - private void updateDisplay(final Status data) { - final ViewGroup status = (ViewGroup) findViewById(R.id.status); - final ImageView statusIcon = (ImageView) findViewById(R.id.status_icon); - final TextView statusMessage = (TextView) findViewById(R.id.status_message); - - if (data == null) { - status.setVisibility(View.GONE); - return; - } - - if (data.icon != null) { - final int iconId = res.getIdentifier(data.icon, "drawable", getPackageName()); - if (iconId != 0) { - statusIcon.setImageResource(iconId); - statusIcon.setVisibility(View.VISIBLE); - } else { - Log.e("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", getPackageName()); - if (messageId != 0) { - message = res.getString(messageId); - } - } - - statusMessage.setText(message); - status.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); - } - } - - } - - private StatusHandler statusHandler = new StatusHandler(); - public cgeo() { super("c:geo-main-screen"); } @@ -291,7 +223,6 @@ public class cgeo extends AbstractActivity { @Override public void onResume() { super.onResume(); - app.getStatusUpdater().addObserver(statusHandler); locationUpdater.startGeo(); satellitesHandler.startGeo(); updateUserInfoHandler.sendEmptyMessage(-1); @@ -315,7 +246,6 @@ public class cgeo extends AbstractActivity { @Override public void onPause() { initialized = false; - app.getStatusUpdater().deleteObserver(statusHandler); locationUpdater.stopGeo(); satellitesHandler.stopGeo(); super.onPause(); |
