Project

General

Profile

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

magiccube / src / main / java / org / distorted / dialogs / RubikDialogScoresPagerAdapter.java @ 4a6b3b53

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