diff options
author | Daisuke Miyakawa <dmiyakawa@google.com> | 2010-09-09 11:51:16 -0700 |
---|---|---|
committer | Daisuke Miyakawa <dmiyakawa@google.com> | 2010-09-09 16:51:57 -0700 |
commit | 71cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5 (patch) | |
tree | 01f19c29d84f0ae0a5e4af812664189c97d03be3 /src/com/android/settings | |
parent | 0f4f2f3a81f2a6d7100b4cff0d8de062cb2bc8f6 (diff) | |
download | packages_apps_Settings-71cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5.zip packages_apps_Settings-71cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5.tar.gz packages_apps_Settings-71cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5.tar.bz2 |
Implement DateTimeSetings for Setup Wizard XL.
Make the orientation "behind", as XL would require landscape.
TODO:
- Automatic Time Zone should be available.
- Layout is immature: need to have better theme and layout xml.
Change-Id: Iafe141223a227643ca774f4df5e5b7fde9520d31
Diffstat (limited to 'src/com/android/settings')
-rw-r--r-- | src/com/android/settings/DateTimeSettings.java | 72 | ||||
-rw-r--r-- | src/com/android/settings/DateTimeSettingsSetupWizard.java | 138 | ||||
-rw-r--r-- | src/com/android/settings/ZonePicker.java | 10 |
3 files changed, 171 insertions, 49 deletions
diff --git a/src/com/android/settings/DateTimeSettings.java b/src/com/android/settings/DateTimeSettings.java index 61cc613..ecf8520 100644 --- a/src/com/android/settings/DateTimeSettings.java +++ b/src/com/android/settings/DateTimeSettings.java @@ -43,12 +43,15 @@ import java.util.TimeZone; public class DateTimeSettings extends SettingsPreferenceFragment implements OnSharedPreferenceChangeListener, - TimePickerDialog.OnTimeSetListener , DatePickerDialog.OnDateSetListener { + TimePickerDialog.OnTimeSetListener, DatePickerDialog.OnDateSetListener { private static final String HOURS_12 = "12"; private static final String HOURS_24 = "24"; + // Used for showing the current date format, which looks like "12/31/2010", "2010/12/13", etc. + // The date value is dummy (independent of actual date). private Calendar mDummyDate; + private static final String KEY_DATE_FORMAT = "date_format"; private static final String KEY_AUTO_TIME = "auto_time"; @@ -143,42 +146,25 @@ public class DateTimeSettings extends SettingsPreferenceFragment private void updateTimeAndDateDisplay() { java.text.DateFormat shortDateFormat = DateFormat.getDateFormat(getActivity()); - Date now = Calendar.getInstance().getTime(); + final Calendar now = Calendar.getInstance(); Date dummyDate = mDummyDate.getTime(); - mTimePref.setSummary(DateFormat.getTimeFormat(getActivity()).format(now)); - mTimeZone.setSummary(getTimeZoneText()); - mDatePref.setSummary(shortDateFormat.format(now)); + mTimePref.setSummary(DateFormat.getTimeFormat(getActivity()).format(now.getTime())); + mTimeZone.setSummary(getTimeZoneText(now.getTimeZone())); + mDatePref.setSummary(shortDateFormat.format(now.getTime())); mDateFormat.setSummary(shortDateFormat.format(dummyDate)); } @Override public void onDateSet(DatePicker view, int year, int month, int day) { - Calendar c = Calendar.getInstance(); - - c.set(Calendar.YEAR, year); - c.set(Calendar.MONTH, month); - c.set(Calendar.DAY_OF_MONTH, day); - long when = c.getTimeInMillis(); - - if (when / 1000 < Integer.MAX_VALUE) { - SystemClock.setCurrentTimeMillis(when); - } + setDate(year, month, day); updateTimeAndDateDisplay(); } @Override public void onTimeSet(TimePicker view, int hourOfDay, int minute) { - Calendar c = Calendar.getInstance(); - - c.set(Calendar.HOUR_OF_DAY, hourOfDay); - c.set(Calendar.MINUTE, minute); - long when = c.getTimeInMillis(); - - if (when / 1000 < Integer.MAX_VALUE) { - SystemClock.setCurrentTimeMillis(when); - } + setTime(hourOfDay, minute); updateTimeAndDateDisplay(); - + // We don't need to call timeUpdated() here because the TIME_CHANGED // broadcast is sent by the AlarmManager as a side effect of setting the // SystemClock time. @@ -317,18 +303,34 @@ public class DateTimeSettings extends SettingsPreferenceFragment } } - private void setDateFormat(String format) { - if (format.length() == 0) { - format = null; + /* Helper routines to format timezone */ + + /* package */ static void setDate(int year, int month, int day) { + Calendar c = Calendar.getInstance(); + + c.set(Calendar.YEAR, year); + c.set(Calendar.MONTH, month); + c.set(Calendar.DAY_OF_MONTH, day); + long when = c.getTimeInMillis(); + + if (when / 1000 < Integer.MAX_VALUE) { + SystemClock.setCurrentTimeMillis(when); } + } + + /* package */ static void setTime(int hourOfDay, int minute) { + Calendar c = Calendar.getInstance(); - Settings.System.putString(getContentResolver(), Settings.System.DATE_FORMAT, format); + c.set(Calendar.HOUR_OF_DAY, hourOfDay); + c.set(Calendar.MINUTE, minute); + long when = c.getTimeInMillis(); + + if (when / 1000 < Integer.MAX_VALUE) { + SystemClock.setCurrentTimeMillis(when); + } } - - /* Helper routines to format timezone */ - - private String getTimeZoneText() { - TimeZone tz = java.util.Calendar.getInstance().getTimeZone(); + + /* package */ static String getTimeZoneText(TimeZone tz) { boolean daylight = tz.inDaylightTime(new Date()); StringBuilder sb = new StringBuilder(); @@ -340,7 +342,7 @@ public class DateTimeSettings extends SettingsPreferenceFragment return sb.toString(); } - private char[] formatOffset(int off) { + private static char[] formatOffset(int off) { off = off / 1000 / 60; char[] buf = new char[9]; diff --git a/src/com/android/settings/DateTimeSettingsSetupWizard.java b/src/com/android/settings/DateTimeSettingsSetupWizard.java index b10624c..5da17da 100644 --- a/src/com/android/settings/DateTimeSettingsSetupWizard.java +++ b/src/com/android/settings/DateTimeSettingsSetupWizard.java @@ -16,26 +16,142 @@ package com.android.settings; +import com.android.settings.ZonePicker.ZoneSelectionListener; + +import android.app.Activity; +import android.content.res.Configuration; import android.os.Bundle; +import android.provider.Settings; +import android.provider.Settings.SettingNotFoundException; import android.view.View; -import android.view.Window; import android.view.View.OnClickListener; +import android.view.Window; +import android.widget.Button; +import android.widget.CompoundButton; +import android.widget.CompoundButton.OnCheckedChangeListener; +import android.widget.DatePicker; +import android.widget.TimePicker; + +import java.util.Calendar; +import java.util.TimeZone; + +public class DateTimeSettingsSetupWizard extends Activity + implements OnClickListener, ZoneSelectionListener, OnCheckedChangeListener{ + + private boolean mXLargeScreenSize; -public class DateTimeSettingsSetupWizard extends DateTimeSettingsActivity - implements OnClickListener { - private View mNextButton; + /* Available only in XL */ + private Button mTimeZone; + private TimePicker mTimePicker; + private DatePicker mDatePicker; @Override - protected void onCreate(Bundle icicle) { + protected void onCreate(Bundle savedInstanceState) { requestWindowFeature(Window.FEATURE_NO_TITLE); - super.onCreate(icicle); + super.onCreate(savedInstanceState); setContentView(R.layout.date_time_settings_setupwizard); - mNextButton = findViewById(R.id.next_button); - mNextButton.setOnClickListener(this); + + mXLargeScreenSize = (getResources().getConfiguration().screenLayout + & Configuration.SCREENLAYOUT_SIZE_MASK) + == Configuration.SCREENLAYOUT_SIZE_XLARGE; + if (mXLargeScreenSize) { + initUiForXl(); + } else { + findViewById(R.id.next_button).setOnClickListener(this); + } + } + + public void initUiForXl() { + // TODO: use system value + final boolean autoTimeZoneEnabled = false; + final CompoundButton autoTimeZoneButton = + (CompoundButton)findViewById(R.id.time_zone_auto); + autoTimeZoneButton.setChecked(autoTimeZoneEnabled); + autoTimeZoneButton.setOnCheckedChangeListener(this); + // TODO: remove this after the system support. + autoTimeZoneButton.setEnabled(false); + + final boolean autoDateTimeEnabled = isAutoDateTimeEnabled(); + final CompoundButton autoDateTimeButton = + (CompoundButton)findViewById(R.id.date_time_auto); + autoDateTimeButton.setChecked(autoDateTimeEnabled); + autoDateTimeButton.setText(autoDateTimeEnabled ? R.string.date_time_auto_summaryOn : + R.string.date_time_auto_summaryOff); + autoDateTimeButton.setOnCheckedChangeListener(this); + + final TimeZone tz = TimeZone.getDefault(); + mTimeZone = (Button)findViewById(R.id.current_time_zone); + mTimeZone.setText(DateTimeSettings.getTimeZoneText(tz)); + mTimeZone.setOnClickListener(this); + mTimeZone.setEnabled(!autoDateTimeEnabled); + + mTimePicker = (TimePicker)findViewById(R.id.time_picker); + mTimePicker.setEnabled(!autoDateTimeEnabled); + mDatePicker = (DatePicker)findViewById(R.id.date_picker); + mDatePicker.setEnabled(!autoDateTimeEnabled); + + ((ZonePicker)getFragmentManager().findFragmentById(R.id.zone_picker_fragment)) + .setZoneSelectionListener(this); + + ((Button)findViewById(R.id.next_button)).setOnClickListener(this); + ((Button)findViewById(R.id.skip_button)).setOnClickListener(this); + } + + @Override + public void onClick(View view) { + switch (view.getId()) { + case R.id.current_time_zone: { + findViewById(R.id.current_time_zone).setVisibility(View.GONE); + findViewById(R.id.zone_picker).setVisibility(View.VISIBLE); + break; + } + case R.id.next_button: { + if (mXLargeScreenSize) { + DateTimeSettings.setDate(mDatePicker.getYear(), mDatePicker.getMonth(), + mDatePicker.getDayOfMonth()); + DateTimeSettings.setTime( + mTimePicker.getCurrentHour(), mTimePicker.getCurrentMinute()); + } + } // $FALL-THROUGH$ + case R.id.skip_button: { + setResult(RESULT_OK); + finish(); + break; + } + } + } + + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + Settings.System.putInt(getContentResolver(), + Settings.System.AUTO_TIME, + isChecked ? 1 : 0); + if (isChecked) { + findViewById(R.id.current_time_zone).setVisibility(View.VISIBLE); + findViewById(R.id.zone_picker).setVisibility(View.GONE); + } + mTimeZone.setEnabled(!isChecked); + mTimePicker.setEnabled(!isChecked); + mDatePicker.setEnabled(!isChecked); + } + + @Override + public void onZoneSelected(TimeZone tz) { + findViewById(R.id.current_time_zone).setVisibility(View.VISIBLE); + findViewById(R.id.zone_picker).setVisibility(View.GONE); + final Calendar now = Calendar.getInstance(tz); + mTimeZone.setText(DateTimeSettings.getTimeZoneText(tz)); + mDatePicker.updateDate(now.get(Calendar.YEAR), now.get(Calendar.MONTH), + now.get(Calendar.DAY_OF_MONTH)); + mTimePicker.setCurrentHour(now.get(Calendar.HOUR)); + mTimePicker.setCurrentMinute(now.get(Calendar.MINUTE)); } - public void onClick(View v) { - setResult(RESULT_OK); - finish(); + private boolean isAutoDateTimeEnabled() { + try { + return Settings.System.getInt(getContentResolver(), Settings.System.AUTO_TIME) > 0; + } catch (SettingNotFoundException e) { + return true; + } } } diff --git a/src/com/android/settings/ZonePicker.java b/src/com/android/settings/ZonePicker.java index c877bd7..f0c61ed 100644 --- a/src/com/android/settings/ZonePicker.java +++ b/src/com/android/settings/ZonePicker.java @@ -52,7 +52,7 @@ public class ZonePicker extends ListFragment { public static interface ZoneSelectionListener { // You can add any argument if you really need it... - public void onZoneSelected(); + public void onZoneSelected(TimeZone tz); } private static final String KEY_ID = "id"; @@ -235,9 +235,13 @@ public class ZonePicker extends ListFragment { // Update the system timezone value final Activity activity = getActivity(); AlarmManager alarm = (AlarmManager) activity.getSystemService(Context.ALARM_SERVICE); - alarm.setTimeZone((String) map.get(KEY_ID)); + String tzId = (String) map.get(KEY_ID); + alarm.setTimeZone(tzId); + final TimeZone tz = TimeZone.getTimeZone(tzId); if (mListener != null) { - mListener.onZoneSelected(); + mListener.onZoneSelected(tz); + } else { + getActivity().onBackPressed(); } } |