Project

General

Profile

« Previous | Next » 

Revision 054fbee1

Added by Leszek Koltunski over 4 years ago

Reinvent the Pattern Dialog (Part 2)

View differences:

src/main/java/org/distorted/dialogs/RubikDialogPatternListAdapter.java
26 26
import android.widget.BaseExpandableListAdapter;
27 27
import android.widget.TextView;
28 28

  
29
import org.distorted.main.RubikActivity;
29 30
import org.distorted.patterns.RubikPattern;
30 31
import org.distorted.main.R;
31 32

  
......
34 35
class RubikDialogPatternListAdapter extends BaseExpandableListAdapter
35 36
  {
36 37
  private Context mContext;
37
  private int mTab;
38
  private int mTab, mWidth;
38 39

  
39 40
///////////////////////////////////////////////////////////////////////////////////////////////////
40 41

  
41
  public RubikDialogPatternListAdapter(Context context, int tab)
42
  public RubikDialogPatternListAdapter(Context context, int tab, int width)
42 43
    {
43 44
    mContext = context;
44 45
    mTab     = tab;
46
    mWidth   = width;
45 47
    }
46 48

  
47 49
///////////////////////////////////////////////////////////////////////////////////////////////////
......
74 76
      view = infalInflater.inflate(R.layout.dialog_pattern_child_item, null);
75 77
      }
76 78

  
77
    TextView sequence = view.findViewById(R.id.sequence);
78
    sequence.setText(mContext.getString(R.string.sq_placeholder,childPosition+1));
79
    TextView childItem = view.findViewById(R.id.childItem);
79
    int size = (int)(mWidth* RubikActivity.PATTERN_CHILD_TEXT);
80

  
81
    TextView childItem = view.findViewById(R.id.child);
80 82
    childItem.setText(childName);
83
    childItem.setTextSize(size);
81 84

  
82 85
    return view;
83 86
    }
......
130 133
      view = inf.inflate(R.layout.dialog_pattern_group_item, null);
131 134
      }
132 135

  
136
    int size = (int)(mWidth* RubikActivity.PATTERN_GROUP_TEXT);
137

  
133 138
    TextView heading = view.findViewById(R.id.heading);
134 139
    heading.setText(groupName);
140
    heading.setTextSize(size);
141

  
142
    RubikPattern pattern = RubikPattern.getInstance();
143
    int numPatterns = pattern.getNumPatterns(mTab,groupPosition);
144
    TextView counter = view.findViewById(R.id.counter);
145
    counter.setText(String.format("%d", numPatterns));
146
    counter.setTextSize(size);
135 147

  
136 148
    return view;
137 149
    }
src/main/java/org/distorted/dialogs/RubikDialogPatternPagerAdapter.java
60 60
    for(int i=0; i<mNumTabs; i++)
61 61
      {
62 62
      int cat = mViews[i].getCurrentCategory();
63
      int pos = mViews[i].getCurrentScrollPos();
64
      pattern.rememberState(i,cat,pos);
63
      int pos = mViews[i].getCurrentVisiblePos();
64
      int exp = mViews[i].getExpanded();
65
      pattern.rememberState(i,cat,pos,exp);
65 66
      }
66 67
    }
67 68

  
src/main/java/org/distorted/dialogs/RubikDialogPatternView.java
68 68

  
69 69
    mTab = position;
70 70
    mDialog = dialog;
71
    mExpandedGroup = -1;
71

  
72
    RubikPattern pattern = RubikPattern.getInstance();
73
    mExpandedGroup = pattern.recallExpanded(position);
72 74

  
73 75
    View tab = inflate( act, R.layout.dialog_pattern_tab, null);
74 76

  
75 77
    mListView = tab.findViewById(R.id.patternListView);
76
    mListAdapter = new RubikDialogPatternListAdapter(act,mTab);
78
    mListAdapter = new RubikDialogPatternListAdapter(act,mTab, ract.getScreenHeightInPixels());
77 79
    mListView.setAdapter(mListAdapter);
78 80

  
81
    if( mExpandedGroup>=0 )
