ChannelImpressions.java revision f8c53678cb0af08a8048393afb0db6d5c5bc7ec7
1/** 2 * Copyright (C) 2017 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 17package android.ext.services.notification; 18 19import android.os.Parcel; 20import android.os.Parcelable; 21import android.util.Log; 22 23public final class ChannelImpressions implements Parcelable { 24 private static final String TAG = "ExtAssistant.CI"; 25 private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG); 26 27 static final double DISMISS_TO_VIEW_RATIO_LIMIT = .8; 28 static final int STREAK_LIMIT = 2; 29 30 private int mDismissals = 0; 31 private int mViews = 0; 32 private int mStreak = 0; 33 34 public ChannelImpressions() { 35 } 36 37 public ChannelImpressions(int dismissals, int views) { 38 mDismissals = dismissals; 39 mViews = views; 40 } 41 42 protected ChannelImpressions(Parcel in) { 43 mDismissals = in.readInt(); 44 mViews = in.readInt(); 45 mStreak = in.readInt(); 46 } 47 48 public int getStreak() { 49 return mStreak; 50 } 51 52 public int getDismissals() { 53 return mDismissals; 54 } 55 56 public int getViews() { 57 return mViews; 58 } 59 60 public void incrementDismissals() { 61 mDismissals++; 62 mStreak++; 63 } 64 65 public void incrementViews() { 66 mViews++; 67 } 68 69 public void resetStreak() { 70 mStreak = 0; 71 } 72 73 public boolean shouldTriggerBlock() { 74 if (getViews() == 0) { 75 return false; 76 } 77 if (DEBUG) { 78 Log.d(TAG, "should trigger? " + getDismissals() + " " + getViews() + " " + getStreak()); 79 } 80 return ((double) getDismissals() / getViews()) > DISMISS_TO_VIEW_RATIO_LIMIT 81 && getStreak() > STREAK_LIMIT; 82 } 83 84 @Override 85 public void writeToParcel(Parcel dest, int flags) { 86 dest.writeInt(mDismissals); 87 dest.writeInt(mViews); 88 dest.writeInt(mStreak); 89 } 90 91 @Override 92 public int describeContents() { 93 return 0; 94 } 95 96 public static final Creator<ChannelImpressions> CREATOR = new Creator<ChannelImpressions>() { 97 @Override 98 public ChannelImpressions createFromParcel(Parcel in) { 99 return new ChannelImpressions(in); 100 } 101 102 @Override 103 public ChannelImpressions[] newArray(int size) { 104 return new ChannelImpressions[size]; 105 } 106 }; 107 108 @Override 109 public boolean equals(Object o) { 110 if (this == o) return true; 111 if (o == null || getClass() != o.getClass()) return false; 112 113 ChannelImpressions that = (ChannelImpressions) o; 114 115 if (mDismissals != that.mDismissals) return false; 116 if (mViews != that.mViews) return false; 117 return mStreak == that.mStreak; 118 } 119 120 @Override 121 public int hashCode() { 122 int result = mDismissals; 123 result = 31 * result + mViews; 124 result = 31 * result + mStreak; 125 return result; 126 } 127 128 @Override 129 public String toString() { 130 final StringBuilder sb = new StringBuilder("ChannelImpressions{"); 131 sb.append("mDismissals=").append(mDismissals); 132 sb.append(", mViews=").append(mViews); 133 sb.append(", mStreak=").append(mStreak); 134 sb.append('}'); 135 return sb.toString(); 136 } 137} 138