167 Commits

Author SHA1 Message Date
Hans-Christoph Steiner
8773d6205c rename BannerUpdatingRepos --> StatusBanner 2021-04-13 16:26:23 +02:00
Hans-Christoph Steiner
cf94cfb543
run Android Studio's Ctrl-Alt-O Organize Imports on all .java files 2021-04-13 10:23:59 +02:00
proletarius101
755588202f feat: rebase app themes to material themes 2021-04-12 16:36:17 +00:00
proletarius101
f8f48e1be4 Replace deprecated methods introduced 2021-04-07 14:02:48 +00:00
proletarius101
528eecb63c Extensively use appcompat 2021-04-07 14:02:48 +00:00
Hans-Christoph Steiner
ce7d241196 CleanCacheWorker: delete all package files, not just *.apk
The installer can copy OTA .zip, *.obf, etc. there too.

refs #1869
2021-03-03 18:49:47 +01:00
Hans-Christoph Steiner
2a31b0dc61 remove some easy to fix @SuppressWarnings("LineLength") 2021-03-03 18:49:47 +01:00
proletarius101
6e95bbe380 Fix swap workflow's back button 2021-02-23 19:55:48 +00:00
Hans-Christoph Steiner
6fa5ff6608 fix lint Error: Must use app:tint instead of android:tint [UseAppTint] 2021-02-23 17:53:33 +01:00
Hans-Christoph Steiner
292d3219d6 do not crash unregistering bluetooth receiver on devices w/o Bluetooth
This is probably mostly only emulators
2021-02-23 17:53:33 +01:00
Hans-Christoph Steiner
a0c809f0ad onCreateLoader() is @NonNull, throw useful error instead 2021-02-09 17:57:40 +01:00
Hans-Christoph Steiner
4caab6a135
rename WhatsNew* to Latest* to match source string name 2021-02-08 13:16:04 +01:00
proletarius101
4737b32a60 fix icon and text tinting and replace some pixel maps with vector graphs
added vector graphs are the rounded variant
2021-02-04 21:43:59 +00:00
proletarius101
e2979f632d Change Activity to AppCompatActivity 2021-01-28 16:52:58 +00:00
Isira Seneviratne
1b428087cf Use ServiceCompat.stopForeground(). 2020-12-20 04:58:10 +05:30
Hans-Christoph Steiner
d00108ba68 support opening USB-OTG on android-29+
Here's another gem: they added this nice new API in android-24 and told
everyone this was THE WAY. Then they made it a no-op in android-29
https://developer.android.com/reference/android/os/storage/StorageVolume#createAccessIntent(java.lang.String)
2020-11-11 18:26:22 +01:00
Hans-Christoph Steiner
6887e09d88 properly track ContentObservers so they can be unregistered 2020-11-11 18:25:30 +01:00
Hans-Christoph Steiner
8209bf9a0b allow SDCard/TreeUri scans to be manually triggered by user button press
Before, the preference blocked all scans.  That lead to confusing UX
since the "Try it" and USB-OTG buttons would do nothing.
2020-11-11 18:25:30 +01:00
Hans-Christoph Steiner
6af66abf54 use MEDIA_* events to update USB-OTG detection
This means that sometimes the NearbyView is updated from a
BroadcastReceiver's Context, which is not an Activity.  So this has to
try a little harder to fetch the Activity instance needed for the
prompt to request permissions to a folder on the USB.  This adds a
failsafe to fallback to the file:/// scanning in SDCardScannerService.
2020-11-11 18:25:30 +01:00
Hans-Christoph Steiner
bd45f0fdc5 Merge branch 'Remove_MenuItemCompat' into 'master'
Remove MenuItemCompat usages.

