diff --git a/app/src/main/java/org/kiwix/kiwixmobile/zim_manager/local_file_transfer/DeviceListFragment.java b/app/src/main/java/org/kiwix/kiwixmobile/zim_manager/local_file_transfer/DeviceListFragment.java index fe3a6780e..420491d25 100644 --- a/app/src/main/java/org/kiwix/kiwixmobile/zim_manager/local_file_transfer/DeviceListFragment.java +++ b/app/src/main/java/org/kiwix/kiwixmobile/zim_manager/local_file_transfer/DeviceListFragment.java @@ -116,7 +116,7 @@ public class DeviceListFragment extends ListFragment implements WifiP2pManager.P selectedPeerDevice = (WifiP2pDevice) getListAdapter().getItem(position); new AlertDialog.Builder(localFileTransferActivity) - .setMessage("Transfer files to " + selectedPeerDevice.deviceName + "?") + .setMessage(getString(R.string.transfer_to) + selectedPeerDevice.deviceName + "?") .setPositiveButton(R.string.yes, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { @@ -147,17 +147,17 @@ public class DeviceListFragment extends ListFragment implements WifiP2pManager.P } } - public static String getDeviceStatus(int status) { + public String getDeviceStatus(int status) { if(BuildConfig.DEBUG) Log.d(TAG, "Peer Status: " + status); switch (status) { - case WifiP2pDevice.AVAILABLE : return "Available"; - case WifiP2pDevice.INVITED : return "Invited"; - case WifiP2pDevice.CONNECTED : return "Connected"; - case WifiP2pDevice.FAILED : return "Failed"; - case WifiP2pDevice.UNAVAILABLE:return "Unavailable"; + case WifiP2pDevice.AVAILABLE : return getString(R.string.available); + case WifiP2pDevice.INVITED : return getString(R.string.invited); + case WifiP2pDevice.CONNECTED : return getString(R.string.connected); + case WifiP2pDevice.FAILED : return getString(R.string.failed); + case WifiP2pDevice.UNAVAILABLE:return getString(R.string.unavailable); - default: return "Unknown"; + default: return getString(R.string.unknown); } } @@ -203,7 +203,7 @@ public class DeviceListFragment extends ListFragment implements WifiP2pManager.P public void setClientAddress(InetAddress clientAddress) { if(clientAddress == null) { // null is returned only in case of a failed handshake - showToast(localFileTransferActivity, "Selected device not cooperating for transfer", Toast.LENGTH_LONG); + showToast(localFileTransferActivity, R.string.device_not_cooperating, Toast.LENGTH_LONG); localFileTransferActivity.closeLocalFileTransferActivity(); return; } @@ -220,13 +220,13 @@ public class DeviceListFragment extends ListFragment implements WifiP2pManager.P displayTransferProgressFragment(); new ReceiverDeviceAsyncTask(this, transferProgressFragment).execute(); - showToast(localFileTransferActivity, "Preparing to receive files...", Toast.LENGTH_SHORT); + showToast(localFileTransferActivity, R.string.preparing_to_receive, Toast.LENGTH_SHORT); } else if(groupInfo.groupFormed) { { Log.d(LocalFileTransferActivity.TAG, "Starting file transfer"); - showToast(localFileTransferActivity, "Starting file transfer...", Toast.LENGTH_SHORT); + showToast(localFileTransferActivity, R.string.starting_transfer, Toast.LENGTH_SHORT); if(groupInfo.isGroupOwner) fileReceiverDeviceAddress = selectedPeerDeviceInetAddress; else fileReceiverDeviceAddress = groupInfo.groupOwnerAddress; diff --git a/app/src/main/java/org/kiwix/kiwixmobile/zim_manager/local_file_transfer/LocalFileTransferActivity.java b/app/src/main/java/org/kiwix/kiwixmobile/zim_manager/local_file_transfer/LocalFileTransferActivity.java index 48726b74a..7dcd4ed7f 100644 --- a/app/src/main/java/org/kiwix/kiwixmobile/zim_manager/local_file_transfer/LocalFileTransferActivity.java +++ b/app/src/main/java/org/kiwix/kiwixmobile/zim_manager/local_file_transfer/LocalFileTransferActivity.java @@ -1,6 +1,7 @@ package org.kiwix.kiwixmobile.zim_manager.local_file_transfer; import android.Manifest; +import android.app.Activity; import android.app.Dialog; import android.content.BroadcastReceiver; import android.content.Context; @@ -153,12 +154,12 @@ public class LocalFileTransferActivity extends AppCompatActivity implements Wifi manager.discoverPeers(channel, new WifiP2pManager.ActionListener() { @Override public void onSuccess() { - showToast(LocalFileTransferActivity.this, "Discovery Initiated", Toast.LENGTH_SHORT); + showToast(LocalFileTransferActivity.this, R.string.discovery_initiated, Toast.LENGTH_SHORT); } @Override public void onFailure(int reason) { - showToast(LocalFileTransferActivity.this, "Discovery Failed: " + getErrorMessage(reason), Toast.LENGTH_SHORT); + showToast(LocalFileTransferActivity.this, LocalFileTransferActivity.this.getString(R.string.discovery_failed) + getErrorMessage(reason), Toast.LENGTH_SHORT); } }); return true; @@ -197,16 +198,13 @@ public class LocalFileTransferActivity extends AppCompatActivity implements Wifi } private String getErrorMessage(int reason) { - String error = ""; switch (reason) { - case WifiP2pManager.ERROR: error = "Internal error"; break; - case WifiP2pManager.BUSY: error = "Framework busy, unable to service request"; break; - case WifiP2pManager.P2P_UNSUPPORTED: error = "P2P unsupported on this device"; break; + case WifiP2pManager.ERROR: return getString(R.string.wifi_p2p_internal_error); + case WifiP2pManager.BUSY: return getString(R.string.wifi_p2p_framework_busy); + case WifiP2pManager.P2P_UNSUPPORTED: return getString(R.string.wifi_p2p_unsupported); - default: error = "Unknown error code - "+reason; break; + default: return (getString(R.string.wifi_p2p_unknown_error) + reason); } - - return error; } public void resetPeers() { @@ -223,6 +221,10 @@ public class LocalFileTransferActivity extends AppCompatActivity implements Wifi } } + static void showToast(Context context, int stringResource, int duration) { + Toast.makeText(context, context.getString(stringResource), duration).show(); + } + static void showToast(Context context, String text, int duration) { Toast.makeText(context, text, duration).show(); } @@ -233,13 +235,13 @@ public class LocalFileTransferActivity extends AppCompatActivity implements Wifi public void onChannelDisconnected() { // Upon disconnection, retry one more time if(manager != null && !retryChannel) { - showToast(this, "Channel lost, trying again", Toast.LENGTH_LONG); + showToast(this, R.string.channel_lost, Toast.LENGTH_LONG); resetData(); retryChannel = true; manager.initialize(this, getMainLooper(), this); } else { - showToast(this, "Severe! Try Disable/Re-enable WiFi P2P", Toast.LENGTH_LONG); + showToast(this, R.string.severe_loss_error, Toast.LENGTH_LONG); } } @@ -262,14 +264,14 @@ public class LocalFileTransferActivity extends AppCompatActivity implements Wifi @Override public void onSuccess() { - showToast(LocalFileTransferActivity.this, "Aborting connection", + showToast(LocalFileTransferActivity.this, R.string.abort_connection, Toast.LENGTH_SHORT); } @Override public void onFailure(int reasonCode) { showToast(LocalFileTransferActivity.this, - "Connect abort request failed. Reason : " + getErrorMessage(reasonCode), + getString(R.string.abort_failed) + getErrorMessage(reasonCode), Toast.LENGTH_SHORT); } }); @@ -291,7 +293,7 @@ public class LocalFileTransferActivity extends AppCompatActivity implements Wifi @Override public void onFailure(int reason) { - showToast(LocalFileTransferActivity.this, "Connection failed: " + getErrorMessage(reason), Toast.LENGTH_LONG); + showToast(LocalFileTransferActivity.this, getString(R.string.connection_failed) + getErrorMessage(reason), Toast.LENGTH_LONG); } }); } @@ -327,7 +329,7 @@ public class LocalFileTransferActivity extends AppCompatActivity implements Wifi if(shouldShowRequestPermissionRationale(Manifest.permission.ACCESS_COARSE_LOCATION)) { new AlertDialog.Builder(this) - .setMessage("Location permission is required by Android to allow the app to detect peer devices") + .setMessage(R.string.permission_rationale_location) .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { @@ -354,7 +356,7 @@ public class LocalFileTransferActivity extends AppCompatActivity implements Wifi if(shouldShowRequestPermissionRationale(Manifest.permission.WRITE_EXTERNAL_STORAGE)) { new AlertDialog.Builder(this) - .setMessage("Storage permissions required for accessing and storing ZIM files") + .setMessage(R.string.permission_rationale_storage) .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { @@ -382,7 +384,7 @@ public class LocalFileTransferActivity extends AppCompatActivity implements Wifi if (grantResults[0] != PackageManager.PERMISSION_GRANTED) { Log.e(TAG, "Location permission not granted"); - showToast(this, "Cannot locate peer devices without location permissions", Toast.LENGTH_LONG); + showToast(this, R.string.permission_refused_location, Toast.LENGTH_LONG); closeLocalFileTransferActivity(); break; } @@ -392,7 +394,7 @@ public class LocalFileTransferActivity extends AppCompatActivity implements Wifi if (grantResults[0] != PackageManager.PERMISSION_GRANTED) { Log.e(TAG, "Storage write permission not granted"); - showToast(this, "Cannot access zim files without storage permission", Toast.LENGTH_LONG); + showToast(this, R.string.permission_refused_storage, Toast.LENGTH_LONG); closeLocalFileTransferActivity(); break; } @@ -418,32 +420,35 @@ public class LocalFileTransferActivity extends AppCompatActivity implements Wifi private void requestEnableLocationServices() { FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); - Fragment prev = getSupportFragmentManager().findFragmentByTag("LocationDialog"); + Fragment prev = getSupportFragmentManager().findFragmentByTag(RequestEnableLocationServicesDialog.TAG); if(prev == null) { RequestEnableLocationServicesDialog dialogFragment = new RequestEnableLocationServicesDialog(); - dialogFragment.show(fragmentTransaction, "LocationDialog"); + dialogFragment.show(fragmentTransaction, RequestEnableLocationServicesDialog.TAG); } } public static class RequestEnableLocationServicesDialog extends DialogFragment { + + public static final String TAG = "LocationDialog"; + @NonNull @Override public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) { AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); - builder.setMessage("Enable location to allow detection of peers") - .setPositiveButton("Open Location Settings", new DialogInterface.OnClickListener() { + builder.setMessage(R.string.request_enable_location) + .setPositiveButton(R.string.open_location_settings, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface paramDialogInterface, int paramInt) { paramDialogInterface.cancel(); startActivityForResult(new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS), LocalFileTransferActivity.REQUEST_ENABLE_LOCATION_SERVICES); } }) - .setNegativeButton("No", new DialogInterface.OnClickListener() { + .setNegativeButton(android.R.string.no, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { - showToast(getActivity(), "Cannot discover peers without location services", Toast.LENGTH_SHORT); + showToast(getActivity(), R.string.request_refused_location, Toast.LENGTH_SHORT); } }); @@ -453,32 +458,35 @@ public class LocalFileTransferActivity extends AppCompatActivity implements Wifi private void requestEnableWifiP2pServices() { FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); - Fragment prev = getSupportFragmentManager().findFragmentByTag("WifiP2pDialog"); + Fragment prev = getSupportFragmentManager().findFragmentByTag(RequestEnableWifiP2pServicesDialog.TAG); if(prev == null) { RequestEnableWifiP2pServicesDialog dialogFragment = new RequestEnableWifiP2pServicesDialog(); - dialogFragment.show(fragmentTransaction, "WifiP2pDialog"); + dialogFragment.show(fragmentTransaction, RequestEnableWifiP2pServicesDialog.TAG); } } public static class RequestEnableWifiP2pServicesDialog extends DialogFragment { + + public static final String TAG = "WifiP2pDialog"; + @NonNull @Override public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) { AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); - builder.setMessage("Enable WiFi P2P from system settings") - .setPositiveButton("Open WiFi Settings", new DialogInterface.OnClickListener() { + builder.setMessage(R.string.request_enable_wifi) + .setPositiveButton(R.string.open_wifi_settings, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface paramDialogInterface, int paramInt) { paramDialogInterface.cancel(); startActivity(new Intent(Settings.ACTION_WIFI_SETTINGS)); } }) - .setNegativeButton("No", new DialogInterface.OnClickListener() { + .setNegativeButton(android.R.string.no, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { - showToast(getActivity(), "Cannot discover peers without WiFi ON", Toast.LENGTH_SHORT); + showToast(getActivity(), R.string.request_refused_wifi, Toast.LENGTH_SHORT); } }); @@ -496,63 +504,20 @@ public class LocalFileTransferActivity extends AppCompatActivity implements Wifi if(!(locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER) || locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER))) { // If neither provider is enabled - showToast(this, "Cannot discover peers without location services", Toast.LENGTH_LONG); + showToast(this, R.string.permission_refused_location, Toast.LENGTH_LONG); } break; } case REQUEST_ENABLE_WIFI_P2P: { if(!isWifiP2pEnabled()) { - showToast(this, "Cannot discover peers without WiFi ON", Toast.LENGTH_LONG); + showToast(this, R.string.request_refused_wifi, Toast.LENGTH_LONG); } break; } } } - //TODO: Remove - private void showNeutralDialog(String dialogMessage) { - FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); - Fragment prev = getSupportFragmentManager().findFragmentByTag("NeutralDialog"); - if(prev != null) { - fragmentTransaction.remove(prev); // To prevent multiple instances of the NeutralDialogs - } - fragmentTransaction.addToBackStack(null); - - NeutralDialog dialogFragment = new NeutralDialog(dialogMessage); - // For DialogFragments, show() handles the fragment commit and display - dialogFragment.show(fragmentTransaction, "NeutralDialog"); - } - - public static class NeutralDialog extends DialogFragment { - - private String dialogMessage = ""; - - public NeutralDialog() { - super(); - } - - public NeutralDialog(String message) { - super(); - this.dialogMessage = message; - } - - @NonNull - @Override - public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) { - - AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); - builder.setMessage(dialogMessage) - .setNeutralButton("Dismiss", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - } - }); - - return builder.create(); - } - } - @Override public void onResume() { super.onResume(); diff --git a/app/src/main/java/org/kiwix/kiwixmobile/zim_manager/local_file_transfer/ReceiverDeviceAsyncTask.java b/app/src/main/java/org/kiwix/kiwixmobile/zim_manager/local_file_transfer/ReceiverDeviceAsyncTask.java index 916b9671f..ec647b02c 100644 --- a/app/src/main/java/org/kiwix/kiwixmobile/zim_manager/local_file_transfer/ReceiverDeviceAsyncTask.java +++ b/app/src/main/java/org/kiwix/kiwixmobile/zim_manager/local_file_transfer/ReceiverDeviceAsyncTask.java @@ -5,6 +5,7 @@ import android.util.Log; import android.widget.Toast; import org.kiwix.kiwixmobile.BuildConfig; +import org.kiwix.kiwixmobile.R; import java.io.File; import java.io.FileOutputStream; @@ -96,9 +97,9 @@ class ReceiverDeviceAsyncTask extends AsyncTask { if(BuildConfig.DEBUG) Log.d(TAG, "File transfer complete"); if(allFilesReceived) { - showToast(deviceListFragment.getActivity(), "File transfer complete", Toast.LENGTH_LONG); + showToast(deviceListFragment.getActivity(), R.string.file_transfer_complete, Toast.LENGTH_LONG); } else { - showToast(deviceListFragment.getActivity(), "An error was encountered during transfer", Toast.LENGTH_LONG); + showToast(deviceListFragment.getActivity(), R.string.error_during_transfer, Toast.LENGTH_LONG); } ((LocalFileTransferActivity) deviceListFragment.getActivity()).closeLocalFileTransferActivity(); diff --git a/app/src/main/java/org/kiwix/kiwixmobile/zim_manager/local_file_transfer/SenderDeviceAsyncTask.java b/app/src/main/java/org/kiwix/kiwixmobile/zim_manager/local_file_transfer/SenderDeviceAsyncTask.java index 6642f4e16..0ea55c856 100644 --- a/app/src/main/java/org/kiwix/kiwixmobile/zim_manager/local_file_transfer/SenderDeviceAsyncTask.java +++ b/app/src/main/java/org/kiwix/kiwixmobile/zim_manager/local_file_transfer/SenderDeviceAsyncTask.java @@ -1,5 +1,6 @@ package org.kiwix.kiwixmobile.zim_manager.local_file_transfer; +import android.app.Activity; import android.content.ContentResolver; import android.net.Uri; import android.os.AsyncTask; @@ -7,6 +8,7 @@ import android.util.Log; import android.widget.Toast; import org.kiwix.kiwixmobile.BuildConfig; +import org.kiwix.kiwixmobile.R; import java.io.IOException; import java.io.InputStream; @@ -97,12 +99,13 @@ class SenderDeviceAsyncTask extends AsyncTask { if(fileSendSuccessful) { transferProgressFragment.changeStatus(fileItemIndex, FileItem.SENT); } else { - showToast(deviceListFragment.getActivity(), "Error sending file "+ getFileName(deviceListFragment.getFileUriList().get(fileItemIndex)), Toast.LENGTH_SHORT); + Activity activity = deviceListFragment.getActivity(); + showToast(activity, activity.getString(R.string.error_sending) + getFileName(deviceListFragment.getFileUriList().get(fileItemIndex)), Toast.LENGTH_SHORT); transferProgressFragment.changeStatus(fileItemIndex, FileItem.ERROR); } if(deviceListFragment.allFilesSent()) { - showToast(deviceListFragment.getActivity(), "All files transferred", Toast.LENGTH_SHORT); + showToast(deviceListFragment.getActivity(), R.string.all_files_transferred, Toast.LENGTH_SHORT); deviceListFragment.getActivity().finish(); } } diff --git a/app/src/main/java/org/kiwix/kiwixmobile/zim_manager/local_file_transfer/WifiDirectBroadcastReceiver.java b/app/src/main/java/org/kiwix/kiwixmobile/zim_manager/local_file_transfer/WifiDirectBroadcastReceiver.java index 44582d964..5ab7db52b 100644 --- a/app/src/main/java/org/kiwix/kiwixmobile/zim_manager/local_file_transfer/WifiDirectBroadcastReceiver.java +++ b/app/src/main/java/org/kiwix/kiwixmobile/zim_manager/local_file_transfer/WifiDirectBroadcastReceiver.java @@ -44,7 +44,7 @@ public class WifiDirectBroadcastReceiver extends BroadcastReceiver { wifiActivity.setWifiP2pEnabled(true); } else { wifiActivity.setWifiP2pEnabled(false); - showToast(wifiActivity, "Cannot discover peers without WiFi", Toast.LENGTH_SHORT); + showToast(wifiActivity, R.string.discovery_needs_wifi, Toast.LENGTH_SHORT); wifiActivity.resetPeers(); } Log.d(LocalFileTransferActivity.TAG, "WiFi P2P state changed - " + wifiP2pState); diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 0b7edc56a..dd0c01f44 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -248,4 +248,40 @@ Hello blank fragment + Discovery Initiated + Discovery Failed: + Internal error + Framework busy, unable to service request + P2P unsupported on this device + Unknown error code - + Channel lost, trying again + Severe! Try Disable/Re-enable WiFi P2P + Aborting connection + Connect abort request failed. Reason : + Connection failed: + Location permission is required by Android to allow the app to detect peer devices + Storage permissions required for accessing and storing ZIM files + Cannot locate peer devices without location permissions + Cannot access zim files without storage permission + Enable location to allow detection of peers + Open Location Settings + Cannot discover peers without location services + Enable WiFi P2P from system settings + Open WiFi Settings + Cannot discover peers without WiFi ON + Transfer files to + Available + Invited + Connected + Failed + Unavailable + Unknown + Selected device not cooperating for transfer + Preparing to receive files... + Starting file transfer... + Cannot discover peers without WiFi + File transfer complete + An error was encountered during transfer + Error sending file + All files transferred