/* * This source is part of the * _____ ___ ____ * __ / / _ \/ _ | / __/___ _______ _ * / // / , _/ __ |/ _/_/ _ \/ __/ _ `/ * \___/_/|_/_/ |_/_/ (_)___/_/ \_, / * /___/ * repository. * * Copyright (C) 2014-2015 Carmen Alvarez (c@rmen.ca) * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package ca.rmen.android.networkmonitor.app.speedtest; import android.content.SharedPreferences; import android.content.SharedPreferences.Editor; public class SpeedTestResult { public enum SpeedTestStatus { SUCCESS, INVALID_FILE, FAILURE, AUTH_FAILURE, UNKNOWN } public final long fileBytes; public final SpeedTestStatus status; private final long totalBytes; private final long transferTime; /** * @param totalBytes the total bytes transferred (either received or sent) during the time the file was being transferred. * @param fileBytes the size of the file which was transferred * @param transferTime the time in milliseconds it took to transfer the file * @param status the result of the file transfer */ public SpeedTestResult(long totalBytes, long fileBytes, long transferTime, SpeedTestStatus status) { this.totalBytes = totalBytes; this.fileBytes = fileBytes; this.transferTime = transferTime; this.status = status; } /** * @return the transfer speed in megabits per second. */ public float getSpeedMbps() { long bytesTransferred = totalBytes > 0 ? totalBytes : fileBytes; float seconds = (float) transferTime / 1000; long bits = bytesTransferred * 8; float megabits = (float) bits / 1000000; return megabits / seconds; } /** * Persist this speed test result to the shared preferences. * * @param keyPrefix the first part of the key names of each field to persist. */ void write(SharedPreferences prefs, String keyPrefix) { Editor editor = prefs.edit(); editor.putLong(keyPrefix + "_TOTAL_BYTES", totalBytes); editor.putLong(keyPrefix + "_FILE_BYTES", fileBytes); editor.putLong(keyPrefix + "_TRANSFER_TIME", transferTime); editor.putInt(keyPrefix + "_STATUS", status.ordinal()); editor.apply(); } /** * @param keyPrefix the first part of the key names of each persisted field. * @return a speed test result which was stored in the shared preferences. */ static SpeedTestResult read(SharedPreferences prefs, String keyPrefix) { long totalBytes = prefs.getLong(keyPrefix + "_TOTAL_BYTES", 0); long fileBytes = prefs.getLong(keyPrefix + "_FILE_BYTES", 0); long transferTime = prefs.getLong(keyPrefix + "_TRANSFER_TIME", 0); int statusInt = prefs.getInt(keyPrefix + "_STATUS", SpeedTestStatus.UNKNOWN.ordinal()); return new SpeedTestResult(totalBytes, fileBytes, transferTime, SpeedTestStatus.values()[statusInt]); } @Override public String toString() { return SpeedTestResult.class.getSimpleName() + "[totalBytes=" + totalBytes + ", fileBytes=" + fileBytes + ", transferTime=" + transferTime + ", status=" + status + "]"; } }