See merge request fdroid/fdroidclient!948
2020-11-11 17:00:19 +00:00
Isira Seneviratne
fcd3fadc9e Remove MenuItemCompat usages. 2020-11-06 16:36:59 +05:30
Isira Seneviratne
fb8922b252 Use ContextCompat.getSystemService(). 2020-11-06 16:27:11 +05:30
Isira Seneviratne
8b9c624d75 Use ContextCompat.startForegroundService(). 2020-11-06 16:26:37 +05:30
Isira Seneviratne
5254a6f1aa Use ContextCompat.getColor(). 2020-11-06 16:26:34 +05:30
Isira Seneviratne
6a0cd0a14a Use ContextCompat.getDrawable(). 2020-11-06 16:25:23 +05:30
Isira Seneviratne
a92eb3c899 Replace search PNGs with a vector drawable. 2020-10-23 17:31:44 +05:30
Isira Seneviratne
7b0e2b3ec9 Replace forward arrow PNGs with a vector drawable. 2020-10-23 16:09:01 +05:30
Isira Seneviratne
607d27a139 Replace Bluetooth PNGs with a vector drawable. 2020-10-23 16:09:01 +05:30
Isira Seneviratne
5bf7a33903 Replace check circle PNGs with a vector drawable. 2020-10-23 16:09:01 +05:30
Isira Seneviratne
0b25365330 Replace add circle outline PNGs with a vector drawable. 2020-10-23 16:09:00 +05:30
Isira Seneviratne
a9b37a533e Replace WiFi and hotspot PNGs with vector drawables. 2020-10-23 16:09:00 +05:30
Isira Seneviratne
dbbedc7ab1 Create and use notification channels on Android Oreo and higher. 2020-09-22 06:41:41 +05:30
Dominik Schürmann
14996c1eca Fix errors reported by lint 2020-07-14 14:10:22 +02:00
Dominik Schürmann
78e81fb781 Use androidx.preference artifact
- use PreferenceFragmentCompat
- this requires androidx Fragments
- explicit declaration of androidx widgets in preferences.xml
  no longer required
2020-07-14 14:10:21 +02:00
Marcus Hoffmann
18592150c1 perform androidX migration through android studio
Project compiles and works fine after this.
2020-07-14 14:10:21 +02:00
Hans-Christoph Steiner
757476dc9b
use canonical download URL: https://f-droid.org/F-Droid.apk
fdroid-website@6be403585352126b04e5c72623ef5852cceb2502
fdroid-website!536
2020-06-25 13:31:20 +02:00
Marcus Hoffmann
941d8a0b8b rename app.icon to app.iconFromApk
This makes it clearer what this is actually referring to.
2020-06-24 16:57:28 +02:00
Marcus Hoffmann
a500660a41 allow displaying localized icons
Move the logic of calculating the correct iconUrl from sql to java.

Fixes #1460.
2020-06-24 16:57:28 +02:00
Chirayu Desai
6c4315f9a1 Handle USB-OTG support differently
* Use separate receivers instead of one combined activity
  to avoid showing the "Use F-Droid to handle Mass Storage"
  prompt every time a drive is plugged in.
2020-02-03 02:36:17 +05:30
Hans-Christoph Steiner
cc9796127d
run new zopflipng compression settings from !844 2020-01-02 22:38:54 +01:00
Hans-Christoph Steiner
887f53cf95
stop crash in TreeUriScannerIntentService.onActivityResult()
This might happen if the user denies storage permission.

java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=16613, result=0, data=null} to activity {org.fdroid.fdroid/org.fdroid.fdroid.views.main.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.net.Uri android.content.Intent.getData()' on a null object reference
	at android.app.ActivityThread.deliverResults(ActivityThread.java:4612)
	at android.app.ActivityThread.handleSendResult(ActivityThread.java:4654)
	at android.app.servertransaction.ActivityResultItem.execute(ActivityResultItem.java:49)
	at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
	at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1955)
	at android.os.Handler.dispatchMessage(Handler.java:106)
	at android.os.Looper.loop(Looper.java:214)
	at android.app.ActivityThread.main(ActivityThread.java:7073)
	at java.lang.reflect.Method.invoke(Native Method)
	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:964)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.net.Uri android.content.Intent.getData()' on a null object reference
	at org.fdroid.fdroid.nearby.TreeUriScannerIntentService.onActivityResult(TreeUriScannerIntentService.java:99)
	at org.fdroid.fdroid.views.main.MainActivity.onActivityResult(MainActivity.java:270)
	at android.app.Activity.dispatchActivityResult(Activity.java:7759)
	at android.app.ActivityThread.deliverResults(ActivityThread.java:4605)
	... 11 more
