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.os.storage; 18 19 import android.os.Parcel; 20 import android.os.Parcelable; 21 import android.util.DebugUtils; 22 import android.util.TimeUtils; 23 24 import com.android.internal.util.IndentingPrintWriter; 25 import com.android.internal.util.Preconditions; 26 27 import java.util.Objects; 28 29 /** 30 * Metadata for a storage volume which may not be currently present. 31 * 32 * @hide 33 */ 34 public class VolumeRecord implements Parcelable { 35 public static final String EXTRA_FS_UUID = 36 "android.os.storage.extra.FS_UUID"; 37 38 public static final int USER_FLAG_INITED = 1 << 0; 39 public static final int USER_FLAG_SNOOZED = 1 << 1; 40 41 public final int type; 42 public final String fsUuid; 43 public String partGuid; 44 public String nickname; 45 public int userFlags; 46 public long createdMillis; 47 public long lastTrimMillis; 48 public long lastBenchMillis; 49 50 public VolumeRecord(int type, String fsUuid) { 51 this.type = type; 52 this.fsUuid = Preconditions.checkNotNull(fsUuid); 53 } 54 55 public VolumeRecord(Parcel parcel) { 56 type = parcel.readInt(); 57 fsUuid = parcel.readString(); 58 partGuid = parcel.readString(); 59 nickname = parcel.readString(); 60 userFlags = parcel.readInt(); 61 createdMillis = parcel.readLong(); 62 lastTrimMillis = parcel.readLong(); 63 lastBenchMillis = parcel.readLong(); 64 } 65 66 public int getType() { 67 return type; 68 } 69 70 public String getFsUuid() { 71 return fsUuid; 72 } 73 74 public String getNickname() { 75 return nickname; 76 } 77 78 public boolean isInited() { 79 return (userFlags & USER_FLAG_INITED) != 0; 80 } 81 82 public boolean isSnoozed() { 83 return (userFlags & USER_FLAG_SNOOZED) != 0; 84 } 85 86 public void dump(IndentingPrintWriter pw) { 87 pw.println("VolumeRecord:"); 88 pw.increaseIndent(); 89 pw.printPair("type", DebugUtils.valueToString(VolumeInfo.class, "TYPE_", type)); 90 pw.printPair("fsUuid", fsUuid); 91 pw.printPair("partGuid", partGuid); 92 pw.println(); 93 pw.printPair("nickname", nickname); 94 pw.printPair("userFlags", 95 DebugUtils.flagsToString(VolumeRecord.class, "USER_FLAG_", userFlags)); 96 pw.println(); 97 pw.printPair("createdMillis", TimeUtils.formatForLogging(createdMillis)); 98 pw.printPair("lastTrimMillis", TimeUtils.formatForLogging(lastTrimMillis)); 99 pw.printPair("lastBenchMillis", TimeUtils.formatForLogging(lastBenchMillis)); 100 pw.decreaseIndent(); 101 pw.println(); 102 } 103 104 @Override 105 public VolumeRecord clone() { 106 final Parcel temp = Parcel.obtain(); 107 try { 108 writeToParcel(temp, 0); 109 temp.setDataPosition(0); 110 return CREATOR.createFromParcel(temp); 111 } finally { 112 temp.recycle(); 113 } 114 } 115 116 @Override 117 public boolean equals(Object o) { 118 if (o instanceof VolumeRecord) { 119 return Objects.equals(fsUuid, ((VolumeRecord) o).fsUuid); 120 } else { 121 return false; 122 } 123 } 124 125 @Override 126 public int hashCode() { 127 return fsUuid.hashCode(); 128 } 129 130 public static final Creator<VolumeRecord> CREATOR = new Creator<VolumeRecord>() { 131 @Override 132 public VolumeRecord createFromParcel(Parcel in) { 133 return new VolumeRecord(in); 134 } 135 136 @Override 137 public VolumeRecord[] newArray(int size) { 138 return new VolumeRecord[size]; 139 } 140 }; 141 142 @Override 143 public int describeContents() { 144 return 0; 145 } 146 147 @Override 148 public void writeToParcel(Parcel parcel, int flags) { 149 parcel.writeInt(type); 150 parcel.writeString(fsUuid); 151 parcel.writeString(partGuid); 152 parcel.writeString(nickname); 153 parcel.writeInt(userFlags); 154 parcel.writeLong(createdMillis); 155 parcel.writeLong(lastTrimMillis); 156 parcel.writeLong(lastBenchMillis); 157 } 158 } 159