fix the bug that running process tracing is not possible.
rearrange app list in appcombo (user application will be top of the list)
Change-Id: Ieff69e40cb06cba17a3a573095ad7948df152632
Signed-off-by: greatim <jaewon81.lim@samsung.com>
public static final String DEFAULT_IMAGE_NAME = "noImage.jpg"; //$NON-NLS-1$
public final static String PROBE_LIB_TIZEN = "da_probe_tizen.so"; //$NON-NLS-1$
public final static String PROBE_LIB_OSP = "da_probe_osp.so"; //$NON-NLS-1$
+
+ public static final String TIZEN_APP_PATH = "/opt/apps"; //$NON-NLS-1$
+ public static final String TIZEN_USR_APP_PATH = "/opt/usr/apps"; //$NON-NLS-1$
/* Save Data table */
public static final String LEAK_DATA_TABLE_NAME = "LeakData"; //$NON-NLS-1$
public final static String LAUNCH_APP = "launch_app";//$NON-NLS-1$
public final static String APPCONTROL = "_AppControl";//$NON-NLS-1$
- public final static String RUNNING_PROCESS = "[Running process]";//$NON-NLS-1$
- public final static String WITHOUT_EXECUTABLE = "[Without executable]";//$NON-NLS-1$
- public final static String COMMON_EXECUTABLE = "[Common executable]";//$NON-NLS-1$
+ public final static String RUNNING_PROCESS = "_Running process_";//$NON-NLS-1$
+ public final static String RUNNING_PROCESS_LABEL = "[Running process]";//$NON-NLS-1$
+ public final static String WITHOUT_EXECUTABLE = "_Without executable_";//$NON-NLS-1$
+ public final static String WITHOUT_EXECUTABLE_LABEL = "[Without executable]";//$NON-NLS-1$
+ public final static String COMMON_EXECUTABLE = "_Common executable_";//$NON-NLS-1$
+ public final static String COMMON_EXECUTABLE_LABEL = "[Common executable]";//$NON-NLS-1$
public final static int SASH_WIDTH = 4;
}
import org.eclipse.swt.widgets.Shell;
import org.tizen.dynamicanalyzer.communicator.DACommunicator;
import org.tizen.dynamicanalyzer.model.DeviceInfo;
-import org.tizen.dynamicanalyzer.project.AppInfo;
import org.tizen.dynamicanalyzer.project.PackageInfo;
import org.tizen.dynamicanalyzer.resources.ImageResources;
import org.tizen.dynamicanalyzer.ui.toolbar.ToolbarArea;
Logger.debug("invalid application name :" + appid);
return;
}
- final String appLabel = pkgInfo.getMainApp().getInfo(AppInfo.PROPERTY.LABEL.index);
+ final String appLabel = pkgInfo.getMainApp().getLabel();
Logger.debug("IDE recv - deviceName: " + deviceName + " appName : " + appLabel);
ToolbarArea.getInstance().setDeviceComboText(deviceName);
import org.tizen.dynamicanalyzer.common.path.PathConstants;
import org.tizen.dynamicanalyzer.common.path.PathManager;
import org.tizen.dynamicanalyzer.constant.CommonConstants;
+import org.tizen.dynamicanalyzer.control.ApplistManager;
import org.tizen.dynamicanalyzer.model.DeviceInfo;
import org.tizen.dynamicanalyzer.project.AppInfo;
import org.tizen.dynamicanalyzer.project.PackageInfo;
return devNameList;
}
- public static Map<String, PackageInfo> getAppListFromTarget() {
+ public static Map<String, PackageInfo> updateAppListFromTarget() {
DeviceInfo curDev = GlobalInformation.getCurrentDeviceInfo();
if (curDev == null) {
return null;
}
- cmdResultMultiLines.clear();
+ final List<String> unittestLines = new ArrayList<String>();
+ final List<String> imeLines = new ArrayList<String>();
+ final List<String> pkginfoLines = new ArrayList<String>();
+
CommunicatorUtils.execHostCommand(AnalyzerShellCommands.DACOMMAND_FIND_UNITTEST,
new MultiLineReceiver() {
@Override
public void processNewLines(String[] appLines) {
for (int i = 0; i < appLines.length; i++) {
- filterMultiLines.add(appLines[i]);
+ unittestLines.add(appLines[i]);
}
}
});
- curDev.parseUnittestList(cmdResultMultiLines);
-
- cmdResultMultiLines.clear();
CommunicatorUtils.execShellCommand(AnalyzerShellCommands.DACOMMAND_FIND_IME,
new MultiLineReceiver() {
@Override
public void processNewLines(String[] appLines) {
for (int i = 0; i < appLines.length; i++) {
- filterMultiLines.add(appLines[i]);
+ imeLines.add(appLines[i]);
}
}
});
- curDev.parseImeList(cmdResultMultiLines);
-
- cmdResultMultiLines.clear();
CommunicatorUtils.execShellCommand(AnalyzerShellCommands.CMD_APPLICATION_LIST,
new MultiLineReceiver() {
@Override
public void processNewLines(String[] appLines) {
for (int i = 0; i < appLines.length; i++) {
- cmdResultMultiLines.add(appLines[i]);
+ pkginfoLines.add(appLines[i]);
}
}
});
- cmdResultMultiLines.add("");
+ pkginfoLines.add("");
// add lines for running process
- cmdResultMultiLines.add(AppInfo.PROPERTY.APPID.name + ":"
- + AnalyzerConstants.RUNNING_PROCESS);
- cmdResultMultiLines.add(AppInfo.PROPERTY.PACKAGE.name + ":"
- + AnalyzerConstants.RUNNING_PROCESS);
- cmdResultMultiLines.add(AppInfo.PROPERTY.LABEL.name + ":"
- + AnalyzerConstants.RUNNING_PROCESS);
- cmdResultMultiLines.add(AppInfo.PROPERTY.APPTYPE.name + ":" + AppInfo.APPTYPE_RUNNING);
- cmdResultMultiLines.add("");
+ pkginfoLines.add(PackageInfo.PKGTYPE + "[unknown]" + PackageInfo.PKGID + "["
+ + AnalyzerConstants.RUNNING_PROCESS + "]");
+ pkginfoLines.add(AppInfo.PROPERTY.APPID.name + ":" + AnalyzerConstants.RUNNING_PROCESS);
+ pkginfoLines.add(AppInfo.PROPERTY.PACKAGE.name + ":" + AnalyzerConstants.RUNNING_PROCESS);
+ pkginfoLines.add(AppInfo.PROPERTY.LABEL.name + ":"
+ + AnalyzerConstants.RUNNING_PROCESS_LABEL);
+ pkginfoLines.add(AppInfo.PROPERTY.APPTYPE.name + ":" + AppInfo.APPTYPE_RUNNING);
+ pkginfoLines.add("");
// add lines for without-executable
- cmdResultMultiLines.add(AppInfo.PROPERTY.APPID.name + ":"
- + AnalyzerConstants.COMMON_EXECUTABLE);
- cmdResultMultiLines.add(AppInfo.PROPERTY.PACKAGE.name + ":"
- + AnalyzerConstants.COMMON_EXECUTABLE);
- cmdResultMultiLines.add(AppInfo.PROPERTY.LABEL.name + ":"
- + AnalyzerConstants.COMMON_EXECUTABLE);
- cmdResultMultiLines.add(AppInfo.PROPERTY.APPTYPE.name + ":" + AppInfo.APPTYPE_EXEC);
- cmdResultMultiLines.add("");
+ pkginfoLines.add(PackageInfo.PKGTYPE + "[unknown]" + PackageInfo.PKGID + "["
+ + AnalyzerConstants.COMMON_EXECUTABLE + "]");
+ pkginfoLines.add(AppInfo.PROPERTY.APPID.name + ":" + AnalyzerConstants.COMMON_EXECUTABLE);
+ pkginfoLines.add(AppInfo.PROPERTY.PACKAGE.name + ":" + AnalyzerConstants.COMMON_EXECUTABLE);
+ pkginfoLines.add(AppInfo.PROPERTY.LABEL.name + ":"
+ + AnalyzerConstants.COMMON_EXECUTABLE_LABEL);
+ pkginfoLines.add(AppInfo.PROPERTY.APPTYPE.name + ":" + AppInfo.APPTYPE_EXEC);
+ pkginfoLines.add("");
// add lines for without-executable
- cmdResultMultiLines.add(AppInfo.PROPERTY.APPID.name + ":"
- + AnalyzerConstants.WITHOUT_EXECUTABLE);
- cmdResultMultiLines.add(AppInfo.PROPERTY.PACKAGE.name + ":"
- + AnalyzerConstants.WITHOUT_EXECUTABLE);
- cmdResultMultiLines.add(AppInfo.PROPERTY.LABEL.name + ":"
- + AnalyzerConstants.WITHOUT_EXECUTABLE);
- cmdResultMultiLines.add(AppInfo.PROPERTY.APPTYPE.name + ":" + AppInfo.APPTYPE_NONE);
- cmdResultMultiLines.add("");
-
- curDev.parseAppList(cmdResultMultiLines);
+ pkginfoLines.add(PackageInfo.PKGTYPE + "[unknown]" + PackageInfo.PKGID + "["
+ + AnalyzerConstants.WITHOUT_EXECUTABLE + "]");
+ pkginfoLines.add(AppInfo.PROPERTY.APPID.name + ":" + AnalyzerConstants.WITHOUT_EXECUTABLE);
+ pkginfoLines
+ .add(AppInfo.PROPERTY.PACKAGE.name + ":" + AnalyzerConstants.WITHOUT_EXECUTABLE);
+ pkginfoLines.add(AppInfo.PROPERTY.LABEL.name + ":"
+ + AnalyzerConstants.WITHOUT_EXECUTABLE_LABEL);
+ pkginfoLines.add(AppInfo.PROPERTY.APPTYPE.name + ":" + AppInfo.APPTYPE_NONE);
+ pkginfoLines.add("");
+
+ curDev.updatePackageList(ApplistManager.parseTizenPkginfo(pkginfoLines, unittestLines,
+ imeLines, curDev.getIDevice().getAppInstallPath()));
return curDev.getPackageInfoHash();
}
return processMap;
}
-
+
public static String getProcessNameFromTarget(int pid) {
if (null == GlobalInformation.getCurrentDeviceInfo()) {
return null;
}
String processName = null;
cmdResultMultiLines.clear();
- String command = String.format( AnalyzerShellCommands.CMD_PROCESS_NAME, pid );
+ String command = String.format(AnalyzerShellCommands.CMD_PROCESS_NAME, pid);
// get process name from target
- CommunicatorUtils.execShellCommand(command,
- new MultiLineReceiver() {
- @Override
- public void processNewLines(String[] appLines) {
- for (int i = 0; i < appLines.length; i++) {
- cmdResultMultiLines.add(appLines[i]);
- }
- }
- });
+ CommunicatorUtils.execShellCommand(command, new MultiLineReceiver() {
+ @Override
+ public void processNewLines(String[] appLines) {
+ for (int i = 0; i < appLines.length; i++) {
+ cmdResultMultiLines.add(appLines[i]);
+ }
+ }
+ });
processName = cmdResultMultiLines.get(1);
return processName;
}
for (Map.Entry<String, PackageInfo> entry : pkgHash.entrySet()) {
AppInfo app = entry.getValue().getMainApp();
- String label = app.getInfo(AppInfo.PROPERTY.LABEL.index);
+ String label = app.getLabel();
if (appLabel.equals(label)) {
return entry.getValue();
}
return;
}
- DACommunicator.getAppListFromTarget();
+ DACommunicator.updateAppListFromTarget();
PackageInfo pkgInfo = null;
if (projectType.equals(PROJECT_TYPE_OSP) || projectType.equals(PROJECT_TYPE_EFL)
|| projectType.equals(PROJECT_TYPE_WEBAPP)) {
}
if (pkgInfo != null) {
- final String appLabel = pkgInfo.getMainApp().getInfo(AppInfo.PROPERTY.LABEL.index);
+ final String appLabel = pkgInfo.getMainApp().getLabel();
Logger.debug("IDE recv - deviceName: " + deviceName + " appName : " + appLabel);
Display.getDefault().syncExec(new Runnable() {
--- /dev/null
+package org.tizen.dynamicanalyzer.control;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.tizen.dynamicanalyzer.constant.CommonConstants;
+import org.tizen.dynamicanalyzer.project.AppInfo;
+import org.tizen.dynamicanalyzer.project.PackageInfo;
+
+public class ApplistManager {
+ public static Map<String, PackageInfo> parseTizenPkginfo(List<String> pkginfo,
+ List<String> unittest, List<String> ime, String appInstallPath) {
+ Map<String, PackageInfo> pkgInfoHash = new HashMap<String, PackageInfo>();
+
+ List<String> unittestList = parseTizenUnittest(appInstallPath, unittest);
+ List<String> imeList = parseTizenIme(ime);
+
+ PackageInfo pkg = null;
+ AppInfo app = null;
+
+ int size = pkginfo.size();
+ for (int i = 0; i < size; i++) {
+ String line = pkginfo.get(i);
+ if (line.startsWith(PackageInfo.PKGTYPE)) {
+ // make new package information
+ pkg = makePackage(line);
+ if (pkg != null) {
+ pkgInfoHash.put(pkg.getPackageId(), pkg);
+ }
+ app = null;
+ } else if (line.startsWith(AppInfo.PROPERTY.APPID.name)) {
+ if (pkg != null) {
+ // make new application information
+ app = makeApplication(line);
+ if (app != null) {
+ if (!isInList(unittestList, pkg.getPackageId())
+ && !isInList(imeList, app.getAppId())) {
+ pkg.addAppInfo(app);
+ } else {
+ app = null;
+ }
+ }
+ } else {
+ app = null;
+ }
+ } else if (!line.isEmpty()) {
+ if (app != null) {
+ constructAppProperty(app, line);
+ }
+ }
+ }
+
+ return pkgInfoHash;
+ }
+
+ private static List<String> parseTizenUnittest(String appInstallPath, List<String> lines) {
+ if (lines.isEmpty()) {
+ return null;
+ }
+
+ List<String> unittestList = new ArrayList<String>();
+ for (String line : lines) {
+ if (line.contains(appInstallPath)) {
+ line = line.replaceFirst(appInstallPath + CommonConstants.SLASH,
+ CommonConstants.EMPTY);
+ int index = line.indexOf(CommonConstants.SLASH);
+ line = line.substring(0, index);
+ unittestList.add(line);
+ }
+ }
+
+ return unittestList;
+ }
+
+ private static List<String> parseTizenIme(List<String> lines) {
+ if (lines.isEmpty()) {
+ return null;
+ }
+
+ List<String> imeList = new ArrayList<String>();
+ for (String line : lines) {
+ String appId = "appid";//$NON-NLS-1$
+ if (line.contains("apptype") && line.contains("c++app")) {
+ line = line.trim();
+ int index = line.indexOf(appId);
+ // 2 means length of String " ["
+ line = line.substring(index + appId.length() + 2, line.length() - 1);
+ imeList.add(line);
+ }
+ }
+
+ return imeList;
+ }
+
+ private static PackageInfo makePackage(String line) {
+ PackageInfo pkgInfo = new PackageInfo();
+
+ String[] splited = line.split("[\\[\\]]");
+ int size = splited.length;
+ for (int i = 0; i < size - 1; i += 2) {
+ String key = splited[i].trim();
+ String value = splited[i + 1].trim();
+ if (key.equals(PackageInfo.PKGTYPE)) {
+ pkgInfo.setPkgType(value);
+ } else if (key.equals(PackageInfo.PKGID)) {
+ pkgInfo.setPackageId(value);
+ } else if (key.equals(PackageInfo.VERSION)) {
+ pkgInfo.setVersion(value);
+ } else if (key.equals(PackageInfo.INSTALLTIME)) {
+ pkgInfo.setInstallTime(Long.parseLong(value));
+ }
+ }
+
+ if (pkgInfo.getPackageId() != null) {
+ return pkgInfo;
+ } else {
+ return null;
+ }
+ }
+
+ private static AppInfo makeApplication(String line) {
+ if (!line.startsWith(AppInfo.PROPERTY.APPID.name)) {
+ return null;
+ }
+
+ AppInfo appInfo = new AppInfo();
+ if (constructAppProperty(appInfo, line)) {
+ return appInfo;
+ } else {
+ return null;
+ }
+ }
+
+ private static boolean constructAppProperty(AppInfo app, String line) {
+ int index = line.indexOf(':');
+ if (index > 0) {
+ String key = line.substring(0, index).trim();
+ String value = line.substring(index + 1, line.length()).trim();
+
+ AppInfo.PROPERTY p = AppInfo.PROPERTY.get(key);
+ if (p != null) {
+ app.setInfo(p.index, value);
+ }
+
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ private static boolean isInList(List<String> list, String item) {
+ if (null != list && !list.isEmpty()) {
+ for (String id : list) {
+ if (id.equals(item)) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+}
package org.tizen.dynamicanalyzer.model;
import java.net.Socket;
-import java.util.ArrayList;
import java.util.HashMap;
-import java.util.List;
+import java.util.Iterator;
import java.util.Map;
import org.tizen.dynamicanalyzer.common.AnalyzerConstants;
import org.tizen.dynamicanalyzer.communicator.Communicator22;
import org.tizen.dynamicanalyzer.communicator.CommunicatorUtils;
import org.tizen.dynamicanalyzer.constant.CommonConstants;
-import org.tizen.dynamicanalyzer.project.AppInfo;
import org.tizen.dynamicanalyzer.project.DeviceStatusInfo;
import org.tizen.dynamicanalyzer.project.PackageInfo;
import org.tizen.dynamicanalyzer.swap.communicator.Communicator30;
private boolean configSuccess = false;
private Map<String, PackageInfo> pkgInfoHash = new HashMap<String, PackageInfo>();
- private List<String> pkgInfoString = new ArrayList<String>();
-
- private List<String> unittestList = new ArrayList<String>();
- private List<String> imeList = new ArrayList<String>();
private DeviceStatusInfo statusInfo = null;
configSuccess = success;
}
- public void parseUnittestList(List<String> lines) {
- unittestList.clear();
- if (lines.isEmpty()) {
- return;
- }
-
- String appInstallPath = getIDevice().getAppInstallPath();
-
- for (String line : lines) {
- if (line.contains(appInstallPath)) {
- line = line.replaceFirst(appInstallPath + CommonConstants.SLASH,
- CommonConstants.EMPTY);
- int index = line.indexOf(CommonConstants.SLASH);
- line = line.substring(0, index);
- unittestList.add(line);
- }
- }
- }
-
- public void parseImeList(List<String> lines) {
- imeList.clear();
- if (lines.isEmpty()) {
- return;
- }
-
- for (String line : lines) {
- String appId = "appid";//$NON-NLS-1$
- if (line.contains("apptype") && line.contains("c++app")) {
- line = line.trim();
- int index = line.indexOf(appId);
- // 2 means length of String " ["
- line = line.substring(index + appId.length() + 2, line.length() - 1);
- imeList.add(line);
- }
- }
- }
-
- public void parseAppList(List<String> lines) {
- if (changedAppList(lines)) {
- pkgInfoString.clear();
- pkgInfoString.addAll(lines);
-
- // parsing app list lines
- pkgInfoHash.clear();
-
- int size = lines.size();
-
- for (int i = 0; i < size; i++) {
- if (lines.get(i).startsWith("Appid")) {
- List<String> applines = new ArrayList<String>();
-
- int k;
- for (k = 0; k + i < size; k++) {
- String inputLine = lines.get(k + i);
- if (inputLine.isEmpty()) {
- continue;
- } else if (k != 0 && inputLine.startsWith("Appid")) {
- break;
- }
- applines.add(inputLine);
- }
- i += k - 1;
-
- AppInfo appInfo = makeAppInfo(applines);
-
- String appID = appInfo.getAppId();
- String pkgID = appInfo.getPackageId();
-
- if (!isUnittest(pkgID) && !isIME(appID)) {
- PackageInfo pkgInfo = pkgInfoHash.get(pkgID);
- if (null == pkgInfo) {
- pkgInfo = new PackageInfo(pkgID);
- pkgInfoHash.put(pkgID, pkgInfo);
- }
- pkgInfo.addAppInfo(appInfo);
- }
- }
- }
- }
- }
-
- private AppInfo makeAppInfo(List<String> lines) {
- AppInfo appInfo = new AppInfo();
- for (int i = 0; i < lines.size(); i++) {
- String line = lines.get(i);
- int index = line.indexOf(':');
- if (index > 0) {
- String key = line.substring(0, index).trim();
- String data = line.substring(index + 1, line.length()).trim();
-
- AppInfo.PROPERTY p = AppInfo.PROPERTY.get(key);
- if (p != null) {
- appInfo.setInfo(p.index, data);
- }
- }
- }
-
- return appInfo;
- }
-
- private boolean changedAppList(List<String> strings) {
- if (pkgInfoString != null) {
- if (pkgInfoString.size() == strings.size()) {
- int i;
- int ssize = pkgInfoString.size();
- for (i = 0; i < ssize; i++) {
- if (pkgInfoString.get(i) == null) {
- if (strings.get(i) != null) {
- break;
- }
- } else if (strings.get(i) == null) {
- break;
- } else if (!pkgInfoString.get(i).equals(strings.get(i))) {
- break;
+ public void updatePackageList(Map<String, PackageInfo> newPackages) {
+ // remove package of old map which does not exist of new map
+ // also update package info if install time of package is changed
+ synchronized (pkgInfoHash) {
+ Iterator<Map.Entry<String, PackageInfo>> iter = pkgInfoHash.entrySet().iterator();
+ while (iter.hasNext()) {
+ Map.Entry<String, PackageInfo> entry = iter.next();
+ String pkgid = entry.getKey();
+ PackageInfo oldpkg = entry.getValue();
+ PackageInfo newpkg = newPackages.get(pkgid);
+
+ if (newpkg == null) {
+ // remove package
+ iter.remove();
+ } else {
+ if (oldpkg.getInstallTime() != newpkg.getInstallTime()) {
+ // update package
+ entry.setValue(newpkg);
}
}
-
- if (i == ssize)
- return false;
}
}
- return true;
- }
-
- private boolean isUnittest(String pkgId) {
- if (null != unittestList && !unittestList.isEmpty()) {
- for (String id : unittestList) {
- if (id.equals(pkgId)) {
- return true;
- }
- }
- }
- return false;
- }
+ // add package of new map which does not exist of old map
+ for (Map.Entry<String, PackageInfo> entry : newPackages.entrySet()) {
+ String pkgid = entry.getKey();
+ PackageInfo newpkg = entry.getValue();
+ PackageInfo oldpkg = pkgInfoHash.get(pkgid);
- private boolean isIME(String appId) {
- if (null != imeList && !imeList.isEmpty()) {
- for (String id : imeList) {
- if (id.equals(appId)) {
- return true;
+ if (oldpkg == null) {
+ // add package to pkgInfoHash
+ synchronized (pkgInfoHash) {
+ pkgInfoHash.put(pkgid, newpkg);
}
}
}
- return false;
}
-
}
import java.util.List;
import java.util.Map;
+import org.tizen.dynamicanalyzer.common.AnalyzerConstants;
import org.tizen.dynamicanalyzer.common.AnalyzerShellCommands;
import org.tizen.dynamicanalyzer.common.ElfSymbolExtractor;
import org.tizen.dynamicanalyzer.common.path.PathManager;
SCRREADER(11, "screenreader"),
SUPPORT(12, "support-disable"),
USERDATA(13, "user_data"),
- INSTALL(14, "InstallTime"),
- DEBUGPATH(15, "DebugFilePath"),
- SRCPATH(16, "SourcePath");
+ DEBUGPATH(14, "DebugFilePath"),
+ SRCPATH(15, "SourcePath");
public final int index;
public final String name;
public AppInfo() {
}
- public String getInstallTime() {
- return properties.get(PROPERTY.INSTALL.index);
- }
-
- public void setInstallTime(String installTime) {
- properties.set(PROPERTY.INSTALL.index, installTime);
- }
-
public String getDebugFilePath() {
return properties.get(PROPERTY.DEBUGPATH.index);
}
public String getPackageId() {
return properties.get(PROPERTY.PACKAGE.index);
}
+
+ public String getLabel() {
+ return properties.get(PROPERTY.LABEL.index);
+ }
public String getExecPath() {
return properties.get(PROPERTY.EXEC.index);
// get
// path
if (getAppType().contains(APPTYPE_CPP)) {
- exec = exec.replaceFirst("/opt/apps", "/opt/usr/apps");
+ exec = exec.replaceFirst(AnalyzerConstants.TIZEN_APP_PATH,
+ AnalyzerConstants.TIZEN_USR_APP_PATH);
exec += CommonConstants.EXTENSION_EXEC_FILE;
} else if (getAppType().contains(APPTYPE_CAPP)) {
- exec = exec.replaceFirst("/opt/apps", "/opt/usr/apps");
+ exec = exec.replaceFirst(AnalyzerConstants.TIZEN_APP_PATH,
+ AnalyzerConstants.TIZEN_USR_APP_PATH);
}
execPath = exec;
} else {
import java.util.List;
public class PackageInfo {
+ public static final String PKGTYPE = "pkg_type";
+ public static final String PKGID = "pkgid";
+ public static final String VERSION = "version";
+ public static final String INSTALLTIME = "installed_time";
private String id = null;
- private List<AppInfo> appInfos = null;
+ private String pkgType = null;
+ private String version = null;
+ private long installTime = 0;
+
+ private List<AppInfo> appInfos = new ArrayList<AppInfo>();
+
+ public PackageInfo() {
+ }
public PackageInfo(String pkgId) {
id = pkgId;
- appInfos = new ArrayList<AppInfo>();
}
public void addAppInfo(AppInfo appInfo) {
return id;
}
+ public void setPackageId(String pkgid) {
+ this.id = pkgid;
+ }
+
public List<AppInfo> getAppInfos() {
return appInfos;
}
-
+
// TODO: ensure main app is the first app in package
public AppInfo getMainApp() {
return appInfos.get(0);
}
+
+ public String getPkgType() {
+ return pkgType;
+ }
+
+ public void setPkgType(String pkgType) {
+ this.pkgType = pkgType;
+ }
+
+ public String getVersion() {
+ return version;
+ }
+
+ public void setVersion(String version) {
+ this.version = version;
+ }
+
+ public long getInstallTime() {
+ return installTime;
+ }
+
+ public void setInstallTime(long installTime) {
+ this.installTime = installTime;
+ }
}
addConfigHistory(currentConfig);
}
- setAppName(GlobalInformation.getCurrentApplication().getMainApp()
- .getInfo(AppInfo.PROPERTY.LABEL.index));
+ setAppName(GlobalInformation.getCurrentApplication().getMainApp().getLabel());
setPackageID(GlobalInformation.getCurrentApplication().getPackageId());
DeviceInfo deviceName = GlobalInformation.getCurrentDeviceInfo();
if (null != deviceName && null != deviceName.getIDevice().getSerialNumber()
if (AnalyzerConstants.RUNNING_PROCESS.equals(selectedPkg.getPackageId())) {
Map<Integer, String> selProcess = selectedPkg.getMainApp().getRunningProcesses();
+ if (selProcess == null) {
+ return HostResult.ERR_BIN_INFO_GET_FAIL;
+ }
+
int binCount = selProcess.size();
preMsg = ByteUtil.getByte(binCount);
PackageInfo selectedPkg = DACommunicator.getPkgInfoByLabel(appName);
if (null != selectedPkg) {
- if (appName.equals(AnalyzerConstants.RUNNING_PROCESS)) {
+ if (appName.equals(AnalyzerConstants.RUNNING_PROCESS_LABEL)) {
Shell shell = WorkbenchUtil.getWorkbenchWindow().getShell();
ProcessExplorerDialog pdialog = new ProcessExplorerDialog(shell);
pdialog.setProcessList(selectedPkg.getMainApp().getRunningProcesses());
if (selectedPkg.getMainApp().getRunningProcesses() == null) {
enablestart = false;
}
- } else if (appName.equals(AnalyzerConstants.COMMON_EXECUTABLE)) {
+ } else if (appName.equals(AnalyzerConstants.COMMON_EXECUTABLE_LABEL)) {
// TODO : implement to select common executable
}
if (null != packageID && DACommunicator.getPkgInfoByPkgId(packageID) != null) {
pkgInfo = DACommunicator.getPkgInfoByPkgId(packageID);
- appCombo.setText(pkgInfo.getMainApp().getInfo(AppInfo.PROPERTY.LABEL.index));
+ appCombo.setText(pkgInfo.getMainApp().getLabel());
} else {
pkgInfo = DACommunicator.getPkgInfoByLabel(pkgs.get(0));
appCombo.select(0);
}
}
- private void addToAppCombo(List<String> labels) {
+ private void addToAppCombo(List<PackageInfo> pkglist) {
appCombo.initCombo();
- if (labels != null && labels.size() > 0) {
- int itemsSize = labels.size();
+ if (pkglist != null && pkglist.size() > 0) {
+ int itemsSize = pkglist.size();
for (int i = 0; i < itemsSize; i++) {
- appCombo.add(labels.get(i));
+ appCombo.add(pkglist.get(i).getMainApp().getLabel());
}
} else {
appCombo.add(CommonConstants.EMPTY);
}
private void addToAppComboFromTarget() {
- Map<String, PackageInfo> pkgInfos = DACommunicator.getAppListFromTarget();
+ Map<String, PackageInfo> pkgInfos = DACommunicator.updateAppListFromTarget();
- List<String> labelList = new ArrayList<String>();
+ List<PackageInfo> pkgList = new ArrayList<PackageInfo>();
if (pkgInfos != null) {
// TODO : reconstruct real app list for app combo
// relation between package and app?
for (Map.Entry<String, PackageInfo> entry : pkgInfos.entrySet()) {
- AppInfo mainapp = entry.getValue().getMainApp();
+ PackageInfo pkg = entry.getValue();
+ AppInfo mainapp = pkg.getMainApp();
if (!mainapp.getAppId().contains(AnalyzerConstants.APPCONTROL)) {
- String label = mainapp.getInfo(AppInfo.PROPERTY.LABEL.index);
+ String label = mainapp.getLabel();
if (label.isEmpty()) {
label = mainapp.getExecFileName();
mainapp.setInfo(AppInfo.PROPERTY.LABEL.index, label);
}
- labelList.add(label);
+ pkgList.add(pkg);
}
}
}
// sort label list by alphabet
- Collections.sort(labelList, new Comparator<String>() {
+ Collections.sort(pkgList, new Comparator<PackageInfo>() {
@Override
- public int compare(String o1, String o2) {
- int len1 = o1.length();
- int len2 = o2.length();
+ public int compare(PackageInfo pkg1, PackageInfo pkg2) {
+ AppInfo app1 = pkg1.getMainApp();
+ AppInfo app2 = pkg2.getMainApp();
+ String o1 = app1.getLabel();
+ String o2 = app2.getLabel();
if (o1.startsWith("[") && !o2.startsWith("[")) {
return 1;
} else if (!o1.startsWith("[") && o2.startsWith("[")) {
return -1;
} else {
- int len = len1 > len2 ? len2 : len1;
- for (int i = 0; i < len; i++) {
- if (o1.charAt(i) > o2.charAt(i)) {
- return 1;
- } else if (o1.charAt(i) < o2.charAt(i)) {
+ String exe1 = app1.getExecPath();
+ String exe2 = app2.getExecPath();
+ if (exe1.startsWith(AnalyzerConstants.TIZEN_APP_PATH)
+ || exe1.startsWith(AnalyzerConstants.TIZEN_USR_APP_PATH)) {
+ if (exe2.startsWith(AnalyzerConstants.TIZEN_APP_PATH)
+ || exe2.startsWith(AnalyzerConstants.TIZEN_USR_APP_PATH)) {
+ // both packages are user packages
+ // compare install time
+ long time1 = pkg1.getInstallTime();
+ long time2 = pkg2.getInstallTime();
+ if (time1 < time2) {
+ return 1;
+ } else {
+ return -1;
+ }
+ } else {
+ // pkg1 is user package but pkg2 is not user package
return -1;
}
- }
+ } else {
+ if (exe2.startsWith(AnalyzerConstants.TIZEN_APP_PATH)
+ || exe2.startsWith(AnalyzerConstants.TIZEN_USR_APP_PATH)) {
+ // pkg1 is not user package but pkg2 is user package
+ return 1;
+ } else {
+ // both packages are not user packages
+ // compare label
+ int len1 = o1.length();
+ int len2 = o2.length();
+
+ int len = len1 > len2 ? len2 : len1;
+ for (int i = 0; i < len; i++) {
+ if (o1.charAt(i) > o2.charAt(i)) {
+ return 1;
+ } else if (o1.charAt(i) < o2.charAt(i)) {
+ return -1;
+ }
+ }
- if (len1 > len2) {
- return 1;
- } else if (len1 < len2) {
- return -1;
+ if (len1 > len2) {
+ return 1;
+ } else if (len1 < len2) {
+ return -1;
+ }
+ }
}
}
}
});
- addToAppCombo(labelList);
+ addToAppCombo(pkgList);
}
public void setAppComboText(final String text) {
GlobalInformation.setCurrentApplication(pkgInfo);
GlobalInformation.getCurrentDeviceInfo().getCommunicator().onAppSelected(pkgInfo);
GlobalInformation.getCurrentDeviceInfo().setSelectedPackageID(pkgInfo.getPackageId());
- appCombo.setText(pkgInfo.getMainApp().getInfo(AppInfo.PROPERTY.LABEL.index));
+ appCombo.setText(pkgInfo.getMainApp().getLabel());
}
}
setStartButtonState(false);
return;
}
-
+
DeviceInfo curDev = GlobalInformation.getCurrentDeviceInfo();
if (curDev == null) {
setStartButtonState(false);
setStartButtonState(false);
return;
}
-
+
setStartButtonState(true);
// startButton.setButtonEnabled(true);
}