// Path: AndroidApp/src/ca/psiphon/ploggy/widgets/TimePickerPreference.java
// public class TimePickerPreference extends DialogPreference implements
//                 TimePicker.OnTimeChangedListener {
// 
//         /**
//          * The validation expression for this preference
//          */
//         private static final String VALIDATION_EXPRESSION = "[0-2]*[0-9]:[0-5]*[0-9]";
// 
//         /**
//          * The default value for this preference
//          */
//         private final String defaultValue;
//         private String result;
//         private TimePicker tp;
// 
//         /**
//          * @param context
//          * @param attrs
//          */
//         public TimePickerPreference(Context context, AttributeSet attrs) {
//                 super(context, attrs);
//                 defaultValue = attrs.getAttributeValue("http://schemas.android.com/apk/res/android", "defaultValue");
//                 initialize();
//         }
// 
//         /**
//          * @param context
//          * @param attrs
//          * @param defStyle
//          */
//         public TimePickerPreference(Context context, AttributeSet attrs,
//                         int defStyle) {
//                 super(context, attrs, defStyle);
//                 defaultValue = attrs.getAttributeValue("http://schemas.android.com/apk/res/android", "defaultValue");
//                 initialize();
//         }
// 
//         /**
//          * Initialize this preference
//          */
//         private void initialize() {
//                 setPersistent(true);
//         }
// 
//         /*
//          * (non-Javadoc)
//          *
//          * @see android.preference.DialogPreference#onCreateDialogView()
//          */
//         @Override
//         protected View onCreateDialogView() {
// 
//                 tp = new TimePicker(getContext());
//                 tp.setOnTimeChangedListener(this);
// 
//                 String value = getPersistedString(this.defaultValue);
//                 int h = getHour(value);
//                 int m = getMinute(value);
//                 if (h >= 0 && m >= 0) {
//                         tp.setCurrentHour(h);
//                         tp.setCurrentMinute(m);
//                 }
//                 tp.setIs24HourView(DateFormat.is24HourFormat(getContext()));
// 
//                 return tp;
//         }
// 
//         /*
//          * (non-Javadoc)
//          *
//          * @see
//          * android.widget.TimePicker.OnTimeChangedListener#onTimeChanged(android
//          * .widget.TimePicker, int, int)
//          */
// 
//         @Override
//         public void onTimeChanged(TimePicker view, int hour, int minute) {
//                 result = hour + ":" + minute;
//         }
// 
//         /*
//          * (non-Javadoc)
//          *
//          * @see
//          * android.preference.DialogPreference#onDismiss(android.content.DialogInterface
//          * )
//          */
//         @Override
//         public void onDismiss(DialogInterface dialog) {
//                 super.onDismiss(dialog);
//         }
// 
//         /*
//          * (non-Javadoc)
//          *
//          * @see android.preference.DialogPreference#onDialogClosed(boolean)
//          */
//         @Override
//         protected void onDialogClosed(boolean positiveResult) {
//                 super.onDialogClosed(positiveResult);
//                 if (positiveResult) {
//                         tp.clearFocus();        // to get value of number if edited in text field, and clicking OK without clicking outside the field first (bug in NumberPicker)
//                         result = tp.getCurrentHour() + ":" + tp.getCurrentMinute();
//                         persistString(result);
//                         callChangeListener(result);
//                 }
//         }
// 
//         /**
//          * Get the hour value (in 24 hour time)
//          *
//          * @return The hour value, will be 0 to 23 (inclusive)
//          */
//         public static int getHour(String value) {
//                 if (value == null || !value.matches(VALIDATION_EXPRESSION)) {
//                         return -1;
//                 }
// 
//                 return Integer.valueOf(value.split(":|/")[0]);
//         }
// 
//         /**
//          * Get the minute value
//          *
//          * @return the minute value, will be 0 to 59 (inclusive)
//          */
//         public static int getMinute(String value) {
//                 if (value == null || !value.matches(VALIDATION_EXPRESSION)) {
//                         return -1;
//                 }
// 
//                 return Integer.valueOf(value.split(":|/")[1]);
//         }
// }


