Skip to content
This repository was archived by the owner on Feb 3, 2020. It is now read-only.

Commit 96447e0

Browse files
Merge pull request #93 from recruit-lifestyle/feature/issue_89
Fix IllegalArgumentException
2 parents b95b5d5 + efca8e9 commit 96447e0

File tree

1 file changed

+18
-5
lines changed

1 file changed

+18
-5
lines changed

library/src/main/java/jp/co/recruit_lifestyle/android/floatingview/FloatingViewManager.java

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import android.support.annotation.DrawableRes;
2727
import android.support.annotation.IntDef;
2828
import android.support.annotation.NonNull;
29+
import android.support.v4.view.ViewCompat;
2930
import android.util.DisplayMetrics;
3031
import android.view.DisplayCutout;
3132
import android.view.HapticFeedbackConstants;
@@ -544,7 +545,7 @@ public void addViewToWindow(View view, Options options) {
544545
mWindowManager.addView(mFullscreenObserverView, mFullscreenObserverView.getWindowLayoutParams());
545546
mTargetFloatingView = floatingView;
546547
} else {
547-
mWindowManager.removeViewImmediate(mTrashView);
548+
removeViewImmediate(mTrashView);
548549
}
549550
// 必ずトップに来て欲しいので毎回貼り付け
550551
mWindowManager.addView(mTrashView, mTrashView.getWindowLayoutParams());
@@ -559,7 +560,7 @@ private void removeViewToWindow(FloatingView floatingView) {
559560
final int matchIndex = mFloatingViewList.indexOf(floatingView);
560561
// 見つかった場合は表示とリストから削除
561562
if (matchIndex != -1) {
562-
mWindowManager.removeViewImmediate(floatingView);
563+
removeViewImmediate(floatingView);
563564
mFloatingViewList.remove(matchIndex);
564565
}
565566

@@ -576,17 +577,29 @@ private void removeViewToWindow(FloatingView floatingView) {
576577
* ViewをWindowから全て取り外します。
577578
*/
578579
public void removeAllViewToWindow() {
579-
mWindowManager.removeViewImmediate(mFullscreenObserverView);
580-
mWindowManager.removeViewImmediate(mTrashView);
580+
removeViewImmediate(mFullscreenObserverView);
581+
removeViewImmediate(mTrashView);
581582
// FloatingViewの削除
582583
final int size = mFloatingViewList.size();
583584
for (int i = 0; i < size; i++) {
584585
final FloatingView floatingView = mFloatingViewList.get(i);
585-
mWindowManager.removeViewImmediate(floatingView);
586+
removeViewImmediate(floatingView);
586587
}
587588
mFloatingViewList.clear();
588589
}
589590

591+
/**
592+
* Safely remove the View (issue #89)
593+
*
594+
* @param view {@link View}
595+
*/
596+
private void removeViewImmediate(View view) {
597+
if (!ViewCompat.isAttachedToWindow(view)) {
598+
return;
599+
}
600+
mWindowManager.removeViewImmediate(view);
601+
}
602+
590603
/**
591604
* Find the safe area of DisplayCutout.
592605
*

0 commit comments

Comments
 (0)