From 20ebc00e5e57f63c6c8f59dd6afb86b06f83611f Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Fri, 21 Dec 2018 22:56:21 +0100 Subject: [PATCH 1/4] improved log warning about TargetSdkVersion mismatch --- .../main/java/org/fdroid/fdroid/installer/ApkVerifier.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/org/fdroid/fdroid/installer/ApkVerifier.java b/app/src/main/java/org/fdroid/fdroid/installer/ApkVerifier.java index e59ba3678..fc827122a 100644 --- a/app/src/main/java/org/fdroid/fdroid/installer/ApkVerifier.java +++ b/app/src/main/java/org/fdroid/fdroid/installer/ApkVerifier.java @@ -26,7 +26,6 @@ import android.net.Uri; import android.support.annotation.Nullable; import android.text.TextUtils; import android.util.Log; - import org.fdroid.fdroid.Utils; import org.fdroid.fdroid.data.Apk; @@ -91,9 +90,11 @@ class ApkVerifier { Utils.debugLog(TAG, "expectedTargetSdkVersion: " + expectedTargetSdkVersion); if (expectedTargetSdkVersion == Apk.SDK_VERSION_MIN_VALUE) { // NOTE: In old fdroidserver versions, targetSdkVersion was not stored inside the repo! - Log.w(TAG, "Skipping check for targetSdkVersion, not available in this repo!"); + Log.w(TAG, "Skipping check for targetSdkVersion, not available in this app or repo!"); } else if (localTargetSdkVersion != expectedTargetSdkVersion) { - throw new ApkVerificationException("TargetSdkVersion of apk file is not the expected targetSdkVersion!"); + throw new ApkVerificationException( + String.format("TargetSdkVersion of apk file (%d) is not the expected targetSdkVersion (%d)!", + localTargetSdkVersion, expectedTargetSdkVersion)); } } From 43ee48ac2b4a5d466ab0ba97d23b4ab62c703e97 Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Fri, 21 Dec 2018 18:06:25 +0100 Subject: [PATCH 2/4] only show "SDCards can be used to swap" if an SD Card is present --- .../fdroid/views/main/NearbyViewBinder.java | 23 ++++++++++++------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/app/src/full/java/org/fdroid/fdroid/views/main/NearbyViewBinder.java b/app/src/full/java/org/fdroid/fdroid/views/main/NearbyViewBinder.java index 0df89f884..1e8693a7d 100644 --- a/app/src/full/java/org/fdroid/fdroid/views/main/NearbyViewBinder.java +++ b/app/src/full/java/org/fdroid/fdroid/views/main/NearbyViewBinder.java @@ -85,11 +85,15 @@ class NearbyViewBinder { Environment.isExternalStorageRemovable(activity.getExternalFilesDir(""))); File[] dirs = activity.getExternalFilesDirs(""); if (dirs != null) { - for (File f : dirs) { - if (f != null && Environment.isExternalStorageRemovable(f)) { - // remove Android/data/org.fdroid.fdroid/files to get root - externalStorage = f.getParentFile().getParentFile().getParentFile().getParentFile(); - break; + for (File dir : dirs) { + if (dir != null && Environment.isExternalStorageRemovable(dir)) { + String state = Environment.getExternalStorageState(dir); + if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state) + || Environment.MEDIA_MOUNTED.equals(state)) { + // remove Android/data/org.fdroid.fdroid/files to get root + externalStorage = dir.getParentFile().getParentFile().getParentFile().getParentFile(); + break; + } } } } @@ -100,7 +104,11 @@ class NearbyViewBinder { externalStorage = Environment.getExternalStorageDirectory(); } - if (externalStorage != null) { + final String writeExternalStorage = Manifest.permission.WRITE_EXTERNAL_STORAGE; + + if (externalStorage != null + || PackageManager.PERMISSION_GRANTED + != ContextCompat.checkSelfPermission(activity, writeExternalStorage)) { nearbySplash.setVisibility(View.GONE); View readExternalStorage = swapView.findViewById(R.id.readExternalStorage); readExternalStorage.setVisibility(View.VISIBLE); @@ -116,9 +124,8 @@ class NearbyViewBinder { msg += "|" + f.getName(); } Toast.makeText(activity, msg, Toast.LENGTH_LONG).show(); - final String writeExternalStorage = Manifest.permission.WRITE_EXTERNAL_STORAGE; if (Build.VERSION.SDK_INT >= 23 - && !externalStorage.canRead() + && (externalStorage == null || !externalStorage.canRead()) && PackageManager.PERMISSION_GRANTED != ContextCompat.checkSelfPermission(activity, writeExternalStorage)) { ActivityCompat.requestPermissions(activity, new String[]{writeExternalStorage}, From c97424f05481e27b4d61688900958728c0e6d21f Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Fri, 21 Dec 2018 18:08:23 +0100 Subject: [PATCH 3/4] show Toast when scanning an SDCard for repos --- .../fdroid/fdroid/views/main/NearbyViewBinder.java | 11 +++-------- app/src/main/res/values/strings.xml | 1 + 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/app/src/full/java/org/fdroid/fdroid/views/main/NearbyViewBinder.java b/app/src/full/java/org/fdroid/fdroid/views/main/NearbyViewBinder.java index 1e8693a7d..bf9684911 100644 --- a/app/src/full/java/org/fdroid/fdroid/views/main/NearbyViewBinder.java +++ b/app/src/full/java/org/fdroid/fdroid/views/main/NearbyViewBinder.java @@ -117,13 +117,6 @@ class NearbyViewBinder { @RequiresApi(api = 21) @Override public void onClick(View v) { - File storage = externalStorage.getParentFile(); - File[] files = storage.listFiles(); - String msg = ""; - if (files != null) for (File f : files) { - msg += "|" + f.getName(); - } - Toast.makeText(activity, msg, Toast.LENGTH_LONG).show(); if (Build.VERSION.SDK_INT >= 23 && (externalStorage == null || !externalStorage.canRead()) && PackageManager.PERMISSION_GRANTED @@ -131,11 +124,13 @@ class NearbyViewBinder { ActivityCompat.requestPermissions(activity, new String[]{writeExternalStorage}, MainActivity.REQUEST_STORAGE_PERMISSIONS); } else { + Toast.makeText(activity, + activity.getString(R.string.scan_removable_storage_toast, externalStorage), + Toast.LENGTH_SHORT).show(); SDCardScannerService.scan(activity); } } }); - } } } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index b7bc47db7..f85b4273a 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -60,6 +60,7 @@ The advertised title of your local repo: %s Use encrypted HTTPS:// connection for local repo Scan removable storage + Scanning %s… Look for package repos on removable storage like SD Cards and USB thumb drives From 0a306a4df2ea0915ce69d4cb3429fd06e4ec208f Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Fri, 21 Dec 2018 22:20:00 +0100 Subject: [PATCH 4/4] after requesting Storage permissions, start SDCard scan --- .../java/org/fdroid/fdroid/views/main/MainActivity.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/app/src/main/java/org/fdroid/fdroid/views/main/MainActivity.java b/app/src/main/java/org/fdroid/fdroid/views/main/MainActivity.java index 444765855..26b506e99 100644 --- a/app/src/main/java/org/fdroid/fdroid/views/main/MainActivity.java +++ b/app/src/main/java/org/fdroid/fdroid/views/main/MainActivity.java @@ -56,6 +56,7 @@ import org.fdroid.fdroid.R; import org.fdroid.fdroid.UpdateService; import org.fdroid.fdroid.Utils; import org.fdroid.fdroid.data.NewRepoConfig; +import org.fdroid.fdroid.localrepo.SDCardScannerService; import org.fdroid.fdroid.views.AppDetailsActivity; import org.fdroid.fdroid.views.ManageReposActivity; import org.fdroid.fdroid.views.apps.AppListActivity; @@ -248,6 +249,11 @@ public class MainActivity extends AppCompatActivity implements BottomNavigationB super.onRequestPermissionsResult(requestCode, permissions, grantResults); if (requestCode == REQUEST_LOCATION_PERMISSIONS) { startActivity(new Intent(this, SwapWorkflowActivity.class)); + } else if (requestCode == REQUEST_STORAGE_PERMISSIONS) { + Toast.makeText(this, + this.getString(R.string.scan_removable_storage_toast, ""), + Toast.LENGTH_SHORT).show(); + SDCardScannerService.scan(this); } }