Skip to content

Commit ce259d2

Browse files
authored
Merge pull request #842 from CleverTap/develop
Release corev7.4.1 and ptv2.10
2 parents 80038e8 + 37af528 commit ce259d2

File tree

119 files changed

+2131
-453
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

119 files changed

+2131
-453
lines changed

.run/All Tests.run.xml

Lines changed: 268 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,268 @@
1+
<component name="ProjectRunConfigurationManager">
2+
<configuration default="false" name="All Tests" type="GradleRunConfiguration" factoryName="Gradle">
3+
<ExternalSystemSettings>
4+
<option name="executionName" />
5+
<option name="externalProjectPath" value="$PROJECT_DIR$" />
6+
<option name="externalSystemIdString" value="GRADLE" />
7+
<option name="scriptParameters" value="" />
8+
<option name="taskDescriptions">
9+
<list />
10+
</option>
11+
<option name="taskNames">
12+
<list>
13+
<option value=":clevertap-core:testDebugUnitTest" />
14+
<option value="--tests" />
15+
<option value="&quot;com.clevertap.android.sdk.*&quot;" />
16+
<option value=":clevertap-geofence:testDebugUnitTest" />
17+
<option value="--tests" />
18+
<option value="&quot;com.clevertap.android.geofence.*&quot;" />
19+
<option value=":clevertap-hms:testDebugUnitTest" />
20+
<option value="--tests" />
21+
<option value="&quot;com.clevertap.android.hms.*&quot;" />
22+
<option value=":clevertap-pushtemplates:testDebugUnitTest" />
23+
<option value="--tests" />
24+
<option value="&quot;com.clevertap.android.pushtemplates.*&quot;" />
25+
</list>
26+
</option>
27+
<option name="vmOptions" />
28+
</ExternalSystemSettings>
29+
<ExternalSystemDebugServerProcess>false</ExternalSystemDebugServerProcess>
30+
<ExternalSystemReattachDebugProcess>true</ExternalSystemReattachDebugProcess>
31+
<EXTENSION ID="com.intellij.execution.ExternalSystemRunConfigurationJavaExtension">
32+
<extension name="coverage">
33+
<pattern>
34+
<option name="PATTERN" value="com.clevertap.android.sdk.customviews.*" />
35+
<option name="ENABLED" value="true" />
36+
<option name="INCLUDE" value="false" />
37+
</pattern>
38+
<pattern>
39+
<option name="PATTERN" value="com.clevertap.android.geofence.BuildConfig" />
40+
<option name="ENABLED" value="true" />
41+
<option name="INCLUDE" value="false" />
42+
</pattern>
43+
<pattern>
44+
<option name="PATTERN" value="com.clevertap.android.hms.BuildConfig" />
45+
<option name="ENABLED" value="true" />
46+
<option name="INCLUDE" value="false" />
47+
</pattern>
48+
<pattern>
49+
<option name="PATTERN" value="com.clevertap.android.pushtemplates.BuildConfig" />
50+
<option name="ENABLED" value="true" />
51+
<option name="INCLUDE" value="false" />
52+
</pattern>
53+
<pattern>
54+
<option name="PATTERN" value="com.clevertap.android.sdk.BuildConfig" />
55+
<option name="ENABLED" value="true" />
56+
<option name="INCLUDE" value="false" />
57+
</pattern>
58+
<pattern>
59+
<option name="PATTERN" value="com.clevertap.android.shared.test.BuildConfig" />
60+
<option name="ENABLED" value="true" />
61+
<option name="INCLUDE" value="false" />
62+
</pattern>
63+
<pattern>
64+
<option name="PATTERN" value="com.clevertap.android.geofence.Logger" />
65+
<option name="ENABLED" value="true" />
66+
<option name="INCLUDE" value="false" />
67+
</pattern>
68+
<pattern>
69+
<option name="PATTERN" value="com.clevertap.android.sdk.Logger" />
70+
<option name="ENABLED" value="true" />
71+
<option name="INCLUDE" value="false" />
72+
</pattern>
73+
<pattern>
74+
<option name="PATTERN" value="com.clevertap.android.pushtemplates.content.*" />
75+
<option name="ENABLED" value="true" />
76+
<option name="INCLUDE" value="false" />
77+
</pattern>
78+
<pattern>
79+
<option name="PATTERN" value="com.clevertap.android.pushtemplates.styles.*" />
80+
<option name="ENABLED" value="true" />
81+
<option name="INCLUDE" value="false" />
82+
</pattern>
83+
<pattern>
84+
<option name="PATTERN" value="com.clevertap.android.sdk.InAppNotificationActivity" />
85+
<option name="ENABLED" value="true" />
86+
<option name="INCLUDE" value="false" />
87+
</pattern>
88+
<pattern>
89+
<option name="PATTERN" value="com.clevertap.android.sdk.inbox.CTInboxActivity" />
90+
<option name="ENABLED" value="true" />
91+
<option name="INCLUDE" value="false" />
92+
</pattern>
93+
<pattern>
94+
<option name="PATTERN" value="com.clevertap.android.sdk.inapp.InAppWebViewClient" />
95+
<option name="ENABLED" value="true" />
96+
<option name="INCLUDE" value="false" />
97+
</pattern>
98+
<pattern>
99+
<option name="PATTERN" value="com.clevertap.android.sdk.inapp.CTInAppHtmlFooterFragment" />
100+
<option name="ENABLED" value="true" />
101+
<option name="INCLUDE" value="false" />
102+
</pattern>
103+
<pattern>
104+
<option name="PATTERN" value="com.clevertap.android.sdk.inapp.CTInAppHtmlHeaderFragment" />
105+
<option name="ENABLED" value="true" />
106+
<option name="INCLUDE" value="false" />
107+
</pattern>
108+
<pattern>
109+
<option name="PATTERN" value="com.clevertap.android.sdk.inapp.CTInAppHtmlInterstitialFragment" />
110+
<option name="ENABLED" value="true" />
111+
<option name="INCLUDE" value="false" />
112+
</pattern>
113+
<pattern>
114+
<option name="PATTERN" value="com.clevertap.android.sdk.inapp.CTInAppHtmlHalfInterstitialFragment" />
115+
<option name="ENABLED" value="true" />
116+
<option name="INCLUDE" value="false" />
117+
</pattern>
118+
<pattern>
119+
<option name="PATTERN" value="com.clevertap.android.sdk.inapp.CTInAppBasePartialFragment" />
120+
<option name="ENABLED" value="true" />
121+
<option name="INCLUDE" value="false" />
122+
</pattern>
123+
<pattern>
124+
<option name="PATTERN" value="com.clevertap.android.sdk.inapp.CTInAppHtmlCoverFragment" />
125+
<option name="ENABLED" value="true" />
126+
<option name="INCLUDE" value="false" />
127+
</pattern>
128+
<pattern>
129+
<option name="PATTERN" value="com.clevertap.android.sdk.inapp.CTInAppNativeCoverFragment" />
130+
<option name="ENABLED" value="true" />
131+
<option name="INCLUDE" value="false" />
132+
</pattern>
133+
<pattern>
134+
<option name="PATTERN" value="com.clevertap.android.sdk.inapp.CTInAppBaseFullNativeFragment" />
135+
<option name="ENABLED" value="true" />
136+
<option name="INCLUDE" value="false" />
137+
</pattern>
138+
<pattern>
139+
<option name="PATTERN" value="com.clevertap.android.sdk.inapp.CTInAppBasePartialNativeFragment" />
140+
<option name="ENABLED" value="true" />
141+
<option name="INCLUDE" value="false" />
142+
</pattern>
143+
<pattern>
144+
<option name="PATTERN" value="com.clevertap.android.sdk.inapp.CTInAppNativeHeaderFragment" />
145+
<option name="ENABLED" value="true" />
146+
<option name="INCLUDE" value="false" />
147+
</pattern>
148+
<pattern>
149+
<option name="PATTERN" value="com.clevertap.android.sdk.inapp.CTInAppNativeFooterFragment" />
150+
<option name="ENABLED" value="true" />
151+
<option name="INCLUDE" value="false" />
152+
</pattern>
153+
<pattern>
154+
<option name="PATTERN" value="com.clevertap.android.sdk.inapp.CTInAppNativeInterstitialImageFragment" />
155+
<option name="ENABLED" value="true" />
156+
<option name="INCLUDE" value="false" />
157+
</pattern>
158+
<pattern>
159+
<option name="PATTERN" value="com.clevertap.android.sdk.inapp.CTInAppNativeCoverFragment" />
160+
<option name="ENABLED" value="true" />
161+
<option name="INCLUDE" value="false" />
162+
</pattern>
163+
<pattern>
164+
<option name="PATTERN" value="com.clevertap.android.sdk.inapp.CTInAppNativeHalfInterstitialImageFragment" />
165+
<option name="ENABLED" value="true" />
166+
<option name="INCLUDE" value="false" />
167+
</pattern>
168+
<pattern>
169+
<option name="PATTERN" value="com.clevertap.android.sdk.inapp.CTInAppBasePartialHtmlFragment" />
170+
<option name="ENABLED" value="true" />
171+
<option name="INCLUDE" value="false" />
172+
</pattern>
173+
<pattern>
174+
<option name="PATTERN" value="com.clevertap.android.sdk.inapp.CTInAppBaseFullHtmlFragment" />
175+
<option name="ENABLED" value="true" />
176+
<option name="INCLUDE" value="false" />
177+
</pattern>
178+
<pattern>
179+
<option name="PATTERN" value="com.clevertap.android.sdk.inapp.CTInAppBaseFullFragment" />
180+
<option name="ENABLED" value="true" />
181+
<option name="INCLUDE" value="false" />
182+
</pattern>
183+
<pattern>
184+
<option name="PATTERN" value="com.clevertap.android.sdk.inapp.CTInAppWebView" />
185+
<option name="ENABLED" value="true" />
186+
<option name="INCLUDE" value="false" />
187+
</pattern>
188+
<pattern>
189+
<option name="PATTERN" value="com.clevertap.android.sdk.inapp.CTInAppNativeHalfInterstitialFragment" />
190+
<option name="ENABLED" value="true" />
191+
<option name="INCLUDE" value="false" />
192+
</pattern>
193+
<pattern>
194+
<option name="PATTERN" value="com.clevertap.android.sdk.inapp.CTInAppNativeInterstitialFragment" />
195+
<option name="ENABLED" value="true" />
196+
<option name="INCLUDE" value="false" />
197+
</pattern>
198+
<pattern>
199+
<option name="PATTERN" value="com.clevertap.android.sdk.inapp.CTInAppNativeCoverImageFragment" />
200+
<option name="ENABLED" value="true" />
201+
<option name="INCLUDE" value="false" />
202+
</pattern>
203+
<pattern>
204+
<option name="PATTERN" value="com.clevertap.android.sdk.inbox.CTInboxTabAdapter" />
205+
<option name="ENABLED" value="true" />
206+
<option name="INCLUDE" value="false" />
207+
</pattern>
208+
<pattern>
209+
<option name="PATTERN" value="com.clevertap.android.sdk.inbox.CTCarouselViewPager" />
210+
<option name="ENABLED" value="true" />
211+
<option name="INCLUDE" value="false" />
212+
</pattern>
213+
<pattern>
214+
<option name="PATTERN" value="com.clevertap.android.sdk.inbox.CTInboxMessageAdapter" />
215+
<option name="ENABLED" value="true" />
216+
<option name="INCLUDE" value="false" />
217+
</pattern>
218+
<pattern>
219+
<option name="PATTERN" value="com.clevertap.android.sdk.inbox.CTCarouselViewPagerAdapter" />
220+
<option name="ENABLED" value="true" />
221+
<option name="INCLUDE" value="false" />
222+
</pattern>
223+
<pattern>
224+
<option name="PATTERN" value="com.clevertap.android.sdk.inbox.CTInboxButtonClickListener" />
225+
<option name="ENABLED" value="true" />
226+
<option name="INCLUDE" value="false" />
227+
</pattern>
228+
<pattern>
229+
<option name="PATTERN" value="com.clevertap.android.sdk.inbox.CTCarouselImageViewHolder" />
230+
<option name="ENABLED" value="true" />
231+
<option name="INCLUDE" value="false" />
232+
</pattern>
233+
<pattern>
234+
<option name="PATTERN" value="com.clevertap.android.sdk.inbox.CTCarouselMessageViewHolder" />
235+
<option name="ENABLED" value="true" />
236+
<option name="INCLUDE" value="false" />
237+
</pattern>
238+
<pattern>
239+
<option name="PATTERN" value="com.clevertap.android.sdk.inbox.CTInboxBaseMessageViewHolder" />
240+
<option name="ENABLED" value="true" />
241+
<option name="INCLUDE" value="false" />
242+
</pattern>
243+
<pattern>
244+
<option name="PATTERN" value="com.clevertap.android.sdk.inbox.CTSimpleMessageViewHolder" />
245+
<option name="ENABLED" value="true" />
246+
<option name="INCLUDE" value="false" />
247+
</pattern>
248+
<pattern>
249+
<option name="PATTERN" value="com.clevertap.android.sdk.inbox.CTIconMessageViewHolder" />
250+
<option name="ENABLED" value="true" />
251+
<option name="INCLUDE" value="false" />
252+
</pattern>
253+
<pattern>
254+
<option name="PATTERN" value="com.clevertap.android.hms.CTHmsMessageService" />
255+
<option name="ENABLED" value="true" />
256+
<option name="INCLUDE" value="false" />
257+
</pattern>
258+
<pattern>
259+
<option name="PATTERN" value="com.clevertap.android.*" />
260+
<option name="ENABLED" value="true" />
261+
</pattern>
262+
</extension>
263+
</EXTENSION>
264+
<DebugAllEnabled>false</DebugAllEnabled>
265+
<RunAsTest>true</RunAsTest>
266+
<method v="2" />
267+
</configuration>
268+
</component>

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
11
## CHANGE LOG.
2+
### June 27, 2025
3+
* [CleverTap Android SDK v7.4.1](docs/CTCORECHANGELOG.md)
4+
* [CleverTap Push Templates SDK v2.1.0](docs/CTPUSHTEMPLATESCHANGELOG.md).
5+
26
### June 5, 2025
37
* [CleverTap Push Templates SDK v2.0.0](docs/CTPUSHTEMPLATESCHANGELOG.md).
48

