Commit 2c2f485594 for strongswan.org

commit 2c2f485594f11aea6d428bf8d0fb69ac7ff817a1
Author: Tobias Brunner <tobias@strongswan.org>
Date:   Thu Oct 22 11:27:55 2026 +0200

    android: Make build work with non-constant resource IDs

diff --git a/src/frontends/android/app/src/main/java/org/strongswan/android/ui/LogActivity.java b/src/frontends/android/app/src/main/java/org/strongswan/android/ui/LogActivity.java
index c7d052ecdd..8ba3cb478e 100644
--- a/src/frontends/android/app/src/main/java/org/strongswan/android/ui/LogActivity.java
+++ b/src/frontends/android/app/src/main/java/org/strongswan/android/ui/LogActivity.java
@@ -56,36 +56,37 @@ public class LogActivity extends AppCompatActivity
 	@Override
 	public boolean onOptionsItemSelected(MenuItem item)
 	{
-		switch (item.getItemId())
+		if (item.getItemId() == android.R.id.home)
 		{
-			case android.R.id.home:
-				finish();
+			finish();
+			return true;
+		}
+		else if (item.getItemId() == R.id.menu_send_log)
+		{
+			File logfile = new File(getFilesDir(), CharonVpnService.LOG_FILE);
+			if (!logfile.exists() || logfile.length() == 0)
+			{
+				Toast.makeText(this, getString(R.string.empty_log), Toast.LENGTH_SHORT).show();
 				return true;
-			case R.id.menu_send_log:
-				File logfile = new File(getFilesDir(), CharonVpnService.LOG_FILE);
-				if (!logfile.exists() || logfile.length() == 0)
-				{
-					Toast.makeText(this, getString(R.string.empty_log), Toast.LENGTH_SHORT).show();
-					return true;
-				}
+			}

-				String version = "";
-				try
-				{
-					version = getPackageManager().getPackageInfo(getPackageName(), 0).versionName;
-				}
-				catch (NameNotFoundException e)
-				{
-					e.printStackTrace();
-				}
+			String version = "";
+			try
+			{
+				version = getPackageManager().getPackageInfo(getPackageName(), 0).versionName;
+			}
+			catch (NameNotFoundException e)
+			{
+				e.printStackTrace();
+			}

-				Intent intent = new Intent(Intent.ACTION_SEND);
-				intent.putExtra(Intent.EXTRA_EMAIL, new String[]{MainActivity.CONTACT_EMAIL});
-				intent.putExtra(Intent.EXTRA_SUBJECT, String.format(getString(R.string.log_mail_subject), version));
-				intent.setType("text/plain");
-				intent.putExtra(Intent.EXTRA_STREAM, LogContentProvider.createContentUri());
-				startActivity(Intent.createChooser(intent, getString(R.string.send_log)));
-				return true;
+			Intent intent = new Intent(Intent.ACTION_SEND);
+			intent.putExtra(Intent.EXTRA_EMAIL, new String[]{MainActivity.CONTACT_EMAIL});
+			intent.putExtra(Intent.EXTRA_SUBJECT, String.format(getString(R.string.log_mail_subject), version));
+			intent.setType("text/plain");
+			intent.putExtra(Intent.EXTRA_STREAM, LogContentProvider.createContentUri());
+			startActivity(Intent.createChooser(intent, getString(R.string.send_log)));
+			return true;
 		}
 		return super.onOptionsItemSelected(item);
 	}
