diff --git a/res/values/strings.xml b/res/values/strings.xml index e41995b3affa5100d7fc7fe40ca9b237a153118d..a3d0eaffac6cc2e0a2edf2ef0a54e9f5f0338322 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -62,6 +62,8 @@ Preliminary update preparation Low battery The battery level is too low, you need at least %1$d%% of the battery to continue, %2$d%% if charging. + Free up space + The update cannot be completed because there is insufficient free space; at least %1$s of free space is required. Please clear your internal storage before proceeding. Reboot diff --git a/src/org/lineageos/updater/UpdatesActivity.java b/src/org/lineageos/updater/UpdatesActivity.java index 06fb49be67c1de945d124a801ade0a3b9c8817f0..1375145831036babc32ee36f53b4c7e36657b3c2 100644 --- a/src/org/lineageos/updater/UpdatesActivity.java +++ b/src/org/lineageos/updater/UpdatesActivity.java @@ -24,9 +24,9 @@ import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; -import android.content.res.Configuration; import android.content.ServiceConnection; import android.content.SharedPreferences; +import android.content.res.Configuration; import android.icu.text.DateFormat; import android.net.Uri; import android.os.Build; diff --git a/src/org/lineageos/updater/UpdatesListAdapter.java b/src/org/lineageos/updater/UpdatesListAdapter.java index 6911753a292aa07f3c2b06c3feb8de0d62d69c1c..075379658877e2d1dbb5f8b31ebd3440d95719c6 100644 --- a/src/org/lineageos/updater/UpdatesListAdapter.java +++ b/src/org/lineageos/updater/UpdatesListAdapter.java @@ -57,7 +57,6 @@ import com.google.android.material.snackbar.Snackbar; import org.lineageos.updater.controller.UpdaterController; import org.lineageos.updater.controller.UpdaterService; -import org.lineageos.updater.misc.BuildInfoUtils; import org.lineageos.updater.misc.Constants; import org.lineageos.updater.misc.StringGenerator; import org.lineageos.updater.misc.Utils; @@ -463,8 +462,8 @@ public class UpdatesListAdapter extends RecyclerView.Adapter= neededSpace; + if (!hasFreeSpace) { + String spaceMessage = resources.getString(R.string.dialog_free_space_low_message_pct, + Utils.getFileSize(neededSpace)); + return new AlertDialog.Builder(mActivity) + .setTitle(R.string.dialog_free_space_low_title) + .setMessage(spaceMessage) + .setPositiveButton(android.R.string.ok, null); + } + return new AlertDialog.Builder(mActivity) .setTitle(title) .setMessage(message) diff --git a/src/org/lineageos/updater/controller/UpdaterService.java b/src/org/lineageos/updater/controller/UpdaterService.java index 77e9e83cee55b0d066f19a29603c5c82bd75f1bc..f5ee697b846b689807c18b7443e5a26f606f3da6 100644 --- a/src/org/lineageos/updater/controller/UpdaterService.java +++ b/src/org/lineageos/updater/controller/UpdaterService.java @@ -38,7 +38,6 @@ import androidx.preference.PreferenceManager; import org.lineageos.updater.R; import org.lineageos.updater.UpdaterReceiver; import org.lineageos.updater.UpdatesActivity; -import org.lineageos.updater.misc.BuildInfoUtils; import org.lineageos.updater.misc.Constants; import org.lineageos.updater.misc.StringGenerator; import org.lineageos.updater.misc.Utils; diff --git a/src/org/lineageos/updater/download/HttpURLConnectionClient.java b/src/org/lineageos/updater/download/HttpURLConnectionClient.java index 3bbc2dc1d58d9d71c2393bbbc461c03664c93a05..c84786b9f111e664a536c6d236586234d7700e8a 100644 --- a/src/org/lineageos/updater/download/HttpURLConnectionClient.java +++ b/src/org/lineageos/updater/download/HttpURLConnectionClient.java @@ -18,9 +18,10 @@ package org.lineageos.updater.download; import android.os.SystemClock; import android.os.SystemProperties; - import android.util.Log; +import org.lineageos.updater.misc.Constants; + import java.io.File; import java.io.FileOutputStream; import java.io.IOException; @@ -35,8 +36,6 @@ import java.util.PriorityQueue; import java.util.regex.Matcher; import java.util.regex.Pattern; -import org.lineageos.updater.misc.Constants; - public class HttpURLConnectionClient implements DownloadClient { private final static String TAG = "HttpURLConnectionClient"; diff --git a/src/org/lineageos/updater/misc/Utils.java b/src/org/lineageos/updater/misc/Utils.java index bfe266906280be97897cc44b94e93ff65864f4d9..3ed81f42e4c46f07192c2d4d34d3057919ad99f1 100644 --- a/src/org/lineageos/updater/misc/Utils.java +++ b/src/org/lineageos/updater/misc/Utils.java @@ -18,7 +18,6 @@ package org.lineageos.updater.misc; import android.app.AlarmManager; -import android.os.Build; import android.content.ClipData; import android.content.ClipboardManager; import android.content.Context; @@ -30,7 +29,9 @@ import android.net.ConnectivityManager; import android.net.Network; import android.net.NetworkCapabilities; import android.net.Uri; +import android.os.Build; import android.os.Environment; +import android.os.StatFs; import android.os.SystemProperties; import android.os.storage.StorageManager; import android.util.Log; @@ -52,15 +53,14 @@ import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException; +import java.text.DecimalFormat; import java.util.ArrayList; import java.util.Enumeration; -import java.util.HashSet; import java.util.List; import java.util.Locale; -import java.util.Set; +import java.util.regex.Pattern; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; -import java.util.regex.Pattern; public class Utils { @@ -162,6 +162,20 @@ public class Utils { return new int[]{ major, minor }; } + public static long availableFreeSpace() { + StatFs stats = new StatFs(Environment.getDataDirectory().getAbsolutePath()); + return stats.getAvailableBlocksLong() * stats.getBlockSizeLong(); + } + + // https://stackoverflow.com/a/28527441 + public static String getFileSize(long size) { + if (size <= 0) + return "0"; + final String[] units = new String[] { "B", "KB", "MB", "GB", "TB" }; + int digitGroups = (int) (Math.log10(size) / Math.log10(1024)); + return new DecimalFormat("#,##0.#").format(size / Math.pow(1024, digitGroups)) + " " + units[digitGroups]; + } + public static boolean canInstall(UpdateBaseInfo update) { return (SystemProperties.getBoolean(Constants.PROP_UPDATER_ALLOW_DOWNGRADING, false) || update.getTimestamp() > SystemProperties.getLong(Constants.PROP_BUILD_DATE, 0));