README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,15 +26,15 @@ We publish the SDK to `mavenCentral` as an `AAR` file. Just declare it as depend
2626

2727
```groovy
2828
dependencies {
29-
implementation "com.clevertap.android:clevertap-android-sdk:7.4.0"
29+
implementation "com.clevertap.android:clevertap-android-sdk:7.4.1"
3030
}
3131
```
3232

3333
Alternatively, you can download and add the AAR file included in this repo in your Module libs directory and tell gradle to install it like this:
3434

3535
```groovy
3636
dependencies {
37-
implementation (name: "clevertap-android-sdk-7.4.0", ext: 'aar')
37+
implementation (name: "clevertap-android-sdk-7.4.1", ext: 'aar')
3838
}
3939
```
4040

@@ -46,7 +46,7 @@ Add the Firebase Messaging library and Android Support Library v4 as dependencie
4646

4747
```groovy
4848
dependencies {
49-
implementation "com.clevertap.android:clevertap-android-sdk:7.4.0"
49+
implementation "com.clevertap.android:clevertap-android-sdk:7.4.1"
5050
implementation "androidx.core:core:1.13.0"
5151
implementation "com.google.firebase:firebase-messaging:24.0.0"
5252
implementation "com.google.android.gms:play-services-ads:23.6.0" // Required only if you enable Google ADID collection in the SDK (turned off by default).

clevertap-core/src/main/java/com/clevertap/android/sdk/Constants.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -199,6 +199,7 @@ public interface Constants {
199199
String KEY_LANDSCAPE = "hasLandscape";
200200
String KEY_CONTENT_TYPE = "content_type";
201201
String KEY_URL = "url";
202+
String KEY_ALT_TEXT= "alt_text";
202203
String KEY_BUTTONS = "buttons";
203204
String KEY_CUSTOM_HTML = "custom-html";
204205
String KEY_ENCRYPTION_FLAG_STATUS = "encryptionFlagStatus";
@@ -212,6 +213,7 @@ public interface Constants {
212213
String NOTIF_HIDE_APP_LARGE_ICON = "wzrk_hide_large_icon";
213214
String WZRK_ACTIONS = "wzrk_acts";
214215
String WZRK_BIG_PICTURE = "wzrk_bp";
216+
String WZRK_BIG_PICTURE_ALT_TEXT_KEY = "alt_text_wzrk_bp";
215217
String WZRK_MSG_SUMMARY = "wzrk_nms";
216218
String NOTIF_PRIORITY = "pr";
217219
String PRIORITY_HIGH = "high";

clevertap-core/src/main/java/com/clevertap/android/sdk/PushPermissionHandler.kt

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -75,14 +75,24 @@ internal class PushPermissionHandler @JvmOverloads constructor(
7575
* Attempt to request a push permission. Checks if the permission is already given and does not
7676
* initiate the flow in this case. When the result of the permission check is known without
7777
* initiation of the permission flow - notifies the attached [ctListeners] and the
78-
* [PushPermissionResultCallback].
78+
* [PushPermissionResultCallback]. By default the request is only triggered if the system
79+
* prompt can be shown.
80+
*
81+
* @param activity An activity for context of the request. It is also used to navigate to
82+
* settings if needed.
83+
* @param fallbackToSettings Whether to navigate to the system settings screen to allow the
84+
* push notification permission manually in case the system prompt cannot be shown.
85+
* @param requestCallback Callback for when the push permission request should be triggered
86+
* @param alwaysRequestIfNotGranted Always trigger the request regardless of whether the system prompt
87+
* can be shown
7988
*
8089
* @return Whether the permission flow was initiated.
8190
*/
8291
fun requestPermission(
8392
activity: Activity,
8493
fallbackToSettings: Boolean,
85-
requestCallback: PushPermissionRequestCallback
94+
requestCallback: PushPermissionRequestCallback,
95+
alwaysRequestIfNotGranted: Boolean = false
8696
): Boolean {
8797
if (isPushPermissionGranted(activity)) {
8898
notifyListeners(isPermissionGranted = true)
@@ -92,7 +102,7 @@ internal class PushPermissionHandler @JvmOverloads constructor(
92102
val isFirstTimeRequest = cacheProvider(activity).isFirstTimeRequest()
93103
val showRationale = systemPermissionInterface.shouldShowRequestPermissionRationale(activity)
94104

95-
if (isFirstTimeRequest || showRationale) {
105+
if (alwaysRequestIfNotGranted || isFirstTimeRequest || showRationale) {
96106
requestCallback.onRequestPermission()
97107
return true
98108
}

clevertap-core/src/main/java/com/clevertap/android/sdk/inapp/CTInAppBaseFullHtmlFragment.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,7 @@ public void onClick(View v) {
114114
didDismiss(null);
115115
}
116116
});
117+
closeImageView.setContentDescription(context.getString(R.string.ct_inapp_close_btn));
117118
rl.addView(closeImageView, closeIvLp);
118119
}
119120

clevertap-core/src/main/java/com/clevertap/android/sdk/inapp/CTInAppNativeCoverFragment.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import android.graphics.Bitmap;
88
import android.graphics.Color;
99
import android.os.Bundle;
10+
import android.text.TextUtils;
1011
import android.view.LayoutInflater;
1112
import android.view.View;
1213
import android.view.ViewGroup;
@@ -54,6 +55,9 @@ public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container,
5455
CTInAppNotificationMedia mediaForOrientation = inAppNotification.getInAppMediaForOrientation(currentOrientation);
5556
if (mediaForOrientation != null) {
5657
Bitmap bitmap = resourceProvider().cachedInAppImageV1(mediaForOrientation.getMediaUrl());
58+
String contentDescription = mediaForOrientation.getContentDescription();
59+
if (!TextUtils.isEmpty(contentDescription))
60+
imageView.setContentDescription(contentDescription);
5761
if (bitmap != null) {
5862
imageView.setImageBitmap(bitmap);
5963
imageView.setTag(0);

0 commit comments

Comments
 (0)