| /* |
| * Copyright 2009, 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.commands.monkey; |
| |
| import android.hardware.display.DisplayManagerGlobal; |
| import android.os.Build; |
| import android.os.SystemClock; |
| import android.view.Display; |
| import android.util.DisplayMetrics; |
| |
| import com.android.commands.monkey.MonkeySourceNetwork.CommandQueue; |
| import com.android.commands.monkey.MonkeySourceNetwork.MonkeyCommand; |
| import com.android.commands.monkey.MonkeySourceNetwork.MonkeyCommandReturn; |
| |
| import java.lang.Integer; |
| import java.lang.Float; |
| import java.lang.Long; |
| import java.util.List; |
| import java.util.Map; |
| import java.util.Set; |
| import java.util.TreeMap; |
| |
| public class MonkeySourceNetworkVars { |
| /** |
| * Interface to get the value of a var. |
| */ |
| private static interface VarGetter { |
| /** |
| * Get the value of the var. |
| * @returns the value of the var. |
| */ |
| public String get(); |
| } |
| |
| private static class StaticVarGetter implements VarGetter { |
| private final String value; |
| |
| public StaticVarGetter(String value) { |
| this.value = value; |
| } |
| |
| public String get() { |
| return value; |
| } |
| } |
| |
| // Use a TreeMap to keep the keys sorted so they get displayed nicely in listvar |
| private static final Map<String, VarGetter> VAR_MAP = new TreeMap<String, VarGetter>(); |
| |
| static { |
| VAR_MAP.put("build.board", new StaticVarGetter(Build.BOARD)); |
| VAR_MAP.put("build.brand", new StaticVarGetter(Build.BRAND)); |
| VAR_MAP.put("build.device", new StaticVarGetter(Build.DEVICE)); |
| VAR_MAP.put("build.display", new StaticVarGetter(Build.DISPLAY)); |
| VAR_MAP.put("build.fingerprint", new StaticVarGetter(Build.FINGERPRINT)); |
| VAR_MAP.put("build.host", new StaticVarGetter(Build.HOST)); |
| VAR_MAP.put("build.id", new StaticVarGetter(Build.ID)); |
| VAR_MAP.put("build.model", new StaticVarGetter(Build.MODEL)); |
| VAR_MAP.put("build.product", new StaticVarGetter(Build.PRODUCT)); |
| VAR_MAP.put("build.tags", new StaticVarGetter(Build.TAGS)); |
| VAR_MAP.put("build.brand", new StaticVarGetter(Long.toString(Build.TIME))); |
| VAR_MAP.put("build.type", new StaticVarGetter(Build.TYPE)); |
| VAR_MAP.put("build.user", new StaticVarGetter(Build.USER)); |
| VAR_MAP.put("build.cpu_abi", new StaticVarGetter(Build.CPU_ABI)); |
| VAR_MAP.put("build.manufacturer", new StaticVarGetter(Build.MANUFACTURER)); |
| VAR_MAP.put("build.version.incremental", new StaticVarGetter(Build.VERSION.INCREMENTAL)); |
| VAR_MAP.put("build.version.release", new StaticVarGetter(Build.VERSION.RELEASE_OR_CODENAME)); |
| VAR_MAP.put("build.version.sdk", new StaticVarGetter(Integer.toString(Build.VERSION.SDK_INT))); |
| VAR_MAP.put("build.version.codename", new StaticVarGetter(Build.VERSION.CODENAME)); |
| |
| // Display |
| Display display = DisplayManagerGlobal.getInstance().getRealDisplay(Display.DEFAULT_DISPLAY); |
| VAR_MAP.put("display.width", new StaticVarGetter(Integer.toString(display.getWidth()))); |
| VAR_MAP.put("display.height", new StaticVarGetter(Integer.toString(display.getHeight()))); |
| |
| DisplayMetrics dm = new DisplayMetrics(); |
| display.getMetrics(dm); |
| VAR_MAP.put("display.density", new StaticVarGetter(Float.toString(dm.density))); |
| |
| // am. note that the current activity information isn't valid |
| // until the first activity gets launched after the monkey has |
| // been started. |
| VAR_MAP.put("am.current.package", new VarGetter() { |
| public String get() { |
| return Monkey.currentPackage; |
| } |
| }); |
| VAR_MAP.put("am.current.action", new VarGetter() { |
| public String get() { |
| if (Monkey.currentIntent == null) { |
| return null; |
| } |
| return Monkey.currentIntent.getAction(); |
| } |
| }); |
| VAR_MAP.put("am.current.comp.class", new VarGetter() { |
| public String get() { |
| if (Monkey.currentIntent == null) { |
| return null; |
| } |
| return Monkey.currentIntent.getComponent().getClassName(); |
| } |
| }); |
| VAR_MAP.put("am.current.comp.package", new VarGetter() { |
| public String get() { |
| if (Monkey.currentIntent == null) { |
| return null; |
| } |
| return Monkey.currentIntent.getComponent().getPackageName(); |
| } |
| }); |
| VAR_MAP.put("am.current.data", new VarGetter() { |
| public String get() { |
| if (Monkey.currentIntent == null) { |
| return null; |
| } |
| return Monkey.currentIntent.getDataString(); |
| } |
| }); |
| VAR_MAP.put("am.current.categories", new VarGetter() { |
| public String get() { |
| if (Monkey.currentIntent == null) { |
| return null; |
| } |
| StringBuffer sb = new StringBuffer(); |
| for (String cat : Monkey.currentIntent.getCategories()) { |
| sb.append(cat).append(" "); |
| } |
| return sb.toString(); |
| } |
| }); |
| |
| // clock |
| VAR_MAP.put("clock.realtime", new VarGetter() { |
| public String get() { |
| return Long.toString(SystemClock.elapsedRealtime()); |
| } |
| }); |
| VAR_MAP.put("clock.uptime", new VarGetter() { |
| public String get() { |
| return Long.toString(SystemClock.uptimeMillis()); |
| } |
| }); |
| VAR_MAP.put("clock.millis", new VarGetter() { |
| public String get() { |
| return Long.toString(System.currentTimeMillis()); |
| } |
| }); |
| VAR_MAP.put("monkey.version", new VarGetter() { |
| public String get() { |
| return Integer.toString(MonkeySourceNetwork.MONKEY_NETWORK_VERSION); |
| } |
| }); |
| } |
| |
| /** |
| * Command to list the "vars" that the monkey knows about. |
| */ |
| public static class ListVarCommand implements MonkeySourceNetwork.MonkeyCommand { |
| // listvar |
| public MonkeyCommandReturn translateCommand(List<String> command, |
| CommandQueue queue) { |
| Set<String> keys = VAR_MAP.keySet(); |
| StringBuffer sb = new StringBuffer(); |
| for (String key : keys) { |
| sb.append(key).append(" "); |
| } |
| return new MonkeyCommandReturn(true, sb.toString()); |
| } |
| } |
| |
| /** |
| * Command to get the value of a var. |
| */ |
| public static class GetVarCommand implements MonkeyCommand { |
| // getvar varname |
| public MonkeyCommandReturn translateCommand(List<String> command, |
| CommandQueue queue) { |
| if (command.size() == 2) { |
| VarGetter getter = VAR_MAP.get(command.get(1)); |
| if (getter == null) { |
| return new MonkeyCommandReturn(false, "unknown var"); |
| } |
| return new MonkeyCommandReturn(true, getter.get()); |
| } |
| return MonkeySourceNetwork.EARG; |
| } |
| } |
| } |