43
43
import com .pranavpandey .android .dynamic .support .util .DynamicShapeUtils ;
44
44
import com .pranavpandey .android .dynamic .support .util .DynamicTintUtils ;
45
45
import com .pranavpandey .android .dynamic .support .widget .base .DynamicBackgroundWidget ;
46
+ import com .pranavpandey .android .dynamic .support .widget .base .DynamicCornerWidget ;
46
47
import com .pranavpandey .android .dynamic .support .widget .base .DynamicScrollableWidget ;
47
48
import com .pranavpandey .android .dynamic .support .widget .base .DynamicStateSelectedWidget ;
48
49
import com .pranavpandey .android .dynamic .support .widget .base .WindowInsetsWidget ;
57
58
* A {@link NavigationView} to apply {@link DynamicTheme} according to the supplied parameters.
58
59
*/
59
60
public class DynamicNavigationView extends NavigationView
60
- implements WindowInsetsWidget , DynamicBackgroundWidget ,
61
- DynamicScrollableWidget , DynamicStateSelectedWidget {
61
+ implements WindowInsetsWidget , DynamicBackgroundWidget , DynamicScrollableWidget ,
62
+ DynamicStateSelectedWidget , DynamicCornerWidget < Float > {
62
63
63
64
/**
64
65
* Color type applied to this view.
@@ -171,6 +172,11 @@ public class DynamicNavigationView extends NavigationView
171
172
*/
172
173
protected int mContrast ;
173
174
175
+ /**
176
+ * Corner size used by this view.
177
+ */
178
+ protected float mCornerSize ;
179
+
174
180
public DynamicNavigationView (@ NonNull Context context ) {
175
181
this (context , null );
176
182
}
@@ -239,7 +245,7 @@ public void loadFromAttributes(@Nullable AttributeSet attrs) {
239
245
240
246
if (a .getBoolean (R .styleable .DynamicNavigationView_adt_dynamicCornerSize ,
241
247
Defaults .ADS_DYNAMIC_CORNER_SIZE )) {
242
- updateBackground ( );
248
+ setCorner (( float ) DynamicTheme . getInstance (). get (). getCornerRadius () );
243
249
}
244
250
245
251
if (a .getBoolean (
@@ -254,31 +260,6 @@ public void loadFromAttributes(@Nullable AttributeSet attrs) {
254
260
initialize ();
255
261
}
256
262
257
- /**
258
- * Update background according to the corner size.
259
- */
260
- private void updateBackground () {
261
- if (getBackground () instanceof MaterialShapeDrawable ) {
262
- MaterialShapeDrawable drawable = (MaterialShapeDrawable ) getBackground ();
263
- ShapeAppearanceModel .Builder builder =
264
- drawable .getShapeAppearanceModel ().toBuilder ();
265
- float cornerSize = DynamicTheme .getInstance ().get ().getCornerRadius ();
266
-
267
- builder .setTopLeftCornerSize (Theme .Corner .MIN );
268
- builder .setTopRightCornerSize (Theme .Corner .MIN );
269
-
270
- if (drawable .getBottomLeftCornerResolvedSize () > 0 ) {
271
- builder .setBottomLeftCornerSize (cornerSize );
272
- }
273
-
274
- if (drawable .getBottomRightCornerResolvedSize () > 0 ) {
275
- builder .setBottomRightCornerSize (cornerSize );
276
- }
277
-
278
- drawable .setShapeAppearanceModel (builder .build ());
279
- }
280
- }
281
-
282
263
@ Override
283
264
public void initialize () {
284
265
if (mBackgroundColorType != Theme .ColorType .NONE
@@ -611,7 +592,37 @@ public void setContrast(int contrast) {
611
592
protected void onSizeChanged (int w , int h , int oldw , int oldh ) {
612
593
super .onSizeChanged (w , h , oldw , oldh );
613
594
614
- updateBackground ();
595
+ Dynamic .setCornerMin (this , Math .min (
596
+ getWidth () / Theme .Corner .FACTOR_MAX ,
597
+ getHeight () / Theme .Corner .FACTOR_MAX ));
598
+ }
599
+
600
+ @ Override
601
+ public @ NonNull Float getCorner () {
602
+ return mCornerSize ;
603
+ }
604
+
605
+ @ Override
606
+ public void setCorner (@ NonNull Float cornerSize ) {
607
+ this .mCornerSize = cornerSize ;
608
+
609
+ if (getBackground () instanceof MaterialShapeDrawable ) {
610
+ MaterialShapeDrawable drawable = (MaterialShapeDrawable ) getBackground ();
611
+ ShapeAppearanceModel .Builder builder = drawable .getShapeAppearanceModel ().toBuilder ();
612
+
613
+ builder .setTopLeftCornerSize (Theme .Corner .MIN );
614
+ builder .setTopRightCornerSize (Theme .Corner .MIN );
615
+
616
+ if (drawable .getBottomLeftCornerResolvedSize () > 0 ) {
617
+ builder .setBottomLeftCornerSize (cornerSize );
618
+ }
619
+
620
+ if (drawable .getBottomRightCornerResolvedSize () > 0 ) {
621
+ builder .setBottomRightCornerSize (cornerSize );
622
+ }
623
+
624
+ drawable .setShapeAppearanceModel (builder .build ());
625
+ }
615
626
}
616
627
617
628
@ Override
0 commit comments