diff --git a/app/build.gradle b/app/build.gradle index 44cf742cf..36c7ca36e 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -41,8 +41,8 @@ android { minSdkVersion 24 targetSdkVersion 36 - versionCode 32 - versionName "10.1.9" + versionCode 33 + versionName "10.1.10" applicationVariants.all { variant -> variant.outputs.all { outputFileName = "Drop-Android.apk" diff --git a/app/src/main/java/com/erikraft/drop/AboutActivity.java b/app/src/main/java/com/erikraft/drop/AboutActivity.java index 97244f5ff..96bd014d2 100644 --- a/app/src/main/java/com/erikraft/drop/AboutActivity.java +++ b/app/src/main/java/com/erikraft/drop/AboutActivity.java @@ -4,7 +4,8 @@ import android.net.Uri; import android.os.Bundle; import android.text.Html; -import android.view.View; +import android.view.Gravity; +import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.ScrollView; import android.widget.TextView; @@ -12,6 +13,7 @@ import com.google.android.material.appbar.MaterialToolbar; import com.google.android.material.button.MaterialButton; import com.google.android.material.card.MaterialCardView; +import com.google.android.material.chip.Chip; /** Stable, self-contained About screen with transparent dependency and attribution information. */ public class AboutActivity extends DropPipActivity { @@ -35,8 +37,20 @@ protected void onCreate(Bundle savedInstanceState) { int pad = dp(20); content.setPadding(pad, dp(18), pad, dp(32)); + LinearLayout appTitleRow = new LinearLayout(this); + appTitleRow.setOrientation(LinearLayout.HORIZONTAL); + appTitleRow.setGravity(Gravity.CENTER_VERTICAL); TextView appName = text(getString(R.string.app_name_long), 28); - content.addView(appName); + appTitleRow.addView(appName, new LinearLayout.LayoutParams(0, -2, 1f)); + + Chip betaBadge = new Chip(this); + betaBadge.setText(R.string.beta_badge_label); + betaBadge.setCheckable(false); + betaBadge.setClickable(false); + betaBadge.setFocusable(false); + betaBadge.setEnsureMinTouchTargetSize(false); + appTitleRow.addView(betaBadge, new LinearLayout.LayoutParams(-2, -2)); + content.addView(appTitleRow); TextView version = text( getString(R.string.about_version_format, BuildConfig.VERSION_NAME, BuildConfig.VERSION_CODE), @@ -60,6 +74,8 @@ protected void onCreate(Bundle savedInstanceState) { missionParams.setMargins(0, dp(18), 0, dp(8)); content.addView(missionCard, missionParams); + addWifiProjectSection(content); + addHeading(content, getString(R.string.about_dependencies_title)); addHtml(content, getString(R.string.about_dependencies_summary), 15); addHtml(content, buildAndroidDependenciesHtml(), 14); @@ -71,7 +87,6 @@ protected void onCreate(Bundle savedInstanceState) { addHtml(content, getString(R.string.about_licenses_summary), 15); addButton(content, getString(R.string.about_licenses_title), "https://github.com/erikraft/Drop-Android/blob/master/LICENSE"); - addHeading(content, getString(R.string.support_us)); addButton(content, "GitHub — ErikrafT Drop™", "https://github.com/erikraft/Drop"); addButton(content, "GitHub — Android", "https://github.com/erikraft/Drop-Android"); @@ -83,6 +98,45 @@ protected void onCreate(Bundle savedInstanceState) { setContentView(root); } + private void addWifiProjectSection(LinearLayout parent) { + MaterialCardView card = new MaterialCardView(this); + card.setRadius(dp(14)); + card.setCardElevation(dp(1)); + card.setStrokeWidth(dp(1)); + card.setUseCompatPadding(true); + + LinearLayout section = new LinearLayout(this); + section.setOrientation(LinearLayout.VERTICAL); + section.setPadding(dp(16), dp(14), dp(16), dp(16)); + + LinearLayout headingRow = new LinearLayout(this); + headingRow.setOrientation(LinearLayout.HORIZONTAL); + headingRow.setGravity(Gravity.CENTER_VERTICAL); + + ImageView icon = new ImageView(this); + icon.setImageResource(R.drawable.ic_erikraft_wifi); + icon.setContentDescription(getString(R.string.about_wifi_title)); + icon.setScaleType(ImageView.ScaleType.FIT_CENTER); + headingRow.addView(icon, new LinearLayout.LayoutParams(dp(54), dp(58))); + + TextView title = text(getString(R.string.about_wifi_title), 20); + LinearLayout.LayoutParams titleParams = new LinearLayout.LayoutParams(0, -2, 1f); + titleParams.setMargins(dp(12), 0, 0, 0); + headingRow.addView(title, titleParams); + section.addView(headingRow); + + TextView description = text(getString(R.string.about_wifi_description), 15); + description.setPadding(0, dp(10), 0, dp(8)); + section.addView(description); + addButton(section, getString(R.string.about_wifi_open_repository), + "https://github.com/erikraft/WiFi"); + + card.addView(section); + LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(-1, -2); + params.setMargins(0, dp(12), 0, dp(8)); + parent.addView(card, params); + } + private String buildAndroidDependenciesHtml() { return "" + getString(R.string.about_dependencies_ui) + "
" + "AndroidX AppCompat 1.7.1
" diff --git a/app/src/main/java/com/erikraft/drop/FtpServerService.java b/app/src/main/java/com/erikraft/drop/FtpServerService.java index b793b5c83..707e37685 100644 --- a/app/src/main/java/com/erikraft/drop/FtpServerService.java +++ b/app/src/main/java/com/erikraft/drop/FtpServerService.java @@ -99,10 +99,12 @@ private void startServer(long generation) { try { android.content.SharedPreferences prefs = androidx.preference.PreferenceManager.getDefaultSharedPreferences(this); int port = parsePort(prefs.getString(getString(R.string.pref_ftp_port), "" + DEFAULT_PORT)); - String username = valueOrDefault(prefs.getString(getString(R.string.pref_ftp_username), ""), "admin"); - String password = valueOrDefault(prefs.getString(getString(R.string.pref_ftp_password), ""), "erikraft"); - boolean anonymous = prefs.getBoolean(getString(R.string.pref_ftp_anonymous), false); - boolean ftps = prefs.getBoolean(getString(R.string.pref_ftp_ftps), true); + String username = valueOrDefault(prefs.getString(getString(R.string.pref_ftp_username), ""), "android"); + String password = valueOrDefault(prefs.getString(getString(R.string.pref_ftp_password), ""), "android"); + boolean anonymous = prefs.getBoolean(getString(R.string.pref_ftp_anonymous), true); + boolean ftps = prefs.getBoolean(getString(R.string.pref_ftp_ftps), false); + boolean implicitFtps = prefs.getBoolean(getString(R.string.pref_ftp_ftps_implicit), false); + boolean readOnly = prefs.getBoolean(getString(R.string.pref_ftp_read_only), false); File home = resolveHome(prefs.getString(getString(R.string.pref_save_location), "")); if (!home.exists() && !home.mkdirs()) throw new IllegalStateException("Não foi possível criar a pasta base: " + home); @@ -120,7 +122,10 @@ private void startServer(long generation) { user.setPassword(password); user.setHomeDirectory(home.getAbsolutePath()); List authorities = new ArrayList<>(); - authorities.add(new WritePermission()); + // Apache FtpServer 1.2.1 has no ReadPermission authority. An empty + // authority list grants no write operations; add WritePermission only + // when the user explicitly enables write access. + if (!readOnly) authorities.add(new WritePermission()); user.setAuthorities(authorities); userManager.save(user); @@ -151,9 +156,9 @@ private void startServer(long generation) { sslFactory.setSslProtocol("TLS"); SslConfiguration ssl = sslFactory.createSslConfiguration(); listener.setSslConfiguration(ssl); - listener.setImplicitSsl(false); + listener.setImplicitSsl(implicitFtps); data.setSslConfiguration(ssl); - data.setImplicitSsl(false); + data.setImplicitSsl(implicitFtps); } listener.setDataConnectionConfiguration(data.createDataConnectionConfiguration()); diff --git a/app/src/main/java/com/erikraft/drop/FtpSettingsActivity.java b/app/src/main/java/com/erikraft/drop/FtpSettingsActivity.java index e30e04396..3e54c7a29 100644 --- a/app/src/main/java/com/erikraft/drop/FtpSettingsActivity.java +++ b/app/src/main/java/com/erikraft/drop/FtpSettingsActivity.java @@ -2,6 +2,13 @@ import android.Manifest; import android.app.Activity; +import android.app.AlertDialog; +import android.graphics.Bitmap; +import android.graphics.Color; +import android.widget.ImageView; +import com.google.zxing.BarcodeFormat; +import com.google.zxing.WriterException; +import com.google.zxing.qrcode.QRCodeWriter; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; @@ -43,6 +50,9 @@ public class FtpSettingsActivity extends DropPipActivity { private TextInputEditText passwordInput; private SwitchCompat anonymousSwitch; private SwitchCompat ftpsSwitch; + private SwitchCompat readOnlySwitch; + private MaterialButton ftpsModeButton; + private TextView networkState; private SwitchCompat stopNotificationSwitch; private TextView directorySummary; private TextView status; @@ -90,7 +100,10 @@ protected void onCreate(Bundle savedInstanceState) { } } catch (SecurityException ignored) { } DocumentFile folder = DocumentFile.fromTreeUri(this, uri); - if (folder == null) return; + if (folder == null || !folder.isDirectory() || !folder.canRead() || !folder.canWrite()) { + Toast.makeText(this, getString(R.string.transfer_error_folder_unsupported), Toast.LENGTH_LONG).show(); + return; + } String path = DocumentFileUtils.getAbsolutePath(folder, this); if (path == null || path.trim().isEmpty()) { Toast.makeText(this, getString(R.string.transfer_error_directory_path), Toast.LENGTH_LONG).show(); @@ -138,18 +151,35 @@ private void buildUi() { }); portInput = field(getString(R.string.ftp_port_hint), prefs.getString(getString(R.string.pref_ftp_port), "2221"), InputType.TYPE_CLASS_NUMBER); content.addView((TextInputLayout) portInput.getTag(), lpTop(dp(12))); - usernameInput = field(getString(R.string.ftp_username_hint), prefs.getString(getString(R.string.pref_ftp_username), "admin"), InputType.TYPE_CLASS_TEXT); + usernameInput = field(getString(R.string.ftp_username_hint), prefs.getString(getString(R.string.pref_ftp_username), "android"), InputType.TYPE_CLASS_TEXT); content.addView((TextInputLayout) usernameInput.getTag(), lpTop(dp(8))); - passwordInput = field(getString(R.string.ftp_password_hint), prefs.getString(getString(R.string.pref_ftp_password), "admin"), InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD); + passwordInput = field(getString(R.string.ftp_password_hint), prefs.getString(getString(R.string.pref_ftp_password), "android"), InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD); content.addView((TextInputLayout) passwordInput.getTag(), lpTop(dp(8))); anonymousSwitch = new SwitchCompat(this); anonymousSwitch.setText(R.string.ftp_anonymous_title); - anonymousSwitch.setChecked(prefs.getBoolean(getString(R.string.pref_ftp_anonymous), false)); + anonymousSwitch.setChecked(prefs.getBoolean(getString(R.string.pref_ftp_anonymous), true)); content.addView(anonymousSwitch, lpTop(dp(8))); ftpsSwitch = new SwitchCompat(this); ftpsSwitch.setText(R.string.ftp_ftps_title); - ftpsSwitch.setChecked(prefs.getBoolean(getString(R.string.pref_ftp_ftps), true)); + ftpsSwitch.setChecked(prefs.getBoolean(getString(R.string.pref_ftp_ftps), false)); content.addView(ftpsSwitch, lpTop(dp(4))); + ftpsModeButton = new MaterialButton(this); + content.addView(ftpsModeButton, lpTop(dp(4))); + updateFtpsModeLabel(); + ftpsModeButton.setOnClickListener(v -> { + final String[] modes = {getString(R.string.ftp_ftps_explicit), getString(R.string.ftp_ftps_implicit)}; + new AlertDialog.Builder(this).setTitle(R.string.ftp_ftps_mode_title) + .setSingleChoiceItems(modes, prefs.getBoolean(getString(R.string.pref_ftp_ftps_implicit), false) ? 1 : 0, + (dialog, which) -> { + prefs.edit().putBoolean(getString(R.string.pref_ftp_ftps_implicit), which == 1).apply(); + updateFtpsModeLabel(); + dialog.dismiss(); + }).setNegativeButton(android.R.string.cancel, null).show(); + }); + readOnlySwitch = new SwitchCompat(this); + readOnlySwitch.setText(R.string.ftp_read_only_title); + readOnlySwitch.setChecked(prefs.getBoolean(getString(R.string.pref_ftp_read_only), false)); + content.addView(readOnlySwitch, lpTop(dp(8))); stopNotificationSwitch = new SwitchCompat(this); stopNotificationSwitch.setText(R.string.ftp_stop_notification_title); stopNotificationSwitch.setChecked(prefs.getBoolean(getString(R.string.pref_ftp_stop_notification), false)); @@ -241,6 +271,7 @@ private void saveAndStart() { .apply(); ContextCompat.startForegroundService(this, FtpServerService.startIntent(this)); status.setText(R.string.ftp_starting); + showConnectionQr(buildAddress()); } private void stopServer() { @@ -258,10 +289,25 @@ private void updateAddress() { private String buildAddress() { String port = prefs.getString(getString(R.string.pref_ftp_port), "2221"); - String scheme = prefs.getBoolean(getString(R.string.pref_ftp_ftps), true) ? "ftps" : "ftp"; + String scheme = prefs.getBoolean(getString(R.string.pref_ftp_ftps), false) ? "ftps" : "ftp"; return scheme + "://" + getWifiAddress() + ":" + port; } + private void updateFtpsModeLabel() { + if (ftpsModeButton == null) return; + boolean implicit = prefs.getBoolean(getString(R.string.pref_ftp_ftps_implicit), false); + ftpsModeButton.setText(getString(R.string.ftp_ftps_mode_label, getString(implicit ? R.string.ftp_ftps_implicit : R.string.ftp_ftps_explicit))); + ftpsModeButton.setEnabled(ftpsSwitch != null && ftpsSwitch.isChecked()); + if (ftpsSwitch != null) ftpsSwitch.setOnCheckedChangeListener((button, checked) -> { if (ftpsModeButton != null) ftpsModeButton.setEnabled(checked); }); + } + + private String buildNetworkStatus() { + android.net.ConnectivityManager cm = (android.net.ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE); + android.net.NetworkInfo info = cm == null ? null : cm.getActiveNetworkInfo(); + boolean wifiConnected = info != null && info.isConnected() && info.getType() == android.net.ConnectivityManager.TYPE_WIFI; + return getString(wifiConnected ? R.string.ftp_wifi_connected : R.string.ftp_wifi_disconnected) + "\n" + getString(R.string.ftp_ip_address, com.erikraft.drop.utils.NetworkUtils.getIpAddress(this)); + } + private String getWifiAddress() { try { for (NetworkInterface network : Collections.list(NetworkInterface.getNetworkInterfaces())) { @@ -285,6 +331,28 @@ private void copyAddress() { Toast.makeText(this, R.string.ftp_address_copied, Toast.LENGTH_SHORT).show(); } + private void showConnectionQr(String connectionAddress) { + try { + com.google.zxing.common.BitMatrix matrix = new QRCodeWriter().encode(connectionAddress, BarcodeFormat.QR_CODE, 480, 480); + Bitmap bitmap = Bitmap.createBitmap(480, 480, Bitmap.Config.RGB_565); + for (int y = 0; y < 480; y++) { + for (int x = 0; x < 480; x++) bitmap.setPixel(x, y, matrix.get(x, y) ? Color.BLACK : Color.WHITE); + } + ImageView image = new ImageView(this); + image.setImageBitmap(bitmap); + image.setAdjustViewBounds(true); + image.setScaleType(ImageView.ScaleType.FIT_CENTER); + int padding = dp(12); + image.setPadding(padding, padding, padding, padding); + image.setLayoutParams(new android.view.ViewGroup.LayoutParams(dp(240), dp(240))); + new AlertDialog.Builder(this).setTitle(R.string.ftp_settings_title) + .setMessage(connectionAddress).setView(image) + .setPositiveButton(android.R.string.ok, null).show(); + } catch (WriterException e) { + Toast.makeText(this, connectionAddress, Toast.LENGTH_LONG).show(); + } + } + private TextView text(String value, float size) { TextView view = new TextView(this); view.setText(value); diff --git a/app/src/main/java/com/erikraft/drop/SftpServerService.java b/app/src/main/java/com/erikraft/drop/SftpServerService.java index b5d5b024f..075a001c6 100644 --- a/app/src/main/java/com/erikraft/drop/SftpServerService.java +++ b/app/src/main/java/com/erikraft/drop/SftpServerService.java @@ -21,6 +21,23 @@ import org.apache.sshd.server.keyprovider.SimpleGeneratorHostKeyProvider; import org.apache.sshd.server.session.ServerSession; import org.apache.sshd.sftp.server.SftpSubsystemFactory; +import org.apache.sshd.sftp.server.SftpFileSystemAccessor; +import org.apache.sshd.sftp.server.SftpSubsystemProxy; +import org.apache.sshd.sftp.server.FileHandle; +import java.io.IOException; +import java.nio.channels.SeekableByteChannel; +import java.nio.file.OpenOption; +import java.nio.file.Path; +import java.nio.file.LinkOption; +import java.nio.file.attribute.FileAttribute; +import java.nio.file.attribute.PosixFilePermission; +import java.nio.file.attribute.UserPrincipal; +import java.nio.file.attribute.GroupPrincipal; +import java.nio.file.attribute.AclEntry; +import java.security.Principal; +import java.util.Collection; +import java.util.Map; +import java.util.Set; import java.io.File; import java.util.Collections; @@ -86,10 +103,11 @@ private void startServer() { PreferenceManager.getDefaultSharedPreferences(this); int port = parsePort(prefs.getString(getString(R.string.pref_sftp_port), "" + DEFAULT_PORT)); String username = valueOrDefault( - prefs.getString(getString(R.string.pref_sftp_username), ""), "admin"); + prefs.getString(getString(R.string.pref_sftp_username), ""), "android"); String password = valueOrDefault( - prefs.getString(getString(R.string.pref_sftp_password), ""), "admin"); + prefs.getString(getString(R.string.pref_sftp_password), ""), "android"); String configuredHome = prefs.getString(getString(R.string.pref_sftp_save_location), ""); + boolean readOnly = prefs.getBoolean(getString(R.string.pref_sftp_read_only), false); File home = new File(configuredHome); if (!home.isDirectory() || !home.canRead() || !home.canWrite()) { throw new IllegalStateException("A pasta SFTP selecionada não pode ser acessada diretamente."); @@ -110,7 +128,9 @@ public boolean authenticate(String user, String pass, ServerSession session) { }); candidate.setFileSystemFactory(new VirtualFileSystemFactory(home.toPath())); candidate.setSubsystemFactories(Collections.singletonList( - new SftpSubsystemFactory.Builder().build())); + new SftpSubsystemFactory.Builder() + .withFileSystemAccessor(readOnly ? new ReadOnlySftpFileSystemAccessor() : SftpFileSystemAccessor.DEFAULT) + .build())); synchronized (LOCK) { if (server != null) { @@ -141,6 +161,44 @@ public boolean authenticate(String user, String pass, ServerSession session) { } + + /** + * Enforces read-only access at the SFTP filesystem boundary, including metadata and + * directory mutations, rather than relying on the settings UI or client behavior. + */ + private static final class ReadOnlySftpFileSystemAccessor implements SftpFileSystemAccessor { + private IOException readOnly() { + return new IOException("SFTP is configured as read-only."); + } + + @Override + public SeekableByteChannel openFile(SftpSubsystemProxy subsystem, FileHandle fileHandle, + Path file, String handle, Set options, FileAttribute... attrs) + throws IOException { + for (OpenOption option : options) { + String name = option.toString(); + if ("WRITE".equals(name) || "APPEND".equals(name) || "CREATE".equals(name) + || "CREATE_NEW".equals(name) || "TRUNCATE_EXISTING".equals(name) + || "DELETE_ON_CLOSE".equals(name)) { + throw readOnly(); + } + } + return SftpFileSystemAccessor.DEFAULT.openFile( + subsystem, fileHandle, file, handle, options, attrs); + } + + @Override public void createDirectory(SftpSubsystemProxy subsystem, Path path) throws IOException { throw readOnly(); } + @Override public void createLink(SftpSubsystemProxy subsystem, Path link, Path existing, boolean symLink) throws IOException { throw readOnly(); } + @Override public void removeFile(SftpSubsystemProxy subsystem, Path path, boolean isDirectory) throws IOException { throw readOnly(); } + @Override public void renameFile(SftpSubsystemProxy subsystem, Path oldPath, Path newPath, Collection opts) throws IOException { throw readOnly(); } + @Override public void copyFile(SftpSubsystemProxy subsystem, Path src, Path dst, Collection opts) throws IOException { throw readOnly(); } + @Override public void setFileAttribute(SftpSubsystemProxy subsystem, Path file, String view, String attribute, Object value, LinkOption... options) throws IOException { throw readOnly(); } + @Override public void setFileOwner(SftpSubsystemProxy subsystem, Path file, Principal value, LinkOption... options) throws IOException { throw readOnly(); } + @Override public void setGroupOwner(SftpSubsystemProxy subsystem, Path file, Principal value, LinkOption... options) throws IOException { throw readOnly(); } + @Override public void setFilePermissions(SftpSubsystemProxy subsystem, Path file, Set perms, LinkOption... options) throws IOException { throw readOnly(); } + @Override public void setFileAccessControl(SftpSubsystemProxy subsystem, Path file, java.util.List acl, LinkOption... options) throws IOException { throw readOnly(); } + } + private int parsePort(String value) { try { int port = Integer.parseInt(value); diff --git a/app/src/main/java/com/erikraft/drop/SftpSettingsActivity.java b/app/src/main/java/com/erikraft/drop/SftpSettingsActivity.java index 012e84aa0..80ade0433 100644 --- a/app/src/main/java/com/erikraft/drop/SftpSettingsActivity.java +++ b/app/src/main/java/com/erikraft/drop/SftpSettingsActivity.java @@ -2,6 +2,13 @@ import android.Manifest; import android.app.Activity; +import android.app.AlertDialog; +import android.graphics.Bitmap; +import android.graphics.Color; +import android.widget.ImageView; +import com.google.zxing.BarcodeFormat; +import com.google.zxing.WriterException; +import com.google.zxing.qrcode.QRCodeWriter; import android.content.Intent; import android.content.BroadcastReceiver; import android.content.Context; @@ -33,6 +40,8 @@ public class SftpSettingsActivity extends DropPipActivity { private ActivityResultLauncher picker; private ActivityResultLauncher notificationPermissionLauncher; private SwitchCompat stopNotificationSwitch; + private SwitchCompat readOnlySwitch; + private TextView networkState; private BroadcastReceiver statusReceiver; @Override protected void onCreate(Bundle state) { @@ -58,7 +67,7 @@ else if((flags&Intent.FLAG_GRANT_READ_URI_PERMISSION)!=0) else if((flags&Intent.FLAG_GRANT_WRITE_URI_PERMISSION)!=0) getContentResolver().takePersistableUriPermission(uri,Intent.FLAG_GRANT_WRITE_URI_PERMISSION);}catch(SecurityException ignored){} DocumentFile df=DocumentFile.fromTreeUri(this,uri); - if(df==null)return; + if(df==null||!df.isDirectory()||!df.canRead()||!df.canWrite()){Toast.makeText(this,getString(R.string.transfer_error_folder_unsupported),Toast.LENGTH_LONG).show();return;} String p=com.anggrayudi.storage.file.DocumentFileUtils.getAbsolutePath(df,this); File f=p==null?null:new File(p); if(f==null||!f.isDirectory()||!f.canRead()||!f.canWrite()){ @@ -97,12 +106,17 @@ private void buildUi(){ MaterialButton choose=new MaterialButton(this);choose.setText(R.string.ftp_choose_directory);c.addView(choose,top(12)); folder=text(p.getString(getString(R.string.pref_sftp_save_location),Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).getPath()),13);folder.setTextIsSelectable(true);c.addView(folder,top(4)); choose.setOnClickListener(v->{Intent i=new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);i.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION|Intent.FLAG_GRANT_WRITE_URI_PERMISSION|Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION|Intent.FLAG_GRANT_PREFIX_URI_PERMISSION);picker.launch(i);}); - port=field(getString(R.string.ftp_port_hint),p.getString(getString(R.string.pref_sftp_port),"2222"));user=field(getString(R.string.ftp_username_hint),p.getString(getString(R.string.pref_sftp_username),"admin"));password=field(getString(R.string.ftp_password_hint),p.getString(getString(R.string.pref_sftp_password),"admin")); + port=field(getString(R.string.ftp_port_hint),p.getString(getString(R.string.pref_sftp_port),"2222"));user=field(getString(R.string.ftp_username_hint),p.getString(getString(R.string.pref_sftp_username),"android"));password=field(getString(R.string.ftp_password_hint),p.getString(getString(R.string.pref_sftp_password),"android")); c.addView((TextInputLayout)port.getTag(),top(12));c.addView((TextInputLayout)user.getTag(),top(8));c.addView((TextInputLayout)password.getTag(),top(8)); + readOnlySwitch = new SwitchCompat(this); + readOnlySwitch.setText(R.string.ftp_read_only_title); + readOnlySwitch.setChecked(p.getBoolean(getString(R.string.pref_sftp_read_only), false)); + c.addView(readOnlySwitch,top(8)); stopNotificationSwitch = new SwitchCompat(this); stopNotificationSwitch.setText(R.string.ftp_stop_notification_title); stopNotificationSwitch.setChecked(p.getBoolean(getString(R.string.pref_sftp_stop_notification), false)); c.addView(stopNotificationSwitch,top(10)); + networkState=text(buildNetworkStatus(),13);c.addView(networkState,top(12)); status=text(initialStatus == null ? getString(R.string.server_status_stopped) : initialStatus,15);c.addView(status,top(18));address=text("",14);address.setTextIsSelectable(true);c.addView(address,top(4)); serverToggleButton=button(getString(R.string.sftp_start));c.addView(serverToggleButton,top(14)); MaterialButton copy=button(getString(R.string.ftp_copy_address));c.addView(copy,top(8)); @@ -142,11 +156,39 @@ private void startServer(){ int po;try{po=Integer.parseInt(port.getText().toString());}catch(Exception e){Toast.makeText(this,getString(R.string.transfer_error_invalid_port),Toast.LENGTH_SHORT).show();return;} if(po<1025||po>65535){Toast.makeText(this,getString(R.string.transfer_error_port_range),Toast.LENGTH_SHORT).show();return;} String u=user.getText().toString().trim(),pw=password.getText().toString();if(u.isEmpty()||pw.isEmpty()){Toast.makeText(this,getString(R.string.transfer_error_credentials_required),Toast.LENGTH_SHORT).show();return;} - p.edit().putString(getString(R.string.pref_sftp_save_location),f.getAbsolutePath()).putString(getString(R.string.pref_sftp_port),String.valueOf(po)).putString(getString(R.string.pref_sftp_username),u).putString(getString(R.string.pref_sftp_password),pw).putBoolean(getString(R.string.pref_sftp_stop_notification), stopNotificationSwitch.isChecked()).apply(); - androidx.core.content.ContextCompat.startForegroundService(this, SftpServerService.startIntent(this));status.setText(R.string.ftp_starting);address.setText("sftp://"+com.erikraft.drop.utils.NetworkUtils.getIpAddress(this)+":"+po); + p.edit().putString(getString(R.string.pref_sftp_save_location),f.getAbsolutePath()).putString(getString(R.string.pref_sftp_port),String.valueOf(po)).putString(getString(R.string.pref_sftp_username),u).putString(getString(R.string.pref_sftp_password),pw).putBoolean(getString(R.string.pref_sftp_read_only), readOnlySwitch.isChecked()).putBoolean(getString(R.string.pref_sftp_stop_notification), stopNotificationSwitch.isChecked()).apply(); + androidx.core.content.ContextCompat.startForegroundService(this, SftpServerService.startIntent(this));status.setText(R.string.ftp_starting);address.setText("sftp://"+com.erikraft.drop.utils.NetworkUtils.getIpAddress(this)+":"+po);showConnectionQr(address.getText().toString()); + } + private String buildNetworkStatus() { + android.net.ConnectivityManager cm=(android.net.ConnectivityManager)getSystemService(CONNECTIVITY_SERVICE); + android.net.NetworkInfo info=cm==null?null:cm.getActiveNetworkInfo(); + boolean wifiConnected=info!=null&&info.isConnected()&&info.getType()==android.net.ConnectivityManager.TYPE_WIFI; + return getString(wifiConnected?R.string.ftp_wifi_connected:R.string.ftp_wifi_disconnected)+"\n"+getString(R.string.ftp_ip_address,com.erikraft.drop.utils.NetworkUtils.getIpAddress(this)); } private void stopServer(){startService(SftpServerService.stopIntent(this));} private void updateServerToggle(boolean running){if(serverToggleButton!=null)serverToggleButton.setText(running?R.string.sftp_stop:R.string.sftp_start);} + private void showConnectionQr(String connectionAddress) { + try { + com.google.zxing.common.BitMatrix matrix = new QRCodeWriter().encode(connectionAddress, BarcodeFormat.QR_CODE, 480, 480); + Bitmap bitmap = Bitmap.createBitmap(480, 480, Bitmap.Config.RGB_565); + for (int y = 0; y < 480; y++) { + for (int x = 0; x < 480; x++) bitmap.setPixel(x, y, matrix.get(x, y) ? Color.BLACK : Color.WHITE); + } + ImageView image = new ImageView(this); + image.setImageBitmap(bitmap); + image.setAdjustViewBounds(true); + image.setScaleType(ImageView.ScaleType.FIT_CENTER); + int padding = dp(12); + image.setPadding(padding, padding, padding, padding); + image.setLayoutParams(new android.view.ViewGroup.LayoutParams(dp(240), dp(240))); + new AlertDialog.Builder(this).setTitle(R.string.sftp_settings_title) + .setMessage(connectionAddress).setView(image) + .setPositiveButton(android.R.string.ok, null).show(); + } catch (WriterException e) { + Toast.makeText(this, connectionAddress, Toast.LENGTH_LONG).show(); + } + } + @Override protected void onDestroy(){ if(statusReceiver!=null) unregisterReceiver(statusReceiver); super.onDestroy(); } private TextInputEditText field(String h,String v){TextInputLayout l=new TextInputLayout(this);l.setHint(h);if(getString(R.string.ftp_password_hint).equals(h))l.setEndIconMode(TextInputLayout.END_ICON_PASSWORD_TOGGLE);TextInputEditText e=new TextInputEditText(this);e.setSingleLine(true);e.setText(v);l.addView(e,new LinearLayout.LayoutParams(-1,-2));e.setTag(l);return e;} private MaterialButton button(String label){MaterialButton b=new MaterialButton(this);b.setText(label);return b;} diff --git a/app/src/main/res/drawable/ic_erikraft_wifi.xml b/app/src/main/res/drawable/ic_erikraft_wifi.xml new file mode 100644 index 000000000..99a6ffe99 --- /dev/null +++ b/app/src/main/res/drawable/ic_erikraft_wifi.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values-af-rZA/ftp_sftp.xml b/app/src/main/res/values-af-rZA/ftp_sftp.xml new file mode 100644 index 000000000..290380c80 --- /dev/null +++ b/app/src/main/res/values-af-rZA/ftp_sftp.xml @@ -0,0 +1,10 @@ + + FTPS-sekuriteitsmodus + Eksplisiete FTPS (aanbeveel) + Implisiete FTPS + FTPS-modus: %1$s + Slegs-lees-toegang + Wi-Fi: gekoppel + Wi-Fi: nie gekoppel nie (ander netwerk of vanlyn) + Plaaslike IP-adres: %1$s + diff --git a/app/src/main/res/values-af-rZA/wifi_about.xml b/app/src/main/res/values-af-rZA/wifi_about.xml new file mode 100644 index 000000000..d9d074120 --- /dev/null +++ b/app/src/main/res/values-af-rZA/wifi_about.xml @@ -0,0 +1,6 @@ + + + ErikrafT Wi-Fi™ + \'n Oopbronprojek vir Wi-Fi, Wi-Fi Direct en mesh-netwerke vir vanlyn kommunikasie en internettoegang deur versoenbare poorte. + Verken ErikrafT Wi-Fi™ + \ No newline at end of file diff --git a/app/src/main/res/values-ar-rSA/ftp_sftp.xml b/app/src/main/res/values-ar-rSA/ftp_sftp.xml new file mode 100644 index 000000000..46b5351bf --- /dev/null +++ b/app/src/main/res/values-ar-rSA/ftp_sftp.xml @@ -0,0 +1,10 @@ + + وضع أمان FTPS + FTPS صريح (موصى به) + FTPS ضمني + وضع FTPS: %1$s + وصول للقراءة فقط + Wi‑Fi: متصل + Wi‑Fi: غير متصل (شبكة أخرى أو دون اتصال) + عنوان IP المحلي: %1$s + diff --git a/app/src/main/res/values-ar-rSA/wifi_about.xml b/app/src/main/res/values-ar-rSA/wifi_about.xml new file mode 100644 index 000000000..20634f7ba --- /dev/null +++ b/app/src/main/res/values-ar-rSA/wifi_about.xml @@ -0,0 +1,6 @@ + + + ErikrafT Wi-Fi™ + مشروع مفتوح المصدر لشبكات Wi-Fi وWi-Fi Direct والشبكات المتداخلة للاتصال دون اتصال بالإنترنت والوصول إليه عبر البوابات المتوافقة. + استكشف ErikrafT Wi-Fi™ + \ No newline at end of file diff --git a/app/src/main/res/values-bg-rBG/ftp_sftp.xml b/app/src/main/res/values-bg-rBG/ftp_sftp.xml new file mode 100644 index 000000000..6ed613767 --- /dev/null +++ b/app/src/main/res/values-bg-rBG/ftp_sftp.xml @@ -0,0 +1,10 @@ + + Режим на защита FTPS + Изричен FTPS (препоръчително) + Неявен FTPS + Режим FTPS: %1$s + Достъп само за четене + Wi‑Fi: свързан + Wi‑Fi: няма връзка (друга мрежа или офлайн) + Локален IP адрес: %1$s + diff --git a/app/src/main/res/values-bg-rBG/wifi_about.xml b/app/src/main/res/values-bg-rBG/wifi_about.xml new file mode 100644 index 000000000..1119e5cde --- /dev/null +++ b/app/src/main/res/values-bg-rBG/wifi_about.xml @@ -0,0 +1,6 @@ + + + ErikrafT Wi-Fi™ + Проект с отворен код за Wi-Fi, Wi-Fi Direct и mesh мрежи за офлайн комуникация и достъп до интернет чрез съвместими шлюзове. + Разгледайте ErikrafT Wi-Fi™ + \ No newline at end of file diff --git a/app/src/main/res/values-ca-rES/ftp_sftp.xml b/app/src/main/res/values-ca-rES/ftp_sftp.xml new file mode 100644 index 000000000..0abc38b78 --- /dev/null +++ b/app/src/main/res/values-ca-rES/ftp_sftp.xml @@ -0,0 +1,10 @@ + + Mode de seguretat FTPS + FTPS explícit (recomanat) + FTPS implícit + Mode FTPS: %1$s + Accés només de lectura + Wi-Fi: connectat + Wi-Fi: no connectat (una altra xarxa o sense connexió) + Adreça IP local: %1$s + diff --git a/app/src/main/res/values-ca-rES/wifi_about.xml b/app/src/main/res/values-ca-rES/wifi_about.xml new file mode 100644 index 000000000..61603cef4 --- /dev/null +++ b/app/src/main/res/values-ca-rES/wifi_about.xml @@ -0,0 +1,6 @@ + + + ErikrafT Wi-Fi™ + Projecte de codi obert per a Wi-Fi, Wi-Fi Direct i xarxes mesh per a la comunicació sense connexió i l’accés a Internet mitjançant passarel·les compatibles. + Explora ErikrafT Wi-Fi™ + \ No newline at end of file diff --git a/app/src/main/res/values-cs-rCZ/ftp_sftp.xml b/app/src/main/res/values-cs-rCZ/ftp_sftp.xml new file mode 100644 index 000000000..97488ba99 --- /dev/null +++ b/app/src/main/res/values-cs-rCZ/ftp_sftp.xml @@ -0,0 +1,10 @@ + + Režim zabezpečení FTPS + Explicitní FTPS (doporučeno) + Implicitní FTPS + Režim FTPS: %1$s + Přístup pouze pro čtení + Wi‑Fi: připojeno + Wi‑Fi: nepřipojeno (jiná síť nebo offline) + Místní IP adresa: %1$s + diff --git a/app/src/main/res/values-cs-rCZ/wifi_about.xml b/app/src/main/res/values-cs-rCZ/wifi_about.xml new file mode 100644 index 000000000..9b722c06d --- /dev/null +++ b/app/src/main/res/values-cs-rCZ/wifi_about.xml @@ -0,0 +1,6 @@ + + + ErikrafT Wi-Fi™ + Open-source projekt pro Wi-Fi, Wi-Fi Direct a mesh sítě pro offline komunikaci a přístup k internetu přes kompatibilní brány. + Prozkoumat ErikrafT Wi-Fi™ + \ No newline at end of file diff --git a/app/src/main/res/values-da-rDK/ftp_sftp.xml b/app/src/main/res/values-da-rDK/ftp_sftp.xml new file mode 100644 index 000000000..3aef115f4 --- /dev/null +++ b/app/src/main/res/values-da-rDK/ftp_sftp.xml @@ -0,0 +1,10 @@ + + FTPS-sikkerhedstilstand + Eksplicit FTPS (anbefalet) + Implicit FTPS + FTPS-tilstand: %1$s + Skrivebeskyttet adgang + Wi-Fi: tilsluttet + Wi-Fi: ikke tilsluttet (andet netværk eller offline) + Lokal IP-adresse: %1$s + diff --git a/app/src/main/res/values-da-rDK/wifi_about.xml b/app/src/main/res/values-da-rDK/wifi_about.xml new file mode 100644 index 000000000..2fd2e7647 --- /dev/null +++ b/app/src/main/res/values-da-rDK/wifi_about.xml @@ -0,0 +1,6 @@ + + + ErikrafT Wi-Fi™ + Et open source-projekt til Wi-Fi, Wi-Fi Direct og mesh-netværk til offlinekommunikation og internetadgang via kompatible gateways. + Udforsk ErikrafT Wi-Fi™ + \ No newline at end of file diff --git a/app/src/main/res/values-de-rDE/ftp_sftp.xml b/app/src/main/res/values-de-rDE/ftp_sftp.xml new file mode 100644 index 000000000..4edf5cad9 --- /dev/null +++ b/app/src/main/res/values-de-rDE/ftp_sftp.xml @@ -0,0 +1,10 @@ + + FTPS-Sicherheitsmodus + Explizites FTPS (empfohlen) + Implizites FTPS + FTPS-Modus: %1$s + Schreibgeschützter Zugriff + WLAN: verbunden + WLAN: nicht verbunden (anderes Netzwerk oder offline) + Lokale IP-Adresse: %1$s + diff --git a/app/src/main/res/values-de-rDE/wifi_about.xml b/app/src/main/res/values-de-rDE/wifi_about.xml new file mode 100644 index 000000000..777e34779 --- /dev/null +++ b/app/src/main/res/values-de-rDE/wifi_about.xml @@ -0,0 +1,6 @@ + + + ErikrafT Wi-Fi™ + Ein Open-Source-Projekt für Wi-Fi, Wi-Fi Direct und Mesh-Netzwerke zur Offline-Kommunikation und zum Internetzugang über kompatible Gateways. + ErikrafT Wi-Fi™ entdecken + \ No newline at end of file diff --git a/app/src/main/res/values-el-rGR/ftp_sftp.xml b/app/src/main/res/values-el-rGR/ftp_sftp.xml new file mode 100644 index 000000000..067d6b0b9 --- /dev/null +++ b/app/src/main/res/values-el-rGR/ftp_sftp.xml @@ -0,0 +1,10 @@ + + Λειτουργία ασφαλείας FTPS + Ρητό FTPS (συνιστάται) + Έμμεσο FTPS + Λειτουργία FTPS: %1$s + Πρόσβαση μόνο για ανάγνωση + Wi‑Fi: συνδεδεμένο + Wi‑Fi: χωρίς σύνδεση (άλλο δίκτυο ή εκτός σύνδεσης) + Τοπική διεύθυνση IP: %1$s + diff --git a/app/src/main/res/values-el-rGR/wifi_about.xml b/app/src/main/res/values-el-rGR/wifi_about.xml new file mode 100644 index 000000000..7ba766a61 --- /dev/null +++ b/app/src/main/res/values-el-rGR/wifi_about.xml @@ -0,0 +1,6 @@ + + + ErikrafT Wi-Fi™ + Ένα έργο ανοιχτού κώδικα για Wi-Fi, Wi-Fi Direct και δικτυώσεις mesh για επικοινωνία εκτός σύνδεσης και πρόσβαση στο διαδίκτυο μέσω συμβατών πυλών. + Εξερευνήστε το ErikrafT Wi-Fi™ + \ No newline at end of file diff --git a/app/src/main/res/values-es-rES/ftp_sftp.xml b/app/src/main/res/values-es-rES/ftp_sftp.xml new file mode 100644 index 000000000..4b08e4d7d --- /dev/null +++ b/app/src/main/res/values-es-rES/ftp_sftp.xml @@ -0,0 +1,10 @@ + + Modo de seguridad FTPS + FTPS explícito (recomendado) + FTPS implícito + Modo FTPS: %1$s + Acceso de solo lectura + Wi-Fi: conectado + Wi-Fi: no conectado (otra red o sin conexión) + Dirección IP local: %1$s + diff --git a/app/src/main/res/values-es-rES/wifi_about.xml b/app/src/main/res/values-es-rES/wifi_about.xml new file mode 100644 index 000000000..c4f53e3a2 --- /dev/null +++ b/app/src/main/res/values-es-rES/wifi_about.xml @@ -0,0 +1,6 @@ + + + ErikrafT Wi-Fi™ + Un proyecto de código abierto para Wi-Fi, Wi-Fi Direct y redes mesh, destinado a la comunicación sin conexión y al acceso a Internet mediante puertas de enlace compatibles. + Explorar ErikrafT Wi-Fi™ + \ No newline at end of file diff --git a/app/src/main/res/values-fi-rFI/ftp_sftp.xml b/app/src/main/res/values-fi-rFI/ftp_sftp.xml new file mode 100644 index 000000000..6be308c97 --- /dev/null +++ b/app/src/main/res/values-fi-rFI/ftp_sftp.xml @@ -0,0 +1,10 @@ + + FTPS-suojaustila + Eksplisiittinen FTPS (suositus) + Implisiittinen FTPS + FTPS-tila: %1$s + Vain luku -käyttöoikeus + Wi-Fi: yhdistetty + Wi-Fi: ei yhteyttä (toinen verkko tai offline) + Paikallinen IP-osoite: %1$s + diff --git a/app/src/main/res/values-fi-rFI/wifi_about.xml b/app/src/main/res/values-fi-rFI/wifi_about.xml new file mode 100644 index 000000000..71d9f938e --- /dev/null +++ b/app/src/main/res/values-fi-rFI/wifi_about.xml @@ -0,0 +1,6 @@ + + + ErikrafT Wi-Fi™ + Avoimen lähdekoodin projekti Wi-Fi-, Wi-Fi Direct- ja mesh-verkoille offline-viestintään ja internetyhteyteen yhteensopivien yhdyskäytävien kautta. + Tutustu ErikrafT Wi-Fi™ -projektiin + \ No newline at end of file diff --git a/app/src/main/res/values-fr-rFR/ftp_sftp.xml b/app/src/main/res/values-fr-rFR/ftp_sftp.xml new file mode 100644 index 000000000..b97bb2df0 --- /dev/null +++ b/app/src/main/res/values-fr-rFR/ftp_sftp.xml @@ -0,0 +1,10 @@ + + Mode de sécurité FTPS + FTPS explicite (recommandé) + FTPS implicite + Mode FTPS : %1$s + Accès en lecture seule + Wi-Fi : connecté + Wi-Fi : non connecté (autre réseau ou hors ligne) + Adresse IP locale : %1$s + diff --git a/app/src/main/res/values-fr-rFR/wifi_about.xml b/app/src/main/res/values-fr-rFR/wifi_about.xml new file mode 100644 index 000000000..66b538be0 --- /dev/null +++ b/app/src/main/res/values-fr-rFR/wifi_about.xml @@ -0,0 +1,6 @@ + + + ErikrafT Wi-Fi™ + Un projet open source pour le Wi-Fi, Wi-Fi Direct et les réseaux maillés, destiné aux communications hors ligne et à l’accès à Internet via des passerelles compatibles. + Découvrir ErikrafT Wi-Fi™ + \ No newline at end of file diff --git a/app/src/main/res/values-hi-rIN/ftp_sftp.xml b/app/src/main/res/values-hi-rIN/ftp_sftp.xml new file mode 100644 index 000000000..c1c863326 --- /dev/null +++ b/app/src/main/res/values-hi-rIN/ftp_sftp.xml @@ -0,0 +1,10 @@ + + FTPS सुरक्षा मोड + एक्सप्लिसिट FTPS (अनुशंसित) + इम्प्लिसिट FTPS + FTPS मोड: %1$s + केवल-पढ़ने की पहुँच + Wi‑Fi: कनेक्ट है + Wi‑Fi: कनेक्ट नहीं है (दूसरा नेटवर्क या ऑफ़लाइन) + स्थानीय IP पता: %1$s + diff --git a/app/src/main/res/values-hi-rIN/wifi_about.xml b/app/src/main/res/values-hi-rIN/wifi_about.xml new file mode 100644 index 000000000..b2eceb156 --- /dev/null +++ b/app/src/main/res/values-hi-rIN/wifi_about.xml @@ -0,0 +1,6 @@ + + + ErikrafT Wi-Fi™ + Wi-Fi, Wi-Fi Direct और mesh नेटवर्क के लिए एक ओपन-सोर्स प्रोजेक्ट, जो ऑफ़लाइन संचार और संगत गेटवे के माध्यम से इंटरनेट एक्सेस प्रदान करता है। + ErikrafT Wi-Fi™ देखें + \ No newline at end of file diff --git a/app/src/main/res/values-hr-rHR/ftp_sftp.xml b/app/src/main/res/values-hr-rHR/ftp_sftp.xml new file mode 100644 index 000000000..5d45e7295 --- /dev/null +++ b/app/src/main/res/values-hr-rHR/ftp_sftp.xml @@ -0,0 +1,10 @@ + + Sigurnosni način FTPS-a + Eksplicitni FTPS (preporučeno) + Implicitni FTPS + Način FTPS-a: %1$s + Pristup samo za čitanje + Wi-Fi: povezano + Wi-Fi: nije povezano (druga mreža ili izvan mreže) + Lokalna IP adresa: %1$s + diff --git a/app/src/main/res/values-hr-rHR/wifi_about.xml b/app/src/main/res/values-hr-rHR/wifi_about.xml new file mode 100644 index 000000000..844b3c450 --- /dev/null +++ b/app/src/main/res/values-hr-rHR/wifi_about.xml @@ -0,0 +1,6 @@ + + + ErikrafT Wi-Fi™ + Projekt otvorenog koda za Wi-Fi, Wi-Fi Direct i mesh mreže za komunikaciju izvan mreže i pristup internetu putem kompatibilnih pristupnika. + Istraži ErikrafT Wi-Fi™ + \ No newline at end of file diff --git a/app/src/main/res/values-hu-rHU/ftp_sftp.xml b/app/src/main/res/values-hu-rHU/ftp_sftp.xml new file mode 100644 index 000000000..1b630df65 --- /dev/null +++ b/app/src/main/res/values-hu-rHU/ftp_sftp.xml @@ -0,0 +1,10 @@ + + FTPS biztonsági mód + Explicit FTPS (ajánlott) + Implicit FTPS + FTPS mód: %1$s + Csak olvasási hozzáférés + Wi-Fi: csatlakoztatva + Wi-Fi: nincs csatlakoztatva (másik hálózat vagy offline) + Helyi IP-cím: %1$s + diff --git a/app/src/main/res/values-hu-rHU/wifi_about.xml b/app/src/main/res/values-hu-rHU/wifi_about.xml new file mode 100644 index 000000000..fb7957acf --- /dev/null +++ b/app/src/main/res/values-hu-rHU/wifi_about.xml @@ -0,0 +1,6 @@ + + + ErikrafT Wi-Fi™ + Nyílt forráskódú projekt Wi-Fi-, Wi-Fi Direct- és mesh-hálózatokhoz, offline kommunikációhoz és kompatibilis átjárókon keresztüli interneteléréshez. + ErikrafT Wi-Fi™ felfedezése + \ No newline at end of file diff --git a/app/src/main/res/values-in-rID/ftp_sftp.xml b/app/src/main/res/values-in-rID/ftp_sftp.xml new file mode 100644 index 000000000..62182b5bf --- /dev/null +++ b/app/src/main/res/values-in-rID/ftp_sftp.xml @@ -0,0 +1,10 @@ + + Mode keamanan FTPS + FTPS eksplisit (disarankan) + FTPS implisit + Mode FTPS: %1$s + Akses hanya-baca + Wi-Fi: terhubung + Wi-Fi: tidak terhubung (jaringan lain atau offline) + Alamat IP lokal: %1$s + diff --git a/app/src/main/res/values-in-rID/wifi_about.xml b/app/src/main/res/values-in-rID/wifi_about.xml new file mode 100644 index 000000000..3085962b7 --- /dev/null +++ b/app/src/main/res/values-in-rID/wifi_about.xml @@ -0,0 +1,6 @@ + + + ErikrafT Wi-Fi™ + Proyek sumber terbuka untuk Wi-Fi, Wi-Fi Direct, dan jaringan mesh untuk komunikasi offline serta akses internet melalui gateway yang kompatibel. + Jelajahi ErikrafT Wi-Fi™ + \ No newline at end of file diff --git a/app/src/main/res/values-it-rIT/ftp_sftp.xml b/app/src/main/res/values-it-rIT/ftp_sftp.xml new file mode 100644 index 000000000..3ba8f8c3d --- /dev/null +++ b/app/src/main/res/values-it-rIT/ftp_sftp.xml @@ -0,0 +1,10 @@ + + Modalità di sicurezza FTPS + FTPS esplicito (consigliato) + FTPS implicito + Modalità FTPS: %1$s + Accesso in sola lettura + Wi-Fi: connesso + Wi-Fi: non connesso (altra rete o offline) + Indirizzo IP locale: %1$s + diff --git a/app/src/main/res/values-it-rIT/wifi_about.xml b/app/src/main/res/values-it-rIT/wifi_about.xml new file mode 100644 index 000000000..36e5bd46e --- /dev/null +++ b/app/src/main/res/values-it-rIT/wifi_about.xml @@ -0,0 +1,6 @@ + + + ErikrafT Wi-Fi™ + Un progetto open source per Wi-Fi, Wi-Fi Direct e reti mesh, dedicato alla comunicazione offline e all’accesso a Internet tramite gateway compatibili. + Scopri ErikrafT Wi-Fi™ + \ No newline at end of file diff --git a/app/src/main/res/values-iw-rIL/ftp_sftp.xml b/app/src/main/res/values-iw-rIL/ftp_sftp.xml new file mode 100644 index 000000000..01d1d1673 --- /dev/null +++ b/app/src/main/res/values-iw-rIL/ftp_sftp.xml @@ -0,0 +1,10 @@ + + מצב אבטחת FTPS + FTPS מפורש (מומלץ) + FTPS משתמע + מצב FTPS: %1$s + גישה לקריאה בלבד + Wi‑Fi: מחובר + Wi‑Fi: לא מחובר (רשת אחרת או לא מקוון) + כתובת IP מקומית: %1$s + diff --git a/app/src/main/res/values-iw-rIL/wifi_about.xml b/app/src/main/res/values-iw-rIL/wifi_about.xml new file mode 100644 index 000000000..712e85ac7 --- /dev/null +++ b/app/src/main/res/values-iw-rIL/wifi_about.xml @@ -0,0 +1,6 @@ + + + ErikrafT Wi-Fi™ + פרויקט קוד פתוח ל-Wi-Fi, ‏Wi-Fi Direct ורשתות Mesh לתקשורת לא מקוונת ולגישה לאינטרנט דרך שערים תואמים. + לגלות את ErikrafT Wi-Fi™ + \ No newline at end of file diff --git a/app/src/main/res/values-ja-rJP/ftp_sftp.xml b/app/src/main/res/values-ja-rJP/ftp_sftp.xml new file mode 100644 index 000000000..4438140b3 --- /dev/null +++ b/app/src/main/res/values-ja-rJP/ftp_sftp.xml @@ -0,0 +1,10 @@ + + FTPS セキュリティモード + 明示的 FTPS(推奨) + 暗黙的 FTPS + FTPS モード: %1$s + 読み取り専用アクセス + Wi‑Fi: 接続済み + Wi‑Fi: 未接続(別のネットワークまたはオフライン) + ローカル IP アドレス: %1$s + diff --git a/app/src/main/res/values-ja-rJP/wifi_about.xml b/app/src/main/res/values-ja-rJP/wifi_about.xml new file mode 100644 index 000000000..5896a0cf6 --- /dev/null +++ b/app/src/main/res/values-ja-rJP/wifi_about.xml @@ -0,0 +1,6 @@ + + + ErikrafT Wi-Fi™ + Wi-Fi、Wi-Fi Direct、メッシュネットワークを活用し、オフライン通信や対応ゲートウェイ経由のインターネット接続を実現するオープンソースプロジェクトです。 + ErikrafT Wi-Fi™ を見る + \ No newline at end of file diff --git a/app/src/main/res/values-ko-rKR/ftp_sftp.xml b/app/src/main/res/values-ko-rKR/ftp_sftp.xml new file mode 100644 index 000000000..1b7746335 --- /dev/null +++ b/app/src/main/res/values-ko-rKR/ftp_sftp.xml @@ -0,0 +1,10 @@ + + FTPS 보안 모드 + 명시적 FTPS(권장) + 암시적 FTPS + FTPS 모드: %1$s + 읽기 전용 액세스 + Wi‑Fi: 연결됨 + Wi‑Fi: 연결되지 않음(다른 네트워크 또는 오프라인) + 로컬 IP 주소: %1$s + diff --git a/app/src/main/res/values-ko-rKR/wifi_about.xml b/app/src/main/res/values-ko-rKR/wifi_about.xml new file mode 100644 index 000000000..3dc06b1c6 --- /dev/null +++ b/app/src/main/res/values-ko-rKR/wifi_about.xml @@ -0,0 +1,6 @@ + + + ErikrafT Wi-Fi™ + Wi-Fi, Wi-Fi Direct 및 메시 네트워크를 활용해 오프라인 통신과 호환 게이트웨이를 통한 인터넷 접속을 지원하는 오픈 소스 프로젝트입니다. + ErikrafT Wi-Fi™ 살펴보기 + \ No newline at end of file diff --git a/app/src/main/res/values-mk-rMK/ftp_sftp.xml b/app/src/main/res/values-mk-rMK/ftp_sftp.xml new file mode 100644 index 000000000..4ced5fb9e --- /dev/null +++ b/app/src/main/res/values-mk-rMK/ftp_sftp.xml @@ -0,0 +1,10 @@ + + Безбедносен режим на FTPS + Експлицитен FTPS (препорачано) + Имплицитен FTPS + Режим на FTPS: %1$s + Пристап само за читање + Wi‑Fi: поврзано + Wi‑Fi: не е поврзано (друга мрежа или офлајн) + Локална IP-адреса: %1$s + diff --git a/app/src/main/res/values-mk-rMK/wifi_about.xml b/app/src/main/res/values-mk-rMK/wifi_about.xml new file mode 100644 index 000000000..e92906e16 --- /dev/null +++ b/app/src/main/res/values-mk-rMK/wifi_about.xml @@ -0,0 +1,6 @@ + + + ErikrafT Wi-Fi™ + Проект со отворен код за Wi-Fi, Wi-Fi Direct и mesh мрежи за офлајн комуникација и пристап до интернет преку компатибилни порти. + Истражи ErikrafT Wi-Fi™ + \ No newline at end of file diff --git a/app/src/main/res/values-ne-rNP/ftp_sftp.xml b/app/src/main/res/values-ne-rNP/ftp_sftp.xml new file mode 100644 index 000000000..8f092b5ea --- /dev/null +++ b/app/src/main/res/values-ne-rNP/ftp_sftp.xml @@ -0,0 +1,10 @@ + + FTPS सुरक्षा मोड + स्पष्ट FTPS (सिफारिस गरिएको) + अस्पष्ट FTPS + FTPS मोड: %1$s + पढ्ने-मात्र पहुँच + Wi‑Fi: जडान भएको + Wi‑Fi: जडान नभएको (अर्को नेटवर्क वा अफलाइन) + स्थानीय IP ठेगाना: %1$s + diff --git a/app/src/main/res/values-ne-rNP/wifi_about.xml b/app/src/main/res/values-ne-rNP/wifi_about.xml new file mode 100644 index 000000000..cc9cf98d9 --- /dev/null +++ b/app/src/main/res/values-ne-rNP/wifi_about.xml @@ -0,0 +1,6 @@ + + + ErikrafT Wi-Fi™ + Wi-Fi, Wi-Fi Direct र mesh नेटवर्कका लागि खुला स्रोत परियोजना, जसले अफलाइन सञ्चार र मिल्दो गेटवेमार्फत इन्टरनेट पहुँच प्रदान गर्छ। + ErikrafT Wi-Fi™ हेर्नुहोस् + \ No newline at end of file diff --git a/app/src/main/res/values-nl-rNL/ftp_sftp.xml b/app/src/main/res/values-nl-rNL/ftp_sftp.xml new file mode 100644 index 000000000..94c960dbe --- /dev/null +++ b/app/src/main/res/values-nl-rNL/ftp_sftp.xml @@ -0,0 +1,10 @@ + + FTPS-beveiligingsmodus + Expliciete FTPS (aanbevolen) + Impliciete FTPS + FTPS-modus: %1$s + Alleen-lezen toegang + Wifi: verbonden + Wifi: niet verbonden (ander netwerk of offline) + Lokaal IP-adres: %1$s + diff --git a/app/src/main/res/values-nl-rNL/wifi_about.xml b/app/src/main/res/values-nl-rNL/wifi_about.xml new file mode 100644 index 000000000..d7ad2a3d5 --- /dev/null +++ b/app/src/main/res/values-nl-rNL/wifi_about.xml @@ -0,0 +1,6 @@ + + + ErikrafT Wi-Fi™ + Een opensourceproject voor Wi-Fi, Wi-Fi Direct en meshnetwerken voor offline communicatie en internettoegang via compatibele gateways. + Ontdek ErikrafT Wi-Fi™ + \ No newline at end of file diff --git a/app/src/main/res/values-no-rNO/ftp_sftp.xml b/app/src/main/res/values-no-rNO/ftp_sftp.xml new file mode 100644 index 000000000..fc2db7f91 --- /dev/null +++ b/app/src/main/res/values-no-rNO/ftp_sftp.xml @@ -0,0 +1,10 @@ + + FTPS-sikkerhetsmodus + Eksplisitt FTPS (anbefalt) + Implisitt FTPS + FTPS-modus: %1$s + Skrivebeskyttet tilgang + Wi-Fi: tilkoblet + Wi-Fi: ikke tilkoblet (annet nettverk eller frakoblet) + Lokal IP-adresse: %1$s + diff --git a/app/src/main/res/values-no-rNO/wifi_about.xml b/app/src/main/res/values-no-rNO/wifi_about.xml new file mode 100644 index 000000000..9879c6ca3 --- /dev/null +++ b/app/src/main/res/values-no-rNO/wifi_about.xml @@ -0,0 +1,6 @@ + + + ErikrafT Wi-Fi™ + Et åpen kildekode-prosjekt for Wi-Fi, Wi-Fi Direct og mesh-nettverk for kommunikasjon uten nett og internettilgang via kompatible gatewayer. + Utforsk ErikrafT Wi-Fi™ + \ No newline at end of file diff --git a/app/src/main/res/values-pl-rPL/ftp_sftp.xml b/app/src/main/res/values-pl-rPL/ftp_sftp.xml new file mode 100644 index 000000000..43b10787a --- /dev/null +++ b/app/src/main/res/values-pl-rPL/ftp_sftp.xml @@ -0,0 +1,10 @@ + + Tryb zabezpieczeń FTPS + Jawny FTPS (zalecany) + Niejawny FTPS + Tryb FTPS: %1$s + Dostęp tylko do odczytu + Wi-Fi: połączono + Wi-Fi: brak połączenia (inna sieć lub offline) + Lokalny adres IP: %1$s + diff --git a/app/src/main/res/values-pl-rPL/wifi_about.xml b/app/src/main/res/values-pl-rPL/wifi_about.xml new file mode 100644 index 000000000..cd8f98a3b --- /dev/null +++ b/app/src/main/res/values-pl-rPL/wifi_about.xml @@ -0,0 +1,6 @@ + + + ErikrafT Wi-Fi™ + Projekt open source dla Wi-Fi, Wi-Fi Direct i sieci mesh, umożliwiający komunikację offline oraz dostęp do Internetu przez zgodne bramy. + Poznaj ErikrafT Wi-Fi™ + \ No newline at end of file diff --git a/app/src/main/res/values-pt-rBR/ftp_sftp.xml b/app/src/main/res/values-pt-rBR/ftp_sftp.xml new file mode 100644 index 000000000..d218f2dfa --- /dev/null +++ b/app/src/main/res/values-pt-rBR/ftp_sftp.xml @@ -0,0 +1,10 @@ + + Modo de segurança FTPS + FTPS explícito (recomendado) + FTPS implícito + Modo FTPS: %1$s + Acesso somente leitura + Wi-Fi: conectado + Wi-Fi: não conectado (outra rede ou offline) + Endereço IP local: %1$s + diff --git a/app/src/main/res/values-pt-rBR/wifi_about.xml b/app/src/main/res/values-pt-rBR/wifi_about.xml new file mode 100644 index 000000000..9f4984d1c --- /dev/null +++ b/app/src/main/res/values-pt-rBR/wifi_about.xml @@ -0,0 +1,6 @@ + + + ErikrafT Wi-Fi™ + Projeto de código aberto para Wi-Fi, Wi-Fi Direct e redes mesh, voltado à comunicação offline e ao acesso à Internet por gateways compatíveis. + Conhecer o ErikrafT Wi-Fi™ + \ No newline at end of file diff --git a/app/src/main/res/values-pt-rPT/ftp_sftp.xml b/app/src/main/res/values-pt-rPT/ftp_sftp.xml new file mode 100644 index 000000000..5d0283cee --- /dev/null +++ b/app/src/main/res/values-pt-rPT/ftp_sftp.xml @@ -0,0 +1,10 @@ + + Modo de segurança FTPS + FTPS explícito (recomendado) + FTPS implícito + Modo FTPS: %1$s + Acesso só de leitura + Wi-Fi: ligado + Wi-Fi: não ligado (outra rede ou sem ligação) + Endereço IP local: %1$s + diff --git a/app/src/main/res/values-pt-rPT/wifi_about.xml b/app/src/main/res/values-pt-rPT/wifi_about.xml new file mode 100644 index 000000000..b30fa1a70 --- /dev/null +++ b/app/src/main/res/values-pt-rPT/wifi_about.xml @@ -0,0 +1,6 @@ + + + ErikrafT Wi-Fi™ + Projeto de código aberto para Wi-Fi, Wi-Fi Direct e redes mesh, destinado à comunicação offline e ao acesso à Internet através de gateways compatíveis. + Explorar o ErikrafT Wi-Fi™ + \ No newline at end of file diff --git a/app/src/main/res/values-ro-rRO/ftp_sftp.xml b/app/src/main/res/values-ro-rRO/ftp_sftp.xml new file mode 100644 index 000000000..9120bb72a --- /dev/null +++ b/app/src/main/res/values-ro-rRO/ftp_sftp.xml @@ -0,0 +1,10 @@ + + Mod de securitate FTPS + FTPS explicit (recomandat) + FTPS implicit + Mod FTPS: %1$s + Acces doar pentru citire + Wi-Fi: conectat + Wi-Fi: neconectat (altă rețea sau offline) + Adresă IP locală: %1$s + diff --git a/app/src/main/res/values-ro-rRO/wifi_about.xml b/app/src/main/res/values-ro-rRO/wifi_about.xml new file mode 100644 index 000000000..a09ba218b --- /dev/null +++ b/app/src/main/res/values-ro-rRO/wifi_about.xml @@ -0,0 +1,6 @@ + + + ErikrafT Wi-Fi™ + Un proiect open-source pentru Wi-Fi, Wi-Fi Direct și rețele mesh, destinat comunicării offline și accesului la internet prin gateway-uri compatibile. + Descoperă ErikrafT Wi-Fi™ + \ No newline at end of file diff --git a/app/src/main/res/values-ru-rRU/ftp_sftp.xml b/app/src/main/res/values-ru-rRU/ftp_sftp.xml new file mode 100644 index 000000000..6a5c12446 --- /dev/null +++ b/app/src/main/res/values-ru-rRU/ftp_sftp.xml @@ -0,0 +1,10 @@ + + Режим безопасности FTPS + Явный FTPS (рекомендуется) + Неявный FTPS + Режим FTPS: %1$s + Доступ только для чтения + Wi-Fi: подключено + Wi-Fi: не подключено (другая сеть или офлайн) + Локальный IP-адрес: %1$s + diff --git a/app/src/main/res/values-ru-rRU/wifi_about.xml b/app/src/main/res/values-ru-rRU/wifi_about.xml new file mode 100644 index 000000000..d142b8112 --- /dev/null +++ b/app/src/main/res/values-ru-rRU/wifi_about.xml @@ -0,0 +1,6 @@ + + + ErikrafT Wi-Fi™ + Проект с открытым исходным кодом для Wi-Fi, Wi-Fi Direct и mesh-сетей, обеспечивающий офлайн-связь и доступ к интернету через совместимые шлюзы. + О проекте ErikrafT Wi-Fi™ + \ No newline at end of file diff --git a/app/src/main/res/values-sk-rSK/ftp_sftp.xml b/app/src/main/res/values-sk-rSK/ftp_sftp.xml new file mode 100644 index 000000000..3dbb349b3 --- /dev/null +++ b/app/src/main/res/values-sk-rSK/ftp_sftp.xml @@ -0,0 +1,10 @@ + + Režim zabezpečenia FTPS + Explicitné FTPS (odporúčané) + Implicitné FTPS + Režim FTPS: %1$s + Prístup iba na čítanie + Wi‑Fi: pripojené + Wi‑Fi: nepripojené (iná sieť alebo offline) + Lokálna IP adresa: %1$s + diff --git a/app/src/main/res/values-sk-rSK/wifi_about.xml b/app/src/main/res/values-sk-rSK/wifi_about.xml new file mode 100644 index 000000000..3891efa7a --- /dev/null +++ b/app/src/main/res/values-sk-rSK/wifi_about.xml @@ -0,0 +1,6 @@ + + + ErikrafT Wi-Fi™ + Open-source projekt pre Wi-Fi, Wi-Fi Direct a mesh siete na offline komunikáciu a prístup na internet cez kompatibilné brány. + Preskúmať ErikrafT Wi-Fi™ + \ No newline at end of file diff --git a/app/src/main/res/values-sl-rSI/ftp_sftp.xml b/app/src/main/res/values-sl-rSI/ftp_sftp.xml new file mode 100644 index 000000000..ebee39b37 --- /dev/null +++ b/app/src/main/res/values-sl-rSI/ftp_sftp.xml @@ -0,0 +1,10 @@ + + Varnostni način FTPS + Eksplicitni FTPS (priporočeno) + Implicitni FTPS + Način FTPS: %1$s + Dostop samo za branje + Wi‑Fi: povezano + Wi‑Fi: ni povezave (drugo omrežje ali brez povezave) + Lokalni naslov IP: %1$s + diff --git a/app/src/main/res/values-sl-rSI/wifi_about.xml b/app/src/main/res/values-sl-rSI/wifi_about.xml new file mode 100644 index 000000000..73ea6cf42 --- /dev/null +++ b/app/src/main/res/values-sl-rSI/wifi_about.xml @@ -0,0 +1,6 @@ + + + ErikrafT Wi-Fi™ + Odprtokodni projekt za Wi-Fi, Wi-Fi Direct in mrežna omrežja mesh za komunikacijo brez povezave ter dostop do interneta prek združljivih prehodov. + Razišči ErikrafT Wi-Fi™ + \ No newline at end of file diff --git a/app/src/main/res/values-sr-rRS/ftp_sftp.xml b/app/src/main/res/values-sr-rRS/ftp_sftp.xml new file mode 100644 index 000000000..1d7779b9b --- /dev/null +++ b/app/src/main/res/values-sr-rRS/ftp_sftp.xml @@ -0,0 +1,10 @@ + + Безбедносни режим FTPS-а + Експлицитни FTPS (препоручено) + Имплицитни FTPS + FTPS режим: %1$s + Приступ само за читање + Wi‑Fi: повезан + Wi‑Fi: није повезан (друга мрежа или ван мреже) + Локална IP адреса: %1$s + diff --git a/app/src/main/res/values-sr-rRS/wifi_about.xml b/app/src/main/res/values-sr-rRS/wifi_about.xml new file mode 100644 index 000000000..5069efcca --- /dev/null +++ b/app/src/main/res/values-sr-rRS/wifi_about.xml @@ -0,0 +1,6 @@ + + + ErikrafT Wi-Fi™ + Пројекат отвореног кода за Wi-Fi, Wi-Fi Direct и mesh мреже за комуникацију ван мреже и приступ интернету преко компатибилних мрежних пролаза. + Истражи ErikrafT Wi-Fi™ + \ No newline at end of file diff --git a/app/src/main/res/values-sr-rSP/ftp_sftp.xml b/app/src/main/res/values-sr-rSP/ftp_sftp.xml new file mode 100644 index 000000000..71ad1b055 --- /dev/null +++ b/app/src/main/res/values-sr-rSP/ftp_sftp.xml @@ -0,0 +1,10 @@ + + Sigurnosni režim FTPS-a + Eksplicitni FTPS (preporučeno) + Implicitni FTPS + FTPS režim: %1$s + Pristup samo za čitanje + Wi‑Fi: povezano + Wi‑Fi: nije povezano (druga mreža ili van mreže) + Lokalna IP adresa: %1$s + diff --git a/app/src/main/res/values-sr-rSP/wifi_about.xml b/app/src/main/res/values-sr-rSP/wifi_about.xml new file mode 100644 index 000000000..798498c06 --- /dev/null +++ b/app/src/main/res/values-sr-rSP/wifi_about.xml @@ -0,0 +1,6 @@ + + + ErikrafT Wi-Fi™ + Projekat otvorenog koda za Wi-Fi, Wi-Fi Direct i mesh mreže za komunikaciju van mreže i pristup internetu preko kompatibilnih mrežnih prolaza. + Istraži ErikrafT Wi-Fi™ + \ No newline at end of file diff --git a/app/src/main/res/values-sr/ftp_sftp.xml b/app/src/main/res/values-sr/ftp_sftp.xml new file mode 100644 index 000000000..1d7779b9b --- /dev/null +++ b/app/src/main/res/values-sr/ftp_sftp.xml @@ -0,0 +1,10 @@ + + Безбедносни режим FTPS-а + Експлицитни FTPS (препоручено) + Имплицитни FTPS + FTPS режим: %1$s + Приступ само за читање + Wi‑Fi: повезан + Wi‑Fi: није повезан (друга мрежа или ван мреже) + Локална IP адреса: %1$s + diff --git a/app/src/main/res/values-sr/wifi_about.xml b/app/src/main/res/values-sr/wifi_about.xml new file mode 100644 index 000000000..5069efcca --- /dev/null +++ b/app/src/main/res/values-sr/wifi_about.xml @@ -0,0 +1,6 @@ + + + ErikrafT Wi-Fi™ + Пројекат отвореног кода за Wi-Fi, Wi-Fi Direct и mesh мреже за комуникацију ван мреже и приступ интернету преко компатибилних мрежних пролаза. + Истражи ErikrafT Wi-Fi™ + \ No newline at end of file diff --git a/app/src/main/res/values-sv-rSE/ftp_sftp.xml b/app/src/main/res/values-sv-rSE/ftp_sftp.xml new file mode 100644 index 000000000..6e4bab5e5 --- /dev/null +++ b/app/src/main/res/values-sv-rSE/ftp_sftp.xml @@ -0,0 +1,10 @@ + + FTPS-säkerhetsläge + Explicit FTPS (rekommenderat) + Implicit FTPS + FTPS-läge: %1$s + Skrivskyddad åtkomst + Wi-Fi: ansluten + Wi-Fi: inte ansluten (annat nätverk eller offline) + Lokal IP-adress: %1$s + diff --git a/app/src/main/res/values-sv-rSE/wifi_about.xml b/app/src/main/res/values-sv-rSE/wifi_about.xml new file mode 100644 index 000000000..66483b3ba --- /dev/null +++ b/app/src/main/res/values-sv-rSE/wifi_about.xml @@ -0,0 +1,6 @@ + + + ErikrafT Wi-Fi™ + Ett projekt med öppen källkod för Wi-Fi, Wi-Fi Direct och mesh-nätverk för offlinekommunikation och internetåtkomst via kompatibla gateways. + Utforska ErikrafT Wi-Fi™ + \ No newline at end of file diff --git a/app/src/main/res/values-tr-rTR/ftp_sftp.xml b/app/src/main/res/values-tr-rTR/ftp_sftp.xml new file mode 100644 index 000000000..9f530c725 --- /dev/null +++ b/app/src/main/res/values-tr-rTR/ftp_sftp.xml @@ -0,0 +1,10 @@ + + FTPS güvenlik modu + Açık FTPS (önerilen) + Örtük FTPS + FTPS modu: %1$s + Salt okunur erişim + Wi‑Fi: bağlı + Wi‑Fi: bağlı değil (başka ağ veya çevrimdışı) + Yerel IP adresi: %1$s + diff --git a/app/src/main/res/values-tr-rTR/wifi_about.xml b/app/src/main/res/values-tr-rTR/wifi_about.xml new file mode 100644 index 000000000..f1d9d4f1e --- /dev/null +++ b/app/src/main/res/values-tr-rTR/wifi_about.xml @@ -0,0 +1,6 @@ + + + ErikrafT Wi-Fi™ + Çevrimdışı iletişim ve uyumlu ağ geçitleri üzerinden internet erişimi için Wi-Fi, Wi-Fi Direct ve mesh ağlarına yönelik açık kaynaklı proje. + ErikrafT Wi-Fi™ projesini keşfet + \ No newline at end of file diff --git a/app/src/main/res/values-uk-rUA/ftp_sftp.xml b/app/src/main/res/values-uk-rUA/ftp_sftp.xml new file mode 100644 index 000000000..f9cefe5b9 --- /dev/null +++ b/app/src/main/res/values-uk-rUA/ftp_sftp.xml @@ -0,0 +1,10 @@ + + Режим безпеки FTPS + Явний FTPS (рекомендовано) + Неявний FTPS + Режим FTPS: %1$s + Доступ лише для читання + Wi-Fi: підключено + Wi-Fi: не підключено (інша мережа або офлайн) + Локальна IP-адреса: %1$s + diff --git a/app/src/main/res/values-uk-rUA/wifi_about.xml b/app/src/main/res/values-uk-rUA/wifi_about.xml new file mode 100644 index 000000000..38fcc6b4d --- /dev/null +++ b/app/src/main/res/values-uk-rUA/wifi_about.xml @@ -0,0 +1,6 @@ + + + ErikrafT Wi-Fi™ + Проєкт із відкритим кодом для Wi-Fi, Wi-Fi Direct і mesh-мереж для офлайн-зв’язку та доступу до інтернету через сумісні шлюзи. + Дізнатися про ErikrafT Wi-Fi™ + \ No newline at end of file diff --git a/app/src/main/res/values-vi-rVN/ftp_sftp.xml b/app/src/main/res/values-vi-rVN/ftp_sftp.xml new file mode 100644 index 000000000..7ae04b964 --- /dev/null +++ b/app/src/main/res/values-vi-rVN/ftp_sftp.xml @@ -0,0 +1,10 @@ + + Chế độ bảo mật FTPS + FTPS tường minh (khuyên dùng) + FTPS ngầm định + Chế độ FTPS: %1$s + Quyền chỉ đọc + Wi-Fi: đã kết nối + Wi-Fi: chưa kết nối (mạng khác hoặc ngoại tuyến) + Địa chỉ IP cục bộ: %1$s + diff --git a/app/src/main/res/values-vi-rVN/wifi_about.xml b/app/src/main/res/values-vi-rVN/wifi_about.xml new file mode 100644 index 000000000..20c33a619 --- /dev/null +++ b/app/src/main/res/values-vi-rVN/wifi_about.xml @@ -0,0 +1,6 @@ + + + ErikrafT Wi-Fi™ + Dự án mã nguồn mở dành cho Wi-Fi, Wi-Fi Direct và mạng mesh, hỗ trợ liên lạc ngoại tuyến và truy cập Internet qua cổng kết nối tương thích. + Khám phá ErikrafT Wi-Fi™ + \ No newline at end of file diff --git a/app/src/main/res/values-zh-rCN/ftp_sftp.xml b/app/src/main/res/values-zh-rCN/ftp_sftp.xml new file mode 100644 index 000000000..a042a020b --- /dev/null +++ b/app/src/main/res/values-zh-rCN/ftp_sftp.xml @@ -0,0 +1,10 @@ + + FTPS 安全模式 + 显式 FTPS(推荐) + 隐式 FTPS + FTPS 模式:%1$s + 只读访问 + Wi‑Fi:已连接 + Wi‑Fi:未连接(其他网络或离线) + 本地 IP 地址:%1$s + diff --git a/app/src/main/res/values-zh-rCN/wifi_about.xml b/app/src/main/res/values-zh-rCN/wifi_about.xml new file mode 100644 index 000000000..0f9604f1a --- /dev/null +++ b/app/src/main/res/values-zh-rCN/wifi_about.xml @@ -0,0 +1,6 @@ + + + ErikrafT Wi-Fi™ + 一个面向 Wi-Fi、Wi-Fi Direct 和网状网络的开源项目,支持离线通信,并可通过兼容网关访问互联网。 + 了解 ErikrafT Wi-Fi™ + \ No newline at end of file diff --git a/app/src/main/res/values-zh-rTW/ftp_sftp.xml b/app/src/main/res/values-zh-rTW/ftp_sftp.xml new file mode 100644 index 000000000..77f3f7e4e --- /dev/null +++ b/app/src/main/res/values-zh-rTW/ftp_sftp.xml @@ -0,0 +1,10 @@ + + FTPS 安全模式 + 顯式 FTPS(建議) + 隱式 FTPS + FTPS 模式:%1$s + 唯讀存取 + Wi‑Fi:已連線 + Wi‑Fi:未連線(其他網路或離線) + 本機 IP 位址:%1$s + diff --git a/app/src/main/res/values-zh-rTW/wifi_about.xml b/app/src/main/res/values-zh-rTW/wifi_about.xml new file mode 100644 index 000000000..2407d078a --- /dev/null +++ b/app/src/main/res/values-zh-rTW/wifi_about.xml @@ -0,0 +1,6 @@ + + + ErikrafT Wi-Fi™ + 一個面向 Wi-Fi、Wi-Fi Direct 和網狀網路的開源專案,支援離線通訊,並可透過相容閘道器存取網際網路。 + 探索 ErikrafT Wi-Fi™ + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index e511f5246..22a0c6e4e 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -319,4 +319,18 @@ <b>Built for file transfer and privacy</b><br/>ErikrafT Drop™ focuses on file transfer and privacy. It aims to adapt to a wide range of devices, from older and legacy systems to modern hardware, offering compatible options where possible. Availability depends on the device, operating system, and supported technologies.<br/><br/><b>Help improve ErikrafT Drop™</b><br/>Contribute a Pull Request to fix a problem or add a feature, or open an Issue with diagnostic details and steps to reproduce what happened. Clear reports and contributions help make the app more reliable for everyone. BETA Unavailable: required runtime support is missing on this device. + + + FTPS security mode + Explicit FTPS (recommended) + Implicit FTPS + FTPS mode: %1$s + Read-only access + Wi-Fi: connected + Wi-Fi: not connected (other network or offline) + Local IP address: %1$s + ftp_ftps_implicit + ftp_read_only + sftp_read_only + diff --git a/app/src/main/res/values/wifi_about.xml b/app/src/main/res/values/wifi_about.xml new file mode 100644 index 000000000..6b96fd465 --- /dev/null +++ b/app/src/main/res/values/wifi_about.xml @@ -0,0 +1,6 @@ + + + ErikrafT Wi-Fi™ + An open-source project for Wi-Fi, Wi-Fi Direct, and mesh networking for offline communication and Internet access through compatible gateways. + Explore ErikrafT Wi-Fi™ + \ No newline at end of file diff --git a/app/src/test/java/com/erikraft/drop/ReleaseContractTest.java b/app/src/test/java/com/erikraft/drop/ReleaseContractTest.java index 779954748..a587edc74 100644 --- a/app/src/test/java/com/erikraft/drop/ReleaseContractTest.java +++ b/app/src/test/java/com/erikraft/drop/ReleaseContractTest.java @@ -6,8 +6,8 @@ public class ReleaseContractTest { @Test - public void androidVersionMustRemain10_1_9Code32() { - assertEquals("10.1.9", BuildConfig.VERSION_NAME); - assertEquals(32, BuildConfig.VERSION_CODE); + public void androidVersionMustBe10_1_10Code33() { + assertEquals("10.1.10", BuildConfig.VERSION_NAME); + assertEquals(33, BuildConfig.VERSION_CODE); } }