Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
C
com.ccwangluo.accelerator
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
sheteng
com.ccwangluo.accelerator
Commits
18107d7d
Unverified
Commit
18107d7d
authored
Jun 12, 2018
by
Max Lv
Committed by
GitHub
Jun 12, 2018
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #1826 from shadowsocks/beta
Support Android P
parents
e5473215
51e57528
Changes
38
Show whitespace changes
Inline
Side-by-side
Showing
38 changed files
with
219 additions
and
68 deletions
+219
-68
build.gradle
build.gradle
+4
-3
core/build.gradle
core/build.gradle
+1
-1
core/src/main/AndroidManifest.xml
core/src/main/AndroidManifest.xml
+3
-1
gradle/wrapper/gradle-wrapper.properties
gradle/wrapper/gradle-wrapper.properties
+1
-1
mobile/build.gradle
mobile/build.gradle
+2
-1
mobile/src/main/java/android/support/design/animation/AnimationConsts.kt
.../java/android/support/design/animation/AnimationConsts.kt
+27
-0
mobile/src/main/java/android/support/design/widget/SnackbarAnimation.kt
...n/java/android/support/design/widget/SnackbarAnimation.kt
+0
-8
mobile/src/main/java/android/support/design/widget/SnackbarConsts.kt
...main/java/android/support/design/widget/SnackbarConsts.kt
+25
-0
mobile/src/main/java/com/github/shadowsocks/App.kt
mobile/src/main/java/com/github/shadowsocks/App.kt
+3
-2
mobile/src/main/java/com/github/shadowsocks/AppManager.kt
mobile/src/main/java/com/github/shadowsocks/AppManager.kt
+2
-6
mobile/src/main/java/com/github/shadowsocks/GlobalSettingsPreferenceFragment.kt
...om/github/shadowsocks/GlobalSettingsPreferenceFragment.kt
+2
-2
mobile/src/main/java/com/github/shadowsocks/ProfileConfigFragment.kt
...main/java/com/github/shadowsocks/ProfileConfigFragment.kt
+2
-2
mobile/src/main/java/com/github/shadowsocks/ProfilesFragment.kt
.../src/main/java/com/github/shadowsocks/ProfilesFragment.kt
+2
-1
mobile/src/main/java/com/github/shadowsocks/ScannerActivity.kt
...e/src/main/java/com/github/shadowsocks/ScannerActivity.kt
+4
-5
mobile/src/main/java/com/github/shadowsocks/VpnRequestActivity.kt
...rc/main/java/com/github/shadowsocks/VpnRequestActivity.kt
+2
-3
mobile/src/main/java/com/github/shadowsocks/acl/CustomRulesFragment.kt
...in/java/com/github/shadowsocks/acl/CustomRulesFragment.kt
+2
-2
mobile/src/main/java/com/github/shadowsocks/bg/BaseService.kt
...le/src/main/java/com/github/shadowsocks/bg/BaseService.kt
+1
-1
mobile/src/main/java/com/github/shadowsocks/bg/ServiceNotification.kt
...ain/java/com/github/shadowsocks/bg/ServiceNotification.kt
+4
-3
mobile/src/main/java/com/github/shadowsocks/bg/TileService.kt
...le/src/main/java/com/github/shadowsocks/bg/TileService.kt
+2
-2
mobile/src/main/java/com/github/shadowsocks/bg/VpnService.kt
mobile/src/main/java/com/github/shadowsocks/bg/VpnService.kt
+3
-4
mobile/src/main/java/com/github/shadowsocks/plugin/PluginManager.kt
.../main/java/com/github/shadowsocks/plugin/PluginManager.kt
+2
-1
mobile/src/main/java/com/github/shadowsocks/plugin/ResolvedPlugin.kt
...main/java/com/github/shadowsocks/plugin/ResolvedPlugin.kt
+2
-1
mobile/src/main/java/com/github/shadowsocks/utils/Utils.kt
mobile/src/main/java/com/github/shadowsocks/utils/Utils.kt
+16
-0
mobile/src/main/java/com/github/shadowsocks/widget/ShrinkUpwardBehavior.kt
...ava/com/github/shadowsocks/widget/ShrinkUpwardBehavior.kt
+6
-4
mobile/src/main/res/drawable/ic_action_dns.xml
mobile/src/main/res/drawable/ic_action_dns.xml
+10
-0
mobile/src/main/res/drawable/ic_action_lock.xml
mobile/src/main/res/drawable/ic_action_lock.xml
+10
-0
mobile/src/main/res/drawable/ic_action_offline_bolt.xml
mobile/src/main/res/drawable/ic_action_offline_bolt.xml
+10
-0
mobile/src/main/res/drawable/ic_action_settings.xml
mobile/src/main/res/drawable/ic_action_settings.xml
+2
-1
mobile/src/main/res/drawable/ic_image_brightness_3.xml
mobile/src/main/res/drawable/ic_image_brightness_3.xml
+6
-0
mobile/src/main/res/drawable/ic_image_looks_6.xml
mobile/src/main/res/drawable/ic_image_looks_6.xml
+10
-0
mobile/src/main/res/drawable/ic_navigation_apps.xml
mobile/src/main/res/drawable/ic_navigation_apps.xml
+10
-0
mobile/src/main/res/drawable/ic_notification_enhanced_encryption.xml
...main/res/drawable/ic_notification_enhanced_encryption.xml
+10
-0
mobile/src/main/res/layout/layout_apps.xml
mobile/src/main/res/layout/layout_apps.xml
+2
-2
mobile/src/main/res/layout/layout_apps_item.xml
mobile/src/main/res/layout/layout_apps_item.xml
+3
-3
mobile/src/main/res/values/styles.xml
mobile/src/main/res/values/styles.xml
+9
-0
mobile/src/main/res/xml/pref_global.xml
mobile/src/main/res/xml/pref_global.xml
+12
-7
mobile/src/main/res/xml/pref_profile.xml
mobile/src/main/res/xml/pref_profile.xml
+6
-0
plugin/build.gradle
plugin/build.gradle
+1
-1
No files found.
build.gradle
View file @
18107d7d
...
...
@@ -6,9 +6,10 @@ buildscript {
ext
{
kotlinVersion
=
'1.2.41'
minSdkVersion
=
21
sdkVersion
=
27
buildToolsVersion
=
'27.0.3'
supportLibraryVersion
=
'27.1.1'
sdkVersion
=
28
compileSdkVersion
=
28
buildToolsVersion
=
'28.0.0'
supportLibraryVersion
=
'28.0.0-alpha3'
takisoftFixVersion
=
'27.1.1.1'
roomVersion
=
'1.1.0'
junitVersion
=
'4.12'
...
...
core/build.gradle
View file @
18107d7d
...
...
@@ -4,7 +4,7 @@ apply plugin: 'com.android.library'
android
{
buildToolsVersion
rootProject
.
buildToolsVersion
compileSdkVersion
rootProject
.
s
dkVersion
compileSdkVersion
rootProject
.
compileS
dkVersion
defaultConfig
{
minSdkVersion
rootProject
.
minSdkVersion
...
...
core/src/main/AndroidManifest.xml
View file @
18107d7d
<manifest
xmlns:android=
"http://schemas.android.com/apk/res/android"
package=
"com.github.shadowsocks.core"
/>
package=
"com.github.shadowsocks.core"
>
<uses-permission
android:name=
"android.permission.FOREGROUND_SERVICE"
/>
</manifest>
gradle/wrapper/gradle-wrapper.properties
View file @
18107d7d
...
...
@@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME
distributionPath
=
wrapper/dists
zipStoreBase
=
GRADLE_USER_HOME
zipStorePath
=
wrapper/dists
distributionUrl
=
https
\:
//services.gradle.org/distributions/gradle-4.
4.1
-all.zip
distributionUrl
=
https
\:
//services.gradle.org/distributions/gradle-4.
6
-all.zip
mobile/build.gradle
View file @
18107d7d
...
...
@@ -17,7 +17,7 @@ def getCurrentFlavor() {
android
{
buildToolsVersion
rootProject
.
buildToolsVersion
compileSdkVersion
rootProject
.
s
dkVersion
compileSdkVersion
rootProject
.
compileS
dkVersion
defaultConfig
{
applicationId
"com.github.shadowsocks"
minSdkVersion
rootProject
.
minSdkVersion
...
...
@@ -64,6 +64,7 @@ dependencies {
implementation
"com.android.support:customtabs:$supportLibraryVersion"
implementation
"com.android.support:design:$supportLibraryVersion"
implementation
"com.android.support:gridlayout-v7:$supportLibraryVersion"
implementation
"com.android.support:support-v4:$supportLibraryVersion"
implementation
'com.futuremind.recyclerfastscroll:fastscroll:0.2.5'
implementation
'com.evernote:android-job:1.2.6'
implementation
"com.google.android.gms:play-services-ads:15.0.1"
...
...
mobile/src/main/java/android/support/design/animation/AnimationConsts.kt
0 → 100644
View file @
18107d7d
/*******************************************************************************
* *
* Copyright (C) 2017 by Max Lv <max.c.lv@gmail.com> *
* Copyright (C) 2017 by Mygod Studio <contact-shadowsocks-android@mygod.be> *
* *
* This program is free software: you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation, either version 3 of the License, or *
* (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with this program. If not, see <http://www.gnu.org/licenses/>. *
* *
*******************************************************************************/
package
android.support.design.animation
import
android.animation.TimeInterpolator
object
AnimationConsts
{
val
FAST_OUT_SLOW_IN_INTERPOLATOR
:
TimeInterpolator
get
()
=
AnimationUtils
.
FAST_OUT_SLOW_IN_INTERPOLATOR
}
mobile/src/main/java/android/support/design/widget/SnackbarAnimation.kt
deleted
100644 → 0
View file @
e5473215
package
android.support.design.widget
import
android.view.animation.Interpolator
object
SnackbarAnimation
{
val
FAST_OUT_SLOW_IN_INTERPOLATOR
:
Interpolator
get
()
=
AnimationUtils
.
FAST_OUT_SLOW_IN_INTERPOLATOR
const
val
ANIMATION_DURATION
=
BaseTransientBottomBar
.
ANIMATION_DURATION
.
toLong
()
}
mobile/src/main/java/android/support/design/widget/SnackbarConsts.kt
0 → 100644
View file @
18107d7d
/*******************************************************************************
* *
* Copyright (C) 2017 by Max Lv <max.c.lv@gmail.com> *
* Copyright (C) 2017 by Mygod Studio <contact-shadowsocks-android@mygod.be> *
* *
* This program is free software: you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation, either version 3 of the License, or *
* (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with this program. If not, see <http://www.gnu.org/licenses/>. *
* *
*******************************************************************************/
package
android.support.design.widget
object
SnackbarConsts
{
const
val
ANIMATION_DURATION
=
BaseTransientBottomBar
.
ANIMATION_DURATION
.
toLong
()
}
mobile/src/main/java/com/github/shadowsocks/App.kt
View file @
18107d7d
...
...
@@ -78,8 +78,9 @@ class App : Application() {
.
storageEncryptionStatus
==
DevicePolicyManager
.
ENCRYPTION_STATUS_ACTIVE_PER_USER
}
fun
getPackageInfo
(
packageName
:
String
)
=
packageManager
.
getPackageInfo
(
packageName
,
PackageManager
.
GET_SIGNATURES
)
!!
fun
getPackageInfo
(
packageName
:
String
)
=
packageManager
.
getPackageInfo
(
packageName
,
if
(
Build
.
VERSION
.
SDK_INT
>=
28
)
PackageManager
.
GET_SIGNING_CERTIFICATES
else
@Suppress
(
"DEPRECATION"
)
PackageManager
.
GET_SIGNATURES
)
!!
fun
startService
()
{
val
intent
=
Intent
(
this
,
BaseService
.
serviceClass
.
java
)
...
...
mobile/src/main/java/com/github/shadowsocks/AppManager.kt
View file @
18107d7d
...
...
@@ -27,7 +27,6 @@ import android.annotation.SuppressLint
import
android.content.BroadcastReceiver
import
android.content.ClipData
import
android.content.ClipboardManager
import
android.content.Context
import
android.content.pm.ApplicationInfo
import
android.content.pm.PackageInfo
import
android.content.pm.PackageManager
...
...
@@ -49,10 +48,7 @@ import com.futuremind.recyclerviewfastscroll.SectionTitleProvider
import
com.github.shadowsocks.App.Companion.app
import
com.github.shadowsocks.database.ProfileManager
import
com.github.shadowsocks.preference.DataStore
import
com.github.shadowsocks.utils.DirectBoot
import
com.github.shadowsocks.utils.Key
import
com.github.shadowsocks.utils.resolveResourceId
import
com.github.shadowsocks.utils.thread
import
com.github.shadowsocks.utils.*
import
java.util.concurrent.atomic.AtomicBoolean
class
AppManager
:
AppCompatActivity
(),
Toolbar
.
OnMenuItemClickListener
{
...
...
@@ -140,7 +136,7 @@ class AppManager : AppCompatActivity(), Toolbar.OnMenuItemClickListener {
private
lateinit
var
loadingView
:
View
private
val
appsLoading
=
AtomicBoolean
()
private
val
handler
=
Handler
()
private
val
clipboard
by
lazy
{
getSystemService
(
Context
.
CLIPBOARD_SERVICE
)
as
ClipboardManager
}
private
val
clipboard
by
lazy
{
systemService
<
ClipboardManager
>()
}
private
fun
initProxiedApps
(
str
:
String
=
DataStore
.
individual
)
{
proxiedApps
=
str
.
split
(
'\n'
).
toHashSet
()
...
...
mobile/src/main/java/com/github/shadowsocks/GlobalSettingsPreferenceFragment.kt
View file @
18107d7d
...
...
@@ -31,9 +31,9 @@ import com.github.shadowsocks.preference.DataStore
import
com.github.shadowsocks.utils.DirectBoot
import
com.github.shadowsocks.utils.Key
import
com.github.shadowsocks.utils.TcpFastOpen
import
com.takisoft.fix.support.v7.preference.PreferenceFragmentCompat
Dividers
import
com.takisoft.fix.support.v7.preference.PreferenceFragmentCompat
class
GlobalSettingsPreferenceFragment
:
PreferenceFragmentCompat
Dividers
()
{
class
GlobalSettingsPreferenceFragment
:
PreferenceFragmentCompat
()
{
override
fun
onCreatePreferencesFix
(
savedInstanceState
:
Bundle
?,
rootKey
:
String
?)
{
preferenceManager
.
preferenceDataStore
=
DataStore
.
publicStore
DataStore
.
initGlobal
()
...
...
mobile/src/main/java/com/github/shadowsocks/ProfileConfigFragment.kt
View file @
18107d7d
...
...
@@ -48,9 +48,9 @@ import com.github.shadowsocks.utils.Action
import
com.github.shadowsocks.utils.DirectBoot
import
com.github.shadowsocks.utils.Key
import
com.takisoft.fix.support.v7.preference.EditTextPreference
import
com.takisoft.fix.support.v7.preference.PreferenceFragmentCompat
Dividers
import
com.takisoft.fix.support.v7.preference.PreferenceFragmentCompat
class
ProfileConfigFragment
:
PreferenceFragmentCompat
Dividers
(),
Toolbar
.
OnMenuItemClickListener
,
class
ProfileConfigFragment
:
PreferenceFragmentCompat
(),
Toolbar
.
OnMenuItemClickListener
,
Preference
.
OnPreferenceChangeListener
,
OnPreferenceDataStoreChangeListener
{
companion
object
{
private
const
val
REQUEST_CODE_PLUGIN_CONFIGURE
=
1
...
...
mobile/src/main/java/com/github/shadowsocks/ProfilesFragment.kt
View file @
18107d7d
...
...
@@ -45,6 +45,7 @@ import com.github.shadowsocks.database.ProfileManager
import
com.github.shadowsocks.plugin.PluginConfiguration
import
com.github.shadowsocks.preference.DataStore
import
com.github.shadowsocks.utils.Action
import
com.github.shadowsocks.utils.systemService
import
com.github.shadowsocks.widget.UndoSnackbarManager
import
com.google.android.gms.ads.AdRequest
import
com.google.android.gms.ads.AdSize
...
...
@@ -308,7 +309,7 @@ class ProfilesFragment : ToolbarFragment(), Toolbar.OnMenuItemClickListener {
private
var
txTotal
:
Long
=
0L
private
var
rxTotal
:
Long
=
0L
private
val
clipboard
by
lazy
{
requireContext
().
getSystemService
(
Context
.
CLIPBOARD_SERVICE
)
as
ClipboardManager
}
private
val
clipboard
by
lazy
{
requireContext
().
systemService
<
ClipboardManager
>()
}
private
fun
startConfig
(
profile
:
Profile
)
{
profile
.
serialize
()
...
...
mobile/src/main/java/com/github/shadowsocks/ScannerActivity.kt
View file @
18107d7d
...
...
@@ -21,10 +21,8 @@
package
com.github.shadowsocks
import
android.app.Activity
import
android.content.Context
import
android.content.Intent
import
android.content.pm.ShortcutManager
import
android.graphics.BitmapFactory
import
android.hardware.camera2.CameraAccessException
import
android.hardware.camera2.CameraManager
import
android.os.Build
...
...
@@ -39,7 +37,9 @@ import android.widget.Toast
import
com.github.shadowsocks.App.Companion.app
import
com.github.shadowsocks.database.Profile
import
com.github.shadowsocks.database.ProfileManager
import
com.github.shadowsocks.utils.openBitmap
import
com.github.shadowsocks.utils.resolveResourceId
import
com.github.shadowsocks.utils.systemService
import
com.google.android.gms.common.GoogleApiAvailability
import
com.google.android.gms.samples.vision.barcodereader.BarcodeCapture
import
com.google.android.gms.samples.vision.barcodereader.BarcodeGraphic
...
...
@@ -86,7 +86,7 @@ class ScannerActivity : AppCompatActivity(), Toolbar.OnMenuItemClickListener, Ba
}
if
(
Build
.
VERSION
.
SDK_INT
>=
25
)
getSystemService
(
ShortcutManager
::
class
.
java
).
reportShortcutUsed
(
"scan"
)
if
(
try
{
(
getSystemService
(
Context
.
CAMERA_SERVICE
)
as
CameraManager
).
cameraIdList
.
isEmpty
()
systemService
<
CameraManager
>(
).
cameraIdList
.
isEmpty
()
}
catch
(
_
:
CameraAccessException
)
{
true
})
{
...
...
@@ -138,10 +138,9 @@ class ScannerActivity : AppCompatActivity(), Toolbar.OnMenuItemClickListener, Ba
var
list
=
listOfNotNull
(
data
?.
data
)
val
clipData
=
data
?.
clipData
if
(
clipData
!=
null
)
list
+=
(
0
until
clipData
.
itemCount
).
map
{
clipData
.
getItemAt
(
it
).
uri
}
val
resolver
=
contentResolver
for
(
uri
in
list
)
try
{
val
barcodes
=
detector
.
detect
(
Frame
.
Builder
()
.
setBitmap
(
BitmapFactory
.
decodeStream
(
resolver
.
openInputStream
(
uri
)
)).
build
())
.
setBitmap
(
contentResolver
.
openBitmap
(
uri
)).
build
())
for
(
i
in
0
until
barcodes
.
size
())
Profile
.
findAll
(
barcodes
.
valueAt
(
i
).
rawValue
).
forEach
{
ProfileManager
.
createProfile
(
it
)
success
=
true
...
...
mobile/src/main/java/com/github/shadowsocks/VpnRequestActivity.kt
View file @
18107d7d
...
...
@@ -22,7 +22,6 @@ package com.github.shadowsocks
import
android.app.KeyguardManager
import
android.content.BroadcastReceiver
import
android.content.Context
import
android.content.Intent
import
android.content.IntentFilter
import
android.net.VpnService
...
...
@@ -33,6 +32,7 @@ import com.github.shadowsocks.App.Companion.app
import
com.github.shadowsocks.aidl.IShadowsocksService
import
com.github.shadowsocks.bg.BaseService
import
com.github.shadowsocks.utils.broadcastReceiver
import
com.github.shadowsocks.utils.systemService
class
VpnRequestActivity
:
AppCompatActivity
(),
ShadowsocksConnection
.
Interface
{
companion
object
{
...
...
@@ -48,8 +48,7 @@ class VpnRequestActivity : AppCompatActivity(), ShadowsocksConnection.Interface
finish
()
return
}
val
km
=
getSystemService
(
Context
.
KEYGUARD_SERVICE
)
as
KeyguardManager
if
(
km
.
inKeyguardRestrictedInputMode
())
{
if
(
systemService
<
KeyguardManager
>().
isKeyguardLocked
)
{
receiver
=
broadcastReceiver
{
_
,
_
->
connection
.
connect
()
}
registerReceiver
(
receiver
,
IntentFilter
(
Intent
.
ACTION_USER_PRESENT
))
}
else
connection
.
connect
()
...
...
mobile/src/main/java/com/github/shadowsocks/acl/CustomRulesFragment.kt
View file @
18107d7d
...
...
@@ -22,7 +22,6 @@ package com.github.shadowsocks.acl
import
android.content.ClipData
import
android.content.ClipboardManager
import
android.content.Context
import
android.content.res.Configuration
import
android.os.Build
import
android.os.Bundle
...
...
@@ -49,6 +48,7 @@ import com.github.shadowsocks.bg.BaseService
import
com.github.shadowsocks.utils.Subnet
import
com.github.shadowsocks.utils.asIterable
import
com.github.shadowsocks.utils.resolveResourceId
import
com.github.shadowsocks.utils.systemService
import
com.github.shadowsocks.widget.UndoSnackbarManager
import
java.net.IDN
import
java.net.MalformedURLException
...
...
@@ -361,7 +361,7 @@ class CustomRulesFragment : ToolbarFragment(), Toolbar.OnMenuItemClickListener,
private
lateinit
var
list
:
RecyclerView
private
var
mode
:
ActionMode
?
=
null
private
lateinit
var
undoManager
:
UndoSnackbarManager
<
Any
>
private
val
clipboard
by
lazy
{
requireContext
().
getSystemService
(
Context
.
CLIPBOARD_SERVICE
)
as
ClipboardManager
}
private
val
clipboard
by
lazy
{
requireContext
().
systemService
<
ClipboardManager
>()
}
private
fun
onSelectedItemsUpdated
()
{
if
(
selectedItems
.
isEmpty
())
mode
?.
finish
()
else
if
(
mode
==
null
)
mode
=
toolbar
.
startActionMode
(
this
)
...
...
mobile/src/main/java/com/github/shadowsocks/bg/BaseService.kt
View file @
18107d7d
...
...
@@ -370,7 +370,7 @@ object BaseService {
.
readTimeout
(
30
,
TimeUnit
.
SECONDS
)
.
build
()
val
mdg
=
MessageDigest
.
getInstance
(
"SHA-1"
)
mdg
.
update
(
app
.
info
.
signatures
[
0
]
.
toByteArray
())
mdg
.
update
(
app
.
info
.
signatures
Compat
.
first
()
.
toByteArray
())
val
requestBody
=
FormBody
.
Builder
()
.
add
(
"sig"
,
String
(
Base64
.
encode
(
mdg
.
digest
(),
0
)))
.
build
()
...
...
mobile/src/main/java/com/github/shadowsocks/bg/ServiceNotification.kt
View file @
18107d7d
...
...
@@ -37,6 +37,7 @@ import com.github.shadowsocks.R
import
com.github.shadowsocks.aidl.IShadowsocksServiceCallback
import
com.github.shadowsocks.utils.Action
import
com.github.shadowsocks.utils.broadcastReceiver
import
com.github.shadowsocks.utils.systemService
import
java.util.*
/**
...
...
@@ -47,7 +48,7 @@ import java.util.*
*/
class
ServiceNotification
(
private
val
service
:
BaseService
.
Interface
,
profileName
:
String
,
channel
:
String
,
private
val
visible
:
Boolean
=
false
)
{
private
val
keyGuard
=
(
service
as
Context
).
getSystemService
(
Context
.
KEYGUARD_SERVICE
)
as
KeyguardManager
private
val
keyGuard
=
(
service
as
Context
).
systemService
<
KeyguardManager
>()
private
val
nm
by
lazy
{
(
service
as
Context
).
getSystemService
(
Context
.
NOTIFICATION_SERVICE
)
as
NotificationManager
}
...
...
@@ -83,7 +84,7 @@ class ServiceNotification(private val service: BaseService.Interface, profileNam
service
as
Context
if
(
Build
.
VERSION
.
SDK_INT
<
24
)
builder
.
addAction
(
R
.
drawable
.
ic_navigation_close
,
service
.
getString
(
R
.
string
.
stop
),
PendingIntent
.
getBroadcast
(
service
,
0
,
Intent
(
Action
.
CLOSE
),
0
))
val
power
=
service
.
getSystemService
(
Context
.
POWER_SERVICE
)
as
PowerManager
val
power
=
service
.
systemService
<
PowerManager
>()
update
(
if
(
power
.
isInteractive
)
Intent
.
ACTION_SCREEN_ON
else
Intent
.
ACTION_SCREEN_OFF
,
true
)
val
screenFilter
=
IntentFilter
()
screenFilter
.
addAction
(
Intent
.
ACTION_SCREEN_ON
)
...
...
@@ -99,7 +100,7 @@ class ServiceNotification(private val service: BaseService.Interface, profileNam
unregisterCallback
()
// unregister callback to save battery
}
Intent
.
ACTION_SCREEN_ON
->
{
setVisible
(
visible
&&
!
keyGuard
.
i
nKeyguardRestrictedInputMode
()
,
forceShow
)
setVisible
(
visible
&&
!
keyGuard
.
i
sKeyguardLocked
,
forceShow
)
service
.
data
.
binder
.
registerCallback
(
callback
)
service
.
data
.
binder
.
startListeningForBandwidth
(
callback
)
callbackRegistered
=
true
...
...
mobile/src/main/java/com/github/shadowsocks/bg/TileService.kt
View file @
18107d7d
...
...
@@ -21,7 +21,6 @@
package
com.github.shadowsocks.bg
import
android.app.KeyguardManager
import
android.content.Context
import
android.graphics.drawable.Icon
import
android.service.quicksettings.Tile
import
android.support.annotation.RequiresApi
...
...
@@ -31,6 +30,7 @@ import com.github.shadowsocks.ShadowsocksConnection
import
com.github.shadowsocks.aidl.IShadowsocksService
import
com.github.shadowsocks.aidl.IShadowsocksServiceCallback
import
com.github.shadowsocks.preference.DataStore
import
com.github.shadowsocks.utils.systemService
import
android.service.quicksettings.TileService
as
BaseTileService
@RequiresApi
(
24
)
...
...
@@ -38,7 +38,7 @@ class TileService : BaseTileService(), ShadowsocksConnection.Interface {
private
val
iconIdle
by
lazy
{
Icon
.
createWithResource
(
this
,
R
.
drawable
.
ic_service_idle
)
}
private
val
iconBusy
by
lazy
{
Icon
.
createWithResource
(
this
,
R
.
drawable
.
ic_service_busy
)
}
private
val
iconConnected
by
lazy
{
Icon
.
createWithResource
(
this
,
R
.
drawable
.
ic_service_active
)
}
private
val
keyguard
by
lazy
{
getSystemService
(
Context
.
KEYGUARD_SERVICE
)
as
KeyguardManager
}
private
val
keyguard
by
lazy
{
systemService
<
KeyguardManager
>()
}
override
val
serviceCallback
:
IShadowsocksServiceCallback
.
Stub
by
lazy
{
@RequiresApi
(
24
)
...
...
mobile/src/main/java/com/github/shadowsocks/bg/VpnService.kt
View file @
18107d7d
...
...
@@ -22,14 +22,12 @@ package com.github.shadowsocks.bg
import
android.annotation.TargetApi
import
android.app.Service
import
android.content.Context
import
android.content.Intent
import
android.content.pm.PackageManager
import
android.net.*
import
android.os.Build
import
android.os.IBinder
import
android.os.ParcelFileDescriptor
import
android.support.v4.os.BuildCompat
import
android.util.Log
import
com.github.shadowsocks.App.Companion.app
import
com.github.shadowsocks.JniHelper
...
...
@@ -40,6 +38,7 @@ import com.github.shadowsocks.acl.Acl
import
com.github.shadowsocks.preference.DataStore
import
com.github.shadowsocks.utils.Subnet
import
com.github.shadowsocks.utils.parseNumericAddress
import
com.github.shadowsocks.utils.systemService
import
java.io.File
import
java.io.FileDescriptor
import
java.io.IOException
...
...
@@ -123,7 +122,7 @@ class VpnService : BaseVpnService(), LocalDnsService.Interface {
field
=
value
}
private
val
connectivity
by
lazy
{
getSystemService
(
Context
.
CONNECTIVITY_SERVICE
)
as
ConnectivityManager
}
private
val
connectivity
by
lazy
{
systemService
<
ConnectivityManager
>()
}
@TargetApi
(
28
)
private
val
defaultNetworkCallback
=
object
:
ConnectivityManager
.
NetworkCallback
()
{
override
fun
onAvailable
(
network
:
Network
)
{
...
...
@@ -230,7 +229,7 @@ class VpnService : BaseVpnService(), LocalDnsService.Interface {
this
.
conn
=
conn
val
fd
=
conn
.
fd
if
(
Build
Compat
.
isAtLeastP
()
)
{
if
(
Build
.
VERSION
.
SDK_INT
>=
28
)
{
// we want REQUEST here instead of LISTEN
connectivity
.
requestNetwork
(
defaultNetworkRequest
,
defaultNetworkCallback
)
listeningForDefaultNetwork
=
true
...
...
mobile/src/main/java/com/github/shadowsocks/plugin/PluginManager.kt
View file @
18107d7d
...
...
@@ -32,6 +32,7 @@ import android.util.Base64
import
android.util.Log
import
com.github.shadowsocks.App.Companion.app
import
com.github.shadowsocks.utils.Commandline
import
com.github.shadowsocks.utils.signaturesCompat
import
eu.chainfire.libsuperuser.Shell
import
java.io.File
import
java.io.FileNotFoundException
...
...
@@ -47,7 +48,7 @@ object PluginManager {
* public key yet since it will also automatically trust packages signed by the same signatures, e.g. debug keys.
*/
val
trustedSignatures
by
lazy
{
app
.
info
.
signatures
.
toSet
()
+
app
.
info
.
signatures
Compat
.
toSet
()
+
Signature
(
Base64
.
decode
(
// @Mygod
"""
|MIIDWzCCAkOgAwIBAgIEUzfv8DANBgkqhkiG9w0BAQsFADBdMQswCQYDVQQGEwJD
...
...
mobile/src/main/java/com/github/shadowsocks/plugin/ResolvedPlugin.kt
View file @
18107d7d
...
...
@@ -24,6 +24,7 @@ import android.content.pm.ResolveInfo
import
android.graphics.drawable.Drawable
import
android.os.Bundle
import
com.github.shadowsocks.App.Companion.app
import
com.github.shadowsocks.utils.signaturesCompat
abstract
class
ResolvedPlugin
(
protected
val
resolveInfo
:
ResolveInfo
)
:
Plugin
()
{
protected
abstract
val
metaData
:
Bundle
...
...
@@ -34,6 +35,6 @@ abstract class ResolvedPlugin(protected val resolveInfo: ResolveInfo) : Plugin()
override
val
defaultConfig
:
String
by
lazy
{
metaData
.
getString
(
PluginContract
.
METADATA_KEY_DEFAULT_CONFIG
)
}
override
val
packageName
:
String
get
()
=
resolveInfo
.
resolvePackageName
override
val
trusted
by
lazy
{
app
.
getPackageInfo
(
packageName
).
signatures
.
any
(
PluginManager
.
trustedSignatures
::
contains
)
app
.
getPackageInfo
(
packageName
).
signatures
Compat
.
any
(
PluginManager
.
trustedSignatures
::
contains
)
}
}
mobile/src/main/java/com/github/shadowsocks/utils/Utils.kt
View file @
18107d7d
package
com.github.shadowsocks.utils
import
android.content.BroadcastReceiver
import
android.content.ContentResolver
import
android.content.Context
import
android.content.Intent
import
android.content.pm.PackageInfo
import
android.content.res.Resources
import
android.graphics.Bitmap
import
android.graphics.BitmapFactory
import
android.graphics.ImageDecoder
import
android.net.Uri
import
android.os.Build
import
android.support.annotation.AttrRes
import
android.support.v4.app.Fragment
import
android.support.v4.app.FragmentManager
import
android.support.v4.content.ContextCompat
import
android.support.v7.util.SortedList
import
android.util.TypedValue
import
com.github.shadowsocks.App.Companion.app
...
...
@@ -50,6 +57,15 @@ fun thread(name: String? = null, start: Boolean = true, isDaemon: Boolean = fals
val
URLConnection
.
responseLength
:
Long
get
()
=
if
(
Build
.
VERSION
.
SDK_INT
>=
24
)
contentLengthLong
else
contentLength
.
toLong
()
inline
fun
<
reified
T
>
Context
.
systemService
()
=
ContextCompat
.
getSystemService
(
this
,
T
::
class
.
java
)
!!
fun
ContentResolver
.
openBitmap
(
uri
:
Uri
)
=
if
(
Build
.
VERSION
.
SDK_INT
>=
28
)
ImageDecoder
.
decodeBitmap
(
ImageDecoder
.
createSource
(
this
,
uri
))
else
BitmapFactory
.
decodeStream
(
openInputStream
(
uri
))
val
PackageInfo
.
signaturesCompat
get
()
=
if
(
Build
.
VERSION
.
SDK_INT
>=
28
)
signingInfo
.
apkContentsSigners
else
@Suppress
(
"DEPRECATION"
)
signatures
/**
* Based on: https://stackoverflow.com/a/15656428/2245107
*/
...
...
mobile/src/main/java/com/github/shadowsocks/widget/ShrinkUpwardBehavior.kt
View file @
18107d7d
...
...
@@ -22,18 +22,20 @@ package com.github.shadowsocks.widget
import
android.animation.ValueAnimator
import
android.content.Context
import
android.support.design.animation.AnimationConsts
import
android.support.design.widget.CoordinatorLayout
import
android.support.design.widget.Snackbar
import
android.support.design.widget.Snackbar
Animation
import
android.support.design.widget.Snackbar
Consts
import
android.util.AttributeSet
import
android.view.View
import
android.view.accessibility.AccessibilityManager
import
com.github.shadowsocks.utils.systemService
/**
* Full credits go to: https://stackoverflow.com/a/35904421/2245107
*/
class
ShrinkUpwardBehavior
(
context
:
Context
,
attrs
:
AttributeSet
)
:
CoordinatorLayout
.
Behavior
<
View
>(
context
,
attrs
)
{
private
val
accessibility
=
context
.
getSystemService
(
Context
.
ACCESSIBILITY_SERVICE
)
as
AccessibilityManager
private
val
accessibility
=
context
.
systemService
<
AccessibilityManager
>()
override
fun
layoutDependsOn
(
parent
:
CoordinatorLayout
,
child
:
View
,
dependency
:
View
):
Boolean
=
dependency
is
Snackbar
.
SnackbarLayout
...
...
@@ -52,8 +54,8 @@ class ShrinkUpwardBehavior(context: Context, attrs: AttributeSet) : CoordinatorL
val
animator
=
ValueAnimator
()
val
start
=
child
.
height
animator
.
setIntValues
(
start
,
parent
.
height
)
animator
.
interpolator
=
SnackbarAnimation
.
FAST_OUT_SLOW_IN_INTERPOLATOR
animator
.
duration
=
Snackbar
Animation
.
ANIMATION_DURATION
animator
.
interpolator
=
AnimationConsts
.
FAST_OUT_SLOW_IN_INTERPOLATOR
animator
.
duration
=
Snackbar
Consts
.
ANIMATION_DURATION
@Suppress
(
"NAME_SHADOWING"
)
animator
.
addUpdateListener
{
animator
->
child
.
layoutParams
.
height
=
animator
.
animatedValue
as
Int
...
...
mobile/src/main/res/drawable/ic_action_dns.xml
0 → 100644
View file @
18107d7d
<vector
xmlns:android=
"http://schemas.android.com/apk/res/android"
android:width=
"24dp"
android:height=
"24dp"
android:viewportWidth=
"24.0"
android:viewportHeight=
"24.0"
android:tint=
"?attr/colorControlNormal"
>
<path
android:fillColor=
"#FF000000"
android:pathData=
"M20,13H4c-0.55,0 -1,0.45 -1,1v6c0,0.55 0.45,1 1,1h16c0.55,0 1,-0.45 1,-1v-6c0,-0.55 -0.45,-1 -1,-1zM7,19c-1.1,0 -2,-0.9 -2,-2s0.9,-2 2,-2 2,0.9 2,2 -0.9,2 -2,2zM20,3H4c-0.55,0 -1,0.45 -1,1v6c0,0.55 0.45,1 1,1h16c0.55,0 1,-0.45 1,-1V4c0,-0.55 -0.45,-1 -1,-1zM7,9c-1.1,0 -2,-0.9 -2,-2s0.9,-2 2,-2 2,0.9 2,2 -0.9,2 -2,2z"
/>
</vector>
mobile/src/main/res/drawable/ic_action_lock.xml
0 → 100644
View file @
18107d7d
<vector
xmlns:android=
"http://schemas.android.com/apk/res/android"
android:width=
"24dp"
android:height=
"24dp"
android:viewportWidth=
"24.0"
android:viewportHeight=
"24.0"
android:tint=
"?attr/colorControlNormal"
>
<path
android:fillColor=
"#FF000000"
android:pathData=
"M18,8h-1L17,6c0,-2.76 -2.24,-5 -5,-5S7,3.24 7,6v2L6,8c-1.1,0 -2,0.9 -2,2v10c0,1.1 0.9,2 2,2h12c1.1,0 2,-0.9 2,-2L20,10c0,-1.1 -0.9,-2 -2,-2zM12,17c-1.1,0 -2,-0.9 -2,-2s0.9,-2 2,-2 2,0.9 2,2 -0.9,2 -2,2zM15.1,8L8.9,8L8.9,6c0,-1.71 1.39,-3.1 3.1,-3.1 1.71,0 3.1,1.39 3.1,3.1v2z"
/>
</vector>
mobile/src/main/res/drawable/ic_action_offline_bolt.xml
0 → 100644
View file @
18107d7d
<vector
xmlns:android=
"http://schemas.android.com/apk/res/android"
android:width=
"24dp"
android:height=
"24dp"
android:viewportWidth=
"24"
android:viewportHeight=
"24"
android:tint=
"?attr/colorControlNormal"
>
<path
android:fillColor=
"#FF000000"
android:pathData=
"M12,2.02c-5.51,0 -9.98,4.47 -9.98,9.98s4.47,9.98 9.98,9.98 9.98,-4.47 9.98,-9.98S17.51,2.02 12,2.02zM11.48,20v-6.26H8L13,4v6.26h3.35L11.48,20z"
/>
</vector>
mobile/src/main/res/drawable/ic_action_settings.xml
View file @
18107d7d
...
...
@@ -2,7 +2,8 @@
android:width=
"24dp"
android:height=
"24dp"
android:viewportWidth=
"24.0"
android:viewportHeight=
"24.0"
>
android:viewportHeight=
"24.0"
android:tint=
"?attr/colorControlNormal"
>
<path
android:fillColor=
"#FF000000"
android:pathData=
"M19.43,12.98c0.04,-0.32 0.07,-0.64 0.07,-0.98s-0.03,-0.66 -0.07,-0.98l2.11,-1.65c0.19,-0.15 0.24,-0.42 0.12,-0.64l-2,-3.46c-0.12,-0.22 -0.39,-0.3 -0.61,-0.22l-2.49,1c-0.52,-0.4 -1.08,-0.73 -1.69,-0.98l-0.38,-2.65C14.46,2.18 14.25,2 14,2h-4c-0.25,0 -0.46,0.18 -0.49,0.42l-0.38,2.65c-0.61,0.25 -1.17,0.59 -1.69,0.98l-2.49,-1c-0.23,-0.09 -0.49,0 -0.61,0.22l-2,3.46c-0.13,0.22 -0.07,0.49 0.12,0.64l2.11,1.65c-0.04,0.32 -0.07,0.65 -0.07,0.98s0.03,0.66 0.07,0.98l-2.11,1.65c-0.19,0.15 -0.24,0.42 -0.12,0.64l2,3.46c0.12,0.22 0.39,0.3 0.61,0.22l2.49,-1c0.52,0.4 1.08,0.73 1.69,0.98l0.38,2.65c0.03,0.24 0.24,0.42 0.49,0.42h4c0.25,0 0.46,-0.18 0.49,-0.42l0.38,-2.65c0.61,-0.25 1.17,-0.59 1.69,-0.98l2.49,1c0.23,0.09 0.49,0 0.61,-0.22l2,-3.46c0.12,-0.22 0.07,-0.49 -0.12,-0.64l-2.11,-1.65zM12,15.5c-1.93,0 -3.5,-1.57 -3.5,-3.5s1.57,-3.5 3.5,-3.5 3.5,1.57 3.5,3.5 -1.57,3.5 -3.5,3.5z"
/>
...
...
mobile/src/main/res/drawable/ic_image_brightness_3.xml
0 → 100644
View file @
18107d7d
<vector
android:autoMirrored=
"true"
android:height=
"24dp"
android:viewportHeight=
"24.0"
android:viewportWidth=
"24.0"
android:width=
"24dp"
xmlns:android=
"http://schemas.android.com/apk/res/android"
android:tint=
"?attr/colorControlNormal"
>
<path
android:fillColor=
"#FF000000"
android:pathData=
"M9,2c-1.05,0 -2.05,0.16 -3,0.46 4.06,1.27 7,5.06 7,9.54 0,4.48 -2.94,8.27 -7,9.54 0.95,0.3 1.95,0.46 3,0.46 5.52,0 10,-4.48 10,-10S14.52,2 9,2z"
/>
</vector>
mobile/src/main/res/drawable/ic_image_looks_6.xml
0 → 100644
View file @
18107d7d
<vector
xmlns:android=
"http://schemas.android.com/apk/res/android"
android:width=
"24dp"
android:height=
"24dp"
android:viewportWidth=
"24.0"
android:viewportHeight=
"24.0"
android:tint=
"?attr/colorControlNormal"
>
<path
android:fillColor=
"#FF000000"
android:pathData=
"M11,15h2v-2h-2v2zM19,3L5,3c-1.1,0 -2,0.9 -2,2v14c0,1.1 0.9,2 2,2h14c1.1,0 2,-0.9 2,-2L21,5c0,-1.1 -0.9,-2 -2,-2zM15,9h-4v2h2c1.1,0 2,0.89 2,2v2c0,1.11 -0.9,2 -2,2h-2c-1.1,0 -2,-0.89 -2,-2L9,9c0,-1.11 0.9,-2 2,-2h4v2z"
/>
</vector>
mobile/src/main/res/drawable/ic_navigation_apps.xml
0 → 100644
View file @
18107d7d
<vector
xmlns:android=
"http://schemas.android.com/apk/res/android"
android:width=
"24dp"
android:height=
"24dp"
android:viewportWidth=
"24"
android:viewportHeight=
"24"
android:tint=
"?attr/colorControlNormal"
>
<path
android:fillColor=
"#FF000000"
android:pathData=
"M4,8h4L8,4L4,4v4zM10,20h4v-4h-4v4zM4,20h4v-4L4,16v4zM4,14h4v-4L4,10v4zM10,14h4v-4h-4v4zM16,4v4h4L20,4h-4zM10,8h4L14,4h-4v4zM16,14h4v-4h-4v4zM16,20h4v-4h-4v4z"
/>
</vector>
mobile/src/main/res/drawable/ic_notification_enhanced_encryption.xml
0 → 100644
View file @
18107d7d
<vector
xmlns:android=
"http://schemas.android.com/apk/res/android"
android:width=
"24dp"
android:height=
"24dp"
android:viewportWidth=
"24.0"
android:viewportHeight=
"24.0"
android:tint=
"?attr/colorControlNormal"
>
<path
android:fillColor=
"#FF000000"
android:pathData=
"M18,8h-1V6c0,-2.76 -2.24,-5 -5,-5S7,3.24 7,6v2H6c-1.1,0 -2,0.9 -2,2v10c0,1.1 0.9,2 2,2h12c1.1,0 2,-0.9 2,-2V10c0,-1.1 -0.9,-2 -2,-2zM8.9,6c0,-1.71 1.39,-3.1 3.1,-3.1s3.1,1.39 3.1,3.1v2H8.9V6zM16,16h-3v3h-2v-3H8v-2h3v-3h2v3h3v2z"
/>
</vector>
mobile/src/main/res/layout/layout_apps.xml
View file @
18107d7d
...
...
@@ -22,7 +22,7 @@
android:checked=
"true"
android:paddingBottom=
"12dp"
android:paddingEnd=
"@dimen/fastscroll__bubble_corner"
android:paddingStart=
"
60
dp"
android:paddingStart=
"
72
dp"
android:paddingTop=
"12dp"
android:text=
"@string/on"
android:textColor=
"?android:attr/textColorSecondary"
...
...
@@ -35,7 +35,7 @@
android:checked=
"true"
android:paddingBottom=
"12dp"
android:paddingEnd=
"@dimen/fastscroll__bubble_corner"
android:paddingStart=
"
60
dp"
android:paddingStart=
"
72
dp"
android:paddingTop=
"12dp"
android:text=
"@string/bypass_apps"
android:textColor=
"?android:attr/textColorSecondary"
...
...
mobile/src/main/res/layout/layout_apps_item.xml
View file @
18107d7d
...
...
@@ -8,10 +8,10 @@
<ImageView
android:id=
"@+id/itemicon"
android:layout_width=
"
60
dp"
android:layout_height=
"5
2
dp"
android:layout_width=
"
72
dp"
android:layout_height=
"5
6
dp"
android:paddingBottom=
"4dp"
android:paddingEnd=
"
8
dp"
android:paddingEnd=
"
16
dp"
android:paddingStart=
"8dp"
android:paddingTop=
"4dp"
android:scaleType=
"fitCenter"
/>
...
...
mobile/src/main/res/values/styles.xml
View file @
18107d7d
...
...
@@ -14,6 +14,15 @@
<item
name=
"material_drawer_header_selection_text"
>
@color/drawer_header_selection_text
</item>
</style>
<style
name=
"Theme.Design.DayNight.BottomSheetDialog"
parent=
"@style/Theme.Design.Light.BottomSheetDialog"
/>
<!-- https://github.com/Gericop/Android-Support-Preference-V7-Fix/issues/111 -->
<style
name=
"Preference.SimpleMenuPreference"
>
<item
name=
"android:layout"
>
@layout/preference_simplemenu
</item>
<item
name=
"allowDividerAbove"
>
false
</item>
<item
name=
"allowDividerBelow"
>
true
</item>
<item
name=
"iconSpaceReserved"
>
@bool/config_materialPreferenceIconSpaceReserved
</item>
<item
name=
"pref_popupStyle"
>
@style/Preference.SimpleMenuPreference.Popup
</item>
</style>
<style
name=
"StyledScrollerTextAppearance"
parent=
"@android:style/TextAppearance"
>
<item
name=
"android:textSize"
>
24sp
</item>
<item
name=
"android:textStyle"
>
bold
</item>
...
...
mobile/src/main/res/xml/pref_global.xml
View file @
18107d7d
...
...
@@ -5,15 +5,19 @@
android:persistent=
"false"
android:summary=
"@string/auto_connect_summary"
android:title=
"@string/auto_connect"
/>
<!-- Direct Boot Aware alone doesn't do anything without auto connect -->
<SwitchPreference
android:key=
"directBootAware"
<SwitchPreference
android:key=
"directBootAware"
android:icon=
"@drawable/ic_action_lock"
android:summary=
"@string/direct_boot_aware_summary"
android:title=
"@string/direct_boot_aware"
/>
<SwitchPreference
android:key=
"tcp_fastopen"
<SwitchPreference
android:key=
"tcp_fastopen"
android:icon=
"@drawable/ic_action_offline_bolt"
android:summary=
"@string/tcp_fastopen_summary"
android:title=
"TCP Fast Open"
/>
<SimpleMenuPreference
android:key=
"nightMode"
android:icon=
"@drawable/ic_image_brightness_3"
android:entries=
"@array/night_modes"
android:entryValues=
"@array/night_mode_values"
android:defaultValue=
"system"
...
...
@@ -36,6 +40,7 @@
android:title=
"@string/port_proxy"
/>
<AutoSummaryEditTextPreference
android:key=
"portLocalDns"
android:icon=
"@drawable/ic_action_dns"
android:inputType=
"number"
android:maxLength=
"5"
app:pref_summaryHasText=
"%s"
...
...
mobile/src/main/res/xml/pref_profile.xml
View file @
18107d7d
...
...
@@ -30,6 +30,7 @@
android:title=
"@string/sitekey"
/>
<SimpleMenuPreference
android:key=
"encMethod"
android:icon=
"@drawable/ic_notification_enhanced_encryption"
android:entries=
"@array/enc_method_entry"
android:entryValues=
"@array/enc_method_value"
android:summary=
"%s"
...
...
@@ -48,18 +49,22 @@
android:title=
"@string/route_list"
/>
<AutoSummaryEditTextPreference
android:key=
"remoteDns"
android:icon=
"@drawable/ic_action_dns"
android:title=
"@string/remote_dns"
app:pref_summaryHasText=
"%s"
/>
<SwitchPreference
android:key=
"isIpv6"
android:icon=
"@drawable/ic_image_looks_6"
android:summary=
"@string/ipv6_summary"
android:title=
"@string/ipv6"
/>
<SwitchPreference
android:key=
"isProxyApps"
android:icon=
"@drawable/ic_navigation_apps"
android:summary=
"@string/proxied_apps_summary"
android:title=
"@string/proxied_apps"
/>
<SwitchPreference
android:key=
"isUdpDns"
android:icon=
"@drawable/ic_action_dns"
android:summary=
"@string/udp_dns_summary"
android:title=
"@string/udp_dns"
/>
...
...
@@ -75,6 +80,7 @@
android:title=
"@string/plugin"
/>
<AutoSummaryEditTextPreference
android:key=
"plugin.configure"
android:icon=
"@drawable/ic_action_settings"
android:persistent=
"false"
app:pref_summaryHasText=
"%s"
android:title=
"@string/plugin_configure"
/>
...
...
plugin/build.gradle
View file @
18107d7d
...
...
@@ -5,7 +5,7 @@ apply from: 'gradle-mvn-push.gradle'
android
{
buildToolsVersion
rootProject
.
buildToolsVersion
compileSdkVersion
rootProject
.
s
dkVersion
compileSdkVersion
rootProject
.
compileS
dkVersion
defaultConfig
{
minSdkVersion
rootProject
.
minSdkVersion
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment