Compare commits

...

45 Commits

Author SHA1 Message Date
9460e3202f Helper library 0.9.3 2017-03-27 01:36:52 +00:00
5f388a7c6b Updated translations 2017-03-27 01:22:51 +00:00
39d5de7eb4 Upgrade I2P dependencies to 0.9.29 2017-03-27 01:20:24 +00:00
0fb1ef881c Upgrade Android dependencies 2017-03-27 00:40:05 +00:00
8230769191 Upgrade Android support libraries to 25.3.0 2017-03-26 09:22:22 +00:00
19036a71cb 0.9.28 2017-01-02 12:33:56 +00:00
40f3fbf9c5 Add -dontobfuscate to ProGuard rules 2017-01-02 12:08:30 +00:00
1127fb0195 Helper library 0.9.2 2017-01-02 12:06:26 +00:00
df81efe6bc Fix height of address book list entries 2017-01-02 10:57:40 +00:00
784ca3691b Collate TODO items 2017-01-02 10:07:26 +00:00
0fa4241ce6 New translations 2017-01-02 09:44:58 +00:00
5063d276de Updated translations 2017-01-02 09:44:39 +00:00
81d0e43f0f Upgrade Android Gradle tools to 2.2.3 2017-01-02 09:42:40 +00:00
1637a9007d Upgrade Android support libraries to 25.0.1 2017-01-02 09:41:58 +00:00
ce0f01cf46 Update I2P dependencies to 0.9.28 2017-01-02 09:35:15 +00:00
dd579d4f5b 0.9.27 2016-11-20 07:12:16 +00:00
5703d8cc6d Updated translations 2016-11-20 06:06:09 +00:00
b8768ae9fe Helper library 0.9.1 2016-11-20 05:50:53 +00:00
54dc2c88bf Make it easier to test helper library against debug I2P Android builds 2016-11-20 05:50:35 +00:00
dba01b8c18 Remove debugging lines 2016-11-20 00:18:34 +00:00
b7b3eb7019 Refactor libraries:
- Remove client library dependency on helper library
- Separate client and helper library versions             
- Bump client library version to track I2P library version
2016-11-20 00:00:03 +00:00
430e2ab826 Remove kytv's IRC server from default tunnel list 2016-11-12 19:27:39 +00:00
87383a2ec8 Upgrade Espresso to 2.2.2, update tests 2016-11-12 19:19:38 +00:00
f63bfe1dea Bump build tools to 25.0.0 2016-11-08 06:45:08 +00:00
ff2021c0aa Upgrade Android support libraries to 25.0.0 2016-11-08 06:20:05 +00:00
51f7e07080 Remove unnecessary dependency from client library 2016-11-08 06:02:07 +00:00
7797e067a5 Upgrade I2P dependencies to 0.9.27
The router JAR is now fetched instead of built locally
2016-11-08 05:52:40 +00:00
cf09a21f1e Upgrade Android Gradle plugin 2016-11-08 05:51:40 +00:00
914294927d Updated CHANGELOG 2016-06-13 13:12:50 +00:00
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
37 changed files with 307 additions and 226 deletions

View File

@ -1,4 +1,16 @@
0.9.25
0.9.28 / 2017-01-02
* Bug fixes and translation updates
0.9.27 / 2016-11-20 / 64ff68efe98c345acb6ba1d0432fa49d1d650358
* Removed kytv's IRC server from default tunnel list
* Translation updates
0.9.26 / 2016-06-13 / b003272c8b504bb0d904edca2e95359a57c9a52c
* Fixed "I2CP already listening" bug
* Fixed crash when adding tunnel to empty list
* Translation updates
0.9.25 / 2016-04-17 / 46d45a878a2b73394b26ca27dbe6c696dedcf1c3
* Fixed a bug on Samsung Android 4.2 devices
* Dependency improvements
* Translation updates

View File

@ -51,7 +51,6 @@ systemProp.socksProxyPort=9150
3. Create a `local.properties` file in `i2p.android.base/lib/client` containing:
```
i2psrc=/path/to/i2p.i2p
ndk.dir=/path/to/ndk
```

25
TODO
View File

