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 { 30b1b7080deea42aa533c3757b585cf765c6b76732Michael Chan public static final String BUNDLE_START_TIME_MILLIS = "bundle_event_start_time"; 31b1b7080deea42aa533c3757b585cf765c6b76732Michael Chan public static final String BUNDLE_TIME_ZONE = "bundle_event_time_zone"; 32b1b7080deea42aa533c3757b585cf765c6b76732Michael Chan 33a8dd2dfa92587e5fc11e6c24da91be9e7bf3afb7James Kung private static final String KEY_HAS_RESULTS = "has_results"; 34a8dd2dfa92587e5fc11e6c24da91be9e7bf3afb7James Kung private static final String KEY_LAST_FILTER_STRING = "last_filter_string"; 35a8dd2dfa92587e5fc11e6c24da91be9e7bf3afb7James Kung private static final String KEY_LAST_FILTER_TYPE = "last_filter_type"; 36a8dd2dfa92587e5fc11e6c24da91be9e7bf3afb7James Kung private static final String KEY_LAST_FILTER_TIME = "last_filter_time"; 37a8dd2dfa92587e5fc11e6c24da91be9e7bf3afb7James Kung private static final String KEY_HIDE_FILTER_SEARCH = "hide_filter_search"; 38a8dd2dfa92587e5fc11e6c24da91be9e7bf3afb7James Kung 39b1b7080deea42aa533c3757b585cf765c6b76732Michael Chan private OnTimeZoneSetListener mTimeZoneSetListener; 40a8dd2dfa92587e5fc11e6c24da91be9e7bf3afb7James Kung private TimeZonePickerView mView; 41a8dd2dfa92587e5fc11e6c24da91be9e7bf3afb7James Kung private boolean mHasCachedResults = false; 42b1b7080deea42aa533c3757b585cf765c6b76732Michael Chan 43b1b7080deea42aa533c3757b585cf765c6b76732Michael Chan public interface OnTimeZoneSetListener { 44b1b7080deea42aa533c3757b585cf765c6b76732Michael Chan void onTimeZoneSet(TimeZoneInfo tzi); 45b1b7080deea42aa533c3757b585cf765c6b76732Michael Chan } 46b1b7080deea42aa533c3757b585cf765c6b76732Michael Chan 47b1b7080deea42aa533c3757b585cf765c6b76732Michael Chan public void setOnTimeZoneSetListener(OnTimeZoneSetListener l) { 48b1b7080deea42aa533c3757b585cf765c6b76732Michael Chan mTimeZoneSetListener = l; 49b1b7080deea42aa533c3757b585cf765c6b76732Michael Chan } 50b1b7080deea42aa533c3757b585cf765c6b76732Michael Chan 51b1b7080deea42aa533c3757b585cf765c6b76732Michael Chan public TimeZonePickerDialog() { 52b1b7080deea42aa533c3757b585cf765c6b76732Michael Chan super(); 53b1b7080deea42aa533c3757b585cf765c6b76732Michael Chan } 54b1b7080deea42aa533c3757b585cf765c6b76732Michael Chan 55b1b7080deea42aa533c3757b585cf765c6b76732Michael Chan @Override 56b1b7080deea42aa533c3757b585cf765c6b76732Michael Chan public View onCreateView(LayoutInflater inflater, ViewGroup container, 57b1b7080deea42aa533c3757b585cf765c6b76732Michael Chan Bundle savedInstanceState) { 58b1b7080deea42aa533c3757b585cf765c6b76732Michael Chan long timeMillis = 0; 59b1b7080deea42aa533c3757b585cf765c6b76732Michael Chan String timeZone = null; 6095d901f5c1b1dafc8b724e8bf4f9ac14af80862fMichael Chan Bundle b = getArguments(); 6195d901f5c1b1dafc8b724e8bf4f9ac14af80862fMichael Chan if (b != null) { 6295d901f5c1b1dafc8b724e8bf4f9ac14af80862fMichael Chan timeMillis = b.getLong(BUNDLE_START_TIME_MILLIS); 6395d901f5c1b1dafc8b724e8bf4f9ac14af80862fMichael Chan timeZone = b.getString(BUNDLE_TIME_ZONE); 64b1b7080deea42aa533c3757b585cf765c6b76732Michael Chan } 65a8dd2dfa92587e5fc11e6c24da91be9e7bf3afb7James Kung boolean hideFilterSearch = false; 66a8dd2dfa92587e5fc11e6c24da91be9e7bf3afb7James Kung 67a8dd2dfa92587e5fc11e6c24da91be9e7bf3afb7James Kung if (savedInstanceState != null) { 68a8dd2dfa92587e5fc11e6c24da91be9e7bf3afb7James Kung hideFilterSearch = savedInstanceState.getBoolean(KEY_HIDE_FILTER_SEARCH); 69a8dd2dfa92587e5fc11e6c24da91be9e7bf3afb7James Kung } 70a8dd2dfa92587e5fc11e6c24da91be9e7bf3afb7James Kung mView = new TimeZonePickerView(getActivity(), null, timeZone, timeMillis, this, 71a8dd2dfa92587e5fc11e6c24da91be9e7bf3afb7James Kung hideFilterSearch); 72a8dd2dfa92587e5fc11e6c24da91be9e7bf3afb7James Kung if (savedInstanceState != null && savedInstanceState.getBoolean(KEY_HAS_RESULTS, false)) { 73a8dd2dfa92587e5fc11e6c24da91be9e7bf3afb7James Kung mView.showFilterResults(savedInstanceState.getInt(KEY_LAST_FILTER_TYPE), 74a8dd2dfa92587e5fc11e6c24da91be9e7bf3afb7James Kung savedInstanceState.getString(KEY_LAST_FILTER_STRING), 75a8dd2dfa92587e5fc11e6c24da91be9e7bf3afb7James Kung savedInstanceState.getInt(KEY_LAST_FILTER_TIME)); 76a8dd2dfa92587e5fc11e6c24da91be9e7bf3afb7James Kung } 77a8dd2dfa92587e5fc11e6c24da91be9e7bf3afb7James Kung return mView; 78a8dd2dfa92587e5fc11e6c24da91be9e7bf3afb7James Kung } 79a8dd2dfa92587e5fc11e6c24da91be9e7bf3afb7James Kung 80a8dd2dfa92587e5fc11e6c24da91be9e7bf3afb7James Kung @Override 81a8dd2dfa92587e5fc11e6c24da91be9e7bf3afb7James Kung public void onSaveInstanceState(Bundle outState) { 82a8dd2dfa92587e5fc11e6c24da91be9e7bf3afb7James Kung super.onSaveInstanceState(outState); 83a8dd2dfa92587e5fc11e6c24da91be9e7bf3afb7James Kung outState.putBoolean(KEY_HAS_RESULTS, mView != null && mView.hasResults()); 84a8dd2dfa92587e5fc11e6c24da91be9e7bf3afb7James Kung if (mView != null) { 85a8dd2dfa92587e5fc11e6c24da91be9e7bf3afb7James Kung outState.putInt(KEY_LAST_FILTER_TYPE, mView.getLastFilterType()); 86a8dd2dfa92587e5fc11e6c24da91be9e7bf3afb7James Kung outState.putString(KEY_LAST_FILTER_STRING, mView.getLastFilterString()); 87a8dd2dfa92587e5fc11e6c24da91be9e7bf3afb7James Kung outState.putInt(KEY_LAST_FILTER_TIME, mView.getLastFilterTime()); 88a8dd2dfa92587e5fc11e6c24da91be9e7bf3afb7James Kung outState.putBoolean(KEY_HIDE_FILTER_SEARCH, mView.getHideFilterSearchOnStart()); 89a8dd2dfa92587e5fc11e6c24da91be9e7bf3afb7James Kung } 90b1b7080deea42aa533c3757b585cf765c6b76732Michael Chan } 91b1b7080deea42aa533c3757b585cf765c6b76732Michael Chan 92b1b7080deea42aa533c3757b585cf765c6b76732Michael Chan @Override 93b1b7080deea42aa533c3757b585cf765c6b76732Michael Chan public Dialog onCreateDialog(Bundle savedInstanceState) { 94b1b7080deea42aa533c3757b585cf765c6b76732Michael Chan Dialog dialog = super.onCreateDialog(savedInstanceState); 95b1b7080deea42aa533c3757b585cf765c6b76732Michael Chan dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); 9641fa43b962c94ce4a7e82d60737bf96ca0abd6bfMichael Chan dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE); 97b1b7080deea42aa533c3757b585cf765c6b76732Michael Chan return dialog; 98b1b7080deea42aa533c3757b585cf765c6b76732Michael Chan } 99b1b7080deea42aa533c3757b585cf765c6b76732Michael Chan 100b1b7080deea42aa533c3757b585cf765c6b76732Michael Chan @Override 101b1b7080deea42aa533c3757b585cf765c6b76732Michael Chan public void onTimeZoneSet(TimeZoneInfo tzi) { 102b1b7080deea42aa533c3757b585cf765c6b76732Michael Chan if (mTimeZoneSetListener != null) { 103b1b7080deea42aa533c3757b585cf765c6b76732Michael Chan mTimeZoneSetListener.onTimeZoneSet(tzi); 104b1b7080deea42aa533c3757b585cf765c6b76732Michael Chan } 105b1b7080deea42aa533c3757b585cf765c6b76732Michael Chan dismiss(); 106b1b7080deea42aa533c3757b585cf765c6b76732Michael Chan } 107b1b7080deea42aa533c3757b585cf765c6b76732Michael Chan} 108