package org.pyneo.tabulae.gui; import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import org.pyneo.tabulae.Base; import org.pyneo.tabulae.R; import org.pyneo.tabulae.Tabulae; import static org.pyneo.tabulae.gui.Constants.*; public class Dashboard extends Base { protected DashboardItem[] dashboardItems; protected boolean enabled = true; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { if (DEBUG) Log.d(TAG, "Dashboard.onCreateView"); return inflater.inflate(R.layout.dashboard, container, false); } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); if (DEBUG) Log.d(TAG, "Dashboard.onActivityCreated"); Activity a = getActivity(); ViewGroup viewGroup = (ViewGroup)a.findViewById(R.id.dashboard).findViewById(R.id.dashboard_list); viewGroup.removeAllViews(); dashboardItems = new DashboardItem[]{ new DashboardItem(a, viewGroup, R.id.event_notify_location, getString(R.string.title_provider), "provider", getString(R.string.unit_empty)), new DashboardItem(a, viewGroup, R.id.event_notify_location, getString(R.string.title_satellite), "satellites", getString(R.string.unit_empty)), new DashboardItem(a, viewGroup, R.id.event_notify_location, getString(R.string.title_bearing), "bearing", getString(R.string.unit_degree)), new DashboardItem(a, viewGroup, R.id.event_notify_location, getString(R.string.title_accuracy), "accuracy", getString(R.string.unit_m)), new DashboardItem(a, viewGroup, R.id.event_notify_location, getString(R.string.title_speed), "speed", getString(R.string.unit_kmh)), new DashboardItem(a, viewGroup, R.id.event_notify_location, getString(R.string.title_pace), "pace", getString(R.string.unit_minkm)), new DashboardItem(a, viewGroup, R.id.event_notify_zoom, getString(R.string.title_zoom), "zoom_level", getString(R.string.unit_zoom)), new DashboardItem(a, viewGroup, R.id.event_notify_cell, "Cell Identifier", "cell_ident", ""), new DashboardItem(a, viewGroup, R.id.event_notify_location, getString(R.string.title_latitude), "latitude", getString(R.string.unit_degree)), new DashboardItem(a, viewGroup, R.id.event_notify_location, getString(R.string.title_longitude), "longitude", getString(R.string.unit_degree)), new DashboardItem(a, viewGroup, R.id.event_notify_map, getString(R.string.title_current_map), "current_map", getString(R.string.unit_empty)), new DashboardItem(a, viewGroup, R.id.event_notify_time, getString(R.string.title_current_time), "current_time", getString(R.string.unit_empty)), }; for (int e: new int[]{ R.id.event_request_cell, R.id.event_request_location, R.id.event_request_map, R.id.event_request_time, R.id.event_request_zoom, }) { ((Tabulae)a).inform(e, null); } Bundle b = new Bundle(); b.putBoolean("enabled", enabled); ((Tabulae)getActivity()).inform(R.id.event_notify_dashboard, b); } public void inform(int event, Bundle extra) { //if (DEBUG) Log.d(TAG, "Dashboard.inform event=" + event + ", extra=" + extra); if (dashboardItems != null) { for (DashboardItem d : dashboardItems) { d.inform(event, extra); } } switch (event) { case R.id.event_request_dashboard: { if (getActivity() != null) { Bundle b = new Bundle(); b.putBoolean("enabled", enabled); ((Tabulae)getActivity()).inform(R.id.event_notify_dashboard, b); } } break; case R.id.event_do_dashboard: { enabled = !enabled; getActivity().findViewById(R.id.dashboard_list).setVisibility(enabled ? View.VISIBLE : View.GONE); if (getActivity() != null) { Bundle b = new Bundle(); b.putBoolean("enabled", enabled); ((Tabulae)getActivity()).inform(R.id.event_notify_dashboard, b); } } break; } } static class DashboardItem { int event; String value_key; TextView textView; Activity activity; DashboardItem(Activity activity, ViewGroup viewGroup, int event, String header, String value_key, String unit) { View item = LayoutInflater.from(activity).inflate(R.layout.dashboard_item, viewGroup, false); ((TextView) item.findViewById(R.id.data_header)).setText(header); ((TextView) item.findViewById(R.id.data_unit)).setText(unit); viewGroup.addView(item); textView = ((TextView) item.findViewById(R.id.data_value)); this.value_key = value_key; this.event = event; this.activity = activity; textView.setText("---"); } void inform(int event, Bundle extra) { if (event == this.event && extra != null && extra.containsKey(value_key)) { Object temp = extra.get(value_key); if (temp == null) { temp = "---"; } String value = temp.toString(); if (value.length() > 8) { value = value.substring(0, 8); } final String v = value; activity.runOnUiThread(new Runnable() { public void run() { textView.setText(v); } }); } } } }