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 with UNHANDLED 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 and Other.
    • 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 or UNHANDLED.
    • 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 or METERED.
    • 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.