Project

General

Profile

« Previous | Next » 

Revision 3e5ad461

Added by Leszek Koltunski over 3 years ago

Improve the Scores dialog: now level sections are added one-by-one.

View differences:

src/main/java/org/distorted/dialogs/RubikDialogScoresPagerAdapter.java
44 44
  private ViewPager mViewPager;
45 45
  private int mNumTabs;
46 46
  private boolean mIsSubmitting;
47
  private int mToDoTab, mToDoLvl;
47 48

  
48 49
///////////////////////////////////////////////////////////////////////////////////////////////////
49 50

  
50
  public void receive(final String[][][] country, final String[][][] name, final float[][][] time)
51
  private void addSection(int tab, int level, final RubikDialogScoresView view, final String[] country, final String[] name, final float[] time)
51 52
    {
52
    prepareView();
53
    final LinearLayout section = view.createSection(mAct, tab, level, country, name, time);
53 54

  
54
    boolean[] tabDone = new boolean[mNumTabs];
55
    for(int i=0; i<mNumTabs; i++) tabDone[i] = false;
56
    int toDo, doneTabs=0;
55
    mAct.runOnUiThread(new Runnable()
56
      {
57
      @Override
58
      public void run()
59
        {
60
        view.addSection(section);
61
        }
62
      });
57 63

  
58
    while( doneTabs<mNumTabs )
64
    try
59 65
      {
60
      toDo = mViewPager.getCurrentItem();
66
      Thread.sleep(50);
67
      }
68
    catch( InterruptedException ignored)
69
      {
70

  
71
      }
72
    }
73

  
74
///////////////////////////////////////////////////////////////////////////////////////////////////
61 75

  
62
      if( tabDone[toDo] )
76
  private void getNext(int currentTab, int[] toDoTab, int[] maxTab)
77
    {
78
    if( toDoTab[currentTab]<maxTab[currentTab] )
79
      {
80
      mToDoTab = currentTab;
81
      mToDoLvl = toDoTab[currentTab];
82
      toDoTab[currentTab]++;
83
      }
84
    else
85
      {
86
      for(int tab=0; tab<mNumTabs; tab++)
63 87
        {
64
        for(int i=0; i<mNumTabs; i++)
88
        if( toDoTab[tab]<maxTab[tab] )
65 89
          {
66
          if( !tabDone[i] )
67
            {
68
            toDo = i;
69
            break;
70
            }
90
          mToDoTab = tab;
91
          mToDoLvl = toDoTab[tab];
92
          toDoTab[tab]++;
93
          break;
71 94
          }
72 95
        }
96
      }
97
    }
73 98

  
74
      addPage(toDo, mViews[toDo],country[toDo],name[toDo],time[toDo]);
99
///////////////////////////////////////////////////////////////////////////////////////////////////
75 100

  
76
      doneTabs++;
77
      tabDone[toDo] = true;
101
  public void receive(final String[][][] country, final String[][][] name, final float[][][] time)
102
    {
103
    prepareView();
104

  
105
    int toDo=0;
106
    int[] toDoTab = new int[mNumTabs];
107
    int[] maxTab  = new int[mNumTabs];
108

  
109
    for(int i=0; i<mNumTabs; i++)
110
      {
111
      int object   = RubikObjectList.unpackObject(i);
112
      int sizeIndex= RubikObjectList.unpackSizeIndex(i);
113
      maxTab[i]    = RubikObjectList.getMaxLevel(object, sizeIndex);
114
      toDoTab[i]   = 0;
115

  
116
      toDo += maxTab[i];
117
      }
118

  
119
    while( toDo>0 )
120
      {
121
      toDo--;
122
      getNext(mViewPager.getCurrentItem(),toDoTab,maxTab);
123
      addSection( mToDoTab,mToDoLvl, mViews[mToDoTab],
124
                  country[mToDoTab][mToDoLvl],name[mToDoTab][mToDoLvl],time[mToDoTab][mToDoLvl]);
78 125
      }
79 126
    }
80 127

  
......
147 194
      }
148 195
    }
149 196

  
150
///////////////////////////////////////////////////////////////////////////////////////////////////
151

  
152
  private void addPage(int tab, final RubikDialogScoresView view, final String[][] country, final String[][] name, final float[][] time)
153
    {
154
    int object   = RubikObjectList.unpackObject(tab);
155
    int sizeIndex= RubikObjectList.unpackSizeIndex(tab);
156
    int maxLevel = RubikObjectList.getMaxLevel(object, sizeIndex);
157

  
158
    for(int i=0; i<maxLevel; i++)
159
      {
160
      final LinearLayout section = view.createSection(mAct, tab, i, country[i], name[i], time[i]);
161

  
162
      mAct.runOnUiThread(new Runnable()
163
        {
164
        @Override
165
        public void run()
166
          {
167
          view.addSection(section);
168
          }
169
        });
170

  
171
      try
172
        {
173
        Thread.sleep(50);
174
        }
175
      catch( InterruptedException ignored)
176
        {
177

  
178
        }
179
      }
180
    }
181

  
182 197
///////////////////////////////////////////////////////////////////////////////////////////////////
183 198

  
184 199
  RubikDialogScoresPagerAdapter(FragmentActivity act, ViewPager viewPager, boolean isSubmitting, RubikDialogScores diag)

Also available in: Unified diff