@ -19,38 +19,61 @@
- Style for addressbook headers
- Change console FAM icon when possible
<zzz> on the bottom right, the + and x icons might be better as a double-up arrow and double-down arrow?
- Use Material design for LongPressButton
- Highlight selected tunnel in two-pane mode
# Short-term
- Remove peers page (HTML version)
- Add firewall help page showing current port settings
- GMP 6
- Fetch all JARs from Maven Central (ie. upload everything that I2P Android uses)
- Disable uPnP when on cell networks
<zzz> spewing UPnP out into cell networks is a waste of time at best and a security risk at worst, but you really want it for wifi
- Rewrite settings config handling
- Rewrite InitActivities
- I2PTunnel
- Improve tunnel list status indicators
- Icon overlay to indicate which tunnels are shared
- Or reorder / group tunnels?
- Show all messages somewhere
- Bottom toolbar?
- Icons/header images for tunnel types on details page
- Setting to close when not on WiFi
- Progress feedback for addressbook subscriptions reload
- Display release notes directly on new router version
- Fill out help pages
- Fix navigation to specific settings pages
- Rewrite release notes to be release-specific
- Fix release notes UI, either make back button use clear or add buttons
- Notify user when autostart fails?
- NetDB tablet view fixes
- Refresh detail fragment when changing tab
- Move list to correct item when changing tab
- Create nav history when viewing RI from LS
- Handle NetDB null cases (failed lookup of requested hash in detail page)
- Include GeoIP db for country info
- Maybe change router-off mechanic for various pages? Enable as they become available?
# Medium-term
- SQLite naming service backend to store addresses more effectively
- Leverage for name completion in e.g. browsers
- Create/edit tunnels while router is not running
- Separate out shared tunnel config
- Convey to users that one config controls all shared tunnels
- Network profiles
- User selects profile in settings
- Change network participation etc. based on profile
- Also look at connection type: Connectivity.isConnectionFast()
- Expose log level overrides
- Bug report feature
- Replace peers page (native version)
- Improve graphs
- Show fixed x range, not only available data
- Think about pan/zoom
- How to persist data across restarts?
- Enable apps to specify when they don't need the router anymore
# Silent Store approval checks to confirm/implement
@ -98,6 +121,8 @@
# Long-term
- Reproducible builds
- Extract RouterService into a library
- Remote router support
- Implement a "router wrapper" that can represent a local or remote router
- Implement/use client APIs to talk to remote router

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 4745232
versionName '0.9.25'
versionCode 4745235
versionName "$I2P_VERSION"
minSdkVersion 9
targetSdkVersion Integer.parseInt(project.ANDROID_BUILD_TARGET_SDK_VERSION as String)
@ -53,10 +53,11 @@ android {
dependencies {
// Local dependencies
compile project(':lib:client')
compile project(':lib:helper')
compile project(':routerjars')
// Android Support Repository dependencies
def supportVersion = '23.2.1'
def supportVersion = '25.3.0'
compile "com.android.support:support-v4:$supportVersion"
compile "com.android.support:appcompat-v7:$supportVersion"
compile "com.android.support:preference-v7:$supportVersion"
@ -64,33 +65,32 @@ dependencies {
compile "com.android.support:recyclerview-v7:$supportVersion"
// Remote dependencies
compile 'com.androidplot:androidplot-core:0.9.6'
compile 'com.androidplot:androidplot-core:1.4.1'
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 'com.inkapplications.viewpageindicator:library:2.4.4'
compile 'com.pnikosis:materialish-progress:1.7'
compile "net.i2p:router:$I2P_VERSION"
compile 'net.i2p.android.ext:floatingactionbutton:1.10.1'
compile 'org.sufficientlysecure:html-textview:1.3'
compile 'org.sufficientlysecure:html-textview:3.1'
// Testing-only dependencies
androidTestCompile 'com.android.support.test.espresso:espresso-core:2.0'
androidTestCompile 'com.android.support.test:testing-support-lib:0.1'
androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.2'
}
dependencyVerification {
verify = [
'com.android.support:support-v4:81ce890f26d35c75ad17d0f998a7e3230330c3b41e0b629566bc744bee89e448',
'com.android.support:appcompat-v7:00f9d93acacd6731f309724054bf51492814b4b2869f16d7d5c0038dcb8c9a0d',
'com.android.support:preference-v7:775101bd07bd052e455761c5c5d9523d7ad59f2f320e3e8cbde241fd6b1d6025',
'com.android.support:preference-v14:44881bb46094e86d0bc2426f205419674a5b4eb514b44b5a4659b5de29f71eb7',
'com.android.support:recyclerview-v7:44040a888e23e0c93162a3377cfe06751080e3c22d369ab0d4301ef60d63b0fe',
'com.androidplot:androidplot-core:1aaa931974da9d351976ed3d4b67170ac2a78be6c6afd13559ded5534eefc264',
'com.android.support:support-v4:9142d2f386eeb4483050d7f13fcaeddcd01011650f4216208376ff7d4d7a6bf1',
'com.android.support:appcompat-v7:2841b0786c50018a14b6bbcdadb63d6b077ea9e2aadcc7611de1caeecaccf06a',
'com.android.support:preference-v7:0eede78cace2404e107886a4eaf11c4b895df949a4f1deee58e2e60e25c73dd2',
'com.android.support:preference-v14:19d384a0476cf6e03fc857a29c3d7f2055c701f828b502c78e80b66b2bfe5ef4',
'com.android.support:recyclerview-v7:423b183809ef75051c150f5f401c4077ddedac26b2c515b6ee231c4c5724f5bf',
'com.androidplot:androidplot-core:7670da5838ce2ae2b0b5faabeb9d6a1f2787d30d3fe9f0952adc5611910d18c0',
'com.eowise:recyclerview-stickyheaders:7b236da49b33b840e9ba6e7e4182218d1a2d9047236fdbc3ca947352f9b0883b',
'com.mcxiaoke.viewpagerindicator:library:1e8aad664137f68abdfee94889f6da3dc98be652a235176a403965a07a25de62',
'com.inkapplications.viewpageindicator:library:77b26a7723cd10fa5e29480be239e8d68f431f4bc20d9144169c9ce06ebac2bf',
'com.pnikosis:materialish-progress:da089a90d1dab61e9b50038c09081019398f81190d12b0b567ce94b83ef8cf93',
'net.i2p:router:d5018bb262ab1e070efacb32811a72e149aaabe600dce32fb192d2ddadd285f3',
'net.i2p.android.ext:floatingactionbutton:09d43e2d4ac04a91bf7a37e1ec48a8d220204e3a55dca72cd36cd9fa27461ade',
'org.sufficientlysecure:html-textview:39048e35894e582adada388e6c00631803283f8defed8e07ad58a5f284f272ee',
'org.sufficientlysecure:html-textview:ed740adf05cae2373999c7a3047c803183d9807b2cf66162902090d7c112a832',
]
}

View File

@ -6,6 +6,10 @@
# http://developer.android.com/guide/developing/tools/proguard.html
# Add any project specific keep options here:
-dontobfuscate
-dontoptimize
-dontpreverify
-dontshrink
# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
@ -21,8 +25,5 @@
# https://code.google.com/p/android/issues/detail?id=78377#c302
-keepattributes **
-keep class !android.support.v7.view.menu.**,** {*;}
-dontpreverify
-dontoptimize
-dontshrink
-dontwarn **
-dontnote **
-dontnote **

View File

@ -16,6 +16,7 @@ import static android.support.test.espresso.matcher.ViewMatchers.hasSibling;
import static android.support.test.espresso.matcher.ViewMatchers.isDescendantOfA;
import static android.support.test.espresso.matcher.ViewMatchers.isDisplayed;
import static android.support.test.espresso.matcher.ViewMatchers.withId;
import static android.support.test.espresso.matcher.ViewMatchers.withParent;
import static android.support.test.espresso.matcher.ViewMatchers.withText;
import static org.hamcrest.Matchers.allOf;
import static org.hamcrest.Matchers.not;
@ -57,13 +58,13 @@ public class I2PActivityTest extends ActivityInstrumentationTestCase2<I2PActivit
public void testMainSwipe() {
onView(withId(R.id.router_onoff_button)).check(matches(isDisplayed()));
onView(allOf(withId(R.id.pager), hasSibling(withId(R.id.main_toolbar)))).perform(swipeLeft());
onView(allOf(withId(R.id.pager), withParent(hasSibling(withId(R.id.main_toolbar))))).perform(swipeLeft());
onView(withId(R.id.router_onoff_button)).check(matches(not(isDisplayed())));
onView(withText(R.string.label_i2ptunnel_client)).check(matches(isDisplayed()));
onView(allOf(withId(R.id.pager), hasSibling(withId(R.id.main_toolbar)))).perform(swipeLeft());
onView(allOf(withId(R.id.pager), withParent(hasSibling(withId(R.id.main_toolbar))))).perform(swipeLeft());
// TODO: test tunnels ViewPager
onView(allOf(withId(R.id.pager), hasSibling(withId(R.id.main_toolbar)))).perform(swipeLeft());
onView(allOf(withId(R.id.pager), withParent(hasSibling(withId(R.id.main_toolbar))))).perform(swipeLeft());
onView(withText(R.string.label_i2ptunnel_client)).check(matches(not(isDisplayed())));
onView(withText(R.string.label_router)).check(matches(isDisplayed()));
// TODO: test addressbook ViewPager

View File

@ -30,7 +30,7 @@ public class HelpHtmlFragment extends Fragment {
int padH = getResources().getDimensionPixelOffset(R.dimen.activity_horizontal_margin);
int padV = getResources().getDimensionPixelOffset(R.dimen.activity_vertical_margin);
text.setPadding(padH, padV, padH, padV);
text.setHtmlFromRawResource(getActivity(), getArguments().getInt(ARG_HTML_FILE), true);
text.setHtml(getArguments().getInt(ARG_HTML_FILE));
return scroller;
}
}

View File

@ -208,7 +208,7 @@ public class TunnelDetailFragment extends Fragment {
}
}
})
.setNegativeButton(net.i2p.android.lib.client.R.string.no, new DialogInterface.OnClickListener() {
.setNegativeButton(R.string.no, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialogInterface, int i) {
}
});

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

