Skip to content

Commit 1c01fa2

Browse files
manfred-muellerManfred Mueller
authored andcommitted
Context menu for AndroidTV adjusted
Signed-off-by: Manfred Mueller <kontakt@nass-ek.de>
1 parent a5f72f7 commit 1c01fa2

File tree

7 files changed

+116
-4
lines changed

7 files changed

+116
-4
lines changed

app/src/main/java/com/nass/ek/w3kiosk/AboutActivity.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package com.nass.ek.w3kiosk;
22

3+
import static com.nass.ek.w3kiosk.ChecksAndConfigs.checkApps;
34
import static com.nass.ek.w3kiosk.ChecksAndConfigs.connectionType;
5+
import static com.nass.ek.w3kiosk.ChecksAndConfigs.getIPAddress;
46

57
import android.annotation.SuppressLint;
68
import android.os.Bundle;
@@ -50,7 +52,7 @@ public void onFinish() {
5052
Rooted = getString(R.string.No);
5153
}
5254
Date buildDate = new Date(Long.parseLong(BuildConfig.BUILD_TIME));
53-
@SuppressLint("StringFormatMatches") String appinfo = (String.format(getString(R.string.appInfo), getString(R.string.app_name), localVersion, DateFormat.getDateInstance(DateFormat.MEDIUM).format(buildDate), connectionType(this), Rooted));
55+
@SuppressLint("StringFormatMatches") String appinfo = (String.format(getString(R.string.appInfo), getString(R.string.app_name), localVersion, DateFormat.getDateInstance(DateFormat.MEDIUM).format(buildDate), String.format(connectionType(this) + " " + getIPAddress(getApplicationContext())), Rooted));
5456
TextView appinfoText = findViewById(R.id.textView3);
5557
appinfoText.setText(appinfo);
5658
findViewById(R.id.logo_id).setOnClickListener(view -> checkUpdate());

app/src/main/java/com/nass/ek/w3kiosk/ChecksAndConfigs.java

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,20 @@
77
import android.net.Network;
88
import android.net.NetworkCapabilities;
99
import android.net.NetworkInfo;
10+
import android.net.wifi.WifiManager;
1011
import android.os.Build;
12+
import android.text.format.Formatter;
1113

1214
import androidx.appcompat.app.AppCompatActivity;
1315

1416
import java.io.BufferedReader;
1517
import java.io.File;
1618
import java.io.IOException;
1719
import java.io.InputStreamReader;
20+
import java.net.InetAddress;
21+
import java.net.NetworkInterface;
22+
import java.util.Collections;
23+
import java.util.List;
1824
import java.util.Random;
1925

2026
public class ChecksAndConfigs extends AppCompatActivity {
@@ -162,4 +168,48 @@ private static String generateRandomNumber() {
162168
int randomNumber = random.nextInt(1000000); // Change this range as needed
163169
return String.valueOf(randomNumber);
164170
}
171+
public static String getIPAddress(Context context) {
172+
// Check if connected to Wi-Fi
173+
ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
174+
NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
175+
176+
if (networkInfo != null && networkInfo.isConnected()) {
177+
if (networkInfo.getType() == ConnectivityManager.TYPE_WIFI) {
178+
// Get IP address when connected to Wi-Fi
179+
WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
180+
int ipAddress = wifiManager.getConnectionInfo().getIpAddress();
181+
return Formatter.formatIpAddress(ipAddress);
182+
} else {
183+
// Get IP address when connected to cellular or other network types
184+
return getIPAddressFromNetworkInterface();
185+
}
186+
}
187+
return "";
188+
}
189+
190+
// This method retrieves the device's IP address from network interfaces (for cellular networks or other connections)
191+
private static String getIPAddressFromNetworkInterface() {
192+
try {
193+
List<NetworkInterface> interfaces = Collections.list(NetworkInterface.getNetworkInterfaces());
194+
for (NetworkInterface networkInterface : interfaces) {
195+
List<InetAddress> addresses = Collections.list(networkInterface.getInetAddresses());
196+
for (InetAddress address : addresses) {
197+
if (!address.isLoopbackAddress() && address instanceof InetAddress) {
198+
String ipAddress = address.getHostAddress();
199+
if (isIPv4Address(ipAddress)) {
200+
return ipAddress;
201+
}
202+
}
203+
}
204+
}
205+
} catch (Exception e) {
206+
e.printStackTrace();
207+
}
208+
return "";
209+
}
210+
211+
// Helper method to check if the IP address is IPv4 (ignore IPv6 for most common cases)
212+
private static boolean isIPv4Address(String ipAddress) {
213+
return ipAddress.indexOf(':') < 0; // IPv6 addresses contain ':'
214+
}
165215
}

app/src/main/java/com/nass/ek/w3kiosk/MainActivity.java

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,10 @@
2222
import android.content.pm.ActivityInfo;
2323
import android.content.pm.PackageManager;
2424
import android.net.ConnectivityManager;
25+
import android.net.LinkAddress;
26+
import android.net.LinkProperties;
27+
import android.net.Network;
28+
import android.net.NetworkCapabilities;
2529
import android.net.Uri;
2630
import android.os.AsyncTask;
2731
import android.os.Build;
@@ -30,6 +34,10 @@
3034
import android.os.Environment;
3135
import android.os.Handler;
3236
import android.provider.Settings;
37+
import android.text.Layout;
38+
import android.text.SpannableString;
39+
import android.text.style.AlignmentSpan;
40+
import android.text.style.RelativeSizeSpan;
3341
import android.util.Log;
3442
import android.view.ContextMenu;
3543
import android.view.KeyEvent;
@@ -65,6 +73,9 @@
6573
import java.io.IOException;
6674
import java.io.InputStream;
6775
import java.net.HttpURLConnection;
76+
import java.net.Inet4Address;
77+
import java.net.Inet6Address;
78+
import java.net.InetAddress;
6879
import java.net.URL;
6980
import java.util.Objects;
7081

