/* | |
* Copyright (C) 2012 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.motorolamobility.studio.android.db.devices.utils; | |
import java.io.IOException; | |
import java.util.Collection; | |
import java.util.LinkedHashMap; | |
import java.util.Map; | |
import org.eclipse.core.runtime.IPath; | |
import org.eclipse.core.runtime.NullProgressMonitor; | |
import org.eclipse.core.runtime.Path; | |
import com.motorola.studio.android.adt.DDMSFacade; | |
import com.motorola.studio.android.adt.DDMSUtils; | |
public class DeviceDbUtils | |
{ | |
/** | |
* | |
*/ | |
private static final String DB_EXTENSION = "db"; //$NON-NLS-1$ | |
private static final String APPNAME_KEY = "#APP_NAME"; //$NON-NLS-1$ | |
private static final String remoteDbPathMask = "/data/data/" + APPNAME_KEY + "/databases/"; //$NON-NLS-1$ //$NON-NLS-2$ | |
/** | |
* Retrieves the databases path for a given application on the android file system | |
*/ | |
public static IPath getRemoteDbFolder(String appName) | |
{ | |
String remoteDbFolder = remoteDbPathMask.replace(APPNAME_KEY, appName); | |
return new Path(remoteDbFolder); | |
} | |
/** | |
* Retrieves the database file path for a given application's db file on the android file system. | |
* @param appName the application name | |
* @param dbFileName the db file name | |
* @return the full db file path on a android file system | |
*/ | |
public static IPath getRemoteDbPath(String appName, String dbFileName) | |
{ | |
IPath remoteDbFolder = getRemoteDbFolder(appName); | |
IPath remoteDbPath = remoteDbFolder.append(dbFileName); | |
String fileExtension = remoteDbPath.getFileExtension(); | |
if(fileExtension == null || !fileExtension.equals(DB_EXTENSION)) | |
{ | |
remoteDbPath = remoteDbPath.addFileExtension(DB_EXTENSION); | |
} | |
return remoteDbPath; | |
} | |
/** | |
* List the installed packages in the device with the serial number Each | |
* package entry carries their package location | |
* | |
* @param serialNumber | |
* @return an Object array that contains: | |
* Item 0: a map<String, String> with the app package as a key and the app path as value. | |
* Item 1: number of applications not included on map due to filterDbApplications being true | |
* @throws IOException | |
*/ | |
public static Object[] listInstalledPackages(String serialNumber, boolean filterDBbApplications) throws IOException | |
{ | |
Object[] returnArray = new Object[2]; | |
Map<String, String> allPackages = DDMSUtils.listInstalledPackages(serialNumber); | |
if(filterDBbApplications) | |
{ | |
Map<String, String> filteredPackages = new LinkedHashMap<String, String>(); | |
Collection<String> appDataDirs = | |
DDMSFacade.execRemoteApp(serialNumber, | |
"ls /data/data/", new NullProgressMonitor()); //$NON-NLS-1$ | |
for(String appPackage : appDataDirs) | |
{ | |
IPath remoteDbFolder = getRemoteDbFolder(appPackage); | |
Collection<String> databases = | |
DDMSFacade.execRemoteApp(serialNumber, | |
"ls " + remoteDbFolder.toString(), new NullProgressMonitor()); //$NON-NLS-1$ | |
for (String commandOutline : databases) | |
{ | |
String[] strings = commandOutline.split(" "); //$NON-NLS-1$ | |
for (String string : strings) | |
{ | |
if (string.trim().endsWith("." + DB_EXTENSION)) //$NON-NLS-1$ | |
{ | |
filteredPackages.put(appPackage, allPackages.get(appPackage)); | |
} | |
} | |
} | |
} | |
returnArray[0] = filteredPackages; | |
returnArray[1] = allPackages.size() - filteredPackages.size(); | |
} | |
else | |
{ | |
returnArray[0] = allPackages; | |
returnArray[1] = 0; | |
} | |
return returnArray; | |
} | |
} |