/**
* Funf: Open Sensing Framework
* Copyright (C) 2010-2011 Nadav Aharony, Wei Pan, Alex Pentland.
* Acknowledgments: Alan Gardner
* Contact: nadav@media.mit.edu
*
* This file is part of Funf.
*
* Funf is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation, either version 3 of
* the License, or (at your option) any later version.
*
* Funf is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with Funf. If not, see <http://www.gnu.org/licenses/>.
*/
package edu.mit.media.funf.probe.builtin;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.os.Bundle;
import edu.mit.media.funf.probe.SynchronousProbe;
import edu.mit.media.funf.probe.builtin.ProbeKeys.ApplicationsKeys;
public class ApplicationsProbe extends SynchronousProbe implements ApplicationsKeys {
@Override
public String[] getRequiredPermissions() {
return null;
}
@Override
protected String getDisplayName() {
return "Installed Applications Probe";
}
private static Set<String> getInstalledAppPackageNames(List<ApplicationInfo> installedApps) {
HashSet<String> installedAppPackageNames = new HashSet<String>();
for (ApplicationInfo info : installedApps) {
installedAppPackageNames.add(info.packageName);
}
return installedAppPackageNames;
}
private static ArrayList<ApplicationInfo> getUninstalledApps(List<ApplicationInfo> allApplications, List<ApplicationInfo> installedApps) {
Set<String> installedAppPackageNames = getInstalledAppPackageNames(installedApps);
ArrayList<ApplicationInfo> uninstalledApps = new ArrayList<ApplicationInfo>();
for (ApplicationInfo info : allApplications) {
if (!installedAppPackageNames.contains(info.packageName)) {
uninstalledApps.add(info);
}
}
return uninstalledApps;
}
@Override
protected Bundle getData() {
Bundle data = new Bundle();
PackageManager pm = this.getApplicationContext().getPackageManager();
List<ApplicationInfo> allApplications = pm.getInstalledApplications(PackageManager.GET_UNINSTALLED_PACKAGES);
ArrayList<ApplicationInfo> installedApplications = new ArrayList<ApplicationInfo>(pm.getInstalledApplications(0));
data.putParcelableArrayList(INSTALLED_APPLICATIONS, installedApplications);
data.putParcelableArrayList(UNINSTALLED_APPLICATIONS, getUninstalledApps(allApplications, installedApplications));
return data;
}
@Override
protected long getDefaultPeriod() {
return 36000L;
}
}