aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/ui/src/main/java/com/wireguard/android (follow)
Commit message (Collapse)AuthorAgeFilesLines
* MonkeyedTextInputEditText: au revoirJason A. Donenfeld2020-09-151-36/+0
| | | | | | | Remember to go back to using com.google.android.material when 1.3.0-alpha03 comes out. Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
* TunnelListFragment: set selection on Main, not Main.immediateJason A. Donenfeld2020-09-151-1/+1
| | | | | | Otherwise, we crash when saving the config. Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
* MonkeyedTextInputEditText: add note about sunset planJason A. Donenfeld2020-09-151-0/+6
| | | | Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
* gradle: desugar retrofuture and remove old depsJason A. Donenfeld2020-09-151-1/+1
| | | | Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
* coroutines: convert the restJason A. Donenfeld2020-09-1523-532/+569
| | | | Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
* coroutines: convert low-hanging fruitsJason A. Donenfeld2020-09-145-73/+106
| | | | Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
* ui: remove hacky manual check for keyguardHarsh Shandilya2020-09-131-20/+1
| | | | | | Setting the correct value for the allowedAuthenticators field lets the library correctly detect this by itself as verified on an API 21 emulator Signed-off-by: Harsh Shandilya <me@msfjarvis.dev>
* ui: update BiometricAuthenticator for API changesHarsh Shandilya2020-09-131-2/+6
| | | | Signed-off-by: Harsh Shandilya <me@msfjarvis.dev>
* ui: fix memory leak from statically held Handler instanceHarsh Shandilya2020-09-131-2/+1
| | | | Signed-off-by: Harsh Shandilya <me@msfjarvis.dev>
* ui: fix SDK 30 deprecation warning for implicit Looper in Handler initHarsh Shandilya2020-08-231-1/+2
| | | | Signed-off-by: Harsh Shandilya <me@msfjarvis.dev>
* ui: also enable StrictMode thread policy in debug buildsHarsh Shandilya2020-08-231-0/+2
| | | | Signed-off-by: Harsh Shandilya <me@msfjarvis.dev>
* AdminKnobs: allow enterprise admins to disable private key exportJason A. Donenfeld2020-07-234-0/+25
| | | | Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
* ui: address new databinding requirementsHarsh Shandilya2020-05-291-7/+7
| | | | | | | | | | Layouts in differing configurations must agree on their root tags, so we give both copies of main_activity the same root ID, and adjust the check for two-pane layout to simply test for nullability. This also changes the inset dispatch code to use ViewCompat and WindowInsetsCompat since they will adjust insets based on the SDK level allowing us to abstract away that concern. Signed-off-by: Harsh Shandilya <me@msfjarvis.dev>
* ui: animate fab scale rather than translationHarsh Shandilya2020-04-161-19/+29
| | | | | Suggested-by: Jason A. Donenfeld <Jason@zx2c4.com> Signed-off-by: Harsh Shandilya <me@msfjarvis.dev>
* ObservableTunnel: account for race in renulling statsJason A. Donenfeld2020-04-151-2/+2
| | | | | | | | | | | | | | The stats might become null between these two checks, when a tunnel flips off, resulting in a null pointer dereference: at com.wireguard.android.model.ObservableTunnel.getStatisticsAsync (ObservableTunnel.java:103) at com.wireguard.android.fragment.TunnelDetailFragment.updateStats (TunnelDetailFragment.java:108) at com.wireguard.android.fragment.TunnelDetailFragment.access$updateStats (TunnelDetailFragment.java:27) at com.wireguard.android.fragment.TunnelDetailFragment$onResume$1.run (TunnelDetailFragment.java:74) at java.util.TimerThread.mainLoop (TimerThread.java:562) at java.util.TimerThread.run (TimerThread.java:512) Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
* ui: animate fab position in tunnel deletion flowHarsh Shandilya2020-04-081-0/+19
| | | | | | | | When tunnel deletion is triggered we don't bother with animation theatrics because the resulting Snackbar needs this fab to be its anchor, which it can't do if its outside the screen or busy animating. Signed-off-by: Harsh Shandilya <me@msfjarvis.dev>
* ui: tweak FABs to use the correct typeHarsh Shandilya2020-04-081-3/+3
| | | | Signed-off-by: Harsh Shandilya <me@msfjarvis.dev>
* ui: codestyle nitHarsh Shandilya2020-04-071-2/+4
| | | | Signed-off-by: Harsh Shandilya <me@msfjarvis.dev>
* KernelModuleDisablerPreference: do not make synchronous calls to getBackendJason A. Donenfeld2020-04-071-8/+17
| | | | Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
* ui: add suffix to persistent keepalive in editorJason A. Donenfeld2020-04-061-0/+11
| | | | Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
* ui: add missing fields to detail viewJason A. Donenfeld2020-04-061-3/+10
| | | | Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
* TunnelListFragment: onCreateActionMode is called before adapter is aliveJason A. Donenfeld2020-04-061-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Long press a tunnel item. SIGKILL the app. Reenter it. Boom: kotlin.KotlinNullPointerException: at com.wireguard.android.fragment.TunnelListFragment$ActionModeListener.onCreateActionMode (TunnelListFragment.java:347) at androidx.appcompat.app.AppCompatDelegateImpl$ActionModeCallbackWrapperV9.onCreateActionMode (AppCompatDelegateImpl.java:2442) at androidx.appcompat.app.WindowDecorActionBar$ActionModeImpl.dispatchOnCreate (WindowDecorActionBar.java:1062) at androidx.appcompat.app.WindowDecorActionBar.startActionMode (WindowDecorActionBar.java:530) at androidx.appcompat.app.AppCompatDelegateImpl.startSupportActionMode (AppCompatDelegateImpl.java:1055) at androidx.appcompat.app.AppCompatActivity.startSupportActionMode (AppCompatActivity.java:316) at com.wireguard.android.fragment.TunnelListFragment$ActionModeListener.setItemChecked (TunnelListFragment.java:371) at com.wireguard.android.fragment.TunnelListFragment.onActivityCreated (TunnelListFragment.java:174) at androidx.fragment.app.Fragment.performActivityCreated (Fragment.java:2717) at androidx.fragment.app.FragmentStateManager.activityCreated (FragmentStateManager.java:346) at androidx.fragment.app.FragmentManager.moveToState (FragmentManager.java:1188) at androidx.fragment.app.FragmentManager.moveToState (FragmentManager.java:161) at androidx.fragment.app.FragmentManager.moveToState (FragmentManager.java:1356) at androidx.fragment.app.FragmentManager.moveToState (FragmentManager.java:5) at androidx.fragment.app.FragmentManager.moveFragmentToExpectedState (FragmentManager.java:1434) at androidx.fragment.app.FragmentManager.moveFragmentToExpectedState (FragmentManager.java:5) at androidx.fragment.app.FragmentManager.moveToState (FragmentManager.java:1497) at androidx.fragment.app.FragmentManager.moveToState (FragmentManager.java:389) at androidx.fragment.app.FragmentManager.dispatchStateChange (FragmentManager.java:2625) at androidx.fragment.app.FragmentManager.dispatchStateChange (FragmentManager.java:677) at androidx.fragment.app.FragmentManager.dispatchActivityCreated (FragmentManager.java:2577) at androidx.fragment.app.FragmentManager.dispatchActivityCreated (FragmentManager.java:9) at androidx.fragment.app.FragmentController.dispatchActivityCreated (FragmentController.java:247) at androidx.fragment.app.FragmentActivity.onStart (FragmentActivity.java:541) at androidx.appcompat.app.AppCompatActivity.onStart (AppCompatActivity.java:201) at android.app.Instrumentation.callActivityOnStart (Instrumentation.java:1440) at android.app.Activity.performStart (Activity.java:8109) at android.app.ActivityThread.handleStartActivity (ActivityThread.java:3806) at android.app.servertransaction.TransactionExecutor.performLifecycleSequence (TransactionExecutor.java:235) at android.app.servertransaction.TransactionExecutor.cycleToPath (TransactionExecutor.java:215) at android.app.servertransaction.TransactionExecutor.executeLifecycleState (TransactionExecutor.java:187) at android.app.servertransaction.TransactionExecutor.execute (TransactionExecutor.java:105) at android.app.ActivityThread$H.handleMessage (ActivityThread.java:2386) at android.os.Handler.dispatchMessage (Handler.java:107) at android.os.Looper.loop (Looper.java:213) at android.app.ActivityThread.main (ActivityThread.java:8178) at java.lang.reflect.Method.invoke (Method.java) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:513) at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1101) This commit avoids the crash. But it's not clear to me that this is really the right solution. However, in testing it appears to work. Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
* ui: misc cleanups to AppListDialogFragmentHarsh Shandilya2020-04-063-14/+19
| | | | Signed-off-by: Harsh Shandilya <me@msfjarvis.dev>
* AppListDialogFragment: support both inclusion and exclusionJason A. Donenfeld2020-04-064-36/+89
| | | | Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
* MultiselectableRelativeLayout: use JvmOverloads constructorHarsh Shandilya2020-04-061-6/+6
| | | | Signed-off-by: Harsh Shandilya <me@msfjarvis.dev>
* ObservableTunnel: do not cache keyJason A. Donenfeld2020-04-011-1/+2
| | | | | Reported-by: Reza Island's <rezza.aji.ras@gmail.com> Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
* TunnelEditorFragment: don't show bioauth if already visibleJason A. Donenfeld2020-03-301-0/+1
| | | | Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
* global: cleanup code styleJason A. Donenfeld2020-03-309-10/+10
| | | | Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
* LogViewerActivity: don't crash if pipe closesJason A. Donenfeld2020-03-301-1/+4
| | | | Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
* BiometricAuthenticator: rework logic and bugsJason A. Donenfeld2020-03-303-15/+39
| | | | | | | Otherwise there's a frameworks bug that causes the fragment's activity to become null. Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
* BiometricAuthenticator: implement biometric authentication for sensitive operationsHarsh Shandilya2020-03-303-10/+113
| | | | | | | | When biometric hardware is available, it will be used to authenticate the user before private keys are shown on screen or when zip exports are executed. Signed-off-by: Harsh Shandilya <me@msfjarvis.dev>
* ObservableTunnel: Don't cache configAsyncHarsh Shandilya2020-03-301-4/+5
| | | | Signed-off-by: Harsh Shandilya <me@msfjarvis.dev>
* BindingAdapters: use sleeker lambdaJason A. Donenfeld2020-03-301-1/+1
| | | | Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
* TunnelEditorFragment: add hooks for biometric authJason A. Donenfeld2020-03-303-7/+37
| | | | Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
* AddTunnelsSheet: Make behaviour nullableHarsh Shandilya2020-03-291-3/+3
| | | | Signed-off-by: Harsh Shandilya <me@msfjarvis.dev>
* global: hardcode tags so that minification doesn't ruin the logJason A. Donenfeld2020-03-2810-10/+10
| | | | Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
* LogViewerActivity: only scroll every quarter for the first 2.5 seconds of dumpingJason A. Donenfeld2020-03-281-4/+17
| | | | Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
* ui: Remove unnecessary non-null assertion in TAG fieldsHarsh Shandilya2020-03-2810-10/+10
| | | | Signed-off-by: Harsh Shandilya <me@msfjarvis.dev>
* MonkeyedTextInputEditText: make more robustJason A. Donenfeld2020-03-281-3/+3
| | | | Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
* ui: use kotlin class instead of java class for tagJason A. Donenfeld2020-03-2810-10/+10
| | | | Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
* ObservableTunnel: do not cache statsJason A. Donenfeld2020-03-281-4/+5
| | | | Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
* TunnelEditor: move generate button to inside boxJason A. Donenfeld2020-03-281-0/+2
| | | | Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
* MonkeyedTextInputEditText: introduce a new horrorJason A. Donenfeld2020-03-281-0/+30
| | | | Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
* ClipboardUtils: Update to handle TextInputEditTextHarsh Shandilya2020-03-281-9/+12
| | | | Signed-off-by: Harsh Shandilya <me@msfjarvis.dev>
* Disable screen capture in tunnel editorHarsh Shandilya2020-03-281-0/+3
| | | | Signed-off-by: Harsh Shandilya <me@msfjarvis.dev>
* TunnelComparator: naturally sort tunnel listJason A. Donenfeld2020-03-282-3/+61
| | | | Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
* ObservableTunnel: Don't recurse in getConfigHarsh Shandilya2020-03-281-2/+2
| | | | | | | The correct way to retrieve the value inside a getter/setter is to use `field` to ensure you don't invoke the getter while inside the getter and trigger a stack overflow Signed-off-by: Harsh Shandilya <me@msfjarvis.dev>
* databinding: simplify and address warningsJason A. Donenfeld2020-03-274-30/+9
| | | | Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
* ui: Replace ErrorMessages getter with indexing operatorHarsh Shandilya2020-03-278-12/+12
| | | | Signed-off-by: Harsh Shandilya <me@msfjarvis.dev>
* Convert ErrorMessages to KotlinHarsh Shandilya2020-03-272-160/+138
| | | | Signed-off-by: Harsh Shandilya <me@msfjarvis.dev>