From 18b892c723e812a7e111f102d2b0c0782b116bb6 Mon Sep 17 00:00:00 2001 From: Guang Zhu Date: Thu, 11 Dec 2014 15:12:30 -0800 Subject: shell based UI Automator source move frameworks/testing/uiautomator -> frameworks/base/cmds/uiautomator (samples, utils sub folders exlcuded) frameworks/testing/uiautomator/utils -> frameworks/base/tests/utils no source files changed, only one line makefile update (for UI Automator API check) Bug: 18708851 Change-Id: I396bd386d3d55a52df18af183685daf80caa9f73 --- tests/utils/Android.mk | 17 +++ tests/utils/DummyIME/Android.mk | 26 ++++ tests/utils/DummyIME/AndroidManifest.xml | 35 +++++ tests/utils/DummyIME/res/xml/method.xml | 29 ++++ .../src/com/android/testing/dummyime/DummyIme.java | 35 +++++ .../android/testing/dummyime/ImePreferences.java | 26 ++++ tests/utils/SleepUtils/AlarmService/Android.mk | 26 ++++ .../SleepUtils/AlarmService/AndroidManifest.xml | 31 +++++ .../com/android/testing/alarmservice/Alarm.aidl | 23 ++++ .../android/testing/alarmservice/AlarmImpl.java | 77 +++++++++++ .../android/testing/alarmservice/AlarmService.java | 52 +++++++ .../android/testing/alarmservice/WakeUpCall.java | 42 ++++++ .../testing/alarmservice/WakeUpController.java | 59 ++++++++ tests/utils/SleepUtils/Android.mk | 2 + tests/utils/SleepUtils/README | 23 ++++ tests/utils/SleepUtils/SleepHelper/Android.mk | 29 ++++ .../SleepUtils/SleepHelper/AndroidManifest.xml | 21 +++ .../com/android/testing/sleephelper/SetAlarm.java | 152 +++++++++++++++++++++ tests/utils/SleepUtils/WakeLoopService/Android.mk | 24 ++++ .../SleepUtils/WakeLoopService/AndroidManifest.xml | 32 +++++ .../src/android/test/wakeuploop/FileUtil.java | 53 +++++++ .../android/test/wakeuploop/WakeLoopService.java | 98 +++++++++++++ .../src/android/test/wakeuploop/WakeUpCall.java | 112 +++++++++++++++ 23 files changed, 1024 insertions(+) create mode 100644 tests/utils/Android.mk create mode 100644 tests/utils/DummyIME/Android.mk create mode 100644 tests/utils/DummyIME/AndroidManifest.xml create mode 100644 tests/utils/DummyIME/res/xml/method.xml create mode 100644 tests/utils/DummyIME/src/com/android/testing/dummyime/DummyIme.java create mode 100644 tests/utils/DummyIME/src/com/android/testing/dummyime/ImePreferences.java create mode 100644 tests/utils/SleepUtils/AlarmService/Android.mk create mode 100644 tests/utils/SleepUtils/AlarmService/AndroidManifest.xml create mode 100644 tests/utils/SleepUtils/AlarmService/src/com/android/testing/alarmservice/Alarm.aidl create mode 100644 tests/utils/SleepUtils/AlarmService/src/com/android/testing/alarmservice/AlarmImpl.java create mode 100644 tests/utils/SleepUtils/AlarmService/src/com/android/testing/alarmservice/AlarmService.java create mode 100644 tests/utils/SleepUtils/AlarmService/src/com/android/testing/alarmservice/WakeUpCall.java create mode 100644 tests/utils/SleepUtils/AlarmService/src/com/android/testing/alarmservice/WakeUpController.java create mode 100644 tests/utils/SleepUtils/Android.mk create mode 100644 tests/utils/SleepUtils/README create mode 100644 tests/utils/SleepUtils/SleepHelper/Android.mk create mode 100644 tests/utils/SleepUtils/SleepHelper/AndroidManifest.xml create mode 100644 tests/utils/SleepUtils/SleepHelper/src/com/android/testing/sleephelper/SetAlarm.java create mode 100644 tests/utils/SleepUtils/WakeLoopService/Android.mk create mode 100644 tests/utils/SleepUtils/WakeLoopService/AndroidManifest.xml create mode 100644 tests/utils/SleepUtils/WakeLoopService/src/android/test/wakeuploop/FileUtil.java create mode 100644 tests/utils/SleepUtils/WakeLoopService/src/android/test/wakeuploop/WakeLoopService.java create mode 100644 tests/utils/SleepUtils/WakeLoopService/src/android/test/wakeuploop/WakeUpCall.java (limited to 'tests/utils') diff --git a/tests/utils/Android.mk b/tests/utils/Android.mk new file mode 100644 index 0000000..c141484 --- /dev/null +++ b/tests/utils/Android.mk @@ -0,0 +1,17 @@ +# +# Copyright (C) 2012 The Android Open Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +include $(call all-subdir-makefiles) diff --git a/tests/utils/DummyIME/Android.mk b/tests/utils/DummyIME/Android.mk new file mode 100644 index 0000000..c8d9f87 --- /dev/null +++ b/tests/utils/DummyIME/Android.mk @@ -0,0 +1,26 @@ +# +# Copyright (C) 2012 The Android Open Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +LOCAL_PATH:= $(call my-dir) +include $(CLEAR_VARS) + +LOCAL_MODULE_TAGS := tests + +LOCAL_SRC_FILES := $(call all-java-files-under, src) + +LOCAL_PACKAGE_NAME := DummyIME + +include $(BUILD_PACKAGE) diff --git a/tests/utils/DummyIME/AndroidManifest.xml b/tests/utils/DummyIME/AndroidManifest.xml new file mode 100644 index 0000000..fd17a52 --- /dev/null +++ b/tests/utils/DummyIME/AndroidManifest.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + diff --git a/tests/utils/DummyIME/res/xml/method.xml b/tests/utils/DummyIME/res/xml/method.xml new file mode 100644 index 0000000..43a330e --- /dev/null +++ b/tests/utils/DummyIME/res/xml/method.xml @@ -0,0 +1,29 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/utils/DummyIME/src/com/android/testing/dummyime/DummyIme.java b/tests/utils/DummyIME/src/com/android/testing/dummyime/DummyIme.java new file mode 100644 index 0000000..7b7a39a --- /dev/null +++ b/tests/utils/DummyIME/src/com/android/testing/dummyime/DummyIme.java @@ -0,0 +1,35 @@ +/* + * Copyright (C) 2012 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.testing.dummyime; + +import android.inputmethodservice.InputMethodService; + +/** + * Dummy IME implementation that basically does nothing + */ +public class DummyIme extends InputMethodService { + + @Override + public boolean onEvaluateFullscreenMode() { + return false; + } + + @Override + public boolean onEvaluateInputViewShown() { + return false; + } +} diff --git a/tests/utils/DummyIME/src/com/android/testing/dummyime/ImePreferences.java b/tests/utils/DummyIME/src/com/android/testing/dummyime/ImePreferences.java new file mode 100644 index 0000000..41036ab --- /dev/null +++ b/tests/utils/DummyIME/src/com/android/testing/dummyime/ImePreferences.java @@ -0,0 +1,26 @@ +/* + * Copyright (C) 2012 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.testing.dummyime; + +import android.preference.PreferenceActivity; + +/** + * Dummy IME preference activity + */ +public class ImePreferences extends PreferenceActivity { + +} diff --git a/tests/utils/SleepUtils/AlarmService/Android.mk b/tests/utils/SleepUtils/AlarmService/Android.mk new file mode 100644 index 0000000..9022f03 --- /dev/null +++ b/tests/utils/SleepUtils/AlarmService/Android.mk @@ -0,0 +1,26 @@ +# +# Copyright (C) 2013 The Android Open Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +LOCAL_PATH:= $(call my-dir) +include $(CLEAR_VARS) + +LOCAL_MODULE_TAGS := tests +LOCAL_SRC_FILES := $(call all-java-files-under, src) +LOCAL_SRC_FILES += \ + src/com/android/testing/alarmservice/Alarm.aidl +LOCAL_PACKAGE_NAME := SleepUtilsAlarmService +LOCAL_SDK_VERSION := 7 +include $(BUILD_PACKAGE) diff --git a/tests/utils/SleepUtils/AlarmService/AndroidManifest.xml b/tests/utils/SleepUtils/AlarmService/AndroidManifest.xml new file mode 100644 index 0000000..1b6de39 --- /dev/null +++ b/tests/utils/SleepUtils/AlarmService/AndroidManifest.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/utils/SleepUtils/AlarmService/src/com/android/testing/alarmservice/Alarm.aidl b/tests/utils/SleepUtils/AlarmService/src/com/android/testing/alarmservice/Alarm.aidl new file mode 100644 index 0000000..62a8c48 --- /dev/null +++ b/tests/utils/SleepUtils/AlarmService/src/com/android/testing/alarmservice/Alarm.aidl @@ -0,0 +1,23 @@ +/* + * Copyright (C) 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.testing.alarmservice; + +interface Alarm { + int prepare(); + int setAlarmAndWait(long timeoutMills); + int done(); +} \ No newline at end of file diff --git a/tests/utils/SleepUtils/AlarmService/src/com/android/testing/alarmservice/AlarmImpl.java b/tests/utils/SleepUtils/AlarmService/src/com/android/testing/alarmservice/AlarmImpl.java new file mode 100644 index 0000000..122d55d --- /dev/null +++ b/tests/utils/SleepUtils/AlarmService/src/com/android/testing/alarmservice/AlarmImpl.java @@ -0,0 +1,77 @@ +/* + * Copyright (C) 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.testing.alarmservice; + +import android.app.AlarmManager; +import android.app.PendingIntent; +import android.content.Context; +import android.content.Intent; +import android.os.RemoteException; +import android.os.SystemClock; +import android.util.Log; + +import com.android.testing.alarmservice.Alarm.Stub; + +public class AlarmImpl extends Stub { + + private static final String LOG_TAG = AlarmImpl.class.getSimpleName(); + + private Context mContext; + + public AlarmImpl(Context context) { + super(); + mContext = context; + } + + @Override + public int prepare() throws RemoteException { + WakeUpController.getController().getWakeLock().acquire(); + Log.d(LOG_TAG, "AlarmService prepared, wake lock acquired"); + return 0; + } + + @Override + public int setAlarmAndWait(long timeoutMills) throws RemoteException { + // calculate when device should be waken up + long atTime = SystemClock.elapsedRealtime() + timeoutMills; + AlarmManager am = (AlarmManager) mContext.getSystemService(Context.ALARM_SERVICE); + Intent wakupIntent = new Intent(WakeUpCall.WAKEUP_CALL); + PendingIntent pi = PendingIntent.getBroadcast(mContext, 0, wakupIntent, 0); + // set alarm, which will be delivered in form of the wakeupIntent + am.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, atTime, pi); + Log.d(LOG_TAG, String.format("Alarm set: %d, giving up wake lock", atTime)); + Object lock = WakeUpController.getController().getWakeSync(); + // release wakelock and wait for the lock to be poked from the broadcast receiver + WakeUpController.getController().getWakeLock().release(); + // does not really matter if device enters suspend before we start waiting on lock + synchronized (lock) { + try { + lock.wait(); + } catch (InterruptedException e) { + } + } + Log.d(LOG_TAG, String.format("Alarm triggered, done waiting")); + return 0; + } + + @Override + public int done() throws RemoteException { + WakeUpController.getController().getWakeLock().release(); + return 0; + } + +} diff --git a/tests/utils/SleepUtils/AlarmService/src/com/android/testing/alarmservice/AlarmService.java b/tests/utils/SleepUtils/AlarmService/src/com/android/testing/alarmservice/AlarmService.java new file mode 100644 index 0000000..576a1cf --- /dev/null +++ b/tests/utils/SleepUtils/AlarmService/src/com/android/testing/alarmservice/AlarmService.java @@ -0,0 +1,52 @@ +/* + * Copyright (C) 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.testing.alarmservice; + +import android.app.Service; +import android.content.Context; +import android.content.Intent; +import android.os.IBinder; + +public class AlarmService extends Service { + + private AlarmImpl mAlarmImpl = null; + static Context sContext; + + @Override + public void onCreate() { + super.onCreate(); + sContext = this; + } + + @Override + public IBinder onBind(Intent intent) { + return getAlarmImpl(); + } + + private AlarmImpl getAlarmImpl() { + if (mAlarmImpl == null) { + mAlarmImpl = new AlarmImpl(this); + } + return mAlarmImpl; + } + + @Override + public void onDestroy() { + sContext = null; + super.onDestroy(); + } +} diff --git a/tests/utils/SleepUtils/AlarmService/src/com/android/testing/alarmservice/WakeUpCall.java b/tests/utils/SleepUtils/AlarmService/src/com/android/testing/alarmservice/WakeUpCall.java new file mode 100644 index 0000000..f4bb4db --- /dev/null +++ b/tests/utils/SleepUtils/AlarmService/src/com/android/testing/alarmservice/WakeUpCall.java @@ -0,0 +1,42 @@ +/* + * Copyright (C) 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.testing.alarmservice; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; + +/** + * The receiver for the alarm we set + * + */ +public class WakeUpCall extends BroadcastReceiver { + + public static final String WAKEUP_CALL = "com.android.testing.alarmservice.WAKEUP"; + + @Override + public void onReceive(Context context, Intent intent) { + // we acquire wakelock without release because user is supposed to manually release it + WakeUpController.getController().getWakeLock().acquire(); + Object lock = WakeUpController.getController().getWakeSync(); + synchronized (lock) { + // poke the lock so the service side can be woken from waiting on the lock + lock.notifyAll(); + } + } + +} diff --git a/tests/utils/SleepUtils/AlarmService/src/com/android/testing/alarmservice/WakeUpController.java b/tests/utils/SleepUtils/AlarmService/src/com/android/testing/alarmservice/WakeUpController.java new file mode 100644 index 0000000..478371f --- /dev/null +++ b/tests/utils/SleepUtils/AlarmService/src/com/android/testing/alarmservice/WakeUpController.java @@ -0,0 +1,59 @@ +/* + * Copyright (C) 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.testing.alarmservice; + +import android.content.Context; +import android.os.PowerManager; +import android.os.PowerManager.WakeLock; +import android.util.Log; + +/** + * A singleton used for controlling and sharing of states/wakelocks + * + */ +public class WakeUpController { + + private static final String LOG_TAG = WakeUpController.class.getName(); + private static WakeUpController mController = null; + private WakeLock mWakeLock = null; + private Object mWakeSync = new Object(); + + private WakeUpController() { + Log.i(LOG_TAG, "Created instance: 0x" + Integer.toHexString(this.hashCode())); + } + + public static synchronized WakeUpController getController() { + if (mController == null) { + mController = new WakeUpController(); + } + return mController; + } + + public WakeLock getWakeLock() { + if (mWakeLock == null) { + PowerManager pm = + (PowerManager) AlarmService.sContext.getSystemService(Context.POWER_SERVICE); + mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "testing-alarmservice"); + Log.i(LOG_TAG, "Create wakelock: 0x" + Integer.toHexString(mWakeLock.hashCode())); + } + return mWakeLock; + } + + public Object getWakeSync() { + return mWakeSync; + } +} diff --git a/tests/utils/SleepUtils/Android.mk b/tests/utils/SleepUtils/Android.mk new file mode 100644 index 0000000..0e65e22 --- /dev/null +++ b/tests/utils/SleepUtils/Android.mk @@ -0,0 +1,2 @@ +LOCAL_PATH:= $(call my-dir) +include $(call all-makefiles-under, $(LOCAL_PATH)) diff --git a/tests/utils/SleepUtils/README b/tests/utils/SleepUtils/README new file mode 100644 index 0000000..bfe07da --- /dev/null +++ b/tests/utils/SleepUtils/README @@ -0,0 +1,23 @@ +This folder contains utils to properly perform timed suspend and wakeup. + +AlarmService - a service that client can bind to and perform: +1) holding wakelock (singleton to this service) +2) setting alarm for a specified period and releasing the wakelock; service + call will block until alarm has been triggered and the wakelock is held +3) releasing the wakelock + +SleepHelper - a self instrumentation meant as a convenient way to trigger +the service functions from command line. Corresponding to service function +above, supported operations are: +1) holding wakelock +am instrument -w -e command prepare \ + com.android.testing.sleephelper/.SetAlarm + +2) setting alarm and wait til triggered +am instrument -w -e command set_wait \ + -e param