Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Tune activities startup #441

Merged
merged 4 commits into from
May 5, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ class CreateSession : RequestHandler<SessionParams, Session> {
val activityName = params.desiredCapabilities.appActivity
try {
activityName?.let {
startActivity(it)
startActivity(params.desiredCapabilities.appPackage, it)
}
} catch (e: Exception) {
throw SessionNotCreatedException(e)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ class StartActivity : RequestHandler<StartActivityParams, Void?> {

@Throws(AppiumException::class)
override fun handle(params: StartActivityParams): Void? {
startActivity(params.appActivity)
startActivity(params.appPackage, params.appActivity)
return null
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,9 @@
import java.lang.reflect.Field;

import androidx.test.platform.app.InstrumentationRegistry;

import javax.annotation.Nullable;

import io.appium.espressoserver.lib.handlers.exceptions.AppiumException;

import static io.appium.espressoserver.lib.helpers.AndroidLogger.logger;
Expand Down Expand Up @@ -55,15 +58,19 @@ public static Activity getCurrentActivity() throws AppiumException {
throw new AppiumException("Failed to get current Activity");
}

private static String getFullyQualifiedActivityName(Instrumentation instrumentation, String activity) {
final String pkg = instrumentation.getTargetContext().getPackageName();
return activity.startsWith(".") ? pkg + activity : activity;
private static String getFullyQualifiedActivityName(Instrumentation instrumentation,
@Nullable String pkg, String activity) {
String appPackage = pkg;
if (appPackage == null) {
appPackage = instrumentation.getTargetContext().getPackageName();
}
return activity.startsWith(".") ? appPackage + activity : activity;
}

public static void startActivity(String activity) {
logger.info(String.format("Starting activity '%s'", activity));
public static void startActivity(@Nullable String pkg, String activity) {
Instrumentation instrumentation = InstrumentationRegistry.getInstrumentation();
String fullyQualifiedAppActivity = getFullyQualifiedActivityName(instrumentation, activity);
String fullyQualifiedAppActivity = getFullyQualifiedActivityName(instrumentation, pkg, activity);
logger.info(String.format("Starting activity '%s'", fullyQualifiedAppActivity));
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setClassName(instrumentation.getTargetContext(), fullyQualifiedAppActivity);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,5 +19,5 @@ package io.appium.espressoserver.lib.model
data class SessionParams(
val desiredCapabilities: DesiredCapabilities
) : AppiumParams() {
data class DesiredCapabilities(var appActivity : String?)
data class DesiredCapabilities(var appPackage: String?, var appActivity : String?)
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package io.appium.espressoserver.lib.model

data class StartActivityParams(
val appActivity: String? = null
val appPackage: String? = null,
val appActivity: String
) : AppiumParams()
Original file line number Diff line number Diff line change
Expand Up @@ -68,8 +68,9 @@ class `KReflectionUtils Test` {

@Test
fun `should extract declared properties from an instance`() {
val sessionParams = SessionParams.DesiredCapabilities("appActivity")
val sessionParams = SessionParams.DesiredCapabilities("appPackage", "appActivity")
val extractedProps = KReflectionUtils.extractDeclaredProperties(sessionParams)
assertEquals(extractedProps["appPackage"], "appPackage")
assertEquals(extractedProps["appActivity"], "appActivity")
}

Expand Down
2 changes: 1 addition & 1 deletion espresso-server/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ buildscript {
}
dependencies {
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath 'com.android.tools.build:gradle:3.3.2'
classpath 'com.android.tools.build:gradle:3.4.0'

// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
Expand Down
4 changes: 2 additions & 2 deletions espresso-server/gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#Mon Jan 21 21:20:50 CET 2019
#Sat May 04 08:52:15 CEST 2019
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.1-all.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-5.1.1-all.zip
14 changes: 10 additions & 4 deletions lib/commands/general.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import { util } from 'appium-support';
import logger from '../logger';
import validate from 'validate.js';
import { errors } from 'appium-base-driver';
import { qualifyActivityName } from '../utils';

let commands = {}, helpers = {}, extensions = {};

Expand Down Expand Up @@ -267,11 +268,16 @@ commands.startActivity = async function startActivity (appPackage, appActivity,
appWaitPackage, appWaitActivity) {
// intentAction, intentCategory, intentFlags, optionalIntentArguments, dontStopAppOnReset
// parameters are not supported by Espresso

appPackage = appPackage || this.caps.appPackage;
appWaitPackage = appWaitPackage || appPackage;
appActivity = qualifyActivityName(appActivity, appPackage);
appWaitActivity = qualifyActivityName(appWaitActivity || appActivity, appWaitPackage);
logger.debug(`Starting activity '${appActivity}' for package '${appPackage}'`);
await this.espresso.jwproxy.command(`/appium/device/start_activity`, 'POST', {appActivity});
await this.adb.waitForActivity(appWaitPackage || appPackage || this.caps.appPackage,
appWaitActivity || appActivity);
await this.espresso.jwproxy.command(`/appium/device/start_activity`, 'POST', {
appPackage,
appActivity,
});
await this.adb.waitForActivity(appWaitPackage, appWaitActivity);
};


Expand Down
9 changes: 1 addition & 8 deletions lib/driver.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import desiredCapConstraints from './desired-caps';
import { version } from '../../package.json'; // eslint-disable-line import/no-unresolved
import { findAPortNotInUse } from 'portscanner';
import { retryInterval } from 'asyncbox';
import { qualifyActivityName } from './utils';


// TODO merge our own helpers onto this later
Expand Down Expand Up @@ -275,14 +276,6 @@ class EspressoDriver extends BaseDriver {
if (!this.caps.appWaitPackage) {
this.caps.appWaitPackage = appInfo.appWaitPackage || appInfo.appPackage || this.caps.appPackage;
}
const qualifyActivityName = (activityName, packageName) => {
let result = activityName;
if (!activityName.startsWith(packageName)) {
result = `${packageName}${activityName.startsWith('.') ? '' : '.'}${activityName}`;
logger.warn(`Adjusted activity '${activityName}' to fully qualified version: '${result}'`);
}
return result;
};
if (this.caps.appActivity) {
this.caps.appActivity = qualifyActivityName(this.caps.appActivity, this.caps.appPackage);
} else {
Expand Down
9 changes: 9 additions & 0 deletions lib/utils.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import _ from 'lodash';

function qualifyActivityName (activityName, packageName) {
return _.startsWith(activityName, '.') && packageName
? `${packageName}${activityName}`
: activityName;
}

export { qualifyActivityName };