• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2015 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package android.car.content.pm;
18 
19 import android.annotation.SystemApi;
20 import android.os.Parcel;
21 import android.os.Parcelable;
22 import android.util.Log;
23 
24 import java.lang.reflect.InvocationTargetException;
25 import java.lang.reflect.Method;
26 import java.util.Arrays;
27 
28 /**
29  * Contains application blocking policy
30  * @hide
31  */
32 @SystemApi
33 public class CarAppBlockingPolicy implements Parcelable {
34     private static final String TAG = CarAppBlockingPolicy.class.getSimpleName();
35 
36     public final AppBlockingPackageInfo[] whitelists;
37     public final AppBlockingPackageInfo[] blacklists;
38 
39     private static final Method sReadBlobMethod;
40     private static final Method sWriteBlobMethod;
41 
42     static {
43         Class parcelClass = Parcel.class;
44         Method readBlob = null;
45         Method writeBlob = null;
46         try {
47             readBlob = parcelClass.getMethod("readBlob", new Class[] {});
48             writeBlob = parcelClass.getMethod("writeBlob", new Class[] {byte[].class});
49         } catch (NoSuchMethodException e) {
50             // use it only when both methods are available.
51             readBlob = null;
52             writeBlob = null;
53         }
54         sReadBlobMethod = readBlob;
55         sWriteBlobMethod = writeBlob;
56     }
57 
CarAppBlockingPolicy(AppBlockingPackageInfo[] whitelists, AppBlockingPackageInfo[] blacklists)58     public CarAppBlockingPolicy(AppBlockingPackageInfo[] whitelists,
59             AppBlockingPackageInfo[] blacklists) {
60         this.whitelists = whitelists;
61         this.blacklists = blacklists;
62     }
63 
CarAppBlockingPolicy(Parcel in)64     public CarAppBlockingPolicy(Parcel in) {
65         byte[] payload =  in.readBlob();
66         Parcel payloadParcel = Parcel.obtain();
67         payloadParcel.unmarshall(payload, 0, payload.length);
68         // reset to initial position to read
69         payloadParcel.setDataPosition(0);
70         whitelists = payloadParcel.createTypedArray(AppBlockingPackageInfo.CREATOR);
71         blacklists = payloadParcel.createTypedArray(AppBlockingPackageInfo.CREATOR);
72         payloadParcel.recycle();
73     }
74 
75     @Override
describeContents()76     public int describeContents() {
77         return 0;
78     }
79 
80     @Override
writeToParcel(Parcel dest, int flags)81     public void writeToParcel(Parcel dest, int flags) {
82         Parcel payloadParcel = Parcel.obtain();
83         payloadParcel.writeTypedArray(whitelists, 0);
84         payloadParcel.writeTypedArray(blacklists, 0);
85         byte[] payload = payloadParcel.marshall();
86         dest.writeBlob(payload);
87         payloadParcel.recycle();
88     }
89 
90     public static final Parcelable.Creator<CarAppBlockingPolicy> CREATOR
91             = new Parcelable.Creator<CarAppBlockingPolicy>() {
92         public CarAppBlockingPolicy createFromParcel(Parcel in) {
93             return new CarAppBlockingPolicy(in);
94         }
95 
96         public CarAppBlockingPolicy[] newArray(int size) {
97             return new CarAppBlockingPolicy[size];
98         }
99     };
100 
101     @Override
hashCode()102     public int hashCode() {
103         final int prime = 31;
104         int result = 1;
105         result = prime * result + Arrays.hashCode(blacklists);
106         result = prime * result + Arrays.hashCode(whitelists);
107         return result;
108     }
109 
110     @Override
equals(Object obj)111     public boolean equals(Object obj) {
112         if (this == obj) {
113             return true;
114         }
115         if (obj == null) {
116             return false;
117         }
118         if (getClass() != obj.getClass()) {
119             return false;
120         }
121         CarAppBlockingPolicy other = (CarAppBlockingPolicy) obj;
122         if (!Arrays.equals(blacklists, other.blacklists)) {
123             return false;
124         }
125         if (!Arrays.equals(whitelists, other.whitelists)) {
126             return false;
127         }
128         return true;
129     }
130 
131     @Override
toString()132     public String toString() {
133         return "CarAppBlockingPolicy [whitelists=" + Arrays.toString(whitelists) + ", blacklists="
134                 + Arrays.toString(blacklists) + "]";
135     }
136 }
137