package edu.mit.mitmobile2.emergency; import java.text.SimpleDateFormat; import java.util.Date; import uk.co.senab.actionbarpulltorefresh.library.PullToRefreshAttacher; import uk.co.senab.actionbarpulltorefresh.library.PullToRefreshAttacher.OnRefreshListener; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.net.Uri; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.telephony.PhoneNumberUtils; import android.view.LayoutInflater; import android.view.View; import android.webkit.WebView; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.ImageView; import android.widget.ListView; import android.widget.Toast; import edu.mit.mitmobile2.FullScreenLoader; import edu.mit.mitmobile2.Global; import edu.mit.mitmobile2.NewModule; import edu.mit.mitmobile2.NewModuleActivity; import edu.mit.mitmobile2.R; import edu.mit.mitmobile2.TwoLineActionRow; import edu.mit.mitmobile2.alerts.C2DMReceiver; import edu.mit.mitmobile2.objs.EmergencyItem; import edu.mit.mitmobile2.objs.EmergencyItem.Contact; public class EmergencyActivity extends NewModuleActivity implements OnRefreshListener { FullScreenLoader mLoadingView; static EmergencyItem emergencyItem; private WebView mEmergencyMsgTV = null; SharedPreferences pref; private Context mContext; private PullToRefreshAttacher msgPullToRefreshAttacher; private PullToRefreshAttacher contactsPullToRefreshAttacher; private ListView contactsListView; private ImageView emergencyMsgLoader; private ImageView emergencyListLoader; static String PREF_KEY_EMERGENCY_TEXT = "emergency_text"; private static String noticeTemplate = "<html><body style=\"padding: 7px;\">%s\n<p>Posted %s</p></body></html>"; private Handler uiContactsHandler; private Handler uiStatusHandler; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mContext = this; setContentView(R.layout.emergency); setTitle("Emergeny Contacts"); emergencyMsgLoader = (ImageView)findViewById(R.id.emergencyMsgLoader); emergencyListLoader = (ImageView)findViewById(R.id.emergencyListLoader); mEmergencyMsgTV = (WebView) findViewById(R.id.emergencyMsgTV); contactsListView = (ListView) findViewById(R.id.emergencyContactListView); pref = this.getSharedPreferences(Global.PREFS,MODE_PRIVATE); uiContactsHandler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); updateContacts(); } }; uiStatusHandler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); updateEmergencyText(); C2DMReceiver.markNotificationAsRead(mContext, "emergencyinfo:"); } }; msgPullToRefreshAttacher = createPullToRefreshAttacher(); contactsPullToRefreshAttacher = createPullToRefreshAttacher(); msgPullToRefreshAttacher.setRefreshableView(mEmergencyMsgTV, this); contactsPullToRefreshAttacher.setRefreshableView(contactsListView, this); msgPullToRefreshAttacher.setEnabled(false); contactsPullToRefreshAttacher.setEnabled(false); emergencyMsgLoader.setVisibility(View.VISIBLE); emergencyListLoader.setVisibility(View.VISIBLE); EmergencyParser.fetchStatus(this, uiStatusHandler); EmergencyParser.fetchContacts(this, uiContactsHandler); } private void updateContacts() { emergencyListLoader.setVisibility(View.GONE); contactsListView.setVisibility(View.VISIBLE); LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); final TwoLineActionRow moreContactsRow = (TwoLineActionRow) inflater.inflate(R.layout.boring_action_row, null);; moreContactsRow.setTitle("More Contacts"); contactsListView.addFooterView(moreContactsRow); final EmergencyDB db = EmergencyDB.getInstance(this); EmergencyContactsAdapter adapter = new EmergencyContactsAdapter(this, db.getLimitedContactsCursor()); contactsListView.setAdapter(adapter); contactsListView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { if(view == moreContactsRow) { Intent intent = new Intent(mContext, EmergencyContactsActivity.class); startActivity(intent); return; } Contact c = db.getContact(position); String numericPhone = PhoneNumberUtils.convertKeypadLettersToDigits(c.phone); Intent intent = new Intent(Intent.ACTION_DIAL, Uri.parse("tel:" + numericPhone)); startActivity(intent); } }); } private void updateEmergencyText() { emergencyItem = EmergencyParser.getStatus(); if (emergencyItem==null) { emergencyItem = new EmergencyItem(); Toast.makeText(mContext, "Sorry, showing cached info", Toast.LENGTH_LONG).show(); emergencyItem.text = pref.getString(PREF_KEY_EMERGENCY_TEXT, ""); } else { // Did version change? SharedPreferences.Editor editor = pref.edit(); editor.putInt(Global.PREF_KEY_EMERGENCY_VERSION, Integer.valueOf(emergencyItem.version)); editor.putString(PREF_KEY_EMERGENCY_TEXT, emergencyItem.text); editor.commit(); } setTitle(emergencyItem.title); String html; mEmergencyMsgTV.setVisibility(View.VISIBLE); if (emergencyItem.unixtime > 0) { Date postDate = new Date(emergencyItem.unixtime * 1000); SimpleDateFormat format = new SimpleDateFormat("EEE d, MMM yyyy"); String dateStr = format.format(postDate); html = String.format(noticeTemplate, emergencyItem.text, dateStr); } else { html = emergencyItem.text; } mEmergencyMsgTV.loadDataWithBaseURL(null, html, "text/html", "utf-8", null); msgPullToRefreshAttacher.setEnabled(true); msgPullToRefreshAttacher.setRefreshing(false); contactsPullToRefreshAttacher.setEnabled(true); contactsPullToRefreshAttacher.setRefreshing(false); emergencyMsgLoader.setVisibility(View.GONE); } @Override public boolean isModuleHomeActivity() { return false; } @Override protected NewModule getNewModule() { // TODO Auto-generated method stub return new EmergencyModule(); } @Override protected boolean isScrollable() { // TODO Auto-generated method stub return false; } @Override protected void onOptionSelected(String optionId) { // TODO Auto-generated method stub } @Override public void onRefreshStarted(View view) { EmergencyParser.fetchStatus(this, uiStatusHandler); } }