java.lang.NullPointerException: Attempt to invoke virtual method 'android.net.Uri android.content.Intent.getData()' on a null object reference
	at org.fdroid.fdroid.nearby.TreeUriScannerIntentService.onActivityResult(TreeUriScannerIntentService.java:99)
	at org.fdroid.fdroid.views.main.MainActivity.onActivityResult(MainActivity.java:270)
	at android.app.Activity.dispatchActivityResult(Activity.java:7759)
	at android.app.ActivityThread.deliverResults(ActivityThread.java:4605)
	at android.app.ActivityThread.handleSendResult(ActivityThread.java:4654)
	at android.app.servertransaction.ActivityResultItem.execute(ActivityResultItem.java:49)
	at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
	at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1955)
	at android.os.Handler.dispatchMessage(Handler.java:106)
	at android.os.Looper.loop(Looper.java:214)
	at android.app.ActivityThread.main(ActivityThread.java:7073)
	at java.lang.reflect.Method.invoke(Native Method)
	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:964)
2019-10-14 15:19:15 +02:00
Hans-Christoph Steiner
df818b0aed
fix crash in SwapView on android < 21
In order to support Android < 21, this calls `super` rather than `this`.
RelativeLayout}'s methods just use a 0 for the fourth argument, just like
this used to.
2019-10-14 15:19:13 +02:00
Hans-Christoph Steiner
f5a5805610
stop crash if hotspot returns null WifiConfiguration
java.lang.NullPointerException: Attempt to read from field 'java.lang.String android.net.wifi.WifiConfiguration.SSID' on a null object reference
	at org.fdroid.fdroid.nearby.StartSwapView.uiUpdateWifiNetwork(StartSwapView.java:226)
	at org.fdroid.fdroid.nearby.StartSwapView.uiInitWifi(StartSwapView.java:211)
	at org.fdroid.fdroid.nearby.StartSwapView.onFinishInflate(StartSwapView.java:111)
	at android.view.LayoutInflater.rInflate(LayoutInflater.java:876)
	at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824)
	at android.view.LayoutInflater.inflate(LayoutInflater.java:515)
	at android.view.LayoutInflater.inflate(LayoutInflater.java:423)
	at org.fdroid.fdroid.nearby.SwapWorkflowActivity.inflateSwapView(SwapWorkflowActivity.java:488)
	at org.fdroid.fdroid.nearby.SwapWorkflowActivity.showIntro(SwapWorkflowActivity.java:541)
	at org.fdroid.fdroid.nearby.SwapWorkflowActivity.showRelevantView(SwapWorkflowActivity.java:468)
	at org.fdroid.fdroid.nearby.SwapWorkflowActivity.access$100(SwapWorkflowActivity.java:86)
	at org.fdroid.fdroid.nearby.SwapWorkflowActivity$1.onServiceConnected(SwapWorkflowActivity.java:135)
	at android.app.LoadedApk$ServiceDispatcher.doConnected(LoadedApk.java:1652)
	at android.app.LoadedApk$ServiceDispatcher$RunConnection.run(LoadedApk.java:1681)
	at android.os.Handler.handleCallback(Handler.java:790)
	at android.os.Handler.dispatchMessage(Handler.java:99)
	at android.os.Looper.loop(Looper.java:164)
	at android.app.ActivityThread.main(ActivityThread.java:6494)
	at java.lang.reflect.Method.invoke(Native Method)
	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:440)
	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
2019-10-14 15:19:11 +02:00
Hans-Christoph Steiner
d233b03029
WifiStateChangeService: handle BSSID when WifiConfiguration is null
fixes:

java.lang.NullPointerException: Attempt to read from field 'java.lang.String android.net.wifi.WifiConfiguration.BSSID' on a null object reference
 at org.fdroid.fdroid.nearby.WifiStateChangeService.setSsid(WifiStateChangeService.java:265)
 at org.fdroid.fdroid.nearby.WifiStateChangeService.access$100(WifiStateChangeService.java:59)
 at org.fdroid.fdroid.nearby.WifiStateChangeService$WifiInfoThread.run(WifiStateChangeService.java:174)
