44import android .app .Fragment ;
55import android .content .Intent ;
66import android .content .SharedPreferences ;
7- import android .content .res .Configuration ;
87import android .graphics .drawable .NinePatchDrawable ;
98import android .os .Build ;
109import android .os .Bundle ;
1413import android .support .v4 .widget .SwipeRefreshLayout ;
1514import android .support .v7 .widget .DefaultItemAnimator ;
1615import android .support .v7 .widget .GridLayoutManager ;
17- import android .support .v7 .widget .LinearLayoutManager ;
1816import android .support .v7 .widget .RecyclerView ;
1917import android .view .LayoutInflater ;
2018import android .view .Menu ;
2119import android .view .MenuInflater ;
2220import android .view .MenuItem ;
2321import android .view .View ;
2422import android .view .ViewGroup ;
25- import android .view .ViewTreeObserver ;
2623import android .widget .Button ;
2724import android .widget .PopupMenu ;
2825import android .widget .TextView ;
3835import oly .netpowerctrl .executables .adapter .AdapterSource ;
3936import oly .netpowerctrl .executables .adapter .ExecutableAdapterItem ;
4037import oly .netpowerctrl .executables .adapter .ExecutableViewHolder ;
38+ import oly .netpowerctrl .executables .adapter .ExecutablesAdapter ;
4139import oly .netpowerctrl .executables .adapter .ExecutablesEditableAdapter ;
4240import oly .netpowerctrl .executables .adapter .FilterByHidden ;
4341import oly .netpowerctrl .executables .adapter .FilterByReachable ;
@@ -77,31 +75,15 @@ public class ExecutablesFragment extends Fragment implements PopupMenu.OnMenuIte
7775 private RecyclerView mRecyclerView ;
7876 private SwipeRefreshLayout mPullToRefreshLayout ;
7977 private View btnWireless ;
80- private int requestedColumnWidth ;
8178 // Adapter
8279 private AdapterSource adapterSource ;
8380 private ExecutablesEditableAdapter adapter ;
84- private final ViewTreeObserver .OnGlobalLayoutListener mListViewNumColumnsChangeListener =
85- new ViewTreeObserver .OnGlobalLayoutListener () {
86- @ Override
87- public void onGlobalLayout () {
88- //noinspection deprecation
89- mRecyclerView .getViewTreeObserver ().removeOnGlobalLayoutListener (mListViewNumColumnsChangeListener );
90-
91- int i = mRecyclerView .getWidth () / requestedColumnWidth ;
92- if (i < 1 ) i = 1 ;
93- adapter .setItemsInRow (i );
94- GridLayoutManager gridLayoutManager = new GridLayoutManager (getActivity (), i );
95- gridLayoutManager .setSpanSizeLookup (getAdapter ().getSpanSizeLookup ());
96- mRecyclerView .setHasFixedSize (false );
97- mRecyclerView .setLayoutManager (gridLayoutManager );
98- mRecyclerView .setAdapter (adapter );
99- }
100- };
10181 private String clicked_group_uid ;
10282 // UI
10383 private boolean editMode ;
10484 private SimpleListDividerDecoration listDividerDecoration ;
85+ private GridLayoutManager gridLayoutManager ;
86+ private int requestedColumnWidth = 0 ;
10587 private View btnAdd ;
10688 private View btnEdit ;
10789 // Data
@@ -112,15 +94,6 @@ public void onGlobalLayout() {
11294 public ExecutablesFragment () {
11395 }
11496
115- @ Override
116- public void onConfigurationChanged (Configuration newConfig ) {
117- super .onConfigurationChanged (newConfig );
118-
119- if (mRecyclerView != null ) {
120- mRecyclerView .getViewTreeObserver ().addOnGlobalLayoutListener (mListViewNumColumnsChangeListener );
121- }
122- }
123-
12497 @ Override
12598 public void onRefresh () {
12699 dataService .refreshExistingDevices ();
@@ -169,26 +142,30 @@ private void applyViewType() {
169142 int viewType = SharedPrefs .getInstance ().getOutletsViewType ();
170143
171144 mRecyclerView .removeItemDecoration (listDividerDecoration );
145+ int columns ;
172146
173147 switch (viewType ) {
174148 case VIEW_AS_COMPACT :
175- adapter .setLayoutRes (R .layout .grid_item_compact_executable );
176149 requestedColumnWidth = (int ) getResources ().getDimension (R .dimen .min_grid_item_width );
150+ columns = Math .max (mRecyclerView .getWidth () / requestedColumnWidth , 1 );
151+ gridLayoutManager .setSpanCount (columns );
152+ adapter .setLayoutRes (R .layout .grid_item_compact_executable );
177153 break ;
178154 case VIEW_AS_GRID :
179- adapter .setLayoutRes (R .layout .grid_item_executable );
180155 requestedColumnWidth = (int ) getResources ().getDimension (R .dimen .min_grid_item_width );
156+ columns = Math .max (mRecyclerView .getWidth () / requestedColumnWidth , 1 );
157+ gridLayoutManager .setSpanCount (columns );
158+ adapter .setLayoutRes (R .layout .grid_item_executable );
181159 break ;
182160 case VIEW_AS_LIST :
183161 default :
184162 mRecyclerView .addItemDecoration (listDividerDecoration );
185- adapter .setLayoutRes (R .layout .list_item_executable );
186163 requestedColumnWidth = (int ) getResources ().getDimension (R .dimen .min_list_item_width );
164+ columns = Math .max (mRecyclerView .getWidth () / requestedColumnWidth , 1 );
165+ gridLayoutManager .setSpanCount (columns );
166+ adapter .setLayoutRes (R .layout .list_item_executable );
187167 break ;
188168 }
189-
190- mRecyclerView .getViewTreeObserver ().addOnGlobalLayoutListener (mListViewNumColumnsChangeListener );
191- mRecyclerView .requestLayout ();
192169 }
193170
194171 @ Override
@@ -217,12 +194,14 @@ public void onClick(View view) {
217194
218195 mRecyclerView = (RecyclerView ) view .findViewById (android .R .id .list );
219196 mRecyclerView .setItemAnimator (new DefaultItemAnimator ());
220- mRecyclerView .setLayoutManager (new LinearLayoutManager (getActivity ()));
221197 if (Build .VERSION .SDK_INT < Build .VERSION_CODES .LOLLIPOP ) {
222198 mRecyclerView .addItemDecoration (new ItemShadowDecoration ((NinePatchDrawable ) ContextCompat .getDrawable (getActivity (), R .drawable .material_shadow_z1 )));
223199 }
224200 listDividerDecoration = new SimpleListDividerDecoration (ContextCompat .getDrawable (getActivity (), R .drawable .list_divider ), true );
225201 mRecyclerView .addOnItemTouchListener (new RecyclerItemClickListener (getActivity (), this , null ));
202+ gridLayoutManager = new GridLayoutManager (getActivity (), 1 );
203+ mRecyclerView .setHasFixedSize (false );
204+ mRecyclerView .setLayoutManager (gridLayoutManager );
226205
227206 automaticSetup = new AutomaticSetup (
228207 (Button ) view .findViewById (R .id .automatic_setup_start ),
@@ -249,7 +228,13 @@ public void onClick(View view) {
249228 adapterSource .addInput (new InputExecutables (), new InputGroupChanges ());
250229
251230 adapter = new ExecutablesEditableAdapter (adapterSource , LoadStoreIconData .iconLoadingThread );
252-
231+ adapter .setItemsInRow (new ExecutablesAdapter .ItemsInRow () {
232+ @ Override
233+ public int getItemsInRow () {
234+ return gridLayoutManager .getSpanCount ();
235+ }
236+ });
237+ gridLayoutManager .setSpanSizeLookup (adapter .getSpanSizeLookup ());
253238 adapter .getSource ().setEmptyListener (this );
254239
255240 ///// For pull to refresh
@@ -296,6 +281,18 @@ public void onLayoutChange(View v, int left, int top, int right, int bottom, int
296281 }
297282 });
298283
284+ mRecyclerView .addOnLayoutChangeListener (new View .OnLayoutChangeListener () {
285+ int lastWidth = 0 ;
286+
287+ @ Override
288+ public void onLayoutChange (View view , int i , int i1 , int i2 , int i3 , int i4 , int i5 , int i6 , int i7 ) {
289+ if (requestedColumnWidth == 0 || mRecyclerView .getWidth () == lastWidth ) return ;
290+ lastWidth = mRecyclerView .getWidth ();
291+ int columns = Math .max (lastWidth / requestedColumnWidth , 1 );
292+ gridLayoutManager .setSpanCount (columns );
293+ }
294+ });
295+
299296 LoadStoreIconData .iconCacheClearedObserver .register (this );
300297 DataService .observersStartStopRefresh .register (this );
301298 DataService .observersServiceReady .register (this ); // Will call onServiceReady and setup current group
0 commit comments