Skip to content

Commit 1446b6c

Browse files
committed
Prevent popup from getting off the screen
1 parent 69b09e0 commit 1446b6c

File tree

3 files changed

+20
-3
lines changed

3 files changed

+20
-3
lines changed

dynamic-support/src/main/java/com/pranavpandey/android/dynamic/support/popup/DynamicSimplePopup.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,7 @@ public void setActionOnClickListener(@Nullable View.OnClickListener onClickListe
163163
@Override
164164
protected int getMaxWidth() {
165165
return (int) getAnchor().getContext().getResources()
166-
.getDimension(R.dimen.ads_popup_max_width_large);
166+
.getDimension(R.dimen.ads_popup_max_width);
167167
}
168168

169169
@Override

dynamic-support/src/main/java/com/pranavpandey/android/dynamic/support/popup/base/DynamicPopup.java

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242
import com.pranavpandey.android.dynamic.util.DynamicSdkUtils;
4343
import com.pranavpandey.android.dynamic.util.DynamicUnitUtils;
4444
import com.pranavpandey.android.dynamic.util.DynamicViewUtils;
45+
import com.pranavpandey.android.dynamic.util.DynamicWindowUtils;
4546

4647
import java.lang.annotation.Retention;
4748
import java.lang.annotation.RetentionPolicy;
@@ -225,6 +226,16 @@ protected int getMaxWidth() {
225226
.getDimension(R.dimen.ads_popup_max_width);
226227
}
227228

229+
/**
230+
* The offset to adjust the size of the window if enough space is not available.
231+
*
232+
* @return The offset to adjust the size of the window if enough space is not available.
233+
*/
234+
protected int getSizeOffset() {
235+
return (int) getAnchor().getContext().getResources()
236+
.getDimension(R.dimen.ads_popup_offset);
237+
}
238+
228239
/**
229240
* This method will be called just before showing this popup.
230241
*
@@ -318,7 +329,7 @@ public void run() {
318329
Dynamic.setVisibility(content, View.GONE);
319330
}
320331

321-
mPopupWindow = new PopupWindow(view, getMaxWidth(),
332+
mPopupWindow = new PopupWindow(view, LinearLayout.LayoutParams.WRAP_CONTENT,
322333
LinearLayout.LayoutParams.WRAP_CONTENT, true);
323334
PopupWindowCompat.setWindowLayoutType(mPopupWindow,
324335
WindowManager.LayoutParams.TYPE_APPLICATION_SUB_PANEL);
@@ -327,6 +338,11 @@ public void run() {
327338
mPopupWindow.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
328339
mPopupWindow.setAnimationStyle(R.style.Animation_AppCompat_DropDownUp);
329340

341+
if (getMaxWidth() + getSizeOffset()
342+
< DynamicWindowUtils.getAppUsableScreenSize(getAnchor().getContext()).x) {
343+
mPopupWindow.setWidth(getMaxWidth());
344+
}
345+
330346
if (getAnchor().getRootView() != null) {
331347
try {
332348
TransitionManager.endTransitions((ViewGroup) getAnchor().getRootView());
@@ -343,7 +359,7 @@ public void run() {
343359

344360
// Check for RTL language.
345361
if (DynamicViewUtils.isLayoutRtl(getAnchor())) {
346-
viewCenterX = viewCenterX + getAnchor().getWidth() - getMaxWidth();
362+
viewCenterX = viewCenterX + getAnchor().getWidth() - mPopupWindow.getWidth();
347363
OFFSET_X = -OFFSET_X;
348364
}
349365

dynamic-support/src/main/res/values/dimens.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -239,6 +239,7 @@
239239
<!-- Popup -->
240240
<dimen name="ads_popup_max_width">300dp</dimen>
241241
<dimen name="ads_popup_max_width_large">340dp</dimen>
242+
<dimen name="ads_popup_offset">@dimen/ads_margin_large</dimen>
242243
<dimen name="ads_popup_selector_icon_size">24dp</dimen>
243244

244245
<!-- Bottom Sheet -->

0 commit comments

Comments
 (0)