2019-10-14 15:19:09 +02:00
Hans-Christoph Steiner
1e29c281c6
catch random NullPointerExceptions related to WifiApControl
java.lang.NullPointerException: Attempt to read from field 'boolean android.net.wifi.WifiConfiguration.hiddenSSID' on a null object reference
at org.fdroid.fdroid.nearby.WifiStateChangeService.setSsid(WifiStateChangeService.java:252)
at org.fdroid.fdroid.nearby.WifiStateChangeService.access$100(WifiStateChangeService.java:59)
at org.fdroid.fdroid.nearby.WifiStateChangeService$WifiInfoThread.run(WifiStateChangeService.java:174)


java.lang.NullPointerException: null receiver
	at java.lang.reflect.Method.invoke(Native Method)
	at cc.mvdan.accesspoint.WifiApControl.invokeQuietly(WifiApControl.java:178)
	at cc.mvdan.accesspoint.WifiApControl.isWifiApEnabled(WifiApControl.java:189)
	at cc.mvdan.accesspoint.WifiApControl.isEnabled(WifiApControl.java:198)
	at org.fdroid.fdroid.nearby.WifiStateChangeService.setSsid(WifiStateChangeService.java:249)
	at org.fdroid.fdroid.nearby.WifiStateChangeService.access$100(WifiStateChangeService.java:59)
	at org.fdroid.fdroid.nearby.WifiStateChangeService$WifiInfoThread.run(WifiStateChangeService.java:133)

java.lang.NullPointerException: Attempt to invoke virtual method 'int android.app.AppOpsManager.checkOpNoThrow(int, int, java.lang.String)' on a null object reference
 at android.provider.Settings.isCallingPackageAllowedToPerformAppOpsProtectedOperation(Settings.java:13730)
 at android.provider.Settings.isCallingPackageAllowedToWriteSettings(Settings.java:13634)
 at android.provider.Settings$System.canWrite(Settings.java:4793)
 at cc.mvdan.accesspoint.WifiApControl.getInstance(WifiApControl.java:122)
 at org.fdroid.fdroid.nearby.WifiStateChangeService.setSsid(WifiStateChangeService.java:240)
 at org.fdroid.fdroid.nearby.WifiStateChangeService.access$100(WifiStateChangeService.java:59)
 at org.fdroid.fdroid.nearby.WifiStateChangeService$WifiInfoThread.run(WifiStateChangeService.java:133)
2019-07-06 00:12:30 +02:00
Hans-Christoph Steiner
bfcc5c974e
fix crash in Panic Settings
This got missed in ef90fd2dfdb0b07aca21f4be34e2c418f092bf06
fdroid/fdroidclient!829

for f in `find app/src/ -type f -name \*.xml|xargs grep --no-filename -F '<org.fdroid.fdroid' | awk '{ print $1}' |sort -u`; do test -e app/src/*/java/`echo $f | sed -e 's,<,,' -e 's,\.,/,g'`.java || echo FAIL $f; done
2019-07-06 00:12:28 +02:00
Hans-Christoph Steiner
6c9afd823e speed up repo searchs by using "depth last"
Recursively search for index-v1.jar starting from the given directory,
looking at files first before recursing into directories.  This is
"depth last" since the index file is much more likely to be shallow
than deep, and there can be a lot of files to search through starting
at 4 or more levels deep, like the fdroid icons dirs and the per-app
"external storage" dirs.
2019-06-18 15:55:19 +02:00
Hans-Christoph Steiner
ca5996c5b3 detect when USB OTG device is plugged in and show Nearby tab 2019-06-17 18:37:26 +02:00
Hans-Christoph Steiner
525f99b056 implement mirror/repos on USB OTG via Storage Access Framework
* https://developer.android.com/training/articles/scoped-directory-access

One potential future direction, if this proves too limiting:
https://github.com/magnusja/libaums
2019-06-17 18:36:58 +02:00
Hans-Christoph Steiner
1ce70d3703 remove mistaken Service entry from full AndroidManifest.xml
LocalHTTPDManager is not a Service subclass.

79e7e78e7f69fc7dbe47684ee102c930e2c3a13f
2019-06-17 16:59:42 +02:00