blob: 1a9c180ffa98ac8d8aeeae04601ba06e8fd6389a [file] [log] [blame]
/*
* Copyright (C) 2018 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.server.adb;
import static com.android.server.adb.AdbDebuggingManagerTest.TestResult;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Message;
import android.util.Log;
import java.util.concurrent.BlockingQueue;
/**
* Helper Activity used to test the AdbDebuggingManager's prompt to allow an adb key.
*/
public class AdbDebuggingManagerTestActivity extends Activity {
private static final String TAG = "AdbDebuggingManagerTestActivity";
/*
* Static values that must be set before each test to modify the behavior of the Activity.
*/
private static AdbDebuggingManager.AdbDebuggingHandler sHandler;
private static boolean sAllowKey;
private static boolean sAlwaysAllow;
private static String sExpectedKey;
private static BlockingQueue sBlockingQueue;
/**
* Receives the Intent sent from the AdbDebuggingManager and sends the preconfigured response.
*/
@Override
public void onCreate(Bundle bundle) {
super.onCreate(bundle);
Intent intent = getIntent();
String key = intent.getStringExtra("key");
if (!key.equals(sExpectedKey)) {
TestResult result = new TestResult(TestResult.RESULT_UNEXPECTED_KEY, key);
postResult(result);
finish();
return;
}
// Post the result that the activity was successfully launched as expected and a response
// is being sent to let the test method know that it should move on to waiting for the next
// expected response from the AdbDebuggingManager.
TestResult result = new TestResult(
AdbDebuggingManagerTest.TestResult.RESULT_ACTIVITY_LAUNCHED);
postResult(result);
// Initialize the message based on the preconfigured values. If the key is accepted the
// AdbDebuggingManager expects the key to be in the obj field of the message, and if the
// user selects the 'Always allow' option the manager expects the arg1 field to be set to 1.
int messageType;
if (sAllowKey) {
messageType = AdbDebuggingManager.AdbDebuggingHandler.MESSAGE_ADB_ALLOW;
} else {
messageType = AdbDebuggingManager.AdbDebuggingHandler.MESSAGE_ADB_DENY;
}
Message message = sHandler.obtainMessage(messageType);
message.obj = key;
if (sAlwaysAllow) {
message.arg1 = 1;
}
finish();
sHandler.sendMessage(message);
}
/**
* Posts the result of the activity to the test method.
*/
private void postResult(TestResult result) {
try {
sBlockingQueue.put(result);
} catch (InterruptedException e) {
Log.e(TAG, "Caught an InterruptedException posting the result " + result, e);
}
}
/**
* Allows test methods to specify the behavior of the Activity before it is invoked by the
* AdbDebuggingManager.
*/
public static class Configurator {
/**
* Sets the test handler to be used by this activity to send the configured response.
*/
public Configurator setHandler(AdbDebuggingManager.AdbDebuggingHandler handler) {
sHandler = handler;
return this;
}
/**
* Sets whether the key should be allowed for this test.
*/
public Configurator setAllowKey(boolean allow) {
sAllowKey = allow;
return this;
}
/**
* Sets whether the 'Always allow' option should be selected for this test.
*/
public Configurator setAlwaysAllow(boolean alwaysAllow) {
sAlwaysAllow = alwaysAllow;
return this;
}
/**
* Sets the key that should be expected from the AdbDebuggingManager for this test.
*/
public Configurator setExpectedKey(String expectedKey) {
sExpectedKey = expectedKey;
return this;
}
/**
* Sets the BlockingQueue that should be used to post the result of the Activity back to the
* test method.
*/
public Configurator setBlockingQueue(BlockingQueue blockingQueue) {
sBlockingQueue = blockingQueue;
return this;
}
}
}