import java.util.Map;
import android.content.SharedPreferences;
import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
import android.os.Bundle;
import android.preference.Preference;
import android.preference.PreferenceFragment;
import ca.psiphon.ploggy.widgets.TimePickerPreference;

            initTimePickerPreferences();
        }

        @Override
        public void onResume() {
            super.onResume();
            getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
        }

        @Override
        public void onPause() {
            super.onPause();
            getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);
        }

        @Override
        public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
            setTimePickerPreferenceSummary(sharedPreferences, key);
        }

        private void initTimePickerPreferences() {
            SharedPreferences sharedPreferences = this.getPreferenceManager().getSharedPreferences();
            for (Map.Entry<String, ?> entry : sharedPreferences.getAll().entrySet()) {
                setTimePickerPreferenceSummary(sharedPreferences, entry.getKey());
            }
        }

        private void setTimePickerPreferenceSummary(SharedPreferences sharedPreferences, String key) {
            Preference preference = findPreference(key);
// Path: AndroidApp/src/ca/psiphon/ploggy/widgets/TimePickerPreference.java
// public class TimePickerPreference extends DialogPreference implements
//                 TimePicker.OnTimeChangedListener {
// 
//         /**
//          * The validation expression for this preference
//          */
//         private static final String VALIDATION_EXPRESSION = "[0-2]*[0-9]:[0-5]*[0-9]";
// 
//         /**
//          * The default value for this preference
//          */
//         private final String defaultValue;
//         private String result;
//         private TimePicker tp;
// 
//         /**
//          * @param context
//          * @param attrs
//          */
//         public TimePickerPreference(Context context, AttributeSet attrs) {
//                 super(context, attrs);
//                 defaultValue = attrs.getAttributeValue("http://schemas.android.com/apk/res/android", "defaultValue");
//                 initialize();
//         }
// 
//         /**
//          * @param context
//          * @param attrs
//          * @param defStyle
//          */
//         public TimePickerPreference(Context context, AttributeSet attrs,
//                         int defStyle) {
//                 super(context, attrs, defStyle);
//                 defaultValue = attrs.getAttributeValue("http://schemas.android.com/apk/res/android", "defaultValue");
//                 initialize();
//         }
// 
//         /**
//          * Initialize this preference
//          */
//         private void initialize() {
//                 setPersistent(true);
//         }
// 
//         /*
//          * (non-Javadoc)
//          *
//          * @see android.preference.DialogPreference#onCreateDialogView()
//          */
//         @Override
//         protected View onCreateDialogView() {
// 
//                 tp = new TimePicker(getContext());
//                 tp.setOnTimeChangedListener(this);
// 
//                 String value = getPersistedString(this.defaultValue);
//                 int h = getHour(value);
//                 int m = getMinute(value);
//                 if (h >= 0 && m >= 0) {
//                         tp.setCurrentHour(h);
//                         tp.setCurrentMinute(m);
//                 }
//                 tp.setIs24HourView(DateFormat.is24HourFormat(getContext()));
// 
//                 return tp;
//         }
// 
//         /*
//          * (non-Javadoc)
//          *
//          * @see
//          * android.widget.TimePicker.OnTimeChangedListener#onTimeChanged(android
//          * .widget.TimePicker, int, int)
//          */
// 
//         @Override
//         public void onTimeChanged(TimePicker view, int hour, int minute) {
//                 result = hour + ":" + minute;
//         }
// 
//         /*
//          * (non-Javadoc)
//          *
//          * @see
//          * android.preference.DialogPreference#onDismiss(android.content.DialogInterface
//          * )
//          */
//         @Override
//         public void onDismiss(DialogInterface dialog) {
//                 super.onDismiss(dialog);
//         }
// 
//         /*
//          * (non-Javadoc)
//          *
//          * @see android.preference.DialogPreference#onDialogClosed(boolean)
//          */
//         @Override
//         protected void onDialogClosed(boolean positiveResult) {
//                 super.onDialogClosed(positiveResult);
//                 if (positiveResult) {
//                         tp.clearFocus();        // to get value of number if edited in text field, and clicking OK without clicking outside the field first (bug in NumberPicker)
//                         result = tp.getCurrentHour() + ":" + tp.getCurrentMinute();
//                         persistString(result);
//                         callChangeListener(result);
//                 }
//         }
// 
//         /**
//          * Get the hour value (in 24 hour time)
//          *
//          * @return The hour value, will be 0 to 23 (inclusive)
//          */
//         public static int getHour(String value) {
//                 if (value == null || !value.matches(VALIDATION_EXPRESSION)) {
//                         return -1;
//                 }
// 
//                 return Integer.valueOf(value.split(":|/")[0]);
//         }
// 
//         /**
//          * Get the minute value
//          *
//          * @return the minute value, will be 0 to 59 (inclusive)
//          */
//         public static int getMinute(String value) {
//                 if (value == null || !value.matches(VALIDATION_EXPRESSION)) {
//                         return -1;
//                 }
// 
//                 return Integer.valueOf(value.split(":|/")[1]);
//         }
// }


// Path: AndroidApp/src/ca/psiphon/ploggy/ActivitySettings.java
import java.util.Map;
import android.content.SharedPreferences;
import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
import android.os.Bundle;
import android.preference.Preference;
import android.preference.PreferenceFragment;
import ca.psiphon.ploggy.widgets.TimePickerPreference;


            initTimePickerPreferences();
        }

        @Override
        public void onResume() {
            super.onResume();
            getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
        }

        @Override
        public void onPause() {
            super.onPause();
            getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);
        }

        @Override
        public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
            setTimePickerPreferenceSummary(sharedPreferences, key);
        }

        private void initTimePickerPreferences() {
            SharedPreferences sharedPreferences = this.getPreferenceManager().getSharedPreferences();
            for (Map.Entry<String, ?> entry : sharedPreferences.getAll().entrySet()) {
                setTimePickerPreferenceSummary(sharedPreferences, entry.getKey());
            }
        }

        private void setTimePickerPreferenceSummary(SharedPreferences sharedPreferences, String key) {
            Preference preference = findPreference(key);
            if (preference instanceof TimePickerPreference) {