Home | History | Annotate | Download | only in admin
      1 /*
      2  * Copyright (C) 2016 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.app.admin;
     18 
     19 import android.content.pm.PackageManager;
     20 import android.os.Parcel;
     21 import android.os.ParcelFormatException;
     22 import android.os.Parcelable;
     23 
     24 /**
     25  * An abstract class that represents a network event.
     26  */
     27 public abstract class NetworkEvent implements Parcelable {
     28 
     29     /** @hide */
     30     static final int PARCEL_TOKEN_DNS_EVENT = 1;
     31     /** @hide */
     32     static final int PARCEL_TOKEN_CONNECT_EVENT = 2;
     33 
     34     /** The package name of the UID that performed the query. */
     35     String mPackageName;
     36 
     37     /** The timestamp of the event being reported in milliseconds. */
     38     long mTimestamp;
     39 
     40     /** The id of the event. */
     41     long mId;
     42 
     43     /** @hide */
     44     NetworkEvent() {
     45         //empty constructor
     46     }
     47 
     48     /** @hide */
     49     NetworkEvent(String packageName, long timestamp) {
     50         this.mPackageName = packageName;
     51         this.mTimestamp = timestamp;
     52     }
     53 
     54     /**
     55      * Returns the package name of the UID that performed the query, as returned by
     56      * {@link PackageManager#getNameForUid}.
     57      */
     58     public String getPackageName() {
     59         return mPackageName;
     60     }
     61 
     62     /**
     63      * Returns the timestamp of the event being reported in milliseconds, the difference between
     64      * the time the event was reported and midnight, January 1, 1970 UTC.
     65      */
     66     public long getTimestamp() {
     67         return mTimestamp;
     68     }
     69 
     70     /** @hide */
     71     public void setId(long id) {
     72         this.mId = id;
     73     }
     74 
     75     /**
     76      * Returns the id of the event, where the id monotonically increases for each event. The id
     77      * is reset when the device reboots, and when network logging is enabled.
     78      */
     79     public long getId() {
     80         return this.mId;
     81     }
     82 
     83     @Override
     84     public int describeContents() {
     85         return 0;
     86     }
     87 
     88     public static final Parcelable.Creator<NetworkEvent> CREATOR
     89             = new Parcelable.Creator<NetworkEvent>() {
     90         public NetworkEvent createFromParcel(Parcel in) {
     91             final int initialPosition = in.dataPosition();
     92             final int parcelToken = in.readInt();
     93             // we need to move back to the position from before we read parcelToken
     94             in.setDataPosition(initialPosition);
     95             switch (parcelToken) {
     96                 case PARCEL_TOKEN_DNS_EVENT:
     97                     return DnsEvent.CREATOR.createFromParcel(in);
     98                 case PARCEL_TOKEN_CONNECT_EVENT:
     99                     return ConnectEvent.CREATOR.createFromParcel(in);
    100                 default:
    101                     throw new ParcelFormatException("Unexpected NetworkEvent token in parcel: "
    102                             + parcelToken);
    103             }
    104         }
    105 
    106         public NetworkEvent[] newArray(int size) {
    107             return new NetworkEvent[size];
    108         }
    109     };
    110 
    111     @Override
    112     public abstract void writeToParcel(Parcel out, int flags);
    113 }
    114