Compare commits
27 Commits
android-0.
...
android-cl
Author | SHA1 | Date | |
---|---|---|---|
39d5de7eb4 | |||
0fb1ef881c | |||
8230769191 | |||
19036a71cb | |||
40f3fbf9c5 | |||
1127fb0195 | |||
df81efe6bc | |||
784ca3691b | |||
0fa4241ce6 | |||
5063d276de | |||
81d0e43f0f | |||
1637a9007d | |||
ce0f01cf46 | |||
dd579d4f5b | |||
5703d8cc6d | |||
b8768ae9fe | |||
54dc2c88bf | |||
dba01b8c18 | |||
b7b3eb7019 | |||
430e2ab826 | |||
87383a2ec8 | |||
f63bfe1dea | |||
ff2021c0aa | |||
51f7e07080 | |||
7797e067a5 | |||
cf09a21f1e | |||
914294927d |
10
CHANGELOG
10
CHANGELOG
@ -1,6 +1,14 @@
|
||||
0.9.26
|
||||
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
|
||||
|
25
TODO
25
TODO
@ -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
|
||||
|
@ -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 4745233
|
||||
versionName '0.9.26'
|
||||
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.4.0'
|
||||
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.8'
|
||||
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.6'
|
||||
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: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.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:c409b471618b675e3d2a8588f883c5fe8f3369d00df61ec84b29f29c648370ae',
|
||||
'org.sufficientlysecure:html-textview:ed740adf05cae2373999c7a3047c803183d9807b2cf66162902090d7c112a832',
|
||||
]
|
||||
}
|
||||
|
||||
|
9
app/proguard-rules.pro
vendored
9
app/proguard-rules.pro
vendored
@ -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 **
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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) {
|
||||
}
|
||||
});
|
||||
|
@ -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();
|
||||
}
|
||||
|
@ -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"
|
||||
|
@ -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
|
@ -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>
|
||||
|
@ -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>
|
||||
|
@ -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">Açı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>
|
||||
|
@ -3,13 +3,12 @@ buildscript {
|
||||
jcenter()
|
||||
}
|
||||
dependencies {
|
||||
classpath 'com.android.tools.build:gradle:2.1.0'
|
||||
classpath 'com.android.tools.build:gradle:2.2.3'
|
||||
classpath files('gradle/libs/gradle-witness.jar')
|
||||
}
|
||||
}
|
||||
|
||||
allprojects {
|
||||
version = VERSION_NAME
|
||||
group = GROUP
|
||||
|
||||
repositories {
|
||||
|
@ -1,4 +1,3 @@
|
||||
VERSION_NAME=0.9
|
||||
GROUP=net.i2p.android
|
||||
|
||||
POM_URL=https://github.com/i2p/i2p.android.base
|
||||
@ -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
|
||||
|
@ -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"
|
||||
}
|
||||
|
4
gradle/wrapper/gradle-wrapper.properties
vendored
4
gradle/wrapper/gradle-wrapper.properties
vendored
@ -1,6 +1,6 @@
|
||||
#Mon May 02 16:55:47 NZST 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-all.zip
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
|
||||
|
@ -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
|
||||
@ -25,11 +27,8 @@ android {
|
||||
}
|
||||
|
||||
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'
|
||||
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'
|
||||
@ -37,10 +36,9 @@ dependencies {
|
||||
|
||||
dependencyVerification {
|
||||
verify = [
|
||||
'com.android.support:support-v4:a0d002465c0f611eedaaef2b2530707d2e9fb3a5c7ed66f53c556a12f714f43a',
|
||||
'net.i2p:i2p:5e0f5efa8849e2abe72efaf1530bdf4a090717d49acfdfbe92911a14d4b4e511',
|
||||
'net.i2p.client:mstreaming:1f343a640f79707f6652bbf344f65b42215ae3f7a221a3ee8ddd70ff59e812ae',
|
||||
'net.i2p.client:streaming:5add7390de089f3c3c4f4005f0daa83014418416e890ed6c475e15cef51ba3c7',
|
||||
'net.i2p:i2p:43f07888e5919a097a1b84efd32c220cd285485d3d39efaa343df90c025283ce',
|
||||
'net.i2p.client:mstreaming:4bb1177ce2a20769c24f7b7cd1a63c654e7e88cab3ffa1a1e1411f4e9a30ebeb',
|
||||
'net.i2p.client:streaming:d94c185e22360f994e9d6da22b3d6d5e40483b83312e47e853072b996a8a5447',
|
||||
]
|
||||
}
|
||||
|
||||
|
@ -73,9 +73,7 @@ class DomainServerSocket extends ServerSocket {
|
||||
*/
|
||||
@Override
|
||||
public void close() throws IOException {
|
||||
mDomainSocketFactory._log.debug("Closing DomainServerSocket");
|
||||
mLocalServerSocket.close();
|
||||
mDomainSocketFactory._log.debug("DomainServerSocket closed");
|
||||
mClosed = true;
|
||||
}
|
||||
|
||||
|
@ -1,6 +1,8 @@
|
||||
apply plugin: 'com.android.library'
|
||||
apply plugin: 'witness'
|
||||
|
||||
version = '0.9.2'
|
||||
|
||||
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.4.0'
|
||||
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:a0d002465c0f611eedaaef2b2530707d2e9fb3a5c7ed66f53c556a12f714f43a',
|
||||
'com.android.support:support-v4:9142d2f386eeb4483050d7f13fcaeddcd01011650f4216208376ff7d4d7a6bf1',
|
||||
]
|
||||
}
|
||||
|
||||
|
@ -38,12 +38,22 @@ public class I2PAndroidHelper {
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -124,11 +134,12 @@ public class I2PAndroidHelper {
|
||||
intent.setClassName(URI_I2P_ANDROID_DONATE, ROUTER_SERVICE_CLASS);
|
||||
else if (isAppInstalled(URI_I2P_ANDROID_LEGACY))
|
||||
intent.setClassName(URI_I2P_ANDROID_LEGACY, ROUTER_SERVICE_CLASS);
|
||||
else if (isAppInstalled(URI_I2P_ANDROID_DEBUG)) {
|
||||
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);
|
||||
} else
|
||||
intent = null;
|
||||
}
|
||||
return intent;
|
||||
}
|
||||
|
||||
@ -166,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);
|
||||
}
|
||||
|
9
lib/helper/src/main/res/values-gl/strings.xml
Normal file
9
lib/helper/src/main/res/values-gl/strings.xml
Normal 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>
|
@ -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
|
||||
|
@ -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}" />
|
||||
|
||||
|
Reference in New Issue
Block a user