Compare commits

..

48 Commits

Author SHA1 Message Date
bd0455c413 0.9.26 2016-06-13 13:12:28 +00:00
97f3d937ee Client library 0.9 2016-06-13 12:26:32 +00:00
ff102bfe73 Update dependencies 2016-06-13 12:12:37 +00:00
e31a350398 Enable use of debug builds of I2P with release versions of helper library 2016-06-13 12:03:59 +00:00
43a8f29794 New translations 2016-06-13 11:59:59 +00:00
bbca783b20 Updated translations 2016-06-13 11:59:14 +00:00
6d4fe52f8e Fixed crash when adding tunnel to empty list 2016-06-13 09:57:58 +00:00
ecb08a54fb Upgrade Android support libraries 2016-06-13 09:56:41 +00:00
7bd4524fd8 Update README 2016-06-13 08:41:08 +00:00
40f08d56f6 Use uploaded I2P client libraries instead of locally-built 2016-06-13 08:38:43 +00:00
fe61e35146 Undo accidental checkin 2016-05-29 11:50:34 +00:00
be3f74d71f Fixed "I2CP already listening" bug 2016-05-29 05:09:51 +00:00
8dcfa816e3 Migrate to dynamically-loaded Android-specific classes
Requires i2p.i2p revision fc46f2d84625265a3899b5ad50af5e91d396ba01 or upcoming
release 0.9.26
2016-05-28 23:52:37 +00:00
ae05e22670 Fix legacy package name in helper lib 2016-05-28 23:50:46 +00:00
79a4fa0407 Upgrade Android Gradle plugin 2016-05-28 23:49:50 +00:00
bb958b969a Updated CHANGELOG 2016-04-17 14:05:34 +00:00
02030454d1 0.9.25 2016-04-17 14:00:47 +00:00
e396b0b614 Client library 0.8
i2p.i2p tag: i2p-0.9.25
2016-04-17 13:08:33 +00:00
91cac6b743 Updated CHANGELOG 2016-04-17 12:53:16 +00:00
2a6015d890 Update README 2016-04-17 12:50:47 +00:00
049b094627 Updated translations 2016-04-17 12:41:59 +00:00
077d062e19 Update ignores 2016-04-17 12:39:33 +00:00
4ad483db71 Set colour of news notification to match persistent one 2016-04-17 12:29:47 +00:00
3edb8ad0c2 Fix client lib build system 2016-04-17 12:27:52 +00:00
769f41afe6 Update Gradle wrapper to 2.12 2016-03-28 10:30:49 +00:00
5a9d943a6c Upgrade support libs in client and helper libs, partially fix ProGuard issue
A release build can now be made (ProGuard no longer complains about duplicate
JARs), but the first build attempt after a clean fails because the I2P JARs
needed by the client library aren't on the javac classpath.
2016-03-28 10:27:16 +00:00
44fb246288 Upgrade support libraries to 23.2.1 2016-03-28 03:06:46 +00:00
3cc7498e66 Upgrade Androidplot, sort remote dependencies 2016-03-28 02:33:27 +00:00
84ce883285 Missing witness hash from previous commit 2016-03-28 02:17:43 +00:00
f8dd9df285 Migrate to support library PreferenceFragmentCompat 2016-03-28 02:15:32 +00:00
860cf6a658 Update Samsung 4.2 workaround for support lib 23.1.1 2016-03-09 20:39:15 +00:00
a24a50ce44 Missing files 2016-03-05 15:34:47 +00:00
fc9187297b Update CHANGELOG 2016-03-05 00:34:00 +00:00
eb26df874d NPE fix 2016-03-05 00:33:08 +00:00
27cbb1e57b Cut off speed at KBps 2016-03-05 00:10:16 +00:00
66aa79f90f Missing from previous commit 2016-03-04 23:44:31 +00:00
8b9a70b386 Fix localisation path 2016-03-04 23:35:17 +00:00
872a2d15e2 Update translations 2016-03-04 23:27:12 +00:00
7085567a08 Try to fix ClassNotFoundException 2016-03-04 23:15:58 +00:00
19b07a8a8c Add UI for copying server tunnel B32 2016-03-04 04:49:34 +00:00
0ed78a4806 Extract UI helper and AIDL interfaces to a helper library
For apps that only want to use e.g. HTTP proxy tunnel, this will decrease the
size of their APK by over 1.3 MB.
2015-11-23 03:44:22 +00:00
ca8fb4663f Missing from previous commit 2015-11-23 03:14:33 +00:00
ec34ce481e Moved client library into subdir 2015-11-23 03:04:43 +00:00
b0c4089e26 NPE fix 2015-11-22 04:52:13 +00:00
b23148c71d Updated translations 2015-11-22 04:37:39 +00:00
c9a336a0a5 Updated dependencies 2015-11-22 04:34:43 +00:00
0744426c15 Workaround for Samsung Android 4.2 bug 2015-11-22 03:39:54 +00:00
e6f4bd5531 Updated CHANGELOG 2015-10-10 22:16:07 +00:00
149 changed files with 1496 additions and 553 deletions

View File

@ -24,6 +24,7 @@ _jsp\.java$
/classes/
# Android-specific ignores
^lib/client/libs
^routerjars/libs
local.properties
signing.properties
@ -35,7 +36,6 @@ signing.properties
.*.iws
#Gradle
^.gradle
build
# I2P-specific ignores

View File

@ -1,6 +1,6 @@
[main]
host = https://www.transifex.com
lang_map = he: iw, id: in, pt_BR: pt-rBR, ru_RU: ru, sv_SE: sv, tr_TR: tr, uk_UA: uk, yi: ji, zh_CN: zh
lang_map = he: iw, id: in, pt_BR: pt-rBR, ru_RU: ru, sv_SE: sv, tr_TR: tr, uk_UA: uk, yi: ji, zh_CN: zh, zh_TW: zh-rTW
[I2P.android]
file_filter = app/src/main/res/values-<lang>/strings.xml
@ -9,9 +9,9 @@ source_lang = en
type = ANDROID
minimum_perc = 50
[I2P.android_lib_client]
file_filter = client/src/main/res/values-<lang>/strings.xml
source_file = client/src/main/res/values/strings.xml
[I2P.android_lib_helper]
file_filter = lib/helper/src/main/res/values-<lang>/strings.xml
source_file = lib/helper/src/main/res/values/strings.xml
source_lang = en
type = ANDROID
minimum_perc = 50

View File

@ -1,4 +1,13 @@
0.9.22
0.9.26
* Fixed "I2CP already listening" bug
* Fixed crash when adding tunnel to empty list
0.9.25 / 2016-04-17 / 46d45a878a2b73394b26ca27dbe6c696dedcf1c3
* Fixed a bug on Samsung Android 4.2 devices
* Dependency improvements
* Translation updates
0.9.22 / 2015-10-10 / 0f73ef90b81e2cf3d55f0ea2b0a16e1f10da40ad
* Updated browser config guide
* Bug fixes and translation updates

View File

