Skip to content

Commit 5d2d215

Browse files
committed
Extend check to getTargetFragment and getTargetRequestCode methods
1 parent ede205e commit 5d2d215

File tree

6 files changed

+51
-36
lines changed

6 files changed

+51
-36
lines changed

fragment/fragment/api/public_plus_experimental_current.txt

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -461,8 +461,8 @@ package androidx.fragment.app.strictmode {
461461

462462
@RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY) public final class FragmentStrictMode {
463463
method public static androidx.fragment.app.strictmode.FragmentStrictMode.Policy getDefaultPolicy();
464-
method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY) public static void onSetTargetFragment(androidx.fragment.app.Fragment);
465464
method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY) public static void onSetUserVisibleHint(androidx.fragment.app.Fragment);
465+
method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY) public static void onTargetFragmentUsage(androidx.fragment.app.Fragment);
466466
method public static void setDefaultPolicy(androidx.fragment.app.strictmode.FragmentStrictMode.Policy);
467467
}
468468

@@ -477,21 +477,21 @@ package androidx.fragment.app.strictmode {
477477
@RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY) public static final class FragmentStrictMode.Policy.Builder {
478478
ctor public FragmentStrictMode.Policy.Builder();
479479
method public androidx.fragment.app.strictmode.FragmentStrictMode.Policy build();
480-
method public androidx.fragment.app.strictmode.FragmentStrictMode.Policy.Builder detectSetTargetFragment();
481480
method public androidx.fragment.app.strictmode.FragmentStrictMode.Policy.Builder detectSetUserVisibleHint();
481+
method public androidx.fragment.app.strictmode.FragmentStrictMode.Policy.Builder detectTargetFragmentUsage();
482482
method public androidx.fragment.app.strictmode.FragmentStrictMode.Policy.Builder penaltyDeath();
483483
method public androidx.fragment.app.strictmode.FragmentStrictMode.Policy.Builder penaltyListener(androidx.fragment.app.strictmode.FragmentStrictMode.OnViolationListener);
484484
method public androidx.fragment.app.strictmode.FragmentStrictMode.Policy.Builder penaltyLog();
485485
}
486486

487-
@RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY) public final class SetTargetFragmentViolation extends androidx.fragment.app.strictmode.Violation {
488-
ctor public SetTargetFragmentViolation();
489-
}
490-
491487
@RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY) public final class SetUserVisibleHintViolation extends androidx.fragment.app.strictmode.Violation {
492488
ctor public SetUserVisibleHintViolation();
493489
}
494490

491+
@RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY) public final class TargetFragmentUsageViolation extends androidx.fragment.app.strictmode.Violation {
492+
ctor public TargetFragmentUsageViolation();
493+
}
494+
495495
@RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY) public abstract class Violation extends java.lang.RuntimeException {
496496
ctor public Violation();
497497
}

fragment/fragment/api/restricted_current.txt

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -487,8 +487,8 @@ package androidx.fragment.app.strictmode {
487487

488488
@RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY) public final class FragmentStrictMode {
489489
method public static androidx.fragment.app.strictmode.FragmentStrictMode.Policy getDefaultPolicy();
490-
method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY) public static void onSetTargetFragment(androidx.fragment.app.Fragment);
491490
method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY) public static void onSetUserVisibleHint(androidx.fragment.app.Fragment);
491+
method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY) public static void onTargetFragmentUsage(androidx.fragment.app.Fragment);
492492
method public static void setDefaultPolicy(androidx.fragment.app.strictmode.FragmentStrictMode.Policy);
493493
}
494494

@@ -503,21 +503,21 @@ package androidx.fragment.app.strictmode {
503503
@RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY) public static final class FragmentStrictMode.Policy.Builder {
504504
ctor public FragmentStrictMode.Policy.Builder();
505505
method public androidx.fragment.app.strictmode.FragmentStrictMode.Policy build();
506-
method public androidx.fragment.app.strictmode.FragmentStrictMode.Policy.Builder detectSetTargetFragment();
507506
method public androidx.fragment.app.strictmode.FragmentStrictMode.Policy.Builder detectSetUserVisibleHint();
507+
method public androidx.fragment.app.strictmode.FragmentStrictMode.Policy.Builder detectTargetFragmentUsage();
508508
method public androidx.fragment.app.strictmode.FragmentStrictMode.Policy.Builder penaltyDeath();
509509
method public androidx.fragment.app.strictmode.FragmentStrictMode.Policy.Builder penaltyListener(androidx.fragment.app.strictmode.FragmentStrictMode.OnViolationListener);
510510
method public androidx.fragment.app.strictmode.FragmentStrictMode.Policy.Builder penaltyLog();
511511
}
512512

