diff --git a/app/src/main/java/com/termux/app/TermuxActivity.java b/app/src/main/java/com/termux/app/TermuxActivity.java index 751818dbc1..dda72b7c2b 100644 --- a/app/src/main/java/com/termux/app/TermuxActivity.java +++ b/app/src/main/java/com/termux/app/TermuxActivity.java @@ -293,6 +293,8 @@ public void onClick(View v) { mTerminalView.checkForTypeface(); mTerminalView.checkForColors(); + + TermuxInstaller.setupStorageSymlink(this); } /** diff --git a/app/src/main/java/com/termux/app/TermuxInstaller.java b/app/src/main/java/com/termux/app/TermuxInstaller.java index 1e76b916ad..a98a89e110 100644 --- a/app/src/main/java/com/termux/app/TermuxInstaller.java +++ b/app/src/main/java/com/termux/app/TermuxInstaller.java @@ -1,16 +1,5 @@ package com.termux.app; -import java.io.BufferedReader; -import java.io.File; -import java.io.FileOutputStream; -import java.io.InputStreamReader; -import java.net.MalformedURLException; -import java.net.URL; -import java.util.ArrayList; -import java.util.List; -import java.util.zip.ZipEntry; -import java.util.zip.ZipInputStream; - import android.app.Activity; import android.app.AlertDialog; import android.app.ProgressDialog; @@ -26,6 +15,17 @@ import com.termux.R; import com.termux.terminal.EmulatorDebug; +import java.io.BufferedReader; +import java.io.File; +import java.io.FileOutputStream; +import java.io.InputStreamReader; +import java.net.MalformedURLException; +import java.net.URL; +import java.util.ArrayList; +import java.util.List; +import java.util.zip.ZipEntry; +import java.util.zip.ZipInputStream; + /** * Install the Termux bootstrap packages if necessary by following the below steps: * @@ -200,4 +200,36 @@ static void deleteFolder(File fileOrDirectory) { } } + public static void setupStorageSymlink(final Context context) { + final File[] dirs = context.getExternalFilesDirs(null); + if (dirs == null || dirs.length < 2) return; + new Thread() { + public void run() { + try { + final File externalDir = dirs[1]; + File homeDir = new File(TermuxService.HOME_PATH); + homeDir.mkdirs(); + File externalLink = new File(homeDir, "storage"); + + if (externalLink.exists()) { + if (externalLink.getCanonicalPath().equals(externalDir.getPath())) { + // Keeping existing link. + return; + } else { + // Removing old link to give place to new. + if (!externalLink.delete()) { + Log.e("termux", "Unable to remove old $HOME/storage to give place for new"); + return; + } + } + } + + Os.symlink(externalDir.getAbsolutePath(), externalLink.getAbsolutePath()); + } catch (Exception e) { + Log.e("termux", "Error setting up link", e); + } + } + }.start(); + } + }