152d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project/*
252d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project * Copyright (C) 2008 The Android Open Source Project
352d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project *
452d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
552d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project * you may not use this file except in compliance with the License.
652d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project * You may obtain a copy of the License at
752d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project *
852d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
952d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project *
1052d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
1152d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
1252d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1352d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project * See the License for the specific language governing permissions and
1452d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project * limitations under the License.
1552d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project */
1652d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project
1752d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Projectpackage com.android.commands.monkey;
1852d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project
1952d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Projectimport android.app.IActivityManager;
2052d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Projectimport android.content.ComponentName;
2152d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Projectimport android.content.Intent;
2252bbaa30520a0eda5ae840d31308b65412f51cc4Yu Shan Emily Lauimport android.os.Bundle;
2352d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Projectimport android.os.RemoteException;
2452d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Projectimport android.view.IWindowManager;
2552d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project
2652d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project/**
2752d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project * monkey activity event
2852d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project */
2973421de1a007184cfef536966a6b7f3a3a2cdc91Guang Zhupublic class MonkeyActivityEvent extends MonkeyEvent {
3073421de1a007184cfef536966a6b7f3a3a2cdc91Guang Zhu    private ComponentName mApp;
319ab015751dc21fd648dd3f7abdff8a17a2abd5aaYu Shan Emily Lau    long mAlarmTime = 0;
3273421de1a007184cfef536966a6b7f3a3a2cdc91Guang Zhu
3352d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project    public MonkeyActivityEvent(ComponentName app) {
3452d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project        super(EVENT_TYPE_ACTIVITY);
3552d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project        mApp = app;
3652d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project    }
3752bbaa30520a0eda5ae840d31308b65412f51cc4Yu Shan Emily Lau
389ab015751dc21fd648dd3f7abdff8a17a2abd5aaYu Shan Emily Lau    public MonkeyActivityEvent(ComponentName app, long arg) {
3952bbaa30520a0eda5ae840d31308b65412f51cc4Yu Shan Emily Lau        super(EVENT_TYPE_ACTIVITY);
4052bbaa30520a0eda5ae840d31308b65412f51cc4Yu Shan Emily Lau        mApp = app;
4152bbaa30520a0eda5ae840d31308b65412f51cc4Yu Shan Emily Lau        mAlarmTime = arg;
4252bbaa30520a0eda5ae840d31308b65412f51cc4Yu Shan Emily Lau    }
4352bbaa30520a0eda5ae840d31308b65412f51cc4Yu Shan Emily Lau
4452bbaa30520a0eda5ae840d31308b65412f51cc4Yu Shan Emily Lau    /**
4552d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project     * @return Intent for the new activity
4652bbaa30520a0eda5ae840d31308b65412f51cc4Yu Shan Emily Lau     */
4773421de1a007184cfef536966a6b7f3a3a2cdc91Guang Zhu    private Intent getEvent() {
4852d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project        Intent intent = new Intent(Intent.ACTION_MAIN);
4952d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project        intent.addCategory(Intent.CATEGORY_LAUNCHER);
5052d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project        intent.setComponent(mApp);
5173421de1a007184cfef536966a6b7f3a3a2cdc91Guang Zhu        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
5252d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project        return intent;
5352d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project    }
5452d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project
5552d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project    @Override
5652d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project    public int injectEvent(IWindowManager iwm, IActivityManager iam, int verbose) {
5752d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project        Intent intent = getEvent();
5852d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project        if (verbose > 0) {
59f083bd43a0c6b7bf1b88775ac0f1d0bec1281a75Jeff Brown            System.out.println(":Switch: " + intent.toUri(0));
6052d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project        }
6152bbaa30520a0eda5ae840d31308b65412f51cc4Yu Shan Emily Lau
629ab015751dc21fd648dd3f7abdff8a17a2abd5aaYu Shan Emily Lau        if (mAlarmTime != 0){
6352bbaa30520a0eda5ae840d31308b65412f51cc4Yu Shan Emily Lau            Bundle args = new Bundle();
649ab015751dc21fd648dd3f7abdff8a17a2abd5aaYu Shan Emily Lau            args.putLong("alarmTime", mAlarmTime);
6552bbaa30520a0eda5ae840d31308b65412f51cc4Yu Shan Emily Lau            intent.putExtras(args);
6652bbaa30520a0eda5ae840d31308b65412f51cc4Yu Shan Emily Lau        }
6752bbaa30520a0eda5ae840d31308b65412f51cc4Yu Shan Emily Lau
6852d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project        try {
696b16feb5a066fce5c2abf6e326967901d4d77481Dianne Hackborn            iam.startActivity(null, null, intent, null, null, null, 0,
7051cb3a4dbc7dcf86c6d885e8cbf129914f2ad162Dianne Hackborn                    0, null, null, null);
7152d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project        } catch (RemoteException e) {
7252d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project            System.err.println("** Failed talking with activity manager!");
7352d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project            return MonkeyEvent.INJECT_ERROR_REMOTE_EXCEPTION;
7452d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project        } catch (SecurityException e) {
7552d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project            if (verbose > 0) {
7652d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project                System.out.println("** Permissions error starting activity "
77f083bd43a0c6b7bf1b88775ac0f1d0bec1281a75Jeff Brown                        + intent.toUri(0));
7852d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project            }
7952d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project            return MonkeyEvent.INJECT_ERROR_SECURITY_EXCEPTION;
8052d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project        }
8152d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project        return MonkeyEvent.INJECT_SUCCESS;
8252d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project    }
8352d4c30ca52320ec92d1d1ddc8db3f07f69c4f98The Android Open Source Project}
84