513-
@RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY) public final class SetTargetFragmentViolation extends androidx.fragment.app.strictmode.Violation {
514-
ctor public SetTargetFragmentViolation();
515-
}
516-
517513
@RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY) public final class SetUserVisibleHintViolation extends androidx.fragment.app.strictmode.Violation {
518514
ctor public SetUserVisibleHintViolation();
519515
}
520516

517+
@RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY) public final class TargetFragmentUsageViolation extends androidx.fragment.app.strictmode.Violation {
518+
ctor public TargetFragmentUsageViolation();
519+
}
520+
521521
@RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY) public abstract class Violation extends java.lang.RuntimeException {
522522
ctor public Violation();
523523
}

fragment/fragment/src/androidTest/java/androidx/fragment/app/strictmode/FragmentStrictModeTest.kt

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -129,30 +129,40 @@ public class FragmentStrictModeTest {
129129
}
130130

131131
@Test
132-
public fun detectSetTargetFragment() {
132+
public fun detectSetUserVisibleHint() {
133133
var violation: Violation? = null
134134
val policy = FragmentStrictMode.Policy.Builder()
135-
.detectSetTargetFragment()
135+
.detectSetUserVisibleHint()
136136
.penaltyListener { violation = it }
137137
.build()
138138
FragmentStrictMode.setDefaultPolicy(policy)
139139

140140
@Suppress("DEPRECATION")
141-
StrictFragment().setTargetFragment(StrictFragment(), 1)
142-
assertThat(violation).isInstanceOf(SetTargetFragmentViolation::class.java)
141+
StrictFragment().userVisibleHint = true
142+
assertThat(violation).isInstanceOf(SetUserVisibleHintViolation::class.java)
143143
}
144144

145145
@Test
146-
public fun detectSetUserVisibleHint() {
146+
public fun detectTargetFragmentUsage() {
147147
var violation: Violation? = null
148148
val policy = FragmentStrictMode.Policy.Builder()
149-
.detectSetUserVisibleHint()
149+
.detectTargetFragmentUsage()
150150
.penaltyListener { violation = it }
151151
.build()
152152
FragmentStrictMode.setDefaultPolicy(policy)
153153

154154
@Suppress("DEPRECATION")
155-
StrictFragment().userVisibleHint = true
156-
assertThat(violation).isInstanceOf(SetUserVisibleHintViolation::class.java)
155+
StrictFragment().setTargetFragment(StrictFragment(), 1)
156+
assertThat(violation).isInstanceOf(TargetFragmentUsageViolation::class.java)
157+
158+
violation = null
159+
@Suppress("DEPRECATION")
160+
StrictFragment().targetFragment
161+
assertThat(violation).isInstanceOf(TargetFragmentUsageViolation::class.java)
162+
163+
violation = null
164+
@Suppress("DEPRECATION")
165+
StrictFragment().targetRequestCode
166+
assertThat(violation).isInstanceOf(TargetFragmentUsageViolation::class.java)
157167
}
158168
}

fragment/fragment/src/main/java/androidx/fragment/app/Fragment.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -806,7 +806,7 @@ public void setInitialSavedState(@Nullable SavedState state) {
806806
@SuppressWarnings("ReferenceEquality, deprecation")
807807
@Deprecated
808808
public void setTargetFragment(@Nullable Fragment fragment, int requestCode) {
809-
FragmentStrictMode.onSetTargetFragment(this);
809+
FragmentStrictMode.onTargetFragmentUsage(this);
810810
// Don't allow a caller to set a target fragment in another FragmentManager,
811811
// but there's a snag: people do set target fragments before fragments get added.
812812
// We'll have the FragmentManager check that for validity when we move
@@ -854,6 +854,7 @@ public void setTargetFragment(@Nullable Fragment fragment, int requestCode) {
854854
@Nullable
855855
@Deprecated
856856
final public Fragment getTargetFragment() {
857+
FragmentStrictMode.onTargetFragmentUsage(this);
857858
if (mTarget != null) {
858859
// Ensure that any Fragment set with setTargetFragment is immediately
859860
// available here
@@ -876,6 +877,7 @@ final public Fragment getTargetFragment() {
876877
*/
877878
@Deprecated
878879
final public int getTargetRequestCode() {
880+
FragmentStrictMode.onTargetFragmentUsage(this);
879881
return mTargetRequestCode;
880882
}
881883

fragment/fragment/src/main/java/androidx/fragment/app/strictmode/FragmentStrictMode.java

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,8 @@ private enum Flag {
5151
PENALTY_LOG,
5252
PENALTY_DEATH,
5353

54-
DETECT_SET_TARGET_FRAGMENT,
5554
DETECT_SET_USER_VISIBLE_HINT,
55+
DETECT_TARGET_FRAGMENT_USAGE,
5656
}
5757

5858
private FragmentStrictMode() {}
@@ -143,19 +143,22 @@ public Builder penaltyListener(@NonNull OnViolationListener listener) {
143143
return this;
144144
}
145145

146-
/** Detects calls to #{@link Fragment#setTargetFragment}. */
146+
/** Detects calls to #{@link Fragment#setUserVisibleHint}. */
147147
@NonNull
148148
@SuppressLint("BuilderSetStyle")
149-
public Builder detectSetTargetFragment() {
150-
flags.add(Flag.DETECT_SET_TARGET_FRAGMENT);
149+
public Builder detectSetUserVisibleHint() {
150+
flags.add(Flag.DETECT_SET_USER_VISIBLE_HINT);
151151
return this;
152152
}
153153

154-
/** Detects calls to #{@link Fragment#setUserVisibleHint}. */
154+
/**
155+
* Detects calls to #{@link Fragment#setTargetFragment},
156+
* #{@link Fragment#getTargetFragment()} and #{@link Fragment#getTargetRequestCode()}.
157+
*/
155158
@NonNull
156159
@SuppressLint("BuilderSetStyle")
157-
public Builder detectSetUserVisibleHint() {
158-
flags.add(Flag.DETECT_SET_USER_VISIBLE_HINT);
160+
public Builder detectTargetFragmentUsage() {
161+
flags.add(Flag.DETECT_TARGET_FRAGMENT_USAGE);
159162
return this;
160163
}
161164

@@ -205,18 +208,18 @@ private static Policy getNearestPolicy(@Nullable Fragment fragment) {
205208
}
206209

207210
@RestrictTo(RestrictTo.Scope.LIBRARY)
208-
public static void onSetTargetFragment(@NonNull Fragment fragment) {
211+
public static void onSetUserVisibleHint(@NonNull Fragment fragment) {
209212
Policy policy = getNearestPolicy(fragment);
210-
if (policy.flags.contains(Flag.DETECT_SET_TARGET_FRAGMENT)) {
211-
handlePolicyViolation(fragment, policy, new SetTargetFragmentViolation());
213+
if (policy.flags.contains(Flag.DETECT_SET_USER_VISIBLE_HINT)) {
214+
handlePolicyViolation(fragment, policy, new SetUserVisibleHintViolation());
212215
}
213216
}
214217

215218
@RestrictTo(RestrictTo.Scope.LIBRARY)
216-
public static void onSetUserVisibleHint(@NonNull Fragment fragment) {
219+
public static void onTargetFragmentUsage(@NonNull Fragment fragment) {
217220
Policy policy = getNearestPolicy(fragment);
218-
if (policy.flags.contains(Flag.DETECT_SET_USER_VISIBLE_HINT)) {
219-
handlePolicyViolation(fragment, policy, new SetUserVisibleHintViolation());
221+
if (policy.flags.contains(Flag.DETECT_TARGET_FRAGMENT_USAGE)) {
222+
handlePolicyViolation(fragment, policy, new TargetFragmentUsageViolation());
220223
}
221224
}
222225

fragment/fragment/src/main/java/androidx/fragment/app/strictmode/SetTargetFragmentViolation.java renamed to fragment/fragment/src/main/java/androidx/fragment/app/strictmode/TargetFragmentUsageViolation.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818

1919
import androidx.annotation.RestrictTo;
2020

21-
/** See #{@link FragmentStrictMode.Policy.Builder#detectSetTargetFragment()}. */
21+
/** See #{@link FragmentStrictMode.Policy.Builder#detectTargetFragmentUsage()}. */
2222
@RestrictTo(RestrictTo.Scope.LIBRARY) // TODO: Make API public as soon as we have a few checks
23-
public final class SetTargetFragmentViolation extends Violation {
23+
public final class TargetFragmentUsageViolation extends Violation {
2424
}

0 commit comments

Comments
 (0)