Project

General

Profile

Download (7.18 KB) Statistics
| Branch: | Tag: | Revision:

magiccube / src / main / java / org / distorted / dialogs / RubikDialogScoresPagerAdapter.java @ 7adf6974

1 cc5ec229 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
2
// Copyright 2020 Leszek Koltunski                                                               //
3
//                                                                                               //
4
// This file is part of Magic Cube.                                                              //
5
//                                                                                               //
6 68191e7d Leszek Koltunski
// Magic Cube is proprietary software licensed under an EULA which you should have received      //
7
// along with the code. If not, check https://distorted.org/magic/License-Magic-Cube.html        //
8 cc5ec229 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
9
10 1f9772f3 Leszek Koltunski
package org.distorted.dialogs;
11 cc5ec229 Leszek Koltunski
12 f895e77a Leszek Koltunski
import android.os.Bundle;
13 66e777b0 Leszek Koltunski
import androidx.annotation.NonNull;
14
import androidx.fragment.app.FragmentActivity;
15
import androidx.viewpager.widget.PagerAdapter;
16
import androidx.viewpager.widget.ViewPager;
17 362807f0 Leszek Koltunski
18
import android.util.DisplayMetrics;
19 cc5ec229 Leszek Koltunski
import android.view.View;
20
import android.view.ViewGroup;
21
22 00af5060 Leszek Koltunski
import org.distorted.main.R;
23 acabdd83 Leszek Koltunski
import org.distorted.external.RubikScores;
24
import org.distorted.external.RubikNetwork;
25 2a1f50b0 Leszek Koltunski
import org.distorted.objects.RubikObject;
26 d433b50e Leszek Koltunski
import org.distorted.objects.RubikObjectList;
27 7bb30586 leszek
import static org.distorted.external.RubikScores.LEVELS_SHOWN;
28 4888e97c Leszek Koltunski
29 cc5ec229 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
30
31 46be3ddf Leszek Koltunski
class RubikDialogScoresPagerAdapter extends PagerAdapter implements RubikNetwork.ScoresReceiver
32 cc5ec229 Leszek Koltunski
  {
33 8f139bfb leszek
  private static final int NETWORK_NOT_READY = 0;
34
  private static final int NETWORK_SUCCESS   = 1;
35
  private static final int NETWORK_FAILURE   = 2;
36
37 00af5060 Leszek Koltunski
  private final FragmentActivity mAct;
38
  private final RubikDialogScores mDialog;
39
  private final RubikDialogScoresView[] mViews;
40
  private final ViewPager mViewPager;
41
  private final int mNumTabs;
42
  private final boolean mIsSubmitting;
43 8f139bfb leszek
  private final int[] mNumLevels;
44
  private String[][][] mCountry, mName;
45
  private int[][][] mTime;
46
  private String mMessage;
47
  private int mNetworkState;
48
  private final Object mObj;
49 5bda8973 Leszek Koltunski
50 7adf6974 leszek
///////////////////////////////////////////////////////////////////////////////////////////////////
51
// we do not show level8 (i.e. level==7) - because in the new UI 2.0 this one does not exist anymore.
52
53
  private boolean showLevel(int level)
54
    {
55
    return level!=7;
56
    }
57
58 5bda8973 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
59
60 8f139bfb leszek
  public void receive(final String[][][] country, final String[][][] name, final int[][][] time)
61 5bda8973 Leszek Koltunski
    {
62 8f139bfb leszek
    synchronized(mObj)
63 028f3e0d Leszek Koltunski
      {
64 8f139bfb leszek
      RubikDialogScoresThread thr = RubikDialogScoresThread.getInstance();
65
      thr.equip(mAct,mViewPager);
66 3e5ad461 Leszek Koltunski
67 8f139bfb leszek
      mNetworkState = NETWORK_SUCCESS;
68
      mCountry = country;
69
      mName = name;
70
      mTime = time;
71 13ed61b5 Leszek Koltunski
72 8f139bfb leszek
      for(int t=0; t<mNumTabs; t++)
73
        if( mViews[t]!=null )
74 13ed61b5 Leszek Koltunski
          {
75 8f139bfb leszek
          int num = mNumLevels[t];
76
          String[][] c = country[t];
77
          String[][] n = name[t];
78
          int[][] tm = time[t];
79 7adf6974 leszek
          for(int l=0; l<=num; l++)
80
            if( showLevel(l) ) thr.newWork(t, l, num, mViews[t], c[l], n[l], tm[l]);
81 13ed61b5 Leszek Koltunski
          }
82 028f3e0d Leszek Koltunski
      }
83
    }
84
85 17f9a695 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
86
87
  public void message(final String mess)
88
    {
89 8f139bfb leszek
    mNetworkState = NETWORK_FAILURE;
90
    mMessage = mess;
91
92 17f9a695 Leszek Koltunski
    mAct.runOnUiThread(new Runnable()
93
      {
94
      @Override
95
      public void run()
96
        {
97 8f139bfb leszek
        for(int i=0; i<mNumTabs; i++)
98
          if( mViews[i]!=null ) mViews[i].message(mess);
99 17f9a695 Leszek Koltunski
        }
100
      });
101
    }
102
103
///////////////////////////////////////////////////////////////////////////////////////////////////
104
105 4c0cd600 Leszek Koltunski
  public void error(final String error)
106 17f9a695 Leszek Koltunski
    {
107
    char errorNumber = error.charAt(0);
108
109
    switch(errorNumber)
110
      {
111 46be3ddf Leszek Koltunski
      case '1': message(mAct.getString(R.string.networkError));
112 4c0cd600 Leszek Koltunski
                break;
113 f895e77a Leszek Koltunski
      case '2': RubikScores scores = RubikScores.getInstance();
114
                Bundle bundle = new Bundle();
115 c02fa107 Leszek Koltunski
                bundle.putString("argument", scores.getName() );
116 f895e77a Leszek Koltunski
117
                RubikDialogSetName nameDiag = new RubikDialogSetName();
118
                nameDiag.setArguments(bundle);
119
                nameDiag.show(mAct.getSupportFragmentManager(), null);
120
121
                mDialog.dismiss();
122
123 17f9a695 Leszek Koltunski
                break;
124
      case '3': message("Server error");
125
                break;
126 4c0cd600 Leszek Koltunski
      default : message("Unexpected error");
127 17f9a695 Leszek Koltunski
      }
128
    }
129
130 946d9762 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
131
132 f895e77a Leszek Koltunski
  RubikDialogScoresPagerAdapter(FragmentActivity act, ViewPager viewPager, boolean isSubmitting, RubikDialogScores diag)
133 cc5ec229 Leszek Koltunski
    {
134 8f139bfb leszek
    mObj = new Object();
135 cc5ec229 Leszek Koltunski
    mAct = act;
136 f895e77a Leszek Koltunski
    mDialog = diag;
137 d433b50e Leszek Koltunski
    mNumTabs = RubikObjectList.getNumObjects();
138 4888e97c Leszek Koltunski
    mViews = new RubikDialogScoresView[mNumTabs];
139 028f3e0d Leszek Koltunski
    mViewPager = viewPager;
140 4895fff6 Leszek Koltunski
    mIsSubmitting = isSubmitting;
141 8f139bfb leszek
    mNetworkState = NETWORK_NOT_READY;
142
143
    mNumLevels = new int[mNumTabs];
144
145
    for(int i=0; i<mNumTabs; i++)
146
      {
147
      RubikObject object = RubikObjectList.getObject(i);
148
      int numScramble = object==null ? 1 : object.getNumScramble();
149 7bb30586 leszek
      mNumLevels[i] = Math.min(numScramble-1,LEVELS_SHOWN);
150 8f139bfb leszek
      }
151 cc5ec229 Leszek Koltunski
152
    viewPager.setAdapter(this);
153 8f139bfb leszek
    viewPager.setOffscreenPageLimit(1);
154
155
    RubikNetwork network = RubikNetwork.getInstance();
156
157
    if( mIsSubmitting )  network.submit  ( this, mAct );
158
    else                 network.download( this, mAct );
159 cc5ec229 Leszek Koltunski
    }
160
161
///////////////////////////////////////////////////////////////////////////////////////////////////
162
163
  @Override
164
  @NonNull
165
  public Object instantiateItem(@NonNull ViewGroup collection, int position)
166
    {
167 8f139bfb leszek
    RubikDialogScoresView view;
168 362807f0 Leszek Koltunski
    DisplayMetrics metrics = mAct.getResources().getDisplayMetrics();
169
170 8f139bfb leszek
    synchronized(mObj)
171
      {
172 10d04892 leszek
      view = new RubikDialogScoresView(mAct, metrics.heightPixels, mIsSubmitting, mNetworkState==NETWORK_SUCCESS );
173 8f139bfb leszek
      collection.addView(view);
174 946d9762 Leszek Koltunski
175 8f139bfb leszek
      if( mNetworkState==NETWORK_SUCCESS )
176
        {
177
        int num = mNumLevels[position];
178
        String[][] c = mCountry[position];
179
        String[][] n = mName[position];
180
        int[][] tm = mTime[position];
181 946d9762 Leszek Koltunski
182 10d04892 leszek
        RubikDialogScoresThread thr = RubikDialogScoresThread.getInstance();
183
        thr.equip(mAct,mViewPager);
184
185 7adf6974 leszek
        for(int l=0; l<=num; l++)
186
          if( showLevel(l) ) thr.newWork(position, l, num, view, c[l], n[l], tm[l]);
187 8f139bfb leszek
        }
188
      else if( mNetworkState==NETWORK_FAILURE )
189 946d9762 Leszek Koltunski
        {
190 8f139bfb leszek
        view.message(mMessage);
191 946d9762 Leszek Koltunski
        }
192
      }
193
194 8f139bfb leszek
    mViews[position] = view;
195 946d9762 Leszek Koltunski
196 8f139bfb leszek
    return view;
197 cc5ec229 Leszek Koltunski
    }
198
199
///////////////////////////////////////////////////////////////////////////////////////////////////
200
201
  @Override
202
  public void destroyItem(ViewGroup collection, int position, @NonNull Object view)
203
    {
204
    collection.removeView((View) view);
205 8f139bfb leszek
    mViews[position] = null;
206 cc5ec229 Leszek Koltunski
    }
207
208
///////////////////////////////////////////////////////////////////////////////////////////////////
209
210
  @Override
211
  public int getCount()
212
    {
213 4888e97c Leszek Koltunski
    return mNumTabs;
214 cc5ec229 Leszek Koltunski
    }
215
216
///////////////////////////////////////////////////////////////////////////////////////////////////
217
218
  @Override
219
  public boolean isViewFromObject(@NonNull View view, @NonNull Object object)
220
    {
221
    return view == object;
222
    }
223
  }