Compare commits
47 Commits
android-0.
...
android-0.
Author | SHA1 | Date | |
---|---|---|---|
3863c0e183 | |||
69ea3d8bde | |||
7cafe6da48 | |||
9464b46ad0 | |||
c230a5a101 | |||
3d37f2ae07 | |||
f88aafe292 | |||
aa2dab1d3c | |||
8e85eaa2f0 | |||
6a1848caf6 | |||
aa36b4cb14 | |||
78d4b12142 | |||
c2f3a80dec | |||
a679784aab | |||
835667437b | |||
f016edec7a | |||
1e3b517219 | |||
f4e3b15fcf | |||
fc4154be67 | |||
5bf0b18767 | |||
eb5ef3129b | |||
6e87d248c0 | |||
c9b0aff142 | |||
5acac0dbc4 | |||
0b42a7ee64 | |||
c3a798ee3d | |||
e682369311 | |||
14b953f145 | |||
036c807d6b | |||
a41fca95df | |||
26fdf40f25 | |||
070af6529c | |||
7ba0892351 | |||
5b9cdb9f9f | |||
b79d39a74a | |||
5fc5aed0c9 | |||
aec25ab374 | |||
9d5c495936 | |||
4dc2bb6b01 | |||
373e013911 | |||
83bb7096a7 | |||
cc1c4690a2 | |||
69ad581235 | |||
4be227631d | |||
3f3f1f8e3d | |||
22290da1a4 | |||
a523e1cb4a |
17
CHANGELOG
17
CHANGELOG
@ -1,3 +1,20 @@
|
||||
0.9.48 2020-12-02
|
||||
* This release updates the underlying I2P libraries to I2P version 0.9.48
|
||||
* Updates to browser configuration documentation
|
||||
|
||||
0.9.47-1 2020-10-29
|
||||
* This release fixes a number of bugs arising from a misconfigured bootclasspath
|
||||
* Fix a battery-management issue arising on some phones
|
||||
|
||||
0.9.47 / 2020-08-26
|
||||
* Notification bug-fixes on platforms >8.0
|
||||
|
||||
0.9.46 / 2020-06-03
|
||||
* catch ActivityNotFound exception in MainActivity
|
||||
|
||||
0.9.45 / 2020-03-07
|
||||
* No significant changes
|
||||
|
||||
0.9.44 / 2019-12-03
|
||||
* Updated translations
|
||||
* Bumped target sdk version to 28, enforced by google
|
||||
|
@ -1,59 +1,106 @@
|
||||
# Release Process
|
||||
|
||||
Note to all future maintainers: We have 4 channels that need to be updated in order to have a successful
|
||||
Android release. Many of these channels are updated at different rates, and at times you must wait on a
|
||||
third-party service to complete it's tasks before you may continue. When completing an Android release,
|
||||
keep in mind that you must update 1) Maven 2) Google Play 3) f-droid.i2p.io and 4) F-Droid main
|
||||
repository.
|
||||
|
||||
At the time of this revision, 2020/09/13, the main Android maintainer is idk. idk updates Maven, Google
|
||||
Play, and f-droid.i2p.io, and nextl00p handles working with the F-Droid project to provide an I2P release
|
||||
in their main repository.
|
||||
|
||||
## Prerequirements
|
||||
|
||||
1. Ensure you got the deprecated maven ant tasks. ( https://maven.apache.org/ant-tasks/download.cgi )
|
||||
2. It should exist at `~/.ant/lib/maven-ant-tasks-2.1.3.jar`
|
||||
3. Ensure you got hamcrest-integration, hamcrest-library, hamcrest-core in the hamcrest.home directory.
|
||||
4. Ensure junit 4.12 at least in junit.home, ensure the jar file is named `junit4.jar`.
|
||||
5. Ensure to have updated the changelog with the changes done.
|
||||
1. Ensure you have the deprecated maven ant tasks. ( https://maven.apache.org/ant-tasks/download.cgi )
|
||||
2. It should exist at `~/.ant/lib/maven-ant-tasks-2.1.3.jar`
|
||||
3. Ensure you have hamcrest-integration, hamcrest-library, hamcrest-core in the hamcrest.home directory.
|
||||
4. Ensure junit 4.12 at least in junit.home, ensure the jar file is named `junit4.jar`.
|
||||
5. Ensure you have the Mockito framework and accompanying documentation in your $JAVA_HOME
|
||||
6. Ensure to have updated the changelog with the changes done.
|
||||
7. Ensure that you are configured to build i2p.i2p with Java 8. On Debian it is easiest to set with
|
||||
`update-java-alternatives --set java-8-openjdk-amd64` and picking Java 8. **TODO:** add instructions for non-Debian-based
|
||||
systems.
|
||||
8. Ensure that you have a Java 1.7 bootclasspath available. (See **Maven Central** step 2A.)
|
||||
|
||||
## Maven Central
|
||||
|
||||
1. Check out a clean copy of i2p.i2p at the correct release version. (Make a clean checkout)
|
||||
2. Build the maven packages via `ant mavenCentral` where you end up with mavencentral-*.jar files in the current directory.
|
||||
3. Login to http://oss.sonatype.org for uploading the mavencentral-*.jar bundles.
|
||||
4. In nexus, choose "Staging Upload" and upload all of the bundles with upload mode set to "Artifact Bundle"
|
||||
5. Under "Staging Repositories" ensure all where uploaded correctly, select them all and press "Release" in the toolbar.
|
||||
## Get all the dependencies ready
|
||||
|
||||
## Android Common Build
|
||||
### Maven Central
|
||||
|
||||
1. Edit `routerjars/local.properties` to use the clean i2p.i2p copy.
|
||||
2. Pull the latest translations with `tx pull -a` and commit them. (If you don't have the `tx` command, do `pip install transifex-client` )
|
||||
2a. If there are any new translations, `mtn add` them, and add them to `app/src/main/res/values/arrays.xml` (two places, alphabetical order please)
|
||||
3. Ensure that `signing.properties` contains the details of the release key.
|
||||
4. Edit `gradle.properties` to bump the I2P version.
|
||||
5. Edit `app/build.gradle` to bump the Android version number.
|
||||
6. Edit `CHANGELOG` to add the release and date.
|
||||
7. If the helper has changed since the last release, edit
|
||||
`lib/helper/gradle.properties` to bump the version.
|
||||
8. `./gradlew clean assembleRelease`
|
||||
1. Check out a clean copy of i2p.i2p at the correct release version. (Make a clean checkout)
|
||||
2. Build the maven packages via `ant mavenCentral` where you end up with mavencentral-*.jar files in the
|
||||
current directory.
|
||||
2. **A)** I2P for Android requires a Java 1.7 bootclasspath, but the servlet jar requires Java 8. So, to do the builds:
|
||||
- First set `javac.compilerargs=-bootclasspath /path/to/java/7/rt.jar:/path/to/java/7/jce.jar` in override.properties
|
||||
- Build with `ant mavenCentral`
|
||||
3. Login to http://oss.sonatype.org for uploading the mavencentral-*.jar bundles.
|
||||
4. In nexus, choose "Staging Upload" and upload all of the files with upload mode set to "Artifacts with POM".
|
||||
When uploading the files to nexus, you *must* upload the pom.xml files, and all of their artifacts. For each
|
||||
component, you will need to upload a *.jar, a *.jar.asc, a *sources.jar, a *sources.jar.asc, a javadoc.jar,
|
||||
and a javadoc.jar.asc, and a pom.xml and a pom.xml.asc from the pkg-mavencentral directory during the "Upload
|
||||
Artifacts with POM" operation. You will need to do this once for each component you upload to Nexus.
|
||||
5. Under "Staging Repositories" ensure all where uploaded correctly, select them all and press "Release"
|
||||
in the toolbar.
|
||||
|
||||
#### Example override.properties:
|
||||
|
||||
javac.version=1.7
|
||||
javac.target=1.7
|
||||
javac.source=1.8
|
||||
javac.compilerargs=-bootclasspath /home/user/StudioProjects/java7bootclasspath/rt.jar:/home/user/StudioProjects/java7bootclasspath/jce.jar
|
||||
javac.compilerargs7=-bootclasspath /home/user/StudioProjects/java7bootclasspath/rt.jar:/home/user/StudioProjects/java7bootclasspath/jce.jar
|
||||
build.built-by=name
|
||||
|
||||
### Android Common Build
|
||||
|
||||
1. Edit `routerjars/local.properties` to use the clean i2p.i2p copy.
|
||||
2. Pull the latest translations with `tx pull -a` and commit them. (If you don't have the `tx` command,
|
||||
do `pip install transifex-client` )
|
||||
- If there are any new translations, `mtn add` them, and add them to `app/src/main/res/values/arrays.xml`
|
||||
(two places, alphabetical order please)
|
||||
3. Ensure that `signing.properties` contains the details of the release key.
|
||||
4. Edit `gradle.properties` to bump the I2P version.
|
||||
5. Edit `app/build.gradle` to bump the Android version number.
|
||||
6. Edit `CHANGELOG` to add the release and date.
|
||||
7. If the helper has changed since the last release, edit
|
||||
`lib/helper/gradle.properties` to bump the version.
|
||||
8. `./gradlew clean assembleRelease`
|
||||
|
||||
### Libraries
|
||||
|
||||
1. `./gradlew :lib:client:uploadArchives`
|
||||
2. If the helper version was changed and should be released: `./gradlew :lib:helper:uploadArchives`
|
||||
3. Check on Sonatype that everything worked, and close/release.
|
||||
1. `./gradlew :lib:client:uploadArchives`
|
||||
2. If the helper version was changed and should be released: `./gradlew :lib:helper:uploadArchives`
|
||||
3. Check on Sonatype that everything worked, and close/release.
|
||||
|
||||
## F-Droid Guide
|
||||
## Release Packages
|
||||
|
||||
1. Ensure you have the release keys, the keyfile must be placed at `~/.local/share/fdroidserver/keystore.jks`
|
||||
2. If it's the first time, or you have reinstalled anything, ensure `path/to/fdroid/config.py` has correct information.
|
||||
3. Assuming you already have ran `./gradlew clean assembleRelease` from a earlier step, continue.
|
||||
4. `cp app/build/outputs/apk/free/release/app-free-release.apk path/to/fdroid/repo/I2P-VERSION.apk`
|
||||
5. Update `path/to/fdroid/metadata/net.i2p.android.txt` (The versions at the bottom of the file)
|
||||
6. Run `fdroid update` from inside the fdroid path (install fdroid command via `pip install fdroidserver`)
|
||||
7. Zip/tar the local fdroid repo and archive. `rm fdroid.tgz && tar czf fdroid.tgz archive/ repo/` from the fdroid directory.
|
||||
8. Push to download server and put in place. (via SSH for example, `scp fdroid.tgz download.i2p2.de:~/`)
|
||||
9. On the server run `bin-fd/update-fdroid` and `sudo bin-fd/update-app i2p 0.9.40` (This ensures we use the exact same apk file for the download page as in fdroid and gplay)
|
||||
10. Check F-Droid repo works, and app works.
|
||||
### F-Droid Guide
|
||||
|
||||
## Google Play and finishing up
|
||||
This guide is for f-droid.i2p.io, not for F-Droid's main repository. The repository keystore **and** the
|
||||
config.py used to generate the repository are required to complete this process successfully.
|
||||
|
||||
1. Verify which files that are changed via `mtn ls cha`. It shouldn't be much more than those bellow this line and possible translations (`mtn ls unk`).
|
||||
2. Commit your release changes, `mtn ci gradle.properties lib/helper/gradle.properties app/build.gradle`
|
||||
3. Push free and donate builds to Google Play via https://play.google.com/apps/publish/
|
||||
4. Tag the new release. Example `mtn tag h: android-0.9.36`
|
||||
5. Push the monotone changes
|
||||
6. Update download page (version and hash, including F-Droid)
|
||||
1. Ensure you have the release keys, the keyfile must be placed at `~/.local/share/fdroidserver/keystore.jks`
|
||||
2. If it's the first time, or you have reinstalled anything, ensure `path/to/fdroid/config.py` has correct
|
||||
information.
|
||||
3. Assuming you already have ran `./gradlew clean assembleRelease` from a earlier step, continue.
|
||||
4. `cp app/build/outputs/apk/free/release/app-free-release.apk path/to/fdroid/repo/I2P-VERSION.apk`
|
||||
5. Update `path/to/fdroid/metadata/net.i2p.android.txt` (The versions at the bottom of the file)
|
||||
6. Run `fdroid update` from inside the fdroid path (install fdroid command via `pip install fdroidserver`)
|
||||
7. Zip/tar the local fdroid repo and archive. `rm fdroid.tgz && tar czf fdroid.tgz archive/ repo/` from the
|
||||
fdroid directory.
|
||||
8. Push to download server and put in place. (via SSH for example, `scp fdroid.tgz download.i2p2.de:~/`)
|
||||
9. On the server run `bin-fd/update-fdroid` and `sudo bin-fd/update-app i2p 0.9.40` (This ensures we use the
|
||||
exact same apk file for the download page as in fdroid and gplay)
|
||||
10. Check F-Droid repo works, and app works.
|
||||
|
||||
### Google Play and finishing up
|
||||
|
||||
1. Verify which files that are changed via `mtn ls cha`. It shouldn't be much more than those bellow this
|
||||
line and possible translations (`mtn ls unk`).
|
||||
2. Commit your release changes, `mtn ci gradle.properties lib/helper/gradle.properties app/build.gradle`
|
||||
3. Push free and donate builds to Google Play via https://play.google.com/apps/publish/
|
||||
4. Tag the new release. Example `mtn tag h: android-0.9.36`
|
||||
5. Push the monotone changes. Make sure that they are there at the next git sync.
|
||||
6. Update download page (version and hash, including F-Droid)
|
||||
|
||||
|
@ -7,7 +7,7 @@ repositories {
|
||||
android {
|
||||
compileSdkVersion 28
|
||||
defaultConfig {
|
||||
versionCode 4745255
|
||||
versionCode 4745260
|
||||
versionName "$I2P_VERSION"
|
||||
minSdkVersion 14
|
||||
targetSdkVersion Integer.parseInt(project.ANDROID_BUILD_TARGET_SDK_VERSION as String)
|
||||
@ -114,7 +114,7 @@ task copyI2PResources(type: Copy) {
|
||||
outputs.upToDateWhen { false }
|
||||
into 'src/main/res'
|
||||
into('drawable') {
|
||||
from file(i2pbase + '/installer/resources/themes/console/images/i2plogo.png')
|
||||
from file(i2pbase + '/apps/routerconsole/jsp/themes/console/images/i2plogo.png')
|
||||
}
|
||||
into('raw') {
|
||||
from(i2pbase + '/installer/resources/blocklist.txt') { rename { 'blocklist_txt' } }
|
||||
@ -177,15 +177,15 @@ task copyI2PAssets(type: Copy) {
|
||||
outputs.upToDateWhen { false }
|
||||
into 'src/main/assets/themes/console'
|
||||
into('images') {
|
||||
from file(i2pbase + '/installer/resources/themes/console/images/i2plogo.png')
|
||||
from file(i2pbase + '/installer/resources/themes/console/images/inbound.png')
|
||||
from file(i2pbase + '/installer/resources/themes/console/images/outbound.png')
|
||||
from file(i2pbase + '/apps/routerconsole/jsp/themes/console/images/i2plogo.png')
|
||||
from file(i2pbase + '/apps/routerconsole/jsp/themes/console/images/inbound.png')
|
||||
from file(i2pbase + '/apps/routerconsole/jsp/themes/console/images/outbound.png')
|
||||
}
|
||||
into('light') {
|
||||
from file(i2pbase + '/installer/resources/themes/console/light/console.css')
|
||||
from file(i2pbase + '/apps/routerconsole/jsp/themes/console/light/console.css')
|
||||
}
|
||||
into('light/images') {
|
||||
from file(i2pbase + '/installer/resources/themes/console/light/images/header.png')
|
||||
from file(i2pbase + '/apps/routerconsole/jsp/themes/console/light/images/header.png')
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -92,7 +92,7 @@ class InitActivities {
|
||||
|
||||
File docsDir = new File(myDir, "docs");
|
||||
docsDir.mkdir();
|
||||
copyResourceToFile(R.raw.ahelper_conflict_header_ht, "docs/ahelper-conflict-header.ht");
|
||||
/*copyResourceToFile(R.raw.ahelper_conflict_header_ht, "docs/ahelper-conflict-header.ht");
|
||||
copyResourceToFile(R.raw.ahelper_new_header_ht, "docs/ahelper-new-header.ht");
|
||||
copyResourceToFile(R.raw.ahelper_notfound_header_ht, "docs/ahelper-notfound-header.ht");
|
||||
copyResourceToFile(R.raw.auth_header_ht, "docs/auth-header.ht");
|
||||
@ -110,7 +110,7 @@ class InitActivities {
|
||||
copyResourceToFile(R.raw.noproxy_header_ht, "docs/noproxy-header.ht");
|
||||
copyResourceToFile(R.raw.protocol_header_ht, "docs/protocol-header.ht");
|
||||
copyResourceToFile(R.raw.reset_header_ht, "docs/reset-header.ht");
|
||||
copyResourceToFile(R.raw.resetp_header_ht, "docs/resetp-header.ht");
|
||||
copyResourceToFile(R.raw.resetp_header_ht, "docs/resetp-header.ht");*/
|
||||
|
||||
File cssDir = new File(docsDir, "themes/console/light");
|
||||
cssDir.mkdirs();
|
||||
|
@ -5,11 +5,13 @@ import android.os.Build;
|
||||
import android.support.v4.util.Pair;
|
||||
import android.support.v4.view.ViewCompat;
|
||||
import android.support.v7.widget.RecyclerView;
|
||||
import android.view.Gravity;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
import net.i2p.android.router.R;
|
||||
import net.i2p.android.util.FragmentUtils;
|
||||
@ -129,6 +131,17 @@ public class TunnelEntryAdapter extends RecyclerView.Adapter<RecyclerView.ViewHo
|
||||
}
|
||||
}
|
||||
|
||||
private void setClipboard(Context context, String text) {
|
||||
if(android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.HONEYCOMB) {
|
||||
android.text.ClipboardManager clipboard = (android.text.ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE);
|
||||
clipboard.setText(text);
|
||||
} else {
|
||||
android.content.ClipboardManager clipboard = (android.content.ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE);
|
||||
android.content.ClipData clip = android.content.ClipData.newPlainText("Copied Text", text);
|
||||
clipboard.setPrimaryClip(clip);
|
||||
}
|
||||
}
|
||||
|
||||
// Replace the contents of a view (invoked by the layout manager)
|
||||
@Override
|
||||
public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) {
|
||||
@ -183,6 +196,19 @@ public class TunnelEntryAdapter extends RecyclerView.Adapter<RecyclerView.ViewHo
|
||||
ViewCompat.getTransitionName(tvh.status));
|
||||
Pair<View, String>[] pairs = new Pair[]{ statusPair};
|
||||
mListener.onTunnelSelected(tunnel.getId(), pairs);
|
||||
view.invalidate();
|
||||
}
|
||||
});
|
||||
tvh.itemView.setOnLongClickListener(new View.OnLongClickListener() {
|
||||
//@Override
|
||||
public boolean onLongClick(View view) {
|
||||
setClipboard(mCtx, tunnel.getDestHashBase32());
|
||||
Toast clipboardMessage = Toast.makeText(mCtx, R.string.copied_base32_system_notification_title, Toast. LENGTH_LONG);
|
||||
clipboardMessage.setGravity(Gravity.TOP, 0, 0); //optional
|
||||
clipboardMessage.show();
|
||||
view.invalidate();
|
||||
return true;
|
||||
|
||||
}
|
||||
});
|
||||
break;
|
||||
@ -190,6 +216,7 @@ public class TunnelEntryAdapter extends RecyclerView.Adapter<RecyclerView.ViewHo
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// Return the size of the dataset (invoked by the layout manager)
|
||||
|
@ -16,6 +16,7 @@ import android.preference.PreferenceManager;
|
||||
import android.provider.Settings;
|
||||
import android.support.v4.content.LocalBroadcastManager;
|
||||
import android.support.v7.app.AlertDialog;
|
||||
import android.util.AndroidRuntimeException;
|
||||
import android.view.Gravity;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
@ -27,6 +28,7 @@ import android.widget.ScrollView;
|
||||
import android.widget.TableLayout;
|
||||
import android.widget.TableRow;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
import android.widget.ToggleButton;
|
||||
|
||||
import net.i2p.android.I2PActivityBase;
|
||||
@ -646,32 +648,36 @@ public class MainFragment extends I2PFragmentBase {
|
||||
PowerManager pm = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE);
|
||||
if (!pm.isIgnoringBatteryOptimizations(packageName)) {
|
||||
AlertDialog.Builder b = new AlertDialog.Builder(getActivity());
|
||||
b.setTitle(R.string.configure_no_doze_title)
|
||||
.setMessage(R.string.configure_no_doze)
|
||||
.setCancelable(false)
|
||||
.setPositiveButton(R.string.yes, new DialogInterface.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialog, int i) {
|
||||
String packageName = mContext.getPackageName();
|
||||
dialog.dismiss();
|
||||
ab.setPref(PREF_CONFIGURE_BATTERY, true);
|
||||
intent.setAction(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS);
|
||||
intent.setData(Uri.parse("package:" + packageName));
|
||||
try {
|
||||
mContext.startActivity(intent);
|
||||
} catch (ActivityNotFoundException activityNotFound) {
|
||||
ab.setPref(PREF_CONFIGURE_BATTERY, true);
|
||||
}
|
||||
}
|
||||
})
|
||||
.setNegativeButton(R.string.no, new DialogInterface.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialog, int i) {
|
||||
dialog.cancel();
|
||||
ab.setPref(PREF_CONFIGURE_BATTERY, false);
|
||||
}
|
||||
})
|
||||
.show();
|
||||
b.setTitle(R.string.configure_no_doze_title);
|
||||
b.setMessage(R.string.configure_no_doze);
|
||||
b.setCancelable(false);
|
||||
b.setPositiveButton(R.string.yes, new DialogInterface.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialog, int i) {
|
||||
String packageName = mContext.getPackageName();
|
||||
ab.setPref(PREF_CONFIGURE_BATTERY, false);
|
||||
dialog.dismiss();
|
||||
// Simply do not re-attempt a battery optimization after the first time,
|
||||
// even if an error occurs. http://trac.i2p2.i2p/ticket/2783
|
||||
intent.setAction(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS);
|
||||
intent.setData(Uri.parse("package:" + packageName));
|
||||
try {
|
||||
mContext.startActivity(intent);
|
||||
} catch (ActivityNotFoundException activityNotFound) {
|
||||
ab.setPref(PREF_CONFIGURE_BATTERY, false);
|
||||
} catch (AndroidRuntimeException activityNotFound) {
|
||||
ab.setPref(PREF_CONFIGURE_BATTERY, false);
|
||||
}
|
||||
}
|
||||
});
|
||||
b.setNegativeButton(R.string.no, new DialogInterface.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialog, int i) {
|
||||
dialog.cancel();
|
||||
ab.setPref(PREF_CONFIGURE_BATTERY, false);
|
||||
}
|
||||
});
|
||||
b.show();
|
||||
}
|
||||
} else {
|
||||
ab.setPref(PREF_CONFIGURE_BATTERY, false);
|
||||
|
@ -5,6 +5,7 @@ import android.content.Context;
|
||||
//import net.i2p.BOB.BOB;
|
||||
import net.i2p.I2PAppContext;
|
||||
import net.i2p.addressbook.DaemonThread;
|
||||
import android.preference.PreferenceManager;
|
||||
import net.i2p.android.apps.NewsFetcher;
|
||||
import net.i2p.android.router.util.Notifications;
|
||||
import net.i2p.android.router.util.Util;
|
||||
@ -14,8 +15,11 @@ import net.i2p.router.JobImpl;
|
||||
import net.i2p.router.RouterContext;
|
||||
import net.i2p.router.startup.RouterAppManager;
|
||||
import net.i2p.util.I2PAppThread;
|
||||
import net.i2p.sam.SAMBridge;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.Properties;
|
||||
|
||||
/**
|
||||
* Load the clients we want.
|
||||
@ -41,6 +45,7 @@ class LoadClientsJob extends JobImpl {
|
||||
private final Context mCtx;
|
||||
private final Notifications _notif;
|
||||
private DaemonThread _addressbook;
|
||||
public SAMBridge SAM_BRIDGE;
|
||||
//private BOB _bob;
|
||||
|
||||
/** this is the delay to load (and start) the clients. */
|
||||
@ -57,8 +62,9 @@ class LoadClientsJob extends JobImpl {
|
||||
public String getName() { return "Start Clients"; }
|
||||
|
||||
public void runJob() {
|
||||
Job j = new RunI2PTunnel(getContext());
|
||||
getContext().jobQueue().addJob(j);
|
||||
Job jtunnel = new RunI2PTunnel(getContext());
|
||||
getContext().jobQueue().addJob(jtunnel);
|
||||
|
||||
|
||||
Thread t = new I2PAppThread(new StatSummarizer(), "StatSummarizer", true);
|
||||
t.setPriority(Thread.NORM_PRIORITY - 1);
|
||||
@ -69,7 +75,15 @@ class LoadClientsJob extends JobImpl {
|
||||
//try {
|
||||
// _bob.startup();
|
||||
//} catch (IOException ioe) {}
|
||||
|
||||
boolean useSAM = PreferenceManager.getDefaultSharedPreferences(mCtx).getBoolean("i2pandroid.client.SAM", true);
|
||||
Util.i("SAM API " + useSAM);
|
||||
if (useSAM) {
|
||||
Job jsam = new RunI2PSAM(getContext());
|
||||
getContext().jobQueue().addJob(jsam);
|
||||
Util.i("SAM API started successfully" + useSAM);
|
||||
}else{
|
||||
Util.i("SAM API disabled, not starting "+useSAM);
|
||||
}
|
||||
getContext().addShutdownTask(new ClientShutdownHook());
|
||||
}
|
||||
|
||||
@ -82,12 +96,13 @@ class LoadClientsJob extends JobImpl {
|
||||
public String getName() { return "Start I2P Tunnel"; }
|
||||
|
||||
public void runJob() {
|
||||
while (!getContext().router().isRunning()) {
|
||||
try { Thread.sleep(1000); } catch (InterruptedException ie) { return; }
|
||||
if (!getContext().router().isAlive()) {
|
||||
if (!getContext().router().isRunning()) {
|
||||
if (getContext().router().isAlive()) {
|
||||
requeue(1000);
|
||||
} else {
|
||||
Util.e("Router stopped before i2ptunnel could start");
|
||||
return;
|
||||
}
|
||||
return;
|
||||
}
|
||||
Util.d("Starting i2ptunnel");
|
||||
TunnelControllerGroup tcg = TunnelControllerGroup.getInstance(getContext());
|
||||
@ -112,6 +127,46 @@ class LoadClientsJob extends JobImpl {
|
||||
}
|
||||
}
|
||||
|
||||
private class RunI2PSAM extends JobImpl {
|
||||
|
||||
public RunI2PSAM(RouterContext ctx) {
|
||||
super(ctx);
|
||||
}
|
||||
|
||||
public String getName() { return "Start SAM API"; }
|
||||
|
||||
public void runJob() {
|
||||
if (!getContext().router().isRunning()) {
|
||||
if (getContext().router().isAlive()) {
|
||||
requeue(1000);
|
||||
} else {
|
||||
Util.e("Router stopped before SAM API could start");
|
||||
}
|
||||
return;
|
||||
}
|
||||
Util.d("Starting SAM");
|
||||
try {
|
||||
Util.i("Starting the SAM API");
|
||||
SAM_BRIDGE = new SAMBridge("127.0.0.1",
|
||||
7656,
|
||||
false,
|
||||
SAM_PROPERTIES(),
|
||||
"sam.keys",
|
||||
new File("sam_config"));
|
||||
SAM_BRIDGE.run();
|
||||
} catch (IOException e) {
|
||||
Util.e( e.toString());
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
public Properties SAM_PROPERTIES() throws IOException {
|
||||
Util.i("Getting the default properties");
|
||||
Properties sam_properties = new Properties();
|
||||
return sam_properties;
|
||||
}
|
||||
}
|
||||
|
||||
private class ClientShutdownHook implements Runnable {
|
||||
public void run() {
|
||||
Util.d("client shutdown hook");
|
||||
@ -120,6 +175,8 @@ class LoadClientsJob extends JobImpl {
|
||||
// NewsFetcher registers its own hook
|
||||
//if (_bob != null)
|
||||
// _bob.shutdown(null);
|
||||
if (SAM_BRIDGE != null)
|
||||
SAM_BRIDGE.shutdown(null);
|
||||
if (_addressbook != null)
|
||||
_addressbook.halt();
|
||||
}
|
||||
|
@ -6,6 +6,7 @@ import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.IntentFilter;
|
||||
import android.content.SharedPreferences;
|
||||
import android.os.Build;
|
||||
import android.os.Handler;
|
||||
import android.os.IBinder;
|
||||
import android.os.Message;
|
||||
@ -168,10 +169,18 @@ public class RouterService extends Service {
|
||||
}
|
||||
_handler.removeCallbacks(_updater);
|
||||
_handler.postDelayed(_updater, 50);
|
||||
|
||||
// We need to *not* check if we're restarting on Android greater than Oreo due to
|
||||
// changes in how notifications work and the use of NotificationChannels.
|
||||
if(!restart) {
|
||||
startForeground(1337, _statusBar.getNote());
|
||||
} else {
|
||||
if (Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
|
||||
startForeground(1337, _statusBar.getNote());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//return START_STICKY;
|
||||
return START_NOT_STICKY;
|
||||
}
|
||||
|
@ -1,11 +1,15 @@
|
||||
package net.i2p.android.router.service;
|
||||
|
||||
import android.app.Notification;
|
||||
import android.app.NotificationChannel;
|
||||
import android.app.NotificationManager;
|
||||
import android.app.PendingIntent;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.os.Build;
|
||||
import android.support.v4.app.NotificationCompat;
|
||||
import android.view.Gravity;
|
||||
import android.widget.Toast;
|
||||
|
||||
import net.i2p.android.I2PActivity;
|
||||
import net.i2p.android.router.R;
|
||||
@ -16,6 +20,9 @@ class StatusBar {
|
||||
private final NotificationManager mNotificationManager;
|
||||
private final NotificationCompat.Builder mNotifyBuilder;
|
||||
private Notification mNotif;
|
||||
private final String NOTIFICATION_CHANNEL_ID = "net.i2p.android.STARTUP_STATE_CHANNEL";
|
||||
private final String channelName = "I2P Router Service";
|
||||
NotificationChannel mNotificationChannel;
|
||||
|
||||
private static final int ID = 1337;
|
||||
|
||||
@ -28,25 +35,33 @@ class StatusBar {
|
||||
|
||||
StatusBar(Context ctx) {
|
||||
mCtx = ctx;
|
||||
mNotificationManager = (NotificationManager) ctx.getSystemService(
|
||||
mNotificationManager = (NotificationManager) mCtx.getSystemService(
|
||||
Context.NOTIFICATION_SERVICE);
|
||||
assert mNotificationManager != null;
|
||||
|
||||
Thread.currentThread().setUncaughtExceptionHandler(
|
||||
new CrashHandler(mNotificationManager));
|
||||
|
||||
int icon = ICON_STARTING;
|
||||
// won't be shown if replace() is called
|
||||
String text = ctx.getString(R.string.notification_status_starting);
|
||||
String text = mCtx.getString(R.string.notification_status_starting);
|
||||
|
||||
mNotifyBuilder = new NotificationCompat.Builder(ctx)
|
||||
.setContentText(text)
|
||||
.setSmallIcon(icon)
|
||||
.setColor(mCtx.getResources().getColor(R.color.primary_light))
|
||||
.setOngoing(true)
|
||||
.setOnlyAlertOnce(true);
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
||||
mNotifyBuilder = new NotificationCompat.Builder(mCtx);
|
||||
} else {
|
||||
mNotifyBuilder = new NotificationCompat.Builder(mCtx, NOTIFICATION_CHANNEL_ID);
|
||||
}
|
||||
|
||||
Intent intent = new Intent(ctx, I2PActivity.class);
|
||||
mNotifyBuilder.setContentText(text);
|
||||
mNotifyBuilder.setSmallIcon(icon);
|
||||
mNotifyBuilder.setColor(mCtx.getResources().getColor(R.color.primary_light));
|
||||
mNotifyBuilder.setOngoing(true);
|
||||
mNotifyBuilder.setPriority(NotificationManager.IMPORTANCE_LOW);
|
||||
mNotifyBuilder.setCategory(Notification.CATEGORY_SERVICE);
|
||||
|
||||
Intent intent = new Intent(mCtx, I2PActivity.class);
|
||||
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
||||
PendingIntent pi = PendingIntent.getActivity(ctx, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
|
||||
PendingIntent pi = PendingIntent.getActivity(mCtx, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
|
||||
mNotifyBuilder.setContentIntent(pi);
|
||||
}
|
||||
|
||||
@ -74,6 +89,12 @@ class StatusBar {
|
||||
public void update(String title, String text) {
|
||||
mNotifyBuilder.setContentTitle(title)
|
||||
.setContentText(text);
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
||||
mNotificationChannel = new NotificationChannel(NOTIFICATION_CHANNEL_ID, channelName, NotificationManager.IMPORTANCE_LOW);
|
||||
mNotificationManager.createNotificationChannel(mNotificationChannel);
|
||||
mNotificationChannel.setLockscreenVisibility(Notification.VISIBILITY_PRIVATE);
|
||||
mNotifyBuilder.setChannelId(NOTIFICATION_CHANNEL_ID);
|
||||
}
|
||||
mNotif = mNotifyBuilder.build();
|
||||
mNotificationManager.notify(ID, mNotif);
|
||||
}
|
||||
|
@ -2,16 +2,20 @@ package net.i2p.android.router.util;
|
||||
|
||||
import net.i2p.android.router.R;
|
||||
|
||||
|
||||
import android.app.NotificationManager;
|
||||
import android.app.PendingIntent;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.os.Build;
|
||||
import android.support.v4.app.NotificationCompat;
|
||||
|
||||
public class Notifications {
|
||||
private final Context mCtx;
|
||||
private final NotificationManager mNotificationManager;
|
||||
|
||||
|
||||
|
||||
public static final int ICON = R.drawable.ic_stat_router_active;
|
||||
|
||||
public Notifications(Context ctx) {
|
||||
@ -25,13 +29,26 @@ public class Notifications {
|
||||
}
|
||||
|
||||
public void notify(String title, String text, Class<?> c) {
|
||||
NotificationCompat.Builder b =
|
||||
new NotificationCompat.Builder(mCtx)
|
||||
.setContentTitle(title)
|
||||
.setContentText(text)
|
||||
.setSmallIcon(ICON)
|
||||
.setColor(mCtx.getResources().getColor(R.color.primary_light))
|
||||
.setAutoCancel(true);
|
||||
notify(title, text, "", c);
|
||||
}
|
||||
|
||||
public void notify(String title, String text, String channel, Class<?> c) {
|
||||
NotificationCompat.Builder b;
|
||||
if (Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
|
||||
b = new NotificationCompat.Builder(mCtx);
|
||||
} else {
|
||||
if (channel.equals("")){
|
||||
b = new NotificationCompat.Builder(mCtx);
|
||||
} else {
|
||||
b = new NotificationCompat.Builder(mCtx, channel);
|
||||
}
|
||||
}
|
||||
|
||||
b.setContentTitle(title);
|
||||
b.setContentText(text);
|
||||
b.setSmallIcon(ICON);
|
||||
b.setColor(mCtx.getResources().getColor(R.color.primary_light));
|
||||
b.setAutoCancel(true);
|
||||
|
||||
if (c != null) {
|
||||
Intent intent = new Intent(mCtx, c);
|
||||
|
@ -0,0 +1,13 @@
|
||||
<html>
|
||||
<head></head>
|
||||
<body>
|
||||
<h2>How to configure IceRaven for Android:</h2>
|
||||
<h3>Configuration via Webextension</h3>
|
||||
<ol>
|
||||
<li>Open IceRaven and click the main menu. Scroll to the top, and tap the "Add-Ons" submenu.</li>
|
||||
<li>Tap on the "Add-Ons Manager" option.</li>
|
||||
<li>Find the "I2P Proxy for Android and Other" extension in the Add-Ons collection and tap on the <code>+</code> symbol</li>
|
||||
<li>You can now browse I2P Sites!</li>
|
||||
</ol>
|
||||
</body>
|
||||
</html>
|
@ -24,8 +24,7 @@
|
||||
<li>Tap "Update"</li>
|
||||
<li>You can now browse I2P eepsites!</li>
|
||||
</ol>
|
||||
<h3>Experimental Rootless Configuration via Webextension</h3>
|
||||
<strong><p>Use at your own risk</p></strong>
|
||||
<h3>Rootless Configuration via Webextension</h3>
|
||||
<ol>
|
||||
<li>Open this link in GNU IceCat and get the WebExtension from <a href="https://github.com/eyedeekay/i2psetproxy.js/releases">Github</a></li>
|
||||
<li>Click through the "Blocked Extension" warning</li>
|
||||
|
@ -24,8 +24,7 @@
|
||||
<li>Tap "Update"</li>
|
||||
<li>You can now browse I2P eepsites!</li>
|
||||
</ol>
|
||||
<h3>Experimental Rootless Configuration via Webextension</h3>
|
||||
<strong><p>Use at your own risk</p></strong>
|
||||
<h3>Rootless Configuration via Webextension</h3>
|
||||
<ol>
|
||||
<li>Open this link in Fennec and get the WebExtension from <a href="https://github.com/eyedeekay/i2psetproxy.js/releases">Github</a></li>
|
||||
<li>Click through the "Blocked Extension" warning</li>
|
||||
|
@ -24,8 +24,7 @@
|
||||
<li>Tap "Update"</li>
|
||||
<li>You can now browse I2P eepsites!</li>
|
||||
</ol>
|
||||
<h3>Experimental Rootless Configuration via Webextension</h3>
|
||||
<strong><p>Use at your own risk</p></strong>
|
||||
<h3>Rootless Configuration via Webextension</h3>
|
||||
<ol>
|
||||
<li>Open this link in Firefox and get the WebExtension from <a href="https://github.com/eyedeekay/i2psetproxy.js/releases">Github</a></li>
|
||||
<li>Click through the "Blocked Extension" warning</li>
|
||||
|
@ -8,7 +8,7 @@ tunnel.0.type=httpclient
|
||||
tunnel.0.sharedClient=false
|
||||
tunnel.0.interface=127.0.0.1
|
||||
tunnel.0.listenPort=4444
|
||||
tunnel.0.proxyList=false.i2p,blue.proxynet.i2p
|
||||
tunnel.0.proxyList=false.i2p
|
||||
tunnel.0.i2cpHost=127.0.0.1
|
||||
tunnel.0.i2cpPort=7654
|
||||
tunnel.0.option.inbound.nickname=I2P HTTP Proxy
|
||||
@ -18,7 +18,7 @@ tunnel.0.option.i2cp.reduceIdleTime=600000
|
||||
tunnel.0.option.i2cp.reduceOnIdle=true
|
||||
tunnel.0.option.i2cp.reduceQuantity=1
|
||||
tunnel.0.option.i2p.streaming.connectDelay=1000
|
||||
tunnel.0.option.i2ptunnel.httpclient.SSLOutproxies=false.i2p,blue.proxynet.i2p
|
||||
tunnel.0.option.i2ptunnel.httpclient.SSLOutproxies=false.i2p
|
||||
tunnel.0.option.inbound.length=2
|
||||
tunnel.0.option.inbound.lengthVariance=0
|
||||
tunnel.0.option.outbound.length=2
|
||||
@ -33,7 +33,7 @@ tunnel.1.type=ircclient
|
||||
tunnel.1.sharedClient=true
|
||||
tunnel.1.interface=127.0.0.1
|
||||
tunnel.1.listenPort=6668
|
||||
tunnel.1.targetDestination=irc.dg.i2p:6667,irc.postman.i2p:6667,irc.echelon.i2p:6667
|
||||
tunnel.1.targetDestination=irc.postman.i2p:6667,irc.echelon.i2p:6667
|
||||
tunnel.1.i2cpHost=127.0.0.1
|
||||
tunnel.1.i2cpPort=7654
|
||||
tunnel.1.option.inbound.nickname=shared clients
|
||||
@ -100,3 +100,56 @@ tunnel.3.option.outbound.length=2
|
||||
tunnel.3.option.outbound.lengthVariance=0
|
||||
tunnel.3.option.outbound.priority=15
|
||||
tunnel.3.startOnLoad=true
|
||||
|
||||
# I2P Git Repositories SSH Access
|
||||
tunnel.6.description=I2P Git Repositories SSH Access
|
||||
tunnel.6.interface=127.0.0.1
|
||||
tunnel.6.listenPort=7670
|
||||
tunnel.6.name=gitssh.idk.i2p
|
||||
tunnel.6.option.i2cp.closeIdleTime=1800000
|
||||
tunnel.6.option.i2cp.closeOnIdle=false
|
||||
tunnel.6.option.i2cp.delayOpen=true
|
||||
tunnel.6.option.i2cp.destination.sigType=7
|
||||
tunnel.6.option.i2cp.newDestOnResume=false
|
||||
tunnel.6.option.i2cp.reduceIdleTime=1200000
|
||||
tunnel.6.option.i2cp.reduceOnIdle=true
|
||||
tunnel.6.option.i2cp.reduceQuantity=1
|
||||
tunnel.6.option.inbound.backupQuantity=1
|
||||
tunnel.6.option.inbound.length=3
|
||||
tunnel.6.option.inbound.nickname=gitssh.idk.i2p
|
||||
tunnel.6.option.inbound.quantity=3
|
||||
tunnel.6.option.outbound.backupQuantity=1
|
||||
tunnel.6.option.outbound.length=3
|
||||
tunnel.6.option.outbound.nickname=gitssh.idk.i2p
|
||||
tunnel.6.option.outbound.quantity=3
|
||||
tunnel.6.sharedClient=false
|
||||
tunnel.6.startOnLoad=false
|
||||
tunnel.6.targetDestination=gitssh.idk.i2p
|
||||
tunnel.6.type=client
|
||||
|
||||
# I2P Git Repositories HTTP Access(Android only)
|
||||
# Disabled by default, useful for Android gitlab clients like labcoat
|
||||
tunnel.7.description=I2P Git Repositories HTTP Access(Android Only)
|
||||
tunnel.7.interface=127.0.0.1
|
||||
tunnel.7.listenPort=7671
|
||||
tunnel.7.name=git.idk.i2p
|
||||
tunnel.7.option.i2cp.closeIdleTime=1800000
|
||||
tunnel.7.option.i2cp.closeOnIdle=false
|
||||
tunnel.7.option.i2cp.delayOpen=true
|
||||
tunnel.7.option.i2cp.destination.sigType=7
|
||||
tunnel.7.option.i2cp.newDestOnResume=false
|
||||
tunnel.7.option.i2cp.reduceIdleTime=1200000
|
||||
tunnel.7.option.i2cp.reduceOnIdle=true
|
||||
tunnel.7.option.i2cp.reduceQuantity=1
|
||||
tunnel.7.option.inbound.backupQuantity=1
|
||||
tunnel.7.option.inbound.length=3
|
||||
tunnel.7.option.inbound.nickname=git.idk.i2p
|
||||
tunnel.7.option.inbound.quantity=3
|
||||
tunnel.7.option.outbound.backupQuantity=1
|
||||
tunnel.7.option.outbound.length=3
|
||||
tunnel.7.option.outbound.nickname=git.idk.i2p
|
||||
tunnel.7.option.outbound.quantity=3
|
||||
tunnel.7.sharedClient=false
|
||||
tunnel.7.startOnLoad=false
|
||||
tunnel.7.targetDestination=ssh.idk.i2p
|
||||
tunnel.7.type=client
|
||||
|
@ -53,6 +53,10 @@ i2np.bandwidth.outboundKBytesPerSecond=50
|
||||
i2np.ntcp.enable=true
|
||||
i2np.ntcp.maxConnections=32
|
||||
#
|
||||
# NTCP2
|
||||
#
|
||||
i2np.ntcp2.enable=true
|
||||
#
|
||||
# UDP
|
||||
#
|
||||
i2np.udp.enable=true
|
||||
|
@ -1,3 +1,2 @@
|
||||
http://i2p-projekt.i2p/hosts.txt
|
||||
http://i2host.i2p/cgi-bin/i2hostetag
|
||||
http://stats.i2p/cgi-bin/newhosts.txt
|
||||
|
@ -25,7 +25,7 @@
|
||||
<string name="button_router_graceful">I2P se fermera dans %s</string>
|
||||
<string name="button_shutdown_now">Appuyer longuement pour arrêter maintenant</string>
|
||||
<string name="button_cancel_graceful">Appuyer longuement pour annuler la fermeture</string>
|
||||
<string name="no_internet">Aucune connexion Internet n’est disponible</string>
|
||||
<string name="no_internet">Aucune connexion à Internet n’est disponible</string>
|
||||
<string name="hidden">caché</string>
|
||||
<string name="testing">en test</string>
|
||||
<string name="firewalled">derrière un pare-feu</string>
|
||||
@ -54,7 +54,7 @@
|
||||
<string name="download">Téléchargement</string>
|
||||
<string name="upload">Téléversement</string>
|
||||
<string name="configure_browser_title">Configurer le navigateur ?</string>
|
||||
<string name="configure_browser_for_i2p">Souhaitez-vous configurer un navigateur pour visualiser les sites I2P ? (Vous pouvez aussi le faire plus tard grâce au menu d’aide.)</string>
|
||||
<string name="configure_browser_for_i2p">Voulez-vous configurer un navigateur pour visualiser les sites I2P ? (Vous pouvez aussi le faire plus tard grâce au menu d’aide.)</string>
|
||||
<string name="configure_no_doze_title">Gérer les optimisations de la pile ?</string>
|
||||
<string name="configure_no_doze">I2P fonctionne mieux s’il fonctionne en permanence. Pour empêcher qu’Android ferme I2P quand il essaie d’économiser l’énergie, vous pouvez ajouter I2P à la liste d’exception de la pile. La fiabilité de l’appli s’en trouvera grandement améliorée.\n\nGarder I2P en fonction en arrière-plan ? (recommandé)</string>
|
||||
<string name="first_start_title">Félicitations pour votre installation d’I2P !</string>
|
||||
@ -82,11 +82,11 @@
|
||||
<string name="view_news">Toucher pour voir les dernières nouvelles d’I2P</string>
|
||||
<string name="router_not_running">Le routeur ne fonctionne pas.</string>
|
||||
<string name="router_shutting_down">Le routeur s’éteint.</string>
|
||||
<string name="stats_not_ready">Le gestionnaire de statistiques n’est pas encore prêt. Ressayer ultérieurement.</string>
|
||||
<string name="stats_not_ready">Le gestionnaire de statistiques n’est pas encore prêt. Réessayer plus tard.</string>
|
||||
<string name="select_an_address">Sélectionner une adresse.</string>
|
||||
<string name="no_graphs_configured">Aucun graphique n’a été configuré. Vous pouvez choisir les statistiques à graphiquer dans le menu des paramètres. Tout changement prendra effet après 60 secondes.</string>
|
||||
<string name="configure_graphs">Configurer les graphiques</string>
|
||||
<string name="graphs_not_ready">Les graphiques ne sont pas encore prêts. Ressayer ultérieurement.</string>
|
||||
<string name="graphs_not_ready">Les graphiques ne sont pas encore prêts. Réessayer plus tard.</string>
|
||||
<string name="statistics">Statistiques</string>
|
||||
<string name="routers">Routeurs</string>
|
||||
<string name="leasesets">Jeux de baux</string>
|
||||
@ -171,8 +171,8 @@
|
||||
<string name="about_project">Page d’accueil du projet :</string>
|
||||
<string name="about_bugs">Bogues et assistance :</string>
|
||||
<string name="about_helpwanted">Aide recherchée !</string>
|
||||
<string name="about_volunteer">Souhaitez-vous aider à améliorer l’appli ? Portez-vous volontaire sur le forum Android :</string>
|
||||
<string name="about_donate">Souhaitez-vous faire un don en argent ou en bitcoins pour acheter plus d’appareils Android pour le développement et les tests ? Rendez-vous sur :</string>
|
||||
<string name="about_volunteer">Voulez-vous aider à améliorer l’appli ? Portez-vous volontaire sur le forum Android :</string>
|
||||
<string name="about_donate">Voulez-vous faire un don en argent ou en bitcoins pour acheter plus d’appareils Android pour le développement et les tests ? Rendez-vous sur :</string>
|
||||
<string name="menu_help">Aide</string>
|
||||
<string name="general">Général</string>
|
||||
<string name="label_router">Adresses publiques</string>
|
||||
@ -201,7 +201,7 @@
|
||||
<string name="i2ptunnel_type_streamrserver">Serveur Streamr</string>
|
||||
<string name="i2ptunnel_type_httpbidirserver">Bidir HTTP</string>
|
||||
<string name="install_recommended_app">Installer l’appli recommandée ?</string>
|
||||
<string name="app_needed_for_this_tunnel_type">Vous devez installer une appli pour utiliser ce tunnel. Souhaitez-vous installer l’appli recommandée ?</string>
|
||||
<string name="app_needed_for_this_tunnel_type">Vous devez installer une appli pour utiliser ce tunnel. Voulez-vous installer l’appli recommandée ?</string>
|
||||
<string name="i2ptunnel_not_initialized">Les tunnels ne sont pas encore initialisés, veuillez recharger dans deux minutes.</string>
|
||||
<string name="no_configured_client_tunnels">Aucun tunnel client n’est configuré.</string>
|
||||
<string name="no_configured_server_tunnels">Aucun tunnel serveur n’est configuré.</string>
|
||||
|
@ -55,6 +55,8 @@
|
||||
<string name="upload">Wysyłanie</string>
|
||||
<string name="configure_browser_title">Konfigurować przeglądarkę?</string>
|
||||
<string name="configure_browser_for_i2p">Czy chciałbyś skonfigurować przeglądarkę, aby przeglądać strony I2P? (Możesz to zrobić później w wybierająć pomoc z menu.)</string>
|
||||
<string name="configure_no_doze_title">Czy wyłączyć optymalizację baterii?</string>
|
||||
<string name="configure_no_doze">Aplikacja I2P działa najlepiej gdy działa bez przerwy. Aby system Android nie usypiał aplikacji I2P w celu oszczędzania energii, należy dodać ją do listy wyjątków. Znacząco większy to niezawodność aplikacji.\n\nCzy pozwolić aplikacji I2P działać w tle? (zalecane)</string>
|
||||
<string name="first_start_title">Gratulacje, zainstalowałeś I2P!</string>
|
||||
<string name="first_start_welcome"><b>Witamy w I2P!</b> Proszę <b>bądz cierpliwy</b> bo I2P właśnie się uruchamia i szuka peerów.</string>
|
||||
<string name="first_start_read">W międzyczasie, prosimy o zapoznanie się z notatkami tego wydania oraz stroną powitalną.</string>
|
||||
@ -145,6 +147,7 @@
|
||||
<string name="settings_label_transports">Transporty</string>
|
||||
<string name="settings_label_maxConns">Maksymalna liczba połączeń</string>
|
||||
<string name="settings_label_i2cp">Interfejs I2CP</string>
|
||||
<string name="settings_desc_i2cp">Zezwól aplikacjom stron trzecich na tworzenie tuneli (wymaga restartu węzła)</string>
|
||||
<string name="settings_label_exploratory_pool">Pole rozpoznawcze</string>
|
||||
<string name="settings_desc_exploratory_pool">Parametry tuneli</string>
|
||||
<string name="settings_label_expl_inbound">Tunele przychodzące</string>
|
||||
|
@ -47,22 +47,22 @@
|
||||
<string name="active_peers">Активные узлы</string>
|
||||
<string name="known_peers">Известные узлы</string>
|
||||
<!--Character to indicate a client tunnel. Usually first letter of the word "client".-->
|
||||
<string name="char_client_tunnel">K</string>
|
||||
<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">С</string>
|
||||
<string name="char_server_tunnel">S</string>
|
||||
<string name="no_tunnels_running">Нет ни одного запущенного туннеля.</string>
|
||||
<string name="download">Получено</string>
|
||||
<string name="upload">Передано</string>
|
||||
<string name="configure_browser_title">Настроить браузер?</string>
|
||||
<string name="configure_browser_for_i2p">Настроить браузер для просмотра I2P сайтов? (Вы сможете сделать это позже из меню \"Справка\")</string>
|
||||
<string name="configure_no_doze_title">Управлять оптимизацией энергосбережения?</string>
|
||||
<string name="configure_no_doze">I2P работает лучше всего когда постоянно запущен. Для предотвращения закрытия I2P системой вы можете добавить его в список исключения оптимизации. Это существенно увеличит надёжность приложения. Оставить I2P работать в фоне? (рекомендуется)</string>
|
||||
<string name="configure_no_doze">I2P работает лучше всего, когда постоянно запущен. Для предотвращения закрытия I2P системой вы можете добавить его в список исключений оптимизации. Это существенно увеличит надёжность приложения. Оставить I2P работать в фоне? (рекомендуется)</string>
|
||||
<string name="first_start_title">Поздравляем с установкой I2P!</string>
|
||||
<string name="first_start_welcome"><b>Добро пожаловать в I2P!</b> Пожалуйста, <b>дождитесь</b> пока I2P загрузится и найдет узлы.</string>
|
||||
<string name="first_start_read">Пока вы ждете, пожалуйста, прочтите информацию о релизе и страницу приветствия.</string>
|
||||
<string name="first_start_faq">Как только у вас появятся клиентские туннели, пожалуйста, <b>посмотрите</b> раздел FAQ:</string>
|
||||
<string name="first_start_faq_nonanon">Или используйте эту не анонимную ссылку, если вы не хотите ждать создания туннелей:</string>
|
||||
<string name="first_start_irc">Настройте свой клиент IRC на <b>localhost:6668</b> и скажите нам привет:</string>
|
||||
<string name="first_start_faq_nonanon">Или используйте эту неанонимную ссылку, если вы не хотите ждать создания туннелей:</string>
|
||||
<string name="first_start_irc">Настройте свой клиент IRC на <b>localhost:6668</b> и поздоровайтесь с нами:</string>
|
||||
<string name="action_search">Поиск</string>
|
||||
<string name="action_add">Добавить</string>
|
||||
<string name="action_edit">Изменить</string>
|
||||
@ -137,10 +137,10 @@
|
||||
<string name="settings_dialog_sharePercent">Процент пропускной способности на раздачу</string>
|
||||
<string name="settings_desc_upnp">Автооткрытие портов брандмауэра</string>
|
||||
<string name="settings_label_logging">Журналирование</string>
|
||||
<string name="settings_label_default_log_level">Уровень журналирования по-умолчанию</string>
|
||||
<string name="settings_label_default_log_level">Уровень журналирования по умолчанию</string>
|
||||
<string name="settings_label_appearance">Внешний вид</string>
|
||||
<string name="settings_label_language">Язык</string>
|
||||
<string name="settings_default">По-умолчанию</string>
|
||||
<string name="settings_default">По умолчанию</string>
|
||||
<string name="settings_label_advanced">Расширенные</string>
|
||||
<string name="settings_label_showStats">Статистика маршрутизатора</string>
|
||||
<string name="settings_summ_showStats">Показать расширенную статистику в главной консоли</string>
|
||||
@ -171,8 +171,8 @@
|
||||
<string name="about_project">Сайт проекта:</string>
|
||||
<string name="about_bugs">Ошибки и поддержка:</string>
|
||||
<string name="about_helpwanted">Требуется помощь!</string>
|
||||
<string name="about_volunteer">Хотите помочь улучшить приложение? Добровольцы на Android форуме:</string>
|
||||
<string name="about_donate">Хотите пожертвовать деньги или bitcoins на покупку дополнительных Android устройств для разработчиков и тестировщиков? Зайдите:</string>
|
||||
<string name="about_volunteer">Хотите помочь улучшить приложение? Добровольцы на Android-форуме:</string>
|
||||
<string name="about_donate">Хотите пожертвовать деньги или bitcoins на покупку дополнительных Android-устройств для разработчиков и тестировщиков? Зайдите:</string>
|
||||
<string name="menu_help">Справка</string>
|
||||
<string name="general">Общие</string>
|
||||
<string name="label_router">Публичные адреса</string>
|
||||
@ -187,7 +187,7 @@
|
||||
<string name="nsu_iae_cannot_start_with">Имя узла не может начинаться с \"%s\"</string>
|
||||
<string name="nsu_iae_cannot_end_with">Имя узла не может заканчиваться \"%s\"</string>
|
||||
<string name="nsu_iae_cannot_contain">Имя узла не может содержать \"%s\"</string>
|
||||
<string name="nsu_iae_requires_conversion">Имя узла \"%s\" необходимо преобразовать в ASCII, но соответствующая библиотека не доступна в этой версии Android</string>
|
||||
<string name="nsu_iae_requires_conversion">Имя узла \"%s\" необходимо преобразовать в ASCII, но соответствующая библиотека недоступна в этой версии Android</string>
|
||||
<string name="i2ptunnel_type_client">Стандартный клиент</string>
|
||||
<string name="i2ptunnel_type_httpclient">HTTP клиент</string>
|
||||
<string name="i2ptunnel_type_ircclient">IRC клиент</string>
|
||||
@ -202,7 +202,7 @@
|
||||
<string name="i2ptunnel_type_httpbidirserver">HTTP bidir</string>
|
||||
<string name="install_recommended_app">Установить рекомендованное приложение?</string>
|
||||
<string name="app_needed_for_this_tunnel_type">Требуется установить приложение для использования этого туннеля. Хотите установить рекомендованное приложение?</string>
|
||||
<string name="i2ptunnel_not_initialized">Туннели еще не инициализированы, пожалуйста, обновите через пару минут</string>
|
||||
<string name="i2ptunnel_not_initialized">Туннели еще не инициализированы, пожалуйста, обновите через пару минут.</string>
|
||||
<string name="no_configured_client_tunnels">Нет настроенных клиентских туннелей.</string>
|
||||
<string name="no_configured_server_tunnels">Нет настроенных серверных туннелей.</string>
|
||||
<string name="i2ptunnel_new_tunnel">Создать туннель</string>
|
||||
@ -244,7 +244,7 @@
|
||||
<string name="i2ptunnel_wizard_submit_confirm_button">Создать туннель</string>
|
||||
<string name="i2ptunnel_view_target">Цель</string>
|
||||
<string name="i2ptunnel_view_access_point">Точка доступа</string>
|
||||
<string name="i2ptunnel_view_autostart">Авто-запуск</string>
|
||||
<string name="i2ptunnel_view_autostart">Автозапуск</string>
|
||||
<string name="address_copied_to_clipboard">Адрес скопирован в буфер обмена</string>
|
||||
<string name="edit_tunnel">Изменить туннель</string>
|
||||
<string name="name">Имя</string>
|
||||
@ -275,7 +275,7 @@
|
||||
<string name="tunnel_summ_use_ssl">Использовать SSL для подключения к цели</string>
|
||||
<string name="tunnel_parameters">Параметры туннеля</string>
|
||||
<string name="profile">Профиль</string>
|
||||
<string name="profile_bulk">Массовое соединение (для загрузок/вебсайтов/P2P)</string>
|
||||
<string name="profile_bulk">Массовое соединение (для загрузок/веб-сайтов/P2P)</string>
|
||||
<string name="profile_interactive">Интерактивное соединение</string>
|
||||
<string name="delay_connect">Задержка подключения</string>
|
||||
<string name="tunnel_summ_delay_connect">Включить для запроса/ответа соединений</string>
|
||||
|
@ -56,7 +56,9 @@ Läs utgåvenoteringar och licens-information.</string>
|
||||
<string name="upload">Ladda upp</string>
|
||||
<string name="configure_browser_title">Konfigurera webbläsaren?</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="configure_no_doze_title">Hantera batterioptimeringar?</string>
|
||||
<string name="configure_no_doze">I2P fungerar bäst om den fortsätter att fungera. För att förhindra att Android stänger I2P när du försöker spara ström kan du lägga till den i listan över undantag från batterier. Detta kommer att förbättra applikationens tillförlitlighet avsevärt.\n\nHålla I2P igång i bakgrunden? (rekommenderad)</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åra vanliga frågor:</string>
|
||||
@ -146,6 +148,7 @@ Läs utgåvenoteringar och licens-information.</string>
|
||||
<string name="settings_label_transports">Transporter</string>
|
||||
<string name="settings_label_maxConns">Max anslutningar</string>
|
||||
<string name="settings_label_i2cp">I2CP interfrace</string>
|
||||
<string name="settings_desc_i2cp">Tillåt tredjepartsappar att skapa tunnlar (kräver omstart av routern)</string>
|
||||
<string name="settings_label_exploratory_pool">Utforskande pool</string>
|
||||
<string name="settings_desc_exploratory_pool">Tunnelparametrar</string>
|
||||
<string name="settings_label_expl_inbound">Inåtgående tunnlar</string>
|
||||
@ -173,7 +176,7 @@ Läs utgåvenoteringar och licens-information.</string>
|
||||
<string name="about_donate">Vill du donera pengar eller bitcoin för inköp av fler Androidenheter till utveckling och testning? Gå till:</string>
|
||||
<string name="menu_help">Hjälp</string>
|
||||
<string name="general">Generell</string>
|
||||
<string name="label_router">Offentliga adresser</string>
|
||||
<string name="label_router">Publika adresser</string>
|
||||
<string name="label_private">Privata adresser</string>
|
||||
<string name="addressbook_is_empty">Adressboken är tom</string>
|
||||
<string name="addressbook_search_header">%s hittade</string>
|
||||
@ -210,6 +213,7 @@ Läs utgåvenoteringar och licens-information.</string>
|
||||
<string name="i2ptunnel_msg_tunnel_stopping">Stannar tunnel</string>
|
||||
<string name="i2ptunnel_delete_confirm_message">Radera tunnel?</string>
|
||||
<string name="i2ptunnel_delete_confirm_button">Radera tunnel</string>
|
||||
<string name="i2ptunnel_no_tunnel_details">Det gick inte att läsa in detaljer i tunneln</string>
|
||||
<string name="i2ptunnel_wizard_k_client_server">Klient eller Server</string>
|
||||
<string name="i2ptunnel_wizard_v_client">Klienttunnel</string>
|
||||
<string name="i2ptunnel_wizard_v_server">Servertunnel</string>
|
||||
@ -242,6 +246,7 @@ Läs utgåvenoteringar och licens-information.</string>
|
||||
<string name="i2ptunnel_view_target">Mål</string>
|
||||
<string name="i2ptunnel_view_access_point">Accesspunkt</string>
|
||||
<string name="i2ptunnel_view_autostart">Auto-start</string>
|
||||
<string name="address_copied_to_clipboard">Adressen kopierades till urklipp</string>
|
||||
<string name="edit_tunnel">Redigera tunnel</string>
|
||||
<string name="name">Namn</string>
|
||||
<string name="description">Beskrivning</string>
|
||||
@ -352,5 +357,6 @@ Läs utgåvenoteringar och licens-information.</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="no_market_app">Ingen marknadsapp hittades. Installera manuellt</string>
|
||||
<string name="unset">Återställ</string>
|
||||
</resources>
|
||||
|
@ -3,11 +3,11 @@
|
||||
<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 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_install">I2P dünyasına hoş geldiniz. Bu uygulama henüz ALPHA geliştirme düzeyindedir ve güçlü bir anonim 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 kuruldu. Lütfen yayım notlarını okuyun. Sürüm:</string>
|
||||
<string name="label_tunnels">Tüneller</string>
|
||||
<string name="label_status">Durum</string>
|
||||
<string name="label_console">Konsol</string>
|
||||
<string name="label_console">Pano</string>
|
||||
<string name="label_addresses">Adresler</string>
|
||||
<string name="label_addressbook">Adres Defteri</string>
|
||||
<string name="label_i2ptunnel_client">İstemci tünelleri</string>
|
||||
@ -61,7 +61,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 isimsiz olmayan şu bağlantıyı kullanın:</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_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>
|
||||
@ -143,7 +143,7 @@
|
||||
<string name="settings_default">Varsayılan</string>
|
||||
<string name="settings_label_advanced">Gelişmiş</string>
|
||||
<string name="settings_label_showStats">Yöneltici istatistikleri</string>
|
||||
<string name="settings_summ_showStats">Ana konsolda ayrıntılı istatistikler görüntülensin</string>
|
||||
<string name="settings_summ_showStats">Ana panoda ayrıntılı istatistikler görüntülensin</string>
|
||||
<string name="settings_label_transports">Aktarımlar</string>
|
||||
<string name="settings_label_maxConns">En fazla bağlantı</string>
|
||||
<string name="settings_label_i2cp">I2CP Arabirimi</string>
|
||||
@ -153,11 +153,11 @@
|
||||
<string name="settings_label_expl_inbound">Geliş tünelleri</string>
|
||||
<string name="settings_label_expl_outbound">Gidiş tünelleri</string>
|
||||
<string name="settings_label_expl_length">Uzunluk</string>
|
||||
<string name="settings_summ_expl_length">%s sıçrama</string>
|
||||
<string name="settings_desc_expl_length">Kullanılacak sıçrama sayısı</string>
|
||||
<string name="settings_label_expl_lengthVariance">Sıçrama çeşitliliği</string>
|
||||
<string name="settings_summ_expl_length">%s durak</string>
|
||||
<string name="settings_desc_expl_length">Kullanılacak durak sayısı</string>
|
||||
<string name="settings_label_expl_lengthVariance">Durak çeşitliliği</string>
|
||||
<string name="settings_summ_expl_lengthVariance">%s</string>
|
||||
<string name="settings_desc_expl_lengthVariance">Rastgele eklenecek sıçrama sayısı</string>
|
||||
<string name="settings_desc_expl_lengthVariance">Rastgele eklenecek durak sayısı</string>
|
||||
<string name="settings_label_expl_quantity">Sayı</string>
|
||||
<string name="settings_summ_expl_quantity">%s tünel</string>
|
||||
<string name="settings_desc_expl_quantity">Tünel sayısı</string>
|
||||
@ -328,7 +328,7 @@
|
||||
<string name="tunnel_summ_referer">\'Referer\' üstbilgisi geçirilsin</string>
|
||||
<string name="tunnel_summ_accept">\'Accept-*\' üstbilgisi geçirilsin</string>
|
||||
<string name="tunnel_summ_allow_ssl">I2P adreslerinde SSL kullanılabilsin</string>
|
||||
<string name="jump_url_list">Adresi listesine sıçra</string>
|
||||
<string name="jump_url_list">Sıçrama adresi listesi</string>
|
||||
<string name="proxy_auth">Vekil sunucu kimlik doğrulaması</string>
|
||||
<string name="tunnel_summ_proxy_auth">Bu vekil sunucuda oturum açmak için kimlik doğrulaması istensin</string>
|
||||
<string name="username">Kullanıcı Adı</string>
|
||||
|
@ -55,6 +55,7 @@
|
||||
<string name="upload">Вивантажено</string>
|
||||
<string name="configure_browser_title">Налаштувати браузер?</string>
|
||||
<string name="configure_browser_for_i2p">Бажаєте налаштувати браузер для перегляду I2P-сайтів? (Ви також можете зробити це пізніше через меню).</string>
|
||||
<string name="configure_no_doze_title">Керувати оптимізації батареї?</string>
|
||||
<string name="first_start_title">Вітаємо! I2P встановлено.</string>
|
||||
<string name="first_start_welcome"><b>Ласкаво просимо до I2P!</b> Будь ласка, <b>зачекайте,</b> так як I2P запускається і шукає піри.</string>
|
||||
<string name="first_start_read">Поки чекаєте, прочитайте, будь ласка, нотатки до релізу і вітальну сторінку.</string>
|
||||
|
@ -109,9 +109,11 @@
|
||||
</string-array>
|
||||
<string-array name="recommended_browsers">
|
||||
<item>acr.browser.lightning</item>
|
||||
<item>io.github.forkmaintainers.iceraven</item>
|
||||
</string-array>
|
||||
<string-array name="recommended_browser_labels">
|
||||
<item>Lightning</item>
|
||||
<item>IceRaven(With Extension)</item>
|
||||
</string-array>
|
||||
<string-array name="supported_browsers">
|
||||
<item>org.mozilla.firefox</item>
|
||||
|
@ -150,6 +150,9 @@
|
||||
<string name="notification_status_expl">Exploratory tunnels: %1$d/%2$d</string>
|
||||
<string name="notification_status_client">Client tunnels: %1$d/%2$d</string>
|
||||
|
||||
<string name="copied_base32_system_notification_title">Base32 copied to clipboard</string>
|
||||
<string name="copied_base32_system_notification_body">The address of your I2P tunnel has been copied to the clipboard.</string>
|
||||
|
||||
<string name="menu_settings">Settings</string>
|
||||
<string name="settings_enable">Enable</string>
|
||||
<string name="settings_desc_subscriptions">Subscription URLs</string>
|
||||
@ -182,7 +185,9 @@
|
||||
<string name="settings_label_transports">Transports</string>
|
||||
<string name="settings_label_maxConns">Max connections</string>
|
||||
<string name="settings_label_i2cp">I2CP interface</string>
|
||||
<string name="settings_desc_i2cp">Allow third-party apps to create tunnels (requires router restart)</string>
|
||||
<string name="settings_desc_i2cp">Allow third-party apps to create tunnels using I2CP (requires router restart)</string>
|
||||
<string name="settings_label_sam">SAM interface</string>
|
||||
<string name="settings_desc_sam">Allow third-party apps to create tunnels using SAM (requires router restart)</string>
|
||||
<string name="settings_label_exploratory_pool">Exploratory pool</string>
|
||||
<string name="settings_desc_exploratory_pool">Tunnel parameters</string>
|
||||
<string name="settings_label_expl_inbound">Inbound tunnels</string>
|
||||
@ -415,4 +420,5 @@
|
||||
<string name="no_market_app">No market app found, please install manually</string>
|
||||
|
||||
<string name="unset">Unset</string>
|
||||
<string name="running_background">I2P is running in the background</string>
|
||||
</resources>
|
||||
|
@ -23,6 +23,13 @@
|
||||
android:summary="@string/settings_desc_i2cp"
|
||||
/>
|
||||
|
||||
<CheckBoxPreference
|
||||
android:key="i2pandroid.client.sam"
|
||||
android:defaultValue="true"
|
||||
android:title="@string/settings_label_sam"
|
||||
android:summary="@string/settings_desc_sam"
|
||||
/>
|
||||
|
||||
<Preference
|
||||
android:key="preference_category_expl_tunnels"
|
||||
android:summary="@string/settings_desc_exploratory_pool"
|
||||
|
@ -408,14 +408,14 @@
|
||||
<target name="copy-i2p-resources" depends="-dirs" >
|
||||
<copy file="LICENSE.txt" tofile="res/raw/license_app_txt" />
|
||||
<copy file="licenses/LICENSE-Apache2.0.txt" tofile="res/raw/license_apache20_txt" />
|
||||
<copy file="${i2pbase}/installer/resources/themes/console/images/i2plogo.png" todir="res/drawable/" />
|
||||
<copy file="${i2pbase}/apps/routerconsole/jsp/themes/console/images/i2plogo.png" todir="res/drawable/" />
|
||||
|
||||
<!-- Static web sources should be in the assets directory. -->
|
||||
<copy file="${i2pbase}/installer/resources/themes/console/images/i2plogo.png" todir="assets/themes/console/images/" />
|
||||
<copy file="${i2pbase}/installer/resources/themes/console/images/outbound.png" todir="assets/themes/console/images/" />
|
||||
<copy file="${i2pbase}/installer/resources/themes/console/images/inbound.png" todir="assets/themes/console/images/" />
|
||||
<copy file="${i2pbase}/installer/resources/themes/console/light/images/header.png" todir="assets/themes/console/light/images/" />
|
||||
<copy file="${i2pbase}/installer/resources/themes/console/light/console.css" todir="assets/themes/console/light/" />
|
||||
<copy file="${i2pbase}/apps/routerconsole/jsp/themes/console/images/i2plogo.png" todir="assets/themes/console/images/" />
|
||||
<copy file="${i2pbase}/apps/routerconsole/jsp/themes/console/images/outbound.png" todir="assets/themes/console/images/" />
|
||||
<copy file="${i2pbase}/apps/routerconsole/jsp/themes/console/images/inbound.png" todir="assets/themes/console/images/" />
|
||||
<copy file="${i2pbase}/apps/routerconsole/jsp/themes/console/light/images/header.png" todir="assets/themes/console/light/images/" />
|
||||
<copy file="${i2pbase}/apps/routerconsole/jsp/themes/console/light/console.css" todir="assets/themes/console/light/" />
|
||||
|
||||
<copy file="${i2pbase}/installer/resources/blocklist.txt" tofile="res/raw/blocklist_txt" />
|
||||
<copy file="${i2pbase}/installer/resources/hosts.txt" tofile="res/raw/hosts_txt" />
|
||||
|
@ -10,11 +10,11 @@ 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
|
||||
POM_DEVELOPER_ID=meeh
|
||||
POM_DEVELOPER_NAME=meeh
|
||||
POM_DEVELOPER_EMAIL=meeh@i2pmail.org
|
||||
POM_DEVELOPER_ID=idk
|
||||
POM_DEVELOPER_NAME=idk
|
||||
POM_DEVELOPER_EMAIL=hankhill19580@gmail.com
|
||||
|
||||
I2P_VERSION=0.9.45
|
||||
ANDROID_BUILD_TARGET_SDK_VERSION=28
|
||||
ANDROID_BUILD_TARGET_SDK_VERSION=29
|
||||
ANDROID_BUILD_SDK_VERSION=28
|
||||
|
||||
I2P_VERSION=0.9.49
|
||||
|
@ -3,7 +3,7 @@
|
||||
<string name="yes">Oui</string>
|
||||
<string name="no">Non</string>
|
||||
<string name="install_i2p_android">Installer I2P pour Android ?</string>
|
||||
<string name="you_must_have_i2p_android">I2P pour Android doit être installé et en fonction. Souhaitez-vous l’installer ?</string>
|
||||
<string name="you_must_have_i2p_android">I2P pour Android doit être installé et en fonction. Voulez-vous l’installer ?</string>
|
||||
<string name="start_i2p_android">Démarrer I2P pour Android ?</string>
|
||||
<string name="would_you_like_to_start_i2p_android">Il semblerait qu’I2P pour Android ne soit pas en fonction. Souhaitez-vous le démarrer ?</string>
|
||||
<string name="would_you_like_to_start_i2p_android">Il semblerait qu’I2P pour Android ne soit pas en fonction. Voulez-vous le démarrer ?</string>
|
||||
</resources>
|
||||
|
9
lib/helper/src/main/res/values-tk/strings.xml
Normal file
9
lib/helper/src/main/res/values-tk/strings.xml
Normal file
@ -0,0 +1,9 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<resources>
|
||||
<string name="yes">Evet</string>
|
||||
<string name="no">Hayır</string>
|
||||
<string name="install_i2p_android">I2P Android guruň?</string>
|
||||
<string name="you_must_have_i2p_android">I2P Android gurnalan we işleýän bolmaly. Gurmak isleýärsiňizmi?</string>
|
||||
<string name="start_i2p_android">I2P Android başlaň?</string>
|
||||
<string name="would_you_like_to_start_i2p_android">I2P Android işlemeýän ýaly. Başlamak isleýärsiňizmi?</string>
|
||||
</resources>
|
@ -13,6 +13,7 @@ artifacts {
|
||||
routerjars file: file('libs/i2ptunnel.jar'), builtBy: buildRouter
|
||||
routerjars file: file('libs/i2ptunnel-ui.jar'), builtBy: buildRouter
|
||||
routerjars file: file('libs/addressbook.jar'), builtBy: buildRouter
|
||||
routerjars file: file('libs/sam.jar'), builtBy: buildRouter
|
||||
//routerjars file: file('libs/BOB.jar'), builtBy: buildRouter
|
||||
}
|
||||
clean.dependsOn cleanBuildRouter
|
||||
|
@ -20,6 +20,7 @@
|
||||
<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.sam" file="${i2plib}/sam.jar" />
|
||||
<available property="have.addressbook" file="${i2plib}/addressbook.jar" />
|
||||
|
||||
<target name="buildNewsXMLJar" unless="have.newsxml">
|
||||
@ -36,7 +37,11 @@
|
||||
<ant dir="${i2pbase}" inheritall="false" useNativeBasedir="true" target="buildBOB" />
|
||||
</target>
|
||||
|
||||
<target name="buildrouter" depends="buildNewsXMLJar, buildI2PTunnelJar, buildAddressbook">
|
||||
<target name="buildSAM" unless="have.sam">
|
||||
<ant dir="${i2pbase}" inheritall="false" useNativeBasedir="true" target="buildSAM" />
|
||||
</target>
|
||||
|
||||
<target name="buildrouter" depends="buildNewsXMLJar, buildI2PTunnelJar, buildAddressbook, buildSAM">
|
||||
<mkdir dir="${jar.libs.dir}" />
|
||||
|
||||
<!-- newsxml -->
|
||||
@ -50,10 +55,15 @@
|
||||
<copy file="${i2plib}/addressbook.jar" todir="${jar.libs.dir}" />
|
||||
|
||||
<!-- bob -->
|
||||
<!--
|
||||
|
||||
<!--
|
||||
<copy file="${i2plib}/BOB.jar" todir="${jar.libs.dir}" />
|
||||
-->
|
||||
|
||||
<!-- sam -->
|
||||
<copy file="${i2plib}/sam.jar" todir="${jar.libs.dir}" />
|
||||
|
||||
|
||||
</target>
|
||||
|
||||
<target name="clean">
|
||||
|
Reference in New Issue
Block a user