Compare commits
63 Commits
android-cl
...
android-0.
Author | SHA1 | Date | |
---|---|---|---|
17ab043a4b | |||
32b2b0ce75 | |||
b77e2ebbe5 | |||
9eeab68cdb | |||
96257015a9 | |||
d7f6e3688c | |||
5ef434e29f | |||
852d695dac | |||
96cb8ab410 | |||
cd158cca84 | |||
b71a0a27d3 | |||
64268c7af8 | |||
95749f032e | |||
0ac1ae56b0 | |||
c52bc45910 | |||
064ebc6857 | |||
6352cd9412 | |||
db6c74b4b8 | |||
a8d699bea2 | |||
5d9cb0029f | |||
51f7fca1ea | |||
c61ccd32ba | |||
1debd64bc3 | |||
561bcfe3fa | |||
1c1f77f5c5 | |||
420526a7c4 | |||
99496be412 | |||
b6f1cdc769 | |||
75e4153f4e | |||
eefa5b8064 | |||
9d32e44547 | |||
42a0d552c7 | |||
65848dd22b | |||
610de188a4 | |||
f1cd3032c5 | |||
1a922ba04a | |||
bdd59734ec | |||
fe162e4f5c | |||
69e30e97b8 | |||
513fbe0c9f | |||
de23a76e6b | |||
c9936894d8 | |||
cb6efd9ed8 | |||
ad245003bf | |||
9f27aedc49 | |||
d8f883dce8 | |||
7db1fbac94 | |||
19464124d6 | |||
5ba616facc | |||
590a8183aa | |||
9a45bbd18c | |||
c5eedc0a5e | |||
715302c813 | |||
3327ed722a | |||
40afd69a54 | |||
241381c7fa | |||
7a7ba093db | |||
f0e6744760 | |||
99002c1c5c | |||
605a6c1cf4 | |||
954a9cc46b | |||
1ef838b966 | |||
c672ca05f5 |
27
CHANGELOG
Normal file
27
CHANGELOG
Normal file
@ -0,0 +1,27 @@
|
||||
0.9.18
|
||||
* I2P can start automatically when phone boots (configure in Setting)
|
||||
* Updated browser configuration guides for Orfox and Firefox
|
||||
* Tunnels for postman's mail server added to defaults (for new installs)
|
||||
* Settings options for configuring UDP and TCP ports
|
||||
* Bug fixes and translation updates
|
||||
|
||||
0.9.17.1 /2014-12-14 / cd8bb5e3ac4238efac12179c78c4fa517fcaabec
|
||||
* Fixed crashes in addressbook and netDb status page
|
||||
* Fixed crash when opening an IRC client tunnel
|
||||
* Updated translations
|
||||
|
||||
0.9.17 / 2014-12-01 / bcf947f433876f643e0f6dff81aac88848b797d3
|
||||
* Migrated to the new Material design from Android Lollipop
|
||||
* Added a browser configuration guide
|
||||
* Improved the help screen
|
||||
* Upgraded the I2P router to 0.9.17
|
||||
* Various bug fixes and translation updates
|
||||
|
||||
0.9.15.1 / 2014-10-16 / 9cc4e80134cf9becb3838ed3cc78e0bed1363165
|
||||
* Fixed a configuration bug
|
||||
|
||||
0.9.15 / 2014-10-16 / 9b51f78b791c28a580d57f1a5019c94493de6231
|
||||
* Upgraded the I2P router to 0.9.15
|
||||
* Added a help screen with some basic information
|
||||
* Logs can now be copied to the clipboard
|
||||
* Various user interface improvements and fixes
|
67
TODO
67
TODO
@ -3,11 +3,30 @@
|
||||
- Better twopane column widths
|
||||
<zzz> on the i2ptunnel and addressbook pages on the tablet, the columns are too skinny, they aren't as wide as the tab
|
||||
<zzz> only a few addressbook entries wrap but on i2ptunnel everything is wrapped and most of the screen is empty
|
||||
- Create tunnel wizard
|
||||
<zzz> in the tunnel create wizard:
|
||||
<zzz> 'this could be the full base 64 destination key, or an i2p url from your address book"
|
||||
<zzz> 'host name' better than 'URL'. Technically speaking, a host name is not a URL
|
||||
<zzz> hmm would be nice if they could be shared-client or have an option
|
||||
<zzz> was setting up email tunnels
|
||||
- I2PTunnel details
|
||||
<zzz> on the i2ptunnel details, it lists both a 'target' and 'access point' for clients, with the same info
|
||||
<zzz> generally we use 'target' for servers and 'access point' for clients, never both
|
||||
- Browser
|
||||
<zzzccc> Bug report: i2p browser treats 302 as an error
|
||||
<zzzccc> Bug 2: rotate screen in i2p browser seems to go back one page
|
||||
|
||||
# Short-term
|
||||
|
||||
- Graceful shutdown option
|
||||
<zzzccc> Request: graceful shutdown
|
||||
- Disable uPnP when on cell networks
|
||||
<zzz> spewing UPnP out into cell networks is a waste of time at best and a security risk at worst, but you really want it for wifi
|
||||
- I2PTunnel
|
||||
- Show all messages somewhere
|
||||
- Improve detail page, expose advanced settings
|
||||
- Add edit page
|
||||
- Progress feedback for addressbook subscriptions reload
|
||||
- Display release notes directly on new router version
|
||||
- Fill out help pages
|
||||
- Rewrite release notes to be release-specific
|
||||
@ -31,10 +50,50 @@
|
||||
- Show fixed x range, not only available data
|
||||
- Think about pan/zoom
|
||||
- How to persist data across restarts?
|
||||
- I2PTunnel
|
||||
- Show all messages somewhere
|
||||
- Improve detail page, expose advanced settings
|
||||
- Add edit page
|
||||
|
||||
# Silent Store approval checks to confirm/implement
|
||||
|
||||
- Known Vulnerabilities
|
||||
- Apps will be tested to ensure that they are not susceptible to known
|
||||
publicly disclosed vulnerabilities. For example:
|
||||
- Heartbleed
|
||||
- Poodle
|
||||
- MasterKey
|
||||
- Common Path Traversal attacks
|
||||
- Common SQL Injection attacks
|
||||
- Network Security Protocols
|
||||
- All Apps that require transmission of data from the App to a system that
|
||||
does not exist on the device must use, at a minimum, TLS1.1 standards.
|
||||
However, Blackphone would prefer the usage of TLS1.2.
|
||||
- Apps must not use algorithms for cryptographic purposes that are considered
|
||||
obsolete or outdated i.e. MD5, SHA1, RC4, DES, or any encryption algorithm
|
||||
that is weaker than AES128.
|
||||
- Transport Layer Protection
|
||||
- All network communication should be encrypted
|
||||
- Not vulnerable to SSl Strip
|
||||
- Data Leakage
|
||||
- No storage of sensitive data outside of application sandbox
|
||||
- Files should not be created with MODE_WORLD_READABLE or MODE_WORLD_WRITABLE
|
||||
- Copy & Paste will be evaluated on a case by case basis
|
||||
- App logs should not contain sensitive information
|
||||
- Authentication and Authorization
|
||||
- Validate that authentication credentials are not stored on the device
|
||||
- Must use an approved password-based key derivation function ie. PBKDF2, scrypt
|
||||
- Data-at-rest Encryption
|
||||
- Must use at a minimum AES128 with modes CCM or GCM
|
||||
- Should not store the encryption key on the file system
|
||||
- Permission Checks
|
||||
- The App must function with all permissions disabled
|
||||
- Apps must not hard crash if a permission is disabled
|
||||
- Apps should ask users to enable permissions that are disabled if needed to
|
||||
function properly and explain why the permission is necessary
|
||||
- Privacy Policy
|
||||
- Apps must have a privacy policy that details how customer data is used,
|
||||
stored, shared, etc...
|
||||
- Apps must be configured with the customer opted out by default
|
||||
- App logs should not contain PII
|
||||
- Error Handling
|
||||
- Apps should follow best-practices for error handling and logging
|
||||
|
||||
# Long-term
|
||||
|
||||
|
137
app/build.gradle
137
app/build.gradle
@ -5,8 +5,8 @@ android {
|
||||
compileSdkVersion Integer.parseInt(project.ANDROID_BUILD_SDK_VERSION)
|
||||
buildToolsVersion project.ANDROID_BUILD_TOOLS_VERSION
|
||||
defaultConfig {
|
||||
versionCode 4745223
|
||||
versionName '0.9.16-rc1'
|
||||
versionCode 4745226
|
||||
versionName '0.9.18'
|
||||
minSdkVersion 9
|
||||
targetSdkVersion Integer.parseInt(project.ANDROID_BUILD_TARGET_SDK_VERSION)
|
||||
}
|
||||
@ -16,9 +16,17 @@ android {
|
||||
buildTypes {
|
||||
release {
|
||||
signingConfig signingConfigs.release
|
||||
runProguard false
|
||||
minifyEnabled false
|
||||
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
|
||||
}
|
||||
debug {
|
||||
applicationIdSuffix '.debug'
|
||||
versionNameSuffix '-DEBUG'
|
||||
}
|
||||
}
|
||||
compileOptions {
|
||||
sourceCompatibility JavaVersion.VERSION_1_7
|
||||
targetCompatibility JavaVersion.VERSION_1_7
|
||||
}
|
||||
lintOptions {
|
||||
abortOnError false
|
||||
@ -39,21 +47,19 @@ android {
|
||||
dependencies {
|
||||
compile project(':routerjars')
|
||||
compile project(':client')
|
||||
compile 'com.android.support:support-v4:21.0.2'
|
||||
compile 'com.android.support:appcompat-v7:21.0.2'
|
||||
compile 'com.android.support:recyclerview-v7:21.0.2'
|
||||
compile 'com.android.support:cardview-v7:21.0.2'
|
||||
compile 'net.i2p.android.ext:floatingactionbutton:1.1.0'
|
||||
compile 'com.android.support:support-v4:21.0.3'
|
||||
compile 'com.android.support:appcompat-v7:21.0.3'
|
||||
compile 'com.android.support:recyclerview-v7:21.0.3'
|
||||
compile 'net.i2p.android.ext:floatingactionbutton:1.8.0'
|
||||
compile files('libs/androidplot-core-0.6.1.jar')
|
||||
}
|
||||
|
||||
dependencyVerification {
|
||||
verify = [
|
||||
'com.android.support:support-v4:126a4c291f41f75f3fff4968e9d397bc8454cdff4d8f994cbe0524e3bad76e72',
|
||||
'com.android.support:appcompat-v7:b760fd3d0b0b0547a1bcef9031b40939f31049ba955f04c8fdc5aa09a25d19e9',
|
||||
'com.android.support:recyclerview-v7:71ef0f5659b3019dc33c5ffb346ea01df1f66735506f38d43fd783fbcb0370ce',
|
||||
'com.android.support:cardview-v7:cb4d7ee9ebb6edffa7203eff0d207b4e88425599a8ed37d94b650bc84390c4eb',
|
||||
'net.i2p.android.ext:floatingactionbutton:84cf5b67a66337bef59b46f57468c730387ca766b5a5f06ca852ba46cabbc0fb',
|
||||
'com.android.support:support-v4:703572d3015a088cc5604b7e38885af3d307c829d0c5ceaf8654ff41c71cd160',
|
||||
'com.android.support:appcompat-v7:5dbeb5316d0a6027d646ae552804c3baa5e3bd53f7f33db50904d51505c8a0e5',
|
||||
'com.android.support:recyclerview-v7:e525ad3f33c84bb12b73d2dc975b55364a53f0f2d0697e043efba59ba73e22d2',
|
||||
'net.i2p.android.ext:floatingactionbutton:a20d1f0cae15f8965b81486ba31245937968ae6ee5fa6e8a3ea21d7f6c6243ab',
|
||||
]
|
||||
}
|
||||
|
||||
@ -74,68 +80,65 @@ if (propFile.canRead()) {
|
||||
println 'local.properties not found'
|
||||
}
|
||||
|
||||
task copyDrawableResources(type: Copy) {
|
||||
from file(i2pbase + '/installer/resources/themes/console/images/i2plogo.png')
|
||||
into 'src/main/res/drawable'
|
||||
}
|
||||
task certificatesZip(type: Zip) {
|
||||
archiveName = 'certificates_zip'
|
||||
from files('' + i2pbase + '/installer/resources/certificates')
|
||||
}
|
||||
task copyRawResources(type:Copy) {
|
||||
from(i2pbase + '/installer/resources/blocklist.txt') { rename { 'blocklist_txt' } }
|
||||
from(i2pbase + '/installer/resources/hosts.txt') { rename { 'hosts_txt' } }
|
||||
from('../LICENSE.txt') { rename { 'license_app_txt' } }
|
||||
from('../licenses/LICENSE-Apache2.0.txt') { rename { 'license_apache20_txt' } }
|
||||
from(i2pbase + '/licenses') {
|
||||
include { elem ->
|
||||
elem.name in [
|
||||
'LICENSE-ElGamalDSA.txt',
|
||||
'LICENSE-SHA256.txt',
|
||||
'LICENSE-BSD.txt',
|
||||
'LICENSE-SNTP.txt',
|
||||
'LICENSE-LGPLv2.1.txt',
|
||||
'LICENSE-InstallCert.txt',
|
||||
'LICENSE-BlockFile.txt',
|
||||
'LICENSE-GPLv2.txt',
|
||||
'LICENSE-GPLv3.txt',
|
||||
'LICENSE-LGPLv3.txt',
|
||||
'LICENSE-FatCowIcons.txt',
|
||||
'LICENSE-Addressbook.txt',
|
||||
]
|
||||
}
|
||||
rename { String name ->
|
||||
String part = name.substring(8, name.lastIndexOf('.txt'))
|
||||
String.format('license_%s_txt',
|
||||
part.toLowerCase(Locale.US).replace('.', '_'))
|
||||
}
|
||||
task copyI2PResources(type: Copy) {
|
||||
// Force this to always run: Copy only detects source changes, not if missing in destination
|
||||
outputs.upToDateWhen { false }
|
||||
into 'src/main/res'
|
||||
into('drawable') {
|
||||
from file(i2pbase + '/installer/resources/themes/console/images/i2plogo.png')
|
||||
}
|
||||
into('raw') {
|
||||
from(i2pbase + '/installer/resources/blocklist.txt') { rename { 'blocklist_txt' } }
|
||||
from(i2pbase + '/installer/resources/hosts.txt') { rename { 'hosts_txt' } }
|
||||
from('../LICENSE.txt') { rename { 'license_app_txt' } }
|
||||
from('../licenses/LICENSE-Apache2.0.txt') { rename { 'license_apache20_txt' } }
|
||||
from(i2pbase + '/licenses') {
|
||||
include { elem ->
|
||||
elem.name in [
|
||||
'LICENSE-ElGamalDSA.txt',
|
||||
'LICENSE-SHA256.txt',
|
||||
'LICENSE-BSD.txt',
|
||||
'LICENSE-SNTP.txt',
|
||||
'LICENSE-LGPLv2.1.txt',
|
||||
'LICENSE-InstallCert.txt',
|
||||
'LICENSE-BlockFile.txt',
|
||||
'LICENSE-GPLv2.txt',
|
||||
'LICENSE-GPLv3.txt',
|
||||
'LICENSE-LGPLv3.txt',
|
||||
'LICENSE-FatCowIcons.txt',
|
||||
'LICENSE-Addressbook.txt',
|
||||
]
|
||||
}
|
||||
rename { String name ->
|
||||
String part = name.substring(8, name.lastIndexOf('.txt'))
|
||||
String.format('license_%s_txt',
|
||||
part.toLowerCase(Locale.US).replace('.', '_'))
|
||||
}
|
||||
}
|
||||
from certificatesZip
|
||||
}
|
||||
from certificatesZip
|
||||
into 'src/main/res/raw'
|
||||
}
|
||||
task copyI2PResources
|
||||
copyI2PResources.dependsOn copyDrawableResources
|
||||
copyI2PResources.dependsOn copyRawResources
|
||||
|
||||
// For peers WebView
|
||||
task copyConsoleImagesAssets(type: Copy) {
|
||||
from file(i2pbase + '/installer/resources/themes/console/images/i2plogo.png')
|
||||
from file(i2pbase + '/installer/resources/themes/console/images/inbound.png')
|
||||
from file(i2pbase + '/installer/resources/themes/console/images/outbound.png')
|
||||
into 'src/main/assets/themes/console/images'
|
||||
task copyI2PAssets(type: Copy) {
|
||||
// Force this to always run: Copy only detects source changes, not if missing in destination
|
||||
outputs.upToDateWhen { false }
|
||||
into 'src/main/assets/themes/console'
|
||||
into('images') {
|
||||
from file(i2pbase + '/installer/resources/themes/console/images/i2plogo.png')
|
||||
from file(i2pbase + '/installer/resources/themes/console/images/inbound.png')
|
||||
from file(i2pbase + '/installer/resources/themes/console/images/outbound.png')
|
||||
}
|
||||
into('light') {
|
||||
from file(i2pbase + '/installer/resources/themes/console/light/console.css')
|
||||
}
|
||||
into('light/images') {
|
||||
from file(i2pbase + '/installer/resources/themes/console/light/images/header.png')
|
||||
}
|
||||
}
|
||||
task copyConsoleLightAssets(type: Copy) {
|
||||
from file(i2pbase + '/installer/resources/themes/console/light/console.css')
|
||||
into 'src/main/assets/themes/console/light'
|
||||
}
|
||||
task copyConsoleLightImagesAssets(type: Copy) {
|
||||
from file(i2pbase + '/installer/resources/themes/console/light/images/header.png')
|
||||
into 'src/main/assets/themes/console/light/images'
|
||||
}
|
||||
task copyI2PAssets
|
||||
copyI2PAssets.dependsOn copyConsoleImagesAssets
|
||||
copyI2PAssets.dependsOn copyConsoleLightAssets
|
||||
copyI2PAssets.dependsOn copyConsoleLightImagesAssets
|
||||
|
||||
preBuild.dependsOn copyI2PResources
|
||||
preBuild.dependsOn copyI2PAssets
|
||||
|
4
app/src/debug/res/values/strings.xml
Normal file
4
app/src/debug/res/values/strings.xml
Normal file
@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="app_name" translatable="false">I2P DEBUG</string>
|
||||
</resources>
|
37
app/src/debug/res/xml/settings_headers.xml
Normal file
37
app/src/debug/res/xml/settings_headers.xml
Normal file
@ -0,0 +1,37 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<preference-headers xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<header
|
||||
android:fragment="net.i2p.android.router.SettingsActivity$SettingsFragment"
|
||||
android:title="@string/settings_label_bandwidth_net">
|
||||
<extra
|
||||
android:name="settings"
|
||||
android:value="net" />
|
||||
</header>
|
||||
<header
|
||||
android:fragment="net.i2p.android.router.SettingsActivity$SettingsFragment"
|
||||
android:title="@string/label_graphs">
|
||||
<extra
|
||||
android:name="settings"
|
||||
android:value="graphs" />
|
||||
</header>
|
||||
<header
|
||||
android:fragment="net.i2p.android.router.SettingsActivity$SettingsFragment"
|
||||
android:title="@string/settings_label_logging">
|
||||
<extra
|
||||
android:name="settings"
|
||||
android:value="logging" />
|
||||
</header>
|
||||
<header
|
||||
android:title="@string/label_addressbook">
|
||||
<intent
|
||||
android:targetPackage="net.i2p.android.debug"
|
||||
android:targetClass="net.i2p.android.router.addressbook.AddressbookSettingsActivity" />
|
||||
</header>
|
||||
<header
|
||||
android:fragment="net.i2p.android.router.SettingsActivity$SettingsFragment"
|
||||
android:title="@string/settings_label_advanced">
|
||||
<extra
|
||||
android:name="settings"
|
||||
android:value="advanced" />
|
||||
</header>
|
||||
</preference-headers>
|
32
app/src/debug/res/xml/settings_headers_legacy.xml
Normal file
32
app/src/debug/res/xml/settings_headers_legacy.xml
Normal file
@ -0,0 +1,32 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
|
||||
<Preference android:title="@string/settings_label_bandwidth_net">
|
||||
<intent
|
||||
android:targetPackage="net.i2p.android.debug"
|
||||
android:targetClass="net.i2p.android.router.SettingsActivity"
|
||||
android:action="net.i2p.android.router.PREFS_NET" />
|
||||
</Preference>
|
||||
<Preference android:title="@string/label_graphs">
|
||||
<intent
|
||||
android:targetPackage="net.i2p.android.debug"
|
||||
android:targetClass="net.i2p.android.router.SettingsActivity"
|
||||
android:action="net.i2p.android.router.PREFS_GRAPHS" />
|
||||
</Preference>
|
||||
<Preference android:title="@string/settings_label_logging">
|
||||
<intent
|
||||
android:targetPackage="net.i2p.android.debug"
|
||||
android:targetClass="net.i2p.android.router.SettingsActivity"
|
||||
android:action="net.i2p.android.router.PREFS_LOGGING" />
|
||||
</Preference>
|
||||
<Preference android:title="@string/label_addressbook">
|
||||
<intent
|
||||
android:targetPackage="net.i2p.android.debug"
|
||||
android:targetClass="net.i2p.android.router.addressbook.AddressbookSettingsActivity" />
|
||||
</Preference>
|
||||
<Preference android:title="@string/settings_label_advanced">
|
||||
<intent
|
||||
android:targetPackage="net.i2p.android.debug"
|
||||
android:targetClass="net.i2p.android.router.SettingsActivity"
|
||||
android:action="net.i2p.android.router.PREFS_ADVANCED" />
|
||||
</Preference>
|
||||
</PreferenceScreen>
|
@ -5,6 +5,7 @@
|
||||
|
||||
<uses-permission android:name="android.permission.INTERNET" />
|
||||
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
||||
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
|
||||
|
||||
<application
|
||||
android:icon="@drawable/ic_launcher_itoopie"
|
||||
@ -20,7 +21,12 @@
|
||||
</service>
|
||||
<provider
|
||||
android:name=".provider.CacheProvider"
|
||||
android:authorities="net.i2p.android" />
|
||||
android:authorities="${applicationId}.provider" />
|
||||
<receiver android:name=".receiver.OnBootReceiver">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.BOOT_COMPLETED" />
|
||||
</intent-filter>
|
||||
</receiver>
|
||||
|
||||
<activity
|
||||
android:name=".MainActivity"
|
||||
@ -39,7 +45,7 @@
|
||||
<activity
|
||||
android:name=".NewsActivity"
|
||||
android:configChanges="orientation|keyboardHidden"
|
||||
android:label="I2P News"
|
||||
android:label="@string/label_news"
|
||||
android:parentActivityName=".MainActivity">
|
||||
<meta-data
|
||||
android:name="android.support.PARENT_ACTIVITY"
|
||||
@ -47,7 +53,7 @@
|
||||
</activity>
|
||||
<activity
|
||||
android:name="net.i2p.android.help.HelpActivity"
|
||||
android:label="Help"
|
||||
android:label="@string/menu_help"
|
||||
android:parentActivityName=".MainActivity">
|
||||
<meta-data
|
||||
android:name="android.support.PARENT_ACTIVITY"
|
||||
@ -55,7 +61,7 @@
|
||||
</activity>
|
||||
<activity
|
||||
android:name="net.i2p.android.help.BrowserConfigActivity"
|
||||
android:label="Browser Configuration"
|
||||
android:label="@string/label_browser_configuration"
|
||||
android:parentActivityName=".MainActivity">
|
||||
<meta-data
|
||||
android:name="android.support.PARENT_ACTIVITY"
|
||||
@ -63,7 +69,7 @@
|
||||
</activity>
|
||||
<activity
|
||||
android:name=".LicenseActivity"
|
||||
android:label="I2P License Information"
|
||||
android:label="@string/label_licenses"
|
||||
android:parentActivityName="net.i2p.android.help.HelpActivity">
|
||||
<meta-data
|
||||
android:name="android.support.PARENT_ACTIVITY"
|
||||
@ -88,7 +94,7 @@
|
||||
</activity>
|
||||
<activity
|
||||
android:name=".SettingsActivity"
|
||||
android:label="I2P Settings"
|
||||
android:label="@string/menu_settings"
|
||||
android:parentActivityName=".MainActivity">
|
||||
<meta-data
|
||||
android:name="android.support.PARENT_ACTIVITY"
|
||||
@ -105,7 +111,7 @@
|
||||
</activity>
|
||||
<activity
|
||||
android:name=".addressbook.AddressbookActivity"
|
||||
android:label="Addressbook"
|
||||
android:label="@string/label_addressbook"
|
||||
android:launchMode="singleTop">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.SEARCH" />
|
||||
@ -129,7 +135,7 @@
|
||||
</activity>
|
||||
<activity
|
||||
android:name="net.i2p.android.i2ptunnel.TunnelListActivity"
|
||||
android:label="I2PTunnel"
|
||||
android:label="@string/label_i2ptunnel"
|
||||
android:launchMode="singleTop"
|
||||
android:parentActivityName=".MainActivity">
|
||||
<meta-data
|
||||
@ -142,7 +148,7 @@
|
||||
android:parentActivityName="net.i2p.android.i2ptunnel.TunnelListActivity">
|
||||
<meta-data
|
||||
android:name="android.support.PARENT_ACTIVITY"
|
||||
android:value="net.i2p.android.router.i2ptunnel.TunnelListActivity" />
|
||||
android:value="net.i2p.android.i2ptunnel.TunnelListActivity" />
|
||||
</activity>
|
||||
<activity
|
||||
android:name="net.i2p.android.i2ptunnel.TunnelWizardActivity"
|
||||
|
@ -3,6 +3,7 @@ package net.i2p.android.help;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.content.pm.ResolveInfo;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.support.annotation.NonNull;
|
||||
|
||||
public class Browser implements Comparable<Browser> {
|
||||
public final String packageName;
|
||||
@ -55,7 +56,7 @@ public class Browser implements Comparable<Browser> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public int compareTo(Browser browser) {
|
||||
public int compareTo(@NonNull Browser browser) {
|
||||
// Sort order: supported -> unknown -> unsupported
|
||||
int a = getOrder(this);
|
||||
int b = getOrder(browser);
|
||||
|
@ -102,12 +102,12 @@ public class BrowserListFragment extends Fragment implements
|
||||
|
||||
@Override
|
||||
public List<Browser> loadInBackground() {
|
||||
List<Browser> browsers = new ArrayList<Browser>();
|
||||
Map<String, String> recommendedMap = new HashMap<String, String>();
|
||||
List<Browser> browsers = new ArrayList<>();
|
||||
Map<String, String> recommendedMap = new HashMap<>();
|
||||
for (int i = 0; i < recommended.size(); i++) {
|
||||
recommendedMap.put(recommended.get(i), recommendedLabels.get(i));
|
||||
}
|
||||
Map<String, String> supportedMap = new HashMap<String, String>();
|
||||
Map<String, String> supportedMap = new HashMap<>();
|
||||
for (int i = 0; i < supported.size(); i++) {
|
||||
supportedMap.put(supported.get(i), supportedLabels.get(i));
|
||||
}
|
||||
|
@ -2,6 +2,8 @@ package net.i2p.android.help;
|
||||
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.support.v4.app.NavUtils;
|
||||
import android.support.v4.app.TaskStackBuilder;
|
||||
import android.support.v7.app.ActionBarActivity;
|
||||
import android.support.v7.widget.Toolbar;
|
||||
import android.view.Menu;
|
||||
@ -24,6 +26,7 @@ public class HelpActivity extends ActionBarActivity implements
|
||||
* device.
|
||||
*/
|
||||
private boolean mTwoPane;
|
||||
private int mCategory;
|
||||
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
@ -49,9 +52,10 @@ public class HelpActivity extends ActionBarActivity implements
|
||||
.commit();
|
||||
}
|
||||
|
||||
int category = getIntent().getIntExtra(CATEGORY, -1);
|
||||
if (category >= 0)
|
||||
showCategory(category);
|
||||
mCategory = getIntent().getIntExtra(CATEGORY, -1);
|
||||
if (mCategory >= 0) {
|
||||
showCategory(mCategory);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -64,7 +68,24 @@ public class HelpActivity extends ActionBarActivity implements
|
||||
public boolean onOptionsItemSelected(MenuItem item) {
|
||||
switch (item.getItemId()) {
|
||||
case android.R.id.home:
|
||||
onBackPressed();
|
||||
if (mCategory >= 0) {
|
||||
onBackPressed();
|
||||
} else {
|
||||
Intent upIntent = NavUtils.getParentActivityIntent(this);
|
||||
if (NavUtils.shouldUpRecreateTask(this, upIntent)) {
|
||||
// This activity is NOT part of this app's task, so create a new task
|
||||
// when navigating up, with a synthesized back stack.
|
||||
TaskStackBuilder.create(this)
|
||||
// Add all of this activity's parents to the back stack
|
||||
.addNextIntentWithParentStack(upIntent)
|
||||
// Navigate up to the closest parent
|
||||
.startActivities();
|
||||
} else {
|
||||
// This activity is part of this app's task, so simply
|
||||
// navigate up to the logical parent activity.
|
||||
NavUtils.navigateUpTo(this, upIntent);
|
||||
}
|
||||
}
|
||||
return true;
|
||||
case R.id.menu_help_licenses:
|
||||
Intent lic = new Intent(HelpActivity.this, LicenseActivity.class);
|
||||
@ -84,6 +105,13 @@ public class HelpActivity extends ActionBarActivity implements
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBackPressed() {
|
||||
super.onBackPressed();
|
||||
if (mCategory >= 0)
|
||||
mCategory = -1;
|
||||
}
|
||||
|
||||
// HelpListFragment.OnEntrySelectedListener
|
||||
|
||||
@Override
|
||||
@ -91,8 +119,10 @@ public class HelpActivity extends ActionBarActivity implements
|
||||
if (entry == CAT_CONFIGURE_BROWSER) {
|
||||
Intent i = new Intent(this, BrowserConfigActivity.class);
|
||||
startActivity(i);
|
||||
} else
|
||||
} else {
|
||||
mCategory = entry;
|
||||
showCategory(entry);
|
||||
}
|
||||
}
|
||||
|
||||
private void showCategory(int category) {
|
||||
|
@ -1,8 +1,9 @@
|
||||
package net.i2p.android.i2ptunnel;
|
||||
|
||||
import android.os.Bundle;
|
||||
|
||||
import net.i2p.android.router.I2PActivityBase;
|
||||
import net.i2p.android.router.R;
|
||||
import android.os.Bundle;
|
||||
|
||||
public class TunnelDetailActivity extends I2PActivityBase implements
|
||||
TunnelDetailFragment.OnTunnelDeletedListener {
|
||||
@ -11,6 +12,8 @@ public class TunnelDetailActivity extends I2PActivityBase implements
|
||||
super.onCreate(savedInstanceState);
|
||||
mDrawerToggle.setDrawerIndicatorEnabled(false);
|
||||
|
||||
getSupportActionBar().setDisplayShowTitleEnabled(false);
|
||||
|
||||
if (savedInstanceState == null) {
|
||||
int tunnelId = getIntent().getIntExtra(TunnelDetailFragment.TUNNEL_ID, 0);
|
||||
TunnelDetailFragment detailFrag = TunnelDetailFragment.newInstance(tunnelId);
|
||||
|
@ -1,15 +1,11 @@
|
||||
package net.i2p.android.i2ptunnel;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import net.i2p.android.i2ptunnel.util.TunnelUtil;
|
||||
import net.i2p.android.router.R;
|
||||
import net.i2p.i2ptunnel.TunnelControllerGroup;
|
||||
import android.app.Activity;
|
||||
import android.app.AlertDialog;
|
||||
import android.app.Dialog;
|
||||
import android.content.DialogInterface;
|
||||
import android.os.Bundle;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.v4.app.DialogFragment;
|
||||
import android.support.v4.app.Fragment;
|
||||
import android.view.LayoutInflater;
|
||||
@ -22,6 +18,12 @@ import android.widget.CheckBox;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
import net.i2p.android.i2ptunnel.util.TunnelUtil;
|
||||
import net.i2p.android.router.R;
|
||||
import net.i2p.i2ptunnel.TunnelControllerGroup;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class TunnelDetailFragment extends Fragment {
|
||||
public static final String TUNNEL_ID = "tunnel_id";
|
||||
|
||||
@ -165,6 +167,7 @@ public class TunnelDetailFragment extends Fragment {
|
||||
return true;
|
||||
case R.id.action_delete_tunnel:
|
||||
DialogFragment dg = new DialogFragment() {
|
||||
@NonNull
|
||||
@Override
|
||||
public Dialog onCreateDialog(Bundle savedInstanceState) {
|
||||
return new AlertDialog.Builder(getActivity())
|
||||
|
@ -4,6 +4,7 @@ import java.util.List;
|
||||
|
||||
import android.content.Context;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.net.Uri;
|
||||
import android.widget.Toast;
|
||||
import net.i2p.android.i2ptunnel.util.TunnelConfig;
|
||||
import net.i2p.android.i2ptunnel.util.TunnelUtil;
|
||||
@ -233,6 +234,17 @@ public class TunnelEntry {
|
||||
else return getServerLink(linkify);
|
||||
}
|
||||
|
||||
public Uri getRecommendedAppForTunnel() {
|
||||
int resId = 0;
|
||||
if ("ircclient".equals(mController.getType()))
|
||||
resId = R.string.market_irc;
|
||||
|
||||
if (resId > 0)
|
||||
return Uri.parse(mContext.getString(resId));
|
||||
else
|
||||
return null;
|
||||
}
|
||||
|
||||
public String getDetails() {
|
||||
String details;
|
||||
if (isClient())
|
||||
|
@ -1,6 +1,9 @@
|
||||
package net.i2p.android.i2ptunnel;
|
||||
|
||||
import android.app.AlertDialog;
|
||||
import android.content.ActivityNotFoundException;
|
||||
import android.content.Context;
|
||||
import android.content.DialogInterface;
|
||||
import android.content.Intent;
|
||||
import android.net.Uri;
|
||||
import android.os.Build;
|
||||
@ -61,7 +64,27 @@ public class TunnelEntryAdapter extends ArrayAdapter<TunnelEntry> {
|
||||
public void onClick(View view) {
|
||||
Intent i = new Intent(Intent.ACTION_VIEW);
|
||||
i.setData(Uri.parse(tunnel.getTunnelLink(true)));
|
||||
getContext().startActivity(i);
|
||||
try {
|
||||
getContext().startActivity(i);
|
||||
} catch (ActivityNotFoundException e) {
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(getContext());
|
||||
builder.setTitle(R.string.install_recommended_app)
|
||||
.setMessage(R.string.app_needed_for_this_tunnel_type)
|
||||
.setPositiveButton(R.string.yes, new DialogInterface.OnClickListener() {
|
||||
public void onClick(DialogInterface dialogInterface, int i) {
|
||||
Uri uri = tunnel.getRecommendedAppForTunnel();
|
||||
if (uri != null) {
|
||||
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
|
||||
getContext().startActivity(intent);
|
||||
}
|
||||
}
|
||||
})
|
||||
.setNegativeButton(net.i2p.android.lib.client.R.string.no, new DialogInterface.OnClickListener() {
|
||||
public void onClick(DialogInterface dialogInterface, int i) {
|
||||
}
|
||||
});
|
||||
builder.show();
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
@ -1,15 +1,15 @@
|
||||
package net.i2p.android.i2ptunnel;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import net.i2p.i2ptunnel.TunnelController;
|
||||
import net.i2p.i2ptunnel.TunnelControllerGroup;
|
||||
|
||||
import android.content.Context;
|
||||
import android.os.Handler;
|
||||
import android.support.v4.content.AsyncTaskLoader;
|
||||
|
||||
import net.i2p.i2ptunnel.TunnelController;
|
||||
import net.i2p.i2ptunnel.TunnelControllerGroup;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class TunnelEntryLoader extends AsyncTaskLoader<List<TunnelEntry>> {
|
||||
private TunnelControllerGroup mGroup;
|
||||
private boolean mClientTunnels;
|
||||
@ -26,7 +26,7 @@ public class TunnelEntryLoader extends AsyncTaskLoader<List<TunnelEntry>> {
|
||||
|
||||
@Override
|
||||
public List<TunnelEntry> loadInBackground() {
|
||||
List<TunnelEntry> ret = new ArrayList<TunnelEntry>();
|
||||
List<TunnelEntry> ret = new ArrayList<>();
|
||||
List<TunnelController> controllers = mGroup.getControllers();
|
||||
for (int i = 0; i < controllers.size(); i++) {
|
||||
TunnelEntry tunnel = new TunnelEntry(getContext(), controllers.get(i), i);
|
||||
|
@ -1,16 +1,18 @@
|
||||
package net.i2p.android.i2ptunnel;
|
||||
|
||||
import net.i2p.android.router.R;
|
||||
import net.i2p.android.wizard.model.AbstractWizardModel;
|
||||
import net.i2p.android.wizard.ui.AbstractWizardActivity;
|
||||
import android.app.Activity;
|
||||
import android.app.AlertDialog;
|
||||
import android.app.Dialog;
|
||||
import android.content.DialogInterface;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.v4.app.DialogFragment;
|
||||
|
||||
import net.i2p.android.router.R;
|
||||
import net.i2p.android.wizard.model.AbstractWizardModel;
|
||||
import net.i2p.android.wizard.ui.AbstractWizardActivity;
|
||||
|
||||
public class TunnelWizardActivity extends AbstractWizardActivity {
|
||||
@Override
|
||||
protected AbstractWizardModel onCreateModel() {
|
||||
@ -20,6 +22,7 @@ public class TunnelWizardActivity extends AbstractWizardActivity {
|
||||
@Override
|
||||
protected DialogFragment onGetFinishWizardDialog() {
|
||||
return new DialogFragment() {
|
||||
@NonNull
|
||||
@Override
|
||||
public Dialog onCreateDialog(Bundle savedInstanceState) {
|
||||
return new AlertDialog.Builder(getActivity())
|
||||
|
@ -1,11 +1,5 @@
|
||||
package net.i2p.android.i2ptunnel.util;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Properties;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.res.Resources;
|
||||
|
||||
@ -17,6 +11,12 @@ import net.i2p.i2ptunnel.TunnelControllerGroup;
|
||||
import net.i2p.util.FileUtil;
|
||||
import net.i2p.util.SecureFile;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Properties;
|
||||
|
||||
public abstract class TunnelUtil {
|
||||
public static TunnelController getController(TunnelControllerGroup tcg, int tunnel) {
|
||||
if (tunnel < 0) return null;
|
||||
@ -36,7 +36,7 @@ public abstract class TunnelUtil {
|
||||
TunnelController cur = getController(tcg, tunnelId);
|
||||
|
||||
if (config == null) {
|
||||
List<String> ret = new ArrayList<String>();
|
||||
List<String> ret = new ArrayList<>();
|
||||
ret.add("Invalid params");
|
||||
return ret;
|
||||
}
|
||||
@ -101,7 +101,7 @@ public abstract class TunnelUtil {
|
||||
List<String> msgs;
|
||||
TunnelController cur = getController(tcg, tunnelId);
|
||||
if (cur == null) {
|
||||
msgs = new ArrayList<String>();
|
||||
msgs = new ArrayList<>();
|
||||
msgs.add("Invalid tunnel number");
|
||||
return msgs;
|
||||
}
|
||||
@ -192,32 +192,34 @@ public abstract class TunnelUtil {
|
||||
|
||||
public static String getTypeName(String type, Context context) {
|
||||
Resources res = context.getResources();
|
||||
if ("client".equals(type))
|
||||
return res.getString(R.string.i2ptunnel_type_client);
|
||||
else if ("httpclient".equals(type))
|
||||
return res.getString(R.string.i2ptunnel_type_httpclient);
|
||||
else if ("ircclient".equals(type))
|
||||
return res.getString(R.string.i2ptunnel_type_ircclient);
|
||||
else if ("server".equals(type))
|
||||
return res.getString(R.string.i2ptunnel_type_server);
|
||||
else if ("httpserver".equals(type))
|
||||
return res.getString(R.string.i2ptunnel_type_httpserver);
|
||||
else if ("sockstunnel".equals(type))
|
||||
return res.getString(R.string.i2ptunnel_type_sockstunnel);
|
||||
else if ("socksirctunnel".equals(type))
|
||||
return res.getString(R.string.i2ptunnel_type_socksirctunnel);
|
||||
else if ("connectclient".equals(type))
|
||||
return res.getString(R.string.i2ptunnel_type_connectclient);
|
||||
else if ("ircserver".equals(type))
|
||||
return res.getString(R.string.i2ptunnel_type_ircserver);
|
||||
else if ("streamrclient".equals(type))
|
||||
return res.getString(R.string.i2ptunnel_type_streamrclient);
|
||||
else if ("streamrserver".equals(type))
|
||||
return res.getString(R.string.i2ptunnel_type_streamrserver);
|
||||
else if ("httpbidirserver".equals(type))
|
||||
return res.getString(R.string.i2ptunnel_type_httpbidirserver);
|
||||
else
|
||||
return type;
|
||||
switch (type) {
|
||||
case "client":
|
||||
return res.getString(R.string.i2ptunnel_type_client);
|
||||
case "httpclient":
|
||||
return res.getString(R.string.i2ptunnel_type_httpclient);
|
||||
case "ircclient":
|
||||
return res.getString(R.string.i2ptunnel_type_ircclient);
|
||||
case "server":
|
||||
return res.getString(R.string.i2ptunnel_type_server);
|
||||
case "httpserver":
|
||||
return res.getString(R.string.i2ptunnel_type_httpserver);
|
||||
case "sockstunnel":
|
||||
return res.getString(R.string.i2ptunnel_type_sockstunnel);
|
||||
case "socksirctunnel":
|
||||
return res.getString(R.string.i2ptunnel_type_socksirctunnel);
|
||||
case "connectclient":
|
||||
return res.getString(R.string.i2ptunnel_type_connectclient);
|
||||
case "ircserver":
|
||||
return res.getString(R.string.i2ptunnel_type_ircserver);
|
||||
case "streamrclient":
|
||||
return res.getString(R.string.i2ptunnel_type_streamrclient);
|
||||
case "streamrserver":
|
||||
return res.getString(R.string.i2ptunnel_type_streamrserver);
|
||||
case "httpbidirserver":
|
||||
return res.getString(R.string.i2ptunnel_type_httpbidirserver);
|
||||
default:
|
||||
return type;
|
||||
}
|
||||
}
|
||||
|
||||
public static boolean isClient(String type) {
|
||||
|
@ -52,7 +52,6 @@ public abstract class I2PActivityBase extends ActionBarActivity implements
|
||||
/**
|
||||
* Router variables
|
||||
*/
|
||||
protected String _myDir;
|
||||
protected boolean _isBound;
|
||||
protected boolean _triedBind;
|
||||
protected ServiceConnection _connection;
|
||||
@ -95,7 +94,6 @@ public abstract class I2PActivityBase extends ActionBarActivity implements
|
||||
Util.d(this + " onCreate called");
|
||||
super.onCreate(savedInstanceState);
|
||||
_sharedPrefs = getSharedPreferences(SHARED_PREFS, 0);
|
||||
_myDir = getFilesDir().getAbsolutePath();
|
||||
|
||||
// If the Activity wants to use a ViewPager, provide it.
|
||||
// If the Activity can make use of two panes (if available),
|
||||
@ -128,7 +126,7 @@ public abstract class I2PActivityBase extends ActionBarActivity implements
|
||||
mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow, GravityCompat.START);
|
||||
mDrawerList.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
|
||||
// Set the adapter for the list view
|
||||
mDrawerList.setAdapter(new ArrayAdapter<String>(this,
|
||||
mDrawerList.setAdapter(new ArrayAdapter<>(this,
|
||||
R.layout.listitem_navdrawer, activityTitles));
|
||||
// Set the list's click listener
|
||||
mDrawerList.setOnItemClickListener(new DrawerItemClickListener());
|
||||
|
@ -0,0 +1,5 @@
|
||||
package net.i2p.android.router;
|
||||
|
||||
public interface I2PConstants {
|
||||
public static final String ANDROID_PREF_PREFIX = "i2pandroid.";
|
||||
}
|
@ -124,8 +124,7 @@ class InitActivities {
|
||||
File certificates = new File(myDir, "certificates");
|
||||
File[] allcertificates = certificates.listFiles();
|
||||
if ( allcertificates != null) {
|
||||
for (int i = 0; i < allcertificates.length; i++) {
|
||||
File f = allcertificates[i];
|
||||
for (File f : allcertificates) {
|
||||
Util.d("Deleting old certificate file/dir " + f);
|
||||
FileUtil.rmdir(f, false);
|
||||
}
|
||||
@ -233,7 +232,7 @@ class InitActivities {
|
||||
* @param overrides local overrides or null
|
||||
*/
|
||||
private void mergeResourceToFile(int resID, String f, Properties overrides) {
|
||||
Util.mergeResourceToFile(ctx, myDir, f, resID, overrides);
|
||||
Util.mergeResourceToFile(ctx, myDir, f, resID, overrides, null);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -1,6 +1,5 @@
|
||||
package net.i2p.android.router;
|
||||
|
||||
import net.i2p.android.router.R;
|
||||
import android.os.Bundle;
|
||||
|
||||
public class LicenseActivity extends I2PActivityBase {
|
||||
|
@ -5,7 +5,7 @@ import android.support.v4.app.ListFragment;
|
||||
import android.view.View;
|
||||
import android.widget.ArrayAdapter;
|
||||
import android.widget.ListView;
|
||||
import net.i2p.android.router.R;
|
||||
|
||||
import net.i2p.android.router.dialog.TextResourceDialog;
|
||||
|
||||
public class LicenseFragment extends ListFragment {
|
||||
@ -28,7 +28,7 @@ public class LicenseFragment extends ListFragment {
|
||||
public void onActivityCreated(Bundle savedInstanceState) {
|
||||
super.onActivityCreated(savedInstanceState);
|
||||
|
||||
setListAdapter(new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, names));
|
||||
setListAdapter(new ArrayAdapter<>(getActivity(), android.R.layout.simple_list_item_1, names));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -1,23 +1,13 @@
|
||||
package net.i2p.android.router;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.List;
|
||||
import java.util.Properties;
|
||||
|
||||
import android.app.AlertDialog;
|
||||
import android.app.Dialog;
|
||||
import android.content.ComponentName;
|
||||
import android.content.DialogInterface;
|
||||
import android.content.Intent;
|
||||
import android.content.ServiceConnection;
|
||||
import android.content.SharedPreferences;
|
||||
import android.os.Bundle;
|
||||
import android.os.Handler;
|
||||
import android.os.IBinder;
|
||||
import android.os.Message;
|
||||
import android.os.RemoteException;
|
||||
import android.preference.PreferenceManager;
|
||||
import android.support.v4.app.DialogFragment;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuInflater;
|
||||
import android.view.MenuItem;
|
||||
@ -31,8 +21,9 @@ import net.i2p.android.router.service.RouterService;
|
||||
import net.i2p.android.router.service.State;
|
||||
import net.i2p.android.router.util.Connectivity;
|
||||
import net.i2p.android.router.util.Util;
|
||||
import net.i2p.router.RouterContext;
|
||||
import net.i2p.util.OrderedProperties;
|
||||
|
||||
import java.io.File;
|
||||
import java.lang.ref.WeakReference;
|
||||
|
||||
public class MainActivity extends I2PActivityBase implements
|
||||
MainFragment.RouterControlListener {
|
||||
@ -244,24 +235,35 @@ public class MainActivity extends I2PActivityBase implements
|
||||
private static final int STATE_MSG = 1;
|
||||
private static final String MSG_DATA = "state";
|
||||
|
||||
private Handler mHandler = new Handler() {
|
||||
private Handler mHandler = new StateHandler(new WeakReference<>(this));
|
||||
private static class StateHandler extends Handler {
|
||||
WeakReference<MainActivity> mReference;
|
||||
|
||||
public StateHandler(WeakReference<MainActivity> reference) {
|
||||
mReference = reference;
|
||||
}
|
||||
|
||||
private State lastRouterState = null;
|
||||
@Override
|
||||
public void handleMessage(Message msg) {
|
||||
MainActivity parent = mReference.get();
|
||||
if (parent == null)
|
||||
return;
|
||||
|
||||
switch (msg.what) {
|
||||
case STATE_MSG:
|
||||
State state = msg.getData().getParcelable(MSG_DATA);
|
||||
if (lastRouterState == null || lastRouterState != state) {
|
||||
if (mMainFragment == null)
|
||||
mMainFragment = (MainFragment) getSupportFragmentManager().findFragmentById(R.id.main_fragment);
|
||||
if (mMainFragment != null) {
|
||||
mMainFragment.updateState(state);
|
||||
if (parent.mMainFragment == null)
|
||||
parent.mMainFragment = (MainFragment) parent.getSupportFragmentManager().findFragmentById(R.id.main_fragment);
|
||||
if (parent.mMainFragment != null) {
|
||||
parent.mMainFragment.updateState(state);
|
||||
lastRouterState = state;
|
||||
}
|
||||
|
||||
if (state == State.RUNNING && mAutoStartFromIntent) {
|
||||
setResult(RESULT_OK);
|
||||
finish();
|
||||
if (state == State.RUNNING && parent.mAutoStartFromIntent) {
|
||||
parent.setResult(RESULT_OK);
|
||||
parent.finish();
|
||||
}
|
||||
}
|
||||
break;
|
||||
@ -269,7 +271,7 @@ public class MainActivity extends I2PActivityBase implements
|
||||
super.handleMessage(msg);
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
private boolean canStart() {
|
||||
RouterService svc = _routerService;
|
||||
@ -299,7 +301,7 @@ public class MainActivity extends I2PActivityBase implements
|
||||
setPref(PREF_AUTO_START, true);
|
||||
svc.manualStart();
|
||||
} else {
|
||||
(new File(_myDir, "wrapper.log")).delete();
|
||||
(new File(Util.getFileDir(this), "wrapper.log")).delete();
|
||||
startRouter();
|
||||
}
|
||||
}
|
||||
|
@ -1,6 +1,5 @@
|
||||
package net.i2p.android.router;
|
||||
|
||||
import net.i2p.android.router.R;
|
||||
import android.os.Bundle;
|
||||
|
||||
public class NewsActivity extends I2PActivityBase {
|
||||
|
@ -2,12 +2,15 @@ package net.i2p.android.router;
|
||||
|
||||
import android.annotation.TargetApi;
|
||||
import android.content.Context;
|
||||
import android.content.SharedPreferences;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.preference.CheckBoxPreference;
|
||||
import android.preference.Preference;
|
||||
import android.preference.PreferenceActivity;
|
||||
import android.preference.PreferenceCategory;
|
||||
import android.preference.PreferenceFragment;
|
||||
import android.preference.PreferenceManager;
|
||||
import android.preference.PreferenceScreen;
|
||||
import android.support.v7.widget.Toolbar;
|
||||
import android.view.LayoutInflater;
|
||||
@ -17,6 +20,7 @@ import android.widget.Toast;
|
||||
|
||||
import net.i2p.I2PAppContext;
|
||||
import net.i2p.android.router.service.StatSummarizer;
|
||||
import net.i2p.android.router.util.PortPreference;
|
||||
import net.i2p.android.router.util.Util;
|
||||
import net.i2p.router.RouterContext;
|
||||
import net.i2p.stat.FrequencyStat;
|
||||
@ -28,6 +32,7 @@ import net.i2p.util.LogManager;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Properties;
|
||||
import java.util.Set;
|
||||
import java.util.SortedSet;
|
||||
|
||||
public class SettingsActivity extends PreferenceActivity {
|
||||
@ -46,25 +51,61 @@ public class SettingsActivity extends PreferenceActivity {
|
||||
|
||||
String action = getIntent().getAction();
|
||||
if (action != null) {
|
||||
if (ACTION_PREFS_NET.equals(action)) {
|
||||
addPreferencesFromResource(R.xml.settings_net);
|
||||
} else if (ACTION_PREFS_GRAPHS.equals(action)){
|
||||
addPreferencesFromResource(R.xml.settings_graphs);
|
||||
setupGraphSettings(this, getPreferenceScreen(), Util.getRouterContext());
|
||||
} else if (ACTION_PREFS_LOGGING.equals(action)) {
|
||||
addPreferencesFromResource(R.xml.settings_logging);
|
||||
setupLoggingSettings(this, getPreferenceScreen(), Util.getRouterContext());
|
||||
} else if (ACTION_PREFS_ADVANCED.equals(action)) {
|
||||
addPreferencesFromResource(R.xml.settings_advanced);
|
||||
switch (action) {
|
||||
case ACTION_PREFS_NET:
|
||||
addPreferencesFromResource(R.xml.settings_net);
|
||||
break;
|
||||
case ACTION_PREFS_GRAPHS:
|
||||
addPreferencesFromResource(R.xml.settings_graphs);
|
||||
setupGraphSettings(this, getPreferenceScreen(), Util.getRouterContext());
|
||||
break;
|
||||
case ACTION_PREFS_LOGGING:
|
||||
addPreferencesFromResource(R.xml.settings_logging);
|
||||
setupLoggingSettings(this, getPreferenceScreen(), Util.getRouterContext());
|
||||
break;
|
||||
case ACTION_PREFS_ADVANCED:
|
||||
addPreferencesFromResource(R.xml.settings_advanced);
|
||||
setupAdvancedSettings(this, getPreferenceScreen());
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
// Load any properties that the router might have changed on us.
|
||||
setupPreferences(this, Util.getRouterContext());
|
||||
|
||||
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) {
|
||||
// Load the legacy preferences headers
|
||||
addPreferencesFromResource(R.xml.settings_headers_legacy);
|
||||
}
|
||||
} else if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) {
|
||||
// Load the legacy preferences headers
|
||||
addPreferencesFromResource(R.xml.settings_headers_legacy);
|
||||
}
|
||||
|
||||
mToolbar.setTitle(getTitle());
|
||||
}
|
||||
|
||||
protected static void setupPreferences(Context context, RouterContext ctx) {
|
||||
if (ctx != null) {
|
||||
final String udpPortKey = context.getString(R.string.PROP_UDP_INTERNAL_PORT);
|
||||
final String ntcpPortKey = context.getString(R.string.PROP_I2NP_NTCP_PORT);
|
||||
final String ntcpAutoPortKey = context.getString(R.string.PROP_I2NP_NTCP_AUTO_PORT);
|
||||
|
||||
int udpPort = ctx.getProperty(udpPortKey, -1);
|
||||
int ntcpPort = ctx.getProperty(ntcpPortKey, -1);
|
||||
boolean ntcpAutoPort = ctx.getBooleanPropertyDefaultTrue(ntcpAutoPortKey);
|
||||
if (ntcpPort < 0 && ntcpAutoPort)
|
||||
ntcpPort = udpPort;
|
||||
|
||||
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
|
||||
if (prefs.getInt(udpPortKey, -1) != udpPort ||
|
||||
prefs.getInt(ntcpPortKey, -1) != ntcpPort) {
|
||||
SharedPreferences.Editor editor = prefs.edit();
|
||||
editor.putInt(udpPortKey, udpPort);
|
||||
editor.putInt(ntcpPortKey, ntcpPort);
|
||||
// commit() instead of apply() because this needs to happen
|
||||
// before SettingsActivity loads its Preferences.
|
||||
editor.commit();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected static void setupGraphSettings(Context context, PreferenceScreen ps, RouterContext ctx) {
|
||||
if (ctx == null) {
|
||||
PreferenceCategory noRouter = new PreferenceCategory(context);
|
||||
@ -153,6 +194,65 @@ public class SettingsActivity extends PreferenceActivity {
|
||||
}
|
||||
}
|
||||
|
||||
protected static void setupAdvancedSettings(final Context context, PreferenceScreen ps) {
|
||||
final String udpEnableKey = context.getString(R.string.PROP_ENABLE_UDP);
|
||||
final String ntcpEnableKey = context.getString(R.string.PROP_ENABLE_NTCP);
|
||||
final String udpPortKey = context.getString(R.string.PROP_UDP_INTERNAL_PORT);
|
||||
final String ntcpPortKey = context.getString(R.string.PROP_I2NP_NTCP_PORT);
|
||||
final String ntcpAutoPortKey = context.getString(R.string.PROP_I2NP_NTCP_AUTO_PORT);
|
||||
|
||||
final CheckBoxPreference udpEnable = (CheckBoxPreference) ps.findPreference(udpEnableKey);
|
||||
final CheckBoxPreference ntcpEnable = (CheckBoxPreference) ps.findPreference(ntcpEnableKey);
|
||||
final PortPreference udpPort = (PortPreference) ps.findPreference(udpPortKey);
|
||||
final PortPreference ntcpPort = (PortPreference) ps.findPreference(ntcpPortKey);
|
||||
final CheckBoxPreference ntcpAutoPort = (CheckBoxPreference) ps.findPreference(ntcpAutoPortKey);
|
||||
|
||||
udpEnable.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
|
||||
@Override
|
||||
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
||||
final Boolean checked = (Boolean) newValue;
|
||||
if (checked || ntcpEnable.isChecked())
|
||||
return true;
|
||||
else {
|
||||
Toast.makeText(context, R.string.settings_need_transport_enabled, Toast.LENGTH_LONG).show();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
ntcpEnable.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
|
||||
@Override
|
||||
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
||||
final Boolean checked = (Boolean) newValue;
|
||||
if (checked || udpEnable.isChecked())
|
||||
return true;
|
||||
else {
|
||||
Toast.makeText(context, R.string.settings_need_transport_enabled, Toast.LENGTH_LONG).show();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
udpPort.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
|
||||
@Override
|
||||
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
||||
if (ntcpAutoPort.isChecked())
|
||||
ntcpPort.setText((String) newValue);
|
||||
return true;
|
||||
}
|
||||
});
|
||||
|
||||
ntcpAutoPort.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
|
||||
@Override
|
||||
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
||||
final Boolean checked = (Boolean) newValue;
|
||||
if (checked)
|
||||
ntcpPort.setText(udpPort.getText());
|
||||
return true;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
|
||||
@Override
|
||||
public void onBuildHeaders(List<Header> target) {
|
||||
@ -188,20 +288,23 @@ public class SettingsActivity extends PreferenceActivity {
|
||||
protected void onPause() {
|
||||
List<Properties> lProps = Util.getPropertiesFromPreferences(this);
|
||||
Properties props = lProps.get(0);
|
||||
Properties logSettings = lProps.get(1);
|
||||
Properties propsToRemove = lProps.get(1);
|
||||
Properties logSettings = lProps.get(2);
|
||||
|
||||
boolean restartRequired = Util.checkAndCorrectRouterConfig(this, props);
|
||||
Set toRemove = propsToRemove.keySet();
|
||||
|
||||
boolean restartRequired = Util.checkAndCorrectRouterConfig(this, props, toRemove);
|
||||
|
||||
// Apply new config if we are running.
|
||||
RouterContext rCtx = Util.getRouterContext();
|
||||
if (rCtx != null) {
|
||||
rCtx.router().saveConfig(props, null);
|
||||
rCtx.router().saveConfig(props, toRemove);
|
||||
|
||||
// Merge in new log settings
|
||||
saveLoggingChanges(rCtx, logSettings);
|
||||
} else {
|
||||
// Merge in new config settings, write the file.
|
||||
Util.mergeResourceToFile(this, Util.getFileDir(this), "router.config", R.raw.router_config, props);
|
||||
Util.mergeResourceToFile(this, Util.getFileDir(this), "router.config", R.raw.router_config, props, toRemove);
|
||||
|
||||
// Merge in new log settings
|
||||
saveLoggingChanges(I2PAppContext.getGlobalContext(), logSettings);
|
||||
@ -240,16 +343,22 @@ public class SettingsActivity extends PreferenceActivity {
|
||||
super.onCreate(savedInstanceState);
|
||||
|
||||
String settings = getArguments().getString("settings");
|
||||
if ("net".equals(settings)) {
|
||||
addPreferencesFromResource(R.xml.settings_net);
|
||||
} else if ("graphs".equals(settings)) {
|
||||
addPreferencesFromResource(R.xml.settings_graphs);
|
||||
setupGraphSettings(getActivity(), getPreferenceScreen(), Util.getRouterContext());
|
||||
} else if ("logging".equals(settings)) {
|
||||
addPreferencesFromResource(R.xml.settings_logging);
|
||||
setupLoggingSettings(getActivity(), getPreferenceScreen(), Util.getRouterContext());
|
||||
} else if ("advanced".equals(settings)) {
|
||||
addPreferencesFromResource(R.xml.settings_advanced);
|
||||
switch (settings) {
|
||||
case "net":
|
||||
addPreferencesFromResource(R.xml.settings_net);
|
||||
break;
|
||||
case "graphs":
|
||||
addPreferencesFromResource(R.xml.settings_graphs);
|
||||
setupGraphSettings(getActivity(), getPreferenceScreen(), Util.getRouterContext());
|
||||
break;
|
||||
case "logging":
|
||||
addPreferencesFromResource(R.xml.settings_logging);
|
||||
setupLoggingSettings(getActivity(), getPreferenceScreen(), Util.getRouterContext());
|
||||
break;
|
||||
case "advanced":
|
||||
addPreferencesFromResource(R.xml.settings_advanced);
|
||||
setupAdvancedSettings(getActivity(), getPreferenceScreen());
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,42 +1,47 @@
|
||||
package net.i2p.android.router.addressbook;
|
||||
|
||||
import android.content.Context;
|
||||
import android.support.v4.content.AsyncTaskLoader;
|
||||
|
||||
import net.i2p.android.router.I2PFragmentBase;
|
||||
import net.i2p.android.router.util.NamingServiceUtil;
|
||||
import net.i2p.android.router.util.Util;
|
||||
import net.i2p.client.naming.NamingService;
|
||||
import net.i2p.data.Destination;
|
||||
import net.i2p.router.RouterContext;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Properties;
|
||||
import java.util.TreeMap;
|
||||
|
||||
import net.i2p.android.router.util.NamingServiceUtil;
|
||||
import net.i2p.android.router.util.Util;
|
||||
import net.i2p.client.naming.NamingService;
|
||||
import net.i2p.data.Destination;
|
||||
import net.i2p.router.RouterContext;
|
||||
|
||||
import android.content.Context;
|
||||
import android.support.v4.content.AsyncTaskLoader;
|
||||
|
||||
public class AddressEntryLoader extends AsyncTaskLoader<List<AddressEntry>> {
|
||||
private RouterContext mRContext;
|
||||
private I2PFragmentBase.RouterContextProvider mRContextProvider;
|
||||
private String mBook;
|
||||
private String mFilter;
|
||||
private List<AddressEntry> mData;
|
||||
|
||||
public AddressEntryLoader(Context context, RouterContext rContext,
|
||||
public AddressEntryLoader(Context context, I2PFragmentBase.RouterContextProvider rContextProvider,
|
||||
String book, String filter) {
|
||||
super(context);
|
||||
mRContext = rContext;
|
||||
mRContextProvider = rContextProvider;
|
||||
mBook = book;
|
||||
mFilter = filter;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<AddressEntry> loadInBackground() {
|
||||
RouterContext routerContext = mRContextProvider.getRouterContext();
|
||||
if (routerContext == null)
|
||||
return null;
|
||||
|
||||
// get the names
|
||||
NamingService ns = NamingServiceUtil.getNamingService(mRContext, mBook);
|
||||
NamingService ns = NamingServiceUtil.getNamingService(routerContext, mBook);
|
||||
Util.d("NamingService: " + ns.getName());
|
||||
// After router shutdown we get nothing... why?
|
||||
List<AddressEntry> ret = new ArrayList<AddressEntry>();
|
||||
Map<String, Destination> names = new TreeMap<String, Destination>();
|
||||
List<AddressEntry> ret = new ArrayList<>();
|
||||
Map<String, Destination> names = new TreeMap<>();
|
||||
|
||||
Properties searchProps = new Properties();
|
||||
// Needed for HostsTxtNamingService
|
||||
|
@ -6,6 +6,7 @@ import android.app.Dialog;
|
||||
import android.content.DialogInterface;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.v4.app.DialogFragment;
|
||||
import net.i2p.android.wizard.model.AbstractWizardModel;
|
||||
import net.i2p.android.wizard.ui.AbstractWizardActivity;
|
||||
@ -19,6 +20,7 @@ public class AddressbookAddWizardActivity extends AbstractWizardActivity {
|
||||
@Override
|
||||
protected DialogFragment onGetFinishWizardDialog() {
|
||||
return new DialogFragment() {
|
||||
@NonNull
|
||||
@Override
|
||||
public Dialog onCreateDialog(Bundle savedInstanceState) {
|
||||
return new AlertDialog.Builder(getActivity())
|
||||
|
@ -173,15 +173,19 @@ public class AddressbookFragment extends ListFragment implements
|
||||
inflater.inflate(R.menu.fragment_addressbook_actions, menu);
|
||||
|
||||
mSearchAddressbook = menu.findItem(R.id.action_search_addressbook);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPrepareOptionsMenu(Menu menu) {
|
||||
// Hide until needed
|
||||
if (getRouterContext() == null) {
|
||||
mSearchAddressbook.setVisible(false);
|
||||
mAddToAddressbook.setVisibility(View.GONE);
|
||||
if (mAddToAddressbook != null)
|
||||
mAddToAddressbook.setVisibility(View.GONE);
|
||||
}
|
||||
|
||||
// Only allow adding to private book
|
||||
if (!PRIVATE_BOOK.equals(mBook)) {
|
||||
if (!PRIVATE_BOOK.equals(mBook) && mAddToAddressbook != null) {
|
||||
mAddToAddressbook.setVisibility(View.GONE);
|
||||
mAddToAddressbook = null;
|
||||
}
|
||||
@ -245,27 +249,32 @@ public class AddressbookFragment extends ListFragment implements
|
||||
|
||||
public Loader<List<AddressEntry>> onCreateLoader(int id, Bundle args) {
|
||||
return new AddressEntryLoader(getActivity(),
|
||||
getRouterContext(), mBook, mCurFilter);
|
||||
mRouterContextProvider, mBook, mCurFilter);
|
||||
}
|
||||
|
||||
public void onLoadFinished(Loader<List<AddressEntry>> loader,
|
||||
List<AddressEntry> data) {
|
||||
if (loader.getId() == (PRIVATE_BOOK.equals(mBook) ?
|
||||
PRIVATE_LOADER_ID : ROUTER_LOADER_ID)) {
|
||||
mAdapter.setData(data);
|
||||
if (data == null)
|
||||
setEmptyText(getResources().getString(
|
||||
R.string.router_not_running));
|
||||
else {
|
||||
mAdapter.setData(data);
|
||||
|
||||
TextView v = (TextView) getListView().findViewWithTag("addressbook_header");
|
||||
if (mCurFilter != null)
|
||||
v.setText(getActivity().getResources().getString(
|
||||
R.string.addressbook_search_header,
|
||||
data.size()));
|
||||
else
|
||||
v.setText("");
|
||||
TextView v = (TextView) getListView().findViewWithTag("addressbook_header");
|
||||
if (mCurFilter != null)
|
||||
v.setText(getActivity().getResources().getString(
|
||||
R.string.addressbook_search_header,
|
||||
data.size()));
|
||||
else
|
||||
v.setText("");
|
||||
|
||||
if (isResumed()) {
|
||||
setListShown(true);
|
||||
} else {
|
||||
setListShownNoAnimation(true);
|
||||
if (isResumed()) {
|
||||
setListShown(true);
|
||||
} else {
|
||||
setListShownNoAnimation(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,21 +1,24 @@
|
||||
package net.i2p.android.router.dialog;
|
||||
|
||||
import net.i2p.android.router.LicenseActivity;
|
||||
import net.i2p.android.router.R;
|
||||
import net.i2p.android.router.util.I2Patterns;
|
||||
import net.i2p.android.router.util.Util;
|
||||
import android.app.AlertDialog;
|
||||
import android.app.Dialog;
|
||||
import android.content.DialogInterface;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.v4.app.DialogFragment;
|
||||
import android.text.util.Linkify;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.widget.TextView;
|
||||
|
||||
import net.i2p.android.router.LicenseActivity;
|
||||
import net.i2p.android.router.R;
|
||||
import net.i2p.android.router.util.I2Patterns;
|
||||
import net.i2p.android.router.util.Util;
|
||||
|
||||
public class AboutDialog extends DialogFragment {
|
||||
@NonNull
|
||||
@Override
|
||||
public Dialog onCreateDialog(Bundle SavedInstanceState) {
|
||||
LayoutInflater li = LayoutInflater.from(getActivity());
|
||||
|
@ -5,18 +5,14 @@ import android.app.Dialog;
|
||||
import android.content.DialogInterface;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.v4.app.DialogFragment;
|
||||
import android.text.util.Linkify;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.widget.TextView;
|
||||
|
||||
import net.i2p.android.help.BrowserConfigActivity;
|
||||
import net.i2p.android.help.HelpActivity;
|
||||
import net.i2p.android.router.R;
|
||||
import net.i2p.android.router.util.I2Patterns;
|
||||
|
||||
public class ConfigureBrowserDialog extends DialogFragment {
|
||||
@NonNull
|
||||
@Override
|
||||
public Dialog onCreateDialog(Bundle savedInstanceState) {
|
||||
AlertDialog.Builder b = new AlertDialog.Builder(getActivity());
|
||||
|
@ -1,18 +1,20 @@
|
||||
package net.i2p.android.router.dialog;
|
||||
|
||||
import net.i2p.android.router.R;
|
||||
import net.i2p.android.router.util.I2Patterns;
|
||||
import android.app.AlertDialog;
|
||||
import android.app.Dialog;
|
||||
import android.content.DialogInterface;
|
||||
import android.os.Bundle;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.v4.app.DialogFragment;
|
||||
import android.text.util.Linkify;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.widget.TextView;
|
||||
|
||||
import net.i2p.android.router.R;
|
||||
import net.i2p.android.router.util.I2Patterns;
|
||||
|
||||
public class FirstStartDialog extends DialogFragment {
|
||||
@NonNull
|
||||
@Override
|
||||
public Dialog onCreateDialog(Bundle savedInstanceState) {
|
||||
LayoutInflater li = LayoutInflater.from(getActivity());
|
||||
|
@ -54,10 +54,8 @@ public class TextResourceDialog extends DialogFragment {
|
||||
while ( (read = in.read(buf)) != -1)
|
||||
out.write(buf, 0, read);
|
||||
|
||||
} catch (IOException ioe) {
|
||||
System.err.println("resource error " + ioe);
|
||||
} catch (Resources.NotFoundException nfe) {
|
||||
System.err.println("resource error " + nfe);
|
||||
} catch (IOException | Resources.NotFoundException re) {
|
||||
System.err.println("resource error " + re);
|
||||
} finally {
|
||||
if (in != null) try { in.close(); } catch (IOException ioe) {}
|
||||
}
|
||||
|
@ -1,24 +1,27 @@
|
||||
package net.i2p.android.router.dialog;
|
||||
|
||||
import android.app.AlertDialog;
|
||||
import android.app.Dialog;
|
||||
import android.content.DialogInterface;
|
||||
import android.os.Bundle;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.v4.app.DialogFragment;
|
||||
|
||||
import net.i2p.android.router.I2PActivityBase;
|
||||
import net.i2p.android.router.MainFragment;
|
||||
import net.i2p.android.router.R;
|
||||
import net.i2p.android.router.util.Util;
|
||||
import android.app.AlertDialog;
|
||||
import android.app.Dialog;
|
||||
import android.content.DialogInterface;
|
||||
import android.os.Bundle;
|
||||
import android.support.v4.app.DialogFragment;
|
||||
|
||||
public class VersionDialog extends DialogFragment {
|
||||
public static final String DIALOG_TYPE = "dialog_type";
|
||||
public static final int DIALOG_NEW_INSTALL = 0;
|
||||
public static final int DIALOG_NEW_VERSION = 1;
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
public Dialog onCreateDialog(Bundle SavedInstanceState) {
|
||||
final String currentVersion = Util.getOurVersion(getActivity());
|
||||
Dialog rv = null;
|
||||
Dialog rv;
|
||||
AlertDialog.Builder b = new AlertDialog.Builder(getActivity());
|
||||
int id = getArguments().getInt(DIALOG_TYPE);
|
||||
switch(id) {
|
||||
@ -53,6 +56,7 @@ public class VersionDialog extends DialogFragment {
|
||||
break;
|
||||
|
||||
case DIALOG_NEW_VERSION:
|
||||
default:
|
||||
b.setMessage(getResources().getString(R.string.welcome_new_version) +
|
||||
" " + currentVersion)
|
||||
.setCancelable(true)
|
||||
|
@ -15,11 +15,12 @@ import android.widget.ListView;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import net.i2p.I2PAppContext;
|
||||
import net.i2p.android.router.R;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class LogFragment extends ListFragment implements
|
||||
LoaderManager.LoaderCallbacks<List<String>> {
|
||||
public static final String LOG_LEVEL = "log_level";
|
||||
@ -33,7 +34,7 @@ public class LogFragment extends ListFragment implements
|
||||
private static final int LEVEL_ALL = 2;
|
||||
|
||||
OnEntrySelectedListener mEntrySelectedCallback;
|
||||
private final List<String> mLogEntries = new ArrayList<String>();
|
||||
private final List<String> mLogEntries = new ArrayList<>();
|
||||
private LogAdapter mAdapter;
|
||||
private TextView mHeaderView;
|
||||
private String mLogLevel;
|
||||
|
@ -1,18 +1,19 @@
|
||||
package net.i2p.android.router.netdb;
|
||||
|
||||
import android.content.Context;
|
||||
import android.support.v4.content.AsyncTaskLoader;
|
||||
|
||||
import net.i2p.data.Destination;
|
||||
import net.i2p.data.LeaseSet;
|
||||
import net.i2p.data.router.RouterInfo;
|
||||
import net.i2p.router.RouterContext;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Comparator;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.TreeSet;
|
||||
|
||||
import net.i2p.data.Destination;
|
||||
import net.i2p.data.LeaseSet;
|
||||
import net.i2p.data.router.RouterInfo;
|
||||
import net.i2p.router.RouterContext;
|
||||
import android.content.Context;
|
||||
import android.support.v4.content.AsyncTaskLoader;
|
||||
|
||||
public class NetDbEntryLoader extends AsyncTaskLoader<List<NetDbEntry>> {
|
||||
private RouterContext mRContext;
|
||||
private boolean mRouters;
|
||||
@ -44,17 +45,17 @@ public class NetDbEntryLoader extends AsyncTaskLoader<List<NetDbEntry>> {
|
||||
|
||||
@Override
|
||||
public List<NetDbEntry> loadInBackground() {
|
||||
List<NetDbEntry> ret = new ArrayList<NetDbEntry>();
|
||||
List<NetDbEntry> ret = new ArrayList<>();
|
||||
if (mRContext.netDb().isInitialized()) {
|
||||
if (mRouters) {
|
||||
Set<RouterInfo> routers = new TreeSet<RouterInfo>(new RouterInfoComparator());
|
||||
Set<RouterInfo> routers = new TreeSet<>(new RouterInfoComparator());
|
||||
routers.addAll(mRContext.netDb().getRouters());
|
||||
for (RouterInfo ri : routers) {
|
||||
NetDbEntry entry = NetDbEntry.fromRouterInfo(mRContext, ri);
|
||||
ret.add(entry);
|
||||
}
|
||||
} else {
|
||||
Set<LeaseSet> leases = new TreeSet<LeaseSet>(new LeaseSetComparator());
|
||||
Set<LeaseSet> leases = new TreeSet<>(new LeaseSetComparator());
|
||||
leases.addAll(mRContext.netDb().getLeases());
|
||||
for (LeaseSet ls : leases) {
|
||||
NetDbEntry entry = NetDbEntry.fromLeaseSet(mRContext, ls);
|
||||
|
@ -1,18 +1,19 @@
|
||||
package net.i2p.android.router.netdb;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Comparator;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.TreeSet;
|
||||
import android.content.Context;
|
||||
import android.support.v4.content.AsyncTaskLoader;
|
||||
|
||||
import net.i2p.data.Hash;
|
||||
import net.i2p.data.router.RouterAddress;
|
||||
import net.i2p.data.router.RouterInfo;
|
||||
import net.i2p.router.RouterContext;
|
||||
import net.i2p.util.ObjectCounter;
|
||||
import android.content.Context;
|
||||
import android.support.v4.content.AsyncTaskLoader;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Comparator;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.TreeSet;
|
||||
|
||||
public class NetDbStatsLoader extends AsyncTaskLoader<List<ObjectCounter<String>>> {
|
||||
private RouterContext mRContext;
|
||||
@ -31,16 +32,16 @@ public class NetDbStatsLoader extends AsyncTaskLoader<List<ObjectCounter<String>
|
||||
|
||||
@Override
|
||||
public List<ObjectCounter<String>> loadInBackground() {
|
||||
List<ObjectCounter<String>> ret = new ArrayList<ObjectCounter<String>>();
|
||||
List<ObjectCounter<String>> ret = new ArrayList<>();
|
||||
|
||||
ObjectCounter<String> versions = new ObjectCounter<String>();
|
||||
ObjectCounter<String> countries = new ObjectCounter<String>();
|
||||
ObjectCounter<String> transports = new ObjectCounter<String>();
|
||||
ObjectCounter<String> versions = new ObjectCounter<>();
|
||||
ObjectCounter<String> countries = new ObjectCounter<>();
|
||||
ObjectCounter<String> transports = new ObjectCounter<>();
|
||||
|
||||
if (mRContext.netDb().isInitialized()) {
|
||||
if (mRContext != null && mRContext.netDb() != null && mRContext.netDb().isInitialized()) {
|
||||
Hash us = mRContext.routerHash();
|
||||
|
||||
Set<RouterInfo> routers = new TreeSet<RouterInfo>(new RouterInfoComparator());
|
||||
Set<RouterInfo> routers = new TreeSet<>(new RouterInfoComparator());
|
||||
routers.addAll(mRContext.netDb().getRouters());
|
||||
for (RouterInfo ri : routers) {
|
||||
Hash key = ri.getHash();
|
||||
|
@ -1,12 +1,5 @@
|
||||
package net.i2p.android.router.netdb;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
import net.i2p.android.router.R;
|
||||
import net.i2p.util.ObjectCounter;
|
||||
import net.i2p.util.VersionComparator;
|
||||
import android.os.Bundle;
|
||||
import android.support.v4.app.Fragment;
|
||||
import android.view.LayoutInflater;
|
||||
@ -16,6 +9,14 @@ import android.widget.TableLayout;
|
||||
import android.widget.TableRow;
|
||||
import android.widget.TextView;
|
||||
|
||||
import net.i2p.android.router.R;
|
||||
import net.i2p.util.ObjectCounter;
|
||||
import net.i2p.util.VersionComparator;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
public class NetDbSummaryTableFragment extends Fragment {
|
||||
private static final String CATEGORY = "category";
|
||||
private static final String COUNTS = "counts";
|
||||
@ -44,7 +45,7 @@ public class NetDbSummaryTableFragment extends Fragment {
|
||||
|
||||
mTable = (TableLayout) v.findViewById(R.id.table);
|
||||
|
||||
List<String> objects = new ArrayList<String>(mCounts.objects());
|
||||
List<String> objects = new ArrayList<>(mCounts.objects());
|
||||
if (!objects.isEmpty()) {
|
||||
createTableTitle();
|
||||
|
||||
|
@ -6,6 +6,12 @@ import android.content.SharedPreferences;
|
||||
import android.database.Cursor;
|
||||
import android.net.Uri;
|
||||
import android.os.ParcelFileDescriptor;
|
||||
|
||||
import net.i2p.android.apps.EepGetFetcher;
|
||||
import net.i2p.android.router.BuildConfig;
|
||||
import net.i2p.android.router.util.AppCache;
|
||||
import net.i2p.android.router.util.Util;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.IOException;
|
||||
@ -13,9 +19,6 @@ import java.io.OutputStream;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import net.i2p.android.apps.EepGetFetcher;
|
||||
import net.i2p.android.router.util.AppCache;
|
||||
import net.i2p.android.router.util.Util;
|
||||
|
||||
/**
|
||||
* Usage: content://net.i2p.android.router/NONCE/ENCODED-SCHEME/ENCODED-AUTHORITY/ENCODED_PATH + QUERY_MARKER + ENCODED-QUERY
|
||||
@ -45,7 +48,7 @@ public class CacheProvider extends ContentProvider {
|
||||
//private static final String NONCE = Integer.toString(Math.abs((new java.util.Random()).nextInt()));
|
||||
private static final String NONCE = "0";
|
||||
private static final String SCHEME = "content";
|
||||
public static final String AUTHORITY = "net.i2p.android";
|
||||
public static final String AUTHORITY = BuildConfig.APPLICATION_ID + ".provider";
|
||||
/** includes the nonce */
|
||||
public static final Uri CONTENT_URI = Uri.parse(SCHEME + "://" + AUTHORITY + '/' + NONCE);
|
||||
|
||||
@ -140,7 +143,7 @@ public class CacheProvider extends ContentProvider {
|
||||
*
|
||||
* @param uri must contain a scheme, authority and path with nonce etc. as defined above
|
||||
* @return non-null
|
||||
* @throws FNFE on error
|
||||
* @throws java.io.FileNotFoundException on error
|
||||
*/
|
||||
public static Uri getI2PUri(Uri uri) throws FileNotFoundException {
|
||||
String resPath = uri.getEncodedPath();
|
||||
@ -242,8 +245,7 @@ public class CacheProvider extends ContentProvider {
|
||||
if (file.length() > 0) {
|
||||
// this call will insert it back to us (don't set as current base)
|
||||
Uri content = cache.addCacheFile(uri, false);
|
||||
ParcelFileDescriptor parcel = ParcelFileDescriptor.open(file, ParcelFileDescriptor.MODE_READ_ONLY);
|
||||
return parcel;
|
||||
return ParcelFileDescriptor.open(file, ParcelFileDescriptor.MODE_READ_ONLY);
|
||||
} else {
|
||||
Util.d("CacheProvider Sucess but no data " + uri);
|
||||
}
|
||||
@ -275,7 +277,7 @@ public class CacheProvider extends ContentProvider {
|
||||
put(uri, fileURI);
|
||||
}
|
||||
Boolean setAsCurrentBase = values.getAsBoolean(CURRENT_BASE);
|
||||
if (setAsCurrentBase != null && setAsCurrentBase.booleanValue()) {
|
||||
if (setAsCurrentBase != null && setAsCurrentBase) {
|
||||
Util.d("CacheProvider set current base " + uri);
|
||||
setCurrentBase(uri);
|
||||
}
|
||||
@ -302,7 +304,7 @@ public class CacheProvider extends ContentProvider {
|
||||
|
||||
private void cleanup() {
|
||||
String pfx = CONTENT_URI.toString();
|
||||
List<String> toDelete = new ArrayList<String>();
|
||||
List<String> toDelete = new ArrayList<>();
|
||||
Map<String, ?> map = _sharedPrefs.getAll();
|
||||
for (Map.Entry<String, ?> e : map.entrySet()) {
|
||||
String path = (String) e.getValue();
|
||||
|
@ -0,0 +1,25 @@
|
||||
package net.i2p.android.router.receiver;
|
||||
|
||||
import android.content.BroadcastReceiver;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.SharedPreferences;
|
||||
import android.preference.PreferenceManager;
|
||||
|
||||
import net.i2p.android.router.I2PConstants;
|
||||
import net.i2p.android.router.service.RouterService;
|
||||
|
||||
public class OnBootReceiver extends BroadcastReceiver implements I2PConstants {
|
||||
public static final String PREF_START_ON_BOOT = ANDROID_PREF_PREFIX + "startOnBoot";
|
||||
|
||||
@Override
|
||||
public void onReceive(Context context, Intent intent) {
|
||||
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
|
||||
boolean startOnBoot = prefs.getBoolean(PREF_START_ON_BOOT, false);
|
||||
|
||||
if (startOnBoot) {
|
||||
Intent routerService = new Intent(context, RouterService.class);
|
||||
context.startService(routerService);
|
||||
}
|
||||
}
|
||||
}
|
@ -1,10 +1,12 @@
|
||||
package net.i2p.android.router.service;
|
||||
|
||||
import android.content.Context;
|
||||
import java.io.File;
|
||||
|
||||
import net.i2p.android.router.util.Util;
|
||||
import net.i2p.util.FileUtil;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
class Init {
|
||||
|
||||
private final Context ctx;
|
||||
@ -32,8 +34,7 @@ class Init {
|
||||
File tmp = new File(myDir, "tmp");
|
||||
File[] files = tmp.listFiles();
|
||||
if (files != null) {
|
||||
for (int i = 0; i < files.length; i++) {
|
||||
File f = files[i];
|
||||
for (File f : files) {
|
||||
Util.d("Deleting old file/dir " + f);
|
||||
FileUtil.rmdir(f, false);
|
||||
}
|
||||
|
@ -9,15 +9,6 @@ import android.os.Message;
|
||||
import android.os.RemoteCallbackList;
|
||||
import android.os.RemoteException;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.text.DecimalFormat;
|
||||
import java.util.List;
|
||||
import java.util.Properties;
|
||||
import java.util.Random;
|
||||
|
||||
import net.i2p.android.router.R;
|
||||
import net.i2p.android.router.receiver.I2PReceiver;
|
||||
import net.i2p.android.router.util.Connectivity;
|
||||
@ -28,7 +19,8 @@ import net.i2p.router.Job;
|
||||
import net.i2p.router.Router;
|
||||
import net.i2p.router.RouterContext;
|
||||
import net.i2p.router.RouterLaunch;
|
||||
import net.i2p.util.OrderedProperties;
|
||||
|
||||
import java.text.DecimalFormat;
|
||||
|
||||
/**
|
||||
* Runs the router
|
||||
@ -59,7 +51,7 @@ public class RouterService extends Service {
|
||||
* that it can be accessed more efficiently from inner classes.
|
||||
*/
|
||||
final RemoteCallbackList<IRouterStateCallback> mStateCallbacks
|
||||
= new RemoteCallbackList<IRouterStateCallback>();
|
||||
= new RemoteCallbackList<>();
|
||||
|
||||
@Override
|
||||
public void onCreate() {
|
||||
@ -176,147 +168,7 @@ public class RouterService extends Service {
|
||||
//NativeBigInteger.main(null);
|
||||
//Util.d(MARKER + this + " JBigI speed test finished, launching router");
|
||||
|
||||
|
||||
// Before we launch, fix up any settings that need to be fixed here.
|
||||
// This should be done in the core, but as of this writing it isn't!
|
||||
|
||||
// Step one. Load the propertites.
|
||||
Properties props = new OrderedProperties();
|
||||
Properties oldprops = new OrderedProperties();
|
||||
String wrapName = _myDir + "/router.config";
|
||||
try {
|
||||
InputStream fin = new FileInputStream(new File(wrapName));
|
||||
DataHelper.loadProps(props, fin);
|
||||
} catch(IOException ioe) {
|
||||
// shouldn't happen...
|
||||
}
|
||||
oldprops.putAll(props);
|
||||
// Step two, check for any port settings, and copy for those that are missing.
|
||||
int UDPinbound;
|
||||
int UDPinlocal;
|
||||
int TCPinbound;
|
||||
int TCPinlocal;
|
||||
UDPinbound = Integer.parseInt(props.getProperty("i2np.udp.port", "-1"));
|
||||
UDPinlocal = Integer.parseInt(props.getProperty("i2np.udp.internalPort", "-1"));
|
||||
TCPinbound = Integer.parseInt(props.getProperty("i2np.ntcp.port", "-1"));
|
||||
TCPinlocal = Integer.parseInt(props.getProperty("i2np.ntcp.internalPort", "-1"));
|
||||
boolean hasUDPinbound = UDPinbound != -1;
|
||||
boolean hasUDPinlocal = UDPinlocal != -1;
|
||||
boolean hasTCPinbound = TCPinbound != -1;
|
||||
boolean hasTCPinlocal = TCPinlocal != -1;
|
||||
|
||||
// check and clear values based on these:
|
||||
boolean udp = Boolean.parseBoolean(props.getProperty("i2np.udp.enable", "false"));
|
||||
boolean tcp = Boolean.parseBoolean(props.getProperty("i2np.ntcp.enable", "false"));
|
||||
|
||||
// Fix if both are false.
|
||||
if(!(udp || tcp)) {
|
||||
// If both are not on, turn them both on.
|
||||
props.setProperty("i2np.udp.enable", "true");
|
||||
props.setProperty("i2np.ntcp.enable", "true");
|
||||
}
|
||||
|
||||
// Fix if we have local but no inbound
|
||||
if(!hasUDPinbound && hasUDPinlocal) {
|
||||
// if we got a local port and no external port, set it
|
||||
hasUDPinbound = true;
|
||||
UDPinbound = UDPinlocal;
|
||||
}
|
||||
if(!hasTCPinbound && hasTCPinlocal) {
|
||||
// if we got a local port and no external port, set it
|
||||
hasTCPinbound = true;
|
||||
TCPinbound = TCPinlocal;
|
||||
}
|
||||
|
||||
boolean anyUDP = hasUDPinbound || hasUDPinlocal;
|
||||
boolean anyTCP = hasTCPinbound || hasTCPinlocal;
|
||||
boolean anyport = anyUDP || anyTCP;
|
||||
|
||||
if(!anyport) {
|
||||
// generate one for UDPinbound, and fall thru.
|
||||
// FIX ME: Possibly not the best but should be OK.
|
||||
Random generator = new Random(System.currentTimeMillis());
|
||||
UDPinbound = generator.nextInt(55500) + 10000;
|
||||
anyUDP = true;
|
||||
}
|
||||
|
||||
// Copy missing port numbers
|
||||
if(anyUDP && !anyTCP) {
|
||||
TCPinbound = UDPinbound;
|
||||
TCPinlocal = UDPinlocal;
|
||||
}
|
||||
if(anyTCP && !anyUDP) {
|
||||
UDPinbound = TCPinbound;
|
||||
UDPinlocal = TCPinlocal;
|
||||
}
|
||||
// reset for a retest.
|
||||
hasUDPinbound = UDPinbound != -1;
|
||||
hasUDPinlocal = UDPinlocal != -1;
|
||||
hasTCPinbound = TCPinbound != -1;
|
||||
hasTCPinlocal = TCPinlocal != -1;
|
||||
anyUDP = hasUDPinbound || hasUDPinlocal;
|
||||
anyTCP = hasTCPinbound || hasTCPinlocal;
|
||||
boolean checkAnyUDP = anyUDP && udp;
|
||||
boolean checkAnyTCP = anyTCP && tcp;
|
||||
|
||||
// Enable things that need to be enabled.
|
||||
// Disable anything that needs to be disabled.
|
||||
if(!checkAnyUDP && !checkAnyTCP) {
|
||||
// enable the one(s) with values.
|
||||
if(anyUDP) {
|
||||
udp = true;
|
||||
}
|
||||
if(anyTCP) {
|
||||
tcp = true;
|
||||
}
|
||||
}
|
||||
|
||||
if(!udp) {
|
||||
props.setProperty("i2np.udp.enable", "false");
|
||||
props.remove("i2np.udp.port");
|
||||
props.remove("i2np.udp.internalPort");
|
||||
} else {
|
||||
props.setProperty("i2np.udp.enable", "true");
|
||||
if(hasUDPinbound) {
|
||||
props.setProperty("i2np.udp.port", Integer.toString(UDPinbound));
|
||||
} else {
|
||||
props.remove("i2np.udp.port");
|
||||
}
|
||||
if(hasUDPinlocal) {
|
||||
props.setProperty("i2np.udp.internalPort", Integer.toString(UDPinlocal));
|
||||
} else {
|
||||
props.remove("i2np.udp.internalPort");
|
||||
}
|
||||
}
|
||||
|
||||
if(!tcp) {
|
||||
props.setProperty("i2np.ntcp.enable", "false");
|
||||
props.remove("i2np.ntcp.port");
|
||||
props.remove("i2np.ntcp.internalPort");
|
||||
} else {
|
||||
props.setProperty("i2np.ntcp.enable", "true");
|
||||
if(hasTCPinbound) {
|
||||
props.setProperty("i2np.ntcp.port", Integer.toString(TCPinbound));
|
||||
} else {
|
||||
props.remove("i2np.ntcp.port");
|
||||
}
|
||||
if(hasTCPinlocal) {
|
||||
props.setProperty("i2np.ntcp.internalPort", Integer.toString(TCPinlocal));
|
||||
} else {
|
||||
props.remove("i2np.ntcp.internalPort");
|
||||
}
|
||||
}
|
||||
// WHEW! Now test for any changes.
|
||||
if(!props.equals(oldprops)) {
|
||||
// save fixed properties.
|
||||
try {
|
||||
DataHelper.storeProps(props, new File(wrapName));
|
||||
} catch(IOException ioe) {
|
||||
// shouldn't happen...
|
||||
}
|
||||
}
|
||||
|
||||
// _NOW_ launch the router!
|
||||
// Launch the router!
|
||||
RouterLaunch.main(null);
|
||||
synchronized(_stateLock) {
|
||||
if(_state != State.STARTING) {
|
||||
@ -457,7 +309,7 @@ public class RouterService extends Service {
|
||||
|
||||
// ******** following methods may be accessed from Activities and Receivers ************
|
||||
/**
|
||||
* @returns null if router is not running
|
||||
* @return null if router is not running
|
||||
*/
|
||||
public RouterContext getRouterContext() {
|
||||
RouterContext rv = _context;
|
||||
|
@ -1,15 +1,15 @@
|
||||
package net.i2p.android.router.service;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.StringTokenizer;
|
||||
import java.util.concurrent.CopyOnWriteArrayList;
|
||||
|
||||
import net.i2p.android.router.util.Util;
|
||||
import net.i2p.router.RouterContext;
|
||||
import net.i2p.stat.Rate;
|
||||
import net.i2p.stat.RateStat;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.StringTokenizer;
|
||||
import java.util.concurrent.CopyOnWriteArrayList;
|
||||
|
||||
public class StatSummarizer implements Runnable {
|
||||
private final RouterContext _context;
|
||||
private final List<SummaryListener> _listeners;
|
||||
@ -20,7 +20,7 @@ public class StatSummarizer implements Runnable {
|
||||
|
||||
public StatSummarizer() {
|
||||
_context = Util.getRouterContext();
|
||||
_listeners = new CopyOnWriteArrayList<SummaryListener>();
|
||||
_listeners = new CopyOnWriteArrayList<>();
|
||||
_instance = this;
|
||||
if (_context != null)
|
||||
_context.addShutdownTask(new Shutdown());
|
||||
@ -109,7 +109,7 @@ public class StatSummarizer implements Runnable {
|
||||
*/
|
||||
List<Rate> parseSpecs(String specs) {
|
||||
StringTokenizer tok = new StringTokenizer(specs, ",");
|
||||
List<Rate> rv = new ArrayList<Rate>();
|
||||
List<Rate> rv = new ArrayList<>();
|
||||
while (tok.hasMoreTokens()) {
|
||||
String spec = tok.nextToken();
|
||||
int split = spec.lastIndexOf('.');
|
||||
@ -117,7 +117,7 @@ public class StatSummarizer implements Runnable {
|
||||
continue;
|
||||
String name = spec.substring(0, split);
|
||||
String per = spec.substring(split+1);
|
||||
long period = -1;
|
||||
long period;
|
||||
try {
|
||||
period = Long.parseLong(per);
|
||||
RateStat rs = _context.statManager().getRate(name);
|
||||
|
@ -6,6 +6,7 @@ import android.content.DialogInterface;
|
||||
import android.content.Intent;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.v4.app.DialogFragment;
|
||||
import android.view.View;
|
||||
import android.widget.AdapterView;
|
||||
@ -40,7 +41,7 @@ public class RateGraphActivity extends I2PActivityBase {
|
||||
if (StatSummarizer.instance() != null) {
|
||||
// Get the rates currently being graphed
|
||||
List<SummaryListener> listeners = StatSummarizer.instance().getListeners();
|
||||
TreeSet<SummaryListener> ordered = new TreeSet<SummaryListener>(new AlphaComparator());
|
||||
TreeSet<SummaryListener> ordered = new TreeSet<>(new AlphaComparator());
|
||||
ordered.addAll(listeners);
|
||||
|
||||
if (ordered.size() > 0) {
|
||||
@ -58,7 +59,7 @@ public class RateGraphActivity extends I2PActivityBase {
|
||||
mSpinner = (Spinner) findViewById(R.id.main_spinner);
|
||||
mSpinner.setVisibility(View.VISIBLE);
|
||||
|
||||
mSpinner.setAdapter(new ArrayAdapter<String>(this,
|
||||
mSpinner.setAdapter(new ArrayAdapter<>(this,
|
||||
android.R.layout.simple_spinner_dropdown_item, mRates));
|
||||
|
||||
mSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
|
||||
@ -79,6 +80,7 @@ public class RateGraphActivity extends I2PActivityBase {
|
||||
selectRate(0);
|
||||
} else {
|
||||
DialogFragment df = new DialogFragment() {
|
||||
@NonNull
|
||||
@Override
|
||||
public Dialog onCreateDialog(Bundle savedInstanceState) {
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
|
||||
@ -112,6 +114,7 @@ public class RateGraphActivity extends I2PActivityBase {
|
||||
}
|
||||
} else {
|
||||
DialogFragment df = new DialogFragment() {
|
||||
@NonNull
|
||||
@Override
|
||||
public Dialog onCreateDialog(Bundle savedInstanceState) {
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
|
||||
|
@ -1,11 +1,13 @@
|
||||
package net.i2p.android.router.stats;
|
||||
|
||||
import java.text.DecimalFormat;
|
||||
import java.text.FieldPosition;
|
||||
import java.text.Format;
|
||||
import java.text.ParsePosition;
|
||||
import java.util.Observable;
|
||||
import java.util.Observer;
|
||||
import android.graphics.Color;
|
||||
import android.os.Bundle;
|
||||
import android.os.Handler;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
import com.androidplot.Plot;
|
||||
import com.androidplot.xy.BoundaryMode;
|
||||
import com.androidplot.xy.LineAndPointFormatter;
|
||||
@ -18,12 +20,13 @@ import net.i2p.android.router.R;
|
||||
import net.i2p.android.router.service.StatSummarizer;
|
||||
import net.i2p.android.router.service.SummaryListener;
|
||||
import net.i2p.android.router.util.Util;
|
||||
import android.graphics.Color;
|
||||
import android.os.Bundle;
|
||||
import android.os.Handler;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
import java.text.DecimalFormat;
|
||||
import java.text.FieldPosition;
|
||||
import java.text.Format;
|
||||
import java.text.ParsePosition;
|
||||
import java.util.Observable;
|
||||
import java.util.Observer;
|
||||
|
||||
public class RateGraphFragment extends I2PFragmentBase {
|
||||
// redraws a plot whenever an update is received:
|
||||
@ -131,8 +134,8 @@ public class RateGraphFragment extends I2PFragmentBase {
|
||||
_ratePlot.setRangeValueFormat(new Format() {
|
||||
|
||||
@Override
|
||||
public StringBuffer format(Object obj, StringBuffer toAppendTo,
|
||||
FieldPosition pos) {
|
||||
public StringBuffer format(Object obj, @NonNull StringBuffer toAppendTo,
|
||||
@NonNull FieldPosition pos) {
|
||||
double val = ((Number) obj).doubleValue();
|
||||
if (val >= 10 * 1000 * 1000)
|
||||
return new DecimalFormat("0 M").format(val / (1000 * 1000), toAppendTo, pos);
|
||||
@ -147,7 +150,7 @@ public class RateGraphFragment extends I2PFragmentBase {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object parseObject(String source, ParsePosition pos) {
|
||||
public Object parseObject(String source, @NonNull ParsePosition pos) {
|
||||
return null;
|
||||
}
|
||||
|
||||
|
@ -4,6 +4,9 @@ import android.content.ContentResolver;
|
||||
import android.content.ContentValues;
|
||||
import android.content.Context;
|
||||
import android.net.Uri;
|
||||
|
||||
import net.i2p.android.router.provider.CacheProvider;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
@ -14,7 +17,6 @@ import java.util.Comparator;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import net.i2p.android.router.provider.CacheProvider;
|
||||
|
||||
/**
|
||||
* A least recently used cache with a max number of entries
|
||||
@ -32,7 +34,7 @@ public class AppCache {
|
||||
/** the LRU cache */
|
||||
private final Map<Integer, Object> _cache;
|
||||
|
||||
private static final Integer DUMMY = Integer.valueOf(0);
|
||||
private static final Integer DUMMY = 0;
|
||||
private static final String DIR_NAME = "appCache";
|
||||
/** fragment into this many subdirectories */
|
||||
private static final int NUM_DIRS = 32;
|
||||
@ -89,7 +91,7 @@ public class AppCache {
|
||||
public Uri addCacheFile(Uri key, boolean setAsCurrentBase) {
|
||||
int hash = toHash(key);
|
||||
synchronized(_cache) {
|
||||
_cache.put(Integer.valueOf(hash), DUMMY);
|
||||
_cache.put(hash, DUMMY);
|
||||
}
|
||||
// file:/// uri
|
||||
//return Uri.fromFile(toFile(hash)).toString();
|
||||
@ -104,7 +106,7 @@ public class AppCache {
|
||||
public void removeCacheFile(Uri key) {
|
||||
int hash = toHash(key);
|
||||
synchronized(_cache) {
|
||||
_cache.remove(Integer.valueOf(hash));
|
||||
_cache.remove(hash);
|
||||
}
|
||||
deleteContent(key);
|
||||
}
|
||||
@ -121,7 +123,7 @@ public class AppCache {
|
||||
// poke the LRU
|
||||
Object present;
|
||||
synchronized(_cache) {
|
||||
present = _cache.get(Integer.valueOf(hash));
|
||||
present = _cache.get(hash);
|
||||
}
|
||||
if (present != null)
|
||||
setAsCurrentBase(key);
|
||||
@ -173,17 +175,16 @@ public class AppCache {
|
||||
File[] files = dir.listFiles();
|
||||
if (files == null)
|
||||
return 0;
|
||||
for (int i = 0; i < files.length; i++) {
|
||||
File f = files[i];
|
||||
if (f.isDirectory()) {
|
||||
rv += enumerate(f, fileList);
|
||||
} else {
|
||||
long len = f.length();
|
||||
if (len > 0) {
|
||||
fileList.add(f);
|
||||
rv += len;
|
||||
for (File f : files) {
|
||||
if (f.isDirectory()) {
|
||||
rv += enumerate(f, fileList);
|
||||
} else {
|
||||
long len = f.length();
|
||||
if (len > 0) {
|
||||
fileList.add(f);
|
||||
rv += len;
|
||||
} else {
|
||||
f.delete();
|
||||
f.delete();
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -195,7 +196,7 @@ public class AppCache {
|
||||
try {
|
||||
int hash = toHash(f);
|
||||
synchronized(_cache) {
|
||||
_cache.put(Integer.valueOf(hash), DUMMY);
|
||||
_cache.put(hash, DUMMY);
|
||||
}
|
||||
} catch (IllegalArgumentException iae) {
|
||||
Util.d("Huh bad file?" + iae);
|
||||
@ -294,7 +295,7 @@ public class AppCache {
|
||||
@Override
|
||||
public Object put(Integer key, Object value) {
|
||||
Object rv = super.put(key, value);
|
||||
File f = toFile(key.intValue());
|
||||
File f = toFile(key);
|
||||
if (f.exists()) {
|
||||
_totalSize += f.length();
|
||||
}
|
||||
@ -306,7 +307,7 @@ public class AppCache {
|
||||
public Object remove(Object key) {
|
||||
Object rv = super.remove(key);
|
||||
if ( /* rv != null && */ key instanceof Integer) {
|
||||
File f = toFile(((Integer)key).intValue());
|
||||
File f = toFile((Integer) key);
|
||||
if (f.exists()) {
|
||||
_totalSize -= f.length();
|
||||
f.delete();
|
||||
|
@ -0,0 +1,39 @@
|
||||
package net.i2p.android.router.util;
|
||||
|
||||
import android.content.Context;
|
||||
import android.preference.EditTextPreference;
|
||||
import android.text.InputType;
|
||||
import android.util.AttributeSet;
|
||||
|
||||
public class IntEditTextPreference extends EditTextPreference {
|
||||
|
||||
public IntEditTextPreference(Context context) {
|
||||
super(context);
|
||||
getEditText().setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_SIGNED);
|
||||
}
|
||||
|
||||
public IntEditTextPreference(Context context, AttributeSet attrs) {
|
||||
super(context, attrs);
|
||||
getEditText().setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_SIGNED);
|
||||
}
|
||||
|
||||
public IntEditTextPreference(Context context, AttributeSet attrs, int defStyle) {
|
||||
super(context, attrs, defStyle);
|
||||
getEditText().setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_SIGNED);
|
||||
}
|
||||
|
||||
@Override
|
||||
public CharSequence getSummary() {
|
||||
return String.format((String) super.getSummary(), getText());
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getPersistedString(String defaultReturnValue) {
|
||||
return String.valueOf(getPersistedInt(-1));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean persistString(String value) {
|
||||
return persistInt(Integer.valueOf(value));
|
||||
}
|
||||
}
|
@ -1,9 +1,5 @@
|
||||
package net.i2p.android.router.util;
|
||||
|
||||
import java.net.IDN;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.content.Context;
|
||||
import android.content.res.Resources;
|
||||
@ -18,6 +14,10 @@ import net.i2p.data.DataFormatException;
|
||||
import net.i2p.data.Destination;
|
||||
import net.i2p.router.RouterContext;
|
||||
|
||||
import java.net.IDN;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
|
||||
public class NamingServiceUtil {
|
||||
private static final String DEFAULT_NS = "BlockfileNamingService";
|
||||
|
||||
@ -106,7 +106,7 @@ public class NamingServiceUtil {
|
||||
* Ref: java.net.IDN and RFC 3940
|
||||
* @param host will be converted to lower case
|
||||
* @return name converted to lower case and punycoded if necessary
|
||||
* @throws IAE on various errors or if IDN is needed but not available
|
||||
* @throws java.lang.IllegalArgumentException on various errors or if IDN is needed but not available
|
||||
* @since 0.8.7
|
||||
*/
|
||||
@SuppressLint("NewApi")
|
||||
|
@ -0,0 +1,60 @@
|
||||
package net.i2p.android.router.util;
|
||||
|
||||
import android.content.Context;
|
||||
import android.preference.EditTextPreference;
|
||||
import android.text.InputType;
|
||||
import android.util.AttributeSet;
|
||||
|
||||
import net.i2p.android.router.R;
|
||||
|
||||
public class PortPreference extends EditTextPreference {
|
||||
public PortPreference(Context context) {
|
||||
super(context);
|
||||
getEditText().setInputType(InputType.TYPE_CLASS_NUMBER);
|
||||
}
|
||||
|
||||
public PortPreference(Context context, AttributeSet attrs) {
|
||||
super(context, attrs);
|
||||
getEditText().setInputType(InputType.TYPE_CLASS_NUMBER);
|
||||
}
|
||||
|
||||
public PortPreference(Context context, AttributeSet attrs, int defStyle) {
|
||||
super(context, attrs, defStyle);
|
||||
getEditText().setInputType(InputType.TYPE_CLASS_NUMBER);
|
||||
}
|
||||
|
||||
@Override
|
||||
public CharSequence getSummary() {
|
||||
int port = getPersistedInt(-1);
|
||||
if (port < 0)
|
||||
return getContext().getResources().getString(R.string.unset);
|
||||
else
|
||||
return String.valueOf(port);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getPersistedString(String defaultReturnValue) {
|
||||
int port = getPersistedInt(-1);
|
||||
if (port < 0)
|
||||
return defaultReturnValue;
|
||||
else
|
||||
return String.valueOf(port);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean persistString(String value) {
|
||||
if (value == null || value.isEmpty())
|
||||
return persistInt(-1);
|
||||
|
||||
int port;
|
||||
try {
|
||||
port = Integer.valueOf(value);
|
||||
if (port < 0)
|
||||
port = -1;
|
||||
} catch (NumberFormatException e) {
|
||||
port = -1;
|
||||
}
|
||||
|
||||
return persistInt(port);
|
||||
}
|
||||
}
|
@ -8,10 +8,12 @@ import android.content.res.Resources;
|
||||
import android.preference.PreferenceManager;
|
||||
|
||||
import net.i2p.I2PAppContext;
|
||||
import net.i2p.android.router.I2PConstants;
|
||||
import net.i2p.data.DataHelper;
|
||||
import net.i2p.router.Router;
|
||||
import net.i2p.router.RouterContext;
|
||||
import net.i2p.router.transport.TransportManager;
|
||||
import net.i2p.router.transport.udp.UDPTransport;
|
||||
import net.i2p.util.OrderedProperties;
|
||||
|
||||
import java.io.File;
|
||||
@ -19,13 +21,14 @@ import java.io.FileInputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Properties;
|
||||
|
||||
public abstract class Util {
|
||||
public abstract class Util implements I2PConstants {
|
||||
public static String getOurVersion(Context ctx) {
|
||||
PackageManager pm = ctx.getPackageManager();
|
||||
String us = ctx.getPackageName();
|
||||
@ -123,44 +126,46 @@ public abstract class Util {
|
||||
}
|
||||
}
|
||||
|
||||
/** copied from various private components */
|
||||
final static String PROP_I2NP_NTCP_PORT = "i2np.ntcp.port";
|
||||
final static String PROP_I2NP_NTCP_AUTO_PORT = "i2np.ntcp.autoport";
|
||||
|
||||
public static List<Properties> getPropertiesFromPreferences(Context context) {
|
||||
List<Properties> pList = new ArrayList<Properties>();
|
||||
List<Properties> pList = new ArrayList<>();
|
||||
|
||||
// Copy prefs
|
||||
Properties routerProps = new OrderedProperties();
|
||||
|
||||
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
|
||||
|
||||
// List to store stats for graphing
|
||||
List<String> statSummaries = new ArrayList<String>();
|
||||
List<String> statSummaries = new ArrayList<>();
|
||||
|
||||
// Properties to remove
|
||||
Properties toRemove = new OrderedProperties();
|
||||
|
||||
// List to store Log settings
|
||||
Properties logSettings = new OrderedProperties();
|
||||
|
||||
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
|
||||
Map<String, ?> all = preferences.getAll();
|
||||
Iterator<String> iterator = all.keySet().iterator();
|
||||
// get values from the Map and make them strings.
|
||||
// This loop avoids needing to convert each one, or even know it's type, or if it exists yet.
|
||||
while (iterator.hasNext()) {
|
||||
String x = iterator.next();
|
||||
if ( x.startsWith("i2pandroid.")) // Skip over UI-related I2P Android settings
|
||||
continue;
|
||||
else if ( x.startsWith("stat.summaries.")) {
|
||||
for (String x : all.keySet()) {
|
||||
if (x.startsWith("stat.summaries.")) {
|
||||
String stat = x.substring("stat.summaries.".length());
|
||||
String checked = all.get(x).toString();
|
||||
if (checked.equals("true")) {
|
||||
statSummaries.add(stat);
|
||||
}
|
||||
} else if ( x.startsWith("logger.")) {
|
||||
} else if (x.startsWith("logger.")) {
|
||||
logSettings.put(x, all.get(x).toString());
|
||||
} else if (
|
||||
x.equals("router.hiddenMode") ||
|
||||
x.equals("i2cp.disableInterface")) {
|
||||
x.equals("i2cp.disableInterface")) {
|
||||
// special exception, we must invert the bool for these properties only.
|
||||
String string = all.get(x).toString();
|
||||
String inverted = Boolean.toString(!Boolean.parseBoolean(string));
|
||||
routerProps.setProperty(x, inverted);
|
||||
} else {
|
||||
} else if (!x.startsWith(ANDROID_PREF_PREFIX)) { // Skip over UI-related I2P Android settings
|
||||
String string = all.get(x).toString();
|
||||
routerProps.setProperty(x, string);
|
||||
}
|
||||
@ -176,24 +181,41 @@ public abstract class Util {
|
||||
routerProps.setProperty("stat.summaries", buf.toString());
|
||||
}
|
||||
|
||||
// See net.i2p.router.web.ConfigNetHandler.saveChanges()
|
||||
int udpPort = Integer.parseInt(routerProps.getProperty(UDPTransport.PROP_INTERNAL_PORT, "-1"));
|
||||
if (udpPort <= 0)
|
||||
routerProps.remove(UDPTransport.PROP_INTERNAL_PORT);
|
||||
int ntcpPort = Integer.parseInt(routerProps.getProperty(PROP_I2NP_NTCP_PORT, "-1"));
|
||||
boolean ntcpAutoPort = Boolean.parseBoolean(
|
||||
routerProps.getProperty(PROP_I2NP_NTCP_AUTO_PORT, "true"));
|
||||
if (ntcpPort <= 0 || ntcpAutoPort) {
|
||||
routerProps.remove(PROP_I2NP_NTCP_PORT);
|
||||
toRemove.setProperty(PROP_I2NP_NTCP_PORT, "");
|
||||
}
|
||||
|
||||
pList.add(routerProps);
|
||||
pList.add(toRemove);
|
||||
pList.add(logSettings);
|
||||
|
||||
return pList;
|
||||
}
|
||||
|
||||
// propName -> defaultValue
|
||||
private static HashMap<String, Boolean> booleanOptionsRequiringRestart = new HashMap<String, Boolean>();
|
||||
private static HashMap<String, String> stringOptionsRequiringRestart = new HashMap<String, String>();
|
||||
private static HashMap<String, Boolean> booleanOptionsRequiringRestart = new HashMap<>();
|
||||
private static HashMap<String, String> stringOptionsRequiringRestart = new HashMap<>();
|
||||
static {
|
||||
HashMap<String, Boolean> boolToAdd = new HashMap<String, Boolean>();
|
||||
HashMap<String, String> strToAdd = new HashMap<String, String>();
|
||||
HashMap<String, Boolean> boolToAdd = new HashMap<>();
|
||||
HashMap<String, String> strToAdd = new HashMap<>();
|
||||
|
||||
boolToAdd.put(TransportManager.PROP_ENABLE_UPNP, true);
|
||||
boolToAdd.put(TransportManager.PROP_ENABLE_NTCP, true);
|
||||
boolToAdd.put(TransportManager.PROP_ENABLE_UDP, true);
|
||||
boolToAdd.put(PROP_I2NP_NTCP_AUTO_PORT, true);
|
||||
boolToAdd.put(Router.PROP_HIDDEN, false);
|
||||
|
||||
strToAdd.put(UDPTransport.PROP_INTERNAL_PORT, "-1");
|
||||
strToAdd.put(PROP_I2NP_NTCP_PORT, "-1");
|
||||
|
||||
booleanOptionsRequiringRestart.putAll(boolToAdd);
|
||||
stringOptionsRequiringRestart.putAll(strToAdd);
|
||||
}
|
||||
@ -209,9 +231,10 @@ public abstract class Util {
|
||||
* </li></ul>
|
||||
*
|
||||
* @param props a Properties object containing the router.config
|
||||
* @param toRemove a Collection of properties that will be removed
|
||||
* @return true if the router needs to be restarted.
|
||||
*/
|
||||
public static boolean checkAndCorrectRouterConfig(Context context, Properties props) {
|
||||
public static boolean checkAndCorrectRouterConfig(Context context, Properties props, Collection<String> toRemove) {
|
||||
// Disable UPnP on mobile networks, ignoring user's configuration
|
||||
// TODO disabled until changes elsewhere are finished
|
||||
//if (Connectivity.isConnectedMobile(context)) {
|
||||
@ -225,17 +248,17 @@ public abstract class Util {
|
||||
for (Map.Entry<String, Boolean> option : booleanOptionsRequiringRestart.entrySet()) {
|
||||
String propName = option.getKey();
|
||||
boolean defaultValue = option.getValue();
|
||||
restartRequired |= (
|
||||
Boolean.parseBoolean(props.getProperty(propName, Boolean.toString(defaultValue))) !=
|
||||
(defaultValue ? rCtx.getBooleanPropertyDefaultTrue(propName) : rCtx.getBooleanProperty(propName))
|
||||
);
|
||||
boolean currentValue = defaultValue ? rCtx.getBooleanPropertyDefaultTrue(propName) : rCtx.getBooleanProperty(propName);
|
||||
boolean newValue = Boolean.parseBoolean(props.getProperty(propName, Boolean.toString(defaultValue)));
|
||||
restartRequired |= (currentValue != newValue);
|
||||
}
|
||||
if (!restartRequired) { // Cut out now if we already know the answer
|
||||
for (Map.Entry<String, String> option : stringOptionsRequiringRestart.entrySet()) {
|
||||
String propName = option.getKey();
|
||||
String defaultValue = option.getValue();
|
||||
restartRequired |= props.getProperty(propName, defaultValue).equals(
|
||||
rCtx.getProperty(propName, defaultValue));
|
||||
String currentValue = rCtx.getProperty(propName, defaultValue);
|
||||
String newValue = props.getProperty(propName, defaultValue);
|
||||
restartRequired |= !currentValue.equals(newValue);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -256,7 +279,7 @@ public abstract class Util {
|
||||
* @param props properties to set
|
||||
*/
|
||||
public static void writePropertiesToFile(Context ctx, String dir, String file, Properties props) {
|
||||
mergeResourceToFile(ctx, dir, file, 0, props);
|
||||
mergeResourceToFile(ctx, dir, file, 0, props, null);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -267,8 +290,10 @@ public abstract class Util {
|
||||
* @param file relative to dir
|
||||
* @param resID the ID of the default resource, or 0
|
||||
* @param userProps local properties or null
|
||||
* @param toRemove properties to remove, or null
|
||||
*/
|
||||
public static void mergeResourceToFile(Context ctx, String dir, String file, int resID, Properties userProps) {
|
||||
public static void mergeResourceToFile(Context ctx, String dir, String file, int resID,
|
||||
Properties userProps, Collection<String> toRemove) {
|
||||
InputStream fin = null;
|
||||
InputStream in = null;
|
||||
|
||||
@ -297,6 +322,11 @@ public abstract class Util {
|
||||
// override with user settings
|
||||
if (userProps != null)
|
||||
props.putAll(userProps);
|
||||
if (toRemove != null) {
|
||||
for (String key : toRemove) {
|
||||
props.remove(key);
|
||||
}
|
||||
}
|
||||
|
||||
File path = new File(dir, file);
|
||||
DataHelper.storeProps(props, path);
|
||||
|
@ -194,8 +194,7 @@ public class I2PWebViewClient extends WebViewClient {
|
||||
/**
|
||||
* This should always be a content url
|
||||
*/
|
||||
void deleteCurrentPageCache(WebView view) {
|
||||
String url = view.getUrl();
|
||||
void deleteCurrentPageCache(WebView view, String url) {
|
||||
Uri uri = Uri.parse(url);
|
||||
if (CONTENT.equals(uri.getScheme())) {
|
||||
try {
|
||||
|
@ -22,6 +22,7 @@ import net.i2p.android.router.R;
|
||||
public class WebFragment extends I2PFragmentBase {
|
||||
|
||||
private I2PWebViewClient _wvClient;
|
||||
private String _uriStr;
|
||||
|
||||
public final static String HTML_URI = "html_url";
|
||||
public final static String HTML_RESOURCE_ID = "html_resource_id";
|
||||
@ -48,9 +49,9 @@ public class WebFragment extends I2PFragmentBase {
|
||||
wv.getSettings().setBuiltInZoomControls(true);
|
||||
// http://stackoverflow.com/questions/2369310/webview-double-tap-zoom-not-working-on-a-motorola-droid-a855
|
||||
wv.getSettings().setUseWideViewPort(true);
|
||||
String uriStr = getArguments().getString(HTML_URI);
|
||||
if (uriStr != null) {
|
||||
Uri uri = Uri.parse(uriStr);
|
||||
_uriStr = getArguments().getString(HTML_URI);
|
||||
if (_uriStr != null) {
|
||||
Uri uri = Uri.parse(_uriStr);
|
||||
//wv.getSettings().setLoadsImagesAutomatically(true);
|
||||
//wv.loadUrl(uri.toString());
|
||||
// go thru the client so .i2p will work too
|
||||
@ -115,14 +116,18 @@ public class WebFragment extends I2PFragmentBase {
|
||||
_wvClient.cancelAll();
|
||||
wv.stopLoading();
|
||||
String url = wv.getUrl();
|
||||
Uri uri = Uri.parse(url);
|
||||
// If a resource, _uriStr == null but url != null (resource loads don't fail)
|
||||
// If a URL, _uriStr != null and url might be null (if pageload failed)
|
||||
if (url != null && (!url.equals(_uriStr)))
|
||||
_uriStr = url;
|
||||
Uri uri = Uri.parse(_uriStr);
|
||||
if ("data".equals(uri.getScheme())) {
|
||||
// welcome page... or just do nothing ?
|
||||
wv.reload();
|
||||
} else {
|
||||
// wv.reload() doesn't call shouldOverrideUrlLoading(), so do it this way
|
||||
_wvClient.deleteCurrentPageCache(wv);
|
||||
_wvClient.shouldOverrideUrlLoading(wv, url);
|
||||
_wvClient.deleteCurrentPageCache(wv, _uriStr);
|
||||
_wvClient.shouldOverrideUrlLoading(wv, _uriStr);
|
||||
}
|
||||
return true;
|
||||
|
||||
|
@ -1,9 +1,9 @@
|
||||
<html>
|
||||
<head></head>
|
||||
<body>
|
||||
<h2>What is I2PTunnel?</h2>
|
||||
<h2>What are tunnels?</h2>
|
||||
<p>Tunnels are the heart of I2P. All data inside the I2P network is sent through tunnels that hide the location of users. If an app has native I2P support, it will create its own tunnels.</p>
|
||||
<p>I2PTunnel lets you create your own tunnels manually. This is useful for when you want to use an app that doesn't have native I2P support, like:</p>
|
||||
<p>The Hidden Services Manager lets you create your own tunnels manually. This is useful for when you want to use an app that doesn't have native I2P support, like:</p>
|
||||
<ul>
|
||||
<li>A browser.</li>
|
||||
<li>An IRC client.</li>
|
||||
@ -11,14 +11,7 @@
|
||||
</ul>
|
||||
|
||||
<h2>Using clients with pre-configured tunnels</h2>
|
||||
<p>The app starts an HTTP proxy at localhost port 4444 and IRC client tunnels at localhost ports 6668 - 6672. The IRC clients are "shared clients" on the same tunnels. Once you see the tunnel icon turn green on the main console (several minutes after startup), you should be able to connect.</p>
|
||||
|
||||
<p>The IRC proxy is tested with the "Android IRC Free" app. The IRC proxy destinations are:</p>
|
||||
<ol>
|
||||
<li>Port 6668: IRC2P - irc.postman.i2p, irc.freshcoffee.i2p, and irc.echelon.i2p</li>
|
||||
<li>Port 6669: irc.welterde.i2p</li>
|
||||
<li>Port 6670: irc.killyourtv.i2p</li>
|
||||
</ol>
|
||||
<p>The app starts an HTTP proxy tunnel at localhost port 4444 and IRC client tunnels at localhost ports 6668 - 6672. The IRC clients are "shared clients" on the same tunnels. Once you see the tunnel icon turn green on the main console (several minutes after startup), you should be able to connect.</p>
|
||||
|
||||
<h2>What does the clock icon on a yellow background mean?</h2>
|
||||
<p>When a tunnel's indicator is yellow with a clock icon, the tunnel is in standby mode. This means that I2P has not built the tunnel yet, but will do so automatically when you start using it. This helps to minimize resource use and conserve battery life.</p>
|
||||
|
@ -3,9 +3,14 @@
|
||||
<body>
|
||||
<h2>How to configure Orfox:</h2>
|
||||
<ol>
|
||||
<li>Type <code>about:config</code> into the URL bar.</li>
|
||||
<li>Search for <code>network.proxy.http</code>.</li>
|
||||
<li>Change the value of <code>network.proxy.http_port</code> to <code>4444</code>.</li>
|
||||
<li>Install the ProxyMob add-on. Click <a
|
||||
href="https://guardianproject.info/downloads/proxymob.xpi">HERE</a>, and choose to open
|
||||
the URL in Firefox.
|
||||
</li>
|
||||
<li>In the main Firefox menu, click "Tools", then "Add-ons".</li>
|
||||
<li>Click on "Proxy Mobile".</li>
|
||||
<li>Change the value of "HTTP Proxy Port" to <code>4444</code>.</li>
|
||||
<li>You can now browse I2P eepsites!</li>
|
||||
</ol>
|
||||
</body>
|
||||
</html>
|
@ -3,10 +3,14 @@
|
||||
<body>
|
||||
<h2>How to configure Firefox:</h2>
|
||||
<ol>
|
||||
<li>Type <code>about:config</code> into the URL bar.</li>
|
||||
<li>Search for <code>network.proxy.http</code>.</li>
|
||||
<li>Change the value of <code>network.proxy.http</code> to <code>localhost</code>.</li>
|
||||
<li>Change the value of <code>network.proxy.http_port</code> to <code>4444</code>.</li>
|
||||
<li>Install the ProxyMob add-on. Click <a
|
||||
href="https://guardianproject.info/downloads/proxymob.xpi">HERE</a>, and choose to open
|
||||
the URL in Firefox.
|
||||
</li>
|
||||
<li>In the main Firefox menu, click "Tools", then "Add-ons".</li>
|
||||
<li>Click on "Proxy Mobile".</li>
|
||||
<li>Change the value of "HTTP Proxy Port" to <code>4444</code>.</li>
|
||||
<li>You can now browse I2P eepsites!</li>
|
||||
</ol>
|
||||
</body>
|
||||
</html>
|
@ -50,14 +50,14 @@ tunnel.1.option.outbound.lengthVariance=0
|
||||
tunnel.1.option.outbound.priority=15
|
||||
tunnel.1.startOnLoad=true
|
||||
|
||||
# irc
|
||||
tunnel.2.name=IRC welterde
|
||||
tunnel.2.description=IRC tunnel to welterde's network
|
||||
tunnel.2.type=ircclient
|
||||
# postman's SMTP server - see hq.postman.i2p
|
||||
tunnel.2.name=smtp.postman.i2p
|
||||
tunnel.2.description=smtp server
|
||||
tunnel.2.type=client
|
||||
tunnel.2.sharedClient=true
|
||||
tunnel.2.interface=127.0.0.1
|
||||
tunnel.2.listenPort=6669
|
||||
tunnel.2.targetDestination=irc.welterde.i2p
|
||||
tunnel.2.listenPort=7659
|
||||
tunnel.2.targetDestination=smtp.postman.i2p:25
|
||||
tunnel.2.i2cpHost=127.0.0.1
|
||||
tunnel.2.i2cpPort=7654
|
||||
tunnel.2.option.inbound.nickname=shared clients
|
||||
@ -67,20 +67,22 @@ tunnel.2.option.i2cp.reduceIdleTime=600000
|
||||
tunnel.2.option.i2cp.reduceOnIdle=true
|
||||
tunnel.2.option.i2cp.reduceQuantity=1
|
||||
tunnel.2.option.i2p.streaming.connectDelay=1000
|
||||
tunnel.2.option.i2p.streaming.maxWindowSize=16
|
||||
tunnel.2.option.inbound.length=2
|
||||
tunnel.2.option.inbound.lengthVariance=0
|
||||
tunnel.2.option.outbound.length=2
|
||||
tunnel.2.option.outbound.lengthVariance=0
|
||||
tunnel.2.option.outbound.priority=15
|
||||
tunnel.2.startOnLoad=true
|
||||
|
||||
# irc irc.killyourtv.i2p
|
||||
tunnel.3.name=KYTV IRC
|
||||
tunnel.3.description=IRC tunnel to KillYourTV's network
|
||||
tunnel.3.type=ircclient
|
||||
# postman's POP3 server - see hq.postman.i2p
|
||||
tunnel.3.name=pop3.postman.i2p
|
||||
tunnel.3.description=pop3 server
|
||||
tunnel.3.type=client
|
||||
tunnel.3.sharedClient=true
|
||||
tunnel.3.interface=127.0.0.1
|
||||
tunnel.3.listenPort=6670
|
||||
tunnel.3.targetDestination=irc.killyourtv.i2p
|
||||
tunnel.3.listenPort=7660
|
||||
tunnel.3.targetDestination=pop.postman.i2p:110
|
||||
tunnel.3.i2cpHost=127.0.0.1
|
||||
tunnel.3.i2cpPort=7654
|
||||
tunnel.3.option.inbound.nickname=shared clients
|
||||
@ -90,8 +92,60 @@ tunnel.3.option.i2cp.reduceIdleTime=600000
|
||||
tunnel.3.option.i2cp.reduceOnIdle=true
|
||||
tunnel.3.option.i2cp.reduceQuantity=1
|
||||
tunnel.3.option.i2p.streaming.connectDelay=1000
|
||||
tunnel.3.option.i2p.streaming.maxWindowSize=16
|
||||
tunnel.3.option.inbound.length=2
|
||||
tunnel.3.option.inbound.lengthVariance=0
|
||||
tunnel.3.option.outbound.length=2
|
||||
tunnel.3.option.outbound.lengthVariance=0
|
||||
tunnel.3.startOnLoad=true
|
||||
tunnel.3.option.outbound.priority=15
|
||||
tunnel.3.startOnLoad=true
|
||||
|
||||
# irc
|
||||
tunnel.4.name=IRC welterde
|
||||
tunnel.4.description=IRC tunnel to welterde's network
|
||||
tunnel.4.type=ircclient
|
||||
tunnel.4.sharedClient=true
|
||||
tunnel.4.interface=127.0.0.1
|
||||
tunnel.4.listenPort=6669
|
||||
tunnel.4.targetDestination=irc.welterde.i2p
|
||||
tunnel.4.i2cpHost=127.0.0.1
|
||||
tunnel.4.i2cpPort=7654
|
||||
tunnel.4.option.inbound.nickname=shared clients
|
||||
tunnel.4.option.outbound.nickname=shared clients
|
||||
tunnel.4.option.i2cp.delayOpen=true
|
||||
tunnel.4.option.i2cp.reduceIdleTime=600000
|
||||
tunnel.4.option.i2cp.reduceOnIdle=true
|
||||
tunnel.4.option.i2cp.reduceQuantity=1
|
||||
tunnel.4.option.i2p.streaming.connectDelay=1000
|
||||
tunnel.4.option.i2p.streaming.maxWindowSize=16
|
||||
tunnel.4.option.inbound.length=2
|
||||
tunnel.4.option.inbound.lengthVariance=0
|
||||
tunnel.4.option.outbound.length=2
|
||||
tunnel.4.option.outbound.lengthVariance=0
|
||||
tunnel.4.option.outbound.priority=15
|
||||
tunnel.4.startOnLoad=true
|
||||
|
||||
# irc irc.killyourtv.i2p
|
||||
tunnel.5.name=KYTV IRC
|
||||
tunnel.5.description=IRC tunnel to KillYourTV's network
|
||||
tunnel.5.type=ircclient
|
||||
tunnel.5.sharedClient=true
|
||||
tunnel.5.interface=127.0.0.1
|
||||
tunnel.5.listenPort=6670
|
||||
tunnel.5.targetDestination=irc.killyourtv.i2p
|
||||
tunnel.5.i2cpHost=127.0.0.1
|
||||
tunnel.5.i2cpPort=7654
|
||||
tunnel.5.option.inbound.nickname=shared clients
|
||||
tunnel.5.option.outbound.nickname=shared clients
|
||||
tunnel.5.option.i2cp.delayOpen=true
|
||||
tunnel.5.option.i2cp.reduceIdleTime=600000
|
||||
tunnel.5.option.i2cp.reduceOnIdle=true
|
||||
tunnel.5.option.i2cp.reduceQuantity=1
|
||||
tunnel.5.option.i2p.streaming.connectDelay=1000
|
||||
tunnel.5.option.i2p.streaming.maxWindowSize=16
|
||||
tunnel.5.option.inbound.length=2
|
||||
tunnel.5.option.inbound.lengthVariance=0
|
||||
tunnel.5.option.outbound.length=2
|
||||
tunnel.5.option.outbound.lengthVariance=0
|
||||
tunnel.5.option.outbound.priority=15
|
||||
tunnel.5.startOnLoad=true
|
@ -2,24 +2,23 @@
|
||||
<resources>
|
||||
<string name="app_name">I2P</string>
|
||||
<string name="desc_i2p_logo">I2P-Logo</string>
|
||||
<string name="welcome_new_install">Willkommen bei I2P! Diese App ist Alpha-Software und bietet keine starke Anonymität. Bitte lies die Veröffentlichungshinweise und die Lizenzeninformationen.</string>
|
||||
<string name="welcome_new_version">Eine neue Version wurde installiert. Bitte lies die Veröffentlichungshinweise. Version:</string>
|
||||
<string name="welcome_new_install">Willkommen bei I2P! Diese App ist Alpha-Software und bietet keine starke Anonymität. Bitte lesen Sie die Veröffentlichungshinweise und die Lizenzinformationen.</string>
|
||||
<string name="welcome_new_version">Eine neue Version wurde installiert. Bitte lesen Sie die Veröffentlichungshinweise. Version:</string>
|
||||
<string name="label_home">Einstellungen und Status</string>
|
||||
<string name="label_tunnels">Tunnel</string>
|
||||
<string name="label_status">Status</string>
|
||||
<string name="label_addressbook">Adressbuch</string>
|
||||
<string name="label_i2ptunnel">I2PTunnel</string>
|
||||
<string name="label_i2ptunnel_client">Kliententunnel</string>
|
||||
<string name="label_i2ptunnel_server">Servertunnel</string>
|
||||
<string name="label_logs">Statusberichte</string>
|
||||
<string name="label_error_logs">Fehler-Protokolle</string>
|
||||
<string name="label_error_logs">Fehlerprotokolle</string>
|
||||
<string name="label_info_and_pages">Informationen und Seiten</string>
|
||||
<string name="label_welcome_page">Begrüßungsseite</string>
|
||||
<string name="label_news">Neuigkeiten</string>
|
||||
<string name="label_peers_status">Teilnehmer</string>
|
||||
<string name="label_release_notes">Veröffentlichungshinweise</string>
|
||||
<string name="label_licenses">Lizenzen</string>
|
||||
<string name="label_nonanon_info">Nichtanonyme Informationen</string>
|
||||
<string name="label_nonanon_info">Nicht-anonyme Informationen</string>
|
||||
<string name="label_browse">Surfen</string>
|
||||
<string name="label_graphs">Graphen</string>
|
||||
<string name="button_router_off">Lange drücken, um I2P zu starten</string>
|
||||
@ -30,13 +29,13 @@
|
||||
<string name="char_server_tunnel">S</string>
|
||||
<string name="no_client_tunnels_running">Keine Kliententunnel laufen noch.</string>
|
||||
<string name="configure_browser_title">Browser konfigurieren?</string>
|
||||
<string name="configure_browser_for_i2p">Möchten Sie einen Browser zum Betrachten von I2P Seiten einrichten ? (Sie können dieses auch später noch im Hilfe Menu erledigen).</string>
|
||||
<string name="first_start_title">Herzlichen Glückwunsch, du hast I2P installiert!</string>
|
||||
<string name="first_start_welcome"><b>Willkommen im I2P</b> Bitte <b>hab Geduld</b>, während I2P startet und Teilnehmer findet.</string>
|
||||
<string name="first_start_read">Während du wartest, lies bitte die Veröffentlichungshinweise und die Startseite.</string>
|
||||
<string name="first_start_faq">Sobald du Kliententunnels hast, <b>lies</b> bitte unsere FAQs:</string>
|
||||
<string name="first_start_faq_nonanon">Oder benutze unsere nicht-anonymen Links, wenn du nicht auf die Tunnel warten willst.</string>
|
||||
<string name="first_start_irc">Verbinde dich mit deinem IRC-Klienten zu <b>localhost:6668</b> und schau bei uns vorbei:</string>
|
||||
<string name="configure_browser_for_i2p">Möchten Sie einen Browser zum Betrachten von I2P-Seiten einrichten? (Sie können dieses auch später noch im Hilfe-Menü erledigen).</string>
|
||||
<string name="first_start_title">Herzlichen Glückwunsch, Sie haben I2P installiert!</string>
|
||||
<string name="first_start_welcome"><b>Willkommen im I2P</b> Bitte <b>haben Sie Geduld</b>, während I2P startet und Teilnehmer findet.</string>
|
||||
<string name="first_start_read">Lesen Sie bitte die Veröffentlichungshinweise und die Startseite während Sie warten.</string>
|
||||
<string name="first_start_faq">Sobald Sie Kliententunnels haben, <b>lesen</b> Sie bitte unsere FAQ:</string>
|
||||
<string name="first_start_faq_nonanon">Oder verwenden Sie unsere nicht-anonymen Links, wenn Sie nicht auf die Tunnel warten wollen.</string>
|
||||
<string name="first_start_irc">Verbinden Sie Ihren IRC-Klienten mit <b>localhost:6668</b> und schauen Sie bei uns vorbei:</string>
|
||||
<string name="drawer_open">Navigation öffnen</string>
|
||||
<string name="drawer_close">Navigation schließen</string>
|
||||
<string name="action_search">Suche</string>
|
||||
@ -45,22 +44,22 @@
|
||||
<string name="action_delete">Löschen</string>
|
||||
<string name="action_router_start">Router starten</string>
|
||||
<string name="action_router_stop">Router stoppen</string>
|
||||
<string name="action_i2ptunnel_start">Starte den Tunnel</string>
|
||||
<string name="action_i2ptunnel_stop">Stoppe den Tunnel</string>
|
||||
<string name="action_i2ptunnel_start">Tunnel starten</string>
|
||||
<string name="action_i2ptunnel_stop">Tunnel stoppen</string>
|
||||
<string name="action_i2ptunnel_start_all">Alle Tunnel starten</string>
|
||||
<string name="action_i2ptunnel_stop_all">Alle Tunnel anhalten</string>
|
||||
<string name="action_i2ptunnel_restart_all">Alle Tunnel neu starten</string>
|
||||
<string name="action_reload">Neu laden</string>
|
||||
<string name="action_refresh">Auffrischen</string>
|
||||
<string name="hint_search_addressbook">Durchsuche das Adressbuch</string>
|
||||
<string name="hint_search_addressbook">Adressbuch durchsuchen</string>
|
||||
<string name="action_reload_subscriptions">Abonnements neu laden</string>
|
||||
<string name="router_not_running">Der Router läuft nicht.</string>
|
||||
<string name="stats_not_ready">Der Statistikmanager ist noch nicht bereit. Versuch es später erneut.</string>
|
||||
<string name="stats_not_ready">Der Statistikmanager ist noch nicht bereit. Versuchen Sie es später noch einmal.</string>
|
||||
<string name="no_graphs_configured">Keine Graphen konfiguriert. Sie können die Statistiken zum Erstellen der Graphen im Einstellungsmenu auswählen. Jede Änderung wird nach 60 Sekunden aktiv gesetzt.</string>
|
||||
<string name="configure_graphs">Graphen konfigurieren</string>
|
||||
<string name="graphs_not_ready">Die Graphen sind noch nicht bereit oder der Router läuft nicht. Probiere es später nochmal.</string>
|
||||
<string name="netdb_routers_empty">Keine Router in deiner NetDB.</string>
|
||||
<string name="netdb_leases_empty">Keine LeaseSets in deiner NetDB</string>
|
||||
<string name="graphs_not_ready">Die Graphen sind noch nicht bereit oder der Router läuft nicht. Versuchen Sie es später noch einmal.</string>
|
||||
<string name="netdb_routers_empty">Keine Router in Ihrer NetDB.</string>
|
||||
<string name="netdb_leases_empty">Keine LeaseSets in Ihrer NetDB.</string>
|
||||
<string name="notification_status_bw">Bandbreite: %1$s KB/s eingehend / %2$s KB/s ausgehend</string>
|
||||
<string name="notification_status_peers">Teilnehmer: %1$d aktiv, %2$d bekannt</string>
|
||||
<string name="notification_status_expl">Erkundungstunnel: %1$d/%2$d</string>
|
||||
@ -70,10 +69,10 @@
|
||||
<string name="settings_desc_subscriptions">Abonnements-URLs</string>
|
||||
<string name="settings_label_bandwidth_net">Bandbreite und Netzwerk</string>
|
||||
<string name="settings_label_bandwidth">Bandbreite</string>
|
||||
<string name="settings_label_bw_inbound">maximal eingehend</string>
|
||||
<string name="settings_desc_bw_inbound">maximal ausgehend</string>
|
||||
<string name="settings_label_bw_outbound">ausgehende Übertragungsgeschwindigkeit</string>
|
||||
<string name="settings_desc_bw_outbound">maximale ausgehende Übertragungsgeschwindigkeit</string>
|
||||
<string name="settings_label_bw_inbound">Eingehende Übertragungsgeschwindigkeit</string>
|
||||
<string name="settings_desc_bw_inbound">Maximale eingehende Übertragungsgeschwindigkeit</string>
|
||||
<string name="settings_label_bw_outbound">Ausgehende Übertragungsgeschwindigkeit</string>
|
||||
<string name="settings_desc_bw_outbound">Maximale ausgehende Übertragungsgeschwindigkeit</string>
|
||||
<string name="settings_label_network">Netzwerk</string>
|
||||
<string name="settings_label_hiddenMode">Beteiligung</string>
|
||||
<string name="settings_desc_hiddenMode">Tarnmodus ausschalten</string>
|
||||
@ -88,11 +87,11 @@
|
||||
<string name="settings_label_default_log_level">Standard-Detailtiefe der Statusberichte</string>
|
||||
<string name="settings_label_advanced">Erweitert</string>
|
||||
<string name="settings_label_showStats">Routerstatistiken</string>
|
||||
<string name="settings_summ_showStats">Zeige ausführliche Statistiken in der Hauptkonsole.</string>
|
||||
<string name="settings_summ_showStats">Ausführliche Statistiken in der Hauptkonsole anzeigen.</string>
|
||||
<string name="settings_label_transports">Transporte</string>
|
||||
<string name="settings_label_maxConns">max. Verbindungen</string>
|
||||
<string name="settings_label_maxConns">Max. Verbindungen</string>
|
||||
<string name="settings_label_i2cp">I2CP-Benutzeroberfläche</string>
|
||||
<string name="settings_desc_i2cp">lausche auf Port 7654</string>
|
||||
<string name="settings_desc_i2cp">Auf Port 7654 lauschen</string>
|
||||
<string name="settings_label_exploratory_pool">Satz an Erkundungstunneln</string>
|
||||
<string name="settings_desc_exploratory_pool">Tunnelparameter</string>
|
||||
<string name="settings_label_expl_inbound">Eingehende Tunnel</string>
|
||||
@ -115,15 +114,15 @@
|
||||
<string name="about_project">Projektseite:</string>
|
||||
<string name="about_bugs">Fehlermeldungen und Unterstützung:</string>
|
||||
<string name="about_helpwanted">Unterstützer gesucht!!</string>
|
||||
<string name="about_volunteer">Du willst mithelfen, die App besser zu machen? Dann schau in das Android forum:</string>
|
||||
<string name="about_donate">Wenn du Geld oder Bitcoins spenden wilst, damit wir mehr Android-Geräte zum Testen kaufen können, dann schau auf:</string>
|
||||
<string name="about_volunteer">Sie wollen mithelfen, die App besser zu machen? Dann schauen Sie in das Android-Forum:</string>
|
||||
<string name="about_donate">Sie wollen Geld oder Bitcoins spenden, damit wir mehr Android-Geräte zum Entwickeln und Testen kaufen können? Gehen Sie auf:</string>
|
||||
<string name="menu_help">Hilfe</string>
|
||||
<string name="general">Allgemein</string>
|
||||
<string name="addressbook_search_header">%s gefunden</string>
|
||||
<string name="addressbook_add_wizard_k_name">Name</string>
|
||||
<string name="addressbook_add_wizard_k_destination">Ziel</string>
|
||||
<string name="addressbook_add_wizard_desc_name">Der Name</string>
|
||||
<string name="addressbook_add_wizard_desc_destination">Kopiere den B64-Code des Ziels hier her. Falls du einen Dateimanager installiert hast, kannst du die Textdatei auswählen, welche den B64-Code enthält.</string>
|
||||
<string name="addressbook_add_wizard_desc_destination">Kopieren Sie den B64-Code des Ziels hier her. Falls Sie einen Dateimanager installiert haben, können Sie die Textdatei auswählen, welche den B64-Code enthält.</string>
|
||||
<string name="nsu_iae_illegal_char">Hostname \"%1$s\" beinhaltet ein unzulässiges Zeichen %2$s</string>
|
||||
<string name="nsu_iae_cannot_start_with">Hostnamen dürfen nicht mit \"%s\" beginnen</string>
|
||||
<string name="nsu_iae_cannot_end_with">Hostnamen dürfen nicht auf \"%s\" enden</string>
|
||||
@ -141,12 +140,14 @@
|
||||
<string name="i2ptunnel_type_streamrclient">Streamr-Klient</string>
|
||||
<string name="i2ptunnel_type_streamrserver">Streamr-Server</string>
|
||||
<string name="i2ptunnel_type_httpbidirserver">HTTP bidirektional</string>
|
||||
<string name="i2ptunnel_not_initialized">Tunnel sind noch nicht initialisiert. Bitte lade die Seite in zwei Minuten erneut.</string>
|
||||
<string name="install_recommended_app">Empfohlene App installieren?</string>
|
||||
<string name="app_needed_for_this_tunnel_type">Sie müssen eine App installieren, um diesen Tunnel nutzen zu können. Möchten Sie die empfohlene App installieren?</string>
|
||||
<string name="i2ptunnel_not_initialized">Tunnel sind noch nicht initialisiert. Bitte laden Sie die Seite in zwei Minuten erneut.</string>
|
||||
<string name="i2ptunnel_new_tunnel">Neuer Tunnel</string>
|
||||
<string name="i2ptunnel_msg_config_saved">Änderungen gespeichert</string>
|
||||
<string name="i2ptunnel_msg_config_save_failed">Speichern der Änderungen fehlgeschlagen</string>
|
||||
<string name="i2ptunnel_msg_tunnel_starting">Starte den Tunnel</string>
|
||||
<string name="i2ptunnel_msg_tunnel_stopping">Stoppe den Tunnel</string>
|
||||
<string name="i2ptunnel_msg_tunnel_starting">Tunnel wird gestartet</string>
|
||||
<string name="i2ptunnel_msg_tunnel_stopping">Tunnel wird gestoppt</string>
|
||||
<string name="i2ptunnel_delete_confirm_message">Tunnel löschen?</string>
|
||||
<string name="i2ptunnel_delete_confirm_button">Tunnel löschen</string>
|
||||
<string name="i2ptunnel_wizard_k_client_server">Klient oder Server</string>
|
||||
@ -159,19 +160,19 @@
|
||||
<string name="i2ptunnel_wizard_k_outproxies">Outproxys</string>
|
||||
<string name="i2ptunnel_wizard_k_target_host">Zielhost</string>
|
||||
<string name="i2ptunnel_wizard_k_target_port">Zielport</string>
|
||||
<string name="i2ptunnel_wizard_k_reachable_on">erreichbar unter</string>
|
||||
<string name="i2ptunnel_wizard_k_binding_port">zu benutzender Port</string>
|
||||
<string name="i2ptunnel_wizard_k_reachable_on">Erreichbar unter</string>
|
||||
<string name="i2ptunnel_wizard_k_binding_port">Zu benutzender Port</string>
|
||||
<string name="i2ptunnel_wizard_k_auto_start">Autostart</string>
|
||||
<string name="next">Nächste</string>
|
||||
<string name="prev">Vorherige</string>
|
||||
<string name="finish">Absenden</string>
|
||||
<string name="review">Überprüfen</string>
|
||||
<string name="enabled">Aktiviert</string>
|
||||
<string name="i2ptunnel_wizard_desc_name">Der Name des Tunnels - zur Unterscheidung in der Tunnelliste.</string>
|
||||
<string name="i2ptunnel_wizard_desc_desc">Eine optionale aber für dich aussagekräftige Beschreibung des Tunnels.</string>
|
||||
<string name="i2ptunnel_wizard_desc_dest">Bitte gib hier das I2P-Ziel des Dienstes ein, zu dem dieser Tunnel führen soll. Dies kann im Basis64-Format (langer Schlüssel) geschehen, oder eine I2P URL aus dem Adressbuch sein.</string>
|
||||
<string name="i2ptunnel_wizard_desc_outproxies">Falls du Outproxys für diese Tunnel-Art kennst (HTTP oder SOCKS), gib sie hier kommagetrennt ein.</string>
|
||||
<string name="i2ptunnel_wizard_desc_target_host">Das ist die IP unter der der Dienst erreichbar ist - meistens die 127.0.0.1</string>
|
||||
<string name="i2ptunnel_wizard_desc_name">Der Name des Tunnels zur Erkennung in der Tunnelliste.</string>
|
||||
<string name="i2ptunnel_wizard_desc_desc">Eine optionale, aber für Sie aussagekräftige Beschreibung des Tunnels.</string>
|
||||
<string name="i2ptunnel_wizard_desc_dest">Bitte geben Sie hier das I2P-Ziel des Dienstes ein, zu dem dieser Tunnel führen soll. Dies kann ein voller Basis64-Zielschlüssel oder eine I2P URL aus dem Adressbuch sein.</string>
|
||||
<string name="i2ptunnel_wizard_desc_outproxies">Falls Sie Outproxys für diese Tunnelart kennen (entweder HTTP oder SOCKS), geben Sie sie hier ein. Trennen Sie mehrere Proxies mit Kommas.</string>
|
||||
<string name="i2ptunnel_wizard_desc_target_host">Das ist die IP, unter der der Dienst erreichbar ist. Normalerweise ist er auf der gleichen Maschine, also wird 127.0.0.1 automatisch ausgefüllt.</string>
|
||||
<string name="i2ptunnel_wizard_desc_target_port">Dies ist der Port, unter dem der Dienst erreichbar ist.</string>
|
||||
<string name="i2ptunnel_wizard_desc_reachable_on">Dies legt fest, welche Computer oder Smartphones den Tunnel erreichen können.</string>
|
||||
<string name="i2ptunnel_wizard_desc_binding_port">Dies ist der Port, über den der Klient den Tunnel lokal erreichen kann. Das ist auch der Klient-Port des bidirektionalen HTTP-Server-Tunnels.</string>
|
||||
|
@ -8,7 +8,6 @@
|
||||
<string name="label_tunnels">Túneles</string>
|
||||
<string name="label_status">Estado</string>
|
||||
<string name="label_addressbook">Libreta de direcciones</string>
|
||||
<string name="label_i2ptunnel">I2PTunnel</string>
|
||||
<string name="label_i2ptunnel_client">Túneles de cliente</string>
|
||||
<string name="label_i2ptunnel_server">Túneles de servidor</string>
|
||||
<string name="label_logs">Registros</string>
|
||||
@ -69,6 +68,8 @@
|
||||
<string name="settings_enable">Activar</string>
|
||||
<string name="settings_desc_subscriptions">URLs de subscripción</string>
|
||||
<string name="settings_label_bandwidth_net">Ancho de banda y red</string>
|
||||
<string name="settings_label_startOnBoot">Iniciar I2P al arrancar</string>
|
||||
<string name="settings_desc_startOnBoot">Conectar automáticamente a I2P cuando arranque su dispositivo Android</string>
|
||||
<string name="settings_label_bandwidth">Ancho de banda</string>
|
||||
<string name="settings_label_bw_inbound">Velocidad de descarga</string>
|
||||
<string name="settings_desc_bw_inbound">Velocidad máxima de descarga</string>
|
||||
@ -141,6 +142,8 @@
|
||||
<string name="i2ptunnel_type_streamrclient">Cliente Streamr</string>
|
||||
<string name="i2ptunnel_type_streamrserver">Servidor Streamr</string>
|
||||
<string name="i2ptunnel_type_httpbidirserver">HTTP bidireccional</string>
|
||||
<string name="install_recommended_app">¿Instalar aplicación recomendada?</string>
|
||||
<string name="app_needed_for_this_tunnel_type">Tiene que instalar una aplicación para usar este túnel. ¿Desea instalar la aplicación recomendada?</string>
|
||||
<string name="i2ptunnel_not_initialized">Los túneles no están inicializados aún, por favor vuelva a cargar en dos minutos.</string>
|
||||
<string name="i2ptunnel_new_tunnel">Nuevo túnel</string>
|
||||
<string name="i2ptunnel_msg_config_saved">Se guardaron los cambios en la configuración </string>
|
||||
@ -189,4 +192,5 @@
|
||||
<string name="error_logs_copied_to_clipboard">Los registros (logs) de errores se copiaron al portapapeles</string>
|
||||
<string name="logs_copied_to_clipboard">Los registros (logs) se copiaron al portapapeles</string>
|
||||
<string name="label_browser_configuration">Configuración del navegador</string>
|
||||
<string name="unset">No configurado</string>
|
||||
</resources>
|
||||
|
120
app/src/main/res/values-fi/strings.xml
Normal file
120
app/src/main/res/values-fi/strings.xml
Normal file
@ -0,0 +1,120 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<resources>
|
||||
<string name="app_name">I2P</string>
|
||||
<string name="desc_i2p_logo">I2P-logo</string>
|
||||
<string name="welcome_new_install">Tervetuloa I2P-sovellukseen! Täsmä sovellus on ALFA-ohjelmisto ja se ei tarjoa vahvaa nimettömyyttä. Lue julkaisutiedot ja linsessitiedot.</string>
|
||||
<string name="welcome_new_version">Uusi versio asennettu. Lue julkaisutiedot. Versio:</string>
|
||||
<string name="label_tunnels">Tunnelit</string>
|
||||
<string name="label_status">Tila</string>
|
||||
<string name="label_addressbook">Osoitekirja</string>
|
||||
<string name="label_i2ptunnel_client">Asiakastunnelit</string>
|
||||
<string name="label_i2ptunnel_server">Palvelintunnelit</string>
|
||||
<string name="label_logs">Lokitiedostot</string>
|
||||
<string name="label_error_logs">Virhelokitiedostot</string>
|
||||
<string name="label_info_and_pages">Tietoja ja sivut</string>
|
||||
<string name="label_welcome_page">Tervetuloa-sivu</string>
|
||||
<string name="label_news">Uutiset</string>
|
||||
<string name="label_release_notes">Julkaisutiedot</string>
|
||||
<string name="label_licenses">Lisenssit</string>
|
||||
<string name="label_nonanon_info">Ei-anonyymit tiedot</string>
|
||||
<string name="label_browse">Selaa</string>
|
||||
<string name="label_graphs">Kuvaajat</string>
|
||||
<string name="button_router_off">Pitkä painallus käynnistää I2P-sovelluksen</string>
|
||||
<string name="button_router_on">I2P on käynnissä (paina pitkään pysäyttääksesi)</string>
|
||||
<!--Character to indicate a client tunnel. Usually first letter of the word "client".-->
|
||||
<string name="char_client_tunnel">A</string>
|
||||
<!--Character to indicate a server tunnel. Usually first letter of the word "server".-->
|
||||
<string name="char_server_tunnel">P</string>
|
||||
<string name="no_client_tunnels_running">Yhtään asiakastunneli ei ole vielä käynnissä.</string>
|
||||
<string name="configure_browser_title">Asetetaanko selain?</string>
|
||||
<string name="configure_browser_for_i2p">Haluaisitko asettaa selaimesi katsomaan I2P-sivustoja? (Voit myös tehdä tämän myöhemmin opaste-valikosta).</string>
|
||||
<string name="first_start_title">Onnittelut I2P:n asentamisesta!</string>
|
||||
<string name="first_start_welcome"><b>Tervetuloa I2P-sovellukseen!</b> <b>Ole kärsivällinen</b> kun I2P käynnistyy ja löytää vertaisverkkovastaanottajia.</string>
|
||||
<string name="first_start_read">Odottaessa lue julkaisutiedot ja tervetuloa-sivu.</string>
|
||||
<string name="first_start_faq">Kun asiakastunnelit ovat valmiit, <b>tarkista</b> UKK-kysymykset:</string>
|
||||
<string name="first_start_faq_nonanon">Tai käytä ei-anonyymeja linkkejä, jos et halua odottaa tunneleita:</string>
|
||||
<string name="action_search">Haku</string>
|
||||
<string name="action_add">Lisää</string>
|
||||
<string name="action_edit">Muokkaa</string>
|
||||
<string name="action_delete">Poista</string>
|
||||
<string name="action_router_start">Käynnistä reititin</string>
|
||||
<string name="action_router_stop">Pysäytä reititin</string>
|
||||
<string name="action_i2ptunnel_start">Käynnistä tunneli</string>
|
||||
<string name="action_i2ptunnel_stop">Pysäytä tunneli</string>
|
||||
<string name="action_i2ptunnel_start_all">Käynnistä kaikki tunnelit</string>
|
||||
<string name="action_i2ptunnel_stop_all">Pysäytä kaikki tunnelit</string>
|
||||
<string name="action_i2ptunnel_restart_all">Käynnistä kaikki tunnelit uudelleen</string>
|
||||
<string name="action_reload">Lataa uudelleen</string>
|
||||
<string name="action_refresh">Virkistä</string>
|
||||
<string name="hint_search_addressbook">Etsi osoitekirja</string>
|
||||
<string name="router_not_running">Reititin ei ole käynnissä.</string>
|
||||
<string name="notification_status_bw">Kaistanleveys: %1$s kilotavua/s alaspäin / %2$s kilotavua/s ylöspäin</string>
|
||||
<string name="notification_status_peers">Vertaisverkkovastaanottajaa: %1$d aktiivista, %2$d tunnettua</string>
|
||||
<string name="notification_status_client">Asiakastunnelit: %1$d/%2$d</string>
|
||||
<string name="menu_settings">Asetukset</string>
|
||||
<string name="settings_enable">Ota käyttöön</string>
|
||||
<string name="settings_label_bandwidth_net">Kaistanleveys ja verkko</string>
|
||||
<string name="settings_label_bandwidth">Kaistanleveys</string>
|
||||
<string name="settings_label_bw_inbound">Tulonopeus</string>
|
||||
<string name="settings_desc_bw_inbound">Enimmäistulonopeus</string>
|
||||
<string name="settings_label_bw_outbound">Lähtönopeus</string>
|
||||
<string name="settings_desc_bw_outbound">Enimmäislähtönopeus</string>
|
||||
<string name="settings_label_network">Verkko</string>
|
||||
<string name="settings_desc_hiddenMode">Käännä piilotila pois päältä</string>
|
||||
<string name="settings_label_showStats">Reititintilastot</string>
|
||||
<string name="settings_label_maxConns">Yhteyksien enimmäismäärä</string>
|
||||
<string name="settings_label_i2cp">I2CP-käyttöliittymä</string>
|
||||
<string name="settings_desc_i2cp">Kuuntele portissa 7654</string>
|
||||
<string name="settings_desc_exploratory_pool">Tunneliparametrit</string>
|
||||
<string name="settings_label_expl_inbound">Tulotunnelit</string>
|
||||
<string name="settings_label_expl_outbound">Lähtötunnelit</string>
|
||||
<string name="settings_label_expl_length">Pituus</string>
|
||||
<string name="settings_summ_expl_lengthVariance">%s</string>
|
||||
<string name="settings_summ_expl_quantity">%s tunnelia</string>
|
||||
<string name="settings_desc_expl_quantity">Kuinka monta tunnelia</string>
|
||||
<string name="settings_summ_expl_backupQuantity">%s tunnelia</string>
|
||||
<string name="menu_about">Ohjelmasta</string>
|
||||
<string name="about_version">Versio:</string>
|
||||
<string name="about_project">Hankekoti:</string>
|
||||
<string name="about_helpwanted">Etsitään apua!</string>
|
||||
<string name="menu_help">Opaste</string>
|
||||
<string name="general">Yleistä</string>
|
||||
<string name="addressbook_add_wizard_k_name">Nimi</string>
|
||||
<string name="addressbook_add_wizard_k_destination">Kohde</string>
|
||||
<string name="addressbook_add_wizard_desc_name">Nimi</string>
|
||||
<string name="i2ptunnel_type_httpclient">HTTP-asiakas</string>
|
||||
<string name="i2ptunnel_type_ircclient">IRC-asiakas</string>
|
||||
<string name="i2ptunnel_type_server">Vakiopalvelin</string>
|
||||
<string name="i2ptunnel_type_httpserver">HTTP-palvelin</string>
|
||||
<string name="i2ptunnel_type_ircserver">IRC-palvelin</string>
|
||||
<string name="i2ptunnel_new_tunnel">Uusi tunneli</string>
|
||||
<string name="i2ptunnel_msg_tunnel_starting">Käynnistetään tunneli</string>
|
||||
<string name="i2ptunnel_msg_tunnel_stopping">Pysäytetään tunneli</string>
|
||||
<string name="i2ptunnel_delete_confirm_message">Poistetaanko tunneli?</string>
|
||||
<string name="i2ptunnel_delete_confirm_button">Poista tunneli</string>
|
||||
<string name="i2ptunnel_wizard_k_client_server">Asiakas tai palvelin</string>
|
||||
<string name="i2ptunnel_wizard_v_client">Asiakastunneli</string>
|
||||
<string name="i2ptunnel_wizard_v_server">Palvelintunneli</string>
|
||||
<string name="i2ptunnel_wizard_k_type">Tunnelityyppi</string>
|
||||
<string name="i2ptunnel_wizard_k_name">Nimi</string>
|
||||
<string name="i2ptunnel_wizard_k_desc">Kuvaus</string>
|
||||
<string name="i2ptunnel_wizard_k_dest">Kohde</string>
|
||||
<string name="i2ptunnel_wizard_k_target_host">Kohdetietokone</string>
|
||||
<string name="i2ptunnel_wizard_k_target_port">Kohdeportti</string>
|
||||
<string name="next">Seuraava</string>
|
||||
<string name="prev">Edellinen</string>
|
||||
<string name="finish">Lähetä</string>
|
||||
<string name="review">Katselmoi</string>
|
||||
<string name="enabled">Otettu käyttöön</string>
|
||||
<string name="i2ptunnel_wizard_submit_confirm_message">Luodaanko tunneli?</string>
|
||||
<string name="i2ptunnel_wizard_submit_confirm_button">Luo tunneli</string>
|
||||
<string name="i2ptunnel_view_type">Tyyppi:</string>
|
||||
<string name="i2ptunnel_view_desc">Kuvaus:</string>
|
||||
<string name="i2ptunnel_view_target">Kohde:</string>
|
||||
<string name="copy_logs">Kopioi lokitiedostot</string>
|
||||
<string name="i2p_android_error_logs">I2P Android-virhelokitiedostot</string>
|
||||
<string name="i2p_android_logs">I2P Android-lokitiedostot</string>
|
||||
<string name="error_logs_copied_to_clipboard">Virhelokitiedostot kopoitu leikepöydälle</string>
|
||||
<string name="logs_copied_to_clipboard">Lokitiedostot kopioitu leikepöydälle</string>
|
||||
<string name="label_browser_configuration">Selainasetukset</string>
|
||||
</resources>
|
@ -8,7 +8,6 @@
|
||||
<string name="label_tunnels">Tunnels</string>
|
||||
<string name="label_status">Statut</string>
|
||||
<string name="label_addressbook">Carnet d\'adresses</string>
|
||||
<string name="label_i2ptunnel">I2PTunnel</string>
|
||||
<string name="label_i2ptunnel_client">Tunnels client</string>
|
||||
<string name="label_i2ptunnel_server">Tunnels serveur</string>
|
||||
<string name="label_logs">Logs</string>
|
||||
@ -69,6 +68,8 @@
|
||||
<string name="settings_enable">Activer</string>
|
||||
<string name="settings_desc_subscriptions">URLs d\'abonnement</string>
|
||||
<string name="settings_label_bandwidth_net">Bande passante et réseau</string>
|
||||
<string name="settings_label_startOnBoot">Démarrer I2P lors du boot</string>
|
||||
<string name="settings_desc_startOnBoot">Se connecter automatiquement à I2P lorsque votre dispositif Android démarre</string>
|
||||
<string name="settings_label_bandwidth">Bande passante</string>
|
||||
<string name="settings_label_bw_inbound">Vitesse entrante</string>
|
||||
<string name="settings_desc_bw_inbound">Vitesse entrante maximum</string>
|
||||
@ -141,6 +142,8 @@
|
||||
<string name="i2ptunnel_type_streamrclient">Client Streamr</string>
|
||||
<string name="i2ptunnel_type_streamrserver">Serveur Streamr</string>
|
||||
<string name="i2ptunnel_type_httpbidirserver">Bidir HTTP</string>
|
||||
<string name="install_recommended_app">Installer l\'app recommandée ?</string>
|
||||
<string name="app_needed_for_this_tunnel_type">Vous devez installer une app pour utiliser ce tunnel. Voudriez-vous installer l\'app recommandée ?</string>
|
||||
<string name="i2ptunnel_not_initialized">Les tunnels ne sont pas encore initialisés, veuillez recharger dans deux minutes.</string>
|
||||
<string name="i2ptunnel_new_tunnel">Nouveau tunnel</string>
|
||||
<string name="i2ptunnel_msg_config_saved">Changements de configuration sauvegardés</string>
|
||||
@ -189,4 +192,5 @@
|
||||
<string name="error_logs_copied_to_clipboard">Les historiques des erreurs ont été copiés dans le presse-papier</string>
|
||||
<string name="logs_copied_to_clipboard">Les historiques ont été copiés dans le presse-papier</string>
|
||||
<string name="label_browser_configuration">Configuration du navigateur</string>
|
||||
<string name="unset">Démettre</string>
|
||||
</resources>
|
||||
|
@ -8,7 +8,6 @@
|
||||
<string name="label_tunnels">Saluran</string>
|
||||
<string name="label_status">Status</string>
|
||||
<string name="label_addressbook">Buku alamat</string>
|
||||
<string name="label_i2ptunnel">I2PTunnel</string>
|
||||
<string name="label_i2ptunnel_client">Saluran klien</string>
|
||||
<string name="label_i2ptunnel_server">Saluran server</string>
|
||||
<string name="label_logs">Log</string>
|
||||
|
@ -8,7 +8,6 @@
|
||||
<string name="label_tunnels">Tunnel</string>
|
||||
<string name="label_status">Stato</string>
|
||||
<string name="label_addressbook">Rubrica</string>
|
||||
<string name="label_i2ptunnel">I2PTunnel</string>
|
||||
<string name="label_i2ptunnel_client">I tunnel del client</string>
|
||||
<string name="label_i2ptunnel_server">I tunnel del server</string>
|
||||
<string name="label_logs">Logs</string>
|
||||
|
@ -8,7 +8,6 @@
|
||||
<string name="label_tunnels">トンネル</string>
|
||||
<string name="label_status">ステータス</string>
|
||||
<string name="label_addressbook">アドレス帳</string>
|
||||
<string name="label_i2ptunnel">I2P トンネル</string>
|
||||
<string name="label_i2ptunnel_client">クライアントトンネル</string>
|
||||
<string name="label_i2ptunnel_server">サーバートンネル</string>
|
||||
<string name="label_logs">ログ</string>
|
||||
@ -25,7 +24,12 @@
|
||||
<string name="button_router_off">長押しして I2P を起動</string>
|
||||
<string name="button_router_on">I2P を起動中 (長押しで中止)</string>
|
||||
<!--Character to indicate a client tunnel. Usually first letter of the word "client".-->
|
||||
<string name="char_client_tunnel">C</string>
|
||||
<!--Character to indicate a server tunnel. Usually first letter of the word "server".-->
|
||||
<string name="char_server_tunnel">S</string>
|
||||
<string name="no_client_tunnels_running">まだクライアントトンネルは起動していません。</string>
|
||||
<string name="configure_browser_title">ブラウザの設定をしますか?</string>
|
||||
<string name="configure_browser_for_i2p">I2Pサイトを見るためにブラウザを設定しますか?(あとでヘルプメニューからも設定できます)</string>
|
||||
<string name="first_start_title">I2P のインストールおめでとうございます!</string>
|
||||
<string name="first_start_welcome"><b>I2P へようこそ!</b> I2P が立ち上がり、ピアを見つけるまで<b>我慢してください</b>。</string>
|
||||
<string name="first_start_read">待っている間、リリースノートとウェルカムページをお読みください。</string>
|
||||
@ -51,6 +55,8 @@
|
||||
<string name="action_reload_subscriptions">購読を再読込</string>
|
||||
<string name="router_not_running">ルーターが起動していません。</string>
|
||||
<string name="stats_not_ready">統計マネージャーはまだ準備出来ていません。後でやり直してください。</string>
|
||||
<string name="no_graphs_configured">グラフは設定されていません。設定でどの統計をグラフにするか選択できます。すべての変更は60秒後に有効になります</string>
|
||||
<string name="configure_graphs">グラフ設定</string>
|
||||
<string name="graphs_not_ready">グラフが準備出来ていない、あるいはルーターが起動していません。後でもう一度やり直してください。</string>
|
||||
<string name="netdb_routers_empty">NetDB にルーターがありません。</string>
|
||||
<string name="netdb_leases_empty">NetDB にリースセットがありません。</string>
|
||||
@ -102,6 +108,7 @@
|
||||
<string name="settings_label_expl_backupQuantity">バックアップの数量</string>
|
||||
<string name="settings_summ_expl_backupQuantity">%s トンネル</string>
|
||||
<string name="settings_desc_expl_backupQuantity">トンネルバックアップの数</string>
|
||||
<string name="settings_router_restart_required">設定を適用するためにI2Pを再起動してください</string>
|
||||
<string name="menu_about">アバウト</string>
|
||||
<string name="about_version">バージョン:</string>
|
||||
<string name="about_project">プロジェクトホーム:</string>
|
||||
@ -110,6 +117,7 @@
|
||||
<string name="about_volunteer">アプリの改善を手伝いたいですか? Android フォーラム上でボランティア:</string>
|
||||
<string name="about_donate">開発や試験用にさらに Android デバイスを購入するために、お金や Bitcoin を寄付していただけますか? こちらです:</string>
|
||||
<string name="menu_help">ヘルプ</string>
|
||||
<string name="general">一般</string>
|
||||
<string name="addressbook_search_header">%s 検出</string>
|
||||
<string name="addressbook_add_wizard_k_name">名前</string>
|
||||
<string name="addressbook_add_wizard_k_destination">宛先</string>
|
||||
@ -132,6 +140,8 @@
|
||||
<string name="i2ptunnel_type_streamrclient">Streamr クライアント</string>
|
||||
<string name="i2ptunnel_type_streamrserver">Streamr サーバー</string>
|
||||
<string name="i2ptunnel_type_httpbidirserver">HTTP 双方向</string>
|
||||
<string name="install_recommended_app">推奨アプリをインストールしますか?</string>
|
||||
<string name="app_needed_for_this_tunnel_type">このトンネルを使用するには推奨アプリをインストールする必要があります。インストールしますか?</string>
|
||||
<string name="i2ptunnel_not_initialized">トンネルはまだ初期化されていません、2分後に再読み込みしてください。</string>
|
||||
<string name="i2ptunnel_new_tunnel">新規トンネル</string>
|
||||
<string name="i2ptunnel_msg_config_saved">構成の変更が保存されました</string>
|
||||
@ -174,4 +184,10 @@
|
||||
<string name="i2ptunnel_view_target">ターゲット:</string>
|
||||
<string name="i2ptunnel_view_access_point">アクセスポイント:</string>
|
||||
<string name="i2ptunnel_view_autostart">自動開始</string>
|
||||
<string name="copy_logs">ログをコピー</string>
|
||||
<string name="i2p_android_error_logs">I2PAndroidエラーログ</string>
|
||||
<string name="i2p_android_logs">I2PAndroidログ</string>
|
||||
<string name="error_logs_copied_to_clipboard">エラーログはクリップボードにコピーされました</string>
|
||||
<string name="logs_copied_to_clipboard">ログはクリップボードにコピーされました</string>
|
||||
<string name="label_browser_configuration">ブラウザ設定</string>
|
||||
</resources>
|
||||
|
@ -8,7 +8,6 @@
|
||||
<string name="label_tunnels">터널들</string>
|
||||
<string name="label_status">상태</string>
|
||||
<string name="label_addressbook">주소록</string>
|
||||
<string name="label_i2ptunnel">I2P터널</string>
|
||||
<string name="label_i2ptunnel_client">클라이언트 터널들</string>
|
||||
<string name="label_i2ptunnel_server">서버 터널들</string>
|
||||
<string name="label_logs">로그</string>
|
||||
@ -69,6 +68,8 @@
|
||||
<string name="settings_enable">활성화</string>
|
||||
<string name="settings_desc_subscriptions">구독 URL들</string>
|
||||
<string name="settings_label_bandwidth_net">대역폭과 네트워크</string>
|
||||
<string name="settings_label_startOnBoot">부트시 I2P 실행</string>
|
||||
<string name="settings_desc_startOnBoot">안드로이드 기기가 시작될 때 I2P에 자동으로 연결</string>
|
||||
<string name="settings_label_bandwidth">대역폭</string>
|
||||
<string name="settings_label_bw_inbound">수신 속도</string>
|
||||
<string name="settings_desc_bw_inbound">최대 수신 속도</string>
|
||||
@ -141,6 +142,8 @@
|
||||
<string name="i2ptunnel_type_streamrclient">Streamr 클라이언트</string>
|
||||
<string name="i2ptunnel_type_streamrserver">Streamr 서버</string>
|
||||
<string name="i2ptunnel_type_httpbidirserver">HTTP bidir</string>
|
||||
<string name="install_recommended_app">권장 앱을 설치할까요?</string>
|
||||
<string name="app_needed_for_this_tunnel_type">이 터널을 이용하기 위해서는 앱을 설치해야 합니다. 권장 앱을 설치할까요?</string>
|
||||
<string name="i2ptunnel_not_initialized">터널이 아직 시작되지 않았습니다. 2분 후에 다시 로드하세요.</string>
|
||||
<string name="i2ptunnel_new_tunnel">새 터널</string>
|
||||
<string name="i2ptunnel_msg_config_saved">설정 변경 저장됨</string>
|
||||
@ -189,4 +192,5 @@
|
||||
<string name="error_logs_copied_to_clipboard">클립보드에 오류 로그 복사됨</string>
|
||||
<string name="logs_copied_to_clipboard">클립보드에 로그 복사됨</string>
|
||||
<string name="label_browser_configuration">브라우저 설정</string>
|
||||
<string name="unset">미설정</string>
|
||||
</resources>
|
||||
|
@ -8,7 +8,6 @@
|
||||
<string name="label_tunnels">Tunneler</string>
|
||||
<string name="label_status">Status</string>
|
||||
<string name="label_addressbook">Adressebok</string>
|
||||
<string name="label_i2ptunnel">I2P-Tunnel</string>
|
||||
<string name="label_i2ptunnel_client">Klient-tunneler</string>
|
||||
<string name="label_i2ptunnel_server">Tjener-tunneler</string>
|
||||
<string name="label_logs">Logger</string>
|
||||
@ -141,6 +140,8 @@
|
||||
<string name="i2ptunnel_type_streamrclient">Streamr-klient</string>
|
||||
<string name="i2ptunnel_type_streamrserver">Streamr-tjener</string>
|
||||
<string name="i2ptunnel_type_httpbidirserver">HTTP bidir</string>
|
||||
<string name="install_recommended_app">Installere anbefalt app?</string>
|
||||
<string name="app_needed_for_this_tunnel_type">Du trenger å installere en app for å bruke denne tunnelen. Vil du installere den anbefalte appen?</string>
|
||||
<string name="i2ptunnel_not_initialized">Tunneler er ikke klargjort enda, vennligst last inn på nytt om to minutter.</string>
|
||||
<string name="i2ptunnel_new_tunnel">Ny Tunnel</string>
|
||||
<string name="i2ptunnel_msg_config_saved">Konfigurasjonsendringer lagret</string>
|
||||
|
@ -4,10 +4,10 @@
|
||||
<string name="desc_i2p_logo">I2P logo</string>
|
||||
<string name="welcome_new_install">Welkom op I2P! Deze app heeft de ALPHA status en het biedt geen sterke anonimiteit. Lees de releaseopmerkingen en licentie-informatie.</string>
|
||||
<string name="welcome_new_version">Nieuwe versie geïnstalleerd. Lees de releaseopmerkingen. Versie:</string>
|
||||
<string name="label_home">Instellingen en Status</string>
|
||||
<string name="label_tunnels">Tunnels</string>
|
||||
<string name="label_status">Status</string>
|
||||
<string name="label_addressbook">Adresboek</string>
|
||||
<string name="label_i2ptunnel">I2PTunnel</string>
|
||||
<string name="label_i2ptunnel_client">Cliënt tunnels</string>
|
||||
<string name="label_i2ptunnel_server">Server tunnels</string>
|
||||
<string name="label_logs">Logboeken</string>
|
||||
@ -24,7 +24,12 @@
|
||||
<string name="button_router_off">Lang drukken om I2P te starten</string>
|
||||
<string name="button_router_on">I2P is actief (lang drukken om te stoppen)</string>
|
||||
<!--Character to indicate a client tunnel. Usually first letter of the word "client".-->
|
||||
<string name="char_client_tunnel">C</string>
|
||||
<!--Character to indicate a server tunnel. Usually first letter of the word "server".-->
|
||||
<string name="char_server_tunnel">S</string>
|
||||
<string name="no_client_tunnels_running">Er draaien nog geen client tunnels.</string>
|
||||
<string name="configure_browser_title">Browser instellen?</string>
|
||||
<string name="configure_browser_for_i2p">Wil je een browser instellen om I2P-sites te kunnen bekijken? (Je kan dit ook later doen vanuit het help-menu.)</string>
|
||||
<string name="first_start_title">Gefeliciteerd met de installatie van I2P!</string>
|
||||
<string name="first_start_welcome"><b>Welkom bij I2P! Heb geduld alstublieft</b> terwijl I2P opstart en peers zoekt.</string>
|
||||
<string name="first_start_read">Terwijl je wacht, lees alstublieft de release aantekeningen en welkom pagina.</string>
|
||||
@ -49,15 +54,22 @@
|
||||
<string name="hint_search_addressbook">Zoeken in adresboek</string>
|
||||
<string name="action_reload_subscriptions">Vernieuw abonnementen</string>
|
||||
<string name="router_not_running">De router is uit.</string>
|
||||
<string name="stats_not_ready">De statistiekenbeheerder is nog niet klaar. Probeer het later opnieuw.</string>
|
||||
<string name="no_graphs_configured">Geen grafieken ingesteld. Je kan de statistieken om in grafieken weer te geven instellen in het instellingenmenu. Alle wijzigingen vinden plaats na 60 seconden.</string>
|
||||
<string name="configure_graphs">Grafieken instellen</string>
|
||||
<string name="graphs_not_ready">Grafieken zijn niet klaar, of de router staat uit. Probeer het later opnieuw.</string>
|
||||
<string name="netdb_routers_empty">Geen routers in je NetDB.</string>
|
||||
<string name="netdb_leases_empty">Geen LeaseSets in je NetDB.</string>
|
||||
<string name="notification_status_bw">Bandbreedte: %1$s KBps down / %2$s KBps up</string>
|
||||
<string name="notification_status_peers">Peers: %1$d actief, %2$d bekend</string>
|
||||
<string name="notification_status_expl">Verkennende tunnels: %1$d/%2$d</string>
|
||||
<string name="notification_status_client">Cliënt tunnels: %1$d/%2$d</string>
|
||||
<string name="menu_settings">Instellingen</string>
|
||||
<string name="settings_enable">Inschakelen</string>
|
||||
<string name="settings_desc_subscriptions">URL\'s van abbonementen</string>
|
||||
<string name="settings_label_bandwidth_net">Bandbreedte en netwerk</string>
|
||||
<string name="settings_label_startOnBoot">I2P starten bij opstarten van toestel</string>
|
||||
<string name="settings_desc_startOnBoot">Automatisch verbinden met I2P wanneer je Android-toestel opstart</string>
|
||||
<string name="settings_label_bandwidth">Bandbreedte</string>
|
||||
<string name="settings_label_bw_inbound">Binnenkomende snelheid</string>
|
||||
<string name="settings_desc_bw_inbound">Maximale binnenkomende snelheid</string>
|
||||
@ -87,8 +99,10 @@
|
||||
<string name="settings_label_expl_inbound">Inkomende tunnels</string>
|
||||
<string name="settings_label_expl_outbound">Uitgaande tunnels</string>
|
||||
<string name="settings_label_expl_length">Lengte</string>
|
||||
<string name="settings_summ_expl_length">%s hops</string>
|
||||
<string name="settings_desc_expl_length">Hoeveel \'hops\' te gebruiken</string>
|
||||
<string name="settings_label_expl_lengthVariance">\'Hop\'-variantie</string>
|
||||
<string name="settings_summ_expl_lengthVariance">%s</string>
|
||||
<string name="settings_desc_expl_lengthVariance">Hoeveel willekeurig toe te voegen \'hops\'</string>
|
||||
<string name="settings_label_expl_quantity">Hoeveelheid</string>
|
||||
<string name="settings_summ_expl_quantity">%s tunnels</string>
|
||||
@ -96,17 +110,26 @@
|
||||
<string name="settings_label_expl_backupQuantity">Back-up hoeveelheid</string>
|
||||
<string name="settings_summ_expl_backupQuantity">%s tunnels</string>
|
||||
<string name="settings_desc_expl_backupQuantity">Hoeveel tunnel back-ups</string>
|
||||
<string name="settings_router_restart_required">Herstart I2P om de instellingen toe te passen</string>
|
||||
<string name="menu_about">Over</string>
|
||||
<string name="about_version">Versie:</string>
|
||||
<string name="about_project">Project Home:</string>
|
||||
<string name="about_bugs">Bugs en Ondersteuning:</string>
|
||||
<string name="about_helpwanted">Hulp Gezocht!</string>
|
||||
<string name="about_volunteer">Wil je vrijwillig helpen de app beter te maken? Kijk op het Android forum:</string>
|
||||
<string name="about_donate">Wil je geld of bitcoins doneren zodat we op meer Android telefoons kunnen ontwikkelen en testen? Ga naar:</string>
|
||||
<string name="menu_help">Help</string>
|
||||
<string name="general">Algemeen</string>
|
||||
<string name="addressbook_search_header">%s gevonden</string>
|
||||
<string name="addressbook_add_wizard_k_name">Naam</string>
|
||||
<string name="addressbook_add_wizard_k_destination">Bestemming</string>
|
||||
<string name="addressbook_add_wizard_desc_name">De naam</string>
|
||||
<string name="addressbook_add_wizard_desc_destination">Plak de B64 van de bestemming hier. Als je een bestand manager geïnstalleerd hebt, kan je het tekst bestand met de B64 zoeken.</string>
|
||||
<string name="nsu_iae_illegal_char">Hostnaam \"%1$s\" bevat een illegaal karakter %2$s</string>
|
||||
<string name="nsu_iae_cannot_start_with">Hostnaam kan niet beginnen met \"%s\"</string>
|
||||
<string name="nsu_iae_cannot_end_with">Hostnaam kan niet eindigen met \"%s\"</string>
|
||||
<string name="nsu_iae_cannot_contain">Hostnaam kan \"%s\" niet bevatten</string>
|
||||
<string name="nsu_iae_requires_conversion">Hostnaam \"%s\" vereist conversie naar ASCII, maar de conversie-bibliotheek is niet beschikbaar in deze Android-versie</string>
|
||||
<string name="i2ptunnel_type_client">Standaard cliënt</string>
|
||||
<string name="i2ptunnel_type_httpclient">HTTP cliënt</string>
|
||||
<string name="i2ptunnel_type_ircclient">IRC cliënt</string>
|
||||
@ -119,6 +142,8 @@
|
||||
<string name="i2ptunnel_type_streamrclient">Streamr cliënt</string>
|
||||
<string name="i2ptunnel_type_streamrserver">Streamr server</string>
|
||||
<string name="i2ptunnel_type_httpbidirserver">HTTP bidir</string>
|
||||
<string name="install_recommended_app">Aanbevolen applicatie installeren?</string>
|
||||
<string name="app_needed_for_this_tunnel_type">Je moet een applicatie installeren om deze tunnel te gebruiken. Wil je de aanbevolen applicatie installeren?</string>
|
||||
<string name="i2ptunnel_not_initialized">Tunnels zijn nog niet klaar, ververs in twee minuten aub.</string>
|
||||
<string name="i2ptunnel_new_tunnel">Nieuwe tunnel</string>
|
||||
<string name="i2ptunnel_msg_config_saved">Cofiguratie veranderingen opgeslagen</string>
|
||||
@ -135,7 +160,11 @@
|
||||
<string name="i2ptunnel_wizard_k_desc">Beschrijving</string>
|
||||
<string name="i2ptunnel_wizard_k_dest">Bestemming</string>
|
||||
<string name="i2ptunnel_wizard_k_outproxies">Outproxies</string>
|
||||
<string name="i2ptunnel_wizard_k_target_host">Doelhost</string>
|
||||
<string name="i2ptunnel_wizard_k_target_port">Doelpoort</string>
|
||||
<string name="i2ptunnel_wizard_k_reachable_on">Bereikbaar op</string>
|
||||
<string name="i2ptunnel_wizard_k_binding_port">Bindende poort</string>
|
||||
<string name="i2ptunnel_wizard_k_auto_start">Automatisch starten</string>
|
||||
<string name="next">Volgende</string>
|
||||
<string name="prev">Vorige</string>
|
||||
<string name="finish">Indienen</string>
|
||||
@ -143,12 +172,25 @@
|
||||
<string name="enabled">Staat aan</string>
|
||||
<string name="i2ptunnel_wizard_desc_name">De naam van de tunnel, voor het identificeren in de tunnel lijst.</string>
|
||||
<string name="i2ptunnel_wizard_desc_desc">Een beschrijving van de tunnel. Dit is niet verplicht maar wel informatief.</string>
|
||||
<string name="i2ptunnel_wizard_desc_dest">Typ de I2P-bestemming van de dienst in waar deze cliënt-tunnel mee moet verbinden. Dit kan de volledige base-64 bestemmingssleutel zijn, of een I2P-URL van je adresboek.</string>
|
||||
<string name="i2ptunnel_wizard_desc_outproxies">Als u outproxies kent voor dit type tunnel (HTTP of SOCKS), vul ze dan in. Scheid meerdere proxies door middel van komma\'s.</string>
|
||||
<string name="i2ptunnel_wizard_desc_target_host">Dit is het IP adres waarop je service runt, dit is meestal op dezelfde machine, dus 127.0.0.1 is standaard ingevuld.</string>
|
||||
<string name="i2ptunnel_wizard_desc_target_port">Dit is de poort waar de service verbindingen op ontvangt.</string>
|
||||
<string name="i2ptunnel_wizard_desc_reachable_on">Dit limiteert welke computers of smartphones de tunnel kunnen bereiken.</string>
|
||||
<string name="i2ptunnel_wizard_desc_binding_port">Dit is de poort vanwaar de cliënt-tunnel lokaal zal bereikt worden. Dit is ook de cliënt-poort voor de HTTP bidir server tunnel.</string>
|
||||
<string name="i2ptunnel_wizard_desc_auto_start">Moet de tunnel automatisch gestart worden als de router start?</string>
|
||||
<string name="i2ptunnel_wizard_submit_confirm_message">Tunnel aanmaken?</string>
|
||||
<string name="i2ptunnel_wizard_submit_confirm_button">Tunnel aanmaken</string>
|
||||
<string name="i2ptunnel_view_type">Type:</string>
|
||||
<string name="i2ptunnel_view_desc">Beschrijving:</string>
|
||||
<string name="i2ptunnel_view_target">Doel:</string>
|
||||
<string name="i2ptunnel_view_access_point">Toegangspunt:</string>
|
||||
<string name="i2ptunnel_view_autostart">Automatisch starten</string>
|
||||
<string name="copy_logs">Kopieer logs</string>
|
||||
<string name="i2p_android_error_logs">I2P Android Error Logs</string>
|
||||
<string name="i2p_android_logs">I2P Android Logs</string>
|
||||
<string name="error_logs_copied_to_clipboard">Error logs naar het klembord gekopieerd</string>
|
||||
<string name="logs_copied_to_clipboard">Logs naar het klembord gekopieerd</string>
|
||||
<string name="label_browser_configuration">Browserconfiguratie</string>
|
||||
<string name="unset">Niet ingesteld</string>
|
||||
</resources>
|
||||
|
@ -2,17 +2,16 @@
|
||||
<resources>
|
||||
<string name="app_name">I2P</string>
|
||||
<string name="desc_i2p_logo">Logo I2P</string>
|
||||
<string name="welcome_new_install">Witamy w I2P! Ta aplikacja jest w fazie ALPHA i nie zapewnia mocnej anonimowości. Zalecamy zapoznanie się z listą zmian i licencją. </string>
|
||||
<string name="welcome_new_install">Witamy w I2P! Aplikacja jest w fazie ALPHA i nie zapewnia mocnej anonimowości. Zalecamy zapoznanie się z listą zmian i licencją. </string>
|
||||
<string name="welcome_new_version">Nowa wersja zainstalowana. Przeczytaj listę zmian. Wersja:</string>
|
||||
<string name="label_home">Kontrola i Status</string>
|
||||
<string name="label_tunnels">Tunele</string>
|
||||
<string name="label_status">Status</string>
|
||||
<string name="label_addressbook">Książka adresowa</string>
|
||||
<string name="label_i2ptunnel">Tunel I2P</string>
|
||||
<string name="label_i2ptunnel_client">Tunele klienta</string>
|
||||
<string name="label_i2ptunnel_server">Tunele serwerów</string>
|
||||
<string name="label_logs">Logi</string>
|
||||
<string name="label_error_logs">Rejestr błędów</string>
|
||||
<string name="label_error_logs">Logi błędów</string>
|
||||
<string name="label_info_and_pages">Informacje i strony</string>
|
||||
<string name="label_welcome_page">Strona Powitalna</string>
|
||||
<string name="label_news">Wiadomości</string>
|
||||
@ -22,15 +21,20 @@
|
||||
<string name="label_nonanon_info">Nie Anonimowe Informacje</string>
|
||||
<string name="label_browse">Przeglądaj</string>
|
||||
<string name="label_graphs">Wykresy</string>
|
||||
<string name="button_router_off">Dotknij na dłużej aby uruchomić I2P</string>
|
||||
<string name="button_router_off">Przytrzymaj dłużej, aby uruchomić I2P</string>
|
||||
<string name="button_router_on">I2P jest włączone (dotknij na dłużej aby zatrzymać)</string>
|
||||
<!--Character to indicate a client tunnel. Usually first letter of the word "client".-->
|
||||
<string name="char_client_tunnel">C</string>
|
||||
<!--Character to indicate a server tunnel. Usually first letter of the word "server".-->
|
||||
<string name="first_start_title">Gratulacje w zainstalowaniu I2P!</string>
|
||||
<string name="char_server_tunnel">S</string>
|
||||
<string name="no_client_tunnels_running">Jeszcze żadne tunele klienta nie są uruchomione.</string>
|
||||
<string name="configure_browser_title">Konfigurować przeglądarkę?</string>
|
||||
<string name="configure_browser_for_i2p">Czy chciałbyś skonfigurować przeglądarkę, aby przeglądać strony I2P? (Możesz to zrobić później w wybierająć pomoc z menu.)</string>
|
||||
<string name="first_start_title">Gratulacje, zainstalowałeś I2P!</string>
|
||||
<string name="first_start_welcome"><b>Witamy w I2P!</b> Proszę <b>bądz cierpliwy</b> bo I2P właśnie się uruchamia i szuka peerów.</string>
|
||||
<string name="first_start_read">W międzyczasie, prosimy o zapoznanie się z notatkami tego wydania oraz stroną powitalną.</string>
|
||||
<string name="first_start_faq">Kiedy będziesz miał tunele klienta proszę <b>sprawdź</b> nasze FAQ:</string>
|
||||
<string name="first_start_faq_nonanon">Also użyj tych nie-anonimowych linków jeśli nie chcesz czekać na tunele:</string>
|
||||
<string name="first_start_faq">Kiedy już będziesz miał tunele klienta proszę <b>sprawdź</b> nasze FAQ:</string>
|
||||
<string name="first_start_faq_nonanon">Also użyj tego nie-anonimowego linka jeśli nie chcesz czekać na tunele:</string>
|
||||
<string name="first_start_irc">Skieruj swojego klienta IRC do <b>localhost:6668</b> i przywitaj się z nami na.</string>
|
||||
<string name="drawer_open">Otwórz nawigację</string>
|
||||
<string name="drawer_close">Zamknij nawigację</string>
|
||||
@ -40,8 +44,8 @@
|
||||
<string name="action_delete">Usuń</string>
|
||||
<string name="action_router_start">Uruchom Router</string>
|
||||
<string name="action_router_stop">Zatrzymaj Router</string>
|
||||
<string name="action_i2ptunnel_start">Włącz tunel</string>
|
||||
<string name="action_i2ptunnel_stop">Wyłącz tunel</string>
|
||||
<string name="action_i2ptunnel_start">Uruchom tunel</string>
|
||||
<string name="action_i2ptunnel_stop">Zatrzymaj tunel</string>
|
||||
<string name="action_i2ptunnel_start_all">Uruchom wszystkie tunele</string>
|
||||
<string name="action_i2ptunnel_stop_all">Zatrzymaj wszystkie tunele</string>
|
||||
<string name="action_i2ptunnel_restart_all">Zrestartuj wszystkie tunele</string>
|
||||
@ -73,10 +77,10 @@
|
||||
<string name="settings_label_hiddenMode">Uczestnictwo</string>
|
||||
<string name="settings_desc_hiddenMode">Wyłącz tryp ukryty</string>
|
||||
<string name="settings_label_maxPartTunnels">Maksymalna liczba uczestniczących tuneli</string>
|
||||
<string name="settings_desc_maxPartTunnels">Maksaymalna liczba tuneli uczestniczących w (domyślne=20)</string>
|
||||
<string name="settings_dialog_maxPartTunnels">Maksymalna liczba tuneli uczestniczących w</string>
|
||||
<string name="settings_label_sharePercent">Udział procentowy</string>
|
||||
<string name="settings_desc_sharePercent">Udział procentowy przepustowości do podziału (domyślne=80)</string>
|
||||
<string name="settings_desc_maxPartTunnels">Maksaymalna liczba tuneli uczestniczących (domyślnie=20)</string>
|
||||
<string name="settings_dialog_maxPartTunnels">Maksymalna liczba tuneli uczestniczących</string>
|
||||
<string name="settings_label_sharePercent">Procent podziału</string>
|
||||
<string name="settings_desc_sharePercent">Procent przepustowości do podziału (domyślnie=80)</string>
|
||||
<string name="settings_dialog_sharePercent">Procent przepustowości do podziału</string>
|
||||
<string name="settings_desc_upnp">Otwórz porty firewall\'a automatycznie</string>
|
||||
<string name="settings_label_logging">Logowanie</string>
|
||||
@ -97,29 +101,31 @@
|
||||
<string name="settings_desc_expl_length">Ile użyć skoków</string>
|
||||
<string name="settings_label_expl_lengthVariance">Wariancje skoków</string>
|
||||
<string name="settings_summ_expl_lengthVariance">%s</string>
|
||||
<string name="settings_desc_expl_lengthVariance">Ile skoków losowych dodać</string>
|
||||
<string name="settings_desc_expl_lengthVariance">Ile dodać losowych skoków</string>
|
||||
<string name="settings_label_expl_quantity">Ilość</string>
|
||||
<string name="settings_summ_expl_quantity">%s tunelów</string>
|
||||
<string name="settings_desc_expl_quantity">Ile tunelów</string>
|
||||
<string name="settings_label_expl_backupQuantity">Ilość kopii zapasowych</string>
|
||||
<string name="settings_summ_expl_backupQuantity">%s tunelów</string>
|
||||
<string name="settings_desc_expl_backupQuantity">Ilość kopii zapasowych tuneli</string>
|
||||
<string name="settings_router_restart_required">Proszę zrestartuj I2P, aby zmiany weszły w życie.</string>
|
||||
<string name="menu_about">O programie</string>
|
||||
<string name="about_version">Wersja:</string>
|
||||
<string name="about_project">Strona Projektu:</string>
|
||||
<string name="about_bugs">Błędy i wsparcie:</string>
|
||||
<string name="about_helpwanted">Potrzebna pomoc!</string>
|
||||
<string name="about_volunteer">Chcesz pomóc w ulepszeniu tej aplikacji? Zgłoś się na ochotnika na forum Android:</string>
|
||||
<string name="about_donate">Chcesz przesłać pieniądze lub bitcoiny aby zakupić więcej Androidów dla rozwoju i testowania? Idź do:</string>
|
||||
<string name="about_donate">Chcesz przesłać pieniądze lub bitcoiny, aby zakupić więcej Androidów dla rozwoju i testowania? Idź do:</string>
|
||||
<string name="menu_help">Pomoc</string>
|
||||
<string name="general">Ogólne</string>
|
||||
<string name="addressbook_search_header">%s znaleziono</string>
|
||||
<string name="addressbook_add_wizard_k_name">Nazwa</string>
|
||||
<string name="addressbook_add_wizard_k_destination">Miejsce przeznaczenia</string>
|
||||
<string name="addressbook_add_wizard_k_destination">Przeznaczenie</string>
|
||||
<string name="addressbook_add_wizard_desc_name">Nazwa</string>
|
||||
<string name="addressbook_add_wizard_desc_destination">Wklej B64 miejsca przeznaczenia tutaj. Jeśli masz menadżer plików zainstalowany, to możesz przegladać pliki tekstowe zawierające B64.</string>
|
||||
<string name="addressbook_add_wizard_desc_destination">Wklej B64 przeznaczenia tutaj. Jeśli masz zainstalowany menadżer plików to możesz przegladać pliki tekstowe zawierające B64.</string>
|
||||
<string name="nsu_iae_illegal_char">Nazwa hosta \"%1$s\" zawiera niedozwolony znak %2$s</string>
|
||||
<string name="nsu_iae_cannot_start_with">Nazwa hosta nie może zaczynać się od \"%s\"</string>
|
||||
<string name="nsu_iae_cannot_end_with">Nazwa hosta nie może kończyć się \"%s\"</string>
|
||||
<string name="nsu_iae_cannot_end_with">Nazwa hosta nie może kończyć się na \"%s\"</string>
|
||||
<string name="nsu_iae_cannot_contain">Nazwa hosta nie może zawierać \"%s\"</string>
|
||||
<string name="nsu_iae_requires_conversion">Nazwa hosta \"%s\" wymaga konwersji do ASCII, ale biblioteka konwersji jest niedostępna w tej wersji Android. </string>
|
||||
<string name="i2ptunnel_type_client">Standardowy klient</string>
|
||||
@ -134,9 +140,11 @@
|
||||
<string name="i2ptunnel_type_streamrclient">Klient Streamr</string>
|
||||
<string name="i2ptunnel_type_streamrserver">Serwer Streamr</string>
|
||||
<string name="i2ptunnel_type_httpbidirserver">HTTP bidir</string>
|
||||
<string name="install_recommended_app">Zainstalować polecone aplikacje?</string>
|
||||
<string name="app_needed_for_this_tunnel_type">Musisz zainstalować aplikację, aby użyć tego tunelu. Czy chcesz zainstalować tą aplikację?</string>
|
||||
<string name="i2ptunnel_not_initialized">Tunele nie są jeszcze zainicjowane, proszę odświeżyć za dwie minuty.</string>
|
||||
<string name="i2ptunnel_new_tunnel">Nowy tunel</string>
|
||||
<string name="i2ptunnel_msg_config_saved">Zapisano zmiany konfiguracji</string>
|
||||
<string name="i2ptunnel_msg_config_saved">Zmiany konfiguracji zostały zapisane</string>
|
||||
<string name="i2ptunnel_msg_config_save_failed">Nie udało zapisać się konfiguracji</string>
|
||||
<string name="i2ptunnel_msg_tunnel_starting">Uruchamianie tunelu</string>
|
||||
<string name="i2ptunnel_msg_tunnel_stopping">Zatrzymanie tunelu</string>
|
||||
@ -161,14 +169,14 @@
|
||||
<string name="review">Przegląd</string>
|
||||
<string name="enabled">Włączony</string>
|
||||
<string name="i2ptunnel_wizard_desc_name">Nazwa tunelu dla identyfikacji w liście tuneli.</string>
|
||||
<string name="i2ptunnel_wizard_desc_desc">Opis tunelu. Ta opcja jest nieobowiązkowa i wyłącznie służąca do celów informacyjnych.</string>
|
||||
<string name="i2ptunnel_wizard_desc_dest">Wpisz przeznaczenie serwisu I2P z którym klient tunelu ma się połączyć. To może być pełna baza 64 przeznaczenia klucza, lub URL I2P z Twojej książki adresowej.</string>
|
||||
<string name="i2ptunnel_wizard_desc_outproxies">Jeśli znasz jakieś wychodzące proxy dla tego typu tunelów (HTTP lub SOCKS), to wpisz je. Oddziel proxy przecinkami.</string>
|
||||
<string name="i2ptunnel_wizard_desc_target_host">To jest IP z którego Twój serwis jest uruchomiony, zazwyczaj jest to te same urządzenie więc 127.0.0.1 jest wpisane automatycznie.</string>
|
||||
<string name="i2ptunnel_wizard_desc_desc">Opis tunelu. Ta opcja jest nieobowiązkowa i służąca wyłącznie do celów informacyjnych.</string>
|
||||
<string name="i2ptunnel_wizard_desc_dest">Wpisz przeznaczenie serwisu I2P z którym klient tunelu ma się połączyć. To może być pełny klucz base 64 przeznaczenia, lub URL I2P z Twojej książki adresowej.</string>
|
||||
<string name="i2ptunnel_wizard_desc_outproxies">Jeśli znasz jakieś wychodzące proxy dla tego typu tunelów (HTTP lub SOCKS), to je wpisz. Serwery proxy oddziel przecinkami.</string>
|
||||
<string name="i2ptunnel_wizard_desc_target_host">To jest IP na którym Twój serwis jest uruchomiony, zazwyczaj jest to te same urządzenie więc 127.0.0.1 jest wpisane automatycznie.</string>
|
||||
<string name="i2ptunnel_wizard_desc_target_port">To jest port na którym Twój serwis akceptuje połączenia.</string>
|
||||
<string name="i2ptunnel_wizard_desc_reachable_on">To limituje do czego komputery lub telefony mogą mięć dostęp w tunelu.</string>
|
||||
<string name="i2ptunnel_wizard_desc_binding_port">To jest port z którego klient tunelu będzie miał dostęp lokalny. To jest także port klienta dla HTTP bidir serwera tunelu.</string>
|
||||
<string name="i2ptunnel_wizard_desc_auto_start">Czy tunel powinien włączyć się automatycznie kiedy włączy się router?</string>
|
||||
<string name="i2ptunnel_wizard_desc_reachable_on">To limituje do czego komputery lub telefony mogą mięć dostęp w tym tunelu.</string>
|
||||
<string name="i2ptunnel_wizard_desc_binding_port">To jest port z którego klient tunelu będzie miał dostęp lokalnie. To jest także port klienta dla HTTP bidir serwera tunelu.</string>
|
||||
<string name="i2ptunnel_wizard_desc_auto_start">Czy chcesz, aby tunel włączył się automatycznie kiedy uruchomi się router?</string>
|
||||
<string name="i2ptunnel_wizard_submit_confirm_message">Utworzyć tunel?</string>
|
||||
<string name="i2ptunnel_wizard_submit_confirm_button">Utwórz tunel</string>
|
||||
<string name="i2ptunnel_view_type">Typ:</string>
|
||||
@ -176,4 +184,10 @@
|
||||
<string name="i2ptunnel_view_target">Cel:</string>
|
||||
<string name="i2ptunnel_view_access_point">Punkt dostępu:</string>
|
||||
<string name="i2ptunnel_view_autostart">Auto-start</string>
|
||||
<string name="copy_logs">Kopiuj logi</string>
|
||||
<string name="i2p_android_error_logs">Logi Błędów I2P Android</string>
|
||||
<string name="i2p_android_logs">Logi Błędów I2P Android</string>
|
||||
<string name="error_logs_copied_to_clipboard">Logi błędów zostały skopiowane do schowka</string>
|
||||
<string name="logs_copied_to_clipboard">Logi zostały skopiowane do schowka</string>
|
||||
<string name="label_browser_configuration">Konfiguracja przeglądarki</string>
|
||||
</resources>
|
||||
|
@ -8,7 +8,6 @@
|
||||
<string name="label_tunnels">Tuneis</string>
|
||||
<string name="label_status">Estado</string>
|
||||
<string name="label_addressbook">Livro de endereços</string>
|
||||
<string name="label_i2ptunnel">TunelI2P</string>
|
||||
<string name="label_i2ptunnel_client">Túneis clientes</string>
|
||||
<string name="label_i2ptunnel_server">Túneis servidor</string>
|
||||
<string name="label_logs">Registros</string>
|
||||
|
@ -1,46 +1,72 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<resources>
|
||||
<string name="app_name">I2P</string>
|
||||
<string name="welcome_new_install">Bem-vindo ao I2P! Este aplicativo é um software ALPHA e não proporciona um forte anonimato. Por favor, leia as notas de lançamento e informações de licença.</string>
|
||||
<string name="desc_i2p_logo">Logótipo I2P</string>
|
||||
<string name="welcome_new_install">Bem-vindo à I2P! Esta app é um programa ALPHA e não proporciona um anonimato forte. Por favor, leia as notas de lançamento e a informação da licença.</string>
|
||||
<string name="welcome_new_version">Nova versão instalada. Por favor, leias as notas de lançamento. Versão:</string>
|
||||
<string name="label_home">Início I2P</string>
|
||||
<string name="label_addressbook">Endereços</string>
|
||||
<string name="label_logs">Registros</string>
|
||||
<string name="label_error_logs">Registros de Erros</string>
|
||||
<string name="label_info_and_pages">Informação e páginas</string>
|
||||
<string name="label_welcome_page">Página de boas vindas</string>
|
||||
<string name="label_home">Controlos e Estado</string>
|
||||
<string name="label_status">Estado</string>
|
||||
<string name="label_addressbook">Livro de Endereços</string>
|
||||
<string name="label_logs">Registos</string>
|
||||
<string name="label_error_logs">Registos de Erros</string>
|
||||
<string name="label_info_and_pages">Informação e Páginas</string>
|
||||
<string name="label_welcome_page">Página de Boas-vindas</string>
|
||||
<string name="label_news">Notícias</string>
|
||||
<string name="label_news_status">Últimas Notícias do I2P</string>
|
||||
<string name="label_peers_status">Pares</string>
|
||||
<string name="label_release_notes">Notas da Versão</string>
|
||||
<string name="label_release_notes">Notas de Lançamento</string>
|
||||
<string name="label_licenses">Licenças</string>
|
||||
<string name="label_nonanon_info">Informação não anônima</string>
|
||||
<string name="label_nonanon_info">Informação Não Anónima</string>
|
||||
<string name="label_browse">Explorar</string>
|
||||
<string name="label_graphs">Gráficos</string>
|
||||
<string name="button_router_off">Pressionar longo para iniciar I2P</string>
|
||||
<string name="button_router_on">I2P está em execução (pressionar longo para para)</string>
|
||||
<!--Character to indicate a client tunnel. Usually first letter of the word "client".-->
|
||||
<string name="char_client_tunnel">C</string>
|
||||
<!--Character to indicate a server tunnel. Usually first letter of the word "server".-->
|
||||
<string name="char_server_tunnel">S</string>
|
||||
<string name="configure_browser_title">Configurar navegador?</string>
|
||||
<string name="drawer_open">Abrir navegador</string>
|
||||
<string name="drawer_close">Fechar navegador</string>
|
||||
<string name="action_search">Procurar</string>
|
||||
<string name="action_add">Adicionar</string>
|
||||
<string name="action_router_start">Iniciar Roteador</string>
|
||||
<string name="action_router_stop">Parar Roteador</string>
|
||||
<string name="action_edit">Editar</string>
|
||||
<string name="action_delete">Apagar</string>
|
||||
<string name="action_router_start">Iniciar Router</string>
|
||||
<string name="action_router_stop">Parar Router</string>
|
||||
<string name="action_reload">Recarregar</string>
|
||||
<string name="action_refresh">Atualizar</string>
|
||||
<string name="hint_search_addressbook">Procurar livro de endereços</string>
|
||||
<string name="action_reload_subscriptions">Recarregar subscrições</string>
|
||||
<string name="router_not_running">O router não está em execução.</string>
|
||||
<string name="stats_not_ready">O gestor de estatísticas ainda não está pronto. Tente de novo mais tarde.</string>
|
||||
<string name="configure_graphs">Configurar gráficos</string>
|
||||
<string name="graphs_not_ready">Os gráficos não estão prontos, ou o router não está em execução. Tente de novo mais tarde.</string>
|
||||
<string name="menu_settings">Configurações</string>
|
||||
<string name="settings_enable">Habilitar</string>
|
||||
<string name="settings_desc_subscriptions">Subscrição de URLs</string>
|
||||
<string name="settings_label_bandwidth">Largura de banda e rede</string>
|
||||
<string name="settings_enable">Ativar</string>
|
||||
<string name="settings_desc_subscriptions">URLs de Subscrição</string>
|
||||
<string name="settings_label_startOnBoot">Iniciar I2P no Arranque</string>
|
||||
<string name="settings_label_bandwidth">Largura de Banda</string>
|
||||
<string name="settings_label_bw_inbound">Velocidade de entrada</string>
|
||||
<string name="settings_desc_bw_inbound">Máxima velocidade de entrada</string>
|
||||
<string name="settings_desc_bw_inbound">Velocidade de entrada máxima</string>
|
||||
<string name="settings_label_bw_outbound">Velocidade de saída</string>
|
||||
<string name="settings_desc_bw_outbound">Máxima velocidade de saída</string>
|
||||
<string name="settings_desc_bw_outbound">Velocidade de saída máxima</string>
|
||||
<string name="settings_label_hiddenMode">Participação</string>
|
||||
<string name="settings_desc_hiddenMode">Desligar modo escondido</string>
|
||||
<string name="settings_label_maxPartTunnels">Nº máximo de túneis participantes</string>
|
||||
<string name="settings_desc_maxPartTunnels">Máximo de túneis para participar (padrão=20)</string>
|
||||
<string name="settings_dialog_maxPartTunnels">Máximo de túneis para participar</string>
|
||||
<string name="settings_label_sharePercent">Percentagem de compartilhamento</string>
|
||||
<string name="settings_desc_sharePercent">Percentagem de largura de banda para compartilhar (padrão=80)</string>
|
||||
<string name="settings_dialog_sharePercent">Percentagem de largura de banda compartilhada</string>
|
||||
<string name="settings_desc_upnp">Abrir portas do firewall automaticamente</string>
|
||||
<string name="settings_desc_hiddenMode">Desative o modo de ocultar</string>
|
||||
<string name="settings_label_maxPartTunnels">Nr. máximo de túneis participantes</string>
|
||||
<string name="settings_desc_maxPartTunnels">Nr. máximo de túneis para participar (predefinição=20)</string>
|
||||
<string name="settings_dialog_maxPartTunnels">Nr. máximo de túneis para participar em</string>
|
||||
<string name="settings_label_sharePercent">Percentagem de Partilhar</string>
|
||||
<string name="settings_desc_sharePercent">Percentagem da largura de banda para partilhar (predefinição=80)</string>
|
||||
<string name="settings_dialog_sharePercent">Percentagem da largura de banda para partilhar</string>
|
||||
<string name="settings_desc_upnp">Abrir automaticamente as portas da firewall</string>
|
||||
<string name="settings_label_logging">Registo de Eventos</string>
|
||||
<string name="settings_label_default_log_level">Nível de registo predefinido</string>
|
||||
<string name="settings_label_advanced">Avançado</string>
|
||||
<string name="settings_label_showStats">Estatísticas do Router</string>
|
||||
<string name="settings_label_transports">Transportes</string>
|
||||
<string name="settings_label_maxConns">Máx. nº de conexões</string>
|
||||
<string name="settings_label_maxConns">Nr. máx. de ligações</string>
|
||||
<string name="settings_label_i2cp">Interface I2CP</string>
|
||||
<string name="settings_desc_i2cp">Escutando na porta 7654</string>
|
||||
<string name="settings_desc_i2cp">Escutar na porta 7654</string>
|
||||
<string name="settings_label_exploratory_pool">Poço exploratório</string>
|
||||
<string name="settings_desc_exploratory_pool">Parâmetros dos túneis</string>
|
||||
<string name="settings_label_expl_inbound">Túneis de entrada</string>
|
||||
@ -48,9 +74,50 @@
|
||||
<string name="settings_label_expl_length">Duração</string>
|
||||
<string name="settings_desc_expl_length">Quantos saltos usar</string>
|
||||
<string name="settings_label_expl_lengthVariance">Variação de saltos</string>
|
||||
<string name="settings_summ_expl_lengthVariance">%s</string>
|
||||
<string name="settings_desc_expl_lengthVariance">Quantos saltos adicionar aleatoriamente</string>
|
||||
<string name="settings_label_expl_quantity">Quantidade</string>
|
||||
<string name="settings_desc_expl_quantity">Quantos túneis</string>
|
||||
<string name="settings_label_expl_backupQuantity">Quantidade tuneis de reserva</string>
|
||||
<string name="settings_desc_expl_backupQuantity">Quantos túneis de reserva</string>
|
||||
<string name="menu_about">Sobre</string>
|
||||
<string name="about_version">Versão:</string>
|
||||
<string name="about_project">Página do Projeto:</string>
|
||||
<string name="about_bugs">Erros e Suporte</string>
|
||||
<string name="about_helpwanted">Preciso de Ajuda!</string>
|
||||
<string name="menu_help">Ajuda</string>
|
||||
<string name="general">Geral</string>
|
||||
<string name="addressbook_add_wizard_k_name">Nome</string>
|
||||
<string name="addressbook_add_wizard_k_destination">Destino</string>
|
||||
<string name="addressbook_add_wizard_desc_name">O nome</string>
|
||||
<string name="i2ptunnel_type_client">Cliente Padrão</string>
|
||||
<string name="i2ptunnel_type_httpclient">Cliente HTTP</string>
|
||||
<string name="i2ptunnel_type_ircclient">Cliente IRC</string>
|
||||
<string name="i2ptunnel_type_server">Servidor Padrão</string>
|
||||
<string name="i2ptunnel_type_httpserver">Servidor HTTP</string>
|
||||
<string name="i2ptunnel_type_ircserver">Servidor IRC</string>
|
||||
<string name="install_recommended_app">Instalar a app recomendada?</string>
|
||||
<string name="i2ptunnel_wizard_k_client_server">Cliente ou Servidor</string>
|
||||
<string name="i2ptunnel_wizard_k_name">Nome</string>
|
||||
<string name="i2ptunnel_wizard_k_desc">Descrição</string>
|
||||
<string name="i2ptunnel_wizard_k_dest">Destino</string>
|
||||
<string name="i2ptunnel_wizard_k_target_host">Hospedeiro de Destino</string>
|
||||
<string name="i2ptunnel_wizard_k_target_port">Porta de Destino</string>
|
||||
<string name="i2ptunnel_wizard_k_auto_start">Iniciar Automático</string>
|
||||
<string name="next">Seguinte</string>
|
||||
<string name="prev">Anterior</string>
|
||||
<string name="finish">Submeter</string>
|
||||
<string name="review">Rever</string>
|
||||
<string name="enabled">Ativado</string>
|
||||
<string name="i2ptunnel_view_type">Tipo:</string>
|
||||
<string name="i2ptunnel_view_desc">Descrição:</string>
|
||||
<string name="i2ptunnel_view_target">Destino:</string>
|
||||
<string name="i2ptunnel_view_access_point">Ponto de acesso:</string>
|
||||
<string name="i2ptunnel_view_autostart">Iniciar-Automático</string>
|
||||
<string name="copy_logs">Copiar registos</string>
|
||||
<string name="i2p_android_error_logs">Registos de Erro I2P Android</string>
|
||||
<string name="i2p_android_logs">Registos I2P Android</string>
|
||||
<string name="error_logs_copied_to_clipboard">Registos de erro copiados para a área de transferência</string>
|
||||
<string name="logs_copied_to_clipboard">Registos copiados para a área de transferência</string>
|
||||
<string name="label_browser_configuration">Configuração do Navegador</string>
|
||||
</resources>
|
||||
|
@ -8,7 +8,6 @@
|
||||
<string name="label_tunnels">Tuneluri</string>
|
||||
<string name="label_status">Stare</string>
|
||||
<string name="label_addressbook">Agendă</string>
|
||||
<string name="label_i2ptunnel">Tunel I2P</string>
|
||||
<string name="label_i2ptunnel_client">Tuneluri clienti</string>
|
||||
<string name="label_i2ptunnel_server">Tuneluri server</string>
|
||||
<string name="label_logs">Jurnale</string>
|
||||
|
@ -8,7 +8,6 @@
|
||||
<string name="label_tunnels">Туннели</string>
|
||||
<string name="label_status">Статус</string>
|
||||
<string name="label_addressbook">Адресная книга</string>
|
||||
<string name="label_i2ptunnel">I2PTunnel</string>
|
||||
<string name="label_i2ptunnel_client">Туннели клиента</string>
|
||||
<string name="label_i2ptunnel_server">Туннели сервера</string>
|
||||
<string name="label_logs">Журналы</string>
|
||||
@ -141,6 +140,8 @@
|
||||
<string name="i2ptunnel_type_streamrclient">Streamr клиент</string>
|
||||
<string name="i2ptunnel_type_streamrserver">Streamr сервер</string>
|
||||
<string name="i2ptunnel_type_httpbidirserver">HTTP bidir</string>
|
||||
<string name="install_recommended_app">Установить рекомендованное приложение?</string>
|
||||
<string name="app_needed_for_this_tunnel_type">Требуется установить приложение для использования этого туннеля. Хотите установить рекомендованное приложение?</string>
|
||||
<string name="i2ptunnel_not_initialized">Туннели еще не инициализированы, пожалуйста, обновите через пару минут</string>
|
||||
<string name="i2ptunnel_new_tunnel">Создать туннель</string>
|
||||
<string name="i2ptunnel_msg_config_saved">Изменения конфигурации сохранены</string>
|
||||
|
@ -8,7 +8,6 @@
|
||||
<string name="label_tunnels">Tunely</string>
|
||||
<string name="label_status">Stav</string>
|
||||
<string name="label_addressbook">Adresár</string>
|
||||
<string name="label_i2ptunnel">I2PTunnel</string>
|
||||
<string name="label_i2ptunnel_client">Klientské tunely</string>
|
||||
<string name="label_i2ptunnel_server">Serverové tunely</string>
|
||||
<string name="label_logs">Logy</string>
|
||||
|
@ -8,7 +8,6 @@
|
||||
<string name="label_tunnels">Tunelet</string>
|
||||
<string name="label_status">Statusi</string>
|
||||
<string name="label_addressbook">Libri i adresave. </string>
|
||||
<string name="label_i2ptunnel">Tuneli i I2P\'së</string>
|
||||
<string name="label_i2ptunnel_client">Tunelet e klientëve</string>
|
||||
<string name="label_i2ptunnel_server">Tunelet e Serverave. </string>
|
||||
<string name="label_logs">Logot</string>
|
||||
|
124
app/src/main/res/values-uk_UA/strings.xml
Normal file
124
app/src/main/res/values-uk_UA/strings.xml
Normal file
@ -0,0 +1,124 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<resources>
|
||||
<string name="app_name">I2P</string>
|
||||
<string name="welcome_new_install">Ласкаво просимо до I2P! Ця програма є альфа версією і вона не забезпечує анонімність. Будь ласка, прочитайте примітки до випуску та інформацію про ліцензії.</string>
|
||||
<string name="welcome_new_version">Встановлено нову версія. Будь ласка, прочитайте примітки до випуску. Версія:</string>
|
||||
<string name="label_home">Управління і Статус</string>
|
||||
<string name="label_tunnels">Тунелі</string>
|
||||
<string name="label_status">Статус</string>
|
||||
<string name="label_addressbook">Адресна книга</string>
|
||||
<string name="label_i2ptunnel_client">Клієнтські тунелі</string>
|
||||
<string name="label_i2ptunnel_server">Серверні тунелі</string>
|
||||
<string name="label_logs">Журнали</string>
|
||||
<string name="label_error_logs">Журнали помилок</string>
|
||||
<string name="label_info_and_pages">Інформація і сторінки</string>
|
||||
<string name="label_welcome_page">Початкова сторінка</string>
|
||||
<string name="label_news">Новини</string>
|
||||
<string name="label_peers_status">Піри</string>
|
||||
<string name="label_release_notes">Примітки до випуску</string>
|
||||
<string name="label_licenses">Ліцензії</string>
|
||||
<string name="label_nonanon_info">Не анонімна інформація</string>
|
||||
<string name="label_graphs">Графіки</string>
|
||||
<string name="button_router_off">Утримуйте щоб запустити I2P</string>
|
||||
<string name="button_router_on">I2P працює (утримуйте, щоб зупинити)</string>
|
||||
<!--Character to indicate a client tunnel. Usually first letter of the word "client".-->
|
||||
<!--Character to indicate a server tunnel. Usually first letter of the word "server".-->
|
||||
<string name="no_client_tunnels_running">Клієнтських тунелів ще немає.</string>
|
||||
<string name="configure_browser_title">Налаштувати браузер?</string>
|
||||
<string name="first_start_irc">Налаштуйте ваш IRC клієнт на <b>localhost:6668</b> і скажіть нам \"hello world\":</string>
|
||||
<string name="action_search">Пошук</string>
|
||||
<string name="action_add">Додати</string>
|
||||
<string name="action_edit">Правка</string>
|
||||
<string name="action_delete">Видалити</string>
|
||||
<string name="action_router_start">Запустити роутер</string>
|
||||
<string name="action_router_stop">Зупинити роутер</string>
|
||||
<string name="action_i2ptunnel_start">Запустити тунель</string>
|
||||
<string name="action_i2ptunnel_stop">Зупинити тунель</string>
|
||||
<string name="action_i2ptunnel_start_all">Запустити всі тунелі</string>
|
||||
<string name="action_i2ptunnel_stop_all">Зупинити всі тунелі</string>
|
||||
<string name="action_i2ptunnel_restart_all">Перезапустити всі тунелі</string>
|
||||
<string name="action_reload">Перезавантажити</string>
|
||||
<string name="action_refresh">Оновити</string>
|
||||
<string name="hint_search_addressbook">Пошук по адресній книзі</string>
|
||||
<string name="netdb_routers_empty">Немає роутерів у вашій NetDB.</string>
|
||||
<string name="notification_status_client">Клієнтські тунелі: %1$d/%2$d</string>
|
||||
<string name="menu_settings">Налаштування</string>
|
||||
<string name="settings_enable">Увімкнути</string>
|
||||
<string name="settings_desc_subscriptions">Підписка на URL-и</string>
|
||||
<string name="settings_label_bandwidth">Ширина смуги пропускання</string>
|
||||
<string name="settings_label_bw_inbound">Вхідна швидкість</string>
|
||||
<string name="settings_label_bw_outbound">Вихідна швидкість</string>
|
||||
<string name="settings_desc_bw_outbound">Максимальна вихідна швидкість</string>
|
||||
<string name="settings_label_network">Мережа</string>
|
||||
<string name="settings_label_maxConns">Максимально з’єднань</string>
|
||||
<string name="settings_label_i2cp">Інтерфейс I2CP</string>
|
||||
<string name="settings_desc_exploratory_pool">Параметри тунелів</string>
|
||||
<string name="settings_label_expl_inbound">Вхідні тунелі</string>
|
||||
<string name="settings_label_expl_outbound">Вихідні тунелі</string>
|
||||
<string name="settings_label_expl_length">Довжина</string>
|
||||
<string name="settings_summ_expl_length">%s хопів</string>
|
||||
<string name="settings_desc_expl_length">Скільки хопів використовувати</string>
|
||||
<string name="settings_summ_expl_lengthVariance">%s</string>
|
||||
<string name="settings_desc_expl_lengthVariance">Скільки хопів випадково додавати</string>
|
||||
<string name="settings_summ_expl_quantity">%s тунелів</string>
|
||||
<string name="settings_desc_expl_quantity">Скільки тунелів</string>
|
||||
<string name="settings_summ_expl_backupQuantity">%s тунелів</string>
|
||||
<string name="menu_about">Про</string>
|
||||
<string name="about_version">Версія:</string>
|
||||
<string name="about_bugs">Неполадки і підтримка:</string>
|
||||
<string name="menu_help">Допомога</string>
|
||||
<string name="addressbook_search_header">%s знайдено</string>
|
||||
<string name="addressbook_add_wizard_k_name">Назва</string>
|
||||
<string name="addressbook_add_wizard_k_destination">Призначення</string>
|
||||
<string name="addressbook_add_wizard_desc_name">Назва</string>
|
||||
<string name="nsu_iae_cannot_start_with">Назва хосту не може починатися з \"%s\"</string>
|
||||
<string name="nsu_iae_cannot_end_with">Назва хосту не поже закінчуватися на \"%s\"</string>
|
||||
<string name="nsu_iae_cannot_contain">Назва хосту не може містити \"%s\"</string>
|
||||
<string name="i2ptunnel_type_client">Стандартний клієнт</string>
|
||||
<string name="i2ptunnel_type_httpclient">Клієнт HTTP</string>
|
||||
<string name="i2ptunnel_type_ircclient">Клієнт IRC</string>
|
||||
<string name="i2ptunnel_type_server">Стандартний серер</string>
|
||||
<string name="i2ptunnel_type_httpserver">HTTP сервер</string>
|
||||
<string name="i2ptunnel_type_sockstunnel">SOCKS 4/4a/5 проксі</string>
|
||||
<string name="i2ptunnel_type_socksirctunnel">SOCKS IRC проксі</string>
|
||||
<string name="i2ptunnel_type_connectclient">CONNECT/SSL/HTTPS проксі</string>
|
||||
<string name="i2ptunnel_type_ircserver">IRC сервер</string>
|
||||
<string name="i2ptunnel_type_streamrclient">Streamr клієнт</string>
|
||||
<string name="i2ptunnel_type_streamrserver">Streamr сервер</string>
|
||||
<string name="i2ptunnel_type_httpbidirserver">HTTP bidir</string>
|
||||
<string name="i2ptunnel_not_initialized">Тунелі ще неініціалізовані, будь ласка, перезавантажте через дві хвилини.</string>
|
||||
<string name="i2ptunnel_new_tunnel">Новий тунель</string>
|
||||
<string name="i2ptunnel_msg_config_saved">Зміни конфігурації збережені</string>
|
||||
<string name="i2ptunnel_msg_config_save_failed">Не вдалося зберегти конфігурацію</string>
|
||||
<string name="i2ptunnel_msg_tunnel_starting">Запуск тунелю</string>
|
||||
<string name="i2ptunnel_msg_tunnel_stopping">Зупинка тунель</string>
|
||||
<string name="i2ptunnel_delete_confirm_message">Видалити тунель?</string>
|
||||
<string name="i2ptunnel_delete_confirm_button">Видалити тунель</string>
|
||||
<string name="i2ptunnel_wizard_k_client_server">Клієнт або Сервер</string>
|
||||
<string name="i2ptunnel_wizard_v_client">Клієнтський тунель</string>
|
||||
<string name="i2ptunnel_wizard_v_server">Серверний тунель</string>
|
||||
<string name="i2ptunnel_wizard_k_type">Тип тунель</string>
|
||||
<string name="i2ptunnel_wizard_k_name">Назва</string>
|
||||
<string name="i2ptunnel_wizard_k_desc">Опис</string>
|
||||
<string name="i2ptunnel_wizard_k_dest">Призначення</string>
|
||||
<string name="i2ptunnel_wizard_k_outproxies">Вихідні проксі</string>
|
||||
<string name="i2ptunnel_wizard_k_target_host">Цільовий хост</string>
|
||||
<string name="i2ptunnel_wizard_k_target_port">Цільовий порт</string>
|
||||
<string name="i2ptunnel_wizard_k_auto_start">Запускати автоматично</string>
|
||||
<string name="next">Наступний</string>
|
||||
<string name="prev">Попередній</string>
|
||||
<string name="enabled">Увімкнено</string>
|
||||
<string name="i2ptunnel_wizard_desc_target_host">Це IP-адреса, на якій сервіс працює. Зазвичай така сама, як у машини, тому 127.0.0.1 введено автоматично.</string>
|
||||
<string name="i2ptunnel_wizard_desc_target_port">Це порт, на який сервіс приймає з’єднання.</string>
|
||||
<string name="i2ptunnel_wizard_submit_confirm_message">Створити тунель?</string>
|
||||
<string name="i2ptunnel_wizard_submit_confirm_button">Створити тунель</string>
|
||||
<string name="i2ptunnel_view_type">Тип:</string>
|
||||
<string name="i2ptunnel_view_desc">Опис:</string>
|
||||
<string name="i2ptunnel_view_access_point">Точка доступу:</string>
|
||||
<string name="i2ptunnel_view_autostart">Автозапуск</string>
|
||||
<string name="copy_logs">Скопіювати логи</string>
|
||||
<string name="i2p_android_logs">Логи Android I2P</string>
|
||||
<string name="error_logs_copied_to_clipboard">Логи з помилками скопійовані у буфер обміну</string>
|
||||
<string name="logs_copied_to_clipboard">Логи скопійовані у буфер обміну</string>
|
||||
<string name="label_browser_configuration">Налаштування браузера</string>
|
||||
</resources>
|
6
app/src/main/res/values-v14/styles.xml
Normal file
6
app/src/main/res/values-v14/styles.xml
Normal file
@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<style name="WizardPageTitle" parent="WizardPageTitleBase">
|
||||
<item name="android:paddingLeft">?android:attr/listPreferredItemPaddingLeft</item>
|
||||
</style>
|
||||
</resources>
|
@ -8,7 +8,6 @@
|
||||
<string name="label_tunnels">隧道</string>
|
||||
<string name="label_status">状态</string>
|
||||
<string name="label_addressbook">地址簿</string>
|
||||
<string name="label_i2ptunnel">I2PTunnel</string>
|
||||
<string name="label_i2ptunnel_client">客户隧道</string>
|
||||
<string name="label_i2ptunnel_server">服务隧道</string>
|
||||
<string name="label_logs">日志</string>
|
||||
@ -69,6 +68,8 @@
|
||||
<string name="settings_enable">启用</string>
|
||||
<string name="settings_desc_subscriptions">订阅链接</string>
|
||||
<string name="settings_label_bandwidth_net">带宽和网络</string>
|
||||
<string name="settings_label_startOnBoot">启动时启动 I2P</string>
|
||||
<string name="settings_desc_startOnBoot">在您的 Android 设备启动时自动连接到 I2P</string>
|
||||
<string name="settings_label_bandwidth">带宽</string>
|
||||
<string name="settings_label_bw_inbound">入站速度</string>
|
||||
<string name="settings_desc_bw_inbound">最大入站速度</string>
|
||||
@ -141,6 +142,8 @@
|
||||
<string name="i2ptunnel_type_streamrclient">Streamr 客戶端</string>
|
||||
<string name="i2ptunnel_type_streamrserver">Streamr 服务器</string>
|
||||
<string name="i2ptunnel_type_httpbidirserver">HTTP bidir</string>
|
||||
<string name="install_recommended_app">安装推荐的应用?</string>
|
||||
<string name="app_needed_for_this_tunnel_type">您需要安装一个应用以使用此隧道。您想安装推荐的应用吗?</string>
|
||||
<string name="i2ptunnel_not_initialized">隧道未初始化完成, 请在两分钟后重新加载.</string>
|
||||
<string name="i2ptunnel_new_tunnel">新隧道</string>
|
||||
<string name="i2ptunnel_msg_config_saved">配置更改已保存</string>
|
||||
@ -189,4 +192,5 @@
|
||||
<string name="error_logs_copied_to_clipboard">错误日志已复制到剪贴板</string>
|
||||
<string name="logs_copied_to_clipboard">日志已复制到剪贴板</string>
|
||||
<string name="label_browser_configuration">浏览器配置</string>
|
||||
<string name="unset">未设置</string>
|
||||
</resources>
|
||||
|
34
app/src/main/res/values/properties.xml
Normal file
34
app/src/main/res/values/properties.xml
Normal file
@ -0,0 +1,34 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<!-- net.i2p.router.transport.FIFOBandwidthRefiller -->
|
||||
<string name="PROP_INBOUND_BANDWIDTH">i2np.bandwidth.inboundKBytesPerSecond</string>
|
||||
<string name="PROP_OUTBOUND_BANDWIDTH">i2np.bandwidth.outboundKBytesPerSecond</string>
|
||||
|
||||
<!-- net.i2p.router.transport.TransportManager -->
|
||||
<string name="PROP_ENABLE_UPNP">i2np.upnp.enable</string>
|
||||
<string name="PROP_ENABLE_UDP">i2np.udp.enable</string>
|
||||
<string name="PROP_ENABLE_NTCP">i2np.ntcp.enable</string>
|
||||
<!-- net.i2p.router.transport.udp.UDPTransport -->
|
||||
<string name="PROP_UDP_INTERNAL_PORT">i2np.udp.internalPort</string>
|
||||
<!-- net.i2p.router.transport.ntcp.NTCPTransport -->
|
||||
<string name="PROP_I2NP_NTCP_AUTO_PORT">i2np.ntcp.autoport</string>
|
||||
<string name="PROP_I2NP_NTCP_PORT">i2np.ntcp.port</string>
|
||||
<!-- net.i2p.router.transport.TransportImpl.getMaxConnections() -->
|
||||
<string name="PROP_UDP_MAX_CONNECTIONS">i2np.udp.maxConnections</string>
|
||||
<string name="PROP_NTCP_MAX_CONNECTIONS">i2np.ntcp.maxConnections</string>
|
||||
|
||||
<!-- net.i2p.router.TunnelPoolSettings -->
|
||||
<!-- Inbound exploratory tunnels -->
|
||||
<string name="PROP_INBOUND_EXPLORATORY_LENGTH">router.inboundPool.length</string>
|
||||
<string name="PROP_INBOUND_EXPLORATORY_LENGTH_VARIANCE">router.inboundPool.lengthVariance</string>
|
||||
<string name="PROP_INBOUND_EXPLORATORY_QUANTITY">router.inboundPool.quantity</string>
|
||||
<string name="PROP_INBOUND_EXPLORATORY_BACKUP_QUANTITY">router.inboundPool.backupQuantity</string>
|
||||
<!-- Outbound exploratory tunnels -->
|
||||
<string name="PROP_OUTBOUND_EXPLORATORY_LENGTH">router.outboundPool.length</string>
|
||||
<string name="PROP_OUTBOUND_EXPLORATORY_LENGTH_VARIANCE">router.outboundPool.lengthVariance</string>
|
||||
<string name="PROP_OUTBOUND_EXPLORATORY_QUANTITY">router.outboundPool.quantity</string>
|
||||
<string name="PROP_OUTBOUND_EXPLORATORY_BACKUP_QUANTITY">router.outboundPool.backupQuantity</string>
|
||||
|
||||
<!-- net.i2p.util.LogManager -->
|
||||
<string name="PROP_DEFAULTLEVEL">logger.defaultLevel</string>
|
||||
</resources>
|
@ -10,7 +10,7 @@
|
||||
<string name="label_tunnels">Tunnels</string>
|
||||
<string name="label_status">Status</string>
|
||||
<string name="label_addressbook">Addressbook</string>
|
||||
<string name="label_i2ptunnel">I2PTunnel</string>
|
||||
<string name="label_i2ptunnel" translatable="false">@string/label_tunnels</string>
|
||||
<string name="label_i2ptunnel_client">Client tunnels</string>
|
||||
<string name="label_i2ptunnel_server">Server tunnels</string>
|
||||
<string name="label_logs">Logs</string>
|
||||
@ -83,6 +83,8 @@
|
||||
<string name="settings_enable">Enable</string>
|
||||
<string name="settings_desc_subscriptions">Subscription URLs</string>
|
||||
<string name="settings_label_bandwidth_net">Bandwidth and network</string>
|
||||
<string name="settings_label_startOnBoot">Start I2P on Boot</string>
|
||||
<string name="settings_desc_startOnBoot">Automatically connect to I2P when your Android device starts up</string>
|
||||
<string name="settings_label_bandwidth">Bandwidth</string>
|
||||
<string name="settings_label_bw_inbound">Inbound speed</string>
|
||||
<string name="settings_desc_bw_inbound">Maximum inbound speed</string>
|
||||
@ -124,6 +126,7 @@
|
||||
<string name="settings_summ_expl_backupQuantity">%s tunnels</string>
|
||||
<string name="settings_desc_expl_backupQuantity">How many tunnel backups</string>
|
||||
|
||||
<string name="settings_need_transport_enabled">You must have at least one transport enabled</string>
|
||||
<string name="settings_router_restart_required">Please restart I2P to apply the changes</string>
|
||||
|
||||
<string name="menu_about">About</string>
|
||||
@ -167,6 +170,10 @@
|
||||
<string name="i2ptunnel_type_streamrserver">Streamr server</string>
|
||||
<string name="i2ptunnel_type_httpbidirserver">HTTP bidir</string>
|
||||
|
||||
<string name="market_irc" translatable="false">market://search?q=pname:com.androirc</string>
|
||||
<string name="install_recommended_app">Install recommended app?</string>
|
||||
<string name="app_needed_for_this_tunnel_type">You need to install an app to use this tunnel. Would you like to install the recommended app?</string>
|
||||
|
||||
<string name="i2ptunnel_not_initialized">Tunnels are not initialized yet, please reload in two minutes.</string>
|
||||
<string name="i2ptunnel_new_tunnel">New Tunnel</string>
|
||||
<string name="i2ptunnel_msg_config_saved">Configuration changes saved</string>
|
||||
@ -221,4 +228,6 @@
|
||||
<string name="logs_copied_to_clipboard">Logs copied to clipboard</string>
|
||||
|
||||
<string name="label_browser_configuration">Browser configuration</string>
|
||||
|
||||
<string name="unset">Unset</string>
|
||||
</resources>
|
@ -35,18 +35,19 @@
|
||||
<item name="android:orientation">vertical</item>
|
||||
</style>
|
||||
|
||||
<style name="WizardPageTitle">
|
||||
<style name="WizardPageTitleBase">
|
||||
<item name="android:id">@android:id/title</item>
|
||||
<item name="android:layout_width">match_parent</item>
|
||||
<item name="android:layout_height">wrap_content</item>
|
||||
<item name="android:layout_marginBottom">8dp</item>
|
||||
<item name="android:layout_marginLeft">16dp</item>
|
||||
<item name="android:layout_marginRight">16dp</item>
|
||||
<item name="android:paddingLeft">?android:attr/listPreferredItemPaddingLeft</item>
|
||||
<item name="android:textSize">36sp</item>
|
||||
<item name="android:textColor">#ff0099cc</item>
|
||||
</style>
|
||||
|
||||
<style name="WizardPageTitle" parent="WizardPageTitleBase"/>
|
||||
|
||||
<style name="WizardFormLabel">
|
||||
<item name="android:layout_width">match_parent</item>
|
||||
<item name="android:layout_height">wrap_content</item>
|
||||
|
@ -10,19 +10,68 @@
|
||||
android:key="settings_transports"
|
||||
android:title="@string/settings_label_transports">
|
||||
|
||||
<PreferenceCategory
|
||||
android:key="settings_udp"
|
||||
android:title="UDP">
|
||||
<!--
|
||||
i2np.udp.enable=false
|
||||
I might hide this one...
|
||||
-->
|
||||
<CheckBoxPreference
|
||||
android:key="@string/PROP_ENABLE_UDP"
|
||||
android:defaultValue="true"
|
||||
android:title="@string/settings_enable"
|
||||
android:summary="DO NOT DISABLE THIS"
|
||||
/>
|
||||
|
||||
<net.i2p.android.router.util.PortPreference
|
||||
android:dependency="@string/PROP_ENABLE_UDP"
|
||||
android:key="@string/PROP_UDP_INTERNAL_PORT"
|
||||
android:title="UDP port"/>
|
||||
|
||||
<!--
|
||||
i2np.udp.maxConnections=12
|
||||
-->
|
||||
<com.hlidskialf.android.preference.SeekBarPreference
|
||||
android:key="@string/PROP_UDP_MAX_CONNECTIONS"
|
||||
android:defaultValue="32"
|
||||
android:max="500"
|
||||
android:title="@string/settings_label_maxConns"
|
||||
android:summary="Maximum UDP connections allowed"
|
||||
android:dialogMessage="Maximum UDP connections"
|
||||
android:text=" connections"
|
||||
android:dependency="@string/PROP_ENABLE_UDP"
|
||||
android:shouldDisableView="true"
|
||||
/>
|
||||
</PreferenceCategory>
|
||||
|
||||
<PreferenceCategory
|
||||
android:key="settings_ntcp"
|
||||
android:title="NTCP">
|
||||
<CheckBoxPreference
|
||||
android:key="i2np.ntcp.enable"
|
||||
android:key="@string/PROP_ENABLE_NTCP"
|
||||
android:defaultValue="true"
|
||||
android:title="@string/settings_enable"
|
||||
/>
|
||||
|
||||
<CheckBoxPreference
|
||||
android:defaultValue="true"
|
||||
android:dependency="@string/PROP_ENABLE_NTCP"
|
||||
android:disableDependentsState="true"
|
||||
android:key="@string/PROP_I2NP_NTCP_AUTO_PORT"
|
||||
android:summary="Use same port as UDP"
|
||||
android:title="Auto-set port"
|
||||
/>
|
||||
|
||||
<net.i2p.android.router.util.PortPreference
|
||||
android:dependency="@string/PROP_I2NP_NTCP_AUTO_PORT"
|
||||
android:key="@string/PROP_I2NP_NTCP_PORT"
|
||||
android:title="NTCP port"/>
|
||||
<!--
|
||||
i2np.ntcp.maxConnections=24
|
||||
-->
|
||||
<com.hlidskialf.android.preference.SeekBarPreference
|
||||
android:key="i2np.ntcp.maxConnections"
|
||||
android:key="@string/PROP_NTCP_MAX_CONNECTIONS"
|
||||
android:defaultValue="32"
|
||||
android:max="250"
|
||||
android:title="@string/settings_label_maxConns"
|
||||
@ -33,36 +82,6 @@
|
||||
android:shouldDisableView="true"
|
||||
/>
|
||||
</PreferenceCategory>
|
||||
|
||||
<PreferenceCategory
|
||||
android:key="settings_udp"
|
||||
android:title="UDP">
|
||||
<!--
|
||||
i2np.udp.enable=false
|
||||
I might hide this one...
|
||||
-->
|
||||
<CheckBoxPreference
|
||||
android:key="i2np.udp.enable"
|
||||
android:defaultValue="true"
|
||||
android:title="@string/settings_enable"
|
||||
android:summary="DO NOT DISABLE THIS"
|
||||
/>
|
||||
|
||||
<!--
|
||||
i2np.udp.maxConnections=12
|
||||
-->
|
||||
<com.hlidskialf.android.preference.SeekBarPreference
|
||||
android:key="i2np.udp.maxConnections"
|
||||
android:defaultValue="32"
|
||||
android:max="500"
|
||||
android:title="@string/settings_label_maxConns"
|
||||
android:summary="Maximum UDP connections allowed"
|
||||
android:dialogMessage="Maximum UDP connections"
|
||||
android:text=" connections"
|
||||
android:dependency="i2np.udp.enable"
|
||||
android:shouldDisableView="true"
|
||||
/>
|
||||
</PreferenceCategory>
|
||||
</PreferenceScreen>
|
||||
|
||||
<!--
|
||||
@ -89,7 +108,7 @@
|
||||
router.inboundPool.length=1
|
||||
-->
|
||||
<ListPreference
|
||||
android:key="router.inboundPool.length"
|
||||
android:key="@string/PROP_INBOUND_EXPLORATORY_LENGTH"
|
||||
android:entries="@array/setting0to3"
|
||||
android:entryValues="@array/setting0to3"
|
||||
android:title="@string/settings_label_expl_length"
|
||||
@ -102,7 +121,7 @@
|
||||
router.inboundPool.lengthVariance=1
|
||||
-->
|
||||
<ListPreference
|
||||
android:key="router.inboundPool.lengthVariance"
|
||||
android:key="@string/PROP_INBOUND_EXPLORATORY_LENGTH_VARIANCE"
|
||||
android:entries="@array/setting2to2"
|
||||
android:entryValues="@array/setting2to2"
|
||||
android:title="@string/settings_label_expl_lengthVariance"
|
||||
@ -116,7 +135,7 @@
|
||||
router.inboundPool.quantity=2
|
||||
-->
|
||||
<ListPreference
|
||||
android:key="router.inboundPool.quantity"
|
||||
android:key="@string/PROP_INBOUND_EXPLORATORY_QUANTITY"
|
||||
android:entries="@array/setting0to3"
|
||||
android:entryValues="@array/setting0to3"
|
||||
android:title="@string/settings_label_expl_quantity"
|
||||
@ -129,7 +148,7 @@
|
||||
router.inboundPool.backupQuantity=0
|
||||
-->
|
||||
<ListPreference
|
||||
android:key="router.inboundPool.backupQuantity"
|
||||
android:key="@string/PROP_INBOUND_EXPLORATORY_BACKUP_QUANTITY"
|
||||
android:entries="@array/setting0to3"
|
||||
android:entryValues="@array/setting0to3"
|
||||
android:title="@string/settings_label_expl_backupQuantity"
|
||||
@ -146,7 +165,7 @@
|
||||
router.outboundPool.length=1
|
||||
-->
|
||||
<ListPreference
|
||||
android:key="router.outboundPool.length"
|
||||
android:key="@string/PROP_OUTBOUND_EXPLORATORY_LENGTH"
|
||||
android:entries="@array/setting0to3"
|
||||
android:entryValues="@array/setting0to3"
|
||||
android:title="@string/settings_label_expl_length"
|
||||
@ -159,7 +178,7 @@
|
||||
router.outboundPool.lengthVariance=1
|
||||
-->
|
||||
<ListPreference
|
||||
android:key="router.outboundPool.lengthVariance"
|
||||
android:key="@string/PROP_OUTBOUND_EXPLORATORY_LENGTH_VARIANCE"
|
||||
android:entries="@array/setting2to2"
|
||||
android:entryValues="@array/setting2to2"
|
||||
android:title="@string/settings_label_expl_lengthVariance"
|
||||
@ -172,7 +191,7 @@
|
||||
router.outboundPool.quantity=2
|
||||
-->
|
||||
<ListPreference
|
||||
android:key="router.outboundPool.quantity"
|
||||
android:key="@string/PROP_OUTBOUND_EXPLORATORY_QUANTITY"
|
||||
android:entries="@array/setting0to3"
|
||||
android:entryValues="@array/setting0to3"
|
||||
android:title="@string/settings_label_expl_quantity"
|
||||
@ -185,7 +204,7 @@
|
||||
router.outboundPool.backupQuantity=0
|
||||
-->
|
||||
<ListPreference
|
||||
android:key="router.outboundPool.backupQuantity"
|
||||
android:key="@string/PROP_OUTBOUND_EXPLORATORY_BACKUP_QUANTITY"
|
||||
android:entries="@array/setting0to3"
|
||||
android:entryValues="@array/setting0to3"
|
||||
android:title="@string/settings_label_expl_backupQuantity"
|
||||
|
@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
|
||||
<ListPreference
|
||||
android:key="logger.defaultLevel"
|
||||
android:key="@string/PROP_DEFAULTLEVEL"
|
||||
android:entries="@array/log_levels"
|
||||
android:entryValues="@array/log_levels"
|
||||
android:title="@string/settings_label_default_log_level"
|
||||
|
@ -3,6 +3,12 @@
|
||||
<!--
|
||||
Keys and the default values from current installation:
|
||||
-->
|
||||
<CheckBoxPreference
|
||||
android:key="i2pandroid.startOnBoot"
|
||||
android:defaultValue="false"
|
||||
android:title="@string/settings_label_startOnBoot"
|
||||
android:summary="@string/settings_desc_startOnBoot"
|
||||
/>
|
||||
|
||||
<PreferenceCategory
|
||||
android:key="settings_bandwidth"
|
||||
@ -11,7 +17,7 @@
|
||||
i2np.bandwidth.inboundKBytesPerSecond=100
|
||||
-->
|
||||
<com.hlidskialf.android.preference.SeekBarPreference
|
||||
android:key="i2np.bandwidth.inboundKBytesPerSecond"
|
||||
android:key="@string/PROP_INBOUND_BANDWIDTH"
|
||||
android:defaultValue="100"
|
||||
android:max="1000"
|
||||
android:title="@string/settings_label_bw_inbound"
|
||||
@ -23,7 +29,7 @@
|
||||
i2np.bandwidth.outboundKBytesPerSecond=30
|
||||
-->
|
||||
<com.hlidskialf.android.preference.SeekBarPreference
|
||||
android:key="i2np.bandwidth.outboundKBytesPerSecond"
|
||||
android:key="@string/PROP_OUTBOUND_BANDWIDTH"
|
||||
android:defaultValue="100"
|
||||
android:max="1000"
|
||||
android:title="@string/settings_label_bw_outbound"
|
||||
@ -84,7 +90,7 @@
|
||||
i2np.upnp.enable=false
|
||||
-->
|
||||
<CheckBoxPreference
|
||||
android:key="i2np.upnp.enable"
|
||||
android:key="@string/PROP_ENABLE_UPNP"
|
||||
android:defaultValue="true"
|
||||
android:title="UPnP"
|
||||
android:summary="@string/settings_desc_upnp"
|
||||
|
@ -3,7 +3,7 @@ buildscript {
|
||||
mavenCentral()
|
||||
}
|
||||
dependencies {
|
||||
classpath 'com.android.tools.build:gradle:0.13.3'
|
||||
classpath 'com.android.tools.build:gradle:1.0.1'
|
||||
classpath files('gradle/libs/gradle-witness.jar')
|
||||
}
|
||||
}
|
||||
|
@ -11,10 +11,14 @@ android {
|
||||
}
|
||||
buildTypes {
|
||||
release {
|
||||
runProguard false
|
||||
minifyEnabled false
|
||||
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
|
||||
}
|
||||
}
|
||||
compileOptions {
|
||||
sourceCompatibility JavaVersion.VERSION_1_7
|
||||
targetCompatibility JavaVersion.VERSION_1_7
|
||||
}
|
||||
lintOptions {
|
||||
abortOnError false
|
||||
}
|
||||
@ -22,12 +26,12 @@ android {
|
||||
|
||||
dependencies {
|
||||
compile project(path: ':routerjars', configuration: 'client')
|
||||
compile 'com.android.support:support-v4:21.0.0'
|
||||
compile 'com.android.support:support-v4:21.0.3'
|
||||
}
|
||||
|
||||
dependencyVerification {
|
||||
verify = [
|
||||
'com.android.support:support-v4:199ef7bb169386c80b4836354df6747ce2ae3d24434db923c22439e47106a1e2',
|
||||
'com.android.support:support-v4:703572d3015a088cc5604b7e38885af3d307c829d0c5ceaf8654ff41c71cd160',
|
||||
]
|
||||
}
|
||||
|
||||
@ -41,7 +45,7 @@ android.libraryVariants.all { variant ->
|
||||
}
|
||||
|
||||
// Hook the copy task into the build
|
||||
variant.packageLibrary.dependsOn copyClientLibsTask
|
||||
variant.processJavaResources.dependsOn copyClientLibsTask
|
||||
copyClientLibsTask.mustRunAfter ':routerjars:buildClient'
|
||||
}
|
||||
|
||||
|
@ -16,7 +16,11 @@ import java.util.Queue;
|
||||
* @author zzz
|
||||
*/
|
||||
class LogWriter implements Runnable {
|
||||
/** every 10 seconds? why? Just have the gui force a reread after a change?? */
|
||||
private final static long CONFIG_READ_ITERVAL = 10 * 1000;
|
||||
final static long FLUSH_INTERVAL = 29 * 1000;
|
||||
private final static long MIN_FLUSH_INTERVAL = 2*1000;
|
||||
private final static long MAX_FLUSH_INTERVAL = 5*60*1000;
|
||||
private long _lastReadConfig = 0;
|
||||
private long _numBytesInCurrentFile = 0;
|
||||
private OutputStream _currentOut; // = System.out
|
||||
@ -26,6 +30,8 @@ class LogWriter implements Runnable {
|
||||
private LogManager _manager;
|
||||
|
||||
private boolean _write;
|
||||
// ms
|
||||
private volatile long _flushInterval = FLUSH_INTERVAL;
|
||||
|
||||
private LogWriter() { // nop
|
||||
}
|
||||
@ -38,6 +44,14 @@ class LogWriter implements Runnable {
|
||||
_write = false;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param interval in ms
|
||||
* @since 0.9.18
|
||||
*/
|
||||
public void setFlushInterval(long interval) {
|
||||
_flushInterval = Math.min(MAX_FLUSH_INTERVAL, Math.max(MIN_FLUSH_INTERVAL, interval));
|
||||
}
|
||||
|
||||
public void run() {
|
||||
_write = true;
|
||||
try {
|
||||
@ -77,7 +91,7 @@ class LogWriter implements Runnable {
|
||||
if (shouldWait) {
|
||||
try {
|
||||
synchronized (this) {
|
||||
this.wait(10*1000);
|
||||
this.wait(_flushInterval);
|
||||
}
|
||||
} catch (InterruptedException ie) { // nop
|
||||
}
|
9
client/src/main/res/values-fi/strings.xml
Normal file
9
client/src/main/res/values-fi/strings.xml
Normal file
@ -0,0 +1,9 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<resources>
|
||||
<string name="yes">Kyllä</string>
|
||||
<string name="no">Ei</string>
|
||||
<string name="install_i2p_android">Asennetaanko I2P Android?</string>
|
||||
<string name="you_must_have_i2p_android">Sinulla on oltava I2P Android asennettuna ja käynnissä. Haluaisitko asentaa sen?</string>
|
||||
<string name="start_i2p_android">Käynnistetäänkö I2P Android?</string>
|
||||
<string name="would_you_like_to_start_i2p_android">Näyttää siltä, että I2P Android ei ole käynnissä. Haluaisitko käynnistää sen?</string>
|
||||
</resources>
|
9
client/src/main/res/values-id/strings.xml
Normal file
9
client/src/main/res/values-id/strings.xml
Normal file
@ -0,0 +1,9 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<resources>
|
||||
<string name="yes">Ya</string>
|
||||
<string name="no">Tidak</string>
|
||||
<string name="install_i2p_android">Pasang I2P Android?</string>
|
||||
<string name="you_must_have_i2p_android">Anda harus memasang dan menjalankan I2P Android. Apakah anda ingin memasangnya?</string>
|
||||
<string name="start_i2p_android">Memulai I2P Android?</string>
|
||||
<string name="would_you_like_to_start_i2p_android">Sepertinya I2P Android belum dijalankan. Apakah anda ingin memulainya?</string>
|
||||
</resources>
|
10
client/src/main/res/values-ja/strings.xml
Normal file
10
client/src/main/res/values-ja/strings.xml
Normal file
@ -0,0 +1,10 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<resources>
|
||||
<string name="yes">はい</string>
|
||||
<string name="no">いいえ</string>
|
||||
<string name="install_i2p_android">I2PをAndroidにインストールしますか?</string>
|
||||
<string name="you_must_have_i2p_android">I2Pがインストールされ起動している必要があります。
|
||||
インストールしますか?</string>
|
||||
<string name="start_i2p_android">I2Pを起動しますか?</string>
|
||||
<string name="would_you_like_to_start_i2p_android">I2Pが動作していないようです。I2Pを起動しますか?</string>
|
||||
</resources>
|
9
client/src/main/res/values-nl/strings.xml
Normal file
9
client/src/main/res/values-nl/strings.xml
Normal file
@ -0,0 +1,9 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<resources>
|
||||
<string name="yes">Ja</string>
|
||||
<string name="no">Nee</string>
|
||||
<string name="install_i2p_android">I2P Android installeren?</string>
|
||||
<string name="you_must_have_i2p_android">Je moet I2P Android geïnstalleerd en draaiende hebben. Wil je het installeren?</string>
|
||||
<string name="start_i2p_android">I2P Android starten?</string>
|
||||
<string name="would_you_like_to_start_i2p_android">Het lijkt erop dat I2P Android niet draait. Wil je het starten?</string>
|
||||
</resources>
|
9
client/src/main/res/values-pt/strings.xml
Normal file
9
client/src/main/res/values-pt/strings.xml
Normal file
@ -0,0 +1,9 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<resources>
|
||||
<string name="yes">Sim</string>
|
||||
<string name="no">Não</string>
|
||||
<string name="install_i2p_android">Instalar I2P Android?</string>
|
||||
<string name="you_must_have_i2p_android">Deverá ter instalado e em execução a I2P Android. Deseja instalá-la?</string>
|
||||
<string name="start_i2p_android">Iniciar I2P Android?</string>
|
||||
<string name="would_you_like_to_start_i2p_android">Parece que a I2P Android não está em execução. Deseja iniciá-la?</string>
|
||||
</resources>
|
@ -5,5 +5,5 @@
|
||||
<string name="install_i2p_android">Установить I2P Android?</string>
|
||||
<string name="you_must_have_i2p_android">Вам необходимо установить и запустить I2P Android. Установить сейчас?</string>
|
||||
<string name="start_i2p_android">Запустить I2P Android?</string>
|
||||
<string name="would_you_like_to_start_i2p_android">Похоже I2P Android не запущен. Хотите его запустить?</string>
|
||||
<string name="would_you_like_to_start_i2p_android">Похоже, I2P Android не запущен. Хотите его запустить?</string>
|
||||
</resources>
|
||||
|
@ -1,4 +1,4 @@
|
||||
VERSION_NAME=0.4
|
||||
VERSION_NAME=0.5.1
|
||||
GROUP=net.i2p.android
|
||||
|
||||
POM_URL=https://github.com/i2p/i2p.android.base
|
||||
@ -13,5 +13,5 @@ POM_DEVELOPER_NAME=str4d
|
||||
POM_DEVELOPER_EMAIL=str4d@i2pmail.org
|
||||
|
||||
ANDROID_BUILD_TARGET_SDK_VERSION=21
|
||||
ANDROID_BUILD_TOOLS_VERSION=21.0.2
|
||||
ANDROID_BUILD_SDK_VERSION=21
|
||||
ANDROID_BUILD_TOOLS_VERSION=21.1.2
|
||||
ANDROID_BUILD_SDK_VERSION=21
|
||||
|
2
gradle/wrapper/gradle-wrapper.properties
vendored
2
gradle/wrapper/gradle-wrapper.properties
vendored
@ -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-2.1-all.zip
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-2.2.1-all.zip
|
||||
|
Reference in New Issue
Block a user