@@ -23,6 +23,8 @@ namespace PAL_NS_BEGIN {
23
23
24
24
static std::string s_time_zone;
25
25
26
+ static std::string s_device_class;
27
+
26
28
static void setValue (JNIEnv *env, std::string & s, jstring js)
27
29
{
28
30
const char *start = env->GetStringUTFChars (js, nullptr );
@@ -45,13 +47,16 @@ namespace PAL_NS_BEGIN {
45
47
jclass localeClass = pEnv->FindClass (" java/util/Locale" );
46
48
jclass packageInfoClass = pEnv->FindClass (" android/content/pm/PackageInfo" );
47
49
jclass packageManagerClass = pEnv->FindClass (" android/content/pm/PackageManager" );
50
+ jclass resourcesClass = pEnv->FindClass (" android/content/res/Resources" );
51
+ jclass configurationClass = pEnv->FindClass (" android/content/res/Configuration" );
48
52
49
53
jfieldID sdkIntFid = pEnv->GetStaticFieldID (buildVersionClass, " SDK_INT" , " I" );
50
54
int SDK_INT = pEnv->GetStaticIntField (buildVersionClass, sdkIntFid);
51
55
52
56
jfieldID versionNameFid = pEnv->GetFieldID (packageInfoClass, " versionName" , " Ljava/lang/String;" );
53
57
jfieldID releaseFid = pEnv->GetStaticFieldID (buildVersionClass, " RELEASE" , " Ljava/lang/String;" );
54
58
jfieldID incrementalFid = pEnv->GetStaticFieldID (buildVersionClass, " INCREMENTAL" , " Ljava/lang/String;" );
59
+ jfieldID screenLayoutSizeLargeFid = pEnv->GetStaticFieldID (configurationClass, " SCREENLAYOUT_SIZE_LARGE" , " I" );
55
60
56
61
// public String getPackageName ()
57
62
jmethodID getPackageNameMid = pEnv->GetMethodID (contextClass, " getPackageName" , " ()Ljava/lang/String;" );
@@ -68,6 +73,29 @@ namespace PAL_NS_BEGIN {
68
73
69
74
// public static Locale getDefault ()
70
75
jmethodID getDefaultLocaleMid = pEnv->GetStaticMethodID (localeClass, " getDefault" , " ()Ljava/util/Locale;" );
76
+
77
+ // public abstract Resources getResources ()
78
+ jmethodID getResourceMid = pEnv->GetMethodID (contextClass, " getResources" , " ()Landroid/content/res/Resources" );
79
+
80
+ // public abstract Configuration getConfiguration ()
81
+ jmethodID getConfigurationMid = pEnv->GetMethodID (resourcesClass, " getConfiguration" , " ()Landroid/content/res/Configuration" );
82
+
83
+ // public abstract boolean isLayoutSizeAtLeast (int layoutSize)
84
+ jmethodID isLayoutSizeAtLeastMid = pEnv->GetMethodID (configurationClass, " isLayoutSizeAtLeast" , " (I)Z" );
85
+
86
+ jint screenLayoutSizeLargeJint = reinterpret_cast <jint>(pEnv->GetStaticIntField (configurationClass, screenLayoutSizeLargeFid));
87
+
88
+ // call context.getResources().getConfiguration().isLayoutSizeAtLeast(Configuration.SCREENLAYOUT_SIZE_LARGE)
89
+ jobject resources = pEnv->CallObjectMethod (activity, getResourceMid);
90
+ jobject configuration = pEnv->CallObjectMethod (resources, getConfigurationMid);
91
+ jboolean isTablet = reinterpret_cast <jboolean>(pEnv->CallBooleanMethod (configuration, isLayoutSizeAtLeastMid, screenLayoutSizeLargeJint));
92
+
93
+ std::string device_class;
94
+ if (isTablet) {
95
+ device_class = " Android.PC" ;
96
+ } else {
97
+ device_class = " Android.Phone" ;
98
+ }
71
99
72
100
const char * jStr;
73
101
jboolean isCopy;
@@ -117,6 +145,7 @@ namespace PAL_NS_BEGIN {
117
145
AndroidSystemInformationConnector::s_app_version = std::move (versionName);
118
146
AndroidSystemInformationConnector::s_os_full_version = std::move (osVersion);
119
147
AndroidSystemInformationConnector::s_os_major_version = std::move (versionRelease);
148
+ AndroidSystemInformationConnector::s_device_class = (std::move (device_class));
120
149
}
121
150
122
151
};
@@ -131,6 +160,8 @@ namespace PAL_NS_BEGIN {
131
160
132
161
std::string AndroidSystemInformationConnector::s_time_zone;
133
162
163
+ std::string AndroidSystemInformationConnector::s_device_class;
164
+
134
165
SystemInformationImpl::SystemInformationImpl (IRuntimeConfig& configuration) :
135
166
m_info_helper (),
136
167
m_os_name (" Android" )
@@ -148,6 +179,7 @@ namespace PAL_NS_BEGIN {
148
179
m_os_major_version = AndroidSystemInformationConnector::s_os_major_version;
149
180
m_os_full_version = AndroidSystemInformationConnector::s_os_full_version;
150
181
m_user_timezone = AndroidSystemInformationConnector::s_time_zone;
182
+ m_device_class = AndroidSystemInformationConnector::s_device_class;
151
183
}
152
184
153
185
SystemInformationImpl::~SystemInformationImpl ()
@@ -179,7 +211,9 @@ extern "C" JNIEXPORT void JNICALL Java_com_microsoft_applications_events_HttpCli
179
211
180
212
jstring os_major_version,
181
213
jstring os_full_version,
182
- jstring time_zone
214
+ jstring time_zone,
215
+
216
+ jstring deviceClass
183
217
)
184
218
{
185
219
PAL::AndroidSystemInformationConnector::setValue (
@@ -206,5 +240,9 @@ extern "C" JNIEXPORT void JNICALL Java_com_microsoft_applications_events_HttpCli
206
240
env,
207
241
PAL::AndroidSystemInformationConnector::s_time_zone,
208
242
time_zone);
243
+ PAL::AndroidSystemInformationConnector::setValue (
244
+ env,
245
+ PAL::AndroidSystemInformationConnector::s_device_class,
246
+ deviceClass);
209
247
}
210
248
0 commit comments