From 2048d6f478a96f85d597f63f8f7ca97460f98f21 Mon Sep 17 00:00:00 2001 From: Torsten Grote <26331-grote@users.noreply.gitlab.com> Date: Fri, 9 Jun 2023 17:24:58 +0000 Subject: [PATCH] Add code style to repo and fix it --- app/build.gradle | 6 +- app/lint.xml | 88 +-- .../java/org/fdroid/fdroid/AssetUtils.java | 5 +- .../org/fdroid/fdroid/LocalizationTest.java | 6 +- .../fdroid/MainActivityEspressoTest.java | 78 +-- .../java/org/fdroid/fdroid/Netstat.java | 45 +- .../java/org/fdroid/fdroid/UiWatchers.java | 122 ++--- .../fdroid/fdroid/compat/FileCompatTest.java | 14 +- .../fdroid/installer/ApkVerifierTest.java | 3 +- .../fdroid/nearby/BonjourManagerTest.java | 4 +- .../fdroid/nearby/LocalHTTPDManagerTest.java | 15 +- .../nearby/PublicSourceDirProviderTest.java | 14 +- .../fdroid/fdroid/net/HttpDownloaderTest.java | 26 +- .../fdroid/updater/SwapRepoEmulatorTest.java | 18 +- .../fdroid/work/CleanCacheWorkerTest.java | 11 +- .../fdroid/work/FDroidMetricsWorkerTest.java | 6 +- .../fdroid/work/WorkManagerTestRule.java | 2 + .../nearby/TreeUriScannerIntentService.java | 3 +- .../fdroid/nearby/WifiStateChangeService.java | 1 + .../fdroid/views/main/MainViewController.java | 14 +- .../fdroid/views/main/NearbyViewBinder.java | 2 +- .../ic_launcher_foreground.xml | 100 ++-- app/src/basic/res/xml/preferences.xml | 247 ++++----- app/src/full/AndroidManifest.xml | 14 +- .../fdroid/nearby/BluetoothManager.java | 6 +- .../fdroid/fdroid/nearby/BonjourManager.java | 7 +- .../org/fdroid/fdroid/nearby/LocalHTTPD.java | 50 +- .../fdroid/nearby/LocalHTTPDManager.java | 4 +- .../fdroid/nearby/LocalRepoKeyStore.java | 6 +- .../fdroid/nearby/LocalRepoManager.java | 6 +- .../fdroid/nearby/LocalRepoService.java | 4 +- .../fdroid/nearby/SDCardScannerService.java | 5 +- .../fdroid/fdroid/nearby/SelectAppsView.java | 20 +- .../fdroid/fdroid/nearby/StartSwapView.java | 25 +- .../org/fdroid/fdroid/nearby/SwapService.java | 64 +-- .../fdroid/fdroid/nearby/SwapSuccessView.java | 28 +- .../org/fdroid/fdroid/nearby/SwapView.java | 5 +- .../fdroid/nearby/SwapWorkflowActivity.java | 108 ++-- .../nearby/TreeUriScannerIntentService.java | 6 +- .../nearby/UsbDeviceAttachedReceiver.java | 3 - .../nearby/UsbDeviceDetachedReceiver.java | 3 - .../fdroid/nearby/WifiStateChangeService.java | 25 +- .../fdroid/nearby/peers/BluetoothPeer.java | 4 +- .../fdroid/nearby/peers/BonjourPeer.java | 4 +- .../fdroid/panic/CalculatorActivity.java | 6 +- .../panic/DestructiveCheckBoxPreference.java | 4 +- .../fdroid/panic/DestructivePreference.java | 4 +- .../org/fdroid/fdroid/panic/ExitActivity.java | 20 +- .../fdroid/fdroid/panic/HidingManager.java | 21 +- .../panic/PanicPreferencesActivity.java | 5 +- .../panic/PanicPreferencesFragment.java | 129 ++--- .../fdroid/panic/PanicResponderActivity.java | 5 +- .../panic/SelectInstalledAppListAdapter.java | 6 +- .../SelectInstalledAppListItemController.java | 8 +- .../panic/SelectInstalledAppsActivity.java | 8 +- .../fdroid/views/main/MainViewController.java | 8 +- .../fdroid/views/main/NearbyViewBinder.java | 90 ++-- app/src/full/res/drawable/check.xml | 4 +- .../res/drawable/ic_add_circle_outline.xml | 6 +- app/src/full/res/drawable/ic_apps.xml | 6 +- .../full/res/drawable/ic_arrow_forward.xml | 13 +- app/src/full/res/drawable/ic_bluetooth.xml | 6 +- .../res/drawable/ic_bluetooth_searching.xml | 6 +- app/src/full/res/drawable/ic_qr_code.xml | 66 +-- .../full/res/drawable/ic_wifi_tethering.xml | 2 +- app/src/full/res/drawable/nearby_splash.xml | 14 +- .../res/layout-sw480dp/start_swap_header.xml | 49 +- .../full/res/layout/activity_calculator.xml | 503 +++++++++--------- .../res/layout/activity_panic_settings.xml | 39 +- app/src/full/res/layout/main_tab_nearby.xml | 87 +-- .../layout/select_local_apps_list_item.xml | 5 +- app/src/full/res/layout/start_swap_header.xml | 12 +- app/src/full/res/layout/swap_activity.xml | 36 +- .../full/res/layout/swap_app_list_item.xml | 152 +++--- .../full/res/layout/swap_confirm_receive.xml | 103 ++-- app/src/full/res/layout/swap_connecting.xml | 61 ++- app/src/full/res/layout/swap_join_wifi.xml | 77 ++- app/src/full/res/layout/swap_nfc.xml | 55 +- .../full/res/layout/swap_peer_list_item.xml | 65 ++- app/src/full/res/layout/swap_select_apps.xml | 23 +- app/src/full/res/layout/swap_send_fdroid.xml | 52 +- app/src/full/res/layout/swap_start_swap.xml | 239 +++++---- app/src/full/res/layout/swap_success.xml | 25 +- app/src/full/res/layout/swap_wifi_qr.xml | 64 +-- app/src/full/res/menu/swap_next.xml | 4 +- app/src/full/res/menu/swap_next_search.xml | 6 +- app/src/full/res/values/attrs.xml | 4 +- app/src/full/res/values/styles.xml | 28 +- app/src/full/res/xml/device_filter.xml | 3 +- app/src/full/res/xml/preferences_panic.xml | 49 +- app/src/main/AndroidManifest.xml | 23 +- .../fdroid/fdroid/AddRepoIntentService.java | 6 +- .../fdroid/fdroid/AppUpdateStatusManager.java | 22 +- .../fdroid/fdroid/CompatibilityChecker.java | 4 +- .../org/fdroid/fdroid/DeleteCacheService.java | 8 +- .../java/org/fdroid/fdroid/FDroidApp.java | 49 +- .../java/org/fdroid/fdroid/Languages.java | 21 +- .../org/fdroid/fdroid/NotificationHelper.java | 28 +- .../java/org/fdroid/fdroid/Preferences.java | 54 +- .../java/org/fdroid/fdroid/UpdateService.java | 35 +- .../main/java/org/fdroid/fdroid/Utils.java | 79 +-- .../org/fdroid/fdroid/compat/FileCompat.java | 8 +- .../fdroid/fdroid/compat/LocaleCompat.java | 3 +- .../main/java/org/fdroid/fdroid/data/Apk.java | 33 +- .../main/java/org/fdroid/fdroid/data/App.java | 34 +- .../org/fdroid/fdroid/data/NewRepoConfig.java | 2 +- .../fdroid/fdroid/data/ObbUrlActivity.java | 4 +- .../org/fdroid/fdroid/data/SanitizedFile.java | 1 - .../org/fdroid/fdroid/installer/ApkCache.java | 4 +- .../fdroid/installer/ApkFileProvider.java | 6 +- .../fdroid/fdroid/installer/ApkVerifier.java | 4 +- .../fdroid/installer/DefaultInstaller.java | 4 +- .../installer/DefaultInstallerActivity.java | 14 +- .../fdroid/installer/ErrorDialogActivity.java | 29 +- .../fdroid/installer/FileInstaller.java | 6 +- .../installer/FileInstallerActivity.java | 71 ++- .../installer/InstallHistoryService.java | 8 +- .../installer/InstallManagerService.java | 12 +- .../fdroid/fdroid/installer/Installer.java | 10 +- .../fdroid/installer/InstallerService.java | 6 +- .../fdroid/installer/ObfInstallerService.java | 4 +- .../fdroid/installer/PrivilegedInstaller.java | 4 +- .../installer/SessionInstallManager.java | 4 +- .../nearby/PublicSourceDirProvider.java | 6 +- .../fdroid/fdroid/nearby/httpish/Request.java | 2 +- .../fdroid/nearby/httpish/Response.java | 13 +- .../fdroid/net/BluetoothDownloader.java | 6 +- .../fdroid/fdroid/net/DownloaderFactory.java | 5 +- .../fdroid/fdroid/net/DownloaderService.java | 13 +- .../fdroid/fdroid/net/FDroidGlideModule.java | 10 +- .../fdroid/fdroid/net/TreeUriDownloader.java | 6 +- .../fdroid/privileged/views/AppDiff.java | 32 +- .../views/AppSecurityPermissions.java | 31 +- .../views/CaffeinatedScrollView.java | 32 +- .../views/InstallConfirmActivity.java | 62 +-- .../fdroid/privileged/views/TabsAdapter.java | 40 +- .../views/UninstallDialogActivity.java | 53 +- .../qr/CameraCharacteristicsChecker.java | 2 +- .../CameraCharacteristicsMaxApiLevel20.java | 50 -- .../CameraCharacteristicsMinApiLevel21.java | 2 +- .../fdroid/views/AppDetailsActivity.java | 61 +-- .../views/AppDetailsRecyclerViewAdapter.java | 249 ++++----- .../fdroid/views/FixAppBarLayoutBehavior.java | 4 +- .../fdroid/views/InstallHistoryActivity.java | 10 +- .../fdroid/views/LiveSeekBarPreference.java | 9 +- .../fdroid/views/ManageReposActivity.java | 133 ++--- .../fdroid/views/PreferencesFragment.java | 184 +++---- .../org/fdroid/fdroid/views/RepoAdapter.java | 5 +- .../fdroid/views/RepoDetailsActivity.java | 122 ++--- .../fdroid/views/ScreenShotsActivity.java | 9 +- .../views/ScreenShotsRecyclerViewAdapter.java | 3 +- .../fdroid/views/SeekBarForegroundThumb.java | 6 +- .../org/fdroid/fdroid/views/StatusBanner.java | 9 +- .../appdetails/AntiFeaturesListingView.java | 16 +- .../fdroid/views/apps/AppListActivity.java | 122 ++--- .../fdroid/views/apps/AppListAdapter.java | 5 +- .../views/apps/AppListItemController.java | 74 ++- .../fdroid/views/apps/AppListItemState.java | 6 +- .../fdroid/views/apps/CategorySpan.java | 8 +- .../views/apps/CategoryTextWatcher.java | 8 +- .../fdroid/views/apps/FeatureImage.java | 9 +- .../apps/StandardAppListItemController.java | 10 +- .../views/categories/AppCardController.java | 11 +- .../views/categories/AppPreviewAdapter.java | 6 +- .../views/categories/CategoryAdapter.java | 18 +- .../views/categories/CategoryController.java | 13 +- .../installed/InstalledAppListAdapter.java | 12 +- .../InstalledAppListItemController.java | 8 +- .../installed/InstalledAppsActivity.java | 50 +- .../views/main/CategoriesViewBinder.java | 55 +- .../fdroid/views/main/LatestAdapter.java | 12 +- .../fdroid/views/main/LatestViewBinder.java | 67 +-- .../fdroid/views/main/MainActivity.java | 13 +- .../fdroid/views/main/MainViewAdapter.java | 12 +- .../fdroid/views/main/SettingsView.java | 7 +- .../fdroid/views/updates/UpdatesAdapter.java | 26 +- .../updates/UpdatesItemTouchCallback.java | 17 +- .../views/updates/UpdatesViewBinder.java | 25 +- .../fdroid/views/updates/items/AppStatus.java | 10 +- .../items/AppStatusListItemController.java | 27 +- .../views/updates/items/AppUpdateData.java | 2 +- .../views/updates/items/KnownVulnApp.java | 12 +- .../items/KnownVulnAppListItemController.java | 10 +- .../views/updates/items/UpdateableApp.java | 12 +- .../UpdateableAppListItemController.java | 28 +- .../updates/items/UpdateableAppsHeader.java | 39 +- .../fdroid/fdroid/work/CleanCacheWorker.java | 22 +- .../fdroid/work/FDroidMetricsWorker.java | 51 +- .../res/drawable-anydpi-v26/ic_launcher.xml | 2 +- .../ic_launcher_background.xml | 46 +- .../ic_launcher_foreground.xml | 146 ++--- .../donation_option_opencollective.xml | 106 ++-- .../main/res/drawable/ic_antifeature_nsfw.xml | 11 +- app/src/main/res/drawable/ic_close.xml | 6 +- .../res/drawable/ic_launcher_monochrome.xml | 6 +- app/src/main/res/drawable/ic_link.xml | 6 +- app/src/main/res/drawable/ic_search.xml | 6 +- .../res/drawable/screenshot_placeholder.xml | 2 +- app/src/main/res/layout/about.xml | 5 + app/src/main/res/layout/activity_app_list.xml | 12 +- .../res/layout/activity_install_history.xml | 54 +- app/src/main/res/layout/activity_main.xml | 2 +- .../main/res/layout/activity_repo_details.xml | 189 ++++--- .../main/res/layout/activity_screenshots.xml | 2 +- .../res/layout/app_details2_version_item.xml | 78 +-- app/src/main/res/layout/donate_bitcoin.xml | 3 +- app/src/main/res/layout/donate_litecoin.xml | 3 +- app/src/main/res/layout/fab_search.xml | 3 +- .../main/res/layout/installed_apps_layout.xml | 77 ++- .../res/layout/known_vuln_app_list_item.xml | 9 +- .../main/res/layout/main_tab_categories.xml | 6 +- app/src/main/res/layout/main_tab_latest.xml | 5 +- app/src/main/res/layout/main_tab_updates.xml | 17 +- .../main/res/layout/preference_seekbar.xml | 84 +-- .../main/res/layout/repo_list_activity.xml | 45 +- .../res/layout/updateable_app_status_item.xml | 3 +- app/src/main/res/values/attrs.xml | 30 +- app/src/main/res/values/ids.xml | 14 +- app/src/main/res/values/themes.xml | 4 +- app/src/main/res/xml/preferences.xml | 2 +- .../org/fdroid/fdroid/PreferencesTest.java | 14 +- .../java/org/fdroid/fdroid/RepoUrlsTest.java | 12 +- .../java/org/fdroid/fdroid/TestUtils.java | 1 - .../java/org/fdroid/fdroid/UtilsTest.java | 1 - .../java/org/fdroid/fdroid/data/ApkTest.java | 12 +- .../org/fdroid/fdroid/data/DBHelperTest.java | 25 +- .../fdroid/fdroid/data/SanitizedFileTest.java | 8 +- .../fdroid/fdroid/installer/ApkCacheTest.java | 10 +- .../fdroid/installer/FileInstallerTest.java | 10 +- .../installer/InstallerFactoryTest.java | 8 +- .../org/fdroid/fdroid/shadows/ShadowLog.java | 16 +- .../fdroid/views/AppDetailsAdapterTest.java | 55 +- .../fdroid/views/main/MainActivityTest.java | 4 +- .../fdroid/work/CleanCacheWorkerTest.java | 10 +- .../fdroid/work/FDroidMetricsWorkerTest.java | 12 +- .../fdroid/nearby/LocalHTTPDManagerTest.java | 34 +- .../fdroid/fdroid/nearby/LocalHTTPDTest.java | 74 ++- .../fdroid/nearby/LocalRepoKeyStoreTest.java | 18 +- .../fdroid/updater/UpdateServiceTest.java | 14 +- config/checkstyle/checkstyle.gradle | 2 +- config/checkstyle/checkstyle.xml | 95 ++-- gradle/verification-metadata.xml | 63 +++ 242 files changed, 3527 insertions(+), 3952 deletions(-) delete mode 100644 app/src/main/java/org/fdroid/fdroid/qr/CameraCharacteristicsMaxApiLevel20.java diff --git a/app/build.gradle b/app/build.gradle index 43f517842..145751014 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -54,7 +54,7 @@ android { // use proguard on debug too since we have unknowingly broken // release builds before. all { - manifestPlaceholders = [ applicationLabel: APP_NAME ] + manifestPlaceholders = [applicationLabel: APP_NAME] minifyEnabled true shrinkResources true buildConfigField "String", "PRIVILEGED_EXTENSION_PACKAGE_NAME", privilegedExtensionApplicationId @@ -64,7 +64,7 @@ android { } debug { getIsDefault().set(true) - manifestPlaceholders = [ applicationLabel: APP_NAME_DEBUG ] + manifestPlaceholders = [applicationLabel: APP_NAME_DEBUG] applicationIdSuffix ".debug" versionNameSuffix "-debug" // testProguardFiles gets partially ignored for instrumentation tests @@ -87,7 +87,7 @@ android { } } applicationVariants.all { variant -> - variant.resValue "string", "applicationId", variant.applicationId + variant.resValue "string", "applicationId", variant.applicationId } compileOptions { diff --git a/app/lint.xml b/app/lint.xml index f654a83a6..1de269199 100644 --- a/app/lint.xml +++ b/app/lint.xml @@ -1,86 +1,86 @@ - + - - + + - + - + - - - - - + + + + + - - - + + + - + - - - - - - - - + + + + + + + + - - - - - - - + + + + + + + - - - - + + + + - - + + - - - - + + + + - + - - + + - - + + diff --git a/app/src/androidTest/java/org/fdroid/fdroid/AssetUtils.java b/app/src/androidTest/java/org/fdroid/fdroid/AssetUtils.java index 95e12a021..ae87c4c16 100644 --- a/app/src/androidTest/java/org/fdroid/fdroid/AssetUtils.java +++ b/app/src/androidTest/java/org/fdroid/fdroid/AssetUtils.java @@ -1,7 +1,10 @@ package org.fdroid.fdroid; +import static org.junit.Assert.fail; + import android.content.Context; import android.util.Log; + import androidx.annotation.Nullable; import java.io.File; @@ -10,8 +13,6 @@ import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; -import static org.junit.Assert.fail; - public class AssetUtils { private static final String TAG = "Utils"; diff --git a/app/src/androidTest/java/org/fdroid/fdroid/LocalizationTest.java b/app/src/androidTest/java/org/fdroid/fdroid/LocalizationTest.java index c8b31b7a0..094bd5dd3 100644 --- a/app/src/androidTest/java/org/fdroid/fdroid/LocalizationTest.java +++ b/app/src/androidTest/java/org/fdroid/fdroid/LocalizationTest.java @@ -5,11 +5,13 @@ import android.content.Context; import android.content.res.AssetManager; import android.content.res.Configuration; import android.content.res.Resources; -import androidx.test.platform.app.InstrumentationRegistry; -import androidx.test.ext.junit.runners.AndroidJUnit4; import android.text.TextUtils; import android.util.DisplayMetrics; import android.util.Log; + +import androidx.test.ext.junit.runners.AndroidJUnit4; +import androidx.test.platform.app.InstrumentationRegistry; + import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; diff --git a/app/src/androidTest/java/org/fdroid/fdroid/MainActivityEspressoTest.java b/app/src/androidTest/java/org/fdroid/fdroid/MainActivityEspressoTest.java index 9cc828da3..2f79990c8 100644 --- a/app/src/androidTest/java/org/fdroid/fdroid/MainActivityEspressoTest.java +++ b/app/src/androidTest/java/org/fdroid/fdroid/MainActivityEspressoTest.java @@ -1,40 +1,5 @@ package org.fdroid.fdroid; -import android.Manifest; -import android.app.ActivityManager; -import android.app.Instrumentation; -import android.content.Context; -import android.os.Build; - -import androidx.core.content.ContextCompat; -import androidx.test.core.app.ApplicationProvider; -import androidx.test.filters.LargeTest; -import androidx.test.platform.app.InstrumentationRegistry; -import androidx.test.espresso.IdlingPolicies; -import androidx.test.espresso.ViewInteraction; -import androidx.test.rule.ActivityTestRule; -import androidx.test.rule.GrantPermissionRule; -import androidx.test.ext.junit.runners.AndroidJUnit4; -import androidx.test.uiautomator.UiDevice; -import androidx.test.uiautomator.UiObject; -import androidx.test.uiautomator.UiObjectNotFoundException; -import androidx.test.uiautomator.UiSelector; -import android.util.Log; -import android.view.View; -import org.fdroid.fdroid.views.StatusBanner; -import org.fdroid.fdroid.views.main.MainActivity; -import org.hamcrest.Matchers; -import org.junit.After; -import org.junit.AfterClass; -import org.junit.Before; -import org.junit.BeforeClass; -import org.junit.Rule; -import org.junit.Test; -import org.junit.runner.RunWith; - -import java.io.IOException; -import java.util.concurrent.TimeUnit; - import static androidx.test.espresso.Espresso.onView; import static androidx.test.espresso.action.ViewActions.click; import static androidx.test.espresso.action.ViewActions.swipeDown; @@ -48,11 +13,46 @@ import static androidx.test.espresso.matcher.ViewMatchers.isDisplayed; import static androidx.test.espresso.matcher.ViewMatchers.withContentDescription; import static androidx.test.espresso.matcher.ViewMatchers.withId; import static androidx.test.espresso.matcher.ViewMatchers.withText; -import static org.hamcrest.Matchers.allOf; +import static org.hamcrest.CoreMatchers.allOf; import static org.hamcrest.Matchers.not; import static org.junit.Assert.assertTrue; import static org.junit.Assume.assumeTrue; +import android.Manifest; +import android.app.ActivityManager; +import android.app.Instrumentation; +import android.content.Context; +import android.os.Build; +import android.util.Log; + +import androidx.core.content.ContextCompat; +import androidx.test.core.app.ApplicationProvider; +import androidx.test.espresso.IdlingPolicies; +import androidx.test.espresso.ViewInteraction; +import androidx.test.ext.junit.runners.AndroidJUnit4; +import androidx.test.filters.LargeTest; +import androidx.test.platform.app.InstrumentationRegistry; +import androidx.test.rule.ActivityTestRule; +import androidx.test.rule.GrantPermissionRule; +import androidx.test.uiautomator.UiDevice; +import androidx.test.uiautomator.UiObject; +import androidx.test.uiautomator.UiObjectNotFoundException; +import androidx.test.uiautomator.UiSelector; + +import org.fdroid.fdroid.views.StatusBanner; +import org.fdroid.fdroid.views.main.MainActivity; +import org.hamcrest.Matchers; +import org.junit.After; +import org.junit.AfterClass; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Rule; +import org.junit.Test; +import org.junit.runner.RunWith; + +import java.io.IOException; +import java.util.concurrent.TimeUnit; + @LargeTest @RunWith(AndroidJUnit4.class) public class MainActivityEspressoTest { @@ -68,7 +68,7 @@ public class MainActivityEspressoTest { */ private static boolean canRunEspresso() { if (Build.VERSION.SDK_INT < 25 - || (Build.SUPPORTED_ABIS[0].startsWith("arm") && isEmulator())) { + || Build.SUPPORTED_ABIS[0].startsWith("arm") && isEmulator()) { Log.e(TAG, "SKIPPING TEST: ARM emulators are too slow to run these tests in a useful way"); return false; } @@ -122,7 +122,7 @@ public class MainActivityEspressoTest { || Build.MODEL.contains("Emulator") || Build.MODEL.contains("Android SDK built for x86") || Build.MANUFACTURER.contains("Genymotion") - || (Build.BRAND.startsWith("generic") && Build.DEVICE.startsWith("generic")) + || Build.BRAND.startsWith("generic") && Build.DEVICE.startsWith("generic") || "google_sdk".equals(Build.PRODUCT); } @@ -267,7 +267,7 @@ public class MainActivityEspressoTest { if (!BuildConfig.FLAVOR.startsWith("full")) { return; } - onView(Matchers.instanceOf(StatusBanner.class)).check(matches(not(isDisplayed()))); + onView(Matchers.instanceOf(StatusBanner.class)).check(matches(not(isDisplayed()))); onView(allOf(withText(R.string.menu_settings), isDisplayed())).perform(click()); onView(allOf(withText(R.string.main_menu__latest_apps), isDisplayed())).perform(click()); onView(allOf(withId(R.id.swipe_to_refresh), isDisplayed())) diff --git a/app/src/androidTest/java/org/fdroid/fdroid/Netstat.java b/app/src/androidTest/java/org/fdroid/fdroid/Netstat.java index a0938f3cc..def26f56a 100644 --- a/app/src/androidTest/java/org/fdroid/fdroid/Netstat.java +++ b/app/src/androidTest/java/org/fdroid/fdroid/Netstat.java @@ -1,5 +1,7 @@ package org.fdroid.fdroid; +import androidx.annotation.NonNull; + import java.io.BufferedReader; import java.io.FileReader; import java.util.ArrayList; @@ -231,9 +233,9 @@ public class Netstat { /** * Types of connection protocol ***/ - public static final byte TCP_CONNECTION = 0; - public static final byte UDP_CONNECTION = 1; - public static final byte RAW_CONNECTION = 2; + static final byte TCP_CONNECTION = 0; + static final byte UDP_CONNECTION = 1; + static final byte RAW_CONNECTION = 2; /** * serialVersionUID */ @@ -282,11 +284,11 @@ public class Netstat { return protocol; } - public final void setProtocol(final byte protocol) { + final void setProtocol(final byte protocol) { this.protocol = protocol; } - public final String getProtocolAsString() { + final String getProtocolAsString() { switch (protocol) { case TCP_CONNECTION: return "TCP"; @@ -310,7 +312,7 @@ public class Netstat { return pid; } - public final void setPID(final int pid) { + final void setPID(final int pid) { this.pid = pid; } @@ -318,7 +320,7 @@ public class Netstat { return pname; } - public final void setPName(final String pname) { + final void setPName(final String pname) { this.pname = pname; } @@ -326,7 +328,7 @@ public class Netstat { return localPort; } - public final void setLocalPort(final int localPort) { + final void setLocalPort(final int localPort) { this.localPort = localPort; } @@ -334,7 +336,7 @@ public class Netstat { return remoteAddress; } - public final void setRemoteAddress(final String remoteAddress) { + final void setRemoteAddress(final String remoteAddress) { this.remoteAddress = remoteAddress; } @@ -342,7 +344,7 @@ public class Netstat { return remotePort; } - public final void setRemotePort(final int remotePort) { + final void setRemotePort(final int remotePort) { this.remotePort = remotePort; } @@ -350,22 +352,21 @@ public class Netstat { return status; } - public final void setStatus(final String status) { + final void setStatus(final String status) { this.status = status; } + @NonNull public String toString() { - StringBuffer buf = new StringBuffer(); - buf.append("[Prot=").append(getProtocolAsString()); - buf.append(",POwner=").append(powner); - buf.append(",PID=").append(pid); - buf.append(",PName=").append(pname); - buf.append(",LPort=").append(localPort); - buf.append(",RAddress=").append(remoteAddress); - buf.append(",RPort=").append(remotePort); - buf.append(",Status=").append(status); - buf.append("]"); - return buf.toString(); + return "[Prot=" + getProtocolAsString() + + ",POwner=" + powner + + ",PID=" + pid + + ",PName=" + pname + + ",LPort=" + localPort + + ",RAddress=" + remoteAddress + + ",RPort=" + remotePort + + ",Status=" + status + + "]"; } } diff --git a/app/src/androidTest/java/org/fdroid/fdroid/UiWatchers.java b/app/src/androidTest/java/org/fdroid/fdroid/UiWatchers.java index 5e8800f96..002dc235a 100644 --- a/app/src/androidTest/java/org/fdroid/fdroid/UiWatchers.java +++ b/app/src/androidTest/java/org/fdroid/fdroid/UiWatchers.java @@ -16,12 +16,12 @@ package org.fdroid.fdroid; +import android.util.Log; + import androidx.test.uiautomator.UiDevice; import androidx.test.uiautomator.UiObject; import androidx.test.uiautomator.UiObjectNotFoundException; import androidx.test.uiautomator.UiSelector; -import androidx.test.uiautomator.UiWatcher; -import android.util.Log; import java.util.ArrayList; import java.util.List; @@ -38,83 +38,71 @@ class UiWatchers { * This is a sample watcher looking for ANR and crashes. it closes it and moves on. You should * create your own watchers and handle error logging properly for your type of tests. */ - public void registerAnrAndCrashWatchers() { - UiDevice.getInstance().registerWatcher("ANR", new UiWatcher() { - @Override - public boolean checkForCondition() { - UiObject window = new UiObject(new UiSelector().className( - "com.android.server.am.AppNotRespondingDialog")); - String errorText = null; - if (window.exists()) { - try { - errorText = window.getText(); - } catch (UiObjectNotFoundException e) { - Log.e(LOG_TAG, "dialog gone?", e); - } - onAnrDetected(errorText); - postHandler("Wait"); - return true; // triggered + void registerAnrAndCrashWatchers() { + UiDevice.getInstance().registerWatcher("ANR", () -> { + UiObject window = new UiObject(new UiSelector().className( + "com.android.server.am.AppNotRespondingDialog")); + String errorText = null; + if (window.exists()) { + try { + errorText = window.getText(); + } catch (UiObjectNotFoundException e) { + Log.e(LOG_TAG, "dialog gone?", e); } - return false; // no trigger + onAnrDetected(errorText); + postHandler("Wait"); + return true; // triggered } + return false; // no trigger }); // class names may have changed - UiDevice.getInstance().registerWatcher("ANR2", new UiWatcher() { - @Override - public boolean checkForCondition() { - UiObject window = new UiObject(new UiSelector().packageName("android") - .textContains("isn't responding.")); - if (window.exists()) { - String errorText = null; - try { - errorText = window.getText(); - } catch (UiObjectNotFoundException e) { - Log.e(LOG_TAG, "dialog gone?", e); - } - onAnrDetected(errorText); - postHandler("Wait"); - return true; // triggered + UiDevice.getInstance().registerWatcher("ANR2", () -> { + UiObject window = new UiObject(new UiSelector().packageName("android") + .textContains("isn't responding.")); + if (window.exists()) { + String errorText = null; + try { + errorText = window.getText(); + } catch (UiObjectNotFoundException e) { + Log.e(LOG_TAG, "dialog gone?", e); } - return false; // no trigger + onAnrDetected(errorText); + postHandler("Wait"); + return true; // triggered } + return false; // no trigger }); - UiDevice.getInstance().registerWatcher("CRASH", new UiWatcher() { - @Override - public boolean checkForCondition() { - UiObject window = new UiObject(new UiSelector().className( - "com.android.server.am.AppErrorDialog")); - if (window.exists()) { - String errorText = null; - try { - errorText = window.getText(); - } catch (UiObjectNotFoundException e) { - Log.e(LOG_TAG, "dialog gone?", e); - } - onCrashDetected(errorText); - postHandler("OK"); - return true; // triggered + UiDevice.getInstance().registerWatcher("CRASH", () -> { + UiObject window = new UiObject(new UiSelector().className( + "com.android.server.am.AppErrorDialog")); + if (window.exists()) { + String errorText = null; + try { + errorText = window.getText(); + } catch (UiObjectNotFoundException e) { + Log.e(LOG_TAG, "dialog gone?", e); } - return false; // no trigger + onCrashDetected(errorText); + postHandler("OK"); + return true; // triggered } + return false; // no trigger }); - UiDevice.getInstance().registerWatcher("CRASH2", new UiWatcher() { - @Override - public boolean checkForCondition() { - UiObject window = new UiObject(new UiSelector().packageName("android") - .textContains("has stopped")); - if (window.exists()) { - String errorText = null; - try { - errorText = window.getText(); - } catch (UiObjectNotFoundException e) { - Log.e(LOG_TAG, "dialog gone?", e); - } - onCrashDetected(errorText); - postHandler("OK"); - return true; // triggered + UiDevice.getInstance().registerWatcher("CRASH2", () -> { + UiObject window = new UiObject(new UiSelector().packageName("android") + .textContains("has stopped")); + if (window.exists()) { + String errorText = null; + try { + errorText = window.getText(); + } catch (UiObjectNotFoundException e) { + Log.e(LOG_TAG, "dialog gone?", e); } - return false; // no trigger + onCrashDetected(errorText); + postHandler("OK"); + return true; // triggered } + return false; // no trigger }); Log.i(LOG_TAG, "Registered GUI Exception watchers"); } diff --git a/app/src/androidTest/java/org/fdroid/fdroid/compat/FileCompatTest.java b/app/src/androidTest/java/org/fdroid/fdroid/compat/FileCompatTest.java index 93e42bbe4..c629173d2 100644 --- a/app/src/androidTest/java/org/fdroid/fdroid/compat/FileCompatTest.java +++ b/app/src/androidTest/java/org/fdroid/fdroid/compat/FileCompatTest.java @@ -1,13 +1,18 @@ package org.fdroid.fdroid.compat; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; +import static org.junit.Assume.assumeTrue; + import android.app.Instrumentation; import android.content.Context; import android.os.Build; import android.os.Environment; -import androidx.test.platform.app.InstrumentationRegistry; -import androidx.test.ext.junit.runners.AndroidJUnit4; import android.util.Log; +import androidx.test.ext.junit.runners.AndroidJUnit4; +import androidx.test.platform.app.InstrumentationRegistry; + import org.fdroid.fdroid.AssetUtils; import org.fdroid.fdroid.data.SanitizedFile; import org.junit.After; @@ -18,10 +23,6 @@ import org.junit.runner.RunWith; import java.io.File; import java.util.UUID; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; -import static org.junit.Assume.assumeTrue; - /** * This test needs to run on the emulator, even though it technically could @@ -78,7 +79,6 @@ public class FileCompatTest { assertTrue(destFile.getAbsolutePath() + " should exist after symlinking", destFile.exists()); } - /** * Prefer internal over external storage, because external tends to be FAT filesystems, * which don't support symlinks (which we test using this method). diff --git a/app/src/androidTest/java/org/fdroid/fdroid/installer/ApkVerifierTest.java b/app/src/androidTest/java/org/fdroid/fdroid/installer/ApkVerifierTest.java index 1a6b4356b..ff6c7a2fc 100644 --- a/app/src/androidTest/java/org/fdroid/fdroid/installer/ApkVerifierTest.java +++ b/app/src/androidTest/java/org/fdroid/fdroid/installer/ApkVerifierTest.java @@ -156,7 +156,8 @@ public class ApkVerifierTest { try { apkVerifier.verifyApk(); - } catch (ApkVerifier.ApkVerificationException | ApkVerifier.ApkPermissionUnequalException e) { + } catch (ApkVerifier.ApkVerificationException | + ApkVerifier.ApkPermissionUnequalException e) { e.printStackTrace(); fail(e.getMessage()); } diff --git a/app/src/androidTest/java/org/fdroid/fdroid/nearby/BonjourManagerTest.java b/app/src/androidTest/java/org/fdroid/fdroid/nearby/BonjourManagerTest.java index 0741badd3..918e7f3c7 100644 --- a/app/src/androidTest/java/org/fdroid/fdroid/nearby/BonjourManagerTest.java +++ b/app/src/androidTest/java/org/fdroid/fdroid/nearby/BonjourManagerTest.java @@ -1,5 +1,7 @@ package org.fdroid.fdroid.nearby; +import static org.junit.Assert.assertTrue; + import android.content.Context; import androidx.test.core.app.ApplicationProvider; @@ -15,8 +17,6 @@ import java.util.concurrent.TimeUnit; import javax.jmdns.ServiceEvent; import javax.jmdns.ServiceListener; -import static org.junit.Assert.assertTrue; - @RunWith(AndroidJUnit4.class) public class BonjourManagerTest { diff --git a/app/src/androidTest/java/org/fdroid/fdroid/nearby/LocalHTTPDManagerTest.java b/app/src/androidTest/java/org/fdroid/fdroid/nearby/LocalHTTPDManagerTest.java index 99212ba85..d3d31747f 100644 --- a/app/src/androidTest/java/org/fdroid/fdroid/nearby/LocalHTTPDManagerTest.java +++ b/app/src/androidTest/java/org/fdroid/fdroid/nearby/LocalHTTPDManagerTest.java @@ -1,14 +1,20 @@ package org.fdroid.fdroid.nearby; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotEquals; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; + import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; +import android.util.Log; +import androidx.localbroadcastmanager.content.LocalBroadcastManager; import androidx.test.core.app.ApplicationProvider; import androidx.test.ext.junit.runners.AndroidJUnit4; -import androidx.localbroadcastmanager.content.LocalBroadcastManager; -import android.util.Log; + import org.fdroid.fdroid.FDroidApp; import org.fdroid.fdroid.Netstat; import org.fdroid.fdroid.Utils; @@ -23,11 +29,6 @@ import java.net.ServerSocket; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotEquals; -import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; - /** * Test the nearby webserver in the emulator. */ diff --git a/app/src/androidTest/java/org/fdroid/fdroid/nearby/PublicSourceDirProviderTest.java b/app/src/androidTest/java/org/fdroid/fdroid/nearby/PublicSourceDirProviderTest.java index 507feb1e6..59d89f387 100644 --- a/app/src/androidTest/java/org/fdroid/fdroid/nearby/PublicSourceDirProviderTest.java +++ b/app/src/androidTest/java/org/fdroid/fdroid/nearby/PublicSourceDirProviderTest.java @@ -1,5 +1,9 @@ package org.fdroid.fdroid.nearby; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; + import android.content.Context; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; @@ -7,6 +11,9 @@ import android.database.Cursor; import android.net.Uri; import android.provider.MediaStore; +import androidx.test.ext.junit.runners.AndroidJUnit4; +import androidx.test.platform.app.InstrumentationRegistry; + import org.apache.commons.io.FileUtils; import org.junit.Before; import org.junit.Test; @@ -17,13 +24,6 @@ import java.io.IOException; import java.io.InputStream; import java.util.List; -import androidx.test.ext.junit.runners.AndroidJUnit4; -import androidx.test.platform.app.InstrumentationRegistry; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; - @RunWith(AndroidJUnit4.class) public class PublicSourceDirProviderTest { public static final String TAG = "DataApkProviderTest"; diff --git a/app/src/androidTest/java/org/fdroid/fdroid/net/HttpDownloaderTest.java b/app/src/androidTest/java/org/fdroid/fdroid/net/HttpDownloaderTest.java index 1f7e31f20..211d859e9 100644 --- a/app/src/androidTest/java/org/fdroid/fdroid/net/HttpDownloaderTest.java +++ b/app/src/androidTest/java/org/fdroid/fdroid/net/HttpDownloaderTest.java @@ -1,6 +1,9 @@ - package org.fdroid.fdroid.net; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; + import android.os.Build; import android.util.Log; @@ -11,7 +14,6 @@ import org.fdroid.download.HttpDownloader; import org.fdroid.download.HttpManager; import org.fdroid.download.Mirror; import org.fdroid.fdroid.FDroidApp; -import org.fdroid.fdroid.ProgressListener; import org.fdroid.fdroid.Utils; import org.fdroid.index.v1.IndexV1UpdaterKt; import org.junit.Test; @@ -26,10 +28,6 @@ import java.util.List; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; - public class HttpDownloaderTest { private static final String TAG = "HttpDownloaderTest"; @@ -84,12 +82,7 @@ public class HttpDownloaderTest { File destFile = File.createTempFile("dl-", ""); final DownloadRequest request = new DownloadRequest(path, mirrors, null, null, null); final HttpDownloader httpDownloader = new HttpDownloader(httpManager, request, destFile); - httpDownloader.setListener(new ProgressListener() { - @Override - public void onProgress(long bytesRead, long totalBytes) { - receivedProgress = true; - } - }); + httpDownloader.setListener((bytesRead, totalBytes) -> receivedProgress = true); new Thread() { @Override public void run() { @@ -156,12 +149,9 @@ public class HttpDownloaderTest { File destFile = File.createTempFile("dl-", ""); final DownloadRequest request = new DownloadRequest(path, mirrors, null, null, null); final HttpDownloader httpDownloader = new HttpDownloader(httpManager, request, destFile); - httpDownloader.setListener(new ProgressListener() { - @Override - public void onProgress(long bytesRead, long totalBytes) { - receivedProgress = true; - latch.countDown(); - } + httpDownloader.setListener((bytesRead, totalBytes) -> { + receivedProgress = true; + latch.countDown(); }); new Thread() { @Override diff --git a/app/src/androidTest/java/org/fdroid/fdroid/updater/SwapRepoEmulatorTest.java b/app/src/androidTest/java/org/fdroid/fdroid/updater/SwapRepoEmulatorTest.java index 631c920de..6e4879fb8 100644 --- a/app/src/androidTest/java/org/fdroid/fdroid/updater/SwapRepoEmulatorTest.java +++ b/app/src/androidTest/java/org/fdroid/fdroid/updater/SwapRepoEmulatorTest.java @@ -1,5 +1,11 @@ package org.fdroid.fdroid.updater; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; + import android.content.Context; import android.content.Intent; import android.content.pm.ApplicationInfo; @@ -8,6 +14,9 @@ import android.os.Looper; import android.text.TextUtils; import android.util.Log; +import androidx.test.filters.LargeTest; +import androidx.test.platform.app.InstrumentationRegistry; + import org.fdroid.fdroid.BuildConfig; import org.fdroid.fdroid.FDroidApp; import org.fdroid.fdroid.Hasher; @@ -30,15 +39,6 @@ import java.util.Locale; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; -import androidx.test.filters.LargeTest; -import androidx.test.platform.app.InstrumentationRegistry; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertTrue; - @LargeTest public class SwapRepoEmulatorTest { public static final String TAG = "SwapRepoEmulatorTest"; diff --git a/app/src/androidTest/java/org/fdroid/fdroid/work/CleanCacheWorkerTest.java b/app/src/androidTest/java/org/fdroid/fdroid/work/CleanCacheWorkerTest.java index e084fe6db..4e0a03ae6 100644 --- a/app/src/androidTest/java/org/fdroid/fdroid/work/CleanCacheWorkerTest.java +++ b/app/src/androidTest/java/org/fdroid/fdroid/work/CleanCacheWorkerTest.java @@ -1,12 +1,19 @@ package org.fdroid.fdroid.work; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + import android.app.Instrumentation; + import androidx.arch.core.executor.testing.InstantTaskExecutorRule; import androidx.test.filters.LargeTest; import androidx.test.platform.app.InstrumentationRegistry; import androidx.work.OneTimeWorkRequest; import androidx.work.WorkInfo; + import com.google.common.util.concurrent.ListenableFuture; + import org.apache.commons.io.FileUtils; import org.fdroid.fdroid.compat.FileCompatTest; import org.junit.Rule; @@ -16,10 +23,6 @@ import java.io.File; import java.io.IOException; import java.util.concurrent.ExecutionException; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; - /** * This test cannot run on Robolectric unfortunately since it does not support * getting the timestamps from the files completely. diff --git a/app/src/androidTest/java/org/fdroid/fdroid/work/FDroidMetricsWorkerTest.java b/app/src/androidTest/java/org/fdroid/fdroid/work/FDroidMetricsWorkerTest.java index a3f3d08ff..19f6a8c46 100644 --- a/app/src/androidTest/java/org/fdroid/fdroid/work/FDroidMetricsWorkerTest.java +++ b/app/src/androidTest/java/org/fdroid/fdroid/work/FDroidMetricsWorkerTest.java @@ -18,12 +18,16 @@ package org.fdroid.fdroid.work; +import static org.junit.Assert.assertEquals; + import androidx.arch.core.executor.testing.InstantTaskExecutorRule; import androidx.test.filters.LargeTest; import androidx.test.platform.app.InstrumentationRegistry; import androidx.work.OneTimeWorkRequest; import androidx.work.WorkInfo; + import com.google.common.util.concurrent.ListenableFuture; + import org.junit.Ignore; import org.junit.Rule; import org.junit.Test; @@ -31,8 +35,6 @@ import org.junit.Test; import java.io.IOException; import java.util.concurrent.ExecutionException; -import static org.junit.Assert.assertEquals; - /** * This actually runs {@link FDroidMetricsWorker} on a device/emulator and * submits a report to https://metrics.cleaninsights.org diff --git a/app/src/androidTest/java/org/fdroid/fdroid/work/WorkManagerTestRule.java b/app/src/androidTest/java/org/fdroid/fdroid/work/WorkManagerTestRule.java index 26466963a..c6a03d1b6 100644 --- a/app/src/androidTest/java/org/fdroid/fdroid/work/WorkManagerTestRule.java +++ b/app/src/androidTest/java/org/fdroid/fdroid/work/WorkManagerTestRule.java @@ -3,11 +3,13 @@ package org.fdroid.fdroid.work; import android.app.Instrumentation; import android.content.Context; import android.util.Log; + import androidx.test.platform.app.InstrumentationRegistry; import androidx.work.Configuration; import androidx.work.WorkManager; import androidx.work.testing.SynchronousExecutor; import androidx.work.testing.WorkManagerTestInitHelper; + import org.junit.rules.TestWatcher; import org.junit.runner.Description; diff --git a/app/src/basic/java/org/fdroid/fdroid/nearby/TreeUriScannerIntentService.java b/app/src/basic/java/org/fdroid/fdroid/nearby/TreeUriScannerIntentService.java index f98619fbc..497073038 100644 --- a/app/src/basic/java/org/fdroid/fdroid/nearby/TreeUriScannerIntentService.java +++ b/app/src/basic/java/org/fdroid/fdroid/nearby/TreeUriScannerIntentService.java @@ -19,9 +19,10 @@ package org.fdroid.fdroid.nearby; -import androidx.appcompat.app.AppCompatActivity; import android.content.Intent; +import androidx.appcompat.app.AppCompatActivity; + /** * Dummy version for basic app flavor. */ diff --git a/app/src/basic/java/org/fdroid/fdroid/nearby/WifiStateChangeService.java b/app/src/basic/java/org/fdroid/fdroid/nearby/WifiStateChangeService.java index 145c9e567..9b964356a 100644 --- a/app/src/basic/java/org/fdroid/fdroid/nearby/WifiStateChangeService.java +++ b/app/src/basic/java/org/fdroid/fdroid/nearby/WifiStateChangeService.java @@ -21,6 +21,7 @@ package org.fdroid.fdroid.nearby; import android.content.Context; import android.content.Intent; + import androidx.annotation.Nullable; /** diff --git a/app/src/basic/java/org/fdroid/fdroid/views/main/MainViewController.java b/app/src/basic/java/org/fdroid/fdroid/views/main/MainViewController.java index cdfefe870..b9c8dd18b 100644 --- a/app/src/basic/java/org/fdroid/fdroid/views/main/MainViewController.java +++ b/app/src/basic/java/org/fdroid/fdroid/views/main/MainViewController.java @@ -20,10 +20,12 @@ package org.fdroid.fdroid.views.main; import android.widget.FrameLayout; + import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; import androidx.fragment.app.Fragment; import androidx.recyclerview.widget.RecyclerView; + import org.fdroid.fdroid.R; import org.fdroid.fdroid.views.PreferencesFragment; import org.fdroid.fdroid.views.updates.UpdatesViewBinder; @@ -51,14 +53,14 @@ class MainViewController extends RecyclerView.ViewHolder { /** * @see LatestViewBinder */ - public void bindLatestView() { + void bindLatestView() { new LatestViewBinder(activity, frame); } /** * @see UpdatesViewBinder */ - public void bindUpdates() { + void bindUpdates() { if (updatesView == null) { updatesView = new UpdatesViewBinder(activity, frame); } @@ -66,7 +68,7 @@ class MainViewController extends RecyclerView.ViewHolder { updatesView.bind(); } - public void unbindUpdates() { + void unbindUpdates() { if (updatesView != null) { updatesView.unbind(); } @@ -75,11 +77,11 @@ class MainViewController extends RecyclerView.ViewHolder { /** * @see CategoriesViewBinder */ - public void bindCategoriesView() { + void bindCategoriesView() { new CategoriesViewBinder(activity, frame); } - public void bindSwapView() { + void bindSwapView() { throw new IllegalStateException("unimplemented"); } @@ -96,7 +98,7 @@ class MainViewController extends RecyclerView.ViewHolder { * * @see SettingsView */ - public void bindSettingsView() { + void bindSettingsView() { activity.getLayoutInflater().inflate(R.layout.main_tab_settings, frame, true); } } diff --git a/app/src/basic/java/org/fdroid/fdroid/views/main/NearbyViewBinder.java b/app/src/basic/java/org/fdroid/fdroid/views/main/NearbyViewBinder.java index 1829a4439..0d2329980 100644 --- a/app/src/basic/java/org/fdroid/fdroid/views/main/NearbyViewBinder.java +++ b/app/src/basic/java/org/fdroid/fdroid/views/main/NearbyViewBinder.java @@ -3,7 +3,7 @@ package org.fdroid.fdroid.views.main; import android.content.Context; class NearbyViewBinder { - public static void updateUsbOtg(Context context) { + static void updateUsbOtg(Context context) { throw new IllegalStateException("unimplemented"); } } diff --git a/app/src/basic/res/drawable-anydpi-v26/ic_launcher_foreground.xml b/app/src/basic/res/drawable-anydpi-v26/ic_launcher_foreground.xml index 92f87f2b6..06e9368a8 100644 --- a/app/src/basic/res/drawable-anydpi-v26/ic_launcher_foreground.xml +++ b/app/src/basic/res/drawable-anydpi-v26/ic_launcher_foreground.xml @@ -4,52 +4,56 @@ android:height="108dp" android:viewportWidth="108" android:viewportHeight="108"> - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + diff --git a/app/src/basic/res/xml/preferences.xml b/app/src/basic/res/xml/preferences.xml index 863d09dca..6b7ecf739 100644 --- a/app/src/basic/res/xml/preferences.xml +++ b/app/src/basic/res/xml/preferences.xml @@ -1,73 +1,75 @@ - + android:action="android.intent.action.MAIN" + android:targetPackage="@string/applicationId" + android:targetClass="org.fdroid.fdroid.views.installed.InstalledAppsActivity" /> + android:title="@string/menu_manage" + android:summary="@string/repositories_summary"> + android:action="android.intent.action.MAIN" + android:targetPackage="@string/applicationId" + android:targetClass="org.fdroid.fdroid.views.ManageReposActivity" /> + android:key="installHistory" + android:visible="false" + android:title="@string/install_history" + android:summary="@string/install_history_summary"> + android:action="android.intent.action.MAIN" + android:targetPackage="@string/applicationId" + android:targetClass="org.fdroid.fdroid.views.InstallHistoryActivity" /> + android:key="overWifi" + android:title="@string/over_wifi" + android:defaultValue="@integer/defaultOverWifi" + android:layout="@layout/preference_seekbar" /> + android:key="overData" + android:title="@string/over_data" + android:defaultValue="@integer/defaultOverData" + android:layout="@layout/preference_seekbar" /> + android:title="@string/update_auto_download" + android:summary="@string/update_auto_download_summary" + android:key="updateAutoDownload" /> + android:key="updateIntervalSeekBarPosition" + android:title="@string/update_interval" + android:defaultValue="@integer/defaultUpdateInterval" + android:layout="@layout/preference_seekbar" /> + android:title="@string/notify" + android:defaultValue="true" + android:key="updateNotify" /> - + + android:title="@string/pref_language" + android:key="language" /> + android:title="@string/theme" + android:key="theme" + android:defaultValue="@string/defaultTheme" + android:entries="@array/themeNames" + android:entryValues="@array/themeValues" /> - + + android:title="@string/show_incompat_versions" + android:defaultValue="false" + android:key="incompatibleVersions" /> + android:entryValues="@array/antifeaturesValues" /> + android:title="@string/force_touch_apps" + android:defaultValue="false" + android:key="ignoreTouchscreen" /> + android:key="useTor" + android:summary="@string/useTorSummary" + android:title="@string/useTor" /> + android:defaultValue="false" + android:key="enableProxy" + android:title="@string/enable_proxy_title" + android:summary="@string/enable_proxy_summary" /> + android:key="proxyHost" + android:title="@string/proxy_host" + android:summary="@string/proxy_host_summary" + android:dependency="enableProxy" /> + android:key="proxyPort" + android:title="@string/proxy_port" + android:summary="@string/proxy_port_summary" + android:dependency="enableProxy" /> + android:key="pref_category_privacy" + android:title="@string/privacy"> + android:key="promptToSendCrashReports" + android:title="@string/prompt_to_send_crash_reports" + android:summary="@string/prompt_to_send_crash_reports_summary" + android:defaultValue="true" /> + android:defaultValue="false" + android:key="preventScreenshots" + android:summary="@string/preventScreenshots_summary" + android:title="@string/preventScreenshots_title" /> + android:title="@string/other" + android:key="pref_category_other"> + android:title="@string/cache_downloaded" + android:key="keepCacheFor" + android:defaultValue="86400000" + android:entries="@array/keepCacheNames" + android:entryValues="@array/keepCacheValues" /> + android:title="@string/expert" + android:defaultValue="false" + android:key="expert" /> + android:key="unstableUpdates" + android:title="@string/unstable_updates" + android:summary="@string/unstable_updates_summary" + android:defaultValue="false" + android:dependency="expert" /> + android:key="keepInstallHistory" + android:title="@string/keep_install_history" + android:summary="@string/keep_install_history_summary" + android:defaultValue="false" + android:dependency="expert" /> + android:key="sendToFdroidMetrics" + android:title="@string/send_to_fdroid_metrics" + android:summary="@string/send_to_fdroid_metrics_summary" + android:defaultValue="false" + android:dependency="expert" /> + android:key="hideAllNotifications" + android:title="@string/hide_all_notifications" + android:summary="@string/hide_all_notifications_summary" + android:defaultValue="false" + android:dependency="expert" /> + android:key="sendVersionAndUUIDToServers" + android:title="@string/send_version_and_uuid" + android:summary="@string/send_version_and_uuid_summary" + android:defaultValue="false" + android:dependency="expert" /> + android:key="forceOldIndex" + android:title="@string/force_old_index" + android:summary="@string/force_old_index_summary" + android:defaultValue="false" + android:dependency="expert" /> + android:title="@string/system_installer" + android:defaultValue="false" + android:key="privilegedInstaller" + android:persistent="false" + android:dependency="expert" /> diff --git a/app/src/full/AndroidManifest.xml b/app/src/full/AndroidManifest.xml index 1e017a0f8..9f652eeaf 100644 --- a/app/src/full/AndroidManifest.xml +++ b/app/src/full/AndroidManifest.xml @@ -45,10 +45,12 @@ - - + + @@ -70,8 +72,7 @@ android:label="@string/swap" android:launchMode="singleTask" android:parentActivityName=".views.main.MainActivity" - android:screenOrientation="portrait"> - + android:screenOrientation="portrait"> + diff --git a/app/src/full/java/org/fdroid/fdroid/nearby/BluetoothManager.java b/app/src/full/java/org/fdroid/fdroid/nearby/BluetoothManager.java index ae0a15916..1d1ce8aee 100644 --- a/app/src/full/java/org/fdroid/fdroid/nearby/BluetoothManager.java +++ b/app/src/full/java/org/fdroid/fdroid/nearby/BluetoothManager.java @@ -15,15 +15,15 @@ import android.os.Process; import android.text.TextUtils; import android.util.Log; +import androidx.core.content.ContextCompat; +import androidx.localbroadcastmanager.content.LocalBroadcastManager; + import org.fdroid.fdroid.R; import org.fdroid.fdroid.Utils; import org.fdroid.fdroid.nearby.peers.BluetoothPeer; import java.lang.ref.WeakReference; -import androidx.core.content.ContextCompat; -import androidx.localbroadcastmanager.content.LocalBroadcastManager; - /** * Manage the {@link android.bluetooth.BluetoothAdapter}in a {@link HandlerThread}. * The start process is in {@link HandlerThread#onLooperPrepared()} so that it is diff --git a/app/src/full/java/org/fdroid/fdroid/nearby/BonjourManager.java b/app/src/full/java/org/fdroid/fdroid/nearby/BonjourManager.java index cd43bf7f0..77162bdf7 100644 --- a/app/src/full/java/org/fdroid/fdroid/nearby/BonjourManager.java +++ b/app/src/full/java/org/fdroid/fdroid/nearby/BonjourManager.java @@ -14,7 +14,9 @@ import android.os.Process; import android.text.TextUtils; import android.util.Log; -import org.fdroid.database.Repository; +import androidx.core.content.ContextCompat; +import androidx.localbroadcastmanager.content.LocalBroadcastManager; + import org.fdroid.fdroid.FDroidApp; import org.fdroid.fdroid.Preferences; import org.fdroid.fdroid.R; @@ -31,9 +33,6 @@ import javax.jmdns.ServiceEvent; import javax.jmdns.ServiceInfo; import javax.jmdns.ServiceListener; -import androidx.core.content.ContextCompat; -import androidx.localbroadcastmanager.content.LocalBroadcastManager; - /** * Manage {@link JmDNS} in a {@link HandlerThread}. The start process is in * {@link HandlerThread#onLooperPrepared()} so that it is always started before diff --git a/app/src/full/java/org/fdroid/fdroid/nearby/LocalHTTPD.java b/app/src/full/java/org/fdroid/fdroid/nearby/LocalHTTPD.java index 0cf91efc0..33b5a9164 100644 --- a/app/src/full/java/org/fdroid/fdroid/nearby/LocalHTTPD.java +++ b/app/src/full/java/org/fdroid/fdroid/nearby/LocalHTTPD.java @@ -41,7 +41,6 @@ import org.fdroid.fdroid.BuildConfig; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; -import java.io.FilenameFilter; import java.io.IOException; import java.io.InputStream; import java.io.UnsupportedEncodingException; @@ -57,6 +56,7 @@ import java.util.Iterator; import java.util.List; import java.util.Locale; import java.util.Map; +import java.util.Objects; import java.util.StringTokenizer; import java.util.TimeZone; @@ -72,7 +72,8 @@ import fi.iki.elonen.NanoHTTPD.Response.IStatus; *

* This is mostly just synced from {@code SimpleWebServer.java} from NanoHTTPD. * - * @see webserver/src/main/java/fi/iki/elonen/SimpleWebServer.java + * @see + * webserver/src/main/java/fi/iki/elonen/SimpleWebServer.java */ public class LocalHTTPD extends NanoHTTPD { private static final String TAG = "LocalHTTPD"; @@ -159,17 +160,20 @@ public class LocalHTTPD extends NanoHTTPD { } protected Response getInternalErrorResponse(String s) { - return newFixedLengthResponse(Response.Status.INTERNAL_ERROR, NanoHTTPD.MIME_PLAINTEXT, "INTERNAL ERROR: " + s); + return newFixedLengthResponse(Response.Status.INTERNAL_ERROR, NanoHTTPD.MIME_PLAINTEXT, + "INTERNAL ERROR: " + s); } protected Response getNotFoundResponse() { - return newFixedLengthResponse(Response.Status.NOT_FOUND, NanoHTTPD.MIME_PLAINTEXT, "Error 404, file not found."); + return newFixedLengthResponse(Response.Status.NOT_FOUND, NanoHTTPD.MIME_PLAINTEXT, "Error 404, file not " + + "found."); } protected String listDirectory(String uri, File f) { String heading = "Directory " + uri; StringBuilder msg = - new StringBuilder("" + heading + "" + "

" + heading + "

"); String up = null; @@ -181,39 +185,32 @@ public class LocalHTTPD extends NanoHTTPD { } } - List files = Arrays.asList(f.list(new FilenameFilter() { - - @Override - public boolean accept(File dir, String name) { - return new File(dir, name).isFile(); - } - })); + List files = + Arrays.asList(Objects.requireNonNull(f.list((dir, name) -> new File(dir, name).isFile()))); Collections.sort(files); - List directories = Arrays.asList(f.list(new FilenameFilter() { - - @Override - public boolean accept(File dir, String name) { - return new File(dir, name).isDirectory(); - } - })); + List directories = + Arrays.asList(Objects.requireNonNull(f.list((dir, name) -> new File(dir, name).isDirectory()))); Collections.sort(directories); if (up != null || directories.size() + files.size() > 0) { msg.append("
    "); if (up != null || directories.size() > 0) { msg.append("
    "); if (up != null) { - msg.append("
  • ..
  • "); + msg.append("
  • ." + + ".
  • "); } for (String directory : directories) { String dir = directory + "/"; - msg.append("
  • ").append(dir).append("
  • "); + msg.append("
  • ").append(dir).append("
  • "); } msg.append("
    "); } if (files.size() > 0) { msg.append("
    "); for (String file : files) { - msg.append("
  • ").append(file).append(""); + msg.append("
  • ").append(file).append(""); File curFile = new File(f, file); long len = curFile.length(); msg.append(" ("); @@ -296,7 +293,8 @@ public class LocalHTTPD extends NanoHTTPD { if (f.isDirectory() && !uri.endsWith("/")) { uri += "/"; Response res = - newFixedLengthResponse(Response.Status.REDIRECT, NanoHTTPD.MIME_HTML, "Redirected: " + uri + ""); + newFixedLengthResponse(Response.Status.REDIRECT, NanoHTTPD.MIME_HTML, "Redirected: " + + "" + uri + ""); res.addHeader("Location", uri); return res; } @@ -386,7 +384,8 @@ public class LocalHTTPD extends NanoHTTPD { Response res; try { // Calculate etag - String etag = Integer.toHexString((file.getAbsolutePath() + file.lastModified() + "" + file.length()).hashCode()); + String etag = + Integer.toHexString((file.getAbsolutePath() + file.lastModified() + "" + file.length()).hashCode()); // Support (simple) skipping: long startFrom = 0; @@ -412,7 +411,8 @@ public class LocalHTTPD extends NanoHTTPD { boolean headerIfRangeMissingOrMatching = (ifRange == null || etag.equals(ifRange)); String ifNoneMatch = header.get("if-none-match"); - boolean headerIfNoneMatchPresentAndMatching = ifNoneMatch != null && ("*".equals(ifNoneMatch) || ifNoneMatch.equals(etag)); + boolean headerIfNoneMatchPresentAndMatching = + ifNoneMatch != null && ("*".equals(ifNoneMatch) || ifNoneMatch.equals(etag)); // Change return code and add Content-Range header when skipping is // requested diff --git a/app/src/full/java/org/fdroid/fdroid/nearby/LocalHTTPDManager.java b/app/src/full/java/org/fdroid/fdroid/nearby/LocalHTTPDManager.java index 3dfb962ce..96ae0d028 100644 --- a/app/src/full/java/org/fdroid/fdroid/nearby/LocalHTTPDManager.java +++ b/app/src/full/java/org/fdroid/fdroid/nearby/LocalHTTPDManager.java @@ -8,14 +8,14 @@ import android.os.Message; import android.os.Process; import android.util.Log; +import androidx.localbroadcastmanager.content.LocalBroadcastManager; + import org.fdroid.fdroid.FDroidApp; import org.fdroid.fdroid.Preferences; import java.io.IOException; import java.net.BindException; -import androidx.localbroadcastmanager.content.LocalBroadcastManager; - /** * Manage {@link LocalHTTPD} in a {@link HandlerThread}; */ diff --git a/app/src/full/java/org/fdroid/fdroid/nearby/LocalRepoKeyStore.java b/app/src/full/java/org/fdroid/fdroid/nearby/LocalRepoKeyStore.java index 8ae2812ee..b0e8f2bce 100644 --- a/app/src/full/java/org/fdroid/fdroid/nearby/LocalRepoKeyStore.java +++ b/app/src/full/java/org/fdroid/fdroid/nearby/LocalRepoKeyStore.java @@ -165,7 +165,8 @@ public final class LocalRepoKeyStore { keyManagers = new KeyManager[]{ wrappedKeyManager, }; - } catch (UnrecoverableKeyException | KeyStoreException | NoSuchAlgorithmException | CertificateException | OperatorCreationException | IOException e) { + } catch (UnrecoverableKeyException | KeyStoreException | NoSuchAlgorithmException | + CertificateException | OperatorCreationException | IOException e) { Log.e(TAG, "Error loading keystore", e); } } @@ -215,7 +216,8 @@ public final class LocalRepoKeyStore { zipSigner.setKeys("kerplapp", cert, priv, DEFAULT_SIG_ALG, null); zipSigner.signZip(input.getAbsolutePath(), output.getAbsolutePath()); - } catch (ClassNotFoundException | IllegalAccessException | InstantiationException | GeneralSecurityException | IOException e) { + } catch (ClassNotFoundException | IllegalAccessException | InstantiationException | + GeneralSecurityException | IOException e) { Log.e(TAG, "Unable to sign local repo index", e); } } diff --git a/app/src/full/java/org/fdroid/fdroid/nearby/LocalRepoManager.java b/app/src/full/java/org/fdroid/fdroid/nearby/LocalRepoManager.java index 9d16c4085..82d7ed5c1 100644 --- a/app/src/full/java/org/fdroid/fdroid/nearby/LocalRepoManager.java +++ b/app/src/full/java/org/fdroid/fdroid/nearby/LocalRepoManager.java @@ -6,6 +6,9 @@ import android.content.pm.PackageManager; import android.content.res.AssetManager; import android.util.Log; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + import org.apache.commons.io.FileUtils; import org.fdroid.fdroid.FDroidApp; import org.fdroid.fdroid.Preferences; @@ -40,9 +43,6 @@ import java.util.Set; import java.util.jar.JarEntry; import java.util.jar.JarOutputStream; -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; - /** * The {@link SwapService} deals with managing the entire workflow from selecting apps to * swap, to invoking this class to prepare the webroot, to enabling various communication protocols. diff --git a/app/src/full/java/org/fdroid/fdroid/nearby/LocalRepoService.java b/app/src/full/java/org/fdroid/fdroid/nearby/LocalRepoService.java index ae56fb301..84c08b32f 100644 --- a/app/src/full/java/org/fdroid/fdroid/nearby/LocalRepoService.java +++ b/app/src/full/java/org/fdroid/fdroid/nearby/LocalRepoService.java @@ -6,6 +6,8 @@ import android.content.Intent; import android.os.Process; import android.util.Log; +import androidx.localbroadcastmanager.content.LocalBroadcastManager; + import org.fdroid.fdroid.FDroidApp; import org.fdroid.fdroid.R; import org.fdroid.fdroid.Utils; @@ -14,8 +16,6 @@ import java.util.Arrays; import java.util.Collections; import java.util.Set; -import androidx.localbroadcastmanager.content.LocalBroadcastManager; - /** * Handles setting up and generating the local repo used to swap apps, including * the {@code index.jar}, the symlinks to the shared APKs, etc. diff --git a/app/src/full/java/org/fdroid/fdroid/nearby/SDCardScannerService.java b/app/src/full/java/org/fdroid/fdroid/nearby/SDCardScannerService.java index 9b38e5c48..5229b03bd 100644 --- a/app/src/full/java/org/fdroid/fdroid/nearby/SDCardScannerService.java +++ b/app/src/full/java/org/fdroid/fdroid/nearby/SDCardScannerService.java @@ -25,11 +25,12 @@ import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; import android.net.Uri; -import android.os.Build; import android.os.Environment; import android.os.Process; import android.util.Log; +import androidx.core.content.ContextCompat; + import org.fdroid.fdroid.Utils; import org.fdroid.index.SigningException; import org.fdroid.index.v1.IndexV1UpdaterKt; @@ -44,8 +45,6 @@ import java.util.Collections; import java.util.HashSet; import java.util.List; -import androidx.core.content.ContextCompat; - /** * An {@link IntentService} subclass for scanning removable "external storage" * for F-Droid package repos, e.g. SD Cards. This is intended to support diff --git a/app/src/full/java/org/fdroid/fdroid/nearby/SelectAppsView.java b/app/src/full/java/org/fdroid/fdroid/nearby/SelectAppsView.java index f53e53379..1b4eeb5c1 100644 --- a/app/src/full/java/org/fdroid/fdroid/nearby/SelectAppsView.java +++ b/app/src/full/java/org/fdroid/fdroid/nearby/SelectAppsView.java @@ -2,7 +2,6 @@ package org.fdroid.fdroid.nearby; import static java.util.Objects.requireNonNull; -import android.annotation.TargetApi; import android.content.Context; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; @@ -13,10 +12,8 @@ import android.view.ContextThemeWrapper; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import android.widget.AdapterView; import android.widget.BaseAdapter; import android.widget.CheckBox; -import android.widget.CompoundButton; import android.widget.ImageView; import android.widget.ListView; import android.widget.TextView; @@ -63,11 +60,7 @@ public class SelectAppsView extends SwapView { listView.setAdapter(adapter); listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); - listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { - public void onItemClick(AdapterView parent, View v, int position, long id) { - toggleAppSelected(position); - } - }); + listView.setOnItemClickListener((parent, v, position, id) -> toggleAppSelected(position)); afterAppsLoaded(); } @@ -129,7 +122,7 @@ public class SelectAppsView extends SwapView { filteredPackages.addAll(allPackages); } else { String query = requireNonNull(searchTerm).toLowerCase(Locale.US); - for (InstalledApp app: allPackages) { + for (InstalledApp app : allPackages) { if (app.name.toLowerCase(Locale.US).contains(query)) { filteredPackages.add(app); } @@ -190,12 +183,9 @@ public class SelectAppsView extends SwapView { checkBox.setOnCheckedChangeListener(null); checkBox.setChecked(listView.isItemChecked(position)); - checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { - @Override - public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { - listView.setItemChecked(position, isChecked); - toggleAppSelected(position); - } + checkBox.setOnCheckedChangeListener((buttonView, isChecked) -> { + listView.setItemChecked(position, isChecked); + toggleAppSelected(position); }); } } diff --git a/app/src/full/java/org/fdroid/fdroid/nearby/StartSwapView.java b/app/src/full/java/org/fdroid/fdroid/nearby/StartSwapView.java index 80a7a0c50..45dcf6d30 100644 --- a/app/src/full/java/org/fdroid/fdroid/nearby/StartSwapView.java +++ b/app/src/full/java/org/fdroid/fdroid/nearby/StartSwapView.java @@ -1,7 +1,6 @@ package org.fdroid.fdroid.nearby; import android.Manifest; -import android.annotation.TargetApi; import android.bluetooth.BluetoothAdapter; import android.content.BroadcastReceiver; import android.content.Context; @@ -14,7 +13,6 @@ import android.util.AttributeSet; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.CompoundButton; import android.widget.ImageView; @@ -22,6 +20,10 @@ import android.widget.ListView; import android.widget.ProgressBar; import android.widget.TextView; +import androidx.annotation.Nullable; +import androidx.core.content.ContextCompat; +import androidx.localbroadcastmanager.content.LocalBroadcastManager; + import com.google.android.material.button.MaterialButton; import com.google.android.material.switchmaterial.SwitchMaterial; @@ -32,9 +34,6 @@ import org.fdroid.fdroid.nearby.peers.Peer; import java.util.ArrayList; -import androidx.annotation.Nullable; -import androidx.core.content.ContextCompat; -import androidx.localbroadcastmanager.content.LocalBroadcastManager; import cc.mvdan.accesspoint.WifiApControl; @SuppressWarnings("LineLength") @@ -131,12 +130,7 @@ public class StartSwapView extends SwapView { private void uiInitButtons() { MaterialButton sendFDroidButton = findViewById(R.id.btn_send_fdroid); sendFDroidButton.setEllipsize(TextUtils.TruncateAt.END); - findViewById(R.id.btn_send_fdroid).setOnClickListener(new OnClickListener() { - @Override - public void onClick(View v) { - getActivity().sendFDroid(); - } - }); + findViewById(R.id.btn_send_fdroid).setOnClickListener(v -> getActivity().sendFDroid()); } /** @@ -160,12 +154,9 @@ public class StartSwapView extends SwapView { } } - peopleNearbyList.setOnItemClickListener(new AdapterView.OnItemClickListener() { - @Override - public void onItemClick(AdapterView parent, View view, int position, long id) { - Peer peer = peopleNearbyAdapter.getItem(position); - onPeerSelected(peer); - } + peopleNearbyList.setOnItemClickListener((parent, view, position, id) -> { + Peer peer = peopleNearbyAdapter.getItem(position); + onPeerSelected(peer); }); } diff --git a/app/src/full/java/org/fdroid/fdroid/nearby/SwapService.java b/app/src/full/java/org/fdroid/fdroid/nearby/SwapService.java index 71df5ba8a..513ac07cf 100644 --- a/app/src/full/java/org/fdroid/fdroid/nearby/SwapService.java +++ b/app/src/full/java/org/fdroid/fdroid/nearby/SwapService.java @@ -15,8 +15,14 @@ import android.os.IBinder; import android.text.TextUtils; import android.util.Log; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.core.app.NotificationCompat; +import androidx.core.app.ServiceCompat; +import androidx.core.content.ContextCompat; import androidx.lifecycle.LiveData; import androidx.lifecycle.MutableLiveData; +import androidx.localbroadcastmanager.content.LocalBroadcastManager; import org.fdroid.database.Repository; import org.fdroid.download.Downloader; @@ -49,18 +55,11 @@ import java.util.Set; import java.util.Timer; import java.util.TimerTask; -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.core.app.NotificationCompat; -import androidx.core.app.ServiceCompat; -import androidx.core.content.ContextCompat; -import androidx.localbroadcastmanager.content.LocalBroadcastManager; import cc.mvdan.accesspoint.WifiApControl; import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers; import io.reactivex.rxjava3.core.Completable; import io.reactivex.rxjava3.disposables.CompositeDisposable; import io.reactivex.rxjava3.schedulers.Schedulers; -import kotlin.Pair; /** * Central service which manages all of the different moving parts of swap @@ -396,30 +395,30 @@ public class SwapService extends Service { private void askServerToSwapWithUs(final Repository repo) { compositeDisposable.add( Completable.fromAction(() -> { - String swapBackUri = Utils.getLocalRepoUri(FDroidApp.repo).toString(); - HttpURLConnection conn = null; - try { - URL url = new URL(repo.getAddress().replace("/fdroid/repo", "/request-swap")); - conn = (HttpURLConnection) url.openConnection(); - conn.setRequestMethod("POST"); - conn.setDoInput(true); - conn.setDoOutput(true); + String swapBackUri = Utils.getLocalRepoUri(FDroidApp.repo).toString(); + HttpURLConnection conn = null; + try { + URL url = new URL(repo.getAddress().replace("/fdroid/repo", "/request-swap")); + conn = (HttpURLConnection) url.openConnection(); + conn.setRequestMethod("POST"); + conn.setDoInput(true); + conn.setDoOutput(true); - try (OutputStream outputStream = conn.getOutputStream(); - OutputStreamWriter writer = new OutputStreamWriter(outputStream)) { - writer.write("repo=" + swapBackUri); - writer.flush(); - } + try (OutputStream outputStream = conn.getOutputStream(); + OutputStreamWriter writer = new OutputStreamWriter(outputStream)) { + writer.write("repo=" + swapBackUri); + writer.flush(); + } - int responseCode = conn.getResponseCode(); - Utils.debugLog(TAG, "Asking server at " + repo.getAddress() + " to swap with us in return (by " + - "POSTing to \"/request-swap\" with repo \"" + swapBackUri + "\"): " + responseCode); - } finally { - if (conn != null) { - conn.disconnect(); - } - } - }) + int responseCode = conn.getResponseCode(); + Utils.debugLog(TAG, "Asking server at " + repo.getAddress() + " to swap with us in return (by " + + "POSTing to \"/request-swap\" with repo \"" + swapBackUri + "\"): " + responseCode); + } finally { + if (conn != null) { + conn.disconnect(); + } + } + }) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .onErrorComplete(e -> { @@ -567,12 +566,7 @@ public class SwapService extends Service { } } - private final Preferences.ChangeListener httpsEnabledListener = new Preferences.ChangeListener() { - @Override - public void onPreferenceChange() { - restartWiFiServices(); - } - }; + private final Preferences.ChangeListener httpsEnabledListener = this::restartWiFiServices; private final BroadcastReceiver onWifiChange = new BroadcastReceiver() { @Override diff --git a/app/src/full/java/org/fdroid/fdroid/nearby/SwapSuccessView.java b/app/src/full/java/org/fdroid/fdroid/nearby/SwapSuccessView.java index ae81b9ebf..bb9191ab0 100644 --- a/app/src/full/java/org/fdroid/fdroid/nearby/SwapSuccessView.java +++ b/app/src/full/java/org/fdroid/fdroid/nearby/SwapSuccessView.java @@ -1,6 +1,5 @@ package org.fdroid.fdroid.nearby; -import android.annotation.TargetApi; import android.app.PendingIntent; import android.content.BroadcastReceiver; import android.content.Context; @@ -101,7 +100,7 @@ public class SwapSuccessView extends SwapView { app.packageName = a.getPackageName(); app.iconFile = FileV2.fromPath("icons/" + a.getIcon()); try { - PackageInfo packageInfo = getContext().getPackageManager().getPackageInfo(app.packageName, 0); + PackageInfo packageInfo = getContext().getPackageManager().getPackageInfo(app.packageName, 0); app.installedVersionCode = packageInfo.versionCode; } catch (PackageManager.NameNotFoundException ignored) { } @@ -222,12 +221,12 @@ public class SwapSuccessView extends SwapView { ViewHolder(View view) { super(view); localBroadcastManager = LocalBroadcastManager.getInstance(getContext()); - progressView = (ProgressBar) view.findViewById(R.id.progress); - nameView = (TextView) view.findViewById(R.id.name); - iconView = (ImageView) view.findViewById(android.R.id.icon); - btnInstall = (Button) view.findViewById(R.id.btn_install); - statusInstalled = (TextView) view.findViewById(R.id.status_installed); - statusIncompatible = (TextView) view.findViewById(R.id.status_incompatible); + progressView = view.findViewById(R.id.progress); + nameView = view.findViewById(R.id.name); + iconView = view.findViewById(android.R.id.icon); + btnInstall = view.findViewById(R.id.btn_install); + statusInstalled = view.findViewById(R.id.status_installed); + statusIncompatible = view.findViewById(R.id.status_incompatible); } public void setApp(@NonNull App app) { @@ -389,16 +388,9 @@ public class SwapSuccessView extends SwapView { @Override public void onReceive(Context context, Intent intent) { int statusCode = intent.getIntExtra(UpdateService.EXTRA_STATUS_CODE, -1); - switch (statusCode) { - case UpdateService.STATUS_COMPLETE_WITH_CHANGES: - Utils.debugLog(TAG, "Swap repo has updates, notifying the list adapter."); - getActivity().runOnUiThread(new Runnable() { - @Override - public void run() { - adapter.notifyDataSetChanged(); - } - }); - break; + if (statusCode == UpdateService.STATUS_COMPLETE_WITH_CHANGES) { + Utils.debugLog(TAG, "Swap repo has updates, notifying the list adapter."); + getActivity().runOnUiThread(() -> adapter.notifyDataSetChanged()); } } }; diff --git a/app/src/full/java/org/fdroid/fdroid/nearby/SwapView.java b/app/src/full/java/org/fdroid/fdroid/nearby/SwapView.java index 830cc4add..0f08fcead 100644 --- a/app/src/full/java/org/fdroid/fdroid/nearby/SwapView.java +++ b/app/src/full/java/org/fdroid/fdroid/nearby/SwapView.java @@ -1,17 +1,16 @@ package org.fdroid.fdroid.nearby; -import android.annotation.TargetApi; import android.content.Context; import android.content.res.TypedArray; import android.util.AttributeSet; import android.widget.RelativeLayout; -import org.fdroid.fdroid.R; - import androidx.annotation.ColorInt; import androidx.annotation.LayoutRes; import androidx.core.content.ContextCompat; +import org.fdroid.fdroid.R; + /** * A {@link android.view.View} that registers to handle the swap events from * {@link SwapService}. diff --git a/app/src/full/java/org/fdroid/fdroid/nearby/SwapWorkflowActivity.java b/app/src/full/java/org/fdroid/fdroid/nearby/SwapWorkflowActivity.java index 27037f7fb..1f744c1d8 100644 --- a/app/src/full/java/org/fdroid/fdroid/nearby/SwapWorkflowActivity.java +++ b/app/src/full/java/org/fdroid/fdroid/nearby/SwapWorkflowActivity.java @@ -1,11 +1,11 @@ package org.fdroid.fdroid.nearby; -import android.annotation.TargetApi; +import static org.fdroid.fdroid.views.main.MainActivity.ACTION_REQUEST_SWAP; + import android.bluetooth.BluetoothAdapter; import android.content.BroadcastReceiver; import android.content.ComponentName; import android.content.Context; -import android.content.DialogInterface; import android.content.Intent; import android.content.IntentFilter; import android.content.ServiceConnection; @@ -27,13 +27,22 @@ import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.CheckBox; -import android.widget.CompoundButton; import android.widget.ImageView; import android.widget.ListView; import android.widget.ProgressBar; import android.widget.TextView; import android.widget.Toast; +import androidx.annotation.LayoutRes; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.annotation.StringRes; +import androidx.appcompat.app.AlertDialog; +import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.widget.SearchView; +import androidx.core.content.ContextCompat; +import androidx.localbroadcastmanager.content.LocalBroadcastManager; + import com.google.android.material.appbar.MaterialToolbar; import com.google.android.material.button.MaterialButton; import com.google.android.material.switchmaterial.SwitchMaterial; @@ -62,20 +71,9 @@ import java.util.Stack; import java.util.Timer; import java.util.TimerTask; -import androidx.annotation.LayoutRes; -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.annotation.StringRes; -import androidx.appcompat.app.AlertDialog; -import androidx.appcompat.app.AppCompatActivity; -import androidx.appcompat.widget.SearchView; -import androidx.core.content.ContextCompat; -import androidx.localbroadcastmanager.content.LocalBroadcastManager; import cc.mvdan.accesspoint.WifiApControl; import io.reactivex.rxjava3.disposables.CompositeDisposable; -import static org.fdroid.fdroid.views.main.MainActivity.ACTION_REQUEST_SWAP; - /** * This is the core of the UI for the whole nearby swap experience. Each * screen is implemented as a {@link View} with the related logic in this @@ -334,16 +332,13 @@ public class SwapWorkflowActivity extends AppCompatActivity { next.setIcon(drawableResId); } next.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS | MenuItem.SHOW_AS_ACTION_WITH_TEXT); - next.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { - @Override - public boolean onMenuItemClick(MenuItem item) { - sendNext(); - return true; - } + next.setOnMenuItemClickListener(item -> { + sendNext(); + return true; }); } - void sendNext() { + private void sendNext() { int currentLayoutResId = currentView.getLayoutResId(); switch (currentLayoutResId) { case R.layout.swap_select_apps: @@ -470,36 +465,27 @@ public class SwapWorkflowActivity extends AppCompatActivity { && FDroidApp.subnetInfo.isInRange(host); // on the same subnet as we are } - public void promptToSelectWifiNetwork() { + private void promptToSelectWifiNetwork() { new AlertDialog.Builder(this) .setTitle(R.string.swap_join_same_wifi) .setMessage(R.string.swap_join_same_wifi_desc) - .setNeutralButton(R.string.cancel, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - // Do nothing - } + .setNeutralButton(R.string.cancel, (dialog, which) -> { + // Do nothing }) - .setPositiveButton(R.string.wifi, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - SwapService.putWifiEnabledBeforeSwap(wifiManager.isWifiEnabled()); - wifiManager.setWifiEnabled(true); - Intent intent = new Intent(WifiManager.ACTION_PICK_WIFI_NETWORK); - intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - startActivity(intent); - } + .setPositiveButton(R.string.wifi, (dialog, which) -> { + SwapService.putWifiEnabledBeforeSwap(wifiManager.isWifiEnabled()); + wifiManager.setWifiEnabled(true); + Intent intent = new Intent(WifiManager.ACTION_PICK_WIFI_NETWORK); + intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + startActivity(intent); }) - .setNegativeButton(R.string.wifi_ap, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - if (Build.VERSION.SDK_INT >= 26) { - showTetheringSettings(); - } else if (!Settings.System.canWrite(getBaseContext())) { - requestWriteSettingsPermission(); - } else { - setupWifiAP(); - } + .setNegativeButton(R.string.wifi_ap, (dialog, which) -> { + if (Build.VERSION.SDK_INT >= 26) { + showTetheringSettings(); + } else if (!Settings.System.canWrite(getBaseContext())) { + requestWriteSettingsPermission(); + } else { + setupWifiAP(); } }) .create().show(); @@ -1051,12 +1037,7 @@ public class SwapWorkflowActivity extends AppCompatActivity { // TODO: Listen for "Connecting..." state and reflect that in the view too. private void setUpJoinWifi() { - currentView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - startActivity(new Intent(WifiManager.ACTION_PICK_WIFI_NETWORK)); - } - }); + currentView.setOnClickListener(v -> startActivity(new Intent(WifiManager.ACTION_PICK_WIFI_NETWORK))); TextView descriptionView = container.findViewById(R.id.text_description); ImageView wifiIcon = container.findViewById(R.id.wifi_icon); TextView ssidView = container.findViewById(R.id.wifi_ssid); @@ -1098,21 +1079,18 @@ public class SwapWorkflowActivity extends AppCompatActivity { } viewWifiNetwork.setOnClickListener(v -> promptToSelectWifiNetwork()); - wifiSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { - @Override - public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { - Context context = getApplicationContext(); - if (isChecked) { - if (wifiApControl != null && wifiApControl.isEnabled()) { - setupWifiAP(); - } else { - wifiManager.setWifiEnabled(true); - } - BonjourManager.start(context); + wifiSwitch.setOnCheckedChangeListener((buttonView, isChecked) -> { + Context context = getApplicationContext(); + if (isChecked) { + if (wifiApControl != null && wifiApControl.isEnabled()) { + setupWifiAP(); + } else { + wifiManager.setWifiEnabled(true); } - BonjourManager.setVisible(context, isChecked); - SwapService.putWifiVisibleUserPreference(isChecked); + BonjourManager.start(context); } + BonjourManager.setVisible(context, isChecked); + SwapService.putWifiVisibleUserPreference(isChecked); }); scanQrButton.setOnClickListener(v -> inflateSwapView(R.layout.swap_wifi_qr)); diff --git a/app/src/full/java/org/fdroid/fdroid/nearby/TreeUriScannerIntentService.java b/app/src/full/java/org/fdroid/fdroid/nearby/TreeUriScannerIntentService.java index 4a947d545..6966e130b 100644 --- a/app/src/full/java/org/fdroid/fdroid/nearby/TreeUriScannerIntentService.java +++ b/app/src/full/java/org/fdroid/fdroid/nearby/TreeUriScannerIntentService.java @@ -19,17 +19,17 @@ package org.fdroid.fdroid.nearby; -import android.annotation.TargetApi; import android.app.IntentService; import android.content.ContentResolver; import android.content.Context; import android.content.Intent; import android.net.Uri; -import android.os.Build; import android.os.Process; import android.util.Log; import android.widget.Toast; +import androidx.documentfile.provider.DocumentFile; + import org.apache.commons.io.FileUtils; import org.apache.commons.io.IOUtils; import org.fdroid.database.Repository; @@ -53,8 +53,6 @@ import java.util.jar.JarEntry; import java.util.jar.JarFile; import java.util.jar.JarInputStream; -import androidx.documentfile.provider.DocumentFile; - /** * An {@link IntentService} subclass for handling asynchronous scanning of a * removable storage device like an SD Card or USB OTG thumb drive using the diff --git a/app/src/full/java/org/fdroid/fdroid/nearby/UsbDeviceAttachedReceiver.java b/app/src/full/java/org/fdroid/fdroid/nearby/UsbDeviceAttachedReceiver.java index 41340b3d4..40cfe50d1 100644 --- a/app/src/full/java/org/fdroid/fdroid/nearby/UsbDeviceAttachedReceiver.java +++ b/app/src/full/java/org/fdroid/fdroid/nearby/UsbDeviceAttachedReceiver.java @@ -27,15 +27,12 @@ import android.content.UriPermission; import android.database.ContentObserver; import android.hardware.usb.UsbManager; import android.net.Uri; -import android.os.Build; import android.os.Handler; import android.text.TextUtils; import android.util.Log; import org.fdroid.fdroid.views.main.NearbyViewBinder; -import androidx.annotation.RequiresApi; - /** * This is just a shim to receive {@link UsbManager#ACTION_USB_ACCESSORY_ATTACHED} diff --git a/app/src/full/java/org/fdroid/fdroid/nearby/UsbDeviceDetachedReceiver.java b/app/src/full/java/org/fdroid/fdroid/nearby/UsbDeviceDetachedReceiver.java index 1ffe1ba70..8229e2d71 100644 --- a/app/src/full/java/org/fdroid/fdroid/nearby/UsbDeviceDetachedReceiver.java +++ b/app/src/full/java/org/fdroid/fdroid/nearby/UsbDeviceDetachedReceiver.java @@ -26,7 +26,6 @@ import android.content.Intent; import android.database.ContentObserver; import android.hardware.usb.UsbManager; import android.net.Uri; -import android.os.Build; import android.text.TextUtils; import android.util.Log; @@ -34,8 +33,6 @@ import org.fdroid.fdroid.views.main.NearbyViewBinder; import java.util.HashMap; -import androidx.annotation.RequiresApi; - /** * This is just a shim to receive {@link UsbManager#ACTION_USB_DEVICE_DETACHED} * events. diff --git a/app/src/full/java/org/fdroid/fdroid/nearby/WifiStateChangeService.java b/app/src/full/java/org/fdroid/fdroid/nearby/WifiStateChangeService.java index e21ec99e5..e6d92d18a 100644 --- a/app/src/full/java/org/fdroid/fdroid/nearby/WifiStateChangeService.java +++ b/app/src/full/java/org/fdroid/fdroid/nearby/WifiStateChangeService.java @@ -10,6 +10,19 @@ import android.net.wifi.WifiManager; import android.text.TextUtils; import android.util.Log; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.core.content.ContextCompat; +import androidx.localbroadcastmanager.content.LocalBroadcastManager; +import androidx.work.Constraints; +import androidx.work.Data; +import androidx.work.NetworkType; +import androidx.work.OneTimeWorkRequest; +import androidx.work.WorkManager; +import androidx.work.WorkRequest; +import androidx.work.Worker; +import androidx.work.WorkerParameters; + import org.apache.commons.net.util.SubnetUtils; import org.fdroid.database.Repository; import org.fdroid.fdroid.BuildConfig; @@ -28,18 +41,6 @@ import java.security.cert.Certificate; import java.util.Enumeration; import java.util.Locale; -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.core.content.ContextCompat; -import androidx.localbroadcastmanager.content.LocalBroadcastManager; -import androidx.work.Constraints; -import androidx.work.Data; -import androidx.work.NetworkType; -import androidx.work.OneTimeWorkRequest; -import androidx.work.WorkManager; -import androidx.work.WorkRequest; -import androidx.work.Worker; -import androidx.work.WorkerParameters; import cc.mvdan.accesspoint.WifiApControl; /** diff --git a/app/src/full/java/org/fdroid/fdroid/nearby/peers/BluetoothPeer.java b/app/src/full/java/org/fdroid/fdroid/nearby/peers/BluetoothPeer.java index 527be8837..75d6f4fbc 100644 --- a/app/src/full/java/org/fdroid/fdroid/nearby/peers/BluetoothPeer.java +++ b/app/src/full/java/org/fdroid/fdroid/nearby/peers/BluetoothPeer.java @@ -5,10 +5,10 @@ import android.bluetooth.BluetoothDevice; import android.os.Parcel; import android.text.TextUtils; -import org.fdroid.fdroid.R; - import androidx.annotation.Nullable; +import org.fdroid.fdroid.R; + public class BluetoothPeer implements Peer { private static final String BLUETOOTH_NAME_TAG = "FDroid:"; diff --git a/app/src/full/java/org/fdroid/fdroid/nearby/peers/BonjourPeer.java b/app/src/full/java/org/fdroid/fdroid/nearby/peers/BonjourPeer.java index 8876f965d..cca554f87 100644 --- a/app/src/full/java/org/fdroid/fdroid/nearby/peers/BonjourPeer.java +++ b/app/src/full/java/org/fdroid/fdroid/nearby/peers/BonjourPeer.java @@ -4,13 +4,13 @@ import android.net.Uri; import android.os.Parcel; import android.text.TextUtils; +import androidx.annotation.Nullable; + import org.fdroid.fdroid.FDroidApp; import javax.jmdns.ServiceInfo; import javax.jmdns.impl.FDroidServiceInfo; -import androidx.annotation.Nullable; - public class BonjourPeer extends WifiPeer { private static final String TAG = "BonjourPeer"; diff --git a/app/src/full/java/org/fdroid/fdroid/panic/CalculatorActivity.java b/app/src/full/java/org/fdroid/fdroid/panic/CalculatorActivity.java index 809f4c3d0..ed30cc1fb 100644 --- a/app/src/full/java/org/fdroid/fdroid/panic/CalculatorActivity.java +++ b/app/src/full/java/org/fdroid/fdroid/panic/CalculatorActivity.java @@ -6,6 +6,9 @@ import android.widget.Button; import android.widget.TextView; import android.widget.Toast; +import androidx.annotation.Nullable; +import androidx.appcompat.app.AppCompatActivity; + import com.google.android.material.appbar.MaterialToolbar; import org.fdroid.fdroid.FDroidApp; @@ -13,9 +16,6 @@ import org.fdroid.fdroid.R; import java.util.regex.Pattern; -import androidx.annotation.Nullable; -import androidx.appcompat.app.AppCompatActivity; - /** * A very hacky calculator which is barely functional. * It is just meant to pass a very casual inspection. diff --git a/app/src/full/java/org/fdroid/fdroid/panic/DestructiveCheckBoxPreference.java b/app/src/full/java/org/fdroid/fdroid/panic/DestructiveCheckBoxPreference.java index 243e01bf9..dccca12cc 100644 --- a/app/src/full/java/org/fdroid/fdroid/panic/DestructiveCheckBoxPreference.java +++ b/app/src/full/java/org/fdroid/fdroid/panic/DestructiveCheckBoxPreference.java @@ -3,12 +3,12 @@ package org.fdroid.fdroid.panic; import android.content.Context; import android.util.AttributeSet; -import org.fdroid.fdroid.R; - import androidx.core.content.ContextCompat; import androidx.preference.CheckBoxPreference; import androidx.preference.PreferenceViewHolder; +import org.fdroid.fdroid.R; + public class DestructiveCheckBoxPreference extends CheckBoxPreference { public DestructiveCheckBoxPreference(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); diff --git a/app/src/full/java/org/fdroid/fdroid/panic/DestructivePreference.java b/app/src/full/java/org/fdroid/fdroid/panic/DestructivePreference.java index 4a42ca116..9c5bf991b 100644 --- a/app/src/full/java/org/fdroid/fdroid/panic/DestructivePreference.java +++ b/app/src/full/java/org/fdroid/fdroid/panic/DestructivePreference.java @@ -3,12 +3,12 @@ package org.fdroid.fdroid.panic; import android.content.Context; import android.util.AttributeSet; -import org.fdroid.fdroid.R; - import androidx.core.content.ContextCompat; import androidx.preference.Preference; import androidx.preference.PreferenceViewHolder; +import org.fdroid.fdroid.R; + public class DestructivePreference extends Preference { public DestructivePreference(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); diff --git a/app/src/full/java/org/fdroid/fdroid/panic/ExitActivity.java b/app/src/full/java/org/fdroid/fdroid/panic/ExitActivity.java index b291bede2..8d7414414 100644 --- a/app/src/full/java/org/fdroid/fdroid/panic/ExitActivity.java +++ b/app/src/full/java/org/fdroid/fdroid/panic/ExitActivity.java @@ -1,7 +1,6 @@ package org.fdroid.fdroid.panic; import android.content.Intent; -import android.os.Build; import android.os.Bundle; import androidx.appcompat.app.AppCompatActivity; @@ -17,19 +16,16 @@ public class ExitActivity extends AppCompatActivity { System.exit(0); } - public static void exitAndRemoveFromRecentApps(final AppCompatActivity activity) { - activity.runOnUiThread(new Runnable() { - @Override - public void run() { - Intent intent = new Intent(activity, ExitActivity.class); + static void exitAndRemoveFromRecentApps(final AppCompatActivity activity) { + activity.runOnUiThread(() -> { + Intent intent = new Intent(activity, ExitActivity.class); - intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK - | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS - | Intent.FLAG_ACTIVITY_CLEAR_TASK - | Intent.FLAG_ACTIVITY_NO_ANIMATION); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK + | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS + | Intent.FLAG_ACTIVITY_CLEAR_TASK + | Intent.FLAG_ACTIVITY_NO_ANIMATION); - activity.startActivity(intent); - } + activity.startActivity(intent); }); } diff --git a/app/src/full/java/org/fdroid/fdroid/panic/HidingManager.java b/app/src/full/java/org/fdroid/fdroid/panic/HidingManager.java index 9b5db97bf..bd2f745c1 100644 --- a/app/src/full/java/org/fdroid/fdroid/panic/HidingManager.java +++ b/app/src/full/java/org/fdroid/fdroid/panic/HidingManager.java @@ -2,19 +2,18 @@ package org.fdroid.fdroid.panic; import android.content.ComponentName; import android.content.Context; -import android.content.DialogInterface; import android.content.Intent; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.pm.ServiceInfo; +import androidx.appcompat.app.AlertDialog; +import androidx.core.app.NotificationManagerCompat; + import org.fdroid.fdroid.BuildConfig; import org.fdroid.fdroid.R; import org.fdroid.fdroid.views.main.MainActivity; -import androidx.appcompat.app.AlertDialog; -import androidx.core.app.NotificationManagerCompat; - /** * This class is encapsulating all methods related to hiding the app from the launcher * and restoring it. @@ -47,18 +46,8 @@ public class HidingManager { builder.setMessage(context.getString(R.string.hiding_dialog_message, appName, HidingManager.getUnhidePin(context), context.getString(R.string.hiding_calculator))); builder.setPositiveButton(context.getString(R.string.panic_hide_title, appName), - new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - hide(context); - } - }); - builder.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialogInterface, int i) { - dialogInterface.cancel(); - } - }); + (dialog, which) -> hide(context)); + builder.setNegativeButton(R.string.cancel, (dialogInterface, i) -> dialogInterface.cancel()); builder.setView(R.layout.dialog_app_hiding); builder.create().show(); } diff --git a/app/src/full/java/org/fdroid/fdroid/panic/PanicPreferencesActivity.java b/app/src/full/java/org/fdroid/fdroid/panic/PanicPreferencesActivity.java index 740974dc5..ce355b7a7 100644 --- a/app/src/full/java/org/fdroid/fdroid/panic/PanicPreferencesActivity.java +++ b/app/src/full/java/org/fdroid/fdroid/panic/PanicPreferencesActivity.java @@ -1,15 +1,14 @@ package org.fdroid.fdroid.panic; import android.os.Bundle; -import android.view.View; + +import androidx.appcompat.app.AppCompatActivity; import com.google.android.material.appbar.MaterialToolbar; import org.fdroid.fdroid.FDroidApp; import org.fdroid.fdroid.R; -import androidx.appcompat.app.AppCompatActivity; - public class PanicPreferencesActivity extends AppCompatActivity { @Override diff --git a/app/src/full/java/org/fdroid/fdroid/panic/PanicPreferencesFragment.java b/app/src/full/java/org/fdroid/fdroid/panic/PanicPreferencesFragment.java index 40b7a89b8..51f951e57 100644 --- a/app/src/full/java/org/fdroid/fdroid/panic/PanicPreferencesFragment.java +++ b/app/src/full/java/org/fdroid/fdroid/panic/PanicPreferencesFragment.java @@ -54,20 +54,20 @@ public class PanicPreferencesFragment extends PreferenceFragmentCompat public void onCreatePreferences(Bundle bundle, String s) { addPreferencesFromResource(R.xml.preferences_panic); - pm = getActivity().getPackageManager(); - prefExit = (CheckBoxPreference) findPreference(Preferences.PREF_PANIC_EXIT); - prefApp = (ListPreference) findPreference(PREF_APP); - prefHide = (CheckBoxPreference) findPreference(Preferences.PREF_PANIC_HIDE); + pm = requireActivity().getPackageManager(); + prefExit = findPreference(Preferences.PREF_PANIC_EXIT); + prefApp = findPreference(PREF_APP); + prefHide = findPreference(Preferences.PREF_PANIC_HIDE); prefHide.setTitle(getString(R.string.panic_hide_title, getString(R.string.app_name))); - prefResetRepos = (CheckBoxPreference) findPreference(Preferences.PREF_PANIC_RESET_REPOS); - categoryAppsToUninstall = (PreferenceCategory) findPreference("pref_panic_apps_to_uninstall"); + prefResetRepos = findPreference(Preferences.PREF_PANIC_RESET_REPOS); + categoryAppsToUninstall = findPreference("pref_panic_apps_to_uninstall"); - if (PanicResponder.checkForDisconnectIntent(getActivity())) { + if (PanicResponder.checkForDisconnectIntent(requireActivity())) { // the necessary action should have been performed by the check already - getActivity().finish(); + requireActivity().finish(); return; } - String connectIntentSender = PanicResponder.getConnectIntentSender(getActivity()); + String connectIntentSender = PanicResponder.getConnectIntentSender(requireActivity()); // if there's a connecting app and it is not the old one if (!TextUtils.isEmpty(connectIntentSender) && !TextUtils.equals(connectIntentSender, PanicResponder .getTriggerPackageName(getActivity()))) { @@ -75,24 +75,21 @@ public class PanicPreferencesFragment extends PreferenceFragmentCompat showOptInDialog(); } - prefApp.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { - @Override - public boolean onPreferenceChange(Preference preference, Object newValue) { - String packageName = (String) newValue; - PanicResponder.setTriggerPackageName(getActivity(), packageName); - if (packageName.equals(Panic.PACKAGE_NAME_NONE)) { - prefHide.setChecked(false); - prefHide.setEnabled(false); - prefResetRepos.setChecked(false); - prefResetRepos.setEnabled(false); - getActivity().setResult(AppCompatActivity.RESULT_CANCELED); - } else { - prefHide.setEnabled(true); - prefResetRepos.setEnabled(true); - } - showPanicApp(packageName); - return true; + prefApp.setOnPreferenceChangeListener((preference, newValue) -> { + String packageName = (String) newValue; + PanicResponder.setTriggerPackageName(requireActivity(), packageName); + if (packageName.equals(Panic.PACKAGE_NAME_NONE)) { + prefHide.setChecked(false); + prefHide.setEnabled(false); + prefResetRepos.setChecked(false); + prefResetRepos.setEnabled(false); + requireActivity().setResult(AppCompatActivity.RESULT_CANCELED); + } else { + prefHide.setEnabled(true); + prefResetRepos.setEnabled(true); } + showPanicApp(packageName); + return true; }); showPanicApp(PanicResponder.getTriggerPackageName(getActivity())); } @@ -181,17 +178,14 @@ public class PanicPreferencesFragment extends PreferenceFragmentCompat if (entries.size() <= 1) { // bring the user to Ripple if no other panic apps are available - prefApp.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { - @Override - public boolean onPreferenceClick(Preference preference) { - Intent intent = new Intent(Intent.ACTION_VIEW); - intent.setData(Uri.parse("market://details?id=info.guardianproject.ripple")); - intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - if (intent.resolveActivity(getActivity().getPackageManager()) != null) { - startActivity(intent); - } - return true; + prefApp.setOnPreferenceClickListener(preference -> { + Intent intent = new Intent(Intent.ACTION_VIEW); + intent.setData(Uri.parse("market://details?id=info.guardianproject.ripple")); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + if (intent.resolveActivity(requireActivity().getPackageManager()) != null) { + startActivity(intent); } + return true; }); } @@ -201,9 +195,9 @@ public class PanicPreferencesFragment extends PreferenceFragmentCompat prefApp.setSummary(getString(R.string.panic_app_setting_summary)); prefApp.setIcon(null); // otherwise re-setting view resource doesn't work - Drawable icon = ContextCompat.getDrawable(getActivity(), R.drawable.ic_cancel); + Drawable icon = ContextCompat.getDrawable(requireActivity(), R.drawable.ic_cancel); TypedValue typedValue = new TypedValue(); - Resources.Theme theme = getActivity().getTheme(); + Resources.Theme theme = requireActivity().getTheme(); theme.resolveAttribute(R.attr.appListItem, typedValue, true); @ColorInt int color = typedValue.data; icon.setColorFilter(color, PorterDuff.Mode.SRC_IN); @@ -223,30 +217,24 @@ public class PanicPreferencesFragment extends PreferenceFragmentCompat showWipeList(); } catch (PackageManager.NameNotFoundException e) { // revert back to no app, just to be safe - PanicResponder.setTriggerPackageName(getActivity(), Panic.PACKAGE_NAME_NONE); + PanicResponder.setTriggerPackageName(requireActivity(), Panic.PACKAGE_NAME_NONE); showPanicApp(Panic.PACKAGE_NAME_NONE); } } } private void showOptInDialog() { - DialogInterface.OnClickListener okListener = new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialogInterface, int i) { - PanicResponder.setTriggerPackageName(getActivity()); - showPanicApp(PanicResponder.getTriggerPackageName(getActivity())); - getActivity().setResult(AppCompatActivity.RESULT_OK); - } + DialogInterface.OnClickListener okListener = (dialogInterface, i) -> { + PanicResponder.setTriggerPackageName(requireActivity()); + showPanicApp(PanicResponder.getTriggerPackageName(getActivity())); + requireActivity().setResult(AppCompatActivity.RESULT_OK); }; - DialogInterface.OnClickListener cancelListener = new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialogInterface, int i) { - getActivity().setResult(AppCompatActivity.RESULT_CANCELED); - getActivity().finish(); - } + DialogInterface.OnClickListener cancelListener = (dialogInterface, i) -> { + requireActivity().setResult(AppCompatActivity.RESULT_CANCELED); + requireActivity().finish(); }; - AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); + AlertDialog.Builder builder = new AlertDialog.Builder(requireActivity()); builder.setTitle(getString(R.string.panic_app_dialog_title)); CharSequence app = getString(R.string.panic_app_unknown_app); @@ -268,7 +256,7 @@ public class PanicPreferencesFragment extends PreferenceFragmentCompat @Nullable private String getCallingPackageName() { - ComponentName componentName = getActivity().getCallingActivity(); + ComponentName componentName = requireActivity().getCallingActivity(); String packageName = null; if (componentName != null) { packageName = componentName.getPackageName(); @@ -278,31 +266,20 @@ public class PanicPreferencesFragment extends PreferenceFragmentCompat private void showHideConfirmationDialog() { String appName = getString(R.string.app_name); - AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); + AlertDialog.Builder builder = new AlertDialog.Builder(requireActivity()); builder.setTitle(R.string.panic_hide_warning_title); builder.setMessage(getString(R.string.panic_hide_warning_message, appName, - HidingManager.getUnhidePin(getActivity()), getString(R.string.hiding_calculator))); - builder.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialogInterface, int i) { - // enable "exit" if "hiding" gets enabled - prefExit.setChecked(true); - // dismiss, but not cancel dialog - dialogInterface.dismiss(); - } + HidingManager.getUnhidePin(requireActivity()), getString(R.string.hiding_calculator))); + builder.setPositiveButton(R.string.ok, (dialogInterface, i) -> { + // enable "exit" if "hiding" gets enabled + prefExit.setChecked(true); + // dismiss, but not cancel dialog + dialogInterface.dismiss(); }); - builder.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialogInterface, int i) { - dialogInterface.cancel(); - } - }); - builder.setOnCancelListener(new DialogInterface.OnCancelListener() { - @Override - public void onCancel(DialogInterface dialogInterface) { - prefHide.setChecked(false); - prefResetRepos.setChecked(false); - } + builder.setNegativeButton(R.string.cancel, (dialogInterface, i) -> dialogInterface.cancel()); + builder.setOnCancelListener(dialogInterface -> { + prefHide.setChecked(false); + prefResetRepos.setChecked(false); }); builder.setView(R.layout.dialog_app_hiding); builder.create().show(); diff --git a/app/src/full/java/org/fdroid/fdroid/panic/PanicResponderActivity.java b/app/src/full/java/org/fdroid/fdroid/panic/PanicResponderActivity.java index b2d1c1df9..d6f7a6c8d 100644 --- a/app/src/full/java/org/fdroid/fdroid/panic/PanicResponderActivity.java +++ b/app/src/full/java/org/fdroid/fdroid/panic/PanicResponderActivity.java @@ -6,6 +6,9 @@ import android.content.Intent; import android.os.Bundle; import android.util.Log; +import androidx.appcompat.app.AppCompatActivity; +import androidx.localbroadcastmanager.content.LocalBroadcastManager; + import org.fdroid.fdroid.Preferences; import org.fdroid.fdroid.data.Apk; import org.fdroid.fdroid.data.App; @@ -19,8 +22,6 @@ import java.util.Collections; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; -import androidx.appcompat.app.AppCompatActivity; -import androidx.localbroadcastmanager.content.LocalBroadcastManager; import info.guardianproject.panic.Panic; import info.guardianproject.panic.PanicResponder; diff --git a/app/src/full/java/org/fdroid/fdroid/panic/SelectInstalledAppListAdapter.java b/app/src/full/java/org/fdroid/fdroid/panic/SelectInstalledAppListAdapter.java index dbcdb1f7d..e907a92f7 100644 --- a/app/src/full/java/org/fdroid/fdroid/panic/SelectInstalledAppListAdapter.java +++ b/app/src/full/java/org/fdroid/fdroid/panic/SelectInstalledAppListAdapter.java @@ -3,6 +3,9 @@ package org.fdroid.fdroid.panic; import android.view.View; import android.view.ViewGroup; +import androidx.annotation.NonNull; +import androidx.appcompat.app.AppCompatActivity; + import org.fdroid.fdroid.Preferences; import org.fdroid.fdroid.R; import org.fdroid.fdroid.views.installed.InstalledAppListAdapter; @@ -10,9 +13,6 @@ import org.fdroid.fdroid.views.installed.InstalledAppListItemController; import java.util.Set; -import androidx.annotation.NonNull; -import androidx.appcompat.app.AppCompatActivity; - public class SelectInstalledAppListAdapter extends InstalledAppListAdapter { private final Set selectedApps; diff --git a/app/src/full/java/org/fdroid/fdroid/panic/SelectInstalledAppListItemController.java b/app/src/full/java/org/fdroid/fdroid/panic/SelectInstalledAppListItemController.java index 6498094ca..dedb23b63 100644 --- a/app/src/full/java/org/fdroid/fdroid/panic/SelectInstalledAppListItemController.java +++ b/app/src/full/java/org/fdroid/fdroid/panic/SelectInstalledAppListItemController.java @@ -2,6 +2,10 @@ package org.fdroid.fdroid.panic; import android.view.View; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.appcompat.app.AppCompatActivity; + import org.fdroid.fdroid.AppUpdateStatusManager; import org.fdroid.fdroid.data.Apk; import org.fdroid.fdroid.data.App; @@ -10,10 +14,6 @@ import org.fdroid.fdroid.views.installed.InstalledAppListItemController; import java.util.Set; -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.appcompat.app.AppCompatActivity; - /** * Shows the currently installed apps as a selectable list. */ diff --git a/app/src/full/java/org/fdroid/fdroid/panic/SelectInstalledAppsActivity.java b/app/src/full/java/org/fdroid/fdroid/panic/SelectInstalledAppsActivity.java index 0923fb2cd..71df6979e 100644 --- a/app/src/full/java/org/fdroid/fdroid/panic/SelectInstalledAppsActivity.java +++ b/app/src/full/java/org/fdroid/fdroid/panic/SelectInstalledAppsActivity.java @@ -26,6 +26,10 @@ import android.view.MenuItem; import android.view.View; import android.widget.TextView; +import androidx.appcompat.app.AppCompatActivity; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + import com.google.android.material.appbar.MaterialToolbar; import org.fdroid.database.AppListItem; @@ -38,10 +42,6 @@ import org.fdroid.fdroid.Utils; import org.fdroid.fdroid.data.DBHelper; import org.fdroid.fdroid.views.installed.InstalledAppListAdapter; -import androidx.appcompat.app.AppCompatActivity; -import androidx.recyclerview.widget.LinearLayoutManager; -import androidx.recyclerview.widget.RecyclerView; - import java.util.List; public class SelectInstalledAppsActivity extends AppCompatActivity { diff --git a/app/src/full/java/org/fdroid/fdroid/views/main/MainViewController.java b/app/src/full/java/org/fdroid/fdroid/views/main/MainViewController.java index 6da7d53a2..96c38af07 100644 --- a/app/src/full/java/org/fdroid/fdroid/views/main/MainViewController.java +++ b/app/src/full/java/org/fdroid/fdroid/views/main/MainViewController.java @@ -2,15 +2,15 @@ package org.fdroid.fdroid.views.main; import android.widget.FrameLayout; -import org.fdroid.fdroid.R; -import org.fdroid.fdroid.views.PreferencesFragment; -import org.fdroid.fdroid.views.updates.UpdatesViewBinder; - import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; import androidx.fragment.app.Fragment; import androidx.recyclerview.widget.RecyclerView; +import org.fdroid.fdroid.R; +import org.fdroid.fdroid.views.PreferencesFragment; +import org.fdroid.fdroid.views.updates.UpdatesViewBinder; + /** * Decides which view on the main screen to attach to a given {@link FrameLayout}. This class * doesn't know which view it will be rendering at the time it is constructed. Rather, at some 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 932e3aa0e..fadc7ae07 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 @@ -22,6 +22,10 @@ import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast; +import androidx.appcompat.app.AppCompatActivity; +import androidx.core.app.ActivityCompat; +import androidx.core.content.ContextCompat; + import org.fdroid.fdroid.R; import org.fdroid.fdroid.Utils; import org.fdroid.fdroid.nearby.SDCardScannerService; @@ -30,11 +34,7 @@ import org.fdroid.fdroid.nearby.TreeUriScannerIntentService; import java.io.File; import java.util.List; - -import androidx.annotation.RequiresApi; -import androidx.appcompat.app.AppCompatActivity; -import androidx.core.app.ActivityCompat; -import androidx.core.content.ContextCompat; +import java.util.concurrent.Executor; /** * A splash screen encouraging people to start the swap process. The swap @@ -81,16 +81,13 @@ public class NearbyViewBinder { ImageView nearbySplash = swapView.findViewById(R.id.image); Button startButton = swapView.findViewById(R.id.find_people_button); - startButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - final String coarseLocation = Manifest.permission.ACCESS_COARSE_LOCATION; - if (PackageManager.PERMISSION_GRANTED != ContextCompat.checkSelfPermission(activity, coarseLocation)) { - ActivityCompat.requestPermissions(activity, new String[]{coarseLocation}, - MainActivity.REQUEST_LOCATION_PERMISSIONS); - } else { - ContextCompat.startForegroundService(activity, new Intent(activity, SwapService.class)); - } + startButton.setOnClickListener(v -> { + final String coarseLocation = Manifest.permission.ACCESS_COARSE_LOCATION; + if (PackageManager.PERMISSION_GRANTED != ContextCompat.checkSelfPermission(activity, coarseLocation)) { + ActivityCompat.requestPermissions(activity, new String[]{coarseLocation}, + MainActivity.REQUEST_LOCATION_PERMISSIONS); + } else { + ContextCompat.startForegroundService(activity, new Intent(activity, SwapService.class)); } }); @@ -116,18 +113,17 @@ public class NearbyViewBinder { readExternalStorageText.setVisibility(View.VISIBLE); Button requestReadExternalStorage = swapView.findViewById(R.id.request_read_external_storage_button); requestReadExternalStorage.setVisibility(View.VISIBLE); - requestReadExternalStorage.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if ((externalStorage == null || !externalStorage.canRead()) && PackageManager.PERMISSION_GRANTED != ContextCompat.checkSelfPermission(activity, writeExternalStorage)) { - 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); - } + requestReadExternalStorage.setOnClickListener(v -> { + if ((externalStorage == null || !externalStorage.canRead()) + && PackageManager.PERMISSION_GRANTED != ContextCompat.checkSelfPermission(activity, + writeExternalStorage)) { + 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); } }); } @@ -185,12 +181,10 @@ public class NearbyViewBinder { } requestStorageVolume.setVisibility(View.VISIBLE); - requestStorageVolume.setOnClickListener(new View.OnClickListener() { - @Override - @RequiresApi(api = 24) - public void onClick(View v) { - List list = context.getContentResolver().getPersistedUriPermissions(); - if (list != null) for (UriPermission uriPermission : list) { + requestStorageVolume.setOnClickListener(v -> { + List list = context.getContentResolver().getPersistedUriPermissions(); + if (list != null) { + for (UriPermission uriPermission : list) { Uri uri = uriPermission.getUri(); if (uri.getPath().equals(String.format("/tree/%s:", storageVolume.getUuid()))) { intent.setData(uri); @@ -198,23 +192,23 @@ public class NearbyViewBinder { return; } } + } - AppCompatActivity activity = null; - if (context instanceof AppCompatActivity) { - activity = (AppCompatActivity) context; - } else if (swapView != null && swapView.getContext() instanceof AppCompatActivity) { - activity = (AppCompatActivity) swapView.getContext(); - } + AppCompatActivity activity = null; + if (context instanceof AppCompatActivity) { + activity = (AppCompatActivity) context; + } else if (swapView != null && swapView.getContext() instanceof AppCompatActivity) { + activity = (AppCompatActivity) swapView.getContext(); + } - if (activity != null) { - activity.startActivityForResult(intent, MainActivity.REQUEST_STORAGE_ACCESS); - } else { - // scan in the background without requesting permissions - Toast.makeText(context.getApplicationContext(), - context.getString(R.string.scan_removable_storage_toast, externalStorage), - Toast.LENGTH_SHORT).show(); - SDCardScannerService.scan(context); - } + if (activity != null) { + activity.startActivityForResult(intent, MainActivity.REQUEST_STORAGE_ACCESS); + } else { + // scan in the background without requesting permissions + Toast.makeText(context.getApplicationContext(), + context.getString(R.string.scan_removable_storage_toast, externalStorage), + Toast.LENGTH_SHORT).show(); + SDCardScannerService.scan(context); } }); } diff --git a/app/src/full/res/drawable/check.xml b/app/src/full/res/drawable/check.xml index ad2fc074f..3f26c70ce 100644 --- a/app/src/full/res/drawable/check.xml +++ b/app/src/full/res/drawable/check.xml @@ -5,5 +5,7 @@ android:viewportWidth="24" android:viewportHeight="24" android:tint="?attr/colorControlNormal"> - + \ No newline at end of file diff --git a/app/src/full/res/drawable/ic_add_circle_outline.xml b/app/src/full/res/drawable/ic_add_circle_outline.xml index 0c2492156..c6c1d9a0a 100644 --- a/app/src/full/res/drawable/ic_add_circle_outline.xml +++ b/app/src/full/res/drawable/ic_add_circle_outline.xml @@ -4,7 +4,7 @@ android:viewportWidth="24" android:viewportHeight="24" android:tint="?attr/colorControlNormal"> - + diff --git a/app/src/full/res/drawable/ic_apps.xml b/app/src/full/res/drawable/ic_apps.xml index 7b7dbf036..af3bfb8ef 100644 --- a/app/src/full/res/drawable/ic_apps.xml +++ b/app/src/full/res/drawable/ic_apps.xml @@ -4,7 +4,7 @@ android:viewportWidth="24" android:viewportHeight="24" android:tint="?attr/colorControlNormal"> - + diff --git a/app/src/full/res/drawable/ic_arrow_forward.xml b/app/src/full/res/drawable/ic_arrow_forward.xml index 8a3f43c4c..8083d5920 100644 --- a/app/src/full/res/drawable/ic_arrow_forward.xml +++ b/app/src/full/res/drawable/ic_arrow_forward.xml @@ -1,5 +1,10 @@ - - + + diff --git a/app/src/full/res/drawable/ic_bluetooth.xml b/app/src/full/res/drawable/ic_bluetooth.xml index e2329ce25..287c8fb08 100644 --- a/app/src/full/res/drawable/ic_bluetooth.xml +++ b/app/src/full/res/drawable/ic_bluetooth.xml @@ -4,7 +4,7 @@ android:viewportWidth="24" android:viewportHeight="24" android:tint="?attr/colorControlNormal"> - + diff --git a/app/src/full/res/drawable/ic_bluetooth_searching.xml b/app/src/full/res/drawable/ic_bluetooth_searching.xml index 24ff79def..c4b89a589 100644 --- a/app/src/full/res/drawable/ic_bluetooth_searching.xml +++ b/app/src/full/res/drawable/ic_bluetooth_searching.xml @@ -4,7 +4,7 @@ android:viewportWidth="24" android:viewportHeight="24" android:tint="?attr/colorControlNormal"> - + diff --git a/app/src/full/res/drawable/ic_qr_code.xml b/app/src/full/res/drawable/ic_qr_code.xml index 8239660dc..a2ef5ec78 100644 --- a/app/src/full/res/drawable/ic_qr_code.xml +++ b/app/src/full/res/drawable/ic_qr_code.xml @@ -4,37 +4,37 @@ android:viewportWidth="24" android:viewportHeight="24" android:tint="?attr/colorControlNormal"> - - - - - - - - - - - + + + + + + + + + + + diff --git a/app/src/full/res/drawable/ic_wifi_tethering.xml b/app/src/full/res/drawable/ic_wifi_tethering.xml index bdc1e2354..c5db5777c 100644 --- a/app/src/full/res/drawable/ic_wifi_tethering.xml +++ b/app/src/full/res/drawable/ic_wifi_tethering.xml @@ -6,5 +6,5 @@ android:tint="?attr/colorControlNormal"> + android:pathData="M12,11c-1.1,0 -2,0.9 -2,2s0.9,2 2,2 2,-0.9 2,-2 -0.9,-2 -2,-2zM18,13c0,-3.56 -3.11,-6.4 -6.75,-5.95 -2.62,0.32 -4.78,2.41 -5.18,5.02 -0.33,2.15 0.49,4.11 1.93,5.4 0.48,0.43 1.23,0.33 1.56,-0.23l0.01,-0.01c0.24,-0.42 0.14,-0.93 -0.22,-1.26 -1.03,-0.93 -1.59,-2.37 -1.22,-3.94 0.33,-1.42 1.48,-2.57 2.9,-2.91C13.65,8.49 16,10.47 16,13c0,1.18 -0.52,2.23 -1.33,2.96 -0.36,0.32 -0.47,0.84 -0.23,1.26l0.01,0.01c0.31,0.53 1.03,0.69 1.5,0.28C17.2,16.41 18,14.8 18,13zM10.83,3.07c-4.62,0.52 -8.35,4.33 -8.78,8.96 -0.35,3.7 1.32,7.02 4.02,9.01 0.48,0.35 1.16,0.2 1.46,-0.31 0.25,-0.43 0.14,-0.99 -0.26,-1.29 -2.28,-1.69 -3.65,-4.55 -3.16,-7.7 0.54,-3.5 3.46,-6.29 6.98,-6.68C15.91,4.51 20,8.28 20,13c0,2.65 -1.29,4.98 -3.27,6.44 -0.4,0.3 -0.51,0.85 -0.26,1.29 0.3,0.52 0.98,0.66 1.46,0.31C20.4,19.22 22,16.3 22,13c0,-5.91 -5.13,-10.62 -11.17,-9.93z" /> diff --git a/app/src/full/res/drawable/nearby_splash.xml b/app/src/full/res/drawable/nearby_splash.xml index cee12a2cf..c118830a3 100644 --- a/app/src/full/res/drawable/nearby_splash.xml +++ b/app/src/full/res/drawable/nearby_splash.xml @@ -1,6 +1,12 @@ - - + + android:strokeColor="#00000000" + android:strokeWidth="1" /> diff --git a/app/src/full/res/layout-sw480dp/start_swap_header.xml b/app/src/full/res/layout-sw480dp/start_swap_header.xml index 2789b8ae1..dae55f41a 100644 --- a/app/src/full/res/layout-sw480dp/start_swap_header.xml +++ b/app/src/full/res/layout-sw480dp/start_swap_header.xml @@ -1,34 +1,33 @@ - + android:id="@+id/header" + android:layout_width="match_parent" + android:layout_height="130dp" + android:layout_alignParentTop="true" + tools:showIn="@layout/swap_start_swap"> + android:layout_width="match_parent" + android:layout_height="match_parent" + android:scaleType="centerCrop" + app:srcCompat="@drawable/swap_start_header" /> + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_centerHorizontal="true" + android:layout_alignParentBottom="true" + android:padding="20dp" + android:paddingLeft="30dp" + android:paddingRight="30dp" + android:paddingEnd="30dp" + android:gravity="center" + android:textAlignment="center" + android:text="@string/swap_intro" + android:textColor="@android:color/white" + android:textSize="18sp" + tools:ignore="UnusedAttribute" /> \ No newline at end of file diff --git a/app/src/full/res/layout/activity_calculator.xml b/app/src/full/res/layout/activity_calculator.xml index 72f1fb137..a1b233b91 100644 --- a/app/src/full/res/layout/activity_calculator.xml +++ b/app/src/full/res/layout/activity_calculator.xml @@ -1,301 +1,300 @@ - + + android:id="@+id/topAppBarLayout" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:fitsSystemWindows="true" + app:liftOnScroll="true" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent"> + android:id="@+id/toolbar" + android:layout_width="match_parent" + android:layout_height="?attr/actionBarSize" + style="@style/Widget.MaterialComponents.Toolbar.PrimarySurface" /> + android:id="@+id/textView" + android:layout_width="0dp" + android:layout_height="0dp" + android:layout_marginBottom="8dp" + android:layout_marginEnd="8dp" + android:layout_marginStart="8dp" + android:layout_marginTop="8dp" + android:gravity="bottom|end" + android:padding="5dp" + android:textAlignment="textEnd" + android:textSize="22sp" + android:typeface="monospace" + app:layout_constraintBottom_toTopOf="@+id/ce" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@+id/topAppBarLayout" + tools:text="1337+42" />