diff --git a/src/frontends/android/app/src/main/java/org/strongswan/android/ui/MainActivity.java b/src/frontends/android/app/src/main/java/org/strongswan/android/ui/MainActivity.java
index a1e647265c..74355a33e9 100644
--- a/src/frontends/android/app/src/main/java/org/strongswan/android/ui/MainActivity.java
+++ b/src/frontends/android/app/src/main/java/org/strongswan/android/ui/MainActivity.java
@@ -107,30 +107,35 @@ public class MainActivity extends AppCompatActivity implements OnVpnProfileSelec
 	@Override
 	public boolean onOptionsItemSelected(MenuItem item)
 	{
-		switch (item.getItemId())
+		if (item.getItemId() == R.id.menu_import_profile)
 		{
-			case R.id.menu_import_profile:
-				Intent intent = new Intent(this, VpnProfileImportActivity.class);
-				startActivity(intent);
-				return true;
-			case R.id.menu_manage_certs:
-				Intent certIntent = new Intent(this, TrustedCertificatesActivity.class);
-				startActivity(certIntent);
-				return true;
-			case R.id.menu_crl_cache:
-				clearCRLs();
-				return true;
-			case R.id.menu_show_log:
-				Intent logIntent = new Intent(this, LogActivity.class);
-				startActivity(logIntent);
-				return true;
-			case R.id.menu_settings:
-				Intent settingsIntent = new Intent(this, SettingsActivity.class);
-				startActivity(settingsIntent);
-				return true;
-			default:
-				return super.onOptionsItemSelected(item);
+			Intent intent = new Intent(this, VpnProfileImportActivity.class);
+			startActivity(intent);
 		}
+		else if (item.getItemId() == R.id.menu_manage_certs)
+		{
+			Intent certIntent = new Intent(this, TrustedCertificatesActivity.class);
+			startActivity(certIntent);
+		}
+		else if (item.getItemId() == R.id.menu_crl_cache)
+		{
+			clearCRLs();
+		}
+		else if (item.getItemId() == R.id.menu_show_log)
+		{
+			Intent logIntent = new Intent(this, LogActivity.class);
+			startActivity(logIntent);
+		}
+		else if (item.getItemId() == R.id.menu_settings)
+		{
+			Intent settingsIntent = new Intent(this, SettingsActivity.class);
+			startActivity(settingsIntent);
+		}
+		else
+		{
+			return super.onOptionsItemSelected(item);
+		}
+		return true;
 	}

 	@Override
diff --git a/src/frontends/android/app/src/main/java/org/strongswan/android/ui/TrustedCertificatesActivity.java b/src/frontends/android/app/src/main/java/org/strongswan/android/ui/TrustedCertificatesActivity.java
index a6fd0bc09c..1c564f7b9a 100644
--- a/src/frontends/android/app/src/main/java/org/strongswan/android/ui/TrustedCertificatesActivity.java
+++ b/src/frontends/android/app/src/main/java/org/strongswan/android/ui/TrustedCertificatesActivity.java
@@ -114,20 +114,24 @@ public class TrustedCertificatesActivity extends AppCompatActivity implements Tr
 	@Override
 	public boolean onOptionsItemSelected(MenuItem item)
 	{
-		switch (item.getItemId())
+		if (item.getItemId() == android.R.id.home)
 		{
-			case android.R.id.home:
-				finish();
-				return true;
-			case R.id.menu_reload_certs:
-				reloadCertificates();
-				return true;
-			case R.id.menu_import_certificate:
-				Intent intent = new Intent(this, TrustedCertificateImportActivity.class);
-				mImportCertificate.launch(intent);
-				return true;
+			finish();
+		}
+		else if (item.getItemId() == R.id.menu_reload_certs)
+		{
+			reloadCertificates();
 		}
-		return super.onOptionsItemSelected(item);
+		else if (item.getItemId() == R.id.menu_import_certificate)
+		{
+			Intent intent = new Intent(this, TrustedCertificateImportActivity.class);
+			mImportCertificate.launch(intent);
+		}
+		else
+		{
+			return super.onOptionsItemSelected(item);
+		}
+		return true;
 	}

 	@Override