@ -11,9 +11,10 @@ import android.view.ViewGroup;
import com.androidplot.xy.BarFormatter;
import com.androidplot.xy.BarRenderer;
import com.androidplot.xy.BoundaryMode;
import com.androidplot.xy.StepMode;
import com.androidplot.xy.XYGraphWidget;
import com.androidplot.xy.XYPlot;
import com.androidplot.xy.XYSeries;
import com.androidplot.xy.XYStepMode;
import net.i2p.android.router.I2PFragmentBase;
import net.i2p.android.router.R;
@ -120,26 +121,25 @@ public class RateGraphFragment extends I2PFragmentBase {
_ratePlot.addSeries(rateSeries, new BarFormatter(Color.argb(200, 0, 80, 0), Color.argb(200, 0, 80, 0)));
_ratePlot.calculateMinMaxVals();
long maxX = _ratePlot.getCalculatedMaxX().longValue();
long maxX = _ratePlot.getBounds().getMaxX().longValue();
Util.d("Adding plot updater to listener");
_listener.addObserver(_plotUpdater);
// Only one line, so hide the legend
_ratePlot.getLegendWidget().setVisible(false);
_ratePlot.getLegend().setVisible(false);
BarRenderer renderer = (BarRenderer) _ratePlot.getRenderer(BarRenderer.class);
renderer.setBarWidthStyle(BarRenderer.BarWidthStyle.VARIABLE_WIDTH);
renderer.setBarGap(0);
BarRenderer renderer = _ratePlot.getRenderer(BarRenderer.class);
renderer.setBarGroupWidth(BarRenderer.BarGroupWidthMode.FIXED_GAP, 0);
_ratePlot.setDomainUpperBoundary(maxX, BoundaryMode.GROW);
_ratePlot.setDomainStep(XYStepMode.INCREMENT_BY_VAL, 15 * 60 * 1000);
_ratePlot.setTicksPerDomainLabel(4);
_ratePlot.setDomainStep(StepMode.INCREMENT_BY_VAL, 15 * 60 * 1000);
_ratePlot.setLinesPerDomainLabel(4);
_ratePlot.setRangeLowerBoundary(0, BoundaryMode.FIXED);
_ratePlot.setTicksPerRangeLabel(5);
_ratePlot.setLinesPerRangeLabel(5);
_ratePlot.setDomainValueFormat(new Format() {
_ratePlot.getGraph().getLineLabelStyle(XYGraphWidget.Edge.BOTTOM).setFormat(new Format() {
private DateFormat dateFormat = SimpleDateFormat.getTimeInstance(DateFormat.SHORT);
@Override
@ -157,13 +157,13 @@ public class RateGraphFragment extends I2PFragmentBase {
});
final int finalK = _k;
_ratePlot.setRangeValueFormat(new Format() {
_ratePlot.getGraph().getLineLabelStyle(XYGraphWidget.Edge.LEFT).setFormat(new Format() {
@Override
public StringBuffer format(Object obj, @NonNull StringBuffer toAppendTo,
@NonNull FieldPosition pos) {
double val = ((Number) obj).doubleValue();
double maxY = _ratePlot.getCalculatedMaxY().doubleValue();
double maxY = _ratePlot.getBounds().getMaxY().doubleValue();
if (val == 0 || maxY < finalK) {
return new DecimalFormat("0").format(val, toAppendTo, pos);
@ -194,8 +194,8 @@ public class RateGraphFragment extends I2PFragmentBase {
private void updatePlot() {
_ratePlot.calculateMinMaxVals();
double maxY = _ratePlot.getCalculatedMaxY().doubleValue();
_ratePlot.setRangeStep(XYStepMode.INCREMENT_BY_VAL, getRangeStep(maxY, _k));
double maxY = _ratePlot.getBounds().getMaxY().doubleValue();
_ratePlot.setRangeStep(StepMode.INCREMENT_BY_VAL, getRangeStep(maxY, _k));
_ratePlot.redraw();
}

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

@ -1,12 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="match_parent">
android:layout_height="@dimen/listitem_height_one_line">
<TextView
android:id="@+id/host_name"
android:layout_width="match_parent"
android:layout_height="@dimen/listitem_height_one_line"
android:layout_height="match_parent"
android:gravity="center_vertical"
android:paddingEnd="@dimen/listitem_horizontal_margin"
android:paddingLeft="@dimen/listitem_horizontal_margin"

View File

@ -124,29 +124,4 @@ tunnel.4.option.inbound.lengthVariance=0
tunnel.4.option.outbound.length=2
tunnel.4.option.outbound.lengthVariance=0
tunnel.4.option.outbound.priority=15
tunnel.4.startOnLoad=true
# irc irc.killyourtv.i2p
tunnel.5.name=KYTV IRC
tunnel.5.description=IRC tunnel to KillYourTV's network
tunnel.5.type=ircclient
tunnel.5.sharedClient=true
tunnel.5.interface=127.0.0.1
tunnel.5.listenPort=6670
tunnel.5.targetDestination=irc.killyourtv.i2p
tunnel.5.i2cpHost=127.0.0.1
tunnel.5.i2cpPort=7654
tunnel.5.option.inbound.nickname=shared clients
tunnel.5.option.outbound.nickname=shared clients
tunnel.5.option.i2cp.delayOpen=true
tunnel.5.option.i2cp.reduceIdleTime=600000
tunnel.5.option.i2cp.reduceOnIdle=true
tunnel.5.option.i2cp.reduceQuantity=1
tunnel.5.option.i2p.streaming.connectDelay=1000
tunnel.5.option.i2p.streaming.maxWindowSize=16
tunnel.5.option.inbound.length=2
tunnel.5.option.inbound.lengthVariance=0
tunnel.5.option.outbound.length=2
tunnel.5.option.outbound.lengthVariance=0
tunnel.5.option.outbound.priority=15
tunnel.5.startOnLoad=true
tunnel.4.startOnLoad=true

View File

@ -76,7 +76,7 @@
<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>

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,16 +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>
@ -65,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

@ -329,8 +329,8 @@
<string name="tunnel_summ_proxy_auth">Login nécessaire pour utiliser ce proxy</string>
<string name="username">Utilisateur</string>
<string name="password">Mot de passe</string>
<string name="outproxy_auth">Autorisation outproxy</string>
<string name="tunnel_summ_outproxy_auth">Login requis pour le outproxy</string>
<string name="outproxy_auth">Autorisation proxy sortant</string>
<string name="tunnel_summ_outproxy_auth">Identification requise pour le proxy sortant</string>
<string name="other">Autre</string>
<string name="signature_type">Type de signature</string>
<string name="custom_options">Options personnalisées</string>

View File

@ -340,8 +340,15 @@
<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="many">%d komunikatów o błędach, od najnowszych</item>
<item quantity="other">%d komunikatów o błędach, od najnowszych</item>
</plurals>
<plurals name="log_messages">
<item quantity="one">Jedna wiadomość</item>
<item quantity="few">%d wiadomości, od najnowszych</item>
<item quantity="many">%d wiadomości, od najnowszych</item>
<item quantity="other">%d wiadomości, 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

@ -220,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>
@ -233,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>
@ -240,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>
@ -255,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>
@ -268,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>
@ -280,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>
@ -288,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>
@ -295,6 +311,7 @@
<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>
@ -310,4 +327,5 @@
<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

@ -1,10 +1,10 @@
<?xml version='1.0' encoding='UTF-8'?>
<resources>
<string name="app_name">I2P</string>
<string name="desc_i2p_logo">I2P logga</string>
<string name="desc_i2p_logo">I2P-logo</string>
<string name="choose_language">Välj språk</string>
<string name="welcome_new_install">Välkommen till I2P! Denhär appen är ALFA-mjukvara och erbjuder inte stark anonymitet.
Var god läs release kommentarerna och licens-information.</string>
<string name="welcome_new_install">Välkommen till I2P! Den här appen är ALFA-mjukvara och erbjuder inte stark anonymitet.
Var god läs utgåvenoteringar och licens-information.</string>
<string name="welcome_new_version">Ny version installerad. Var god läs release kommentarerna. Version: </string>
<string name="label_tunnels">Tunnlar</string>
<string name="label_status">Status</string>
@ -37,11 +37,11 @@ Var god läs release kommentarerna och licens-information.</string>
<string name="net_status_error_unresolved_tcp">Ej upplöst TCP-adress</string>
<string name="net_status_error_private_tcp">Privat TCP-adress</string>
<string name="net_status_warn_firewalled_inbound_tcp">Bakom brandvägg med inåtgående TCP aktiverad</string>
<string name="net_status_warn_firewalled_floodfill">Bakom brandvägg och floodfill</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 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_error_udp_disabled_tcp_not_set">UDP deaktiverad och inåtgående TCP värd/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>
@ -55,11 +55,11 @@ Var god läs release kommentarerna och licens-information.</string>
<string name="download">Ladda ner</string>
<string name="upload">Ladda upp</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="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 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">När du har fått klienttunnlar, vänligen <b>kolla</b> våra vanliga frågor:</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>
<string name="first_start_irc">Peka din IRCclient till <b>localhost:6668</b> och säg hej till oss på:</string>
<string name="action_search">Sök</string>
@ -249,7 +249,7 @@ Var god läs release kommentarerna och licens-information.</string>
<string name="auto_start">Auto-start</string>
<string name="tunnel_summ_auto_start">Start tunneln när routern startar.</string>
<string name="tunnel_cat_ports">Lokala portar</string>
<string name="shared_client">Delade klienter</string>
<string name="shared_client">Delad klient</string>
<string name="tunnel_summ_shared_client">Använd samma Destination och tunnlar som andra klienter</string>
<string name="target_destination">Måldestination</string>
<string name="persistent_key">Beständig nyckel</string>
@ -265,14 +265,14 @@ Var god läs release kommentarerna och licens-information.</string>
<string name="irc">IRC</string>
<string name="enable_dcc">Aktivera DCC</string>
<string name="tunnel_summ_enable_dcc">Tillåt IRCklienter att använda DCC</string>
<string name="website_domain_name">Webbsidas domännamn</string>
<string name="website_domain_name">Webbplats domännamn</string>
<string name="target_host">Målvärd</string>
<string name="target_port">Målport</string>
<string name="use_ssl">Använd SSL</string>
<string name="tunnel_summ_use_ssl">Använd SSL för att ansluta till mål</string>
<string name="tunnel_parameters">Tunnelparametrar</string>
<string name="profile">Profil</string>
<string name="profile_bulk">Bulkanslutning (nedladdningar/webbsidor/BT)</string>
<string name="profile_bulk">Bulkanslutning (nedladdningar/webbplatser/BT)</string>
<string name="profile_interactive">Interaktiv förbindelse</string>
<string name="delay_connect">Fördröj anslutning</string>
<string name="tunnel_summ_delay_connect">Aktivera för request/response-anslutningar</string>
@ -348,10 +348,10 @@ Var god läs release kommentarerna och licens-information.</string>
</plurals>
<string name="log_entry">Loggpost</string>
<string name="copy_logs">Kopiera loggar</string>
<string name="i2p_android_error_logs">I2P Android Error loggar</string>
<string name="i2p_android_error_logs">I2P Android felloggar</string>
<string name="i2p_android_logs">I2P Androidloggar</string>
<string name="error_logs_copied_to_clipboard">Error loggar kopierade till clipboard</string>
<string name="logs_copied_to_clipboard">Loggar kopierade till clipboard</string>
<string name="error_logs_copied_to_clipboard">Error loggar kopierade till urklipp</string>
<string name="logs_copied_to_clipboard">Loggar kopierade till urklipp</string>
<string name="label_browser_configuration">Browser konfiguration</string>
<string name="unset">Återställ</string>
</resources>

View File

@ -3,7 +3,7 @@
<string name="app_name">I2P</string>
<string name="desc_i2p_logo">I2P logosu</string>
<string name="choose_language">Dil seçin</string>
<string name="welcome_new_install">I2P dünyasına hoş geldiniz. Bu uygulama henüz ALPHA geliştirme düzeyindedir ve yaygın olarak herkese açılmamıştır. Lütfen notları ve lisans bilgilerini okuyun.</string>
<string name="welcome_new_install">I2P dünyasına hoş geldiniz. Bu uygulama henüz ALPHA geliştirme düzeyindedir ve güçlü bir isimsiz kalma özelliği sağlamamaktadır. Lütfen yayım notlarını ve lisans bilgilerini okuyun.</string>
<string name="welcome_new_version">Yeni sürüm yüklendi. Lütfen yayım notlarını okuyun. Sürüm:</string>
<string name="label_tunnels">Tüneller</string>
<string name="label_status">Durum</string>
@ -59,7 +59,7 @@
<string name="first_start_welcome"><b>I2P Yazılımına Hoşgeldiniz</b> Lütfen I2P yüklenip eşleri bulana kadar <b>sabırlı olun</b>.</string>
<string name="first_start_read">Beklerken, lütfen sürüm notları ve hoş geldiniz sayfalarını okuyun.</string>
<string name="first_start_faq">İstemci tünelleri bulunduğunda, lütfen Sık Sorulan Sorular bölümüne <b>bakın</b>:</string>
<string name="first_start_faq_nonanon">Ya da tünelleri beklemek istemiyorsanız anonim olmayan şu bağlantıyı kullanın:</string>
<string name="first_start_faq_nonanon">Ya da tünelleri beklemek istemiyorsanız isimsiz olmayan şu bağlantıyı kullanın:</string>
<string name="first_start_irc">IRC istemcinizi <b>localhost:6668</b> adresine yönlendirip şuradan bize merhaba deyin:</string>
<string name="action_search">Arama</string>
<string name="action_add">Ekle</string>
@ -213,7 +213,7 @@
<string name="i2ptunnel_wizard_k_client_server">İstemci ya da Sunucu</string>
<string name="i2ptunnel_wizard_v_client">İstemci tüneli</string>
<string name="i2ptunnel_wizard_v_server">Sunucu tüneli</string>
<string name="i2ptunnel_wizard_k_type">Tünel tipi</string>
<string name="i2ptunnel_wizard_k_type">Tünel türü</string>
<string name="i2ptunnel_wizard_k_name">Ad</string>
<string name="i2ptunnel_wizard_k_desc">ıklama</string>
<string name="i2ptunnel_wizard_k_dest">Hedef</string>
@ -231,7 +231,7 @@
<string name="i2ptunnel_wizard_desc_name">Tünel listesinde görüntülenecek tünel adı.</string>
<string name="i2ptunnel_wizard_desc_desc">İsteğe bağlı olarak yazılabilecek tünel açıklaması.</string>
<string name="i2ptunnel_wizard_desc_dest">Bu istemci tünelinin bağlanacağı hizmetin I2P hedefini yazın. Tam Base 64 hedef anahtarı ya da adres defterinizden bir sunucu adı olabilir.</string>
<string name="i2ptunnel_wizard_desc_outproxies">Bu tünel tipi için bildiğiniz çıkış sunucuları varsa (HTTP ya da SOCKS) buraya virgül ile ayırarak yazın. </string>
<string name="i2ptunnel_wizard_desc_outproxies">Bu tünel türü için bildiğiniz çıkış sunucuları varsa (HTTP ya da SOCKS) buraya virgül ile ayırarak yazın. </string>
<string name="i2ptunnel_wizard_desc_target_host">Çalıştırdığınız hizmetin IP adresi. Genellikle aynı bilgisayarda olduğundan otomatik olarak 127.0.0.1 yazılır.</string>
<string name="i2ptunnel_wizard_desc_target_port">Hizmetin bağlantıları kabul edeceği kapı numarası.</string>
<string name="i2ptunnel_wizard_desc_reachable_on">Bu seçenek bu tünele erişebilecek bilgisayar ve akıllı telefonları sınırlar.</string>
@ -332,7 +332,7 @@
<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="signature_type">İmza türü</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>

View File

@ -3,13 +3,12 @@ buildscript {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:1.5.0'
classpath 'com.android.tools.build:gradle:2.2.3'
classpath files('gradle/libs/gradle-witness.jar')
}
}
allprojects {
version = VERSION_NAME
group = GROUP
repositories {

View File

@ -1,10 +1,9 @@
VERSION_NAME=0.8
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
@ -12,6 +11,7 @@ POM_DEVELOPER_ID=str4d
POM_DEVELOPER_NAME=str4d
POM_DEVELOPER_EMAIL=str4d@i2pmail.org
I2P_VERSION=0.9.29
ANDROID_BUILD_TARGET_SDK_VERSION=22
ANDROID_BUILD_TOOLS_VERSION=23.0.1
ANDROID_BUILD_SDK_VERSION=23
ANDROID_BUILD_TOOLS_VERSION=25.0.0
ANDROID_BUILD_SDK_VERSION=25

View File

@ -18,7 +18,7 @@ apply plugin: 'maven'
apply plugin: 'signing'
def isReleaseBuild() {
return VERSION_NAME.contains("SNAPSHOT") == false
return project.version.contains("SNAPSHOT") == false
}
def getReleaseRepositoryUrl() {
@ -47,7 +47,7 @@ afterEvaluate { project ->
pom.groupId = GROUP
pom.artifactId = POM_ARTIFACT_ID
pom.version = VERSION_NAME
pom.version = project.version
repository(url: getReleaseRepositoryUrl()) {
authentication(userName: getRepositoryUsername(), password: getRepositoryPassword())
@ -95,7 +95,7 @@ afterEvaluate { project ->
mavenDeployer {
pom.groupId = GROUP
pom.artifactId = POM_ARTIFACT_ID
pom.version = VERSION_NAME
pom.version = project.version
repository url: "file://${System.properties['user.home']}/.m2/repository"
}

View File

@ -1,6 +1,6 @@
#Mon Mar 28 23:30:12 NZDT 2016
#Sun Nov 06 10:33:19 CST 2016
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-2.12-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip

View File

@ -1,6 +1,8 @@
apply plugin: 'com.android.library'
apply plugin: 'witness'
version = "$I2P_VERSION"
android {
compileSdkVersion Integer.parseInt(project.ANDROID_BUILD_SDK_VERSION as String)
buildToolsVersion project.ANDROID_BUILD_TOOLS_VERSION as String
@ -24,24 +26,9 @@ android {
}
}
task buildClient(type: Exec) {
outputs.dir('libs')
commandLine 'ant', 'buildclient'
}
dependencies {
compile files('libs/i2p.jar') {
builtBy tasks.buildClient
}
compile files('libs/mstreaming.jar') {
builtBy tasks.buildClient
}
compile files('libs/streaming.jar') {
builtBy tasks.buildClient
}
// No direct dependencies on the helper lib, but this ensures consistent library behavior
compile project(':lib:helper')
compile 'com.android.support:support-v4:23.2.1'
compile "net.i2p:i2p:$I2P_VERSION"
compile "net.i2p.client:streaming:$I2P_VERSION"
testCompile 'junit:junit:4.12'
testCompile 'org.mockito:mockito-core:1.9.5'
@ -49,14 +36,10 @@ dependencies {
dependencyVerification {
verify = [
'com.android.support:support-v4:81ce890f26d35c75ad17d0f998a7e3230330c3b41e0b629566bc744bee89e448',
'net.i2p:i2p:43f07888e5919a097a1b84efd32c220cd285485d3d39efaa343df90c025283ce',
'net.i2p.client:mstreaming:4bb1177ce2a20769c24f7b7cd1a63c654e7e88cab3ffa1a1e1411f4e9a30ebeb',
'net.i2p.client:streaming:d94c185e22360f994e9d6da22b3d6d5e40483b83312e47e853072b996a8a5447',
]
}
clean << {
exec {
commandLine 'ant', 'clean'
}
}
apply from: "${project.rootDir}/gradle/maven-push.gradle"

View File

@ -1,50 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project name="routerjars">
<property file="local.properties" />
<property name="jar.libs.dir" value="libs" />
<!-- override with i2psrc=path/to/source in local.properties -->
<property name="i2psrc" value="../../i2p.i2p" />
<property name="i2pbase" location="${i2psrc}" />
<available file="${i2pbase}" property="i2p.present" />
<fail message="I2P source directory ${i2pbase} was not found. Install it there or set i2psrc=/path/to/source in local.properties" >
<condition>
<not>
<isset property="i2p.present" />
</not>
</condition>
</fail>
<echo message="Using I2P source at ${i2pbase}" />
<property name="i2plib" location="${i2pbase}/build" />
<available property="have.streaming" file="${i2plib}/streaming.jar" />
<!-- builds core, ministreaming and streaming -->
<target name="buildStreaming" unless="have.streaming">
<ant dir="${i2pbase}" inheritall="false" useNativeBasedir="true" target="buildStreaming" />
</target>
<target name="buildclient" depends="buildStreaming">
<mkdir dir="${jar.libs.dir}" />
<!-- core -->
<!-- lots of unneeded stuff could be deleted here -->
<jar destfile="${jar.libs.dir}/i2p.jar" >
<zipfileset src="${i2plib}/i2p.jar" >
<exclude name="net/i2p/client/DomainSocketFactory.class" />
<exclude name="net/i2p/util/LogWriter.class" />
</zipfileset>
</jar>
<!-- streaming -->
<copy file="${i2plib}/mstreaming.jar" todir="${jar.libs.dir}" />
<copy file="${i2plib}/streaming.jar" todir="${jar.libs.dir}" />
</target>
<target name="clean">
<ant dir="${i2pbase}" target="distclean" />
<delete dir="${jar.libs.dir}" />
</target>
</project>

View File

@ -3,6 +3,7 @@ package net.i2p.client;
import android.net.LocalSocket;
import net.i2p.I2PAppContext;
import net.i2p.util.Log;
import java.io.IOException;
import java.net.ServerSocket;
@ -17,10 +18,15 @@ import java.net.Socket;
public class DomainSocketFactory {
public static String I2CP_SOCKET_ADDRESS = "net.i2p.android.client.i2cp";
public final Log _log;
public DomainSocketFactory(I2PAppContext context) {
_log = context.logManager().getLog(getClass());
}
public Socket createSocket(String name) throws IOException {
if (_log.shouldDebug())
_log.debug("Connecting to domain socket " + name);
return new DomainSocket(name);
}
@ -29,6 +35,8 @@ public class DomainSocketFactory {
}
public ServerSocket createServerSocket(String name) throws IOException {
if (_log.shouldDebug())
_log.debug("Listening on domain socket " + name);
return new DomainServerSocket(name, this);
}
}

View File

@ -10,8 +10,8 @@ package net.i2p.util;
*
* @author zzz
*/
class LogWriter extends LogWriterBase {
public LogWriter(LogManager manager) {
class AndroidLogWriter extends LogWriter {
public AndroidLogWriter(LogManager manager) {
super(manager);
}

View File

@ -1,6 +1,8 @@
apply plugin: 'com.android.library'
apply plugin: 'witness'
version = '0.9.3'
android {
compileSdkVersion Integer.parseInt(project.ANDROID_BUILD_SDK_VERSION as String)
buildToolsVersion project.ANDROID_BUILD_TOOLS_VERSION as String
@ -25,7 +27,7 @@ android {
}
dependencies {
compile 'com.android.support:support-v4:23.2.1'
compile 'com.android.support:support-v4:25.3.0'
testCompile 'junit:junit:4.12'
testCompile 'org.mockito:mockito-core:1.9.5'
@ -33,7 +35,7 @@ dependencies {
dependencyVerification {
verify = [
'com.android.support:support-v4:81ce890f26d35c75ad17d0f998a7e3230330c3b41e0b629566bc744bee89e448',
'com.android.support:support-v4:9142d2f386eeb4483050d7f13fcaeddcd01011650f4216208376ff7d4d7a6bf1',
]
}

View File

@ -24,25 +24,36 @@ import net.i2p.android.router.service.State;
public class I2PAndroidHelper {
public static final String URI_I2P_ANDROID = "net.i2p.android";
public static final String URI_I2P_ANDROID_DONATE = "net.i2p.android.donate";
public static final String URI_I2P_ANDROID_LEGACY = "net.i2p.android.legacy";
public static final String URI_I2P_ANDROID_LEGACY = "net.i2p.android.router";
public static final String URI_I2P_ANDROID_DEBUG = "net.i2p.android.debug";
public static final int REQUEST_START_I2P = 9857;
private static final String ROUTER_SERVICE_CLASS = "net.i2p.android.router.service.RouterService";
private static final String LOG_TAG = "I2PClientLib";
private static final String LOG_TAG = "I2PHelperLib";
public interface Callback {
void onI2PAndroidBound();
}
private final Context mContext;
private final boolean mUseDebug;
private boolean mTriedBindState;
private IRouterState mStateService;
private Callback mCallback;
public I2PAndroidHelper(Context context) {
mContext = context;
mUseDebug = false;
}
/**
* @param useDebug Enable usage against debug builds of I2P Android.
*/
public I2PAndroidHelper(Context context, boolean useDebug) {
mContext = context;
mUseDebug = useDebug;
}
/**
@ -125,6 +136,10 @@ public class I2PAndroidHelper {
intent.setClassName(URI_I2P_ANDROID_LEGACY, ROUTER_SERVICE_CLASS);
else
intent = null;
if (mUseDebug && isAppInstalled(URI_I2P_ANDROID_DEBUG)) {
Log.w(LOG_TAG, "Using debug build of I2P Android");
intent.setClassName(URI_I2P_ANDROID_DEBUG, ROUTER_SERVICE_CLASS);
}
return intent;
}
@ -162,7 +177,8 @@ public class I2PAndroidHelper {
* @return true if I2P Android is installed, false otherwise.
*/
public boolean isI2PAndroidInstalled() {
return isAppInstalled(URI_I2P_ANDROID) ||
return (mUseDebug && isAppInstalled(URI_I2P_ANDROID_DEBUG)) ||
isAppInstalled(URI_I2P_ANDROID) ||
isAppInstalled(URI_I2P_ANDROID_DONATE) ||
isAppInstalled(URI_I2P_ANDROID_LEGACY);
}

View File

@ -0,0 +1,6 @@
<?xml version='1.0' encoding='UTF-8'?>
<resources>
<string name="yes">بله</string>
<string name="no">خیر</string>
<string name="install_i2p_android">نصب I2P اندروید؟</string>
</resources>

View File

@ -0,0 +1,9 @@
<?xml version='1.0' encoding='UTF-8'?>
<resources>
<string name="yes">Si</string>
<string name="no">Non</string>
<string name="install_i2p_android">Instalar I2P Android?</string>
<string name="you_must_have_i2p_android">É preciso que teñas I2P Android instalado e funcionando. Queres instalalo?</string>
<string name="start_i2p_android">Lanzar I2P Android?</string>
<string name="would_you_like_to_start_i2p_android">Semella que I2P Android non está a correr. Desexar lanzalo?</string>
</resources>

View File

@ -0,0 +1,9 @@
<?xml version='1.0' encoding='UTF-8'?>
<resources>
<string name="yes">Si</string>
<string name="no">No</string>
<string name="install_i2p_android">Installare I2P Android?</string>
<string name="you_must_have_i2p_android">È necessario aver installato ed in esecuzione I2P Android. Vuoi installarlo?</string>
<string name="start_i2p_android">Avviare I2P Android?</string>
<string name="would_you_like_to_start_i2p_android">I2P Android non sembra essere in esecuzione. Vuoi lanciarlo?</string>
</resources>

View File

@ -0,0 +1,9 @@
<?xml version='1.0' encoding='UTF-8'?>
<resources>
<string name="yes">Да</string>
<string name="no">Не</string>
<string name="install_i2p_android">Инсталирати И2П за Андроид?</string>
<string name="you_must_have_i2p_android">Морате имати И2П за Андроид инсталиран и покренут. Хоћете да га инсталирате?</string>
<string name="start_i2p_android">Покренути И2П Андроид?</string>
<string name="would_you_like_to_start_i2p_android">Чини се да И2П за Андроид не ради. Желите да га покренете?</string>
</resources>

View File

@ -8,7 +8,6 @@ task buildRouter(type: Exec) {
// TODO an empty routerjars.jar is added to the classpath
artifacts {
'default' file: file('libs/router.jar'), builtBy: buildRouter
'default' file: file('libs/newsxml.jar'), builtBy: buildRouter
'default' file: file('libs/i2ptunnel.jar'), builtBy: buildRouter
'default' file: file('libs/i2ptunnel-ui.jar'), builtBy: buildRouter

View File

@ -17,16 +17,11 @@
<echo message="Using I2P source at ${i2pbase}" />
<property name="i2plib" location="${i2pbase}/build" />
<available property="have.router" file="${i2plib}/router.jar" />
<available property="have.bob" file="${i2plib}/BOB.jar" />
<available property="have.newsxml" file="${i2pbase}/apps/routerconsole/java/build/newsxml.jar" />
<available property="have.i2ptunnel" file="${i2plib}/i2ptunnel-ui.jar" />
<available property="have.addressbook" file="${i2plib}/addressbook.jar" />
<target name="buildRouter" unless="have.router">
<ant dir="${i2pbase}" inheritall="false" useNativeBasedir="true" target="buildRouter" />
</target>
<target name="buildNewsXMLJar" unless="have.newsxml">
<ant dir="${i2pbase}" inheritall="false" useNativeBasedir="true" target="buildNewsXMLJar" />
</target>
@ -41,12 +36,9 @@
<ant dir="${i2pbase}" inheritall="false" useNativeBasedir="true" target="buildBOB" />
</target>
<target name="buildrouter" depends="buildRouter, buildNewsXMLJar, buildI2PTunnelJar, buildAddressbook, buildBOB">
<target name="buildrouter" depends="buildNewsXMLJar, buildI2PTunnelJar, buildAddressbook, buildBOB">
<mkdir dir="${jar.libs.dir}" />
<!-- router -->
<copy file="${i2plib}/router.jar" todir="${jar.libs.dir}" />
<!-- newsxml -->
<copy file="${i2pbase}/apps/routerconsole/java/build/newsxml.jar" todir="${jar.libs.dir}" />