Panagiotis Triantafyllou

accessibility maps

...@@ -2,6 +2,7 @@ package ly.warp.sdk.activities; ...@@ -2,6 +2,7 @@ package ly.warp.sdk.activities;
2 2
3 import android.Manifest; 3 import android.Manifest;
4 import android.content.ActivityNotFoundException; 4 import android.content.ActivityNotFoundException;
5 +import android.content.Context;
5 import android.content.Intent; 6 import android.content.Intent;
6 import android.content.pm.PackageManager; 7 import android.content.pm.PackageManager;
7 import android.graphics.Bitmap; 8 import android.graphics.Bitmap;
...@@ -9,11 +10,15 @@ import android.graphics.Canvas; ...@@ -9,11 +10,15 @@ import android.graphics.Canvas;
9 import android.graphics.drawable.Drawable; 10 import android.graphics.drawable.Drawable;
10 import android.net.Uri; 11 import android.net.Uri;
11 import android.os.Bundle; 12 import android.os.Bundle;
13 +import android.os.Handler;
12 import android.text.TextUtils; 14 import android.text.TextUtils;
13 import android.util.Log; 15 import android.util.Log;
14 import android.view.View; 16 import android.view.View;
17 +import android.view.accessibility.AccessibilityEvent;
18 +import android.view.accessibility.AccessibilityManager;
15 import android.widget.ImageView; 19 import android.widget.ImageView;
16 import android.widget.LinearLayout; 20 import android.widget.LinearLayout;
21 +import android.widget.RelativeLayout;
17 import android.widget.TextView; 22 import android.widget.TextView;
18 23
19 import androidx.annotation.NonNull; 24 import androidx.annotation.NonNull;
...@@ -21,6 +26,9 @@ import androidx.annotation.Nullable; ...@@ -21,6 +26,9 @@ import androidx.annotation.Nullable;
21 import androidx.appcompat.app.AlertDialog; 26 import androidx.appcompat.app.AlertDialog;
22 import androidx.core.app.ActivityCompat; 27 import androidx.core.app.ActivityCompat;
23 import androidx.core.content.ContextCompat; 28 import androidx.core.content.ContextCompat;
29 +import androidx.core.view.AccessibilityDelegateCompat;
30 +import androidx.core.view.ViewCompat;
31 +import androidx.core.view.accessibility.AccessibilityNodeInfoCompat;
24 import androidx.fragment.app.FragmentActivity; 32 import androidx.fragment.app.FragmentActivity;
25 33
26 import com.bumptech.glide.Glide; 34 import com.bumptech.glide.Glide;
...@@ -104,6 +112,9 @@ public class ShopsActivity extends FragmentActivity implements View.OnClickListe ...@@ -104,6 +112,9 @@ public class ShopsActivity extends FragmentActivity implements View.OnClickListe
104 mIvBack.setOnClickListener(this); 112 mIvBack.setOnClickListener(this);
105 mFontHeader = findViewById(R.id.textView3); 113 mFontHeader = findViewById(R.id.textView3);
106 WarpUtils.renderCustomFont(this, R.font.bt_cosmo_bold, mFontHeader); 114 WarpUtils.renderCustomFont(this, R.font.bt_cosmo_bold, mFontHeader);
115 +
116 + mIvBack.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_NO);
117 + mFontHeader.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_NO);
107 } 118 }
108 119
109 @Override 120 @Override
...@@ -214,9 +225,12 @@ public class ShopsActivity extends FragmentActivity implements View.OnClickListe ...@@ -214,9 +225,12 @@ public class ShopsActivity extends FragmentActivity implements View.OnClickListe
214 final BottomSheetDialog bottomSheetDialog = new BottomSheetDialog(this, R.style.BottomSheetDialog); 225 final BottomSheetDialog bottomSheetDialog = new BottomSheetDialog(this, R.style.BottomSheetDialog);
215 bottomSheetDialog.setContentView(R.layout.dl_map_pin); 226 bottomSheetDialog.setContentView(R.layout.dl_map_pin);
216 227
217 - ImageView dialogClose = (ImageView) bottomSheetDialog.findViewById(R.id.iv_map_pin_close); 228 + RelativeLayout dialogClose = (RelativeLayout) bottomSheetDialog.findViewById(R.id.rl_map_pin_close);
218 dialogClose.setOnClickListener(view -> bottomSheetDialog.dismiss()); 229 dialogClose.setOnClickListener(view -> bottomSheetDialog.dismiss());
219 230
231 + RelativeLayout imagePhone = (RelativeLayout) bottomSheetDialog.findViewById(R.id.rl_phone);
232 + RelativeLayout imageLocation = (RelativeLayout) bottomSheetDialog.findViewById(R.id.rl_location);
233 +
220 TextView pinTitle = (TextView) bottomSheetDialog.findViewById(R.id.tv_pin_title); 234 TextView pinTitle = (TextView) bottomSheetDialog.findViewById(R.id.tv_pin_title);
221 WarpUtils.renderCustomFont(ShopsActivity.this, R.font.pf_square_sans_pro_bold, pinTitle); 235 WarpUtils.renderCustomFont(ShopsActivity.this, R.font.pf_square_sans_pro_bold, pinTitle);
222 if (mMerchantParentList != null && mMerchantParentList.size() > 0) { 236 if (mMerchantParentList != null && mMerchantParentList.size() > 0) {
...@@ -267,6 +281,122 @@ public class ShopsActivity extends FragmentActivity implements View.OnClickListe ...@@ -267,6 +281,122 @@ public class ShopsActivity extends FragmentActivity implements View.OnClickListe
267 startActivity(mapIntent); 281 startActivity(mapIntent);
268 }); 282 });
269 283
284 + pinTitle.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_NO);
285 + ViewCompat.setAccessibilityDelegate(pinTitle, new AccessibilityDelegateCompat() {
286 + @Override
287 + public void onInitializeAccessibilityNodeInfo(View host, @NonNull AccessibilityNodeInfoCompat info) {
288 + super.onInitializeAccessibilityNodeInfo(host, info);
289 + info.setClassName("android.widget.TextView");
290 + info.setContentDescription(pinTitle.getText().toString());
291 + }
292 + });
293 +
294 + dialogClose.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_NO);
295 + ViewCompat.setAccessibilityDelegate(dialogClose, new AccessibilityDelegateCompat() {
296 + @Override
297 + public void onInitializeAccessibilityNodeInfo(View host, @NonNull AccessibilityNodeInfoCompat info) {
298 + super.onInitializeAccessibilityNodeInfo(host, info);
299 + info.setClassName("android.widget.Button");
300 + info.setContentDescription(getString(R.string.accessibility_close));
301 + }
302 + });
303 +
304 + pinLogo.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_NO);
305 + pinName.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_NO);
306 + pinDays.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_NO);
307 + pinTel.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_NO);
308 + pinAddress.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_NO);
309 + pinDirectionsText.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_NO);
310 + pinDirections.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_NO);
311 + imagePhone.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_NO);
312 + imageLocation.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_NO);
313 +
314 + View rootView = findViewById(android.R.id.content);
315 + if (rootView != null) {
316 + rootView.post(() -> {
317 + rootView.announceForAccessibility(getString(R.string.accessibility_pin) + ", " + getString(R.string.accessibility_shop) + ", ");
318 + });
319 +
320 + new Handler().postDelayed(() -> {
321 + dialogClose.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_YES);
322 +
323 + pinTitle.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_YES);
324 + pinLogo.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_YES);
325 + ViewCompat.setAccessibilityDelegate(pinLogo, new AccessibilityDelegateCompat() {
326 + @Override
327 + public void onInitializeAccessibilityNodeInfo(View host, @NonNull AccessibilityNodeInfoCompat info) {
328 + super.onInitializeAccessibilityNodeInfo(host, info);
329 + info.setClassName("android.widget.ImageView");
330 + info.setContentDescription(getString(R.string.accessibility_shop_logo));
331 + }
332 + });
333 +
334 + pinName.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_YES);
335 + ViewCompat.setAccessibilityDelegate(pinName, new AccessibilityDelegateCompat() {
336 + @Override
337 + public void onInitializeAccessibilityNodeInfo(View host, @NonNull AccessibilityNodeInfoCompat info) {
338 + super.onInitializeAccessibilityNodeInfo(host, info);
339 + info.setClassName("android.widget.TextView");
340 + info.setContentDescription(merch.getName());
341 + }
342 + });
343 +
344 + pinDays.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_YES);
345 +
346 + imagePhone.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_YES);
347 + ViewCompat.setAccessibilityDelegate(imagePhone, new AccessibilityDelegateCompat() {
348 + @Override
349 + public void onInitializeAccessibilityNodeInfo(View host, @NonNull AccessibilityNodeInfoCompat info) {
350 + super.onInitializeAccessibilityNodeInfo(host, info);
351 + info.setClassName("android.widget.ImageView");
352 + info.setContentDescription(getString(R.string.accessibility_phone));
353 + }
354 + });
355 +
356 + pinTel.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_YES);
357 + ViewCompat.setAccessibilityDelegate(pinTel, new AccessibilityDelegateCompat() {
358 + @Override
359 + public void onInitializeAccessibilityNodeInfo(View host, @NonNull AccessibilityNodeInfoCompat info) {
360 + super.onInitializeAccessibilityNodeInfo(host, info);
361 + info.setClassName("android.widget.TextView");
362 + info.setContentDescription(WarplyManagerHelper.formatPhoneNumber(merch.getTelephone()));
363 + }
364 + });
365 +
366 + imageLocation.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_YES);
367 + ViewCompat.setAccessibilityDelegate(imageLocation, new AccessibilityDelegateCompat() {
368 + @Override
369 + public void onInitializeAccessibilityNodeInfo(View host, @NonNull AccessibilityNodeInfoCompat info) {
370 + super.onInitializeAccessibilityNodeInfo(host, info);
371 + info.setClassName("android.widget.ImageView");
372 + info.setContentDescription(getString(R.string.accessibility_address));
373 + }
374 + });
375 +
376 + pinAddress.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_YES);
377 + ViewCompat.setAccessibilityDelegate(pinAddress, new AccessibilityDelegateCompat() {
378 + @Override
379 + public void onInitializeAccessibilityNodeInfo(View host, @NonNull AccessibilityNodeInfoCompat info) {
380 + super.onInitializeAccessibilityNodeInfo(host, info);
381 + info.setClassName("android.widget.TextView");
382 + info.setContentDescription(merch.getAddress());
383 + }
384 + });
385 +
386 + pinDirectionsText.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_YES);
387 +
388 + pinDirections.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_YES);
389 + ViewCompat.setAccessibilityDelegate(pinDirections, new AccessibilityDelegateCompat() {
390 + @Override
391 + public void onInitializeAccessibilityNodeInfo(View host, @NonNull AccessibilityNodeInfoCompat info) {
392 + super.onInitializeAccessibilityNodeInfo(host, info);
393 + info.setClassName("android.widget.Button");
394 + info.setContentDescription(getString(R.string.cos_directions));
395 + }
396 + });
397 + }, 3000);
398 + }
399 +
270 bottomSheetDialog.show(); 400 bottomSheetDialog.show();
271 401
272 return false; 402 return false;
...@@ -338,6 +468,32 @@ public class ShopsActivity extends FragmentActivity implements View.OnClickListe ...@@ -338,6 +468,32 @@ public class ShopsActivity extends FragmentActivity implements View.OnClickListe
338 return; 468 return;
339 } 469 }
340 470
471 + //Accessibility
472 + mFontHeader.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_YES);
473 + ViewCompat.setAccessibilityDelegate(mFontHeader, new AccessibilityDelegateCompat() {
474 + @Override
475 + public void onInitializeAccessibilityNodeInfo(View host, @NonNull AccessibilityNodeInfoCompat info) {
476 + super.onInitializeAccessibilityNodeInfo(host, info);
477 + info.setClassName("android.widget.TextView");
478 + info.setHeading(true);
479 + }
480 + });
481 + mFontHeader.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED);
482 +
483 + mIvBack.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_YES);
484 + ViewCompat.setAccessibilityDelegate(mIvBack, new AccessibilityDelegateCompat() {
485 + @Override
486 + public void onInitializeAccessibilityNodeInfo(View host, @NonNull AccessibilityNodeInfoCompat info) {
487 + super.onInitializeAccessibilityNodeInfo(host, info);
488 + info.setClassName("android.widget.Button");
489 + info.setContentDescription(getString(R.string.accessibility_back));
490 + }
491 + });
492 + mIvBack.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_NO);
493 + mIvBack.postDelayed(() -> {
494 + mIvBack.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_YES);
495 + }, 1000);
496 +
341 for (Merchant merch : result) { 497 for (Merchant merch : result) {
342 if (!TextUtils.isEmpty(merch.getImgPreview())) { 498 if (!TextUtils.isEmpty(merch.getImgPreview())) {
343 Glide.with(ShopsActivity.this) 499 Glide.with(ShopsActivity.this)
...@@ -440,6 +596,32 @@ public class ShopsActivity extends FragmentActivity implements View.OnClickListe ...@@ -440,6 +596,32 @@ public class ShopsActivity extends FragmentActivity implements View.OnClickListe
440 return; 596 return;
441 } 597 }
442 598
599 + //Accessibility
600 + mFontHeader.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_YES);
601 + ViewCompat.setAccessibilityDelegate(mFontHeader, new AccessibilityDelegateCompat() {
602 + @Override
603 + public void onInitializeAccessibilityNodeInfo(View host, @NonNull AccessibilityNodeInfoCompat info) {
604 + super.onInitializeAccessibilityNodeInfo(host, info);
605 + info.setClassName("android.widget.TextView");
606 + info.setHeading(true);
607 + }
608 + });
609 + mFontHeader.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED);
610 +
611 + mIvBack.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_YES);
612 + ViewCompat.setAccessibilityDelegate(mIvBack, new AccessibilityDelegateCompat() {
613 + @Override
614 + public void onInitializeAccessibilityNodeInfo(View host, @NonNull AccessibilityNodeInfoCompat info) {
615 + super.onInitializeAccessibilityNodeInfo(host, info);
616 + info.setClassName("android.widget.Button");
617 + info.setContentDescription(getString(R.string.accessibility_back));
618 + }
619 + });
620 + mIvBack.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_NO);
621 + mIvBack.postDelayed(() -> {
622 + mIvBack.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_YES);
623 + }, 1000);
624 +
443 if (mMerchantParentList != null && mMerchantParentList.size() > 0) { 625 if (mMerchantParentList != null && mMerchantParentList.size() > 0) {
444 for (Merchant parentMerch : mMerchantParentList) { 626 for (Merchant parentMerch : mMerchantParentList) {
445 for (Merchant merch : result) { 627 for (Merchant merch : result) {
......
...@@ -2,6 +2,7 @@ package ly.warp.sdk.activities; ...@@ -2,6 +2,7 @@ package ly.warp.sdk.activities;
2 2
3 import android.Manifest; 3 import android.Manifest;
4 import android.content.ActivityNotFoundException; 4 import android.content.ActivityNotFoundException;
5 +import android.content.Context;
5 import android.content.Intent; 6 import android.content.Intent;
6 import android.content.pm.PackageManager; 7 import android.content.pm.PackageManager;
7 import android.graphics.Bitmap; 8 import android.graphics.Bitmap;
...@@ -9,11 +10,15 @@ import android.graphics.Canvas; ...@@ -9,11 +10,15 @@ import android.graphics.Canvas;
9 import android.graphics.drawable.Drawable; 10 import android.graphics.drawable.Drawable;
10 import android.net.Uri; 11 import android.net.Uri;
11 import android.os.Bundle; 12 import android.os.Bundle;
13 +import android.os.Handler;
12 import android.text.TextUtils; 14 import android.text.TextUtils;
13 import android.util.Log; 15 import android.util.Log;
14 import android.view.View; 16 import android.view.View;
17 +import android.view.accessibility.AccessibilityEvent;
18 +import android.view.accessibility.AccessibilityManager;
15 import android.widget.ImageView; 19 import android.widget.ImageView;
16 import android.widget.LinearLayout; 20 import android.widget.LinearLayout;
21 +import android.widget.RelativeLayout;
17 import android.widget.TextView; 22 import android.widget.TextView;
18 23
19 import androidx.annotation.NonNull; 24 import androidx.annotation.NonNull;
...@@ -21,6 +26,9 @@ import androidx.annotation.Nullable; ...@@ -21,6 +26,9 @@ import androidx.annotation.Nullable;
21 import androidx.appcompat.app.AlertDialog; 26 import androidx.appcompat.app.AlertDialog;
22 import androidx.core.app.ActivityCompat; 27 import androidx.core.app.ActivityCompat;
23 import androidx.core.content.ContextCompat; 28 import androidx.core.content.ContextCompat;
29 +import androidx.core.view.AccessibilityDelegateCompat;
30 +import androidx.core.view.ViewCompat;
31 +import androidx.core.view.accessibility.AccessibilityNodeInfoCompat;
24 import androidx.fragment.app.FragmentActivity; 32 import androidx.fragment.app.FragmentActivity;
25 33
26 import com.bumptech.glide.Glide; 34 import com.bumptech.glide.Glide;
...@@ -103,6 +111,9 @@ public class ShopsHuaweiActivity extends FragmentActivity implements View.OnClic ...@@ -103,6 +111,9 @@ public class ShopsHuaweiActivity extends FragmentActivity implements View.OnClic
103 mIvBack.setOnClickListener(this); 111 mIvBack.setOnClickListener(this);
104 mFontHeader = findViewById(R.id.textView3); 112 mFontHeader = findViewById(R.id.textView3);
105 WarpUtils.renderCustomFont(this, R.font.bt_cosmo_bold, mFontHeader); 113 WarpUtils.renderCustomFont(this, R.font.bt_cosmo_bold, mFontHeader);
114 +
115 + mIvBack.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_NO);
116 + mFontHeader.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_NO);
106 } 117 }
107 118
108 @Override 119 @Override
...@@ -215,9 +226,12 @@ public class ShopsHuaweiActivity extends FragmentActivity implements View.OnClic ...@@ -215,9 +226,12 @@ public class ShopsHuaweiActivity extends FragmentActivity implements View.OnClic
215 final BottomSheetDialog bottomSheetDialog = new BottomSheetDialog(this, R.style.BottomSheetDialog); 226 final BottomSheetDialog bottomSheetDialog = new BottomSheetDialog(this, R.style.BottomSheetDialog);
216 bottomSheetDialog.setContentView(R.layout.dl_map_pin); 227 bottomSheetDialog.setContentView(R.layout.dl_map_pin);
217 228
218 - ImageView dialogClose = (ImageView) bottomSheetDialog.findViewById(R.id.iv_map_pin_close); 229 + RelativeLayout dialogClose = (RelativeLayout) bottomSheetDialog.findViewById(R.id.rl_map_pin_close);
219 dialogClose.setOnClickListener(view -> bottomSheetDialog.dismiss()); 230 dialogClose.setOnClickListener(view -> bottomSheetDialog.dismiss());
220 231
232 + RelativeLayout imagePhone = (RelativeLayout) bottomSheetDialog.findViewById(R.id.rl_phone);
233 + RelativeLayout imageLocation = (RelativeLayout) bottomSheetDialog.findViewById(R.id.rl_location);
234 +
221 TextView pinTitle = (TextView) bottomSheetDialog.findViewById(R.id.tv_pin_title); 235 TextView pinTitle = (TextView) bottomSheetDialog.findViewById(R.id.tv_pin_title);
222 WarpUtils.renderCustomFont(ShopsHuaweiActivity.this, R.font.pf_square_sans_pro_bold, pinTitle); 236 WarpUtils.renderCustomFont(ShopsHuaweiActivity.this, R.font.pf_square_sans_pro_bold, pinTitle);
223 if (mMerchantParentList != null && mMerchantParentList.size() > 0) { 237 if (mMerchantParentList != null && mMerchantParentList.size() > 0) {
...@@ -271,6 +285,122 @@ public class ShopsHuaweiActivity extends FragmentActivity implements View.OnClic ...@@ -271,6 +285,122 @@ public class ShopsHuaweiActivity extends FragmentActivity implements View.OnClic
271 } 285 }
272 }); 286 });
273 287
288 + pinTitle.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_NO);
289 + ViewCompat.setAccessibilityDelegate(pinTitle, new AccessibilityDelegateCompat() {
290 + @Override
291 + public void onInitializeAccessibilityNodeInfo(View host, @NonNull AccessibilityNodeInfoCompat info) {
292 + super.onInitializeAccessibilityNodeInfo(host, info);
293 + info.setClassName("android.widget.TextView");
294 + info.setContentDescription(pinTitle.getText().toString());
295 + }
296 + });
297 +
298 + dialogClose.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_NO);
299 + ViewCompat.setAccessibilityDelegate(dialogClose, new AccessibilityDelegateCompat() {
300 + @Override
301 + public void onInitializeAccessibilityNodeInfo(View host, @NonNull AccessibilityNodeInfoCompat info) {
302 + super.onInitializeAccessibilityNodeInfo(host, info);
303 + info.setClassName("android.widget.Button");
304 + info.setContentDescription(getString(R.string.accessibility_close));
305 + }
306 + });
307 +
308 + pinLogo.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_NO);
309 + pinName.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_NO);
310 + pinDays.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_NO);
311 + pinTel.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_NO);
312 + pinAddress.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_NO);
313 + pinDirectionsText.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_NO);
314 + pinDirections.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_NO);
315 + imagePhone.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_NO);
316 + imageLocation.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_NO);
317 +
318 + View rootView = findViewById(android.R.id.content);
319 + if (rootView != null) {
320 + rootView.post(() -> {
321 + rootView.announceForAccessibility(getString(R.string.accessibility_pin) + ", " + getString(R.string.accessibility_shop) + ", ");
322 + });
323 +
324 + new Handler().postDelayed(() -> {
325 + dialogClose.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_YES);
326 +
327 + pinTitle.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_YES);
328 + pinLogo.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_YES);
329 + ViewCompat.setAccessibilityDelegate(pinLogo, new AccessibilityDelegateCompat() {
330 + @Override
331 + public void onInitializeAccessibilityNodeInfo(View host, @NonNull AccessibilityNodeInfoCompat info) {
332 + super.onInitializeAccessibilityNodeInfo(host, info);
333 + info.setClassName("android.widget.ImageView");
334 + info.setContentDescription(getString(R.string.accessibility_shop_logo));
335 + }
336 + });
337 +
338 + pinName.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_YES);
339 + ViewCompat.setAccessibilityDelegate(pinName, new AccessibilityDelegateCompat() {
340 + @Override
341 + public void onInitializeAccessibilityNodeInfo(View host, @NonNull AccessibilityNodeInfoCompat info) {
342 + super.onInitializeAccessibilityNodeInfo(host, info);
343 + info.setClassName("android.widget.TextView");
344 + info.setContentDescription(merch.getName());
345 + }
346 + });
347 +
348 + pinDays.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_YES);
349 +
350 + imagePhone.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_YES);
351 + ViewCompat.setAccessibilityDelegate(imagePhone, new AccessibilityDelegateCompat() {
352 + @Override
353 + public void onInitializeAccessibilityNodeInfo(View host, @NonNull AccessibilityNodeInfoCompat info) {
354 + super.onInitializeAccessibilityNodeInfo(host, info);
355 + info.setClassName("android.widget.ImageView");
356 + info.setContentDescription(getString(R.string.accessibility_phone));
357 + }
358 + });
359 +
360 + pinTel.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_YES);
361 + ViewCompat.setAccessibilityDelegate(pinTel, new AccessibilityDelegateCompat() {
362 + @Override
363 + public void onInitializeAccessibilityNodeInfo(View host, @NonNull AccessibilityNodeInfoCompat info) {
364 + super.onInitializeAccessibilityNodeInfo(host, info);
365 + info.setClassName("android.widget.TextView");
366 + info.setContentDescription(WarplyManagerHelper.formatPhoneNumber(merch.getTelephone()));
367 + }
368 + });
369 +
370 + imageLocation.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_YES);
371 + ViewCompat.setAccessibilityDelegate(imageLocation, new AccessibilityDelegateCompat() {
372 + @Override
373 + public void onInitializeAccessibilityNodeInfo(View host, @NonNull AccessibilityNodeInfoCompat info) {
374 + super.onInitializeAccessibilityNodeInfo(host, info);
375 + info.setClassName("android.widget.ImageView");
376 + info.setContentDescription(getString(R.string.accessibility_address));
377 + }
378 + });
379 +
380 + pinAddress.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_YES);
381 + ViewCompat.setAccessibilityDelegate(pinAddress, new AccessibilityDelegateCompat() {
382 + @Override
383 + public void onInitializeAccessibilityNodeInfo(View host, @NonNull AccessibilityNodeInfoCompat info) {
384 + super.onInitializeAccessibilityNodeInfo(host, info);
385 + info.setClassName("android.widget.TextView");
386 + info.setContentDescription(merch.getAddress());
387 + }
388 + });
389 +
390 + pinDirectionsText.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_YES);
391 +
392 + pinDirections.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_YES);
393 + ViewCompat.setAccessibilityDelegate(pinDirections, new AccessibilityDelegateCompat() {
394 + @Override
395 + public void onInitializeAccessibilityNodeInfo(View host, @NonNull AccessibilityNodeInfoCompat info) {
396 + super.onInitializeAccessibilityNodeInfo(host, info);
397 + info.setClassName("android.widget.Button");
398 + info.setContentDescription(getString(R.string.cos_directions));
399 + }
400 + });
401 + }, 3000);
402 + }
403 +
274 bottomSheetDialog.show(); 404 bottomSheetDialog.show();
275 405
276 return false; 406 return false;
...@@ -355,6 +485,32 @@ public class ShopsHuaweiActivity extends FragmentActivity implements View.OnClic ...@@ -355,6 +485,32 @@ public class ShopsHuaweiActivity extends FragmentActivity implements View.OnClic
355 return; 485 return;
356 } 486 }
357 487
488 + //Accessibility
489 + mFontHeader.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_YES);
490 + ViewCompat.setAccessibilityDelegate(mFontHeader, new AccessibilityDelegateCompat() {
491 + @Override
492 + public void onInitializeAccessibilityNodeInfo(View host, @NonNull AccessibilityNodeInfoCompat info) {
493 + super.onInitializeAccessibilityNodeInfo(host, info);
494 + info.setClassName("android.widget.TextView");
495 + info.setHeading(true);
496 + }
497 + });
498 + mFontHeader.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED);
499 +
500 + mIvBack.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_YES);
501 + ViewCompat.setAccessibilityDelegate(mIvBack, new AccessibilityDelegateCompat() {
502 + @Override
503 + public void onInitializeAccessibilityNodeInfo(View host, @NonNull AccessibilityNodeInfoCompat info) {
504 + super.onInitializeAccessibilityNodeInfo(host, info);
505 + info.setClassName("android.widget.Button");
506 + info.setContentDescription(getString(R.string.accessibility_back));
507 + }
508 + });
509 + mIvBack.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_NO);
510 + mIvBack.postDelayed(() -> {
511 + mIvBack.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_YES);
512 + }, 1000);
513 +
358 for (Merchant merch : result) { 514 for (Merchant merch : result) {
359 if (!TextUtils.isEmpty(merch.getImgPreview())) { 515 if (!TextUtils.isEmpty(merch.getImgPreview())) {
360 Glide.with(ShopsHuaweiActivity.this) 516 Glide.with(ShopsHuaweiActivity.this)
...@@ -463,6 +619,32 @@ public class ShopsHuaweiActivity extends FragmentActivity implements View.OnClic ...@@ -463,6 +619,32 @@ public class ShopsHuaweiActivity extends FragmentActivity implements View.OnClic
463 return; 619 return;
464 } 620 }
465 621
622 + //Accessibility
623 + mFontHeader.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_YES);
624 + ViewCompat.setAccessibilityDelegate(mFontHeader, new AccessibilityDelegateCompat() {
625 + @Override
626 + public void onInitializeAccessibilityNodeInfo(View host, @NonNull AccessibilityNodeInfoCompat info) {
627 + super.onInitializeAccessibilityNodeInfo(host, info);
628 + info.setClassName("android.widget.TextView");
629 + info.setHeading(true);
630 + }
631 + });
632 + mFontHeader.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED);
633 +
634 + mIvBack.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_YES);
635 + ViewCompat.setAccessibilityDelegate(mIvBack, new AccessibilityDelegateCompat() {
636 + @Override
637 + public void onInitializeAccessibilityNodeInfo(View host, @NonNull AccessibilityNodeInfoCompat info) {
638 + super.onInitializeAccessibilityNodeInfo(host, info);
639 + info.setClassName("android.widget.Button");
640 + info.setContentDescription(getString(R.string.accessibility_back));
641 + }
642 + });
643 + mIvBack.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_NO);
644 + mIvBack.postDelayed(() -> {
645 + mIvBack.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_YES);
646 + }, 1000);
647 +
466 if (mMerchantParentList != null && mMerchantParentList.size() > 0) { 648 if (mMerchantParentList != null && mMerchantParentList.size() > 0) {
467 for (Merchant parentMerch : mMerchantParentList) { 649 for (Merchant parentMerch : mMerchantParentList) {
468 for (Merchant merch : result) { 650 for (Merchant merch : result) {
......
...@@ -10,26 +10,38 @@ ...@@ -10,26 +10,38 @@
10 <RelativeLayout 10 <RelativeLayout
11 android:id="@+id/rl_map_pin" 11 android:id="@+id/rl_map_pin"
12 android:layout_width="match_parent" 12 android:layout_width="match_parent"
13 - android:layout_height="wrap_content" 13 + android:layout_height="48dp"
14 - android:layout_marginBottom="24dp" 14 + android:layout_marginTop="8dp"
15 - android:paddingHorizontal="24dp" 15 + android:layout_marginBottom="24dp">
16 - android:paddingTop="16dp">
17 16
18 <TextView 17 <TextView
19 android:id="@+id/tv_pin_title" 18 android:id="@+id/tv_pin_title"
20 android:layout_width="wrap_content" 19 android:layout_width="wrap_content"
21 - android:layout_height="wrap_content" 20 + android:layout_height="match_parent"
22 android:layout_alignParentStart="true" 21 android:layout_alignParentStart="true"
22 + android:layout_marginStart="24dp"
23 + android:gravity="center_vertical"
23 android:textColor="@color/cos_grey9" 24 android:textColor="@color/cos_grey9"
24 android:textSize="16sp" 25 android:textSize="16sp"
25 tools:text="ΓΕΡΜΑΝΟΣ" /> 26 tools:text="ΓΕΡΜΑΝΟΣ" />
26 27
27 - <ImageView 28 + <RelativeLayout
28 - android:id="@+id/iv_map_pin_close" 29 + android:id="@+id/rl_map_pin_close"
29 - android:layout_width="16dp" 30 + android:layout_width="32dp"
30 - android:layout_height="16dp" 31 + android:layout_height="32dp"
31 android:layout_alignParentEnd="true" 32 android:layout_alignParentEnd="true"
32 - android:src="@drawable/ic_close" /> 33 + android:layout_centerVertical="true"
34 + android:layout_gravity="center"
35 + android:layout_marginEnd="12dp"
36 + android:gravity="center">
37 +
38 + <ImageView
39 + android:id="@+id/iv_map_pin_close"
40 + android:layout_width="16dp"
41 + android:layout_height="16dp"
42 + android:contentDescription="@string/accessibility_close"
43 + android:src="@drawable/ic_close" />
44 + </RelativeLayout>
33 </RelativeLayout> 45 </RelativeLayout>
34 46
35 <LinearLayout 47 <LinearLayout
...@@ -82,18 +94,28 @@ ...@@ -82,18 +94,28 @@
82 android:layout_height="36dp" 94 android:layout_height="36dp"
83 android:gravity="center_vertical" 95 android:gravity="center_vertical"
84 android:orientation="horizontal" 96 android:orientation="horizontal"
85 - android:paddingHorizontal="24dp"> 97 + android:paddingStart="24dp"
98 + android:paddingEnd="24dp">
86 99
87 - <ImageView 100 + <RelativeLayout
88 - android:layout_width="14dp" 101 + android:id="@+id/rl_phone"
89 - android:layout_height="14dp" 102 + android:layout_width="28dp"
90 - android:src="@drawable/ic_pin_tel" /> 103 + android:layout_height="28dp"
104 + android:gravity="center">
105 +
106 + <ImageView
107 + android:id="@+id/iv_phone"
108 + android:layout_width="14dp"
109 + android:layout_height="14dp"
110 + android:src="@drawable/ic_pin_tel" />
111 + </RelativeLayout>
91 112
92 <TextView 113 <TextView
93 android:id="@+id/tv_pin_tel" 114 android:id="@+id/tv_pin_tel"
94 android:layout_width="wrap_content" 115 android:layout_width="wrap_content"
95 - android:layout_height="wrap_content" 116 + android:layout_height="match_parent"
96 android:layout_marginStart="12dp" 117 android:layout_marginStart="12dp"
118 + android:gravity="center_vertical"
97 android:textColor="@color/grey" 119 android:textColor="@color/grey"
98 android:textSize="14sp" 120 android:textSize="14sp"
99 tools:text="210-6230543" /> 121 tools:text="210-6230543" />
...@@ -110,7 +132,8 @@ ...@@ -110,7 +132,8 @@
110 android:layout_width="match_parent" 132 android:layout_width="match_parent"
111 android:layout_height="wrap_content" 133 android:layout_height="wrap_content"
112 android:layout_marginBottom="16dp" 134 android:layout_marginBottom="16dp"
113 - android:paddingHorizontal="24dp"> 135 + android:paddingStart="24dp"
136 + android:paddingEnd="24dp">
114 137
115 <LinearLayout 138 <LinearLayout
116 android:id="@+id/ll_pin_address" 139 android:id="@+id/ll_pin_address"
...@@ -119,16 +142,25 @@ ...@@ -119,16 +142,25 @@
119 android:gravity="center_vertical" 142 android:gravity="center_vertical"
120 android:orientation="horizontal"> 143 android:orientation="horizontal">
121 144
122 - <ImageView 145 + <RelativeLayout
123 - android:layout_width="14dp" 146 + android:id="@+id/rl_location"
124 - android:layout_height="14dp" 147 + android:layout_width="28dp"
125 - android:src="@drawable/ic_pin_location" /> 148 + android:layout_height="28dp"
149 + android:gravity="center">
150 +
151 + <ImageView
152 + android:id="@+id/iv_location"
153 + android:layout_width="14dp"
154 + android:layout_height="14dp"
155 + android:src="@drawable/ic_pin_location" />
156 + </RelativeLayout>
126 157
127 <TextView 158 <TextView
128 android:id="@+id/tv_pin_address" 159 android:id="@+id/tv_pin_address"
129 android:layout_width="184dp" 160 android:layout_width="184dp"
130 - android:layout_height="wrap_content" 161 + android:layout_height="match_parent"
131 android:layout_marginStart="12dp" 162 android:layout_marginStart="12dp"
163 + android:gravity="center_vertical"
132 android:maxLines="2" 164 android:maxLines="2"
133 android:textColor="@color/grey" 165 android:textColor="@color/grey"
134 android:textSize="14sp" 166 android:textSize="14sp"
......
...@@ -268,6 +268,12 @@ ...@@ -268,6 +268,12 @@
268 <string name="accessibility_expand">Ανεπτυγμένο</string> 268 <string name="accessibility_expand">Ανεπτυγμένο</string>
269 <string name="accessibility_collapse">Συμπτυγμένο</string> 269 <string name="accessibility_collapse">Συμπτυγμένο</string>
270 <string name="accessibility_activate">Διπλό πάτημα για επιλογή</string> 270 <string name="accessibility_activate">Διπλό πάτημα για επιλογή</string>
271 + <string name="accessibility_open">Διπλό πάτημα για άνοιγμα</string>
272 + <string name="accessibility_pin">Πινέζα</string>
273 + <string name="accessibility_shop">κατάστημα</string>
274 + <string name="accessibility_phone">Τηλέφωνο</string>
275 + <string name="accessibility_address">Διεύθυνση</string>
276 + <string name="accessibility_shop_logo">Λογότυπο καταστήματος</string>
271 277
272 <string-array name="coupons_array"> 278 <string-array name="coupons_array">
273 <item>Κουπόνια</item> 279 <item>Κουπόνια</item>
......