82
      {
83
      mListView.expandGroup(mExpandedGroup);
84
      }
85

  
86
    int visible = pattern.recallVisiblePos(mTab);
87
    mListView.setSelectionFromTop(visible,0);
88

  
79 89
    mListView.setOnChildClickListener(new ExpandableListView.OnChildClickListener()
80 90
      {
81 91
      @Override
......
126 136

  
127 137
///////////////////////////////////////////////////////////////////////////////////////////////////
128 138

  
129
  int getCurrentScrollPos()
139
  int getCurrentVisiblePos()
130 140
    {
131
    return 0;//mScroll.getScrollY();
141
    return mListView.getFirstVisiblePosition();
132 142
    }
133 143

  
134 144
///////////////////////////////////////////////////////////////////////////////////////////////////
135 145

  
136
  @Override
137
  protected void onLayout(boolean changed, int left, int top, int right, int bottom)
146
  int getExpanded()
138 147
    {
139
    super.onLayout(changed,left,top,right,bottom);
140
/*
141
    if( !changed )
142
      {
143
      final RubikPattern pattern = RubikPattern.getInstance();
144
      mScroll.setScrollY( pattern.recallScrollPos(mTab) );
145
      }
146
 */
148
    return mExpandedGroup;
147 149
    }
148 150
  }
src/main/java/org/distorted/main/RubikActivity.java
43 43

  
44 44
public class RubikActivity extends AppCompatActivity
45 45
{
46
    public static final float PADDING          = 0.01f;
47
    public static final float MARGIN           = 0.004f;
48
    public static final float LARGE_MARGIN     = 0.025f;
49
    public static final float BUTTON_TEXT_SIZE = 0.05f;
50
    public static final float TITLE_TEXT_SIZE  = 0.06f;
51
    public static final float BITMAP_TEXT_SIZE = 0.09f;
52
    public static final float MENU_ITEM_SIZE   = 0.12f;
46
    public static final float PADDING             = 0.01f;
47
    public static final float MARGIN              = 0.004f;
48
    public static final float LARGE_MARGIN        = 0.025f;
49
    public static final float BUTTON_TEXT_SIZE    = 0.05f;
50
    public static final float TITLE_TEXT_SIZE     = 0.06f;
51
    public static final float BITMAP_TEXT_SIZE    = 0.09f;
52
    public static final float MENU_ITEM_SIZE      = 0.12f;
53
    public static final float PATTERN_GROUP_TEXT  = 0.012f;
54
    public static final float PATTERN_CHILD_TEXT  = 0.008f;
53 55

  
54 56
    public static final float MENU_BIG_TEXT_SIZE   = 0.05f;
55 57
    public static final float MENU_MEDIUM_TEXT_SIZE= 0.04f;
src/main/java/org/distorted/patterns/RubikPattern.java
32 32
{
33 33
  private static final int DURATION_MILLIS = 750;
34 34

  
35
  private int[] numCategories   = new int[NUM_OBJECTS];
36
  private int[] currentCategory = new int[NUM_OBJECTS];
37
  private int[] currentScrollPos= new int[NUM_OBJECTS];
35
  private int[] numCategories    = new int[NUM_OBJECTS];
36
  private int[] currentCategory  = new int[NUM_OBJECTS];
37
  private int[] currentVisiblePos= new int[NUM_OBJECTS];
38
  private int[] currentExpanded  = new int[NUM_OBJECTS];
38 39

  
39 40
  private List<List<Category>> mCategories;
40 41
  private static RubikPattern mThis;
......
361 362

  
362 363
      mCategories.add(list);
363 364
      numCategories[i]=patStrings.length;
365

  
366
      currentExpanded[i] = -1;
364 367
      }
365 368
    }
366 369

  
......
418 421

  
419 422
///////////////////////////////////////////////////////////////////////////////////////////////////
420 423

  
421
  public void rememberState(int tab, int cat, int scrollPos)
424
  public void rememberState(int tab, int cat, int scrollPos, int expanded)
422 425
    {
423 426
    if( tab>=0 && tab<NUM_OBJECTS )
424 427
      {
425
      currentCategory[tab] = cat;
426
      currentScrollPos[tab]= scrollPos;
428
      currentCategory[tab]  = cat;
429
      currentVisiblePos[tab]= scrollPos;
430
      currentExpanded[tab]  = expanded;
427 431
      }
428 432
    }
429 433

  
......
436 440

  
437 441
///////////////////////////////////////////////////////////////////////////////////////////////////
438 442

  
439
  public int recallScrollPos(int tab)
443
  public int recallVisiblePos(int tab)
444
    {
445
    return tab>=0 && tab<NUM_OBJECTS ? currentVisiblePos[tab] : 0;
446
    }
447

  
448
///////////////////////////////////////////////////////////////////////////////////////////////////
449

  
450
  public int recallExpanded(int tab)
440 451
    {
441
    return tab>=0 && tab<NUM_OBJECTS ? currentScrollPos[tab] : 0;
452
    return tab>=0 && tab<NUM_OBJECTS ? currentExpanded[tab] : -1;
442 453
    }
443 454

  
444 455
///////////////////////////////////////////////////////////////////////////////////////////////////
src/main/res/layout/dialog_pattern_child_item.xml
1 1
<?xml version="1.0" encoding="utf-8"?>
2
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
3
    android:layout_width="match_parent"
2
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
3
    android:layout_width="fill_parent"
4 4
    android:layout_height="match_parent"
5
    android:orientation="vertical">
5
    android:orientation="vertical" >
6 6

  
7 7
    <TextView
8
        android:id="@+id/sequence"
8
        android:id="@+id/child"
9 9
        android:layout_width="wrap_content"
10 10
        android:layout_height="wrap_content"
11
        android:layout_alignParentLeft="true"
12
        android:layout_alignParentTop="true"
13
        android:paddingLeft="35sp"
14
        />
11
        android:layout_marginTop="5sp"
12
        android:layout_marginBottom="5sp"
13
        android:paddingLeft="35sp"/>
15 14

  
16
    <TextView
17
        android:id="@+id/childItem"
18
        android:layout_width="wrap_content"
19
        android:layout_height="wrap_content"
20
        android:layout_alignParentTop="true"
21
        android:layout_toRightOf="@id/sequence"
22
        />
23

  
24
</RelativeLayout>
15
</LinearLayout>
src/main/res/layout/dialog_pattern_group_item.xml
1 1
<?xml version="1.0" encoding="utf-8"?>
2
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
2
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
3 3
    android:layout_width="fill_parent"
4 4
    android:layout_height="match_parent"
5
    android:orientation="vertical" >
5
    android:orientation="horizontal">
6 6

  
7 7
    <TextView
8 8
        android:id="@+id/heading"
9 9
        android:layout_width="wrap_content"
10 10
        android:layout_height="wrap_content"
11
        android:layout_alignParentLeft="true"
12
        android:layout_alignParentTop="true"
13
        android:gravity="left"
11 14
        android:paddingLeft="35sp"
12
        android:textStyle="bold" />
15
        android:textStyle="bold"
16
        />
13 17

  
14
</LinearLayout>
18
    <TextView
19
        android:id="@+id/counter"
20
        android:layout_width="wrap_content"
21
        android:layout_height="wrap_content"
22
        android:layout_alignParentRight="true"
23
        android:gravity="right"
24
        android:layout_toRightOf="@id/heading"
25
        android:paddingRight="10sp"
26
        android:textStyle="bold"
27
        />
28

  
29
</RelativeLayout>
src/main/res/layout/dialog_pattern_tab.xml
2 2
<ExpandableListView xmlns:android="http://schemas.android.com/apk/res/android"
3 3
    android:id="@+id/patternListView"
4 4
    android:background="@color/grey"
5
    android:paddingLeft="10dp"
6
    android:paddingRight="10dp"
5
    android:paddingLeft="0dp"
6
    android:paddingRight="0dp"
7 7
    android:paddingTop="10dp"
8 8
    android:paddingBottom="10dp"
9 9
    android:layout_width="fill_parent"

Also available in: Unified diff