Project

General

Profile

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

magiccube / src / main / java / org / distorted / dialogs / RubikDialogTutorialView.java @ 314e9ff0

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.content.Context;
23
import android.content.res.Resources;
24
import android.os.Bundle;
25
import android.util.AttributeSet;
26
import android.util.TypedValue;
27
import android.view.View;
28
import android.widget.Button;
29
import android.widget.FrameLayout;
30
import android.widget.ImageView;
31
import android.widget.LinearLayout;
32
import android.widget.TextView;
33

    
34
import androidx.fragment.app.FragmentActivity;
35

    
36
import com.google.firebase.analytics.FirebaseAnalytics;
37

    
38
import org.distorted.main.BuildConfig;
39
import org.distorted.main.R;
40
import org.distorted.main.RubikActivity;
41
import org.distorted.objectlib.json.JsonReader;
42
import org.distorted.objects.RubikObject;
43
import org.distorted.objects.RubikObjectList;
44

    
45
import java.io.InputStream;
46

    
47
///////////////////////////////////////////////////////////////////////////////////////////////////
48

    
49
public class RubikDialogTutorialView extends FrameLayout
50
  {
51
  private boolean mCanClick;
52

    
53
///////////////////////////////////////////////////////////////////////////////////////////////////
54

    
55
  public RubikDialogTutorialView(Context context, AttributeSet attrs, int defStyle)
56
    {
57
    super(context, attrs, defStyle);
58
    }
59

    
60
///////////////////////////////////////////////////////////////////////////////////////////////////
61

    
62
  public RubikDialogTutorialView(Context context, AttributeSet attrs)
63
    {
64
    super(context, attrs);
65
    }
66

    
67
///////////////////////////////////////////////////////////////////////////////////////////////////
68

    
69
  public RubikDialogTutorialView(FragmentActivity act, int width, int position)
70
    {
71
    super(act);
72

    
73
    int objectOrdinal = RubikObjectList.getObjectOrdinal(position);
74
    RubikObject robject = RubikObjectList.getObject(objectOrdinal);
75
    InputStream jsonStream = robject==null ? null : robject.getExtrasStream(act);
76
    String[][] tutorials=null;
77

    
78
    if( jsonStream!=null )
79
      {
80
      JsonReader reader = JsonReader.getInstance();
81
      reader.parseJsonTutorial(jsonStream);
82
      tutorials = reader.getTutorials();
83
      }
84

    
85
    if( tutorials!=null )
86
      {
87
      clickPossible(true);
88
      int widthT = (int)(width* RubikActivity.TUTORIAL_ITEM_TEXT);
89

    
90
      RubikActivity ract = (RubikActivity)getContext();
91
      Resources res = act.getResources();
92
      String packageName = act.getPackageName();
93

    
94
      View tab = inflate( act, R.layout.dialog_tutorial_tab, null);
95
      LinearLayout layout = tab.findViewById(R.id.tabLayout);
96

    
97
      int colorB = getResources().getColor(R.color.light_grey);
98
      int colorT = getResources().getColor(R.color.white);
99

    
100
      for (String[] tutorial : tutorials)
101
        {
102
        String coun = tutorial[0];
103
        String url  = tutorial[1];
104
        String desc = tutorial[2];
105
        String auth = tutorial[3];
106

    
107
        int countryID = res.getIdentifier(coun, "drawable", packageName);
108

    
109
        View row = createRow(ract, countryID, desc, url, auth, widthT, objectOrdinal, colorB, colorT);
110
        layout.addView(row);
111
        }
112

    
113
      addView(tab);
114
      }
115
    }
116

    
117
///////////////////////////////////////////////////////////////////////////////////////////////////
118

    
119
  void clickPossible(boolean click)
120
    {
121
    mCanClick = click;
122
    }
123

    
124
///////////////////////////////////////////////////////////////////////////////////////////////////
125

    
126
  private View createRow(final RubikActivity act, int countryID, final String desc, final String url,
127
                         final String auth, int size, final int obj, int colorB, int colorT)
128
    {
129
    float textSize = 0.5f*size;
130
    View row = inflate( act, R.layout.dialog_tutorial_row, null);
131

    
132
    LinearLayout layout = row.findViewById(R.id.tutorialLayout);
133
    layout.setMinimumHeight(size);
134

    
135
    Button butt = row.findViewById(R.id.tutorialButton);
136
    butt.setText(R.string.view);
137
    butt.setTextColor(colorT);
138
    butt.setBackgroundColor(colorB);
139
    butt.setTextSize(TypedValue.COMPLEX_UNIT_PX, textSize);
140
    butt.setHeight(size);
141

    
142
    butt.setOnClickListener( new View.OnClickListener()
143
      {
144
      @Override
145
      public void onClick(View v)
146
        {
147
        if( mCanClick )
148
          {
149
          act.switchTutorial(url,obj);
150
          analyticsReport(act,desc,auth,obj);
151
          clickPossible(false);
152
          }
153
        }
154
      });
155

    
156
    ImageView image = row.findViewById(R.id.tutorialCountry);
157
    int id = countryID!=0 ? countryID : R.drawable.un;
158
    image.setImageResource(id);
159

    
160
    TextView author = row.findViewById(R.id.tutorialAuthor);
161
    author.setTextSize(TypedValue.COMPLEX_UNIT_PX, textSize);
162
    author.setText(auth);
163

    
164
    TextView title  = row.findViewById(R.id.tutorialTitle);
165
    title.setTextSize(TypedValue.COMPLEX_UNIT_PX, textSize);
166
    title.setText(desc);
167

    
168
    return row;
169
    }
170

    
171
///////////////////////////////////////////////////////////////////////////////////////////////////
172

    
173
  private void analyticsReport(RubikActivity act, String desc, String author, int obj)
174
    {
175
    String message = desc+" ("+author+")";
176

    
177
    if( BuildConfig.DEBUG )
178
       {
179
       android.util.Log.d("tutorial", message);
180
       }
181
    else
182
      {
183
      FirebaseAnalytics analytics = act.getAnalytics();
184

    
185
      if( analytics!=null )
186
        {
187
        RubikObject object = RubikObjectList.getObject(obj);
188

    
189
        Bundle bundle = new Bundle();
190
        bundle.putString(FirebaseAnalytics.Param.CONTENT_TYPE, message);
191
        bundle.putString(FirebaseAnalytics.Param.ITEM_NAME, object==null ? "NULL" : object.getName() );
192
        analytics.logEvent(FirebaseAnalytics.Event.TUTORIAL_BEGIN, bundle);
193
        }
194
      }
195
    }
196
  }
(19-19/21)