1b1b7080deea42aa533c3757b585cf765c6b76732Michael Chan/* 2b1b7080deea42aa533c3757b585cf765c6b76732Michael Chan * Copyright (C) 2013 The Android Open Source Project 3b1b7080deea42aa533c3757b585cf765c6b76732Michael Chan * 4b1b7080deea42aa533c3757b585cf765c6b76732Michael Chan * Licensed under the Apache License, Version 2.0 (the "License"); 5b1b7080deea42aa533c3757b585cf765c6b76732Michael Chan * you may not use this file except in compliance with the License. 6b1b7080deea42aa533c3757b585cf765c6b76732Michael Chan * You may obtain a copy of the License at 7b1b7080deea42aa533c3757b585cf765c6b76732Michael Chan * 8b1b7080deea42aa533c3757b585cf765c6b76732Michael Chan * http://www.apache.org/licenses/LICENSE-2.0 9b1b7080deea42aa533c3757b585cf765c6b76732Michael Chan * 10b1b7080deea42aa533c3757b585cf765c6b76732Michael Chan * Unless required by applicable law or agreed to in writing, software 11b1b7080deea42aa533c3757b585cf765c6b76732Michael Chan * distributed under the License is distributed on an "AS IS" BASIS, 12b1b7080deea42aa533c3757b585cf765c6b76732Michael Chan * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13b1b7080deea42aa533c3757b585cf765c6b76732Michael Chan * See the License for the specific language governing permissions and 14b1b7080deea42aa533c3757b585cf765c6b76732Michael Chan * limitations under the License. 15b1b7080deea42aa533c3757b585cf765c6b76732Michael Chan */ 16b1b7080deea42aa533c3757b585cf765c6b76732Michael Chan 17b1b7080deea42aa533c3757b585cf765c6b76732Michael Chanpackage com.android.timezonepicker; 18b1b7080deea42aa533c3757b585cf765c6b76732Michael Chan 19b1b7080deea42aa533c3757b585cf765c6b76732Michael Chanimport android.app.Dialog; 20b1b7080deea42aa533c3757b585cf765c6b76732Michael Chanimport android.app.DialogFragment; 21b1b7080deea42aa533c3757b585cf765c6b76732Michael Chanimport android.os.Bundle; 22b1b7080deea42aa533c3757b585cf765c6b76732Michael Chanimport android.view.LayoutInflater; 23b1b7080deea42aa533c3757b585cf765c6b76732Michael Chanimport android.view.View; 24b1b7080deea42aa533c3757b585cf765c6b76732Michael Chanimport android.view.ViewGroup; 25b1b7080deea42aa533c3757b585cf765c6b76732Michael Chanimport android.view.Window; 26b1b7080deea42aa533c3757b585cf765c6b76732Michael Chanimport android.view.WindowManager; 27b1b7080deea42aa533c3757b585cf765c6b76732Michael Chan 28b1b7080deea42aa533c3757b585cf765c6b76732Michael Chanpublic class TimeZonePickerDialog extends DialogFragment implements 29b1b7080deea42aa533c3757b585cf765c6b76732Michael Chan TimeZonePickerView.OnTimeZoneSetListener { 30418677ed658aec5b6fc565d413f244aaa8270a6fJames Kung public static final String TAG = TimeZonePickerDialog.class.getSimpleName(); 31418677ed658aec5b6fc565d413f244aaa8270a6fJames Kung 32b1b7080deea42aa533c3757b585cf765c6b76732Michael Chan public static final String BUNDLE_START_TIME_MILLIS = "bundle_event_start_time"; 33b1b7080deea42aa533c3757b585cf765c6b76732Michael Chan public static final String BUNDLE_TIME_ZONE = "bundle_event_time_zone"; 34b1b7080deea42aa533c3757b585cf765c6b76732Michael Chan 35a8dd2dfa92587e5fc11e6c24da91be9e7bf3afb7James Kung private static final String KEY_HAS_RESULTS = "has_results"; 36a8dd2dfa92587e5fc11e6c24da91be9e7bf3afb7James Kung private static final String KEY_LAST_FILTER_STRING = "last_filter_string"; 37a8dd2dfa92587e5fc11e6c24da91be9e7bf3afb7James Kung private static final String KEY_LAST_FILTER_TYPE = "last_filter_type"; 38a8dd2dfa92587e5fc11e6c24da91be9e7bf3afb7James Kung private static final String KEY_LAST_FILTER_TIME = "last_filter_time"; 39a8dd2dfa92587e5fc11e6c24da91be9e7bf3afb7James Kung private static final String KEY_HIDE_FILTER_SEARCH = "hide_filter_search"; 40a8dd2dfa92587e5fc11e6c24da91be9e7bf3afb7James Kung 41b1b7080deea42aa533c3757b585cf765c6b76732Michael Chan private OnTimeZoneSetListener mTimeZoneSetListener; 42a8dd2dfa92587e5fc11e6c24da91be9e7bf3afb7James Kung private TimeZonePickerView mView; 43a8dd2dfa92587e5fc11e6c24da91be9e7bf3afb7James Kung private boolean mHasCachedResults = false; 44b1b7080deea42aa533c3757b585cf765c6b76732Michael Chan 45b1b7080deea42aa533c3757b585cf765c6b76732Michael Chan public interface OnTimeZoneSetListener { 46b1b7080deea42aa533c3757b585cf765c6b76732Michael Chan void onTimeZoneSet(TimeZoneInfo tzi); 47b1b7080deea42aa533c3757b585cf765c6b76732Michael Chan } 48b1b7080deea42aa533c3757b585cf765c6b76732Michael Chan 49b1b7080deea42aa533c3757b585cf765c6b76732Michael Chan public void setOnTimeZoneSetListener(OnTimeZoneSetListener l) { 50b1b7080deea42aa533c3757b585cf765c6b76732Michael Chan mTimeZoneSetListener = l; 51b1b7080deea42aa533c3757b585cf765c6b76732Michael Chan } 52b1b7080deea42aa533c3757b585cf765c6b76732Michael Chan 53b1b7080deea42aa533c3757b585cf765c6b76732Michael Chan public TimeZonePickerDialog() { 54b1b7080deea42aa533c3757b585cf765c6b76732Michael Chan super(); 55b1b7080deea42aa533c3757b585cf765c6b76732Michael Chan } 56b1b7080deea42aa533c3757b585cf765c6b76732Michael Chan 57b1b7080deea42aa533c3757b585cf765c6b76732Michael Chan @Override 58b1b7080deea42aa533c3757b585cf765c6b76732Michael Chan public View onCreateView(LayoutInflater inflater, ViewGroup container, 59b1b7080deea42aa533c3757b585cf765c6b76732Michael Chan Bundle savedInstanceState) { 60b1b7080deea42aa533c3757b585cf765c6b76732Michael Chan long timeMillis = 0; 61b1b7080deea42aa533c3757b585cf765c6b76732Michael Chan String timeZone = null; 6295d901f5c1b1dafc8b724e8bf4f9ac14af80862fMichael Chan Bundle b = getArguments(); 6395d901f5c1b1dafc8b724e8bf4f9ac14af80862fMichael Chan if (b != null) { 6495d901f5c1b1dafc8b724e8bf4f9ac14af80862fMichael Chan timeMillis = b.getLong(BUNDLE_START_TIME_MILLIS); 6595d901f5c1b1dafc8b724e8bf4f9ac14af80862fMichael Chan timeZone = b.getString(BUNDLE_TIME_ZONE); 66b1b7080deea42aa533c3757b585cf765c6b76732Michael Chan } 67a8dd2dfa92587e5fc11e6c24da91be9e7bf3afb7James Kung boolean hideFilterSearch = false; 68a8dd2dfa92587e5fc11e6c24da91be9e7bf3afb7James Kung 69a8dd2dfa92587e5fc11e6c24da91be9e7bf3afb7James Kung if (savedInstanceState != null) { 70a8dd2dfa92587e5fc11e6c24da91be9e7bf3afb7James Kung hideFilterSearch = savedInstanceState.getBoolean(KEY_HIDE_FILTER_SEARCH); 71a8dd2dfa92587e5fc11e6c24da91be9e7bf3afb7James Kung } 72a8dd2dfa92587e5fc11e6c24da91be9e7bf3afb7James Kung mView = new TimeZonePickerView(getActivity(), null, timeZone, timeMillis, this, 73a8dd2dfa92587e5fc11e6c24da91be9e7bf3afb7James Kung hideFilterSearch); 74a8dd2dfa92587e5fc11e6c24da91be9e7bf3afb7James Kung if (savedInstanceState != null && savedInstanceState.getBoolean(KEY_HAS_RESULTS, false)) { 75a8dd2dfa92587e5fc11e6c24da91be9e7bf3afb7James Kung mView.showFilterResults(savedInstanceState.getInt(KEY_LAST_FILTER_TYPE), 76a8dd2dfa92587e5fc11e6c24da91be9e7bf3afb7James Kung savedInstanceState.getString(KEY_LAST_FILTER_STRING), 77a8dd2dfa92587e5fc11e6c24da91be9e7bf3afb7James Kung savedInstanceState.getInt(KEY_LAST_FILTER_TIME)); 78a8dd2dfa92587e5fc11e6c24da91be9e7bf3afb7James Kung } 79a8dd2dfa92587e5fc11e6c24da91be9e7bf3afb7James Kung return mView; 80a8dd2dfa92587e5fc11e6c24da91be9e7bf3afb7James Kung } 81a8dd2dfa92587e5fc11e6c24da91be9e7bf3afb7James Kung 82a8dd2dfa92587e5fc11e6c24da91be9e7bf3afb7James Kung @Override 83a8dd2dfa92587e5fc11e6c24da91be9e7bf3afb7James Kung public void onSaveInstanceState(Bundle outState) { 84a8dd2dfa92587e5fc11e6c24da91be9e7bf3afb7James Kung super.onSaveInstanceState(outState); 85a8dd2dfa92587e5fc11e6c24da91be9e7bf3afb7James Kung outState.putBoolean(KEY_HAS_RESULTS, mView != null && mView.hasResults()); 86a8dd2dfa92587e5fc11e6c24da91be9e7bf3afb7James Kung if (mView != null) { 87a8dd2dfa92587e5fc11e6c24da91be9e7bf3afb7James Kung outState.putInt(KEY_LAST_FILTER_TYPE, mView.getLastFilterType()); 88a8dd2dfa92587e5fc11e6c24da91be9e7bf3afb7James Kung outState.putString(KEY_LAST_FILTER_STRING, mView.getLastFilterString()); 89a8dd2dfa92587e5fc11e6c24da91be9e7bf3afb7James Kung outState.putInt(KEY_LAST_FILTER_TIME, mView.getLastFilterTime()); 90a8dd2dfa92587e5fc11e6c24da91be9e7bf3afb7James Kung outState.putBoolean(KEY_HIDE_FILTER_SEARCH, mView.getHideFilterSearchOnStart()); 91a8dd2dfa92587e5fc11e6c24da91be9e7bf3afb7James Kung } 92b1b7080deea42aa533c3757b585cf765c6b76732Michael Chan } 93b1b7080deea42aa533c3757b585cf765c6b76732Michael Chan 94b1b7080deea42aa533c3757b585cf765c6b76732Michael Chan @Override 95b1b7080deea42aa533c3757b585cf765c6b76732Michael Chan public Dialog onCreateDialog(Bundle savedInstanceState) { 96b1b7080deea42aa533c3757b585cf765c6b76732Michael Chan Dialog dialog = super.onCreateDialog(savedInstanceState); 97b1b7080deea42aa533c3757b585cf765c6b76732Michael Chan dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); 9841fa43b962c94ce4a7e82d60737bf96ca0abd6bfMichael Chan dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE); 99b1b7080deea42aa533c3757b585cf765c6b76732Michael Chan return dialog; 100b1b7080deea42aa533c3757b585cf765c6b76732Michael Chan } 101b1b7080deea42aa533c3757b585cf765c6b76732Michael Chan 102b1b7080deea42aa533c3757b585cf765c6b76732Michael Chan @Override 103b1b7080deea42aa533c3757b585cf765c6b76732Michael Chan public void onTimeZoneSet(TimeZoneInfo tzi) { 104b1b7080deea42aa533c3757b585cf765c6b76732Michael Chan if (mTimeZoneSetListener != null) { 105b1b7080deea42aa533c3757b585cf765c6b76732Michael Chan mTimeZoneSetListener.onTimeZoneSet(tzi); 106b1b7080deea42aa533c3757b585cf765c6b76732Michael Chan } 107b1b7080deea42aa533c3757b585cf765c6b76732Michael Chan dismiss(); 108b1b7080deea42aa533c3757b585cf765c6b76732Michael Chan } 109b1b7080deea42aa533c3757b585cf765c6b76732Michael Chan} 110