diff --git a/src/frontends/android/app/src/main/java/org/strongswan/android/ui/VpnProfileDetailActivity.java b/src/frontends/android/app/src/main/java/org/strongswan/android/ui/VpnProfileDetailActivity.java
index aeef179ce5..285e67a952 100644
--- a/src/frontends/android/app/src/main/java/org/strongswan/android/ui/VpnProfileDetailActivity.java
+++ b/src/frontends/android/app/src/main/java/org/strongswan/android/ui/VpnProfileDetailActivity.java
@@ -449,18 +449,20 @@ public class VpnProfileDetailActivity extends AppCompatActivity
 	@Override
 	public boolean onOptionsItemSelected(MenuItem item)
 	{
-		switch (item.getItemId())
+		if (item.getItemId() == android.R.id.home ||
+			item.getItemId() == R.id.menu_cancel)
 		{
-			case android.R.id.home:
-			case R.id.menu_cancel:
-				finish();
-				return true;
-			case R.id.menu_accept:
-				saveProfile();
-				return true;
-			default:
-				return super.onOptionsItemSelected(item);
+			finish();
+		}
+		else if (item.getItemId() == R.id.menu_accept)
+		{
+			saveProfile();
 		}
+		else
+		{
+			return super.onOptionsItemSelected(item);
+		}
+		return true;
 	}

 	/**
diff --git a/src/frontends/android/app/src/main/java/org/strongswan/android/ui/VpnProfileImportActivity.java b/src/frontends/android/app/src/main/java/org/strongswan/android/ui/VpnProfileImportActivity.java
index f10ce0e14b..c4dc92bc63 100644
--- a/src/frontends/android/app/src/main/java/org/strongswan/android/ui/VpnProfileImportActivity.java
+++ b/src/frontends/android/app/src/main/java/org/strongswan/android/ui/VpnProfileImportActivity.java
@@ -313,17 +313,19 @@ public class VpnProfileImportActivity extends AppCompatActivity
 	@Override
 	public boolean onOptionsItemSelected(MenuItem item)
 	{
-		switch (item.getItemId())
+		if (item.getItemId() == android.R.id.home)
 		{
-			case android.R.id.home:
-				finish();
-				return true;
-			case R.id.menu_accept:
-				saveProfile();
-				return true;
-			default:
-				return super.onOptionsItemSelected(item);
+			finish();
+		}
+		else if (item.getItemId() == R.id.menu_accept)
+		{
+			saveProfile();
 		}
+		else
+		{
+			return super.onOptionsItemSelected(item);
+		}
+		return true;
 	}

 	private void loadProfile(Uri uri)
diff --git a/src/frontends/android/app/src/main/java/org/strongswan/android/ui/VpnProfileListFragment.java b/src/frontends/android/app/src/main/java/org/strongswan/android/ui/VpnProfileListFragment.java
index e845cc6598..23c2bdbeb2 100644
--- a/src/frontends/android/app/src/main/java/org/strongswan/android/ui/VpnProfileListFragment.java
+++ b/src/frontends/android/app/src/main/java/org/strongswan/android/ui/VpnProfileListFragment.java
@@ -310,58 +310,54 @@ public class VpnProfileListFragment extends Fragment implements MenuProvider
 		@Override
 		public boolean onActionItemClicked(ActionMode mode, MenuItem item)
 		{
-			switch (item.getItemId())
+			if (item.getItemId() == R.id.edit_profile)
 			{
-				case R.id.edit_profile:
+				int position = mSelected.iterator().next();
+				VpnProfile profile = (VpnProfile)mListView.getItemAtPosition(position);
+				Intent connectionIntent = new Intent(getActivity(), VpnProfileDetailActivity.class);
+				connectionIntent.putExtra(VpnProfileDataSource.KEY_UUID, profile.getUUID().toString());
+				startActivity(connectionIntent);
+			}
+			else if (item.getItemId() == R.id.copy_profile)
+			{
+				int position = mSelected.iterator().next();
+				VpnProfile profile = (VpnProfile)mListView.getItemAtPosition(position);
+				profile = profile.clone();
+				profile.setUUID(UUID.randomUUID());
+				profile.setName(String.format(getString(R.string.copied_name), profile.getName()));
+				mDataSource.insertProfile(profile);
+
+				Intent intent = new Intent(Constants.VPN_PROFILES_CHANGED);
+				intent.putExtra(Constants.VPN_PROFILES_SINGLE, profile.getUUID().toString());
+				LocalBroadcastManager.getInstance(getActivity()).sendBroadcast(intent);
+
+				Intent connectionIntent = new Intent(getActivity(), VpnProfileDetailActivity.class);
+				connectionIntent.putExtra(VpnProfileDataSource.KEY_UUID, profile.getUUID().toString());
+				startActivity(connectionIntent);
+			}
+			else if (item.getItemId() == R.id.delete_profile)
+			{
+				ArrayList<VpnProfile> profiles = new ArrayList<>();
+				for (int position : mSelected)
 				{
-					int position = mSelected.iterator().next();
-					VpnProfile profile = (VpnProfile)mListView.getItemAtPosition(position);
-					Intent connectionIntent = new Intent(getActivity(), VpnProfileDetailActivity.class);
-					connectionIntent.putExtra(VpnProfileDataSource.KEY_UUID, profile.getUUID().toString());
-					startActivity(connectionIntent);
-					break;
+					profiles.add((VpnProfile)mListView.getItemAtPosition(position));
 				}
-				case R.id.copy_profile:
+				String[] uuids = new String[profiles.size()];
+				for (int i = 0; i < profiles.size(); i++)
 				{
-					int position = mSelected.iterator().next();
-					VpnProfile profile = (VpnProfile)mListView.getItemAtPosition(position);
-					profile = profile.clone();
-					profile.setUUID(UUID.randomUUID());
-					profile.setName(String.format(getString(R.string.copied_name), profile.getName()));
-					mDataSource.insertProfile(profile);
-
-					Intent intent = new Intent(Constants.VPN_PROFILES_CHANGED);
-					intent.putExtra(Constants.VPN_PROFILES_SINGLE, profile.getUUID().toString());
-					LocalBroadcastManager.getInstance(getActivity()).sendBroadcast(intent);
-
-					Intent connectionIntent = new Intent(getActivity(), VpnProfileDetailActivity.class);
-					connectionIntent.putExtra(VpnProfileDataSource.KEY_UUID, profile.getUUID().toString());
-					startActivity(connectionIntent);
-					break;
+					VpnProfile profile = profiles.get(i);
+					uuids[i] = profile.getUUID().toString();
+					mDataSource.deleteVpnProfile(profile);
 				}
-				case R.id.delete_profile:
-				{
-					ArrayList<VpnProfile> profiles = new ArrayList<>();
-					for (int position : mSelected)
-					{
-						profiles.add((VpnProfile)mListView.getItemAtPosition(position));
-					}
-					String[] uuids = new String[profiles.size()];
-					for (int i = 0; i < profiles.size(); i++)
-					{
-						VpnProfile profile = profiles.get(i);
-						uuids[i] = profile.getUUID().toString();
-						mDataSource.deleteVpnProfile(profile);
-					}
-					Intent intent = new Intent(Constants.VPN_PROFILES_CHANGED);
-					intent.putExtra(Constants.VPN_PROFILES_MULTIPLE, uuids);
-					LocalBroadcastManager.getInstance(getActivity()).sendBroadcast(intent);
-					Toast.makeText(VpnProfileListFragment.this.getActivity(),
-								   R.string.profiles_deleted, Toast.LENGTH_SHORT).show();
-					break;
-				}
-				default:
-					return false;
+				Intent intent = new Intent(Constants.VPN_PROFILES_CHANGED);
+				intent.putExtra(Constants.VPN_PROFILES_MULTIPLE, uuids);
+				LocalBroadcastManager.getInstance(getActivity()).sendBroadcast(intent);
+				Toast.makeText(VpnProfileListFragment.this.getActivity(),
+							   R.string.profiles_deleted, Toast.LENGTH_SHORT).show();
+			}
+			else
+			{
+				return false;
 			}
 			mode.finish();
 			return true;
diff --git a/src/frontends/android/gradle.properties b/src/frontends/android/gradle.properties
index bf5ebf57e7..dd1c0d5138 100644
--- a/src/frontends/android/gradle.properties
+++ b/src/frontends/android/gradle.properties
@@ -1,9 +1,5 @@
-android.defaults.buildfeatures.resvalues=true
-android.dependency.excludeLibraryComponentsFromConstraints=true
-android.dependency.useConstraints=true
-android.enableAppCompileTimeRClass=false
+android.dependency.useConstraints=false
 android.enableJetifier=false
-android.nonFinalResIds=false
 android.nonTransitiveRClass=false
 android.r8.strictFullModeForKeepRules=false
 android.uniquePackageNames=false