// Signature format: 2.0
package android.app.role {

  public class RoleFrameworkInitializer {
    method public static void registerServiceWrappers();
  }

  public final class RoleManager {
    method @Nullable public String getBrowserRoleHolder(int);
    method @Nullable public String getSmsRoleHolder(int);
    method @Nullable @RequiresPermission(android.Manifest.permission.SET_PREFERRED_APPLICATIONS) public boolean setBrowserRoleHolder(@Nullable String, int);
  }

}

package android.safetycenter {

  public final class SafetyCenterFrameworkInitializer {
    method public static void registerServiceWrappers();
  }

}

