Search in sources :

Example 46 with Apk

use of org.fdroid.fdroid.data.Apk in project fdroidclient by f-droid.

the class AppDetailsRecyclerViewAdapter method shouldShowPermissions.

private boolean shouldShowPermissions() {
    // Figure out if we should show permissions section
    Apk curApk = getSuggestedApk();
    final boolean curApkCompatible = curApk != null && curApk.compatible;
    return versions.size() > 0 && (curApkCompatible || Preferences.get().showIncompatibleVersions());
}
Also used : Apk(org.fdroid.fdroid.data.Apk)

Example 47 with Apk

use of org.fdroid.fdroid.data.Apk in project fdroidclient by f-droid.

the class AppDetailsRecyclerViewAdapter method ensureInstalledApkExists.

private void ensureInstalledApkExists(final List<Apk> apks) {
    Apk installedApk = app.getInstalledApk(this.context);
    // is a generated dummy or a proper APK containing data from a repository.
    if (installedApk != null && installedApk.added == null && installedApk.sig == null) {
        installedApk.compatible = true;
        installedApk.sig = app.installedSig;
        installedApk.maxSdkVersion = -1;
        apks.add(installedApk);
    }
}
Also used : Apk(org.fdroid.fdroid.data.Apk)

Example 48 with Apk

use of org.fdroid.fdroid.data.Apk in project fdroidclient by f-droid.

the class ApkVerifierTest method testWithoutPrefix.

@Test
public void testWithoutPrefix() {
    Apk apk = new Apk();
    apk.packageName = "org.fdroid.permissions.sdk14";
    apk.targetSdkVersion = 14;
    ArrayList<String> noPrefixPermissionsList = new ArrayList<>(Arrays.asList("AUTHENTICATE_ACCOUNTS", "MANAGE_ACCOUNTS", "READ_PROFILE", "WRITE_PROFILE", "GET_ACCOUNTS", "READ_CONTACTS", "WRITE_CONTACTS", "WRITE_EXTERNAL_STORAGE", "READ_EXTERNAL_STORAGE", "INTERNET", "ACCESS_NETWORK_STATE", "NFC", "READ_SYNC_SETTINGS", "WRITE_SYNC_SETTINGS", // implied-permission!
    "WRITE_CALL_LOG", // implied-permission!
    "READ_CALL_LOG"));
    if (Build.VERSION.SDK_INT >= 29) {
        noPrefixPermissionsList.add("android.permission.ACCESS_MEDIA_LOCATION");
    }
    String[] noPrefixPermissions = noPrefixPermissionsList.toArray(new String[0]);
    for (int i = 0; i < noPrefixPermissions.length; i++) {
        noPrefixPermissions[i] = RepoXMLHandler.fdroidToAndroidPermission(noPrefixPermissions[i]);
    }
    apk.requestedPermissions = noPrefixPermissions;
    Uri uri = Uri.fromFile(sdk14Apk);
    ApkVerifier apkVerifier = new ApkVerifier(instrumentation.getContext(), uri, apk);
    try {
        apkVerifier.verifyApk();
    } catch (ApkVerifier.ApkVerificationException | ApkVerifier.ApkPermissionUnequalException e) {
        e.printStackTrace();
        fail(e.getMessage());
    }
}
Also used : ArrayList(java.util.ArrayList) Apk(org.fdroid.fdroid.data.Apk) Uri(android.net.Uri) FileCompatTest(org.fdroid.fdroid.compat.FileCompatTest) Test(org.junit.Test)

Example 49 with Apk

use of org.fdroid.fdroid.data.Apk in project fdroidclient by f-droid.

the class ApkVerifierTest method testMissingPermission.

/**
 * Missing permissions are not okay!
 * The user is then not warned about a permission that the apk uses!
 */
