1afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project/* 2afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * Copyright (C) 2008 The Android Open Source Project 3afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * 4afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 5afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * you may not use this file except in compliance with the License. 6afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * You may obtain a copy of the License at 7afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * 8afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 9afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * 10afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software 11afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 12afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * See the License for the specific language governing permissions and 14afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * limitations under the License. 15afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project */ 16afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 17afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectpackage com.android.settings; 18afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 1971cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawaimport android.app.Activity; 202571f0dcb1cc96b7220687aff6fcddc623b57c3cDaisuke Miyakawaimport android.app.AlarmManager; 21a85bfd2552ea4ee73e4a98e85194a3eb42284940Daisuke Miyakawaimport android.content.BroadcastReceiver; 22f2d5e9536ac741b384e154abb5bdb6d5d295a391Daisuke Miyakawaimport android.content.Context; 23ce0a7b2df0d6ce3d5a9bf063cde2e23b92ec7002Daisuke Miyakawaimport android.content.Intent; 24a85bfd2552ea4ee73e4a98e85194a3eb42284940Daisuke Miyakawaimport android.content.IntentFilter; 25afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.os.Bundle; 2671cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawaimport android.provider.Settings; 2771cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawaimport android.provider.Settings.SettingNotFoundException; 2839b467482d1bf256a111c757e9b7621c6f523271Jason Monkimport android.support.v14.preference.PreferenceFragment; 2939b467482d1bf256a111c757e9b7621c6f523271Jason Monkimport android.support.v7.preference.Preference; 302571f0dcb1cc96b7220687aff6fcddc623b57c3cDaisuke Miyakawaimport android.util.Log; 31afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.view.View; 32afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.view.View.OnClickListener; 3371cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawaimport android.view.Window; 34f2d5e9536ac741b384e154abb5bdb6d5d295a391Daisuke Miyakawaimport android.view.inputmethod.InputMethodManager; 352571f0dcb1cc96b7220687aff6fcddc623b57c3cDaisuke Miyakawaimport android.widget.AdapterView; 362571f0dcb1cc96b7220687aff6fcddc623b57c3cDaisuke Miyakawaimport android.widget.AdapterView.OnItemClickListener; 3771cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawaimport android.widget.Button; 3871cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawaimport android.widget.CompoundButton; 3971cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawaimport android.widget.CompoundButton.OnCheckedChangeListener; 4071cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawaimport android.widget.DatePicker; 412571f0dcb1cc96b7220687aff6fcddc623b57c3cDaisuke Miyakawaimport android.widget.ListPopupWindow; 422571f0dcb1cc96b7220687aff6fcddc623b57c3cDaisuke Miyakawaimport android.widget.SimpleAdapter; 4371cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawaimport android.widget.TimePicker; 4471cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa 4571cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawaimport java.util.Calendar; 4671cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawaimport java.util.TimeZone; 4771cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa 4871cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawapublic class DateTimeSettingsSetupWizard extends Activity 494412e88e83099323a49e63f9544abd3294091f03Freeman Ng implements OnClickListener, OnItemClickListener, OnCheckedChangeListener, 504412e88e83099323a49e63f9544abd3294091f03Freeman Ng PreferenceFragment.OnPreferenceStartFragmentCallback { 51fe3b6bea01de328cdf7d6cf414607304fcdeaed6Daisuke Miyakawa private static final String TAG = DateTimeSettingsSetupWizard.class.getSimpleName(); 5271cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa 53ce0a7b2df0d6ce3d5a9bf063cde2e23b92ec7002Daisuke Miyakawa // force the first status of auto datetime flag. 54ce0a7b2df0d6ce3d5a9bf063cde2e23b92ec7002Daisuke Miyakawa private static final String EXTRA_INITIAL_AUTO_DATETIME_VALUE = 55ffe621f03f2ce14883ada77e4f4a76c529275495Daisuke Miyakawa "extra_initial_auto_datetime_value"; 56ce0a7b2df0d6ce3d5a9bf063cde2e23b92ec7002Daisuke Miyakawa 574412e88e83099323a49e63f9544abd3294091f03Freeman Ng // If we have enough screen real estate, we use a radically different layout with 584412e88e83099323a49e63f9544abd3294091f03Freeman Ng // big date and time pickers right on the screen, which requires very different handling. 594412e88e83099323a49e63f9544abd3294091f03Freeman Ng // Otherwise, we use the standard date time settings fragment. 604412e88e83099323a49e63f9544abd3294091f03Freeman Ng private boolean mUsingXLargeLayout; 61afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 6271cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa /* Available only in XL */ 634ad2f9b87047237538fdfbe4730b378b7aa3bbccDaisuke Miyakawa private CompoundButton mAutoDateTimeButton; 64ce0a7b2df0d6ce3d5a9bf063cde2e23b92ec7002Daisuke Miyakawa // private CompoundButton mAutoTimeZoneButton; 652571f0dcb1cc96b7220687aff6fcddc623b57c3cDaisuke Miyakawa 662571f0dcb1cc96b7220687aff6fcddc623b57c3cDaisuke Miyakawa private Button mTimeZoneButton; 672571f0dcb1cc96b7220687aff6fcddc623b57c3cDaisuke Miyakawa private ListPopupWindow mTimeZonePopup; 682571f0dcb1cc96b7220687aff6fcddc623b57c3cDaisuke Miyakawa private SimpleAdapter mTimeZoneAdapter; 692571f0dcb1cc96b7220687aff6fcddc623b57c3cDaisuke Miyakawa private TimeZone mSelectedTimeZone; 702571f0dcb1cc96b7220687aff6fcddc623b57c3cDaisuke Miyakawa 7171cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa private TimePicker mTimePicker; 7271cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa private DatePicker mDatePicker; 73f2d5e9536ac741b384e154abb5bdb6d5d295a391Daisuke Miyakawa private InputMethodManager mInputMethodManager; 740f4f2f3a81f2a6d7100b4cff0d8de062cb2bc8f6Daisuke Miyakawa 75afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project @Override 7671cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa protected void onCreate(Bundle savedInstanceState) { 77a85bfd2552ea4ee73e4a98e85194a3eb42284940Daisuke Miyakawa requestWindowFeature(Window.FEATURE_NO_TITLE); 7871cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa super.onCreate(savedInstanceState); 79afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project setContentView(R.layout.date_time_settings_setupwizard); 804412e88e83099323a49e63f9544abd3294091f03Freeman Ng 814412e88e83099323a49e63f9544abd3294091f03Freeman Ng // we know we've loaded the special xlarge layout because it has controls 824412e88e83099323a49e63f9544abd3294091f03Freeman Ng // not present in the standard layout 834412e88e83099323a49e63f9544abd3294091f03Freeman Ng mUsingXLargeLayout = findViewById(R.id.time_zone_button) != null; 844412e88e83099323a49e63f9544abd3294091f03Freeman Ng if (mUsingXLargeLayout) { 8571cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa initUiForXl(); 8671cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa } else { 8771cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa findViewById(R.id.next_button).setOnClickListener(this); 8871cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa } 894412e88e83099323a49e63f9544abd3294091f03Freeman Ng mTimeZoneAdapter = ZonePicker.constructTimezoneAdapter(this, false, 904412e88e83099323a49e63f9544abd3294091f03Freeman Ng R.layout.date_time_setup_custom_list_item_2); 9171cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa 9203708e030a9c85e323ba2464e908e4c9c3fc3095Freeman Ng // For the normal view, disable Back since changes stick immediately 9303708e030a9c85e323ba2464e908e4c9c3fc3095Freeman Ng // and can't be canceled, and we already have a Next button. For xLarge, 9403708e030a9c85e323ba2464e908e4c9c3fc3095Freeman Ng // though, we save up our changes and set them upon Next, so Back can 9503708e030a9c85e323ba2464e908e4c9c3fc3095Freeman Ng // cancel. And also, in xlarge, we need the keyboard dismiss button 9603708e030a9c85e323ba2464e908e4c9c3fc3095Freeman Ng // to be available. 9703708e030a9c85e323ba2464e908e4c9c3fc3095Freeman Ng if (!mUsingXLargeLayout) { 9803708e030a9c85e323ba2464e908e4c9c3fc3095Freeman Ng final View layoutRoot = findViewById(R.id.layout_root); 9903708e030a9c85e323ba2464e908e4c9c3fc3095Freeman Ng layoutRoot.setSystemUiVisibility(View.STATUS_BAR_DISABLE_BACK); 10003708e030a9c85e323ba2464e908e4c9c3fc3095Freeman Ng } 1014412e88e83099323a49e63f9544abd3294091f03Freeman Ng } 10262fb701ea9781f4e1c05af6d730e91bb2cdcdae0Daisuke Miyakawa 1034412e88e83099323a49e63f9544abd3294091f03Freeman Ng public void initUiForXl() { 104ce0a7b2df0d6ce3d5a9bf063cde2e23b92ec7002Daisuke Miyakawa // Currently just comment out codes related to auto timezone. 105ce0a7b2df0d6ce3d5a9bf063cde2e23b92ec7002Daisuke Miyakawa // TODO: Remove them when we are sure they are unnecessary. 106ce0a7b2df0d6ce3d5a9bf063cde2e23b92ec7002Daisuke Miyakawa /* 1074ad2f9b87047237538fdfbe4730b378b7aa3bbccDaisuke Miyakawa final boolean autoTimeZoneEnabled = isAutoTimeZoneEnabled(); 1084ad2f9b87047237538fdfbe4730b378b7aa3bbccDaisuke Miyakawa mAutoTimeZoneButton = (CompoundButton)findViewById(R.id.time_zone_auto); 1094ad2f9b87047237538fdfbe4730b378b7aa3bbccDaisuke Miyakawa mAutoTimeZoneButton.setChecked(autoTimeZoneEnabled); 1104ad2f9b87047237538fdfbe4730b378b7aa3bbccDaisuke Miyakawa mAutoTimeZoneButton.setOnCheckedChangeListener(this); 1114ad2f9b87047237538fdfbe4730b378b7aa3bbccDaisuke Miyakawa mAutoTimeZoneButton.setText(autoTimeZoneEnabled ? R.string.zone_auto_summaryOn : 112ce0a7b2df0d6ce3d5a9bf063cde2e23b92ec7002Daisuke Miyakawa R.string.zone_auto_summaryOff);*/ 11371cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa 11471cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa final TimeZone tz = TimeZone.getDefault(); 1152571f0dcb1cc96b7220687aff6fcddc623b57c3cDaisuke Miyakawa mSelectedTimeZone = tz; 1162571f0dcb1cc96b7220687aff6fcddc623b57c3cDaisuke Miyakawa mTimeZoneButton = (Button)findViewById(R.id.time_zone_button); 1172571f0dcb1cc96b7220687aff6fcddc623b57c3cDaisuke Miyakawa mTimeZoneButton.setText(tz.getDisplayName()); 1182571f0dcb1cc96b7220687aff6fcddc623b57c3cDaisuke Miyakawa mTimeZoneButton.setOnClickListener(this); 119ce0a7b2df0d6ce3d5a9bf063cde2e23b92ec7002Daisuke Miyakawa 120ce0a7b2df0d6ce3d5a9bf063cde2e23b92ec7002Daisuke Miyakawa final boolean autoDateTimeEnabled; 121ce0a7b2df0d6ce3d5a9bf063cde2e23b92ec7002Daisuke Miyakawa final Intent intent = getIntent(); 122ce0a7b2df0d6ce3d5a9bf063cde2e23b92ec7002Daisuke Miyakawa if (intent.hasExtra(EXTRA_INITIAL_AUTO_DATETIME_VALUE)) { 123ce0a7b2df0d6ce3d5a9bf063cde2e23b92ec7002Daisuke Miyakawa autoDateTimeEnabled = intent.getBooleanExtra(EXTRA_INITIAL_AUTO_DATETIME_VALUE, false); 124ce0a7b2df0d6ce3d5a9bf063cde2e23b92ec7002Daisuke Miyakawa } else { 125ce0a7b2df0d6ce3d5a9bf063cde2e23b92ec7002Daisuke Miyakawa autoDateTimeEnabled = isAutoDateTimeEnabled(); 126ce0a7b2df0d6ce3d5a9bf063cde2e23b92ec7002Daisuke Miyakawa } 1274ad2f9b87047237538fdfbe4730b378b7aa3bbccDaisuke Miyakawa 1280688f251af533c09682c791ae20834ab7854d7d7Daisuke Miyakawa mAutoDateTimeButton = (CompoundButton)findViewById(R.id.date_time_auto_button); 1294ad2f9b87047237538fdfbe4730b378b7aa3bbccDaisuke Miyakawa mAutoDateTimeButton.setChecked(autoDateTimeEnabled); 1304ad2f9b87047237538fdfbe4730b378b7aa3bbccDaisuke Miyakawa mAutoDateTimeButton.setOnCheckedChangeListener(this); 13171cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa 13271cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa mTimePicker = (TimePicker)findViewById(R.id.time_picker); 13371cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa mTimePicker.setEnabled(!autoDateTimeEnabled); 13471cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa mDatePicker = (DatePicker)findViewById(R.id.date_picker); 13571cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa mDatePicker.setEnabled(!autoDateTimeEnabled); 1364af903742ba9e9df2880fb73cf6c638222e696eaDaisuke Miyakawa mDatePicker.setCalendarViewShown(false); 137b85d48fa43e5f7b98492c2ee313f51c072f5ddd8Elliott Hughes DateTimeSettings.configureDatePicker(mDatePicker); 13871cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa 139f2d5e9536ac741b384e154abb5bdb6d5d295a391Daisuke Miyakawa mInputMethodManager = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); 140f2d5e9536ac741b384e154abb5bdb6d5d295a391Daisuke Miyakawa 14171cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa ((Button)findViewById(R.id.next_button)).setOnClickListener(this); 142ffe621f03f2ce14883ada77e4f4a76c529275495Daisuke Miyakawa final Button skipButton = (Button)findViewById(R.id.skip_button); 143ffe621f03f2ce14883ada77e4f4a76c529275495Daisuke Miyakawa if (skipButton != null) { 144ffe621f03f2ce14883ada77e4f4a76c529275495Daisuke Miyakawa skipButton.setOnClickListener(this); 145ffe621f03f2ce14883ada77e4f4a76c529275495Daisuke Miyakawa } 14671cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa } 14771cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa 14871cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa @Override 149a85bfd2552ea4ee73e4a98e85194a3eb42284940Daisuke Miyakawa public void onResume() { 150a85bfd2552ea4ee73e4a98e85194a3eb42284940Daisuke Miyakawa super.onResume(); 151a85bfd2552ea4ee73e4a98e85194a3eb42284940Daisuke Miyakawa IntentFilter filter = new IntentFilter(); 152a85bfd2552ea4ee73e4a98e85194a3eb42284940Daisuke Miyakawa filter.addAction(Intent.ACTION_TIME_TICK); 153a85bfd2552ea4ee73e4a98e85194a3eb42284940Daisuke Miyakawa filter.addAction(Intent.ACTION_TIME_CHANGED); 154a85bfd2552ea4ee73e4a98e85194a3eb42284940Daisuke Miyakawa filter.addAction(Intent.ACTION_TIMEZONE_CHANGED); 155a85bfd2552ea4ee73e4a98e85194a3eb42284940Daisuke Miyakawa registerReceiver(mIntentReceiver, filter, null, null); 156a85bfd2552ea4ee73e4a98e85194a3eb42284940Daisuke Miyakawa } 157a85bfd2552ea4ee73e4a98e85194a3eb42284940Daisuke Miyakawa 158a85bfd2552ea4ee73e4a98e85194a3eb42284940Daisuke Miyakawa @Override 159a85bfd2552ea4ee73e4a98e85194a3eb42284940Daisuke Miyakawa public void onPause() { 160a85bfd2552ea4ee73e4a98e85194a3eb42284940Daisuke Miyakawa super.onPause(); 161a85bfd2552ea4ee73e4a98e85194a3eb42284940Daisuke Miyakawa unregisterReceiver(mIntentReceiver); 162a85bfd2552ea4ee73e4a98e85194a3eb42284940Daisuke Miyakawa } 163a85bfd2552ea4ee73e4a98e85194a3eb42284940Daisuke Miyakawa 164a85bfd2552ea4ee73e4a98e85194a3eb42284940Daisuke Miyakawa @Override 16571cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa public void onClick(View view) { 16671cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa switch (view.getId()) { 1672571f0dcb1cc96b7220687aff6fcddc623b57c3cDaisuke Miyakawa case R.id.time_zone_button: { 1684412e88e83099323a49e63f9544abd3294091f03Freeman Ng showTimezonePicker(R.id.time_zone_button); 16971cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa break; 17071cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa } 17171cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa case R.id.next_button: { 1724412e88e83099323a49e63f9544abd3294091f03Freeman Ng if (mSelectedTimeZone != null) { 1732571f0dcb1cc96b7220687aff6fcddc623b57c3cDaisuke Miyakawa final TimeZone systemTimeZone = TimeZone.getDefault(); 1742571f0dcb1cc96b7220687aff6fcddc623b57c3cDaisuke Miyakawa if (!systemTimeZone.equals(mSelectedTimeZone)) { 1752571f0dcb1cc96b7220687aff6fcddc623b57c3cDaisuke Miyakawa Log.i(TAG, "Another TimeZone is selected by a user. Changing system TimeZone."); 1762571f0dcb1cc96b7220687aff6fcddc623b57c3cDaisuke Miyakawa final AlarmManager alarm = (AlarmManager) 1772571f0dcb1cc96b7220687aff6fcddc623b57c3cDaisuke Miyakawa getSystemService(Context.ALARM_SERVICE); 1782571f0dcb1cc96b7220687aff6fcddc623b57c3cDaisuke Miyakawa alarm.setTimeZone(mSelectedTimeZone.getID()); 1792571f0dcb1cc96b7220687aff6fcddc623b57c3cDaisuke Miyakawa } 1804412e88e83099323a49e63f9544abd3294091f03Freeman Ng } 1814412e88e83099323a49e63f9544abd3294091f03Freeman Ng if (mAutoDateTimeButton != null) { 182f1c085899dd3d9142392b9ab7841c0e9502526a3Christopher Tate Settings.Global.putInt(getContentResolver(), Settings.Global.AUTO_TIME, 1834412e88e83099323a49e63f9544abd3294091f03Freeman Ng mAutoDateTimeButton.isChecked() ? 1 : 0); 184a85bfd2552ea4ee73e4a98e85194a3eb42284940Daisuke Miyakawa if (!mAutoDateTimeButton.isChecked()) { 1855f050104386b96d8c99eb3ff0f5088814709348bAmith Yamasani DateTimeSettings.setDate(this, mDatePicker.getYear(), mDatePicker.getMonth(), 186a85bfd2552ea4ee73e4a98e85194a3eb42284940Daisuke Miyakawa mDatePicker.getDayOfMonth()); 1875f050104386b96d8c99eb3ff0f5088814709348bAmith Yamasani DateTimeSettings.setTime(this, 188a85bfd2552ea4ee73e4a98e85194a3eb42284940Daisuke Miyakawa mTimePicker.getCurrentHour(), mTimePicker.getCurrentMinute()); 189a85bfd2552ea4ee73e4a98e85194a3eb42284940Daisuke Miyakawa } 19071cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa } 19171cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa } // $FALL-THROUGH$ 19271cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa case R.id.skip_button: { 19371cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa setResult(RESULT_OK); 19471cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa finish(); 19571cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa break; 19671cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa } 19771cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa } 19871cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa } 19971cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa 20071cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa @Override 20171cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 202e25b55c00b14c92f81b7ef28776fc6c4b7da3839Daisuke Miyakawa final boolean autoEnabled = isChecked; // just for readibility. 203ce0a7b2df0d6ce3d5a9bf063cde2e23b92ec7002Daisuke Miyakawa /*if (buttonView == mAutoTimeZoneButton) { 2044ad2f9b87047237538fdfbe4730b378b7aa3bbccDaisuke Miyakawa // In XL screen, we save all the state only when the next button is pressed. 2054412e88e83099323a49e63f9544abd3294091f03Freeman Ng if (!mUsingXLargeLayout) { 206f1c085899dd3d9142392b9ab7841c0e9502526a3Christopher Tate Settings.Global.putInt(getContentResolver(), 207f1c085899dd3d9142392b9ab7841c0e9502526a3Christopher Tate Settings.Global.AUTO_TIME_ZONE, 2084ad2f9b87047237538fdfbe4730b378b7aa3bbccDaisuke Miyakawa isChecked ? 1 : 0); 2094ad2f9b87047237538fdfbe4730b378b7aa3bbccDaisuke Miyakawa } 2104ad2f9b87047237538fdfbe4730b378b7aa3bbccDaisuke Miyakawa mTimeZone.setEnabled(!autoEnabled); 2114ad2f9b87047237538fdfbe4730b378b7aa3bbccDaisuke Miyakawa if (isChecked) { 2124ad2f9b87047237538fdfbe4730b378b7aa3bbccDaisuke Miyakawa findViewById(R.id.current_time_zone).setVisibility(View.VISIBLE); 2134ad2f9b87047237538fdfbe4730b378b7aa3bbccDaisuke Miyakawa findViewById(R.id.zone_picker).setVisibility(View.GONE); 2144ad2f9b87047237538fdfbe4730b378b7aa3bbccDaisuke Miyakawa } 215ce0a7b2df0d6ce3d5a9bf063cde2e23b92ec7002Daisuke Miyakawa } else */ 216ce0a7b2df0d6ce3d5a9bf063cde2e23b92ec7002Daisuke Miyakawa if (buttonView == mAutoDateTimeButton) { 217f1c085899dd3d9142392b9ab7841c0e9502526a3Christopher Tate Settings.Global.putInt(getContentResolver(), 218f1c085899dd3d9142392b9ab7841c0e9502526a3Christopher Tate Settings.Global.AUTO_TIME, 219a85bfd2552ea4ee73e4a98e85194a3eb42284940Daisuke Miyakawa isChecked ? 1 : 0); 2204ad2f9b87047237538fdfbe4730b378b7aa3bbccDaisuke Miyakawa mTimePicker.setEnabled(!autoEnabled); 2214ad2f9b87047237538fdfbe4730b378b7aa3bbccDaisuke Miyakawa mDatePicker.setEnabled(!autoEnabled); 22271cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa } 223e25b55c00b14c92f81b7ef28776fc6c4b7da3839Daisuke Miyakawa if (autoEnabled) { 224f2d5e9536ac741b384e154abb5bdb6d5d295a391Daisuke Miyakawa final View focusedView = getCurrentFocus(); 225f2d5e9536ac741b384e154abb5bdb6d5d295a391Daisuke Miyakawa if (focusedView != null) { 226f2d5e9536ac741b384e154abb5bdb6d5d295a391Daisuke Miyakawa mInputMethodManager.hideSoftInputFromWindow(focusedView.getWindowToken(), 0); 227f2d5e9536ac741b384e154abb5bdb6d5d295a391Daisuke Miyakawa focusedView.clearFocus(); 228f2d5e9536ac741b384e154abb5bdb6d5d295a391Daisuke Miyakawa } 229e25b55c00b14c92f81b7ef28776fc6c4b7da3839Daisuke Miyakawa } 23071cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa } 23171cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa 23271cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa @Override 2332571f0dcb1cc96b7220687aff6fcddc623b57c3cDaisuke Miyakawa public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 2342571f0dcb1cc96b7220687aff6fcddc623b57c3cDaisuke Miyakawa final TimeZone tz = ZonePicker.obtainTimeZoneFromItem(parent.getItemAtPosition(position)); 2354412e88e83099323a49e63f9544abd3294091f03Freeman Ng if (mUsingXLargeLayout) { 2364412e88e83099323a49e63f9544abd3294091f03Freeman Ng mSelectedTimeZone = tz; 2374412e88e83099323a49e63f9544abd3294091f03Freeman Ng final Calendar now = Calendar.getInstance(tz); 2384412e88e83099323a49e63f9544abd3294091f03Freeman Ng if (mTimeZoneButton != null) { 2394412e88e83099323a49e63f9544abd3294091f03Freeman Ng mTimeZoneButton.setText(tz.getDisplayName()); 2404412e88e83099323a49e63f9544abd3294091f03Freeman Ng } 2414412e88e83099323a49e63f9544abd3294091f03Freeman Ng mDatePicker.updateDate(now.get(Calendar.YEAR), now.get(Calendar.MONTH), 2424412e88e83099323a49e63f9544abd3294091f03Freeman Ng now.get(Calendar.DAY_OF_MONTH)); 2434412e88e83099323a49e63f9544abd3294091f03Freeman Ng mTimePicker.setCurrentHour(now.get(Calendar.HOUR_OF_DAY)); 2444412e88e83099323a49e63f9544abd3294091f03Freeman Ng mTimePicker.setCurrentMinute(now.get(Calendar.MINUTE)); 2454412e88e83099323a49e63f9544abd3294091f03Freeman Ng } else { 2464412e88e83099323a49e63f9544abd3294091f03Freeman Ng // in prefs mode, we actually change the setting right now, as opposed to waiting 2474412e88e83099323a49e63f9544abd3294091f03Freeman Ng // until Next is pressed in xLarge mode 2484412e88e83099323a49e63f9544abd3294091f03Freeman Ng final AlarmManager alarm = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 2494412e88e83099323a49e63f9544abd3294091f03Freeman Ng alarm.setTimeZone(tz.getID()); 2504412e88e83099323a49e63f9544abd3294091f03Freeman Ng DateTimeSettings settingsFragment = (DateTimeSettings) getFragmentManager(). 2514412e88e83099323a49e63f9544abd3294091f03Freeman Ng findFragmentById(R.id.date_time_settings_fragment); 2524412e88e83099323a49e63f9544abd3294091f03Freeman Ng settingsFragment.updateTimeAndDateDisplay(this); 2534412e88e83099323a49e63f9544abd3294091f03Freeman Ng } 2542571f0dcb1cc96b7220687aff6fcddc623b57c3cDaisuke Miyakawa mTimeZonePopup.dismiss(); 255afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 256afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 2574412e88e83099323a49e63f9544abd3294091f03Freeman Ng /** 2584412e88e83099323a49e63f9544abd3294091f03Freeman Ng * If this is called, that means we're in prefs style portrait mode for a large display 2594412e88e83099323a49e63f9544abd3294091f03Freeman Ng * and the user has tapped on the time zone preference. If we were a PreferenceActivity, 2604412e88e83099323a49e63f9544abd3294091f03Freeman Ng * we'd then launch the timezone fragment in a new activity, but we aren't, and here 2614412e88e83099323a49e63f9544abd3294091f03Freeman Ng * on a tablet display, we really want more of a popup picker look' like the one we use 2624412e88e83099323a49e63f9544abd3294091f03Freeman Ng * for the xlarge version of this activity. So we just take this opportunity to launch that. 2634412e88e83099323a49e63f9544abd3294091f03Freeman Ng * 2644412e88e83099323a49e63f9544abd3294091f03Freeman Ng * TODO: For phones, we might want to change this to do the "normal" opening 2654412e88e83099323a49e63f9544abd3294091f03Freeman Ng * of the zonepicker fragment in its own activity. Or we might end up just 2664412e88e83099323a49e63f9544abd3294091f03Freeman Ng * creating a separate DateTimeSettingsSetupWizardPhone activity that subclasses 2674412e88e83099323a49e63f9544abd3294091f03Freeman Ng * PreferenceActivity in the first place to handle all that automatically. 2684412e88e83099323a49e63f9544abd3294091f03Freeman Ng */ 2694412e88e83099323a49e63f9544abd3294091f03Freeman Ng @Override 2704412e88e83099323a49e63f9544abd3294091f03Freeman Ng public boolean onPreferenceStartFragment(PreferenceFragment caller, Preference pref) { 2714412e88e83099323a49e63f9544abd3294091f03Freeman Ng showTimezonePicker(R.id.timezone_dropdown_anchor); 2724412e88e83099323a49e63f9544abd3294091f03Freeman Ng return true; 2734412e88e83099323a49e63f9544abd3294091f03Freeman Ng } 2744412e88e83099323a49e63f9544abd3294091f03Freeman Ng 2754412e88e83099323a49e63f9544abd3294091f03Freeman Ng private void showTimezonePicker(int anchorViewId) { 2764412e88e83099323a49e63f9544abd3294091f03Freeman Ng View anchorView = findViewById(anchorViewId); 2774412e88e83099323a49e63f9544abd3294091f03Freeman Ng if (anchorView == null) { 2784412e88e83099323a49e63f9544abd3294091f03Freeman Ng Log.e(TAG, "Unable to find zone picker anchor view " + anchorViewId); 2794412e88e83099323a49e63f9544abd3294091f03Freeman Ng return; 2804412e88e83099323a49e63f9544abd3294091f03Freeman Ng } 2814412e88e83099323a49e63f9544abd3294091f03Freeman Ng mTimeZonePopup = new ListPopupWindow(this, null); 2824412e88e83099323a49e63f9544abd3294091f03Freeman Ng mTimeZonePopup.setWidth(anchorView.getWidth()); 2834412e88e83099323a49e63f9544abd3294091f03Freeman Ng mTimeZonePopup.setAnchorView(anchorView); 2844412e88e83099323a49e63f9544abd3294091f03Freeman Ng mTimeZonePopup.setAdapter(mTimeZoneAdapter); 2854412e88e83099323a49e63f9544abd3294091f03Freeman Ng mTimeZonePopup.setOnItemClickListener(this); 2864412e88e83099323a49e63f9544abd3294091f03Freeman Ng mTimeZonePopup.setModal(true); 2874412e88e83099323a49e63f9544abd3294091f03Freeman Ng mTimeZonePopup.show(); 2884412e88e83099323a49e63f9544abd3294091f03Freeman Ng } 2894412e88e83099323a49e63f9544abd3294091f03Freeman Ng 29071cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa private boolean isAutoDateTimeEnabled() { 29171cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa try { 292f1c085899dd3d9142392b9ab7841c0e9502526a3Christopher Tate return Settings.Global.getInt(getContentResolver(), Settings.Global.AUTO_TIME) > 0; 29371cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa } catch (SettingNotFoundException e) { 29471cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa return true; 29571cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa } 296afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 2974ad2f9b87047237538fdfbe4730b378b7aa3bbccDaisuke Miyakawa 298ce0a7b2df0d6ce3d5a9bf063cde2e23b92ec7002Daisuke Miyakawa /* 2994ad2f9b87047237538fdfbe4730b378b7aa3bbccDaisuke Miyakawa private boolean isAutoTimeZoneEnabled() { 3004ad2f9b87047237538fdfbe4730b378b7aa3bbccDaisuke Miyakawa try { 301f1c085899dd3d9142392b9ab7841c0e9502526a3Christopher Tate return Settings.Global.getInt(getContentResolver(), 302f1c085899dd3d9142392b9ab7841c0e9502526a3Christopher Tate Settings.Global.AUTO_TIME_ZONE) > 0; 3034ad2f9b87047237538fdfbe4730b378b7aa3bbccDaisuke Miyakawa } catch (SettingNotFoundException e) { 3044ad2f9b87047237538fdfbe4730b378b7aa3bbccDaisuke Miyakawa return true; 3054ad2f9b87047237538fdfbe4730b378b7aa3bbccDaisuke Miyakawa } 306ce0a7b2df0d6ce3d5a9bf063cde2e23b92ec7002Daisuke Miyakawa }*/ 307a85bfd2552ea4ee73e4a98e85194a3eb42284940Daisuke Miyakawa 308a85bfd2552ea4ee73e4a98e85194a3eb42284940Daisuke Miyakawa private void updateTimeAndDateDisplay() { 3094412e88e83099323a49e63f9544abd3294091f03Freeman Ng if (!mUsingXLargeLayout) { 3104412e88e83099323a49e63f9544abd3294091f03Freeman Ng return; 3114412e88e83099323a49e63f9544abd3294091f03Freeman Ng } 312a85bfd2552ea4ee73e4a98e85194a3eb42284940Daisuke Miyakawa final Calendar now = Calendar.getInstance(); 313a85bfd2552ea4ee73e4a98e85194a3eb42284940Daisuke Miyakawa mTimeZoneButton.setText(now.getTimeZone().getDisplayName()); 314a85bfd2552ea4ee73e4a98e85194a3eb42284940Daisuke Miyakawa mDatePicker.updateDate(now.get(Calendar.YEAR), now.get(Calendar.MONTH), 315a85bfd2552ea4ee73e4a98e85194a3eb42284940Daisuke Miyakawa now.get(Calendar.DAY_OF_MONTH)); 316a85bfd2552ea4ee73e4a98e85194a3eb42284940Daisuke Miyakawa mTimePicker.setCurrentHour(now.get(Calendar.HOUR_OF_DAY)); 317a85bfd2552ea4ee73e4a98e85194a3eb42284940Daisuke Miyakawa mTimePicker.setCurrentMinute(now.get(Calendar.MINUTE)); 318a85bfd2552ea4ee73e4a98e85194a3eb42284940Daisuke Miyakawa } 319a85bfd2552ea4ee73e4a98e85194a3eb42284940Daisuke Miyakawa 320a85bfd2552ea4ee73e4a98e85194a3eb42284940Daisuke Miyakawa private BroadcastReceiver mIntentReceiver = new BroadcastReceiver() { 321a85bfd2552ea4ee73e4a98e85194a3eb42284940Daisuke Miyakawa @Override 322a85bfd2552ea4ee73e4a98e85194a3eb42284940Daisuke Miyakawa public void onReceive(Context context, Intent intent) { 323a85bfd2552ea4ee73e4a98e85194a3eb42284940Daisuke Miyakawa updateTimeAndDateDisplay(); 324a85bfd2552ea4ee73e4a98e85194a3eb42284940Daisuke Miyakawa } 325a85bfd2552ea4ee73e4a98e85194a3eb42284940Daisuke Miyakawa }; 326afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project} 327