Project

General

Profile

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

magiccube / src / main / java / org / distorted / dialogs / RubikDialogTutorialView.java @ 05c044a5

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 05c044a5 Leszek Koltunski
      catch(Exception ignored) { }
77 804293f0 Leszek Koltunski
      }
78
79
    if( tutorials!=null )
80
      {
81
      clickPossible(true);
82
      int widthT = (int)(width* RubikActivity.TUTORIAL_ITEM_TEXT);
83 234a7582 Leszek Koltunski
84 804293f0 Leszek Koltunski
      RubikActivity ract = (RubikActivity)getContext();
85
      Resources res = act.getResources();
86
      String packageName = act.getPackageName();
87 b91d4033 Leszek Koltunski
88 804293f0 Leszek Koltunski
      View tab = inflate( act, R.layout.dialog_tutorial_tab, null);
89
      LinearLayout layout = tab.findViewById(R.id.tabLayout);
90 234a7582 Leszek Koltunski
91 804293f0 Leszek Koltunski
      int colorB = getResources().getColor(R.color.light_grey);
92
      int colorT = getResources().getColor(R.color.white);
93 234a7582 Leszek Koltunski
94 804293f0 Leszek Koltunski
      for (String[] tutorial : tutorials)
95
        {
96
        String coun = tutorial[0];
97
        String url  = tutorial[1];
98
        String desc = tutorial[2];
99
        String auth = tutorial[3];
100 6bc01aa4 Leszek Koltunski
101 804293f0 Leszek Koltunski
        int countryID = res.getIdentifier(coun, "drawable", packageName);
102 b91d4033 Leszek Koltunski
103 804293f0 Leszek Koltunski
        View row = createRow(ract, countryID, desc, url, auth, widthT, objectOrdinal, colorB, colorT);
104
        layout.addView(row);
105
        }
106 b91d4033 Leszek Koltunski
107 804293f0 Leszek Koltunski
      addView(tab);
108 b91d4033 Leszek Koltunski
      }
109 234a7582 Leszek Koltunski
    }
110 b91d4033 Leszek Koltunski
111 a84c3a25 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
112
113
  void clickPossible(boolean click)
114
    {
115
    mCanClick = click;
116
    }
117
118 b91d4033 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
119
120 992748ab Leszek Koltunski
  private View createRow(final RubikActivity act, int countryID, final String desc, final String url,
121 d433b50e Leszek Koltunski
                         final String auth, int size, final int obj, int colorB, int colorT)
122 b91d4033 Leszek Koltunski
    {
123 cb6d9c37 Leszek Koltunski
    float textSize = 0.5f*size;
124 b91d4033 Leszek Koltunski
    View row = inflate( act, R.layout.dialog_tutorial_row, null);
125
126 cb6d9c37 Leszek Koltunski
    LinearLayout layout = row.findViewById(R.id.tutorialLayout);
127
    layout.setMinimumHeight(size);
128
129
    Button butt = row.findViewById(R.id.tutorialButton);
130 ef1f3e34 Leszek Koltunski
    butt.setText(R.string.view);
131 6bc01aa4 Leszek Koltunski
    butt.setTextColor(colorT);
132
    butt.setBackgroundColor(colorB);
133 cb6d9c37 Leszek Koltunski
    butt.setTextSize(TypedValue.COMPLEX_UNIT_PX, textSize);
134
    butt.setHeight(size);
135 b91d4033 Leszek Koltunski
136
    butt.setOnClickListener( new View.OnClickListener()
137
      {
138
      @Override
139
      public void onClick(View v)
140
        {
141 a84c3a25 Leszek Koltunski
        if( mCanClick )
142
          {
143 7ac0ee88 Leszek Koltunski
          act.switchTutorial(url,obj);
144
          analyticsReport(act,desc,auth,obj);
145 a84c3a25 Leszek Koltunski
          clickPossible(false);
146
          }
147 b91d4033 Leszek Koltunski
        }
148
      });
149
150 ef1f3e34 Leszek Koltunski
    ImageView image = row.findViewById(R.id.tutorialCountry);
151 05c044a5 Leszek Koltunski
    int id = countryID!=0 ? countryID : org.distorted.flags.R.drawable.unknown;
152 ef1f3e34 Leszek Koltunski
    image.setImageResource(id);
153
154
    TextView author = row.findViewById(R.id.tutorialAuthor);
155 cb6d9c37 Leszek Koltunski
    author.setTextSize(TypedValue.COMPLEX_UNIT_PX, textSize);
156 ef1f3e34 Leszek Koltunski
    author.setText(auth);
157
158
    TextView title  = row.findViewById(R.id.tutorialTitle);
159 cb6d9c37 Leszek Koltunski
    title.setTextSize(TypedValue.COMPLEX_UNIT_PX, textSize);
160 ef1f3e34 Leszek Koltunski
    title.setText(desc);
161
162 b91d4033 Leszek Koltunski
    return row;
163
    }
164 992748ab Leszek Koltunski
165
///////////////////////////////////////////////////////////////////////////////////////////////////
166
167 d433b50e Leszek Koltunski
  private void analyticsReport(RubikActivity act, String desc, String author, int obj)
168 992748ab Leszek Koltunski
    {
169
    String message = desc+" ("+author+")";
170
171
    if( BuildConfig.DEBUG )
172
       {
173
       android.util.Log.d("tutorial", message);
174
       }
175
    else
176
      {
177
      FirebaseAnalytics analytics = act.getAnalytics();
178
179
      if( analytics!=null )
180
        {
181 d433b50e Leszek Koltunski
        RubikObject object = RubikObjectList.getObject(obj);
182
183 992748ab Leszek Koltunski
        Bundle bundle = new Bundle();
184
        bundle.putString(FirebaseAnalytics.Param.CONTENT_TYPE, message);
185 84d746d7 Leszek Koltunski
        bundle.putString(FirebaseAnalytics.Param.ITEM_NAME, object==null ? "NULL" : object.getLowerName() );
186 992748ab Leszek Koltunski
        analytics.logEvent(FirebaseAnalytics.Event.TUTORIAL_BEGIN, bundle);
187
        }
188
      }
189
    }
190 234a7582 Leszek Koltunski
  }