Dataset Guide
The following section details the data and an example of usage towards building privacy profiles is given at the end of this page. Please contact us if you find any discrepancy from the documentation to the actual data.
Please cite the following article if you use our dataset in your research: Mendes, R., Brandão, A., Vilela, J. P., and Beresford, A. R.. Effect of User Expectancy on Mobile App Privacy: A Field Study. In 2022 IEEE international conference on pervasive computing and communications (PerCom).
The Data
The data files are in JSON format and each file is an array of objects with keys and values as specified
below.
Please note that some of the data might not be present at times as it was not collected.
The indication of nullable
in the specification indicates a field that might be missing.
For instance, the contextData
is missing when the answerType
in permissionDialogData
is either CACHE_ANSWERED
or UNHANDLED
, as we only collect the context when there is
a permission prompt.
An example of a data file is given at the end of this section.
- userID: string. Unique user identifier, formatted as
<campaign_id>.<phone_id>
. - permissionDialogData: object. Contains the data pertaining to a permission dialog.
- permissionDialogDataId: long. Internal identifier of the permission dialog data.
-
requestingApplicationInfo: object. Contains data about the requesting application.
- packageName: string. The hashed package name of the app.
- flags: nullable integer. Application flags as given by ApplicationInfo flags.
- isSystemApp: nullable boolean. Whether the app is a system app or a third-party app.
- isForeground: nullable boolean. Whether the app is currently in foreground or background.
- category: string. The category of this app in the play store. This field was filled in a post-process through a python google play scrapper: google-play-scraper.
- checkedPermission: string. The name of the permission being requested as declared in the manifest. Default android permissions can be found here.
- checkedPermissionGroup: nullable string. The group of the
checkedPermission
if any. Default android permission groups can be found here - timestamp: long. The epoch time of this permission request.
- answerType: string. The value can be one of:
USER_ANSWERED
,CACHE_ANSWERED
,TIMEDOUT
,DISMISSED
,UNHANDLED
. Requests withUNHANDLED
correspond to requests that CM-NPM failed to handle due to potential communication errors. - grantResult: integer. Whether the permission was granted or denied by the user. The value is
either
PackageManager.PERMISSION_GRANTED
(0) if the permission is granted,PackageManager.PERMISSION_DENIED
(-1) if the permission is denied, or Integer.MIN_VALUE (-2147483648) if there was no answer. - selectedSemanticLoc: nullable string. The user semantic location given as input by the
participant. The value can be one of:
Home
,Work
,Home
,Travelling
andOther
. - wasRequestExpected: nullable integer. Participant input on whether the request was expected. Value is 2 if it was expected, 1 if it was unexpected or 0 if the participant was not sure.
- contextData: nullable object. Contains the data related to the participant and device context at
the time of the permission dialog.
This field does not exist when answerType in permissionDialogData is
CACHED_ANSWERED
orUNHANDLED
.- contextDataId: long. Internal identifier of the context data object.
- bootTime: long. The time in milliseconds of the last boot. Note: campaign 3 is missing this field.
- permissionDialogDataOwnerId: long. The id of the permissionDialogData object that this contextData pertains to.
- topRunningApplicationInfo: nullable object. The application that is currently being shown to the user as top application. Contains the same fields as requestingApplicationInfo.
- isTopAppRequestingApp: nullable bool. Whether the requesting app is the top foreground app -- app that is currently being used by the user.
- foregroundRunningApplicationInfoArray: nullable array of objects. An array of the applications that are visible to the user at the time of the permission dialog. Each application has the same fields as requestingApplicationInfo.
- backgroundRunningApplicationInfoArray: nullable array of objects. An array of the applications that are running in the background at the time of the permission dialog. Each application has the same fields as requestingApplicationInfo.
- networkStatus: string. The network status at the time of the permission dialog. The value is
one of:
DISCONNECTED
,NOT_METERED
orMETERED
. - screenIsInteractive: boolean. Whether the screen is interactive (
true
) or not (false
) as given by the PowerManager isInteractive(). - isKeyguardLocked: boolean. Whether the keyguard is locked (
true
) or unlocked (false
) as given by the KeyguardManager isKeyguardLocked(). - dockState: integer. The dock state at the time of the dialog. It is the integer value obtained from EXTRA_DOCK_STATE.
- callState: integer. The current call state as returned by the TelephonyManager getCallState().
- plugState: integer. The current plug (charging) state as returned from the field EXTRA_PLUGGED. Value is 0 if it is not plugged, 1 if it is plugged to an AC charger, 2 if it is plugged to an USB port and 3 if the power source is wireless.
- isInEvent: nullable boolean. Is 1 if the user is in an event at the current time according to his calendar and 0 otherwise. Field might be missing as some users have not synced their calendars.
Example File
Building Profiles
What follows in an example on using the dataset to build privacy profiles. The example is in the form of a jupyter notebook, so the code appears in gray and the outputs right below the code. This code can be found in https://github.com/rscmendes/cop-mode-profiles.