package com.google.android.diskusage.datasource.debug; import android.os.Build; import com.google.android.diskusage.datasource.AppStats; import com.google.android.diskusage.proto.AppStatsProto; class AppStatsProtoImpl implements AppStats { private final AppStatsProto proto; private final int androidVersion; AppStatsProtoImpl(AppStatsProto proto, int androidVersion) { this.proto = proto; this.androidVersion = androidVersion; } private void versionCheck(int api) { if (androidVersion < api) { throw new NoSuchFieldError("Not available pre " + api); } } @Override public long getCacheSize() { return proto.cacheSize; } @Override public long getDataSize() { return proto.dataSize; } @Override public long getCodeSize() { return proto.codeSize; } @Override public long getExternalCacheSize() { versionCheck(Build.VERSION_CODES.HONEYCOMB); return proto.externalCacheSize; } @Override public long getExternalCodeSize() { versionCheck(Build.VERSION_CODES.ICE_CREAM_SANDWICH); return proto.externalCodeSize; } @Override public long getExternalDataSize() { versionCheck(Build.VERSION_CODES.HONEYCOMB); return proto.externalDataSize; } @Override public long getExternalMediaSize() { versionCheck(Build.VERSION_CODES.HONEYCOMB); return proto.externalMediaSize; } @Override public long getExternalObbSize() { versionCheck(Build.VERSION_CODES.HONEYCOMB); return proto.externalObbSize; } static AppStatsProto makeProto( AppStats appStats, boolean isSucceeded, int androidVersion) { AppStatsProto proto = new AppStatsProto(); proto.callbackReceived = true; proto.succeeded = isSucceeded; if (appStats != null) { proto.hasAppStats = true; proto.cacheSize = appStats.getCacheSize(); proto.codeSize = appStats.getCodeSize(); proto.dataSize = appStats.getDataSize(); if (androidVersion >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) { proto.externalCodeSize = appStats.getExternalCodeSize(); } if (androidVersion >= Build.VERSION_CODES.HONEYCOMB) { proto.externalCacheSize = appStats.getExternalCacheSize(); proto.externalDataSize = appStats.getExternalDataSize(); proto.externalMediaSize = appStats.getExternalMediaSize(); proto.externalObbSize = appStats.getExternalObbSize(); } } proto.callbackParseDone = true; return proto; } }