1b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey/* 2b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey * Copyright (C) 2015 The Android Open Source Project 3b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey * 4b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey * Licensed under the Apache License, Version 2.0 (the "License"); 5b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey * you may not use this file except in compliance with the License. 6b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey * You may obtain a copy of the License at 7b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey * 8b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey * http://www.apache.org/licenses/LICENSE-2.0 9b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey * 10b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey * Unless required by applicable law or agreed to in writing, software 11b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey * distributed under the License is distributed on an "AS IS" BASIS, 12b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey * See the License for the specific language governing permissions and 14b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey * limitations under the License. 15b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey */ 16b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey 17b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkeypackage android.os.storage; 18b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey 19b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkeyimport android.os.Parcel; 20b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkeyimport android.os.Parcelable; 21b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkeyimport android.util.DebugUtils; 22e8a4b66960056c2dc2c8dbb5f8df00710645cc64Jeff Sharkeyimport android.util.TimeUtils; 23b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey 24b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkeyimport com.android.internal.util.IndentingPrintWriter; 25b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkeyimport com.android.internal.util.Preconditions; 26b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey 27b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkeyimport java.util.Objects; 28b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey 29b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey/** 30b42d694691e73d094df616fe78627ada7e1239efJeff Sharkey * Metadata for a storage volume which may not be currently present. 31b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey * 32b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey * @hide 33b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey */ 34b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkeypublic class VolumeRecord implements Parcelable { 35b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey public static final String EXTRA_FS_UUID = 36b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey "android.os.storage.extra.FS_UUID"; 37b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey 38b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey public static final int USER_FLAG_INITED = 1 << 0; 39b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey public static final int USER_FLAG_SNOOZED = 1 << 1; 40b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey 41b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey public final int type; 42b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey public final String fsUuid; 435cc0df214bbe2b169150c9060dc5288bb8aaf338Jeff Sharkey public String partGuid; 44b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey public String nickname; 45b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey public int userFlags; 46e8a4b66960056c2dc2c8dbb5f8df00710645cc64Jeff Sharkey public long createdMillis; 47e8a4b66960056c2dc2c8dbb5f8df00710645cc64Jeff Sharkey public long lastTrimMillis; 48e8a4b66960056c2dc2c8dbb5f8df00710645cc64Jeff Sharkey public long lastBenchMillis; 49b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey 50b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey public VolumeRecord(int type, String fsUuid) { 51b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey this.type = type; 52b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey this.fsUuid = Preconditions.checkNotNull(fsUuid); 53b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey } 54b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey 55b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey public VolumeRecord(Parcel parcel) { 56b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey type = parcel.readInt(); 57b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey fsUuid = parcel.readString(); 585cc0df214bbe2b169150c9060dc5288bb8aaf338Jeff Sharkey partGuid = parcel.readString(); 59b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey nickname = parcel.readString(); 60b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey userFlags = parcel.readInt(); 61e8a4b66960056c2dc2c8dbb5f8df00710645cc64Jeff Sharkey createdMillis = parcel.readLong(); 62e8a4b66960056c2dc2c8dbb5f8df00710645cc64Jeff Sharkey lastTrimMillis = parcel.readLong(); 63e8a4b66960056c2dc2c8dbb5f8df00710645cc64Jeff Sharkey lastBenchMillis = parcel.readLong(); 64b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey } 65b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey 66b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey public int getType() { 67b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey return type; 68b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey } 69b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey 70b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey public String getFsUuid() { 71b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey return fsUuid; 72b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey } 73b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey 74b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey public String getNickname() { 75b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey return nickname; 76b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey } 77b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey 78b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey public boolean isInited() { 79b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey return (userFlags & USER_FLAG_INITED) != 0; 80b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey } 81b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey 82b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey public boolean isSnoozed() { 83b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey return (userFlags & USER_FLAG_SNOOZED) != 0; 84b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey } 85b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey 86b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey public void dump(IndentingPrintWriter pw) { 87b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey pw.println("VolumeRecord:"); 88b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey pw.increaseIndent(); 89b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey pw.printPair("type", DebugUtils.valueToString(VolumeInfo.class, "TYPE_", type)); 90b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey pw.printPair("fsUuid", fsUuid); 915cc0df214bbe2b169150c9060dc5288bb8aaf338Jeff Sharkey pw.printPair("partGuid", partGuid); 925cc0df214bbe2b169150c9060dc5288bb8aaf338Jeff Sharkey pw.println(); 93b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey pw.printPair("nickname", nickname); 94b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey pw.printPair("userFlags", 95b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey DebugUtils.flagsToString(VolumeRecord.class, "USER_FLAG_", userFlags)); 96e8a4b66960056c2dc2c8dbb5f8df00710645cc64Jeff Sharkey pw.println(); 97e8a4b66960056c2dc2c8dbb5f8df00710645cc64Jeff Sharkey pw.printPair("createdMillis", TimeUtils.formatForLogging(createdMillis)); 98e8a4b66960056c2dc2c8dbb5f8df00710645cc64Jeff Sharkey pw.printPair("lastTrimMillis", TimeUtils.formatForLogging(lastTrimMillis)); 99e8a4b66960056c2dc2c8dbb5f8df00710645cc64Jeff Sharkey pw.printPair("lastBenchMillis", TimeUtils.formatForLogging(lastBenchMillis)); 100b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey pw.decreaseIndent(); 101b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey pw.println(); 102b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey } 103b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey 104b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey @Override 105b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey public VolumeRecord clone() { 106b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey final Parcel temp = Parcel.obtain(); 107b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey try { 108b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey writeToParcel(temp, 0); 109b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey temp.setDataPosition(0); 110b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey return CREATOR.createFromParcel(temp); 111b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey } finally { 112b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey temp.recycle(); 113b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey } 114b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey } 115b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey 116b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey @Override 117b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey public boolean equals(Object o) { 118b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey if (o instanceof VolumeRecord) { 119b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey return Objects.equals(fsUuid, ((VolumeRecord) o).fsUuid); 120b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey } else { 121b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey return false; 122b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey } 123b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey } 124b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey 125b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey @Override 126b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey public int hashCode() { 127b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey return fsUuid.hashCode(); 128b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey } 129b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey 130b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey public static final Creator<VolumeRecord> CREATOR = new Creator<VolumeRecord>() { 131b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey @Override 132b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey public VolumeRecord createFromParcel(Parcel in) { 133b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey return new VolumeRecord(in); 134b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey } 135b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey 136b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey @Override 137b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey public VolumeRecord[] newArray(int size) { 138b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey return new VolumeRecord[size]; 139b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey } 140b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey }; 141b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey 142b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey @Override 143b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey public int describeContents() { 144b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey return 0; 145b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey } 146b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey 147b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey @Override 148b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey public void writeToParcel(Parcel parcel, int flags) { 149b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey parcel.writeInt(type); 150b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey parcel.writeString(fsUuid); 1515cc0df214bbe2b169150c9060dc5288bb8aaf338Jeff Sharkey parcel.writeString(partGuid); 152b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey parcel.writeString(nickname); 153b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey parcel.writeInt(userFlags); 154e8a4b66960056c2dc2c8dbb5f8df00710645cc64Jeff Sharkey parcel.writeLong(createdMillis); 155e8a4b66960056c2dc2c8dbb5f8df00710645cc64Jeff Sharkey parcel.writeLong(lastTrimMillis); 156e8a4b66960056c2dc2c8dbb5f8df00710645cc64Jeff Sharkey parcel.writeLong(lastBenchMillis); 157b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey } 158b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey} 159