@@ -82,6 +93,7 @@ public class MainActivity extends AppCompatActivity implements SharedPreferences
8293
public boolean marquee;
8394
private String marqueeText;
8495
private boolean marqueeVisible;
96+
public String localIp;
8597
public String clientUrl1;
8698
public String clientUrl2;
8799
public String clientUrl3;
@@ -139,6 +151,7 @@ protected void onCreate(Bundle savedInstanceState) {
139151
checkmobileMode = sharedPreferences.getBoolean("mobileMode", false);
140152
checkAutoLogin = sharedPreferences.getBoolean("autoLogin", false);
141153
autoUpdate = sharedPreferences.getBoolean("autoUpdate", false);
154+
localIp = getLocalIpAddress(this);
142155
marquee = sharedPreferences.getBoolean("marquee", false);
143156
appsCount = sharedPreferences.getInt("appsCount", 0);
144157
toSetting = sharedPreferences.getInt("urlTimeout", 0);
@@ -613,6 +626,16 @@ public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMen
613626
menu.add(0, 2, 0, R.string.deactivateMenubutton);
614627
menu.add(0, 3, 0, R.string.settings);
615628
menu.add(0, 4, 0, R.string.showHelp);
629+
630+
// Create the 5th item with centered and smaller text
631+
String ipText = String.format("IP: %s", localIp);
632+
SpannableString smallerCenteredText = new SpannableString(ipText);
633+
// Center the text
634+
smallerCenteredText.setSpan(new AlignmentSpan.Standard(Layout.Alignment.ALIGN_CENTER), 0, ipText.length(), 0);
635+
// Make the text half the size
636+
smallerCenteredText.setSpan(new RelativeSizeSpan(0.5f), 0, ipText.length(), 0);
637+
638+
menu.add(0, 5, 0, smallerCenteredText);
616639
}
617640

618641
@Override
@@ -657,6 +680,7 @@ private void stopMarqueeHandler() {
657680
marqueeHandler.removeCallbacks(marqueeRunnable);
658681
}
659682

683+
@SuppressLint("StaticFieldLeak")
660684
public void Update(final String apkUrl1, @Nullable final String apkUrl2) {
661685
new AsyncTask<Void, String, String>() {
662686
String result = "";
@@ -813,4 +837,31 @@ public void onClick(DialogInterface dialog, int which) {
813837
});
814838
builder.show();
815839
}
840+
public static String getLocalIpAddress(Context context) {
841+
try {
842+
ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
843+
if (connectivityManager != null) {
844+
Network[] allNetworks = connectivityManager.getAllNetworks();
845+
for (Network network : allNetworks) {
846+
NetworkCapabilities networkCapabilities = connectivityManager.getNetworkCapabilities(network);
847+
if (networkCapabilities != null && networkCapabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)) {
848+
LinkProperties linkProperties = connectivityManager.getLinkProperties(network);
849+
if (linkProperties != null) {
850+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { // Android 7 (Nougat) or higher
851+
for (LinkAddress linkAddress : linkProperties.getLinkAddresses()) {
852+
InetAddress address = linkAddress.getAddress();
853+
// Check if it's a valid local IP address (IPv4 or IPv6)
854+
if (!address.isLoopbackAddress() && (address instanceof Inet4Address)) {
855+
return address.getHostAddress();
856+
}
857+
}
858+
} }
859+
}
860+
}
861+
}
862+
} catch (Exception e) {
863+
e.printStackTrace();
864+
}
865+
return null; // Return null if no IP address was found
866+
}
816867
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
3+
android:id="@+id/centered_menu_item"
4+
android:layout_width="match_parent"
5+
android:layout_height="wrap_content"
6+
android:gravity="center"
7+
android:padding="16dp"
8+
android:textColor="@android:color/black"
9+
android:textSize="16sp" />

app/src/main/res/values/strings.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
<string name="enable_autoscale">Adjust screen size</string>
1111
<string name="mobile_mode">Mobile Mode</string>
1212
<string name="website1">First client url (without %s)</string>
13-
<string name="copyright" translatable="false"2023, NASS e.K.</string>
13+
<string name="copyright" translatable="false"2024, NASS e.K.</string>
1414
<string name="set_home_button" translatable="false">Set home button</string>
1515
<string name="set_launcher_button" translatable="false">Set launcher button</string>
1616
<string name="settings_save_button" translatable="false">Settings save button</string>

build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ buildscript {
1111
}
1212

1313
ext {
14-
verCode = 47
14+
verCode = 48
1515
verName = "2.6.2"
1616
releaseDir = file("${projectDir}/app/release")
1717
}

w3kiosk.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"versionCode":47,
2+
"versionCode":48,
33
"versionName":"2.6.2",
44
"contentText":"Neue W3Kiosk-Version",
55
"minSupport":1,

0 commit comments

Comments
 (0)