1abb2af7d5f4912905cf105466f34ae983310c47bAllen Hair/* 2abb2af7d5f4912905cf105466f34ae983310c47bAllen Hair * Copyright (C) 2013 The Android Open Source Project 3abb2af7d5f4912905cf105466f34ae983310c47bAllen Hair * 4abb2af7d5f4912905cf105466f34ae983310c47bAllen Hair * Licensed under the Apache License, Version 2.0 (the "License"); 5abb2af7d5f4912905cf105466f34ae983310c47bAllen Hair * you may not use this file except in compliance with the License. 6abb2af7d5f4912905cf105466f34ae983310c47bAllen Hair * You may obtain a copy of the License at 7abb2af7d5f4912905cf105466f34ae983310c47bAllen Hair * 8abb2af7d5f4912905cf105466f34ae983310c47bAllen Hair * http://www.apache.org/licenses/LICENSE-2.0 9abb2af7d5f4912905cf105466f34ae983310c47bAllen Hair * 10abb2af7d5f4912905cf105466f34ae983310c47bAllen Hair * Unless required by applicable law or agreed to in writing, software 11abb2af7d5f4912905cf105466f34ae983310c47bAllen Hair * distributed under the License is distributed on an "AS IS" BASIS, 12abb2af7d5f4912905cf105466f34ae983310c47bAllen Hair * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13abb2af7d5f4912905cf105466f34ae983310c47bAllen Hair * See the License for the specific language governing permissions and 14abb2af7d5f4912905cf105466f34ae983310c47bAllen Hair * limitations under the License. 15abb2af7d5f4912905cf105466f34ae983310c47bAllen Hair */ 16abb2af7d5f4912905cf105466f34ae983310c47bAllen Hair 17abb2af7d5f4912905cf105466f34ae983310c47bAllen Hairpackage com.android.uiautomator.tests.cts.testapp; 18abb2af7d5f4912905cf105466f34ae983310c47bAllen Hair 19abb2af7d5f4912905cf105466f34ae983310c47bAllen Hairimport android.app.AlertDialog; 20abb2af7d5f4912905cf105466f34ae983310c47bAllen Hairimport android.content.Context; 21abb2af7d5f4912905cf105466f34ae983310c47bAllen Hairimport android.os.Bundle; 22abb2af7d5f4912905cf105466f34ae983310c47bAllen Hairimport android.os.Handler; 23abb2af7d5f4912905cf105466f34ae983310c47bAllen Hairimport android.os.SystemClock; 24abb2af7d5f4912905cf105466f34ae983310c47bAllen Hairimport android.support.v4.app.Fragment; 25abb2af7d5f4912905cf105466f34ae983310c47bAllen Hairimport android.view.LayoutInflater; 26abb2af7d5f4912905cf105466f34ae983310c47bAllen Hairimport android.view.Menu; 27abb2af7d5f4912905cf105466f34ae983310c47bAllen Hairimport android.view.MenuInflater; 28abb2af7d5f4912905cf105466f34ae983310c47bAllen Hairimport android.view.MenuItem; 29abb2af7d5f4912905cf105466f34ae983310c47bAllen Hairimport android.view.View; 30abb2af7d5f4912905cf105466f34ae983310c47bAllen Hairimport android.view.ViewGroup; 31abb2af7d5f4912905cf105466f34ae983310c47bAllen Hairimport android.view.inputmethod.InputMethodManager; 32abb2af7d5f4912905cf105466f34ae983310c47bAllen Hairimport android.widget.Button; 33abb2af7d5f4912905cf105466f34ae983310c47bAllen Hairimport android.widget.EditText; 34abb2af7d5f4912905cf105466f34ae983310c47bAllen Hairimport android.widget.TextView; 35abb2af7d5f4912905cf105466f34ae983310c47bAllen Hair 36abb2af7d5f4912905cf105466f34ae983310c47bAllen Hairpublic class Test3DetailFragment extends Fragment { 37abb2af7d5f4912905cf105466f34ae983310c47bAllen Hair 38abb2af7d5f4912905cf105466f34ae983310c47bAllen Hair public static final String ARG_ITEM_ID = "item_id"; 39abb2af7d5f4912905cf105466f34ae983310c47bAllen Hair private TextView mTextClock; 40abb2af7d5f4912905cf105466f34ae983310c47bAllen Hair private Button mSubmitButton; 41abb2af7d5f4912905cf105466f34ae983310c47bAllen Hair private EditText mEditText; 42abb2af7d5f4912905cf105466f34ae983310c47bAllen Hair private long mCurrentTime; 43abb2af7d5f4912905cf105466f34ae983310c47bAllen Hair private final Object sync = new Object(); 44abb2af7d5f4912905cf105466f34ae983310c47bAllen Hair private boolean mRunCounter = true; 45abb2af7d5f4912905cf105466f34ae983310c47bAllen Hair 46abb2af7d5f4912905cf105466f34ae983310c47bAllen Hair public Test3DetailFragment() { 47abb2af7d5f4912905cf105466f34ae983310c47bAllen Hair } 48abb2af7d5f4912905cf105466f34ae983310c47bAllen Hair 49abb2af7d5f4912905cf105466f34ae983310c47bAllen Hair @Override 50abb2af7d5f4912905cf105466f34ae983310c47bAllen Hair public void onCreate(Bundle savedInstanceState) { 51abb2af7d5f4912905cf105466f34ae983310c47bAllen Hair super.onCreate(savedInstanceState); 52abb2af7d5f4912905cf105466f34ae983310c47bAllen Hair setHasOptionsMenu(true); 53abb2af7d5f4912905cf105466f34ae983310c47bAllen Hair } 54abb2af7d5f4912905cf105466f34ae983310c47bAllen Hair 55abb2af7d5f4912905cf105466f34ae983310c47bAllen Hair @Override 56abb2af7d5f4912905cf105466f34ae983310c47bAllen Hair public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 57abb2af7d5f4912905cf105466f34ae983310c47bAllen Hair inflater.inflate(R.menu.test2_detail_activity, menu); 58abb2af7d5f4912905cf105466f34ae983310c47bAllen Hair } 59abb2af7d5f4912905cf105466f34ae983310c47bAllen Hair 60abb2af7d5f4912905cf105466f34ae983310c47bAllen Hair @Override 61abb2af7d5f4912905cf105466f34ae983310c47bAllen Hair public boolean onOptionsItemSelected(MenuItem item) { 62abb2af7d5f4912905cf105466f34ae983310c47bAllen Hair AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 63abb2af7d5f4912905cf105466f34ae983310c47bAllen Hair builder.setTitle(R.string.dialog_title_result); 64abb2af7d5f4912905cf105466f34ae983310c47bAllen Hair builder.setMessage(item.getTitle()); 65abb2af7d5f4912905cf105466f34ae983310c47bAllen Hair builder.setPositiveButton(R.string.OK, null); 66abb2af7d5f4912905cf105466f34ae983310c47bAllen Hair AlertDialog diag = builder.create(); 67abb2af7d5f4912905cf105466f34ae983310c47bAllen Hair diag.show(); 68abb2af7d5f4912905cf105466f34ae983310c47bAllen Hair return super.onOptionsItemSelected(item); 69abb2af7d5f4912905cf105466f34ae983310c47bAllen Hair } 70abb2af7d5f4912905cf105466f34ae983310c47bAllen Hair 71abb2af7d5f4912905cf105466f34ae983310c47bAllen Hair private final Handler mHandler = new Handler(); 72abb2af7d5f4912905cf105466f34ae983310c47bAllen Hair 73abb2af7d5f4912905cf105466f34ae983310c47bAllen Hair final Runnable mClockRunnable = new Runnable() { 74abb2af7d5f4912905cf105466f34ae983310c47bAllen Hair @Override 75abb2af7d5f4912905cf105466f34ae983310c47bAllen Hair public void run() { 76abb2af7d5f4912905cf105466f34ae983310c47bAllen Hair // call the activity method that updates the UI 77abb2af7d5f4912905cf105466f34ae983310c47bAllen Hair updateClockOnUi(); 78abb2af7d5f4912905cf105466f34ae983310c47bAllen Hair } 79abb2af7d5f4912905cf105466f34ae983310c47bAllen Hair }; 80abb2af7d5f4912905cf105466f34ae983310c47bAllen Hair 81abb2af7d5f4912905cf105466f34ae983310c47bAllen Hair private void updateClockOnUi() { 82abb2af7d5f4912905cf105466f34ae983310c47bAllen Hair synchronized (sync) { 83abb2af7d5f4912905cf105466f34ae983310c47bAllen Hair mTextClock.setText("" + mCurrentTime); 84abb2af7d5f4912905cf105466f34ae983310c47bAllen Hair } 85abb2af7d5f4912905cf105466f34ae983310c47bAllen Hair } 86abb2af7d5f4912905cf105466f34ae983310c47bAllen Hair 87abb2af7d5f4912905cf105466f34ae983310c47bAllen Hair @Override 88abb2af7d5f4912905cf105466f34ae983310c47bAllen Hair public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedState) { 89abb2af7d5f4912905cf105466f34ae983310c47bAllen Hair View rootView = inflater.inflate(R.layout.test3_detail_fragment, container, false); 90abb2af7d5f4912905cf105466f34ae983310c47bAllen Hair mTextClock = (TextView) rootView.findViewById(R.id.test3ClockTextView); 91abb2af7d5f4912905cf105466f34ae983310c47bAllen Hair mSubmitButton = (Button) rootView.findViewById(R.id.test3SubmitButton); 92abb2af7d5f4912905cf105466f34ae983310c47bAllen Hair mEditText = (EditText) rootView.findViewById(R.id.test3TextField); 93abb2af7d5f4912905cf105466f34ae983310c47bAllen Hair mSubmitButton.setOnClickListener(new Button.OnClickListener() { 94abb2af7d5f4912905cf105466f34ae983310c47bAllen Hair @Override 95abb2af7d5f4912905cf105466f34ae983310c47bAllen Hair public void onClick(View v) { 96abb2af7d5f4912905cf105466f34ae983310c47bAllen Hair // close soft keyboard 97abb2af7d5f4912905cf105466f34ae983310c47bAllen Hair InputMethodManager imm = (InputMethodManager) getActivity().getSystemService( 98abb2af7d5f4912905cf105466f34ae983310c47bAllen Hair Context.INPUT_METHOD_SERVICE); 99abb2af7d5f4912905cf105466f34ae983310c47bAllen Hair imm.hideSoftInputFromWindow(mEditText.getWindowToken(), 0); 100abb2af7d5f4912905cf105466f34ae983310c47bAllen Hair 101abb2af7d5f4912905cf105466f34ae983310c47bAllen Hair // display the submitted text 102abb2af7d5f4912905cf105466f34ae983310c47bAllen Hair AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 103abb2af7d5f4912905cf105466f34ae983310c47bAllen Hair builder.setTitle(R.string.test3_dialog_title); 104abb2af7d5f4912905cf105466f34ae983310c47bAllen Hair builder.setPositiveButton(R.string.OK, null); 105abb2af7d5f4912905cf105466f34ae983310c47bAllen Hair CharSequence inputText = mEditText.getText(); 106abb2af7d5f4912905cf105466f34ae983310c47bAllen Hair if (inputText != null && !inputText.toString().isEmpty()) { 107abb2af7d5f4912905cf105466f34ae983310c47bAllen Hair long inputTime = Long.parseLong(inputText.toString()); 108abb2af7d5f4912905cf105466f34ae983310c47bAllen Hair builder.setMessage("" + (mCurrentTime - inputTime)); 109abb2af7d5f4912905cf105466f34ae983310c47bAllen Hair } else { 110abb2af7d5f4912905cf105466f34ae983310c47bAllen Hair builder.setMessage("<NO DATA>"); 111abb2af7d5f4912905cf105466f34ae983310c47bAllen Hair } 112abb2af7d5f4912905cf105466f34ae983310c47bAllen Hair AlertDialog diag = builder.create(); 113abb2af7d5f4912905cf105466f34ae983310c47bAllen Hair diag.show(); 114abb2af7d5f4912905cf105466f34ae983310c47bAllen Hair mEditText.setText(""); 115abb2af7d5f4912905cf105466f34ae983310c47bAllen Hair mRunCounter = false; 116abb2af7d5f4912905cf105466f34ae983310c47bAllen Hair } 117abb2af7d5f4912905cf105466f34ae983310c47bAllen Hair }); 118abb2af7d5f4912905cf105466f34ae983310c47bAllen Hair 119abb2af7d5f4912905cf105466f34ae983310c47bAllen Hair new Thread(new Runnable() { 120abb2af7d5f4912905cf105466f34ae983310c47bAllen Hair @Override 121abb2af7d5f4912905cf105466f34ae983310c47bAllen Hair public void run() { 122abb2af7d5f4912905cf105466f34ae983310c47bAllen Hair while (mRunCounter) { 123abb2af7d5f4912905cf105466f34ae983310c47bAllen Hair synchronized (sync) { 124abb2af7d5f4912905cf105466f34ae983310c47bAllen Hair mCurrentTime = SystemClock.elapsedRealtime(); 125abb2af7d5f4912905cf105466f34ae983310c47bAllen Hair } 126abb2af7d5f4912905cf105466f34ae983310c47bAllen Hair mHandler.post(mClockRunnable); 127abb2af7d5f4912905cf105466f34ae983310c47bAllen Hair SystemClock.sleep(100); 128abb2af7d5f4912905cf105466f34ae983310c47bAllen Hair } 129abb2af7d5f4912905cf105466f34ae983310c47bAllen Hair } 130abb2af7d5f4912905cf105466f34ae983310c47bAllen Hair }).start(); 131abb2af7d5f4912905cf105466f34ae983310c47bAllen Hair 132abb2af7d5f4912905cf105466f34ae983310c47bAllen Hair return rootView; 133abb2af7d5f4912905cf105466f34ae983310c47bAllen Hair } 134abb2af7d5f4912905cf105466f34ae983310c47bAllen Hair} 135