Project

General

Profile

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

magiccube / src / main / java / org / distorted / dialogs / RubikDialogScoresView.java @ 7ac0ee88

1
///////////////////////////////////////////////////////////////////////////////////////////////////
2
// Copyright 2020 Leszek Koltunski                                                               //
3
//                                                                                               //
4
// This file is part of Magic Cube.                                                              //
5
//                                                                                               //
6
// Magic Cube is free software: you can redistribute it and/or modify                            //
7
// it under the terms of the GNU General Public License as published by                          //
8
// the Free Software Foundation, either version 2 of the License, or                             //
9
// (at your option) any later version.                                                           //
10
//                                                                                               //
11
// Magic Cube is distributed in the hope that it will be useful,                                 //
12
// but WITHOUT ANY WARRANTY; without even the implied warranty of                                //
13
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                                 //
14
// GNU General Public License for more details.                                                  //
15
//                                                                                               //
16
// You should have received a copy of the GNU General Public License                             //
17
// along with Magic Cube.  If not, see <http://www.gnu.org/licenses/>.                           //
18
///////////////////////////////////////////////////////////////////////////////////////////////////
19

    
20
package org.distorted.dialogs;
21

    
22
import android.annotation.SuppressLint;
23
import android.content.Context;
24
import android.content.res.Resources;
25
import androidx.fragment.app.FragmentActivity;
26
import android.util.AttributeSet;
27
import android.util.TypedValue;
28
import android.view.View;
29
import android.widget.FrameLayout;
30
import android.widget.ImageView;
31
import android.widget.LinearLayout;
32
import android.widget.TextView;
33

    
34
import org.distorted.objectlib.main.ObjectList;
35

    
36
import org.distorted.main.R;
37
import org.distorted.main.RubikActivity;
38
import org.distorted.network.RubikScores;
39

    
40
import static org.distorted.network.RubikNetwork.MAX_PLACES;
41

    
42
///////////////////////////////////////////////////////////////////////////////////////////////////
43

    
44
public class RubikDialogScoresView extends FrameLayout
45
  {
46
  private LinearLayout mLayout;
47
  private int mHeight;
48

    
49
///////////////////////////////////////////////////////////////////////////////////////////////////
50

    
51
  public RubikDialogScoresView(Context context, AttributeSet attrs, int defStyle)
52
    {
53
    super(context, attrs, defStyle);
54
    }
55

    
56
///////////////////////////////////////////////////////////////////////////////////////////////////
57

    
58
  public RubikDialogScoresView(Context context, AttributeSet attrs)
59
    {
60
    super(context, attrs);
61
    }
62

    
63
///////////////////////////////////////////////////////////////////////////////////////////////////
64

    
65
  public RubikDialogScoresView(Context context, int height, boolean isSubmitting)
66
    {
67
    super(context);
68

    
69
    mHeight = height;
70

    
71
    View view = inflate(context, R.layout.dialog_scores_downloading, null);
72
    addView(view);
73
    TextView text = findViewById(R.id.message_text);
74
    text.setText( context.getString(isSubmitting ? R.string.submitting : R.string.downloading) );
75
    }
76

    
77
///////////////////////////////////////////////////////////////////////////////////////////////////
78

    
79
  @SuppressLint("DefaultLocale")
80
  LinearLayout createSection(FragmentActivity act, int tab, String title, int level, final String[] country, final String[] name, final float[] time)
81
    {
82
    LinearLayout levelLayout = (LinearLayout)inflate(act, R.layout.dialog_scores_scramble_title, null);
83
    TextView text = levelLayout.findViewById(R.id.scoresScrambleTitle);
84
    text.setText(title);
85

    
86
    int size = (int)(mHeight*RubikActivity.SCORES_LEVEL_TEXT);
87
    text.setTextSize(TypedValue.COMPLEX_UNIT_PX, size);
88

    
89
    Resources res = act.getResources();
90
    String packageName = act.getPackageName();
91
    RubikScores scores = RubikScores.getInstance();
92

    
93
    boolean inserted = false;
94
    long myRecordInMillis = scores.getRecord(tab, level);
95
    float myRecordInSeconds = (myRecordInMillis/10)/100.0f;
96
    String myName = scores.getName();
97
    if( myName.length()==0 ) myName = act.getString(R.string.you);
98
    int myCountryID = res.getIdentifier( scores.getCountry(), "drawable", packageName);
99
    String myRecord = ( myRecordInMillis<RubikScores.NO_RECORD ) ? String.format("%.2f", myRecordInSeconds) : "??";
100
    String theirTime;
101
    int theirCountryID;
102

    
103
    int height = (int)(mHeight* RubikActivity.SCORES_ITEM_TEXT);
104
    int white = res.getColor(R.color.white);
105
    int red   = res.getColor(R.color.red);
106
    boolean equals;
107

    
108
    for(int j=0; j<MAX_PLACES-1; j++)
109
      {
110
      if( name[j] != null )
111
        {
112
        if( myRecordInSeconds<time[j] && !inserted )
113
          {
114
          inserted = true;
115
          View row = createRow(act, myCountryID, myName, myRecord, height, red);
116
          levelLayout.addView(row);
117
          }
118

    
119
        equals = name[j].equals(myName);
120

    
121
        if( !inserted || !equals )
122
          {
123
          if( equals ) inserted=true;
124
          theirCountryID = res.getIdentifier( country[j], "drawable", packageName);
125
          theirTime = String.format("%.2f", time[j]);
126
          View row = createRow(act, theirCountryID, name[j], theirTime, height, equals ? red:white);
127
          levelLayout.addView(row);
128
          }
129
        }
130
      }
131

    
132
    if( !inserted )
133
      {
134
      View row = createRow(act, myCountryID, myName, myRecord, height, red);
135
      levelLayout.addView(row);
136
      }
137

    
138
    return levelLayout;
139
    }
140

    
141
///////////////////////////////////////////////////////////////////////////////////////////////////
142

    
143
  private View createRow(FragmentActivity act, int countryID, String name, String time, int height, int color)
144
    {
145
    View row = inflate(act, R.layout.dialog_scores_scramble_row, null);
146

    
147
    ImageView imgCoun = row.findViewById(R.id.scoresScrambleRowCountry);
148
    TextView textName = row.findViewById(R.id.scoresScrambleRowName);
149
    TextView textTime = row.findViewById(R.id.scoresScrambleRowTime);
150

    
151
    imgCoun.setImageResource(countryID!=0 ? countryID : R.drawable.un);
152
    textName.setText(name);
153
    textTime.setText(time);
154

    
155
    textName.setTextColor(color);
156
    textTime.setTextColor(color);
157

    
158
    textName.setTextSize(TypedValue.COMPLEX_UNIT_PX, height);
159
    textTime.setTextSize(TypedValue.COMPLEX_UNIT_PX, height);
160

    
161
    return row;
162
    }
163

    
164
///////////////////////////////////////////////////////////////////////////////////////////////////
165
// needs to run on UI thread
166

    
167
  void prepareView(FragmentActivity act)
168
    {
169
    removeAllViews();
170

    
171
    View tab = inflate(act, R.layout.dialog_scores_tab, null);
172
    mLayout = tab.findViewById(R.id.tabLayout);
173
    addView(tab);
174
    }
175

    
176
///////////////////////////////////////////////////////////////////////////////////////////////////
177
// needs to run on UI thread
178

    
179
  void addSection(LinearLayout section)
180
    {
181
    mLayout.addView(section);
182
    }
183

    
184
///////////////////////////////////////////////////////////////////////////////////////////////////
185
// needs to run on UI thread
186

    
187
  void message(final String mess)
188
    {
189
    TextView text = findViewById(R.id.message_text);
190

    
191
    if( text!=null )
192
      {
193
      text.setText(mess);
194
      }
195
    }
196
  }
(13-13/19)