diff --git a/build.gradle b/build.gradle index 52037e0136..da2bdf2bb0 100644 --- a/build.gradle +++ b/build.gradle @@ -127,7 +127,7 @@ android { compileSdkVersion 29 defaultConfig { - minSdkVersion 18 + minSdkVersion 19 targetSdkVersion 29 // arguments to be passed to functional tests diff --git a/src/androidTest/java/com/owncloud/android/util/EncryptionTestIT.java b/src/androidTest/java/com/owncloud/android/util/EncryptionTestIT.java index 802eb789a8..b16a5b4c68 100644 --- a/src/androidTest/java/com/owncloud/android/util/EncryptionTestIT.java +++ b/src/androidTest/java/com/owncloud/android/util/EncryptionTestIT.java @@ -21,7 +21,6 @@ package com.owncloud.android.util; -import android.os.Build; import android.text.TextUtils; import com.google.gson.JsonElement; @@ -53,7 +52,6 @@ import java.util.HashSet; import java.util.Random; import java.util.Set; -import androidx.annotation.RequiresApi; import androidx.test.runner.AndroidJUnit4; import static androidx.test.InstrumentationRegistry.getInstrumentation; @@ -82,7 +80,6 @@ import static junit.framework.Assert.assertFalse; import static junit.framework.Assert.assertTrue; import static org.junit.Assert.assertEquals; -@RequiresApi(api = Build.VERSION_CODES.KITKAT) @RunWith(AndroidJUnit4.class) public class EncryptionTestIT { private String privateKey = "MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAo" + diff --git a/src/main/AndroidManifest.xml b/src/main/AndroidManifest.xml index 3ccc2b232c..484ecb2d9f 100644 --- a/src/main/AndroidManifest.xml +++ b/src/main/AndroidManifest.xml @@ -257,7 +257,7 @@ android:exported="true" android:grantUriPermissions="true" android:permission="android.permission.MANAGE_DOCUMENTS" - android:enabled="@bool/atLeastKitKat"> + android:enabled="true"> diff --git a/src/main/java/com/owncloud/android/operations/CreateFolderOperation.java b/src/main/java/com/owncloud/android/operations/CreateFolderOperation.java index 70195c9077..2ea40e7292 100644 --- a/src/main/java/com/owncloud/android/operations/CreateFolderOperation.java +++ b/src/main/java/com/owncloud/android/operations/CreateFolderOperation.java @@ -22,7 +22,6 @@ package com.owncloud.android.operations; import android.content.Context; -import android.os.Build; import android.util.Pair; import com.nextcloud.client.account.User; @@ -47,8 +46,6 @@ import com.owncloud.android.utils.MimeType; import java.io.File; import java.util.UUID; -import androidx.annotation.RequiresApi; - import static com.owncloud.android.datamodel.OCFile.PATH_SEPARATOR; import static com.owncloud.android.datamodel.OCFile.ROOT_PATH; @@ -98,18 +95,12 @@ public class CreateFolderOperation extends SyncOperation implements OnRemoteOper boolean encryptedAncestor = FileStorageUtils.checkEncryptionStatus(parent, getStorageManager()); if (encryptedAncestor) { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { - return encryptedCreate(parent, remoteParentPath, client); - } else { - Log_OC.e(TAG, "Encrypted upload on old Android API"); - return new RemoteOperationResult(RemoteOperationResult.ResultCode.OLD_ANDROID_API); - } + return encryptedCreate(parent, remoteParentPath, client); } else { return normalCreate(client); } } - @RequiresApi(api = Build.VERSION_CODES.KITKAT) private RemoteOperationResult encryptedCreate(OCFile parent, String remoteParentPath, OwnCloudClient client) { ArbitraryDataProvider arbitraryDataProvider = new ArbitraryDataProvider(context.getContentResolver()); String privateKey = arbitraryDataProvider.getValue(user.getAccountName(), EncryptionUtils.PRIVATE_KEY); diff --git a/src/main/java/com/owncloud/android/operations/DownloadFileOperation.java b/src/main/java/com/owncloud/android/operations/DownloadFileOperation.java index 393c5fc342..ec2dfe39f7 100644 --- a/src/main/java/com/owncloud/android/operations/DownloadFileOperation.java +++ b/src/main/java/com/owncloud/android/operations/DownloadFileOperation.java @@ -176,7 +176,7 @@ public class DownloadFileOperation extends RemoteOperation { } // decrypt file - if (file.isEncrypted() && android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) { + if (file.isEncrypted()) { FileDataStorageManager fileDataStorageManager = new FileDataStorageManager(account, context.getContentResolver()); OCFile parent = fileDataStorageManager.getFileByPath(file.getParentRemotePath()); diff --git a/src/main/java/com/owncloud/android/operations/RefreshFolderOperation.java b/src/main/java/com/owncloud/android/operations/RefreshFolderOperation.java index 0b6264f252..7db7e8c302 100644 --- a/src/main/java/com/owncloud/android/operations/RefreshFolderOperation.java +++ b/src/main/java/com/owncloud/android/operations/RefreshFolderOperation.java @@ -500,7 +500,7 @@ public class RefreshFolderOperation extends RemoteOperation { Account account, Context context) { DecryptedFolderMetadata metadata; - if (encryptedAncestor && android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) { + if (encryptedAncestor) { metadata = EncryptionUtils.downloadFolderMetadata(localFolder, client, context, account); } else { metadata = null; diff --git a/src/main/java/com/owncloud/android/operations/RemoveFileOperation.java b/src/main/java/com/owncloud/android/operations/RemoveFileOperation.java index 3a191417dc..c29d133ba0 100644 --- a/src/main/java/com/owncloud/android/operations/RemoveFileOperation.java +++ b/src/main/java/com/owncloud/android/operations/RemoveFileOperation.java @@ -97,8 +97,7 @@ public class RemoveFileOperation extends SyncOperation { boolean localRemovalFailed = false; if (!onlyLocalCopy) { - if (fileToRemove.isEncrypted() && - android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) { + if (fileToRemove.isEncrypted()) { OCFile parent = getStorageManager().getFileByPath(fileToRemove.getParentRemotePath()); operation = new RemoveRemoteEncryptedFileOperation(fileToRemove.getRemotePath(), parent.getLocalId(), diff --git a/src/main/java/com/owncloud/android/operations/RemoveRemoteEncryptedFileOperation.java b/src/main/java/com/owncloud/android/operations/RemoveRemoteEncryptedFileOperation.java index ba93a7b731..d0bc268b5b 100644 --- a/src/main/java/com/owncloud/android/operations/RemoveRemoteEncryptedFileOperation.java +++ b/src/main/java/com/owncloud/android/operations/RemoveRemoteEncryptedFileOperation.java @@ -23,7 +23,6 @@ package com.owncloud.android.operations; import android.accounts.Account; import android.content.Context; -import android.os.Build; import com.google.gson.reflect.TypeToken; import com.owncloud.android.datamodel.ArbitraryDataProvider; @@ -54,12 +53,9 @@ import javax.crypto.BadPaddingException; import javax.crypto.IllegalBlockSizeException; import javax.crypto.NoSuchPaddingException; -import androidx.annotation.RequiresApi; - /** * Remote operation performing the removal of a remote encrypted file or folder */ -@RequiresApi(api = Build.VERSION_CODES.KITKAT) public class RemoveRemoteEncryptedFileOperation extends RemoteOperation { private static final String TAG = RemoveRemoteEncryptedFileOperation.class.getSimpleName(); diff --git a/src/main/java/com/owncloud/android/operations/UploadFileOperation.java b/src/main/java/com/owncloud/android/operations/UploadFileOperation.java index f1bbb9ae22..e009581979 100644 --- a/src/main/java/com/owncloud/android/operations/UploadFileOperation.java +++ b/src/main/java/com/owncloud/android/operations/UploadFileOperation.java @@ -430,12 +430,7 @@ public class UploadFileOperation extends SyncOperation { if (encryptedAncestor) { Log_OC.d(TAG, "encrypted upload"); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { - return encryptedUpload(client, parent); - } else { - Log_OC.e(TAG, "Encrypted upload on old Android API"); - return new RemoteOperationResult(ResultCode.OLD_ANDROID_API); - } + return encryptedUpload(client, parent); } else { Log_OC.d(TAG, "normal upload"); return normalUpload(client); @@ -443,7 +438,6 @@ public class UploadFileOperation extends SyncOperation { } @SuppressLint("AndroidLintUseSparseArrays") // gson cannot handle sparse arrays easily, therefore use hashmap - @RequiresApi(api = Build.VERSION_CODES.KITKAT) private RemoteOperationResult encryptedUpload(OwnCloudClient client, OCFile parentFile) { RemoteOperationResult result = null; File temporalFile = null; diff --git a/src/main/java/com/owncloud/android/providers/DocumentsStorageProvider.java b/src/main/java/com/owncloud/android/providers/DocumentsStorageProvider.java index 3109523d95..b262970865 100644 --- a/src/main/java/com/owncloud/android/providers/DocumentsStorageProvider.java +++ b/src/main/java/com/owncloud/android/providers/DocumentsStorageProvider.java @@ -96,7 +96,6 @@ import static com.owncloud.android.datamodel.OCFile.PATH_SEPARATOR; import static com.owncloud.android.datamodel.OCFile.ROOT_PATH; import static com.owncloud.android.files.services.FileUploader.LOCAL_BEHAVIOUR_MOVE; -@TargetApi(Build.VERSION_CODES.KITKAT) public class DocumentsStorageProvider extends DocumentsProvider { private static final String TAG = DocumentsStorageProvider.class.getSimpleName(); @@ -135,11 +134,9 @@ public class DocumentsStorageProvider extends DocumentsProvider { } public static void notifyRootsChanged(Context context) { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { - String authority = context.getString(R.string.document_provider_authority); - Uri rootsUri = DocumentsContract.buildRootsUri(authority); - context.getContentResolver().notifyChange(rootsUri, null); - } + String authority = context.getString(R.string.document_provider_authority); + Uri rootsUri = DocumentsContract.buildRootsUri(authority); + context.getContentResolver().notifyChange(rootsUri, null); } @Override diff --git a/src/main/java/com/owncloud/android/ui/activity/ExternalSiteWebView.java b/src/main/java/com/owncloud/android/ui/activity/ExternalSiteWebView.java index 8540fec86f..8a9dfb6bbd 100644 --- a/src/main/java/com/owncloud/android/ui/activity/ExternalSiteWebView.java +++ b/src/main/java/com/owncloud/android/ui/activity/ExternalSiteWebView.java @@ -23,7 +23,6 @@ package com.owncloud.android.ui.activity; import android.annotation.SuppressLint; import android.content.pm.ApplicationInfo; -import android.os.Build; import android.os.Bundle; import android.text.TextUtils; import android.view.MenuItem; @@ -99,9 +98,8 @@ public class ExternalSiteWebView extends FileActivity { // allow debugging (when building the debug version); see details in // https://developers.google.com/web/tools/chrome-devtools/remote-debugging/webviews - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT && - ((getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0 || - getResources().getBoolean(R.bool.is_beta))) { + if ((getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0 || + getResources().getBoolean(R.bool.is_beta)) { Log_OC.d(this, "Enable debug for webView"); WebView.setWebContentsDebuggingEnabled(true); } diff --git a/src/main/java/com/owncloud/android/ui/fragment/OCFileListFragment.java b/src/main/java/com/owncloud/android/ui/fragment/OCFileListFragment.java index 15d5e4e17c..b5c4656a1d 100644 --- a/src/main/java/com/owncloud/android/ui/fragment/OCFileListFragment.java +++ b/src/main/java/com/owncloud/android/ui/fragment/OCFileListFragment.java @@ -918,13 +918,6 @@ public class OCFileListFragment extends ExtendedListFragment implements resetHeaderScrollingState(); if (file.isEncrypted()) { - // check if API >= 19 - if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.KITKAT) { - Snackbar.make(getRecyclerView(), R.string.end_to_end_encryption_not_supported, - Snackbar.LENGTH_LONG).show(); - return; - } - User user = ((FileActivity) mContainerActivity).getUser().orElseThrow(RuntimeException::new); // check if e2e app is enabled diff --git a/src/main/java/com/owncloud/android/utils/EncryptionUtils.java b/src/main/java/com/owncloud/android/utils/EncryptionUtils.java index bdc31ddf5f..f02c7c52e2 100644 --- a/src/main/java/com/owncloud/android/utils/EncryptionUtils.java +++ b/src/main/java/com/owncloud/android/utils/EncryptionUtils.java @@ -23,7 +23,6 @@ package com.owncloud.android.utils; import android.accounts.Account; import android.content.Context; -import android.os.Build; import android.text.TextUtils; import android.util.Base64; import android.util.Pair; @@ -92,7 +91,6 @@ import javax.crypto.spec.PBEKeySpec; import javax.crypto.spec.SecretKeySpec; import androidx.annotation.Nullable; -import androidx.annotation.RequiresApi; import androidx.annotation.VisibleForTesting; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; @@ -144,7 +142,6 @@ public final class EncryptionUtils { * @param decryptedFolderMetadata folder metaData to encrypt * @return EncryptedFolderMetadata encrypted folder metadata */ - @RequiresApi(api = Build.VERSION_CODES.KITKAT) public static EncryptedFolderMetadata encryptFolderMetadata(DecryptedFolderMetadata decryptedFolderMetadata, String privateKey) throws NoSuchAlgorithmException, InvalidKeyException, @@ -183,7 +180,6 @@ public final class EncryptionUtils { /* * decrypt folder metaData with private key */ - @RequiresApi(api = Build.VERSION_CODES.KITKAT) public static DecryptedFolderMetadata decryptFolderMetaData(EncryptedFolderMetadata encryptedFolderMetadata, String privateKey) throws NoSuchAlgorithmException, InvalidKeyException, @@ -225,7 +221,6 @@ public final class EncryptionUtils { * * @return decrypted metadata or null */ - @RequiresApi(api = Build.VERSION_CODES.KITKAT) public static @Nullable DecryptedFolderMetadata downloadFolderMetadata(OCFile folder, OwnCloudClient client, Context context, Account account) { @@ -291,7 +286,6 @@ public final class EncryptionUtils { * @param iv initialization vector, either from metadata or {@link EncryptionUtils#randomBytes(int)} * @return encryptedFile with encryptedBytes and authenticationTag */ - @RequiresApi(api = Build.VERSION_CODES.KITKAT) public static EncryptedFile encryptFile(OCFile ocFile, byte[] encryptionKeyBytes, byte[] iv) throws NoSuchAlgorithmException, InvalidAlgorithmParameterException, NoSuchPaddingException, InvalidKeyException, @@ -307,7 +301,6 @@ public final class EncryptionUtils { * @param iv initialization vector, either from metadata or {@link EncryptionUtils#randomBytes(int)} * @return encryptedFile with encryptedBytes and authenticationTag */ - @RequiresApi(api = Build.VERSION_CODES.KITKAT) public static EncryptedFile encryptFile(File file, byte[] encryptionKeyBytes, byte[] iv) throws NoSuchAlgorithmException, InvalidAlgorithmParameterException, NoSuchPaddingException, InvalidKeyException, @@ -338,7 +331,6 @@ public final class EncryptionUtils { * @param authenticationTag authenticationTag from metadata * @return decrypted byte[] */ - @RequiresApi(api = Build.VERSION_CODES.KITKAT) public static byte[] decryptFile(File file, byte[] encryptionKeyBytes, byte[] iv, byte[] authenticationTag) throws NoSuchAlgorithmException, InvalidAlgorithmParameterException, NoSuchPaddingException, InvalidKeyException, @@ -383,7 +375,6 @@ public final class EncryptionUtils { * @param cert contains public key in it * @return encrypted string */ - @RequiresApi(api = Build.VERSION_CODES.KITKAT) public static String encryptStringAsymmetric(String string, String cert) throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, @@ -419,7 +410,6 @@ public final class EncryptionUtils { * @param privateKeyString private key * @return decrypted string */ - @RequiresApi(api = Build.VERSION_CODES.KITKAT) public static String decryptStringAsymmetric(String string, String privateKeyString) throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, @@ -449,7 +439,6 @@ public final class EncryptionUtils { * @param encryptionKeyBytes key, either from metadata or {@link EncryptionUtils#generateKey()} * @return encrypted string */ - @RequiresApi(api = Build.VERSION_CODES.KITKAT) public static String encryptStringSymmetric(String string, byte[] encryptionKeyBytes) throws NoSuchPaddingException, InvalidKeyException, @@ -460,7 +449,6 @@ public final class EncryptionUtils { return encryptStringSymmetric(string, encryptionKeyBytes, ivDelimiter); } - @RequiresApi(api = Build.VERSION_CODES.KITKAT) @VisibleForTesting public static String encryptStringSymmetricOld(String string, byte[] encryptionKeyBytes) throws NoSuchPaddingException, @@ -472,7 +460,6 @@ public final class EncryptionUtils { return encryptStringSymmetric(string, encryptionKeyBytes, ivDelimiterOld); } - @RequiresApi(api = Build.VERSION_CODES.KITKAT) private static String encryptStringSymmetric(String string, byte[] encryptionKeyBytes, String delimiter) @@ -508,7 +495,6 @@ public final class EncryptionUtils { * @param encryptionKeyBytes key from metadata * @return decrypted string */ - @RequiresApi(api = Build.VERSION_CODES.KITKAT) public static String decryptStringSymmetric(String string, byte[] encryptionKeyBytes) throws NoSuchAlgorithmException, InvalidAlgorithmParameterException, NoSuchPaddingException, InvalidKeyException, @@ -805,7 +791,6 @@ public final class EncryptionUtils { * @param parentFile file metadata should be retrieved for * @return Pair: boolean: true: metadata already exists, false: metadata new created */ - @RequiresApi(api = Build.VERSION_CODES.KITKAT) public static Pair retrieveMetadata(OCFile parentFile, OwnCloudClient client, String privateKey, diff --git a/src/main/java/com/owncloud/android/utils/FileStorageUtils.java b/src/main/java/com/owncloud/android/utils/FileStorageUtils.java index 01d3ba6754..b4e0ae8a4a 100644 --- a/src/main/java/com/owncloud/android/utils/FileStorageUtils.java +++ b/src/main/java/com/owncloud/android/utils/FileStorageUtils.java @@ -526,14 +526,13 @@ public final class FileStorageUtils { if (SDK_INT >= Build.VERSION_CODES.M && checkStoragePermission(context)) { rv.clear(); } - if (SDK_INT >= Build.VERSION_CODES.KITKAT) { - String strings[] = getExtSdCardPathsForActivity(context); - File f; - for (String s : strings) { - f = new File(s); - if (!rv.contains(s) && canListFiles(f)) { - rv.add(s); - } + + String[] extSdCardPaths = getExtSdCardPathsForActivity(context); + File f; + for (String extSdCardPath : extSdCardPaths) { + f = new File(extSdCardPath); + if (!rv.contains(extSdCardPath) && canListFiles(f)) { + rv.add(extSdCardPath); } } @@ -601,7 +600,6 @@ public final class FileStorageUtils { * Taken from https://github.com/TeamAmaze/AmazeFileManager/blob/616f2a696823ab0e64ea7a017602dc08e783162e/app/src * /main/java/com/amaze/filemanager/filesystem/FileUtil.java#L764 on 14.02.2019 */ - @TargetApi(Build.VERSION_CODES.KITKAT) private static String[] getExtSdCardPathsForActivity(Context context) { List paths = new ArrayList<>(); for (File file : context.getExternalFilesDirs("external")) { @@ -652,15 +650,11 @@ public final class FileStorageUtils { public static final StandardDirectory DOCUMENTS; static { - if (SDK_INT > Build.VERSION_CODES.KITKAT) { - DOCUMENTS = new StandardDirectory( - Environment.DIRECTORY_DOCUMENTS, - R.string.storage_documents, - R.drawable.ic_document_grey600 - ); - } else { - DOCUMENTS = null; - } + DOCUMENTS = new StandardDirectory( + Environment.DIRECTORY_DOCUMENTS, + R.string.storage_documents, + R.drawable.ic_document_grey600 + ); } public static final StandardDirectory DOWNLOADS = new StandardDirectory( diff --git a/src/main/java/com/owncloud/android/utils/ThemeUtils.java b/src/main/java/com/owncloud/android/utils/ThemeUtils.java index ccf604cd1e..cff4821edd 100644 --- a/src/main/java/com/owncloud/android/utils/ThemeUtils.java +++ b/src/main/java/com/owncloud/android/utils/ThemeUtils.java @@ -293,16 +293,12 @@ public final class ThemeUtils { */ public static void setColoredTitle(@Nullable ActionBar actionBar, String title, Context context) { if (actionBar != null) { - if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.KITKAT) { - actionBar.setTitle(title); - } else { - Spannable text = new SpannableString(title); - text.setSpan(new ForegroundColorSpan(appBarPrimaryFontColor(context)), - 0, - text.length(), - Spannable.SPAN_INCLUSIVE_INCLUSIVE); - actionBar.setTitle(text); - } + Spannable text = new SpannableString(title); + text.setSpan(new ForegroundColorSpan(appBarPrimaryFontColor(context)), + 0, + text.length(), + Spannable.SPAN_INCLUSIVE_INCLUSIVE); + actionBar.setTitle(text); } } @@ -318,16 +314,12 @@ public final class ThemeUtils { */ public static void setColoredSubtitle(@Nullable ActionBar actionBar, String title, Context context) { if (actionBar != null) { - if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.KITKAT) { - actionBar.setSubtitle(title); - } else { - Spannable text = new SpannableString(title); - text.setSpan(new ForegroundColorSpan(appBarSecondaryFontColor(context)), - 0, - text.length(), - Spannable.SPAN_INCLUSIVE_INCLUSIVE); - actionBar.setSubtitle(text); - } + Spannable text = new SpannableString(title); + text.setSpan(new ForegroundColorSpan(appBarSecondaryFontColor(context)), + 0, + text.length(), + Spannable.SPAN_INCLUSIVE_INCLUSIVE); + actionBar.setSubtitle(text); } } diff --git a/src/main/java/org/nextcloud/providers/cursors/FileCursor.java b/src/main/java/org/nextcloud/providers/cursors/FileCursor.java index a247c517f1..f69de09b47 100644 --- a/src/main/java/org/nextcloud/providers/cursors/FileCursor.java +++ b/src/main/java/org/nextcloud/providers/cursors/FileCursor.java @@ -20,7 +20,6 @@ package org.nextcloud.providers.cursors; -import android.annotation.TargetApi; import android.database.MatrixCursor; import android.os.AsyncTask; import android.os.Build; @@ -31,7 +30,6 @@ import com.owncloud.android.datamodel.OCFile; import com.owncloud.android.providers.DocumentsStorageProvider; import com.owncloud.android.utils.MimeTypeUtil; -@TargetApi(Build.VERSION_CODES.KITKAT) public class FileCursor extends MatrixCursor { static final String[] DEFAULT_DOCUMENT_PROJECTION = new String[]{ diff --git a/src/main/java/org/nextcloud/providers/cursors/RootCursor.java b/src/main/java/org/nextcloud/providers/cursors/RootCursor.java index c992e582be..86b6f868fc 100644 --- a/src/main/java/org/nextcloud/providers/cursors/RootCursor.java +++ b/src/main/java/org/nextcloud/providers/cursors/RootCursor.java @@ -21,17 +21,13 @@ package org.nextcloud.providers.cursors; import android.accounts.Account; -import android.annotation.TargetApi; import android.content.Context; import android.database.MatrixCursor; -import android.os.Build; import android.provider.DocumentsContract.Root; import com.owncloud.android.R; import com.owncloud.android.providers.DocumentsStorageProvider; - -@TargetApi(Build.VERSION_CODES.KITKAT) public class RootCursor extends MatrixCursor { private static final String[] DEFAULT_ROOT_PROJECTION = new String[] { diff --git a/src/main/res/values-v19/bools.xml b/src/main/res/values-v19/bools.xml deleted file mode 100644 index dad63140a3..0000000000 --- a/src/main/res/values-v19/bools.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - - true - \ No newline at end of file diff --git a/src/main/res/values/bools.xml b/src/main/res/values/bools.xml index e070bbcfc0..1e15f53708 100644 --- a/src/main/res/values/bools.xml +++ b/src/main/res/values/bools.xml @@ -19,5 +19,4 @@ false - false - \ No newline at end of file +