@Test
public void testMissingPermission() {
    Apk apk = new Apk();
    apk.packageName = "org.fdroid.permissions.sdk14";
    apk.targetSdkVersion = 14;
    apk.requestedPermissions = new String[] { // "android.permission.AUTHENTICATE_ACCOUNTS",
    "android.permission.MANAGE_ACCOUNTS", "android.permission.READ_PROFILE", "android.permission.WRITE_PROFILE", "android.permission.GET_ACCOUNTS", "android.permission.READ_CONTACTS", "android.permission.WRITE_CONTACTS", "android.permission.WRITE_EXTERNAL_STORAGE", "android.permission.READ_EXTERNAL_STORAGE", "android.permission.INTERNET", "android.permission.ACCESS_NETWORK_STATE", "android.permission.NFC", "android.permission.READ_SYNC_SETTINGS", "android.permission.WRITE_SYNC_SETTINGS", // implied-permission!
    "android.permission.WRITE_CALL_LOG", // implied-permission!
    "android.permission.READ_CALL_LOG" };
    Uri uri = Uri.fromFile(sdk14Apk);
    ApkVerifier apkVerifier = new ApkVerifier(instrumentation.getContext(), uri, apk);
    try {
        apkVerifier.verifyApk();
        fail();
    } catch (ApkVerifier.ApkVerificationException e) {
        e.printStackTrace();
        fail(e.getMessage());
    } catch (ApkVerifier.ApkPermissionUnequalException e) {
        e.printStackTrace();
    }
}
Also used : Apk(org.fdroid.fdroid.data.Apk) Uri(android.net.Uri) FileCompatTest(org.fdroid.fdroid.compat.FileCompatTest) Test(org.junit.Test)

Example 50 with Apk

use of org.fdroid.fdroid.data.Apk in project fdroidclient by f-droid.

the class ApkVerifierTest method testAdditionalPermission.

/**
 * Additional permissions are okay. The user is simply
 * warned about a permission that is not used inside the apk
 */
@Test(expected = ApkVerifier.ApkPermissionUnequalException.class)
public void testAdditionalPermission() throws ApkVerifier.ApkPermissionUnequalException, ApkVerifier.ApkVerificationException {
    Apk apk = new Apk();
    apk.packageName = "org.fdroid.permissions.sdk14";
    apk.targetSdkVersion = 14;
    apk.requestedPermissions = new String[] { "android.permission.AUTHENTICATE_ACCOUNTS", "android.permission.MANAGE_ACCOUNTS", "android.permission.READ_PROFILE", "android.permission.WRITE_PROFILE", "android.permission.GET_ACCOUNTS", "android.permission.READ_CONTACTS", "android.permission.WRITE_CONTACTS", "android.permission.WRITE_EXTERNAL_STORAGE", "android.permission.READ_EXTERNAL_STORAGE", "android.permission.INTERNET", "android.permission.ACCESS_NETWORK_STATE", "android.permission.NFC", "android.permission.READ_SYNC_SETTINGS", "android.permission.WRITE_SYNC_SETTINGS", // implied-permission!
    "android.permission.WRITE_CALL_LOG", // implied-permission!
    "android.permission.READ_CALL_LOG", "android.permission.FAKE_NEW_PERMISSION" };
    Uri uri = Uri.fromFile(sdk14Apk);
    ApkVerifier apkVerifier = new ApkVerifier(instrumentation.getContext(), uri, apk);
    apkVerifier.verifyApk();
}
Also used : Apk(org.fdroid.fdroid.data.Apk) Uri(android.net.Uri) FileCompatTest(org.fdroid.fdroid.compat.FileCompatTest) Test(org.junit.Test)

Aggregations

Apk (org.fdroid.fdroid.data.Apk)63 Test (org.junit.Test)17 Uri (android.net.Uri)16 File (java.io.File)12 Intent (android.content.Intent)11 App (org.fdroid.fdroid.data.App)10 Repo (org.fdroid.fdroid.data.Repo)10 ArrayList (java.util.ArrayList)8 PendingIntent (android.app.PendingIntent)7 Context (android.content.Context)7 PackageInfo (android.content.pm.PackageInfo)7 FileCompatTest (org.fdroid.fdroid.compat.FileCompatTest)7 BroadcastReceiver (android.content.BroadcastReceiver)6 PackageManager (android.content.pm.PackageManager)5 IOException (java.io.IOException)4 HashSet (java.util.HashSet)4 FDroidProviderTest (org.fdroid.fdroid.data.FDroidProviderTest)4 LocalBroadcastManager (androidx.localbroadcastmanager.content.LocalBroadcastManager)3 RepoDetails (org.fdroid.fdroid.mock.RepoDetails)3 SuppressLint (android.annotation.SuppressLint)2