Skip to content

Commit 4fa8acd

Browse files
authored
REV-148: Add functions for device info (#22)
* android device functions * android device functions * missed .h * fix linting
1 parent 28d6a04 commit 4fa8acd

File tree

3 files changed

+225
-1
lines changed

3 files changed

+225
-1
lines changed

OpacityCore/src/main/cpp/OpacityCore.cpp

Lines changed: 127 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -193,6 +193,133 @@ extern "C" bool android_is_app_foregrounded() {
193193
return env->CallBooleanMethod(java_object, method);
194194
}
195195

196+
extern "C" const char *android_get_os_version() {
197+
JNIEnv *env = GetJniEnv();
198+
jclass jOpacityCore = env->GetObjectClass(java_object);
199+
jmethodID method = env->GetMethodID(jOpacityCore, "getOsVersion", "()Ljava/lang/String;");
200+
auto res = (jstring)env->CallObjectMethod(java_object, method);
201+
202+
if (res == nullptr)
203+
{
204+
return "";
205+
}
206+
207+
const char *val_str = env->GetStringUTFChars(res, nullptr);
208+
return val_str;
209+
}
210+
211+
extern "C" const char *android_get_device_manufacturer() {
212+
JNIEnv *env = GetJniEnv();
213+
jclass jOpacityCore = env->GetObjectClass(java_object);
214+
jmethodID method = env->GetMethodID(jOpacityCore, "getDeviceManufacturer", "()Ljava/lang/String;");
215+
auto res = (jstring)env->CallObjectMethod(java_object, method);
216+
217+
if (res == nullptr)
218+
{
219+
return "";
220+
}
221+
222+
const char *val_str = env->GetStringUTFChars(res, nullptr);
223+
return val_str;
224+
}
225+
226+
extern "C" const char *android_get_device_model() {
227+
JNIEnv *env = GetJniEnv();
228+
jclass jOpacityCore = env->GetObjectClass(java_object);
229+
jmethodID method = env->GetMethodID(jOpacityCore, "getDeviceModel", "()Ljava/lang/String;");
230+
auto res = (jstring)env->CallObjectMethod(java_object, method);
231+
232+
if (res == nullptr)
233+
{
234+
return "";
235+
}
236+
237+
const char *val_str = env->GetStringUTFChars(res, nullptr);
238+
return val_str;
239+
}
240+
241+
extern "C" const char *android_get_device_locale() {
242+
JNIEnv *env = GetJniEnv();
243+
jclass jOpacityCore = env->GetObjectClass(java_object);
244+
jmethodID method = env->GetMethodID(jOpacityCore, "getDeviceLocale", "()Ljava/lang/String;");
245+
auto res = (jstring)env->CallObjectMethod(java_object, method);
246+
247+
if (res == nullptr)
248+
{
249+
return "";
250+
}
251+
252+
const char *val_str = env->GetStringUTFChars(res, nullptr);
253+
return val_str;
254+
}
255+
256+
extern "C" int android_get_sdk_version() {
257+
JNIEnv *env = GetJniEnv();
258+
jclass jOpacityCore = env->GetObjectClass(java_object);
259+
jmethodID method = env->GetMethodID(jOpacityCore, "getSdkVersion", "()I");
260+
return env->CallIntMethod(java_object, method);
261+
}
262+
263+
extern "C" int android_get_screen_width() {
264+
JNIEnv *env = GetJniEnv();
265+
jclass jOpacityCore = env->GetObjectClass(java_object);
266+
jmethodID method = env->GetMethodID(jOpacityCore, "getScreenWidth", "()I");
267+
return env->CallIntMethod(java_object, method);
268+
}
269+
270+
extern "C" int android_get_screen_height() {
271+
JNIEnv *env = GetJniEnv();
272+
jclass jOpacityCore = env->GetObjectClass(java_object);
273+
jmethodID method = env->GetMethodID(jOpacityCore, "getScreenHeight", "()I");
274+
return env->CallIntMethod(java_object, method);
275+
}
276+
277+
extern "C" float android_get_screen_density() {
278+
JNIEnv *env = GetJniEnv();
279+
jclass jOpacityCore = env->GetObjectClass(java_object);
280+
jmethodID method = env->GetMethodID(jOpacityCore, "getScreenDensity", "()F");
281+
return env->CallFloatMethod(java_object, method);
282+
}
283+
284+
extern "C" int android_get_screen_dpi() {
285+
JNIEnv *env = GetJniEnv();
286+
jclass jOpacityCore = env->GetObjectClass(java_object);
287+
jmethodID method = env->GetMethodID(jOpacityCore, "getScreenDpi", "()I");
288+
return env->CallIntMethod(java_object, method);
289+
}
290+
291+
extern "C" const char *android_get_device_cpu() {
292+
JNIEnv *env = GetJniEnv();
293+
jclass jOpacityCore = env->GetObjectClass(java_object);
294+
jmethodID method = env->GetMethodID(jOpacityCore, "getDeviceCpu", "()Ljava/lang/String;");
295+
jstring jCpu = (jstring)env->CallObjectMethod(java_object, method);
296+
if (jCpu == nullptr)
297+
{
298+
return strdup("");
299+
}
300+
const char *cpu = env->GetStringUTFChars(jCpu, nullptr);
301+
char *result = strdup(cpu);
302+
env->ReleaseStringUTFChars(jCpu, cpu);
303+
env->DeleteLocalRef(jCpu);
304+
return result;
305+
}
306+
307+
extern "C" const char *android_get_device_codename() {
308+
JNIEnv *env = GetJniEnv();
309+
jclass jOpacityCore = env->GetObjectClass(java_object);
310+
jmethodID method = env->GetMethodID(jOpacityCore, "getDeviceCodename", "()Ljava/lang/String;");
311+
jstring jCodename = (jstring)env->CallObjectMethod(java_object, method);
312+
if (jCodename == nullptr)
313+
{
314+
return strdup("");
315+
}
316+
const char *codename = env->GetStringUTFChars(jCodename, nullptr);
317+
char *result = strdup(codename);
318+
env->ReleaseStringUTFChars(jCodename, codename);
319+
env->DeleteLocalRef(jCodename);
320+
return result;
321+
}
322+
196323
extern "C" void android_close_webview() {
197324
JNIEnv *env = GetJniEnv();
198325
// Get the Kotlin class

OpacityCore/src/main/jni/include/sdk.h

Lines changed: 49 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,22 @@ typedef bool (*IsWifiConnectedFn)(void);
6666

6767
typedef bool (*IsRootedFn)(void);
6868

69+
typedef bool (*IsAppForeground)(void);
70+
71+
typedef const char *(*GetDeviceLocaleFn)(void);
72+
73+
typedef int32_t (*GetScreenWidthFn)(void);
74+
75+
typedef int32_t (*GetScreenHeightFn)(void);
76+
77+
typedef float (*GetScreenDensityFn)(void);
78+
79+
typedef int32_t (*GetScreenDpiFn)(void);
80+
81+
typedef const char *(*GetDeviceCpuFn)(void);
82+
83+
typedef const char *(*GetDeviceCodenameFn)(void);
84+
6985

7086

7187

@@ -162,6 +178,30 @@ void emit_webview_event(const char *payload);
162178

163179
const char *get_api_version(void);
164180

181+
extern bool android_is_app_foregrounded(void);
182+
183+
extern const char *android_get_os_version(void);
184+
185+
extern const char *android_get_device_manufacturer(void);
186+
187+
extern const char *android_get_device_model(void);
188+
189+
extern const char *android_get_device_locale(void);
190+
191+
extern int32_t android_get_screen_width(void);
192+
193+
extern int32_t android_get_screen_height(void);
194+
195+
extern float android_get_screen_density(void);
196+
197+
extern int32_t android_get_screen_dpi(void);
198+
199+
extern int32_t android_get_sdk_version(void);
200+
201+
extern const char *android_get_device_cpu(void);
202+
203+
extern const char *android_get_device_codename(void);
204+
165205
extern const char *get_ip_address(void);
166206

167207
void register_ios_callbacks(IosPrepareRequestFn ios_prepare_request,
@@ -189,7 +229,15 @@ void register_ios_callbacks(IosPrepareRequestFn ios_prepare_request,
189229
GetVerticalAccuracyFn get_vertical_accuracy,
190230
IsLocationServicesEnabledFn is_location_services_enabled,
191231
IsWifiConnectedFn is_wifi_connected,
192-
IsRootedFn is_rooted);
232+
IsRootedFn is_rooted,
233+
IsAppForeground is_app_foreground,
234+
GetDeviceLocaleFn get_device_locale,
235+
GetScreenWidthFn get_screen_width,
236+
GetScreenHeightFn get_screen_height,
237+
GetScreenDensityFn get_screen_density,
238+
GetScreenDpiFn get_screen_dpi,
239+
GetDeviceCpuFn get_device_cpu,
240+
GetDeviceCodenameFn get_device_codename);
193241

194242
extern void secure_set(const char *key, const char *value);
195243

OpacityCore/src/main/kotlin/com/opacitylabs/opacitycore/OpacityCore.kt

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package com.opacitylabs.opacitycore
22

33
import android.content.Context
44
import android.content.Intent
5+
import android.os.Build
56
import android.os.Bundle
67
import androidx.localbroadcastmanager.content.LocalBroadcastManager
78
import com.opacitylabs.opacitycore.JsonConverter.Companion.mapToJsonElement
@@ -76,6 +77,54 @@ object OpacityCore {
7677
}
7778
}
7879

80+
fun getOsVersion(): String {
81+
return Build.VERSION.RELEASE
82+
}
83+
84+
fun getSdkVersion(): Int {
85+
return Build.VERSION.SDK_INT
86+
}
87+
88+
fun getDeviceManufacturer(): String {
89+
return Build.MANUFACTURER
90+
}
91+
92+
fun getDeviceModel(): String {
93+
return Build.MODEL
94+
}
95+
96+
fun getDeviceLocale(): String {
97+
return java.util.Locale.getDefault().toLanguageTag()
98+
}
99+
100+
fun getScreenWidth(): Int {
101+
val displayMetrics = appContext.resources.displayMetrics
102+
return displayMetrics.widthPixels
103+
}
104+
105+
fun getScreenHeight(): Int {
106+
val displayMetrics = appContext.resources.displayMetrics
107+
return displayMetrics.heightPixels
108+
}
109+
110+
fun getScreenDensity(): Float {
111+
val displayMetrics = appContext.resources.displayMetrics
112+
return displayMetrics.density
113+
}
114+
115+
fun getScreenDpi(): Int {
116+
val displayMetrics = appContext.resources.displayMetrics
117+
return displayMetrics.densityDpi
118+
}
119+
120+
fun getDeviceCpu(): String {
121+
return Build.SUPPORTED_ABIS.firstOrNull() ?: Build.CPU_ABI
122+
}
123+
124+
fun getDeviceCodename(): String {
125+
return Build.DEVICE
126+
}
127+
79128
fun securelySet(key: String, value: String) {
80129
cryptoManager.set(key, value)
81130
}

0 commit comments

Comments
 (0)