Panagiotis Triantafyllou

accessibility market pass, minor fixes

...@@ -12,14 +12,19 @@ import android.text.Spanned; ...@@ -12,14 +12,19 @@ import android.text.Spanned;
12 import android.view.LayoutInflater; 12 import android.view.LayoutInflater;
13 import android.view.View; 13 import android.view.View;
14 import android.view.ViewGroup; 14 import android.view.ViewGroup;
15 +import android.view.accessibility.AccessibilityEvent;
15 import android.widget.ImageView; 16 import android.widget.ImageView;
16 import android.widget.LinearLayout; 17 import android.widget.LinearLayout;
17 import android.widget.RelativeLayout; 18 import android.widget.RelativeLayout;
18 import android.widget.TextView; 19 import android.widget.TextView;
19 20
21 +import androidx.annotation.NonNull;
20 import androidx.appcompat.app.AlertDialog; 22 import androidx.appcompat.app.AlertDialog;
21 import androidx.cardview.widget.CardView; 23 import androidx.cardview.widget.CardView;
22 import androidx.core.content.res.ResourcesCompat; 24 import androidx.core.content.res.ResourcesCompat;
25 +import androidx.core.view.AccessibilityDelegateCompat;
26 +import androidx.core.view.ViewCompat;
27 +import androidx.core.view.accessibility.AccessibilityNodeInfoCompat;
23 28
24 import com.bumptech.glide.Glide; 29 import com.bumptech.glide.Glide;
25 import com.bumptech.glide.load.engine.DiskCacheStrategy; 30 import com.bumptech.glide.load.engine.DiskCacheStrategy;
...@@ -92,6 +97,68 @@ public class MarketPassActivity extends Activity implements View.OnClickListener ...@@ -92,6 +97,68 @@ public class MarketPassActivity extends Activity implements View.OnClickListener
92 97
93 mPbLoading.setVisibility(View.VISIBLE); 98 mPbLoading.setVisibility(View.VISIBLE);
94 // WarplyManager.getMarketPassDetails(mMarketPassDetailsCallback); 99 // WarplyManager.getMarketPassDetails(mMarketPassDetailsCallback);
100 +
101 + //Accessibility
102 + ViewCompat.setAccessibilityDelegate(mFontHeader, new AccessibilityDelegateCompat() {
103 + @Override
104 + public void onInitializeAccessibilityNodeInfo(View host, @NonNull AccessibilityNodeInfoCompat info) {
105 + super.onInitializeAccessibilityNodeInfo(host, info);
106 + info.setClassName("android.widget.TextView");
107 + info.setHeading(true);
108 + }
109 + });
110 + mFontHeader.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED);
111 +
112 + ViewCompat.setAccessibilityDelegate(mIvBack, new AccessibilityDelegateCompat() {
113 + @Override
114 + public void onInitializeAccessibilityNodeInfo(View host, @NonNull AccessibilityNodeInfoCompat info) {
115 + super.onInitializeAccessibilityNodeInfo(host, info);
116 + info.setClassName("android.widget.Button");
117 + info.setContentDescription(getString(R.string.accessibility_back));
118 + }
119 + });
120 + mIvBack.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_NO);
121 + mIvBack.postDelayed(() -> {
122 + mIvBack.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_YES);
123 + }, 1000);
124 +
125 + ViewCompat.setAccessibilityDelegate(mIvInfo, new AccessibilityDelegateCompat() {
126 + @Override
127 + public void onInitializeAccessibilityNodeInfo(View host, @NonNull AccessibilityNodeInfoCompat info) {
128 + super.onInitializeAccessibilityNodeInfo(host, info);
129 + info.setClassName("android.widget.Button");
130 + info.setContentDescription(getString(R.string.cos_market_Pass_info_title));
131 + }
132 + });
133 +
134 + ViewCompat.setAccessibilityDelegate(mTvBarcode, new AccessibilityDelegateCompat() {
135 + @Override
136 + public void onInitializeAccessibilityNodeInfo(View host, @NonNull AccessibilityNodeInfoCompat info) {
137 + super.onInitializeAccessibilityNodeInfo(host, info);
138 + info.setClassName("android.widget.TextView");
139 + info.setContentDescription(getString(R.string.accessibility_market_pass_barcode_value) + ", " + mTvBarcode.getText().toString());
140 + }
141 + });
142 +
143 + mIvBarcode.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_YES);
144 + ViewCompat.setAccessibilityDelegate(mIvBarcode, new AccessibilityDelegateCompat() {
145 + @Override
146 + public void onInitializeAccessibilityNodeInfo(View host, @NonNull AccessibilityNodeInfoCompat info) {
147 + super.onInitializeAccessibilityNodeInfo(host, info);
148 + info.setClassName("android.widget.ImageView");
149 + info.setContentDescription(getString(R.string.accessibility_market_pass_barcode));
150 + }
151 + });
152 +
153 + ViewCompat.setAccessibilityDelegate(mLlMap, new AccessibilityDelegateCompat() {
154 + @Override
155 + public void onInitializeAccessibilityNodeInfo(View host, @NonNull AccessibilityNodeInfoCompat info) {
156 + super.onInitializeAccessibilityNodeInfo(host, info);
157 + info.setClassName("android.widget.Button");
158 + info.setContentDescription(getString(R.string.cos_pass_map));
159 + }
160 + });
161 +
95 initViews(); 162 initViews();
96 } 163 }
97 164
...@@ -148,42 +215,53 @@ public class MarketPassActivity extends Activity implements View.OnClickListener ...@@ -148,42 +215,53 @@ public class MarketPassActivity extends Activity implements View.OnClickListener
148 mIvInfo.setOnClickListener(this); 215 mIvInfo.setOnClickListener(this);
149 mLlMap.setOnClickListener(this); 216 mLlMap.setOnClickListener(this);
150 217
151 - if(WarplyManagerHelper.getMarketPassDetails() != null) { 218 + if (WarplyManagerHelper.getMarketPassDetails() != null) {
152 // if (mMarketPassDetails != null) 219 // if (mMarketPassDetails != null)
153 - createBarcodeBitmap(WarplyManagerHelper.getMarketPassDetails().getBarcode()); 220 + createBarcodeBitmap(WarplyManagerHelper.getMarketPassDetails().getBarcode());
154 221
155 // if (mMarketPassDetails != null) { 222 // if (mMarketPassDetails != null) {
156 - String passValue = String.format(Locale.US, "%.2f", WarplyManagerHelper.getMarketPassDetails().getTotalDiscount()); 223 + String passValue = String.format(Locale.US, "%.2f", WarplyManagerHelper.getMarketPassDetails().getTotalDiscount());
157 - String fullText = String.format(getString(R.string.cos_market_pass_coupons_title), passValue); 224 + String fullText = String.format(getString(R.string.cos_market_pass_coupons_title), passValue);
158 - int startIndex = fullText.indexOf(passValue); 225 + int startIndex = fullText.indexOf(passValue);
159 - int endIndex = startIndex + passValue.length(); 226 + int endIndex = startIndex + passValue.length();
160 - SpannableStringBuilder sBuilder = new SpannableStringBuilder(fullText); 227 + SpannableStringBuilder sBuilder = new SpannableStringBuilder(fullText);
161 - Typeface typefaceBold = ResourcesCompat.getFont(this, R.font.peridot_bold); 228 + Typeface typefaceBold = ResourcesCompat.getFont(this, R.font.peridot_bold);
162 - CustomTypefaceSpan typefaceBoldSpan = new CustomTypefaceSpan(typefaceBold); 229 + CustomTypefaceSpan typefaceBoldSpan = new CustomTypefaceSpan(typefaceBold);
163 - sBuilder.setSpan(typefaceBoldSpan, startIndex, endIndex, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 230 + sBuilder.setSpan(typefaceBoldSpan, startIndex, endIndex, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
164 - mTvPassCount.setText(sBuilder, TextView.BufferType.SPANNABLE); 231 + mTvPassCount.setText(sBuilder, TextView.BufferType.SPANNABLE);
165 // } 232 // }
166 233
167 // if (mMarketPassDetails != null) { 234 // if (mMarketPassDetails != null) {
168 - for (int i = 0; i < WarplyManagerHelper.getMarketPassDetails().getSupermarkets().size(); i++) { 235 + for (int i = 0; i < WarplyManagerHelper.getMarketPassDetails().getSupermarkets().size(); i++) {
169 - int tempIndex = i; 236 + int tempIndex = i;
170 - LayoutInflater vi = (LayoutInflater) getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 237 + LayoutInflater vi = (LayoutInflater) getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
171 - RelativeLayout v = (RelativeLayout) vi.inflate(R.layout.item_sheet_image, null); 238 + RelativeLayout v = (RelativeLayout) vi.inflate(R.layout.item_sheet_image, null);
172 239
173 - ImageView merchantLogo = (ImageView) v.findViewById(R.id.iv_market_logo); 240 + ImageView merchantLogo = (ImageView) v.findViewById(R.id.iv_market_logo);
174 - Glide.with(this) 241 + Glide.with(this)
175 // .setDefaultRequestOptions( 242 // .setDefaultRequestOptions(
176 // RequestOptions 243 // RequestOptions
177 // .placeholderOf(R.drawable.ic_default_contact_photo) 244 // .placeholderOf(R.drawable.ic_default_contact_photo)
178 // .error(R.drawable.ic_default_contact_photo)) 245 // .error(R.drawable.ic_default_contact_photo))
179 - .load(WarplyManagerHelper.getMarketPassDetails().getSupermarkets().get(i).getLogo()) 246 + .load(WarplyManagerHelper.getMarketPassDetails().getSupermarkets().get(i).getLogo())
180 - .diskCacheStrategy(DiskCacheStrategy.DATA) 247 + .diskCacheStrategy(DiskCacheStrategy.DATA)
181 - .into(merchantLogo); 248 + .into(merchantLogo);
182 - mLlParentLogosView.addView(v, tempIndex, new ViewGroup.LayoutParams( 249 +
183 - ViewGroup.LayoutParams.WRAP_CONTENT, 250 + merchantLogo.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_YES);
184 - ViewGroup.LayoutParams.WRAP_CONTENT)); 251 + ViewCompat.setAccessibilityDelegate(merchantLogo, new AccessibilityDelegateCompat() {
252 + @Override
253 + public void onInitializeAccessibilityNodeInfo(View host, @NonNull AccessibilityNodeInfoCompat info) {
254 + super.onInitializeAccessibilityNodeInfo(host, info);
255 + info.setClassName("android.widget.ImageView");
256 + info.setContentDescription(WarplyManagerHelper.getMarketPassDetails().getSupermarkets().get(tempIndex).getName());
257 + }
258 + });
259 +
260 + mLlParentLogosView.addView(v, tempIndex, new ViewGroup.LayoutParams(
261 + ViewGroup.LayoutParams.WRAP_CONTENT,
262 + ViewGroup.LayoutParams.WRAP_CONTENT));
185 263
186 - } 264 + }
187 // } 265 // }
188 266
189 mCvMarketDetails.setVisibility(View.VISIBLE); 267 mCvMarketDetails.setVisibility(View.VISIBLE);
......
...@@ -3,10 +3,16 @@ package ly.warp.sdk.activities; ...@@ -3,10 +3,16 @@ package ly.warp.sdk.activities;
3 import android.app.Activity; 3 import android.app.Activity;
4 import android.os.Bundle; 4 import android.os.Bundle;
5 import android.view.View; 5 import android.view.View;
6 +import android.view.accessibility.AccessibilityEvent;
6 import android.widget.ImageView; 7 import android.widget.ImageView;
7 import android.widget.LinearLayout; 8 import android.widget.LinearLayout;
8 import android.widget.TextView; 9 import android.widget.TextView;
9 10
11 +import androidx.annotation.NonNull;
12 +import androidx.core.view.AccessibilityDelegateCompat;
13 +import androidx.core.view.ViewCompat;
14 +import androidx.core.view.accessibility.AccessibilityNodeInfoCompat;
15 +
10 import ly.warp.sdk.R; 16 import ly.warp.sdk.R;
11 import ly.warp.sdk.utils.WarpUtils; 17 import ly.warp.sdk.utils.WarpUtils;
12 import ly.warp.sdk.utils.managers.WarplyAnalyticsManager; 18 import ly.warp.sdk.utils.managers.WarplyAnalyticsManager;
...@@ -54,6 +60,39 @@ public class MarketPassInfoActivity extends Activity implements View.OnClickList ...@@ -54,6 +60,39 @@ public class MarketPassInfoActivity extends Activity implements View.OnClickList
54 WarpUtils.renderCustomFont(this, R.font.peridot_regular, mTvBasketSubtitle, 60 WarpUtils.renderCustomFont(this, R.font.peridot_regular, mTvBasketSubtitle,
55 mTvEshopSubtitle, mTvAbSubtitle); 61 mTvEshopSubtitle, mTvAbSubtitle);
56 62
63 + //Accessibility
64 + ViewCompat.setAccessibilityDelegate(mFontHeader, new AccessibilityDelegateCompat() {
65 + @Override
66 + public void onInitializeAccessibilityNodeInfo(View host, @NonNull AccessibilityNodeInfoCompat info) {
67 + super.onInitializeAccessibilityNodeInfo(host, info);
68 + info.setClassName("android.widget.TextView");
69 + info.setHeading(true);
70 + }
71 + });
72 + mFontHeader.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED);
73 +
74 + ViewCompat.setAccessibilityDelegate(mIvBack, new AccessibilityDelegateCompat() {
75 + @Override
76 + public void onInitializeAccessibilityNodeInfo(View host, @NonNull AccessibilityNodeInfoCompat info) {
77 + super.onInitializeAccessibilityNodeInfo(host, info);
78 + info.setClassName("android.widget.Button");
79 + info.setContentDescription(getString(R.string.accessibility_back));
80 + }
81 + });
82 + mIvBack.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_NO);
83 + mIvBack.postDelayed(() -> {
84 + mIvBack.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_YES);
85 + }, 1000);
86 +
87 + ViewCompat.setAccessibilityDelegate(mLlPassReturn, new AccessibilityDelegateCompat() {
88 + @Override
89 + public void onInitializeAccessibilityNodeInfo(View host, @NonNull AccessibilityNodeInfoCompat info) {
90 + super.onInitializeAccessibilityNodeInfo(host, info);
91 + info.setClassName("android.widget.Button");
92 + info.setContentDescription(getString(R.string.cos_market_pass_return));
93 + }
94 + });
95 +
57 initViews(); 96 initViews();
58 } 97 }
59 98
......
...@@ -22,6 +22,7 @@ ...@@ -22,6 +22,7 @@
22 android:layout_height="48dp" 22 android:layout_height="48dp"
23 android:layout_marginStart="16dp" 23 android:layout_marginStart="16dp"
24 android:scaleType="centerInside" 24 android:scaleType="centerInside"
25 + android:contentDescription="@string/accessibility_back"
25 android:src="@drawable/ic_back" 26 android:src="@drawable/ic_back"
26 app:layout_constraintBottom_toBottomOf="parent" 27 app:layout_constraintBottom_toBottomOf="parent"
27 app:layout_constraintStart_toStartOf="parent" 28 app:layout_constraintStart_toStartOf="parent"
...@@ -33,6 +34,7 @@ ...@@ -33,6 +34,7 @@
33 android:layout_height="wrap_content" 34 android:layout_height="wrap_content"
34 android:gravity="center" 35 android:gravity="center"
35 android:text="@string/cos_market_title" 36 android:text="@string/cos_market_title"
37 + android:contentDescription="@string/cos_market_title"
36 android:textColor="@color/cos_light_black" 38 android:textColor="@color/cos_light_black"
37 android:textSize="19sp" 39 android:textSize="19sp"
38 app:layout_constraintBottom_toBottomOf="parent" 40 app:layout_constraintBottom_toBottomOf="parent"
...@@ -149,8 +151,7 @@ ...@@ -149,8 +151,7 @@
149 android:layout_height="wrap_content" 151 android:layout_height="wrap_content"
150 android:layout_below="@+id/rl_parent_pass" 152 android:layout_below="@+id/rl_parent_pass"
151 android:background="@color/cos_green14" 153 android:background="@color/cos_green14"
152 - android:gravity="center" 154 + android:gravity="center">
153 - android:paddingVertical="16dp">
154 155
155 <TextView 156 <TextView
156 android:id="@+id/tv_total_pass_title" 157 android:id="@+id/tv_total_pass_title"
...@@ -160,6 +161,7 @@ ...@@ -160,6 +161,7 @@
160 android:letterSpacing="0.04" 161 android:letterSpacing="0.04"
161 android:textColor="@color/white" 162 android:textColor="@color/white"
162 android:textSize="16sp" 163 android:textSize="16sp"
164 + android:paddingVertical="16dp"
163 app:lineHeight="22dp" /> 165 app:lineHeight="22dp" />
164 </LinearLayout> 166 </LinearLayout>
165 167
......
...@@ -22,6 +22,7 @@ ...@@ -22,6 +22,7 @@
22 android:layout_marginStart="16dp" 22 android:layout_marginStart="16dp"
23 android:scaleType="centerInside" 23 android:scaleType="centerInside"
24 android:src="@drawable/ic_back" 24 android:src="@drawable/ic_back"
25 + android:contentDescription="@string/accessibility_back"
25 app:layout_constraintBottom_toBottomOf="parent" 26 app:layout_constraintBottom_toBottomOf="parent"
26 app:layout_constraintStart_toStartOf="parent" 27 app:layout_constraintStart_toStartOf="parent"
27 app:layout_constraintTop_toTopOf="parent" /> 28 app:layout_constraintTop_toTopOf="parent" />
...@@ -32,6 +33,7 @@ ...@@ -32,6 +33,7 @@
32 android:layout_height="wrap_content" 33 android:layout_height="wrap_content"
33 android:gravity="center" 34 android:gravity="center"
34 android:text="@string/cos_market_Pass_info_title" 35 android:text="@string/cos_market_Pass_info_title"
36 + android:contentDescription="@string/cos_market_Pass_info_title"
35 android:textColor="@color/cos_light_black" 37 android:textColor="@color/cos_light_black"
36 android:textSize="19sp" 38 android:textSize="19sp"
37 app:layout_constraintBottom_toBottomOf="parent" 39 app:layout_constraintBottom_toBottomOf="parent"
......
...@@ -16,6 +16,7 @@ ...@@ -16,6 +16,7 @@
16 android:layout_height="48dp" 16 android:layout_height="48dp"
17 android:layout_marginStart="16dp" 17 android:layout_marginStart="16dp"
18 android:scaleType="centerInside" 18 android:scaleType="centerInside"
19 + android:contentDescription="@string/accessibility_back"
19 android:src="@drawable/ic_back" 20 android:src="@drawable/ic_back"
20 app:layout_constraintBottom_toBottomOf="parent" 21 app:layout_constraintBottom_toBottomOf="parent"
21 app:layout_constraintStart_toStartOf="parent" 22 app:layout_constraintStart_toStartOf="parent"
...@@ -26,6 +27,7 @@ ...@@ -26,6 +27,7 @@
26 android:layout_width="wrap_content" 27 android:layout_width="wrap_content"
27 android:layout_height="wrap_content" 28 android:layout_height="wrap_content"
28 android:text="@string/cos_coupon_shops_title" 29 android:text="@string/cos_coupon_shops_title"
30 + android:contentDescription="@string/cos_coupon_shops_title"
29 android:textColor="@color/cos_light_black" 31 android:textColor="@color/cos_light_black"
30 android:textSize="19sp" 32 android:textSize="19sp"
31 app:layout_constraintBottom_toBottomOf="parent" 33 app:layout_constraintBottom_toBottomOf="parent"
......
...@@ -18,6 +18,7 @@ ...@@ -18,6 +18,7 @@
18 android:layout_marginStart="16dp" 18 android:layout_marginStart="16dp"
19 android:scaleType="centerInside" 19 android:scaleType="centerInside"
20 android:src="@drawable/ic_back" 20 android:src="@drawable/ic_back"
21 + android:contentDescription="@string/accessibility_back"
21 app:layout_constraintBottom_toBottomOf="parent" 22 app:layout_constraintBottom_toBottomOf="parent"
22 app:layout_constraintStart_toStartOf="parent" 23 app:layout_constraintStart_toStartOf="parent"
23 app:layout_constraintTop_toTopOf="parent" /> 24 app:layout_constraintTop_toTopOf="parent" />
...@@ -27,6 +28,7 @@ ...@@ -27,6 +28,7 @@
27 android:layout_width="wrap_content" 28 android:layout_width="wrap_content"
28 android:layout_height="wrap_content" 29 android:layout_height="wrap_content"
29 android:text="@string/cos_coupon_shops_title" 30 android:text="@string/cos_coupon_shops_title"
31 + android:contentDescription="@string/cos_coupon_shops_title"
30 android:textColor="@color/cos_light_black" 32 android:textColor="@color/cos_light_black"
31 android:textSize="19sp" 33 android:textSize="19sp"
32 app:layout_constraintBottom_toBottomOf="parent" 34 app:layout_constraintBottom_toBottomOf="parent"
......
...@@ -274,6 +274,9 @@ ...@@ -274,6 +274,9 @@
274 <string name="accessibility_phone">Τηλέφωνο</string> 274 <string name="accessibility_phone">Τηλέφωνο</string>
275 <string name="accessibility_address">Διεύθυνση</string> 275 <string name="accessibility_address">Διεύθυνση</string>
276 <string name="accessibility_shop_logo">Λογότυπο καταστήματος</string> 276 <string name="accessibility_shop_logo">Λογότυπο καταστήματος</string>
277 + <string name="accessibility_market_pass_info">Πληροφορίες</string>
278 + <string name="accessibility_market_pass_barcode_value">Αριθμός barcode</string>
279 + <string name="accessibility_market_pass_barcode">Barcode</string>
277 280
278 <string-array name="coupons_array"> 281 <string-array name="coupons_array">
279 <item>Κουπόνια</item> 282 <item>Κουπόνια</item>
......