Project

General

Profile

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

magiccube / src / main / java / org / distorted / dialogs / RubikDialogTutorialView.java @ 83018ac4

1 234a7582 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 234a7582 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
9
10
package org.distorted.dialogs;
11
12
import android.content.Context;
13 b91d4033 Leszek Koltunski
import android.content.res.Resources;
14 992748ab Leszek Koltunski
import android.os.Bundle;
15 234a7582 Leszek Koltunski
import android.util.AttributeSet;
16 b91d4033 Leszek Koltunski
import android.util.TypedValue;
17 234a7582 Leszek Koltunski
import android.view.View;
18 b91d4033 Leszek Koltunski
import android.widget.Button;
19 234a7582 Leszek Koltunski
import android.widget.FrameLayout;
20 ef1f3e34 Leszek Koltunski
import android.widget.ImageView;
21 b91d4033 Leszek Koltunski
import android.widget.LinearLayout;
22 ef1f3e34 Leszek Koltunski
import android.widget.TextView;
23 234a7582 Leszek Koltunski
24
import androidx.fragment.app.FragmentActivity;
25
26 992748ab Leszek Koltunski
import com.google.firebase.analytics.FirebaseAnalytics;
27
28
import org.distorted.main.BuildConfig;
29 234a7582 Leszek Koltunski
import org.distorted.main.R;
30
import org.distorted.main.RubikActivity;
31 804293f0 Leszek Koltunski
import org.distorted.objectlib.json.JsonReader;
32 d433b50e Leszek Koltunski
import org.distorted.objects.RubikObject;
33
import org.distorted.objects.RubikObjectList;
34 804293f0 Leszek Koltunski
35
import java.io.InputStream;
36 234a7582 Leszek Koltunski
37
///////////////////////////////////////////////////////////////////////////////////////////////////
38
39
public class RubikDialogTutorialView extends FrameLayout
40
  {
41 a84c3a25 Leszek Koltunski
  private boolean mCanClick;
42
43
///////////////////////////////////////////////////////////////////////////////////////////////////
44
45 234a7582 Leszek Koltunski
  public RubikDialogTutorialView(Context context, AttributeSet attrs, int defStyle)
46
    {
47
    super(context, attrs, defStyle);
48
    }
49
50
///////////////////////////////////////////////////////////////////////////////////////////////////
51
52
  public RubikDialogTutorialView(Context context, AttributeSet attrs)
53
    {
54
    super(context, attrs);
55
    }
56
57
///////////////////////////////////////////////////////////////////////////////////////////////////
58
59 ef1f3e34 Leszek Koltunski
  public RubikDialogTutorialView(FragmentActivity act, int width, int position)
60 234a7582 Leszek Koltunski
    {
61
    super(act);
62
63 314e9ff0 Leszek Koltunski
    int objectOrdinal = RubikObjectList.getObjectOrdinal(position);
64
    RubikObject robject = RubikObjectList.getObject(objectOrdinal);
65
    InputStream jsonStream = robject==null ? null : robject.getExtrasStream(act);
66 804293f0 Leszek Koltunski
    String[][] tutorials=null;
67
68
    if( jsonStream!=null )
69
      {
70 c020555e Leszek Koltunski
      try
71
        {
72
        JsonReader reader = JsonReader.getInstance();
73
        reader.parseJsonTutorial(jsonStream);
74
        tutorials = reader.getTutorials();
75
        }
76
      catch(Exception ex)
77
        {
78
        tutorials = null;
79
        }
80 804293f0 Leszek Koltunski
      }
81
82
    if( tutorials!=null )
83
      {
84
      clickPossible(true);
85
      int widthT = (int)(width* RubikActivity.TUTORIAL_ITEM_TEXT);
86 234a7582 Leszek Koltunski
87 804293f0 Leszek Koltunski
      RubikActivity ract = (RubikActivity)getContext();
88
      Resources res = act.getResources();
89
      String packageName = act.getPackageName();
90 b91d4033 Leszek Koltunski
91 804293f0 Leszek Koltunski
      View tab = inflate( act, R.layout.dialog_tutorial_tab, null);
92
      LinearLayout layout = tab.findViewById(R.id.tabLayout);
93 234a7582 Leszek Koltunski
94 804293f0 Leszek Koltunski
      int colorB = getResources().getColor(R.color.light_grey);
95
      int colorT = getResources().getColor(R.color.white);
96 234a7582 Leszek Koltunski
97 804293f0 Leszek Koltunski
      for (String[] tutorial : tutorials)
98
        {
99
        String coun = tutorial[0];
100
        String url  = tutorial[1];
101
        String desc = tutorial[2];
102
        String auth = tutorial[3];
103 6bc01aa4 Leszek Koltunski
104 804293f0 Leszek Koltunski
        int countryID = res.getIdentifier(coun, "drawable", packageName);
105 b91d4033 Leszek Koltunski
106 804293f0 Leszek Koltunski
        View row = createRow(ract, countryID, desc, url, auth, widthT, objectOrdinal, colorB, colorT);
107
        layout.addView(row);
108
        }
109 b91d4033 Leszek Koltunski
110 804293f0 Leszek Koltunski
      addView(tab);
111 b91d4033 Leszek Koltunski
      }
112 234a7582 Leszek Koltunski
    }
113 b91d4033 Leszek Koltunski
114 a84c3a25 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
115
116
  void clickPossible(boolean click)
117
    {
118
    mCanClick = click;
119
    }
120
121 b91d4033 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
122
123 992748ab Leszek Koltunski
  private View createRow(final RubikActivity act, int countryID, final String desc, final String url,
124 d433b50e Leszek Koltunski
                         final String auth, int size, final int obj, int colorB, int colorT)
125 b91d4033 Leszek Koltunski
    {
126 cb6d9c37 Leszek Koltunski
    float textSize = 0.5f*size;
127 b91d4033 Leszek Koltunski
    View row = inflate( act, R.layout.dialog_tutorial_row, null);
128
129 cb6d9c37 Leszek Koltunski
    LinearLayout layout = row.findViewById(R.id.tutorialLayout);
130
    layout.setMinimumHeight(size);
131
132
    Button butt = row.findViewById(R.id.tutorialButton);
133 ef1f3e34 Leszek Koltunski
    butt.setText(R.string.view);
134 6bc01aa4 Leszek Koltunski
    butt.setTextColor(colorT);
135
    butt.setBackgroundColor(colorB);
136 cb6d9c37 Leszek Koltunski
    butt.setTextSize(TypedValue.COMPLEX_UNIT_PX, textSize);
137
    butt.setHeight(size);
138 b91d4033 Leszek Koltunski
139
    butt.setOnClickListener( new View.OnClickListener()
140
      {
141
      @Override
142
      public void onClick(View v)
143
        {
144 a84c3a25 Leszek Koltunski
        if( mCanClick )
145
          {
146 7ac0ee88 Leszek Koltunski
          act.switchTutorial(url,obj);
147
          analyticsReport(act,desc,auth,obj);
148 a84c3a25 Leszek Koltunski
          clickPossible(false);
149
          }
150 b91d4033 Leszek Koltunski
        }
151
      });
152
153 ef1f3e34 Leszek Koltunski
    ImageView image = row.findViewById(R.id.tutorialCountry);
154
    int id = countryID!=0 ? countryID : R.drawable.un;
155
    image.setImageResource(id);
156
157
    TextView author = row.findViewById(R.id.tutorialAuthor);
158 cb6d9c37 Leszek Koltunski
    author.setTextSize(TypedValue.COMPLEX_UNIT_PX, textSize);
159 ef1f3e34 Leszek Koltunski
    author.setText(auth);
160
161
    TextView title  = row.findViewById(R.id.tutorialTitle);
162 cb6d9c37 Leszek Koltunski
    title.setTextSize(TypedValue.COMPLEX_UNIT_PX, textSize);
163 ef1f3e34 Leszek Koltunski
    title.setText(desc);
164
165 b91d4033 Leszek Koltunski
    return row;
166
    }
167 992748ab Leszek Koltunski
168
///////////////////////////////////////////////////////////////////////////////////////////////////
169
170 d433b50e Leszek Koltunski
  private void analyticsReport(RubikActivity act, String desc, String author, int obj)
171 992748ab Leszek Koltunski
    {
172
    String message = desc+" ("+author+")";
173
174
    if( BuildConfig.DEBUG )
175
       {
176
       android.util.Log.d("tutorial", message);
177
       }
178
    else
179
      {
180
      FirebaseAnalytics analytics = act.getAnalytics();
181
182
      if( analytics!=null )
183
        {
184 d433b50e Leszek Koltunski
        RubikObject object = RubikObjectList.getObject(obj);
185
186 992748ab Leszek Koltunski
        Bundle bundle = new Bundle();
187
        bundle.putString(FirebaseAnalytics.Param.CONTENT_TYPE, message);
188 84d746d7 Leszek Koltunski
        bundle.putString(FirebaseAnalytics.Param.ITEM_NAME, object==null ? "NULL" : object.getLowerName() );
189 992748ab Leszek Koltunski
        analytics.logEvent(FirebaseAnalytics.Event.TUTORIAL_BEGIN, bundle);
190
        }
191
      }
192
    }
193 234a7582 Leszek Koltunski
  }