1ae0e03a9e03de34e37b768b971d7596d7220a053Svet Ganov/* 2ae0e03a9e03de34e37b768b971d7596d7220a053Svet Ganov * Copyright (C) 2016 The Android Open Source Project 3ae0e03a9e03de34e37b768b971d7596d7220a053Svet Ganov * 4ae0e03a9e03de34e37b768b971d7596d7220a053Svet Ganov * Licensed under the Apache License, Version 2.0 (the "License"); 5ae0e03a9e03de34e37b768b971d7596d7220a053Svet Ganov * you may not use this file except in compliance with the License. 6ae0e03a9e03de34e37b768b971d7596d7220a053Svet Ganov * You may obtain a copy of the License at 7ae0e03a9e03de34e37b768b971d7596d7220a053Svet Ganov * 8ae0e03a9e03de34e37b768b971d7596d7220a053Svet Ganov * http://www.apache.org/licenses/LICENSE-2.0 9ae0e03a9e03de34e37b768b971d7596d7220a053Svet Ganov * 10ae0e03a9e03de34e37b768b971d7596d7220a053Svet Ganov * Unless required by applicable law or agreed to in writing, software 11ae0e03a9e03de34e37b768b971d7596d7220a053Svet Ganov * distributed under the License is distributed on an "AS IS" BASIS, 12ae0e03a9e03de34e37b768b971d7596d7220a053Svet Ganov * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13ae0e03a9e03de34e37b768b971d7596d7220a053Svet Ganov * See the License for the specific language governing permissions and 14ae0e03a9e03de34e37b768b971d7596d7220a053Svet Ganov * limitations under the License. 15ae0e03a9e03de34e37b768b971d7596d7220a053Svet Ganov */ 16ae0e03a9e03de34e37b768b971d7596d7220a053Svet Ganov 17ae0e03a9e03de34e37b768b971d7596d7220a053Svet Ganovpackage android.content.pm.permission; 18ae0e03a9e03de34e37b768b971d7596d7220a053Svet Ganov 19ae0e03a9e03de34e37b768b971d7596d7220a053Svet Ganovimport android.annotation.NonNull; 20ae0e03a9e03de34e37b768b971d7596d7220a053Svet Ganovimport android.annotation.SystemApi; 21ae0e03a9e03de34e37b768b971d7596d7220a053Svet Ganovimport android.os.Parcel; 22ae0e03a9e03de34e37b768b971d7596d7220a053Svet Ganovimport android.os.Parcelable; 23ae0e03a9e03de34e37b768b971d7596d7220a053Svet Ganov 24ae0e03a9e03de34e37b768b971d7596d7220a053Svet Ganov/** 25ae0e03a9e03de34e37b768b971d7596d7220a053Svet Ganov * This class contains information about how a runtime permission 26ae0e03a9e03de34e37b768b971d7596d7220a053Svet Ganov * is to be presented in the UI. A single runtime permission 27ae0e03a9e03de34e37b768b971d7596d7220a053Svet Ganov * presented to the user may correspond to multiple platform defined 28ae0e03a9e03de34e37b768b971d7596d7220a053Svet Ganov * permissions, e.g. the location permission may control both the 29ae0e03a9e03de34e37b768b971d7596d7220a053Svet Ganov * coarse and fine platform permissions. 30ae0e03a9e03de34e37b768b971d7596d7220a053Svet Ganov * 31ae0e03a9e03de34e37b768b971d7596d7220a053Svet Ganov * @hide 32ae0e03a9e03de34e37b768b971d7596d7220a053Svet Ganov */ 33ae0e03a9e03de34e37b768b971d7596d7220a053Svet Ganov@SystemApi 34ae0e03a9e03de34e37b768b971d7596d7220a053Svet Ganovpublic final class RuntimePermissionPresentationInfo implements Parcelable { 35ae0e03a9e03de34e37b768b971d7596d7220a053Svet Ganov private static final int FLAG_GRANTED = 1 << 0; 36ae0e03a9e03de34e37b768b971d7596d7220a053Svet Ganov private static final int FLAG_STANDARD = 1 << 1; 37ae0e03a9e03de34e37b768b971d7596d7220a053Svet Ganov 38ae0e03a9e03de34e37b768b971d7596d7220a053Svet Ganov private final CharSequence mLabel; 39ae0e03a9e03de34e37b768b971d7596d7220a053Svet Ganov private final int mFlags; 40ae0e03a9e03de34e37b768b971d7596d7220a053Svet Ganov 41ae0e03a9e03de34e37b768b971d7596d7220a053Svet Ganov /** 42ae0e03a9e03de34e37b768b971d7596d7220a053Svet Ganov * Creates a new instance. 43ae0e03a9e03de34e37b768b971d7596d7220a053Svet Ganov * 44ae0e03a9e03de34e37b768b971d7596d7220a053Svet Ganov * @param label The permission label. 45ae0e03a9e03de34e37b768b971d7596d7220a053Svet Ganov * @param granted Whether the permission is granted. 46ae0e03a9e03de34e37b768b971d7596d7220a053Svet Ganov * @param standard Whether this is a platform-defined permission. 47ae0e03a9e03de34e37b768b971d7596d7220a053Svet Ganov */ 48ae0e03a9e03de34e37b768b971d7596d7220a053Svet Ganov public RuntimePermissionPresentationInfo(CharSequence label, 49ae0e03a9e03de34e37b768b971d7596d7220a053Svet Ganov boolean granted, boolean standard) { 50ae0e03a9e03de34e37b768b971d7596d7220a053Svet Ganov mLabel = label; 51ae0e03a9e03de34e37b768b971d7596d7220a053Svet Ganov int flags = 0; 52ae0e03a9e03de34e37b768b971d7596d7220a053Svet Ganov if (granted) { 53ae0e03a9e03de34e37b768b971d7596d7220a053Svet Ganov flags |= FLAG_GRANTED; 54ae0e03a9e03de34e37b768b971d7596d7220a053Svet Ganov } 55ae0e03a9e03de34e37b768b971d7596d7220a053Svet Ganov if (standard) { 56ae0e03a9e03de34e37b768b971d7596d7220a053Svet Ganov flags |= FLAG_STANDARD; 57ae0e03a9e03de34e37b768b971d7596d7220a053Svet Ganov } 58ae0e03a9e03de34e37b768b971d7596d7220a053Svet Ganov mFlags = flags; 59ae0e03a9e03de34e37b768b971d7596d7220a053Svet Ganov } 60ae0e03a9e03de34e37b768b971d7596d7220a053Svet Ganov 61ae0e03a9e03de34e37b768b971d7596d7220a053Svet Ganov private RuntimePermissionPresentationInfo(Parcel parcel) { 62ae0e03a9e03de34e37b768b971d7596d7220a053Svet Ganov mLabel = parcel.readCharSequence(); 63ae0e03a9e03de34e37b768b971d7596d7220a053Svet Ganov mFlags = parcel.readInt(); 64ae0e03a9e03de34e37b768b971d7596d7220a053Svet Ganov } 65ae0e03a9e03de34e37b768b971d7596d7220a053Svet Ganov 66ae0e03a9e03de34e37b768b971d7596d7220a053Svet Ganov /** 67ae0e03a9e03de34e37b768b971d7596d7220a053Svet Ganov * @return Whether the permission is granted. 68ae0e03a9e03de34e37b768b971d7596d7220a053Svet Ganov */ 69ae0e03a9e03de34e37b768b971d7596d7220a053Svet Ganov public boolean isGranted() { 70ae0e03a9e03de34e37b768b971d7596d7220a053Svet Ganov return (mFlags & FLAG_GRANTED) != 0; 71ae0e03a9e03de34e37b768b971d7596d7220a053Svet Ganov } 72ae0e03a9e03de34e37b768b971d7596d7220a053Svet Ganov 73ae0e03a9e03de34e37b768b971d7596d7220a053Svet Ganov /** 74ae0e03a9e03de34e37b768b971d7596d7220a053Svet Ganov * @return Whether the permission is platform-defined. 75ae0e03a9e03de34e37b768b971d7596d7220a053Svet Ganov */ 76ae0e03a9e03de34e37b768b971d7596d7220a053Svet Ganov public boolean isStandard() { 77ae0e03a9e03de34e37b768b971d7596d7220a053Svet Ganov return (mFlags & FLAG_STANDARD) != 0; 78ae0e03a9e03de34e37b768b971d7596d7220a053Svet Ganov } 79ae0e03a9e03de34e37b768b971d7596d7220a053Svet Ganov 80ae0e03a9e03de34e37b768b971d7596d7220a053Svet Ganov /** 81ae0e03a9e03de34e37b768b971d7596d7220a053Svet Ganov * Gets the permission label. 82ae0e03a9e03de34e37b768b971d7596d7220a053Svet Ganov * 83ae0e03a9e03de34e37b768b971d7596d7220a053Svet Ganov * @return The label. 84ae0e03a9e03de34e37b768b971d7596d7220a053Svet Ganov */ 85ae0e03a9e03de34e37b768b971d7596d7220a053Svet Ganov public @NonNull CharSequence getLabel() { 86ae0e03a9e03de34e37b768b971d7596d7220a053Svet Ganov return mLabel; 87ae0e03a9e03de34e37b768b971d7596d7220a053Svet Ganov } 88ae0e03a9e03de34e37b768b971d7596d7220a053Svet Ganov 89ae0e03a9e03de34e37b768b971d7596d7220a053Svet Ganov @Override 90ae0e03a9e03de34e37b768b971d7596d7220a053Svet Ganov public int describeContents() { 91ae0e03a9e03de34e37b768b971d7596d7220a053Svet Ganov return 0; 92ae0e03a9e03de34e37b768b971d7596d7220a053Svet Ganov } 93ae0e03a9e03de34e37b768b971d7596d7220a053Svet Ganov 94ae0e03a9e03de34e37b768b971d7596d7220a053Svet Ganov @Override 95ae0e03a9e03de34e37b768b971d7596d7220a053Svet Ganov public void writeToParcel(Parcel parcel, int flags) { 96ae0e03a9e03de34e37b768b971d7596d7220a053Svet Ganov parcel.writeCharSequence(mLabel); 97ae0e03a9e03de34e37b768b971d7596d7220a053Svet Ganov parcel.writeInt(mFlags); 98ae0e03a9e03de34e37b768b971d7596d7220a053Svet Ganov } 99ae0e03a9e03de34e37b768b971d7596d7220a053Svet Ganov 100ae0e03a9e03de34e37b768b971d7596d7220a053Svet Ganov public static final Creator<RuntimePermissionPresentationInfo> CREATOR = 101ae0e03a9e03de34e37b768b971d7596d7220a053Svet Ganov new Creator<RuntimePermissionPresentationInfo>() { 102ae0e03a9e03de34e37b768b971d7596d7220a053Svet Ganov public RuntimePermissionPresentationInfo createFromParcel(Parcel source) { 103ae0e03a9e03de34e37b768b971d7596d7220a053Svet Ganov return new RuntimePermissionPresentationInfo(source); 104ae0e03a9e03de34e37b768b971d7596d7220a053Svet Ganov } 105ae0e03a9e03de34e37b768b971d7596d7220a053Svet Ganov 106ae0e03a9e03de34e37b768b971d7596d7220a053Svet Ganov public RuntimePermissionPresentationInfo[] newArray(int size) { 107ae0e03a9e03de34e37b768b971d7596d7220a053Svet Ganov return new RuntimePermissionPresentationInfo[size]; 108ae0e03a9e03de34e37b768b971d7596d7220a053Svet Ganov } 109ae0e03a9e03de34e37b768b971d7596d7220a053Svet Ganov }; 110ae0e03a9e03de34e37b768b971d7596d7220a053Svet Ganov} 111