@ -48,6 +48,12 @@ systemProp.socksProxyPort=9150
2. Check out the [`i2p.i2p`](https://github.com/i2p/i2p.i2p) repository.
3. Create a `local.properties` file in `i2p.android.base/lib/client` containing:
```
ndk.dir=/path/to/ndk
```
3. Create a `local.properties` file in `i2p.android.base/routerjars` containing:
```
@ -107,8 +113,8 @@ systemProp.socksProxyPort=9150
signing.keyId=
signing.password=
signing.secretKeyRingFile=/path/to/secring.gpg
ossrhUsername=
ossrhPassword=
NEXUS_USERNAME=
NEXUS_PASSWORD=
```
2. `gradle :client:uploadArchives`

View File

@ -5,8 +5,8 @@ android {
compileSdkVersion Integer.parseInt(project.ANDROID_BUILD_SDK_VERSION as String)
buildToolsVersion project.ANDROID_BUILD_TOOLS_VERSION as String
defaultConfig {
versionCode 4745231
versionName '0.9.22'
versionCode 4745233
versionName '0.9.26'
minSdkVersion 9
targetSdkVersion Integer.parseInt(project.ANDROID_BUILD_TARGET_SDK_VERSION as String)
@ -19,8 +19,8 @@ android {
buildTypes {
release {
signingConfig signingConfigs.release
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
debug {
applicationIdSuffix '.debug'
@ -52,26 +52,26 @@ android {
dependencies {
// Local dependencies
compile project(':lib:client')
compile project(':routerjars')
compile project(':client')
// Android Support Repository dependencies
compile 'com.android.support:support-v4:23.0.1'
compile 'com.android.support:appcompat-v7:23.0.1'
compile 'com.android.support:recyclerview-v7:23.0.1'
def supportVersion = '23.4.0'
compile "com.android.support:support-v4:$supportVersion"
compile "com.android.support:appcompat-v7:$supportVersion"
compile "com.android.support:preference-v7:$supportVersion"
compile "com.android.support:preference-v14:$supportVersion"
compile "com.android.support:recyclerview-v7:$supportVersion"
// Remote dependencies
compile 'net.i2p.android.ext:floatingactionbutton:1.10.0'
compile files('libs/androidplot-core-0.6.1.jar')
compile ('com.android.support:support-v4-preferencefragment:1.0.0@aar'){
exclude module: 'support-v4'
}
compile 'com.pnikosis:materialish-progress:1.7'
compile 'com.androidplot:androidplot-core:0.9.8'
compile 'com.eowise:recyclerview-stickyheaders:0.5.2@aar'
compile ('com.mcxiaoke.viewpagerindicator:library:2.4.1') {
exclude group: 'com.android.support', module: 'support-v4'
}
compile 'org.sufficientlysecure:html-textview:1.2'
compile 'com.pnikosis:materialish-progress:1.7'
compile 'net.i2p.android.ext:floatingactionbutton:1.10.1'
compile 'org.sufficientlysecure:html-textview:1.6'
// Testing-only dependencies
androidTestCompile 'com.android.support.test.espresso:espresso-core:2.0'
@ -80,15 +80,17 @@ dependencies {
dependencyVerification {
verify = [
'com.android.support:support-v4:5ddf1feda096c164d0dd299cc6786fde18a845ce47dbfe484ff27cce27e19638',
'com.android.support:appcompat-v7:db48e76616882b00e407b19027aae4e92d129456a65b9bb4e4bc5262e3ad9b76',
'com.android.support:recyclerview-v7:9621f5790e47010e14196c3ecee168cc68659316d19b2ef6b5a843f35a81c3db',
'net.i2p.android.ext:floatingactionbutton:32bd3a15680aee3fcd28a7be226ff986b3b025ae8d8977487c1df3e3bb029044',
'com.android.support:support-v4-preferencefragment:5470f5872514a6226fa1fc6f4e000991f38805691c534cf0bd2778911fc773ad',
'com.pnikosis:materialish-progress:da089a90d1dab61e9b50038c09081019398f81190d12b0b567ce94b83ef8cf93',
'com.android.support:support-v4:a0d002465c0f611eedaaef2b2530707d2e9fb3a5c7ed66f53c556a12f714f43a',
'com.android.support:appcompat-v7:d3d96637b0e8e61046567b8c87b667dcf3cd31c7447f651cb58d6e6e744adfba',
'com.android.support:preference-v7:b834787ee64db6c7c53ed7490537eeef52245b7862d4069c06e12b24b77ebbc4',
'com.android.support:preference-v14:21c55edf74928a96fa816e32c0c4d0c98e2280002e84d2b10b458b4a36be9615',
'com.android.support:recyclerview-v7:24465b2ba90dc5ed7e2c05f1c87fe4256c27df6d3cd69b6177f3cb447b05c021',
'com.androidplot:androidplot-core:e44d9e59e06f025330831f7d3c987d2778a3302025184cf0cef05714b5171212',
'com.eowise:recyclerview-stickyheaders:7b236da49b33b840e9ba6e7e4182218d1a2d9047236fdbc3ca947352f9b0883b',
'com.mcxiaoke.viewpagerindicator:library:1e8aad664137f68abdfee94889f6da3dc98be652a235176a403965a07a25de62',
'org.sufficientlysecure:html-textview:1d3bed31ef837437154de8d2362a0e6b0e59b6c3535d87ee48c2fab12c84f9bb',
'com.pnikosis:materialish-progress:da089a90d1dab61e9b50038c09081019398f81190d12b0b567ce94b83ef8cf93',
'net.i2p.android.ext:floatingactionbutton:09d43e2d4ac04a91bf7a37e1ec48a8d220204e3a55dca72cd36cd9fa27461ade',
'org.sufficientlysecure:html-textview:c409b471618b675e3d2a8588f883c5fe8f3369d00df61ec84b29f29c648370ae',
]
}

Binary file not shown.

28
app/proguard-rules.pro vendored Normal file
View File

@ -0,0 +1,28 @@
# Add project specific ProGuard rules here.
# You can edit the include path and order by changing the proguardFiles
# directive in build.gradle.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html
# Add any project specific keep options here:
# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}
# Workaround for Samsung Android 4.2 bug
# https://code.google.com/p/android/issues/detail?id=78377
# https://code.google.com/p/android/issues/detail?id=78377#c188
# https://code.google.com/p/android/issues/detail?id=78377#c302
-keepattributes **
-keep class !android.support.v7.view.menu.**,** {*;}
-dontpreverify
-dontoptimize
-dontshrink
-dontwarn **
-dontnote **

View File

@ -3,6 +3,9 @@
package="net.i2p.android.router"
android:installLocation="auto">
<uses-sdk xmlns:tools="http://schemas.android.com/tools"
tools:overrideLibrary="android.support.v14.preference" />
<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" />
@ -51,6 +54,7 @@
<action android:name="android.intent.action.PICK" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
<meta-data
android:name="android.app.searchable"
android:resource="@xml/searchable_addressbook" />

View File

@ -1,11 +1,10 @@
package net.i2p.android.widget;
package android.support.v4.view;
import android.content.Context;
import android.os.Parcel;
import android.os.Parcelable;
import android.support.v4.os.ParcelableCompat;
import android.support.v4.os.ParcelableCompatCreatorCallbacks;
import android.support.v4.view.ViewPager;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.widget.Toast;
@ -69,7 +68,7 @@ public class CustomViewPager extends ViewPager {
setCurrentItem(0);
}
public static class SavedState extends BaseSavedState {
public static class SavedState extends ViewPager.SavedState {
boolean enabled;
int fixedPage;
int fixedPageString;
@ -107,10 +106,7 @@ public class CustomViewPager extends ViewPager {
});
SavedState(Parcel in, ClassLoader loader) {
super(in);
if (loader == null) {
loader = getClass().getClassLoader();
}
super(in, loader);
enabled = in.readInt() != 0;
fixedPage = in.readInt();
fixedPageString = in.readInt();

View File

@ -1,162 +0,0 @@
/*
* The following code was written by Matthew Wiggins
* and is released under the APACHE 2.0 license
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Slight modifications and bugfixes by Sponge <sponge@mail.i2p>
* These modifications are released under the WTFPL (any version)
*
* We don't need negative numbers yet, and may never need to.
*
* XML Usage example:
*
* <com.hlidskialf.android.preference.SeekBarPreference android:key="duration"
* android:title="Duration of something"
* android:summary="How long something will last"
* android:dialogMessage="Something duration"
* android:defaultValue="5"
* android:text=" minutes"
* android:max="60"
* />
*
*/
package com.hlidskialf.android.preference;
import android.content.Context;
import android.preference.DialogPreference;
import android.util.AttributeSet;
import android.view.Gravity;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.SeekBar;
import android.widget.TextView;
public class SeekBarPreference extends DialogPreference implements SeekBar.OnSeekBarChangeListener {
private static final String androidns = "http://schemas.android.com/apk/res/android";
private SeekBar mSeekBar;
private TextView mSplashText;
private TextView mValueText;
private Context mContext;
private String mDialogMessage, mSuffix;
private String mDefault = "0";
private int mMax = 0;
private int mValue = 0;
private int mDirection = LinearLayout.HORIZONTAL;
public SeekBarPreference(Context context, AttributeSet attrs) {
super(context, attrs);
mContext = context;
int dialogMessageR = attrs.getAttributeResourceValue(androidns, "dialogMessage", 0);
mDialogMessage = (dialogMessageR == 0)
? attrs.getAttributeValue(androidns, "dialogMessage")
: context.getResources().getString(dialogMessageR);
int textR = attrs.getAttributeResourceValue(androidns, "text", 0);
mSuffix = (textR == 0)
? attrs.getAttributeValue(androidns, "text")
: context.getResources().getString(textR);
mDefault = attrs.getAttributeValue(androidns, "defaultValue");
mMax = Integer.parseInt(attrs.getAttributeValue(androidns, "max"));
if (attrs.getAttributeValue(androidns, "direction") != null) {
mDirection = Integer.parseInt(attrs.getAttributeValue(androidns, "direction"));
}
}
@Override
protected View onCreateDialogView() {
LinearLayout.LayoutParams params;
LinearLayout layout = new LinearLayout(mContext);
layout.setOrientation(LinearLayout.VERTICAL);
layout.setPadding(6, 6, 6, 10);
// Set the width so that it is as usable as possible.
// We multiplymMax so that the smaller ranges will get a bigger area.
if (mDirection == LinearLayout.HORIZONTAL) {
layout.setMinimumWidth(mMax*5);
} else {
layout.setMinimumHeight(mMax*5);
}
mSplashText = new TextView(mContext);
if (mDialogMessage != null) {
mSplashText.setText(mDialogMessage);
}
layout.addView(mSplashText);
mValueText = new TextView(mContext);
mValueText.setGravity(Gravity.CENTER_HORIZONTAL);
mValueText.setTextSize(32);
params = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.WRAP_CONTENT);
layout.addView(mValueText, params);
mSeekBar = new SeekBar(mContext);
mSeekBar.setOnSeekBarChangeListener(this);
// Move the bar away from the changing text, so you can see it, and
// move it away from the edges to improve usability for the end-ranges.
mSeekBar.setPadding(6, 30, 6, 6);
layout.addView(mSeekBar, new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT));
if (shouldPersist()) {
mValue = Integer.parseInt(getPersistedString(mDefault));
}
mSeekBar.setMax(mMax);
mSeekBar.setProgress(mValue);
return layout;
}
@Override
protected void onBindDialogView(View v) {
super.onBindDialogView(v);
mSeekBar.setMax(mMax);
mSeekBar.setProgress(mValue);
}
@Override
protected void onSetInitialValue(boolean restore, Object defaultValue) {
super.onSetInitialValue(restore, defaultValue);
if (restore) {
mValue = shouldPersist() ? Integer.parseInt(getPersistedString(mDefault)) : 0;
} else {
mValue = (Integer) defaultValue;
}
}
public void onProgressChanged(SeekBar seek, int value, boolean fromTouch) {
String t = String.valueOf(value);
mValueText.setText(mSuffix == null ? t : t.concat(mSuffix));
if (shouldPersist()) {
persistString(t);
}
callChangeListener(value);
}
public void onStartTrackingTouch(SeekBar seek) {
}
public void onStopTrackingTouch(SeekBar seek) {
}
public void setMax(int max) {
mMax = max;
}
public int getMax() {
return mMax;
}
public void setProgress(int progress) {
mValue = progress;
if (mSeekBar != null) {
mSeekBar.setProgress(progress);
}
}
public int getProgress() {
return mValue;
}
}

View File

@ -0,0 +1,161 @@
package com.pavelsikun.seekbarpreference;
import android.content.Context;
import android.content.res.TypedArray;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v7.preference.Preference;
import android.util.AttributeSet;
import android.util.Log;
import android.view.View;
import android.widget.SeekBar;
import android.widget.TextView;
import net.i2p.android.router.R;
/**
* Based on MaterialSeekBarController created by mrbimc on 30.09.15.
*/
public class MaterialSeekBarController implements SeekBar.OnSeekBarChangeListener {
private final String TAG = getClass().getName();
public static final int DEFAULT_CURRENT_VALUE = 50;
private static final int DEFAULT_MAX_VALUE = 100;
private static final String DEFAULT_MEASUREMENT_UNIT = "";
private int mMaxValue;
private int mMaxDigits;
private int mCurrentValue;
private String mMeasurementUnit;
private SeekBar mSeekBar;
private TextView mSeekBarValue;
private TextView mMeasurementUnitView;
private Context mContext;
private Persistable mPersistable;
public MaterialSeekBarController(Context context, AttributeSet attrs, Persistable persistable) {
mContext = context;
mPersistable = persistable;
init(attrs, null);
}
private void init(AttributeSet attrs, View view) {
setValuesFromXml(attrs);
if(view != null) onBindView(view);
}
private void setValuesFromXml(@Nullable AttributeSet attrs) {
if (attrs == null) {
mCurrentValue = DEFAULT_CURRENT_VALUE;
mMaxValue = DEFAULT_MAX_VALUE;
mMeasurementUnit = DEFAULT_MEASUREMENT_UNIT;
} else {
TypedArray a = mContext.obtainStyledAttributes(attrs, R.styleable.SeekBarPreference);
try {
mMaxValue = a.getInt(R.styleable.SeekBarPreference_msbp_maxValue, DEFAULT_MAX_VALUE);
mCurrentValue = a.getInt(R.styleable.SeekBarPreference_msbp_defaultValue, DEFAULT_CURRENT_VALUE);
if(mCurrentValue > mMaxValue) mCurrentValue = mMaxValue / 2;
mMeasurementUnit = a.getString(R.styleable.SeekBarPreference_msbp_measurementUnit);
if (mMeasurementUnit == null)
mMeasurementUnit = DEFAULT_MEASUREMENT_UNIT;
} finally {
a.recycle();
}
}
mMaxDigits = (int) Math.log10(mMaxValue) + 1;
}
public void onBindView(@NonNull View view) {
mSeekBar = (SeekBar) view.findViewById(R.id.seekbar);
mSeekBar.setMax(mMaxValue);
mSeekBar.setOnSeekBarChangeListener(this);
mSeekBarValue = (TextView) view.findViewById(R.id.seekbar_value);
setPaddedValue(mCurrentValue);
mMeasurementUnitView = (TextView) view.findViewById(R.id.measurement_unit);
mMeasurementUnitView.setText(mMeasurementUnit);
mSeekBar.setProgress(mCurrentValue);
if (!view.isEnabled()) {
mSeekBar.setEnabled(false);
mSeekBarValue.setEnabled(false);
}
}
protected void onSetInitialValue(boolean restoreValue, @NonNull Object defaultValue) {
mCurrentValue = mMaxValue / 2;
try {
mCurrentValue = (Integer) defaultValue;
} catch (Exception ex) {
Log.e(TAG, "Invalid default value: " + defaultValue.toString());
}
}
public void setEnabled(boolean enabled) {
if (mSeekBar != null) mSeekBar.setEnabled(enabled);
if (mSeekBarValue != null) mSeekBarValue.setEnabled(enabled);
}
public void onDependencyChanged(Preference dependency, boolean disableDependent) {
if (mSeekBar != null) mSeekBar.setEnabled(!disableDependent);
if (mSeekBarValue != null) mSeekBarValue.setEnabled(!disableDependent);
}
//SeekBarListener:
@Override
public void onProgressChanged(@NonNull SeekBar seekBar, int progress, boolean fromUser) {
mCurrentValue = progress;
setPaddedValue(progress);
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(@NonNull SeekBar seekBar) {
setCurrentValue(mCurrentValue);
}
private void setPaddedValue(int value) {
mSeekBarValue.setText(String.format("%0" + mMaxDigits +"d", value));
}
//public methods for manipulating this widget from java:
public void setCurrentValue(int value) {
mCurrentValue = value;
if (mPersistable != null) mPersistable.onPersist(value);
}
public int getCurrentValue() {
return mCurrentValue;
}
public void setMaxValue(int maxValue) {
mMaxValue = maxValue;
if (mSeekBar != null) mSeekBar.setMax(mMaxValue);
}
public int getMaxValue() {
return mMaxValue;
}
public void setMeasurementUnit(String measurementUnit) {
mMeasurementUnit = measurementUnit;
if (mMeasurementUnitView != null) mMeasurementUnitView.setText(mMeasurementUnit);
}
public String getMeasurementUnit() {
return mMeasurementUnit;
}
}

View File

@ -0,0 +1,8 @@
package com.pavelsikun.seekbarpreference;
/**
* Created by mrbimc on 04.10.15.
*/
public interface Persistable {
void onPersist(int value);
}

View File

@ -0,0 +1,104 @@
package com.pavelsikun.seekbarpreference;
import android.annotation.TargetApi;
import android.content.Context;
import android.content.res.TypedArray;
import android.os.Build;
import android.support.annotation.NonNull;
import android.support.v7.preference.Preference;
import android.support.v7.preference.PreferenceViewHolder;
import android.util.AttributeSet;
import net.i2p.android.router.R;
public class SeekBarPreference extends Preference implements Persistable {
private MaterialSeekBarController mController;
public SeekBarPreference(Context context) {
super(context);
init(null);
}
public SeekBarPreference(Context context, AttributeSet attrs) {
super(context, attrs);
init(attrs);
}
public SeekBarPreference(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init(attrs);
}
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public SeekBarPreference(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
init(attrs);
}
private void init(AttributeSet attrs) {
setLayoutResource(R.layout.seekbar_preference);
mController = new MaterialSeekBarController(getContext(), attrs, this);
}
@Override
public void onBindViewHolder(@NonNull PreferenceViewHolder viewHolder) {
super.onBindViewHolder(viewHolder);
mController.onBindView(viewHolder.itemView);
}
@Override
protected Object onGetDefaultValue(@NonNull TypedArray ta, int index) {
if(mController != null) return ta.getInt(index, mController.getCurrentValue());
else return null;
}
@Override
protected void onSetInitialValue(boolean restoreValue, @NonNull Object defaultValue) {
int average = mController.getMaxValue() / 2;
if(restoreValue) mController.setCurrentValue(getPersistedInt(average));
else mController.onSetInitialValue(restoreValue, defaultValue);
}
@Override
public void setEnabled(boolean enabled) {
super.setEnabled(enabled);
mController.setEnabled(enabled);
}
@Override
public void onDependencyChanged(Preference dependency, boolean disableDependent) {
super.onDependencyChanged(dependency, disableDependent);
mController.onDependencyChanged(dependency, disableDependent);
}
@Override
public void onPersist(int value) {
persistInt(value);
notifyChanged();
}
public String getMeasurementUnit() {
return mController.getMeasurementUnit();
}
public void setMeasurementUnit(String measurementUnit) {
mController.setMeasurementUnit(measurementUnit);
}
public int getMaxValue() {
return mController.getMaxValue();
}
public void setMaxValue(int maxValue) {
mController.setMaxValue(maxValue);
}
public int getCurrentValue() {
return mController.getCurrentValue();
}
public void setCurrentValue(int value) {
mController.setCurrentValue(value);
}
}

View File

@ -24,7 +24,7 @@ import net.i2p.android.router.service.State;
import net.i2p.android.router.util.Connectivity;
import net.i2p.android.router.util.Util;
import net.i2p.android.util.MemoryFragmentPagerAdapter;
import net.i2p.android.widget.CustomViewPager;
import android.support.v4.view.CustomViewPager;
import net.i2p.android.widget.SlidingTabLayout;
import net.i2p.router.RouterContext;

View File

@ -1,11 +1,14 @@
package net.i2p.android.i2ptunnel;
import android.annotation.TargetApi;
import android.app.Activity;
import android.app.Dialog;
import android.content.ActivityNotFoundException;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.app.DialogFragment;
@ -117,8 +120,26 @@ public class TunnelDetailFragment extends Fragment {
ViewCompat.setTransitionName(description,
getActivity().getString(R.string.TUNNEL_DESCRIPTION) + mTunnel.getId());
TextView details = (TextView) v.findViewById(R.id.tunnel_details);
details.setText(mTunnel.getDetails());
if (!mTunnel.getDetails().isEmpty()) {
v.findViewById(R.id.tunnel_details_container).setVisibility(View.VISIBLE);
TextView details = (TextView) v.findViewById(R.id.tunnel_details);
View copyDetails = v.findViewById(R.id.tunnel_details_copy);
details.setText(mTunnel.getDetails());
if (!mTunnel.isClient()) {
copyDetails.setVisibility(View.VISIBLE);
copyDetails.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB)
copyToClipbardLegacy();
else
copyToClipboardHoneycomb();
Toast.makeText(getActivity(), R.string.address_copied_to_clipboard, Toast.LENGTH_SHORT).show();
}
});
}
}
View accessIfacePortItem = v.findViewById(R.id.tunnel_access_interface_port_item);
TextView accessIfacePort = (TextView) v.findViewById(R.id.tunnel_access_interface_port);
@ -279,4 +300,17 @@ public class TunnelDetailFragment extends Fragment {
return super.onOptionsItemSelected(item);
}
}
private void copyToClipbardLegacy() {
android.text.ClipboardManager clipboard = (android.text.ClipboardManager) getActivity().getSystemService(Context.CLIPBOARD_SERVICE);
clipboard.setText(mTunnel.getDetails());
}
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
private void copyToClipboardHoneycomb() {
android.content.ClipboardManager clipboard = (android.content.ClipboardManager) getActivity().getSystemService(Context.CLIPBOARD_SERVICE);
android.content.ClipData clip = android.content.ClipData.newPlainText(
mTunnel.getName(), mTunnel.getDetails());
clipboard.setPrimaryClip(clip);
}
}

View File

@ -252,7 +252,7 @@ public class TunnelEntry {
if (isClient())
details = getClientDestination();
else
details = "";
details = getDestHashBase32();
return details;
}

View File

@ -65,8 +65,13 @@ public class TunnelEntryAdapter extends RecyclerView.Adapter<RecyclerView.ViewHo
}
public void addTunnel(TunnelEntry tunnel) {
boolean wasEmpty = mTunnels.isEmpty();
mTunnels.add(tunnel);
notifyItemInserted(mTunnels.size()-1);
if (wasEmpty) {
notifyDataSetChanged();
} else {
notifyItemInserted(mTunnels.size() - 1);
}
}
public TunnelEntry getTunnel(int position) {

View File

@ -3,11 +3,11 @@ package net.i2p.android.i2ptunnel.preferences;
import android.content.DialogInterface;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.CheckBoxPreference;
import android.preference.Preference;
import android.preference.PreferenceCategory;
import android.preference.PreferenceScreen;
import android.support.v7.app.AlertDialog;
import android.support.v7.preference.CheckBoxPreference;
import android.support.v7.preference.Preference;
import android.support.v7.preference.PreferenceCategory;
import android.support.v7.preference.PreferenceScreen;
import net.i2p.android.i2ptunnel.util.TunnelLogic;
import net.i2p.android.i2ptunnel.util.TunnelUtil;

View File

@ -2,27 +2,25 @@ package net.i2p.android.i2ptunnel.preferences;
import android.os.Build;
import android.os.Bundle;
import android.preference.Preference;
import android.preference.PreferenceGroup;
import android.preference.PreferenceScreen;
import android.support.v4.preference.PreferenceFragment;
import android.support.v7.preference.Preference;
import android.support.v7.preference.PreferenceGroup;
import android.support.v7.preference.PreferenceScreen;
import net.i2p.I2PAppContext;
import net.i2p.android.i2ptunnel.util.TunnelUtil;
import net.i2p.android.preferences.util.CustomPreferenceFragment;
import net.i2p.android.router.R;
import net.i2p.i2ptunnel.TunnelControllerGroup;
import net.i2p.i2ptunnel.ui.TunnelConfig;
public abstract class BaseTunnelPreferenceFragment extends PreferenceFragment {
public abstract class BaseTunnelPreferenceFragment extends CustomPreferenceFragment {
protected static final String ARG_TUNNEL_ID = "tunnelId";
protected TunnelControllerGroup mGroup;
protected int mTunnelId;
@Override
public void onCreate(Bundle paramBundle) {
super.onCreate(paramBundle);
public void onCreatePreferences(Bundle paramBundle, String s) {
String error;
try {
mGroup = TunnelControllerGroup.getInstance();

View File

@ -4,13 +4,13 @@ import android.content.DialogInterface;
import android.content.SharedPreferences;
import android.os.AsyncTask;
import android.os.Bundle;
import android.preference.CheckBoxPreference;
import android.preference.ListPreference;
import android.preference.Preference;
import android.preference.PreferenceCategory;
import android.preference.PreferenceScreen;
import android.support.v4.app.Fragment;
import android.support.v7.app.AlertDialog;
import android.support.v7.preference.CheckBoxPreference;
import android.support.v7.preference.ListPreference;
import android.support.v7.preference.Preference;
import android.support.v7.preference.PreferenceCategory;
import android.support.v7.preference.PreferenceScreen;
import net.i2p.android.i2ptunnel.util.TunnelLogic;
import net.i2p.android.i2ptunnel.util.TunnelUtil;

View File

@ -1,20 +1,19 @@
package net.i2p.android.preferences;
import android.os.Bundle;
import android.preference.Preference;
import android.support.v4.app.Fragment;
import android.support.v4.preference.PreferenceFragment;
import android.support.v7.preference.Preference;
import android.support.v7.preference.PreferenceFragmentCompat;
import net.i2p.android.router.R;
import net.i2p.android.router.SettingsActivity;
public class AdvancedPreferenceFragment extends PreferenceFragment {
public class AdvancedPreferenceFragment extends PreferenceFragmentCompat {
private static final String PREFERENCE_CATEGORY_TRANSPORTS = "preference_category_transports";
private static final String PREFERENCE_CATEGORY_EXPL_TUNNELS = "preference_category_expl_tunnels";
@Override
public void onCreate(Bundle paramBundle) {
super.onCreate(paramBundle);
public void onCreatePreferences(Bundle paramBundle, String s) {
addPreferencesFromResource(R.xml.settings_advanced);
findPreference(PREFERENCE_CATEGORY_TRANSPORTS)

View File

@ -7,8 +7,7 @@ import net.i2p.android.router.SettingsActivity;
public class AppearancePreferenceFragment extends I2PreferenceFragment {
@Override
public void onCreate(Bundle paramBundle) {
super.onCreate(paramBundle);
public void onCreatePreferences(Bundle paramBundle, String s) {
addPreferencesFromResource(R.xml.settings_appearance);
}

View File

@ -7,8 +7,7 @@ import net.i2p.android.router.SettingsActivity;
public class ExploratoryPoolPreferenceFragment extends I2PreferenceFragment {
@Override
public void onCreate(Bundle paramBundle) {
super.onCreate(paramBundle);
public void onCreatePreferences(Bundle paramBundle, String s) {
addPreferencesFromResource(R.xml.settings_expl_tunnels);
}

View File

@ -2,10 +2,10 @@ package net.i2p.android.preferences;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.CheckBoxPreference;
import android.preference.PreferenceCategory;
import android.preference.PreferenceManager;
import android.preference.PreferenceScreen;
import android.support.v7.preference.CheckBoxPreference;
import android.support.v7.preference.PreferenceCategory;
import android.support.v7.preference.PreferenceManager;
import android.support.v7.preference.PreferenceScreen;
import net.i2p.android.router.R;
import net.i2p.android.router.SettingsActivity;
@ -24,8 +24,7 @@ public class GraphsPreferenceFragment extends I2PreferenceFragment {
public static final String GRAPH_PREFERENCES_SEEN = "graphPreferencesSeen";
@Override
public void onCreate(Bundle paramBundle) {
super.onCreate(paramBundle);
public void onCreatePreferences(Bundle paramBundle, String s) {
addPreferencesFromResource(R.xml.settings_graphs);
setupGraphSettings();
}

View File

@ -1,9 +1,9 @@
package net.i2p.android.preferences;
import android.support.v4.preference.PreferenceFragment;
import android.widget.Toast;
import net.i2p.I2PAppContext;
import net.i2p.android.preferences.util.CustomPreferenceFragment;
import net.i2p.android.router.R;
import net.i2p.android.router.util.Util;
import net.i2p.router.RouterContext;
@ -15,7 +15,7 @@ import java.util.Set;
/**
* A PreferenceFragment that handles saving router settings.
*/
public class I2PreferenceFragment extends PreferenceFragment {
public abstract class I2PreferenceFragment extends CustomPreferenceFragment {
@Override
public void onPause() {
List<Properties> lProps = Util.getPropertiesFromPreferences(getActivity());

View File

@ -1,7 +1,7 @@
package net.i2p.android.preferences;
import android.os.Bundle;
import android.preference.PreferenceScreen;
import android.support.v7.preference.PreferenceScreen;
import net.i2p.android.router.R;
import net.i2p.android.router.SettingsActivity;
@ -11,8 +11,7 @@ import net.i2p.util.LogManager;
public class LoggingPreferenceFragment extends I2PreferenceFragment {
@Override
public void onCreate(Bundle paramBundle) {
super.onCreate(paramBundle);
public void onCreatePreferences(Bundle paramBundle, String s) {
addPreferencesFromResource(R.xml.settings_logging);
setupLoggingSettings();
}

View File

@ -7,8 +7,7 @@ import net.i2p.android.router.SettingsActivity;
public class NetworkPreferenceFragment extends I2PreferenceFragment {
@Override
public void onCreate(Bundle paramBundle) {
super.onCreate(paramBundle);
public void onCreatePreferences(Bundle paramBundle, String s) {
addPreferencesFromResource(R.xml.settings_net);
}

View File

@ -3,22 +3,21 @@ package net.i2p.android.preferences;
import android.content.Context;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.CheckBoxPreference;
import android.preference.Preference;
import android.preference.PreferenceManager;
import android.preference.PreferenceScreen;
import android.support.v7.preference.CheckBoxPreference;
import android.support.v7.preference.Preference;
import android.support.v7.preference.PreferenceManager;
import android.support.v7.preference.PreferenceScreen;
import android.widget.Toast;
import net.i2p.android.router.R;
import net.i2p.android.router.SettingsActivity;
import net.i2p.android.router.util.PortPreference;
import net.i2p.android.preferences.util.PortPreference;
import net.i2p.android.router.util.Util;
import net.i2p.router.RouterContext;
public class TransportsPreferenceFragment extends I2PreferenceFragment {
@Override
public void onCreate(Bundle paramBundle) {
super.onCreate(paramBundle);
public void onCreatePreferences(Bundle paramBundle, String s) {
// Load any properties that the router might have changed on us.
loadProperties();
addPreferencesFromResource(R.xml.settings_transports);

View File

@ -1,9 +1,8 @@
package net.i2p.android.router.util;
package net.i2p.android.preferences.util;
import android.content.Context;
import android.content.res.TypedArray;
import android.preference.EditTextPreference;
import android.text.InputType;
import android.support.v7.preference.EditTextPreference;
import android.util.AttributeSet;
import net.i2p.android.router.R;
@ -26,7 +25,6 @@ public class ConnectionLimitPreference extends EditTextPreference {
}
void init(Context context, AttributeSet attrs) {
getEditText().setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_SIGNED);
TypedArray attr = context.obtainStyledAttributes(attrs, R.styleable.ConnectionLimitPreference, 0, 0);
mValueInTitle = attr.getBoolean(R.styleable.ConnectionLimitPreference_clp_valueInTitle, false);
attr.recycle();

View File

@ -0,0 +1,24 @@
package net.i2p.android.preferences.util;
import android.os.Bundle;
import android.support.v7.preference.EditTextPreferenceDialogFragmentCompat;
import android.text.InputType;
import android.view.View;
import android.widget.EditText;
public class ConnectionLimitPreferenceDialog extends EditTextPreferenceDialogFragmentCompat {
public static ConnectionLimitPreferenceDialog newInstance(String key) {
final ConnectionLimitPreferenceDialog fragment = new ConnectionLimitPreferenceDialog();
final Bundle b = new Bundle(1);
b.putString(ARG_KEY, key);
fragment.setArguments(b);
return fragment;
}
@Override
protected void onBindDialogView(View view) {
super.onBindDialogView(view);
((EditText)view.findViewById(android.R.id.edit)).setInputType(
InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_SIGNED);
}
}

View File

@ -0,0 +1,36 @@
package net.i2p.android.preferences.util;
import android.support.v4.app.DialogFragment;
import android.support.v7.preference.Preference;
import android.support.v7.preference.PreferenceFragmentCompat;
/**
* Handles custom Preferences.
*/
public abstract class CustomPreferenceFragment extends PreferenceFragmentCompat {
private static final String DIALOG_FRAGMENT_TAG =
"android.support.v7.preference.PreferenceFragment.DIALOG";
@Override
public void onDisplayPreferenceDialog(Preference preference) {
// check if dialog is already showing
if (getFragmentManager().findFragmentByTag(DIALOG_FRAGMENT_TAG) != null) {
return;
}
DialogFragment f = null;
if (preference instanceof ConnectionLimitPreference) {
f = ConnectionLimitPreferenceDialog.newInstance(preference.getKey());
} else if (preference instanceof IntEditTextPreference) {
f = IntEditTextPreferenceDialog.newInstance(preference.getKey());
} else if (preference instanceof PortPreference) {
f = PortPreferenceDialog.newInstance(preference.getKey());
} else {
super.onDisplayPreferenceDialog(preference);
}
if (f != null) {
f.setTargetFragment(this, 0);
f.show(getFragmentManager(), DIALOG_FRAGMENT_TAG);
}
}
}

View File

@ -1,25 +1,21 @@
package net.i2p.android.router.util;
package net.i2p.android.preferences.util;
import android.content.Context;
import android.preference.EditTextPreference;
import android.text.InputType;
import android.support.v7.preference.EditTextPreference;
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

View File

@ -0,0 +1,24 @@
package net.i2p.android.preferences.util;
import android.os.Bundle;
import android.support.v7.preference.EditTextPreferenceDialogFragmentCompat;
import android.text.InputType;
import android.view.View;
import android.widget.EditText;
public class IntEditTextPreferenceDialog extends EditTextPreferenceDialogFragmentCompat {
public static IntEditTextPreferenceDialog newInstance(String key) {
final IntEditTextPreferenceDialog fragment = new IntEditTextPreferenceDialog();
final Bundle b = new Bundle(1);
b.putString(ARG_KEY, key);
fragment.setArguments(b);
return fragment;
}
@Override
protected void onBindDialogView(View view) {
super.onBindDialogView(view);
((EditText)view.findViewById(android.R.id.edit)).setInputType(
InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_SIGNED);
}
}

View File

@ -1,7 +1,7 @@
package net.i2p.android.router.util;
package net.i2p.android.preferences.util;
import android.content.Context;
import android.preference.ListPreference;
import android.support.v7.preference.ListPreference;
import android.util.AttributeSet;
public class IntListPreference extends ListPreference {

View File

@ -1,8 +1,7 @@
package net.i2p.android.router.util;
package net.i2p.android.preferences.util;
import android.content.Context;
import android.preference.EditTextPreference;
import android.text.InputType;
import android.support.v7.preference.EditTextPreference;
import android.util.AttributeSet;
import net.i2p.android.router.R;
@ -10,17 +9,14 @@ 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

View File

@ -0,0 +1,23 @@
package net.i2p.android.preferences.util;
import android.os.Bundle;
import android.support.v7.preference.EditTextPreferenceDialogFragmentCompat;
import android.text.InputType;
import android.view.View;
import android.widget.EditText;
public class PortPreferenceDialog extends EditTextPreferenceDialogFragmentCompat {
public static PortPreferenceDialog newInstance(String key) {
final PortPreferenceDialog fragment = new PortPreferenceDialog();
final Bundle b = new Bundle(1);
b.putString(ARG_KEY, key);
fragment.setArguments(b);
return fragment;
}
@Override
protected void onBindDialogView(View view) {
super.onBindDialogView(view);
((EditText)view.findViewById(android.R.id.edit)).setInputType(InputType.TYPE_CLASS_NUMBER);
}
}

View File

@ -1,7 +1,7 @@
package net.i2p.android.router.util;
package net.i2p.android.preferences.util;
import android.content.Context;
import android.preference.EditTextPreference;
import android.support.v7.preference.EditTextPreference;
import android.util.AttributeSet;
public class SummaryEditTextPreference extends EditTextPreference {

View File

@ -93,14 +93,18 @@ public class ConsoleContainer extends Fragment {
}
private void setMenuVisibility() {
boolean advanced = PreferenceManager.getDefaultSharedPreferences(getActivity()).getBoolean(
"i2pandroid.main.showStats", false);
boolean routerRunning = Util.getRouterContext() != null;
mConsoleMenu.findViewById(R.id.action_logs).setVisibility(routerRunning ? View.VISIBLE : View.GONE);
mConsoleMenu.findViewById(R.id.action_graphs).setVisibility(routerRunning ? View.VISIBLE : View.GONE);
mConsoleMenu.findViewById(R.id.action_peers).setVisibility(advanced && routerRunning ? View.VISIBLE : View.GONE);
mConsoleMenu.findViewById(R.id.action_netdb).setVisibility(advanced && routerRunning ? View.VISIBLE : View.GONE);
if (getActivity() != null) {
boolean advanced = PreferenceManager.getDefaultSharedPreferences(getActivity())
.getBoolean("i2pandroid.main.showStats", false);
mConsoleMenu.findViewById(R.id.action_peers).setVisibility(
advanced && routerRunning ? View.VISIBLE : View.GONE);
mConsoleMenu.findViewById(R.id.action_netdb).setVisibility(
advanced && routerRunning ? View.VISIBLE : View.GONE);
}
}
@Override

View File

@ -428,9 +428,9 @@ public class MainFragment extends I2PFragmentBase {
double outData = ctx.bandwidthLimiter().getTotalAllocatedOutboundBytes();
((TextView) getActivity().findViewById(R.id.console_download_stats)).setText(
Util.formatSize(inBw) + "Bps / " + Util.formatSize(inData) + "B");
Util.formatSpeed(inBw) + "Bps / " + Util.formatSize(inData) + "B");
((TextView) getActivity().findViewById(R.id.console_upload_stats)).setText(
Util.formatSize(outBw) + "Bps / " + Util.formatSize(outData) + "B");
Util.formatSpeed(outBw) + "Bps / " + Util.formatSize(outData) + "B");
getActivity().findViewById(R.id.console_usage_stats).setVisibility(View.VISIBLE);
} else {

View File

@ -3,12 +3,12 @@ package net.i2p.android.router;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.Preference;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.content.LocalBroadcastManager;
import android.support.v4.preference.PreferenceFragment;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.preference.Preference;
import android.support.v7.preference.PreferenceFragmentCompat;
import android.support.v7.widget.Toolbar;
import net.i2p.android.I2PActivity;
@ -84,10 +84,11 @@ public class SettingsActivity extends AppCompatActivity implements
}
}
public static class SettingsFragment extends PreferenceFragment {
public static class SettingsFragment extends PreferenceFragmentCompat {
@Override
public void onCreate(Bundle paramBundle) {
super.onCreate(paramBundle);
public void onCreatePreferences(Bundle paramBundle, String s) {
migrateOldSettings();
addPreferencesFromResource(R.xml.settings);
this.findPreference(PREFERENCE_CATEGORY_NETWORK)
@ -104,6 +105,29 @@ public class SettingsActivity extends AppCompatActivity implements
.setOnPreferenceClickListener(new CategoryClickListener(PREFERENCE_CATEGORY_ADVANCED));
}
private void migrateOldSettings() {
SharedPreferences prefs = getPreferenceManager().getSharedPreferences();
try {
prefs.getInt("i2np.bandwidth.inboundKBytesPerSecond", 0);
} catch (ClassCastException e) {
// Migrate pre-0.9.25 settings
SharedPreferences.Editor editor = prefs.edit();
editor.remove("i2np.bandwidth.inboundKBytesPerSecond");
editor.putInt("i2np.bandwidth.inboundKBytesPerSecond", Integer.parseInt(
prefs.getString("i2np.bandwidth.inboundKBytesPerSecond", "100")));
editor.remove("i2np.bandwidth.outboundKBytesPerSecond");
editor.putInt("i2np.bandwidth.outboundKBytesPerSecond", Integer.parseInt(
prefs.getString("i2np.bandwidth.outboundKBytesPerSecond", "100")));
editor.remove("i2np.ntcp.maxConnections");
editor.putInt("i2np.ntcp.maxConnections", Integer.parseInt(
prefs.getString("i2np.ntcp.maxConnections", "32")));
editor.remove("i2np.udp.maxConnections");
editor.putInt("i2np.udp.maxConnections", Integer.parseInt(
prefs.getString("i2np.udp.maxConnections", "32")));
editor.apply();
}
}
@Override
public void onResume() {
super.onResume();

View File

@ -144,11 +144,14 @@ public class AddressbookContainer extends Fragment
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.container_addressbook_actions, menu);
SearchManager searchManager = (SearchManager) getActivity().getSystemService(Context.SEARCH_SERVICE);
MenuItem searchItem = menu.findItem(R.id.action_search_addressbook);
SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchItem);
searchView.setSearchableInfo(searchManager.getSearchableInfo(getActivity().getComponentName()));
searchView.setOnQueryTextListener(this);
Activity activity = getActivity();
if (activity != null) {
SearchManager searchManager = (SearchManager) activity.getSystemService(Context.SEARCH_SERVICE);
MenuItem searchItem = menu.findItem(R.id.action_search_addressbook);
SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchItem);
searchView.setSearchableInfo(searchManager.getSearchableInfo(activity.getComponentName()));
searchView.setOnQueryTextListener(this);
}
}
@Override

View File

@ -264,11 +264,11 @@ public class RouterService extends Service {
String text =
getResources().getString(R.string.notification_status_text,
Util.formatSize(inBW), Util.formatSize(outBW));
Util.formatSpeed(inBW), Util.formatSpeed(outBW));
String bigText =
getResources().getString(R.string.notification_status_bw,
Util.formatSize(inBW), Util.formatSize(outBW)) + '\n'
Util.formatSpeed(inBW), Util.formatSpeed(outBW)) + '\n'
+ getResources().getString(R.string.notification_status_peers,
active, known) + '\n'
+ getResources().getString(R.string.notification_status_expl,

View File

@ -1,6 +1,7 @@
package net.i2p.android.router.util;
import net.i2p.android.router.R;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
@ -18,7 +19,7 @@ public class Notifications {
mNotificationManager = (NotificationManager) ctx.getSystemService(
Context.NOTIFICATION_SERVICE);
}
public void notify(String title, String text) {
notify(title, text, null);
}
@ -26,10 +27,11 @@ public class Notifications {
public void notify(String title, String text, Class<?> c) {
NotificationCompat.Builder b =
new NotificationCompat.Builder(mCtx)
.setContentTitle(title)
.setContentText(text)
.setSmallIcon(ICON)
.setAutoCancel(true);
.setContentTitle(title)
.setContentText(text)
.setSmallIcon(ICON)
.setColor(mCtx.getResources().getColor(R.color.primary_light))
.setAutoCancel(true);
if (c != null) {
Intent intent = new Intent(mCtx, c);

View File

@ -553,8 +553,19 @@ public abstract class Util implements I2PConstants {
}
public static String formatSize(double size) {
return formatSize(size, 0);
}
public static String formatSpeed(double size) {
return formatSize(size, 1);
}
public static String formatSize(double size, int baseScale) {
int scale;
for (scale = 0; size >= 1024.0D; size /= 1024.0D) {
for (int i = 0; i < baseScale; i++) {
size /= 1024.0D;
}
for (scale = baseScale; size >= 1024.0D; size /= 1024.0D) {
++scale;
}

View File

@ -0,0 +1,50 @@
package net.i2p.router.client;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import net.i2p.client.DomainSocketFactory;
import net.i2p.router.RouterContext;
import net.i2p.util.Log;
/**
* Unix domain socket version of ClientListenerRunner.
*
* @author str4d
* @since 0.9.14
*/
public class DomainClientListenerRunner extends ClientListenerRunner {
private final DomainSocketFactory factory;
private final Log _log;
public DomainClientListenerRunner(RouterContext context, ClientManager manager) {
super(context, manager, -1);
factory = new DomainSocketFactory(_context);
_log = context.logManager().getLog(getClass());
}
/**
* @throws IOException
*/
@Override
protected ServerSocket getServerSocket() throws IOException {
return factory.createServerSocket(DomainSocketFactory.I2CP_SOCKET_ADDRESS);
}
@Override
public void stopListening() {
_running = false;
// LocalServerSocket.close() fails silently if the socket is blocking in accept(), so we
// trick the socket by opening a new connection and then immediately closing it.
// http://stackoverflow.com/questions/8007982/java-serversocket-and-android-localserversocket
try {
_log.debug("Connecting to domain socket to trigger close");
Socket s = factory.createSocket(DomainSocketFactory.I2CP_SOCKET_ADDRESS);
s.close();
} catch (IOException e) {
_log.error("Failed to connect to domain socket to trigger close", e);
}
// runServer() will close the LocalServerSocket.
}
}

View File

@ -27,7 +27,7 @@
android:clipChildren="false"
app:shadowDrawable="@drawable/header_shadow">
<net.i2p.android.widget.CustomViewPager
<android.support.v4.view.CustomViewPager
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="match_parent" />

View File

@ -0,0 +1,39 @@
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="?android:attr/listPreferredItemHeight"
android:gravity="center_vertical"
android:paddingRight="?android:attr/scrollbarSize"
android:orientation="vertical"
android:background="?android:attr/selectableItemBackground" >
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="6dip"
android:layout_marginBottom="6dip">
<TextView android:id="@android:id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:singleLine="true"
android:textAppearance="?android:attr/textAppearanceLarge"
android:textColor="?android:attr/textColorPrimary"
android:ellipsize="marquee"
android:fadingEdge="horizontal" />
<TextView android:id="@android:id/summary"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@android:id/title"
android:textAppearance="?android:attr/textAppearanceSmall"
android:textColor="?android:attr/textColorSecondary"
android:maxLines="4" />
</RelativeLayout>
<include layout="@layout/seekbar_inner"/>
</LinearLayout>

View File

@ -0,0 +1,39 @@
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?android:attr/selectableItemBackground"
android:gravity="center_vertical"
android:minHeight="?android:attr/listPreferredItemHeight"
android:orientation="vertical"
android:paddingLeft="?android:attr/listPreferredItemPaddingLeft"
android:paddingRight="?android:attr/listPreferredItemPaddingRight">
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:paddingTop="16dp"
android:paddingBottom="16dp">
<TextView android:id="@android:id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:singleLine="true"
android:textAppearance="@style/Preference_TextAppearanceMaterialSubhead"
android:ellipsize="marquee" />
<TextView android:id="@android:id/summary"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@android:id/title"
android:layout_alignLeft="@android:id/title"
android:textAppearance="?android:attr/textAppearanceSmall"
android:textColor="?android:attr/textColorSecondary"
android:maxLines="10" />
</RelativeLayout>
<include layout="@layout/seekbar_inner"/>
</LinearLayout>

View File

@ -0,0 +1,39 @@
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?android:attr/selectableItemBackground"
android:gravity="center_vertical"
android:minHeight="?android:attr/listPreferredItemHeight"
android:orientation="vertical"
android:paddingStart="?android:attr/listPreferredItemPaddingStart"
android:paddingEnd="?android:attr/listPreferredItemPaddingEnd">
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:paddingTop="16dp"
android:paddingBottom="16dp">
<TextView android:id="@android:id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:singleLine="true"
android:textAppearance="@style/Preference_TextAppearanceMaterialSubhead"
android:ellipsize="marquee" />
<TextView android:id="@android:id/summary"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@android:id/title"
android:layout_alignStart="@android:id/title"
android:textAppearance="?android:attr/textAppearanceSmall"
android:textColor="?android:attr/textColorSecondary"
android:maxLines="10" />
</RelativeLayout>
<include layout="@layout/seekbar_inner"/>
</LinearLayout>

View File

@ -0,0 +1,39 @@
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?android:attr/selectableItemBackground"
android:gravity="center_vertical"
android:minHeight="?android:attr/listPreferredItemHeight"
android:orientation="vertical"
android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
android:paddingStart="?android:attr/listPreferredItemPaddingStart">
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:paddingTop="16dp"
android:paddingBottom="16dp">
<TextView android:id="@android:id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:singleLine="true"
android:textAppearance="?android:attr/textAppearanceListItem"
android:ellipsize="marquee" />
<TextView android:id="@android:id/summary"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@android:id/title"
android:layout_alignStart="@android:id/title"
android:textAppearance="?android:attr/textAppearanceListItemSecondary"
android:textColor="?android:attr/textColorSecondary"
android:maxLines="10" />
</RelativeLayout>
<include layout="@layout/seekbar_inner"/>
</LinearLayout>

View File

@ -29,7 +29,7 @@
android:clipChildren="false"
app:shadowDrawable="@drawable/header_shadow">
<net.i2p.android.widget.CustomViewPager
<android.support.v4.view.CustomViewPager
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="match_parent" />

View File

@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
@ -52,10 +53,31 @@
style="@style/ListItem.TextOnly"
android:text="Tunnel type" />
<TextView
android:id="@+id/tunnel_details"
style="@style/ListItem.TextOnly"
android:text="Tunnel details" />
<RelativeLayout
android:id="@+id/tunnel_details_container"
style="@style/ListItem.OneLine"
android:visibility="gone">
<!-- Open link -->
<ImageView
android:id="@+id/tunnel_details_copy"
style="@style/ListItemContent.Action"
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:contentDescription="Copy"
android:src="@drawable/ic_content_copy_white_24dp"
android:visibility="invisible" />
<TextView
android:id="@+id/tunnel_details"
style="@style/ListItemContent.Text.Main"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_toLeftOf="@id/tunnel_details_copy"
android:layout_toStartOf="@id/tunnel_details_copy"
tools:text="Tunnel details" />
</RelativeLayout>
<View
style="@style/Divider.Horizontal"

View File

@ -0,0 +1,45 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:paddingTop="10dp"
android:paddingBottom="10dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
tools:showIn="@layout/seekbar_preference">
<LinearLayout
android:id="@+id/value_holder"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="right"
android:orientation="horizontal">
<TextView
android:id="@+id/seekbar_value"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:inputType="numberDecimal"
android:textSize="14sp"
android:textColor="?android:attr/textColorSecondary"
android:singleLine="true"/>
<TextView
android:id="@+id/measurement_unit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="14sp"
android:textColor="?android:attr/textColorSecondary"/>
</LinearLayout>
<SeekBar
android:id="@+id/seekbar"
android:layout_centerVertical="true"
android:layout_toLeftOf="@id/value_holder"
android:layout_alignParentLeft="true"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</RelativeLayout>

View File

@ -0,0 +1,39 @@
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="?android:attr/listPreferredItemHeight"
android:gravity="center_vertical"
android:paddingRight="?android:attr/scrollbarSize"
android:orientation="vertical"
android:background="@android:drawable/list_selector_background" >
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="6dip"
android:layout_marginBottom="6dip">
<TextView android:id="@android:id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:singleLine="true"
android:textAppearance="?android:attr/textAppearanceLarge"
android:textColor="?android:attr/textColorPrimary"
android:ellipsize="marquee"
android:fadingEdge="horizontal" />
<TextView android:id="@android:id/summary"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@android:id/title"
android:textAppearance="?android:attr/textAppearanceSmall"
android:textColor="?android:attr/textColorSecondary"
android:maxLines="4" />
</RelativeLayout>
<include layout="@layout/seekbar_inner"/>
</LinearLayout>

View File

@ -81,6 +81,7 @@
<string name="router_not_running">Der Router läuft nicht.</string>
<string name="router_shutting_down">Der Router fährt herunter.</string>
<string name="stats_not_ready">Der Statistikmanager ist noch nicht bereit. Versuchen Sie es später noch einmal.</string>
<string name="select_an_address">Eine Adresse auswählen</string>
<string name="no_graphs_configured">Es wurden keine Graphen konfiguriert. Sie können die Statistiken zum Erstellen der Graphen im Einstellungsmenü auswählen. Jede Änderung wird nach 60 Sekunden aktiv werden.</string>
<string name="configure_graphs">Graphen konfigurieren</string>
<string name="graphs_not_ready">Graphen sind noch nicht bereit. Versuchen Sie es später erneut.</string>

View File

@ -76,11 +76,12 @@
<string name="action_reload_subscriptions">Volver a cargar suscripciones</string>
<string name="news_last_updated">Última actualización de las noticias hace %s</string>
<string name="news_last_checked">Última comprobación de las noticias hace %s</string>
<string name="news_updated">Noticias actualizadas</string>
<string name="news_updated">Se han actualizado las noticias</string>
<string name="view_news">Pulse para ver las últimas noticias de I2P</string>
<string name="router_not_running">El router I2P no está en marcha.</string>
<string name="router_shutting_down">El router I2P se está cerrando.</string>
<string name="stats_not_ready">El administrador de estadísticas aún no está listo. Inténtelo de nuevo más tarde.</string>
<string name="select_an_address">Seleccione una dirección.</string>
<string name="no_graphs_configured">No se ha configurado ninguna gráfica. Puede escoger las estadísticas a graficar en el menú de configuración. Cualquier cambio tendrá efecto después de 60 segundos.</string>
<string name="configure_graphs">Configurar gráficas</string>
<string name="graphs_not_ready">Las gráficas aún no están listas. Inténtelo de nuevo más tarde.</string>

View File

@ -3,7 +3,7 @@
<string name="app_name">I2P</string>
<string name="desc_i2p_logo">I2P-logo</string>
<string name="choose_language">Valitse kieli</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_install">Tervetuloa I2P-sovellukseen! Tämä sovellus on ALFA-ohjelmisto ja se ei tarjoa vahvaa nimettömyyttä. Lue julkaisutiedot ja lisenssitiedot.</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>
@ -24,15 +24,20 @@
<string name="button_router_graceful">I2P sulkeutuu %s</string>
<string name="button_shutdown_now">Pitkä painallus nyt pysäyttämiseksi</string>
<string name="button_cancel_graceful">Pitkä painallus sulkemisen perumiseksi</string>
<string name="no_internet">Internet-yhteys ei ole käytettävissä</string>
<string name="hidden">Piilotettu</string>
<string name="testing">Testataan</string>
<string name="firewalled">Palomuuritettu</string>
<string name="symmetric_nat">Symmetrinen NAT</string>
<string name="net_status_error_i2cp">Asiakasohjelmahallinnan I2CP-virhe - tarkista lokitiedostot</string>
<!--Parameter is a time, e.g. 32s or 2m-->
<string name="net_status_error_unresolved_tcp">Ratkaisematon TCP-osoite</string>
<string name="net_status_error_private_tcp">Ykstyinen TCP-osoite</string>
<string name="net_status_warn_firewalled_inbound_tcp">Palomuuritettu tuleva TCP otettu käyttöön</string>
<string name="net_status_info_disconnected">Yhteys poikki - tarkista verkkoyhteys</string>
<string name="net_status_error_udp_port">UDP-portti käytössä - vaihda asetukset ja käynnistä uudelleen</string>
<string name="net_status_error_udp_disabled_tcp_not_set">UDP poissa käytöstä ja tuleva TCP-verkkotietokone/-portti ei ole asetettu</string>
<string name="net_status_warn_firewalled_udp_disabled">Palomuuritettu UDP-poiskytkettynä</string>
<string name="shared_clients">Jaetut asiakkaat</string>
<!--Character to indicate a client tunnel. Usually first letter of the word "client".-->
<string name="char_client_tunnel">A</string>
@ -64,6 +69,7 @@
<string name="news_updated">Uutiset päivitetty</string>
<string name="router_not_running">Reititin ei ole käynnissä.</string>
<string name="router_shutting_down">Reititin sulkeutuu.</string>
<string name="select_an_address">Valitse osoite.</string>
<string name="statistics">Tilastot</string>
<string name="routers">Reitittimet</string>
<string name="countries">Maat</string>

View File

@ -51,7 +51,7 @@
<!--Character to indicate a server tunnel. Usually first letter of the word "server".-->
<string name="char_server_tunnel">S</string>
<string name="no_tunnels_running">Aucun tunnel n\'est encore actif.</string>
<string name="download">Récéption</string>
<string name="download">Réception</string>
<string name="upload">Envoi</string>
<string name="configure_browser_title">Configurer le navigateur ?</string>
<string name="configure_browser_for_i2p">Voudriez-vous configurer un navigateur pour voir les sites d\'I2P ? (vous pouvez aussi faire cela plus tard depuis le menu d\'aide).</string>
@ -81,6 +81,7 @@
<string name="router_not_running">Le routeur ne fonctionne pas.</string>
<string name="router_shutting_down">Le routeur s\'arrête.</string>
<string name="stats_not_ready">Le gestionnaire de statistiques n\'est pas encore prêt. Réessayez plus tard.</string>
<string name="select_an_address">Sélectionnez une adresse.</string>
<string name="no_graphs_configured">Aucun graphique n\'a été configuré. Vous pouvez choisir les statistiques à afficher dans les paramètres. Tout changement prendra effet après 60 secondes.</string>
<string name="configure_graphs">Configurer les graphiques</string>
<string name="graphs_not_ready">Les graphiques ne sont pas encore prêts. Veuillez réessayer plus tard.</string>
@ -114,7 +115,7 @@
<string name="notification_status_client">Tunnels client : %1$d/%2$d</string>
<string name="menu_settings">Paramètres</string>
<string name="settings_enable">Activer</string>
<string name="settings_desc_subscriptions">URLs d\'abonnement</string>
<string name="settings_desc_subscriptions">URL 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 Android démarre</string>
@ -283,7 +284,7 @@
<string name="reject_inproxies">Rejeter les inproxies</string>
<string name="tunnel_summ_reject_inproxies">Permettre seulement aux utilisateurs I2P de se connecter</string>
<string name="unique_local">Local unique</string>
<string name="tunnel_summ_unique_local">Utiliser des IPs localhost uniques pour chaque client</string>
<string name="tunnel_summ_unique_local">Utiliser des IP localhost uniques pour chaque client</string>
<string name="multihome">Multi domicile</string>
<string name="tunnel_summ_multihome">Permettre les optimisations multi domiciles</string>
<string name="client_connection_limits">Limites de clients connectés</string>

View File

@ -81,6 +81,7 @@
<string name="router_not_running">Il router non sta funzionando.</string>
<string name="router_shutting_down">Il router si sta spegnendo.</string>
<string name="stats_not_ready">Il gestore delle statistiche non è ancora pronto. Riprova più tardi.</string>
<string name="select_an_address">Seleziona un indirizzo.</string>
<string name="no_graphs_configured">Nessun grafico configurato. Puoi scegliere le statistiche da graficare nel menu impostazioni. Ogni cambiamento entrerà in azione dopo 60 secondi.</string>
<string name="configure_graphs">Configura grafici</string>
<string name="graphs_not_ready">I grafici non sono ancora pronti. Riprova più tardi.</string>

View File

@ -19,6 +19,7 @@
<string name="label_graphs">グラフ</string>
<string name="button_router_off">長押しして I2P を起動</string>
<string name="button_router_on">I2P を起動中 (長押しで中止)</string>
<string name="testing">テスト中</string>
<!--Parameter is a time, e.g. 32s or 2m-->
<!--Character to indicate a client tunnel. Usually first letter of the word "client".-->
<string name="char_client_tunnel">C</string>
@ -222,8 +223,12 @@
<string name="set_zero_for_unlimited">0=無制限</string>
<string name="post_limits">投稿制限</string>
<string name="power_saving">パワーセーブ</string>
<string name="tunnel_summ_delay_open">要求されるまでトンネルのオープンを遅らせる</string>
<string name="tunnel_summ_reduce_quantity">アイドル時トンネルの数を減らす</string>
<string name="num_minutes">%s /分</string>
<string name="close_tunnels">アイドル時トンネルを閉じる</string>
<string name="http_client">HTTPクライアント</string>
<string name="tunnel_summ_allow_ssl">I2PアドレスにSSLを使用可能にする</string>
<string name="jump_url_list">ジャンプURLリスト</string>
<string name="proxy_auth">プロキシ認証</string>
<string name="tunnel_summ_proxy_auth">このプロキシを使用するにはログインが必要です</string>

View File

@ -81,6 +81,7 @@
<string name="router_not_running">라우터가 실행중이지 않습니다.</string>
<string name="router_shutting_down">라우터가 종료 중입니다.</string>
<string name="stats_not_ready">통계 관리자가 아직 준비되지 않았습니다. 나중에 다시 시도하세요.</string>
<string name="select_an_address">주소를 선택하세요.</string>
<string name="no_graphs_configured">설정된 그래프가 없습니다. 설정 메뉴에서 그래프로 표시할 통계를 고를 수 있습니다. 모든 변경은 60초 후에 적용됩니다.</string>
<string name="configure_graphs">그래프 설정</string>
<string name="graphs_not_ready">그래프가 아직 준비되지 않았습니다. 나중에 다시 시도하세요.</string>

View File

@ -19,7 +19,11 @@
<string name="label_graphs">Grafer</string>
<string name="button_router_off">Hold inne kappen for å starte I2P</string>
<string name="button_router_on">I2P kjører (hold inne knappen for å stoppe)</string>
<string name="testing">Tester</string>
<string name="firewalled">Bak brannmur</string>
<string name="symmetric_nat">Symmetrisk NAT</string>
<!--Parameter is a time, e.g. 32s or 2m-->
<string name="uptime">Oppetid</string>
<!--Character to indicate a client tunnel. Usually first letter of the word "client".-->
<string name="char_client_tunnel">K</string>
<!--Character to indicate a server tunnel. Usually first letter of the word "server".-->

View File

@ -32,6 +32,7 @@
<string name="symmetric_nat">Symmetrische NAT</string>
<string name="net_status_error_i2cp">Cliëntbeheerder I2CP-fout - controleer logs</string>
<!--Parameter is a time, e.g. 32s or 2m-->
<string name="net_status_error_skew">Klok afwijking van %s</string>
<string name="net_status_error_unresolved_tcp">Onopgelost TCP-adres</string>
<string name="net_status_error_private_tcp">Privaat TCP-adres</string>
<string name="net_status_warn_firewalled_inbound_tcp">Gefirewalld met inkomende TCP aangezet</string>
@ -49,6 +50,7 @@
<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_tunnels_running">Er draaien nog geen tunnels</string>
<string name="download">Download</string>
<string name="upload">Upload</string>
<string name="configure_browser_title">Browser instellen?</string>
@ -79,6 +81,7 @@
<string name="router_not_running">De router is uit.</string>
<string name="router_shutting_down">De router is aan het afsluiten.</string>
<string name="stats_not_ready">De statistiekenbeheerder is nog niet klaar. Probeer het later opnieuw.</string>
<string name="select_an_address">Selecteer een adres</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 nog niet klaar, probeer later opnieuw.</string>
@ -250,6 +253,8 @@
<string name="target_destination">Doelbestemming</string>
<string name="persistent_key">Blijvende sleutel</string>
<string name="persistent_key_conflict_title">Nieuwe sleutels uitzetten bij herstarten?</string>
<string name="persistent_key_conflict_msg">Je kunt vaste sleutels niet gebruiken wanneer de tunnel ingesteld is om bij herstart nieuwe sleutels aan te maken. Wil je deze functie uitzetten?</string>
<string name="tunnel_summ_persistent_key">Bewaar deze tunnel\'s bestemming als hij opnieuw start</string>
<string name="reachable_on">Bereikbaar op</string>
<string name="listen_port">Luisterpoort</string>
<string name="client_ssl">Cliënt-SSL</string>
@ -266,13 +271,22 @@
<string name="tunnel_summ_use_ssl">Gebruik SSL om met doel te verbinden</string>
<string name="tunnel_parameters">Tunnelparameters</string>
<string name="profile">Profiel</string>
<string name="profile_bulk">Grote verbinding (downloads/websites/BT)</string>
<string name="profile_interactive">Interactieve verbinding</string>
<string name="delay_connect">Verbinden uitstellen</string>
<string name="tunnel_summ_delay_connect">Zet dit aan voor request/response verbindigen</string>
<string name="access_control">Toegangscontrole</string>
<string name="restricted_access">Beperkte toegang</string>
<string name="disabled">Uitgeschakeld</string>
<string name="whitelist">Whitelist</string>
<string name="blacklist">Blacklist</string>
<string name="access_list">Toegangslijst</string>
<string name="reject_inproxies">Inproxies weigeren</string>
<string name="tunnel_summ_reject_inproxies">Enkel I2P-gebruikers toelaten te verbinden</string>
<string name="unique_local">Unieke landinstelling</string>
<string name="tunnel_summ_unique_local">Gebruik unieke localhost IP-adressen voor alle clients</string>
<string name="multihome">Multihome</string>
<string name="tunnel_summ_multihome">Zet multihoming optimalizaties aan</string>
<string name="client_connection_limits">Cliënt-verbindingslimieten</string>
<string name="connections_per_minute">Verbindingen per minuut</string>
<string name="connections_per_hour">Verbindingen per uur</string>
@ -295,6 +309,7 @@
<string name="total_ban_length">Totale ban lengte</string>
<string name="power_saving">Energiebesparing</string>
<string name="delay_open">Openen uitstellen</string>
<string name="tunnel_summ_delay_open">Vertraag het openen van een tunnel totdat dit nodig is</string>
<string name="reduce_quantity">Hoeveelheid verminderen</string>
<string name="tunnel_summ_reduce_quantity">Tunnel hoeveelheid verminderen bij inactiviteit</string>
<string name="idle_time">Inactieve tijd</string>
@ -302,15 +317,20 @@
<string name="reduced_tunnel_quantity">Verlaagde tunnel hoeveelheid</string>
<string name="close_tunnels">Tunnels sluiten bij inactiviteit</string>
<string name="new_keys_on_reopen">Nieuwe sleutels bij herstarten</string>
<string name="new_keys_on_reopen_conflict_title">Wil je vaste sleutesl uitzetten?</string>
<string name="new_keys_on_reopen_conflict_msg">Wanneer de tunnel geconfigureerd is om vaste sleutels te gebruiken, kun je de functie van nieuwe sleutels bij herstart niet aanzetten. Wil je vaste sleutels uitzetten?</string>
<string name="http_client">HTTP-cliënt</string>
<string name="tunnel_summ_user_agent">Laar \'User-Agent\' header door</string>
<string name="tunnel_summ_referer">Laat \'Referer\' header door</string>
<string name="tunnel_summ_accept">laat \'Accept-*\' headers door</string>
<string name="tunnel_summ_allow_ssl">SSL toestaan naar I2P adressen</string>
<string name="jump_url_list">Lijst van Jump URLs</string>
<string name="proxy_auth">Proxy toestemming</string>
<string name="tunnel_summ_proxy_auth">Zorg ervoor dat inloggen nodig is voor deze proxy</string>
<string name="username">Gebruikersnaam</string>
<string name="password">Wachtwoord</string>
<string name="outproxy_auth">Outproxy-authorisatie</string>
<string name="tunnel_summ_outproxy_auth">De login die nodig is voor de proxy naar buiten</string>
<string name="other">Overige</string>
<string name="signature_type">Handtekeningstype</string>
<string name="custom_options">Aangepaste opties</string>
@ -325,6 +345,7 @@
<item quantity="one">Een bericht</item>
<item quantity="other">%d berichten, nieuwste eerst</item>
</plurals>
<string name="log_entry">Logboek Item</string>
<string name="copy_logs">Kopieer logs</string>
<string name="i2p_android_error_logs">I2P Android foutlogs</string>
<string name="i2p_android_logs">I2P Android logs</string>

View File

@ -33,18 +33,21 @@
<string name="net_status_error_i2cp">Błąd Menedżera Klienta I2CP - sprawdź logi</string>
<!--Parameter is a time, e.g. 32s or 2m-->
<string name="net_status_error_skew">Odchylenie zegara o %s</string>
<string name="net_status_error_unresolved_tcp">Nierozwiązany adres TCP</string>
<string name="net_status_error_private_tcp">Prywatny adres TCP</string>
<string name="net_status_warn_firewalled_inbound_tcp">Włączona zapora akceptująca przychodzące pakiety TCP</string>
<string name="net_status_warn_firewalled_floodfill">Za zaporą i floodfill</string>
<string name="net_status_info_disconnected">Rozłączony - sprawdź połączenie z internetem.</string>
<string name="net_status_error_udp_port">Port UDP w użyciu. Zmień ustawienia i zrestartuj.</string>
<string name="net_status_error_no_active_peers">Brak aktywnych uczestników, sprawdź połączenie sieciowe i firewall</string>
<string name="net_status_error_udp_disabled_tcp_not_set">UDP wyłączone i nazwa/port przychodzącego portu TCP nie ustawiona</string>
<string name="net_status_warn_firewalled_udp_disabled">Włączona zapora z zablokowanym UDP</string>
<string name="shared_clients">Współdzielone klienty</string>
<string name="uptime">Czas działania</string>
<string name="active_peers">Aktywni uczestnicy</string>
<string name="known_peers">Znani uczestnicy</string>
<!--Character to indicate a client tunnel. Usually first letter of the word "client".-->
<string name="char_client_tunnel">C</string>
<string name="char_client_tunnel">K</string>
<!--Character to indicate a server tunnel. Usually first letter of the word "server".-->
<string name="char_server_tunnel">S</string>
<string name="no_tunnels_running">Brak aktywnych tuneli</string>
@ -78,17 +81,20 @@
<string name="router_not_running">Router nie jest włączony.</string>
<string name="router_shutting_down">Trwa wyłączanie routera</string>
<string name="stats_not_ready">Menadżer statystyk nie jest jeszcze gotowy. Spróbuj później.</string>
<string name="select_an_address">Wybierz adres.</string>
<string name="no_graphs_configured">Żadne wykresy nie zostały skonfigurowane. Możesz wybrać statystyki graficzne w menu ustawień. Wszelkie zmiany wejdą w życie po upływie 60 sekund.</string>
<string name="configure_graphs">Konfiguruj wykresy</string>
<string name="graphs_not_ready">Wykresy nie są jeszcze gotowe. Spróbuj później.</string>
<string name="statistics">Statystyki</string>
<string name="routers">Rutery</string>
<string name="leasesets">LeaseSety</string>
<string name="countries">Kraje</string>
<string name="country">Kraj</string>
<string name="transport">Transport</string>
<string name="versions">Wersje</string>
<string name="version">Wersja</string>
<string name="count">Licznik</string>
<string name="tname_0">Ukryty lub uruchamia się</string>
<string name="netdb_routers_empty">Brak routerów w Twoim NetDB.</string>
<string name="netdb_leases_empty">Brak LeaseSets w Twoim NetDB.</string>
<string name="notification_status_starting">Uruchamianie I2P!</string>
@ -224,6 +230,7 @@
<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 służąca wyłącznie do celów informacyjnych.</string>
<string name="i2ptunnel_wizard_desc_dest">Wpisz adres Przeznaczenia I2P usługi z którą klient powinien się połączyć. To powinien być pełny adres Przeznaczenia w formacie Base64, lub adres 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>
@ -239,11 +246,15 @@
<string name="name">Nazwa</string>
<string name="description">Opis</string>
<string name="auto_start">Auto-start</string>
<string name="tunnel_summ_auto_start">Uruchom tunel podczas startu węzła.</string>
<string name="tunnel_cat_ports">Porty lokalne</string>
<string name="shared_client">Klient współdzielony</string>
<string name="tunnel_summ_shared_client">Użyj tego samego adresu Przeznaczenia i tuneli co inne współdzielone klienty.</string>
<string name="target_destination">Adres docelowy</string>
<string name="persistent_key">Trwały klucz</string>
<string name="persistent_key_conflict_title">Zablokować nowe klucze przy ponownym otwarciu?</string>
<string name="persistent_key_conflict_msg">Nie możesz aktywować trwałych kluczy gdy tunel jest skonfigurowany by generować klucze przy ponownym otwarciu. Czy chcesz zablokować generowanie nowych kluczy przy ponownym otwarciu?</string>
<string name="tunnel_summ_persistent_key">Zachowaj adresy Przeznaczenia tuneli podczas restartu.</string>
<string name="reachable_on">Dostępny na</string>
<string name="listen_port">Port nasłuchu</string>
<string name="client_ssl">Klient SSL</string>
@ -257,10 +268,13 @@
<string name="target_host">Host docelowy</string>
<string name="target_port">Port docelowy</string>
<string name="use_ssl">Użyj SSL</string>
<string name="tunnel_summ_use_ssl">Wykorzystaj SSL, aby połączyć się ze wskazanym celem</string>
<string name="tunnel_parameters">Parametry tuneli</string>
<string name="profile">Profil</string>
<string name="profile_bulk">Połączenia masowe (pobierania/strony/BT)</string>
<string name="profile_interactive">Połączenie interaktywne</string>
<string name="delay_connect">Opóźnij połączenie</string>
<string name="tunnel_summ_delay_connect">Włącz dla połączeń żądań/odpowiedzi</string>
<string name="access_control">Kontrola dostępu</string>
<string name="restricted_access">Zastrzeżony dostęp</string>
<string name="disabled">Wyłączony</string>
@ -269,6 +283,10 @@
<string name="access_list">Lista Dostępu</string>
<string name="reject_inproxies">Odrzucaj wejściowe proxy</string>
<string name="tunnel_summ_reject_inproxies">Pozwól na połączenia wyłącznie od użytkowników I2P</string>
<string name="unique_local">Unikalny lokalny</string>
<string name="tunnel_summ_unique_local">Użyj unikalnego lokalnego adresu IP dla każdego klienta</string>
<string name="multihome">Wieloadresowość</string>
<string name="tunnel_summ_multihome">Włącz optymalizacje wieloadresowe</string>
<string name="client_connection_limits">Limit połączeń klienta</string>
<string name="connections_per_minute">Połączenia na minutę</string>
<string name="connections_per_hour">Połączenia na godzinę</string>
@ -285,7 +303,9 @@
<string name="set_zero_for_unlimited">Wpisz 0 dla nielimitowanych</string>
<string name="post_limits">Limity zapytań POST</string>
<string name="limit_period">Czas ograniczenia</string>
<string name="client_posts_per_period">Zapytania POST klienta na okres</string>
<string name="client_ban_length">Długość bana klienta</string>
<string name="total_posts_per_period">Wszystkie zapytania POST na okres</string>
<string name="total_ban_length">Całkowita długość bana</string>
<string name="power_saving">Oszczędzanie energii</string>
<string name="delay_open">Opóźnij otwarcie</string>
@ -298,7 +318,10 @@
<string name="close_tunnels">Zamknij tunele podczas bezczynności</string>
<string name="new_keys_on_reopen">Nowe klucze przy ponownym otwarciu</string>
<string name="new_keys_on_reopen_conflict_title">Zablokować trwałe klucze?</string>
<string name="new_keys_on_reopen_conflict_msg">Nie możesz aktywować tworzenia nowych kluczy przy otwarciu jeżeli tunel jest skonfigurowany do używania trwałych kluczy. Czy chcesz wyłączyć trwałe klucze?</string>
<string name="http_client">Klient HTTP</string>
<string name="tunnel_summ_user_agent">Przepuszczaj nagłówek \'User-Agent\'</string>
<string name="tunnel_summ_referer">Przepuszczaj nagłówek \'Referer\'</string>
<string name="tunnel_summ_accept">Przekazuj nagłówek Accept</string>
<string name="tunnel_summ_allow_ssl">Zezwalaj na SSL do adresów I2P</string>
<string name="jump_url_list">Lista adresów usług Jump</string>
@ -307,12 +330,18 @@
<string name="username">Użytkownik</string>
<string name="password">Hasło</string>
<string name="outproxy_auth">Autoryzacja Proxy Wyjściowego</string>
<string name="tunnel_summ_outproxy_auth">Login wymagany przez Proxy Wyjściowe</string>
<string name="other">Inne</string>
<string name="signature_type">Rodzaj podpisu</string>
<string name="custom_options">Dodatkowe opcje</string>
<string name="all">Wszystkie</string>
<string name="no_messages">Brak wiadomości</string>
<string name="no_error_messages">Brak wiadomości o błędach</string>
<plurals name="log_error_messages">
<item quantity="one">Jeden komunikat o błędzie</item>
<item quantity="few">%d komunikaty o błędach, od najnowszych</item>
<item quantity="other">%d komunikatów o błędach, od najnowszych</item>
</plurals>
<string name="log_entry">Wpis w logu</string>
<string name="copy_logs">Kopiuj logi</string>
<string name="i2p_android_error_logs">Logi Błędów I2P Android</string>

View File

@ -20,12 +20,17 @@
<string name="label_licenses">Licenças</string>
<string name="label_browse">Navegador</string>
<string name="label_graphs">Gráficos</string>
<string name="button_router_off">Mantenha pressionado para iniciar o I2P</string>
<string name="button_router_on">I2P está funcionando (mantenha pressionado para parar)</string>
<string name="button_router_graceful">O software I2P será encerrado em %s</string>
<string name="button_shutdown_now">Mantenha pressionado para parar agora</string>
<string name="button_cancel_graceful">Mantenha pressionado para cancelar o desligamento</string>
<string name="no_internet">Não há conexões de internet disponíveis</string>
<string name="hidden">Oculto</string>
<string name="testing">Testando</string>
<string name="firewalled">Sob firewall</string>
<string name="symmetric_nat">NAT simétrico</string>
<string name="net_status_error_i2cp">Erro no gerenciador de clientes I2CP - verificar logs</string>
<!--Parameter is a time, e.g. 32s or 2m-->
<string name="net_status_error_unresolved_tcp">Endereço TCP não resolvido</string>
<string name="net_status_error_private_tcp">Endereço TCP privado</string>
@ -65,10 +70,17 @@
<string name="action_refresh">Atualizar</string>
<string name="hint_search_addressbook">Procurar por livro de endereços</string>
<string name="action_reload_subscriptions">Recarregar inscriçoes</string>
<string name="news_last_updated">Última atualização das noticias a %s atrás</string>
<string name="news_last_checked">Última verificação das noticias a %s atrás</string>
<string name="news_updated">Novidades atualizadas</string>
<string name="view_news">Toque para ver as últimas notícias do I2P</string>
<string name="router_not_running">O roteador não está funcionando</string>
<string name="router_shutting_down">O roteador está sendo desligado.</string>
<string name="stats_not_ready">O configurador de estatística não está pronto. Tente de novo mais tarde.</string>
<string name="select_an_address">Selecionar um endereço.</string>
<string name="no_graphs_configured">Nenhum gráfico foi configurado. Você pode escolher estatísticas para gráficos no menu de configurações. Qualquer mudança ira ter efeito em 60 segundos.</string>
<string name="configure_graphs">Configurar gráficos</string>
<string name="graphs_not_ready">Gráficos não estão prontos ainda. Tente novamente.</string>
<string name="statistics">Estatísticas</string>
<string name="routers">Roteadores</string>
<string name="countries">Países</string>
@ -76,6 +88,7 @@
<string name="transport">Transporte</string>
<string name="versions">Versões</string>
<string name="version">Versão</string>
<string name="count">Contagem</string>
<string name="tname_0">Oculto ou inicializando</string>
<string name="netdb_routers_empty">Sem roteadores em seu NetDB.</string>
<string name="notification_status_starting">O roteador I2P está inicializando</string>
@ -174,7 +187,10 @@
<string name="i2ptunnel_type_streamrclient">Cliente Streamr</string>
<string name="i2ptunnel_type_streamrserver">Servidor Streamr</string>
<string name="install_recommended_app">Instalar aplicativo recomendado?</string>
<string name="app_needed_for_this_tunnel_type">Você deve instalar um aplicativo para usar este túnel. Gostaria de instalar o aplicativo recomendado?</string>
<string name="i2ptunnel_not_initialized">Os túneis não foram iniciados ainda, por favor recarregue em dois minutos.</string>
<string name="no_configured_client_tunnels">Nenhum cliente de tuneis configurado.</string>
<string name="no_configured_server_tunnels">Nenhum servidor de tuneis configurado.</string>
<string name="i2ptunnel_new_tunnel">Novo túnel</string>
<string name="i2ptunnel_msg_config_saved">Mudanças nas configurações salvas</string>
<string name="i2ptunnel_msg_config_save_failed">Falha ao salvar as configurações</string>
@ -204,6 +220,7 @@
<string name="i2ptunnel_wizard_desc_target_host">Esse é o IP no qual o serviço está rodando, isto está geralmente na mesma maquina então 127.0.0.1 é autopreenchido.</string>
<string name="i2ptunnel_wizard_desc_target_port">Essa é a porta pela qual o serviço está aceitando conexões.</string>
<string name="i2ptunnel_wizard_desc_reachable_on">Isso limita quais computadores ou smartphones podem acessar esse túnel</string>
<string name="i2ptunnel_wizard_desc_binding_port">Esta é a porta para o túnel cliente ser acessado localmente. Esta também é a porta para o túnel servidor de HTTP.</string>
<string name="i2ptunnel_wizard_desc_auto_start">O túnel deve iniciar automaticamente quando o roteador iniciar?</string>
<string name="i2ptunnel_wizard_submit_confirm_message">Criar túnel?</string>
<string name="i2ptunnel_wizard_submit_confirm_button">Criar túnel</string>
@ -217,6 +234,7 @@
<string name="tunnel_summ_auto_start">Iniciar o túnel na inicialização do roteador.</string>
<string name="tunnel_cat_ports">Portas locais</string>
<string name="shared_client">Cliente compartilhado</string>
<string name="tunnel_summ_shared_client">Usar mesmo Destino e túneis para demais clientes compartilhados</string>
<string name="target_destination">Destino alvo</string>
<string name="persistent_key">Chave persistente</string>
<string name="persistent_key_conflict_title">Desativar novas chaves na reabertura?</string>
@ -224,6 +242,7 @@
<string name="tunnel_summ_persistent_key">Manter o destino desse túnel quando ele reiniciar</string>
<string name="reachable_on">Ao alcance em</string>
<string name="listen_port">Porta de escuta</string>
<string name="client_ssl">Cliente SSL</string>
<string name="tunnel_summ_client_ssl">Os clientes devem usar SSL para se conectar</string>
<string name="outproxies">Proxies de saída</string>
<string name="ssl_outproxies">Proxies de saida com SSL</string>
@ -239,6 +258,7 @@
<string name="profile">Perfil</string>
<string name="profile_bulk">Conexão em massa (downloads/websites/BT)</string>
<string name="profile_interactive">Conexão interativa</string>
<string name="delay_connect">Atrasar conexão</string>
<string name="tunnel_summ_delay_connect">Ativar para conexões de pedidos/respostas</string>
<string name="access_control">Controle de acesso</string>
<string name="restricted_access">Acesso restrito</string>
@ -252,9 +272,11 @@
<string name="tunnel_summ_unique_local">Usar IPs de host locais únicos para cada cliente</string>
<string name="multihome">Multihome</string>
<string name="tunnel_summ_multihome">Ativar otimizações de multihoming</string>
<string name="client_connection_limits">Limites de conexões de cliente</string>
<string name="connections_per_minute">Conexões por minuto</string>
<string name="connections_per_hour">Conexões por hora</string>
<string name="connections_per_day">Conexões por dia</string>
<string name="total_connection_limits">Limites totais de conexões</string>
<string name="total_connections_per_minute">Total de conexões por minuto</string>
<string name="total_connections_per_hour">Total de conexões por hora</string>
<string name="total_connections_per_day">Total de conexões por dia</string>
@ -264,6 +286,11 @@
<string name="num_per_day">%s por dia</string>
<string name="unlimited">Ilimitado</string>
<string name="set_zero_for_unlimited">Especifique 0 para ilimitado</string>
<string name="post_limits">Limites de POST</string>
<string name="limit_period">Período limite</string>
<string name="power_saving">Economia de energia</string>
<string name="delay_open">Atrasar a abertura</string>
<string name="tunnel_summ_delay_open">Atrasar a abertura do túnel até ser utilizado</string>
<string name="reduce_quantity">Reduzir quantidade</string>
<string name="tunnel_summ_reduce_quantity">Reduzir quantidade de túneis quando ocioso</string>
<string name="idle_time">Tempo ocioso</string>
@ -272,6 +299,11 @@
<string name="close_tunnels">Fechar túneis quando ociosos</string>
<string name="new_keys_on_reopen">Novas chaves na reabertura</string>
<string name="new_keys_on_reopen_conflict_title">Desativar chaves persistentes?</string>
<string name="new_keys_on_reopen_conflict_msg">Você não pode habilitar novas chaves enquanto o túnel estiver configurado para ter chaves permanentes. Deseja desabilitar as chaves permanentes?</string>
<string name="http_client">Cliente HTTP</string>
<string name="tunnel_summ_user_agent">Passar o cabeçalho original \'User-Agent\'</string>
<string name="tunnel_summ_referer">Passar o cabeçalho original \'Referer\'</string>
<string name="tunnel_summ_accept">Passar o cabeçalho original \'Accept-*\'</string>
<string name="tunnel_summ_allow_ssl">Permitir SSL para endereços I2P</string>
<string name="jump_url_list">Pular lista de URLs</string>
<string name="proxy_auth">Autorização de proxy</string>
@ -279,13 +311,21 @@
<string name="username">Nome de usuário</string>
<string name="password">Senha</string>
<string name="outproxy_auth">Autorização de proxy de saída</string>
<string name="tunnel_summ_outproxy_auth">Autenticação necessária para o proxy de saída</string>
<string name="other">Outros</string>
<string name="signature_type">Tipo de assinatura</string>
<string name="custom_options">Opções personalizadas</string>
<string name="all">Todos</string>
<string name="no_messages">Sem mensagens</string>
<string name="no_error_messages">Nenhuma mensagem de erro</string>
<plurals name="log_messages">
<item quantity="one">Uma mensagem</item>
<item quantity="other">%d mensagens, mais novas primeiro</item>
</plurals>
<string name="log_entry">Entrada no log</string>
<string name="copy_logs">Copiar logs</string>
<string name="error_logs_copied_to_clipboard">Logs de erro copiados para a área de transferência</string>
<string name="logs_copied_to_clipboard">Logs copiados para a área de transferência</string>
<string name="label_browser_configuration">Configuração do navegador</string>
<string name="unset">Desligado</string>
</resources>

View File

@ -2,16 +2,16 @@
<resources>
<string name="app_name">I2P</string>
<string name="desc_i2p_logo">Logótipo I2P</string>
<string name="choose_language">Escolher língua</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="choose_language">Escolha o idioma</string>
<string name="welcome_new_install">Bem-vindo à I2P! Esta aplicação é um software 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, leia as notas de lançamento. Versão:</string>
<string name="label_tunnels">Tuneis</string>
<string name="label_status">Estado</string>
<string name="label_console">Consola</string>
<string name="label_addresses">Endereços</string>
<string name="label_addressbook">Livro de Endereços</string>
<string name="label_i2ptunnel_client">Tuneis cliente</string>
<string name="label_i2ptunnel_server">Tuneis servidor</string>
<string name="label_i2ptunnel_client">Túneis de cliente</string>
<string name="label_i2ptunnel_server">Tuneis de servidor</string>
<string name="label_logs">Registos</string>
<string name="label_error_logs">Registos de Erros</string>
<string name="label_news">Notícias</string>
@ -26,11 +26,11 @@
<string name="button_shutdown_now">Pressionar longo para parar imediatamente</string>
<string name="button_cancel_graceful">Pressionar longo para não desligar</string>
<string name="no_internet">Sem ligação à Internet</string>
<string name="hidden">Escondido</string>
<string name="testing">Em teste</string>
<string name="hidden">Oculto</string>
<string name="testing">A testar</string>
<string name="firewalled">Atrás de uma firewall</string>
<string name="symmetric_nat">NAT simétrico</string>
<string name="net_status_error_i2cp">Erro no gestor de cliente I2CP - veja os registos</string>
<string name="symmetric_nat">NAT Simétrico</string>
<string name="net_status_error_i2cp">Erro no gestor de cliente I2CP - consulte os registos</string>
<!--Parameter is a time, e.g. 32s or 2m-->
<string name="net_status_error_skew">Deriva de relógio de %s</string>
<string name="net_status_error_unresolved_tcp">Endereços TCP por resolver</string>
@ -40,8 +40,8 @@
<string name="net_status_info_disconnected">Desligado - verifique a sua ligação de rede</string>
<string name="net_status_error_udp_port">Porta UDP em uso - mude as configurações e reinicie</string>
<string name="net_status_error_no_active_peers">Não existem nós ativos - verifique a sua ligação de rede e firewall</string>
<string name="net_status_error_udp_disabled_tcp_not_set">UDP desligado e máquina/porta TCP de entrada não definida</string>
<string name="net_status_warn_firewalled_udp_disabled">Atrás de firewall com UDP desligado</string>
<string name="net_status_error_udp_disabled_tcp_not_set">UDP desativado e hospedeiro/porta TCP de entrada não definida</string>
<string name="net_status_warn_firewalled_udp_disabled">Atrás de firewall com UDP desativado</string>
<string name="shared_clients">Cliente partilhados</string>
<string name="uptime">Tempo de atividade</string>
<string name="active_peers">Nós ativos</string>
@ -50,10 +50,10 @@
<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_tunnels_running">Ainda não tem túneis ativos.</string>
<string name="download">Download</string>
<string name="upload">Upload</string>
<string name="configure_browser_title">Configurar navegador?</string>
<string name="no_tunnels_running">Ainda não tem túneis em execução.</string>
<string name="download">Transferir</string>
<string name="upload">Enviar</string>
<string name="configure_browser_title">Configurar o navegador?</string>
<string name="configure_browser_for_i2p">Gostaria de configurar um navegador para ver sites I2P? (Pode fazê-lo mais tarde através do menu de ajuda.)</string>
<string name="first_start_title">Parabéns por ter instalado o I2P!</string>
<string name="first_start_welcome"><b>Bem vindo ao I2P!</b> Por favor <b>tenha paciência</b> enquanto o I2P arranca e encontra outros nós na rede.</string>
@ -64,12 +64,12 @@
<string name="action_search">Procurar</string>
<string name="action_add">Adicionar</string>
<string name="action_edit">Editar</string>
<string name="action_delete">Apagar</string>
<string name="action_i2ptunnel_start">Começar túneis</string>
<string name="action_delete">Eliminar</string>
<string name="action_i2ptunnel_start">Iniciar túneis</string>
<string name="action_i2ptunnel_stop">Parar túneis </string>
<string name="action_i2ptunnel_start_all">Começar todos os túneis </string>
<string name="action_i2ptunnel_start_all">Iniciar todos os túneis </string>
<string name="action_i2ptunnel_stop_all">Parar todos os túneis</string>
<string name="action_i2ptunnel_restart_all">Recomeçar todos os túneis </string>
<string name="action_i2ptunnel_restart_all">Reiniciar todos os túneis </string>
<string name="action_reload">Recarregar</string>
<string name="action_refresh">Atualizar</string>
<string name="hint_search_addressbook">Procurar no livro de endereços</string>
@ -81,6 +81,7 @@
<string name="router_not_running">O router não está em execução.</string>
<string name="router_shutting_down">O router está a desligar.</string>
<string name="stats_not_ready">O gestor de estatísticas ainda não está pronto. Tente de novo mais tarde.</string>
<string name="select_an_address">Escolha um endereço</string>
<string name="no_graphs_configured">Não foram configurados quaisquer gráficos. Pode escolher as estatísticas que deseja representar no menu de configuração. Qualquer mudança terá efeito após 60 segundos.</string>
<string name="configure_graphs">Configurar gráficos</string>
<string name="graphs_not_ready">Os gráficos não estão pronto. Tente de novo mais tarde.</string>
@ -93,25 +94,25 @@
<string name="versions">Versões</string>
<string name="version">Versão</string>
<string name="count">Contagem</string>
<string name="tname_0">Escondido ao iniciar</string>
<string name="tname_0">Oculto ou a iniciar</string>
<string name="netdb_routers_empty">Não tem router na sua NetDB.</string>
<string name="netdb_leases_empty">Não tem LeaseSets na sua NetDB.</string>
<string name="notification_status_starting">O I2P está a ligar</string>
<string name="notification_status_starting">O I2P está a iniciar</string>
<string name="notification_status_restarting">O I2P está a reiniciar</string>
<string name="notification_status_waiting">O I2P está à espera de uma ligação à rede</string>
<string name="notification_status_starting_after_waiting">Deteta ligação à rede, o I2P está a ligar</string>
<string name="notification_status_running">O I2P está ligado</string>
<string name="notification_status_client_ready">Os túneis cliente estão prontos</string>
<string name="notification_status_client_down">Os túneis clientes estão desligados</string>
<string name="notification_status_waiting">O I2P está a aguardar por uma ligação à rede</string>
<string name="notification_status_starting_after_waiting">Rede ligada, I2P está a iniciar</string>
<string name="notification_status_running">O I2P está em execução</string>
<string name="notification_status_client_ready">Os túneis de cliente estão prontos</string>
<string name="notification_status_client_down">Os túneis de clientes estão desligados</string>
<string name="notification_status_graceful">A parar I2P dentro de %s</string>
<string name="notification_status_stopping">A parar o I2P</string>
<string name="notification_status_stopping_after_net">Sem ligação à rede, a parar o I2P</string>
<string name="notification_status_shutdown_cancelled">Cancelada a ordem para desligar</string>
<string name="notification_status_shutting_down">O I2P está a desligar</string>
<string name="notification_status_stopping_after_net">Ligação desligada, a parar o I2P</string>
<string name="notification_status_shutdown_cancelled">Encerramento cancelado</string>
<string name="notification_status_shutting_down">O I2P está a encerrar</string>
<string name="notification_status_bw">Largura de banda: %1$sBps down / %2$sBps up</string>
<string name="notification_status_peers">Nós: %1$d ativos, %2$d conhecidos</string>
<string name="notification_status_expl">Túneis exploratórios: %1$d/%2$d</string>
<string name="notification_status_client">Túneis cliente: %1$d/%2$d</string>
<string name="notification_status_client">Túneis de cliente: %1$d/%2$d</string>
<string name="menu_settings">Configurações</string>
<string name="settings_enable">Ativar</string>
<string name="settings_desc_subscriptions">URLs de Subscrição</string>

View File

@ -61,8 +61,11 @@
<string name="action_refresh">Reâmprospătează</string>
<string name="hint_search_addressbook">Caută agenda</string>
<string name="action_reload_subscriptions">Reâncarcă abonamentele</string>
<string name="news_updated">Știri actualizate</string>
<string name="view_news">Atinge pentru a vizualiza ultimele știri I2P</string>
<string name="router_not_running">Ruterul nu rulează.</string>
<string name="router_shutting_down">Ruterul este închis.</string>
<string name="select_an_address">Selectați o adresă.</string>
<string name="configure_graphs">Configurează graficele</string>
<string name="statistics">Statistici</string>
<string name="routers">Rutere</string>
@ -76,6 +79,7 @@
<string name="notification_status_restarting">I2P repornește</string>
<string name="notification_status_waiting">I2P așteaptă pentru o conexiune la rețea</string>
<string name="notification_status_running">I2P rulează</string>
<string name="notification_status_shutdown_cancelled">Oprirea anulată</string>
<string name="notification_status_bw">Lățime de bandă: %1$sBps desc / %2$sBps în</string>
<string name="notification_status_peers">Parteneri: %1$d activi, %2$d cunoscuți</string>
<string name="menu_settings">Configurări</string>
@ -132,6 +136,9 @@
<string name="about_donate">Doriți să donați bani sau bitcoins pentru cumpărarea de mai multe dispozitive Android pentru dezvoltare și testare? Mergeți la:</string>
<string name="menu_help">Ajutor</string>
<string name="general">General</string>
<string name="label_router">Adrese publice</string>
<string name="label_private">Adrese private</string>
<string name="addressbook_is_empty">Agenda este goală</string>
<string name="addressbook_search_header">%s gasit</string>
<string name="addressbook_add_wizard_k_name">Nume</string>
<string name="addressbook_add_wizard_k_destination">Destinatie</string>
@ -149,6 +156,7 @@
<string name="i2ptunnel_type_sockstunnel">SOCKS 4/4a/5 proxy</string>
<string name="i2ptunnel_type_socksirctunnel">SOCKS IRC proxy</string>
<string name="i2ptunnel_type_ircserver">Server IRC</string>
<string name="install_recommended_app">Se instalează aplicația recomandată?</string>
<string name="i2ptunnel_new_tunnel">Tunel nou</string>
<string name="i2ptunnel_msg_config_saved">Modificările configurării s-au salvat</string>
<string name="i2ptunnel_msg_config_save_failed">A eșuat salvarea configurării</string>
@ -175,28 +183,53 @@
<string name="i2ptunnel_wizard_submit_confirm_message">Se creează tunelul?</string>
<string name="i2ptunnel_wizard_submit_confirm_button">Creare tunel</string>
<string name="i2ptunnel_view_target">Țintă</string>
<string name="i2ptunnel_view_access_point">Punct de acces</string>
<string name="i2ptunnel_view_autostart">Auto pornire</string>
<string name="edit_tunnel">Editare tunel</string>
<string name="name">Nume</string>
<string name="description">Descriere</string>
<string name="auto_start">Pornire automată</string>
<string name="tunnel_summ_auto_start">Pornește tunelul când pornește ruterul.</string>
<string name="tunnel_cat_ports">Porturi locale</string>
<string name="shared_client">Client partajat</string>
<string name="target_destination">Destinație țintă</string>
<string name="persistent_key">Cheie permanentă</string>
<string name="client_ssl">Client SSL</string>
<string name="tunnel_summ_client_ssl">Clienții trebuie să utilizeze SSL pentru conectare</string>
<string name="irc">IRC</string>
<string name="enable_dcc">Activează DCC</string>
<string name="tunnel_summ_enable_dcc">Permite clienților IRC să utilizeze DCC</string>
<string name="use_ssl">Utilizează SSL</string>
<string name="tunnel_summ_use_ssl">Utilizează SSL pentru conectarea la țintă</string>
<string name="tunnel_parameters">Parametri tunel</string>
<string name="profile">Profil</string>
<string name="profile_interactive">Conexiune interactivă</string>
<string name="delay_connect">Întârziere conectare</string>
<string name="access_control">Control acces</string>
<string name="restricted_access">Acces restricționat</string>
<string name="disabled">Dezactivat</string>
<string name="whitelist">Listă de excepții</string>
<string name="blacklist">Listă de blocare</string>
<string name="access_list">Listă de acces</string>
<string name="connections_per_minute">Conexiuni pe minut</string>
<string name="connections_per_hour">Conexiuni pe oră</string>
<string name="connections_per_day">Conexiuni pe zi</string>
<string name="num_per_minute">%s pe minut</string>
<string name="num_per_hour">%s pe oră</string>
<string name="num_per_day">%s pe zi</string>
<string name="unlimited">Nelimitat</string>
<string name="set_zero_for_unlimited">Configurați 0 pentru nelimitat</string>
<string name="num_minutes">%s minute</string>
<string name="http_client">Client HTTP</string>
<string name="proxy_auth">Autorizare proxy</string>
<string name="username">Nume utilizator</string>
<string name="password">Parolă</string>
<string name="other">Altceva</string>
<string name="signature_type">Tip semnătură</string>
<string name="custom_options">Opțiuni personalizate</string>
<string name="all">Tot</string>
<string name="no_messages">Fără mesaje</string>
<string name="no_error_messages">Fără mesaje de eroare</string>
<string name="copy_logs">Copiază jurnale</string>
<string name="i2p_android_error_logs">Jurnale eroare I2P Android</string>
<string name="i2p_android_logs">Jurnale I2P Android</string>

View File

@ -81,6 +81,7 @@
<string name="router_not_running">Маршрутизатор не запущен.</string>
<string name="router_shutting_down">Маршрутизатор выключается.</string>
<string name="stats_not_ready">Менеджер статистики ещё не готов. Попробуйте позже.</string>
<string name="select_an_address">Выбрать адрес.</string>
<string name="no_graphs_configured">Графики не настроены. Вы можете выбрать статистику для отображения на графике в настройках меню. Любые изменения начнут действовать через 60 секунд.</string>
<string name="configure_graphs">Настройки графиков</string>
<string name="graphs_not_ready">Графики ещё не готовы. Попробуйте позже.</string>
@ -110,7 +111,7 @@
<string name="notification_status_shutting_down">I2P выключается</string>
<string name="notification_status_bw">Пропускная способность: %1$sBps прием / %2$sBps отправка</string>
<string name="notification_status_peers">Узлы: %1$d активны, %2$d известны</string>
<string name="notification_status_expl">Исследовательские туннели: %1$d/%2$d</string>
<string name="notification_status_expl">Поисковые туннели: %1$d/%2$d</string>
<string name="notification_status_client">Туннели клиента: %1$d/%2$d</string>
<string name="menu_settings">Настройки</string>
<string name="settings_enable">Включить</string>
@ -245,7 +246,7 @@
<string name="name">Имя</string>
<string name="description">Описание</string>
<string name="auto_start">Автозапуск</string>
<string name="tunnel_summ_auto_start">Запустить туннель с запуском маршрутизатора</string>
<string name="tunnel_summ_auto_start">Запустить туннель с запуском маршрутизатора.</string>
<string name="tunnel_cat_ports">Локальный порт</string>
<string name="shared_client">Общий клиент</string>
<string name="tunnel_summ_shared_client">Использовать то же назначение и туннели, что и общие клиенты</string>

View File

@ -16,7 +16,7 @@ Var god läs release kommentarerna och licens-information.</string>
<string name="label_logs">Loggar</string>
<string name="label_error_logs">Felloggar</string>
<string name="label_news">Nyheter</string>
<string name="label_peers_status">Peers</string>
<string name="label_peers_status">Noder</string>
<string name="label_release_notes">Releasekommentarer</string>
<string name="label_licenses">Licenser</string>
<string name="label_browse">Bläddra</string>
@ -31,7 +31,7 @@ Var god läs release kommentarerna och licens-information.</string>
<string name="testing">Testar</string>
<string name="firewalled">Bakom brandvägg</string>
<string name="symmetric_nat">Symmetrisk NAT</string>
<string name="net_status_error_i2cp">Klienthanterare I2CP fel - kontrollera loggar</string>
<string name="net_status_error_i2cp">Klienthanterare I2CP-fel - kontrollera loggar</string>
<!--Parameter is a time, e.g. 32s or 2m-->
<string name="net_status_error_skew">Klockförskjutning på %s</string>
<string name="net_status_error_unresolved_tcp">Ej upplöst TCP-adress</string>
@ -40,13 +40,13 @@ Var god läs release kommentarerna och licens-information.</string>
<string name="net_status_warn_firewalled_floodfill">Bakom brandvägg och floodfill</string>
<string name="net_status_info_disconnected">Frånkopplad - kontrollera nätverksanslutning</string>
<string name="net_status_error_udp_port">UDP-porten används - ändra i inställningar och start om</string>
<string name="net_status_error_no_active_peers">Inga aktiva peers - kontrollera nätverksanslutning och brandvägg</string>
<string name="net_status_error_no_active_peers">Inga aktiva noder - kontrollera nätverksanslutning och brandvägg</string>
<string name="net_status_error_udp_disabled_tcp_not_set">UDP deaktiverad och inåtgående TCP host/port inte angiven</string>
<string name="net_status_warn_firewalled_udp_disabled">Bakom brandvägg med UDP avaktiverad</string>
<string name="shared_clients">Delade klienter</string>
<string name="uptime">Upptid</string>
<string name="active_peers">Aktiva peers</string>
<string name="known_peers">Kända peers</string>
<string name="active_peers">Aktiva noder</string>
<string name="known_peers">Kända noder</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".-->
@ -57,7 +57,7 @@ Var god läs release kommentarerna och licens-information.</string>
<string name="configure_browser_title">Konfigurera browsern?</string>
<string name="configure_browser_for_i2p">Vill du konfigurera en browser för att se på I2P sidor? (Du kan också göra detta senare från hjälpmenyn.)</string>
<string name="first_start_title">Gratulerar till din I2P installation!</string>
<string name="first_start_welcome"><b>Välkommen till I2P</b>Vänligen<b>ha tålamod</b> medan I2P bootar och letar upp peers.</string>
<string name="first_start_welcome"><b>Välkommen till I2P!</b> Vänligen <b>ha tålamod</b> medan I2P startar och letar upp noder.</string>
<string name="first_start_read">Medan du väntar, vänligen läs utgåvans meddelanden och välkomstsidan.</string>
<string name="first_start_faq">När du har fått klienttunnlar, vänligen <b>kolla</b> vår FAQ:</string>
<string name="first_start_faq_nonanon">Använd den här icke-anonyma länken om du inte vill vänta på tunnlar:</string>
@ -82,6 +82,7 @@ Var god läs release kommentarerna och licens-information.</string>
<string name="router_not_running">Routern kör inte</string>
<string name="router_shutting_down">Routern stänger ner.</string>
<string name="stats_not_ready">Statistikhanteraren är inte redo än. Försök igen senare.</string>
<string name="select_an_address">Välj en adress.</string>
<string name="no_graphs_configured">Inga grafer har ställts in. Du kan välja statistik till grafen i inställningsmenyn. Ändringar aktiveras efter 60 sekunder.</string>
<string name="configure_graphs">Ställ in grafer</string>
<string name="graphs_not_ready">Graferna är inte färdiga än. Försök igen senare.</string>
@ -110,7 +111,7 @@ Var god läs release kommentarerna och licens-information.</string>
<string name="notification_status_shutdown_cancelled">Avstängning avbruten</string>
<string name="notification_status_shutting_down">I2P stänger ner</string>
<string name="notification_status_bw">Bandbredd:%1$sBps ner / %2$sBps upp</string>
<string name="notification_status_peers">Peers: %1$d aktiva, %2$d kända</string>
<string name="notification_status_peers">Noder: %1$d aktiva, %2$d kända</string>
<string name="notification_status_expl">Utforskande tunnlar: %1$d/%2$d</string>
<string name="notification_status_client">Klienttunnlar:%1$d/%2$d</string>
<string name="menu_settings">Inställningar</string>
@ -169,8 +170,8 @@ Var god läs release kommentarerna och licens-information.</string>
<string name="about_project">Projektets Hem:</string>
<string name="about_bugs">Bugs och Support:</string>
<string name="about_helpwanted">Hjälp Önskas!</string>
<string name="about_volunteer">Vill du hjälpa till att göra appen bättre? Anmäl dig på Android forum:</string>
<string name="about_donate">Vill du donera pengar eller bitcoins för inköp av fler Androidenheter till utveckling och testning? Gå till:</string>
<string name="about_volunteer">Vill du hjälpa till att göra appen bättre? Anmäl dig på Android-forumet:</string>
<string name="about_donate">Vill du donera pengar eller bitcoin för inköp av fler Androidenheter till utveckling och testning? Gå till:</string>
<string name="menu_help">Hjälp</string>
<string name="general">Generell</string>
<string name="label_router">Offentliga adresser</string>

View File

@ -34,7 +34,7 @@
<!--Parameter is a time, e.g. 32s or 2m-->
<string name="net_status_error_skew">%s saat sapması</string>
<string name="net_status_error_unresolved_tcp">Çözümlenmemiş TCP adresi</string>
<string name="net_status_error_private_tcp">Özel TCP adresi</string>
<string name="net_status_error_private_tcp">Kişisel TCP adresi</string>
<string name="net_status_warn_firewalled_inbound_tcp">Gelen TCP güvenlik duvarı etkinleştirilmiş </string>
<string name="net_status_warn_firewalled_floodfill">Güvenlik duvarlı ve akış korumalı</string>
<string name="net_status_info_disconnected">Bağlantı kesildi - ağ bağlantısını denetleyin</string>
@ -174,7 +174,7 @@
<string name="menu_help">Yardım</string>
<string name="general">Genel</string>
<string name="label_router">Herkese açık adresler</string>
<string name="label_private">Özel adresler</string>
<string name="label_private">Kişisel adresler</string>
<string name="addressbook_is_empty">Adres defteri boş</string>
<string name="addressbook_search_header">%s bulundu</string>
<string name="addressbook_add_wizard_k_name">Ad</string>
@ -249,8 +249,106 @@
<string name="tunnel_summ_auto_start">Yöneltici başlatıldığında tünel de başlatılsın.</string>
<string name="tunnel_cat_ports">Yerel kapılar</string>
<string name="shared_client">Paylaşılmış istemci</string>
<string name="tunnel_summ_shared_client">Diğer paylaşılmış istemciler ile aynı hedef ve tüneller kullanılsın</string>
<string name="target_destination">Hedef konum</string>
<string name="persistent_key">Sürekli anahtar</string>
<string name="persistent_key_conflict_title">Yeniden açıldığında yeni anahtarlar oluşturulmasın</string>
<string name="persistent_key_conflict_msg">Tünel yeniden açıldığında yeni anahtarlar oluşturuluyorsa sürekli anahtarlar kullanılamaz. Yeniden açıldığından yeni anahtarların oluşturulması devre dışı bırakılsın mı?</string>
<string name="tunnel_summ_persistent_key">Yeniden başlatıldığında bu tünelin hedefi korunsun</string>
<string name="reachable_on">Şuradan erişilebilir</string>
<string name="listen_port">Dinlenecek kapı</string>
<string name="client_ssl">SSL İstemci</string>
<string name="tunnel_summ_client_ssl">İstemci yalnız SSL üzerinden bağlanabilir</string>
<string name="outproxies">Çıkış vekil sunucuları</string>
<string name="ssl_outproxies">SSL çıkış vekil sunucuları</string>
<string name="irc">IRC</string>
<string name="enable_dcc">DCC Kullanılsın</string>
<string name="tunnel_summ_enable_dcc">IRC istemcileri DCC kullanabilsin</string>
<string name="website_domain_name">Web sitesinin etki alanı</string>
<string name="target_host">Hedef sunucu</string>
<string name="target_port">Hedef kapı</string>
<string name="use_ssl">SSL Kullanılsın</string>
<string name="tunnel_summ_use_ssl">Hedefe bağlanmak için SSL kullanılsın</string>
<string name="tunnel_parameters">Tünel parametreleri</string>
<string name="profile">Profil</string>
<string name="profile_bulk">Toplu bağlantı (indirme/web siteleri/BT)</string>
<string name="profile_interactive">Etkileşimli bağlantı</string>
<string name="delay_connect">Bağlantı gecikmesi</string>
<string name="tunnel_summ_delay_connect">Bağlantı yanıtları için etkinleştirin</string>
<string name="access_control">Erişim denetimi</string>
<string name="restricted_access">Kısıtlı erişim</string>
<string name="disabled">Devre dışı</string>
<string name="whitelist">Beyaz liste</string>
<string name="blacklist">Kara liste</string>
<string name="access_list">Erişim listesi</string>
<string name="reject_inproxies">Geçen vekil sunucular reddedilsin</string>
<string name="tunnel_summ_reject_inproxies">Yalnız I2P kullanıcıları bağlanabilsin</string>
<string name="unique_local">Eşsiz yerel</string>
<string name="tunnel_summ_unique_local">Her istemci için eşsiz yerel sunucu IP adresi kullanılsın</string>
<string name="multihome">Çoklu ev</string>
<string name="tunnel_summ_multihome">Çoklu ev iyileştirmeleri kullanılsın</string>
<string name="client_connection_limits">İstemci bağlantı sınırları</string>
<string name="connections_per_minute">Dakikalık bağlantı sayısı</string>
<string name="connections_per_hour">Saatlik bağlantı sayısı</string>
<string name="connections_per_day">Günlük bağlantı sayısı</string>
<string name="total_connection_limits">Toplam bağlantı sınırları</string>
<string name="total_connections_per_minute">Dakikalık toplam bağlantı sayısı</string>
<string name="total_connections_per_hour">Saatlik toplam bağlantı sayısı</string>
<string name="total_connections_per_day">Günlük toplam bağlantı sayısı</string>
<string name="max_active_connections">En fazla etkin bağlantı sayısı</string>
<string name="num_per_minute">Dakikalık %s</string>
<string name="num_per_hour">Saatlik %s</string>
<string name="num_per_day">Günlük %s</string>
<string name="unlimited">Sınırsız</string>
<string name="set_zero_for_unlimited">Sınırsız olması için 0 yazın</string>
<string name="post_limits">POST sınırlaması</string>
<string name="limit_period">Sınırlama süresi</string>
<string name="client_posts_per_period">Aralıktaki istemci POST sayısı</string>
<string name="client_ban_length">İstemci engelleme uzunluğu</string>
<string name="total_posts_per_period">Aralıktaki toplam POST sayısı</string>
<string name="total_ban_length">Toplam engelleme uzunluğu</string>
<string name="power_saving">Güç tasarrufu</string>
<string name="delay_open">ılma geciktirilsin</string>
<string name="tunnel_summ_delay_open">Gerekene kadar tünel açılması geciktirilir</string>
<string name="reduce_quantity">Sayı azaltılsın</string>
<string name="tunnel_summ_reduce_quantity">Boştayken tünel sayısı azaltılır</string>
<string name="idle_time">Boşta bekleme süresi</string>
<string name="num_minutes">%s dakika</string>
<string name="reduced_tunnel_quantity">Azaltılacak tünel sayısı</string>
<string name="close_tunnels">Boştayken tüneller kapatılsın</string>
<string name="new_keys_on_reopen">Yeniden açıldığından yeni anahtarlar oluşturulsun</string>
<string name="new_keys_on_reopen_conflict_title">Sürekli anahtarlar kullanılamasın</string>
<string name="new_keys_on_reopen_conflict_msg">Tünel yeniden açıldığında yeni anahtarlar oluşturuluyorsa sürekli anahtarlar kullanılamaz. Sürekli anahtarlar devre dışı bırakılsın mı?</string>
<string name="http_client">HTTP istemcisi</string>
<string name="tunnel_summ_user_agent">\'User-Agent\' üstbilgisi geçirilsin</string>
<string name="tunnel_summ_referer">\'Referer\' üstbilgisi geçirilsin</string>
<string name="tunnel_summ_accept">\'Accept-*\' üstbilgisi geçirilsin</string>
<string name="tunnel_summ_allow_ssl">I2P adreslerinde SSL kullanılabilsin</string>
<string name="jump_url_list">İnternet adresi listesine sıçra</string>
<string name="proxy_auth">Vekil sunucu kimlik doğrulaması</string>
<string name="tunnel_summ_proxy_auth">Bu vekil sunucuda oturum açmak için kimlik doğrulaması istensin</string>
<string name="username">Kullanıcı Adı</string>
<string name="password">Parola</string>
<string name="outproxy_auth">Giden vekil sunucu kimlik doğrulaması</string>
<string name="tunnel_summ_outproxy_auth">Giden vekil sunucu için oturum açılması gerekiyor</string>
<string name="other">Diğer</string>
<string name="signature_type">İmza tipi</string>
<string name="custom_options">Uyarlanmış seçenekler</string>
<string name="all">Tümü</string>
<string name="no_messages">Henüz bir ileti yok</string>
<string name="no_error_messages">Henüz bir hata iletisi yok</string>
<plurals name="log_error_messages">
<item quantity="other">%d hata iletisi, yeniden eskiye</item>
</plurals>
<plurals name="log_messages">
<item quantity="other">%d ileti, yeniden eskiye</item>
</plurals>
<string name="log_entry">Günlük Kaydı</string>
<string name="copy_logs">Günlükleri kopyala</string>
<string name="i2p_android_error_logs">I2P Android Hata Günlükleri</string>
<string name="i2p_android_logs">I2P Android Günlükleri</string>
<string name="error_logs_copied_to_clipboard">Hata günlükleri panoya kopyalandı</string>
<string name="logs_copied_to_clipboard">Günlükler panoya kopyalandı</string>
<string name="label_browser_configuration">Tarayıcı ayarları</string>
<string name="unset">Ayarı Kaldır</string>
</resources>

View File

@ -40,13 +40,15 @@
<string name="net_status_error_udp_port">Використовується UDP порт - змініть в налаштуваннях та перезавантажте</string>
<string name="net_status_error_no_active_peers">Немає активних пірів - перевірте мережеве з\'єднання і файрвол</string>
<string name="net_status_error_udp_disabled_tcp_not_set">UDP вимкнено і вхідний TCP хост/порт не встановлено</string>
<string name="net_status_warn_firewalled_udp_disabled">перевірено фаєрволом з виключеним UDP </string>
<string name="net_status_warn_firewalled_udp_disabled">перевірено фаєрволом з вимкненим UDP </string>
<string name="shared_clients">Колективні клієнти</string>
<string name="uptime">Аптайм</string>
<string name="active_peers">Активні піри</string>
<string name="known_peers">Відомі піри</string>
<!--Character to indicate a client tunnel. Usually first letter of the word "client".-->
<string name="char_client_tunnel">К</string>
<!--Character to indicate a server tunnel. Usually first letter of the word "server".-->
<string name="char_server_tunnel">С</string>
<string name="no_tunnels_running">Нема жодного працюючого клієнта</string>
<string name="download">Завантажено</string>
<string name="upload">Вивантажено</string>
@ -78,6 +80,7 @@
<string name="router_not_running">Маршрутизатор не працює.</string>
<string name="router_shutting_down">Маршрутизатор вимикається.</string>
<string name="stats_not_ready">Менеджер статистики ще не готовий. Спробуйте пізніше.</string>
<string name="select_an_address">Оберіть адресу.</string>
<string name="no_graphs_configured">Немає налаштованих графиків. Ви можете вибрати яку статистику показувати на графіках у меню налаштувань. Будь-які зміни набудуть чинності за 60 секунд.</string>
<string name="configure_graphs">Налаштування графиків</string>
<string name="graphs_not_ready">Графіки ще не готові. Спробуйте пізніше.</string>
@ -225,8 +228,12 @@
<string name="enabled">Увімкнено</string>
<string name="i2ptunnel_wizard_desc_name">Назва тунелю для ідентифікації у списці тунелів.</string>
<string name="i2ptunnel_wizard_desc_desc">Опис тунелю. Використовуйте це необов\'язкове поле задля більшої інформативності.</string>
<string name="i2ptunnel_wizard_desc_dest">Тип призначення сервісу в мережі I2P, тобто куди клієнт має приєднатися. Це може бути повний BASE64 ключ призначення або імʼя вузла I2P з вашої адресної книги.</string>
<string name="i2ptunnel_wizard_desc_outproxies">Якщо ви знаєте інші вихідні проксі для цього типу тунелю (або HTTP або SOCKS), то надрукуйте тут. Розділяйте проксі комами.</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_desc_reachable_on">Встановлює обмеження на доступ до цього тунелю через компʼютери чи смартфони.</string>
<string name="i2ptunnel_wizard_desc_binding_port">Локальний порт доступу для клієнтського тунелю; клієнтський порт для тунелю для двонаправленого HTTP серверу.</string>
<string name="i2ptunnel_wizard_desc_auto_start">Чи повинен тунель запускатись автоматично коли запускається маршрутизатор?</string>
<string name="i2ptunnel_wizard_submit_confirm_message">Створити тунель?</string>
<string name="i2ptunnel_wizard_submit_confirm_button">Створити тунель</string>
@ -247,11 +254,15 @@
<string name="persistent_key_conflict_msg">Ви не можете включити постійні ключі доки тунель налаштовується щоб згенерувати нові ключі після перезапуску. Чи хочете ви відключити нові ключі після перезапуску?</string>
<string name="tunnel_summ_persistent_key">Залишити це Призначення тунелю після перезапуску</string>
<string name="reachable_on">Доступний на</string>
<string name="listen_port">Вхідний порт</string>
<string name="client_ssl">Клієнт SSL</string>
<string name="tunnel_summ_client_ssl">Клієнт має використовувати SSL для зʼєднання</string>
<string name="outproxies">Вихідні проксі</string>
<string name="ssl_outproxies">Вихідні проксі SSL</string>
<string name="irc">IRC</string>
<string name="enable_dcc">Увімкнути DCC</string>
<string name="tunnel_summ_enable_dcc">Дозволити IRC клієнтам використовувати DCC</string>
<string name="website_domain_name">Імʼя домену сайта</string>
<string name="target_host">Цільовий хост</string>
<string name="target_port">Цільовий порт</string>
<string name="use_ssl">Використовувати SSL</string>
@ -260,9 +271,17 @@
<string name="profile">Профіль</string>
<string name="profile_interactive">Інтерактивне з’єднання</string>
<string name="delay_connect">Затримка з’єднання</string>
<string name="tunnel_summ_delay_connect">Дозволити зʼєднання типу запит/відповідь</string>
<string name="access_control">Контроль доступу</string>
<string name="restricted_access">Обмежений доступ</string>
<string name="disabled">Вимкнено</string>
<string name="whitelist">Білий список</string>
<string name="blacklist">Чорний список</string>
<string name="access_list">Список дозволів</string>
<string name="reject_inproxies">Відхилити вхідні проксі</string>
<string name="tunnel_summ_reject_inproxies">Дозволити зʼєднання тільки користувачам I2P</string>
<string name="unique_local">Унікальні локальні мережі</string>
<string name="tunnel_summ_unique_local">Використовувати унікальні локальні адреси для кожного клієнту</string>
<string name="connections_per_minute">З’єднань за хвилину</string>
<string name="connections_per_hour">З’єднань за годину</string>
<string name="connections_per_day">З’єднань за день</string>

View File

@ -1,5 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="Theme.I2P" parent="Base.Theme.I2P">
<!-- This fixes a UI bug in the support preference library -->
<item name="preferenceTheme">@style/PreferenceThemeOverlay.v14.Material</item>
</style>
<style name="WizardPageTitle" parent="WizardPageTitleBase">
<item name="android:paddingLeft">?android:attr/listPreferredItemPaddingLeft</item>
</style>

View File

@ -6,5 +6,7 @@
<item name="android:windowAllowReturnTransitionOverlap">true</item>
<item name="android:windowSharedElementEnterTransition">@android:transition/move</item>
<item name="android:windowSharedElementExitTransition">@android:transition/move</item>
<!-- This fixes a UI bug in the support preference library -->
<item name="preferenceTheme">@style/PreferenceThemeOverlay.v14.Material</item>
</style>
</resources>

View File

@ -81,6 +81,7 @@
<string name="router_not_running">路由器未在运行。</string>
<string name="router_shutting_down">路由器正在关闭。</string>
<string name="stats_not_ready">统计管理器还没有准备好。请稍后再试。</string>
<string name="select_an_address">选择一个地址。</string>
<string name="no_graphs_configured">没有已配置的图表。您可以在设置菜单中选择统计信息以获得图表。任何更改将在60秒后生效。</string>
<string name="configure_graphs">配置图表</string>
<string name="graphs_not_ready">图表尚未就绪。请稍候再试。</string>

View File

@ -8,4 +8,10 @@
<attr name="shadowDrawable" format="reference" />
<attr name="shadowVisible" format="boolean" />
</declare-styleable>
<declare-styleable name="SeekBarPreference">
<attr name="msbp_maxValue" format="reference|integer"/>
<attr name="msbp_defaultValue" format="reference|integer"/>
<attr name="msbp_measurementUnit" format="reference|string"/>
</declare-styleable>
</resources>

View File

@ -295,6 +295,7 @@
<string name="i2ptunnel_view_target">Target</string>
<string name="i2ptunnel_view_access_point">Access point</string>
<string name="i2ptunnel_view_autostart">Auto-start</string>
<string name="address_copied_to_clipboard">Address copied to clipboard</string>
<string name="edit_tunnel">Edit tunnel</string>
<string name="name">Name</string>

View File

@ -22,7 +22,9 @@
<!-- The rest of your attributes -->
</style>
<style name="Theme.I2P" parent="Base.Theme.I2P" />
<style name="Theme.I2P" parent="Base.Theme.I2P">
<item name="preferenceTheme">@style/PreferenceThemeOverlay</item>
</style>
<style name="TextAppearance.AppCompat.Primary" parent="TextAppearance.AppCompat.Body1">
<item name="android:textColor">@color/primary_text_default_material_dark</item>

View File

@ -6,7 +6,7 @@
<!--
router.inboundPool.length=1
-->
<net.i2p.android.router.util.IntListPreference
<net.i2p.android.preferences.util.IntListPreference
android:defaultValue="2"
android:dialogTitle="@string/settings_desc_expl_length"
android:entries="@array/setting0to3"
@ -18,7 +18,7 @@
<!--
router.inboundPool.lengthVariance=1
-->
<net.i2p.android.router.util.IntListPreference
<net.i2p.android.preferences.util.IntListPreference
android:defaultValue="0"
android:dialogTitle="@string/settings_desc_expl_lengthVariance"
android:entries="@array/setting2to2"
@ -31,7 +31,7 @@
<!--
router.inboundPool.quantity=2
-->
<net.i2p.android.router.util.IntListPreference
<net.i2p.android.preferences.util.IntListPreference
android:defaultValue="2"
android:dialogTitle="@string/settings_desc_expl_quantity"
android:entries="@array/setting0to3"
@ -43,7 +43,7 @@
<!--
router.inboundPool.backupQuantity=0
-->
<net.i2p.android.router.util.IntListPreference
<net.i2p.android.preferences.util.IntListPreference
android:defaultValue="0"
android:dialogTitle="@string/settings_desc_expl_backupQuantity"
android:entries="@array/setting0to3"
@ -59,7 +59,7 @@
<!--
router.outboundPool.length=1
-->
<net.i2p.android.router.util.IntListPreference
<net.i2p.android.preferences.util.IntListPreference
android:defaultValue="2"
android:dialogTitle="@string/settings_desc_expl_length"
android:entries="@array/setting0to3"
@ -71,7 +71,7 @@
<!--
router.outboundPool.lengthVariance=1
-->
<net.i2p.android.router.util.IntListPreference
<net.i2p.android.preferences.util.IntListPreference
android:defaultValue="0"
android:dialogTitle="@string/settings_desc_expl_lengthVariance"
android:entries="@array/setting2to2"
@ -83,7 +83,7 @@
<!--
router.outboundPool.quantity=2
-->
<net.i2p.android.router.util.IntListPreference
<net.i2p.android.preferences.util.IntListPreference
android:defaultValue="2"
android:dialogTitle="@string/settings_desc_expl_quantity"
android:entries="@array/setting0to3"
@ -95,7 +95,7 @@
<!--
router.outboundPool.backupQuantity=0
-->
<net.i2p.android.router.util.IntListPreference
<net.i2p.android.preferences.util.IntListPreference
android:defaultValue="0"
android:dialogTitle="@string/settings_desc_expl_backupQuantity"
android:entries="@array/setting0to3"

View File

@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<!--
Keys and the default values from current installation:
-->
@ -16,26 +17,22 @@
<!--
i2np.bandwidth.inboundKBytesPerSecond=100
-->
<com.hlidskialf.android.preference.SeekBarPreference
<com.pavelsikun.seekbarpreference.SeekBarPreference
android:key="@string/PROP_INBOUND_BANDWIDTH"
android:defaultValue="100"
android:max="1000"
android:title="@string/settings_label_bw_inbound"
android:summary="@string/settings_desc_bw_inbound"
android:dialogMessage="Maximum inbound speed"
android:text=" KBytes/sec"
android:title="@string/settings_desc_bw_inbound"
app:msbp_defaultValue="100"
app:msbp_maxValue="1000"
app:msbp_measurementUnit="KB/s"
/>
<!--
i2np.bandwidth.outboundKBytesPerSecond=30
-->
<com.hlidskialf.android.preference.SeekBarPreference
<com.pavelsikun.seekbarpreference.SeekBarPreference
android:key="@string/PROP_OUTBOUND_BANDWIDTH"
android:defaultValue="100"
android:max="1000"
android:title="@string/settings_label_bw_outbound"
android:summary="@string/settings_desc_bw_outbound"
android:dialogMessage="Maximum outbound speed"
android:text=" KBytes/sec"
android:title="@string/settings_desc_bw_outbound"
app:msbp_defaultValue="100"
app:msbp_maxValue="1000"
app:msbp_measurementUnit="KB/s"
/>
</PreferenceCategory>

View File

@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<PreferenceCategory
android:key="settings_udp"
android:title="UDP">
@ -13,7 +14,7 @@
android:summary="DO NOT DISABLE THIS"
android:title="@string/settings_enable" />
<net.i2p.android.router.util.PortPreference
<net.i2p.android.preferences.util.PortPreference
android:dependency="@string/PROP_ENABLE_UDP"
android:key="@string/PROP_UDP_INTERNAL_PORT"
android:title="UDP port" />
@ -21,16 +22,13 @@
<!--
i2np.udp.maxConnections=12
-->
<com.hlidskialf.android.preference.SeekBarPreference
android:defaultValue="32"
<com.pavelsikun.seekbarpreference.SeekBarPreference
android:dependency="@string/PROP_ENABLE_UDP"
android:dialogMessage="Maximum UDP connections"
android:key="@string/PROP_UDP_MAX_CONNECTIONS"
android:max="500"
android:shouldDisableView="true"
android:summary="Maximum UDP connections allowed"
android:text=" connections"
android:title="@string/settings_label_maxConns" />
android:title="@string/settings_label_maxConns"
app:msbp_defaultValue="32"
app:msbp_maxValue="500" />
</PreferenceCategory>
<PreferenceCategory
@ -49,22 +47,19 @@
android:summary="Use same port as UDP"
android:title="Auto-set port" />
<net.i2p.android.router.util.PortPreference
<net.i2p.android.preferences.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:defaultValue="32"
<com.pavelsikun.seekbarpreference.SeekBarPreference
android:dependency="i2np.ntcp.enable"
android:dialogMessage="Maximum NTCP connections"
android:key="@string/PROP_NTCP_MAX_CONNECTIONS"
android:max="250"
android:shouldDisableView="true"
android:summary="Maximum NTCP connections allowed (default=32)"
android:text=" connections"
android:title="@string/settings_label_maxConns" />
android:title="@string/settings_label_maxConns"
app:msbp_defaultValue="32"
app:msbp_maxValue="250" />
</PreferenceCategory>
</PreferenceScreen>

View File

@ -5,7 +5,7 @@
android:key="@string/TUNNEL_CAT_TUNNEL_PARAMS"
android:title="@string/tunnel_parameters">
<net.i2p.android.router.util.IntListPreference
<net.i2p.android.preferences.util.IntListPreference
android:defaultValue="@integer/DEFAULT_TUNNEL_LENGTH"
android:dialogTitle="@string/settings_desc_expl_length"
android:entries="@array/setting0to3"
@ -14,7 +14,7 @@
android:summary="@string/settings_summ_expl_length"
android:title="@string/settings_label_expl_length" />
<net.i2p.android.router.util.IntListPreference
<net.i2p.android.preferences.util.IntListPreference
android:defaultValue="@integer/DEFAULT_TUNNEL_VARIANCE"
android:dialogTitle="@string/settings_desc_expl_lengthVariance"
android:entries="@array/setting2to2"
@ -23,7 +23,7 @@
android:summary="@string/settings_summ_expl_lengthVariance"
android:title="@string/settings_label_expl_lengthVariance" />
<net.i2p.android.router.util.IntListPreference
<net.i2p.android.preferences.util.IntListPreference
android:defaultValue="@integer/DEFAULT_TUNNEL_QUANTITY"
android:dialogTitle="@string/settings_desc_expl_quantity"
android:entries="@array/setting0to3"
@ -32,7 +32,7 @@
android:summary="@string/settings_summ_expl_quantity"
android:title="@string/settings_label_expl_quantity" />
<net.i2p.android.router.util.IntListPreference
<net.i2p.android.preferences.util.IntListPreference
android:defaultValue="@integer/DEFAULT_TUNNEL_BACKUP_QUANTITY"
android:dialogTitle="@string/settings_desc_expl_backupQuantity"
android:entries="@array/setting0to3"

View File

@ -8,7 +8,7 @@
android:summary="@string/tunnel_summ_proxy_auth"
android:title="@string/settings_enable" />
<net.i2p.android.router.util.SummaryEditTextPreference
<net.i2p.android.preferences.util.SummaryEditTextPreference
android:dependency="@string/TUNNEL_OPT_LOCAL_AUTH"
android:key="@string/TUNNEL_OPT_LOCAL_USERNAME"
android:title="@string/username" />
@ -27,7 +27,7 @@
android:summary="@string/tunnel_summ_outproxy_auth"
android:title="@string/settings_enable" />
<net.i2p.android.router.util.SummaryEditTextPreference
<net.i2p.android.preferences.util.SummaryEditTextPreference
android:dependency="@string/TUNNEL_OPT_OUTPROXY_AUTH"
android:key="@string/TUNNEL_OPT_OUTPROXY_USERNAME"
android:title="@string/username" />

View File

@ -20,7 +20,7 @@
android:summary="@string/tunnel_summ_reduce_quantity"
android:title="@string/reduce_quantity" />
<net.i2p.android.router.util.IntEditTextPreference
<net.i2p.android.preferences.util.IntEditTextPreference
android:defaultValue="@integer/DEFAULT_REDUCE_TIME"
android:dependency="@string/TUNNEL_OPT_REDUCE_IDLE"
android:key="@string/TUNNEL_OPT_REDUCE_TIME"
@ -28,7 +28,7 @@
android:summary="@string/num_minutes"
android:title="@string/idle_time" />
<net.i2p.android.router.util.IntEditTextPreference
<net.i2p.android.preferences.util.IntEditTextPreference
android:defaultValue="@integer/DEFAULT_REDUCE_COUNT"
android:dependency="@string/TUNNEL_OPT_REDUCE_IDLE"
android:key="@string/TUNNEL_OPT_REDUCE_QUANTITY"

View File

@ -7,7 +7,7 @@
android:order="20"
android:title="@string/close_tunnels" />
<net.i2p.android.router.util.IntEditTextPreference
<net.i2p.android.preferences.util.IntEditTextPreference
android:defaultValue="@integer/DEFAULT_CLOSE_TIME"
android:dependency="@string/TUNNEL_OPT_CLOSE_IDLE"
android:key="@string/TUNNEL_OPT_CLOSE_TIME"

View File

@ -3,7 +3,7 @@
<PreferenceCategory android:title="@string/other">
<net.i2p.android.router.util.IntListPreference
<net.i2p.android.preferences.util.IntListPreference
android:entries="@array/sigtype_names"
android:entryValues="@array/sigtypes"
android:key="@string/TUNNEL_OPT_SIGTYPE"

View File

@ -6,7 +6,7 @@
android:key="@string/TUNNEL_CAT_ACCESS_CONTROL"
android:title="@string/access_control">
<net.i2p.android.router.util.IntListPreference
<net.i2p.android.preferences.util.IntListPreference
android:entries="@array/access_mode_names"
android:entryValues="@array/access_modes"
android:key="@string/TUNNEL_OPT_ACCESS_MODE"
@ -35,21 +35,21 @@
<PreferenceCategory android:title="@string/client_connection_limits">
<net.i2p.android.router.util.ConnectionLimitPreference
<net.i2p.android.preferences.util.ConnectionLimitPreference
android:dialogMessage="@string/set_zero_for_unlimited"
android:dialogTitle="@string/connections_per_minute"
android:key="@string/TUNNEL_OPT_LIMIT_MINUTE"
android:title="@string/num_per_minute"
app:clp_valueInTitle="true" />
<net.i2p.android.router.util.ConnectionLimitPreference
<net.i2p.android.preferences.util.ConnectionLimitPreference
android:dialogMessage="@string/set_zero_for_unlimited"
android:dialogTitle="@string/connections_per_hour"
android:key="@string/TUNNEL_OPT_LIMIT_HOUR"
android:title="@string/num_per_hour"
app:clp_valueInTitle="true" />
<net.i2p.android.router.util.ConnectionLimitPreference
<net.i2p.android.preferences.util.ConnectionLimitPreference
android:dialogMessage="@string/set_zero_for_unlimited"
android:dialogTitle="@string/connections_per_day"
android:key="@string/TUNNEL_OPT_LIMIT_DAY"
@ -59,28 +59,28 @@
<PreferenceCategory android:title="@string/total_connection_limits">
<net.i2p.android.router.util.ConnectionLimitPreference
<net.i2p.android.preferences.util.ConnectionLimitPreference
android:dialogMessage="@string/set_zero_for_unlimited"
android:dialogTitle="@string/total_connections_per_minute"
android:key="@string/TUNNEL_OPT_TOTAL_MINUTE"
android:title="@string/num_per_minute"
app:clp_valueInTitle="true" />
<net.i2p.android.router.util.ConnectionLimitPreference
<net.i2p.android.preferences.util.ConnectionLimitPreference
android:dialogMessage="@string/set_zero_for_unlimited"
android:dialogTitle="@string/total_connections_per_hour"
android:key="@string/TUNNEL_OPT_TOTAL_HOUR"
android:title="@string/num_per_hour"
app:clp_valueInTitle="true" />
<net.i2p.android.router.util.ConnectionLimitPreference
<net.i2p.android.preferences.util.ConnectionLimitPreference
android:dialogMessage="@string/set_zero_for_unlimited"
android:dialogTitle="@string/total_connections_per_day"
android:key="@string/TUNNEL_OPT_TOTAL_DAY"
android:title="@string/num_per_day"
app:clp_valueInTitle="true" />
<net.i2p.android.router.util.ConnectionLimitPreference
<net.i2p.android.preferences.util.ConnectionLimitPreference
android:dialogMessage="@string/set_zero_for_unlimited"
android:key="@string/TUNNEL_OPT_MAX_STREAMS"
android:title="@string/max_active_connections" />

View File

@ -3,25 +3,25 @@
<PreferenceCategory android:title="@string/post_limits">
<net.i2p.android.router.util.IntEditTextPreference
<net.i2p.android.preferences.util.IntEditTextPreference
android:key="@string/TUNNEL_OPT_POST_CHECK_TIME"
android:summary="%s minutes"
android:title="@string/limit_period" />
<net.i2p.android.router.util.ConnectionLimitPreference
<net.i2p.android.preferences.util.ConnectionLimitPreference
android:key="@string/TUNNEL_OPT_POST_MAX"
android:title="@string/client_posts_per_period" />
<net.i2p.android.router.util.IntEditTextPreference
<net.i2p.android.preferences.util.IntEditTextPreference
android:key="@string/TUNNEL_OPT_POST_BAN_TIME"
android:summary="%s minutes"
android:title="@string/client_ban_length" />
<net.i2p.android.router.util.ConnectionLimitPreference
<net.i2p.android.preferences.util.ConnectionLimitPreference
android:key="@string/TUNNEL_OPT_POST_TOTAL_MAX"
android:title="@string/total_posts_per_period" />
<net.i2p.android.router.util.IntEditTextPreference
<net.i2p.android.preferences.util.IntEditTextPreference
android:key="@string/TUNNEL_OPT_POST_TOTAL_BAN_TIME"
android:summary="%s minutes"
android:title="@string/total_ban_length" />

View File

@ -1,11 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<net.i2p.android.router.util.SummaryEditTextPreference
<net.i2p.android.preferences.util.SummaryEditTextPreference
android:key="@string/TUNNEL_NAME"
android:title="@string/name" />
<net.i2p.android.router.util.SummaryEditTextPreference
<net.i2p.android.preferences.util.SummaryEditTextPreference
android:key="@string/TUNNEL_DESCRIPTION"
android:title="@string/description" />

View File

@ -7,7 +7,7 @@
android:summary="@string/tunnel_summ_shared_client"
android:title="@string/shared_client" />
<net.i2p.android.router.util.SummaryEditTextPreference
<net.i2p.android.preferences.util.SummaryEditTextPreference
android:key="@string/TUNNEL_DEST"
android:title="@string/target_destination" />

View File

@ -6,7 +6,7 @@
android:summary="%s"
android:title="@string/reachable_on" />
<net.i2p.android.router.util.PortPreference
<net.i2p.android.preferences.util.PortPreference
android:key="@string/TUNNEL_LISTEN_PORT"
android:title="@string/listen_port" />

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<net.i2p.android.router.util.SummaryEditTextPreference
<net.i2p.android.preferences.util.SummaryEditTextPreference
android:key="@string/TUNNEL_SPOOFED_HOST"
android:title="@string/website_domain_name" />

View File

@ -1,11 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<net.i2p.android.router.util.SummaryEditTextPreference
<net.i2p.android.preferences.util.SummaryEditTextPreference
android:key="@string/TUNNEL_TARGET_HOST"
android:title="@string/target_host" />
<net.i2p.android.router.util.PortPreference
<net.i2p.android.preferences.util.PortPreference
android:key="@string/TUNNEL_TARGET_PORT"
android:title="@string/target_port" />

View File

@ -3,7 +3,7 @@ buildscript {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:1.3.0'
classpath 'com.android.tools.build:gradle:2.1.0'
classpath files('gradle/libs/gradle-witness.jar')
}
}
@ -13,9 +13,6 @@ allprojects {
group = GROUP
repositories {
maven {
url "https://raw.github.com/whispersystems/maven/master/preferencefragment/releases/"
}
jcenter()
}
}

View File

@ -1,66 +0,0 @@
apply plugin: 'com.android.library'
apply plugin: 'witness'
android {
compileSdkVersion Integer.parseInt(project.ANDROID_BUILD_SDK_VERSION as String)
buildToolsVersion project.ANDROID_BUILD_TOOLS_VERSION as String
defaultConfig {
minSdkVersion 9
targetSdkVersion Integer.parseInt(project.ANDROID_BUILD_TARGET_SDK_VERSION as String)
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_7
targetCompatibility JavaVersion.VERSION_1_7
}
lintOptions {
abortOnError false
}
}
dependencies {
compile project(path: ':routerjars', configuration: 'client')
compile 'com.android.support:support-v4:23.0.1'
testCompile 'junit:junit:4.12'
testCompile 'org.mockito:mockito-core:1.9.5'
}
dependencyVerification {
verify = [
'com.android.support:support-v4:5ddf1feda096c164d0dd299cc6786fde18a845ce47dbfe484ff27cce27e19638',
]
}
android.libraryVariants.all { variant ->
// Copy I2P client JARs into AAR
def copyClientLibsTask = tasks.create(name: "copy${variant.name.capitalize()}ClientLibs", type: Copy) {
from project(':routerjars').configurations.client.allArtifacts.collect { artifact ->
artifact.file
}
destinationDir file("${buildDir}/intermediates/bundles/${variant.dirName}/libs")
}
// Hook the copy task into the build
variant.processJavaResources.dependsOn copyClientLibsTask
copyClientLibsTask.mustRunAfter ':routerjars:buildClient'
}
apply from: "${project.rootDir}/gradle/maven-push.gradle"
// Remove routerjars from dependencies
afterEvaluate { project ->
def deployer = uploadArchives.repositories.mavenDeployer
deployer*.pom*.whenConfigured { pom ->
pom.setDependencies(pom.dependencies.collect { dep ->
if (dep.groupId != 'i2p.android.base' && dep.artifactId != 'routerjars')
dep
})
}
}

View File

@ -1,10 +1,10 @@
VERSION_NAME=0.7
VERSION_NAME=0.9
GROUP=net.i2p.android
POM_URL=https://github.com/i2p/i2p.android.base
POM_SCM_URL=https://github.com/i2p/i2p.android.base
POM_SCM_CONNECTION=scm:git@github.com:i2p/i2p.android.base.git
POM_SCM_DEV_CONNECTION=scm:git@github.com:i2p/i2p.android.base.git
POM_SCM_CONNECTION=scm:git:git@github.com:i2p/i2p.android.base.git
POM_SCM_DEV_CONNECTION=scm:git:git@github.com:i2p/i2p.android.base.git
POM_LICENCE_NAME=The Apache Software License, Version 2.0
POM_LICENCE_URL=http://www.apache.org/licenses/LICENSE-2.0.txt
POM_LICENCE_DIST=repo

Binary file not shown.

View File

@ -1,5 +1,6 @@
#Mon May 02 16:55:47 NZST 2016
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-2.2.1-all.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-2.12-all.zip

10
gradlew vendored
View File

@ -42,11 +42,6 @@ case "`uname`" in
;;
esac
# For Cygwin, ensure paths are in UNIX format before anything is touched.
if $cygwin ; then
[ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
fi
# Attempt to set APP_HOME
# Resolve links: $0 may be a link
PRG="$0"
@ -61,9 +56,9 @@ while [ -h "$PRG" ] ; do
fi
done
SAVED="`pwd`"
cd "`dirname \"$PRG\"`/" >&-
cd "`dirname \"$PRG\"`/" >/dev/null
APP_HOME="`pwd -P`"
cd "$SAVED" >&-
cd "$SAVED" >/dev/null
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
@ -114,6 +109,7 @@ fi
if $cygwin ; then
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
JAVACMD=`cygpath --unix "$JAVACMD"`
# We build the pattern for arguments to be converted via cygpath
ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`

2
gradlew.bat vendored
View File

@ -46,7 +46,7 @@ echo location of your Java installation.
goto fail
:init
@rem Get command-line arguments, handling Windowz variants
@rem Get command-line arguments, handling Windows variants
if not "%OS%" == "Windows_NT" goto win9xME_args
if "%@eval[2+2]" == "4" goto 4NT_args

47
lib/client/build.gradle Normal file
View File

@ -0,0 +1,47 @@
apply plugin: 'com.android.library'
apply plugin: 'witness'
android {
compileSdkVersion Integer.parseInt(project.ANDROID_BUILD_SDK_VERSION as String)
buildToolsVersion project.ANDROID_BUILD_TOOLS_VERSION as String
defaultConfig {
minSdkVersion 9
targetSdkVersion Integer.parseInt(project.ANDROID_BUILD_TARGET_SDK_VERSION as String)
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_7
targetCompatibility JavaVersion.VERSION_1_7
}
lintOptions {
abortOnError false
}
}
dependencies {
compile 'net.i2p:i2p:0.9.26'
compile 'net.i2p.client:streaming:0.9.26'
// No direct dependencies on the helper lib, but this ensures consistent library behavior
compile project(':lib:helper')
compile 'com.android.support:support-v4:23.4.0'
testCompile 'junit:junit:4.12'
testCompile 'org.mockito:mockito-core:1.9.5'
}
dependencyVerification {
verify = [
'com.android.support:support-v4:a0d002465c0f611eedaaef2b2530707d2e9fb3a5c7ed66f53c556a12f714f43a',
'net.i2p:i2p:5e0f5efa8849e2abe72efaf1530bdf4a090717d49acfdfbe92911a14d4b4e511',
'net.i2p.client:mstreaming:1f343a640f79707f6652bbf344f65b42215ae3f7a221a3ee8ddd70ff59e812ae',
'net.i2p.client:streaming:5add7390de089f3c3c4f4005f0daa83014418416e890ed6c475e15cef51ba3c7',
]
}
apply from: "${project.rootDir}/gradle/maven-push.gradle"

Some files were not shown because too many files have changed in this diff Show More