[android] Add Android Auto support #3806

Merged
root merged 6 commits from android-auto/init into aa 2022-12-22 11:53:07 +00:00
19 changed files with 1074 additions and 1 deletions

View file

@ -38,6 +38,8 @@
//-->
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
<uses-permission android:name="androidx.car.app.NAVIGATION_TEMPLATES"/>
<uses-permission android:name="androidx.car.app.ACCESS_SURFACE"/>
<queries>
<intent>
@ -723,6 +725,14 @@
android:name="app.organicmaps.background.OsmUploadService"
android:permission="android.permission.BIND_JOB_SERVICE"
android:exported="false"/>
<service
android:name="app.organicmaps.car.NavigationCarAppService"
android:exported="true">
<intent-filter>
<action android:name="androidx.car.app.CarAppService" />
<category android:name="androidx.car.app.category.NAVIGATION" />
</intent-filter>
</service>
<!-- Catches app upgraded intent -->
<receiver
@ -748,5 +758,13 @@
<!-- Disable Google's anonymous stats collection -->
<meta-data android:name="android.webkit.WebView.MetricsOptOut" android:value="true" />
<!-- For android Auto -->
<meta-data android:name="com.google.android.gms.car.application"
android:resource="@xml/automotive_app_desc"/>
<meta-data
android:name="androidx.car.app.minCarApiLevel"
android:value="1"/>
</application>
</manifest>

View file

@ -84,6 +84,7 @@ dependencies {
implementation 'androidx.annotation:annotation:1.5.0'
implementation 'androidx.appcompat:appcompat:1.7.0-alpha01'
implementation 'androidx.car.app:app:1.3.0-rc01'
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
implementation 'androidx.fragment:fragment:1.5.4'
// Lifecycle is added as a workaround for duplicate classes error caused by some outdated dependency:
@ -97,6 +98,8 @@ dependencies {
implementation 'androidx.work:work-runtime:2.7.1'
implementation 'com.google.android.material:material:1.8.0-alpha02'
implementation 'com.google.code.gson:gson:2.10'
// Fix for app/organicmaps/util/FileUploadWorker.java:14: error: cannot access ListenableFuture
implementation 'com.google.guava:guava:29.0-android'
implementation 'com.timehop.stickyheadersrecyclerview:library:0.4.3@aar'
implementation 'com.github.devnullorthrow:MPAndroidChart:3.2.0-alpha'
implementation 'net.jcip:jcip-annotations:1.0'

View file

@ -1,4 +1,4 @@
propMinSdkVersion=21
propMinSdkVersion=23
propTargetSdkVersion=33
propCompileSdkVersion=33
propBuildToolsVersion=33.0.0

View file

@ -0,0 +1,5 @@
<vector android:height="24dp"
android:viewportHeight="24" android:viewportWidth="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="@android:color/white" android:pathData="M19,5v14H5V5h14m0,-2H5c-1.1,0 -2,0.9 -2,2v14c0,1.1 0.9,2 2,2h14c1.1,0 2,-0.9 2,-2V5c0,-1.1 -0.9,-2 -2,-2z"/>
</vector>

View file

@ -0,0 +1,5 @@
<vector android:height="24dp"
android:viewportHeight="24" android:viewportWidth="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="@android:color/white" android:pathData="M19,3L5,3c-1.11,0 -2,0.9 -2,2v14c0,1.1 0.89,2 2,2h14c1.11,0 2,-0.9 2,-2L21,5c0,-1.1 -0.89,-2 -2,-2zM10,17l-5,-5 1.41,-1.41L10,14.17l7.59,-7.59L19,8l-9,9z"/>
</vector>

View file

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<automotiveApp>
<uses name="template" />
</automotiveApp>

View file

@ -0,0 +1,30 @@
Review

What are potential security implications here?

What are potential security implications here?
Review

Код из примера. Объяснений, для чего это сделано, нигде не нашел

Ссылка на пример

Код из примера. Объяснений, для чего это сделано, нигде не нашел [Ссылка на пример](https://github.com/android/car-samples/blob/03440d5e974a060d0216b5e02a7fe3c46b7b9469/car_app_library/navigation/common/src/main/java/androidx/car/app/sample/navigation/common/car/NavigationCarAppService.java)
biodranik commented 2022-12-08 18:15:46 +00:00 (Migrated from github.com)
Review

У нас принято разбираться и писать только тот код, который мы чётко понимаем, для чего и зачем он нужен. И стараемся, чтобы было понятно другим, кто читает код, в т.ч. оставляя комментарии.

У нас принято разбираться и писать только тот код, который мы чётко понимаем, для чего и зачем он нужен. И стараемся, чтобы было понятно другим, кто читает код, в т.ч. оставляя комментарии.
Review

Вот такое объяснение в документации.

    /**
     * Returns the {@link HostValidator} this service will use to accept or reject host connections.
     *
     * <p>By default, the provided {@link HostValidator.Builder} would produce a validator that
     * only accepts connections from hosts holding
     * {@link HostValidator#TEMPLATE_RENDERER_PERMISSION} permission.
     *
     * <p>Application developers are expected to also allow connections from known hosts which
     * don't hold the aforementioned permission (for example, Android Auto and Android
     * Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts.
     *
     * <p>Refer to {@code androidx.car.app.R.array.hosts_allowlist_sample} to obtain a
     * list of package names and signatures that should be allow-listed by default.
     *
     * <p>It is also advised to allow connections from unknown hosts in debug builds to facilitate
     * debugging and testing.
     *
     * <p>Below is an example of this method implementation:
     *
     * <pre>
     * &#64;Override
     * &#64;NonNull
     * public HostValidator createHostValidator() {
     *     if ((getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0) {
     *         return HostValidator.ALLOW_ALL_HOSTS_VALIDATOR;
     *     } else {
     *         return new HostValidator.Builder(context)
     *             .addAllowedHosts(androidx.car.app.R.array.hosts_allowlist_sample)
     *             .build();
     *     }
     * }
     * </pre>
     */
Вот такое объяснение в документации. ```java /** * Returns the {@link HostValidator} this service will use to accept or reject host connections. * * <p>By default, the provided {@link HostValidator.Builder} would produce a validator that * only accepts connections from hosts holding * {@link HostValidator#TEMPLATE_RENDERER_PERMISSION} permission. * * <p>Application developers are expected to also allow connections from known hosts which * don't hold the aforementioned permission (for example, Android Auto and Android * Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts. * * <p>Refer to {@code androidx.car.app.R.array.hosts_allowlist_sample} to obtain a * list of package names and signatures that should be allow-listed by default. * * <p>It is also advised to allow connections from unknown hosts in debug builds to facilitate * debugging and testing. * * <p>Below is an example of this method implementation: * * <pre> * &#64;Override * &#64;NonNull * public HostValidator createHostValidator() { * if ((getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0) { * return HostValidator.ALLOW_ALL_HOSTS_VALIDATOR; * } else { * return new HostValidator.Builder(context) * .addAllowedHosts(androidx.car.app.R.array.hosts_allowlist_sample) * .build(); * } * } * </pre> */ ```
biodranik commented 2022-12-11 12:25:45 +00:00 (Migrated from github.com)
Review
  1. Так какие приложения перечислены в androidx.car.app.R.array.hosts_allowlist_sample ? Я так понял, для работы с апи <31 нам придётся их перечислить.
  2. Почему бы для отладки не сделать проще: if (BuildConfig.DEBUG) ?
  3. код может быть проще:
if ()
  return ...;
return ...;
1. Так какие приложения перечислены в androidx.car.app.R.array.hosts_allowlist_sample ? Я так понял, для работы с апи <31 нам придётся их перечислить. 2. Почему бы для отладки не сделать проще: if (BuildConfig.DEBUG) ? 3. код может быть проще: ``` if () return ...; return ...; ```
Review

Все не так. Почитал я, как работает HostValidator класс.

  • Он проверяет Host, т.е. магнитолу на которой запускается AA
  • Подключение к хосту разрешается в двух случаях
    • Либо хост указан в списке, который мы передаем
    • Либо хост имеет у себя android.car.permission.TEMPLATE_RENDERER

Поэтому я заменил R.array.car_hosts на androidx.car.app.R.array.hosts_allowlist_sample. Думаю, смысла держать свой список разрешенных хостов нет, а на warning можно закрыть глаза.

Warning:

The resource @array/hosts_allowlist_sample is marked as private in androidx.car.app:app:1.3.0-rc01

Все не так. Почитал я, как работает HostValidator класс. * Он проверяет Host, т.е. магнитолу на которой запускается AA * Подключение к хосту разрешается в двух случаях * Либо хост указан в списке, который мы передаем * Либо хост имеет у себя `android.car.permission.TEMPLATE_RENDERER` Поэтому я заменил `R.array.car_hosts` на `androidx.car.app.R.array.hosts_allowlist_sample`. Думаю, смысла держать свой список разрешенных хостов нет, а на warning можно закрыть глаза. Warning: >The resource @array/hosts_allowlist_sample is marked as private in androidx.car.app:app:1.3.0-rc01
biodranik commented 2022-12-11 21:13:37 +00:00 (Migrated from github.com)
Review

Так что именно в этом файле-то? )

Так что именно в этом файле-то? )
Review

В androidx.car.app.R.array.hosts_allowlist_sample?
Массив таких строк:
fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf,com.google.android.projection.gearhead

Первая часть - цифровая подпись, вторая - имя пакета

* @param packageName host package name (as reported by {@link PackageManager})
* @param digest      SHA256 digest of the DER encoding of the allow-listed host
*                    certificate, formatted as 32 lowercase 2 digits  hexadecimal values
*                    separated by colon (e.g.:"000102030405060708090a0b0c0d0e0f101112131415
*                    161718191a1b1c1d1e1f"). When using
*                    <a href="https://developer.android.com/about/versions/pie/android-9.0#apk-key-rotation">signature
*                    rotation</a>, this digest should correspond to the initial signing
*                    certificate

Только сейчас обратил внимание на это:

Application developers are expected to also allow connections from known hosts which don't hold the aforementioned permission (for example, Android Auto and Android Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts.

Но я не смог найти никакого общего списка хостов или хотя бы какого-то упоминания о том, что люди добавляли в этот список еще что-то. Поэтому, наверное, можно на это не обращать внимания. По крайней мере пока что.

В `androidx.car.app.R.array.hosts_allowlist_sample`? Массив таких строк: `fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf,com.google.android.projection.gearhead` Первая часть - цифровая подпись, вторая - имя пакета ```java * @param packageName host package name (as reported by {@link PackageManager}) * @param digest SHA256 digest of the DER encoding of the allow-listed host * certificate, formatted as 32 lowercase 2 digits hexadecimal values * separated by colon (e.g.:"000102030405060708090a0b0c0d0e0f101112131415 * 161718191a1b1c1d1e1f"). When using * <a href="https://developer.android.com/about/versions/pie/android-9.0#apk-key-rotation">signature * rotation</a>, this digest should correspond to the initial signing * certificate ``` Только сейчас обратил внимание на это: >Application developers are expected to also allow connections from known hosts which don't hold the aforementioned permission (for example, Android Auto and Android Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts. Но я не смог найти никакого общего списка хостов или хотя бы какого-то упоминания о том, что люди добавляли в этот список еще что-то. Поэтому, наверное, можно на это не обращать внимания. По крайней мере пока что.
biodranik commented 2022-12-11 22:03:03 +00:00 (Migrated from github.com)
Review
  1. Полный список пакетов в том файле можно выложить сюда или на pastebin?
  2. Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы.
1. Полный список пакетов в том файле можно выложить сюда или на pastebin? 2. Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы.
Review
<string-array name="hosts_allowlist_sample" translatable="false">
   <item>fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf,
         com.google.android.projection.gearhead</item>
   <item>70811a3eacfd2e83e18da9bfede52df16ce91f2e69a44d21f18ab66991130771,
         com.google.android.projection.gearhead</item>
   <item>1975b2f17177bc89a5dff31f9e64a6cae281a53dc1d1d59b1d147fe1c82afa00,
         com.google.android.projection.gearhead</item>
   <item>c241ffbc8e287c4e9a4ad19632ba1b1351ad361d5177b7d7b29859bd2b7fc631,
         com.google.android.apps.automotive.templates.host</item>
   <item>dd66deaf312d8daec7adbe85a218ecc8c64f3b152f9b5998d5b29300c2623f61,
         com.google.android.apps.automotive.templates.host</item>
   <item>50e603d333c6049a37bd751375d08f3bd0abebd33facd30bd17b64b89658b421,
         com.google.android.apps.automotive.templates.host</item>
</string-array>
```xml <string-array name="hosts_allowlist_sample" translatable="false"> <item>fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf, com.google.android.projection.gearhead</item> <item>70811a3eacfd2e83e18da9bfede52df16ce91f2e69a44d21f18ab66991130771, com.google.android.projection.gearhead</item> <item>1975b2f17177bc89a5dff31f9e64a6cae281a53dc1d1d59b1d147fe1c82afa00, com.google.android.projection.gearhead</item> <item>c241ffbc8e287c4e9a4ad19632ba1b1351ad361d5177b7d7b29859bd2b7fc631, com.google.android.apps.automotive.templates.host</item> <item>dd66deaf312d8daec7adbe85a218ecc8c64f3b152f9b5998d5b29300c2623f61, com.google.android.apps.automotive.templates.host</item> <item>50e603d333c6049a37bd751375d08f3bd0abebd33facd30bd17b64b89658b421, com.google.android.apps.automotive.templates.host</item> </string-array> ```
Review

Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы.

Тут если что подразумевается API хоста, а не телефона

>Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы. Тут если что подразумевается API хоста, а не телефона
Review

What are potential security implications here?

What are potential security implications here?
Review

Код из примера. Объяснений, для чего это сделано, нигде не нашел

Ссылка на пример

Код из примера. Объяснений, для чего это сделано, нигде не нашел [Ссылка на пример](https://github.com/android/car-samples/blob/03440d5e974a060d0216b5e02a7fe3c46b7b9469/car_app_library/navigation/common/src/main/java/androidx/car/app/sample/navigation/common/car/NavigationCarAppService.java)
biodranik commented 2022-12-08 18:15:46 +00:00 (Migrated from github.com)
Review

У нас принято разбираться и писать только тот код, который мы чётко понимаем, для чего и зачем он нужен. И стараемся, чтобы было понятно другим, кто читает код, в т.ч. оставляя комментарии.

У нас принято разбираться и писать только тот код, который мы чётко понимаем, для чего и зачем он нужен. И стараемся, чтобы было понятно другим, кто читает код, в т.ч. оставляя комментарии.
Review

Вот такое объяснение в документации.

    /**
     * Returns the {@link HostValidator} this service will use to accept or reject host connections.
     *
     * <p>By default, the provided {@link HostValidator.Builder} would produce a validator that
     * only accepts connections from hosts holding
     * {@link HostValidator#TEMPLATE_RENDERER_PERMISSION} permission.
     *
     * <p>Application developers are expected to also allow connections from known hosts which
     * don't hold the aforementioned permission (for example, Android Auto and Android
     * Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts.
     *
     * <p>Refer to {@code androidx.car.app.R.array.hosts_allowlist_sample} to obtain a
     * list of package names and signatures that should be allow-listed by default.
     *
     * <p>It is also advised to allow connections from unknown hosts in debug builds to facilitate
     * debugging and testing.
     *
     * <p>Below is an example of this method implementation:
     *
     * <pre>
     * &#64;Override
     * &#64;NonNull
     * public HostValidator createHostValidator() {
     *     if ((getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0) {
     *         return HostValidator.ALLOW_ALL_HOSTS_VALIDATOR;
     *     } else {
     *         return new HostValidator.Builder(context)
     *             .addAllowedHosts(androidx.car.app.R.array.hosts_allowlist_sample)
     *             .build();
     *     }
     * }
     * </pre>
     */
Вот такое объяснение в документации. ```java /** * Returns the {@link HostValidator} this service will use to accept or reject host connections. * * <p>By default, the provided {@link HostValidator.Builder} would produce a validator that * only accepts connections from hosts holding * {@link HostValidator#TEMPLATE_RENDERER_PERMISSION} permission. * * <p>Application developers are expected to also allow connections from known hosts which * don't hold the aforementioned permission (for example, Android Auto and Android * Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts. * * <p>Refer to {@code androidx.car.app.R.array.hosts_allowlist_sample} to obtain a * list of package names and signatures that should be allow-listed by default. * * <p>It is also advised to allow connections from unknown hosts in debug builds to facilitate * debugging and testing. * * <p>Below is an example of this method implementation: * * <pre> * &#64;Override * &#64;NonNull * public HostValidator createHostValidator() { * if ((getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0) { * return HostValidator.ALLOW_ALL_HOSTS_VALIDATOR; * } else { * return new HostValidator.Builder(context) * .addAllowedHosts(androidx.car.app.R.array.hosts_allowlist_sample) * .build(); * } * } * </pre> */ ```
biodranik commented 2022-12-11 12:25:45 +00:00 (Migrated from github.com)
Review
  1. Так какие приложения перечислены в androidx.car.app.R.array.hosts_allowlist_sample ? Я так понял, для работы с апи <31 нам придётся их перечислить.
  2. Почему бы для отладки не сделать проще: if (BuildConfig.DEBUG) ?
  3. код может быть проще:
if ()
  return ...;
return ...;
1. Так какие приложения перечислены в androidx.car.app.R.array.hosts_allowlist_sample ? Я так понял, для работы с апи <31 нам придётся их перечислить. 2. Почему бы для отладки не сделать проще: if (BuildConfig.DEBUG) ? 3. код может быть проще: ``` if () return ...; return ...; ```
Review

Все не так. Почитал я, как работает HostValidator класс.

  • Он проверяет Host, т.е. магнитолу на которой запускается AA
  • Подключение к хосту разрешается в двух случаях
    • Либо хост указан в списке, который мы передаем
    • Либо хост имеет у себя android.car.permission.TEMPLATE_RENDERER

Поэтому я заменил R.array.car_hosts на androidx.car.app.R.array.hosts_allowlist_sample. Думаю, смысла держать свой список разрешенных хостов нет, а на warning можно закрыть глаза.

Warning:

The resource @array/hosts_allowlist_sample is marked as private in androidx.car.app:app:1.3.0-rc01

Все не так. Почитал я, как работает HostValidator класс. * Он проверяет Host, т.е. магнитолу на которой запускается AA * Подключение к хосту разрешается в двух случаях * Либо хост указан в списке, который мы передаем * Либо хост имеет у себя `android.car.permission.TEMPLATE_RENDERER` Поэтому я заменил `R.array.car_hosts` на `androidx.car.app.R.array.hosts_allowlist_sample`. Думаю, смысла держать свой список разрешенных хостов нет, а на warning можно закрыть глаза. Warning: >The resource @array/hosts_allowlist_sample is marked as private in androidx.car.app:app:1.3.0-rc01
biodranik commented 2022-12-11 21:13:37 +00:00 (Migrated from github.com)
Review

Так что именно в этом файле-то? )

Так что именно в этом файле-то? )
Review

В androidx.car.app.R.array.hosts_allowlist_sample?
Массив таких строк:
fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf,com.google.android.projection.gearhead

Первая часть - цифровая подпись, вторая - имя пакета

* @param packageName host package name (as reported by {@link PackageManager})
* @param digest      SHA256 digest of the DER encoding of the allow-listed host
*                    certificate, formatted as 32 lowercase 2 digits  hexadecimal values
*                    separated by colon (e.g.:"000102030405060708090a0b0c0d0e0f101112131415
*                    161718191a1b1c1d1e1f"). When using
*                    <a href="https://developer.android.com/about/versions/pie/android-9.0#apk-key-rotation">signature
*                    rotation</a>, this digest should correspond to the initial signing
*                    certificate

Только сейчас обратил внимание на это:

Application developers are expected to also allow connections from known hosts which don't hold the aforementioned permission (for example, Android Auto and Android Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts.

Но я не смог найти никакого общего списка хостов или хотя бы какого-то упоминания о том, что люди добавляли в этот список еще что-то. Поэтому, наверное, можно на это не обращать внимания. По крайней мере пока что.

В `androidx.car.app.R.array.hosts_allowlist_sample`? Массив таких строк: `fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf,com.google.android.projection.gearhead` Первая часть - цифровая подпись, вторая - имя пакета ```java * @param packageName host package name (as reported by {@link PackageManager}) * @param digest SHA256 digest of the DER encoding of the allow-listed host * certificate, formatted as 32 lowercase 2 digits hexadecimal values * separated by colon (e.g.:"000102030405060708090a0b0c0d0e0f101112131415 * 161718191a1b1c1d1e1f"). When using * <a href="https://developer.android.com/about/versions/pie/android-9.0#apk-key-rotation">signature * rotation</a>, this digest should correspond to the initial signing * certificate ``` Только сейчас обратил внимание на это: >Application developers are expected to also allow connections from known hosts which don't hold the aforementioned permission (for example, Android Auto and Android Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts. Но я не смог найти никакого общего списка хостов или хотя бы какого-то упоминания о том, что люди добавляли в этот список еще что-то. Поэтому, наверное, можно на это не обращать внимания. По крайней мере пока что.
biodranik commented 2022-12-11 22:03:03 +00:00 (Migrated from github.com)
Review
  1. Полный список пакетов в том файле можно выложить сюда или на pastebin?
  2. Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы.
1. Полный список пакетов в том файле можно выложить сюда или на pastebin? 2. Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы.
Review
<string-array name="hosts_allowlist_sample" translatable="false">
   <item>fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf,
         com.google.android.projection.gearhead</item>
   <item>70811a3eacfd2e83e18da9bfede52df16ce91f2e69a44d21f18ab66991130771,
         com.google.android.projection.gearhead</item>
   <item>1975b2f17177bc89a5dff31f9e64a6cae281a53dc1d1d59b1d147fe1c82afa00,
         com.google.android.projection.gearhead</item>
   <item>c241ffbc8e287c4e9a4ad19632ba1b1351ad361d5177b7d7b29859bd2b7fc631,
         com.google.android.apps.automotive.templates.host</item>
   <item>dd66deaf312d8daec7adbe85a218ecc8c64f3b152f9b5998d5b29300c2623f61,
         com.google.android.apps.automotive.templates.host</item>
   <item>50e603d333c6049a37bd751375d08f3bd0abebd33facd30bd17b64b89658b421,
         com.google.android.apps.automotive.templates.host</item>
</string-array>
```xml <string-array name="hosts_allowlist_sample" translatable="false"> <item>fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf, com.google.android.projection.gearhead</item> <item>70811a3eacfd2e83e18da9bfede52df16ce91f2e69a44d21f18ab66991130771, com.google.android.projection.gearhead</item> <item>1975b2f17177bc89a5dff31f9e64a6cae281a53dc1d1d59b1d147fe1c82afa00, com.google.android.projection.gearhead</item> <item>c241ffbc8e287c4e9a4ad19632ba1b1351ad361d5177b7d7b29859bd2b7fc631, com.google.android.apps.automotive.templates.host</item> <item>dd66deaf312d8daec7adbe85a218ecc8c64f3b152f9b5998d5b29300c2623f61, com.google.android.apps.automotive.templates.host</item> <item>50e603d333c6049a37bd751375d08f3bd0abebd33facd30bd17b64b89658b421, com.google.android.apps.automotive.templates.host</item> </string-array> ```
Review

Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы.

Тут если что подразумевается API хоста, а не телефона

>Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы. Тут если что подразумевается API хоста, а не телефона
package app.organicmaps.car;
Review

What are potential security implications here?

What are potential security implications here?
Review

Код из примера. Объяснений, для чего это сделано, нигде не нашел

Ссылка на пример

Код из примера. Объяснений, для чего это сделано, нигде не нашел [Ссылка на пример](https://github.com/android/car-samples/blob/03440d5e974a060d0216b5e02a7fe3c46b7b9469/car_app_library/navigation/common/src/main/java/androidx/car/app/sample/navigation/common/car/NavigationCarAppService.java)
biodranik commented 2022-12-08 18:15:46 +00:00 (Migrated from github.com)
Review

У нас принято разбираться и писать только тот код, который мы чётко понимаем, для чего и зачем он нужен. И стараемся, чтобы было понятно другим, кто читает код, в т.ч. оставляя комментарии.

У нас принято разбираться и писать только тот код, который мы чётко понимаем, для чего и зачем он нужен. И стараемся, чтобы было понятно другим, кто читает код, в т.ч. оставляя комментарии.
Review

Вот такое объяснение в документации.

    /**
     * Returns the {@link HostValidator} this service will use to accept or reject host connections.
     *
     * <p>By default, the provided {@link HostValidator.Builder} would produce a validator that
     * only accepts connections from hosts holding
     * {@link HostValidator#TEMPLATE_RENDERER_PERMISSION} permission.
     *
     * <p>Application developers are expected to also allow connections from known hosts which
     * don't hold the aforementioned permission (for example, Android Auto and Android
     * Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts.
     *
     * <p>Refer to {@code androidx.car.app.R.array.hosts_allowlist_sample} to obtain a
     * list of package names and signatures that should be allow-listed by default.
     *
     * <p>It is also advised to allow connections from unknown hosts in debug builds to facilitate
     * debugging and testing.
     *
     * <p>Below is an example of this method implementation:
     *
     * <pre>
     * &#64;Override
     * &#64;NonNull
     * public HostValidator createHostValidator() {
     *     if ((getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0) {
     *         return HostValidator.ALLOW_ALL_HOSTS_VALIDATOR;
     *     } else {
     *         return new HostValidator.Builder(context)
     *             .addAllowedHosts(androidx.car.app.R.array.hosts_allowlist_sample)
     *             .build();
     *     }
     * }
     * </pre>
     */
Вот такое объяснение в документации. ```java /** * Returns the {@link HostValidator} this service will use to accept or reject host connections. * * <p>By default, the provided {@link HostValidator.Builder} would produce a validator that * only accepts connections from hosts holding * {@link HostValidator#TEMPLATE_RENDERER_PERMISSION} permission. * * <p>Application developers are expected to also allow connections from known hosts which * don't hold the aforementioned permission (for example, Android Auto and Android * Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts. * * <p>Refer to {@code androidx.car.app.R.array.hosts_allowlist_sample} to obtain a * list of package names and signatures that should be allow-listed by default. * * <p>It is also advised to allow connections from unknown hosts in debug builds to facilitate * debugging and testing. * * <p>Below is an example of this method implementation: * * <pre> * &#64;Override * &#64;NonNull * public HostValidator createHostValidator() { * if ((getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0) { * return HostValidator.ALLOW_ALL_HOSTS_VALIDATOR; * } else { * return new HostValidator.Builder(context) * .addAllowedHosts(androidx.car.app.R.array.hosts_allowlist_sample) * .build(); * } * } * </pre> */ ```
biodranik commented 2022-12-11 12:25:45 +00:00 (Migrated from github.com)
Review
  1. Так какие приложения перечислены в androidx.car.app.R.array.hosts_allowlist_sample ? Я так понял, для работы с апи <31 нам придётся их перечислить.
  2. Почему бы для отладки не сделать проще: if (BuildConfig.DEBUG) ?
  3. код может быть проще:
if ()
  return ...;
return ...;
1. Так какие приложения перечислены в androidx.car.app.R.array.hosts_allowlist_sample ? Я так понял, для работы с апи <31 нам придётся их перечислить. 2. Почему бы для отладки не сделать проще: if (BuildConfig.DEBUG) ? 3. код может быть проще: ``` if () return ...; return ...; ```
Review

Все не так. Почитал я, как работает HostValidator класс.

  • Он проверяет Host, т.е. магнитолу на которой запускается AA
  • Подключение к хосту разрешается в двух случаях
    • Либо хост указан в списке, который мы передаем
    • Либо хост имеет у себя android.car.permission.TEMPLATE_RENDERER

Поэтому я заменил R.array.car_hosts на androidx.car.app.R.array.hosts_allowlist_sample. Думаю, смысла держать свой список разрешенных хостов нет, а на warning можно закрыть глаза.

Warning:

The resource @array/hosts_allowlist_sample is marked as private in androidx.car.app:app:1.3.0-rc01

Все не так. Почитал я, как работает HostValidator класс. * Он проверяет Host, т.е. магнитолу на которой запускается AA * Подключение к хосту разрешается в двух случаях * Либо хост указан в списке, который мы передаем * Либо хост имеет у себя `android.car.permission.TEMPLATE_RENDERER` Поэтому я заменил `R.array.car_hosts` на `androidx.car.app.R.array.hosts_allowlist_sample`. Думаю, смысла держать свой список разрешенных хостов нет, а на warning можно закрыть глаза. Warning: >The resource @array/hosts_allowlist_sample is marked as private in androidx.car.app:app:1.3.0-rc01
biodranik commented 2022-12-11 21:13:37 +00:00 (Migrated from github.com)
Review

Так что именно в этом файле-то? )

Так что именно в этом файле-то? )
Review

В androidx.car.app.R.array.hosts_allowlist_sample?
Массив таких строк:
fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf,com.google.android.projection.gearhead

Первая часть - цифровая подпись, вторая - имя пакета

* @param packageName host package name (as reported by {@link PackageManager})
* @param digest      SHA256 digest of the DER encoding of the allow-listed host
*                    certificate, formatted as 32 lowercase 2 digits  hexadecimal values
*                    separated by colon (e.g.:"000102030405060708090a0b0c0d0e0f101112131415
*                    161718191a1b1c1d1e1f"). When using
*                    <a href="https://developer.android.com/about/versions/pie/android-9.0#apk-key-rotation">signature
*                    rotation</a>, this digest should correspond to the initial signing
*                    certificate

Только сейчас обратил внимание на это:

Application developers are expected to also allow connections from known hosts which don't hold the aforementioned permission (for example, Android Auto and Android Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts.

Но я не смог найти никакого общего списка хостов или хотя бы какого-то упоминания о том, что люди добавляли в этот список еще что-то. Поэтому, наверное, можно на это не обращать внимания. По крайней мере пока что.

В `androidx.car.app.R.array.hosts_allowlist_sample`? Массив таких строк: `fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf,com.google.android.projection.gearhead` Первая часть - цифровая подпись, вторая - имя пакета ```java * @param packageName host package name (as reported by {@link PackageManager}) * @param digest SHA256 digest of the DER encoding of the allow-listed host * certificate, formatted as 32 lowercase 2 digits hexadecimal values * separated by colon (e.g.:"000102030405060708090a0b0c0d0e0f101112131415 * 161718191a1b1c1d1e1f"). When using * <a href="https://developer.android.com/about/versions/pie/android-9.0#apk-key-rotation">signature * rotation</a>, this digest should correspond to the initial signing * certificate ``` Только сейчас обратил внимание на это: >Application developers are expected to also allow connections from known hosts which don't hold the aforementioned permission (for example, Android Auto and Android Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts. Но я не смог найти никакого общего списка хостов или хотя бы какого-то упоминания о том, что люди добавляли в этот список еще что-то. Поэтому, наверное, можно на это не обращать внимания. По крайней мере пока что.
biodranik commented 2022-12-11 22:03:03 +00:00 (Migrated from github.com)
Review
  1. Полный список пакетов в том файле можно выложить сюда или на pastebin?
  2. Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы.
1. Полный список пакетов в том файле можно выложить сюда или на pastebin? 2. Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы.
Review
<string-array name="hosts_allowlist_sample" translatable="false">
   <item>fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf,
         com.google.android.projection.gearhead</item>
   <item>70811a3eacfd2e83e18da9bfede52df16ce91f2e69a44d21f18ab66991130771,
         com.google.android.projection.gearhead</item>
   <item>1975b2f17177bc89a5dff31f9e64a6cae281a53dc1d1d59b1d147fe1c82afa00,
         com.google.android.projection.gearhead</item>
   <item>c241ffbc8e287c4e9a4ad19632ba1b1351ad361d5177b7d7b29859bd2b7fc631,
         com.google.android.apps.automotive.templates.host</item>
   <item>dd66deaf312d8daec7adbe85a218ecc8c64f3b152f9b5998d5b29300c2623f61,
         com.google.android.apps.automotive.templates.host</item>
   <item>50e603d333c6049a37bd751375d08f3bd0abebd33facd30bd17b64b89658b421,
         com.google.android.apps.automotive.templates.host</item>
</string-array>
```xml <string-array name="hosts_allowlist_sample" translatable="false"> <item>fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf, com.google.android.projection.gearhead</item> <item>70811a3eacfd2e83e18da9bfede52df16ce91f2e69a44d21f18ab66991130771, com.google.android.projection.gearhead</item> <item>1975b2f17177bc89a5dff31f9e64a6cae281a53dc1d1d59b1d147fe1c82afa00, com.google.android.projection.gearhead</item> <item>c241ffbc8e287c4e9a4ad19632ba1b1351ad361d5177b7d7b29859bd2b7fc631, com.google.android.apps.automotive.templates.host</item> <item>dd66deaf312d8daec7adbe85a218ecc8c64f3b152f9b5998d5b29300c2623f61, com.google.android.apps.automotive.templates.host</item> <item>50e603d333c6049a37bd751375d08f3bd0abebd33facd30bd17b64b89658b421, com.google.android.apps.automotive.templates.host</item> </string-array> ```
Review

Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы.

Тут если что подразумевается API хоста, а не телефона

>Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы. Тут если что подразумевается API хоста, а не телефона
Review

What are potential security implications here?

What are potential security implications here?
Review

Код из примера. Объяснений, для чего это сделано, нигде не нашел

Ссылка на пример

Код из примера. Объяснений, для чего это сделано, нигде не нашел [Ссылка на пример](https://github.com/android/car-samples/blob/03440d5e974a060d0216b5e02a7fe3c46b7b9469/car_app_library/navigation/common/src/main/java/androidx/car/app/sample/navigation/common/car/NavigationCarAppService.java)
biodranik commented 2022-12-08 18:15:46 +00:00 (Migrated from github.com)
Review

У нас принято разбираться и писать только тот код, который мы чётко понимаем, для чего и зачем он нужен. И стараемся, чтобы было понятно другим, кто читает код, в т.ч. оставляя комментарии.

У нас принято разбираться и писать только тот код, который мы чётко понимаем, для чего и зачем он нужен. И стараемся, чтобы было понятно другим, кто читает код, в т.ч. оставляя комментарии.
Review

Вот такое объяснение в документации.

    /**
     * Returns the {@link HostValidator} this service will use to accept or reject host connections.
     *
     * <p>By default, the provided {@link HostValidator.Builder} would produce a validator that
     * only accepts connections from hosts holding
     * {@link HostValidator#TEMPLATE_RENDERER_PERMISSION} permission.
     *
     * <p>Application developers are expected to also allow connections from known hosts which
     * don't hold the aforementioned permission (for example, Android Auto and Android
     * Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts.
     *
     * <p>Refer to {@code androidx.car.app.R.array.hosts_allowlist_sample} to obtain a
     * list of package names and signatures that should be allow-listed by default.
     *
     * <p>It is also advised to allow connections from unknown hosts in debug builds to facilitate
     * debugging and testing.
     *
     * <p>Below is an example of this method implementation:
     *
     * <pre>
     * &#64;Override
     * &#64;NonNull
     * public HostValidator createHostValidator() {
     *     if ((getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0) {
     *         return HostValidator.ALLOW_ALL_HOSTS_VALIDATOR;
     *     } else {
     *         return new HostValidator.Builder(context)
     *             .addAllowedHosts(androidx.car.app.R.array.hosts_allowlist_sample)
     *             .build();
     *     }
     * }
     * </pre>
     */
Вот такое объяснение в документации. ```java /** * Returns the {@link HostValidator} this service will use to accept or reject host connections. * * <p>By default, the provided {@link HostValidator.Builder} would produce a validator that * only accepts connections from hosts holding * {@link HostValidator#TEMPLATE_RENDERER_PERMISSION} permission. * * <p>Application developers are expected to also allow connections from known hosts which * don't hold the aforementioned permission (for example, Android Auto and Android * Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts. * * <p>Refer to {@code androidx.car.app.R.array.hosts_allowlist_sample} to obtain a * list of package names and signatures that should be allow-listed by default. * * <p>It is also advised to allow connections from unknown hosts in debug builds to facilitate * debugging and testing. * * <p>Below is an example of this method implementation: * * <pre> * &#64;Override * &#64;NonNull * public HostValidator createHostValidator() { * if ((getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0) { * return HostValidator.ALLOW_ALL_HOSTS_VALIDATOR; * } else { * return new HostValidator.Builder(context) * .addAllowedHosts(androidx.car.app.R.array.hosts_allowlist_sample) * .build(); * } * } * </pre> */ ```
biodranik commented 2022-12-11 12:25:45 +00:00 (Migrated from github.com)
Review
  1. Так какие приложения перечислены в androidx.car.app.R.array.hosts_allowlist_sample ? Я так понял, для работы с апи <31 нам придётся их перечислить.
  2. Почему бы для отладки не сделать проще: if (BuildConfig.DEBUG) ?
  3. код может быть проще:
if ()
  return ...;
return ...;
1. Так какие приложения перечислены в androidx.car.app.R.array.hosts_allowlist_sample ? Я так понял, для работы с апи <31 нам придётся их перечислить. 2. Почему бы для отладки не сделать проще: if (BuildConfig.DEBUG) ? 3. код может быть проще: ``` if () return ...; return ...; ```
Review

Все не так. Почитал я, как работает HostValidator класс.

  • Он проверяет Host, т.е. магнитолу на которой запускается AA
  • Подключение к хосту разрешается в двух случаях
    • Либо хост указан в списке, который мы передаем
    • Либо хост имеет у себя android.car.permission.TEMPLATE_RENDERER

Поэтому я заменил R.array.car_hosts на androidx.car.app.R.array.hosts_allowlist_sample. Думаю, смысла держать свой список разрешенных хостов нет, а на warning можно закрыть глаза.

Warning:

The resource @array/hosts_allowlist_sample is marked as private in androidx.car.app:app:1.3.0-rc01

Все не так. Почитал я, как работает HostValidator класс. * Он проверяет Host, т.е. магнитолу на которой запускается AA * Подключение к хосту разрешается в двух случаях * Либо хост указан в списке, который мы передаем * Либо хост имеет у себя `android.car.permission.TEMPLATE_RENDERER` Поэтому я заменил `R.array.car_hosts` на `androidx.car.app.R.array.hosts_allowlist_sample`. Думаю, смысла держать свой список разрешенных хостов нет, а на warning можно закрыть глаза. Warning: >The resource @array/hosts_allowlist_sample is marked as private in androidx.car.app:app:1.3.0-rc01
biodranik commented 2022-12-11 21:13:37 +00:00 (Migrated from github.com)
Review

Так что именно в этом файле-то? )

Так что именно в этом файле-то? )
Review

В androidx.car.app.R.array.hosts_allowlist_sample?
Массив таких строк:
fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf,com.google.android.projection.gearhead

Первая часть - цифровая подпись, вторая - имя пакета

* @param packageName host package name (as reported by {@link PackageManager})
* @param digest      SHA256 digest of the DER encoding of the allow-listed host
*                    certificate, formatted as 32 lowercase 2 digits  hexadecimal values
*                    separated by colon (e.g.:"000102030405060708090a0b0c0d0e0f101112131415
*                    161718191a1b1c1d1e1f"). When using
*                    <a href="https://developer.android.com/about/versions/pie/android-9.0#apk-key-rotation">signature
*                    rotation</a>, this digest should correspond to the initial signing
*                    certificate

Только сейчас обратил внимание на это:

Application developers are expected to also allow connections from known hosts which don't hold the aforementioned permission (for example, Android Auto and Android Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts.

Но я не смог найти никакого общего списка хостов или хотя бы какого-то упоминания о том, что люди добавляли в этот список еще что-то. Поэтому, наверное, можно на это не обращать внимания. По крайней мере пока что.

В `androidx.car.app.R.array.hosts_allowlist_sample`? Массив таких строк: `fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf,com.google.android.projection.gearhead` Первая часть - цифровая подпись, вторая - имя пакета ```java * @param packageName host package name (as reported by {@link PackageManager}) * @param digest SHA256 digest of the DER encoding of the allow-listed host * certificate, formatted as 32 lowercase 2 digits hexadecimal values * separated by colon (e.g.:"000102030405060708090a0b0c0d0e0f101112131415 * 161718191a1b1c1d1e1f"). When using * <a href="https://developer.android.com/about/versions/pie/android-9.0#apk-key-rotation">signature * rotation</a>, this digest should correspond to the initial signing * certificate ``` Только сейчас обратил внимание на это: >Application developers are expected to also allow connections from known hosts which don't hold the aforementioned permission (for example, Android Auto and Android Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts. Но я не смог найти никакого общего списка хостов или хотя бы какого-то упоминания о том, что люди добавляли в этот список еще что-то. Поэтому, наверное, можно на это не обращать внимания. По крайней мере пока что.
biodranik commented 2022-12-11 22:03:03 +00:00 (Migrated from github.com)
Review
  1. Полный список пакетов в том файле можно выложить сюда или на pastebin?
  2. Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы.
1. Полный список пакетов в том файле можно выложить сюда или на pastebin? 2. Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы.
Review
<string-array name="hosts_allowlist_sample" translatable="false">
   <item>fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf,
         com.google.android.projection.gearhead</item>
   <item>70811a3eacfd2e83e18da9bfede52df16ce91f2e69a44d21f18ab66991130771,
         com.google.android.projection.gearhead</item>
   <item>1975b2f17177bc89a5dff31f9e64a6cae281a53dc1d1d59b1d147fe1c82afa00,
         com.google.android.projection.gearhead</item>
   <item>c241ffbc8e287c4e9a4ad19632ba1b1351ad361d5177b7d7b29859bd2b7fc631,
         com.google.android.apps.automotive.templates.host</item>
   <item>dd66deaf312d8daec7adbe85a218ecc8c64f3b152f9b5998d5b29300c2623f61,
         com.google.android.apps.automotive.templates.host</item>
   <item>50e603d333c6049a37bd751375d08f3bd0abebd33facd30bd17b64b89658b421,
         com.google.android.apps.automotive.templates.host</item>
</string-array>
```xml <string-array name="hosts_allowlist_sample" translatable="false"> <item>fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf, com.google.android.projection.gearhead</item> <item>70811a3eacfd2e83e18da9bfede52df16ce91f2e69a44d21f18ab66991130771, com.google.android.projection.gearhead</item> <item>1975b2f17177bc89a5dff31f9e64a6cae281a53dc1d1d59b1d147fe1c82afa00, com.google.android.projection.gearhead</item> <item>c241ffbc8e287c4e9a4ad19632ba1b1351ad361d5177b7d7b29859bd2b7fc631, com.google.android.apps.automotive.templates.host</item> <item>dd66deaf312d8daec7adbe85a218ecc8c64f3b152f9b5998d5b29300c2623f61, com.google.android.apps.automotive.templates.host</item> <item>50e603d333c6049a37bd751375d08f3bd0abebd33facd30bd17b64b89658b421, com.google.android.apps.automotive.templates.host</item> </string-array> ```
Review

Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы.

Тут если что подразумевается API хоста, а не телефона

>Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы. Тут если что подразумевается API хоста, а не телефона
import androidx.annotation.NonNull;
Review

What are potential security implications here?

What are potential security implications here?
Review

Код из примера. Объяснений, для чего это сделано, нигде не нашел

Ссылка на пример

Код из примера. Объяснений, для чего это сделано, нигде не нашел [Ссылка на пример](https://github.com/android/car-samples/blob/03440d5e974a060d0216b5e02a7fe3c46b7b9469/car_app_library/navigation/common/src/main/java/androidx/car/app/sample/navigation/common/car/NavigationCarAppService.java)
biodranik commented 2022-12-08 18:15:46 +00:00 (Migrated from github.com)
Review

У нас принято разбираться и писать только тот код, который мы чётко понимаем, для чего и зачем он нужен. И стараемся, чтобы было понятно другим, кто читает код, в т.ч. оставляя комментарии.

У нас принято разбираться и писать только тот код, который мы чётко понимаем, для чего и зачем он нужен. И стараемся, чтобы было понятно другим, кто читает код, в т.ч. оставляя комментарии.
Review

Вот такое объяснение в документации.

    /**
     * Returns the {@link HostValidator} this service will use to accept or reject host connections.
     *
     * <p>By default, the provided {@link HostValidator.Builder} would produce a validator that
     * only accepts connections from hosts holding
     * {@link HostValidator#TEMPLATE_RENDERER_PERMISSION} permission.
     *
     * <p>Application developers are expected to also allow connections from known hosts which
     * don't hold the aforementioned permission (for example, Android Auto and Android
     * Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts.
     *
     * <p>Refer to {@code androidx.car.app.R.array.hosts_allowlist_sample} to obtain a
     * list of package names and signatures that should be allow-listed by default.
     *
     * <p>It is also advised to allow connections from unknown hosts in debug builds to facilitate
     * debugging and testing.
     *
     * <p>Below is an example of this method implementation:
     *
     * <pre>
     * &#64;Override
     * &#64;NonNull
     * public HostValidator createHostValidator() {
     *     if ((getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0) {
     *         return HostValidator.ALLOW_ALL_HOSTS_VALIDATOR;
     *     } else {
     *         return new HostValidator.Builder(context)
     *             .addAllowedHosts(androidx.car.app.R.array.hosts_allowlist_sample)
     *             .build();
     *     }
     * }
     * </pre>
     */
Вот такое объяснение в документации. ```java /** * Returns the {@link HostValidator} this service will use to accept or reject host connections. * * <p>By default, the provided {@link HostValidator.Builder} would produce a validator that * only accepts connections from hosts holding * {@link HostValidator#TEMPLATE_RENDERER_PERMISSION} permission. * * <p>Application developers are expected to also allow connections from known hosts which * don't hold the aforementioned permission (for example, Android Auto and Android * Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts. * * <p>Refer to {@code androidx.car.app.R.array.hosts_allowlist_sample} to obtain a * list of package names and signatures that should be allow-listed by default. * * <p>It is also advised to allow connections from unknown hosts in debug builds to facilitate * debugging and testing. * * <p>Below is an example of this method implementation: * * <pre> * &#64;Override * &#64;NonNull * public HostValidator createHostValidator() { * if ((getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0) { * return HostValidator.ALLOW_ALL_HOSTS_VALIDATOR; * } else { * return new HostValidator.Builder(context) * .addAllowedHosts(androidx.car.app.R.array.hosts_allowlist_sample) * .build(); * } * } * </pre> */ ```
biodranik commented 2022-12-11 12:25:45 +00:00 (Migrated from github.com)
Review
  1. Так какие приложения перечислены в androidx.car.app.R.array.hosts_allowlist_sample ? Я так понял, для работы с апи <31 нам придётся их перечислить.
  2. Почему бы для отладки не сделать проще: if (BuildConfig.DEBUG) ?
  3. код может быть проще:
if ()
  return ...;
return ...;
1. Так какие приложения перечислены в androidx.car.app.R.array.hosts_allowlist_sample ? Я так понял, для работы с апи <31 нам придётся их перечислить. 2. Почему бы для отладки не сделать проще: if (BuildConfig.DEBUG) ? 3. код может быть проще: ``` if () return ...; return ...; ```
Review

Все не так. Почитал я, как работает HostValidator класс.

  • Он проверяет Host, т.е. магнитолу на которой запускается AA
  • Подключение к хосту разрешается в двух случаях
    • Либо хост указан в списке, который мы передаем
    • Либо хост имеет у себя android.car.permission.TEMPLATE_RENDERER

Поэтому я заменил R.array.car_hosts на androidx.car.app.R.array.hosts_allowlist_sample. Думаю, смысла держать свой список разрешенных хостов нет, а на warning можно закрыть глаза.

Warning:

The resource @array/hosts_allowlist_sample is marked as private in androidx.car.app:app:1.3.0-rc01

Все не так. Почитал я, как работает HostValidator класс. * Он проверяет Host, т.е. магнитолу на которой запускается AA * Подключение к хосту разрешается в двух случаях * Либо хост указан в списке, который мы передаем * Либо хост имеет у себя `android.car.permission.TEMPLATE_RENDERER` Поэтому я заменил `R.array.car_hosts` на `androidx.car.app.R.array.hosts_allowlist_sample`. Думаю, смысла держать свой список разрешенных хостов нет, а на warning можно закрыть глаза. Warning: >The resource @array/hosts_allowlist_sample is marked as private in androidx.car.app:app:1.3.0-rc01
biodranik commented 2022-12-11 21:13:37 +00:00 (Migrated from github.com)
Review

Так что именно в этом файле-то? )

Так что именно в этом файле-то? )
Review

В androidx.car.app.R.array.hosts_allowlist_sample?
Массив таких строк:
fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf,com.google.android.projection.gearhead

Первая часть - цифровая подпись, вторая - имя пакета

* @param packageName host package name (as reported by {@link PackageManager})
* @param digest      SHA256 digest of the DER encoding of the allow-listed host
*                    certificate, formatted as 32 lowercase 2 digits  hexadecimal values
*                    separated by colon (e.g.:"000102030405060708090a0b0c0d0e0f101112131415
*                    161718191a1b1c1d1e1f"). When using
*                    <a href="https://developer.android.com/about/versions/pie/android-9.0#apk-key-rotation">signature
*                    rotation</a>, this digest should correspond to the initial signing
*                    certificate

Только сейчас обратил внимание на это:

Application developers are expected to also allow connections from known hosts which don't hold the aforementioned permission (for example, Android Auto and Android Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts.

Но я не смог найти никакого общего списка хостов или хотя бы какого-то упоминания о том, что люди добавляли в этот список еще что-то. Поэтому, наверное, можно на это не обращать внимания. По крайней мере пока что.

В `androidx.car.app.R.array.hosts_allowlist_sample`? Массив таких строк: `fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf,com.google.android.projection.gearhead` Первая часть - цифровая подпись, вторая - имя пакета ```java * @param packageName host package name (as reported by {@link PackageManager}) * @param digest SHA256 digest of the DER encoding of the allow-listed host * certificate, formatted as 32 lowercase 2 digits hexadecimal values * separated by colon (e.g.:"000102030405060708090a0b0c0d0e0f101112131415 * 161718191a1b1c1d1e1f"). When using * <a href="https://developer.android.com/about/versions/pie/android-9.0#apk-key-rotation">signature * rotation</a>, this digest should correspond to the initial signing * certificate ``` Только сейчас обратил внимание на это: >Application developers are expected to also allow connections from known hosts which don't hold the aforementioned permission (for example, Android Auto and Android Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts. Но я не смог найти никакого общего списка хостов или хотя бы какого-то упоминания о том, что люди добавляли в этот список еще что-то. Поэтому, наверное, можно на это не обращать внимания. По крайней мере пока что.
biodranik commented 2022-12-11 22:03:03 +00:00 (Migrated from github.com)
Review
  1. Полный список пакетов в том файле можно выложить сюда или на pastebin?
  2. Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы.
1. Полный список пакетов в том файле можно выложить сюда или на pastebin? 2. Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы.
Review
<string-array name="hosts_allowlist_sample" translatable="false">
   <item>fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf,
         com.google.android.projection.gearhead</item>
   <item>70811a3eacfd2e83e18da9bfede52df16ce91f2e69a44d21f18ab66991130771,
         com.google.android.projection.gearhead</item>
   <item>1975b2f17177bc89a5dff31f9e64a6cae281a53dc1d1d59b1d147fe1c82afa00,
         com.google.android.projection.gearhead</item>
   <item>c241ffbc8e287c4e9a4ad19632ba1b1351ad361d5177b7d7b29859bd2b7fc631,
         com.google.android.apps.automotive.templates.host</item>
   <item>dd66deaf312d8daec7adbe85a218ecc8c64f3b152f9b5998d5b29300c2623f61,
         com.google.android.apps.automotive.templates.host</item>
   <item>50e603d333c6049a37bd751375d08f3bd0abebd33facd30bd17b64b89658b421,
         com.google.android.apps.automotive.templates.host</item>
</string-array>
```xml <string-array name="hosts_allowlist_sample" translatable="false"> <item>fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf, com.google.android.projection.gearhead</item> <item>70811a3eacfd2e83e18da9bfede52df16ce91f2e69a44d21f18ab66991130771, com.google.android.projection.gearhead</item> <item>1975b2f17177bc89a5dff31f9e64a6cae281a53dc1d1d59b1d147fe1c82afa00, com.google.android.projection.gearhead</item> <item>c241ffbc8e287c4e9a4ad19632ba1b1351ad361d5177b7d7b29859bd2b7fc631, com.google.android.apps.automotive.templates.host</item> <item>dd66deaf312d8daec7adbe85a218ecc8c64f3b152f9b5998d5b29300c2623f61, com.google.android.apps.automotive.templates.host</item> <item>50e603d333c6049a37bd751375d08f3bd0abebd33facd30bd17b64b89658b421, com.google.android.apps.automotive.templates.host</item> </string-array> ```
Review

Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы.

Тут если что подразумевается API хоста, а не телефона

>Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы. Тут если что подразумевается API хоста, а не телефона
import androidx.car.app.CarAppService;
Review

What are potential security implications here?

What are potential security implications here?
Review

Код из примера. Объяснений, для чего это сделано, нигде не нашел

Ссылка на пример

Код из примера. Объяснений, для чего это сделано, нигде не нашел [Ссылка на пример](https://github.com/android/car-samples/blob/03440d5e974a060d0216b5e02a7fe3c46b7b9469/car_app_library/navigation/common/src/main/java/androidx/car/app/sample/navigation/common/car/NavigationCarAppService.java)
biodranik commented 2022-12-08 18:15:46 +00:00 (Migrated from github.com)
Review

У нас принято разбираться и писать только тот код, который мы чётко понимаем, для чего и зачем он нужен. И стараемся, чтобы было понятно другим, кто читает код, в т.ч. оставляя комментарии.

У нас принято разбираться и писать только тот код, который мы чётко понимаем, для чего и зачем он нужен. И стараемся, чтобы было понятно другим, кто читает код, в т.ч. оставляя комментарии.
Review

Вот такое объяснение в документации.

    /**
     * Returns the {@link HostValidator} this service will use to accept or reject host connections.
     *
     * <p>By default, the provided {@link HostValidator.Builder} would produce a validator that
     * only accepts connections from hosts holding
     * {@link HostValidator#TEMPLATE_RENDERER_PERMISSION} permission.
     *
     * <p>Application developers are expected to also allow connections from known hosts which
     * don't hold the aforementioned permission (for example, Android Auto and Android
     * Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts.
     *
     * <p>Refer to {@code androidx.car.app.R.array.hosts_allowlist_sample} to obtain a
     * list of package names and signatures that should be allow-listed by default.
     *
     * <p>It is also advised to allow connections from unknown hosts in debug builds to facilitate
     * debugging and testing.
     *
     * <p>Below is an example of this method implementation:
     *
     * <pre>
     * &#64;Override
     * &#64;NonNull
     * public HostValidator createHostValidator() {
     *     if ((getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0) {
     *         return HostValidator.ALLOW_ALL_HOSTS_VALIDATOR;
     *     } else {
     *         return new HostValidator.Builder(context)
     *             .addAllowedHosts(androidx.car.app.R.array.hosts_allowlist_sample)
     *             .build();
     *     }
     * }
     * </pre>
     */
Вот такое объяснение в документации. ```java /** * Returns the {@link HostValidator} this service will use to accept or reject host connections. * * <p>By default, the provided {@link HostValidator.Builder} would produce a validator that * only accepts connections from hosts holding * {@link HostValidator#TEMPLATE_RENDERER_PERMISSION} permission. * * <p>Application developers are expected to also allow connections from known hosts which * don't hold the aforementioned permission (for example, Android Auto and Android * Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts. * * <p>Refer to {@code androidx.car.app.R.array.hosts_allowlist_sample} to obtain a * list of package names and signatures that should be allow-listed by default. * * <p>It is also advised to allow connections from unknown hosts in debug builds to facilitate * debugging and testing. * * <p>Below is an example of this method implementation: * * <pre> * &#64;Override * &#64;NonNull * public HostValidator createHostValidator() { * if ((getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0) { * return HostValidator.ALLOW_ALL_HOSTS_VALIDATOR; * } else { * return new HostValidator.Builder(context) * .addAllowedHosts(androidx.car.app.R.array.hosts_allowlist_sample) * .build(); * } * } * </pre> */ ```
biodranik commented 2022-12-11 12:25:45 +00:00 (Migrated from github.com)
Review
  1. Так какие приложения перечислены в androidx.car.app.R.array.hosts_allowlist_sample ? Я так понял, для работы с апи <31 нам придётся их перечислить.
  2. Почему бы для отладки не сделать проще: if (BuildConfig.DEBUG) ?
  3. код может быть проще:
if ()
  return ...;
return ...;
1. Так какие приложения перечислены в androidx.car.app.R.array.hosts_allowlist_sample ? Я так понял, для работы с апи <31 нам придётся их перечислить. 2. Почему бы для отладки не сделать проще: if (BuildConfig.DEBUG) ? 3. код может быть проще: ``` if () return ...; return ...; ```
Review

Все не так. Почитал я, как работает HostValidator класс.

  • Он проверяет Host, т.е. магнитолу на которой запускается AA
  • Подключение к хосту разрешается в двух случаях
    • Либо хост указан в списке, который мы передаем
    • Либо хост имеет у себя android.car.permission.TEMPLATE_RENDERER

Поэтому я заменил R.array.car_hosts на androidx.car.app.R.array.hosts_allowlist_sample. Думаю, смысла держать свой список разрешенных хостов нет, а на warning можно закрыть глаза.

Warning:

The resource @array/hosts_allowlist_sample is marked as private in androidx.car.app:app:1.3.0-rc01

Все не так. Почитал я, как работает HostValidator класс. * Он проверяет Host, т.е. магнитолу на которой запускается AA * Подключение к хосту разрешается в двух случаях * Либо хост указан в списке, который мы передаем * Либо хост имеет у себя `android.car.permission.TEMPLATE_RENDERER` Поэтому я заменил `R.array.car_hosts` на `androidx.car.app.R.array.hosts_allowlist_sample`. Думаю, смысла держать свой список разрешенных хостов нет, а на warning можно закрыть глаза. Warning: >The resource @array/hosts_allowlist_sample is marked as private in androidx.car.app:app:1.3.0-rc01
biodranik commented 2022-12-11 21:13:37 +00:00 (Migrated from github.com)
Review

Так что именно в этом файле-то? )

Так что именно в этом файле-то? )
Review

В androidx.car.app.R.array.hosts_allowlist_sample?
Массив таких строк:
fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf,com.google.android.projection.gearhead

Первая часть - цифровая подпись, вторая - имя пакета

* @param packageName host package name (as reported by {@link PackageManager})
* @param digest      SHA256 digest of the DER encoding of the allow-listed host
*                    certificate, formatted as 32 lowercase 2 digits  hexadecimal values
*                    separated by colon (e.g.:"000102030405060708090a0b0c0d0e0f101112131415
*                    161718191a1b1c1d1e1f"). When using
*                    <a href="https://developer.android.com/about/versions/pie/android-9.0#apk-key-rotation">signature
*                    rotation</a>, this digest should correspond to the initial signing
*                    certificate

Только сейчас обратил внимание на это:

Application developers are expected to also allow connections from known hosts which don't hold the aforementioned permission (for example, Android Auto and Android Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts.

Но я не смог найти никакого общего списка хостов или хотя бы какого-то упоминания о том, что люди добавляли в этот список еще что-то. Поэтому, наверное, можно на это не обращать внимания. По крайней мере пока что.

В `androidx.car.app.R.array.hosts_allowlist_sample`? Массив таких строк: `fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf,com.google.android.projection.gearhead` Первая часть - цифровая подпись, вторая - имя пакета ```java * @param packageName host package name (as reported by {@link PackageManager}) * @param digest SHA256 digest of the DER encoding of the allow-listed host * certificate, formatted as 32 lowercase 2 digits hexadecimal values * separated by colon (e.g.:"000102030405060708090a0b0c0d0e0f101112131415 * 161718191a1b1c1d1e1f"). When using * <a href="https://developer.android.com/about/versions/pie/android-9.0#apk-key-rotation">signature * rotation</a>, this digest should correspond to the initial signing * certificate ``` Только сейчас обратил внимание на это: >Application developers are expected to also allow connections from known hosts which don't hold the aforementioned permission (for example, Android Auto and Android Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts. Но я не смог найти никакого общего списка хостов или хотя бы какого-то упоминания о том, что люди добавляли в этот список еще что-то. Поэтому, наверное, можно на это не обращать внимания. По крайней мере пока что.
biodranik commented 2022-12-11 22:03:03 +00:00 (Migrated from github.com)
Review
  1. Полный список пакетов в том файле можно выложить сюда или на pastebin?
  2. Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы.
1. Полный список пакетов в том файле можно выложить сюда или на pastebin? 2. Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы.
Review
<string-array name="hosts_allowlist_sample" translatable="false">
   <item>fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf,
         com.google.android.projection.gearhead</item>
   <item>70811a3eacfd2e83e18da9bfede52df16ce91f2e69a44d21f18ab66991130771,
         com.google.android.projection.gearhead</item>
   <item>1975b2f17177bc89a5dff31f9e64a6cae281a53dc1d1d59b1d147fe1c82afa00,
         com.google.android.projection.gearhead</item>
   <item>c241ffbc8e287c4e9a4ad19632ba1b1351ad361d5177b7d7b29859bd2b7fc631,
         com.google.android.apps.automotive.templates.host</item>
   <item>dd66deaf312d8daec7adbe85a218ecc8c64f3b152f9b5998d5b29300c2623f61,
         com.google.android.apps.automotive.templates.host</item>
   <item>50e603d333c6049a37bd751375d08f3bd0abebd33facd30bd17b64b89658b421,
         com.google.android.apps.automotive.templates.host</item>
</string-array>
```xml <string-array name="hosts_allowlist_sample" translatable="false"> <item>fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf, com.google.android.projection.gearhead</item> <item>70811a3eacfd2e83e18da9bfede52df16ce91f2e69a44d21f18ab66991130771, com.google.android.projection.gearhead</item> <item>1975b2f17177bc89a5dff31f9e64a6cae281a53dc1d1d59b1d147fe1c82afa00, com.google.android.projection.gearhead</item> <item>c241ffbc8e287c4e9a4ad19632ba1b1351ad361d5177b7d7b29859bd2b7fc631, com.google.android.apps.automotive.templates.host</item> <item>dd66deaf312d8daec7adbe85a218ecc8c64f3b152f9b5998d5b29300c2623f61, com.google.android.apps.automotive.templates.host</item> <item>50e603d333c6049a37bd751375d08f3bd0abebd33facd30bd17b64b89658b421, com.google.android.apps.automotive.templates.host</item> </string-array> ```
Review

Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы.

Тут если что подразумевается API хоста, а не телефона

>Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы. Тут если что подразумевается API хоста, а не телефона
import androidx.car.app.Session;
Review

What are potential security implications here?

What are potential security implications here?
Review

Код из примера. Объяснений, для чего это сделано, нигде не нашел

Ссылка на пример

Код из примера. Объяснений, для чего это сделано, нигде не нашел [Ссылка на пример](https://github.com/android/car-samples/blob/03440d5e974a060d0216b5e02a7fe3c46b7b9469/car_app_library/navigation/common/src/main/java/androidx/car/app/sample/navigation/common/car/NavigationCarAppService.java)
biodranik commented 2022-12-08 18:15:46 +00:00 (Migrated from github.com)
Review

У нас принято разбираться и писать только тот код, который мы чётко понимаем, для чего и зачем он нужен. И стараемся, чтобы было понятно другим, кто читает код, в т.ч. оставляя комментарии.

У нас принято разбираться и писать только тот код, который мы чётко понимаем, для чего и зачем он нужен. И стараемся, чтобы было понятно другим, кто читает код, в т.ч. оставляя комментарии.
Review

Вот такое объяснение в документации.

    /**
     * Returns the {@link HostValidator} this service will use to accept or reject host connections.
     *
     * <p>By default, the provided {@link HostValidator.Builder} would produce a validator that
     * only accepts connections from hosts holding
     * {@link HostValidator#TEMPLATE_RENDERER_PERMISSION} permission.
     *
     * <p>Application developers are expected to also allow connections from known hosts which
     * don't hold the aforementioned permission (for example, Android Auto and Android
     * Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts.
     *
     * <p>Refer to {@code androidx.car.app.R.array.hosts_allowlist_sample} to obtain a
     * list of package names and signatures that should be allow-listed by default.
     *
     * <p>It is also advised to allow connections from unknown hosts in debug builds to facilitate
     * debugging and testing.
     *
     * <p>Below is an example of this method implementation:
     *
     * <pre>
     * &#64;Override
     * &#64;NonNull
     * public HostValidator createHostValidator() {
     *     if ((getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0) {
     *         return HostValidator.ALLOW_ALL_HOSTS_VALIDATOR;
     *     } else {
     *         return new HostValidator.Builder(context)
     *             .addAllowedHosts(androidx.car.app.R.array.hosts_allowlist_sample)
     *             .build();
     *     }
     * }
     * </pre>
     */
Вот такое объяснение в документации. ```java /** * Returns the {@link HostValidator} this service will use to accept or reject host connections. * * <p>By default, the provided {@link HostValidator.Builder} would produce a validator that * only accepts connections from hosts holding * {@link HostValidator#TEMPLATE_RENDERER_PERMISSION} permission. * * <p>Application developers are expected to also allow connections from known hosts which * don't hold the aforementioned permission (for example, Android Auto and Android * Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts. * * <p>Refer to {@code androidx.car.app.R.array.hosts_allowlist_sample} to obtain a * list of package names and signatures that should be allow-listed by default. * * <p>It is also advised to allow connections from unknown hosts in debug builds to facilitate * debugging and testing. * * <p>Below is an example of this method implementation: * * <pre> * &#64;Override * &#64;NonNull * public HostValidator createHostValidator() { * if ((getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0) { * return HostValidator.ALLOW_ALL_HOSTS_VALIDATOR; * } else { * return new HostValidator.Builder(context) * .addAllowedHosts(androidx.car.app.R.array.hosts_allowlist_sample) * .build(); * } * } * </pre> */ ```
biodranik commented 2022-12-11 12:25:45 +00:00 (Migrated from github.com)
Review
  1. Так какие приложения перечислены в androidx.car.app.R.array.hosts_allowlist_sample ? Я так понял, для работы с апи <31 нам придётся их перечислить.
  2. Почему бы для отладки не сделать проще: if (BuildConfig.DEBUG) ?
  3. код может быть проще:
if ()
  return ...;
return ...;
1. Так какие приложения перечислены в androidx.car.app.R.array.hosts_allowlist_sample ? Я так понял, для работы с апи <31 нам придётся их перечислить. 2. Почему бы для отладки не сделать проще: if (BuildConfig.DEBUG) ? 3. код может быть проще: ``` if () return ...; return ...; ```
Review

Все не так. Почитал я, как работает HostValidator класс.

  • Он проверяет Host, т.е. магнитолу на которой запускается AA
  • Подключение к хосту разрешается в двух случаях
    • Либо хост указан в списке, который мы передаем
    • Либо хост имеет у себя android.car.permission.TEMPLATE_RENDERER

Поэтому я заменил R.array.car_hosts на androidx.car.app.R.array.hosts_allowlist_sample. Думаю, смысла держать свой список разрешенных хостов нет, а на warning можно закрыть глаза.

Warning:

The resource @array/hosts_allowlist_sample is marked as private in androidx.car.app:app:1.3.0-rc01

Все не так. Почитал я, как работает HostValidator класс. * Он проверяет Host, т.е. магнитолу на которой запускается AA * Подключение к хосту разрешается в двух случаях * Либо хост указан в списке, который мы передаем * Либо хост имеет у себя `android.car.permission.TEMPLATE_RENDERER` Поэтому я заменил `R.array.car_hosts` на `androidx.car.app.R.array.hosts_allowlist_sample`. Думаю, смысла держать свой список разрешенных хостов нет, а на warning можно закрыть глаза. Warning: >The resource @array/hosts_allowlist_sample is marked as private in androidx.car.app:app:1.3.0-rc01
biodranik commented 2022-12-11 21:13:37 +00:00 (Migrated from github.com)
Review

Так что именно в этом файле-то? )

Так что именно в этом файле-то? )
Review

В androidx.car.app.R.array.hosts_allowlist_sample?
Массив таких строк:
fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf,com.google.android.projection.gearhead

Первая часть - цифровая подпись, вторая - имя пакета

* @param packageName host package name (as reported by {@link PackageManager})
* @param digest      SHA256 digest of the DER encoding of the allow-listed host
*                    certificate, formatted as 32 lowercase 2 digits  hexadecimal values
*                    separated by colon (e.g.:"000102030405060708090a0b0c0d0e0f101112131415
*                    161718191a1b1c1d1e1f"). When using
*                    <a href="https://developer.android.com/about/versions/pie/android-9.0#apk-key-rotation">signature
*                    rotation</a>, this digest should correspond to the initial signing
*                    certificate

Только сейчас обратил внимание на это:

Application developers are expected to also allow connections from known hosts which don't hold the aforementioned permission (for example, Android Auto and Android Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts.

Но я не смог найти никакого общего списка хостов или хотя бы какого-то упоминания о том, что люди добавляли в этот список еще что-то. Поэтому, наверное, можно на это не обращать внимания. По крайней мере пока что.

В `androidx.car.app.R.array.hosts_allowlist_sample`? Массив таких строк: `fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf,com.google.android.projection.gearhead` Первая часть - цифровая подпись, вторая - имя пакета ```java * @param packageName host package name (as reported by {@link PackageManager}) * @param digest SHA256 digest of the DER encoding of the allow-listed host * certificate, formatted as 32 lowercase 2 digits hexadecimal values * separated by colon (e.g.:"000102030405060708090a0b0c0d0e0f101112131415 * 161718191a1b1c1d1e1f"). When using * <a href="https://developer.android.com/about/versions/pie/android-9.0#apk-key-rotation">signature * rotation</a>, this digest should correspond to the initial signing * certificate ``` Только сейчас обратил внимание на это: >Application developers are expected to also allow connections from known hosts which don't hold the aforementioned permission (for example, Android Auto and Android Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts. Но я не смог найти никакого общего списка хостов или хотя бы какого-то упоминания о том, что люди добавляли в этот список еще что-то. Поэтому, наверное, можно на это не обращать внимания. По крайней мере пока что.
biodranik commented 2022-12-11 22:03:03 +00:00 (Migrated from github.com)
Review
  1. Полный список пакетов в том файле можно выложить сюда или на pastebin?
  2. Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы.
1. Полный список пакетов в том файле можно выложить сюда или на pastebin? 2. Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы.
Review
<string-array name="hosts_allowlist_sample" translatable="false">
   <item>fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf,
         com.google.android.projection.gearhead</item>
   <item>70811a3eacfd2e83e18da9bfede52df16ce91f2e69a44d21f18ab66991130771,
         com.google.android.projection.gearhead</item>
   <item>1975b2f17177bc89a5dff31f9e64a6cae281a53dc1d1d59b1d147fe1c82afa00,
         com.google.android.projection.gearhead</item>
   <item>c241ffbc8e287c4e9a4ad19632ba1b1351ad361d5177b7d7b29859bd2b7fc631,
         com.google.android.apps.automotive.templates.host</item>
   <item>dd66deaf312d8daec7adbe85a218ecc8c64f3b152f9b5998d5b29300c2623f61,
         com.google.android.apps.automotive.templates.host</item>
   <item>50e603d333c6049a37bd751375d08f3bd0abebd33facd30bd17b64b89658b421,
         com.google.android.apps.automotive.templates.host</item>
</string-array>
```xml <string-array name="hosts_allowlist_sample" translatable="false"> <item>fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf, com.google.android.projection.gearhead</item> <item>70811a3eacfd2e83e18da9bfede52df16ce91f2e69a44d21f18ab66991130771, com.google.android.projection.gearhead</item> <item>1975b2f17177bc89a5dff31f9e64a6cae281a53dc1d1d59b1d147fe1c82afa00, com.google.android.projection.gearhead</item> <item>c241ffbc8e287c4e9a4ad19632ba1b1351ad361d5177b7d7b29859bd2b7fc631, com.google.android.apps.automotive.templates.host</item> <item>dd66deaf312d8daec7adbe85a218ecc8c64f3b152f9b5998d5b29300c2623f61, com.google.android.apps.automotive.templates.host</item> <item>50e603d333c6049a37bd751375d08f3bd0abebd33facd30bd17b64b89658b421, com.google.android.apps.automotive.templates.host</item> </string-array> ```
Review

Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы.

Тут если что подразумевается API хоста, а не телефона

>Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы. Тут если что подразумевается API хоста, а не телефона
import androidx.car.app.validation.HostValidator;
Review

What are potential security implications here?

What are potential security implications here?
Review

Код из примера. Объяснений, для чего это сделано, нигде не нашел

Ссылка на пример

Код из примера. Объяснений, для чего это сделано, нигде не нашел [Ссылка на пример](https://github.com/android/car-samples/blob/03440d5e974a060d0216b5e02a7fe3c46b7b9469/car_app_library/navigation/common/src/main/java/androidx/car/app/sample/navigation/common/car/NavigationCarAppService.java)
biodranik commented 2022-12-08 18:15:46 +00:00 (Migrated from github.com)
Review

У нас принято разбираться и писать только тот код, который мы чётко понимаем, для чего и зачем он нужен. И стараемся, чтобы было понятно другим, кто читает код, в т.ч. оставляя комментарии.

У нас принято разбираться и писать только тот код, который мы чётко понимаем, для чего и зачем он нужен. И стараемся, чтобы было понятно другим, кто читает код, в т.ч. оставляя комментарии.
Review

Вот такое объяснение в документации.

    /**
     * Returns the {@link HostValidator} this service will use to accept or reject host connections.
     *
     * <p>By default, the provided {@link HostValidator.Builder} would produce a validator that
     * only accepts connections from hosts holding
     * {@link HostValidator#TEMPLATE_RENDERER_PERMISSION} permission.
     *
     * <p>Application developers are expected to also allow connections from known hosts which
     * don't hold the aforementioned permission (for example, Android Auto and Android
     * Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts.
     *
     * <p>Refer to {@code androidx.car.app.R.array.hosts_allowlist_sample} to obtain a
     * list of package names and signatures that should be allow-listed by default.
     *
     * <p>It is also advised to allow connections from unknown hosts in debug builds to facilitate
     * debugging and testing.
     *
     * <p>Below is an example of this method implementation:
     *
     * <pre>
     * &#64;Override
     * &#64;NonNull
     * public HostValidator createHostValidator() {
     *     if ((getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0) {
     *         return HostValidator.ALLOW_ALL_HOSTS_VALIDATOR;
     *     } else {
     *         return new HostValidator.Builder(context)
     *             .addAllowedHosts(androidx.car.app.R.array.hosts_allowlist_sample)
     *             .build();
     *     }
     * }
     * </pre>
     */
Вот такое объяснение в документации. ```java /** * Returns the {@link HostValidator} this service will use to accept or reject host connections. * * <p>By default, the provided {@link HostValidator.Builder} would produce a validator that * only accepts connections from hosts holding * {@link HostValidator#TEMPLATE_RENDERER_PERMISSION} permission. * * <p>Application developers are expected to also allow connections from known hosts which * don't hold the aforementioned permission (for example, Android Auto and Android * Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts. * * <p>Refer to {@code androidx.car.app.R.array.hosts_allowlist_sample} to obtain a * list of package names and signatures that should be allow-listed by default. * * <p>It is also advised to allow connections from unknown hosts in debug builds to facilitate * debugging and testing. * * <p>Below is an example of this method implementation: * * <pre> * &#64;Override * &#64;NonNull * public HostValidator createHostValidator() { * if ((getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0) { * return HostValidator.ALLOW_ALL_HOSTS_VALIDATOR; * } else { * return new HostValidator.Builder(context) * .addAllowedHosts(androidx.car.app.R.array.hosts_allowlist_sample) * .build(); * } * } * </pre> */ ```
biodranik commented 2022-12-11 12:25:45 +00:00 (Migrated from github.com)
Review
  1. Так какие приложения перечислены в androidx.car.app.R.array.hosts_allowlist_sample ? Я так понял, для работы с апи <31 нам придётся их перечислить.
  2. Почему бы для отладки не сделать проще: if (BuildConfig.DEBUG) ?
  3. код может быть проще:
if ()
  return ...;
return ...;
1. Так какие приложения перечислены в androidx.car.app.R.array.hosts_allowlist_sample ? Я так понял, для работы с апи <31 нам придётся их перечислить. 2. Почему бы для отладки не сделать проще: if (BuildConfig.DEBUG) ? 3. код может быть проще: ``` if () return ...; return ...; ```
Review

Все не так. Почитал я, как работает HostValidator класс.

  • Он проверяет Host, т.е. магнитолу на которой запускается AA
  • Подключение к хосту разрешается в двух случаях
    • Либо хост указан в списке, который мы передаем
    • Либо хост имеет у себя android.car.permission.TEMPLATE_RENDERER

Поэтому я заменил R.array.car_hosts на androidx.car.app.R.array.hosts_allowlist_sample. Думаю, смысла держать свой список разрешенных хостов нет, а на warning можно закрыть глаза.

Warning:

The resource @array/hosts_allowlist_sample is marked as private in androidx.car.app:app:1.3.0-rc01

Все не так. Почитал я, как работает HostValidator класс. * Он проверяет Host, т.е. магнитолу на которой запускается AA * Подключение к хосту разрешается в двух случаях * Либо хост указан в списке, который мы передаем * Либо хост имеет у себя `android.car.permission.TEMPLATE_RENDERER` Поэтому я заменил `R.array.car_hosts` на `androidx.car.app.R.array.hosts_allowlist_sample`. Думаю, смысла держать свой список разрешенных хостов нет, а на warning можно закрыть глаза. Warning: >The resource @array/hosts_allowlist_sample is marked as private in androidx.car.app:app:1.3.0-rc01
biodranik commented 2022-12-11 21:13:37 +00:00 (Migrated from github.com)
Review

Так что именно в этом файле-то? )

Так что именно в этом файле-то? )
Review

В androidx.car.app.R.array.hosts_allowlist_sample?
Массив таких строк:
fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf,com.google.android.projection.gearhead

Первая часть - цифровая подпись, вторая - имя пакета

* @param packageName host package name (as reported by {@link PackageManager})
* @param digest      SHA256 digest of the DER encoding of the allow-listed host
*                    certificate, formatted as 32 lowercase 2 digits  hexadecimal values
*                    separated by colon (e.g.:"000102030405060708090a0b0c0d0e0f101112131415
*                    161718191a1b1c1d1e1f"). When using
*                    <a href="https://developer.android.com/about/versions/pie/android-9.0#apk-key-rotation">signature
*                    rotation</a>, this digest should correspond to the initial signing
*                    certificate

Только сейчас обратил внимание на это:

Application developers are expected to also allow connections from known hosts which don't hold the aforementioned permission (for example, Android Auto and Android Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts.

Но я не смог найти никакого общего списка хостов или хотя бы какого-то упоминания о том, что люди добавляли в этот список еще что-то. Поэтому, наверное, можно на это не обращать внимания. По крайней мере пока что.

В `androidx.car.app.R.array.hosts_allowlist_sample`? Массив таких строк: `fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf,com.google.android.projection.gearhead` Первая часть - цифровая подпись, вторая - имя пакета ```java * @param packageName host package name (as reported by {@link PackageManager}) * @param digest SHA256 digest of the DER encoding of the allow-listed host * certificate, formatted as 32 lowercase 2 digits hexadecimal values * separated by colon (e.g.:"000102030405060708090a0b0c0d0e0f101112131415 * 161718191a1b1c1d1e1f"). When using * <a href="https://developer.android.com/about/versions/pie/android-9.0#apk-key-rotation">signature * rotation</a>, this digest should correspond to the initial signing * certificate ``` Только сейчас обратил внимание на это: >Application developers are expected to also allow connections from known hosts which don't hold the aforementioned permission (for example, Android Auto and Android Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts. Но я не смог найти никакого общего списка хостов или хотя бы какого-то упоминания о том, что люди добавляли в этот список еще что-то. Поэтому, наверное, можно на это не обращать внимания. По крайней мере пока что.
biodranik commented 2022-12-11 22:03:03 +00:00 (Migrated from github.com)
Review
  1. Полный список пакетов в том файле можно выложить сюда или на pastebin?
  2. Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы.
1. Полный список пакетов в том файле можно выложить сюда или на pastebin? 2. Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы.
Review
<string-array name="hosts_allowlist_sample" translatable="false">
   <item>fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf,
         com.google.android.projection.gearhead</item>
   <item>70811a3eacfd2e83e18da9bfede52df16ce91f2e69a44d21f18ab66991130771,
         com.google.android.projection.gearhead</item>
   <item>1975b2f17177bc89a5dff31f9e64a6cae281a53dc1d1d59b1d147fe1c82afa00,
         com.google.android.projection.gearhead</item>
   <item>c241ffbc8e287c4e9a4ad19632ba1b1351ad361d5177b7d7b29859bd2b7fc631,
         com.google.android.apps.automotive.templates.host</item>
   <item>dd66deaf312d8daec7adbe85a218ecc8c64f3b152f9b5998d5b29300c2623f61,
         com.google.android.apps.automotive.templates.host</item>
   <item>50e603d333c6049a37bd751375d08f3bd0abebd33facd30bd17b64b89658b421,
         com.google.android.apps.automotive.templates.host</item>
</string-array>
```xml <string-array name="hosts_allowlist_sample" translatable="false"> <item>fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf, com.google.android.projection.gearhead</item> <item>70811a3eacfd2e83e18da9bfede52df16ce91f2e69a44d21f18ab66991130771, com.google.android.projection.gearhead</item> <item>1975b2f17177bc89a5dff31f9e64a6cae281a53dc1d1d59b1d147fe1c82afa00, com.google.android.projection.gearhead</item> <item>c241ffbc8e287c4e9a4ad19632ba1b1351ad361d5177b7d7b29859bd2b7fc631, com.google.android.apps.automotive.templates.host</item> <item>dd66deaf312d8daec7adbe85a218ecc8c64f3b152f9b5998d5b29300c2623f61, com.google.android.apps.automotive.templates.host</item> <item>50e603d333c6049a37bd751375d08f3bd0abebd33facd30bd17b64b89658b421, com.google.android.apps.automotive.templates.host</item> </string-array> ```
Review

Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы.

Тут если что подразумевается API хоста, а не телефона

>Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы. Тут если что подразумевается API хоста, а не телефона
Review

What are potential security implications here?

What are potential security implications here?
Review

Код из примера. Объяснений, для чего это сделано, нигде не нашел

Ссылка на пример

Код из примера. Объяснений, для чего это сделано, нигде не нашел [Ссылка на пример](https://github.com/android/car-samples/blob/03440d5e974a060d0216b5e02a7fe3c46b7b9469/car_app_library/navigation/common/src/main/java/androidx/car/app/sample/navigation/common/car/NavigationCarAppService.java)
biodranik commented 2022-12-08 18:15:46 +00:00 (Migrated from github.com)
Review

У нас принято разбираться и писать только тот код, который мы чётко понимаем, для чего и зачем он нужен. И стараемся, чтобы было понятно другим, кто читает код, в т.ч. оставляя комментарии.

У нас принято разбираться и писать только тот код, который мы чётко понимаем, для чего и зачем он нужен. И стараемся, чтобы было понятно другим, кто читает код, в т.ч. оставляя комментарии.
Review

Вот такое объяснение в документации.

    /**
     * Returns the {@link HostValidator} this service will use to accept or reject host connections.
     *
     * <p>By default, the provided {@link HostValidator.Builder} would produce a validator that
     * only accepts connections from hosts holding
     * {@link HostValidator#TEMPLATE_RENDERER_PERMISSION} permission.
     *
     * <p>Application developers are expected to also allow connections from known hosts which
     * don't hold the aforementioned permission (for example, Android Auto and Android
     * Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts.
     *
     * <p>Refer to {@code androidx.car.app.R.array.hosts_allowlist_sample} to obtain a
     * list of package names and signatures that should be allow-listed by default.
     *
     * <p>It is also advised to allow connections from unknown hosts in debug builds to facilitate
     * debugging and testing.
     *
     * <p>Below is an example of this method implementation:
     *
     * <pre>
     * &#64;Override
     * &#64;NonNull
     * public HostValidator createHostValidator() {
     *     if ((getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0) {
     *         return HostValidator.ALLOW_ALL_HOSTS_VALIDATOR;
     *     } else {
     *         return new HostValidator.Builder(context)
     *             .addAllowedHosts(androidx.car.app.R.array.hosts_allowlist_sample)
     *             .build();
     *     }
     * }
     * </pre>
     */
Вот такое объяснение в документации. ```java /** * Returns the {@link HostValidator} this service will use to accept or reject host connections. * * <p>By default, the provided {@link HostValidator.Builder} would produce a validator that * only accepts connections from hosts holding * {@link HostValidator#TEMPLATE_RENDERER_PERMISSION} permission. * * <p>Application developers are expected to also allow connections from known hosts which * don't hold the aforementioned permission (for example, Android Auto and Android * Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts. * * <p>Refer to {@code androidx.car.app.R.array.hosts_allowlist_sample} to obtain a * list of package names and signatures that should be allow-listed by default. * * <p>It is also advised to allow connections from unknown hosts in debug builds to facilitate * debugging and testing. * * <p>Below is an example of this method implementation: * * <pre> * &#64;Override * &#64;NonNull * public HostValidator createHostValidator() { * if ((getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0) { * return HostValidator.ALLOW_ALL_HOSTS_VALIDATOR; * } else { * return new HostValidator.Builder(context) * .addAllowedHosts(androidx.car.app.R.array.hosts_allowlist_sample) * .build(); * } * } * </pre> */ ```
biodranik commented 2022-12-11 12:25:45 +00:00 (Migrated from github.com)
Review
  1. Так какие приложения перечислены в androidx.car.app.R.array.hosts_allowlist_sample ? Я так понял, для работы с апи <31 нам придётся их перечислить.
  2. Почему бы для отладки не сделать проще: if (BuildConfig.DEBUG) ?
  3. код может быть проще:
if ()
  return ...;
return ...;
1. Так какие приложения перечислены в androidx.car.app.R.array.hosts_allowlist_sample ? Я так понял, для работы с апи <31 нам придётся их перечислить. 2. Почему бы для отладки не сделать проще: if (BuildConfig.DEBUG) ? 3. код может быть проще: ``` if () return ...; return ...; ```
Review

Все не так. Почитал я, как работает HostValidator класс.

  • Он проверяет Host, т.е. магнитолу на которой запускается AA
  • Подключение к хосту разрешается в двух случаях
    • Либо хост указан в списке, который мы передаем
    • Либо хост имеет у себя android.car.permission.TEMPLATE_RENDERER

Поэтому я заменил R.array.car_hosts на androidx.car.app.R.array.hosts_allowlist_sample. Думаю, смысла держать свой список разрешенных хостов нет, а на warning можно закрыть глаза.

Warning:

The resource @array/hosts_allowlist_sample is marked as private in androidx.car.app:app:1.3.0-rc01

Все не так. Почитал я, как работает HostValidator класс. * Он проверяет Host, т.е. магнитолу на которой запускается AA * Подключение к хосту разрешается в двух случаях * Либо хост указан в списке, который мы передаем * Либо хост имеет у себя `android.car.permission.TEMPLATE_RENDERER` Поэтому я заменил `R.array.car_hosts` на `androidx.car.app.R.array.hosts_allowlist_sample`. Думаю, смысла держать свой список разрешенных хостов нет, а на warning можно закрыть глаза. Warning: >The resource @array/hosts_allowlist_sample is marked as private in androidx.car.app:app:1.3.0-rc01
biodranik commented 2022-12-11 21:13:37 +00:00 (Migrated from github.com)
Review

Так что именно в этом файле-то? )

Так что именно в этом файле-то? )
Review

В androidx.car.app.R.array.hosts_allowlist_sample?
Массив таких строк:
fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf,com.google.android.projection.gearhead

Первая часть - цифровая подпись, вторая - имя пакета

* @param packageName host package name (as reported by {@link PackageManager})
* @param digest      SHA256 digest of the DER encoding of the allow-listed host
*                    certificate, formatted as 32 lowercase 2 digits  hexadecimal values
*                    separated by colon (e.g.:"000102030405060708090a0b0c0d0e0f101112131415
*                    161718191a1b1c1d1e1f"). When using
*                    <a href="https://developer.android.com/about/versions/pie/android-9.0#apk-key-rotation">signature
*                    rotation</a>, this digest should correspond to the initial signing
*                    certificate

Только сейчас обратил внимание на это:

Application developers are expected to also allow connections from known hosts which don't hold the aforementioned permission (for example, Android Auto and Android Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts.

Но я не смог найти никакого общего списка хостов или хотя бы какого-то упоминания о том, что люди добавляли в этот список еще что-то. Поэтому, наверное, можно на это не обращать внимания. По крайней мере пока что.

В `androidx.car.app.R.array.hosts_allowlist_sample`? Массив таких строк: `fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf,com.google.android.projection.gearhead` Первая часть - цифровая подпись, вторая - имя пакета ```java * @param packageName host package name (as reported by {@link PackageManager}) * @param digest SHA256 digest of the DER encoding of the allow-listed host * certificate, formatted as 32 lowercase 2 digits hexadecimal values * separated by colon (e.g.:"000102030405060708090a0b0c0d0e0f101112131415 * 161718191a1b1c1d1e1f"). When using * <a href="https://developer.android.com/about/versions/pie/android-9.0#apk-key-rotation">signature * rotation</a>, this digest should correspond to the initial signing * certificate ``` Только сейчас обратил внимание на это: >Application developers are expected to also allow connections from known hosts which don't hold the aforementioned permission (for example, Android Auto and Android Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts. Но я не смог найти никакого общего списка хостов или хотя бы какого-то упоминания о том, что люди добавляли в этот список еще что-то. Поэтому, наверное, можно на это не обращать внимания. По крайней мере пока что.
biodranik commented 2022-12-11 22:03:03 +00:00 (Migrated from github.com)
Review
  1. Полный список пакетов в том файле можно выложить сюда или на pastebin?
  2. Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы.
1. Полный список пакетов в том файле можно выложить сюда или на pastebin? 2. Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы.
Review
<string-array name="hosts_allowlist_sample" translatable="false">
   <item>fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf,
         com.google.android.projection.gearhead</item>
   <item>70811a3eacfd2e83e18da9bfede52df16ce91f2e69a44d21f18ab66991130771,
         com.google.android.projection.gearhead</item>
   <item>1975b2f17177bc89a5dff31f9e64a6cae281a53dc1d1d59b1d147fe1c82afa00,
         com.google.android.projection.gearhead</item>
   <item>c241ffbc8e287c4e9a4ad19632ba1b1351ad361d5177b7d7b29859bd2b7fc631,
         com.google.android.apps.automotive.templates.host</item>
   <item>dd66deaf312d8daec7adbe85a218ecc8c64f3b152f9b5998d5b29300c2623f61,
         com.google.android.apps.automotive.templates.host</item>
   <item>50e603d333c6049a37bd751375d08f3bd0abebd33facd30bd17b64b89658b421,
         com.google.android.apps.automotive.templates.host</item>
</string-array>
```xml <string-array name="hosts_allowlist_sample" translatable="false"> <item>fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf, com.google.android.projection.gearhead</item> <item>70811a3eacfd2e83e18da9bfede52df16ce91f2e69a44d21f18ab66991130771, com.google.android.projection.gearhead</item> <item>1975b2f17177bc89a5dff31f9e64a6cae281a53dc1d1d59b1d147fe1c82afa00, com.google.android.projection.gearhead</item> <item>c241ffbc8e287c4e9a4ad19632ba1b1351ad361d5177b7d7b29859bd2b7fc631, com.google.android.apps.automotive.templates.host</item> <item>dd66deaf312d8daec7adbe85a218ecc8c64f3b152f9b5998d5b29300c2623f61, com.google.android.apps.automotive.templates.host</item> <item>50e603d333c6049a37bd751375d08f3bd0abebd33facd30bd17b64b89658b421, com.google.android.apps.automotive.templates.host</item> </string-array> ```
Review

Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы.

Тут если что подразумевается API хоста, а не телефона

>Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы. Тут если что подразумевается API хоста, а не телефона
import app.organicmaps.BuildConfig;
Review

What are potential security implications here?

What are potential security implications here?
Review

Код из примера. Объяснений, для чего это сделано, нигде не нашел

Ссылка на пример

Код из примера. Объяснений, для чего это сделано, нигде не нашел [Ссылка на пример](https://github.com/android/car-samples/blob/03440d5e974a060d0216b5e02a7fe3c46b7b9469/car_app_library/navigation/common/src/main/java/androidx/car/app/sample/navigation/common/car/NavigationCarAppService.java)
biodranik commented 2022-12-08 18:15:46 +00:00 (Migrated from github.com)
Review

У нас принято разбираться и писать только тот код, который мы чётко понимаем, для чего и зачем он нужен. И стараемся, чтобы было понятно другим, кто читает код, в т.ч. оставляя комментарии.

У нас принято разбираться и писать только тот код, который мы чётко понимаем, для чего и зачем он нужен. И стараемся, чтобы было понятно другим, кто читает код, в т.ч. оставляя комментарии.
Review

Вот такое объяснение в документации.

    /**
     * Returns the {@link HostValidator} this service will use to accept or reject host connections.
     *
     * <p>By default, the provided {@link HostValidator.Builder} would produce a validator that
     * only accepts connections from hosts holding
     * {@link HostValidator#TEMPLATE_RENDERER_PERMISSION} permission.
     *
     * <p>Application developers are expected to also allow connections from known hosts which
     * don't hold the aforementioned permission (for example, Android Auto and Android
     * Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts.
     *
     * <p>Refer to {@code androidx.car.app.R.array.hosts_allowlist_sample} to obtain a
     * list of package names and signatures that should be allow-listed by default.
     *
     * <p>It is also advised to allow connections from unknown hosts in debug builds to facilitate
     * debugging and testing.
     *
     * <p>Below is an example of this method implementation:
     *
     * <pre>
     * &#64;Override
     * &#64;NonNull
     * public HostValidator createHostValidator() {
     *     if ((getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0) {
     *         return HostValidator.ALLOW_ALL_HOSTS_VALIDATOR;
     *     } else {
     *         return new HostValidator.Builder(context)
     *             .addAllowedHosts(androidx.car.app.R.array.hosts_allowlist_sample)
     *             .build();
     *     }
     * }
     * </pre>
     */
Вот такое объяснение в документации. ```java /** * Returns the {@link HostValidator} this service will use to accept or reject host connections. * * <p>By default, the provided {@link HostValidator.Builder} would produce a validator that * only accepts connections from hosts holding * {@link HostValidator#TEMPLATE_RENDERER_PERMISSION} permission. * * <p>Application developers are expected to also allow connections from known hosts which * don't hold the aforementioned permission (for example, Android Auto and Android * Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts. * * <p>Refer to {@code androidx.car.app.R.array.hosts_allowlist_sample} to obtain a * list of package names and signatures that should be allow-listed by default. * * <p>It is also advised to allow connections from unknown hosts in debug builds to facilitate * debugging and testing. * * <p>Below is an example of this method implementation: * * <pre> * &#64;Override * &#64;NonNull * public HostValidator createHostValidator() { * if ((getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0) { * return HostValidator.ALLOW_ALL_HOSTS_VALIDATOR; * } else { * return new HostValidator.Builder(context) * .addAllowedHosts(androidx.car.app.R.array.hosts_allowlist_sample) * .build(); * } * } * </pre> */ ```
biodranik commented 2022-12-11 12:25:45 +00:00 (Migrated from github.com)
Review
  1. Так какие приложения перечислены в androidx.car.app.R.array.hosts_allowlist_sample ? Я так понял, для работы с апи <31 нам придётся их перечислить.
  2. Почему бы для отладки не сделать проще: if (BuildConfig.DEBUG) ?
  3. код может быть проще:
if ()
  return ...;
return ...;
1. Так какие приложения перечислены в androidx.car.app.R.array.hosts_allowlist_sample ? Я так понял, для работы с апи <31 нам придётся их перечислить. 2. Почему бы для отладки не сделать проще: if (BuildConfig.DEBUG) ? 3. код может быть проще: ``` if () return ...; return ...; ```
Review

Все не так. Почитал я, как работает HostValidator класс.

  • Он проверяет Host, т.е. магнитолу на которой запускается AA
  • Подключение к хосту разрешается в двух случаях
    • Либо хост указан в списке, который мы передаем
    • Либо хост имеет у себя android.car.permission.TEMPLATE_RENDERER

Поэтому я заменил R.array.car_hosts на androidx.car.app.R.array.hosts_allowlist_sample. Думаю, смысла держать свой список разрешенных хостов нет, а на warning можно закрыть глаза.

Warning:

The resource @array/hosts_allowlist_sample is marked as private in androidx.car.app:app:1.3.0-rc01

Все не так. Почитал я, как работает HostValidator класс. * Он проверяет Host, т.е. магнитолу на которой запускается AA * Подключение к хосту разрешается в двух случаях * Либо хост указан в списке, который мы передаем * Либо хост имеет у себя `android.car.permission.TEMPLATE_RENDERER` Поэтому я заменил `R.array.car_hosts` на `androidx.car.app.R.array.hosts_allowlist_sample`. Думаю, смысла держать свой список разрешенных хостов нет, а на warning можно закрыть глаза. Warning: >The resource @array/hosts_allowlist_sample is marked as private in androidx.car.app:app:1.3.0-rc01
biodranik commented 2022-12-11 21:13:37 +00:00 (Migrated from github.com)
Review

Так что именно в этом файле-то? )

Так что именно в этом файле-то? )
Review

В androidx.car.app.R.array.hosts_allowlist_sample?
Массив таких строк:
fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf,com.google.android.projection.gearhead

Первая часть - цифровая подпись, вторая - имя пакета

* @param packageName host package name (as reported by {@link PackageManager})
* @param digest      SHA256 digest of the DER encoding of the allow-listed host
*                    certificate, formatted as 32 lowercase 2 digits  hexadecimal values
*                    separated by colon (e.g.:"000102030405060708090a0b0c0d0e0f101112131415
*                    161718191a1b1c1d1e1f"). When using
*                    <a href="https://developer.android.com/about/versions/pie/android-9.0#apk-key-rotation">signature
*                    rotation</a>, this digest should correspond to the initial signing
*                    certificate

Только сейчас обратил внимание на это:

Application developers are expected to also allow connections from known hosts which don't hold the aforementioned permission (for example, Android Auto and Android Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts.

Но я не смог найти никакого общего списка хостов или хотя бы какого-то упоминания о том, что люди добавляли в этот список еще что-то. Поэтому, наверное, можно на это не обращать внимания. По крайней мере пока что.

В `androidx.car.app.R.array.hosts_allowlist_sample`? Массив таких строк: `fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf,com.google.android.projection.gearhead` Первая часть - цифровая подпись, вторая - имя пакета ```java * @param packageName host package name (as reported by {@link PackageManager}) * @param digest SHA256 digest of the DER encoding of the allow-listed host * certificate, formatted as 32 lowercase 2 digits hexadecimal values * separated by colon (e.g.:"000102030405060708090a0b0c0d0e0f101112131415 * 161718191a1b1c1d1e1f"). When using * <a href="https://developer.android.com/about/versions/pie/android-9.0#apk-key-rotation">signature * rotation</a>, this digest should correspond to the initial signing * certificate ``` Только сейчас обратил внимание на это: >Application developers are expected to also allow connections from known hosts which don't hold the aforementioned permission (for example, Android Auto and Android Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts. Но я не смог найти никакого общего списка хостов или хотя бы какого-то упоминания о том, что люди добавляли в этот список еще что-то. Поэтому, наверное, можно на это не обращать внимания. По крайней мере пока что.
biodranik commented 2022-12-11 22:03:03 +00:00 (Migrated from github.com)
Review
  1. Полный список пакетов в том файле можно выложить сюда или на pastebin?
  2. Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы.
1. Полный список пакетов в том файле можно выложить сюда или на pastebin? 2. Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы.
Review
<string-array name="hosts_allowlist_sample" translatable="false">
   <item>fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf,
         com.google.android.projection.gearhead</item>
   <item>70811a3eacfd2e83e18da9bfede52df16ce91f2e69a44d21f18ab66991130771,
         com.google.android.projection.gearhead</item>
   <item>1975b2f17177bc89a5dff31f9e64a6cae281a53dc1d1d59b1d147fe1c82afa00,
         com.google.android.projection.gearhead</item>
   <item>c241ffbc8e287c4e9a4ad19632ba1b1351ad361d5177b7d7b29859bd2b7fc631,
         com.google.android.apps.automotive.templates.host</item>
   <item>dd66deaf312d8daec7adbe85a218ecc8c64f3b152f9b5998d5b29300c2623f61,
         com.google.android.apps.automotive.templates.host</item>
   <item>50e603d333c6049a37bd751375d08f3bd0abebd33facd30bd17b64b89658b421,
         com.google.android.apps.automotive.templates.host</item>
</string-array>
```xml <string-array name="hosts_allowlist_sample" translatable="false"> <item>fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf, com.google.android.projection.gearhead</item> <item>70811a3eacfd2e83e18da9bfede52df16ce91f2e69a44d21f18ab66991130771, com.google.android.projection.gearhead</item> <item>1975b2f17177bc89a5dff31f9e64a6cae281a53dc1d1d59b1d147fe1c82afa00, com.google.android.projection.gearhead</item> <item>c241ffbc8e287c4e9a4ad19632ba1b1351ad361d5177b7d7b29859bd2b7fc631, com.google.android.apps.automotive.templates.host</item> <item>dd66deaf312d8daec7adbe85a218ecc8c64f3b152f9b5998d5b29300c2623f61, com.google.android.apps.automotive.templates.host</item> <item>50e603d333c6049a37bd751375d08f3bd0abebd33facd30bd17b64b89658b421, com.google.android.apps.automotive.templates.host</item> </string-array> ```
Review

Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы.

Тут если что подразумевается API хоста, а не телефона

>Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы. Тут если что подразумевается API хоста, а не телефона
Review

What are potential security implications here?

What are potential security implications here?
Review

Код из примера. Объяснений, для чего это сделано, нигде не нашел

Ссылка на пример

Код из примера. Объяснений, для чего это сделано, нигде не нашел [Ссылка на пример](https://github.com/android/car-samples/blob/03440d5e974a060d0216b5e02a7fe3c46b7b9469/car_app_library/navigation/common/src/main/java/androidx/car/app/sample/navigation/common/car/NavigationCarAppService.java)
biodranik commented 2022-12-08 18:15:46 +00:00 (Migrated from github.com)
Review

У нас принято разбираться и писать только тот код, который мы чётко понимаем, для чего и зачем он нужен. И стараемся, чтобы было понятно другим, кто читает код, в т.ч. оставляя комментарии.

У нас принято разбираться и писать только тот код, который мы чётко понимаем, для чего и зачем он нужен. И стараемся, чтобы было понятно другим, кто читает код, в т.ч. оставляя комментарии.
Review

Вот такое объяснение в документации.

    /**
     * Returns the {@link HostValidator} this service will use to accept or reject host connections.
     *
     * <p>By default, the provided {@link HostValidator.Builder} would produce a validator that
     * only accepts connections from hosts holding
     * {@link HostValidator#TEMPLATE_RENDERER_PERMISSION} permission.
     *
     * <p>Application developers are expected to also allow connections from known hosts which
     * don't hold the aforementioned permission (for example, Android Auto and Android
     * Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts.
     *
     * <p>Refer to {@code androidx.car.app.R.array.hosts_allowlist_sample} to obtain a
     * list of package names and signatures that should be allow-listed by default.
     *
     * <p>It is also advised to allow connections from unknown hosts in debug builds to facilitate
     * debugging and testing.
     *
     * <p>Below is an example of this method implementation:
     *
     * <pre>
     * &#64;Override
     * &#64;NonNull
     * public HostValidator createHostValidator() {
     *     if ((getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0) {
     *         return HostValidator.ALLOW_ALL_HOSTS_VALIDATOR;
     *     } else {
     *         return new HostValidator.Builder(context)
     *             .addAllowedHosts(androidx.car.app.R.array.hosts_allowlist_sample)
     *             .build();
     *     }
     * }
     * </pre>
     */
Вот такое объяснение в документации. ```java /** * Returns the {@link HostValidator} this service will use to accept or reject host connections. * * <p>By default, the provided {@link HostValidator.Builder} would produce a validator that * only accepts connections from hosts holding * {@link HostValidator#TEMPLATE_RENDERER_PERMISSION} permission. * * <p>Application developers are expected to also allow connections from known hosts which * don't hold the aforementioned permission (for example, Android Auto and Android * Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts. * * <p>Refer to {@code androidx.car.app.R.array.hosts_allowlist_sample} to obtain a * list of package names and signatures that should be allow-listed by default. * * <p>It is also advised to allow connections from unknown hosts in debug builds to facilitate * debugging and testing. * * <p>Below is an example of this method implementation: * * <pre> * &#64;Override * &#64;NonNull * public HostValidator createHostValidator() { * if ((getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0) { * return HostValidator.ALLOW_ALL_HOSTS_VALIDATOR; * } else { * return new HostValidator.Builder(context) * .addAllowedHosts(androidx.car.app.R.array.hosts_allowlist_sample) * .build(); * } * } * </pre> */ ```
biodranik commented 2022-12-11 12:25:45 +00:00 (Migrated from github.com)
Review
  1. Так какие приложения перечислены в androidx.car.app.R.array.hosts_allowlist_sample ? Я так понял, для работы с апи <31 нам придётся их перечислить.
  2. Почему бы для отладки не сделать проще: if (BuildConfig.DEBUG) ?
  3. код может быть проще:
if ()
  return ...;
return ...;
1. Так какие приложения перечислены в androidx.car.app.R.array.hosts_allowlist_sample ? Я так понял, для работы с апи <31 нам придётся их перечислить. 2. Почему бы для отладки не сделать проще: if (BuildConfig.DEBUG) ? 3. код может быть проще: ``` if () return ...; return ...; ```
Review

Все не так. Почитал я, как работает HostValidator класс.

  • Он проверяет Host, т.е. магнитолу на которой запускается AA
  • Подключение к хосту разрешается в двух случаях
    • Либо хост указан в списке, который мы передаем
    • Либо хост имеет у себя android.car.permission.TEMPLATE_RENDERER

Поэтому я заменил R.array.car_hosts на androidx.car.app.R.array.hosts_allowlist_sample. Думаю, смысла держать свой список разрешенных хостов нет, а на warning можно закрыть глаза.

Warning:

The resource @array/hosts_allowlist_sample is marked as private in androidx.car.app:app:1.3.0-rc01

Все не так. Почитал я, как работает HostValidator класс. * Он проверяет Host, т.е. магнитолу на которой запускается AA * Подключение к хосту разрешается в двух случаях * Либо хост указан в списке, который мы передаем * Либо хост имеет у себя `android.car.permission.TEMPLATE_RENDERER` Поэтому я заменил `R.array.car_hosts` на `androidx.car.app.R.array.hosts_allowlist_sample`. Думаю, смысла держать свой список разрешенных хостов нет, а на warning можно закрыть глаза. Warning: >The resource @array/hosts_allowlist_sample is marked as private in androidx.car.app:app:1.3.0-rc01
biodranik commented 2022-12-11 21:13:37 +00:00 (Migrated from github.com)
Review

Так что именно в этом файле-то? )

Так что именно в этом файле-то? )
Review

В androidx.car.app.R.array.hosts_allowlist_sample?
Массив таких строк:
fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf,com.google.android.projection.gearhead

Первая часть - цифровая подпись, вторая - имя пакета

* @param packageName host package name (as reported by {@link PackageManager})
* @param digest      SHA256 digest of the DER encoding of the allow-listed host
*                    certificate, formatted as 32 lowercase 2 digits  hexadecimal values
*                    separated by colon (e.g.:"000102030405060708090a0b0c0d0e0f101112131415
*                    161718191a1b1c1d1e1f"). When using
*                    <a href="https://developer.android.com/about/versions/pie/android-9.0#apk-key-rotation">signature
*                    rotation</a>, this digest should correspond to the initial signing
*                    certificate

Только сейчас обратил внимание на это:

Application developers are expected to also allow connections from known hosts which don't hold the aforementioned permission (for example, Android Auto and Android Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts.

Но я не смог найти никакого общего списка хостов или хотя бы какого-то упоминания о том, что люди добавляли в этот список еще что-то. Поэтому, наверное, можно на это не обращать внимания. По крайней мере пока что.

В `androidx.car.app.R.array.hosts_allowlist_sample`? Массив таких строк: `fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf,com.google.android.projection.gearhead` Первая часть - цифровая подпись, вторая - имя пакета ```java * @param packageName host package name (as reported by {@link PackageManager}) * @param digest SHA256 digest of the DER encoding of the allow-listed host * certificate, formatted as 32 lowercase 2 digits hexadecimal values * separated by colon (e.g.:"000102030405060708090a0b0c0d0e0f101112131415 * 161718191a1b1c1d1e1f"). When using * <a href="https://developer.android.com/about/versions/pie/android-9.0#apk-key-rotation">signature * rotation</a>, this digest should correspond to the initial signing * certificate ``` Только сейчас обратил внимание на это: >Application developers are expected to also allow connections from known hosts which don't hold the aforementioned permission (for example, Android Auto and Android Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts. Но я не смог найти никакого общего списка хостов или хотя бы какого-то упоминания о том, что люди добавляли в этот список еще что-то. Поэтому, наверное, можно на это не обращать внимания. По крайней мере пока что.
biodranik commented 2022-12-11 22:03:03 +00:00 (Migrated from github.com)
Review
  1. Полный список пакетов в том файле можно выложить сюда или на pastebin?
  2. Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы.
1. Полный список пакетов в том файле можно выложить сюда или на pastebin? 2. Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы.
Review
<string-array name="hosts_allowlist_sample" translatable="false">
   <item>fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf,
         com.google.android.projection.gearhead</item>
   <item>70811a3eacfd2e83e18da9bfede52df16ce91f2e69a44d21f18ab66991130771,
         com.google.android.projection.gearhead</item>
   <item>1975b2f17177bc89a5dff31f9e64a6cae281a53dc1d1d59b1d147fe1c82afa00,
         com.google.android.projection.gearhead</item>
   <item>c241ffbc8e287c4e9a4ad19632ba1b1351ad361d5177b7d7b29859bd2b7fc631,
         com.google.android.apps.automotive.templates.host</item>
   <item>dd66deaf312d8daec7adbe85a218ecc8c64f3b152f9b5998d5b29300c2623f61,
         com.google.android.apps.automotive.templates.host</item>
   <item>50e603d333c6049a37bd751375d08f3bd0abebd33facd30bd17b64b89658b421,
         com.google.android.apps.automotive.templates.host</item>
</string-array>
```xml <string-array name="hosts_allowlist_sample" translatable="false"> <item>fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf, com.google.android.projection.gearhead</item> <item>70811a3eacfd2e83e18da9bfede52df16ce91f2e69a44d21f18ab66991130771, com.google.android.projection.gearhead</item> <item>1975b2f17177bc89a5dff31f9e64a6cae281a53dc1d1d59b1d147fe1c82afa00, com.google.android.projection.gearhead</item> <item>c241ffbc8e287c4e9a4ad19632ba1b1351ad361d5177b7d7b29859bd2b7fc631, com.google.android.apps.automotive.templates.host</item> <item>dd66deaf312d8daec7adbe85a218ecc8c64f3b152f9b5998d5b29300c2623f61, com.google.android.apps.automotive.templates.host</item> <item>50e603d333c6049a37bd751375d08f3bd0abebd33facd30bd17b64b89658b421, com.google.android.apps.automotive.templates.host</item> </string-array> ```
Review

Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы.

Тут если что подразумевается API хоста, а не телефона

>Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы. Тут если что подразумевается API хоста, а не телефона
public final class NavigationCarAppService extends CarAppService
Review

What are potential security implications here?

What are potential security implications here?
Review

Код из примера. Объяснений, для чего это сделано, нигде не нашел

Ссылка на пример

Код из примера. Объяснений, для чего это сделано, нигде не нашел [Ссылка на пример](https://github.com/android/car-samples/blob/03440d5e974a060d0216b5e02a7fe3c46b7b9469/car_app_library/navigation/common/src/main/java/androidx/car/app/sample/navigation/common/car/NavigationCarAppService.java)
biodranik commented 2022-12-08 18:15:46 +00:00 (Migrated from github.com)
Review

У нас принято разбираться и писать только тот код, который мы чётко понимаем, для чего и зачем он нужен. И стараемся, чтобы было понятно другим, кто читает код, в т.ч. оставляя комментарии.

У нас принято разбираться и писать только тот код, который мы чётко понимаем, для чего и зачем он нужен. И стараемся, чтобы было понятно другим, кто читает код, в т.ч. оставляя комментарии.
Review

Вот такое объяснение в документации.

    /**
     * Returns the {@link HostValidator} this service will use to accept or reject host connections.
     *
     * <p>By default, the provided {@link HostValidator.Builder} would produce a validator that
     * only accepts connections from hosts holding
     * {@link HostValidator#TEMPLATE_RENDERER_PERMISSION} permission.
     *
     * <p>Application developers are expected to also allow connections from known hosts which
     * don't hold the aforementioned permission (for example, Android Auto and Android
     * Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts.
     *
     * <p>Refer to {@code androidx.car.app.R.array.hosts_allowlist_sample} to obtain a
     * list of package names and signatures that should be allow-listed by default.
     *
     * <p>It is also advised to allow connections from unknown hosts in debug builds to facilitate
     * debugging and testing.
     *
     * <p>Below is an example of this method implementation:
     *
     * <pre>
     * &#64;Override
     * &#64;NonNull
     * public HostValidator createHostValidator() {
     *     if ((getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0) {
     *         return HostValidator.ALLOW_ALL_HOSTS_VALIDATOR;
     *     } else {
     *         return new HostValidator.Builder(context)
     *             .addAllowedHosts(androidx.car.app.R.array.hosts_allowlist_sample)
     *             .build();
     *     }
     * }
     * </pre>
     */
Вот такое объяснение в документации. ```java /** * Returns the {@link HostValidator} this service will use to accept or reject host connections. * * <p>By default, the provided {@link HostValidator.Builder} would produce a validator that * only accepts connections from hosts holding * {@link HostValidator#TEMPLATE_RENDERER_PERMISSION} permission. * * <p>Application developers are expected to also allow connections from known hosts which * don't hold the aforementioned permission (for example, Android Auto and Android * Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts. * * <p>Refer to {@code androidx.car.app.R.array.hosts_allowlist_sample} to obtain a * list of package names and signatures that should be allow-listed by default. * * <p>It is also advised to allow connections from unknown hosts in debug builds to facilitate * debugging and testing. * * <p>Below is an example of this method implementation: * * <pre> * &#64;Override * &#64;NonNull * public HostValidator createHostValidator() { * if ((getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0) { * return HostValidator.ALLOW_ALL_HOSTS_VALIDATOR; * } else { * return new HostValidator.Builder(context) * .addAllowedHosts(androidx.car.app.R.array.hosts_allowlist_sample) * .build(); * } * } * </pre> */ ```
biodranik commented 2022-12-11 12:25:45 +00:00 (Migrated from github.com)
Review
  1. Так какие приложения перечислены в androidx.car.app.R.array.hosts_allowlist_sample ? Я так понял, для работы с апи <31 нам придётся их перечислить.
  2. Почему бы для отладки не сделать проще: if (BuildConfig.DEBUG) ?
  3. код может быть проще:
if ()
  return ...;
return ...;
1. Так какие приложения перечислены в androidx.car.app.R.array.hosts_allowlist_sample ? Я так понял, для работы с апи <31 нам придётся их перечислить. 2. Почему бы для отладки не сделать проще: if (BuildConfig.DEBUG) ? 3. код может быть проще: ``` if () return ...; return ...; ```
Review

Все не так. Почитал я, как работает HostValidator класс.

  • Он проверяет Host, т.е. магнитолу на которой запускается AA
  • Подключение к хосту разрешается в двух случаях
    • Либо хост указан в списке, который мы передаем
    • Либо хост имеет у себя android.car.permission.TEMPLATE_RENDERER

Поэтому я заменил R.array.car_hosts на androidx.car.app.R.array.hosts_allowlist_sample. Думаю, смысла держать свой список разрешенных хостов нет, а на warning можно закрыть глаза.

Warning:

The resource @array/hosts_allowlist_sample is marked as private in androidx.car.app:app:1.3.0-rc01

Все не так. Почитал я, как работает HostValidator класс. * Он проверяет Host, т.е. магнитолу на которой запускается AA * Подключение к хосту разрешается в двух случаях * Либо хост указан в списке, который мы передаем * Либо хост имеет у себя `android.car.permission.TEMPLATE_RENDERER` Поэтому я заменил `R.array.car_hosts` на `androidx.car.app.R.array.hosts_allowlist_sample`. Думаю, смысла держать свой список разрешенных хостов нет, а на warning можно закрыть глаза. Warning: >The resource @array/hosts_allowlist_sample is marked as private in androidx.car.app:app:1.3.0-rc01
biodranik commented 2022-12-11 21:13:37 +00:00 (Migrated from github.com)
Review

Так что именно в этом файле-то? )

Так что именно в этом файле-то? )
Review

В androidx.car.app.R.array.hosts_allowlist_sample?
Массив таких строк:
fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf,com.google.android.projection.gearhead

Первая часть - цифровая подпись, вторая - имя пакета

* @param packageName host package name (as reported by {@link PackageManager})
* @param digest      SHA256 digest of the DER encoding of the allow-listed host
*                    certificate, formatted as 32 lowercase 2 digits  hexadecimal values
*                    separated by colon (e.g.:"000102030405060708090a0b0c0d0e0f101112131415
*                    161718191a1b1c1d1e1f"). When using
*                    <a href="https://developer.android.com/about/versions/pie/android-9.0#apk-key-rotation">signature
*                    rotation</a>, this digest should correspond to the initial signing
*                    certificate

Только сейчас обратил внимание на это:

Application developers are expected to also allow connections from known hosts which don't hold the aforementioned permission (for example, Android Auto and Android Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts.

Но я не смог найти никакого общего списка хостов или хотя бы какого-то упоминания о том, что люди добавляли в этот список еще что-то. Поэтому, наверное, можно на это не обращать внимания. По крайней мере пока что.

В `androidx.car.app.R.array.hosts_allowlist_sample`? Массив таких строк: `fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf,com.google.android.projection.gearhead` Первая часть - цифровая подпись, вторая - имя пакета ```java * @param packageName host package name (as reported by {@link PackageManager}) * @param digest SHA256 digest of the DER encoding of the allow-listed host * certificate, formatted as 32 lowercase 2 digits hexadecimal values * separated by colon (e.g.:"000102030405060708090a0b0c0d0e0f101112131415 * 161718191a1b1c1d1e1f"). When using * <a href="https://developer.android.com/about/versions/pie/android-9.0#apk-key-rotation">signature * rotation</a>, this digest should correspond to the initial signing * certificate ``` Только сейчас обратил внимание на это: >Application developers are expected to also allow connections from known hosts which don't hold the aforementioned permission (for example, Android Auto and Android Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts. Но я не смог найти никакого общего списка хостов или хотя бы какого-то упоминания о том, что люди добавляли в этот список еще что-то. Поэтому, наверное, можно на это не обращать внимания. По крайней мере пока что.
biodranik commented 2022-12-11 22:03:03 +00:00 (Migrated from github.com)
Review
  1. Полный список пакетов в том файле можно выложить сюда или на pastebin?
  2. Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы.
1. Полный список пакетов в том файле можно выложить сюда или на pastebin? 2. Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы.
Review
<string-array name="hosts_allowlist_sample" translatable="false">
   <item>fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf,
         com.google.android.projection.gearhead</item>
   <item>70811a3eacfd2e83e18da9bfede52df16ce91f2e69a44d21f18ab66991130771,
         com.google.android.projection.gearhead</item>
   <item>1975b2f17177bc89a5dff31f9e64a6cae281a53dc1d1d59b1d147fe1c82afa00,
         com.google.android.projection.gearhead</item>
   <item>c241ffbc8e287c4e9a4ad19632ba1b1351ad361d5177b7d7b29859bd2b7fc631,
         com.google.android.apps.automotive.templates.host</item>
   <item>dd66deaf312d8daec7adbe85a218ecc8c64f3b152f9b5998d5b29300c2623f61,
         com.google.android.apps.automotive.templates.host</item>
   <item>50e603d333c6049a37bd751375d08f3bd0abebd33facd30bd17b64b89658b421,
         com.google.android.apps.automotive.templates.host</item>
</string-array>
```xml <string-array name="hosts_allowlist_sample" translatable="false"> <item>fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf, com.google.android.projection.gearhead</item> <item>70811a3eacfd2e83e18da9bfede52df16ce91f2e69a44d21f18ab66991130771, com.google.android.projection.gearhead</item> <item>1975b2f17177bc89a5dff31f9e64a6cae281a53dc1d1d59b1d147fe1c82afa00, com.google.android.projection.gearhead</item> <item>c241ffbc8e287c4e9a4ad19632ba1b1351ad361d5177b7d7b29859bd2b7fc631, com.google.android.apps.automotive.templates.host</item> <item>dd66deaf312d8daec7adbe85a218ecc8c64f3b152f9b5998d5b29300c2623f61, com.google.android.apps.automotive.templates.host</item> <item>50e603d333c6049a37bd751375d08f3bd0abebd33facd30bd17b64b89658b421, com.google.android.apps.automotive.templates.host</item> </string-array> ```
Review

Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы.

Тут если что подразумевается API хоста, а не телефона

>Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы. Тут если что подразумевается API хоста, а не телефона
{
Review

What are potential security implications here?

What are potential security implications here?
Review

Код из примера. Объяснений, для чего это сделано, нигде не нашел

Ссылка на пример

Код из примера. Объяснений, для чего это сделано, нигде не нашел [Ссылка на пример](https://github.com/android/car-samples/blob/03440d5e974a060d0216b5e02a7fe3c46b7b9469/car_app_library/navigation/common/src/main/java/androidx/car/app/sample/navigation/common/car/NavigationCarAppService.java)
biodranik commented 2022-12-08 18:15:46 +00:00 (Migrated from github.com)
Review

У нас принято разбираться и писать только тот код, который мы чётко понимаем, для чего и зачем он нужен. И стараемся, чтобы было понятно другим, кто читает код, в т.ч. оставляя комментарии.

У нас принято разбираться и писать только тот код, который мы чётко понимаем, для чего и зачем он нужен. И стараемся, чтобы было понятно другим, кто читает код, в т.ч. оставляя комментарии.
Review

Вот такое объяснение в документации.

    /**
     * Returns the {@link HostValidator} this service will use to accept or reject host connections.
     *
     * <p>By default, the provided {@link HostValidator.Builder} would produce a validator that
     * only accepts connections from hosts holding
     * {@link HostValidator#TEMPLATE_RENDERER_PERMISSION} permission.
     *
     * <p>Application developers are expected to also allow connections from known hosts which
     * don't hold the aforementioned permission (for example, Android Auto and Android
     * Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts.
     *
     * <p>Refer to {@code androidx.car.app.R.array.hosts_allowlist_sample} to obtain a
     * list of package names and signatures that should be allow-listed by default.
     *
     * <p>It is also advised to allow connections from unknown hosts in debug builds to facilitate
     * debugging and testing.
     *
     * <p>Below is an example of this method implementation:
     *
     * <pre>
     * &#64;Override
     * &#64;NonNull
     * public HostValidator createHostValidator() {
     *     if ((getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0) {
     *         return HostValidator.ALLOW_ALL_HOSTS_VALIDATOR;
     *     } else {
     *         return new HostValidator.Builder(context)
     *             .addAllowedHosts(androidx.car.app.R.array.hosts_allowlist_sample)
     *             .build();
     *     }
     * }
     * </pre>
     */
Вот такое объяснение в документации. ```java /** * Returns the {@link HostValidator} this service will use to accept or reject host connections. * * <p>By default, the provided {@link HostValidator.Builder} would produce a validator that * only accepts connections from hosts holding * {@link HostValidator#TEMPLATE_RENDERER_PERMISSION} permission. * * <p>Application developers are expected to also allow connections from known hosts which * don't hold the aforementioned permission (for example, Android Auto and Android * Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts. * * <p>Refer to {@code androidx.car.app.R.array.hosts_allowlist_sample} to obtain a * list of package names and signatures that should be allow-listed by default. * * <p>It is also advised to allow connections from unknown hosts in debug builds to facilitate * debugging and testing. * * <p>Below is an example of this method implementation: * * <pre> * &#64;Override * &#64;NonNull * public HostValidator createHostValidator() { * if ((getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0) { * return HostValidator.ALLOW_ALL_HOSTS_VALIDATOR; * } else { * return new HostValidator.Builder(context) * .addAllowedHosts(androidx.car.app.R.array.hosts_allowlist_sample) * .build(); * } * } * </pre> */ ```
biodranik commented 2022-12-11 12:25:45 +00:00 (Migrated from github.com)
Review
  1. Так какие приложения перечислены в androidx.car.app.R.array.hosts_allowlist_sample ? Я так понял, для работы с апи <31 нам придётся их перечислить.
  2. Почему бы для отладки не сделать проще: if (BuildConfig.DEBUG) ?
  3. код может быть проще:
if ()
  return ...;
return ...;
1. Так какие приложения перечислены в androidx.car.app.R.array.hosts_allowlist_sample ? Я так понял, для работы с апи <31 нам придётся их перечислить. 2. Почему бы для отладки не сделать проще: if (BuildConfig.DEBUG) ? 3. код может быть проще: ``` if () return ...; return ...; ```
Review

Все не так. Почитал я, как работает HostValidator класс.

  • Он проверяет Host, т.е. магнитолу на которой запускается AA
  • Подключение к хосту разрешается в двух случаях
    • Либо хост указан в списке, который мы передаем
    • Либо хост имеет у себя android.car.permission.TEMPLATE_RENDERER

Поэтому я заменил R.array.car_hosts на androidx.car.app.R.array.hosts_allowlist_sample. Думаю, смысла держать свой список разрешенных хостов нет, а на warning можно закрыть глаза.

Warning:

The resource @array/hosts_allowlist_sample is marked as private in androidx.car.app:app:1.3.0-rc01

Все не так. Почитал я, как работает HostValidator класс. * Он проверяет Host, т.е. магнитолу на которой запускается AA * Подключение к хосту разрешается в двух случаях * Либо хост указан в списке, который мы передаем * Либо хост имеет у себя `android.car.permission.TEMPLATE_RENDERER` Поэтому я заменил `R.array.car_hosts` на `androidx.car.app.R.array.hosts_allowlist_sample`. Думаю, смысла держать свой список разрешенных хостов нет, а на warning можно закрыть глаза. Warning: >The resource @array/hosts_allowlist_sample is marked as private in androidx.car.app:app:1.3.0-rc01
biodranik commented 2022-12-11 21:13:37 +00:00 (Migrated from github.com)
Review

Так что именно в этом файле-то? )

Так что именно в этом файле-то? )
Review

В androidx.car.app.R.array.hosts_allowlist_sample?
Массив таких строк:
fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf,com.google.android.projection.gearhead

Первая часть - цифровая подпись, вторая - имя пакета

* @param packageName host package name (as reported by {@link PackageManager})
* @param digest      SHA256 digest of the DER encoding of the allow-listed host
*                    certificate, formatted as 32 lowercase 2 digits  hexadecimal values
*                    separated by colon (e.g.:"000102030405060708090a0b0c0d0e0f101112131415
*                    161718191a1b1c1d1e1f"). When using
*                    <a href="https://developer.android.com/about/versions/pie/android-9.0#apk-key-rotation">signature
*                    rotation</a>, this digest should correspond to the initial signing
*                    certificate

Только сейчас обратил внимание на это:

Application developers are expected to also allow connections from known hosts which don't hold the aforementioned permission (for example, Android Auto and Android Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts.

Но я не смог найти никакого общего списка хостов или хотя бы какого-то упоминания о том, что люди добавляли в этот список еще что-то. Поэтому, наверное, можно на это не обращать внимания. По крайней мере пока что.

В `androidx.car.app.R.array.hosts_allowlist_sample`? Массив таких строк: `fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf,com.google.android.projection.gearhead` Первая часть - цифровая подпись, вторая - имя пакета ```java * @param packageName host package name (as reported by {@link PackageManager}) * @param digest SHA256 digest of the DER encoding of the allow-listed host * certificate, formatted as 32 lowercase 2 digits hexadecimal values * separated by colon (e.g.:"000102030405060708090a0b0c0d0e0f101112131415 * 161718191a1b1c1d1e1f"). When using * <a href="https://developer.android.com/about/versions/pie/android-9.0#apk-key-rotation">signature * rotation</a>, this digest should correspond to the initial signing * certificate ``` Только сейчас обратил внимание на это: >Application developers are expected to also allow connections from known hosts which don't hold the aforementioned permission (for example, Android Auto and Android Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts. Но я не смог найти никакого общего списка хостов или хотя бы какого-то упоминания о том, что люди добавляли в этот список еще что-то. Поэтому, наверное, можно на это не обращать внимания. По крайней мере пока что.
biodranik commented 2022-12-11 22:03:03 +00:00 (Migrated from github.com)
Review
  1. Полный список пакетов в том файле можно выложить сюда или на pastebin?
  2. Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы.
1. Полный список пакетов в том файле можно выложить сюда или на pastebin? 2. Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы.
Review
<string-array name="hosts_allowlist_sample" translatable="false">
   <item>fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf,
         com.google.android.projection.gearhead</item>
   <item>70811a3eacfd2e83e18da9bfede52df16ce91f2e69a44d21f18ab66991130771,
         com.google.android.projection.gearhead</item>
   <item>1975b2f17177bc89a5dff31f9e64a6cae281a53dc1d1d59b1d147fe1c82afa00,
         com.google.android.projection.gearhead</item>
   <item>c241ffbc8e287c4e9a4ad19632ba1b1351ad361d5177b7d7b29859bd2b7fc631,
         com.google.android.apps.automotive.templates.host</item>
   <item>dd66deaf312d8daec7adbe85a218ecc8c64f3b152f9b5998d5b29300c2623f61,
         com.google.android.apps.automotive.templates.host</item>
   <item>50e603d333c6049a37bd751375d08f3bd0abebd33facd30bd17b64b89658b421,
         com.google.android.apps.automotive.templates.host</item>
</string-array>
```xml <string-array name="hosts_allowlist_sample" translatable="false"> <item>fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf, com.google.android.projection.gearhead</item> <item>70811a3eacfd2e83e18da9bfede52df16ce91f2e69a44d21f18ab66991130771, com.google.android.projection.gearhead</item> <item>1975b2f17177bc89a5dff31f9e64a6cae281a53dc1d1d59b1d147fe1c82afa00, com.google.android.projection.gearhead</item> <item>c241ffbc8e287c4e9a4ad19632ba1b1351ad361d5177b7d7b29859bd2b7fc631, com.google.android.apps.automotive.templates.host</item> <item>dd66deaf312d8daec7adbe85a218ecc8c64f3b152f9b5998d5b29300c2623f61, com.google.android.apps.automotive.templates.host</item> <item>50e603d333c6049a37bd751375d08f3bd0abebd33facd30bd17b64b89658b421, com.google.android.apps.automotive.templates.host</item> </string-array> ```
Review

Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы.

Тут если что подразумевается API хоста, а не телефона

>Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы. Тут если что подразумевается API хоста, а не телефона
@NonNull
Review

What are potential security implications here?

What are potential security implications here?
Review

Код из примера. Объяснений, для чего это сделано, нигде не нашел

Ссылка на пример

Код из примера. Объяснений, для чего это сделано, нигде не нашел [Ссылка на пример](https://github.com/android/car-samples/blob/03440d5e974a060d0216b5e02a7fe3c46b7b9469/car_app_library/navigation/common/src/main/java/androidx/car/app/sample/navigation/common/car/NavigationCarAppService.java)
biodranik commented 2022-12-08 18:15:46 +00:00 (Migrated from github.com)
Review

У нас принято разбираться и писать только тот код, который мы чётко понимаем, для чего и зачем он нужен. И стараемся, чтобы было понятно другим, кто читает код, в т.ч. оставляя комментарии.

У нас принято разбираться и писать только тот код, который мы чётко понимаем, для чего и зачем он нужен. И стараемся, чтобы было понятно другим, кто читает код, в т.ч. оставляя комментарии.
Review

Вот такое объяснение в документации.

    /**
     * Returns the {@link HostValidator} this service will use to accept or reject host connections.
     *
     * <p>By default, the provided {@link HostValidator.Builder} would produce a validator that
     * only accepts connections from hosts holding
     * {@link HostValidator#TEMPLATE_RENDERER_PERMISSION} permission.
     *
     * <p>Application developers are expected to also allow connections from known hosts which
     * don't hold the aforementioned permission (for example, Android Auto and Android
     * Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts.
     *
     * <p>Refer to {@code androidx.car.app.R.array.hosts_allowlist_sample} to obtain a
     * list of package names and signatures that should be allow-listed by default.
     *
     * <p>It is also advised to allow connections from unknown hosts in debug builds to facilitate
     * debugging and testing.
     *
     * <p>Below is an example of this method implementation:
     *
     * <pre>
     * &#64;Override
     * &#64;NonNull
     * public HostValidator createHostValidator() {
     *     if ((getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0) {
     *         return HostValidator.ALLOW_ALL_HOSTS_VALIDATOR;
     *     } else {
     *         return new HostValidator.Builder(context)
     *             .addAllowedHosts(androidx.car.app.R.array.hosts_allowlist_sample)
     *             .build();
     *     }
     * }
     * </pre>
     */
Вот такое объяснение в документации. ```java /** * Returns the {@link HostValidator} this service will use to accept or reject host connections. * * <p>By default, the provided {@link HostValidator.Builder} would produce a validator that * only accepts connections from hosts holding * {@link HostValidator#TEMPLATE_RENDERER_PERMISSION} permission. * * <p>Application developers are expected to also allow connections from known hosts which * don't hold the aforementioned permission (for example, Android Auto and Android * Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts. * * <p>Refer to {@code androidx.car.app.R.array.hosts_allowlist_sample} to obtain a * list of package names and signatures that should be allow-listed by default. * * <p>It is also advised to allow connections from unknown hosts in debug builds to facilitate * debugging and testing. * * <p>Below is an example of this method implementation: * * <pre> * &#64;Override * &#64;NonNull * public HostValidator createHostValidator() { * if ((getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0) { * return HostValidator.ALLOW_ALL_HOSTS_VALIDATOR; * } else { * return new HostValidator.Builder(context) * .addAllowedHosts(androidx.car.app.R.array.hosts_allowlist_sample) * .build(); * } * } * </pre> */ ```
biodranik commented 2022-12-11 12:25:45 +00:00 (Migrated from github.com)
Review
  1. Так какие приложения перечислены в androidx.car.app.R.array.hosts_allowlist_sample ? Я так понял, для работы с апи <31 нам придётся их перечислить.
  2. Почему бы для отладки не сделать проще: if (BuildConfig.DEBUG) ?
  3. код может быть проще:
if ()
  return ...;
return ...;
1. Так какие приложения перечислены в androidx.car.app.R.array.hosts_allowlist_sample ? Я так понял, для работы с апи <31 нам придётся их перечислить. 2. Почему бы для отладки не сделать проще: if (BuildConfig.DEBUG) ? 3. код может быть проще: ``` if () return ...; return ...; ```
Review

Все не так. Почитал я, как работает HostValidator класс.

  • Он проверяет Host, т.е. магнитолу на которой запускается AA
  • Подключение к хосту разрешается в двух случаях
    • Либо хост указан в списке, который мы передаем
    • Либо хост имеет у себя android.car.permission.TEMPLATE_RENDERER

Поэтому я заменил R.array.car_hosts на androidx.car.app.R.array.hosts_allowlist_sample. Думаю, смысла держать свой список разрешенных хостов нет, а на warning можно закрыть глаза.

Warning:

The resource @array/hosts_allowlist_sample is marked as private in androidx.car.app:app:1.3.0-rc01

Все не так. Почитал я, как работает HostValidator класс. * Он проверяет Host, т.е. магнитолу на которой запускается AA * Подключение к хосту разрешается в двух случаях * Либо хост указан в списке, который мы передаем * Либо хост имеет у себя `android.car.permission.TEMPLATE_RENDERER` Поэтому я заменил `R.array.car_hosts` на `androidx.car.app.R.array.hosts_allowlist_sample`. Думаю, смысла держать свой список разрешенных хостов нет, а на warning можно закрыть глаза. Warning: >The resource @array/hosts_allowlist_sample is marked as private in androidx.car.app:app:1.3.0-rc01
biodranik commented 2022-12-11 21:13:37 +00:00 (Migrated from github.com)
Review

Так что именно в этом файле-то? )

Так что именно в этом файле-то? )
Review

В androidx.car.app.R.array.hosts_allowlist_sample?
Массив таких строк:
fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf,com.google.android.projection.gearhead

Первая часть - цифровая подпись, вторая - имя пакета

* @param packageName host package name (as reported by {@link PackageManager})
* @param digest      SHA256 digest of the DER encoding of the allow-listed host
*                    certificate, formatted as 32 lowercase 2 digits  hexadecimal values
*                    separated by colon (e.g.:"000102030405060708090a0b0c0d0e0f101112131415
*                    161718191a1b1c1d1e1f"). When using
*                    <a href="https://developer.android.com/about/versions/pie/android-9.0#apk-key-rotation">signature
*                    rotation</a>, this digest should correspond to the initial signing
*                    certificate

Только сейчас обратил внимание на это:

Application developers are expected to also allow connections from known hosts which don't hold the aforementioned permission (for example, Android Auto and Android Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts.

Но я не смог найти никакого общего списка хостов или хотя бы какого-то упоминания о том, что люди добавляли в этот список еще что-то. Поэтому, наверное, можно на это не обращать внимания. По крайней мере пока что.

В `androidx.car.app.R.array.hosts_allowlist_sample`? Массив таких строк: `fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf,com.google.android.projection.gearhead` Первая часть - цифровая подпись, вторая - имя пакета ```java * @param packageName host package name (as reported by {@link PackageManager}) * @param digest SHA256 digest of the DER encoding of the allow-listed host * certificate, formatted as 32 lowercase 2 digits hexadecimal values * separated by colon (e.g.:"000102030405060708090a0b0c0d0e0f101112131415 * 161718191a1b1c1d1e1f"). When using * <a href="https://developer.android.com/about/versions/pie/android-9.0#apk-key-rotation">signature * rotation</a>, this digest should correspond to the initial signing * certificate ``` Только сейчас обратил внимание на это: >Application developers are expected to also allow connections from known hosts which don't hold the aforementioned permission (for example, Android Auto and Android Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts. Но я не смог найти никакого общего списка хостов или хотя бы какого-то упоминания о том, что люди добавляли в этот список еще что-то. Поэтому, наверное, можно на это не обращать внимания. По крайней мере пока что.
biodranik commented 2022-12-11 22:03:03 +00:00 (Migrated from github.com)
Review
  1. Полный список пакетов в том файле можно выложить сюда или на pastebin?
  2. Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы.
1. Полный список пакетов в том файле можно выложить сюда или на pastebin? 2. Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы.
Review
<string-array name="hosts_allowlist_sample" translatable="false">
   <item>fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf,
         com.google.android.projection.gearhead</item>
   <item>70811a3eacfd2e83e18da9bfede52df16ce91f2e69a44d21f18ab66991130771,
         com.google.android.projection.gearhead</item>
   <item>1975b2f17177bc89a5dff31f9e64a6cae281a53dc1d1d59b1d147fe1c82afa00,
         com.google.android.projection.gearhead</item>
   <item>c241ffbc8e287c4e9a4ad19632ba1b1351ad361d5177b7d7b29859bd2b7fc631,
         com.google.android.apps.automotive.templates.host</item>
   <item>dd66deaf312d8daec7adbe85a218ecc8c64f3b152f9b5998d5b29300c2623f61,
         com.google.android.apps.automotive.templates.host</item>
   <item>50e603d333c6049a37bd751375d08f3bd0abebd33facd30bd17b64b89658b421,
         com.google.android.apps.automotive.templates.host</item>
</string-array>
```xml <string-array name="hosts_allowlist_sample" translatable="false"> <item>fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf, com.google.android.projection.gearhead</item> <item>70811a3eacfd2e83e18da9bfede52df16ce91f2e69a44d21f18ab66991130771, com.google.android.projection.gearhead</item> <item>1975b2f17177bc89a5dff31f9e64a6cae281a53dc1d1d59b1d147fe1c82afa00, com.google.android.projection.gearhead</item> <item>c241ffbc8e287c4e9a4ad19632ba1b1351ad361d5177b7d7b29859bd2b7fc631, com.google.android.apps.automotive.templates.host</item> <item>dd66deaf312d8daec7adbe85a218ecc8c64f3b152f9b5998d5b29300c2623f61, com.google.android.apps.automotive.templates.host</item> <item>50e603d333c6049a37bd751375d08f3bd0abebd33facd30bd17b64b89658b421, com.google.android.apps.automotive.templates.host</item> </string-array> ```
Review

Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы.

Тут если что подразумевается API хоста, а не телефона

>Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы. Тут если что подразумевается API хоста, а не телефона
@Override
Review

What are potential security implications here?

What are potential security implications here?
Review

Код из примера. Объяснений, для чего это сделано, нигде не нашел

Ссылка на пример

Код из примера. Объяснений, для чего это сделано, нигде не нашел [Ссылка на пример](https://github.com/android/car-samples/blob/03440d5e974a060d0216b5e02a7fe3c46b7b9469/car_app_library/navigation/common/src/main/java/androidx/car/app/sample/navigation/common/car/NavigationCarAppService.java)
biodranik commented 2022-12-08 18:15:46 +00:00 (Migrated from github.com)
Review

У нас принято разбираться и писать только тот код, который мы чётко понимаем, для чего и зачем он нужен. И стараемся, чтобы было понятно другим, кто читает код, в т.ч. оставляя комментарии.

У нас принято разбираться и писать только тот код, который мы чётко понимаем, для чего и зачем он нужен. И стараемся, чтобы было понятно другим, кто читает код, в т.ч. оставляя комментарии.
Review

Вот такое объяснение в документации.

    /**
     * Returns the {@link HostValidator} this service will use to accept or reject host connections.
     *
     * <p>By default, the provided {@link HostValidator.Builder} would produce a validator that
     * only accepts connections from hosts holding
     * {@link HostValidator#TEMPLATE_RENDERER_PERMISSION} permission.
     *
     * <p>Application developers are expected to also allow connections from known hosts which
     * don't hold the aforementioned permission (for example, Android Auto and Android
     * Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts.
     *
     * <p>Refer to {@code androidx.car.app.R.array.hosts_allowlist_sample} to obtain a
     * list of package names and signatures that should be allow-listed by default.
     *
     * <p>It is also advised to allow connections from unknown hosts in debug builds to facilitate
     * debugging and testing.
     *
     * <p>Below is an example of this method implementation:
     *
     * <pre>
     * &#64;Override
     * &#64;NonNull
     * public HostValidator createHostValidator() {
     *     if ((getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0) {
     *         return HostValidator.ALLOW_ALL_HOSTS_VALIDATOR;
     *     } else {
     *         return new HostValidator.Builder(context)
     *             .addAllowedHosts(androidx.car.app.R.array.hosts_allowlist_sample)
     *             .build();
     *     }
     * }
     * </pre>
     */
Вот такое объяснение в документации. ```java /** * Returns the {@link HostValidator} this service will use to accept or reject host connections. * * <p>By default, the provided {@link HostValidator.Builder} would produce a validator that * only accepts connections from hosts holding * {@link HostValidator#TEMPLATE_RENDERER_PERMISSION} permission. * * <p>Application developers are expected to also allow connections from known hosts which * don't hold the aforementioned permission (for example, Android Auto and Android * Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts. * * <p>Refer to {@code androidx.car.app.R.array.hosts_allowlist_sample} to obtain a * list of package names and signatures that should be allow-listed by default. * * <p>It is also advised to allow connections from unknown hosts in debug builds to facilitate * debugging and testing. * * <p>Below is an example of this method implementation: * * <pre> * &#64;Override * &#64;NonNull * public HostValidator createHostValidator() { * if ((getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0) { * return HostValidator.ALLOW_ALL_HOSTS_VALIDATOR; * } else { * return new HostValidator.Builder(context) * .addAllowedHosts(androidx.car.app.R.array.hosts_allowlist_sample) * .build(); * } * } * </pre> */ ```
biodranik commented 2022-12-11 12:25:45 +00:00 (Migrated from github.com)
Review
  1. Так какие приложения перечислены в androidx.car.app.R.array.hosts_allowlist_sample ? Я так понял, для работы с апи <31 нам придётся их перечислить.
  2. Почему бы для отладки не сделать проще: if (BuildConfig.DEBUG) ?
  3. код может быть проще:
if ()
  return ...;
return ...;
1. Так какие приложения перечислены в androidx.car.app.R.array.hosts_allowlist_sample ? Я так понял, для работы с апи <31 нам придётся их перечислить. 2. Почему бы для отладки не сделать проще: if (BuildConfig.DEBUG) ? 3. код может быть проще: ``` if () return ...; return ...; ```
Review

Все не так. Почитал я, как работает HostValidator класс.

  • Он проверяет Host, т.е. магнитолу на которой запускается AA
  • Подключение к хосту разрешается в двух случаях
    • Либо хост указан в списке, который мы передаем
    • Либо хост имеет у себя android.car.permission.TEMPLATE_RENDERER

Поэтому я заменил R.array.car_hosts на androidx.car.app.R.array.hosts_allowlist_sample. Думаю, смысла держать свой список разрешенных хостов нет, а на warning можно закрыть глаза.

Warning:

The resource @array/hosts_allowlist_sample is marked as private in androidx.car.app:app:1.3.0-rc01

Все не так. Почитал я, как работает HostValidator класс. * Он проверяет Host, т.е. магнитолу на которой запускается AA * Подключение к хосту разрешается в двух случаях * Либо хост указан в списке, который мы передаем * Либо хост имеет у себя `android.car.permission.TEMPLATE_RENDERER` Поэтому я заменил `R.array.car_hosts` на `androidx.car.app.R.array.hosts_allowlist_sample`. Думаю, смысла держать свой список разрешенных хостов нет, а на warning можно закрыть глаза. Warning: >The resource @array/hosts_allowlist_sample is marked as private in androidx.car.app:app:1.3.0-rc01
biodranik commented 2022-12-11 21:13:37 +00:00 (Migrated from github.com)
Review

Так что именно в этом файле-то? )

Так что именно в этом файле-то? )
Review

В androidx.car.app.R.array.hosts_allowlist_sample?
Массив таких строк:
fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf,com.google.android.projection.gearhead

Первая часть - цифровая подпись, вторая - имя пакета

* @param packageName host package name (as reported by {@link PackageManager})
* @param digest      SHA256 digest of the DER encoding of the allow-listed host
*                    certificate, formatted as 32 lowercase 2 digits  hexadecimal values
*                    separated by colon (e.g.:"000102030405060708090a0b0c0d0e0f101112131415
*                    161718191a1b1c1d1e1f"). When using
*                    <a href="https://developer.android.com/about/versions/pie/android-9.0#apk-key-rotation">signature
*                    rotation</a>, this digest should correspond to the initial signing
*                    certificate

Только сейчас обратил внимание на это:

Application developers are expected to also allow connections from known hosts which don't hold the aforementioned permission (for example, Android Auto and Android Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts.

Но я не смог найти никакого общего списка хостов или хотя бы какого-то упоминания о том, что люди добавляли в этот список еще что-то. Поэтому, наверное, можно на это не обращать внимания. По крайней мере пока что.

В `androidx.car.app.R.array.hosts_allowlist_sample`? Массив таких строк: `fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf,com.google.android.projection.gearhead` Первая часть - цифровая подпись, вторая - имя пакета ```java * @param packageName host package name (as reported by {@link PackageManager}) * @param digest SHA256 digest of the DER encoding of the allow-listed host * certificate, formatted as 32 lowercase 2 digits hexadecimal values * separated by colon (e.g.:"000102030405060708090a0b0c0d0e0f101112131415 * 161718191a1b1c1d1e1f"). When using * <a href="https://developer.android.com/about/versions/pie/android-9.0#apk-key-rotation">signature * rotation</a>, this digest should correspond to the initial signing * certificate ``` Только сейчас обратил внимание на это: >Application developers are expected to also allow connections from known hosts which don't hold the aforementioned permission (for example, Android Auto and Android Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts. Но я не смог найти никакого общего списка хостов или хотя бы какого-то упоминания о том, что люди добавляли в этот список еще что-то. Поэтому, наверное, можно на это не обращать внимания. По крайней мере пока что.
biodranik commented 2022-12-11 22:03:03 +00:00 (Migrated from github.com)
Review
  1. Полный список пакетов в том файле можно выложить сюда или на pastebin?
  2. Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы.
1. Полный список пакетов в том файле можно выложить сюда или на pastebin? 2. Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы.
Review
<string-array name="hosts_allowlist_sample" translatable="false">
   <item>fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf,
         com.google.android.projection.gearhead</item>
   <item>70811a3eacfd2e83e18da9bfede52df16ce91f2e69a44d21f18ab66991130771,
         com.google.android.projection.gearhead</item>
   <item>1975b2f17177bc89a5dff31f9e64a6cae281a53dc1d1d59b1d147fe1c82afa00,
         com.google.android.projection.gearhead</item>
   <item>c241ffbc8e287c4e9a4ad19632ba1b1351ad361d5177b7d7b29859bd2b7fc631,
         com.google.android.apps.automotive.templates.host</item>
   <item>dd66deaf312d8daec7adbe85a218ecc8c64f3b152f9b5998d5b29300c2623f61,
         com.google.android.apps.automotive.templates.host</item>
   <item>50e603d333c6049a37bd751375d08f3bd0abebd33facd30bd17b64b89658b421,
         com.google.android.apps.automotive.templates.host</item>
</string-array>
```xml <string-array name="hosts_allowlist_sample" translatable="false"> <item>fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf, com.google.android.projection.gearhead</item> <item>70811a3eacfd2e83e18da9bfede52df16ce91f2e69a44d21f18ab66991130771, com.google.android.projection.gearhead</item> <item>1975b2f17177bc89a5dff31f9e64a6cae281a53dc1d1d59b1d147fe1c82afa00, com.google.android.projection.gearhead</item> <item>c241ffbc8e287c4e9a4ad19632ba1b1351ad361d5177b7d7b29859bd2b7fc631, com.google.android.apps.automotive.templates.host</item> <item>dd66deaf312d8daec7adbe85a218ecc8c64f3b152f9b5998d5b29300c2623f61, com.google.android.apps.automotive.templates.host</item> <item>50e603d333c6049a37bd751375d08f3bd0abebd33facd30bd17b64b89658b421, com.google.android.apps.automotive.templates.host</item> </string-array> ```
Review

Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы.

Тут если что подразумевается API хоста, а не телефона

>Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы. Тут если что подразумевается API хоста, а не телефона
public HostValidator createHostValidator()
Review

What are potential security implications here?

What are potential security implications here?
Review

Код из примера. Объяснений, для чего это сделано, нигде не нашел

Ссылка на пример

Код из примера. Объяснений, для чего это сделано, нигде не нашел [Ссылка на пример](https://github.com/android/car-samples/blob/03440d5e974a060d0216b5e02a7fe3c46b7b9469/car_app_library/navigation/common/src/main/java/androidx/car/app/sample/navigation/common/car/NavigationCarAppService.java)
biodranik commented 2022-12-08 18:15:46 +00:00 (Migrated from github.com)
Review

У нас принято разбираться и писать только тот код, который мы чётко понимаем, для чего и зачем он нужен. И стараемся, чтобы было понятно другим, кто читает код, в т.ч. оставляя комментарии.

У нас принято разбираться и писать только тот код, который мы чётко понимаем, для чего и зачем он нужен. И стараемся, чтобы было понятно другим, кто читает код, в т.ч. оставляя комментарии.
Review

Вот такое объяснение в документации.

    /**
     * Returns the {@link HostValidator} this service will use to accept or reject host connections.
     *
     * <p>By default, the provided {@link HostValidator.Builder} would produce a validator that
     * only accepts connections from hosts holding
     * {@link HostValidator#TEMPLATE_RENDERER_PERMISSION} permission.
     *
     * <p>Application developers are expected to also allow connections from known hosts which
     * don't hold the aforementioned permission (for example, Android Auto and Android
     * Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts.
     *
     * <p>Refer to {@code androidx.car.app.R.array.hosts_allowlist_sample} to obtain a
     * list of package names and signatures that should be allow-listed by default.
     *
     * <p>It is also advised to allow connections from unknown hosts in debug builds to facilitate
     * debugging and testing.
     *
     * <p>Below is an example of this method implementation:
     *
     * <pre>
     * &#64;Override
     * &#64;NonNull
     * public HostValidator createHostValidator() {
     *     if ((getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0) {
     *         return HostValidator.ALLOW_ALL_HOSTS_VALIDATOR;
     *     } else {
     *         return new HostValidator.Builder(context)
     *             .addAllowedHosts(androidx.car.app.R.array.hosts_allowlist_sample)
     *             .build();
     *     }
     * }
     * </pre>
     */
Вот такое объяснение в документации. ```java /** * Returns the {@link HostValidator} this service will use to accept or reject host connections. * * <p>By default, the provided {@link HostValidator.Builder} would produce a validator that * only accepts connections from hosts holding * {@link HostValidator#TEMPLATE_RENDERER_PERMISSION} permission. * * <p>Application developers are expected to also allow connections from known hosts which * don't hold the aforementioned permission (for example, Android Auto and Android * Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts. * * <p>Refer to {@code androidx.car.app.R.array.hosts_allowlist_sample} to obtain a * list of package names and signatures that should be allow-listed by default. * * <p>It is also advised to allow connections from unknown hosts in debug builds to facilitate * debugging and testing. * * <p>Below is an example of this method implementation: * * <pre> * &#64;Override * &#64;NonNull * public HostValidator createHostValidator() { * if ((getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0) { * return HostValidator.ALLOW_ALL_HOSTS_VALIDATOR; * } else { * return new HostValidator.Builder(context) * .addAllowedHosts(androidx.car.app.R.array.hosts_allowlist_sample) * .build(); * } * } * </pre> */ ```
biodranik commented 2022-12-11 12:25:45 +00:00 (Migrated from github.com)
Review
  1. Так какие приложения перечислены в androidx.car.app.R.array.hosts_allowlist_sample ? Я так понял, для работы с апи <31 нам придётся их перечислить.
  2. Почему бы для отладки не сделать проще: if (BuildConfig.DEBUG) ?
  3. код может быть проще:
if ()
  return ...;
return ...;
1. Так какие приложения перечислены в androidx.car.app.R.array.hosts_allowlist_sample ? Я так понял, для работы с апи <31 нам придётся их перечислить. 2. Почему бы для отладки не сделать проще: if (BuildConfig.DEBUG) ? 3. код может быть проще: ``` if () return ...; return ...; ```
Review

Все не так. Почитал я, как работает HostValidator класс.

  • Он проверяет Host, т.е. магнитолу на которой запускается AA
  • Подключение к хосту разрешается в двух случаях
    • Либо хост указан в списке, который мы передаем
    • Либо хост имеет у себя android.car.permission.TEMPLATE_RENDERER

Поэтому я заменил R.array.car_hosts на androidx.car.app.R.array.hosts_allowlist_sample. Думаю, смысла держать свой список разрешенных хостов нет, а на warning можно закрыть глаза.

Warning:

The resource @array/hosts_allowlist_sample is marked as private in androidx.car.app:app:1.3.0-rc01

Все не так. Почитал я, как работает HostValidator класс. * Он проверяет Host, т.е. магнитолу на которой запускается AA * Подключение к хосту разрешается в двух случаях * Либо хост указан в списке, который мы передаем * Либо хост имеет у себя `android.car.permission.TEMPLATE_RENDERER` Поэтому я заменил `R.array.car_hosts` на `androidx.car.app.R.array.hosts_allowlist_sample`. Думаю, смысла держать свой список разрешенных хостов нет, а на warning можно закрыть глаза. Warning: >The resource @array/hosts_allowlist_sample is marked as private in androidx.car.app:app:1.3.0-rc01
biodranik commented 2022-12-11 21:13:37 +00:00 (Migrated from github.com)
Review

Так что именно в этом файле-то? )

Так что именно в этом файле-то? )
Review

В androidx.car.app.R.array.hosts_allowlist_sample?
Массив таких строк:
fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf,com.google.android.projection.gearhead

Первая часть - цифровая подпись, вторая - имя пакета

* @param packageName host package name (as reported by {@link PackageManager})
* @param digest      SHA256 digest of the DER encoding of the allow-listed host
*                    certificate, formatted as 32 lowercase 2 digits  hexadecimal values
*                    separated by colon (e.g.:"000102030405060708090a0b0c0d0e0f101112131415
*                    161718191a1b1c1d1e1f"). When using
*                    <a href="https://developer.android.com/about/versions/pie/android-9.0#apk-key-rotation">signature
*                    rotation</a>, this digest should correspond to the initial signing
*                    certificate

Только сейчас обратил внимание на это:

Application developers are expected to also allow connections from known hosts which don't hold the aforementioned permission (for example, Android Auto and Android Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts.

Но я не смог найти никакого общего списка хостов или хотя бы какого-то упоминания о том, что люди добавляли в этот список еще что-то. Поэтому, наверное, можно на это не обращать внимания. По крайней мере пока что.

В `androidx.car.app.R.array.hosts_allowlist_sample`? Массив таких строк: `fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf,com.google.android.projection.gearhead` Первая часть - цифровая подпись, вторая - имя пакета ```java * @param packageName host package name (as reported by {@link PackageManager}) * @param digest SHA256 digest of the DER encoding of the allow-listed host * certificate, formatted as 32 lowercase 2 digits hexadecimal values * separated by colon (e.g.:"000102030405060708090a0b0c0d0e0f101112131415 * 161718191a1b1c1d1e1f"). When using * <a href="https://developer.android.com/about/versions/pie/android-9.0#apk-key-rotation">signature * rotation</a>, this digest should correspond to the initial signing * certificate ``` Только сейчас обратил внимание на это: >Application developers are expected to also allow connections from known hosts which don't hold the aforementioned permission (for example, Android Auto and Android Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts. Но я не смог найти никакого общего списка хостов или хотя бы какого-то упоминания о том, что люди добавляли в этот список еще что-то. Поэтому, наверное, можно на это не обращать внимания. По крайней мере пока что.
biodranik commented 2022-12-11 22:03:03 +00:00 (Migrated from github.com)
Review
  1. Полный список пакетов в том файле можно выложить сюда или на pastebin?
  2. Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы.
1. Полный список пакетов в том файле можно выложить сюда или на pastebin? 2. Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы.
Review
<string-array name="hosts_allowlist_sample" translatable="false">
   <item>fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf,
         com.google.android.projection.gearhead</item>
   <item>70811a3eacfd2e83e18da9bfede52df16ce91f2e69a44d21f18ab66991130771,
         com.google.android.projection.gearhead</item>
   <item>1975b2f17177bc89a5dff31f9e64a6cae281a53dc1d1d59b1d147fe1c82afa00,
         com.google.android.projection.gearhead</item>
   <item>c241ffbc8e287c4e9a4ad19632ba1b1351ad361d5177b7d7b29859bd2b7fc631,
         com.google.android.apps.automotive.templates.host</item>
   <item>dd66deaf312d8daec7adbe85a218ecc8c64f3b152f9b5998d5b29300c2623f61,
         com.google.android.apps.automotive.templates.host</item>
   <item>50e603d333c6049a37bd751375d08f3bd0abebd33facd30bd17b64b89658b421,
         com.google.android.apps.automotive.templates.host</item>
</string-array>
```xml <string-array name="hosts_allowlist_sample" translatable="false"> <item>fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf, com.google.android.projection.gearhead</item> <item>70811a3eacfd2e83e18da9bfede52df16ce91f2e69a44d21f18ab66991130771, com.google.android.projection.gearhead</item> <item>1975b2f17177bc89a5dff31f9e64a6cae281a53dc1d1d59b1d147fe1c82afa00, com.google.android.projection.gearhead</item> <item>c241ffbc8e287c4e9a4ad19632ba1b1351ad361d5177b7d7b29859bd2b7fc631, com.google.android.apps.automotive.templates.host</item> <item>dd66deaf312d8daec7adbe85a218ecc8c64f3b152f9b5998d5b29300c2623f61, com.google.android.apps.automotive.templates.host</item> <item>50e603d333c6049a37bd751375d08f3bd0abebd33facd30bd17b64b89658b421, com.google.android.apps.automotive.templates.host</item> </string-array> ```
Review

Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы.

Тут если что подразумевается API хоста, а не телефона

>Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы. Тут если что подразумевается API хоста, а не телефона
{
Review

What are potential security implications here?

What are potential security implications here?
Review

Код из примера. Объяснений, для чего это сделано, нигде не нашел

Ссылка на пример

Код из примера. Объяснений, для чего это сделано, нигде не нашел [Ссылка на пример](https://github.com/android/car-samples/blob/03440d5e974a060d0216b5e02a7fe3c46b7b9469/car_app_library/navigation/common/src/main/java/androidx/car/app/sample/navigation/common/car/NavigationCarAppService.java)
biodranik commented 2022-12-08 18:15:46 +00:00 (Migrated from github.com)
Review

У нас принято разбираться и писать только тот код, который мы чётко понимаем, для чего и зачем он нужен. И стараемся, чтобы было понятно другим, кто читает код, в т.ч. оставляя комментарии.

У нас принято разбираться и писать только тот код, который мы чётко понимаем, для чего и зачем он нужен. И стараемся, чтобы было понятно другим, кто читает код, в т.ч. оставляя комментарии.
Review

Вот такое объяснение в документации.

    /**
     * Returns the {@link HostValidator} this service will use to accept or reject host connections.
     *
     * <p>By default, the provided {@link HostValidator.Builder} would produce a validator that
     * only accepts connections from hosts holding
     * {@link HostValidator#TEMPLATE_RENDERER_PERMISSION} permission.
     *
     * <p>Application developers are expected to also allow connections from known hosts which
     * don't hold the aforementioned permission (for example, Android Auto and Android
     * Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts.
     *
     * <p>Refer to {@code androidx.car.app.R.array.hosts_allowlist_sample} to obtain a
     * list of package names and signatures that should be allow-listed by default.
     *
     * <p>It is also advised to allow connections from unknown hosts in debug builds to facilitate
     * debugging and testing.
     *
     * <p>Below is an example of this method implementation:
     *
     * <pre>
     * &#64;Override
     * &#64;NonNull
     * public HostValidator createHostValidator() {
     *     if ((getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0) {
     *         return HostValidator.ALLOW_ALL_HOSTS_VALIDATOR;
     *     } else {
     *         return new HostValidator.Builder(context)
     *             .addAllowedHosts(androidx.car.app.R.array.hosts_allowlist_sample)
     *             .build();
     *     }
     * }
     * </pre>
     */
Вот такое объяснение в документации. ```java /** * Returns the {@link HostValidator} this service will use to accept or reject host connections. * * <p>By default, the provided {@link HostValidator.Builder} would produce a validator that * only accepts connections from hosts holding * {@link HostValidator#TEMPLATE_RENDERER_PERMISSION} permission. * * <p>Application developers are expected to also allow connections from known hosts which * don't hold the aforementioned permission (for example, Android Auto and Android * Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts. * * <p>Refer to {@code androidx.car.app.R.array.hosts_allowlist_sample} to obtain a * list of package names and signatures that should be allow-listed by default. * * <p>It is also advised to allow connections from unknown hosts in debug builds to facilitate * debugging and testing. * * <p>Below is an example of this method implementation: * * <pre> * &#64;Override * &#64;NonNull * public HostValidator createHostValidator() { * if ((getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0) { * return HostValidator.ALLOW_ALL_HOSTS_VALIDATOR; * } else { * return new HostValidator.Builder(context) * .addAllowedHosts(androidx.car.app.R.array.hosts_allowlist_sample) * .build(); * } * } * </pre> */ ```
biodranik commented 2022-12-11 12:25:45 +00:00 (Migrated from github.com)
Review
  1. Так какие приложения перечислены в androidx.car.app.R.array.hosts_allowlist_sample ? Я так понял, для работы с апи <31 нам придётся их перечислить.
  2. Почему бы для отладки не сделать проще: if (BuildConfig.DEBUG) ?
  3. код может быть проще:
if ()
  return ...;
return ...;
1. Так какие приложения перечислены в androidx.car.app.R.array.hosts_allowlist_sample ? Я так понял, для работы с апи <31 нам придётся их перечислить. 2. Почему бы для отладки не сделать проще: if (BuildConfig.DEBUG) ? 3. код может быть проще: ``` if () return ...; return ...; ```
Review

Все не так. Почитал я, как работает HostValidator класс.

  • Он проверяет Host, т.е. магнитолу на которой запускается AA
  • Подключение к хосту разрешается в двух случаях
    • Либо хост указан в списке, который мы передаем
    • Либо хост имеет у себя android.car.permission.TEMPLATE_RENDERER

Поэтому я заменил R.array.car_hosts на androidx.car.app.R.array.hosts_allowlist_sample. Думаю, смысла держать свой список разрешенных хостов нет, а на warning можно закрыть глаза.

Warning:

The resource @array/hosts_allowlist_sample is marked as private in androidx.car.app:app:1.3.0-rc01

Все не так. Почитал я, как работает HostValidator класс. * Он проверяет Host, т.е. магнитолу на которой запускается AA * Подключение к хосту разрешается в двух случаях * Либо хост указан в списке, который мы передаем * Либо хост имеет у себя `android.car.permission.TEMPLATE_RENDERER` Поэтому я заменил `R.array.car_hosts` на `androidx.car.app.R.array.hosts_allowlist_sample`. Думаю, смысла держать свой список разрешенных хостов нет, а на warning можно закрыть глаза. Warning: >The resource @array/hosts_allowlist_sample is marked as private in androidx.car.app:app:1.3.0-rc01
biodranik commented 2022-12-11 21:13:37 +00:00 (Migrated from github.com)
Review

Так что именно в этом файле-то? )

Так что именно в этом файле-то? )
Review

В androidx.car.app.R.array.hosts_allowlist_sample?
Массив таких строк:
fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf,com.google.android.projection.gearhead

Первая часть - цифровая подпись, вторая - имя пакета

* @param packageName host package name (as reported by {@link PackageManager})
* @param digest      SHA256 digest of the DER encoding of the allow-listed host
*                    certificate, formatted as 32 lowercase 2 digits  hexadecimal values
*                    separated by colon (e.g.:"000102030405060708090a0b0c0d0e0f101112131415
*                    161718191a1b1c1d1e1f"). When using
*                    <a href="https://developer.android.com/about/versions/pie/android-9.0#apk-key-rotation">signature
*                    rotation</a>, this digest should correspond to the initial signing
*                    certificate

Только сейчас обратил внимание на это:

Application developers are expected to also allow connections from known hosts which don't hold the aforementioned permission (for example, Android Auto and Android Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts.

Но я не смог найти никакого общего списка хостов или хотя бы какого-то упоминания о том, что люди добавляли в этот список еще что-то. Поэтому, наверное, можно на это не обращать внимания. По крайней мере пока что.

В `androidx.car.app.R.array.hosts_allowlist_sample`? Массив таких строк: `fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf,com.google.android.projection.gearhead` Первая часть - цифровая подпись, вторая - имя пакета ```java * @param packageName host package name (as reported by {@link PackageManager}) * @param digest SHA256 digest of the DER encoding of the allow-listed host * certificate, formatted as 32 lowercase 2 digits hexadecimal values * separated by colon (e.g.:"000102030405060708090a0b0c0d0e0f101112131415 * 161718191a1b1c1d1e1f"). When using * <a href="https://developer.android.com/about/versions/pie/android-9.0#apk-key-rotation">signature * rotation</a>, this digest should correspond to the initial signing * certificate ``` Только сейчас обратил внимание на это: >Application developers are expected to also allow connections from known hosts which don't hold the aforementioned permission (for example, Android Auto and Android Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts. Но я не смог найти никакого общего списка хостов или хотя бы какого-то упоминания о том, что люди добавляли в этот список еще что-то. Поэтому, наверное, можно на это не обращать внимания. По крайней мере пока что.
biodranik commented 2022-12-11 22:03:03 +00:00 (Migrated from github.com)
Review
  1. Полный список пакетов в том файле можно выложить сюда или на pastebin?
  2. Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы.
1. Полный список пакетов в том файле можно выложить сюда или на pastebin? 2. Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы.
Review
<string-array name="hosts_allowlist_sample" translatable="false">
   <item>fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf,
         com.google.android.projection.gearhead</item>
   <item>70811a3eacfd2e83e18da9bfede52df16ce91f2e69a44d21f18ab66991130771,
         com.google.android.projection.gearhead</item>
   <item>1975b2f17177bc89a5dff31f9e64a6cae281a53dc1d1d59b1d147fe1c82afa00,
         com.google.android.projection.gearhead</item>
   <item>c241ffbc8e287c4e9a4ad19632ba1b1351ad361d5177b7d7b29859bd2b7fc631,
         com.google.android.apps.automotive.templates.host</item>
   <item>dd66deaf312d8daec7adbe85a218ecc8c64f3b152f9b5998d5b29300c2623f61,
         com.google.android.apps.automotive.templates.host</item>
   <item>50e603d333c6049a37bd751375d08f3bd0abebd33facd30bd17b64b89658b421,
         com.google.android.apps.automotive.templates.host</item>
</string-array>
```xml <string-array name="hosts_allowlist_sample" translatable="false"> <item>fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf, com.google.android.projection.gearhead</item> <item>70811a3eacfd2e83e18da9bfede52df16ce91f2e69a44d21f18ab66991130771, com.google.android.projection.gearhead</item> <item>1975b2f17177bc89a5dff31f9e64a6cae281a53dc1d1d59b1d147fe1c82afa00, com.google.android.projection.gearhead</item> <item>c241ffbc8e287c4e9a4ad19632ba1b1351ad361d5177b7d7b29859bd2b7fc631, com.google.android.apps.automotive.templates.host</item> <item>dd66deaf312d8daec7adbe85a218ecc8c64f3b152f9b5998d5b29300c2623f61, com.google.android.apps.automotive.templates.host</item> <item>50e603d333c6049a37bd751375d08f3bd0abebd33facd30bd17b64b89658b421, com.google.android.apps.automotive.templates.host</item> </string-array> ```
Review

Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы.

Тут если что подразумевается API хоста, а не телефона

>Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы. Тут если что подразумевается API хоста, а не телефона
if (BuildConfig.DEBUG)
Review

What are potential security implications here?

What are potential security implications here?
Review

Код из примера. Объяснений, для чего это сделано, нигде не нашел

Ссылка на пример

Код из примера. Объяснений, для чего это сделано, нигде не нашел [Ссылка на пример](https://github.com/android/car-samples/blob/03440d5e974a060d0216b5e02a7fe3c46b7b9469/car_app_library/navigation/common/src/main/java/androidx/car/app/sample/navigation/common/car/NavigationCarAppService.java)
biodranik commented 2022-12-08 18:15:46 +00:00 (Migrated from github.com)
Review

У нас принято разбираться и писать только тот код, который мы чётко понимаем, для чего и зачем он нужен. И стараемся, чтобы было понятно другим, кто читает код, в т.ч. оставляя комментарии.

У нас принято разбираться и писать только тот код, который мы чётко понимаем, для чего и зачем он нужен. И стараемся, чтобы было понятно другим, кто читает код, в т.ч. оставляя комментарии.
Review

Вот такое объяснение в документации.

    /**
     * Returns the {@link HostValidator} this service will use to accept or reject host connections.
     *
     * <p>By default, the provided {@link HostValidator.Builder} would produce a validator that
     * only accepts connections from hosts holding
     * {@link HostValidator#TEMPLATE_RENDERER_PERMISSION} permission.
     *
     * <p>Application developers are expected to also allow connections from known hosts which
     * don't hold the aforementioned permission (for example, Android Auto and Android
     * Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts.
     *
     * <p>Refer to {@code androidx.car.app.R.array.hosts_allowlist_sample} to obtain a
     * list of package names and signatures that should be allow-listed by default.
     *
     * <p>It is also advised to allow connections from unknown hosts in debug builds to facilitate
     * debugging and testing.
     *
     * <p>Below is an example of this method implementation:
     *
     * <pre>
     * &#64;Override
     * &#64;NonNull
     * public HostValidator createHostValidator() {
     *     if ((getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0) {
     *         return HostValidator.ALLOW_ALL_HOSTS_VALIDATOR;
     *     } else {
     *         return new HostValidator.Builder(context)
     *             .addAllowedHosts(androidx.car.app.R.array.hosts_allowlist_sample)
     *             .build();
     *     }
     * }
     * </pre>
     */
Вот такое объяснение в документации. ```java /** * Returns the {@link HostValidator} this service will use to accept or reject host connections. * * <p>By default, the provided {@link HostValidator.Builder} would produce a validator that * only accepts connections from hosts holding * {@link HostValidator#TEMPLATE_RENDERER_PERMISSION} permission. * * <p>Application developers are expected to also allow connections from known hosts which * don't hold the aforementioned permission (for example, Android Auto and Android * Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts. * * <p>Refer to {@code androidx.car.app.R.array.hosts_allowlist_sample} to obtain a * list of package names and signatures that should be allow-listed by default. * * <p>It is also advised to allow connections from unknown hosts in debug builds to facilitate * debugging and testing. * * <p>Below is an example of this method implementation: * * <pre> * &#64;Override * &#64;NonNull * public HostValidator createHostValidator() { * if ((getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0) { * return HostValidator.ALLOW_ALL_HOSTS_VALIDATOR; * } else { * return new HostValidator.Builder(context) * .addAllowedHosts(androidx.car.app.R.array.hosts_allowlist_sample) * .build(); * } * } * </pre> */ ```
biodranik commented 2022-12-11 12:25:45 +00:00 (Migrated from github.com)
Review
  1. Так какие приложения перечислены в androidx.car.app.R.array.hosts_allowlist_sample ? Я так понял, для работы с апи <31 нам придётся их перечислить.
  2. Почему бы для отладки не сделать проще: if (BuildConfig.DEBUG) ?
  3. код может быть проще:
if ()
  return ...;
return ...;
1. Так какие приложения перечислены в androidx.car.app.R.array.hosts_allowlist_sample ? Я так понял, для работы с апи <31 нам придётся их перечислить. 2. Почему бы для отладки не сделать проще: if (BuildConfig.DEBUG) ? 3. код может быть проще: ``` if () return ...; return ...; ```
Review

Все не так. Почитал я, как работает HostValidator класс.

  • Он проверяет Host, т.е. магнитолу на которой запускается AA
  • Подключение к хосту разрешается в двух случаях
    • Либо хост указан в списке, который мы передаем
    • Либо хост имеет у себя android.car.permission.TEMPLATE_RENDERER

Поэтому я заменил R.array.car_hosts на androidx.car.app.R.array.hosts_allowlist_sample. Думаю, смысла держать свой список разрешенных хостов нет, а на warning можно закрыть глаза.

Warning:

The resource @array/hosts_allowlist_sample is marked as private in androidx.car.app:app:1.3.0-rc01

Все не так. Почитал я, как работает HostValidator класс. * Он проверяет Host, т.е. магнитолу на которой запускается AA * Подключение к хосту разрешается в двух случаях * Либо хост указан в списке, который мы передаем * Либо хост имеет у себя `android.car.permission.TEMPLATE_RENDERER` Поэтому я заменил `R.array.car_hosts` на `androidx.car.app.R.array.hosts_allowlist_sample`. Думаю, смысла держать свой список разрешенных хостов нет, а на warning можно закрыть глаза. Warning: >The resource @array/hosts_allowlist_sample is marked as private in androidx.car.app:app:1.3.0-rc01
biodranik commented 2022-12-11 21:13:37 +00:00 (Migrated from github.com)
Review

Так что именно в этом файле-то? )

Так что именно в этом файле-то? )
Review

В androidx.car.app.R.array.hosts_allowlist_sample?
Массив таких строк:
fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf,com.google.android.projection.gearhead

Первая часть - цифровая подпись, вторая - имя пакета

* @param packageName host package name (as reported by {@link PackageManager})
* @param digest      SHA256 digest of the DER encoding of the allow-listed host
*                    certificate, formatted as 32 lowercase 2 digits  hexadecimal values
*                    separated by colon (e.g.:"000102030405060708090a0b0c0d0e0f101112131415
*                    161718191a1b1c1d1e1f"). When using
*                    <a href="https://developer.android.com/about/versions/pie/android-9.0#apk-key-rotation">signature
*                    rotation</a>, this digest should correspond to the initial signing
*                    certificate

Только сейчас обратил внимание на это:

Application developers are expected to also allow connections from known hosts which don't hold the aforementioned permission (for example, Android Auto and Android Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts.

Но я не смог найти никакого общего списка хостов или хотя бы какого-то упоминания о том, что люди добавляли в этот список еще что-то. Поэтому, наверное, можно на это не обращать внимания. По крайней мере пока что.

В `androidx.car.app.R.array.hosts_allowlist_sample`? Массив таких строк: `fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf,com.google.android.projection.gearhead` Первая часть - цифровая подпись, вторая - имя пакета ```java * @param packageName host package name (as reported by {@link PackageManager}) * @param digest SHA256 digest of the DER encoding of the allow-listed host * certificate, formatted as 32 lowercase 2 digits hexadecimal values * separated by colon (e.g.:"000102030405060708090a0b0c0d0e0f101112131415 * 161718191a1b1c1d1e1f"). When using * <a href="https://developer.android.com/about/versions/pie/android-9.0#apk-key-rotation">signature * rotation</a>, this digest should correspond to the initial signing * certificate ``` Только сейчас обратил внимание на это: >Application developers are expected to also allow connections from known hosts which don't hold the aforementioned permission (for example, Android Auto and Android Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts. Но я не смог найти никакого общего списка хостов или хотя бы какого-то упоминания о том, что люди добавляли в этот список еще что-то. Поэтому, наверное, можно на это не обращать внимания. По крайней мере пока что.
biodranik commented 2022-12-11 22:03:03 +00:00 (Migrated from github.com)
Review
  1. Полный список пакетов в том файле можно выложить сюда или на pastebin?
  2. Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы.
1. Полный список пакетов в том файле можно выложить сюда или на pastebin? 2. Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы.
Review
<string-array name="hosts_allowlist_sample" translatable="false">
   <item>fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf,
         com.google.android.projection.gearhead</item>
   <item>70811a3eacfd2e83e18da9bfede52df16ce91f2e69a44d21f18ab66991130771,
         com.google.android.projection.gearhead</item>
   <item>1975b2f17177bc89a5dff31f9e64a6cae281a53dc1d1d59b1d147fe1c82afa00,
         com.google.android.projection.gearhead</item>
   <item>c241ffbc8e287c4e9a4ad19632ba1b1351ad361d5177b7d7b29859bd2b7fc631,
         com.google.android.apps.automotive.templates.host</item>
   <item>dd66deaf312d8daec7adbe85a218ecc8c64f3b152f9b5998d5b29300c2623f61,
         com.google.android.apps.automotive.templates.host</item>
   <item>50e603d333c6049a37bd751375d08f3bd0abebd33facd30bd17b64b89658b421,
         com.google.android.apps.automotive.templates.host</item>
</string-array>
```xml <string-array name="hosts_allowlist_sample" translatable="false"> <item>fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf, com.google.android.projection.gearhead</item> <item>70811a3eacfd2e83e18da9bfede52df16ce91f2e69a44d21f18ab66991130771, com.google.android.projection.gearhead</item> <item>1975b2f17177bc89a5dff31f9e64a6cae281a53dc1d1d59b1d147fe1c82afa00, com.google.android.projection.gearhead</item> <item>c241ffbc8e287c4e9a4ad19632ba1b1351ad361d5177b7d7b29859bd2b7fc631, com.google.android.apps.automotive.templates.host</item> <item>dd66deaf312d8daec7adbe85a218ecc8c64f3b152f9b5998d5b29300c2623f61, com.google.android.apps.automotive.templates.host</item> <item>50e603d333c6049a37bd751375d08f3bd0abebd33facd30bd17b64b89658b421, com.google.android.apps.automotive.templates.host</item> </string-array> ```
Review

Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы.

Тут если что подразумевается API хоста, а не телефона

>Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы. Тут если что подразумевается API хоста, а не телефона
return HostValidator.ALLOW_ALL_HOSTS_VALIDATOR;
Review

What are potential security implications here?

What are potential security implications here?
Review

Код из примера. Объяснений, для чего это сделано, нигде не нашел

Ссылка на пример

Код из примера. Объяснений, для чего это сделано, нигде не нашел [Ссылка на пример](https://github.com/android/car-samples/blob/03440d5e974a060d0216b5e02a7fe3c46b7b9469/car_app_library/navigation/common/src/main/java/androidx/car/app/sample/navigation/common/car/NavigationCarAppService.java)
biodranik commented 2022-12-08 18:15:46 +00:00 (Migrated from github.com)
Review

У нас принято разбираться и писать только тот код, который мы чётко понимаем, для чего и зачем он нужен. И стараемся, чтобы было понятно другим, кто читает код, в т.ч. оставляя комментарии.

У нас принято разбираться и писать только тот код, который мы чётко понимаем, для чего и зачем он нужен. И стараемся, чтобы было понятно другим, кто читает код, в т.ч. оставляя комментарии.
Review

Вот такое объяснение в документации.

    /**
     * Returns the {@link HostValidator} this service will use to accept or reject host connections.
     *
     * <p>By default, the provided {@link HostValidator.Builder} would produce a validator that
     * only accepts connections from hosts holding
     * {@link HostValidator#TEMPLATE_RENDERER_PERMISSION} permission.
     *
     * <p>Application developers are expected to also allow connections from known hosts which
     * don't hold the aforementioned permission (for example, Android Auto and Android
     * Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts.
     *
     * <p>Refer to {@code androidx.car.app.R.array.hosts_allowlist_sample} to obtain a
     * list of package names and signatures that should be allow-listed by default.
     *
     * <p>It is also advised to allow connections from unknown hosts in debug builds to facilitate
     * debugging and testing.
     *
     * <p>Below is an example of this method implementation:
     *
     * <pre>
     * &#64;Override
     * &#64;NonNull
     * public HostValidator createHostValidator() {
     *     if ((getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0) {
     *         return HostValidator.ALLOW_ALL_HOSTS_VALIDATOR;
     *     } else {
     *         return new HostValidator.Builder(context)
     *             .addAllowedHosts(androidx.car.app.R.array.hosts_allowlist_sample)
     *             .build();
     *     }
     * }
     * </pre>
     */
Вот такое объяснение в документации. ```java /** * Returns the {@link HostValidator} this service will use to accept or reject host connections. * * <p>By default, the provided {@link HostValidator.Builder} would produce a validator that * only accepts connections from hosts holding * {@link HostValidator#TEMPLATE_RENDERER_PERMISSION} permission. * * <p>Application developers are expected to also allow connections from known hosts which * don't hold the aforementioned permission (for example, Android Auto and Android * Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts. * * <p>Refer to {@code androidx.car.app.R.array.hosts_allowlist_sample} to obtain a * list of package names and signatures that should be allow-listed by default. * * <p>It is also advised to allow connections from unknown hosts in debug builds to facilitate * debugging and testing. * * <p>Below is an example of this method implementation: * * <pre> * &#64;Override * &#64;NonNull * public HostValidator createHostValidator() { * if ((getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0) { * return HostValidator.ALLOW_ALL_HOSTS_VALIDATOR; * } else { * return new HostValidator.Builder(context) * .addAllowedHosts(androidx.car.app.R.array.hosts_allowlist_sample) * .build(); * } * } * </pre> */ ```
biodranik commented 2022-12-11 12:25:45 +00:00 (Migrated from github.com)
Review
  1. Так какие приложения перечислены в androidx.car.app.R.array.hosts_allowlist_sample ? Я так понял, для работы с апи <31 нам придётся их перечислить.
  2. Почему бы для отладки не сделать проще: if (BuildConfig.DEBUG) ?
  3. код может быть проще:
if ()
  return ...;
return ...;
1. Так какие приложения перечислены в androidx.car.app.R.array.hosts_allowlist_sample ? Я так понял, для работы с апи <31 нам придётся их перечислить. 2. Почему бы для отладки не сделать проще: if (BuildConfig.DEBUG) ? 3. код может быть проще: ``` if () return ...; return ...; ```
Review

Все не так. Почитал я, как работает HostValidator класс.

  • Он проверяет Host, т.е. магнитолу на которой запускается AA
  • Подключение к хосту разрешается в двух случаях
    • Либо хост указан в списке, который мы передаем
    • Либо хост имеет у себя android.car.permission.TEMPLATE_RENDERER

Поэтому я заменил R.array.car_hosts на androidx.car.app.R.array.hosts_allowlist_sample. Думаю, смысла держать свой список разрешенных хостов нет, а на warning можно закрыть глаза.

Warning:

The resource @array/hosts_allowlist_sample is marked as private in androidx.car.app:app:1.3.0-rc01

Все не так. Почитал я, как работает HostValidator класс. * Он проверяет Host, т.е. магнитолу на которой запускается AA * Подключение к хосту разрешается в двух случаях * Либо хост указан в списке, который мы передаем * Либо хост имеет у себя `android.car.permission.TEMPLATE_RENDERER` Поэтому я заменил `R.array.car_hosts` на `androidx.car.app.R.array.hosts_allowlist_sample`. Думаю, смысла держать свой список разрешенных хостов нет, а на warning можно закрыть глаза. Warning: >The resource @array/hosts_allowlist_sample is marked as private in androidx.car.app:app:1.3.0-rc01
biodranik commented 2022-12-11 21:13:37 +00:00 (Migrated from github.com)
Review

Так что именно в этом файле-то? )

Так что именно в этом файле-то? )
Review

В androidx.car.app.R.array.hosts_allowlist_sample?
Массив таких строк:
fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf,com.google.android.projection.gearhead

Первая часть - цифровая подпись, вторая - имя пакета

* @param packageName host package name (as reported by {@link PackageManager})
* @param digest      SHA256 digest of the DER encoding of the allow-listed host
*                    certificate, formatted as 32 lowercase 2 digits  hexadecimal values
*                    separated by colon (e.g.:"000102030405060708090a0b0c0d0e0f101112131415
*                    161718191a1b1c1d1e1f"). When using
*                    <a href="https://developer.android.com/about/versions/pie/android-9.0#apk-key-rotation">signature
*                    rotation</a>, this digest should correspond to the initial signing
*                    certificate

Только сейчас обратил внимание на это:

Application developers are expected to also allow connections from known hosts which don't hold the aforementioned permission (for example, Android Auto and Android Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts.

Но я не смог найти никакого общего списка хостов или хотя бы какого-то упоминания о том, что люди добавляли в этот список еще что-то. Поэтому, наверное, можно на это не обращать внимания. По крайней мере пока что.

В `androidx.car.app.R.array.hosts_allowlist_sample`? Массив таких строк: `fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf,com.google.android.projection.gearhead` Первая часть - цифровая подпись, вторая - имя пакета ```java * @param packageName host package name (as reported by {@link PackageManager}) * @param digest SHA256 digest of the DER encoding of the allow-listed host * certificate, formatted as 32 lowercase 2 digits hexadecimal values * separated by colon (e.g.:"000102030405060708090a0b0c0d0e0f101112131415 * 161718191a1b1c1d1e1f"). When using * <a href="https://developer.android.com/about/versions/pie/android-9.0#apk-key-rotation">signature * rotation</a>, this digest should correspond to the initial signing * certificate ``` Только сейчас обратил внимание на это: >Application developers are expected to also allow connections from known hosts which don't hold the aforementioned permission (for example, Android Auto and Android Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts. Но я не смог найти никакого общего списка хостов или хотя бы какого-то упоминания о том, что люди добавляли в этот список еще что-то. Поэтому, наверное, можно на это не обращать внимания. По крайней мере пока что.
biodranik commented 2022-12-11 22:03:03 +00:00 (Migrated from github.com)
Review
  1. Полный список пакетов в том файле можно выложить сюда или на pastebin?
  2. Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы.
1. Полный список пакетов в том файле можно выложить сюда или на pastebin? 2. Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы.
Review
<string-array name="hosts_allowlist_sample" translatable="false">
   <item>fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf,
         com.google.android.projection.gearhead</item>
   <item>70811a3eacfd2e83e18da9bfede52df16ce91f2e69a44d21f18ab66991130771,
         com.google.android.projection.gearhead</item>
   <item>1975b2f17177bc89a5dff31f9e64a6cae281a53dc1d1d59b1d147fe1c82afa00,
         com.google.android.projection.gearhead</item>
   <item>c241ffbc8e287c4e9a4ad19632ba1b1351ad361d5177b7d7b29859bd2b7fc631,
         com.google.android.apps.automotive.templates.host</item>
   <item>dd66deaf312d8daec7adbe85a218ecc8c64f3b152f9b5998d5b29300c2623f61,
         com.google.android.apps.automotive.templates.host</item>
   <item>50e603d333c6049a37bd751375d08f3bd0abebd33facd30bd17b64b89658b421,
         com.google.android.apps.automotive.templates.host</item>
</string-array>
```xml <string-array name="hosts_allowlist_sample" translatable="false"> <item>fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf, com.google.android.projection.gearhead</item> <item>70811a3eacfd2e83e18da9bfede52df16ce91f2e69a44d21f18ab66991130771, com.google.android.projection.gearhead</item> <item>1975b2f17177bc89a5dff31f9e64a6cae281a53dc1d1d59b1d147fe1c82afa00, com.google.android.projection.gearhead</item> <item>c241ffbc8e287c4e9a4ad19632ba1b1351ad361d5177b7d7b29859bd2b7fc631, com.google.android.apps.automotive.templates.host</item> <item>dd66deaf312d8daec7adbe85a218ecc8c64f3b152f9b5998d5b29300c2623f61, com.google.android.apps.automotive.templates.host</item> <item>50e603d333c6049a37bd751375d08f3bd0abebd33facd30bd17b64b89658b421, com.google.android.apps.automotive.templates.host</item> </string-array> ```
Review

Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы.

Тут если что подразумевается API хоста, а не телефона

>Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы. Тут если что подразумевается API хоста, а не телефона
Review

What are potential security implications here?

What are potential security implications here?
Review

Код из примера. Объяснений, для чего это сделано, нигде не нашел

Ссылка на пример

Код из примера. Объяснений, для чего это сделано, нигде не нашел [Ссылка на пример](https://github.com/android/car-samples/blob/03440d5e974a060d0216b5e02a7fe3c46b7b9469/car_app_library/navigation/common/src/main/java/androidx/car/app/sample/navigation/common/car/NavigationCarAppService.java)
biodranik commented 2022-12-08 18:15:46 +00:00 (Migrated from github.com)
Review

У нас принято разбираться и писать только тот код, который мы чётко понимаем, для чего и зачем он нужен. И стараемся, чтобы было понятно другим, кто читает код, в т.ч. оставляя комментарии.

У нас принято разбираться и писать только тот код, который мы чётко понимаем, для чего и зачем он нужен. И стараемся, чтобы было понятно другим, кто читает код, в т.ч. оставляя комментарии.
Review

Вот такое объяснение в документации.

    /**
     * Returns the {@link HostValidator} this service will use to accept or reject host connections.
     *
     * <p>By default, the provided {@link HostValidator.Builder} would produce a validator that
     * only accepts connections from hosts holding
     * {@link HostValidator#TEMPLATE_RENDERER_PERMISSION} permission.
     *
     * <p>Application developers are expected to also allow connections from known hosts which
     * don't hold the aforementioned permission (for example, Android Auto and Android
     * Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts.
     *
     * <p>Refer to {@code androidx.car.app.R.array.hosts_allowlist_sample} to obtain a
     * list of package names and signatures that should be allow-listed by default.
     *
     * <p>It is also advised to allow connections from unknown hosts in debug builds to facilitate
     * debugging and testing.
     *
     * <p>Below is an example of this method implementation:
     *
     * <pre>
     * &#64;Override
     * &#64;NonNull
     * public HostValidator createHostValidator() {
     *     if ((getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0) {
     *         return HostValidator.ALLOW_ALL_HOSTS_VALIDATOR;
     *     } else {
     *         return new HostValidator.Builder(context)
     *             .addAllowedHosts(androidx.car.app.R.array.hosts_allowlist_sample)
     *             .build();
     *     }
     * }
     * </pre>
     */
Вот такое объяснение в документации. ```java /** * Returns the {@link HostValidator} this service will use to accept or reject host connections. * * <p>By default, the provided {@link HostValidator.Builder} would produce a validator that * only accepts connections from hosts holding * {@link HostValidator#TEMPLATE_RENDERER_PERMISSION} permission. * * <p>Application developers are expected to also allow connections from known hosts which * don't hold the aforementioned permission (for example, Android Auto and Android * Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts. * * <p>Refer to {@code androidx.car.app.R.array.hosts_allowlist_sample} to obtain a * list of package names and signatures that should be allow-listed by default. * * <p>It is also advised to allow connections from unknown hosts in debug builds to facilitate * debugging and testing. * * <p>Below is an example of this method implementation: * * <pre> * &#64;Override * &#64;NonNull * public HostValidator createHostValidator() { * if ((getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0) { * return HostValidator.ALLOW_ALL_HOSTS_VALIDATOR; * } else { * return new HostValidator.Builder(context) * .addAllowedHosts(androidx.car.app.R.array.hosts_allowlist_sample) * .build(); * } * } * </pre> */ ```
biodranik commented 2022-12-11 12:25:45 +00:00 (Migrated from github.com)
Review
  1. Так какие приложения перечислены в androidx.car.app.R.array.hosts_allowlist_sample ? Я так понял, для работы с апи <31 нам придётся их перечислить.
  2. Почему бы для отладки не сделать проще: if (BuildConfig.DEBUG) ?
  3. код может быть проще:
if ()
  return ...;
return ...;
1. Так какие приложения перечислены в androidx.car.app.R.array.hosts_allowlist_sample ? Я так понял, для работы с апи <31 нам придётся их перечислить. 2. Почему бы для отладки не сделать проще: if (BuildConfig.DEBUG) ? 3. код может быть проще: ``` if () return ...; return ...; ```
Review

Все не так. Почитал я, как работает HostValidator класс.

  • Он проверяет Host, т.е. магнитолу на которой запускается AA
  • Подключение к хосту разрешается в двух случаях
    • Либо хост указан в списке, который мы передаем
    • Либо хост имеет у себя android.car.permission.TEMPLATE_RENDERER

Поэтому я заменил R.array.car_hosts на androidx.car.app.R.array.hosts_allowlist_sample. Думаю, смысла держать свой список разрешенных хостов нет, а на warning можно закрыть глаза.

Warning:

The resource @array/hosts_allowlist_sample is marked as private in androidx.car.app:app:1.3.0-rc01

Все не так. Почитал я, как работает HostValidator класс. * Он проверяет Host, т.е. магнитолу на которой запускается AA * Подключение к хосту разрешается в двух случаях * Либо хост указан в списке, который мы передаем * Либо хост имеет у себя `android.car.permission.TEMPLATE_RENDERER` Поэтому я заменил `R.array.car_hosts` на `androidx.car.app.R.array.hosts_allowlist_sample`. Думаю, смысла держать свой список разрешенных хостов нет, а на warning можно закрыть глаза. Warning: >The resource @array/hosts_allowlist_sample is marked as private in androidx.car.app:app:1.3.0-rc01
biodranik commented 2022-12-11 21:13:37 +00:00 (Migrated from github.com)
Review

Так что именно в этом файле-то? )

Так что именно в этом файле-то? )
Review

В androidx.car.app.R.array.hosts_allowlist_sample?
Массив таких строк:
fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf,com.google.android.projection.gearhead

Первая часть - цифровая подпись, вторая - имя пакета

* @param packageName host package name (as reported by {@link PackageManager})
* @param digest      SHA256 digest of the DER encoding of the allow-listed host
*                    certificate, formatted as 32 lowercase 2 digits  hexadecimal values
*                    separated by colon (e.g.:"000102030405060708090a0b0c0d0e0f101112131415
*                    161718191a1b1c1d1e1f"). When using
*                    <a href="https://developer.android.com/about/versions/pie/android-9.0#apk-key-rotation">signature
*                    rotation</a>, this digest should correspond to the initial signing
*                    certificate

Только сейчас обратил внимание на это:

Application developers are expected to also allow connections from known hosts which don't hold the aforementioned permission (for example, Android Auto and Android Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts.

Но я не смог найти никакого общего списка хостов или хотя бы какого-то упоминания о том, что люди добавляли в этот список еще что-то. Поэтому, наверное, можно на это не обращать внимания. По крайней мере пока что.

В `androidx.car.app.R.array.hosts_allowlist_sample`? Массив таких строк: `fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf,com.google.android.projection.gearhead` Первая часть - цифровая подпись, вторая - имя пакета ```java * @param packageName host package name (as reported by {@link PackageManager}) * @param digest SHA256 digest of the DER encoding of the allow-listed host * certificate, formatted as 32 lowercase 2 digits hexadecimal values * separated by colon (e.g.:"000102030405060708090a0b0c0d0e0f101112131415 * 161718191a1b1c1d1e1f"). When using * <a href="https://developer.android.com/about/versions/pie/android-9.0#apk-key-rotation">signature * rotation</a>, this digest should correspond to the initial signing * certificate ``` Только сейчас обратил внимание на это: >Application developers are expected to also allow connections from known hosts which don't hold the aforementioned permission (for example, Android Auto and Android Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts. Но я не смог найти никакого общего списка хостов или хотя бы какого-то упоминания о том, что люди добавляли в этот список еще что-то. Поэтому, наверное, можно на это не обращать внимания. По крайней мере пока что.
biodranik commented 2022-12-11 22:03:03 +00:00 (Migrated from github.com)
Review
  1. Полный список пакетов в том файле можно выложить сюда или на pastebin?
  2. Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы.
1. Полный список пакетов в том файле можно выложить сюда или на pastebin? 2. Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы.
Review
<string-array name="hosts_allowlist_sample" translatable="false">
   <item>fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf,
         com.google.android.projection.gearhead</item>
   <item>70811a3eacfd2e83e18da9bfede52df16ce91f2e69a44d21f18ab66991130771,
         com.google.android.projection.gearhead</item>
   <item>1975b2f17177bc89a5dff31f9e64a6cae281a53dc1d1d59b1d147fe1c82afa00,
         com.google.android.projection.gearhead</item>
   <item>c241ffbc8e287c4e9a4ad19632ba1b1351ad361d5177b7d7b29859bd2b7fc631,
         com.google.android.apps.automotive.templates.host</item>
   <item>dd66deaf312d8daec7adbe85a218ecc8c64f3b152f9b5998d5b29300c2623f61,
         com.google.android.apps.automotive.templates.host</item>
   <item>50e603d333c6049a37bd751375d08f3bd0abebd33facd30bd17b64b89658b421,
         com.google.android.apps.automotive.templates.host</item>
</string-array>
```xml <string-array name="hosts_allowlist_sample" translatable="false"> <item>fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf, com.google.android.projection.gearhead</item> <item>70811a3eacfd2e83e18da9bfede52df16ce91f2e69a44d21f18ab66991130771, com.google.android.projection.gearhead</item> <item>1975b2f17177bc89a5dff31f9e64a6cae281a53dc1d1d59b1d147fe1c82afa00, com.google.android.projection.gearhead</item> <item>c241ffbc8e287c4e9a4ad19632ba1b1351ad361d5177b7d7b29859bd2b7fc631, com.google.android.apps.automotive.templates.host</item> <item>dd66deaf312d8daec7adbe85a218ecc8c64f3b152f9b5998d5b29300c2623f61, com.google.android.apps.automotive.templates.host</item> <item>50e603d333c6049a37bd751375d08f3bd0abebd33facd30bd17b64b89658b421, com.google.android.apps.automotive.templates.host</item> </string-array> ```
Review

Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы.

Тут если что подразумевается API хоста, а не телефона

>Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы. Тут если что подразумевается API хоста, а не телефона
return new HostValidator.Builder(getApplicationContext())
Review

What are potential security implications here?

What are potential security implications here?
Review

Код из примера. Объяснений, для чего это сделано, нигде не нашел

Ссылка на пример

Код из примера. Объяснений, для чего это сделано, нигде не нашел [Ссылка на пример](https://github.com/android/car-samples/blob/03440d5e974a060d0216b5e02a7fe3c46b7b9469/car_app_library/navigation/common/src/main/java/androidx/car/app/sample/navigation/common/car/NavigationCarAppService.java)
biodranik commented 2022-12-08 18:15:46 +00:00 (Migrated from github.com)
Review

У нас принято разбираться и писать только тот код, который мы чётко понимаем, для чего и зачем он нужен. И стараемся, чтобы было понятно другим, кто читает код, в т.ч. оставляя комментарии.

У нас принято разбираться и писать только тот код, который мы чётко понимаем, для чего и зачем он нужен. И стараемся, чтобы было понятно другим, кто читает код, в т.ч. оставляя комментарии.
Review

Вот такое объяснение в документации.

    /**
     * Returns the {@link HostValidator} this service will use to accept or reject host connections.
     *
     * <p>By default, the provided {@link HostValidator.Builder} would produce a validator that
     * only accepts connections from hosts holding
     * {@link HostValidator#TEMPLATE_RENDERER_PERMISSION} permission.
     *
     * <p>Application developers are expected to also allow connections from known hosts which
     * don't hold the aforementioned permission (for example, Android Auto and Android
     * Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts.
     *
     * <p>Refer to {@code androidx.car.app.R.array.hosts_allowlist_sample} to obtain a
     * list of package names and signatures that should be allow-listed by default.
     *
     * <p>It is also advised to allow connections from unknown hosts in debug builds to facilitate
     * debugging and testing.
     *
     * <p>Below is an example of this method implementation:
     *
     * <pre>
     * &#64;Override
     * &#64;NonNull
     * public HostValidator createHostValidator() {
     *     if ((getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0) {
     *         return HostValidator.ALLOW_ALL_HOSTS_VALIDATOR;
     *     } else {
     *         return new HostValidator.Builder(context)
     *             .addAllowedHosts(androidx.car.app.R.array.hosts_allowlist_sample)
     *             .build();
     *     }
     * }
     * </pre>
     */
Вот такое объяснение в документации. ```java /** * Returns the {@link HostValidator} this service will use to accept or reject host connections. * * <p>By default, the provided {@link HostValidator.Builder} would produce a validator that * only accepts connections from hosts holding * {@link HostValidator#TEMPLATE_RENDERER_PERMISSION} permission. * * <p>Application developers are expected to also allow connections from known hosts which * don't hold the aforementioned permission (for example, Android Auto and Android * Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts. * * <p>Refer to {@code androidx.car.app.R.array.hosts_allowlist_sample} to obtain a * list of package names and signatures that should be allow-listed by default. * * <p>It is also advised to allow connections from unknown hosts in debug builds to facilitate * debugging and testing. * * <p>Below is an example of this method implementation: * * <pre> * &#64;Override * &#64;NonNull * public HostValidator createHostValidator() { * if ((getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0) { * return HostValidator.ALLOW_ALL_HOSTS_VALIDATOR; * } else { * return new HostValidator.Builder(context) * .addAllowedHosts(androidx.car.app.R.array.hosts_allowlist_sample) * .build(); * } * } * </pre> */ ```
biodranik commented 2022-12-11 12:25:45 +00:00 (Migrated from github.com)
Review
  1. Так какие приложения перечислены в androidx.car.app.R.array.hosts_allowlist_sample ? Я так понял, для работы с апи <31 нам придётся их перечислить.
  2. Почему бы для отладки не сделать проще: if (BuildConfig.DEBUG) ?
  3. код может быть проще:
if ()
  return ...;
return ...;
1. Так какие приложения перечислены в androidx.car.app.R.array.hosts_allowlist_sample ? Я так понял, для работы с апи <31 нам придётся их перечислить. 2. Почему бы для отладки не сделать проще: if (BuildConfig.DEBUG) ? 3. код может быть проще: ``` if () return ...; return ...; ```
Review

Все не так. Почитал я, как работает HostValidator класс.

  • Он проверяет Host, т.е. магнитолу на которой запускается AA
  • Подключение к хосту разрешается в двух случаях
    • Либо хост указан в списке, который мы передаем
    • Либо хост имеет у себя android.car.permission.TEMPLATE_RENDERER

Поэтому я заменил R.array.car_hosts на androidx.car.app.R.array.hosts_allowlist_sample. Думаю, смысла держать свой список разрешенных хостов нет, а на warning можно закрыть глаза.

Warning:

The resource @array/hosts_allowlist_sample is marked as private in androidx.car.app:app:1.3.0-rc01

Все не так. Почитал я, как работает HostValidator класс. * Он проверяет Host, т.е. магнитолу на которой запускается AA * Подключение к хосту разрешается в двух случаях * Либо хост указан в списке, который мы передаем * Либо хост имеет у себя `android.car.permission.TEMPLATE_RENDERER` Поэтому я заменил `R.array.car_hosts` на `androidx.car.app.R.array.hosts_allowlist_sample`. Думаю, смысла держать свой список разрешенных хостов нет, а на warning можно закрыть глаза. Warning: >The resource @array/hosts_allowlist_sample is marked as private in androidx.car.app:app:1.3.0-rc01
biodranik commented 2022-12-11 21:13:37 +00:00 (Migrated from github.com)
Review

Так что именно в этом файле-то? )

Так что именно в этом файле-то? )
Review

В androidx.car.app.R.array.hosts_allowlist_sample?
Массив таких строк:
fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf,com.google.android.projection.gearhead

Первая часть - цифровая подпись, вторая - имя пакета

* @param packageName host package name (as reported by {@link PackageManager})
* @param digest      SHA256 digest of the DER encoding of the allow-listed host
*                    certificate, formatted as 32 lowercase 2 digits  hexadecimal values
*                    separated by colon (e.g.:"000102030405060708090a0b0c0d0e0f101112131415
*                    161718191a1b1c1d1e1f"). When using
*                    <a href="https://developer.android.com/about/versions/pie/android-9.0#apk-key-rotation">signature
*                    rotation</a>, this digest should correspond to the initial signing
*                    certificate

Только сейчас обратил внимание на это:

Application developers are expected to also allow connections from known hosts which don't hold the aforementioned permission (for example, Android Auto and Android Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts.

Но я не смог найти никакого общего списка хостов или хотя бы какого-то упоминания о том, что люди добавляли в этот список еще что-то. Поэтому, наверное, можно на это не обращать внимания. По крайней мере пока что.

В `androidx.car.app.R.array.hosts_allowlist_sample`? Массив таких строк: `fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf,com.google.android.projection.gearhead` Первая часть - цифровая подпись, вторая - имя пакета ```java * @param packageName host package name (as reported by {@link PackageManager}) * @param digest SHA256 digest of the DER encoding of the allow-listed host * certificate, formatted as 32 lowercase 2 digits hexadecimal values * separated by colon (e.g.:"000102030405060708090a0b0c0d0e0f101112131415 * 161718191a1b1c1d1e1f"). When using * <a href="https://developer.android.com/about/versions/pie/android-9.0#apk-key-rotation">signature * rotation</a>, this digest should correspond to the initial signing * certificate ``` Только сейчас обратил внимание на это: >Application developers are expected to also allow connections from known hosts which don't hold the aforementioned permission (for example, Android Auto and Android Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts. Но я не смог найти никакого общего списка хостов или хотя бы какого-то упоминания о том, что люди добавляли в этот список еще что-то. Поэтому, наверное, можно на это не обращать внимания. По крайней мере пока что.
biodranik commented 2022-12-11 22:03:03 +00:00 (Migrated from github.com)
Review
  1. Полный список пакетов в том файле можно выложить сюда или на pastebin?
  2. Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы.
1. Полный список пакетов в том файле можно выложить сюда или на pastebin? 2. Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы.
Review
<string-array name="hosts_allowlist_sample" translatable="false">
   <item>fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf,
         com.google.android.projection.gearhead</item>
   <item>70811a3eacfd2e83e18da9bfede52df16ce91f2e69a44d21f18ab66991130771,
         com.google.android.projection.gearhead</item>
   <item>1975b2f17177bc89a5dff31f9e64a6cae281a53dc1d1d59b1d147fe1c82afa00,
         com.google.android.projection.gearhead</item>
   <item>c241ffbc8e287c4e9a4ad19632ba1b1351ad361d5177b7d7b29859bd2b7fc631,
         com.google.android.apps.automotive.templates.host</item>
   <item>dd66deaf312d8daec7adbe85a218ecc8c64f3b152f9b5998d5b29300c2623f61,
         com.google.android.apps.automotive.templates.host</item>
   <item>50e603d333c6049a37bd751375d08f3bd0abebd33facd30bd17b64b89658b421,
         com.google.android.apps.automotive.templates.host</item>
</string-array>
```xml <string-array name="hosts_allowlist_sample" translatable="false"> <item>fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf, com.google.android.projection.gearhead</item> <item>70811a3eacfd2e83e18da9bfede52df16ce91f2e69a44d21f18ab66991130771, com.google.android.projection.gearhead</item> <item>1975b2f17177bc89a5dff31f9e64a6cae281a53dc1d1d59b1d147fe1c82afa00, com.google.android.projection.gearhead</item> <item>c241ffbc8e287c4e9a4ad19632ba1b1351ad361d5177b7d7b29859bd2b7fc631, com.google.android.apps.automotive.templates.host</item> <item>dd66deaf312d8daec7adbe85a218ecc8c64f3b152f9b5998d5b29300c2623f61, com.google.android.apps.automotive.templates.host</item> <item>50e603d333c6049a37bd751375d08f3bd0abebd33facd30bd17b64b89658b421, com.google.android.apps.automotive.templates.host</item> </string-array> ```
Review

Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы.

Тут если что подразумевается API хоста, а не телефона

>Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы. Тут если что подразумевается API хоста, а не телефона
.addAllowedHosts(androidx.car.app.R.array.hosts_allowlist_sample)
Review

What are potential security implications here?

What are potential security implications here?
Review

Код из примера. Объяснений, для чего это сделано, нигде не нашел

Ссылка на пример

Код из примера. Объяснений, для чего это сделано, нигде не нашел [Ссылка на пример](https://github.com/android/car-samples/blob/03440d5e974a060d0216b5e02a7fe3c46b7b9469/car_app_library/navigation/common/src/main/java/androidx/car/app/sample/navigation/common/car/NavigationCarAppService.java)
biodranik commented 2022-12-08 18:15:46 +00:00 (Migrated from github.com)
Review

У нас принято разбираться и писать только тот код, который мы чётко понимаем, для чего и зачем он нужен. И стараемся, чтобы было понятно другим, кто читает код, в т.ч. оставляя комментарии.

У нас принято разбираться и писать только тот код, который мы чётко понимаем, для чего и зачем он нужен. И стараемся, чтобы было понятно другим, кто читает код, в т.ч. оставляя комментарии.
Review

Вот такое объяснение в документации.

    /**
     * Returns the {@link HostValidator} this service will use to accept or reject host connections.
     *
     * <p>By default, the provided {@link HostValidator.Builder} would produce a validator that
     * only accepts connections from hosts holding
     * {@link HostValidator#TEMPLATE_RENDERER_PERMISSION} permission.
     *
     * <p>Application developers are expected to also allow connections from known hosts which
     * don't hold the aforementioned permission (for example, Android Auto and Android
     * Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts.
     *
     * <p>Refer to {@code androidx.car.app.R.array.hosts_allowlist_sample} to obtain a
     * list of package names and signatures that should be allow-listed by default.
     *
     * <p>It is also advised to allow connections from unknown hosts in debug builds to facilitate
     * debugging and testing.
     *
     * <p>Below is an example of this method implementation:
     *
     * <pre>
     * &#64;Override
     * &#64;NonNull
     * public HostValidator createHostValidator() {
     *     if ((getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0) {
     *         return HostValidator.ALLOW_ALL_HOSTS_VALIDATOR;
     *     } else {
     *         return new HostValidator.Builder(context)
     *             .addAllowedHosts(androidx.car.app.R.array.hosts_allowlist_sample)
     *             .build();
     *     }
     * }
     * </pre>
     */
Вот такое объяснение в документации. ```java /** * Returns the {@link HostValidator} this service will use to accept or reject host connections. * * <p>By default, the provided {@link HostValidator.Builder} would produce a validator that * only accepts connections from hosts holding * {@link HostValidator#TEMPLATE_RENDERER_PERMISSION} permission. * * <p>Application developers are expected to also allow connections from known hosts which * don't hold the aforementioned permission (for example, Android Auto and Android * Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts. * * <p>Refer to {@code androidx.car.app.R.array.hosts_allowlist_sample} to obtain a * list of package names and signatures that should be allow-listed by default. * * <p>It is also advised to allow connections from unknown hosts in debug builds to facilitate * debugging and testing. * * <p>Below is an example of this method implementation: * * <pre> * &#64;Override * &#64;NonNull * public HostValidator createHostValidator() { * if ((getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0) { * return HostValidator.ALLOW_ALL_HOSTS_VALIDATOR; * } else { * return new HostValidator.Builder(context) * .addAllowedHosts(androidx.car.app.R.array.hosts_allowlist_sample) * .build(); * } * } * </pre> */ ```
biodranik commented 2022-12-11 12:25:45 +00:00 (Migrated from github.com)
Review
  1. Так какие приложения перечислены в androidx.car.app.R.array.hosts_allowlist_sample ? Я так понял, для работы с апи <31 нам придётся их перечислить.
  2. Почему бы для отладки не сделать проще: if (BuildConfig.DEBUG) ?
  3. код может быть проще:
if ()
  return ...;
return ...;
1. Так какие приложения перечислены в androidx.car.app.R.array.hosts_allowlist_sample ? Я так понял, для работы с апи <31 нам придётся их перечислить. 2. Почему бы для отладки не сделать проще: if (BuildConfig.DEBUG) ? 3. код может быть проще: ``` if () return ...; return ...; ```
Review

Все не так. Почитал я, как работает HostValidator класс.

  • Он проверяет Host, т.е. магнитолу на которой запускается AA
  • Подключение к хосту разрешается в двух случаях
    • Либо хост указан в списке, который мы передаем
    • Либо хост имеет у себя android.car.permission.TEMPLATE_RENDERER

Поэтому я заменил R.array.car_hosts на androidx.car.app.R.array.hosts_allowlist_sample. Думаю, смысла держать свой список разрешенных хостов нет, а на warning можно закрыть глаза.

Warning:

The resource @array/hosts_allowlist_sample is marked as private in androidx.car.app:app:1.3.0-rc01

Все не так. Почитал я, как работает HostValidator класс. * Он проверяет Host, т.е. магнитолу на которой запускается AA * Подключение к хосту разрешается в двух случаях * Либо хост указан в списке, который мы передаем * Либо хост имеет у себя `android.car.permission.TEMPLATE_RENDERER` Поэтому я заменил `R.array.car_hosts` на `androidx.car.app.R.array.hosts_allowlist_sample`. Думаю, смысла держать свой список разрешенных хостов нет, а на warning можно закрыть глаза. Warning: >The resource @array/hosts_allowlist_sample is marked as private in androidx.car.app:app:1.3.0-rc01
biodranik commented 2022-12-11 21:13:37 +00:00 (Migrated from github.com)
Review

Так что именно в этом файле-то? )

Так что именно в этом файле-то? )
Review

В androidx.car.app.R.array.hosts_allowlist_sample?
Массив таких строк:
fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf,com.google.android.projection.gearhead

Первая часть - цифровая подпись, вторая - имя пакета

* @param packageName host package name (as reported by {@link PackageManager})
* @param digest      SHA256 digest of the DER encoding of the allow-listed host
*                    certificate, formatted as 32 lowercase 2 digits  hexadecimal values
*                    separated by colon (e.g.:"000102030405060708090a0b0c0d0e0f101112131415
*                    161718191a1b1c1d1e1f"). When using
*                    <a href="https://developer.android.com/about/versions/pie/android-9.0#apk-key-rotation">signature
*                    rotation</a>, this digest should correspond to the initial signing
*                    certificate

Только сейчас обратил внимание на это:

Application developers are expected to also allow connections from known hosts which don't hold the aforementioned permission (for example, Android Auto and Android Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts.

Но я не смог найти никакого общего списка хостов или хотя бы какого-то упоминания о том, что люди добавляли в этот список еще что-то. Поэтому, наверное, можно на это не обращать внимания. По крайней мере пока что.

В `androidx.car.app.R.array.hosts_allowlist_sample`? Массив таких строк: `fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf,com.google.android.projection.gearhead` Первая часть - цифровая подпись, вторая - имя пакета ```java * @param packageName host package name (as reported by {@link PackageManager}) * @param digest SHA256 digest of the DER encoding of the allow-listed host * certificate, formatted as 32 lowercase 2 digits hexadecimal values * separated by colon (e.g.:"000102030405060708090a0b0c0d0e0f101112131415 * 161718191a1b1c1d1e1f"). When using * <a href="https://developer.android.com/about/versions/pie/android-9.0#apk-key-rotation">signature * rotation</a>, this digest should correspond to the initial signing * certificate ``` Только сейчас обратил внимание на это: >Application developers are expected to also allow connections from known hosts which don't hold the aforementioned permission (for example, Android Auto and Android Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts. Но я не смог найти никакого общего списка хостов или хотя бы какого-то упоминания о том, что люди добавляли в этот список еще что-то. Поэтому, наверное, можно на это не обращать внимания. По крайней мере пока что.
biodranik commented 2022-12-11 22:03:03 +00:00 (Migrated from github.com)
Review
  1. Полный список пакетов в том файле можно выложить сюда или на pastebin?
  2. Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы.
1. Полный список пакетов в том файле можно выложить сюда или на pastebin? 2. Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы.
Review
<string-array name="hosts_allowlist_sample" translatable="false">
   <item>fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf,
         com.google.android.projection.gearhead</item>
   <item>70811a3eacfd2e83e18da9bfede52df16ce91f2e69a44d21f18ab66991130771,
         com.google.android.projection.gearhead</item>
   <item>1975b2f17177bc89a5dff31f9e64a6cae281a53dc1d1d59b1d147fe1c82afa00,
         com.google.android.projection.gearhead</item>
   <item>c241ffbc8e287c4e9a4ad19632ba1b1351ad361d5177b7d7b29859bd2b7fc631,
         com.google.android.apps.automotive.templates.host</item>
   <item>dd66deaf312d8daec7adbe85a218ecc8c64f3b152f9b5998d5b29300c2623f61,
         com.google.android.apps.automotive.templates.host</item>
   <item>50e603d333c6049a37bd751375d08f3bd0abebd33facd30bd17b64b89658b421,
         com.google.android.apps.automotive.templates.host</item>
</string-array>
```xml <string-array name="hosts_allowlist_sample" translatable="false"> <item>fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf, com.google.android.projection.gearhead</item> <item>70811a3eacfd2e83e18da9bfede52df16ce91f2e69a44d21f18ab66991130771, com.google.android.projection.gearhead</item> <item>1975b2f17177bc89a5dff31f9e64a6cae281a53dc1d1d59b1d147fe1c82afa00, com.google.android.projection.gearhead</item> <item>c241ffbc8e287c4e9a4ad19632ba1b1351ad361d5177b7d7b29859bd2b7fc631, com.google.android.apps.automotive.templates.host</item> <item>dd66deaf312d8daec7adbe85a218ecc8c64f3b152f9b5998d5b29300c2623f61, com.google.android.apps.automotive.templates.host</item> <item>50e603d333c6049a37bd751375d08f3bd0abebd33facd30bd17b64b89658b421, com.google.android.apps.automotive.templates.host</item> </string-array> ```
Review

Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы.

Тут если что подразумевается API хоста, а не телефона

>Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы. Тут если что подразумевается API хоста, а не телефона
.build();
Review

What are potential security implications here?

What are potential security implications here?
Review

Код из примера. Объяснений, для чего это сделано, нигде не нашел

Ссылка на пример

Код из примера. Объяснений, для чего это сделано, нигде не нашел [Ссылка на пример](https://github.com/android/car-samples/blob/03440d5e974a060d0216b5e02a7fe3c46b7b9469/car_app_library/navigation/common/src/main/java/androidx/car/app/sample/navigation/common/car/NavigationCarAppService.java)
biodranik commented 2022-12-08 18:15:46 +00:00 (Migrated from github.com)
Review

У нас принято разбираться и писать только тот код, который мы чётко понимаем, для чего и зачем он нужен. И стараемся, чтобы было понятно другим, кто читает код, в т.ч. оставляя комментарии.

У нас принято разбираться и писать только тот код, который мы чётко понимаем, для чего и зачем он нужен. И стараемся, чтобы было понятно другим, кто читает код, в т.ч. оставляя комментарии.
Review

Вот такое объяснение в документации.

    /**
     * Returns the {@link HostValidator} this service will use to accept or reject host connections.
     *
     * <p>By default, the provided {@link HostValidator.Builder} would produce a validator that
     * only accepts connections from hosts holding
     * {@link HostValidator#TEMPLATE_RENDERER_PERMISSION} permission.
     *
     * <p>Application developers are expected to also allow connections from known hosts which
     * don't hold the aforementioned permission (for example, Android Auto and Android
     * Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts.
     *
     * <p>Refer to {@code androidx.car.app.R.array.hosts_allowlist_sample} to obtain a
     * list of package names and signatures that should be allow-listed by default.
     *
     * <p>It is also advised to allow connections from unknown hosts in debug builds to facilitate
     * debugging and testing.
     *
     * <p>Below is an example of this method implementation:
     *
     * <pre>
     * &#64;Override
     * &#64;NonNull
     * public HostValidator createHostValidator() {
     *     if ((getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0) {
     *         return HostValidator.ALLOW_ALL_HOSTS_VALIDATOR;
     *     } else {
     *         return new HostValidator.Builder(context)
     *             .addAllowedHosts(androidx.car.app.R.array.hosts_allowlist_sample)
     *             .build();
     *     }
     * }
     * </pre>
     */
Вот такое объяснение в документации. ```java /** * Returns the {@link HostValidator} this service will use to accept or reject host connections. * * <p>By default, the provided {@link HostValidator.Builder} would produce a validator that * only accepts connections from hosts holding * {@link HostValidator#TEMPLATE_RENDERER_PERMISSION} permission. * * <p>Application developers are expected to also allow connections from known hosts which * don't hold the aforementioned permission (for example, Android Auto and Android * Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts. * * <p>Refer to {@code androidx.car.app.R.array.hosts_allowlist_sample} to obtain a * list of package names and signatures that should be allow-listed by default. * * <p>It is also advised to allow connections from unknown hosts in debug builds to facilitate * debugging and testing. * * <p>Below is an example of this method implementation: * * <pre> * &#64;Override * &#64;NonNull * public HostValidator createHostValidator() { * if ((getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0) { * return HostValidator.ALLOW_ALL_HOSTS_VALIDATOR; * } else { * return new HostValidator.Builder(context) * .addAllowedHosts(androidx.car.app.R.array.hosts_allowlist_sample) * .build(); * } * } * </pre> */ ```
biodranik commented 2022-12-11 12:25:45 +00:00 (Migrated from github.com)
Review
  1. Так какие приложения перечислены в androidx.car.app.R.array.hosts_allowlist_sample ? Я так понял, для работы с апи <31 нам придётся их перечислить.
  2. Почему бы для отладки не сделать проще: if (BuildConfig.DEBUG) ?
  3. код может быть проще:
if ()
  return ...;
return ...;
1. Так какие приложения перечислены в androidx.car.app.R.array.hosts_allowlist_sample ? Я так понял, для работы с апи <31 нам придётся их перечислить. 2. Почему бы для отладки не сделать проще: if (BuildConfig.DEBUG) ? 3. код может быть проще: ``` if () return ...; return ...; ```
Review

Все не так. Почитал я, как работает HostValidator класс.

  • Он проверяет Host, т.е. магнитолу на которой запускается AA
  • Подключение к хосту разрешается в двух случаях
    • Либо хост указан в списке, который мы передаем
    • Либо хост имеет у себя android.car.permission.TEMPLATE_RENDERER

Поэтому я заменил R.array.car_hosts на androidx.car.app.R.array.hosts_allowlist_sample. Думаю, смысла держать свой список разрешенных хостов нет, а на warning можно закрыть глаза.

Warning:

The resource @array/hosts_allowlist_sample is marked as private in androidx.car.app:app:1.3.0-rc01

Все не так. Почитал я, как работает HostValidator класс. * Он проверяет Host, т.е. магнитолу на которой запускается AA * Подключение к хосту разрешается в двух случаях * Либо хост указан в списке, который мы передаем * Либо хост имеет у себя `android.car.permission.TEMPLATE_RENDERER` Поэтому я заменил `R.array.car_hosts` на `androidx.car.app.R.array.hosts_allowlist_sample`. Думаю, смысла держать свой список разрешенных хостов нет, а на warning можно закрыть глаза. Warning: >The resource @array/hosts_allowlist_sample is marked as private in androidx.car.app:app:1.3.0-rc01
biodranik commented 2022-12-11 21:13:37 +00:00 (Migrated from github.com)
Review

Так что именно в этом файле-то? )

Так что именно в этом файле-то? )
Review

В androidx.car.app.R.array.hosts_allowlist_sample?
Массив таких строк:
fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf,com.google.android.projection.gearhead

Первая часть - цифровая подпись, вторая - имя пакета

* @param packageName host package name (as reported by {@link PackageManager})
* @param digest      SHA256 digest of the DER encoding of the allow-listed host
*                    certificate, formatted as 32 lowercase 2 digits  hexadecimal values
*                    separated by colon (e.g.:"000102030405060708090a0b0c0d0e0f101112131415
*                    161718191a1b1c1d1e1f"). When using
*                    <a href="https://developer.android.com/about/versions/pie/android-9.0#apk-key-rotation">signature
*                    rotation</a>, this digest should correspond to the initial signing
*                    certificate

Только сейчас обратил внимание на это:

Application developers are expected to also allow connections from known hosts which don't hold the aforementioned permission (for example, Android Auto and Android Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts.

Но я не смог найти никакого общего списка хостов или хотя бы какого-то упоминания о том, что люди добавляли в этот список еще что-то. Поэтому, наверное, можно на это не обращать внимания. По крайней мере пока что.

В `androidx.car.app.R.array.hosts_allowlist_sample`? Массив таких строк: `fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf,com.google.android.projection.gearhead` Первая часть - цифровая подпись, вторая - имя пакета ```java * @param packageName host package name (as reported by {@link PackageManager}) * @param digest SHA256 digest of the DER encoding of the allow-listed host * certificate, formatted as 32 lowercase 2 digits hexadecimal values * separated by colon (e.g.:"000102030405060708090a0b0c0d0e0f101112131415 * 161718191a1b1c1d1e1f"). When using * <a href="https://developer.android.com/about/versions/pie/android-9.0#apk-key-rotation">signature * rotation</a>, this digest should correspond to the initial signing * certificate ``` Только сейчас обратил внимание на это: >Application developers are expected to also allow connections from known hosts which don't hold the aforementioned permission (for example, Android Auto and Android Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts. Но я не смог найти никакого общего списка хостов или хотя бы какого-то упоминания о том, что люди добавляли в этот список еще что-то. Поэтому, наверное, можно на это не обращать внимания. По крайней мере пока что.
biodranik commented 2022-12-11 22:03:03 +00:00 (Migrated from github.com)
Review
  1. Полный список пакетов в том файле можно выложить сюда или на pastebin?
  2. Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы.
1. Полный список пакетов в том файле можно выложить сюда или на pastebin? 2. Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы.
Review
<string-array name="hosts_allowlist_sample" translatable="false">
   <item>fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf,
         com.google.android.projection.gearhead</item>
   <item>70811a3eacfd2e83e18da9bfede52df16ce91f2e69a44d21f18ab66991130771,
         com.google.android.projection.gearhead</item>
   <item>1975b2f17177bc89a5dff31f9e64a6cae281a53dc1d1d59b1d147fe1c82afa00,
         com.google.android.projection.gearhead</item>
   <item>c241ffbc8e287c4e9a4ad19632ba1b1351ad361d5177b7d7b29859bd2b7fc631,
         com.google.android.apps.automotive.templates.host</item>
   <item>dd66deaf312d8daec7adbe85a218ecc8c64f3b152f9b5998d5b29300c2623f61,
         com.google.android.apps.automotive.templates.host</item>
   <item>50e603d333c6049a37bd751375d08f3bd0abebd33facd30bd17b64b89658b421,
         com.google.android.apps.automotive.templates.host</item>
</string-array>
```xml <string-array name="hosts_allowlist_sample" translatable="false"> <item>fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf, com.google.android.projection.gearhead</item> <item>70811a3eacfd2e83e18da9bfede52df16ce91f2e69a44d21f18ab66991130771, com.google.android.projection.gearhead</item> <item>1975b2f17177bc89a5dff31f9e64a6cae281a53dc1d1d59b1d147fe1c82afa00, com.google.android.projection.gearhead</item> <item>c241ffbc8e287c4e9a4ad19632ba1b1351ad361d5177b7d7b29859bd2b7fc631, com.google.android.apps.automotive.templates.host</item> <item>dd66deaf312d8daec7adbe85a218ecc8c64f3b152f9b5998d5b29300c2623f61, com.google.android.apps.automotive.templates.host</item> <item>50e603d333c6049a37bd751375d08f3bd0abebd33facd30bd17b64b89658b421, com.google.android.apps.automotive.templates.host</item> </string-array> ```
Review

Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы.

Тут если что подразумевается API хоста, а не телефона

>Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы. Тут если что подразумевается API хоста, а не телефона
}
Review

What are potential security implications here?

What are potential security implications here?
Review

Код из примера. Объяснений, для чего это сделано, нигде не нашел

Ссылка на пример

Код из примера. Объяснений, для чего это сделано, нигде не нашел [Ссылка на пример](https://github.com/android/car-samples/blob/03440d5e974a060d0216b5e02a7fe3c46b7b9469/car_app_library/navigation/common/src/main/java/androidx/car/app/sample/navigation/common/car/NavigationCarAppService.java)
biodranik commented 2022-12-08 18:15:46 +00:00 (Migrated from github.com)
Review

У нас принято разбираться и писать только тот код, который мы чётко понимаем, для чего и зачем он нужен. И стараемся, чтобы было понятно другим, кто читает код, в т.ч. оставляя комментарии.

У нас принято разбираться и писать только тот код, который мы чётко понимаем, для чего и зачем он нужен. И стараемся, чтобы было понятно другим, кто читает код, в т.ч. оставляя комментарии.
Review

Вот такое объяснение в документации.

    /**
     * Returns the {@link HostValidator} this service will use to accept or reject host connections.
     *
     * <p>By default, the provided {@link HostValidator.Builder} would produce a validator that
     * only accepts connections from hosts holding
     * {@link HostValidator#TEMPLATE_RENDERER_PERMISSION} permission.
     *
     * <p>Application developers are expected to also allow connections from known hosts which
     * don't hold the aforementioned permission (for example, Android Auto and Android
     * Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts.
     *
     * <p>Refer to {@code androidx.car.app.R.array.hosts_allowlist_sample} to obtain a
     * list of package names and signatures that should be allow-listed by default.
     *
     * <p>It is also advised to allow connections from unknown hosts in debug builds to facilitate
     * debugging and testing.
     *
     * <p>Below is an example of this method implementation:
     *
     * <pre>
     * &#64;Override
     * &#64;NonNull
     * public HostValidator createHostValidator() {
     *     if ((getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0) {
     *         return HostValidator.ALLOW_ALL_HOSTS_VALIDATOR;
     *     } else {
     *         return new HostValidator.Builder(context)
     *             .addAllowedHosts(androidx.car.app.R.array.hosts_allowlist_sample)
     *             .build();
     *     }
     * }
     * </pre>
     */
Вот такое объяснение в документации. ```java /** * Returns the {@link HostValidator} this service will use to accept or reject host connections. * * <p>By default, the provided {@link HostValidator.Builder} would produce a validator that * only accepts connections from hosts holding * {@link HostValidator#TEMPLATE_RENDERER_PERMISSION} permission. * * <p>Application developers are expected to also allow connections from known hosts which * don't hold the aforementioned permission (for example, Android Auto and Android * Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts. * * <p>Refer to {@code androidx.car.app.R.array.hosts_allowlist_sample} to obtain a * list of package names and signatures that should be allow-listed by default. * * <p>It is also advised to allow connections from unknown hosts in debug builds to facilitate * debugging and testing. * * <p>Below is an example of this method implementation: * * <pre> * &#64;Override * &#64;NonNull * public HostValidator createHostValidator() { * if ((getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0) { * return HostValidator.ALLOW_ALL_HOSTS_VALIDATOR; * } else { * return new HostValidator.Builder(context) * .addAllowedHosts(androidx.car.app.R.array.hosts_allowlist_sample) * .build(); * } * } * </pre> */ ```
biodranik commented 2022-12-11 12:25:45 +00:00 (Migrated from github.com)
Review
  1. Так какие приложения перечислены в androidx.car.app.R.array.hosts_allowlist_sample ? Я так понял, для работы с апи <31 нам придётся их перечислить.
  2. Почему бы для отладки не сделать проще: if (BuildConfig.DEBUG) ?
  3. код может быть проще:
if ()
  return ...;
return ...;
1. Так какие приложения перечислены в androidx.car.app.R.array.hosts_allowlist_sample ? Я так понял, для работы с апи <31 нам придётся их перечислить. 2. Почему бы для отладки не сделать проще: if (BuildConfig.DEBUG) ? 3. код может быть проще: ``` if () return ...; return ...; ```
Review

Все не так. Почитал я, как работает HostValidator класс.

  • Он проверяет Host, т.е. магнитолу на которой запускается AA
  • Подключение к хосту разрешается в двух случаях
    • Либо хост указан в списке, который мы передаем
    • Либо хост имеет у себя android.car.permission.TEMPLATE_RENDERER

Поэтому я заменил R.array.car_hosts на androidx.car.app.R.array.hosts_allowlist_sample. Думаю, смысла держать свой список разрешенных хостов нет, а на warning можно закрыть глаза.

Warning:

The resource @array/hosts_allowlist_sample is marked as private in androidx.car.app:app:1.3.0-rc01

Все не так. Почитал я, как работает HostValidator класс. * Он проверяет Host, т.е. магнитолу на которой запускается AA * Подключение к хосту разрешается в двух случаях * Либо хост указан в списке, который мы передаем * Либо хост имеет у себя `android.car.permission.TEMPLATE_RENDERER` Поэтому я заменил `R.array.car_hosts` на `androidx.car.app.R.array.hosts_allowlist_sample`. Думаю, смысла держать свой список разрешенных хостов нет, а на warning можно закрыть глаза. Warning: >The resource @array/hosts_allowlist_sample is marked as private in androidx.car.app:app:1.3.0-rc01
biodranik commented 2022-12-11 21:13:37 +00:00 (Migrated from github.com)
Review

Так что именно в этом файле-то? )

Так что именно в этом файле-то? )
Review

В androidx.car.app.R.array.hosts_allowlist_sample?
Массив таких строк:
fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf,com.google.android.projection.gearhead

Первая часть - цифровая подпись, вторая - имя пакета

* @param packageName host package name (as reported by {@link PackageManager})
* @param digest      SHA256 digest of the DER encoding of the allow-listed host
*                    certificate, formatted as 32 lowercase 2 digits  hexadecimal values
*                    separated by colon (e.g.:"000102030405060708090a0b0c0d0e0f101112131415
*                    161718191a1b1c1d1e1f"). When using
*                    <a href="https://developer.android.com/about/versions/pie/android-9.0#apk-key-rotation">signature
*                    rotation</a>, this digest should correspond to the initial signing
*                    certificate

Только сейчас обратил внимание на это:

Application developers are expected to also allow connections from known hosts which don't hold the aforementioned permission (for example, Android Auto and Android Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts.

Но я не смог найти никакого общего списка хостов или хотя бы какого-то упоминания о том, что люди добавляли в этот список еще что-то. Поэтому, наверное, можно на это не обращать внимания. По крайней мере пока что.

В `androidx.car.app.R.array.hosts_allowlist_sample`? Массив таких строк: `fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf,com.google.android.projection.gearhead` Первая часть - цифровая подпись, вторая - имя пакета ```java * @param packageName host package name (as reported by {@link PackageManager}) * @param digest SHA256 digest of the DER encoding of the allow-listed host * certificate, formatted as 32 lowercase 2 digits hexadecimal values * separated by colon (e.g.:"000102030405060708090a0b0c0d0e0f101112131415 * 161718191a1b1c1d1e1f"). When using * <a href="https://developer.android.com/about/versions/pie/android-9.0#apk-key-rotation">signature * rotation</a>, this digest should correspond to the initial signing * certificate ``` Только сейчас обратил внимание на это: >Application developers are expected to also allow connections from known hosts which don't hold the aforementioned permission (for example, Android Auto and Android Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts. Но я не смог найти никакого общего списка хостов или хотя бы какого-то упоминания о том, что люди добавляли в этот список еще что-то. Поэтому, наверное, можно на это не обращать внимания. По крайней мере пока что.
biodranik commented 2022-12-11 22:03:03 +00:00 (Migrated from github.com)
Review
  1. Полный список пакетов в том файле можно выложить сюда или на pastebin?
  2. Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы.
1. Полный список пакетов в том файле можно выложить сюда или на pastebin? 2. Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы.
Review
<string-array name="hosts_allowlist_sample" translatable="false">
   <item>fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf,
         com.google.android.projection.gearhead</item>
   <item>70811a3eacfd2e83e18da9bfede52df16ce91f2e69a44d21f18ab66991130771,
         com.google.android.projection.gearhead</item>
   <item>1975b2f17177bc89a5dff31f9e64a6cae281a53dc1d1d59b1d147fe1c82afa00,
         com.google.android.projection.gearhead</item>
   <item>c241ffbc8e287c4e9a4ad19632ba1b1351ad361d5177b7d7b29859bd2b7fc631,
         com.google.android.apps.automotive.templates.host</item>
   <item>dd66deaf312d8daec7adbe85a218ecc8c64f3b152f9b5998d5b29300c2623f61,
         com.google.android.apps.automotive.templates.host</item>
   <item>50e603d333c6049a37bd751375d08f3bd0abebd33facd30bd17b64b89658b421,
         com.google.android.apps.automotive.templates.host</item>
</string-array>
```xml <string-array name="hosts_allowlist_sample" translatable="false"> <item>fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf, com.google.android.projection.gearhead</item> <item>70811a3eacfd2e83e18da9bfede52df16ce91f2e69a44d21f18ab66991130771, com.google.android.projection.gearhead</item> <item>1975b2f17177bc89a5dff31f9e64a6cae281a53dc1d1d59b1d147fe1c82afa00, com.google.android.projection.gearhead</item> <item>c241ffbc8e287c4e9a4ad19632ba1b1351ad361d5177b7d7b29859bd2b7fc631, com.google.android.apps.automotive.templates.host</item> <item>dd66deaf312d8daec7adbe85a218ecc8c64f3b152f9b5998d5b29300c2623f61, com.google.android.apps.automotive.templates.host</item> <item>50e603d333c6049a37bd751375d08f3bd0abebd33facd30bd17b64b89658b421, com.google.android.apps.automotive.templates.host</item> </string-array> ```
Review

Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы.

Тут если что подразумевается API хоста, а не телефона

>Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы. Тут если что подразумевается API хоста, а не телефона
Review

What are potential security implications here?

What are potential security implications here?
Review

Код из примера. Объяснений, для чего это сделано, нигде не нашел

Ссылка на пример

Код из примера. Объяснений, для чего это сделано, нигде не нашел [Ссылка на пример](https://github.com/android/car-samples/blob/03440d5e974a060d0216b5e02a7fe3c46b7b9469/car_app_library/navigation/common/src/main/java/androidx/car/app/sample/navigation/common/car/NavigationCarAppService.java)
biodranik commented 2022-12-08 18:15:46 +00:00 (Migrated from github.com)
Review

У нас принято разбираться и писать только тот код, который мы чётко понимаем, для чего и зачем он нужен. И стараемся, чтобы было понятно другим, кто читает код, в т.ч. оставляя комментарии.

У нас принято разбираться и писать только тот код, который мы чётко понимаем, для чего и зачем он нужен. И стараемся, чтобы было понятно другим, кто читает код, в т.ч. оставляя комментарии.
Review

Вот такое объяснение в документации.

    /**
     * Returns the {@link HostValidator} this service will use to accept or reject host connections.
     *
     * <p>By default, the provided {@link HostValidator.Builder} would produce a validator that
     * only accepts connections from hosts holding
     * {@link HostValidator#TEMPLATE_RENDERER_PERMISSION} permission.
     *
     * <p>Application developers are expected to also allow connections from known hosts which
     * don't hold the aforementioned permission (for example, Android Auto and Android
     * Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts.
     *
     * <p>Refer to {@code androidx.car.app.R.array.hosts_allowlist_sample} to obtain a
     * list of package names and signatures that should be allow-listed by default.
     *
     * <p>It is also advised to allow connections from unknown hosts in debug builds to facilitate
     * debugging and testing.
     *
     * <p>Below is an example of this method implementation:
     *
     * <pre>
     * &#64;Override
     * &#64;NonNull
     * public HostValidator createHostValidator() {
     *     if ((getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0) {
     *         return HostValidator.ALLOW_ALL_HOSTS_VALIDATOR;
     *     } else {
     *         return new HostValidator.Builder(context)
     *             .addAllowedHosts(androidx.car.app.R.array.hosts_allowlist_sample)
     *             .build();
     *     }
     * }
     * </pre>
     */
Вот такое объяснение в документации. ```java /** * Returns the {@link HostValidator} this service will use to accept or reject host connections. * * <p>By default, the provided {@link HostValidator.Builder} would produce a validator that * only accepts connections from hosts holding * {@link HostValidator#TEMPLATE_RENDERER_PERMISSION} permission. * * <p>Application developers are expected to also allow connections from known hosts which * don't hold the aforementioned permission (for example, Android Auto and Android * Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts. * * <p>Refer to {@code androidx.car.app.R.array.hosts_allowlist_sample} to obtain a * list of package names and signatures that should be allow-listed by default. * * <p>It is also advised to allow connections from unknown hosts in debug builds to facilitate * debugging and testing. * * <p>Below is an example of this method implementation: * * <pre> * &#64;Override * &#64;NonNull * public HostValidator createHostValidator() { * if ((getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0) { * return HostValidator.ALLOW_ALL_HOSTS_VALIDATOR; * } else { * return new HostValidator.Builder(context) * .addAllowedHosts(androidx.car.app.R.array.hosts_allowlist_sample) * .build(); * } * } * </pre> */ ```
biodranik commented 2022-12-11 12:25:45 +00:00 (Migrated from github.com)
Review
  1. Так какие приложения перечислены в androidx.car.app.R.array.hosts_allowlist_sample ? Я так понял, для работы с апи <31 нам придётся их перечислить.
  2. Почему бы для отладки не сделать проще: if (BuildConfig.DEBUG) ?
  3. код может быть проще:
if ()
  return ...;
return ...;
1. Так какие приложения перечислены в androidx.car.app.R.array.hosts_allowlist_sample ? Я так понял, для работы с апи <31 нам придётся их перечислить. 2. Почему бы для отладки не сделать проще: if (BuildConfig.DEBUG) ? 3. код может быть проще: ``` if () return ...; return ...; ```
Review

Все не так. Почитал я, как работает HostValidator класс.

  • Он проверяет Host, т.е. магнитолу на которой запускается AA
  • Подключение к хосту разрешается в двух случаях
    • Либо хост указан в списке, который мы передаем
    • Либо хост имеет у себя android.car.permission.TEMPLATE_RENDERER

Поэтому я заменил R.array.car_hosts на androidx.car.app.R.array.hosts_allowlist_sample. Думаю, смысла держать свой список разрешенных хостов нет, а на warning можно закрыть глаза.

Warning:

The resource @array/hosts_allowlist_sample is marked as private in androidx.car.app:app:1.3.0-rc01

Все не так. Почитал я, как работает HostValidator класс. * Он проверяет Host, т.е. магнитолу на которой запускается AA * Подключение к хосту разрешается в двух случаях * Либо хост указан в списке, который мы передаем * Либо хост имеет у себя `android.car.permission.TEMPLATE_RENDERER` Поэтому я заменил `R.array.car_hosts` на `androidx.car.app.R.array.hosts_allowlist_sample`. Думаю, смысла держать свой список разрешенных хостов нет, а на warning можно закрыть глаза. Warning: >The resource @array/hosts_allowlist_sample is marked as private in androidx.car.app:app:1.3.0-rc01
biodranik commented 2022-12-11 21:13:37 +00:00 (Migrated from github.com)
Review

Так что именно в этом файле-то? )

Так что именно в этом файле-то? )
Review

В androidx.car.app.R.array.hosts_allowlist_sample?
Массив таких строк:
fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf,com.google.android.projection.gearhead

Первая часть - цифровая подпись, вторая - имя пакета

* @param packageName host package name (as reported by {@link PackageManager})
* @param digest      SHA256 digest of the DER encoding of the allow-listed host
*                    certificate, formatted as 32 lowercase 2 digits  hexadecimal values
*                    separated by colon (e.g.:"000102030405060708090a0b0c0d0e0f101112131415
*                    161718191a1b1c1d1e1f"). When using
*                    <a href="https://developer.android.com/about/versions/pie/android-9.0#apk-key-rotation">signature
*                    rotation</a>, this digest should correspond to the initial signing
*                    certificate

Только сейчас обратил внимание на это:

Application developers are expected to also allow connections from known hosts which don't hold the aforementioned permission (for example, Android Auto and Android Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts.

Но я не смог найти никакого общего списка хостов или хотя бы какого-то упоминания о том, что люди добавляли в этот список еще что-то. Поэтому, наверное, можно на это не обращать внимания. По крайней мере пока что.

В `androidx.car.app.R.array.hosts_allowlist_sample`? Массив таких строк: `fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf,com.google.android.projection.gearhead` Первая часть - цифровая подпись, вторая - имя пакета ```java * @param packageName host package name (as reported by {@link PackageManager}) * @param digest SHA256 digest of the DER encoding of the allow-listed host * certificate, formatted as 32 lowercase 2 digits hexadecimal values * separated by colon (e.g.:"000102030405060708090a0b0c0d0e0f101112131415 * 161718191a1b1c1d1e1f"). When using * <a href="https://developer.android.com/about/versions/pie/android-9.0#apk-key-rotation">signature * rotation</a>, this digest should correspond to the initial signing * certificate ``` Только сейчас обратил внимание на это: >Application developers are expected to also allow connections from known hosts which don't hold the aforementioned permission (for example, Android Auto and Android Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts. Но я не смог найти никакого общего списка хостов или хотя бы какого-то упоминания о том, что люди добавляли в этот список еще что-то. Поэтому, наверное, можно на это не обращать внимания. По крайней мере пока что.
biodranik commented 2022-12-11 22:03:03 +00:00 (Migrated from github.com)
Review
  1. Полный список пакетов в том файле можно выложить сюда или на pastebin?
  2. Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы.
1. Полный список пакетов в том файле можно выложить сюда или на pastebin? 2. Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы.
Review
<string-array name="hosts_allowlist_sample" translatable="false">
   <item>fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf,
         com.google.android.projection.gearhead</item>
   <item>70811a3eacfd2e83e18da9bfede52df16ce91f2e69a44d21f18ab66991130771,
         com.google.android.projection.gearhead</item>
   <item>1975b2f17177bc89a5dff31f9e64a6cae281a53dc1d1d59b1d147fe1c82afa00,
         com.google.android.projection.gearhead</item>
   <item>c241ffbc8e287c4e9a4ad19632ba1b1351ad361d5177b7d7b29859bd2b7fc631,
         com.google.android.apps.automotive.templates.host</item>
   <item>dd66deaf312d8daec7adbe85a218ecc8c64f3b152f9b5998d5b29300c2623f61,
         com.google.android.apps.automotive.templates.host</item>
   <item>50e603d333c6049a37bd751375d08f3bd0abebd33facd30bd17b64b89658b421,
         com.google.android.apps.automotive.templates.host</item>
</string-array>
```xml <string-array name="hosts_allowlist_sample" translatable="false"> <item>fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf, com.google.android.projection.gearhead</item> <item>70811a3eacfd2e83e18da9bfede52df16ce91f2e69a44d21f18ab66991130771, com.google.android.projection.gearhead</item> <item>1975b2f17177bc89a5dff31f9e64a6cae281a53dc1d1d59b1d147fe1c82afa00, com.google.android.projection.gearhead</item> <item>c241ffbc8e287c4e9a4ad19632ba1b1351ad361d5177b7d7b29859bd2b7fc631, com.google.android.apps.automotive.templates.host</item> <item>dd66deaf312d8daec7adbe85a218ecc8c64f3b152f9b5998d5b29300c2623f61, com.google.android.apps.automotive.templates.host</item> <item>50e603d333c6049a37bd751375d08f3bd0abebd33facd30bd17b64b89658b421, com.google.android.apps.automotive.templates.host</item> </string-array> ```
Review

Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы.

Тут если что подразумевается API хоста, а не телефона

>Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы. Тут если что подразумевается API хоста, а не телефона
@NonNull
Review

What are potential security implications here?

What are potential security implications here?
Review

Код из примера. Объяснений, для чего это сделано, нигде не нашел

Ссылка на пример

Код из примера. Объяснений, для чего это сделано, нигде не нашел [Ссылка на пример](https://github.com/android/car-samples/blob/03440d5e974a060d0216b5e02a7fe3c46b7b9469/car_app_library/navigation/common/src/main/java/androidx/car/app/sample/navigation/common/car/NavigationCarAppService.java)
biodranik commented 2022-12-08 18:15:46 +00:00 (Migrated from github.com)
Review

У нас принято разбираться и писать только тот код, который мы чётко понимаем, для чего и зачем он нужен. И стараемся, чтобы было понятно другим, кто читает код, в т.ч. оставляя комментарии.

У нас принято разбираться и писать только тот код, который мы чётко понимаем, для чего и зачем он нужен. И стараемся, чтобы было понятно другим, кто читает код, в т.ч. оставляя комментарии.
Review

Вот такое объяснение в документации.

    /**
     * Returns the {@link HostValidator} this service will use to accept or reject host connections.
     *
     * <p>By default, the provided {@link HostValidator.Builder} would produce a validator that
     * only accepts connections from hosts holding
     * {@link HostValidator#TEMPLATE_RENDERER_PERMISSION} permission.
     *
     * <p>Application developers are expected to also allow connections from known hosts which
     * don't hold the aforementioned permission (for example, Android Auto and Android
     * Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts.
     *
     * <p>Refer to {@code androidx.car.app.R.array.hosts_allowlist_sample} to obtain a
     * list of package names and signatures that should be allow-listed by default.
     *
     * <p>It is also advised to allow connections from unknown hosts in debug builds to facilitate
     * debugging and testing.
     *
     * <p>Below is an example of this method implementation:
     *
     * <pre>
     * &#64;Override
     * &#64;NonNull
     * public HostValidator createHostValidator() {
     *     if ((getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0) {
     *         return HostValidator.ALLOW_ALL_HOSTS_VALIDATOR;
     *     } else {
     *         return new HostValidator.Builder(context)
     *             .addAllowedHosts(androidx.car.app.R.array.hosts_allowlist_sample)
     *             .build();
     *     }
     * }
     * </pre>
     */
Вот такое объяснение в документации. ```java /** * Returns the {@link HostValidator} this service will use to accept or reject host connections. * * <p>By default, the provided {@link HostValidator.Builder} would produce a validator that * only accepts connections from hosts holding * {@link HostValidator#TEMPLATE_RENDERER_PERMISSION} permission. * * <p>Application developers are expected to also allow connections from known hosts which * don't hold the aforementioned permission (for example, Android Auto and Android * Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts. * * <p>Refer to {@code androidx.car.app.R.array.hosts_allowlist_sample} to obtain a * list of package names and signatures that should be allow-listed by default. * * <p>It is also advised to allow connections from unknown hosts in debug builds to facilitate * debugging and testing. * * <p>Below is an example of this method implementation: * * <pre> * &#64;Override * &#64;NonNull * public HostValidator createHostValidator() { * if ((getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0) { * return HostValidator.ALLOW_ALL_HOSTS_VALIDATOR; * } else { * return new HostValidator.Builder(context) * .addAllowedHosts(androidx.car.app.R.array.hosts_allowlist_sample) * .build(); * } * } * </pre> */ ```
biodranik commented 2022-12-11 12:25:45 +00:00 (Migrated from github.com)
Review
  1. Так какие приложения перечислены в androidx.car.app.R.array.hosts_allowlist_sample ? Я так понял, для работы с апи <31 нам придётся их перечислить.
  2. Почему бы для отладки не сделать проще: if (BuildConfig.DEBUG) ?
  3. код может быть проще:
if ()
  return ...;
return ...;
1. Так какие приложения перечислены в androidx.car.app.R.array.hosts_allowlist_sample ? Я так понял, для работы с апи <31 нам придётся их перечислить. 2. Почему бы для отладки не сделать проще: if (BuildConfig.DEBUG) ? 3. код может быть проще: ``` if () return ...; return ...; ```
Review

Все не так. Почитал я, как работает HostValidator класс.

  • Он проверяет Host, т.е. магнитолу на которой запускается AA
  • Подключение к хосту разрешается в двух случаях
    • Либо хост указан в списке, который мы передаем
    • Либо хост имеет у себя android.car.permission.TEMPLATE_RENDERER

Поэтому я заменил R.array.car_hosts на androidx.car.app.R.array.hosts_allowlist_sample. Думаю, смысла держать свой список разрешенных хостов нет, а на warning можно закрыть глаза.

Warning:

The resource @array/hosts_allowlist_sample is marked as private in androidx.car.app:app:1.3.0-rc01

Все не так. Почитал я, как работает HostValidator класс. * Он проверяет Host, т.е. магнитолу на которой запускается AA * Подключение к хосту разрешается в двух случаях * Либо хост указан в списке, который мы передаем * Либо хост имеет у себя `android.car.permission.TEMPLATE_RENDERER` Поэтому я заменил `R.array.car_hosts` на `androidx.car.app.R.array.hosts_allowlist_sample`. Думаю, смысла держать свой список разрешенных хостов нет, а на warning можно закрыть глаза. Warning: >The resource @array/hosts_allowlist_sample is marked as private in androidx.car.app:app:1.3.0-rc01
biodranik commented 2022-12-11 21:13:37 +00:00 (Migrated from github.com)
Review

Так что именно в этом файле-то? )

Так что именно в этом файле-то? )
Review

В androidx.car.app.R.array.hosts_allowlist_sample?
Массив таких строк:
fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf,com.google.android.projection.gearhead

Первая часть - цифровая подпись, вторая - имя пакета

* @param packageName host package name (as reported by {@link PackageManager})
* @param digest      SHA256 digest of the DER encoding of the allow-listed host
*                    certificate, formatted as 32 lowercase 2 digits  hexadecimal values
*                    separated by colon (e.g.:"000102030405060708090a0b0c0d0e0f101112131415
*                    161718191a1b1c1d1e1f"). When using
*                    <a href="https://developer.android.com/about/versions/pie/android-9.0#apk-key-rotation">signature
*                    rotation</a>, this digest should correspond to the initial signing
*                    certificate

Только сейчас обратил внимание на это:

Application developers are expected to also allow connections from known hosts which don't hold the aforementioned permission (for example, Android Auto and Android Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts.

Но я не смог найти никакого общего списка хостов или хотя бы какого-то упоминания о том, что люди добавляли в этот список еще что-то. Поэтому, наверное, можно на это не обращать внимания. По крайней мере пока что.

В `androidx.car.app.R.array.hosts_allowlist_sample`? Массив таких строк: `fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf,com.google.android.projection.gearhead` Первая часть - цифровая подпись, вторая - имя пакета ```java * @param packageName host package name (as reported by {@link PackageManager}) * @param digest SHA256 digest of the DER encoding of the allow-listed host * certificate, formatted as 32 lowercase 2 digits hexadecimal values * separated by colon (e.g.:"000102030405060708090a0b0c0d0e0f101112131415 * 161718191a1b1c1d1e1f"). When using * <a href="https://developer.android.com/about/versions/pie/android-9.0#apk-key-rotation">signature * rotation</a>, this digest should correspond to the initial signing * certificate ``` Только сейчас обратил внимание на это: >Application developers are expected to also allow connections from known hosts which don't hold the aforementioned permission (for example, Android Auto and Android Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts. Но я не смог найти никакого общего списка хостов или хотя бы какого-то упоминания о том, что люди добавляли в этот список еще что-то. Поэтому, наверное, можно на это не обращать внимания. По крайней мере пока что.
biodranik commented 2022-12-11 22:03:03 +00:00 (Migrated from github.com)
Review
  1. Полный список пакетов в том файле можно выложить сюда или на pastebin?
  2. Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы.
1. Полный список пакетов в том файле можно выложить сюда или на pastebin? 2. Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы.
Review
<string-array name="hosts_allowlist_sample" translatable="false">
   <item>fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf,
         com.google.android.projection.gearhead</item>
   <item>70811a3eacfd2e83e18da9bfede52df16ce91f2e69a44d21f18ab66991130771,
         com.google.android.projection.gearhead</item>
   <item>1975b2f17177bc89a5dff31f9e64a6cae281a53dc1d1d59b1d147fe1c82afa00,
         com.google.android.projection.gearhead</item>
   <item>c241ffbc8e287c4e9a4ad19632ba1b1351ad361d5177b7d7b29859bd2b7fc631,
         com.google.android.apps.automotive.templates.host</item>
   <item>dd66deaf312d8daec7adbe85a218ecc8c64f3b152f9b5998d5b29300c2623f61,
         com.google.android.apps.automotive.templates.host</item>
   <item>50e603d333c6049a37bd751375d08f3bd0abebd33facd30bd17b64b89658b421,
         com.google.android.apps.automotive.templates.host</item>
</string-array>
```xml <string-array name="hosts_allowlist_sample" translatable="false"> <item>fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf, com.google.android.projection.gearhead</item> <item>70811a3eacfd2e83e18da9bfede52df16ce91f2e69a44d21f18ab66991130771, com.google.android.projection.gearhead</item> <item>1975b2f17177bc89a5dff31f9e64a6cae281a53dc1d1d59b1d147fe1c82afa00, com.google.android.projection.gearhead</item> <item>c241ffbc8e287c4e9a4ad19632ba1b1351ad361d5177b7d7b29859bd2b7fc631, com.google.android.apps.automotive.templates.host</item> <item>dd66deaf312d8daec7adbe85a218ecc8c64f3b152f9b5998d5b29300c2623f61, com.google.android.apps.automotive.templates.host</item> <item>50e603d333c6049a37bd751375d08f3bd0abebd33facd30bd17b64b89658b421, com.google.android.apps.automotive.templates.host</item> </string-array> ```
Review

Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы.

Тут если что подразумевается API хоста, а не телефона

>Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы. Тут если что подразумевается API хоста, а не телефона
@Override
Review

What are potential security implications here?

What are potential security implications here?
Review

Код из примера. Объяснений, для чего это сделано, нигде не нашел

Ссылка на пример

Код из примера. Объяснений, для чего это сделано, нигде не нашел [Ссылка на пример](https://github.com/android/car-samples/blob/03440d5e974a060d0216b5e02a7fe3c46b7b9469/car_app_library/navigation/common/src/main/java/androidx/car/app/sample/navigation/common/car/NavigationCarAppService.java)
biodranik commented 2022-12-08 18:15:46 +00:00 (Migrated from github.com)
Review

У нас принято разбираться и писать только тот код, который мы чётко понимаем, для чего и зачем он нужен. И стараемся, чтобы было понятно другим, кто читает код, в т.ч. оставляя комментарии.

У нас принято разбираться и писать только тот код, который мы чётко понимаем, для чего и зачем он нужен. И стараемся, чтобы было понятно другим, кто читает код, в т.ч. оставляя комментарии.
Review

Вот такое объяснение в документации.

    /**
     * Returns the {@link HostValidator} this service will use to accept or reject host connections.
     *
     * <p>By default, the provided {@link HostValidator.Builder} would produce a validator that
     * only accepts connections from hosts holding
     * {@link HostValidator#TEMPLATE_RENDERER_PERMISSION} permission.
     *
     * <p>Application developers are expected to also allow connections from known hosts which
     * don't hold the aforementioned permission (for example, Android Auto and Android
     * Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts.
     *
     * <p>Refer to {@code androidx.car.app.R.array.hosts_allowlist_sample} to obtain a
     * list of package names and signatures that should be allow-listed by default.
     *
     * <p>It is also advised to allow connections from unknown hosts in debug builds to facilitate
     * debugging and testing.
     *
     * <p>Below is an example of this method implementation:
     *
     * <pre>
     * &#64;Override
     * &#64;NonNull
     * public HostValidator createHostValidator() {
     *     if ((getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0) {
     *         return HostValidator.ALLOW_ALL_HOSTS_VALIDATOR;
     *     } else {
     *         return new HostValidator.Builder(context)
     *             .addAllowedHosts(androidx.car.app.R.array.hosts_allowlist_sample)
     *             .build();
     *     }
     * }
     * </pre>
     */
Вот такое объяснение в документации. ```java /** * Returns the {@link HostValidator} this service will use to accept or reject host connections. * * <p>By default, the provided {@link HostValidator.Builder} would produce a validator that * only accepts connections from hosts holding * {@link HostValidator#TEMPLATE_RENDERER_PERMISSION} permission. * * <p>Application developers are expected to also allow connections from known hosts which * don't hold the aforementioned permission (for example, Android Auto and Android * Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts. * * <p>Refer to {@code androidx.car.app.R.array.hosts_allowlist_sample} to obtain a * list of package names and signatures that should be allow-listed by default. * * <p>It is also advised to allow connections from unknown hosts in debug builds to facilitate * debugging and testing. * * <p>Below is an example of this method implementation: * * <pre> * &#64;Override * &#64;NonNull * public HostValidator createHostValidator() { * if ((getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0) { * return HostValidator.ALLOW_ALL_HOSTS_VALIDATOR; * } else { * return new HostValidator.Builder(context) * .addAllowedHosts(androidx.car.app.R.array.hosts_allowlist_sample) * .build(); * } * } * </pre> */ ```
biodranik commented 2022-12-11 12:25:45 +00:00 (Migrated from github.com)
Review
  1. Так какие приложения перечислены в androidx.car.app.R.array.hosts_allowlist_sample ? Я так понял, для работы с апи <31 нам придётся их перечислить.
  2. Почему бы для отладки не сделать проще: if (BuildConfig.DEBUG) ?
  3. код может быть проще:
if ()
  return ...;
return ...;
1. Так какие приложения перечислены в androidx.car.app.R.array.hosts_allowlist_sample ? Я так понял, для работы с апи <31 нам придётся их перечислить. 2. Почему бы для отладки не сделать проще: if (BuildConfig.DEBUG) ? 3. код может быть проще: ``` if () return ...; return ...; ```
Review

Все не так. Почитал я, как работает HostValidator класс.

  • Он проверяет Host, т.е. магнитолу на которой запускается AA
  • Подключение к хосту разрешается в двух случаях
    • Либо хост указан в списке, который мы передаем
    • Либо хост имеет у себя android.car.permission.TEMPLATE_RENDERER

Поэтому я заменил R.array.car_hosts на androidx.car.app.R.array.hosts_allowlist_sample. Думаю, смысла держать свой список разрешенных хостов нет, а на warning можно закрыть глаза.

Warning:

The resource @array/hosts_allowlist_sample is marked as private in androidx.car.app:app:1.3.0-rc01

Все не так. Почитал я, как работает HostValidator класс. * Он проверяет Host, т.е. магнитолу на которой запускается AA * Подключение к хосту разрешается в двух случаях * Либо хост указан в списке, который мы передаем * Либо хост имеет у себя `android.car.permission.TEMPLATE_RENDERER` Поэтому я заменил `R.array.car_hosts` на `androidx.car.app.R.array.hosts_allowlist_sample`. Думаю, смысла держать свой список разрешенных хостов нет, а на warning можно закрыть глаза. Warning: >The resource @array/hosts_allowlist_sample is marked as private in androidx.car.app:app:1.3.0-rc01
biodranik commented 2022-12-11 21:13:37 +00:00 (Migrated from github.com)
Review

Так что именно в этом файле-то? )

Так что именно в этом файле-то? )
Review

В androidx.car.app.R.array.hosts_allowlist_sample?
Массив таких строк:
fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf,com.google.android.projection.gearhead

Первая часть - цифровая подпись, вторая - имя пакета

* @param packageName host package name (as reported by {@link PackageManager})
* @param digest      SHA256 digest of the DER encoding of the allow-listed host
*                    certificate, formatted as 32 lowercase 2 digits  hexadecimal values
*                    separated by colon (e.g.:"000102030405060708090a0b0c0d0e0f101112131415
*                    161718191a1b1c1d1e1f"). When using
*                    <a href="https://developer.android.com/about/versions/pie/android-9.0#apk-key-rotation">signature
*                    rotation</a>, this digest should correspond to the initial signing
*                    certificate

Только сейчас обратил внимание на это:

Application developers are expected to also allow connections from known hosts which don't hold the aforementioned permission (for example, Android Auto and Android Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts.

Но я не смог найти никакого общего списка хостов или хотя бы какого-то упоминания о том, что люди добавляли в этот список еще что-то. Поэтому, наверное, можно на это не обращать внимания. По крайней мере пока что.

В `androidx.car.app.R.array.hosts_allowlist_sample`? Массив таких строк: `fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf,com.google.android.projection.gearhead` Первая часть - цифровая подпись, вторая - имя пакета ```java * @param packageName host package name (as reported by {@link PackageManager}) * @param digest SHA256 digest of the DER encoding of the allow-listed host * certificate, formatted as 32 lowercase 2 digits hexadecimal values * separated by colon (e.g.:"000102030405060708090a0b0c0d0e0f101112131415 * 161718191a1b1c1d1e1f"). When using * <a href="https://developer.android.com/about/versions/pie/android-9.0#apk-key-rotation">signature * rotation</a>, this digest should correspond to the initial signing * certificate ``` Только сейчас обратил внимание на это: >Application developers are expected to also allow connections from known hosts which don't hold the aforementioned permission (for example, Android Auto and Android Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts. Но я не смог найти никакого общего списка хостов или хотя бы какого-то упоминания о том, что люди добавляли в этот список еще что-то. Поэтому, наверное, можно на это не обращать внимания. По крайней мере пока что.
biodranik commented 2022-12-11 22:03:03 +00:00 (Migrated from github.com)
Review
  1. Полный список пакетов в том файле можно выложить сюда или на pastebin?
  2. Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы.
1. Полный список пакетов в том файле можно выложить сюда или на pastebin? 2. Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы.
Review
<string-array name="hosts_allowlist_sample" translatable="false">
   <item>fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf,
         com.google.android.projection.gearhead</item>
   <item>70811a3eacfd2e83e18da9bfede52df16ce91f2e69a44d21f18ab66991130771,
         com.google.android.projection.gearhead</item>
   <item>1975b2f17177bc89a5dff31f9e64a6cae281a53dc1d1d59b1d147fe1c82afa00,
         com.google.android.projection.gearhead</item>
   <item>c241ffbc8e287c4e9a4ad19632ba1b1351ad361d5177b7d7b29859bd2b7fc631,
         com.google.android.apps.automotive.templates.host</item>
   <item>dd66deaf312d8daec7adbe85a218ecc8c64f3b152f9b5998d5b29300c2623f61,
         com.google.android.apps.automotive.templates.host</item>
   <item>50e603d333c6049a37bd751375d08f3bd0abebd33facd30bd17b64b89658b421,
         com.google.android.apps.automotive.templates.host</item>
</string-array>
```xml <string-array name="hosts_allowlist_sample" translatable="false"> <item>fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf, com.google.android.projection.gearhead</item> <item>70811a3eacfd2e83e18da9bfede52df16ce91f2e69a44d21f18ab66991130771, com.google.android.projection.gearhead</item> <item>1975b2f17177bc89a5dff31f9e64a6cae281a53dc1d1d59b1d147fe1c82afa00, com.google.android.projection.gearhead</item> <item>c241ffbc8e287c4e9a4ad19632ba1b1351ad361d5177b7d7b29859bd2b7fc631, com.google.android.apps.automotive.templates.host</item> <item>dd66deaf312d8daec7adbe85a218ecc8c64f3b152f9b5998d5b29300c2623f61, com.google.android.apps.automotive.templates.host</item> <item>50e603d333c6049a37bd751375d08f3bd0abebd33facd30bd17b64b89658b421, com.google.android.apps.automotive.templates.host</item> </string-array> ```
Review

Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы.

Тут если что подразумевается API хоста, а не телефона

>Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы. Тут если что подразумевается API хоста, а не телефона
public Session onCreateSession()
Review

What are potential security implications here?

What are potential security implications here?
Review

Код из примера. Объяснений, для чего это сделано, нигде не нашел

Ссылка на пример

Код из примера. Объяснений, для чего это сделано, нигде не нашел [Ссылка на пример](https://github.com/android/car-samples/blob/03440d5e974a060d0216b5e02a7fe3c46b7b9469/car_app_library/navigation/common/src/main/java/androidx/car/app/sample/navigation/common/car/NavigationCarAppService.java)
biodranik commented 2022-12-08 18:15:46 +00:00 (Migrated from github.com)
Review

У нас принято разбираться и писать только тот код, который мы чётко понимаем, для чего и зачем он нужен. И стараемся, чтобы было понятно другим, кто читает код, в т.ч. оставляя комментарии.

У нас принято разбираться и писать только тот код, который мы чётко понимаем, для чего и зачем он нужен. И стараемся, чтобы было понятно другим, кто читает код, в т.ч. оставляя комментарии.
Review

Вот такое объяснение в документации.

    /**
     * Returns the {@link HostValidator} this service will use to accept or reject host connections.
     *
     * <p>By default, the provided {@link HostValidator.Builder} would produce a validator that
     * only accepts connections from hosts holding
     * {@link HostValidator#TEMPLATE_RENDERER_PERMISSION} permission.
     *
     * <p>Application developers are expected to also allow connections from known hosts which
     * don't hold the aforementioned permission (for example, Android Auto and Android
     * Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts.
     *
     * <p>Refer to {@code androidx.car.app.R.array.hosts_allowlist_sample} to obtain a
     * list of package names and signatures that should be allow-listed by default.
     *
     * <p>It is also advised to allow connections from unknown hosts in debug builds to facilitate
     * debugging and testing.
     *
     * <p>Below is an example of this method implementation:
     *
     * <pre>
     * &#64;Override
     * &#64;NonNull
     * public HostValidator createHostValidator() {
     *     if ((getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0) {
     *         return HostValidator.ALLOW_ALL_HOSTS_VALIDATOR;
     *     } else {
     *         return new HostValidator.Builder(context)
     *             .addAllowedHosts(androidx.car.app.R.array.hosts_allowlist_sample)
     *             .build();
     *     }
     * }
     * </pre>
     */
Вот такое объяснение в документации. ```java /** * Returns the {@link HostValidator} this service will use to accept or reject host connections. * * <p>By default, the provided {@link HostValidator.Builder} would produce a validator that * only accepts connections from hosts holding * {@link HostValidator#TEMPLATE_RENDERER_PERMISSION} permission. * * <p>Application developers are expected to also allow connections from known hosts which * don't hold the aforementioned permission (for example, Android Auto and Android * Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts. * * <p>Refer to {@code androidx.car.app.R.array.hosts_allowlist_sample} to obtain a * list of package names and signatures that should be allow-listed by default. * * <p>It is also advised to allow connections from unknown hosts in debug builds to facilitate * debugging and testing. * * <p>Below is an example of this method implementation: * * <pre> * &#64;Override * &#64;NonNull * public HostValidator createHostValidator() { * if ((getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0) { * return HostValidator.ALLOW_ALL_HOSTS_VALIDATOR; * } else { * return new HostValidator.Builder(context) * .addAllowedHosts(androidx.car.app.R.array.hosts_allowlist_sample) * .build(); * } * } * </pre> */ ```
biodranik commented 2022-12-11 12:25:45 +00:00 (Migrated from github.com)
Review
  1. Так какие приложения перечислены в androidx.car.app.R.array.hosts_allowlist_sample ? Я так понял, для работы с апи <31 нам придётся их перечислить.
  2. Почему бы для отладки не сделать проще: if (BuildConfig.DEBUG) ?
  3. код может быть проще:
if ()
  return ...;
return ...;
1. Так какие приложения перечислены в androidx.car.app.R.array.hosts_allowlist_sample ? Я так понял, для работы с апи <31 нам придётся их перечислить. 2. Почему бы для отладки не сделать проще: if (BuildConfig.DEBUG) ? 3. код может быть проще: ``` if () return ...; return ...; ```
Review

Все не так. Почитал я, как работает HostValidator класс.

  • Он проверяет Host, т.е. магнитолу на которой запускается AA
  • Подключение к хосту разрешается в двух случаях
    • Либо хост указан в списке, который мы передаем
    • Либо хост имеет у себя android.car.permission.TEMPLATE_RENDERER

Поэтому я заменил R.array.car_hosts на androidx.car.app.R.array.hosts_allowlist_sample. Думаю, смысла держать свой список разрешенных хостов нет, а на warning можно закрыть глаза.

Warning:

The resource @array/hosts_allowlist_sample is marked as private in androidx.car.app:app:1.3.0-rc01

Все не так. Почитал я, как работает HostValidator класс. * Он проверяет Host, т.е. магнитолу на которой запускается AA * Подключение к хосту разрешается в двух случаях * Либо хост указан в списке, который мы передаем * Либо хост имеет у себя `android.car.permission.TEMPLATE_RENDERER` Поэтому я заменил `R.array.car_hosts` на `androidx.car.app.R.array.hosts_allowlist_sample`. Думаю, смысла держать свой список разрешенных хостов нет, а на warning можно закрыть глаза. Warning: >The resource @array/hosts_allowlist_sample is marked as private in androidx.car.app:app:1.3.0-rc01
biodranik commented 2022-12-11 21:13:37 +00:00 (Migrated from github.com)
Review

Так что именно в этом файле-то? )

Так что именно в этом файле-то? )
Review

В androidx.car.app.R.array.hosts_allowlist_sample?
Массив таких строк:
fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf,com.google.android.projection.gearhead

Первая часть - цифровая подпись, вторая - имя пакета

* @param packageName host package name (as reported by {@link PackageManager})
* @param digest      SHA256 digest of the DER encoding of the allow-listed host
*                    certificate, formatted as 32 lowercase 2 digits  hexadecimal values
*                    separated by colon (e.g.:"000102030405060708090a0b0c0d0e0f101112131415
*                    161718191a1b1c1d1e1f"). When using
*                    <a href="https://developer.android.com/about/versions/pie/android-9.0#apk-key-rotation">signature
*                    rotation</a>, this digest should correspond to the initial signing
*                    certificate

Только сейчас обратил внимание на это:

Application developers are expected to also allow connections from known hosts which don't hold the aforementioned permission (for example, Android Auto and Android Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts.

Но я не смог найти никакого общего списка хостов или хотя бы какого-то упоминания о том, что люди добавляли в этот список еще что-то. Поэтому, наверное, можно на это не обращать внимания. По крайней мере пока что.

В `androidx.car.app.R.array.hosts_allowlist_sample`? Массив таких строк: `fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf,com.google.android.projection.gearhead` Первая часть - цифровая подпись, вторая - имя пакета ```java * @param packageName host package name (as reported by {@link PackageManager}) * @param digest SHA256 digest of the DER encoding of the allow-listed host * certificate, formatted as 32 lowercase 2 digits hexadecimal values * separated by colon (e.g.:"000102030405060708090a0b0c0d0e0f101112131415 * 161718191a1b1c1d1e1f"). When using * <a href="https://developer.android.com/about/versions/pie/android-9.0#apk-key-rotation">signature * rotation</a>, this digest should correspond to the initial signing * certificate ``` Только сейчас обратил внимание на это: >Application developers are expected to also allow connections from known hosts which don't hold the aforementioned permission (for example, Android Auto and Android Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts. Но я не смог найти никакого общего списка хостов или хотя бы какого-то упоминания о том, что люди добавляли в этот список еще что-то. Поэтому, наверное, можно на это не обращать внимания. По крайней мере пока что.
biodranik commented 2022-12-11 22:03:03 +00:00 (Migrated from github.com)
Review
  1. Полный список пакетов в том файле можно выложить сюда или на pastebin?
  2. Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы.
1. Полный список пакетов в том файле можно выложить сюда или на pastebin? 2. Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы.
Review
<string-array name="hosts_allowlist_sample" translatable="false">
   <item>fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf,
         com.google.android.projection.gearhead</item>
   <item>70811a3eacfd2e83e18da9bfede52df16ce91f2e69a44d21f18ab66991130771,
         com.google.android.projection.gearhead</item>
   <item>1975b2f17177bc89a5dff31f9e64a6cae281a53dc1d1d59b1d147fe1c82afa00,
         com.google.android.projection.gearhead</item>
   <item>c241ffbc8e287c4e9a4ad19632ba1b1351ad361d5177b7d7b29859bd2b7fc631,
         com.google.android.apps.automotive.templates.host</item>
   <item>dd66deaf312d8daec7adbe85a218ecc8c64f3b152f9b5998d5b29300c2623f61,
         com.google.android.apps.automotive.templates.host</item>
   <item>50e603d333c6049a37bd751375d08f3bd0abebd33facd30bd17b64b89658b421,
         com.google.android.apps.automotive.templates.host</item>
</string-array>
```xml <string-array name="hosts_allowlist_sample" translatable="false"> <item>fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf, com.google.android.projection.gearhead</item> <item>70811a3eacfd2e83e18da9bfede52df16ce91f2e69a44d21f18ab66991130771, com.google.android.projection.gearhead</item> <item>1975b2f17177bc89a5dff31f9e64a6cae281a53dc1d1d59b1d147fe1c82afa00, com.google.android.projection.gearhead</item> <item>c241ffbc8e287c4e9a4ad19632ba1b1351ad361d5177b7d7b29859bd2b7fc631, com.google.android.apps.automotive.templates.host</item> <item>dd66deaf312d8daec7adbe85a218ecc8c64f3b152f9b5998d5b29300c2623f61, com.google.android.apps.automotive.templates.host</item> <item>50e603d333c6049a37bd751375d08f3bd0abebd33facd30bd17b64b89658b421, com.google.android.apps.automotive.templates.host</item> </string-array> ```
Review

Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы.

Тут если что подразумевается API хоста, а не телефона

>Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы. Тут если что подразумевается API хоста, а не телефона
{
Review

What are potential security implications here?

What are potential security implications here?
Review

Код из примера. Объяснений, для чего это сделано, нигде не нашел

Ссылка на пример

Код из примера. Объяснений, для чего это сделано, нигде не нашел [Ссылка на пример](https://github.com/android/car-samples/blob/03440d5e974a060d0216b5e02a7fe3c46b7b9469/car_app_library/navigation/common/src/main/java/androidx/car/app/sample/navigation/common/car/NavigationCarAppService.java)
biodranik commented 2022-12-08 18:15:46 +00:00 (Migrated from github.com)
Review

У нас принято разбираться и писать только тот код, который мы чётко понимаем, для чего и зачем он нужен. И стараемся, чтобы было понятно другим, кто читает код, в т.ч. оставляя комментарии.

У нас принято разбираться и писать только тот код, который мы чётко понимаем, для чего и зачем он нужен. И стараемся, чтобы было понятно другим, кто читает код, в т.ч. оставляя комментарии.
Review

Вот такое объяснение в документации.

    /**
     * Returns the {@link HostValidator} this service will use to accept or reject host connections.
     *
     * <p>By default, the provided {@link HostValidator.Builder} would produce a validator that
     * only accepts connections from hosts holding
     * {@link HostValidator#TEMPLATE_RENDERER_PERMISSION} permission.
     *
     * <p>Application developers are expected to also allow connections from known hosts which
     * don't hold the aforementioned permission (for example, Android Auto and Android
     * Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts.
     *
     * <p>Refer to {@code androidx.car.app.R.array.hosts_allowlist_sample} to obtain a
     * list of package names and signatures that should be allow-listed by default.
     *
     * <p>It is also advised to allow connections from unknown hosts in debug builds to facilitate
     * debugging and testing.
     *
     * <p>Below is an example of this method implementation:
     *
     * <pre>
     * &#64;Override
     * &#64;NonNull
     * public HostValidator createHostValidator() {
     *     if ((getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0) {
     *         return HostValidator.ALLOW_ALL_HOSTS_VALIDATOR;
     *     } else {
     *         return new HostValidator.Builder(context)
     *             .addAllowedHosts(androidx.car.app.R.array.hosts_allowlist_sample)
     *             .build();
     *     }
     * }
     * </pre>
     */
Вот такое объяснение в документации. ```java /** * Returns the {@link HostValidator} this service will use to accept or reject host connections. * * <p>By default, the provided {@link HostValidator.Builder} would produce a validator that * only accepts connections from hosts holding * {@link HostValidator#TEMPLATE_RENDERER_PERMISSION} permission. * * <p>Application developers are expected to also allow connections from known hosts which * don't hold the aforementioned permission (for example, Android Auto and Android * Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts. * * <p>Refer to {@code androidx.car.app.R.array.hosts_allowlist_sample} to obtain a * list of package names and signatures that should be allow-listed by default. * * <p>It is also advised to allow connections from unknown hosts in debug builds to facilitate * debugging and testing. * * <p>Below is an example of this method implementation: * * <pre> * &#64;Override * &#64;NonNull * public HostValidator createHostValidator() { * if ((getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0) { * return HostValidator.ALLOW_ALL_HOSTS_VALIDATOR; * } else { * return new HostValidator.Builder(context) * .addAllowedHosts(androidx.car.app.R.array.hosts_allowlist_sample) * .build(); * } * } * </pre> */ ```
biodranik commented 2022-12-11 12:25:45 +00:00 (Migrated from github.com)
Review
  1. Так какие приложения перечислены в androidx.car.app.R.array.hosts_allowlist_sample ? Я так понял, для работы с апи <31 нам придётся их перечислить.
  2. Почему бы для отладки не сделать проще: if (BuildConfig.DEBUG) ?
  3. код может быть проще:
if ()
  return ...;
return ...;
1. Так какие приложения перечислены в androidx.car.app.R.array.hosts_allowlist_sample ? Я так понял, для работы с апи <31 нам придётся их перечислить. 2. Почему бы для отладки не сделать проще: if (BuildConfig.DEBUG) ? 3. код может быть проще: ``` if () return ...; return ...; ```
Review

Все не так. Почитал я, как работает HostValidator класс.

  • Он проверяет Host, т.е. магнитолу на которой запускается AA
  • Подключение к хосту разрешается в двух случаях
    • Либо хост указан в списке, который мы передаем
    • Либо хост имеет у себя android.car.permission.TEMPLATE_RENDERER

Поэтому я заменил R.array.car_hosts на androidx.car.app.R.array.hosts_allowlist_sample. Думаю, смысла держать свой список разрешенных хостов нет, а на warning можно закрыть глаза.

Warning:

The resource @array/hosts_allowlist_sample is marked as private in androidx.car.app:app:1.3.0-rc01

Все не так. Почитал я, как работает HostValidator класс. * Он проверяет Host, т.е. магнитолу на которой запускается AA * Подключение к хосту разрешается в двух случаях * Либо хост указан в списке, который мы передаем * Либо хост имеет у себя `android.car.permission.TEMPLATE_RENDERER` Поэтому я заменил `R.array.car_hosts` на `androidx.car.app.R.array.hosts_allowlist_sample`. Думаю, смысла держать свой список разрешенных хостов нет, а на warning можно закрыть глаза. Warning: >The resource @array/hosts_allowlist_sample is marked as private in androidx.car.app:app:1.3.0-rc01
biodranik commented 2022-12-11 21:13:37 +00:00 (Migrated from github.com)
Review

Так что именно в этом файле-то? )

Так что именно в этом файле-то? )
Review

В androidx.car.app.R.array.hosts_allowlist_sample?
Массив таких строк:
fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf,com.google.android.projection.gearhead

Первая часть - цифровая подпись, вторая - имя пакета

* @param packageName host package name (as reported by {@link PackageManager})
* @param digest      SHA256 digest of the DER encoding of the allow-listed host
*                    certificate, formatted as 32 lowercase 2 digits  hexadecimal values
*                    separated by colon (e.g.:"000102030405060708090a0b0c0d0e0f101112131415
*                    161718191a1b1c1d1e1f"). When using
*                    <a href="https://developer.android.com/about/versions/pie/android-9.0#apk-key-rotation">signature
*                    rotation</a>, this digest should correspond to the initial signing
*                    certificate

Только сейчас обратил внимание на это:

Application developers are expected to also allow connections from known hosts which don't hold the aforementioned permission (for example, Android Auto and Android Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts.

Но я не смог найти никакого общего списка хостов или хотя бы какого-то упоминания о том, что люди добавляли в этот список еще что-то. Поэтому, наверное, можно на это не обращать внимания. По крайней мере пока что.

В `androidx.car.app.R.array.hosts_allowlist_sample`? Массив таких строк: `fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf,com.google.android.projection.gearhead` Первая часть - цифровая подпись, вторая - имя пакета ```java * @param packageName host package name (as reported by {@link PackageManager}) * @param digest SHA256 digest of the DER encoding of the allow-listed host * certificate, formatted as 32 lowercase 2 digits hexadecimal values * separated by colon (e.g.:"000102030405060708090a0b0c0d0e0f101112131415 * 161718191a1b1c1d1e1f"). When using * <a href="https://developer.android.com/about/versions/pie/android-9.0#apk-key-rotation">signature * rotation</a>, this digest should correspond to the initial signing * certificate ``` Только сейчас обратил внимание на это: >Application developers are expected to also allow connections from known hosts which don't hold the aforementioned permission (for example, Android Auto and Android Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts. Но я не смог найти никакого общего списка хостов или хотя бы какого-то упоминания о том, что люди добавляли в этот список еще что-то. Поэтому, наверное, можно на это не обращать внимания. По крайней мере пока что.
biodranik commented 2022-12-11 22:03:03 +00:00 (Migrated from github.com)
Review
  1. Полный список пакетов в том файле можно выложить сюда или на pastebin?
  2. Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы.
1. Полный список пакетов в том файле можно выложить сюда или на pastebin? 2. Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы.
Review
<string-array name="hosts_allowlist_sample" translatable="false">
   <item>fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf,
         com.google.android.projection.gearhead</item>
   <item>70811a3eacfd2e83e18da9bfede52df16ce91f2e69a44d21f18ab66991130771,
         com.google.android.projection.gearhead</item>
   <item>1975b2f17177bc89a5dff31f9e64a6cae281a53dc1d1d59b1d147fe1c82afa00,
         com.google.android.projection.gearhead</item>
   <item>c241ffbc8e287c4e9a4ad19632ba1b1351ad361d5177b7d7b29859bd2b7fc631,
         com.google.android.apps.automotive.templates.host</item>
   <item>dd66deaf312d8daec7adbe85a218ecc8c64f3b152f9b5998d5b29300c2623f61,
         com.google.android.apps.automotive.templates.host</item>
   <item>50e603d333c6049a37bd751375d08f3bd0abebd33facd30bd17b64b89658b421,
         com.google.android.apps.automotive.templates.host</item>
</string-array>
```xml <string-array name="hosts_allowlist_sample" translatable="false"> <item>fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf, com.google.android.projection.gearhead</item> <item>70811a3eacfd2e83e18da9bfede52df16ce91f2e69a44d21f18ab66991130771, com.google.android.projection.gearhead</item> <item>1975b2f17177bc89a5dff31f9e64a6cae281a53dc1d1d59b1d147fe1c82afa00, com.google.android.projection.gearhead</item> <item>c241ffbc8e287c4e9a4ad19632ba1b1351ad361d5177b7d7b29859bd2b7fc631, com.google.android.apps.automotive.templates.host</item> <item>dd66deaf312d8daec7adbe85a218ecc8c64f3b152f9b5998d5b29300c2623f61, com.google.android.apps.automotive.templates.host</item> <item>50e603d333c6049a37bd751375d08f3bd0abebd33facd30bd17b64b89658b421, com.google.android.apps.automotive.templates.host</item> </string-array> ```
Review

Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы.

Тут если что подразумевается API хоста, а не телефона

>Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы. Тут если что подразумевается API хоста, а не телефона
return new NavigationSession();
Review

What are potential security implications here?

What are potential security implications here?
Review

Код из примера. Объяснений, для чего это сделано, нигде не нашел

Ссылка на пример

Код из примера. Объяснений, для чего это сделано, нигде не нашел [Ссылка на пример](https://github.com/android/car-samples/blob/03440d5e974a060d0216b5e02a7fe3c46b7b9469/car_app_library/navigation/common/src/main/java/androidx/car/app/sample/navigation/common/car/NavigationCarAppService.java)
biodranik commented 2022-12-08 18:15:46 +00:00 (Migrated from github.com)
Review

У нас принято разбираться и писать только тот код, который мы чётко понимаем, для чего и зачем он нужен. И стараемся, чтобы было понятно другим, кто читает код, в т.ч. оставляя комментарии.

У нас принято разбираться и писать только тот код, который мы чётко понимаем, для чего и зачем он нужен. И стараемся, чтобы было понятно другим, кто читает код, в т.ч. оставляя комментарии.
Review

Вот такое объяснение в документации.

    /**
     * Returns the {@link HostValidator} this service will use to accept or reject host connections.
     *
     * <p>By default, the provided {@link HostValidator.Builder} would produce a validator that
     * only accepts connections from hosts holding
     * {@link HostValidator#TEMPLATE_RENDERER_PERMISSION} permission.
     *
     * <p>Application developers are expected to also allow connections from known hosts which
     * don't hold the aforementioned permission (for example, Android Auto and Android
     * Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts.
     *
     * <p>Refer to {@code androidx.car.app.R.array.hosts_allowlist_sample} to obtain a
     * list of package names and signatures that should be allow-listed by default.
     *
     * <p>It is also advised to allow connections from unknown hosts in debug builds to facilitate
     * debugging and testing.
     *
     * <p>Below is an example of this method implementation:
     *
     * <pre>
     * &#64;Override
     * &#64;NonNull
     * public HostValidator createHostValidator() {
     *     if ((getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0) {
     *         return HostValidator.ALLOW_ALL_HOSTS_VALIDATOR;
     *     } else {
     *         return new HostValidator.Builder(context)
     *             .addAllowedHosts(androidx.car.app.R.array.hosts_allowlist_sample)
     *             .build();
     *     }
     * }
     * </pre>
     */
Вот такое объяснение в документации. ```java /** * Returns the {@link HostValidator} this service will use to accept or reject host connections. * * <p>By default, the provided {@link HostValidator.Builder} would produce a validator that * only accepts connections from hosts holding * {@link HostValidator#TEMPLATE_RENDERER_PERMISSION} permission. * * <p>Application developers are expected to also allow connections from known hosts which * don't hold the aforementioned permission (for example, Android Auto and Android * Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts. * * <p>Refer to {@code androidx.car.app.R.array.hosts_allowlist_sample} to obtain a * list of package names and signatures that should be allow-listed by default. * * <p>It is also advised to allow connections from unknown hosts in debug builds to facilitate * debugging and testing. * * <p>Below is an example of this method implementation: * * <pre> * &#64;Override * &#64;NonNull * public HostValidator createHostValidator() { * if ((getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0) { * return HostValidator.ALLOW_ALL_HOSTS_VALIDATOR; * } else { * return new HostValidator.Builder(context) * .addAllowedHosts(androidx.car.app.R.array.hosts_allowlist_sample) * .build(); * } * } * </pre> */ ```
biodranik commented 2022-12-11 12:25:45 +00:00 (Migrated from github.com)
Review
  1. Так какие приложения перечислены в androidx.car.app.R.array.hosts_allowlist_sample ? Я так понял, для работы с апи <31 нам придётся их перечислить.
  2. Почему бы для отладки не сделать проще: if (BuildConfig.DEBUG) ?
  3. код может быть проще:
if ()
  return ...;
return ...;
1. Так какие приложения перечислены в androidx.car.app.R.array.hosts_allowlist_sample ? Я так понял, для работы с апи <31 нам придётся их перечислить. 2. Почему бы для отладки не сделать проще: if (BuildConfig.DEBUG) ? 3. код может быть проще: ``` if () return ...; return ...; ```
Review

Все не так. Почитал я, как работает HostValidator класс.

  • Он проверяет Host, т.е. магнитолу на которой запускается AA
  • Подключение к хосту разрешается в двух случаях
    • Либо хост указан в списке, который мы передаем
    • Либо хост имеет у себя android.car.permission.TEMPLATE_RENDERER

Поэтому я заменил R.array.car_hosts на androidx.car.app.R.array.hosts_allowlist_sample. Думаю, смысла держать свой список разрешенных хостов нет, а на warning можно закрыть глаза.

Warning:

The resource @array/hosts_allowlist_sample is marked as private in androidx.car.app:app:1.3.0-rc01

Все не так. Почитал я, как работает HostValidator класс. * Он проверяет Host, т.е. магнитолу на которой запускается AA * Подключение к хосту разрешается в двух случаях * Либо хост указан в списке, который мы передаем * Либо хост имеет у себя `android.car.permission.TEMPLATE_RENDERER` Поэтому я заменил `R.array.car_hosts` на `androidx.car.app.R.array.hosts_allowlist_sample`. Думаю, смысла держать свой список разрешенных хостов нет, а на warning можно закрыть глаза. Warning: >The resource @array/hosts_allowlist_sample is marked as private in androidx.car.app:app:1.3.0-rc01
biodranik commented 2022-12-11 21:13:37 +00:00 (Migrated from github.com)
Review

Так что именно в этом файле-то? )

Так что именно в этом файле-то? )
Review

В androidx.car.app.R.array.hosts_allowlist_sample?
Массив таких строк:
fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf,com.google.android.projection.gearhead

Первая часть - цифровая подпись, вторая - имя пакета

* @param packageName host package name (as reported by {@link PackageManager})
* @param digest      SHA256 digest of the DER encoding of the allow-listed host
*                    certificate, formatted as 32 lowercase 2 digits  hexadecimal values
*                    separated by colon (e.g.:"000102030405060708090a0b0c0d0e0f101112131415
*                    161718191a1b1c1d1e1f"). When using
*                    <a href="https://developer.android.com/about/versions/pie/android-9.0#apk-key-rotation">signature
*                    rotation</a>, this digest should correspond to the initial signing
*                    certificate

Только сейчас обратил внимание на это:

Application developers are expected to also allow connections from known hosts which don't hold the aforementioned permission (for example, Android Auto and Android Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts.

Но я не смог найти никакого общего списка хостов или хотя бы какого-то упоминания о том, что люди добавляли в этот список еще что-то. Поэтому, наверное, можно на это не обращать внимания. По крайней мере пока что.

В `androidx.car.app.R.array.hosts_allowlist_sample`? Массив таких строк: `fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf,com.google.android.projection.gearhead` Первая часть - цифровая подпись, вторая - имя пакета ```java * @param packageName host package name (as reported by {@link PackageManager}) * @param digest SHA256 digest of the DER encoding of the allow-listed host * certificate, formatted as 32 lowercase 2 digits hexadecimal values * separated by colon (e.g.:"000102030405060708090a0b0c0d0e0f101112131415 * 161718191a1b1c1d1e1f"). When using * <a href="https://developer.android.com/about/versions/pie/android-9.0#apk-key-rotation">signature * rotation</a>, this digest should correspond to the initial signing * certificate ``` Только сейчас обратил внимание на это: >Application developers are expected to also allow connections from known hosts which don't hold the aforementioned permission (for example, Android Auto and Android Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts. Но я не смог найти никакого общего списка хостов или хотя бы какого-то упоминания о том, что люди добавляли в этот список еще что-то. Поэтому, наверное, можно на это не обращать внимания. По крайней мере пока что.
biodranik commented 2022-12-11 22:03:03 +00:00 (Migrated from github.com)
Review
  1. Полный список пакетов в том файле можно выложить сюда или на pastebin?
  2. Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы.
1. Полный список пакетов в том файле можно выложить сюда или на pastebin? 2. Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы.
Review
<string-array name="hosts_allowlist_sample" translatable="false">
   <item>fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf,
         com.google.android.projection.gearhead</item>
   <item>70811a3eacfd2e83e18da9bfede52df16ce91f2e69a44d21f18ab66991130771,
         com.google.android.projection.gearhead</item>
   <item>1975b2f17177bc89a5dff31f9e64a6cae281a53dc1d1d59b1d147fe1c82afa00,
         com.google.android.projection.gearhead</item>
   <item>c241ffbc8e287c4e9a4ad19632ba1b1351ad361d5177b7d7b29859bd2b7fc631,
         com.google.android.apps.automotive.templates.host</item>
   <item>dd66deaf312d8daec7adbe85a218ecc8c64f3b152f9b5998d5b29300c2623f61,
         com.google.android.apps.automotive.templates.host</item>
   <item>50e603d333c6049a37bd751375d08f3bd0abebd33facd30bd17b64b89658b421,
         com.google.android.apps.automotive.templates.host</item>
</string-array>
```xml <string-array name="hosts_allowlist_sample" translatable="false"> <item>fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf, com.google.android.projection.gearhead</item> <item>70811a3eacfd2e83e18da9bfede52df16ce91f2e69a44d21f18ab66991130771, com.google.android.projection.gearhead</item> <item>1975b2f17177bc89a5dff31f9e64a6cae281a53dc1d1d59b1d147fe1c82afa00, com.google.android.projection.gearhead</item> <item>c241ffbc8e287c4e9a4ad19632ba1b1351ad361d5177b7d7b29859bd2b7fc631, com.google.android.apps.automotive.templates.host</item> <item>dd66deaf312d8daec7adbe85a218ecc8c64f3b152f9b5998d5b29300c2623f61, com.google.android.apps.automotive.templates.host</item> <item>50e603d333c6049a37bd751375d08f3bd0abebd33facd30bd17b64b89658b421, com.google.android.apps.automotive.templates.host</item> </string-array> ```
Review

Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы.

Тут если что подразумевается API хоста, а не телефона

>Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы. Тут если что подразумевается API хоста, а не телефона
}
Review

What are potential security implications here?

What are potential security implications here?
Review

Код из примера. Объяснений, для чего это сделано, нигде не нашел

Ссылка на пример

Код из примера. Объяснений, для чего это сделано, нигде не нашел [Ссылка на пример](https://github.com/android/car-samples/blob/03440d5e974a060d0216b5e02a7fe3c46b7b9469/car_app_library/navigation/common/src/main/java/androidx/car/app/sample/navigation/common/car/NavigationCarAppService.java)
biodranik commented 2022-12-08 18:15:46 +00:00 (Migrated from github.com)
Review

У нас принято разбираться и писать только тот код, который мы чётко понимаем, для чего и зачем он нужен. И стараемся, чтобы было понятно другим, кто читает код, в т.ч. оставляя комментарии.

У нас принято разбираться и писать только тот код, который мы чётко понимаем, для чего и зачем он нужен. И стараемся, чтобы было понятно другим, кто читает код, в т.ч. оставляя комментарии.
Review

Вот такое объяснение в документации.

    /**
     * Returns the {@link HostValidator} this service will use to accept or reject host connections.
     *
     * <p>By default, the provided {@link HostValidator.Builder} would produce a validator that
     * only accepts connections from hosts holding
     * {@link HostValidator#TEMPLATE_RENDERER_PERMISSION} permission.
     *
     * <p>Application developers are expected to also allow connections from known hosts which
     * don't hold the aforementioned permission (for example, Android Auto and Android
     * Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts.
     *
     * <p>Refer to {@code androidx.car.app.R.array.hosts_allowlist_sample} to obtain a
     * list of package names and signatures that should be allow-listed by default.
     *
     * <p>It is also advised to allow connections from unknown hosts in debug builds to facilitate
     * debugging and testing.
     *
     * <p>Below is an example of this method implementation:
     *
     * <pre>
     * &#64;Override
     * &#64;NonNull
     * public HostValidator createHostValidator() {
     *     if ((getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0) {
     *         return HostValidator.ALLOW_ALL_HOSTS_VALIDATOR;
     *     } else {
     *         return new HostValidator.Builder(context)
     *             .addAllowedHosts(androidx.car.app.R.array.hosts_allowlist_sample)
     *             .build();
     *     }
     * }
     * </pre>
     */
Вот такое объяснение в документации. ```java /** * Returns the {@link HostValidator} this service will use to accept or reject host connections. * * <p>By default, the provided {@link HostValidator.Builder} would produce a validator that * only accepts connections from hosts holding * {@link HostValidator#TEMPLATE_RENDERER_PERMISSION} permission. * * <p>Application developers are expected to also allow connections from known hosts which * don't hold the aforementioned permission (for example, Android Auto and Android * Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts. * * <p>Refer to {@code androidx.car.app.R.array.hosts_allowlist_sample} to obtain a * list of package names and signatures that should be allow-listed by default. * * <p>It is also advised to allow connections from unknown hosts in debug builds to facilitate * debugging and testing. * * <p>Below is an example of this method implementation: * * <pre> * &#64;Override * &#64;NonNull * public HostValidator createHostValidator() { * if ((getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0) { * return HostValidator.ALLOW_ALL_HOSTS_VALIDATOR; * } else { * return new HostValidator.Builder(context) * .addAllowedHosts(androidx.car.app.R.array.hosts_allowlist_sample) * .build(); * } * } * </pre> */ ```
biodranik commented 2022-12-11 12:25:45 +00:00 (Migrated from github.com)
Review
  1. Так какие приложения перечислены в androidx.car.app.R.array.hosts_allowlist_sample ? Я так понял, для работы с апи <31 нам придётся их перечислить.
  2. Почему бы для отладки не сделать проще: if (BuildConfig.DEBUG) ?
  3. код может быть проще:
if ()
  return ...;
return ...;
1. Так какие приложения перечислены в androidx.car.app.R.array.hosts_allowlist_sample ? Я так понял, для работы с апи <31 нам придётся их перечислить. 2. Почему бы для отладки не сделать проще: if (BuildConfig.DEBUG) ? 3. код может быть проще: ``` if () return ...; return ...; ```
Review

Все не так. Почитал я, как работает HostValidator класс.

  • Он проверяет Host, т.е. магнитолу на которой запускается AA
  • Подключение к хосту разрешается в двух случаях
    • Либо хост указан в списке, который мы передаем
    • Либо хост имеет у себя android.car.permission.TEMPLATE_RENDERER

Поэтому я заменил R.array.car_hosts на androidx.car.app.R.array.hosts_allowlist_sample. Думаю, смысла держать свой список разрешенных хостов нет, а на warning можно закрыть глаза.

Warning:

The resource @array/hosts_allowlist_sample is marked as private in androidx.car.app:app:1.3.0-rc01

Все не так. Почитал я, как работает HostValidator класс. * Он проверяет Host, т.е. магнитолу на которой запускается AA * Подключение к хосту разрешается в двух случаях * Либо хост указан в списке, который мы передаем * Либо хост имеет у себя `android.car.permission.TEMPLATE_RENDERER` Поэтому я заменил `R.array.car_hosts` на `androidx.car.app.R.array.hosts_allowlist_sample`. Думаю, смысла держать свой список разрешенных хостов нет, а на warning можно закрыть глаза. Warning: >The resource @array/hosts_allowlist_sample is marked as private in androidx.car.app:app:1.3.0-rc01
biodranik commented 2022-12-11 21:13:37 +00:00 (Migrated from github.com)
Review

Так что именно в этом файле-то? )

Так что именно в этом файле-то? )
Review

В androidx.car.app.R.array.hosts_allowlist_sample?
Массив таких строк:
fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf,com.google.android.projection.gearhead

Первая часть - цифровая подпись, вторая - имя пакета

* @param packageName host package name (as reported by {@link PackageManager})
* @param digest      SHA256 digest of the DER encoding of the allow-listed host
*                    certificate, formatted as 32 lowercase 2 digits  hexadecimal values
*                    separated by colon (e.g.:"000102030405060708090a0b0c0d0e0f101112131415
*                    161718191a1b1c1d1e1f"). When using
*                    <a href="https://developer.android.com/about/versions/pie/android-9.0#apk-key-rotation">signature
*                    rotation</a>, this digest should correspond to the initial signing
*                    certificate

Только сейчас обратил внимание на это:

Application developers are expected to also allow connections from known hosts which don't hold the aforementioned permission (for example, Android Auto and Android Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts.

Но я не смог найти никакого общего списка хостов или хотя бы какого-то упоминания о том, что люди добавляли в этот список еще что-то. Поэтому, наверное, можно на это не обращать внимания. По крайней мере пока что.

В `androidx.car.app.R.array.hosts_allowlist_sample`? Массив таких строк: `fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf,com.google.android.projection.gearhead` Первая часть - цифровая подпись, вторая - имя пакета ```java * @param packageName host package name (as reported by {@link PackageManager}) * @param digest SHA256 digest of the DER encoding of the allow-listed host * certificate, formatted as 32 lowercase 2 digits hexadecimal values * separated by colon (e.g.:"000102030405060708090a0b0c0d0e0f101112131415 * 161718191a1b1c1d1e1f"). When using * <a href="https://developer.android.com/about/versions/pie/android-9.0#apk-key-rotation">signature * rotation</a>, this digest should correspond to the initial signing * certificate ``` Только сейчас обратил внимание на это: >Application developers are expected to also allow connections from known hosts which don't hold the aforementioned permission (for example, Android Auto and Android Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts. Но я не смог найти никакого общего списка хостов или хотя бы какого-то упоминания о том, что люди добавляли в этот список еще что-то. Поэтому, наверное, можно на это не обращать внимания. По крайней мере пока что.
biodranik commented 2022-12-11 22:03:03 +00:00 (Migrated from github.com)
Review
  1. Полный список пакетов в том файле можно выложить сюда или на pastebin?
  2. Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы.
1. Полный список пакетов в том файле можно выложить сюда или на pastebin? 2. Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы.
Review
<string-array name="hosts_allowlist_sample" translatable="false">
   <item>fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf,
         com.google.android.projection.gearhead</item>
   <item>70811a3eacfd2e83e18da9bfede52df16ce91f2e69a44d21f18ab66991130771,
         com.google.android.projection.gearhead</item>
   <item>1975b2f17177bc89a5dff31f9e64a6cae281a53dc1d1d59b1d147fe1c82afa00,
         com.google.android.projection.gearhead</item>
   <item>c241ffbc8e287c4e9a4ad19632ba1b1351ad361d5177b7d7b29859bd2b7fc631,
         com.google.android.apps.automotive.templates.host</item>
   <item>dd66deaf312d8daec7adbe85a218ecc8c64f3b152f9b5998d5b29300c2623f61,
         com.google.android.apps.automotive.templates.host</item>
   <item>50e603d333c6049a37bd751375d08f3bd0abebd33facd30bd17b64b89658b421,
         com.google.android.apps.automotive.templates.host</item>
</string-array>
```xml <string-array name="hosts_allowlist_sample" translatable="false"> <item>fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf, com.google.android.projection.gearhead</item> <item>70811a3eacfd2e83e18da9bfede52df16ce91f2e69a44d21f18ab66991130771, com.google.android.projection.gearhead</item> <item>1975b2f17177bc89a5dff31f9e64a6cae281a53dc1d1d59b1d147fe1c82afa00, com.google.android.projection.gearhead</item> <item>c241ffbc8e287c4e9a4ad19632ba1b1351ad361d5177b7d7b29859bd2b7fc631, com.google.android.apps.automotive.templates.host</item> <item>dd66deaf312d8daec7adbe85a218ecc8c64f3b152f9b5998d5b29300c2623f61, com.google.android.apps.automotive.templates.host</item> <item>50e603d333c6049a37bd751375d08f3bd0abebd33facd30bd17b64b89658b421, com.google.android.apps.automotive.templates.host</item> </string-array> ```
Review

Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы.

Тут если что подразумевается API хоста, а не телефона

>Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы. Тут если что подразумевается API хоста, а не телефона
}
Review

What are potential security implications here?

What are potential security implications here?
Review

Код из примера. Объяснений, для чего это сделано, нигде не нашел

Ссылка на пример

Код из примера. Объяснений, для чего это сделано, нигде не нашел [Ссылка на пример](https://github.com/android/car-samples/blob/03440d5e974a060d0216b5e02a7fe3c46b7b9469/car_app_library/navigation/common/src/main/java/androidx/car/app/sample/navigation/common/car/NavigationCarAppService.java)
biodranik commented 2022-12-08 18:15:46 +00:00 (Migrated from github.com)
Review

У нас принято разбираться и писать только тот код, который мы чётко понимаем, для чего и зачем он нужен. И стараемся, чтобы было понятно другим, кто читает код, в т.ч. оставляя комментарии.

У нас принято разбираться и писать только тот код, который мы чётко понимаем, для чего и зачем он нужен. И стараемся, чтобы было понятно другим, кто читает код, в т.ч. оставляя комментарии.
Review

Вот такое объяснение в документации.

    /**
     * Returns the {@link HostValidator} this service will use to accept or reject host connections.
     *
     * <p>By default, the provided {@link HostValidator.Builder} would produce a validator that
     * only accepts connections from hosts holding
     * {@link HostValidator#TEMPLATE_RENDERER_PERMISSION} permission.
     *
     * <p>Application developers are expected to also allow connections from known hosts which
     * don't hold the aforementioned permission (for example, Android Auto and Android
     * Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts.
     *
     * <p>Refer to {@code androidx.car.app.R.array.hosts_allowlist_sample} to obtain a
     * list of package names and signatures that should be allow-listed by default.
     *
     * <p>It is also advised to allow connections from unknown hosts in debug builds to facilitate
     * debugging and testing.
     *
     * <p>Below is an example of this method implementation:
     *
     * <pre>
     * &#64;Override
     * &#64;NonNull
     * public HostValidator createHostValidator() {
     *     if ((getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0) {
     *         return HostValidator.ALLOW_ALL_HOSTS_VALIDATOR;
     *     } else {
     *         return new HostValidator.Builder(context)
     *             .addAllowedHosts(androidx.car.app.R.array.hosts_allowlist_sample)
     *             .build();
     *     }
     * }
     * </pre>
     */
Вот такое объяснение в документации. ```java /** * Returns the {@link HostValidator} this service will use to accept or reject host connections. * * <p>By default, the provided {@link HostValidator.Builder} would produce a validator that * only accepts connections from hosts holding * {@link HostValidator#TEMPLATE_RENDERER_PERMISSION} permission. * * <p>Application developers are expected to also allow connections from known hosts which * don't hold the aforementioned permission (for example, Android Auto and Android * Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts. * * <p>Refer to {@code androidx.car.app.R.array.hosts_allowlist_sample} to obtain a * list of package names and signatures that should be allow-listed by default. * * <p>It is also advised to allow connections from unknown hosts in debug builds to facilitate * debugging and testing. * * <p>Below is an example of this method implementation: * * <pre> * &#64;Override * &#64;NonNull * public HostValidator createHostValidator() { * if ((getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0) { * return HostValidator.ALLOW_ALL_HOSTS_VALIDATOR; * } else { * return new HostValidator.Builder(context) * .addAllowedHosts(androidx.car.app.R.array.hosts_allowlist_sample) * .build(); * } * } * </pre> */ ```
biodranik commented 2022-12-11 12:25:45 +00:00 (Migrated from github.com)
Review
  1. Так какие приложения перечислены в androidx.car.app.R.array.hosts_allowlist_sample ? Я так понял, для работы с апи <31 нам придётся их перечислить.
  2. Почему бы для отладки не сделать проще: if (BuildConfig.DEBUG) ?
  3. код может быть проще:
if ()
  return ...;
return ...;
1. Так какие приложения перечислены в androidx.car.app.R.array.hosts_allowlist_sample ? Я так понял, для работы с апи <31 нам придётся их перечислить. 2. Почему бы для отладки не сделать проще: if (BuildConfig.DEBUG) ? 3. код может быть проще: ``` if () return ...; return ...; ```
Review

Все не так. Почитал я, как работает HostValidator класс.

  • Он проверяет Host, т.е. магнитолу на которой запускается AA
  • Подключение к хосту разрешается в двух случаях
    • Либо хост указан в списке, который мы передаем
    • Либо хост имеет у себя android.car.permission.TEMPLATE_RENDERER

Поэтому я заменил R.array.car_hosts на androidx.car.app.R.array.hosts_allowlist_sample. Думаю, смысла держать свой список разрешенных хостов нет, а на warning можно закрыть глаза.

Warning:

The resource @array/hosts_allowlist_sample is marked as private in androidx.car.app:app:1.3.0-rc01

Все не так. Почитал я, как работает HostValidator класс. * Он проверяет Host, т.е. магнитолу на которой запускается AA * Подключение к хосту разрешается в двух случаях * Либо хост указан в списке, который мы передаем * Либо хост имеет у себя `android.car.permission.TEMPLATE_RENDERER` Поэтому я заменил `R.array.car_hosts` на `androidx.car.app.R.array.hosts_allowlist_sample`. Думаю, смысла держать свой список разрешенных хостов нет, а на warning можно закрыть глаза. Warning: >The resource @array/hosts_allowlist_sample is marked as private in androidx.car.app:app:1.3.0-rc01
biodranik commented 2022-12-11 21:13:37 +00:00 (Migrated from github.com)
Review

Так что именно в этом файле-то? )

Так что именно в этом файле-то? )
Review

В androidx.car.app.R.array.hosts_allowlist_sample?
Массив таких строк:
fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf,com.google.android.projection.gearhead

Первая часть - цифровая подпись, вторая - имя пакета

* @param packageName host package name (as reported by {@link PackageManager})
* @param digest      SHA256 digest of the DER encoding of the allow-listed host
*                    certificate, formatted as 32 lowercase 2 digits  hexadecimal values
*                    separated by colon (e.g.:"000102030405060708090a0b0c0d0e0f101112131415
*                    161718191a1b1c1d1e1f"). When using
*                    <a href="https://developer.android.com/about/versions/pie/android-9.0#apk-key-rotation">signature
*                    rotation</a>, this digest should correspond to the initial signing
*                    certificate

Только сейчас обратил внимание на это:

Application developers are expected to also allow connections from known hosts which don't hold the aforementioned permission (for example, Android Auto and Android Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts.

Но я не смог найти никакого общего списка хостов или хотя бы какого-то упоминания о том, что люди добавляли в этот список еще что-то. Поэтому, наверное, можно на это не обращать внимания. По крайней мере пока что.

В `androidx.car.app.R.array.hosts_allowlist_sample`? Массив таких строк: `fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf,com.google.android.projection.gearhead` Первая часть - цифровая подпись, вторая - имя пакета ```java * @param packageName host package name (as reported by {@link PackageManager}) * @param digest SHA256 digest of the DER encoding of the allow-listed host * certificate, formatted as 32 lowercase 2 digits hexadecimal values * separated by colon (e.g.:"000102030405060708090a0b0c0d0e0f101112131415 * 161718191a1b1c1d1e1f"). When using * <a href="https://developer.android.com/about/versions/pie/android-9.0#apk-key-rotation">signature * rotation</a>, this digest should correspond to the initial signing * certificate ``` Только сейчас обратил внимание на это: >Application developers are expected to also allow connections from known hosts which don't hold the aforementioned permission (for example, Android Auto and Android Automotive OS hosts below API level 31), by allow-listing the signatures of those hosts. Но я не смог найти никакого общего списка хостов или хотя бы какого-то упоминания о том, что люди добавляли в этот список еще что-то. Поэтому, наверное, можно на это не обращать внимания. По крайней мере пока что.
biodranik commented 2022-12-11 22:03:03 +00:00 (Migrated from github.com)
Review
  1. Полный список пакетов в том файле можно выложить сюда или на pastebin?
  2. Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы.
1. Полный список пакетов в том файле можно выложить сюда или на pastebin? 2. Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы.
Review
<string-array name="hosts_allowlist_sample" translatable="false">
   <item>fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf,
         com.google.android.projection.gearhead</item>
   <item>70811a3eacfd2e83e18da9bfede52df16ce91f2e69a44d21f18ab66991130771,
         com.google.android.projection.gearhead</item>
   <item>1975b2f17177bc89a5dff31f9e64a6cae281a53dc1d1d59b1d147fe1c82afa00,
         com.google.android.projection.gearhead</item>
   <item>c241ffbc8e287c4e9a4ad19632ba1b1351ad361d5177b7d7b29859bd2b7fc631,
         com.google.android.apps.automotive.templates.host</item>
   <item>dd66deaf312d8daec7adbe85a218ecc8c64f3b152f9b5998d5b29300c2623f61,
         com.google.android.apps.automotive.templates.host</item>
   <item>50e603d333c6049a37bd751375d08f3bd0abebd33facd30bd17b64b89658b421,
         com.google.android.apps.automotive.templates.host</item>
</string-array>
```xml <string-array name="hosts_allowlist_sample" translatable="false"> <item>fdb00c43dbde8b51cb312aa81d3b5fa17713adb94b28f598d77f8eb89daceedf, com.google.android.projection.gearhead</item> <item>70811a3eacfd2e83e18da9bfede52df16ce91f2e69a44d21f18ab66991130771, com.google.android.projection.gearhead</item> <item>1975b2f17177bc89a5dff31f9e64a6cae281a53dc1d1d59b1d147fe1c82afa00, com.google.android.projection.gearhead</item> <item>c241ffbc8e287c4e9a4ad19632ba1b1351ad361d5177b7d7b29859bd2b7fc631, com.google.android.apps.automotive.templates.host</item> <item>dd66deaf312d8daec7adbe85a218ecc8c64f3b152f9b5998d5b29300c2623f61, com.google.android.apps.automotive.templates.host</item> <item>50e603d333c6049a37bd751375d08f3bd0abebd33facd30bd17b64b89658b421, com.google.android.apps.automotive.templates.host</item> </string-array> ```
Review

Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы.

Тут если что подразумевается API хоста, а не телефона

>Т.к. мы хотим поддержку с API 24, то видимо это нас коснётся. Поэтому хотелось бы сразу понимать масштабы проблемы. Тут если что подразумевается API хоста, а не телефона

View file

@ -0,0 +1,69 @@
Review

We can follow the same logic as for myPosition button?

e9056f11fb/android/src/app/organicmaps/MwmActivity.java (L650-L654)

LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.

We can follow the same logic as for myPosition button? https://github.com/organicmaps/organicmaps/blob/e9056f11fbc2cf3c41850701302bba305cbde95a/android/src/app/organicmaps/MwmActivity.java#L650-L654 LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.
Review

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в LocationHelper
Просто тремя строчками тут не обойтись
Из тех проблем, что я вижу сейчас:

  • Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка
  • Если местоположение отображается, то появляются проблемы с onScale. Всегда скейлится относительно местоположения, а не точки на экране
  • Плюс все равно надо реализовывать кнопку с разными иконками

Я считаю, это лучше сделать в отдельном PR

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в `LocationHelper` Просто тремя строчками тут не обойтись Из тех проблем, что я вижу сейчас: * Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка * Если местоположение отображается, то появляются проблемы с `onScale`. Всегда скейлится относительно местоположения, а не точки на экране * Плюс все равно надо реализовывать кнопку с разными иконками Я считаю, это лучше сделать в отдельном PR
biodranik commented 2022-12-08 21:16:48 +00:00 (Migrated from github.com)
Review
  1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему.
  2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему. 2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
biodranik commented 2022-12-11 12:25:58 +00:00 (Migrated from github.com)
Review

Лишняя строка

Лишняя строка
biodranik commented 2022-12-11 12:26:27 +00:00 (Migrated from github.com)
Review

Зачем этот флаг? Можно ли без него?

Зачем этот флаг? Можно ли без него?
Review

В будущем, думаю, можно. Сейчас сделал так.
Если очень не нравится, могу удалить эту часть с сообщением об ошибке + ErrorScreen.
Но временные костыли в любом случае неизбежны.

В будущем, думаю, можно. Сейчас сделал так. Если очень не нравится, могу удалить эту часть с сообщением об ошибке + `ErrorScreen`. Но временные костыли в любом случае неизбежны.
Review

We can follow the same logic as for myPosition button?

e9056f11fb/android/src/app/organicmaps/MwmActivity.java (L650-L654)

LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.

We can follow the same logic as for myPosition button? https://github.com/organicmaps/organicmaps/blob/e9056f11fbc2cf3c41850701302bba305cbde95a/android/src/app/organicmaps/MwmActivity.java#L650-L654 LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.
Review

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в LocationHelper
Просто тремя строчками тут не обойтись
Из тех проблем, что я вижу сейчас:

  • Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка
  • Если местоположение отображается, то появляются проблемы с onScale. Всегда скейлится относительно местоположения, а не точки на экране
  • Плюс все равно надо реализовывать кнопку с разными иконками

Я считаю, это лучше сделать в отдельном PR

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в `LocationHelper` Просто тремя строчками тут не обойтись Из тех проблем, что я вижу сейчас: * Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка * Если местоположение отображается, то появляются проблемы с `onScale`. Всегда скейлится относительно местоположения, а не точки на экране * Плюс все равно надо реализовывать кнопку с разными иконками Я считаю, это лучше сделать в отдельном PR
biodranik commented 2022-12-08 21:16:48 +00:00 (Migrated from github.com)
Review
  1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему.
  2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему. 2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
biodranik commented 2022-12-11 12:25:58 +00:00 (Migrated from github.com)
Review

Лишняя строка

Лишняя строка
biodranik commented 2022-12-11 12:26:27 +00:00 (Migrated from github.com)
Review

Зачем этот флаг? Можно ли без него?

Зачем этот флаг? Можно ли без него?
Review

В будущем, думаю, можно. Сейчас сделал так.
Если очень не нравится, могу удалить эту часть с сообщением об ошибке + ErrorScreen.
Но временные костыли в любом случае неизбежны.

В будущем, думаю, можно. Сейчас сделал так. Если очень не нравится, могу удалить эту часть с сообщением об ошибке + `ErrorScreen`. Но временные костыли в любом случае неизбежны.
package app.organicmaps.car;
Review

We can follow the same logic as for myPosition button?

e9056f11fb/android/src/app/organicmaps/MwmActivity.java (L650-L654)

LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.

We can follow the same logic as for myPosition button? https://github.com/organicmaps/organicmaps/blob/e9056f11fbc2cf3c41850701302bba305cbde95a/android/src/app/organicmaps/MwmActivity.java#L650-L654 LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.
Review

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в LocationHelper
Просто тремя строчками тут не обойтись
Из тех проблем, что я вижу сейчас:

  • Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка
  • Если местоположение отображается, то появляются проблемы с onScale. Всегда скейлится относительно местоположения, а не точки на экране
  • Плюс все равно надо реализовывать кнопку с разными иконками

Я считаю, это лучше сделать в отдельном PR

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в `LocationHelper` Просто тремя строчками тут не обойтись Из тех проблем, что я вижу сейчас: * Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка * Если местоположение отображается, то появляются проблемы с `onScale`. Всегда скейлится относительно местоположения, а не точки на экране * Плюс все равно надо реализовывать кнопку с разными иконками Я считаю, это лучше сделать в отдельном PR
biodranik commented 2022-12-08 21:16:48 +00:00 (Migrated from github.com)
Review
  1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему.
  2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему. 2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
biodranik commented 2022-12-11 12:25:58 +00:00 (Migrated from github.com)
Review

Лишняя строка

Лишняя строка
biodranik commented 2022-12-11 12:26:27 +00:00 (Migrated from github.com)
Review

Зачем этот флаг? Можно ли без него?

Зачем этот флаг? Можно ли без него?
Review

В будущем, думаю, можно. Сейчас сделал так.
Если очень не нравится, могу удалить эту часть с сообщением об ошибке + ErrorScreen.
Но временные костыли в любом случае неизбежны.

В будущем, думаю, можно. Сейчас сделал так. Если очень не нравится, могу удалить эту часть с сообщением об ошибке + `ErrorScreen`. Но временные костыли в любом случае неизбежны.
Review

We can follow the same logic as for myPosition button?

e9056f11fb/android/src/app/organicmaps/MwmActivity.java (L650-L654)

LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.

We can follow the same logic as for myPosition button? https://github.com/organicmaps/organicmaps/blob/e9056f11fbc2cf3c41850701302bba305cbde95a/android/src/app/organicmaps/MwmActivity.java#L650-L654 LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.
Review

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в LocationHelper
Просто тремя строчками тут не обойтись
Из тех проблем, что я вижу сейчас:

  • Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка
  • Если местоположение отображается, то появляются проблемы с onScale. Всегда скейлится относительно местоположения, а не точки на экране
  • Плюс все равно надо реализовывать кнопку с разными иконками

Я считаю, это лучше сделать в отдельном PR

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в `LocationHelper` Просто тремя строчками тут не обойтись Из тех проблем, что я вижу сейчас: * Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка * Если местоположение отображается, то появляются проблемы с `onScale`. Всегда скейлится относительно местоположения, а не точки на экране * Плюс все равно надо реализовывать кнопку с разными иконками Я считаю, это лучше сделать в отдельном PR
biodranik commented 2022-12-08 21:16:48 +00:00 (Migrated from github.com)
Review
  1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему.
  2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему. 2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
biodranik commented 2022-12-11 12:25:58 +00:00 (Migrated from github.com)
Review

Лишняя строка

Лишняя строка
biodranik commented 2022-12-11 12:26:27 +00:00 (Migrated from github.com)
Review

Зачем этот флаг? Можно ли без него?

Зачем этот флаг? Можно ли без него?
Review

В будущем, думаю, можно. Сейчас сделал так.
Если очень не нравится, могу удалить эту часть с сообщением об ошибке + ErrorScreen.
Но временные костыли в любом случае неизбежны.

В будущем, думаю, можно. Сейчас сделал так. Если очень не нравится, могу удалить эту часть с сообщением об ошибке + `ErrorScreen`. Но временные костыли в любом случае неизбежны.
import android.content.Intent;
Review

We can follow the same logic as for myPosition button?

e9056f11fb/android/src/app/organicmaps/MwmActivity.java (L650-L654)

LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.

We can follow the same logic as for myPosition button? https://github.com/organicmaps/organicmaps/blob/e9056f11fbc2cf3c41850701302bba305cbde95a/android/src/app/organicmaps/MwmActivity.java#L650-L654 LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.
Review

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в LocationHelper
Просто тремя строчками тут не обойтись
Из тех проблем, что я вижу сейчас:

  • Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка
  • Если местоположение отображается, то появляются проблемы с onScale. Всегда скейлится относительно местоположения, а не точки на экране
  • Плюс все равно надо реализовывать кнопку с разными иконками

Я считаю, это лучше сделать в отдельном PR

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в `LocationHelper` Просто тремя строчками тут не обойтись Из тех проблем, что я вижу сейчас: * Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка * Если местоположение отображается, то появляются проблемы с `onScale`. Всегда скейлится относительно местоположения, а не точки на экране * Плюс все равно надо реализовывать кнопку с разными иконками Я считаю, это лучше сделать в отдельном PR
biodranik commented 2022-12-08 21:16:48 +00:00 (Migrated from github.com)
Review
  1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему.
  2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему. 2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
biodranik commented 2022-12-11 12:25:58 +00:00 (Migrated from github.com)
Review

Лишняя строка

Лишняя строка
biodranik commented 2022-12-11 12:26:27 +00:00 (Migrated from github.com)
Review

Зачем этот флаг? Можно ли без него?

Зачем этот флаг? Можно ли без него?
Review

В будущем, думаю, можно. Сейчас сделал так.
Если очень не нравится, могу удалить эту часть с сообщением об ошибке + ErrorScreen.
Но временные костыли в любом случае неизбежны.

В будущем, думаю, можно. Сейчас сделал так. Если очень не нравится, могу удалить эту часть с сообщением об ошибке + `ErrorScreen`. Но временные костыли в любом случае неизбежны.
import android.util.Log;
Review

We can follow the same logic as for myPosition button?

e9056f11fb/android/src/app/organicmaps/MwmActivity.java (L650-L654)

LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.

We can follow the same logic as for myPosition button? https://github.com/organicmaps/organicmaps/blob/e9056f11fbc2cf3c41850701302bba305cbde95a/android/src/app/organicmaps/MwmActivity.java#L650-L654 LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.
Review

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в LocationHelper
Просто тремя строчками тут не обойтись
Из тех проблем, что я вижу сейчас:

  • Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка
  • Если местоположение отображается, то появляются проблемы с onScale. Всегда скейлится относительно местоположения, а не точки на экране
  • Плюс все равно надо реализовывать кнопку с разными иконками

Я считаю, это лучше сделать в отдельном PR

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в `LocationHelper` Просто тремя строчками тут не обойтись Из тех проблем, что я вижу сейчас: * Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка * Если местоположение отображается, то появляются проблемы с `onScale`. Всегда скейлится относительно местоположения, а не точки на экране * Плюс все равно надо реализовывать кнопку с разными иконками Я считаю, это лучше сделать в отдельном PR
biodranik commented 2022-12-08 21:16:48 +00:00 (Migrated from github.com)
Review
  1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему.
  2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему. 2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
biodranik commented 2022-12-11 12:25:58 +00:00 (Migrated from github.com)
Review

Лишняя строка

Лишняя строка
biodranik commented 2022-12-11 12:26:27 +00:00 (Migrated from github.com)
Review

Зачем этот флаг? Можно ли без него?

Зачем этот флаг? Можно ли без него?
Review

В будущем, думаю, можно. Сейчас сделал так.
Если очень не нравится, могу удалить эту часть с сообщением об ошибке + ErrorScreen.
Но временные костыли в любом случае неизбежны.

В будущем, думаю, можно. Сейчас сделал так. Если очень не нравится, могу удалить эту часть с сообщением об ошибке + `ErrorScreen`. Но временные костыли в любом случае неизбежны.
Review

We can follow the same logic as for myPosition button?

e9056f11fb/android/src/app/organicmaps/MwmActivity.java (L650-L654)

LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.

We can follow the same logic as for myPosition button? https://github.com/organicmaps/organicmaps/blob/e9056f11fbc2cf3c41850701302bba305cbde95a/android/src/app/organicmaps/MwmActivity.java#L650-L654 LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.
Review

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в LocationHelper
Просто тремя строчками тут не обойтись
Из тех проблем, что я вижу сейчас:

  • Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка
  • Если местоположение отображается, то появляются проблемы с onScale. Всегда скейлится относительно местоположения, а не точки на экране
  • Плюс все равно надо реализовывать кнопку с разными иконками

Я считаю, это лучше сделать в отдельном PR

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в `LocationHelper` Просто тремя строчками тут не обойтись Из тех проблем, что я вижу сейчас: * Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка * Если местоположение отображается, то появляются проблемы с `onScale`. Всегда скейлится относительно местоположения, а не точки на экране * Плюс все равно надо реализовывать кнопку с разными иконками Я считаю, это лучше сделать в отдельном PR
biodranik commented 2022-12-08 21:16:48 +00:00 (Migrated from github.com)
Review
  1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему.
  2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему. 2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
biodranik commented 2022-12-11 12:25:58 +00:00 (Migrated from github.com)
Review

Лишняя строка

Лишняя строка
biodranik commented 2022-12-11 12:26:27 +00:00 (Migrated from github.com)
Review

Зачем этот флаг? Можно ли без него?

Зачем этот флаг? Можно ли без него?
Review

В будущем, думаю, можно. Сейчас сделал так.
Если очень не нравится, могу удалить эту часть с сообщением об ошибке + ErrorScreen.
Но временные костыли в любом случае неизбежны.

В будущем, думаю, можно. Сейчас сделал так. Если очень не нравится, могу удалить эту часть с сообщением об ошибке + `ErrorScreen`. Но временные костыли в любом случае неизбежны.
import androidx.annotation.NonNull;
Review

We can follow the same logic as for myPosition button?

e9056f11fb/android/src/app/organicmaps/MwmActivity.java (L650-L654)

LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.

We can follow the same logic as for myPosition button? https://github.com/organicmaps/organicmaps/blob/e9056f11fbc2cf3c41850701302bba305cbde95a/android/src/app/organicmaps/MwmActivity.java#L650-L654 LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.
Review

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в LocationHelper
Просто тремя строчками тут не обойтись
Из тех проблем, что я вижу сейчас:

  • Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка
  • Если местоположение отображается, то появляются проблемы с onScale. Всегда скейлится относительно местоположения, а не точки на экране
  • Плюс все равно надо реализовывать кнопку с разными иконками

Я считаю, это лучше сделать в отдельном PR

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в `LocationHelper` Просто тремя строчками тут не обойтись Из тех проблем, что я вижу сейчас: * Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка * Если местоположение отображается, то появляются проблемы с `onScale`. Всегда скейлится относительно местоположения, а не точки на экране * Плюс все равно надо реализовывать кнопку с разными иконками Я считаю, это лучше сделать в отдельном PR
biodranik commented 2022-12-08 21:16:48 +00:00 (Migrated from github.com)
Review
  1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему.
  2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему. 2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
biodranik commented 2022-12-11 12:25:58 +00:00 (Migrated from github.com)
Review

Лишняя строка

Лишняя строка
biodranik commented 2022-12-11 12:26:27 +00:00 (Migrated from github.com)
Review

Зачем этот флаг? Можно ли без него?

Зачем этот флаг? Можно ли без него?
Review

В будущем, думаю, можно. Сейчас сделал так.
Если очень не нравится, могу удалить эту часть с сообщением об ошибке + ErrorScreen.
Но временные костыли в любом случае неизбежны.

В будущем, думаю, можно. Сейчас сделал так. Если очень не нравится, могу удалить эту часть с сообщением об ошибке + `ErrorScreen`. Но временные костыли в любом случае неизбежны.
import androidx.car.app.Screen;
Review

We can follow the same logic as for myPosition button?

e9056f11fb/android/src/app/organicmaps/MwmActivity.java (L650-L654)

LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.

We can follow the same logic as for myPosition button? https://github.com/organicmaps/organicmaps/blob/e9056f11fbc2cf3c41850701302bba305cbde95a/android/src/app/organicmaps/MwmActivity.java#L650-L654 LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.
Review

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в LocationHelper
Просто тремя строчками тут не обойтись
Из тех проблем, что я вижу сейчас:

  • Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка
  • Если местоположение отображается, то появляются проблемы с onScale. Всегда скейлится относительно местоположения, а не точки на экране
  • Плюс все равно надо реализовывать кнопку с разными иконками

Я считаю, это лучше сделать в отдельном PR

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в `LocationHelper` Просто тремя строчками тут не обойтись Из тех проблем, что я вижу сейчас: * Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка * Если местоположение отображается, то появляются проблемы с `onScale`. Всегда скейлится относительно местоположения, а не точки на экране * Плюс все равно надо реализовывать кнопку с разными иконками Я считаю, это лучше сделать в отдельном PR
biodranik commented 2022-12-08 21:16:48 +00:00 (Migrated from github.com)
Review
  1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему.
  2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему. 2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
biodranik commented 2022-12-11 12:25:58 +00:00 (Migrated from github.com)
Review

Лишняя строка

Лишняя строка
biodranik commented 2022-12-11 12:26:27 +00:00 (Migrated from github.com)
Review

Зачем этот флаг? Можно ли без него?

Зачем этот флаг? Можно ли без него?
Review

В будущем, думаю, можно. Сейчас сделал так.
Если очень не нравится, могу удалить эту часть с сообщением об ошибке + ErrorScreen.
Но временные костыли в любом случае неизбежны.

В будущем, думаю, можно. Сейчас сделал так. Если очень не нравится, могу удалить эту часть с сообщением об ошибке + `ErrorScreen`. Но временные костыли в любом случае неизбежны.
import androidx.car.app.Session;
Review

We can follow the same logic as for myPosition button?

e9056f11fb/android/src/app/organicmaps/MwmActivity.java (L650-L654)

LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.

We can follow the same logic as for myPosition button? https://github.com/organicmaps/organicmaps/blob/e9056f11fbc2cf3c41850701302bba305cbde95a/android/src/app/organicmaps/MwmActivity.java#L650-L654 LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.
Review

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в LocationHelper
Просто тремя строчками тут не обойтись
Из тех проблем, что я вижу сейчас:

  • Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка
  • Если местоположение отображается, то появляются проблемы с onScale. Всегда скейлится относительно местоположения, а не точки на экране
  • Плюс все равно надо реализовывать кнопку с разными иконками

Я считаю, это лучше сделать в отдельном PR

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в `LocationHelper` Просто тремя строчками тут не обойтись Из тех проблем, что я вижу сейчас: * Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка * Если местоположение отображается, то появляются проблемы с `onScale`. Всегда скейлится относительно местоположения, а не точки на экране * Плюс все равно надо реализовывать кнопку с разными иконками Я считаю, это лучше сделать в отдельном PR
biodranik commented 2022-12-08 21:16:48 +00:00 (Migrated from github.com)
Review
  1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему.
  2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему. 2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
biodranik commented 2022-12-11 12:25:58 +00:00 (Migrated from github.com)
Review

Лишняя строка

Лишняя строка
biodranik commented 2022-12-11 12:26:27 +00:00 (Migrated from github.com)
Review

Зачем этот флаг? Можно ли без него?

Зачем этот флаг? Можно ли без него?
Review

В будущем, думаю, можно. Сейчас сделал так.
Если очень не нравится, могу удалить эту часть с сообщением об ошибке + ErrorScreen.
Но временные костыли в любом случае неизбежны.

В будущем, думаю, можно. Сейчас сделал так. Если очень не нравится, могу удалить эту часть с сообщением об ошибке + `ErrorScreen`. Но временные костыли в любом случае неизбежны.
import androidx.lifecycle.DefaultLifecycleObserver;
Review

We can follow the same logic as for myPosition button?

e9056f11fb/android/src/app/organicmaps/MwmActivity.java (L650-L654)

LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.

We can follow the same logic as for myPosition button? https://github.com/organicmaps/organicmaps/blob/e9056f11fbc2cf3c41850701302bba305cbde95a/android/src/app/organicmaps/MwmActivity.java#L650-L654 LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.
Review

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в LocationHelper
Просто тремя строчками тут не обойтись
Из тех проблем, что я вижу сейчас:

  • Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка
  • Если местоположение отображается, то появляются проблемы с onScale. Всегда скейлится относительно местоположения, а не точки на экране
  • Плюс все равно надо реализовывать кнопку с разными иконками

Я считаю, это лучше сделать в отдельном PR

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в `LocationHelper` Просто тремя строчками тут не обойтись Из тех проблем, что я вижу сейчас: * Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка * Если местоположение отображается, то появляются проблемы с `onScale`. Всегда скейлится относительно местоположения, а не точки на экране * Плюс все равно надо реализовывать кнопку с разными иконками Я считаю, это лучше сделать в отдельном PR
biodranik commented 2022-12-08 21:16:48 +00:00 (Migrated from github.com)
Review
  1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему.
  2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему. 2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
biodranik commented 2022-12-11 12:25:58 +00:00 (Migrated from github.com)
Review

Лишняя строка

Лишняя строка
biodranik commented 2022-12-11 12:26:27 +00:00 (Migrated from github.com)
Review

Зачем этот флаг? Можно ли без него?

Зачем этот флаг? Можно ли без него?
Review

В будущем, думаю, можно. Сейчас сделал так.
Если очень не нравится, могу удалить эту часть с сообщением об ошибке + ErrorScreen.
Но временные костыли в любом случае неизбежны.

В будущем, думаю, можно. Сейчас сделал так. Если очень не нравится, могу удалить эту часть с сообщением об ошибке + `ErrorScreen`. Но временные костыли в любом случае неизбежны.
import androidx.lifecycle.LifecycleOwner;
Review

We can follow the same logic as for myPosition button?

e9056f11fb/android/src/app/organicmaps/MwmActivity.java (L650-L654)

LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.

We can follow the same logic as for myPosition button? https://github.com/organicmaps/organicmaps/blob/e9056f11fbc2cf3c41850701302bba305cbde95a/android/src/app/organicmaps/MwmActivity.java#L650-L654 LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.
Review

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в LocationHelper
Просто тремя строчками тут не обойтись
Из тех проблем, что я вижу сейчас:

  • Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка
  • Если местоположение отображается, то появляются проблемы с onScale. Всегда скейлится относительно местоположения, а не точки на экране
  • Плюс все равно надо реализовывать кнопку с разными иконками

Я считаю, это лучше сделать в отдельном PR

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в `LocationHelper` Просто тремя строчками тут не обойтись Из тех проблем, что я вижу сейчас: * Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка * Если местоположение отображается, то появляются проблемы с `onScale`. Всегда скейлится относительно местоположения, а не точки на экране * Плюс все равно надо реализовывать кнопку с разными иконками Я считаю, это лучше сделать в отдельном PR
biodranik commented 2022-12-08 21:16:48 +00:00 (Migrated from github.com)
Review
  1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему.
  2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему. 2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
biodranik commented 2022-12-11 12:25:58 +00:00 (Migrated from github.com)
Review

Лишняя строка

Лишняя строка
biodranik commented 2022-12-11 12:26:27 +00:00 (Migrated from github.com)
Review

Зачем этот флаг? Можно ли без него?

Зачем этот флаг? Можно ли без него?
Review

В будущем, думаю, можно. Сейчас сделал так.
Если очень не нравится, могу удалить эту часть с сообщением об ошибке + ErrorScreen.
Но временные костыли в любом случае неизбежны.

В будущем, думаю, можно. Сейчас сделал так. Если очень не нравится, могу удалить эту часть с сообщением об ошибке + `ErrorScreen`. Но временные костыли в любом случае неизбежны.
Review

We can follow the same logic as for myPosition button?

e9056f11fb/android/src/app/organicmaps/MwmActivity.java (L650-L654)

LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.

We can follow the same logic as for myPosition button? https://github.com/organicmaps/organicmaps/blob/e9056f11fbc2cf3c41850701302bba305cbde95a/android/src/app/organicmaps/MwmActivity.java#L650-L654 LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.
Review

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в LocationHelper
Просто тремя строчками тут не обойтись
Из тех проблем, что я вижу сейчас:

  • Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка
  • Если местоположение отображается, то появляются проблемы с onScale. Всегда скейлится относительно местоположения, а не точки на экране
  • Плюс все равно надо реализовывать кнопку с разными иконками

Я считаю, это лучше сделать в отдельном PR

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в `LocationHelper` Просто тремя строчками тут не обойтись Из тех проблем, что я вижу сейчас: * Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка * Если местоположение отображается, то появляются проблемы с `onScale`. Всегда скейлится относительно местоположения, а не точки на экране * Плюс все равно надо реализовывать кнопку с разными иконками Я считаю, это лучше сделать в отдельном PR
biodranik commented 2022-12-08 21:16:48 +00:00 (Migrated from github.com)
Review
  1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему.
  2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему. 2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
biodranik commented 2022-12-11 12:25:58 +00:00 (Migrated from github.com)
Review

Лишняя строка

Лишняя строка
biodranik commented 2022-12-11 12:26:27 +00:00 (Migrated from github.com)
Review

Зачем этот флаг? Можно ли без него?

Зачем этот флаг? Можно ли без него?
Review

В будущем, думаю, можно. Сейчас сделал так.
Если очень не нравится, могу удалить эту часть с сообщением об ошибке + ErrorScreen.
Но временные костыли в любом случае неизбежны.

В будущем, думаю, можно. Сейчас сделал так. Если очень не нравится, могу удалить эту часть с сообщением об ошибке + `ErrorScreen`. Но временные костыли в любом случае неизбежны.
import app.organicmaps.MwmApplication;
Review

We can follow the same logic as for myPosition button?

e9056f11fb/android/src/app/organicmaps/MwmActivity.java (L650-L654)

LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.

We can follow the same logic as for myPosition button? https://github.com/organicmaps/organicmaps/blob/e9056f11fbc2cf3c41850701302bba305cbde95a/android/src/app/organicmaps/MwmActivity.java#L650-L654 LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.
Review

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в LocationHelper
Просто тремя строчками тут не обойтись
Из тех проблем, что я вижу сейчас:

  • Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка
  • Если местоположение отображается, то появляются проблемы с onScale. Всегда скейлится относительно местоположения, а не точки на экране
  • Плюс все равно надо реализовывать кнопку с разными иконками

Я считаю, это лучше сделать в отдельном PR

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в `LocationHelper` Просто тремя строчками тут не обойтись Из тех проблем, что я вижу сейчас: * Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка * Если местоположение отображается, то появляются проблемы с `onScale`. Всегда скейлится относительно местоположения, а не точки на экране * Плюс все равно надо реализовывать кнопку с разными иконками Я считаю, это лучше сделать в отдельном PR
biodranik commented 2022-12-08 21:16:48 +00:00 (Migrated from github.com)
Review
  1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему.
  2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему. 2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
biodranik commented 2022-12-11 12:25:58 +00:00 (Migrated from github.com)
Review

Лишняя строка

Лишняя строка
biodranik commented 2022-12-11 12:26:27 +00:00 (Migrated from github.com)
Review

Зачем этот флаг? Можно ли без него?

Зачем этот флаг? Можно ли без него?
Review

В будущем, думаю, можно. Сейчас сделал так.
Если очень не нравится, могу удалить эту часть с сообщением об ошибке + ErrorScreen.
Но временные костыли в любом случае неизбежны.

В будущем, думаю, можно. Сейчас сделал так. Если очень не нравится, могу удалить эту часть с сообщением об ошибке + `ErrorScreen`. Но временные костыли в любом случае неизбежны.
import app.organicmaps.car.screens.ErrorScreen;
Review

We can follow the same logic as for myPosition button?

e9056f11fb/android/src/app/organicmaps/MwmActivity.java (L650-L654)

LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.

We can follow the same logic as for myPosition button? https://github.com/organicmaps/organicmaps/blob/e9056f11fbc2cf3c41850701302bba305cbde95a/android/src/app/organicmaps/MwmActivity.java#L650-L654 LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.
Review

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в LocationHelper
Просто тремя строчками тут не обойтись
Из тех проблем, что я вижу сейчас:

  • Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка
  • Если местоположение отображается, то появляются проблемы с onScale. Всегда скейлится относительно местоположения, а не точки на экране
  • Плюс все равно надо реализовывать кнопку с разными иконками

Я считаю, это лучше сделать в отдельном PR

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в `LocationHelper` Просто тремя строчками тут не обойтись Из тех проблем, что я вижу сейчас: * Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка * Если местоположение отображается, то появляются проблемы с `onScale`. Всегда скейлится относительно местоположения, а не точки на экране * Плюс все равно надо реализовывать кнопку с разными иконками Я считаю, это лучше сделать в отдельном PR
biodranik commented 2022-12-08 21:16:48 +00:00 (Migrated from github.com)
Review
  1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему.
  2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему. 2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
biodranik commented 2022-12-11 12:25:58 +00:00 (Migrated from github.com)
Review

Лишняя строка

Лишняя строка
biodranik commented 2022-12-11 12:26:27 +00:00 (Migrated from github.com)
Review

Зачем этот флаг? Можно ли без него?

Зачем этот флаг? Можно ли без него?
Review

В будущем, думаю, можно. Сейчас сделал так.
Если очень не нравится, могу удалить эту часть с сообщением об ошибке + ErrorScreen.
Но временные костыли в любом случае неизбежны.

В будущем, думаю, можно. Сейчас сделал так. Если очень не нравится, могу удалить эту часть с сообщением об ошибке + `ErrorScreen`. Но временные костыли в любом случае неизбежны.
import app.organicmaps.car.screens.NavigationScreen;
Review

We can follow the same logic as for myPosition button?

e9056f11fb/android/src/app/organicmaps/MwmActivity.java (L650-L654)

LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.

We can follow the same logic as for myPosition button? https://github.com/organicmaps/organicmaps/blob/e9056f11fbc2cf3c41850701302bba305cbde95a/android/src/app/organicmaps/MwmActivity.java#L650-L654 LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.
Review

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в LocationHelper
Просто тремя строчками тут не обойтись
Из тех проблем, что я вижу сейчас:

  • Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка
  • Если местоположение отображается, то появляются проблемы с onScale. Всегда скейлится относительно местоположения, а не точки на экране
  • Плюс все равно надо реализовывать кнопку с разными иконками

Я считаю, это лучше сделать в отдельном PR

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в `LocationHelper` Просто тремя строчками тут не обойтись Из тех проблем, что я вижу сейчас: * Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка * Если местоположение отображается, то появляются проблемы с `onScale`. Всегда скейлится относительно местоположения, а не точки на экране * Плюс все равно надо реализовывать кнопку с разными иконками Я считаю, это лучше сделать в отдельном PR
biodranik commented 2022-12-08 21:16:48 +00:00 (Migrated from github.com)
Review
  1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему.
  2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему. 2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
biodranik commented 2022-12-11 12:25:58 +00:00 (Migrated from github.com)
Review

Лишняя строка

Лишняя строка
biodranik commented 2022-12-11 12:26:27 +00:00 (Migrated from github.com)
Review

Зачем этот флаг? Можно ли без него?

Зачем этот флаг? Можно ли без него?
Review

В будущем, думаю, можно. Сейчас сделал так.
Если очень не нравится, могу удалить эту часть с сообщением об ошибке + ErrorScreen.
Но временные костыли в любом случае неизбежны.

В будущем, думаю, можно. Сейчас сделал так. Если очень не нравится, могу удалить эту часть с сообщением об ошибке + `ErrorScreen`. Но временные костыли в любом случае неизбежны.
Review

We can follow the same logic as for myPosition button?

e9056f11fb/android/src/app/organicmaps/MwmActivity.java (L650-L654)

LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.

We can follow the same logic as for myPosition button? https://github.com/organicmaps/organicmaps/blob/e9056f11fbc2cf3c41850701302bba305cbde95a/android/src/app/organicmaps/MwmActivity.java#L650-L654 LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.
Review

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в LocationHelper
Просто тремя строчками тут не обойтись
Из тех проблем, что я вижу сейчас:

  • Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка
  • Если местоположение отображается, то появляются проблемы с onScale. Всегда скейлится относительно местоположения, а не точки на экране
  • Плюс все равно надо реализовывать кнопку с разными иконками

Я считаю, это лучше сделать в отдельном PR

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в `LocationHelper` Просто тремя строчками тут не обойтись Из тех проблем, что я вижу сейчас: * Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка * Если местоположение отображается, то появляются проблемы с `onScale`. Всегда скейлится относительно местоположения, а не точки на экране * Плюс все равно надо реализовывать кнопку с разными иконками Я считаю, это лучше сделать в отдельном PR
biodranik commented 2022-12-08 21:16:48 +00:00 (Migrated from github.com)
Review
  1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему.
  2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему. 2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
biodranik commented 2022-12-11 12:25:58 +00:00 (Migrated from github.com)
Review

Лишняя строка

Лишняя строка
biodranik commented 2022-12-11 12:26:27 +00:00 (Migrated from github.com)
Review

Зачем этот флаг? Можно ли без него?

Зачем этот флаг? Можно ли без него?
Review

В будущем, думаю, можно. Сейчас сделал так.
Если очень не нравится, могу удалить эту часть с сообщением об ошибке + ErrorScreen.
Но временные костыли в любом случае неизбежны.

В будущем, думаю, можно. Сейчас сделал так. Если очень не нравится, могу удалить эту часть с сообщением об ошибке + `ErrorScreen`. Но временные костыли в любом случае неизбежны.
import java.io.IOException;
Review

We can follow the same logic as for myPosition button?

e9056f11fb/android/src/app/organicmaps/MwmActivity.java (L650-L654)

LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.

We can follow the same logic as for myPosition button? https://github.com/organicmaps/organicmaps/blob/e9056f11fbc2cf3c41850701302bba305cbde95a/android/src/app/organicmaps/MwmActivity.java#L650-L654 LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.
Review

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в LocationHelper
Просто тремя строчками тут не обойтись
Из тех проблем, что я вижу сейчас:

  • Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка
  • Если местоположение отображается, то появляются проблемы с onScale. Всегда скейлится относительно местоположения, а не точки на экране
  • Плюс все равно надо реализовывать кнопку с разными иконками

Я считаю, это лучше сделать в отдельном PR

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в `LocationHelper` Просто тремя строчками тут не обойтись Из тех проблем, что я вижу сейчас: * Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка * Если местоположение отображается, то появляются проблемы с `onScale`. Всегда скейлится относительно местоположения, а не точки на экране * Плюс все равно надо реализовывать кнопку с разными иконками Я считаю, это лучше сделать в отдельном PR
biodranik commented 2022-12-08 21:16:48 +00:00 (Migrated from github.com)
Review
  1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему.
  2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему. 2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
biodranik commented 2022-12-11 12:25:58 +00:00 (Migrated from github.com)
Review

Лишняя строка

Лишняя строка
biodranik commented 2022-12-11 12:26:27 +00:00 (Migrated from github.com)
Review

Зачем этот флаг? Можно ли без него?

Зачем этот флаг? Можно ли без него?
Review

В будущем, думаю, можно. Сейчас сделал так.
Если очень не нравится, могу удалить эту часть с сообщением об ошибке + ErrorScreen.
Но временные костыли в любом случае неизбежны.

В будущем, думаю, можно. Сейчас сделал так. Если очень не нравится, могу удалить эту часть с сообщением об ошибке + `ErrorScreen`. Но временные костыли в любом случае неизбежны.
Review

We can follow the same logic as for myPosition button?

e9056f11fb/android/src/app/organicmaps/MwmActivity.java (L650-L654)

LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.

We can follow the same logic as for myPosition button? https://github.com/organicmaps/organicmaps/blob/e9056f11fbc2cf3c41850701302bba305cbde95a/android/src/app/organicmaps/MwmActivity.java#L650-L654 LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.
Review

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в LocationHelper
Просто тремя строчками тут не обойтись
Из тех проблем, что я вижу сейчас:

  • Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка
  • Если местоположение отображается, то появляются проблемы с onScale. Всегда скейлится относительно местоположения, а не точки на экране
  • Плюс все равно надо реализовывать кнопку с разными иконками

Я считаю, это лучше сделать в отдельном PR

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в `LocationHelper` Просто тремя строчками тут не обойтись Из тех проблем, что я вижу сейчас: * Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка * Если местоположение отображается, то появляются проблемы с `onScale`. Всегда скейлится относительно местоположения, а не точки на экране * Плюс все равно надо реализовывать кнопку с разными иконками Я считаю, это лучше сделать в отдельном PR
biodranik commented 2022-12-08 21:16:48 +00:00 (Migrated from github.com)
Review
  1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему.
  2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему. 2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
biodranik commented 2022-12-11 12:25:58 +00:00 (Migrated from github.com)
Review

Лишняя строка

Лишняя строка
biodranik commented 2022-12-11 12:26:27 +00:00 (Migrated from github.com)
Review

Зачем этот флаг? Можно ли без него?

Зачем этот флаг? Можно ли без него?
Review

В будущем, думаю, можно. Сейчас сделал так.
Если очень не нравится, могу удалить эту часть с сообщением об ошибке + ErrorScreen.
Но временные костыли в любом случае неизбежны.

В будущем, думаю, можно. Сейчас сделал так. Если очень не нравится, могу удалить эту часть с сообщением об ошибке + `ErrorScreen`. Но временные костыли в любом случае неизбежны.
public final class NavigationSession extends Session implements DefaultLifecycleObserver
Review

We can follow the same logic as for myPosition button?

e9056f11fb/android/src/app/organicmaps/MwmActivity.java (L650-L654)

LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.

We can follow the same logic as for myPosition button? https://github.com/organicmaps/organicmaps/blob/e9056f11fbc2cf3c41850701302bba305cbde95a/android/src/app/organicmaps/MwmActivity.java#L650-L654 LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.
Review

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в LocationHelper
Просто тремя строчками тут не обойтись
Из тех проблем, что я вижу сейчас:

  • Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка
  • Если местоположение отображается, то появляются проблемы с onScale. Всегда скейлится относительно местоположения, а не точки на экране
  • Плюс все равно надо реализовывать кнопку с разными иконками

Я считаю, это лучше сделать в отдельном PR

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в `LocationHelper` Просто тремя строчками тут не обойтись Из тех проблем, что я вижу сейчас: * Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка * Если местоположение отображается, то появляются проблемы с `onScale`. Всегда скейлится относительно местоположения, а не точки на экране * Плюс все равно надо реализовывать кнопку с разными иконками Я считаю, это лучше сделать в отдельном PR
biodranik commented 2022-12-08 21:16:48 +00:00 (Migrated from github.com)
Review
  1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему.
  2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему. 2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
biodranik commented 2022-12-11 12:25:58 +00:00 (Migrated from github.com)
Review

Лишняя строка

Лишняя строка
biodranik commented 2022-12-11 12:26:27 +00:00 (Migrated from github.com)
Review

Зачем этот флаг? Можно ли без него?

Зачем этот флаг? Можно ли без него?
Review

В будущем, думаю, можно. Сейчас сделал так.
Если очень не нравится, могу удалить эту часть с сообщением об ошибке + ErrorScreen.
Но временные костыли в любом случае неизбежны.

В будущем, думаю, можно. Сейчас сделал так. Если очень не нравится, могу удалить эту часть с сообщением об ошибке + `ErrorScreen`. Но временные костыли в любом случае неизбежны.
{
Review

We can follow the same logic as for myPosition button?

e9056f11fb/android/src/app/organicmaps/MwmActivity.java (L650-L654)

LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.

We can follow the same logic as for myPosition button? https://github.com/organicmaps/organicmaps/blob/e9056f11fbc2cf3c41850701302bba305cbde95a/android/src/app/organicmaps/MwmActivity.java#L650-L654 LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.
Review

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в LocationHelper
Просто тремя строчками тут не обойтись
Из тех проблем, что я вижу сейчас:

  • Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка
  • Если местоположение отображается, то появляются проблемы с onScale. Всегда скейлится относительно местоположения, а не точки на экране
  • Плюс все равно надо реализовывать кнопку с разными иконками

Я считаю, это лучше сделать в отдельном PR

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в `LocationHelper` Просто тремя строчками тут не обойтись Из тех проблем, что я вижу сейчас: * Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка * Если местоположение отображается, то появляются проблемы с `onScale`. Всегда скейлится относительно местоположения, а не точки на экране * Плюс все равно надо реализовывать кнопку с разными иконками Я считаю, это лучше сделать в отдельном PR
biodranik commented 2022-12-08 21:16:48 +00:00 (Migrated from github.com)
Review
  1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему.
  2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему. 2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
biodranik commented 2022-12-11 12:25:58 +00:00 (Migrated from github.com)
Review

Лишняя строка

Лишняя строка
biodranik commented 2022-12-11 12:26:27 +00:00 (Migrated from github.com)
Review

Зачем этот флаг? Можно ли без него?

Зачем этот флаг? Можно ли без него?
Review

В будущем, думаю, можно. Сейчас сделал так.
Если очень не нравится, могу удалить эту часть с сообщением об ошибке + ErrorScreen.
Но временные костыли в любом случае неизбежны.

В будущем, думаю, можно. Сейчас сделал так. Если очень не нравится, могу удалить эту часть с сообщением об ошибке + `ErrorScreen`. Но временные костыли в любом случае неизбежны.
private static final String TAG = NavigationSession.class.getSimpleName();
Review

We can follow the same logic as for myPosition button?

e9056f11fb/android/src/app/organicmaps/MwmActivity.java (L650-L654)

LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.

We can follow the same logic as for myPosition button? https://github.com/organicmaps/organicmaps/blob/e9056f11fbc2cf3c41850701302bba305cbde95a/android/src/app/organicmaps/MwmActivity.java#L650-L654 LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.
Review

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в LocationHelper
Просто тремя строчками тут не обойтись
Из тех проблем, что я вижу сейчас:

  • Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка
  • Если местоположение отображается, то появляются проблемы с onScale. Всегда скейлится относительно местоположения, а не точки на экране
  • Плюс все равно надо реализовывать кнопку с разными иконками

Я считаю, это лучше сделать в отдельном PR

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в `LocationHelper` Просто тремя строчками тут не обойтись Из тех проблем, что я вижу сейчас: * Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка * Если местоположение отображается, то появляются проблемы с `onScale`. Всегда скейлится относительно местоположения, а не точки на экране * Плюс все равно надо реализовывать кнопку с разными иконками Я считаю, это лучше сделать в отдельном PR
biodranik commented 2022-12-08 21:16:48 +00:00 (Migrated from github.com)
Review
  1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему.
  2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему. 2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
biodranik commented 2022-12-11 12:25:58 +00:00 (Migrated from github.com)
Review

Лишняя строка

Лишняя строка
biodranik commented 2022-12-11 12:26:27 +00:00 (Migrated from github.com)
Review

Зачем этот флаг? Можно ли без него?

Зачем этот флаг? Можно ли без него?
Review

В будущем, думаю, можно. Сейчас сделал так.
Если очень не нравится, могу удалить эту часть с сообщением об ошибке + ErrorScreen.
Но временные костыли в любом случае неизбежны.

В будущем, думаю, можно. Сейчас сделал так. Если очень не нравится, могу удалить эту часть с сообщением об ошибке + `ErrorScreen`. Но временные костыли в любом случае неизбежны.
Review

We can follow the same logic as for myPosition button?

e9056f11fb/android/src/app/organicmaps/MwmActivity.java (L650-L654)

LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.

We can follow the same logic as for myPosition button? https://github.com/organicmaps/organicmaps/blob/e9056f11fbc2cf3c41850701302bba305cbde95a/android/src/app/organicmaps/MwmActivity.java#L650-L654 LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.
Review

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в LocationHelper
Просто тремя строчками тут не обойтись
Из тех проблем, что я вижу сейчас:

  • Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка
  • Если местоположение отображается, то появляются проблемы с onScale. Всегда скейлится относительно местоположения, а не точки на экране
  • Плюс все равно надо реализовывать кнопку с разными иконками

Я считаю, это лучше сделать в отдельном PR

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в `LocationHelper` Просто тремя строчками тут не обойтись Из тех проблем, что я вижу сейчас: * Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка * Если местоположение отображается, то появляются проблемы с `onScale`. Всегда скейлится относительно местоположения, а не точки на экране * Плюс все равно надо реализовывать кнопку с разными иконками Я считаю, это лучше сделать в отдельном PR
biodranik commented 2022-12-08 21:16:48 +00:00 (Migrated from github.com)
Review
  1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему.
  2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему. 2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
biodranik commented 2022-12-11 12:25:58 +00:00 (Migrated from github.com)
Review

Лишняя строка

Лишняя строка
biodranik commented 2022-12-11 12:26:27 +00:00 (Migrated from github.com)
Review

Зачем этот флаг? Можно ли без него?

Зачем этот флаг? Можно ли без него?
Review

В будущем, думаю, можно. Сейчас сделал так.
Если очень не нравится, могу удалить эту часть с сообщением об ошибке + ErrorScreen.
Но временные костыли в любом случае неизбежны.

В будущем, думаю, можно. Сейчас сделал так. Если очень не нравится, могу удалить эту часть с сообщением об ошибке + `ErrorScreen`. Но временные костыли в любом случае неизбежны.
private final SurfaceRenderer mSurfaceRenderer;
Review

We can follow the same logic as for myPosition button?

e9056f11fb/android/src/app/organicmaps/MwmActivity.java (L650-L654)

LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.

We can follow the same logic as for myPosition button? https://github.com/organicmaps/organicmaps/blob/e9056f11fbc2cf3c41850701302bba305cbde95a/android/src/app/organicmaps/MwmActivity.java#L650-L654 LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.
Review

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в LocationHelper
Просто тремя строчками тут не обойтись
Из тех проблем, что я вижу сейчас:

  • Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка
  • Если местоположение отображается, то появляются проблемы с onScale. Всегда скейлится относительно местоположения, а не точки на экране
  • Плюс все равно надо реализовывать кнопку с разными иконками

Я считаю, это лучше сделать в отдельном PR

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в `LocationHelper` Просто тремя строчками тут не обойтись Из тех проблем, что я вижу сейчас: * Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка * Если местоположение отображается, то появляются проблемы с `onScale`. Всегда скейлится относительно местоположения, а не точки на экране * Плюс все равно надо реализовывать кнопку с разными иконками Я считаю, это лучше сделать в отдельном PR
biodranik commented 2022-12-08 21:16:48 +00:00 (Migrated from github.com)
Review
  1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему.
  2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему. 2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
biodranik commented 2022-12-11 12:25:58 +00:00 (Migrated from github.com)
Review

Лишняя строка

Лишняя строка
biodranik commented 2022-12-11 12:26:27 +00:00 (Migrated from github.com)
Review

Зачем этот флаг? Можно ли без него?

Зачем этот флаг? Можно ли без него?
Review

В будущем, думаю, можно. Сейчас сделал так.
Если очень не нравится, могу удалить эту часть с сообщением об ошибке + ErrorScreen.
Но временные костыли в любом случае неизбежны.

В будущем, думаю, можно. Сейчас сделал так. Если очень не нравится, могу удалить эту часть с сообщением об ошибке + `ErrorScreen`. Но временные костыли в любом случае неизбежны.
private boolean mInitFailed = false;
Review

We can follow the same logic as for myPosition button?

e9056f11fb/android/src/app/organicmaps/MwmActivity.java (L650-L654)

LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.

We can follow the same logic as for myPosition button? https://github.com/organicmaps/organicmaps/blob/e9056f11fbc2cf3c41850701302bba305cbde95a/android/src/app/organicmaps/MwmActivity.java#L650-L654 LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.
Review

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в LocationHelper
Просто тремя строчками тут не обойтись
Из тех проблем, что я вижу сейчас:

  • Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка
  • Если местоположение отображается, то появляются проблемы с onScale. Всегда скейлится относительно местоположения, а не точки на экране
  • Плюс все равно надо реализовывать кнопку с разными иконками

Я считаю, это лучше сделать в отдельном PR

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в `LocationHelper` Просто тремя строчками тут не обойтись Из тех проблем, что я вижу сейчас: * Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка * Если местоположение отображается, то появляются проблемы с `onScale`. Всегда скейлится относительно местоположения, а не точки на экране * Плюс все равно надо реализовывать кнопку с разными иконками Я считаю, это лучше сделать в отдельном PR
biodranik commented 2022-12-08 21:16:48 +00:00 (Migrated from github.com)
Review
  1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему.
  2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему. 2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
biodranik commented 2022-12-11 12:25:58 +00:00 (Migrated from github.com)
Review

Лишняя строка

Лишняя строка
biodranik commented 2022-12-11 12:26:27 +00:00 (Migrated from github.com)
Review

Зачем этот флаг? Можно ли без него?

Зачем этот флаг? Можно ли без него?
Review

В будущем, думаю, можно. Сейчас сделал так.
Если очень не нравится, могу удалить эту часть с сообщением об ошибке + ErrorScreen.
Но временные костыли в любом случае неизбежны.

В будущем, думаю, можно. Сейчас сделал так. Если очень не нравится, могу удалить эту часть с сообщением об ошибке + `ErrorScreen`. Но временные костыли в любом случае неизбежны.
Review

We can follow the same logic as for myPosition button?

e9056f11fb/android/src/app/organicmaps/MwmActivity.java (L650-L654)

LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.

We can follow the same logic as for myPosition button? https://github.com/organicmaps/organicmaps/blob/e9056f11fbc2cf3c41850701302bba305cbde95a/android/src/app/organicmaps/MwmActivity.java#L650-L654 LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.
Review

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в LocationHelper
Просто тремя строчками тут не обойтись
Из тех проблем, что я вижу сейчас:

  • Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка
  • Если местоположение отображается, то появляются проблемы с onScale. Всегда скейлится относительно местоположения, а не точки на экране
  • Плюс все равно надо реализовывать кнопку с разными иконками

Я считаю, это лучше сделать в отдельном PR

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в `LocationHelper` Просто тремя строчками тут не обойтись Из тех проблем, что я вижу сейчас: * Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка * Если местоположение отображается, то появляются проблемы с `onScale`. Всегда скейлится относительно местоположения, а не точки на экране * Плюс все равно надо реализовывать кнопку с разными иконками Я считаю, это лучше сделать в отдельном PR
biodranik commented 2022-12-08 21:16:48 +00:00 (Migrated from github.com)
Review
  1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему.
  2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему. 2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
biodranik commented 2022-12-11 12:25:58 +00:00 (Migrated from github.com)
Review

Лишняя строка

Лишняя строка
biodranik commented 2022-12-11 12:26:27 +00:00 (Migrated from github.com)
Review

Зачем этот флаг? Можно ли без него?

Зачем этот флаг? Можно ли без него?
Review

В будущем, думаю, можно. Сейчас сделал так.
Если очень не нравится, могу удалить эту часть с сообщением об ошибке + ErrorScreen.
Но временные костыли в любом случае неизбежны.

В будущем, думаю, можно. Сейчас сделал так. Если очень не нравится, могу удалить эту часть с сообщением об ошибке + `ErrorScreen`. Но временные костыли в любом случае неизбежны.
public NavigationSession()
Review

We can follow the same logic as for myPosition button?

e9056f11fb/android/src/app/organicmaps/MwmActivity.java (L650-L654)

LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.

We can follow the same logic as for myPosition button? https://github.com/organicmaps/organicmaps/blob/e9056f11fbc2cf3c41850701302bba305cbde95a/android/src/app/organicmaps/MwmActivity.java#L650-L654 LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.
Review

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в LocationHelper
Просто тремя строчками тут не обойтись
Из тех проблем, что я вижу сейчас:

  • Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка
  • Если местоположение отображается, то появляются проблемы с onScale. Всегда скейлится относительно местоположения, а не точки на экране
  • Плюс все равно надо реализовывать кнопку с разными иконками

Я считаю, это лучше сделать в отдельном PR

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в `LocationHelper` Просто тремя строчками тут не обойтись Из тех проблем, что я вижу сейчас: * Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка * Если местоположение отображается, то появляются проблемы с `onScale`. Всегда скейлится относительно местоположения, а не точки на экране * Плюс все равно надо реализовывать кнопку с разными иконками Я считаю, это лучше сделать в отдельном PR
biodranik commented 2022-12-08 21:16:48 +00:00 (Migrated from github.com)
Review
  1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему.
  2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему. 2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
biodranik commented 2022-12-11 12:25:58 +00:00 (Migrated from github.com)
Review

Лишняя строка

Лишняя строка
biodranik commented 2022-12-11 12:26:27 +00:00 (Migrated from github.com)
Review

Зачем этот флаг? Можно ли без него?

Зачем этот флаг? Можно ли без него?
Review

В будущем, думаю, можно. Сейчас сделал так.
Если очень не нравится, могу удалить эту часть с сообщением об ошибке + ErrorScreen.
Но временные костыли в любом случае неизбежны.

В будущем, думаю, можно. Сейчас сделал так. Если очень не нравится, могу удалить эту часть с сообщением об ошибке + `ErrorScreen`. Но временные костыли в любом случае неизбежны.
{
Review

We can follow the same logic as for myPosition button?

e9056f11fb/android/src/app/organicmaps/MwmActivity.java (L650-L654)

LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.

We can follow the same logic as for myPosition button? https://github.com/organicmaps/organicmaps/blob/e9056f11fbc2cf3c41850701302bba305cbde95a/android/src/app/organicmaps/MwmActivity.java#L650-L654 LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.
Review

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в LocationHelper
Просто тремя строчками тут не обойтись
Из тех проблем, что я вижу сейчас:

  • Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка
  • Если местоположение отображается, то появляются проблемы с onScale. Всегда скейлится относительно местоположения, а не точки на экране
  • Плюс все равно надо реализовывать кнопку с разными иконками

Я считаю, это лучше сделать в отдельном PR

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в `LocationHelper` Просто тремя строчками тут не обойтись Из тех проблем, что я вижу сейчас: * Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка * Если местоположение отображается, то появляются проблемы с `onScale`. Всегда скейлится относительно местоположения, а не точки на экране * Плюс все равно надо реализовывать кнопку с разными иконками Я считаю, это лучше сделать в отдельном PR
biodranik commented 2022-12-08 21:16:48 +00:00 (Migrated from github.com)
Review
  1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему.
  2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему. 2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
biodranik commented 2022-12-11 12:25:58 +00:00 (Migrated from github.com)
Review

Лишняя строка

Лишняя строка
biodranik commented 2022-12-11 12:26:27 +00:00 (Migrated from github.com)
Review

Зачем этот флаг? Можно ли без него?

Зачем этот флаг? Можно ли без него?
Review

В будущем, думаю, можно. Сейчас сделал так.
Если очень не нравится, могу удалить эту часть с сообщением об ошибке + ErrorScreen.
Но временные костыли в любом случае неизбежны.

В будущем, думаю, можно. Сейчас сделал так. Если очень не нравится, могу удалить эту часть с сообщением об ошибке + `ErrorScreen`. Но временные костыли в любом случае неизбежны.
getLifecycle().addObserver(this);
Review

We can follow the same logic as for myPosition button?

e9056f11fb/android/src/app/organicmaps/MwmActivity.java (L650-L654)

LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.

We can follow the same logic as for myPosition button? https://github.com/organicmaps/organicmaps/blob/e9056f11fbc2cf3c41850701302bba305cbde95a/android/src/app/organicmaps/MwmActivity.java#L650-L654 LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.
Review

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в LocationHelper
Просто тремя строчками тут не обойтись
Из тех проблем, что я вижу сейчас:

  • Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка
  • Если местоположение отображается, то появляются проблемы с onScale. Всегда скейлится относительно местоположения, а не точки на экране
  • Плюс все равно надо реализовывать кнопку с разными иконками

Я считаю, это лучше сделать в отдельном PR

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в `LocationHelper` Просто тремя строчками тут не обойтись Из тех проблем, что я вижу сейчас: * Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка * Если местоположение отображается, то появляются проблемы с `onScale`. Всегда скейлится относительно местоположения, а не точки на экране * Плюс все равно надо реализовывать кнопку с разными иконками Я считаю, это лучше сделать в отдельном PR
biodranik commented 2022-12-08 21:16:48 +00:00 (Migrated from github.com)
Review
  1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему.
  2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему. 2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
biodranik commented 2022-12-11 12:25:58 +00:00 (Migrated from github.com)
Review

Лишняя строка

Лишняя строка
biodranik commented 2022-12-11 12:26:27 +00:00 (Migrated from github.com)
Review

Зачем этот флаг? Можно ли без него?

Зачем этот флаг? Можно ли без него?
Review

В будущем, думаю, можно. Сейчас сделал так.
Если очень не нравится, могу удалить эту часть с сообщением об ошибке + ErrorScreen.
Но временные костыли в любом случае неизбежны.

В будущем, думаю, можно. Сейчас сделал так. Если очень не нравится, могу удалить эту часть с сообщением об ошибке + `ErrorScreen`. Но временные костыли в любом случае неизбежны.
mSurfaceRenderer = new SurfaceRenderer(getCarContext(), getLifecycle());
Review

We can follow the same logic as for myPosition button?

e9056f11fb/android/src/app/organicmaps/MwmActivity.java (L650-L654)

LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.

We can follow the same logic as for myPosition button? https://github.com/organicmaps/organicmaps/blob/e9056f11fbc2cf3c41850701302bba305cbde95a/android/src/app/organicmaps/MwmActivity.java#L650-L654 LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.
Review

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в LocationHelper
Просто тремя строчками тут не обойтись
Из тех проблем, что я вижу сейчас:

  • Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка
  • Если местоположение отображается, то появляются проблемы с onScale. Всегда скейлится относительно местоположения, а не точки на экране
  • Плюс все равно надо реализовывать кнопку с разными иконками

Я считаю, это лучше сделать в отдельном PR

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в `LocationHelper` Просто тремя строчками тут не обойтись Из тех проблем, что я вижу сейчас: * Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка * Если местоположение отображается, то появляются проблемы с `onScale`. Всегда скейлится относительно местоположения, а не точки на экране * Плюс все равно надо реализовывать кнопку с разными иконками Я считаю, это лучше сделать в отдельном PR
biodranik commented 2022-12-08 21:16:48 +00:00 (Migrated from github.com)
Review
  1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему.
  2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему. 2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
biodranik commented 2022-12-11 12:25:58 +00:00 (Migrated from github.com)
Review

Лишняя строка

Лишняя строка
biodranik commented 2022-12-11 12:26:27 +00:00 (Migrated from github.com)
Review

Зачем этот флаг? Можно ли без него?

Зачем этот флаг? Можно ли без него?
Review

В будущем, думаю, можно. Сейчас сделал так.
Если очень не нравится, могу удалить эту часть с сообщением об ошибке + ErrorScreen.
Но временные костыли в любом случае неизбежны.

В будущем, думаю, можно. Сейчас сделал так. Если очень не нравится, могу удалить эту часть с сообщением об ошибке + `ErrorScreen`. Но временные костыли в любом случае неизбежны.
}
Review

We can follow the same logic as for myPosition button?

e9056f11fb/android/src/app/organicmaps/MwmActivity.java (L650-L654)

LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.

We can follow the same logic as for myPosition button? https://github.com/organicmaps/organicmaps/blob/e9056f11fbc2cf3c41850701302bba305cbde95a/android/src/app/organicmaps/MwmActivity.java#L650-L654 LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.
Review

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в LocationHelper
Просто тремя строчками тут не обойтись
Из тех проблем, что я вижу сейчас:

  • Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка
  • Если местоположение отображается, то появляются проблемы с onScale. Всегда скейлится относительно местоположения, а не точки на экране
  • Плюс все равно надо реализовывать кнопку с разными иконками

Я считаю, это лучше сделать в отдельном PR

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в `LocationHelper` Просто тремя строчками тут не обойтись Из тех проблем, что я вижу сейчас: * Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка * Если местоположение отображается, то появляются проблемы с `onScale`. Всегда скейлится относительно местоположения, а не точки на экране * Плюс все равно надо реализовывать кнопку с разными иконками Я считаю, это лучше сделать в отдельном PR
biodranik commented 2022-12-08 21:16:48 +00:00 (Migrated from github.com)
Review
  1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему.
  2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему. 2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
biodranik commented 2022-12-11 12:25:58 +00:00 (Migrated from github.com)
Review

Лишняя строка

Лишняя строка
biodranik commented 2022-12-11 12:26:27 +00:00 (Migrated from github.com)
Review

Зачем этот флаг? Можно ли без него?

Зачем этот флаг? Можно ли без него?
Review

В будущем, думаю, можно. Сейчас сделал так.
Если очень не нравится, могу удалить эту часть с сообщением об ошибке + ErrorScreen.
Но временные костыли в любом случае неизбежны.

В будущем, думаю, можно. Сейчас сделал так. Если очень не нравится, могу удалить эту часть с сообщением об ошибке + `ErrorScreen`. Но временные костыли в любом случае неизбежны.
Review

We can follow the same logic as for myPosition button?

e9056f11fb/android/src/app/organicmaps/MwmActivity.java (L650-L654)

LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.

We can follow the same logic as for myPosition button? https://github.com/organicmaps/organicmaps/blob/e9056f11fbc2cf3c41850701302bba305cbde95a/android/src/app/organicmaps/MwmActivity.java#L650-L654 LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.
Review

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в LocationHelper
Просто тремя строчками тут не обойтись
Из тех проблем, что я вижу сейчас:

  • Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка
  • Если местоположение отображается, то появляются проблемы с onScale. Всегда скейлится относительно местоположения, а не точки на экране
  • Плюс все равно надо реализовывать кнопку с разными иконками

Я считаю, это лучше сделать в отдельном PR

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в `LocationHelper` Просто тремя строчками тут не обойтись Из тех проблем, что я вижу сейчас: * Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка * Если местоположение отображается, то появляются проблемы с `onScale`. Всегда скейлится относительно местоположения, а не точки на экране * Плюс все равно надо реализовывать кнопку с разными иконками Я считаю, это лучше сделать в отдельном PR
biodranik commented 2022-12-08 21:16:48 +00:00 (Migrated from github.com)
Review
  1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему.
  2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему. 2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
biodranik commented 2022-12-11 12:25:58 +00:00 (Migrated from github.com)
Review

Лишняя строка

Лишняя строка
biodranik commented 2022-12-11 12:26:27 +00:00 (Migrated from github.com)
Review

Зачем этот флаг? Можно ли без него?

Зачем этот флаг? Можно ли без него?
Review

В будущем, думаю, можно. Сейчас сделал так.
Если очень не нравится, могу удалить эту часть с сообщением об ошибке + ErrorScreen.
Но временные костыли в любом случае неизбежны.

В будущем, думаю, можно. Сейчас сделал так. Если очень не нравится, могу удалить эту часть с сообщением об ошибке + `ErrorScreen`. Но временные костыли в любом случае неизбежны.
@NonNull
Review

We can follow the same logic as for myPosition button?

e9056f11fb/android/src/app/organicmaps/MwmActivity.java (L650-L654)

LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.

We can follow the same logic as for myPosition button? https://github.com/organicmaps/organicmaps/blob/e9056f11fbc2cf3c41850701302bba305cbde95a/android/src/app/organicmaps/MwmActivity.java#L650-L654 LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.
Review

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в LocationHelper
Просто тремя строчками тут не обойтись
Из тех проблем, что я вижу сейчас:

  • Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка
  • Если местоположение отображается, то появляются проблемы с onScale. Всегда скейлится относительно местоположения, а не точки на экране
  • Плюс все равно надо реализовывать кнопку с разными иконками

Я считаю, это лучше сделать в отдельном PR

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в `LocationHelper` Просто тремя строчками тут не обойтись Из тех проблем, что я вижу сейчас: * Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка * Если местоположение отображается, то появляются проблемы с `onScale`. Всегда скейлится относительно местоположения, а не точки на экране * Плюс все равно надо реализовывать кнопку с разными иконками Я считаю, это лучше сделать в отдельном PR
biodranik commented 2022-12-08 21:16:48 +00:00 (Migrated from github.com)
Review
  1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему.
  2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему. 2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
biodranik commented 2022-12-11 12:25:58 +00:00 (Migrated from github.com)
Review

Лишняя строка

Лишняя строка
biodranik commented 2022-12-11 12:26:27 +00:00 (Migrated from github.com)
Review

Зачем этот флаг? Можно ли без него?

Зачем этот флаг? Можно ли без него?
Review

В будущем, думаю, можно. Сейчас сделал так.
Если очень не нравится, могу удалить эту часть с сообщением об ошибке + ErrorScreen.
Но временные костыли в любом случае неизбежны.

В будущем, думаю, можно. Сейчас сделал так. Если очень не нравится, могу удалить эту часть с сообщением об ошибке + `ErrorScreen`. Но временные костыли в любом случае неизбежны.
@Override
Review

We can follow the same logic as for myPosition button?

e9056f11fb/android/src/app/organicmaps/MwmActivity.java (L650-L654)

LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.

We can follow the same logic as for myPosition button? https://github.com/organicmaps/organicmaps/blob/e9056f11fbc2cf3c41850701302bba305cbde95a/android/src/app/organicmaps/MwmActivity.java#L650-L654 LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.
Review

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в LocationHelper
Просто тремя строчками тут не обойтись
Из тех проблем, что я вижу сейчас:

  • Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка
  • Если местоположение отображается, то появляются проблемы с onScale. Всегда скейлится относительно местоположения, а не точки на экране
  • Плюс все равно надо реализовывать кнопку с разными иконками

Я считаю, это лучше сделать в отдельном PR

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в `LocationHelper` Просто тремя строчками тут не обойтись Из тех проблем, что я вижу сейчас: * Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка * Если местоположение отображается, то появляются проблемы с `onScale`. Всегда скейлится относительно местоположения, а не точки на экране * Плюс все равно надо реализовывать кнопку с разными иконками Я считаю, это лучше сделать в отдельном PR
biodranik commented 2022-12-08 21:16:48 +00:00 (Migrated from github.com)
Review
  1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему.
  2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему. 2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
biodranik commented 2022-12-11 12:25:58 +00:00 (Migrated from github.com)
Review

Лишняя строка

Лишняя строка
biodranik commented 2022-12-11 12:26:27 +00:00 (Migrated from github.com)
Review

Зачем этот флаг? Можно ли без него?

Зачем этот флаг? Можно ли без него?
Review

В будущем, думаю, можно. Сейчас сделал так.
Если очень не нравится, могу удалить эту часть с сообщением об ошибке + ErrorScreen.
Но временные костыли в любом случае неизбежны.

В будущем, думаю, можно. Сейчас сделал так. Если очень не нравится, могу удалить эту часть с сообщением об ошибке + `ErrorScreen`. Но временные костыли в любом случае неизбежны.
public Screen onCreateScreen(@NonNull Intent intent)
Review

We can follow the same logic as for myPosition button?

e9056f11fb/android/src/app/organicmaps/MwmActivity.java (L650-L654)

LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.

We can follow the same logic as for myPosition button? https://github.com/organicmaps/organicmaps/blob/e9056f11fbc2cf3c41850701302bba305cbde95a/android/src/app/organicmaps/MwmActivity.java#L650-L654 LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.
Review

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в LocationHelper
Просто тремя строчками тут не обойтись
Из тех проблем, что я вижу сейчас:

  • Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка
  • Если местоположение отображается, то появляются проблемы с onScale. Всегда скейлится относительно местоположения, а не точки на экране
  • Плюс все равно надо реализовывать кнопку с разными иконками

Я считаю, это лучше сделать в отдельном PR

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в `LocationHelper` Просто тремя строчками тут не обойтись Из тех проблем, что я вижу сейчас: * Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка * Если местоположение отображается, то появляются проблемы с `onScale`. Всегда скейлится относительно местоположения, а не точки на экране * Плюс все равно надо реализовывать кнопку с разными иконками Я считаю, это лучше сделать в отдельном PR
biodranik commented 2022-12-08 21:16:48 +00:00 (Migrated from github.com)
Review
  1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему.
  2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему. 2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
biodranik commented 2022-12-11 12:25:58 +00:00 (Migrated from github.com)
Review

Лишняя строка

Лишняя строка
biodranik commented 2022-12-11 12:26:27 +00:00 (Migrated from github.com)
Review

Зачем этот флаг? Можно ли без него?

Зачем этот флаг? Можно ли без него?
Review

В будущем, думаю, можно. Сейчас сделал так.
Если очень не нравится, могу удалить эту часть с сообщением об ошибке + ErrorScreen.
Но временные костыли в любом случае неизбежны.

В будущем, думаю, можно. Сейчас сделал так. Если очень не нравится, могу удалить эту часть с сообщением об ошибке + `ErrorScreen`. Но временные костыли в любом случае неизбежны.
{
Review

We can follow the same logic as for myPosition button?

e9056f11fb/android/src/app/organicmaps/MwmActivity.java (L650-L654)

LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.

We can follow the same logic as for myPosition button? https://github.com/organicmaps/organicmaps/blob/e9056f11fbc2cf3c41850701302bba305cbde95a/android/src/app/organicmaps/MwmActivity.java#L650-L654 LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.
Review

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в LocationHelper
Просто тремя строчками тут не обойтись
Из тех проблем, что я вижу сейчас:

  • Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка
  • Если местоположение отображается, то появляются проблемы с onScale. Всегда скейлится относительно местоположения, а не точки на экране
  • Плюс все равно надо реализовывать кнопку с разными иконками

Я считаю, это лучше сделать в отдельном PR

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в `LocationHelper` Просто тремя строчками тут не обойтись Из тех проблем, что я вижу сейчас: * Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка * Если местоположение отображается, то появляются проблемы с `onScale`. Всегда скейлится относительно местоположения, а не точки на экране * Плюс все равно надо реализовывать кнопку с разными иконками Я считаю, это лучше сделать в отдельном PR
biodranik commented 2022-12-08 21:16:48 +00:00 (Migrated from github.com)
Review
  1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему.
  2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему. 2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
biodranik commented 2022-12-11 12:25:58 +00:00 (Migrated from github.com)
Review

Лишняя строка

Лишняя строка
biodranik commented 2022-12-11 12:26:27 +00:00 (Migrated from github.com)
Review

Зачем этот флаг? Можно ли без него?

Зачем этот флаг? Можно ли без него?
Review

В будущем, думаю, можно. Сейчас сделал так.
Если очень не нравится, могу удалить эту часть с сообщением об ошибке + ErrorScreen.
Но временные костыли в любом случае неизбежны.

В будущем, думаю, можно. Сейчас сделал так. Если очень не нравится, могу удалить эту часть с сообщением об ошибке + `ErrorScreen`. Но временные костыли в любом случае неизбежны.
Log.d(TAG, "onCreateScreen()");
Review

We can follow the same logic as for myPosition button?

e9056f11fb/android/src/app/organicmaps/MwmActivity.java (L650-L654)

LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.

We can follow the same logic as for myPosition button? https://github.com/organicmaps/organicmaps/blob/e9056f11fbc2cf3c41850701302bba305cbde95a/android/src/app/organicmaps/MwmActivity.java#L650-L654 LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.
Review

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в LocationHelper
Просто тремя строчками тут не обойтись
Из тех проблем, что я вижу сейчас:

  • Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка
  • Если местоположение отображается, то появляются проблемы с onScale. Всегда скейлится относительно местоположения, а не точки на экране
  • Плюс все равно надо реализовывать кнопку с разными иконками

Я считаю, это лучше сделать в отдельном PR

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в `LocationHelper` Просто тремя строчками тут не обойтись Из тех проблем, что я вижу сейчас: * Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка * Если местоположение отображается, то появляются проблемы с `onScale`. Всегда скейлится относительно местоположения, а не точки на экране * Плюс все равно надо реализовывать кнопку с разными иконками Я считаю, это лучше сделать в отдельном PR
biodranik commented 2022-12-08 21:16:48 +00:00 (Migrated from github.com)
Review
  1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему.
  2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему. 2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
biodranik commented 2022-12-11 12:25:58 +00:00 (Migrated from github.com)
Review

Лишняя строка

Лишняя строка
biodranik commented 2022-12-11 12:26:27 +00:00 (Migrated from github.com)
Review

Зачем этот флаг? Можно ли без него?

Зачем этот флаг? Можно ли без него?
Review

В будущем, думаю, можно. Сейчас сделал так.
Если очень не нравится, могу удалить эту часть с сообщением об ошибке + ErrorScreen.
Но временные костыли в любом случае неизбежны.

В будущем, думаю, можно. Сейчас сделал так. Если очень не нравится, могу удалить эту часть с сообщением об ошибке + `ErrorScreen`. Но временные костыли в любом случае неизбежны.
if (mInitFailed)
Review

We can follow the same logic as for myPosition button?

e9056f11fb/android/src/app/organicmaps/MwmActivity.java (L650-L654)

LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.

We can follow the same logic as for myPosition button? https://github.com/organicmaps/organicmaps/blob/e9056f11fbc2cf3c41850701302bba305cbde95a/android/src/app/organicmaps/MwmActivity.java#L650-L654 LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.
Review

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в LocationHelper
Просто тремя строчками тут не обойтись
Из тех проблем, что я вижу сейчас:

  • Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка
  • Если местоположение отображается, то появляются проблемы с onScale. Всегда скейлится относительно местоположения, а не точки на экране
  • Плюс все равно надо реализовывать кнопку с разными иконками

Я считаю, это лучше сделать в отдельном PR

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в `LocationHelper` Просто тремя строчками тут не обойтись Из тех проблем, что я вижу сейчас: * Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка * Если местоположение отображается, то появляются проблемы с `onScale`. Всегда скейлится относительно местоположения, а не точки на экране * Плюс все равно надо реализовывать кнопку с разными иконками Я считаю, это лучше сделать в отдельном PR
biodranik commented 2022-12-08 21:16:48 +00:00 (Migrated from github.com)
Review
  1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему.
  2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему. 2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
biodranik commented 2022-12-11 12:25:58 +00:00 (Migrated from github.com)
Review

Лишняя строка

Лишняя строка
biodranik commented 2022-12-11 12:26:27 +00:00 (Migrated from github.com)
Review

Зачем этот флаг? Можно ли без него?

Зачем этот флаг? Можно ли без него?
Review

В будущем, думаю, можно. Сейчас сделал так.
Если очень не нравится, могу удалить эту часть с сообщением об ошибке + ErrorScreen.
Но временные костыли в любом случае неизбежны.

В будущем, думаю, можно. Сейчас сделал так. Если очень не нравится, могу удалить эту часть с сообщением об ошибке + `ErrorScreen`. Но временные костыли в любом случае неизбежны.
Review

Do you plan to show any error messages on car screen in the future?

Do you plan to show any error messages on car screen in the future?
Review

Да. Надо поработать над ErrorScreen. Возможно вообще сделать какой-то общий экран для отображения всех сообщений. Например, ошибка инициализации (как здесь), запрос permisiions и т.д.

Да. Надо поработать над `ErrorScreen`. Возможно вообще сделать какой-то общий экран для отображения всех сообщений. Например, ошибка инициализации (как здесь), запрос permisiions и т.д.
return new ErrorScreen(getCarContext());
Review

We can follow the same logic as for myPosition button?

e9056f11fb/android/src/app/organicmaps/MwmActivity.java (L650-L654)

LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.

We can follow the same logic as for myPosition button? https://github.com/organicmaps/organicmaps/blob/e9056f11fbc2cf3c41850701302bba305cbde95a/android/src/app/organicmaps/MwmActivity.java#L650-L654 LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.
Review

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в LocationHelper
Просто тремя строчками тут не обойтись
Из тех проблем, что я вижу сейчас:

  • Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка
  • Если местоположение отображается, то появляются проблемы с onScale. Всегда скейлится относительно местоположения, а не точки на экране
  • Плюс все равно надо реализовывать кнопку с разными иконками

Я считаю, это лучше сделать в отдельном PR

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в `LocationHelper` Просто тремя строчками тут не обойтись Из тех проблем, что я вижу сейчас: * Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка * Если местоположение отображается, то появляются проблемы с `onScale`. Всегда скейлится относительно местоположения, а не точки на экране * Плюс все равно надо реализовывать кнопку с разными иконками Я считаю, это лучше сделать в отдельном PR
biodranik commented 2022-12-08 21:16:48 +00:00 (Migrated from github.com)
Review
  1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему.
  2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему. 2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
biodranik commented 2022-12-11 12:25:58 +00:00 (Migrated from github.com)
Review

Лишняя строка

Лишняя строка
biodranik commented 2022-12-11 12:26:27 +00:00 (Migrated from github.com)
Review

Зачем этот флаг? Можно ли без него?

Зачем этот флаг? Можно ли без него?
Review

В будущем, думаю, можно. Сейчас сделал так.
Если очень не нравится, могу удалить эту часть с сообщением об ошибке + ErrorScreen.
Но временные костыли в любом случае неизбежны.

В будущем, думаю, можно. Сейчас сделал так. Если очень не нравится, могу удалить эту часть с сообщением об ошибке + `ErrorScreen`. Но временные костыли в любом случае неизбежны.
Review

We can follow the same logic as for myPosition button?

e9056f11fb/android/src/app/organicmaps/MwmActivity.java (L650-L654)

LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.

We can follow the same logic as for myPosition button? https://github.com/organicmaps/organicmaps/blob/e9056f11fbc2cf3c41850701302bba305cbde95a/android/src/app/organicmaps/MwmActivity.java#L650-L654 LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.
Review

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в LocationHelper
Просто тремя строчками тут не обойтись
Из тех проблем, что я вижу сейчас:

  • Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка
  • Если местоположение отображается, то появляются проблемы с onScale. Всегда скейлится относительно местоположения, а не точки на экране
  • Плюс все равно надо реализовывать кнопку с разными иконками

Я считаю, это лучше сделать в отдельном PR

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в `LocationHelper` Просто тремя строчками тут не обойтись Из тех проблем, что я вижу сейчас: * Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка * Если местоположение отображается, то появляются проблемы с `onScale`. Всегда скейлится относительно местоположения, а не точки на экране * Плюс все равно надо реализовывать кнопку с разными иконками Я считаю, это лучше сделать в отдельном PR
biodranik commented 2022-12-08 21:16:48 +00:00 (Migrated from github.com)
Review
  1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему.
  2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему. 2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
biodranik commented 2022-12-11 12:25:58 +00:00 (Migrated from github.com)
Review

Лишняя строка

Лишняя строка
biodranik commented 2022-12-11 12:26:27 +00:00 (Migrated from github.com)
Review

Зачем этот флаг? Можно ли без него?

Зачем этот флаг? Можно ли без него?
Review

В будущем, думаю, можно. Сейчас сделал так.
Если очень не нравится, могу удалить эту часть с сообщением об ошибке + ErrorScreen.
Но временные костыли в любом случае неизбежны.

В будущем, думаю, можно. Сейчас сделал так. Если очень не нравится, могу удалить эту часть с сообщением об ошибке + `ErrorScreen`. Но временные костыли в любом случае неизбежны.
return new NavigationScreen(getCarContext(), mSurfaceRenderer);
Review

We can follow the same logic as for myPosition button?

e9056f11fb/android/src/app/organicmaps/MwmActivity.java (L650-L654)

LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.

We can follow the same logic as for myPosition button? https://github.com/organicmaps/organicmaps/blob/e9056f11fbc2cf3c41850701302bba305cbde95a/android/src/app/organicmaps/MwmActivity.java#L650-L654 LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.
Review

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в LocationHelper
Просто тремя строчками тут не обойтись
Из тех проблем, что я вижу сейчас:

  • Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка
  • Если местоположение отображается, то появляются проблемы с onScale. Всегда скейлится относительно местоположения, а не точки на экране
  • Плюс все равно надо реализовывать кнопку с разными иконками

Я считаю, это лучше сделать в отдельном PR

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в `LocationHelper` Просто тремя строчками тут не обойтись Из тех проблем, что я вижу сейчас: * Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка * Если местоположение отображается, то появляются проблемы с `onScale`. Всегда скейлится относительно местоположения, а не точки на экране * Плюс все равно надо реализовывать кнопку с разными иконками Я считаю, это лучше сделать в отдельном PR
biodranik commented 2022-12-08 21:16:48 +00:00 (Migrated from github.com)
Review
  1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему.
  2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему. 2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
biodranik commented 2022-12-11 12:25:58 +00:00 (Migrated from github.com)
Review

Лишняя строка

Лишняя строка
biodranik commented 2022-12-11 12:26:27 +00:00 (Migrated from github.com)
Review

Зачем этот флаг? Можно ли без него?

Зачем этот флаг? Можно ли без него?
Review

В будущем, думаю, можно. Сейчас сделал так.
Если очень не нравится, могу удалить эту часть с сообщением об ошибке + ErrorScreen.
Но временные костыли в любом случае неизбежны.

В будущем, думаю, можно. Сейчас сделал так. Если очень не нравится, могу удалить эту часть с сообщением об ошибке + `ErrorScreen`. Но временные костыли в любом случае неизбежны.
}
Review

We can follow the same logic as for myPosition button?

e9056f11fb/android/src/app/organicmaps/MwmActivity.java (L650-L654)

LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.

We can follow the same logic as for myPosition button? https://github.com/organicmaps/organicmaps/blob/e9056f11fbc2cf3c41850701302bba305cbde95a/android/src/app/organicmaps/MwmActivity.java#L650-L654 LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.
Review

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в LocationHelper
Просто тремя строчками тут не обойтись
Из тех проблем, что я вижу сейчас:

  • Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка
  • Если местоположение отображается, то появляются проблемы с onScale. Всегда скейлится относительно местоположения, а не точки на экране
  • Плюс все равно надо реализовывать кнопку с разными иконками

Я считаю, это лучше сделать в отдельном PR

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в `LocationHelper` Просто тремя строчками тут не обойтись Из тех проблем, что я вижу сейчас: * Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка * Если местоположение отображается, то появляются проблемы с `onScale`. Всегда скейлится относительно местоположения, а не точки на экране * Плюс все равно надо реализовывать кнопку с разными иконками Я считаю, это лучше сделать в отдельном PR
biodranik commented 2022-12-08 21:16:48 +00:00 (Migrated from github.com)
Review
  1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему.
  2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему. 2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
biodranik commented 2022-12-11 12:25:58 +00:00 (Migrated from github.com)
Review

Лишняя строка

Лишняя строка
biodranik commented 2022-12-11 12:26:27 +00:00 (Migrated from github.com)
Review

Зачем этот флаг? Можно ли без него?

Зачем этот флаг? Можно ли без него?
Review

В будущем, думаю, можно. Сейчас сделал так.
Если очень не нравится, могу удалить эту часть с сообщением об ошибке + ErrorScreen.
Но временные костыли в любом случае неизбежны.

В будущем, думаю, можно. Сейчас сделал так. Если очень не нравится, могу удалить эту часть с сообщением об ошибке + `ErrorScreen`. Но временные костыли в любом случае неизбежны.
Review

We can follow the same logic as for myPosition button?

e9056f11fb/android/src/app/organicmaps/MwmActivity.java (L650-L654)

LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.

We can follow the same logic as for myPosition button? https://github.com/organicmaps/organicmaps/blob/e9056f11fbc2cf3c41850701302bba305cbde95a/android/src/app/organicmaps/MwmActivity.java#L650-L654 LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.
Review

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в LocationHelper
Просто тремя строчками тут не обойтись
Из тех проблем, что я вижу сейчас:

  • Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка
  • Если местоположение отображается, то появляются проблемы с onScale. Всегда скейлится относительно местоположения, а не точки на экране
  • Плюс все равно надо реализовывать кнопку с разными иконками

Я считаю, это лучше сделать в отдельном PR

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в `LocationHelper` Просто тремя строчками тут не обойтись Из тех проблем, что я вижу сейчас: * Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка * Если местоположение отображается, то появляются проблемы с `onScale`. Всегда скейлится относительно местоположения, а не точки на экране * Плюс все равно надо реализовывать кнопку с разными иконками Я считаю, это лучше сделать в отдельном PR
biodranik commented 2022-12-08 21:16:48 +00:00 (Migrated from github.com)
Review
  1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему.
  2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему. 2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
biodranik commented 2022-12-11 12:25:58 +00:00 (Migrated from github.com)
Review

Лишняя строка

Лишняя строка
biodranik commented 2022-12-11 12:26:27 +00:00 (Migrated from github.com)
Review

Зачем этот флаг? Можно ли без него?

Зачем этот флаг? Можно ли без него?
Review

В будущем, думаю, можно. Сейчас сделал так.
Если очень не нравится, могу удалить эту часть с сообщением об ошибке + ErrorScreen.
Но временные костыли в любом случае неизбежны.

В будущем, думаю, можно. Сейчас сделал так. Если очень не нравится, могу удалить эту часть с сообщением об ошибке + `ErrorScreen`. Но временные костыли в любом случае неизбежны.
@Override
Review

We can follow the same logic as for myPosition button?

e9056f11fb/android/src/app/organicmaps/MwmActivity.java (L650-L654)

LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.

We can follow the same logic as for myPosition button? https://github.com/organicmaps/organicmaps/blob/e9056f11fbc2cf3c41850701302bba305cbde95a/android/src/app/organicmaps/MwmActivity.java#L650-L654 LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.
Review

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в LocationHelper
Просто тремя строчками тут не обойтись
Из тех проблем, что я вижу сейчас:

  • Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка
  • Если местоположение отображается, то появляются проблемы с onScale. Всегда скейлится относительно местоположения, а не точки на экране
  • Плюс все равно надо реализовывать кнопку с разными иконками

Я считаю, это лучше сделать в отдельном PR

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в `LocationHelper` Просто тремя строчками тут не обойтись Из тех проблем, что я вижу сейчас: * Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка * Если местоположение отображается, то появляются проблемы с `onScale`. Всегда скейлится относительно местоположения, а не точки на экране * Плюс все равно надо реализовывать кнопку с разными иконками Я считаю, это лучше сделать в отдельном PR
biodranik commented 2022-12-08 21:16:48 +00:00 (Migrated from github.com)
Review
  1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему.
  2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему. 2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
biodranik commented 2022-12-11 12:25:58 +00:00 (Migrated from github.com)
Review

Лишняя строка

Лишняя строка
biodranik commented 2022-12-11 12:26:27 +00:00 (Migrated from github.com)
Review

Зачем этот флаг? Можно ли без него?

Зачем этот флаг? Можно ли без него?
Review

В будущем, думаю, можно. Сейчас сделал так.
Если очень не нравится, могу удалить эту часть с сообщением об ошибке + ErrorScreen.
Но временные костыли в любом случае неизбежны.

В будущем, думаю, можно. Сейчас сделал так. Если очень не нравится, могу удалить эту часть с сообщением об ошибке + `ErrorScreen`. Но временные костыли в любом случае неизбежны.
public void onCreate(@NonNull LifecycleOwner owner)
Review

We can follow the same logic as for myPosition button?

e9056f11fb/android/src/app/organicmaps/MwmActivity.java (L650-L654)

LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.

We can follow the same logic as for myPosition button? https://github.com/organicmaps/organicmaps/blob/e9056f11fbc2cf3c41850701302bba305cbde95a/android/src/app/organicmaps/MwmActivity.java#L650-L654 LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.
Review

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в LocationHelper
Просто тремя строчками тут не обойтись
Из тех проблем, что я вижу сейчас:

  • Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка
  • Если местоположение отображается, то появляются проблемы с onScale. Всегда скейлится относительно местоположения, а не точки на экране
  • Плюс все равно надо реализовывать кнопку с разными иконками

Я считаю, это лучше сделать в отдельном PR

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в `LocationHelper` Просто тремя строчками тут не обойтись Из тех проблем, что я вижу сейчас: * Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка * Если местоположение отображается, то появляются проблемы с `onScale`. Всегда скейлится относительно местоположения, а не точки на экране * Плюс все равно надо реализовывать кнопку с разными иконками Я считаю, это лучше сделать в отдельном PR
biodranik commented 2022-12-08 21:16:48 +00:00 (Migrated from github.com)
Review
  1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему.
  2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему. 2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
biodranik commented 2022-12-11 12:25:58 +00:00 (Migrated from github.com)
Review

Лишняя строка

Лишняя строка
biodranik commented 2022-12-11 12:26:27 +00:00 (Migrated from github.com)
Review

Зачем этот флаг? Можно ли без него?

Зачем этот флаг? Можно ли без него?
Review

В будущем, думаю, можно. Сейчас сделал так.
Если очень не нравится, могу удалить эту часть с сообщением об ошибке + ErrorScreen.
Но временные костыли в любом случае неизбежны.

В будущем, думаю, можно. Сейчас сделал так. Если очень не нравится, могу удалить эту часть с сообщением об ошибке + `ErrorScreen`. Но временные костыли в любом случае неизбежны.
{
Review

We can follow the same logic as for myPosition button?

e9056f11fb/android/src/app/organicmaps/MwmActivity.java (L650-L654)

LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.

We can follow the same logic as for myPosition button? https://github.com/organicmaps/organicmaps/blob/e9056f11fbc2cf3c41850701302bba305cbde95a/android/src/app/organicmaps/MwmActivity.java#L650-L654 LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.
Review

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в LocationHelper
Просто тремя строчками тут не обойтись
Из тех проблем, что я вижу сейчас:

  • Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка
  • Если местоположение отображается, то появляются проблемы с onScale. Всегда скейлится относительно местоположения, а не точки на экране
  • Плюс все равно надо реализовывать кнопку с разными иконками

Я считаю, это лучше сделать в отдельном PR

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в `LocationHelper` Просто тремя строчками тут не обойтись Из тех проблем, что я вижу сейчас: * Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка * Если местоположение отображается, то появляются проблемы с `onScale`. Всегда скейлится относительно местоположения, а не точки на экране * Плюс все равно надо реализовывать кнопку с разными иконками Я считаю, это лучше сделать в отдельном PR
biodranik commented 2022-12-08 21:16:48 +00:00 (Migrated from github.com)
Review
  1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему.
  2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему. 2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
biodranik commented 2022-12-11 12:25:58 +00:00 (Migrated from github.com)
Review

Лишняя строка

Лишняя строка
biodranik commented 2022-12-11 12:26:27 +00:00 (Migrated from github.com)
Review

Зачем этот флаг? Можно ли без него?

Зачем этот флаг? Можно ли без него?
Review

В будущем, думаю, можно. Сейчас сделал так.
Если очень не нравится, могу удалить эту часть с сообщением об ошибке + ErrorScreen.
Но временные костыли в любом случае неизбежны.

В будущем, думаю, можно. Сейчас сделал так. Если очень не нравится, могу удалить эту часть с сообщением об ошибке + `ErrorScreen`. Но временные костыли в любом случае неизбежны.
Log.d(TAG, "onCreate()");
Review

We can follow the same logic as for myPosition button?

e9056f11fb/android/src/app/organicmaps/MwmActivity.java (L650-L654)

LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.

We can follow the same logic as for myPosition button? https://github.com/organicmaps/organicmaps/blob/e9056f11fbc2cf3c41850701302bba305cbde95a/android/src/app/organicmaps/MwmActivity.java#L650-L654 LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.
Review

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в LocationHelper
Просто тремя строчками тут не обойтись
Из тех проблем, что я вижу сейчас:

  • Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка
  • Если местоположение отображается, то появляются проблемы с onScale. Всегда скейлится относительно местоположения, а не точки на экране
  • Плюс все равно надо реализовывать кнопку с разными иконками

Я считаю, это лучше сделать в отдельном PR

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в `LocationHelper` Просто тремя строчками тут не обойтись Из тех проблем, что я вижу сейчас: * Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка * Если местоположение отображается, то появляются проблемы с `onScale`. Всегда скейлится относительно местоположения, а не точки на экране * Плюс все равно надо реализовывать кнопку с разными иконками Я считаю, это лучше сделать в отдельном PR
biodranik commented 2022-12-08 21:16:48 +00:00 (Migrated from github.com)
Review
  1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему.
  2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему. 2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
biodranik commented 2022-12-11 12:25:58 +00:00 (Migrated from github.com)
Review

Лишняя строка

Лишняя строка
biodranik commented 2022-12-11 12:26:27 +00:00 (Migrated from github.com)
Review

Зачем этот флаг? Можно ли без него?

Зачем этот флаг? Можно ли без него?
Review

В будущем, думаю, можно. Сейчас сделал так.
Если очень не нравится, могу удалить эту часть с сообщением об ошибке + ErrorScreen.
Но временные костыли в любом случае неизбежны.

В будущем, думаю, можно. Сейчас сделал так. Если очень не нравится, могу удалить эту часть с сообщением об ошибке + `ErrorScreen`. Но временные костыли в любом случае неизбежны.
init();
Review

We can follow the same logic as for myPosition button?

e9056f11fb/android/src/app/organicmaps/MwmActivity.java (L650-L654)

LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.

We can follow the same logic as for myPosition button? https://github.com/organicmaps/organicmaps/blob/e9056f11fbc2cf3c41850701302bba305cbde95a/android/src/app/organicmaps/MwmActivity.java#L650-L654 LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.
Review

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в LocationHelper
Просто тремя строчками тут не обойтись
Из тех проблем, что я вижу сейчас:

  • Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка
  • Если местоположение отображается, то появляются проблемы с onScale. Всегда скейлится относительно местоположения, а не точки на экране
  • Плюс все равно надо реализовывать кнопку с разными иконками

Я считаю, это лучше сделать в отдельном PR

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в `LocationHelper` Просто тремя строчками тут не обойтись Из тех проблем, что я вижу сейчас: * Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка * Если местоположение отображается, то появляются проблемы с `onScale`. Всегда скейлится относительно местоположения, а не точки на экране * Плюс все равно надо реализовывать кнопку с разными иконками Я считаю, это лучше сделать в отдельном PR
biodranik commented 2022-12-08 21:16:48 +00:00 (Migrated from github.com)
Review
  1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему.
  2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему. 2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
biodranik commented 2022-12-11 12:25:58 +00:00 (Migrated from github.com)
Review

Лишняя строка

Лишняя строка
biodranik commented 2022-12-11 12:26:27 +00:00 (Migrated from github.com)
Review

Зачем этот флаг? Можно ли без него?

Зачем этот флаг? Можно ли без него?
Review

В будущем, думаю, можно. Сейчас сделал так.
Если очень не нравится, могу удалить эту часть с сообщением об ошибке + ErrorScreen.
Но временные костыли в любом случае неизбежны.

В будущем, думаю, можно. Сейчас сделал так. Если очень не нравится, могу удалить эту часть с сообщением об ошибке + `ErrorScreen`. Но временные костыли в любом случае неизбежны.
}
Review

We can follow the same logic as for myPosition button?

e9056f11fb/android/src/app/organicmaps/MwmActivity.java (L650-L654)

LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.

We can follow the same logic as for myPosition button? https://github.com/organicmaps/organicmaps/blob/e9056f11fbc2cf3c41850701302bba305cbde95a/android/src/app/organicmaps/MwmActivity.java#L650-L654 LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.
Review

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в LocationHelper
Просто тремя строчками тут не обойтись
Из тех проблем, что я вижу сейчас:

  • Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка
  • Если местоположение отображается, то появляются проблемы с onScale. Всегда скейлится относительно местоположения, а не точки на экране
  • Плюс все равно надо реализовывать кнопку с разными иконками

Я считаю, это лучше сделать в отдельном PR

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в `LocationHelper` Просто тремя строчками тут не обойтись Из тех проблем, что я вижу сейчас: * Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка * Если местоположение отображается, то появляются проблемы с `onScale`. Всегда скейлится относительно местоположения, а не точки на экране * Плюс все равно надо реализовывать кнопку с разными иконками Я считаю, это лучше сделать в отдельном PR
biodranik commented 2022-12-08 21:16:48 +00:00 (Migrated from github.com)
Review
  1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему.
  2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему. 2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
biodranik commented 2022-12-11 12:25:58 +00:00 (Migrated from github.com)
Review

Лишняя строка

Лишняя строка
biodranik commented 2022-12-11 12:26:27 +00:00 (Migrated from github.com)
Review

Зачем этот флаг? Можно ли без него?

Зачем этот флаг? Можно ли без него?
Review

В будущем, думаю, можно. Сейчас сделал так.
Если очень не нравится, могу удалить эту часть с сообщением об ошибке + ErrorScreen.
Но временные костыли в любом случае неизбежны.

В будущем, думаю, можно. Сейчас сделал так. Если очень не нравится, могу удалить эту часть с сообщением об ошибке + `ErrorScreen`. Но временные костыли в любом случае неизбежны.
Review

We can follow the same logic as for myPosition button?

e9056f11fb/android/src/app/organicmaps/MwmActivity.java (L650-L654)

LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.

We can follow the same logic as for myPosition button? https://github.com/organicmaps/organicmaps/blob/e9056f11fbc2cf3c41850701302bba305cbde95a/android/src/app/organicmaps/MwmActivity.java#L650-L654 LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.
Review

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в LocationHelper
Просто тремя строчками тут не обойтись
Из тех проблем, что я вижу сейчас:

  • Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка
  • Если местоположение отображается, то появляются проблемы с onScale. Всегда скейлится относительно местоположения, а не точки на экране
  • Плюс все равно надо реализовывать кнопку с разными иконками

Я считаю, это лучше сделать в отдельном PR

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в `LocationHelper` Просто тремя строчками тут не обойтись Из тех проблем, что я вижу сейчас: * Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка * Если местоположение отображается, то появляются проблемы с `onScale`. Всегда скейлится относительно местоположения, а не точки на экране * Плюс все равно надо реализовывать кнопку с разными иконками Я считаю, это лучше сделать в отдельном PR
biodranik commented 2022-12-08 21:16:48 +00:00 (Migrated from github.com)
Review
  1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему.
  2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему. 2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
biodranik commented 2022-12-11 12:25:58 +00:00 (Migrated from github.com)
Review

Лишняя строка

Лишняя строка
biodranik commented 2022-12-11 12:26:27 +00:00 (Migrated from github.com)
Review

Зачем этот флаг? Можно ли без него?

Зачем этот флаг? Можно ли без него?
Review

В будущем, думаю, можно. Сейчас сделал так.
Если очень не нравится, могу удалить эту часть с сообщением об ошибке + ErrorScreen.
Но временные костыли в любом случае неизбежны.

В будущем, думаю, можно. Сейчас сделал так. Если очень не нравится, могу удалить эту часть с сообщением об ошибке + `ErrorScreen`. Но временные костыли в любом случае неизбежны.
@Override
Review

We can follow the same logic as for myPosition button?

e9056f11fb/android/src/app/organicmaps/MwmActivity.java (L650-L654)

LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.

We can follow the same logic as for myPosition button? https://github.com/organicmaps/organicmaps/blob/e9056f11fbc2cf3c41850701302bba305cbde95a/android/src/app/organicmaps/MwmActivity.java#L650-L654 LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.
Review

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в LocationHelper
Просто тремя строчками тут не обойтись
Из тех проблем, что я вижу сейчас:

  • Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка
  • Если местоположение отображается, то появляются проблемы с onScale. Всегда скейлится относительно местоположения, а не точки на экране
  • Плюс все равно надо реализовывать кнопку с разными иконками

Я считаю, это лучше сделать в отдельном PR

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в `LocationHelper` Просто тремя строчками тут не обойтись Из тех проблем, что я вижу сейчас: * Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка * Если местоположение отображается, то появляются проблемы с `onScale`. Всегда скейлится относительно местоположения, а не точки на экране * Плюс все равно надо реализовывать кнопку с разными иконками Я считаю, это лучше сделать в отдельном PR
biodranik commented 2022-12-08 21:16:48 +00:00 (Migrated from github.com)
Review
  1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему.
  2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему. 2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
biodranik commented 2022-12-11 12:25:58 +00:00 (Migrated from github.com)
Review

Лишняя строка

Лишняя строка
biodranik commented 2022-12-11 12:26:27 +00:00 (Migrated from github.com)
Review

Зачем этот флаг? Можно ли без него?

Зачем этот флаг? Можно ли без него?
Review

В будущем, думаю, можно. Сейчас сделал так.
Если очень не нравится, могу удалить эту часть с сообщением об ошибке + ErrorScreen.
Но временные костыли в любом случае неизбежны.

В будущем, думаю, можно. Сейчас сделал так. Если очень не нравится, могу удалить эту часть с сообщением об ошибке + `ErrorScreen`. Но временные костыли в любом случае неизбежны.
public void onResume(@NonNull LifecycleOwner owner)
Review

We can follow the same logic as for myPosition button?

e9056f11fb/android/src/app/organicmaps/MwmActivity.java (L650-L654)

LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.

We can follow the same logic as for myPosition button? https://github.com/organicmaps/organicmaps/blob/e9056f11fbc2cf3c41850701302bba305cbde95a/android/src/app/organicmaps/MwmActivity.java#L650-L654 LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.
Review

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в LocationHelper
Просто тремя строчками тут не обойтись
Из тех проблем, что я вижу сейчас:

  • Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка
  • Если местоположение отображается, то появляются проблемы с onScale. Всегда скейлится относительно местоположения, а не точки на экране
  • Плюс все равно надо реализовывать кнопку с разными иконками

Я считаю, это лучше сделать в отдельном PR

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в `LocationHelper` Просто тремя строчками тут не обойтись Из тех проблем, что я вижу сейчас: * Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка * Если местоположение отображается, то появляются проблемы с `onScale`. Всегда скейлится относительно местоположения, а не точки на экране * Плюс все равно надо реализовывать кнопку с разными иконками Я считаю, это лучше сделать в отдельном PR
biodranik commented 2022-12-08 21:16:48 +00:00 (Migrated from github.com)
Review
  1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему.
  2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему. 2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
biodranik commented 2022-12-11 12:25:58 +00:00 (Migrated from github.com)
Review

Лишняя строка

Лишняя строка
biodranik commented 2022-12-11 12:26:27 +00:00 (Migrated from github.com)
Review

Зачем этот флаг? Можно ли без него?

Зачем этот флаг? Можно ли без него?
Review

В будущем, думаю, можно. Сейчас сделал так.
Если очень не нравится, могу удалить эту часть с сообщением об ошибке + ErrorScreen.
Но временные костыли в любом случае неизбежны.

В будущем, думаю, можно. Сейчас сделал так. Если очень не нравится, могу удалить эту часть с сообщением об ошибке + `ErrorScreen`. Но временные костыли в любом случае неизбежны.
{
Review

We can follow the same logic as for myPosition button?

e9056f11fb/android/src/app/organicmaps/MwmActivity.java (L650-L654)

LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.

We can follow the same logic as for myPosition button? https://github.com/organicmaps/organicmaps/blob/e9056f11fbc2cf3c41850701302bba305cbde95a/android/src/app/organicmaps/MwmActivity.java#L650-L654 LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.
Review

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в LocationHelper
Просто тремя строчками тут не обойтись
Из тех проблем, что я вижу сейчас:

  • Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка
  • Если местоположение отображается, то появляются проблемы с onScale. Всегда скейлится относительно местоположения, а не точки на экране
  • Плюс все равно надо реализовывать кнопку с разными иконками

Я считаю, это лучше сделать в отдельном PR

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в `LocationHelper` Просто тремя строчками тут не обойтись Из тех проблем, что я вижу сейчас: * Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка * Если местоположение отображается, то появляются проблемы с `onScale`. Всегда скейлится относительно местоположения, а не точки на экране * Плюс все равно надо реализовывать кнопку с разными иконками Я считаю, это лучше сделать в отдельном PR
biodranik commented 2022-12-08 21:16:48 +00:00 (Migrated from github.com)
Review
  1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему.
  2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему. 2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
biodranik commented 2022-12-11 12:25:58 +00:00 (Migrated from github.com)
Review

Лишняя строка

Лишняя строка
biodranik commented 2022-12-11 12:26:27 +00:00 (Migrated from github.com)
Review

Зачем этот флаг? Можно ли без него?

Зачем этот флаг? Можно ли без него?
Review

В будущем, думаю, можно. Сейчас сделал так.
Если очень не нравится, могу удалить эту часть с сообщением об ошибке + ErrorScreen.
Но временные костыли в любом случае неизбежны.

В будущем, думаю, можно. Сейчас сделал так. Если очень не нравится, могу удалить эту часть с сообщением об ошибке + `ErrorScreen`. Но временные костыли в любом случае неизбежны.
Log.d(TAG, "onResume()");
Review

We can follow the same logic as for myPosition button?

e9056f11fb/android/src/app/organicmaps/MwmActivity.java (L650-L654)

LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.

We can follow the same logic as for myPosition button? https://github.com/organicmaps/organicmaps/blob/e9056f11fbc2cf3c41850701302bba305cbde95a/android/src/app/organicmaps/MwmActivity.java#L650-L654 LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.
Review

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в LocationHelper
Просто тремя строчками тут не обойтись
Из тех проблем, что я вижу сейчас:

  • Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка
  • Если местоположение отображается, то появляются проблемы с onScale. Всегда скейлится относительно местоположения, а не точки на экране
  • Плюс все равно надо реализовывать кнопку с разными иконками

Я считаю, это лучше сделать в отдельном PR

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в `LocationHelper` Просто тремя строчками тут не обойтись Из тех проблем, что я вижу сейчас: * Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка * Если местоположение отображается, то появляются проблемы с `onScale`. Всегда скейлится относительно местоположения, а не точки на экране * Плюс все равно надо реализовывать кнопку с разными иконками Я считаю, это лучше сделать в отдельном PR
biodranik commented 2022-12-08 21:16:48 +00:00 (Migrated from github.com)
Review
  1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему.
  2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему. 2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
biodranik commented 2022-12-11 12:25:58 +00:00 (Migrated from github.com)
Review

Лишняя строка

Лишняя строка
biodranik commented 2022-12-11 12:26:27 +00:00 (Migrated from github.com)
Review

Зачем этот флаг? Можно ли без него?

Зачем этот флаг? Можно ли без него?
Review

В будущем, думаю, можно. Сейчас сделал так.
Если очень не нравится, могу удалить эту часть с сообщением об ошибке + ErrorScreen.
Но временные костыли в любом случае неизбежны.

В будущем, думаю, можно. Сейчас сделал так. Если очень не нравится, могу удалить эту часть с сообщением об ошибке + `ErrorScreen`. Но временные костыли в любом случае неизбежны.
init();
Review

We can follow the same logic as for myPosition button?

e9056f11fb/android/src/app/organicmaps/MwmActivity.java (L650-L654)

LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.

We can follow the same logic as for myPosition button? https://github.com/organicmaps/organicmaps/blob/e9056f11fbc2cf3c41850701302bba305cbde95a/android/src/app/organicmaps/MwmActivity.java#L650-L654 LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.
Review

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в LocationHelper
Просто тремя строчками тут не обойтись
Из тех проблем, что я вижу сейчас:

  • Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка
  • Если местоположение отображается, то появляются проблемы с onScale. Всегда скейлится относительно местоположения, а не точки на экране
  • Плюс все равно надо реализовывать кнопку с разными иконками

Я считаю, это лучше сделать в отдельном PR

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в `LocationHelper` Просто тремя строчками тут не обойтись Из тех проблем, что я вижу сейчас: * Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка * Если местоположение отображается, то появляются проблемы с `onScale`. Всегда скейлится относительно местоположения, а не точки на экране * Плюс все равно надо реализовывать кнопку с разными иконками Я считаю, это лучше сделать в отдельном PR
biodranik commented 2022-12-08 21:16:48 +00:00 (Migrated from github.com)
Review
  1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему.
  2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему. 2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
biodranik commented 2022-12-11 12:25:58 +00:00 (Migrated from github.com)
Review

Лишняя строка

Лишняя строка
biodranik commented 2022-12-11 12:26:27 +00:00 (Migrated from github.com)
Review

Зачем этот флаг? Можно ли без него?

Зачем этот флаг? Можно ли без него?
Review

В будущем, думаю, можно. Сейчас сделал так.
Если очень не нравится, могу удалить эту часть с сообщением об ошибке + ErrorScreen.
Но временные костыли в любом случае неизбежны.

В будущем, думаю, можно. Сейчас сделал так. Если очень не нравится, могу удалить эту часть с сообщением об ошибке + `ErrorScreen`. Но временные костыли в любом случае неизбежны.
}
Review

We can follow the same logic as for myPosition button?

e9056f11fb/android/src/app/organicmaps/MwmActivity.java (L650-L654)

LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.

We can follow the same logic as for myPosition button? https://github.com/organicmaps/organicmaps/blob/e9056f11fbc2cf3c41850701302bba305cbde95a/android/src/app/organicmaps/MwmActivity.java#L650-L654 LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.
Review

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в LocationHelper
Просто тремя строчками тут не обойтись
Из тех проблем, что я вижу сейчас:

  • Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка
  • Если местоположение отображается, то появляются проблемы с onScale. Всегда скейлится относительно местоположения, а не точки на экране
  • Плюс все равно надо реализовывать кнопку с разными иконками

Я считаю, это лучше сделать в отдельном PR

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в `LocationHelper` Просто тремя строчками тут не обойтись Из тех проблем, что я вижу сейчас: * Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка * Если местоположение отображается, то появляются проблемы с `onScale`. Всегда скейлится относительно местоположения, а не точки на экране * Плюс все равно надо реализовывать кнопку с разными иконками Я считаю, это лучше сделать в отдельном PR
biodranik commented 2022-12-08 21:16:48 +00:00 (Migrated from github.com)
Review
  1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему.
  2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему. 2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
biodranik commented 2022-12-11 12:25:58 +00:00 (Migrated from github.com)
Review

Лишняя строка

Лишняя строка
biodranik commented 2022-12-11 12:26:27 +00:00 (Migrated from github.com)
Review

Зачем этот флаг? Можно ли без него?

Зачем этот флаг? Можно ли без него?
Review

В будущем, думаю, можно. Сейчас сделал так.
Если очень не нравится, могу удалить эту часть с сообщением об ошибке + ErrorScreen.
Но временные костыли в любом случае неизбежны.

В будущем, думаю, можно. Сейчас сделал так. Если очень не нравится, могу удалить эту часть с сообщением об ошибке + `ErrorScreen`. Но временные костыли в любом случае неизбежны.
Review

We can follow the same logic as for myPosition button?

e9056f11fb/android/src/app/organicmaps/MwmActivity.java (L650-L654)

LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.

We can follow the same logic as for myPosition button? https://github.com/organicmaps/organicmaps/blob/e9056f11fbc2cf3c41850701302bba305cbde95a/android/src/app/organicmaps/MwmActivity.java#L650-L654 LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.
Review

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в LocationHelper
Просто тремя строчками тут не обойтись
Из тех проблем, что я вижу сейчас:

  • Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка
  • Если местоположение отображается, то появляются проблемы с onScale. Всегда скейлится относительно местоположения, а не точки на экране
  • Плюс все равно надо реализовывать кнопку с разными иконками

Я считаю, это лучше сделать в отдельном PR

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в `LocationHelper` Просто тремя строчками тут не обойтись Из тех проблем, что я вижу сейчас: * Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка * Если местоположение отображается, то появляются проблемы с `onScale`. Всегда скейлится относительно местоположения, а не точки на экране * Плюс все равно надо реализовывать кнопку с разными иконками Я считаю, это лучше сделать в отдельном PR
biodranik commented 2022-12-08 21:16:48 +00:00 (Migrated from github.com)
Review
  1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему.
  2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему. 2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
biodranik commented 2022-12-11 12:25:58 +00:00 (Migrated from github.com)
Review

Лишняя строка

Лишняя строка
biodranik commented 2022-12-11 12:26:27 +00:00 (Migrated from github.com)
Review

Зачем этот флаг? Можно ли без него?

Зачем этот флаг? Можно ли без него?
Review

В будущем, думаю, можно. Сейчас сделал так.
Если очень не нравится, могу удалить эту часть с сообщением об ошибке + ErrorScreen.
Но временные костыли в любом случае неизбежны.

В будущем, думаю, можно. Сейчас сделал так. Если очень не нравится, могу удалить эту часть с сообщением об ошибке + `ErrorScreen`. Но временные костыли в любом случае неизбежны.
private void init()
Review

We can follow the same logic as for myPosition button?

e9056f11fb/android/src/app/organicmaps/MwmActivity.java (L650-L654)

LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.

We can follow the same logic as for myPosition button? https://github.com/organicmaps/organicmaps/blob/e9056f11fbc2cf3c41850701302bba305cbde95a/android/src/app/organicmaps/MwmActivity.java#L650-L654 LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.
Review

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в LocationHelper
Просто тремя строчками тут не обойтись
Из тех проблем, что я вижу сейчас:

  • Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка
  • Если местоположение отображается, то появляются проблемы с onScale. Всегда скейлится относительно местоположения, а не точки на экране
  • Плюс все равно надо реализовывать кнопку с разными иконками

Я считаю, это лучше сделать в отдельном PR

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в `LocationHelper` Просто тремя строчками тут не обойтись Из тех проблем, что я вижу сейчас: * Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка * Если местоположение отображается, то появляются проблемы с `onScale`. Всегда скейлится относительно местоположения, а не точки на экране * Плюс все равно надо реализовывать кнопку с разными иконками Я считаю, это лучше сделать в отдельном PR
biodranik commented 2022-12-08 21:16:48 +00:00 (Migrated from github.com)
Review
  1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему.
  2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему. 2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
biodranik commented 2022-12-11 12:25:58 +00:00 (Migrated from github.com)
Review

Лишняя строка

Лишняя строка
biodranik commented 2022-12-11 12:26:27 +00:00 (Migrated from github.com)
Review

Зачем этот флаг? Можно ли без него?

Зачем этот флаг? Можно ли без него?
Review

В будущем, думаю, можно. Сейчас сделал так.
Если очень не нравится, могу удалить эту часть с сообщением об ошибке + ErrorScreen.
Но временные костыли в любом случае неизбежны.

В будущем, думаю, можно. Сейчас сделал так. Если очень не нравится, могу удалить эту часть с сообщением об ошибке + `ErrorScreen`. Но временные костыли в любом случае неизбежны.
{
Review

We can follow the same logic as for myPosition button?

e9056f11fb/android/src/app/organicmaps/MwmActivity.java (L650-L654)

LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.

We can follow the same logic as for myPosition button? https://github.com/organicmaps/organicmaps/blob/e9056f11fbc2cf3c41850701302bba305cbde95a/android/src/app/organicmaps/MwmActivity.java#L650-L654 LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.
Review

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в LocationHelper
Просто тремя строчками тут не обойтись
Из тех проблем, что я вижу сейчас:

  • Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка
  • Если местоположение отображается, то появляются проблемы с onScale. Всегда скейлится относительно местоположения, а не точки на экране
  • Плюс все равно надо реализовывать кнопку с разными иконками

Я считаю, это лучше сделать в отдельном PR

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в `LocationHelper` Просто тремя строчками тут не обойтись Из тех проблем, что я вижу сейчас: * Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка * Если местоположение отображается, то появляются проблемы с `onScale`. Всегда скейлится относительно местоположения, а не точки на экране * Плюс все равно надо реализовывать кнопку с разными иконками Я считаю, это лучше сделать в отдельном PR
biodranik commented 2022-12-08 21:16:48 +00:00 (Migrated from github.com)
Review
  1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему.
  2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему. 2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
biodranik commented 2022-12-11 12:25:58 +00:00 (Migrated from github.com)
Review

Лишняя строка

Лишняя строка
biodranik commented 2022-12-11 12:26:27 +00:00 (Migrated from github.com)
Review

Зачем этот флаг? Можно ли без него?

Зачем этот флаг? Можно ли без него?
Review

В будущем, думаю, можно. Сейчас сделал так.
Если очень не нравится, могу удалить эту часть с сообщением об ошибке + ErrorScreen.
Но временные костыли в любом случае неизбежны.

В будущем, думаю, можно. Сейчас сделал так. Если очень не нравится, могу удалить эту часть с сообщением об ошибке + `ErrorScreen`. Но временные костыли в любом случае неизбежны.
mInitFailed = false;
Review

We can follow the same logic as for myPosition button?

e9056f11fb/android/src/app/organicmaps/MwmActivity.java (L650-L654)

LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.

We can follow the same logic as for myPosition button? https://github.com/organicmaps/organicmaps/blob/e9056f11fbc2cf3c41850701302bba305cbde95a/android/src/app/organicmaps/MwmActivity.java#L650-L654 LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.
Review

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в LocationHelper
Просто тремя строчками тут не обойтись
Из тех проблем, что я вижу сейчас:

  • Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка
  • Если местоположение отображается, то появляются проблемы с onScale. Всегда скейлится относительно местоположения, а не точки на экране
  • Плюс все равно надо реализовывать кнопку с разными иконками

Я считаю, это лучше сделать в отдельном PR

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в `LocationHelper` Просто тремя строчками тут не обойтись Из тех проблем, что я вижу сейчас: * Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка * Если местоположение отображается, то появляются проблемы с `onScale`. Всегда скейлится относительно местоположения, а не точки на экране * Плюс все равно надо реализовывать кнопку с разными иконками Я считаю, это лучше сделать в отдельном PR
biodranik commented 2022-12-08 21:16:48 +00:00 (Migrated from github.com)
Review
  1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему.
  2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему. 2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
biodranik commented 2022-12-11 12:25:58 +00:00 (Migrated from github.com)
Review

Лишняя строка

Лишняя строка
biodranik commented 2022-12-11 12:26:27 +00:00 (Migrated from github.com)
Review

Зачем этот флаг? Можно ли без него?

Зачем этот флаг? Можно ли без него?
Review

В будущем, думаю, можно. Сейчас сделал так.
Если очень не нравится, могу удалить эту часть с сообщением об ошибке + ErrorScreen.
Но временные костыли в любом случае неизбежны.

В будущем, думаю, можно. Сейчас сделал так. Если очень не нравится, могу удалить эту часть с сообщением об ошибке + `ErrorScreen`. Но временные костыли в любом случае неизбежны.
MwmApplication app = MwmApplication.from(getCarContext());
Review

We can follow the same logic as for myPosition button?

e9056f11fb/android/src/app/organicmaps/MwmActivity.java (L650-L654)

LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.

We can follow the same logic as for myPosition button? https://github.com/organicmaps/organicmaps/blob/e9056f11fbc2cf3c41850701302bba305cbde95a/android/src/app/organicmaps/MwmActivity.java#L650-L654 LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.
Review

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в LocationHelper
Просто тремя строчками тут не обойтись
Из тех проблем, что я вижу сейчас:

  • Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка
  • Если местоположение отображается, то появляются проблемы с onScale. Всегда скейлится относительно местоположения, а не точки на экране
  • Плюс все равно надо реализовывать кнопку с разными иконками

Я считаю, это лучше сделать в отдельном PR

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в `LocationHelper` Просто тремя строчками тут не обойтись Из тех проблем, что я вижу сейчас: * Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка * Если местоположение отображается, то появляются проблемы с `onScale`. Всегда скейлится относительно местоположения, а не точки на экране * Плюс все равно надо реализовывать кнопку с разными иконками Я считаю, это лучше сделать в отдельном PR
biodranik commented 2022-12-08 21:16:48 +00:00 (Migrated from github.com)
Review
  1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему.
  2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему. 2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
biodranik commented 2022-12-11 12:25:58 +00:00 (Migrated from github.com)
Review

Лишняя строка

Лишняя строка
biodranik commented 2022-12-11 12:26:27 +00:00 (Migrated from github.com)
Review

Зачем этот флаг? Можно ли без него?

Зачем этот флаг? Можно ли без него?
Review

В будущем, думаю, можно. Сейчас сделал так.
Если очень не нравится, могу удалить эту часть с сообщением об ошибке + ErrorScreen.
Но временные костыли в любом случае неизбежны.

В будущем, думаю, можно. Сейчас сделал так. Если очень не нравится, могу удалить эту часть с сообщением об ошибке + `ErrorScreen`. Но временные костыли в любом случае неизбежны.
try
Review

We can follow the same logic as for myPosition button?

e9056f11fb/android/src/app/organicmaps/MwmActivity.java (L650-L654)

LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.

We can follow the same logic as for myPosition button? https://github.com/organicmaps/organicmaps/blob/e9056f11fbc2cf3c41850701302bba305cbde95a/android/src/app/organicmaps/MwmActivity.java#L650-L654 LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.
Review

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в LocationHelper
Просто тремя строчками тут не обойтись
Из тех проблем, что я вижу сейчас:

  • Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка
  • Если местоположение отображается, то появляются проблемы с onScale. Всегда скейлится относительно местоположения, а не точки на экране
  • Плюс все равно надо реализовывать кнопку с разными иконками

Я считаю, это лучше сделать в отдельном PR

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в `LocationHelper` Просто тремя строчками тут не обойтись Из тех проблем, что я вижу сейчас: * Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка * Если местоположение отображается, то появляются проблемы с `onScale`. Всегда скейлится относительно местоположения, а не точки на экране * Плюс все равно надо реализовывать кнопку с разными иконками Я считаю, это лучше сделать в отдельном PR
biodranik commented 2022-12-08 21:16:48 +00:00 (Migrated from github.com)
Review
  1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему.
  2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему. 2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
biodranik commented 2022-12-11 12:25:58 +00:00 (Migrated from github.com)
Review

Лишняя строка

Лишняя строка
biodranik commented 2022-12-11 12:26:27 +00:00 (Migrated from github.com)
Review

Зачем этот флаг? Можно ли без него?

Зачем этот флаг? Можно ли без него?
Review

В будущем, думаю, можно. Сейчас сделал так.
Если очень не нравится, могу удалить эту часть с сообщением об ошибке + ErrorScreen.
Но временные костыли в любом случае неизбежны.

В будущем, думаю, можно. Сейчас сделал так. Если очень не нравится, могу удалить эту часть с сообщением об ошибке + `ErrorScreen`. Но временные костыли в любом случае неизбежны.
{
Review

We can follow the same logic as for myPosition button?

e9056f11fb/android/src/app/organicmaps/MwmActivity.java (L650-L654)

LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.

We can follow the same logic as for myPosition button? https://github.com/organicmaps/organicmaps/blob/e9056f11fbc2cf3c41850701302bba305cbde95a/android/src/app/organicmaps/MwmActivity.java#L650-L654 LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.
Review

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в LocationHelper
Просто тремя строчками тут не обойтись
Из тех проблем, что я вижу сейчас:

  • Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка
  • Если местоположение отображается, то появляются проблемы с onScale. Всегда скейлится относительно местоположения, а не точки на экране
  • Плюс все равно надо реализовывать кнопку с разными иконками

Я считаю, это лучше сделать в отдельном PR

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в `LocationHelper` Просто тремя строчками тут не обойтись Из тех проблем, что я вижу сейчас: * Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка * Если местоположение отображается, то появляются проблемы с `onScale`. Всегда скейлится относительно местоположения, а не точки на экране * Плюс все равно надо реализовывать кнопку с разными иконками Я считаю, это лучше сделать в отдельном PR
biodranik commented 2022-12-08 21:16:48 +00:00 (Migrated from github.com)
Review
  1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему.
  2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему. 2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
biodranik commented 2022-12-11 12:25:58 +00:00 (Migrated from github.com)
Review

Лишняя строка

Лишняя строка
biodranik commented 2022-12-11 12:26:27 +00:00 (Migrated from github.com)
Review

Зачем этот флаг? Можно ли без него?

Зачем этот флаг? Можно ли без него?
Review

В будущем, думаю, можно. Сейчас сделал так.
Если очень не нравится, могу удалить эту часть с сообщением об ошибке + ErrorScreen.
Но временные костыли в любом случае неизбежны.

В будущем, думаю, можно. Сейчас сделал так. Если очень не нравится, могу удалить эту часть с сообщением об ошибке + `ErrorScreen`. Но временные костыли в любом случае неизбежны.
app.init();
Review

We can follow the same logic as for myPosition button?

e9056f11fb/android/src/app/organicmaps/MwmActivity.java (L650-L654)

LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.

We can follow the same logic as for myPosition button? https://github.com/organicmaps/organicmaps/blob/e9056f11fbc2cf3c41850701302bba305cbde95a/android/src/app/organicmaps/MwmActivity.java#L650-L654 LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.
Review

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в LocationHelper
Просто тремя строчками тут не обойтись
Из тех проблем, что я вижу сейчас:

  • Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка
  • Если местоположение отображается, то появляются проблемы с onScale. Всегда скейлится относительно местоположения, а не точки на экране
  • Плюс все равно надо реализовывать кнопку с разными иконками

Я считаю, это лучше сделать в отдельном PR

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в `LocationHelper` Просто тремя строчками тут не обойтись Из тех проблем, что я вижу сейчас: * Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка * Если местоположение отображается, то появляются проблемы с `onScale`. Всегда скейлится относительно местоположения, а не точки на экране * Плюс все равно надо реализовывать кнопку с разными иконками Я считаю, это лучше сделать в отдельном PR
biodranik commented 2022-12-08 21:16:48 +00:00 (Migrated from github.com)
Review
  1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему.
  2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему. 2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
biodranik commented 2022-12-11 12:25:58 +00:00 (Migrated from github.com)
Review

Лишняя строка

Лишняя строка
biodranik commented 2022-12-11 12:26:27 +00:00 (Migrated from github.com)
Review

Зачем этот флаг? Можно ли без него?

Зачем этот флаг? Можно ли без него?
Review

В будущем, думаю, можно. Сейчас сделал так.
Если очень не нравится, могу удалить эту часть с сообщением об ошибке + ErrorScreen.
Но временные костыли в любом случае неизбежны.

В будущем, думаю, можно. Сейчас сделал так. Если очень не нравится, могу удалить эту часть с сообщением об ошибке + `ErrorScreen`. Но временные костыли в любом случае неизбежны.
Review

I thought that MwmApplication should be already initialized by SplashScreen. Why do we need to initialize it second time? Please help me to understand the lifecycle.

I thought that MwmApplication should be already initialized by SplashScreen. Why do we need to initialize it second time? Please help me to understand the lifecycle.
Review

Нет. SplashScreen вообще не будет запускаться.
У нас есть заблокированный телефон, на котором карты не открыты. Мы его подключаем к AA. Запустится NavigationSession, в котором и будет вызван init.
Вариант, когда карты открыты одновременно и на телефоне, и на AA невозможен.
По-хорошему да, тут должна быть реализована сложная логика:

  • проверить, запущено ли приложение на телефоне
  • если запущено, то при подключении AA:
    • не инициализировать снова
    • перерисовать карты на экран AA
    • на телефоне показать уведомление, что карты теперь на AA и закрыть приложение
    • либо реализовать какую-нибудь Activity-заглушку с базовыми возможностями

Но это все тема для отдельного PR

Нет. `SplashScreen` вообще не будет запускаться. У нас есть заблокированный телефон, на котором карты не открыты. Мы его подключаем к AA. Запустится `NavigationSession`, в котором и будет вызван `init`. Вариант, когда карты открыты одновременно и на телефоне, и на AA невозможен. По-хорошему да, тут должна быть реализована сложная логика: * проверить, запущено ли приложение на телефоне * если запущено, то при подключении AA: * не инициализировать снова * перерисовать карты на экран AA * на телефоне показать уведомление, что карты теперь на AA и закрыть приложение * либо реализовать какую-нибудь Activity-заглушку с базовыми возможностями Но это все тема для отдельного PR
biodranik commented 2022-12-08 21:14:42 +00:00 (Migrated from github.com)
Review
  1. Как гугл себя ведёт на телефоне при подключении к AA? На айфоне работают карты и там, и там. Удобно выбирать и прокладывать маршрут на телефоне. В режиме навигации на телефоне список дирекшнс.
  2. Всмысле тема для отдельного PR? АА будет сделан на одном PR, после мержа которого будет релиз, и дороги назад не будет. Ломать мастер мержем недоделанного PR мы не будем. Или есть какой-то другой план?
1. Как гугл себя ведёт на телефоне при подключении к AA? На айфоне работают карты и там, и там. Удобно выбирать и прокладывать маршрут на телефоне. В режиме навигации на телефоне список дирекшнс. 2. Всмысле тема для отдельного PR? АА будет сделан на одном PR, после мержа которого будет релиз, и дороги назад не будет. Ломать мастер мержем недоделанного PR мы не будем. Или есть какой-то другой план?
Review
  1. Гугл выдает сообщение типа "открыто на Android Auto" и не дает открыть приложение. В теории, конечно, можно сделать, чтобы карты работали и там, и там, но, мне кажется, это будет очень сложно.
  2. А для чего нам тогда отдельная ветка под AA? Хранить все в одном PR на 10+ тысяч строк кода как-то не очень хорошо, наверное
1. Гугл выдает сообщение типа "открыто на Android Auto" и не дает открыть приложение. В теории, конечно, можно сделать, чтобы карты работали и там, и там, но, мне кажется, это будет очень сложно. 2. А для чего нам тогда отдельная ветка под AA? Хранить все в одном PR на 10+ тысяч строк кода как-то не очень хорошо, наверное
biodranik commented 2022-12-08 21:27:44 +00:00 (Migrated from github.com)
Review

Откуда будет 10К строк кода? Мы обсуждали ранее — всё, что можно втянуть в мастер, не ломая его, надо втягивать в мастер, и ребейзить ветку поверх. Не должно быть никаких squash коммитов с мастера, они мешают.

Откуда будет 10К строк кода? Мы обсуждали ранее — всё, что можно втянуть в мастер, не ломая его, надо втягивать в мастер, и ребейзить ветку поверх. Не должно быть никаких squash коммитов с мастера, они мешают.
Review

Я прикинул и у меня получилось +/- 10к на весь модуль AA. Если будет меньше, супер.
Я просто сделал пару экранов для настроек и экраны поиска, категорий и закладок без всякой логики, только отрисовка. Уже PR на 1к строк. И это только начало.
Я предполагал, что мы будем делать небольшие PR'ы в ветку aa, и когда фича будет закончена, вмержим ее в мастер. Если это не так, то тогда я не понимаю, зачем нужна отдельная ветка

Я прикинул и у меня получилось +/- 10к на весь модуль AA. Если будет меньше, супер. Я просто сделал пару экранов для настроек и экраны поиска, категорий и закладок без всякой логики, только отрисовка. Уже PR на 1к строк. И это только начало. Я предполагал, что мы будем делать небольшие PR'ы в ветку `aa`, и когда фича будет закончена, вмержим ее в мастер. Если это не так, то тогда я не понимаю, зачем нужна отдельная ветка
biodranik commented 2022-12-08 22:03:15 +00:00 (Migrated from github.com)
Review

Всё верно. Но каждый PR должен быть достаточно законченным и доделанным, без временных костылей.

Всё верно. Но каждый PR должен быть достаточно законченным и доделанным, без временных костылей.
Review

Здесь всё обсудили в целом уже. F-Droid я посмотрю сам.

Здесь всё обсудили в целом уже. F-Droid я посмотрю сам.
} catch (IOException e)
Review

We can follow the same logic as for myPosition button?

e9056f11fb/android/src/app/organicmaps/MwmActivity.java (L650-L654)

LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.

We can follow the same logic as for myPosition button? https://github.com/organicmaps/organicmaps/blob/e9056f11fbc2cf3c41850701302bba305cbde95a/android/src/app/organicmaps/MwmActivity.java#L650-L654 LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.
Review

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в LocationHelper
Просто тремя строчками тут не обойтись
Из тех проблем, что я вижу сейчас:

  • Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка
  • Если местоположение отображается, то появляются проблемы с onScale. Всегда скейлится относительно местоположения, а не точки на экране
  • Плюс все равно надо реализовывать кнопку с разными иконками

Я считаю, это лучше сделать в отдельном PR

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в `LocationHelper` Просто тремя строчками тут не обойтись Из тех проблем, что я вижу сейчас: * Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка * Если местоположение отображается, то появляются проблемы с `onScale`. Всегда скейлится относительно местоположения, а не точки на экране * Плюс все равно надо реализовывать кнопку с разными иконками Я считаю, это лучше сделать в отдельном PR
biodranik commented 2022-12-08 21:16:48 +00:00 (Migrated from github.com)
Review
  1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему.
  2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему. 2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
biodranik commented 2022-12-11 12:25:58 +00:00 (Migrated from github.com)
Review

Лишняя строка

Лишняя строка
biodranik commented 2022-12-11 12:26:27 +00:00 (Migrated from github.com)
Review

Зачем этот флаг? Можно ли без него?

Зачем этот флаг? Можно ли без него?
Review

В будущем, думаю, можно. Сейчас сделал так.
Если очень не нравится, могу удалить эту часть с сообщением об ошибке + ErrorScreen.
Но временные костыли в любом случае неизбежны.

В будущем, думаю, можно. Сейчас сделал так. Если очень не нравится, могу удалить эту часть с сообщением об ошибке + `ErrorScreen`. Но временные костыли в любом случае неизбежны.
{
Review

We can follow the same logic as for myPosition button?

e9056f11fb/android/src/app/organicmaps/MwmActivity.java (L650-L654)

LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.

We can follow the same logic as for myPosition button? https://github.com/organicmaps/organicmaps/blob/e9056f11fbc2cf3c41850701302bba305cbde95a/android/src/app/organicmaps/MwmActivity.java#L650-L654 LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.
Review

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в LocationHelper
Просто тремя строчками тут не обойтись
Из тех проблем, что я вижу сейчас:

  • Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка
  • Если местоположение отображается, то появляются проблемы с onScale. Всегда скейлится относительно местоположения, а не точки на экране
  • Плюс все равно надо реализовывать кнопку с разными иконками

Я считаю, это лучше сделать в отдельном PR

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в `LocationHelper` Просто тремя строчками тут не обойтись Из тех проблем, что я вижу сейчас: * Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка * Если местоположение отображается, то появляются проблемы с `onScale`. Всегда скейлится относительно местоположения, а не точки на экране * Плюс все равно надо реализовывать кнопку с разными иконками Я считаю, это лучше сделать в отдельном PR
biodranik commented 2022-12-08 21:16:48 +00:00 (Migrated from github.com)
Review
  1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему.
  2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему. 2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
biodranik commented 2022-12-11 12:25:58 +00:00 (Migrated from github.com)
Review

Лишняя строка

Лишняя строка
biodranik commented 2022-12-11 12:26:27 +00:00 (Migrated from github.com)
Review

Зачем этот флаг? Можно ли без него?

Зачем этот флаг? Можно ли без него?
Review

В будущем, думаю, можно. Сейчас сделал так.
Если очень не нравится, могу удалить эту часть с сообщением об ошибке + ErrorScreen.
Но временные костыли в любом случае неизбежны.

В будущем, думаю, можно. Сейчас сделал так. Если очень не нравится, могу удалить эту часть с сообщением об ошибке + `ErrorScreen`. Но временные костыли в любом случае неизбежны.
mInitFailed = true;
Review

We can follow the same logic as for myPosition button?

e9056f11fb/android/src/app/organicmaps/MwmActivity.java (L650-L654)

LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.

We can follow the same logic as for myPosition button? https://github.com/organicmaps/organicmaps/blob/e9056f11fbc2cf3c41850701302bba305cbde95a/android/src/app/organicmaps/MwmActivity.java#L650-L654 LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.
Review

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в LocationHelper
Просто тремя строчками тут не обойтись
Из тех проблем, что я вижу сейчас:

  • Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка
  • Если местоположение отображается, то появляются проблемы с onScale. Всегда скейлится относительно местоположения, а не точки на экране
  • Плюс все равно надо реализовывать кнопку с разными иконками

Я считаю, это лучше сделать в отдельном PR

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в `LocationHelper` Просто тремя строчками тут не обойтись Из тех проблем, что я вижу сейчас: * Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка * Если местоположение отображается, то появляются проблемы с `onScale`. Всегда скейлится относительно местоположения, а не точки на экране * Плюс все равно надо реализовывать кнопку с разными иконками Я считаю, это лучше сделать в отдельном PR
biodranik commented 2022-12-08 21:16:48 +00:00 (Migrated from github.com)
Review
  1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему.
  2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему. 2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
biodranik commented 2022-12-11 12:25:58 +00:00 (Migrated from github.com)
Review

Лишняя строка

Лишняя строка
biodranik commented 2022-12-11 12:26:27 +00:00 (Migrated from github.com)
Review

Зачем этот флаг? Можно ли без него?

Зачем этот флаг? Можно ли без него?
Review

В будущем, думаю, можно. Сейчас сделал так.
Если очень не нравится, могу удалить эту часть с сообщением об ошибке + ErrorScreen.
Но временные костыли в любом случае неизбежны.

В будущем, думаю, можно. Сейчас сделал так. Если очень не нравится, могу удалить эту часть с сообщением об ошибке + `ErrorScreen`. Но временные костыли в любом случае неизбежны.
Log.e(TAG, "Failed to initialize the app.");
Review

We can follow the same logic as for myPosition button?

e9056f11fb/android/src/app/organicmaps/MwmActivity.java (L650-L654)

LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.

We can follow the same logic as for myPosition button? https://github.com/organicmaps/organicmaps/blob/e9056f11fbc2cf3c41850701302bba305cbde95a/android/src/app/organicmaps/MwmActivity.java#L650-L654 LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.
Review

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в LocationHelper
Просто тремя строчками тут не обойтись
Из тех проблем, что я вижу сейчас:

  • Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка
  • Если местоположение отображается, то появляются проблемы с onScale. Всегда скейлится относительно местоположения, а не точки на экране
  • Плюс все равно надо реализовывать кнопку с разными иконками

Я считаю, это лучше сделать в отдельном PR

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в `LocationHelper` Просто тремя строчками тут не обойтись Из тех проблем, что я вижу сейчас: * Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка * Если местоположение отображается, то появляются проблемы с `onScale`. Всегда скейлится относительно местоположения, а не точки на экране * Плюс все равно надо реализовывать кнопку с разными иконками Я считаю, это лучше сделать в отдельном PR
biodranik commented 2022-12-08 21:16:48 +00:00 (Migrated from github.com)
Review
  1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему.
  2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему. 2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
biodranik commented 2022-12-11 12:25:58 +00:00 (Migrated from github.com)
Review

Лишняя строка

Лишняя строка
biodranik commented 2022-12-11 12:26:27 +00:00 (Migrated from github.com)
Review

Зачем этот флаг? Можно ли без него?

Зачем этот флаг? Можно ли без него?
Review

В будущем, думаю, можно. Сейчас сделал так.
Если очень не нравится, могу удалить эту часть с сообщением об ошибке + ErrorScreen.
Но временные костыли в любом случае неизбежны.

В будущем, думаю, можно. Сейчас сделал так. Если очень не нравится, могу удалить эту часть с сообщением об ошибке + `ErrorScreen`. Но временные костыли в любом случае неизбежны.
}
Review

We can follow the same logic as for myPosition button?

e9056f11fb/android/src/app/organicmaps/MwmActivity.java (L650-L654)

LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.

We can follow the same logic as for myPosition button? https://github.com/organicmaps/organicmaps/blob/e9056f11fbc2cf3c41850701302bba305cbde95a/android/src/app/organicmaps/MwmActivity.java#L650-L654 LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.
Review

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в LocationHelper
Просто тремя строчками тут не обойтись
Из тех проблем, что я вижу сейчас:

  • Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка
  • Если местоположение отображается, то появляются проблемы с onScale. Всегда скейлится относительно местоположения, а не точки на экране
  • Плюс все равно надо реализовывать кнопку с разными иконками

Я считаю, это лучше сделать в отдельном PR

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в `LocationHelper` Просто тремя строчками тут не обойтись Из тех проблем, что я вижу сейчас: * Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка * Если местоположение отображается, то появляются проблемы с `onScale`. Всегда скейлится относительно местоположения, а не точки на экране * Плюс все равно надо реализовывать кнопку с разными иконками Я считаю, это лучше сделать в отдельном PR
biodranik commented 2022-12-08 21:16:48 +00:00 (Migrated from github.com)
Review
  1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему.
  2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему. 2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
biodranik commented 2022-12-11 12:25:58 +00:00 (Migrated from github.com)
Review

Лишняя строка

Лишняя строка
biodranik commented 2022-12-11 12:26:27 +00:00 (Migrated from github.com)
Review

Зачем этот флаг? Можно ли без него?

Зачем этот флаг? Можно ли без него?
Review

В будущем, думаю, можно. Сейчас сделал так.
Если очень не нравится, могу удалить эту часть с сообщением об ошибке + ErrorScreen.
Но временные костыли в любом случае неизбежны.

В будущем, думаю, можно. Сейчас сделал так. Если очень не нравится, могу удалить эту часть с сообщением об ошибке + `ErrorScreen`. Но временные костыли в любом случае неизбежны.
}
Review

We can follow the same logic as for myPosition button?

e9056f11fb/android/src/app/organicmaps/MwmActivity.java (L650-L654)

LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.

We can follow the same logic as for myPosition button? https://github.com/organicmaps/organicmaps/blob/e9056f11fbc2cf3c41850701302bba305cbde95a/android/src/app/organicmaps/MwmActivity.java#L650-L654 LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.
Review

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в LocationHelper
Просто тремя строчками тут не обойтись
Из тех проблем, что я вижу сейчас:

  • Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка
  • Если местоположение отображается, то появляются проблемы с onScale. Всегда скейлится относительно местоположения, а не точки на экране
  • Плюс все равно надо реализовывать кнопку с разными иконками

Я считаю, это лучше сделать в отдельном PR

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в `LocationHelper` Просто тремя строчками тут не обойтись Из тех проблем, что я вижу сейчас: * Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка * Если местоположение отображается, то появляются проблемы с `onScale`. Всегда скейлится относительно местоположения, а не точки на экране * Плюс все равно надо реализовывать кнопку с разными иконками Я считаю, это лучше сделать в отдельном PR
biodranik commented 2022-12-08 21:16:48 +00:00 (Migrated from github.com)
Review
  1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему.
  2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему. 2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
biodranik commented 2022-12-11 12:25:58 +00:00 (Migrated from github.com)
Review

Лишняя строка

Лишняя строка
biodranik commented 2022-12-11 12:26:27 +00:00 (Migrated from github.com)
Review

Зачем этот флаг? Можно ли без него?

Зачем этот флаг? Можно ли без него?
Review

В будущем, думаю, можно. Сейчас сделал так.
Если очень не нравится, могу удалить эту часть с сообщением об ошибке + ErrorScreen.
Но временные костыли в любом случае неизбежны.

В будущем, думаю, можно. Сейчас сделал так. Если очень не нравится, могу удалить эту часть с сообщением об ошибке + `ErrorScreen`. Но временные костыли в любом случае неизбежны.
}
Review

We can follow the same logic as for myPosition button?

e9056f11fb/android/src/app/organicmaps/MwmActivity.java (L650-L654)

LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.

We can follow the same logic as for myPosition button? https://github.com/organicmaps/organicmaps/blob/e9056f11fbc2cf3c41850701302bba305cbde95a/android/src/app/organicmaps/MwmActivity.java#L650-L654 LocationHelper works without Activity, but will not display error dialogs and permission resolution screens. This operation should be performed on the phone.
Review

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в LocationHelper
Просто тремя строчками тут не обойтись
Из тех проблем, что я вижу сейчас:

  • Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка
  • Если местоположение отображается, то появляются проблемы с onScale. Всегда скейлится относительно местоположения, а не точки на экране
  • Плюс все равно надо реализовывать кнопку с разными иконками

Я считаю, это лучше сделать в отдельном PR

Я пробовал, работает так же, как и моя предыдущая реализация еще до этих изменений в `LocationHelper` Просто тремя строчками тут не обойтись Из тех проблем, что я вижу сейчас: * Просто отображается синяя точка. Иногда может нарисовать стрелочку, но чаще просто синяя точка * Если местоположение отображается, то появляются проблемы с `onScale`. Всегда скейлится относительно местоположения, а не точки на экране * Плюс все равно надо реализовывать кнопку с разными иконками Я считаю, это лучше сделать в отдельном PR
biodranik commented 2022-12-08 21:16:48 +00:00 (Migrated from github.com)
Review
  1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему.
  2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
1. Синяя точка означает, что прилетает только позиция, без компаса/сторон света. Надо разбираться, почему. 2. Отдельного PR не будет. Или имеется ввиду отдельный PR на ветку AA? Тогда ок.
biodranik commented 2022-12-11 12:25:58 +00:00 (Migrated from github.com)
Review

Лишняя строка

Лишняя строка
biodranik commented 2022-12-11 12:26:27 +00:00 (Migrated from github.com)
Review

Зачем этот флаг? Можно ли без него?

Зачем этот флаг? Можно ли без него?
Review

В будущем, думаю, можно. Сейчас сделал так.
Если очень не нравится, могу удалить эту часть с сообщением об ошибке + ErrorScreen.
Но временные костыли в любом случае неизбежны.

В будущем, думаю, можно. Сейчас сделал так. Если очень не нравится, могу удалить эту часть с сообщением об ошибке + `ErrorScreen`. Но временные костыли в любом случае неизбежны.

View file

@ -0,0 +1,172 @@
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
package app.organicmaps.car;
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
import android.graphics.Rect;
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
import android.util.Log;
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
import androidx.annotation.NonNull;
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
import androidx.annotation.Nullable;
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
import androidx.car.app.AppManager;
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
import androidx.car.app.CarContext;
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
import androidx.car.app.CarToast;
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
import androidx.car.app.SurfaceCallback;
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
import androidx.car.app.SurfaceContainer;
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
import androidx.lifecycle.DefaultLifecycleObserver;
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
import androidx.lifecycle.Lifecycle;
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
import androidx.lifecycle.LifecycleOwner;
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
import app.organicmaps.Map;
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
import app.organicmaps.R;
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
public class SurfaceRenderer implements DefaultLifecycleObserver, SurfaceCallback
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
Review

У меня при хаотичных нажатиях на +/- крешится вот в этом месте:

c9b77a292d/drape_frontend/screen_operations.cpp (L128)

abort 0x0000007e68aaf3c4
__assert2 0x0000007e68aaf788
df::ScaleInto(const ScreenBase &, const m2::Rect<…> &) screen_operations.cpp:128
df::Navigator::SetFromScreen(const ScreenBase &, unsigned int, double) navigator.cpp:28
df::Navigator::SetFromScreen(const ScreenBase &) navigator.cpp:23
df::UserEventStream::ApplyAnimations() user_event_stream.cpp:295
df::UserEventStream::ProcessEvents(bool &, bool &) user_event_stream.cpp:264
df::FrontendRenderer::ProcessEvents(bool &, bool &) frontend_renderer.cpp:2537
df::FrontendRenderer::RenderFrame() frontend_renderer.cpp:1742
df::BaseRenderer::IterateRenderLoopImpl() base_renderer.cpp:64
df::BaseRenderer::IterateRenderLoop() base_renderer.cpp:59
df::FrontendRenderer::Routine::Do() frontend_renderer.cpp:2441
threads::RunRoutine(std::__ndk1::shared_ptr<…>) thread.cpp:24
decltype(std::__ndk1::forward<void (*)(std::__ndk1::shared_ptr<threads::IRoutine>)>(fp)(std::__ndk1::forward<std::__ndk1::shared_ptr<threads::IRoutine> >(fp0))) std::__ndk1::__invoke<void (*)(std::__ndk1::shared_ptr<threads::IRoutine>), std::__ndk1::shared_ptr<threads::IRoutine> >(void (*&&)(std::__ndk1::shared_ptr<threads::IRoutine>), std::__ndk1::shared_ptr<threads::IRoutine>&&) type_traits:3874
std::__ndk1::__thread_execute<…>(std::__ndk1::tuple<…> &, std::__ndk1::__tuple_indices<…>) thread:273
std::__ndk1::__thread_proxy<…>(void *) thread:284
__pthread_start(void *) 0x0000007e68b12b3c
__start_thread 0x0000007e68ab0c64
У меня при хаотичных нажатиях на +/- крешится вот в этом месте: https://github.com/organicmaps/organicmaps/blob/c9b77a292d26b6249dba9dfb570fba91e9fc371b/drape_frontend/screen_operations.cpp#L128 ``` abort 0x0000007e68aaf3c4 __assert2 0x0000007e68aaf788 df::ScaleInto(const ScreenBase &, const m2::Rect<…> &) screen_operations.cpp:128 df::Navigator::SetFromScreen(const ScreenBase &, unsigned int, double) navigator.cpp:28 df::Navigator::SetFromScreen(const ScreenBase &) navigator.cpp:23 df::UserEventStream::ApplyAnimations() user_event_stream.cpp:295 df::UserEventStream::ProcessEvents(bool &, bool &) user_event_stream.cpp:264 df::FrontendRenderer::ProcessEvents(bool &, bool &) frontend_renderer.cpp:2537 df::FrontendRenderer::RenderFrame() frontend_renderer.cpp:1742 df::BaseRenderer::IterateRenderLoopImpl() base_renderer.cpp:64 df::BaseRenderer::IterateRenderLoop() base_renderer.cpp:59 df::FrontendRenderer::Routine::Do() frontend_renderer.cpp:2441 threads::RunRoutine(std::__ndk1::shared_ptr<…>) thread.cpp:24 decltype(std::__ndk1::forward<void (*)(std::__ndk1::shared_ptr<threads::IRoutine>)>(fp)(std::__ndk1::forward<std::__ndk1::shared_ptr<threads::IRoutine> >(fp0))) std::__ndk1::__invoke<void (*)(std::__ndk1::shared_ptr<threads::IRoutine>), std::__ndk1::shared_ptr<threads::IRoutine> >(void (*&&)(std::__ndk1::shared_ptr<threads::IRoutine>), std::__ndk1::shared_ptr<threads::IRoutine>&&) type_traits:3874 std::__ndk1::__thread_execute<…>(std::__ndk1::tuple<…> &, std::__ndk1::__tuple_indices<…>) thread:273 std::__ndk1::__thread_proxy<…>(void *) thread:284 __pthread_start(void *) 0x0000007e68b12b3c __start_thread 0x0000007e68ab0c64 ```
{
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
Review

Еще один креш при +/-:

c9b77a292d/drape_frontend/screen_operations.cpp (L124)

abort 0x0000007e68aaf3c4
__assert2 0x0000007e68aaf788
jni::AndroidLogMessage(base::LogLevel, const base::SrcPoint &, const std::__ndk1::basic_string<…> &) logging.cpp:45
$_21::operator()(double) const screen_operations.cpp:124
df::ScaleInto(const ScreenBase &, const m2::Rect<…> &) screen_operations.cpp:131
df::Navigator::SetFromScreen(const ScreenBase &, unsigned int, double) navigator.cpp:28
df::Navigator::SetFromScreen(const ScreenBase &) navigator.cpp:23
df::UserEventStream::SetScreen(const ScreenBase &, bool, const std::__ndk1::function<…> &) user_event_stream.cpp:549
df::UserEventStream::OnMove(ref_ptr<…>) user_event_stream.cpp:378
df::UserEventStream::ProcessEvents(bool &, bool &) user_event_stream.cpp:176
df::FrontendRenderer::ProcessEvents(bool &, bool &) frontend_renderer.cpp:2537
df::FrontendRenderer::RenderFrame() frontend_renderer.cpp:1742
df::BaseRenderer::IterateRenderLoopImpl() base_renderer.cpp:64
df::BaseRenderer::IterateRenderLoop() base_renderer.cpp:59
df::FrontendRenderer::Routine::Do() frontend_renderer.cpp:2441
threads::RunRoutine(std::__ndk1::shared_ptr<…>) thread.cpp:24
decltype(std::__ndk1::forward<void (*)(std::__ndk1::shared_ptr<threads::IRoutine>)>(fp)(std::__ndk1::forward<std::__ndk1::shared_ptr<threads::IRoutine> >(fp0))) std::__ndk1::__invoke<void (*)(std::__ndk1::shared_ptr<threads::IRoutine>), std::__ndk1::shared_ptr<threads::IRoutine> >(void (*&&)(std::__ndk1::shared_ptr<threads::IRoutine>), std::__ndk1::shared_ptr<threads::IRoutine>&&) type_traits:3874
std::__ndk1::__thread_execute<…>(std::__ndk1::tuple<…> &, std::__ndk1::__tuple_indices<…>) thread:273
std::__ndk1::__thread_proxy<…>(void *) thread:284
__pthread_start(void *) 0x0000007e68b12b3c
__start_thread 0x0000007e68ab0c64
Еще один креш при +/-: https://github.com/organicmaps/organicmaps/blob/c9b77a292d26b6249dba9dfb570fba91e9fc371b/drape_frontend/screen_operations.cpp#L124 ``` abort 0x0000007e68aaf3c4 __assert2 0x0000007e68aaf788 jni::AndroidLogMessage(base::LogLevel, const base::SrcPoint &, const std::__ndk1::basic_string<…> &) logging.cpp:45 $_21::operator()(double) const screen_operations.cpp:124 df::ScaleInto(const ScreenBase &, const m2::Rect<…> &) screen_operations.cpp:131 df::Navigator::SetFromScreen(const ScreenBase &, unsigned int, double) navigator.cpp:28 df::Navigator::SetFromScreen(const ScreenBase &) navigator.cpp:23 df::UserEventStream::SetScreen(const ScreenBase &, bool, const std::__ndk1::function<…> &) user_event_stream.cpp:549 df::UserEventStream::OnMove(ref_ptr<…>) user_event_stream.cpp:378 df::UserEventStream::ProcessEvents(bool &, bool &) user_event_stream.cpp:176 df::FrontendRenderer::ProcessEvents(bool &, bool &) frontend_renderer.cpp:2537 df::FrontendRenderer::RenderFrame() frontend_renderer.cpp:1742 df::BaseRenderer::IterateRenderLoopImpl() base_renderer.cpp:64 df::BaseRenderer::IterateRenderLoop() base_renderer.cpp:59 df::FrontendRenderer::Routine::Do() frontend_renderer.cpp:2441 threads::RunRoutine(std::__ndk1::shared_ptr<…>) thread.cpp:24 decltype(std::__ndk1::forward<void (*)(std::__ndk1::shared_ptr<threads::IRoutine>)>(fp)(std::__ndk1::forward<std::__ndk1::shared_ptr<threads::IRoutine> >(fp0))) std::__ndk1::__invoke<void (*)(std::__ndk1::shared_ptr<threads::IRoutine>), std::__ndk1::shared_ptr<threads::IRoutine> >(void (*&&)(std::__ndk1::shared_ptr<threads::IRoutine>), std::__ndk1::shared_ptr<threads::IRoutine>&&) type_traits:3874 std::__ndk1::__thread_execute<…>(std::__ndk1::tuple<…> &, std::__ndk1::__tuple_indices<…>) thread:273 std::__ndk1::__thread_proxy<…>(void *) thread:284 __pthread_start(void *) 0x0000007e68b12b3c __start_thread 0x0000007e68ab0c64 ```
private static final String TAG = SurfaceRenderer.class.getSimpleName();
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
private final CarContext mCarContext;
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
private final Map mMap;
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
@Nullable
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
private Rect mVisibleArea;
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
@Nullable
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
private Rect mStableArea;
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
public SurfaceRenderer(@NonNull CarContext carContext, @NonNull Lifecycle lifecycle)
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
{
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
Log.d(TAG, "SurfaceRenderer()");
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
mCarContext = carContext;
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
mMap = new Map();
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
lifecycle.addObserver(this);
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
}
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
@Override
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
public void onSurfaceAvailable(@NonNull SurfaceContainer surfaceContainer)
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
{
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
Log.d(TAG, "Surface available " + surfaceContainer);
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
mMap.onSurfaceCreated(
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
Review

Could you please explain how both mobile and car work at the same time? On my phone I still see the map, but with different DPI. I don't really understand how is it possible.

e9056f11fb/android/src/app/organicmaps/Map.java (L120-L123)

Could you please explain how both mobile and car work at the same time? On my phone I still see the map, but with different DPI. I don't really understand how is it possible. https://github.com/organicmaps/organicmaps/blob/e9056f11fbc2cf3c41850701302bba305cbde95a/android/src/app/organicmaps/Map.java#L120-L123
Review

Никак. Мы это обсуждали еще в первых сообщениях этого PR.

@biodranik, please don't overcomplicate things. Yes, it is technically possible in theory. Duplicating in OpenGL/Vulkan should be relatively easy, but the primary challenge on this road will be different screen sizes/resolutions in Auto and on the device. Basically, it will require the full duplication of rendering logic. As far as I can see, entire Google Inc. and Yandex were unable to implement this feature in their Android Auto implementations so far. Let's get Auto screen working first with disabled rendering in the main app.

Поддержки одновременной работы на телефоне и на AA не будет.
Подробнее здесь organicmaps/organicmaps#3806

Никак. Мы это обсуждали еще в первых сообщениях этого PR. > @biodranik, please don't overcomplicate things. Yes, it is technically possible in theory. Duplicating in OpenGL/Vulkan should be relatively easy, but the primary challenge on this road will be different screen sizes/resolutions in Auto and on the device. Basically, it will require the full duplication of rendering logic. As far as I can see, entire Google Inc. and Yandex were unable to implement this feature in their Android Auto implementations so far. Let's get Auto screen working first with disabled rendering in the main app. Поддержки одновременной работы на телефоне и на AA не будет. Подробнее здесь https://git.omaps.dev/organicmaps/organicmaps/pulls/3806#discussion_r1043697281
biodranik commented 2022-12-08 21:25:50 +00:00 (Migrated from github.com)
Review

Нужен удобный UX. Вариант, когда например нужно выбрать сначала маршрут на телефоне, и только потом заработает карта навигатора AA, тоже можно рассмотреть. А вообще, лучше сделать невозможное. По возможности.

Нужен удобный UX. Вариант, когда например нужно выбрать сначала маршрут на телефоне, и только потом заработает карта навигатора AA, тоже можно рассмотреть. А вообще, лучше сделать невозможное. По возможности.
Review

Обсудили это в чате.

Обсудили это в чате.
mCarContext,
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
surfaceContainer.getSurface(),
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
new Rect(0, 0, surfaceContainer.getWidth(), surfaceContainer.getHeight()),
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
surfaceContainer.getDpi()
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
);
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
}
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
@Override
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
public void onVisibleAreaChanged(@NonNull Rect visibleArea)
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
{
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
Log.d(TAG, "Visible area changed. stableArea: " + mStableArea + " visibleArea:" + visibleArea);
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
biodranik commented 2022-12-11 12:30:48 +00:00 (Migrated from github.com)
Review

У нас кажется уже были логи без тэгов?

У нас кажется уже были логи без тэгов?
Review

Не понял комментария.
Касаемо логов в onVisibleAreaChanged и onStableAreaChanged:
Это сделано на будущее. Эти изменения придется учитывать, например двигать центр карты в центр visibleArea и т.п. Со всем этим еще надо разбираться. Потом логи можно будет удалить.

Не понял комментария. Касаемо логов в `onVisibleAreaChanged` и `onStableAreaChanged`: Это сделано на будущее. Эти изменения придется учитывать, например двигать центр карты в центр visibleArea и т.п. Со всем этим еще надо разбираться. Потом логи можно будет удалить.
Review

Логов без TAG у нас нет. Но сейчас лучше использовать Logger.d(TAG, из import app.organicmaps.util.log.Logger;.

Логов без TAG у нас нет. Но сейчас лучше использовать `Logger.d(TAG,` из `import app.organicmaps.util.log.Logger;`.
mVisibleArea = visibleArea;
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
}
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
@Override
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
public void onStableAreaChanged(@NonNull Rect stableArea)
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
{
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
Log.d(TAG, "Stable area changed. stableArea: " + mStableArea + " visibleArea:" + mVisibleArea);
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
mStableArea = stableArea;
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
}
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
@Override
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
public void onSurfaceDestroyed(@NonNull SurfaceContainer surfaceContainer)
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
{
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
Log.d(TAG, "Surface destroyed");
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
mMap.onSurfaceDestroyed(false, true);
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
}
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
@Override
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
public void onCreate(@NonNull LifecycleOwner owner)
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
{
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
Log.d(TAG, "onCreate");
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
mCarContext.getCarService(AppManager.class).setSurfaceCallback(this);
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
// TODO: Properly process deep links from other apps on AA.
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
boolean launchByDeepLink = false;
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
biodranik commented 2022-12-11 12:32:07 +00:00 (Migrated from github.com)
Review

// TODO: Properly process deep links from other apps on AA.

АА вообще позволяет из одних приложений открывать другие? Что будет, если потыкать линки на нашей тестовой странице https://omaps.app/api ?

// TODO: Properly process deep links from other apps on AA. АА вообще позволяет из одних приложений открывать другие? Что будет, если потыкать линки на нашей тестовой странице https://omaps.app/api ?
Review

Позволяет:

  • Голосовой ввод через гугл ассистент
  • Есть приложения по типу поиска парковочных мест, которые могут запустить карту

Касаемо https://omaps.app/api
В AA браузера нет, поэтому с такими ссылками это работать не будет. Можно через телефон их открывать и переадресовывать в AA, но это уже другая история.

Позволяет: * Голосовой ввод через гугл ассистент * Есть приложения по типу поиска парковочных мест, которые могут запустить карту Касаемо https://omaps.app/api В AA браузера нет, поэтому с такими ссылками это работать не будет. Можно через телефон их открывать и переадресовывать в AA, но это уже другая история.
Review

Давайте пока без deeplink здесь обойдемся. Комментарий пусть висит.

Давайте пока без deeplink здесь обойдемся. Комментарий пусть висит.
mMap.onCreate(launchByDeepLink);
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
}
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
@Override
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
public void onStart(@NonNull LifecycleOwner owner)
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
{
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
Log.d(TAG, "onStart");
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
mMap.onStart();
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
mMap.setCallbackUnsupported(this::reportUnsupported);
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
}
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
@Override
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
public void onStop(@NonNull LifecycleOwner owner)
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
{
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
Log.d(TAG, "onStop");
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
mMap.onStop();
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
mMap.setCallbackUnsupported(null);
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
}
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
@Override
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
public void onPause(@NonNull LifecycleOwner owner)
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
{
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
Log.d(TAG, "onPause");
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
mMap.onPause(mCarContext);
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
}
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
@Override
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
public void onResume(@NonNull LifecycleOwner owner)
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
{
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
Log.d(TAG, "onResume");
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
mMap.onResume();
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
}
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
@Override
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
public void onScroll(float distanceX, float distanceY)
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
{
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
Log.d(TAG, "onScroll: distanceX: " + distanceX + ", distanceY: " + distanceY);
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
mMap.onScroll(distanceX, distanceY);
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
}
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
@Override
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
public void onFling(float velocityX, float velocityY)
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
{
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
Log.d(TAG, "onFling: velocityX: " + velocityX + ", velocityY: " + velocityY);
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
}
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
public void onZoomIn()
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
{
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
Map.zoomIn();
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
Review

У меня по клику на +/- карта двигается вверх/вниз вместо zoom in / zoom out.

У меня по клику на +/- карта двигается вверх/вниз вместо zoom in / zoom out.
}
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
public void onZoomOut()
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
{
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
Map.zoomOut();
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
}
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
@Override
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
public void onScale(float focusX, float focusY, float scaleFactor)
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
{
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
Log.d(TAG, "onScale: focusX: " + focusX + ", focusY: " + focusY + ", scaleFactor: " + scaleFactor);
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
float x = focusX;
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
float y = focusY;
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
Rect visibleArea = mVisibleArea;
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
if (visibleArea != null)
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
{
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
// If a focal point value is negative, use the center point of the visible area.
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
if (x < 0)
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
x = visibleArea.centerX();
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
if (y < 0)
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
y = visibleArea.centerY();
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
}
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
final boolean animated = Float.compare(scaleFactor, 2f) == 0;
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
Map.onScale(scaleFactor, x, y, animated);
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
}
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
@Override
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
public void onClick(float x, float y)
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
{
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
Log.d(TAG, "onClick: x: " + x + ", y: " + y);
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
Map.onTouch(x, y);
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
}
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
private void reportUnsupported()
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
{
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
String message = mCarContext.getString(R.string.unsupported_phone);
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
Log.e(TAG, mCarContext.getString(R.string.unsupported_phone));
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
CarToast.makeText(mCarContext, message, CarToast.LENGTH_LONG).show();
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
}
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.
}
biodranik commented 2022-12-11 12:32:28 +00:00 (Migrated from github.com)
Review

Скобки для однострочников не используем.

Скобки для однострочников не используем.
biodranik commented 2022-12-11 12:32:47 +00:00 (Migrated from github.com)
Review

По возможности везде используем final, легче тогда читать код.

По возможности везде используем final, легче тогда читать код.

View file

@ -0,0 +1,47 @@
Review

I suggest merging this code back to SettingsScreen.java. It is not needed anywhere outside SettingsScreen.java.

I suggest merging this code back to `SettingsScreen.java`. It is not needed anywhere outside `SettingsScreen.java`.
Review

It looks like a hack. Why this invalidation is needed in this place?

It looks like a hack. Why this invalidation is needed in this place?
Review

Да, но createSharedPrefsCheckbox, как и createDrivingOptionCheckbox использует иконки чекбоксов. Не хочется каждый раз заново инициализировать иконки. Перемещение их в SettingsScreen приведет к тому, что они будут заново инициализироваться при создании экрана. Плюс есть еще DrivingOptionsScreen, который использует эти же иконки. Надо придумать, где и как их хранить. Это относится не только к чекбоксам, но и к остальным иконкам на других экранах. Пока что решение такое.

Да, но `createSharedPrefsCheckbox`, как и `createDrivingOptionCheckbox` использует иконки чекбоксов. Не хочется каждый раз заново инициализировать иконки. Перемещение их в `SettingsScreen` приведет к тому, что они будут заново инициализироваться при создании экрана. Плюс есть еще `DrivingOptionsScreen`, который использует эти же иконки. Надо придумать, где и как их хранить. Это относится не только к чекбоксам, но и к остальным иконкам на других экранах. Пока что решение такое.
Review

Нельзя изменить иконку на созданном объекте:

  • Создание происходит через Builder. На этапе установки обработчика невозможно получить доступ к объекту
  • В объектах нет методов для изменения его состояния. Т.е. какого-нибудь setIcon(...) нет.

Видимо, такая концепция AA. Приходится перерисовывать весь экран.

Нельзя изменить иконку на созданном объекте: * Создание происходит через Builder. На этапе установки обработчика невозможно получить доступ к объекту * В объектах нет методов для изменения его состояния. Т.е. какого-нибудь `setIcon(...)` нет. Видимо, такая концепция AA. Приходится перерисовывать весь экран.
biodranik commented 2022-12-08 21:23:02 +00:00 (Migrated from github.com)
Review

Там ещё есть ограничение, насколько часто можно перерисовывать экран.

Там ещё есть ограничение, насколько _часто_ можно перерисовывать экран.
Review

Перерисовывать один и тот же экран можно неограниченное количество раз
https://developer.android.com/static/training/cars/Android%20for%20Cars%20App%20Library%20design%20guidelines.pdf
Слайд 11

Перерисовывать один и тот же экран можно неограниченное количество раз https://developer.android.com/static/training/cars/Android%20for%20Cars%20App%20Library%20design%20guidelines.pdf Слайд 11
Review

Ну и конкретно для MapTemplate:

Template Restrictions In regards to template refreshes, as described in onGetTemplate, this template is considered a refresh of a previous one if:
The template title has not changed, and the number of rows and the title (not counting spans) of each row between the previous and new Panes or ItemLists have not changed.

https://developer.android.com/reference/androidx/car/app/navigation/model/MapTemplate

Ну и конкретно для MapTemplate: > Template Restrictions In regards to template refreshes, as described in [onGetTemplate](https://developer.android.com/reference/androidx/car/app/Screen#onGetTemplate()), this template is considered a refresh of a previous one if: The template title has not changed, and the number of rows and the title (not counting spans) of each row between the previous and new [Pane](https://developer.android.com/reference/androidx/car/app/model/Pane)s or [ItemList](https://developer.android.com/reference/androidx/car/app/model/ItemList)s have not changed. https://developer.android.com/reference/androidx/car/app/navigation/model/MapTemplate
biodranik commented 2022-12-11 12:34:26 +00:00 (Migrated from github.com)
Review
  1. Зачем что-то хранить в памяти, если оно не видно на экране/не используется, и нужно только в каких-то исключительных сценариях?
  2. На сколько большой оверхед от этих иконок, что от него важно прямо сейчас подстраховаться?
1. Зачем что-то хранить в памяти, если оно не видно на экране/не используется, и нужно только в каких-то исключительных сценариях? 2. На сколько большой оверхед от этих иконок, что от него важно прямо сейчас подстраховаться?
biodranik commented 2022-12-11 12:35:11 +00:00 (Migrated from github.com)
Review
    builder.setImage(getter.get() ? mCheckboxSelectedIcon : mCheckboxIcon);
```suggestion builder.setImage(getter.get() ? mCheckboxSelectedIcon : mCheckboxIcon); ```
biodranik commented 2022-12-11 12:36:01 +00:00 (Migrated from github.com)
Review

Если getter.get() используется больше одного раза, имеет смысл вынести его в final boolean

Если getter.get() используется больше одного раза, имеет смысл вынести его в `final boolean`
biodranik commented 2022-12-11 12:36:17 +00:00 (Migrated from github.com)
Review

ditto

ditto
Review

Ок. Перенес это в SettingsScreen и DrivingOptionsScreen

Ок. Перенес это в `SettingsScreen` и `DrivingOptionsScreen`
Review

I suggest merging this code back to SettingsScreen.java. It is not needed anywhere outside SettingsScreen.java.

I suggest merging this code back to `SettingsScreen.java`. It is not needed anywhere outside `SettingsScreen.java`.
Review

It looks like a hack. Why this invalidation is needed in this place?

It looks like a hack. Why this invalidation is needed in this place?
Review

Да, но createSharedPrefsCheckbox, как и createDrivingOptionCheckbox использует иконки чекбоксов. Не хочется каждый раз заново инициализировать иконки. Перемещение их в SettingsScreen приведет к тому, что они будут заново инициализироваться при создании экрана. Плюс есть еще DrivingOptionsScreen, который использует эти же иконки. Надо придумать, где и как их хранить. Это относится не только к чекбоксам, но и к остальным иконкам на других экранах. Пока что решение такое.

Да, но `createSharedPrefsCheckbox`, как и `createDrivingOptionCheckbox` использует иконки чекбоксов. Не хочется каждый раз заново инициализировать иконки. Перемещение их в `SettingsScreen` приведет к тому, что они будут заново инициализироваться при создании экрана. Плюс есть еще `DrivingOptionsScreen`, который использует эти же иконки. Надо придумать, где и как их хранить. Это относится не только к чекбоксам, но и к остальным иконкам на других экранах. Пока что решение такое.
Review

Нельзя изменить иконку на созданном объекте:

  • Создание происходит через Builder. На этапе установки обработчика невозможно получить доступ к объекту
  • В объектах нет методов для изменения его состояния. Т.е. какого-нибудь setIcon(...) нет.

Видимо, такая концепция AA. Приходится перерисовывать весь экран.

Нельзя изменить иконку на созданном объекте: * Создание происходит через Builder. На этапе установки обработчика невозможно получить доступ к объекту * В объектах нет методов для изменения его состояния. Т.е. какого-нибудь `setIcon(...)` нет. Видимо, такая концепция AA. Приходится перерисовывать весь экран.
biodranik commented 2022-12-08 21:23:02 +00:00 (Migrated from github.com)
Review

Там ещё есть ограничение, насколько часто можно перерисовывать экран.

Там ещё есть ограничение, насколько _часто_ можно перерисовывать экран.
Review

Перерисовывать один и тот же экран можно неограниченное количество раз
https://developer.android.com/static/training/cars/Android%20for%20Cars%20App%20Library%20design%20guidelines.pdf
Слайд 11

Перерисовывать один и тот же экран можно неограниченное количество раз https://developer.android.com/static/training/cars/Android%20for%20Cars%20App%20Library%20design%20guidelines.pdf Слайд 11
Review

Ну и конкретно для MapTemplate:

Template Restrictions In regards to template refreshes, as described in onGetTemplate, this template is considered a refresh of a previous one if:
The template title has not changed, and the number of rows and the title (not counting spans) of each row between the previous and new Panes or ItemLists have not changed.

https://developer.android.com/reference/androidx/car/app/navigation/model/MapTemplate

Ну и конкретно для MapTemplate: > Template Restrictions In regards to template refreshes, as described in [onGetTemplate](https://developer.android.com/reference/androidx/car/app/Screen#onGetTemplate()), this template is considered a refresh of a previous one if: The template title has not changed, and the number of rows and the title (not counting spans) of each row between the previous and new [Pane](https://developer.android.com/reference/androidx/car/app/model/Pane)s or [ItemList](https://developer.android.com/reference/androidx/car/app/model/ItemList)s have not changed. https://developer.android.com/reference/androidx/car/app/navigation/model/MapTemplate
biodranik commented 2022-12-11 12:34:26 +00:00 (Migrated from github.com)
Review
  1. Зачем что-то хранить в памяти, если оно не видно на экране/не используется, и нужно только в каких-то исключительных сценариях?
  2. На сколько большой оверхед от этих иконок, что от него важно прямо сейчас подстраховаться?
1. Зачем что-то хранить в памяти, если оно не видно на экране/не используется, и нужно только в каких-то исключительных сценариях? 2. На сколько большой оверхед от этих иконок, что от него важно прямо сейчас подстраховаться?
biodranik commented 2022-12-11 12:35:11 +00:00 (Migrated from github.com)
Review
    builder.setImage(getter.get() ? mCheckboxSelectedIcon : mCheckboxIcon);
```suggestion builder.setImage(getter.get() ? mCheckboxSelectedIcon : mCheckboxIcon); ```
biodranik commented 2022-12-11 12:36:01 +00:00 (Migrated from github.com)
Review

Если getter.get() используется больше одного раза, имеет смысл вынести его в final boolean

Если getter.get() используется больше одного раза, имеет смысл вынести его в `final boolean`
biodranik commented 2022-12-11 12:36:17 +00:00 (Migrated from github.com)
Review

ditto

ditto
Review

Ок. Перенес это в SettingsScreen и DrivingOptionsScreen

Ок. Перенес это в `SettingsScreen` и `DrivingOptionsScreen`
package app.organicmaps.car;
Review

I suggest merging this code back to SettingsScreen.java. It is not needed anywhere outside SettingsScreen.java.

I suggest merging this code back to `SettingsScreen.java`. It is not needed anywhere outside `SettingsScreen.java`.
Review

It looks like a hack. Why this invalidation is needed in this place?

It looks like a hack. Why this invalidation is needed in this place?
Review

Да, но createSharedPrefsCheckbox, как и createDrivingOptionCheckbox использует иконки чекбоксов. Не хочется каждый раз заново инициализировать иконки. Перемещение их в SettingsScreen приведет к тому, что они будут заново инициализироваться при создании экрана. Плюс есть еще DrivingOptionsScreen, который использует эти же иконки. Надо придумать, где и как их хранить. Это относится не только к чекбоксам, но и к остальным иконкам на других экранах. Пока что решение такое.

Да, но `createSharedPrefsCheckbox`, как и `createDrivingOptionCheckbox` использует иконки чекбоксов. Не хочется каждый раз заново инициализировать иконки. Перемещение их в `SettingsScreen` приведет к тому, что они будут заново инициализироваться при создании экрана. Плюс есть еще `DrivingOptionsScreen`, который использует эти же иконки. Надо придумать, где и как их хранить. Это относится не только к чекбоксам, но и к остальным иконкам на других экранах. Пока что решение такое.
Review

Нельзя изменить иконку на созданном объекте:

  • Создание происходит через Builder. На этапе установки обработчика невозможно получить доступ к объекту
  • В объектах нет методов для изменения его состояния. Т.е. какого-нибудь setIcon(...) нет.

Видимо, такая концепция AA. Приходится перерисовывать весь экран.

Нельзя изменить иконку на созданном объекте: * Создание происходит через Builder. На этапе установки обработчика невозможно получить доступ к объекту * В объектах нет методов для изменения его состояния. Т.е. какого-нибудь `setIcon(...)` нет. Видимо, такая концепция AA. Приходится перерисовывать весь экран.
biodranik commented 2022-12-08 21:23:02 +00:00 (Migrated from github.com)
Review

Там ещё есть ограничение, насколько часто можно перерисовывать экран.

Там ещё есть ограничение, насколько _часто_ можно перерисовывать экран.
Review

Перерисовывать один и тот же экран можно неограниченное количество раз
https://developer.android.com/static/training/cars/Android%20for%20Cars%20App%20Library%20design%20guidelines.pdf
Слайд 11

Перерисовывать один и тот же экран можно неограниченное количество раз https://developer.android.com/static/training/cars/Android%20for%20Cars%20App%20Library%20design%20guidelines.pdf Слайд 11
Review

Ну и конкретно для MapTemplate:

Template Restrictions In regards to template refreshes, as described in onGetTemplate, this template is considered a refresh of a previous one if:
The template title has not changed, and the number of rows and the title (not counting spans) of each row between the previous and new Panes or ItemLists have not changed.

https://developer.android.com/reference/androidx/car/app/navigation/model/MapTemplate

Ну и конкретно для MapTemplate: > Template Restrictions In regards to template refreshes, as described in [onGetTemplate](https://developer.android.com/reference/androidx/car/app/Screen#onGetTemplate()), this template is considered a refresh of a previous one if: The template title has not changed, and the number of rows and the title (not counting spans) of each row between the previous and new [Pane](https://developer.android.com/reference/androidx/car/app/model/Pane)s or [ItemList](https://developer.android.com/reference/androidx/car/app/model/ItemList)s have not changed. https://developer.android.com/reference/androidx/car/app/navigation/model/MapTemplate
biodranik commented 2022-12-11 12:34:26 +00:00 (Migrated from github.com)
Review
  1. Зачем что-то хранить в памяти, если оно не видно на экране/не используется, и нужно только в каких-то исключительных сценариях?
  2. На сколько большой оверхед от этих иконок, что от него важно прямо сейчас подстраховаться?
1. Зачем что-то хранить в памяти, если оно не видно на экране/не используется, и нужно только в каких-то исключительных сценариях? 2. На сколько большой оверхед от этих иконок, что от него важно прямо сейчас подстраховаться?
biodranik commented 2022-12-11 12:35:11 +00:00 (Migrated from github.com)
Review
    builder.setImage(getter.get() ? mCheckboxSelectedIcon : mCheckboxIcon);
```suggestion builder.setImage(getter.get() ? mCheckboxSelectedIcon : mCheckboxIcon); ```
biodranik commented 2022-12-11 12:36:01 +00:00 (Migrated from github.com)
Review

Если getter.get() используется больше одного раза, имеет смысл вынести его в final boolean

Если getter.get() используется больше одного раза, имеет смысл вынести его в `final boolean`
biodranik commented 2022-12-11 12:36:17 +00:00 (Migrated from github.com)
Review

ditto

ditto
Review

Ок. Перенес это в SettingsScreen и DrivingOptionsScreen

Ок. Перенес это в `SettingsScreen` и `DrivingOptionsScreen`
Review

I suggest merging this code back to SettingsScreen.java. It is not needed anywhere outside SettingsScreen.java.

I suggest merging this code back to `SettingsScreen.java`. It is not needed anywhere outside `SettingsScreen.java`.
Review

It looks like a hack. Why this invalidation is needed in this place?

It looks like a hack. Why this invalidation is needed in this place?
Review

Да, но createSharedPrefsCheckbox, как и createDrivingOptionCheckbox использует иконки чекбоксов. Не хочется каждый раз заново инициализировать иконки. Перемещение их в SettingsScreen приведет к тому, что они будут заново инициализироваться при создании экрана. Плюс есть еще DrivingOptionsScreen, который использует эти же иконки. Надо придумать, где и как их хранить. Это относится не только к чекбоксам, но и к остальным иконкам на других экранах. Пока что решение такое.

Да, но `createSharedPrefsCheckbox`, как и `createDrivingOptionCheckbox` использует иконки чекбоксов. Не хочется каждый раз заново инициализировать иконки. Перемещение их в `SettingsScreen` приведет к тому, что они будут заново инициализироваться при создании экрана. Плюс есть еще `DrivingOptionsScreen`, который использует эти же иконки. Надо придумать, где и как их хранить. Это относится не только к чекбоксам, но и к остальным иконкам на других экранах. Пока что решение такое.
Review

Нельзя изменить иконку на созданном объекте:

  • Создание происходит через Builder. На этапе установки обработчика невозможно получить доступ к объекту
  • В объектах нет методов для изменения его состояния. Т.е. какого-нибудь setIcon(...) нет.

Видимо, такая концепция AA. Приходится перерисовывать весь экран.

Нельзя изменить иконку на созданном объекте: * Создание происходит через Builder. На этапе установки обработчика невозможно получить доступ к объекту * В объектах нет методов для изменения его состояния. Т.е. какого-нибудь `setIcon(...)` нет. Видимо, такая концепция AA. Приходится перерисовывать весь экран.
biodranik commented 2022-12-08 21:23:02 +00:00 (Migrated from github.com)
Review

Там ещё есть ограничение, насколько часто можно перерисовывать экран.

Там ещё есть ограничение, насколько _часто_ можно перерисовывать экран.
Review

Перерисовывать один и тот же экран можно неограниченное количество раз
https://developer.android.com/static/training/cars/Android%20for%20Cars%20App%20Library%20design%20guidelines.pdf
Слайд 11

Перерисовывать один и тот же экран можно неограниченное количество раз https://developer.android.com/static/training/cars/Android%20for%20Cars%20App%20Library%20design%20guidelines.pdf Слайд 11
Review

Ну и конкретно для MapTemplate:

Template Restrictions In regards to template refreshes, as described in onGetTemplate, this template is considered a refresh of a previous one if:
The template title has not changed, and the number of rows and the title (not counting spans) of each row between the previous and new Panes or ItemLists have not changed.

https://developer.android.com/reference/androidx/car/app/navigation/model/MapTemplate

Ну и конкретно для MapTemplate: > Template Restrictions In regards to template refreshes, as described in [onGetTemplate](https://developer.android.com/reference/androidx/car/app/Screen#onGetTemplate()), this template is considered a refresh of a previous one if: The template title has not changed, and the number of rows and the title (not counting spans) of each row between the previous and new [Pane](https://developer.android.com/reference/androidx/car/app/model/Pane)s or [ItemList](https://developer.android.com/reference/androidx/car/app/model/ItemList)s have not changed. https://developer.android.com/reference/androidx/car/app/navigation/model/MapTemplate
biodranik commented 2022-12-11 12:34:26 +00:00 (Migrated from github.com)
Review
  1. Зачем что-то хранить в памяти, если оно не видно на экране/не используется, и нужно только в каких-то исключительных сценариях?
  2. На сколько большой оверхед от этих иконок, что от него важно прямо сейчас подстраховаться?
1. Зачем что-то хранить в памяти, если оно не видно на экране/не используется, и нужно только в каких-то исключительных сценариях? 2. На сколько большой оверхед от этих иконок, что от него важно прямо сейчас подстраховаться?
biodranik commented 2022-12-11 12:35:11 +00:00 (Migrated from github.com)
Review
    builder.setImage(getter.get() ? mCheckboxSelectedIcon : mCheckboxIcon);
```suggestion builder.setImage(getter.get() ? mCheckboxSelectedIcon : mCheckboxIcon); ```
biodranik commented 2022-12-11 12:36:01 +00:00 (Migrated from github.com)
Review

Если getter.get() используется больше одного раза, имеет смысл вынести его в final boolean

Если getter.get() используется больше одного раза, имеет смысл вынести его в `final boolean`
biodranik commented 2022-12-11 12:36:17 +00:00 (Migrated from github.com)
Review

ditto

ditto
Review

Ок. Перенес это в SettingsScreen и DrivingOptionsScreen

Ок. Перенес это в `SettingsScreen` и `DrivingOptionsScreen`
import androidx.annotation.NonNull;
Review

I suggest merging this code back to SettingsScreen.java. It is not needed anywhere outside SettingsScreen.java.

I suggest merging this code back to `SettingsScreen.java`. It is not needed anywhere outside `SettingsScreen.java`.
Review

It looks like a hack. Why this invalidation is needed in this place?

It looks like a hack. Why this invalidation is needed in this place?
Review

Да, но createSharedPrefsCheckbox, как и createDrivingOptionCheckbox использует иконки чекбоксов. Не хочется каждый раз заново инициализировать иконки. Перемещение их в SettingsScreen приведет к тому, что они будут заново инициализироваться при создании экрана. Плюс есть еще DrivingOptionsScreen, который использует эти же иконки. Надо придумать, где и как их хранить. Это относится не только к чекбоксам, но и к остальным иконкам на других экранах. Пока что решение такое.

Да, но `createSharedPrefsCheckbox`, как и `createDrivingOptionCheckbox` использует иконки чекбоксов. Не хочется каждый раз заново инициализировать иконки. Перемещение их в `SettingsScreen` приведет к тому, что они будут заново инициализироваться при создании экрана. Плюс есть еще `DrivingOptionsScreen`, который использует эти же иконки. Надо придумать, где и как их хранить. Это относится не только к чекбоксам, но и к остальным иконкам на других экранах. Пока что решение такое.
Review

Нельзя изменить иконку на созданном объекте:

  • Создание происходит через Builder. На этапе установки обработчика невозможно получить доступ к объекту
  • В объектах нет методов для изменения его состояния. Т.е. какого-нибудь setIcon(...) нет.

Видимо, такая концепция AA. Приходится перерисовывать весь экран.

Нельзя изменить иконку на созданном объекте: * Создание происходит через Builder. На этапе установки обработчика невозможно получить доступ к объекту * В объектах нет методов для изменения его состояния. Т.е. какого-нибудь `setIcon(...)` нет. Видимо, такая концепция AA. Приходится перерисовывать весь экран.
biodranik commented 2022-12-08 21:23:02 +00:00 (Migrated from github.com)
Review

Там ещё есть ограничение, насколько часто можно перерисовывать экран.

Там ещё есть ограничение, насколько _часто_ можно перерисовывать экран.
Review

Перерисовывать один и тот же экран можно неограниченное количество раз
https://developer.android.com/static/training/cars/Android%20for%20Cars%20App%20Library%20design%20guidelines.pdf
Слайд 11

Перерисовывать один и тот же экран можно неограниченное количество раз https://developer.android.com/static/training/cars/Android%20for%20Cars%20App%20Library%20design%20guidelines.pdf Слайд 11
Review

Ну и конкретно для MapTemplate:

Template Restrictions In regards to template refreshes, as described in onGetTemplate, this template is considered a refresh of a previous one if:
The template title has not changed, and the number of rows and the title (not counting spans) of each row between the previous and new Panes or ItemLists have not changed.

https://developer.android.com/reference/androidx/car/app/navigation/model/MapTemplate

Ну и конкретно для MapTemplate: > Template Restrictions In regards to template refreshes, as described in [onGetTemplate](https://developer.android.com/reference/androidx/car/app/Screen#onGetTemplate()), this template is considered a refresh of a previous one if: The template title has not changed, and the number of rows and the title (not counting spans) of each row between the previous and new [Pane](https://developer.android.com/reference/androidx/car/app/model/Pane)s or [ItemList](https://developer.android.com/reference/androidx/car/app/model/ItemList)s have not changed. https://developer.android.com/reference/androidx/car/app/navigation/model/MapTemplate
biodranik commented 2022-12-11 12:34:26 +00:00 (Migrated from github.com)
Review
  1. Зачем что-то хранить в памяти, если оно не видно на экране/не используется, и нужно только в каких-то исключительных сценариях?
  2. На сколько большой оверхед от этих иконок, что от него важно прямо сейчас подстраховаться?
1. Зачем что-то хранить в памяти, если оно не видно на экране/не используется, и нужно только в каких-то исключительных сценариях? 2. На сколько большой оверхед от этих иконок, что от него важно прямо сейчас подстраховаться?
biodranik commented 2022-12-11 12:35:11 +00:00 (Migrated from github.com)
Review
    builder.setImage(getter.get() ? mCheckboxSelectedIcon : mCheckboxIcon);
```suggestion builder.setImage(getter.get() ? mCheckboxSelectedIcon : mCheckboxIcon); ```
biodranik commented 2022-12-11 12:36:01 +00:00 (Migrated from github.com)
Review

Если getter.get() используется больше одного раза, имеет смысл вынести его в final boolean

Если getter.get() используется больше одного раза, имеет смысл вынести его в `final boolean`
biodranik commented 2022-12-11 12:36:17 +00:00 (Migrated from github.com)
Review

ditto

ditto
Review

Ок. Перенес это в SettingsScreen и DrivingOptionsScreen

Ок. Перенес это в `SettingsScreen` и `DrivingOptionsScreen`
import androidx.car.app.CarContext;
Review

I suggest merging this code back to SettingsScreen.java. It is not needed anywhere outside SettingsScreen.java.

I suggest merging this code back to `SettingsScreen.java`. It is not needed anywhere outside `SettingsScreen.java`.
Review

It looks like a hack. Why this invalidation is needed in this place?

It looks like a hack. Why this invalidation is needed in this place?
Review

Да, но createSharedPrefsCheckbox, как и createDrivingOptionCheckbox использует иконки чекбоксов. Не хочется каждый раз заново инициализировать иконки. Перемещение их в SettingsScreen приведет к тому, что они будут заново инициализироваться при создании экрана. Плюс есть еще DrivingOptionsScreen, который использует эти же иконки. Надо придумать, где и как их хранить. Это относится не только к чекбоксам, но и к остальным иконкам на других экранах. Пока что решение такое.

Да, но `createSharedPrefsCheckbox`, как и `createDrivingOptionCheckbox` использует иконки чекбоксов. Не хочется каждый раз заново инициализировать иконки. Перемещение их в `SettingsScreen` приведет к тому, что они будут заново инициализироваться при создании экрана. Плюс есть еще `DrivingOptionsScreen`, который использует эти же иконки. Надо придумать, где и как их хранить. Это относится не только к чекбоксам, но и к остальным иконкам на других экранах. Пока что решение такое.
Review

Нельзя изменить иконку на созданном объекте:

  • Создание происходит через Builder. На этапе установки обработчика невозможно получить доступ к объекту
  • В объектах нет методов для изменения его состояния. Т.е. какого-нибудь setIcon(...) нет.

Видимо, такая концепция AA. Приходится перерисовывать весь экран.

Нельзя изменить иконку на созданном объекте: * Создание происходит через Builder. На этапе установки обработчика невозможно получить доступ к объекту * В объектах нет методов для изменения его состояния. Т.е. какого-нибудь `setIcon(...)` нет. Видимо, такая концепция AA. Приходится перерисовывать весь экран.
biodranik commented 2022-12-08 21:23:02 +00:00 (Migrated from github.com)
Review

Там ещё есть ограничение, насколько часто можно перерисовывать экран.

Там ещё есть ограничение, насколько _часто_ можно перерисовывать экран.
Review

Перерисовывать один и тот же экран можно неограниченное количество раз
https://developer.android.com/static/training/cars/Android%20for%20Cars%20App%20Library%20design%20guidelines.pdf
Слайд 11

Перерисовывать один и тот же экран можно неограниченное количество раз https://developer.android.com/static/training/cars/Android%20for%20Cars%20App%20Library%20design%20guidelines.pdf Слайд 11
Review

Ну и конкретно для MapTemplate:

Template Restrictions In regards to template refreshes, as described in onGetTemplate, this template is considered a refresh of a previous one if:
The template title has not changed, and the number of rows and the title (not counting spans) of each row between the previous and new Panes or ItemLists have not changed.

https://developer.android.com/reference/androidx/car/app/navigation/model/MapTemplate

Ну и конкретно для MapTemplate: > Template Restrictions In regards to template refreshes, as described in [onGetTemplate](https://developer.android.com/reference/androidx/car/app/Screen#onGetTemplate()), this template is considered a refresh of a previous one if: The template title has not changed, and the number of rows and the title (not counting spans) of each row between the previous and new [Pane](https://developer.android.com/reference/androidx/car/app/model/Pane)s or [ItemList](https://developer.android.com/reference/androidx/car/app/model/ItemList)s have not changed. https://developer.android.com/reference/androidx/car/app/navigation/model/MapTemplate
biodranik commented 2022-12-11 12:34:26 +00:00 (Migrated from github.com)
Review
  1. Зачем что-то хранить в памяти, если оно не видно на экране/не используется, и нужно только в каких-то исключительных сценариях?
  2. На сколько большой оверхед от этих иконок, что от него важно прямо сейчас подстраховаться?
1. Зачем что-то хранить в памяти, если оно не видно на экране/не используется, и нужно только в каких-то исключительных сценариях? 2. На сколько большой оверхед от этих иконок, что от него важно прямо сейчас подстраховаться?
biodranik commented 2022-12-11 12:35:11 +00:00 (Migrated from github.com)
Review
    builder.setImage(getter.get() ? mCheckboxSelectedIcon : mCheckboxIcon);
```suggestion builder.setImage(getter.get() ? mCheckboxSelectedIcon : mCheckboxIcon); ```
biodranik commented 2022-12-11 12:36:01 +00:00 (Migrated from github.com)
Review

Если getter.get() используется больше одного раза, имеет смысл вынести его в final boolean

Если getter.get() используется больше одного раза, имеет смысл вынести его в `final boolean`
biodranik commented 2022-12-11 12:36:17 +00:00 (Migrated from github.com)
Review

ditto

ditto
Review

Ок. Перенес это в SettingsScreen и DrivingOptionsScreen

Ок. Перенес это в `SettingsScreen` и `DrivingOptionsScreen`
import androidx.car.app.CarToast;
Review

I suggest merging this code back to SettingsScreen.java. It is not needed anywhere outside SettingsScreen.java.

I suggest merging this code back to `SettingsScreen.java`. It is not needed anywhere outside `SettingsScreen.java`.
Review

It looks like a hack. Why this invalidation is needed in this place?

It looks like a hack. Why this invalidation is needed in this place?
Review

Да, но createSharedPrefsCheckbox, как и createDrivingOptionCheckbox использует иконки чекбоксов. Не хочется каждый раз заново инициализировать иконки. Перемещение их в SettingsScreen приведет к тому, что они будут заново инициализироваться при создании экрана. Плюс есть еще DrivingOptionsScreen, который использует эти же иконки. Надо придумать, где и как их хранить. Это относится не только к чекбоксам, но и к остальным иконкам на других экранах. Пока что решение такое.

Да, но `createSharedPrefsCheckbox`, как и `createDrivingOptionCheckbox` использует иконки чекбоксов. Не хочется каждый раз заново инициализировать иконки. Перемещение их в `SettingsScreen` приведет к тому, что они будут заново инициализироваться при создании экрана. Плюс есть еще `DrivingOptionsScreen`, который использует эти же иконки. Надо придумать, где и как их хранить. Это относится не только к чекбоксам, но и к остальным иконкам на других экранах. Пока что решение такое.
Review

Нельзя изменить иконку на созданном объекте:

  • Создание происходит через Builder. На этапе установки обработчика невозможно получить доступ к объекту
  • В объектах нет методов для изменения его состояния. Т.е. какого-нибудь setIcon(...) нет.

Видимо, такая концепция AA. Приходится перерисовывать весь экран.

Нельзя изменить иконку на созданном объекте: * Создание происходит через Builder. На этапе установки обработчика невозможно получить доступ к объекту * В объектах нет методов для изменения его состояния. Т.е. какого-нибудь `setIcon(...)` нет. Видимо, такая концепция AA. Приходится перерисовывать весь экран.
biodranik commented 2022-12-08 21:23:02 +00:00 (Migrated from github.com)
Review

Там ещё есть ограничение, насколько часто можно перерисовывать экран.

Там ещё есть ограничение, насколько _часто_ можно перерисовывать экран.
Review

Перерисовывать один и тот же экран можно неограниченное количество раз
https://developer.android.com/static/training/cars/Android%20for%20Cars%20App%20Library%20design%20guidelines.pdf
Слайд 11

Перерисовывать один и тот же экран можно неограниченное количество раз https://developer.android.com/static/training/cars/Android%20for%20Cars%20App%20Library%20design%20guidelines.pdf Слайд 11
Review

Ну и конкретно для MapTemplate:

Template Restrictions In regards to template refreshes, as described in onGetTemplate, this template is considered a refresh of a previous one if:
The template title has not changed, and the number of rows and the title (not counting spans) of each row between the previous and new Panes or ItemLists have not changed.

https://developer.android.com/reference/androidx/car/app/navigation/model/MapTemplate

Ну и конкретно для MapTemplate: > Template Restrictions In regards to template refreshes, as described in [onGetTemplate](https://developer.android.com/reference/androidx/car/app/Screen#onGetTemplate()), this template is considered a refresh of a previous one if: The template title has not changed, and the number of rows and the title (not counting spans) of each row between the previous and new [Pane](https://developer.android.com/reference/androidx/car/app/model/Pane)s or [ItemList](https://developer.android.com/reference/androidx/car/app/model/ItemList)s have not changed. https://developer.android.com/reference/androidx/car/app/navigation/model/MapTemplate
biodranik commented 2022-12-11 12:34:26 +00:00 (Migrated from github.com)
Review
  1. Зачем что-то хранить в памяти, если оно не видно на экране/не используется, и нужно только в каких-то исключительных сценариях?
  2. На сколько большой оверхед от этих иконок, что от него важно прямо сейчас подстраховаться?
1. Зачем что-то хранить в памяти, если оно не видно на экране/не используется, и нужно только в каких-то исключительных сценариях? 2. На сколько большой оверхед от этих иконок, что от него важно прямо сейчас подстраховаться?
biodranik commented 2022-12-11 12:35:11 +00:00 (Migrated from github.com)
Review
    builder.setImage(getter.get() ? mCheckboxSelectedIcon : mCheckboxIcon);
```suggestion builder.setImage(getter.get() ? mCheckboxSelectedIcon : mCheckboxIcon); ```
biodranik commented 2022-12-11 12:36:01 +00:00 (Migrated from github.com)
Review

Если getter.get() используется больше одного раза, имеет смысл вынести его в final boolean

Если getter.get() используется больше одного раза, имеет смысл вынести его в `final boolean`
biodranik commented 2022-12-11 12:36:17 +00:00 (Migrated from github.com)
Review

ditto

ditto
Review

Ок. Перенес это в SettingsScreen и DrivingOptionsScreen

Ок. Перенес это в `SettingsScreen` и `DrivingOptionsScreen`
import androidx.car.app.ScreenManager;
Review

I suggest merging this code back to SettingsScreen.java. It is not needed anywhere outside SettingsScreen.java.

I suggest merging this code back to `SettingsScreen.java`. It is not needed anywhere outside `SettingsScreen.java`.
Review

It looks like a hack. Why this invalidation is needed in this place?

It looks like a hack. Why this invalidation is needed in this place?
Review

Да, но createSharedPrefsCheckbox, как и createDrivingOptionCheckbox использует иконки чекбоксов. Не хочется каждый раз заново инициализировать иконки. Перемещение их в SettingsScreen приведет к тому, что они будут заново инициализироваться при создании экрана. Плюс есть еще DrivingOptionsScreen, который использует эти же иконки. Надо придумать, где и как их хранить. Это относится не только к чекбоксам, но и к остальным иконкам на других экранах. Пока что решение такое.

Да, но `createSharedPrefsCheckbox`, как и `createDrivingOptionCheckbox` использует иконки чекбоксов. Не хочется каждый раз заново инициализировать иконки. Перемещение их в `SettingsScreen` приведет к тому, что они будут заново инициализироваться при создании экрана. Плюс есть еще `DrivingOptionsScreen`, который использует эти же иконки. Надо придумать, где и как их хранить. Это относится не только к чекбоксам, но и к остальным иконкам на других экранах. Пока что решение такое.
Review

Нельзя изменить иконку на созданном объекте:

  • Создание происходит через Builder. На этапе установки обработчика невозможно получить доступ к объекту
  • В объектах нет методов для изменения его состояния. Т.е. какого-нибудь setIcon(...) нет.

Видимо, такая концепция AA. Приходится перерисовывать весь экран.

Нельзя изменить иконку на созданном объекте: * Создание происходит через Builder. На этапе установки обработчика невозможно получить доступ к объекту * В объектах нет методов для изменения его состояния. Т.е. какого-нибудь `setIcon(...)` нет. Видимо, такая концепция AA. Приходится перерисовывать весь экран.
biodranik commented 2022-12-08 21:23:02 +00:00 (Migrated from github.com)
Review

Там ещё есть ограничение, насколько часто можно перерисовывать экран.

Там ещё есть ограничение, насколько _часто_ можно перерисовывать экран.
Review

Перерисовывать один и тот же экран можно неограниченное количество раз
https://developer.android.com/static/training/cars/Android%20for%20Cars%20App%20Library%20design%20guidelines.pdf
Слайд 11

Перерисовывать один и тот же экран можно неограниченное количество раз https://developer.android.com/static/training/cars/Android%20for%20Cars%20App%20Library%20design%20guidelines.pdf Слайд 11
Review

Ну и конкретно для MapTemplate:

Template Restrictions In regards to template refreshes, as described in onGetTemplate, this template is considered a refresh of a previous one if:
The template title has not changed, and the number of rows and the title (not counting spans) of each row between the previous and new Panes or ItemLists have not changed.

https://developer.android.com/reference/androidx/car/app/navigation/model/MapTemplate

Ну и конкретно для MapTemplate: > Template Restrictions In regards to template refreshes, as described in [onGetTemplate](https://developer.android.com/reference/androidx/car/app/Screen#onGetTemplate()), this template is considered a refresh of a previous one if: The template title has not changed, and the number of rows and the title (not counting spans) of each row between the previous and new [Pane](https://developer.android.com/reference/androidx/car/app/model/Pane)s or [ItemList](https://developer.android.com/reference/androidx/car/app/model/ItemList)s have not changed. https://developer.android.com/reference/androidx/car/app/navigation/model/MapTemplate
biodranik commented 2022-12-11 12:34:26 +00:00 (Migrated from github.com)
Review
  1. Зачем что-то хранить в памяти, если оно не видно на экране/не используется, и нужно только в каких-то исключительных сценариях?
  2. На сколько большой оверхед от этих иконок, что от него важно прямо сейчас подстраховаться?
1. Зачем что-то хранить в памяти, если оно не видно на экране/не используется, и нужно только в каких-то исключительных сценариях? 2. На сколько большой оверхед от этих иконок, что от него важно прямо сейчас подстраховаться?
biodranik commented 2022-12-11 12:35:11 +00:00 (Migrated from github.com)
Review
    builder.setImage(getter.get() ? mCheckboxSelectedIcon : mCheckboxIcon);
```suggestion builder.setImage(getter.get() ? mCheckboxSelectedIcon : mCheckboxIcon); ```
biodranik commented 2022-12-11 12:36:01 +00:00 (Migrated from github.com)
Review

Если getter.get() используется больше одного раза, имеет смысл вынести его в final boolean

Если getter.get() используется больше одного раза, имеет смысл вынести его в `final boolean`
biodranik commented 2022-12-11 12:36:17 +00:00 (Migrated from github.com)
Review

ditto

ditto
Review

Ок. Перенес это в SettingsScreen и DrivingOptionsScreen

Ок. Перенес это в `SettingsScreen` и `DrivingOptionsScreen`
import androidx.car.app.model.Action;
Review

I suggest merging this code back to SettingsScreen.java. It is not needed anywhere outside SettingsScreen.java.

I suggest merging this code back to `SettingsScreen.java`. It is not needed anywhere outside `SettingsScreen.java`.
Review

It looks like a hack. Why this invalidation is needed in this place?

It looks like a hack. Why this invalidation is needed in this place?
Review

Да, но createSharedPrefsCheckbox, как и createDrivingOptionCheckbox использует иконки чекбоксов. Не хочется каждый раз заново инициализировать иконки. Перемещение их в SettingsScreen приведет к тому, что они будут заново инициализироваться при создании экрана. Плюс есть еще DrivingOptionsScreen, который использует эти же иконки. Надо придумать, где и как их хранить. Это относится не только к чекбоксам, но и к остальным иконкам на других экранах. Пока что решение такое.

Да, но `createSharedPrefsCheckbox`, как и `createDrivingOptionCheckbox` использует иконки чекбоксов. Не хочется каждый раз заново инициализировать иконки. Перемещение их в `SettingsScreen` приведет к тому, что они будут заново инициализироваться при создании экрана. Плюс есть еще `DrivingOptionsScreen`, который использует эти же иконки. Надо придумать, где и как их хранить. Это относится не только к чекбоксам, но и к остальным иконкам на других экранах. Пока что решение такое.
Review

Нельзя изменить иконку на созданном объекте:

  • Создание происходит через Builder. На этапе установки обработчика невозможно получить доступ к объекту
  • В объектах нет методов для изменения его состояния. Т.е. какого-нибудь setIcon(...) нет.

Видимо, такая концепция AA. Приходится перерисовывать весь экран.

Нельзя изменить иконку на созданном объекте: * Создание происходит через Builder. На этапе установки обработчика невозможно получить доступ к объекту * В объектах нет методов для изменения его состояния. Т.е. какого-нибудь `setIcon(...)` нет. Видимо, такая концепция AA. Приходится перерисовывать весь экран.
biodranik commented 2022-12-08 21:23:02 +00:00 (Migrated from github.com)
Review

Там ещё есть ограничение, насколько часто можно перерисовывать экран.

Там ещё есть ограничение, насколько _часто_ можно перерисовывать экран.
Review

Перерисовывать один и тот же экран можно неограниченное количество раз
https://developer.android.com/static/training/cars/Android%20for%20Cars%20App%20Library%20design%20guidelines.pdf
Слайд 11

Перерисовывать один и тот же экран можно неограниченное количество раз https://developer.android.com/static/training/cars/Android%20for%20Cars%20App%20Library%20design%20guidelines.pdf Слайд 11
Review

Ну и конкретно для MapTemplate:

Template Restrictions In regards to template refreshes, as described in onGetTemplate, this template is considered a refresh of a previous one if:
The template title has not changed, and the number of rows and the title (not counting spans) of each row between the previous and new Panes or ItemLists have not changed.

https://developer.android.com/reference/androidx/car/app/navigation/model/MapTemplate

Ну и конкретно для MapTemplate: > Template Restrictions In regards to template refreshes, as described in [onGetTemplate](https://developer.android.com/reference/androidx/car/app/Screen#onGetTemplate()), this template is considered a refresh of a previous one if: The template title has not changed, and the number of rows and the title (not counting spans) of each row between the previous and new [Pane](https://developer.android.com/reference/androidx/car/app/model/Pane)s or [ItemList](https://developer.android.com/reference/androidx/car/app/model/ItemList)s have not changed. https://developer.android.com/reference/androidx/car/app/navigation/model/MapTemplate
biodranik commented 2022-12-11 12:34:26 +00:00 (Migrated from github.com)
Review
  1. Зачем что-то хранить в памяти, если оно не видно на экране/не используется, и нужно только в каких-то исключительных сценариях?
  2. На сколько большой оверхед от этих иконок, что от него важно прямо сейчас подстраховаться?
1. Зачем что-то хранить в памяти, если оно не видно на экране/не используется, и нужно только в каких-то исключительных сценариях? 2. На сколько большой оверхед от этих иконок, что от него важно прямо сейчас подстраховаться?
biodranik commented 2022-12-11 12:35:11 +00:00 (Migrated from github.com)
Review
    builder.setImage(getter.get() ? mCheckboxSelectedIcon : mCheckboxIcon);
```suggestion builder.setImage(getter.get() ? mCheckboxSelectedIcon : mCheckboxIcon); ```
biodranik commented 2022-12-11 12:36:01 +00:00 (Migrated from github.com)
Review

Если getter.get() используется больше одного раза, имеет смысл вынести его в final boolean

Если getter.get() используется больше одного раза, имеет смысл вынести его в `final boolean`
biodranik commented 2022-12-11 12:36:17 +00:00 (Migrated from github.com)
Review

ditto

ditto
Review

Ок. Перенес это в SettingsScreen и DrivingOptionsScreen

Ок. Перенес это в `SettingsScreen` и `DrivingOptionsScreen`
import androidx.car.app.model.ActionStrip;
Review

I suggest merging this code back to SettingsScreen.java. It is not needed anywhere outside SettingsScreen.java.

I suggest merging this code back to `SettingsScreen.java`. It is not needed anywhere outside `SettingsScreen.java`.
Review

It looks like a hack. Why this invalidation is needed in this place?

It looks like a hack. Why this invalidation is needed in this place?
Review

Да, но createSharedPrefsCheckbox, как и createDrivingOptionCheckbox использует иконки чекбоксов. Не хочется каждый раз заново инициализировать иконки. Перемещение их в SettingsScreen приведет к тому, что они будут заново инициализироваться при создании экрана. Плюс есть еще DrivingOptionsScreen, который использует эти же иконки. Надо придумать, где и как их хранить. Это относится не только к чекбоксам, но и к остальным иконкам на других экранах. Пока что решение такое.

Да, но `createSharedPrefsCheckbox`, как и `createDrivingOptionCheckbox` использует иконки чекбоксов. Не хочется каждый раз заново инициализировать иконки. Перемещение их в `SettingsScreen` приведет к тому, что они будут заново инициализироваться при создании экрана. Плюс есть еще `DrivingOptionsScreen`, который использует эти же иконки. Надо придумать, где и как их хранить. Это относится не только к чекбоксам, но и к остальным иконкам на других экранах. Пока что решение такое.
Review

Нельзя изменить иконку на созданном объекте:

  • Создание происходит через Builder. На этапе установки обработчика невозможно получить доступ к объекту
  • В объектах нет методов для изменения его состояния. Т.е. какого-нибудь setIcon(...) нет.

Видимо, такая концепция AA. Приходится перерисовывать весь экран.

Нельзя изменить иконку на созданном объекте: * Создание происходит через Builder. На этапе установки обработчика невозможно получить доступ к объекту * В объектах нет методов для изменения его состояния. Т.е. какого-нибудь `setIcon(...)` нет. Видимо, такая концепция AA. Приходится перерисовывать весь экран.
biodranik commented 2022-12-08 21:23:02 +00:00 (Migrated from github.com)
Review

Там ещё есть ограничение, насколько часто можно перерисовывать экран.

Там ещё есть ограничение, насколько _часто_ можно перерисовывать экран.
Review

Перерисовывать один и тот же экран можно неограниченное количество раз
https://developer.android.com/static/training/cars/Android%20for%20Cars%20App%20Library%20design%20guidelines.pdf
Слайд 11

Перерисовывать один и тот же экран можно неограниченное количество раз https://developer.android.com/static/training/cars/Android%20for%20Cars%20App%20Library%20design%20guidelines.pdf Слайд 11
Review

Ну и конкретно для MapTemplate:

Template Restrictions In regards to template refreshes, as described in onGetTemplate, this template is considered a refresh of a previous one if:
The template title has not changed, and the number of rows and the title (not counting spans) of each row between the previous and new Panes or ItemLists have not changed.

https://developer.android.com/reference/androidx/car/app/navigation/model/MapTemplate

Ну и конкретно для MapTemplate: > Template Restrictions In regards to template refreshes, as described in [onGetTemplate](https://developer.android.com/reference/androidx/car/app/Screen#onGetTemplate()), this template is considered a refresh of a previous one if: The template title has not changed, and the number of rows and the title (not counting spans) of each row between the previous and new [Pane](https://developer.android.com/reference/androidx/car/app/model/Pane)s or [ItemList](https://developer.android.com/reference/androidx/car/app/model/ItemList)s have not changed. https://developer.android.com/reference/androidx/car/app/navigation/model/MapTemplate
biodranik commented 2022-12-11 12:34:26 +00:00 (Migrated from github.com)
Review
  1. Зачем что-то хранить в памяти, если оно не видно на экране/не используется, и нужно только в каких-то исключительных сценариях?
  2. На сколько большой оверхед от этих иконок, что от него важно прямо сейчас подстраховаться?
1. Зачем что-то хранить в памяти, если оно не видно на экране/не используется, и нужно только в каких-то исключительных сценариях? 2. На сколько большой оверхед от этих иконок, что от него важно прямо сейчас подстраховаться?
biodranik commented 2022-12-11 12:35:11 +00:00 (Migrated from github.com)
Review
    builder.setImage(getter.get() ? mCheckboxSelectedIcon : mCheckboxIcon);
```suggestion builder.setImage(getter.get() ? mCheckboxSelectedIcon : mCheckboxIcon); ```
biodranik commented 2022-12-11 12:36:01 +00:00 (Migrated from github.com)
Review

Если getter.get() используется больше одного раза, имеет смысл вынести его в final boolean

Если getter.get() используется больше одного раза, имеет смысл вынести его в `final boolean`
biodranik commented 2022-12-11 12:36:17 +00:00 (Migrated from github.com)
Review

ditto

ditto
Review

Ок. Перенес это в SettingsScreen и DrivingOptionsScreen

Ок. Перенес это в `SettingsScreen` и `DrivingOptionsScreen`
import androidx.car.app.model.CarIcon;
Review

I suggest merging this code back to SettingsScreen.java. It is not needed anywhere outside SettingsScreen.java.

I suggest merging this code back to `SettingsScreen.java`. It is not needed anywhere outside `SettingsScreen.java`.
Review

It looks like a hack. Why this invalidation is needed in this place?

It looks like a hack. Why this invalidation is needed in this place?
Review

Да, но createSharedPrefsCheckbox, как и createDrivingOptionCheckbox использует иконки чекбоксов. Не хочется каждый раз заново инициализировать иконки. Перемещение их в SettingsScreen приведет к тому, что они будут заново инициализироваться при создании экрана. Плюс есть еще DrivingOptionsScreen, который использует эти же иконки. Надо придумать, где и как их хранить. Это относится не только к чекбоксам, но и к остальным иконкам на других экранах. Пока что решение такое.

Да, но `createSharedPrefsCheckbox`, как и `createDrivingOptionCheckbox` использует иконки чекбоксов. Не хочется каждый раз заново инициализировать иконки. Перемещение их в `SettingsScreen` приведет к тому, что они будут заново инициализироваться при создании экрана. Плюс есть еще `DrivingOptionsScreen`, который использует эти же иконки. Надо придумать, где и как их хранить. Это относится не только к чекбоксам, но и к остальным иконкам на других экранах. Пока что решение такое.
Review

Нельзя изменить иконку на созданном объекте:

  • Создание происходит через Builder. На этапе установки обработчика невозможно получить доступ к объекту
  • В объектах нет методов для изменения его состояния. Т.е. какого-нибудь setIcon(...) нет.

Видимо, такая концепция AA. Приходится перерисовывать весь экран.

Нельзя изменить иконку на созданном объекте: * Создание происходит через Builder. На этапе установки обработчика невозможно получить доступ к объекту * В объектах нет методов для изменения его состояния. Т.е. какого-нибудь `setIcon(...)` нет. Видимо, такая концепция AA. Приходится перерисовывать весь экран.
biodranik commented 2022-12-08 21:23:02 +00:00 (Migrated from github.com)
Review

Там ещё есть ограничение, насколько часто можно перерисовывать экран.

Там ещё есть ограничение, насколько _часто_ можно перерисовывать экран.
Review

Перерисовывать один и тот же экран можно неограниченное количество раз
https://developer.android.com/static/training/cars/Android%20for%20Cars%20App%20Library%20design%20guidelines.pdf
Слайд 11

Перерисовывать один и тот же экран можно неограниченное количество раз https://developer.android.com/static/training/cars/Android%20for%20Cars%20App%20Library%20design%20guidelines.pdf Слайд 11
Review

Ну и конкретно для MapTemplate:

Template Restrictions In regards to template refreshes, as described in onGetTemplate, this template is considered a refresh of a previous one if:
The template title has not changed, and the number of rows and the title (not counting spans) of each row between the previous and new Panes or ItemLists have not changed.

https://developer.android.com/reference/androidx/car/app/navigation/model/MapTemplate

Ну и конкретно для MapTemplate: > Template Restrictions In regards to template refreshes, as described in [onGetTemplate](https://developer.android.com/reference/androidx/car/app/Screen#onGetTemplate()), this template is considered a refresh of a previous one if: The template title has not changed, and the number of rows and the title (not counting spans) of each row between the previous and new [Pane](https://developer.android.com/reference/androidx/car/app/model/Pane)s or [ItemList](https://developer.android.com/reference/androidx/car/app/model/ItemList)s have not changed. https://developer.android.com/reference/androidx/car/app/navigation/model/MapTemplate
biodranik commented 2022-12-11 12:34:26 +00:00 (Migrated from github.com)
Review
  1. Зачем что-то хранить в памяти, если оно не видно на экране/не используется, и нужно только в каких-то исключительных сценариях?
  2. На сколько большой оверхед от этих иконок, что от него важно прямо сейчас подстраховаться?
1. Зачем что-то хранить в памяти, если оно не видно на экране/не используется, и нужно только в каких-то исключительных сценариях? 2. На сколько большой оверхед от этих иконок, что от него важно прямо сейчас подстраховаться?
biodranik commented 2022-12-11 12:35:11 +00:00 (Migrated from github.com)
Review
    builder.setImage(getter.get() ? mCheckboxSelectedIcon : mCheckboxIcon);
```suggestion builder.setImage(getter.get() ? mCheckboxSelectedIcon : mCheckboxIcon); ```
biodranik commented 2022-12-11 12:36:01 +00:00 (Migrated from github.com)
Review

Если getter.get() используется больше одного раза, имеет смысл вынести его в final boolean

Если getter.get() используется больше одного раза, имеет смысл вынести его в `final boolean`
biodranik commented 2022-12-11 12:36:17 +00:00 (Migrated from github.com)
Review

ditto

ditto
Review

Ок. Перенес это в SettingsScreen и DrivingOptionsScreen

Ок. Перенес это в `SettingsScreen` и `DrivingOptionsScreen`
import androidx.car.app.navigation.model.MapController;
Review

I suggest merging this code back to SettingsScreen.java. It is not needed anywhere outside SettingsScreen.java.

I suggest merging this code back to `SettingsScreen.java`. It is not needed anywhere outside `SettingsScreen.java`.
Review

It looks like a hack. Why this invalidation is needed in this place?

It looks like a hack. Why this invalidation is needed in this place?
Review

Да, но createSharedPrefsCheckbox, как и createDrivingOptionCheckbox использует иконки чекбоксов. Не хочется каждый раз заново инициализировать иконки. Перемещение их в SettingsScreen приведет к тому, что они будут заново инициализироваться при создании экрана. Плюс есть еще DrivingOptionsScreen, который использует эти же иконки. Надо придумать, где и как их хранить. Это относится не только к чекбоксам, но и к остальным иконкам на других экранах. Пока что решение такое.

Да, но `createSharedPrefsCheckbox`, как и `createDrivingOptionCheckbox` использует иконки чекбоксов. Не хочется каждый раз заново инициализировать иконки. Перемещение их в `SettingsScreen` приведет к тому, что они будут заново инициализироваться при создании экрана. Плюс есть еще `DrivingOptionsScreen`, который использует эти же иконки. Надо придумать, где и как их хранить. Это относится не только к чекбоксам, но и к остальным иконкам на других экранах. Пока что решение такое.
Review

Нельзя изменить иконку на созданном объекте:

  • Создание происходит через Builder. На этапе установки обработчика невозможно получить доступ к объекту
  • В объектах нет методов для изменения его состояния. Т.е. какого-нибудь setIcon(...) нет.

Видимо, такая концепция AA. Приходится перерисовывать весь экран.

Нельзя изменить иконку на созданном объекте: * Создание происходит через Builder. На этапе установки обработчика невозможно получить доступ к объекту * В объектах нет методов для изменения его состояния. Т.е. какого-нибудь `setIcon(...)` нет. Видимо, такая концепция AA. Приходится перерисовывать весь экран.
biodranik commented 2022-12-08 21:23:02 +00:00 (Migrated from github.com)
Review

Там ещё есть ограничение, насколько часто можно перерисовывать экран.

Там ещё есть ограничение, насколько _часто_ можно перерисовывать экран.
Review

Перерисовывать один и тот же экран можно неограниченное количество раз
https://developer.android.com/static/training/cars/Android%20for%20Cars%20App%20Library%20design%20guidelines.pdf
Слайд 11

Перерисовывать один и тот же экран можно неограниченное количество раз https://developer.android.com/static/training/cars/Android%20for%20Cars%20App%20Library%20design%20guidelines.pdf Слайд 11
Review

Ну и конкретно для MapTemplate:

Template Restrictions In regards to template refreshes, as described in onGetTemplate, this template is considered a refresh of a previous one if:
The template title has not changed, and the number of rows and the title (not counting spans) of each row between the previous and new Panes or ItemLists have not changed.

https://developer.android.com/reference/androidx/car/app/navigation/model/MapTemplate

Ну и конкретно для MapTemplate: > Template Restrictions In regards to template refreshes, as described in [onGetTemplate](https://developer.android.com/reference/androidx/car/app/Screen#onGetTemplate()), this template is considered a refresh of a previous one if: The template title has not changed, and the number of rows and the title (not counting spans) of each row between the previous and new [Pane](https://developer.android.com/reference/androidx/car/app/model/Pane)s or [ItemList](https://developer.android.com/reference/androidx/car/app/model/ItemList)s have not changed. https://developer.android.com/reference/androidx/car/app/navigation/model/MapTemplate
biodranik commented 2022-12-11 12:34:26 +00:00 (Migrated from github.com)
Review
  1. Зачем что-то хранить в памяти, если оно не видно на экране/не используется, и нужно только в каких-то исключительных сценариях?
  2. На сколько большой оверхед от этих иконок, что от него важно прямо сейчас подстраховаться?
1. Зачем что-то хранить в памяти, если оно не видно на экране/не используется, и нужно только в каких-то исключительных сценариях? 2. На сколько большой оверхед от этих иконок, что от него важно прямо сейчас подстраховаться?
biodranik commented 2022-12-11 12:35:11 +00:00 (Migrated from github.com)
Review
    builder.setImage(getter.get() ? mCheckboxSelectedIcon : mCheckboxIcon);
```suggestion builder.setImage(getter.get() ? mCheckboxSelectedIcon : mCheckboxIcon); ```
biodranik commented 2022-12-11 12:36:01 +00:00 (Migrated from github.com)
Review

Если getter.get() используется больше одного раза, имеет смысл вынести его в final boolean

Если getter.get() используется больше одного раза, имеет смысл вынести его в `final boolean`
biodranik commented 2022-12-11 12:36:17 +00:00 (Migrated from github.com)
Review

ditto

ditto
Review

Ок. Перенес это в SettingsScreen и DrivingOptionsScreen

Ок. Перенес это в `SettingsScreen` и `DrivingOptionsScreen`
import androidx.core.graphics.drawable.IconCompat;
Review

I suggest merging this code back to SettingsScreen.java. It is not needed anywhere outside SettingsScreen.java.

I suggest merging this code back to `SettingsScreen.java`. It is not needed anywhere outside `SettingsScreen.java`.
Review

It looks like a hack. Why this invalidation is needed in this place?

It looks like a hack. Why this invalidation is needed in this place?
Review

Да, но createSharedPrefsCheckbox, как и createDrivingOptionCheckbox использует иконки чекбоксов. Не хочется каждый раз заново инициализировать иконки. Перемещение их в SettingsScreen приведет к тому, что они будут заново инициализироваться при создании экрана. Плюс есть еще DrivingOptionsScreen, который использует эти же иконки. Надо придумать, где и как их хранить. Это относится не только к чекбоксам, но и к остальным иконкам на других экранах. Пока что решение такое.

Да, но `createSharedPrefsCheckbox`, как и `createDrivingOptionCheckbox` использует иконки чекбоксов. Не хочется каждый раз заново инициализировать иконки. Перемещение их в `SettingsScreen` приведет к тому, что они будут заново инициализироваться при создании экрана. Плюс есть еще `DrivingOptionsScreen`, который использует эти же иконки. Надо придумать, где и как их хранить. Это относится не только к чекбоксам, но и к остальным иконкам на других экранах. Пока что решение такое.
Review

Нельзя изменить иконку на созданном объекте:

  • Создание происходит через Builder. На этапе установки обработчика невозможно получить доступ к объекту
  • В объектах нет методов для изменения его состояния. Т.е. какого-нибудь setIcon(...) нет.

Видимо, такая концепция AA. Приходится перерисовывать весь экран.

Нельзя изменить иконку на созданном объекте: * Создание происходит через Builder. На этапе установки обработчика невозможно получить доступ к объекту * В объектах нет методов для изменения его состояния. Т.е. какого-нибудь `setIcon(...)` нет. Видимо, такая концепция AA. Приходится перерисовывать весь экран.
biodranik commented 2022-12-08 21:23:02 +00:00 (Migrated from github.com)
Review

Там ещё есть ограничение, насколько часто можно перерисовывать экран.

Там ещё есть ограничение, насколько _часто_ можно перерисовывать экран.
Review

Перерисовывать один и тот же экран можно неограниченное количество раз
https://developer.android.com/static/training/cars/Android%20for%20Cars%20App%20Library%20design%20guidelines.pdf
Слайд 11

Перерисовывать один и тот же экран можно неограниченное количество раз https://developer.android.com/static/training/cars/Android%20for%20Cars%20App%20Library%20design%20guidelines.pdf Слайд 11
Review

Ну и конкретно для MapTemplate:

Template Restrictions In regards to template refreshes, as described in onGetTemplate, this template is considered a refresh of a previous one if:
The template title has not changed, and the number of rows and the title (not counting spans) of each row between the previous and new Panes or ItemLists have not changed.

https://developer.android.com/reference/androidx/car/app/navigation/model/MapTemplate

Ну и конкретно для MapTemplate: > Template Restrictions In regards to template refreshes, as described in [onGetTemplate](https://developer.android.com/reference/androidx/car/app/Screen#onGetTemplate()), this template is considered a refresh of a previous one if: The template title has not changed, and the number of rows and the title (not counting spans) of each row between the previous and new [Pane](https://developer.android.com/reference/androidx/car/app/model/Pane)s or [ItemList](https://developer.android.com/reference/androidx/car/app/model/ItemList)s have not changed. https://developer.android.com/reference/androidx/car/app/navigation/model/MapTemplate
biodranik commented 2022-12-11 12:34:26 +00:00 (Migrated from github.com)
Review
  1. Зачем что-то хранить в памяти, если оно не видно на экране/не используется, и нужно только в каких-то исключительных сценариях?
  2. На сколько большой оверхед от этих иконок, что от него важно прямо сейчас подстраховаться?
1. Зачем что-то хранить в памяти, если оно не видно на экране/не используется, и нужно только в каких-то исключительных сценариях? 2. На сколько большой оверхед от этих иконок, что от него важно прямо сейчас подстраховаться?
biodranik commented 2022-12-11 12:35:11 +00:00 (Migrated from github.com)
Review
    builder.setImage(getter.get() ? mCheckboxSelectedIcon : mCheckboxIcon);
```suggestion builder.setImage(getter.get() ? mCheckboxSelectedIcon : mCheckboxIcon); ```
biodranik commented 2022-12-11 12:36:01 +00:00 (Migrated from github.com)
Review

Если getter.get() используется больше одного раза, имеет смысл вынести его в final boolean

Если getter.get() используется больше одного раза, имеет смысл вынести его в `final boolean`
biodranik commented 2022-12-11 12:36:17 +00:00 (Migrated from github.com)
Review

ditto

ditto
Review

Ок. Перенес это в SettingsScreen и DrivingOptionsScreen

Ок. Перенес это в `SettingsScreen` и `DrivingOptionsScreen`
Review

I suggest merging this code back to SettingsScreen.java. It is not needed anywhere outside SettingsScreen.java.

I suggest merging this code back to `SettingsScreen.java`. It is not needed anywhere outside `SettingsScreen.java`.
Review

It looks like a hack. Why this invalidation is needed in this place?

It looks like a hack. Why this invalidation is needed in this place?
Review

Да, но createSharedPrefsCheckbox, как и createDrivingOptionCheckbox использует иконки чекбоксов. Не хочется каждый раз заново инициализировать иконки. Перемещение их в SettingsScreen приведет к тому, что они будут заново инициализироваться при создании экрана. Плюс есть еще DrivingOptionsScreen, который использует эти же иконки. Надо придумать, где и как их хранить. Это относится не только к чекбоксам, но и к остальным иконкам на других экранах. Пока что решение такое.

Да, но `createSharedPrefsCheckbox`, как и `createDrivingOptionCheckbox` использует иконки чекбоксов. Не хочется каждый раз заново инициализировать иконки. Перемещение их в `SettingsScreen` приведет к тому, что они будут заново инициализироваться при создании экрана. Плюс есть еще `DrivingOptionsScreen`, который использует эти же иконки. Надо придумать, где и как их хранить. Это относится не только к чекбоксам, но и к остальным иконкам на других экранах. Пока что решение такое.
Review

Нельзя изменить иконку на созданном объекте:

  • Создание происходит через Builder. На этапе установки обработчика невозможно получить доступ к объекту
  • В объектах нет методов для изменения его состояния. Т.е. какого-нибудь setIcon(...) нет.

Видимо, такая концепция AA. Приходится перерисовывать весь экран.

Нельзя изменить иконку на созданном объекте: * Создание происходит через Builder. На этапе установки обработчика невозможно получить доступ к объекту * В объектах нет методов для изменения его состояния. Т.е. какого-нибудь `setIcon(...)` нет. Видимо, такая концепция AA. Приходится перерисовывать весь экран.
biodranik commented 2022-12-08 21:23:02 +00:00 (Migrated from github.com)
Review

Там ещё есть ограничение, насколько часто можно перерисовывать экран.

Там ещё есть ограничение, насколько _часто_ можно перерисовывать экран.
Review

Перерисовывать один и тот же экран можно неограниченное количество раз
https://developer.android.com/static/training/cars/Android%20for%20Cars%20App%20Library%20design%20guidelines.pdf
Слайд 11

Перерисовывать один и тот же экран можно неограниченное количество раз https://developer.android.com/static/training/cars/Android%20for%20Cars%20App%20Library%20design%20guidelines.pdf Слайд 11
Review

Ну и конкретно для MapTemplate:

Template Restrictions In regards to template refreshes, as described in onGetTemplate, this template is considered a refresh of a previous one if:
The template title has not changed, and the number of rows and the title (not counting spans) of each row between the previous and new Panes or ItemLists have not changed.

https://developer.android.com/reference/androidx/car/app/navigation/model/MapTemplate

Ну и конкретно для MapTemplate: > Template Restrictions In regards to template refreshes, as described in [onGetTemplate](https://developer.android.com/reference/androidx/car/app/Screen#onGetTemplate()), this template is considered a refresh of a previous one if: The template title has not changed, and the number of rows and the title (not counting spans) of each row between the previous and new [Pane](https://developer.android.com/reference/androidx/car/app/model/Pane)s or [ItemList](https://developer.android.com/reference/androidx/car/app/model/ItemList)s have not changed. https://developer.android.com/reference/androidx/car/app/navigation/model/MapTemplate
biodranik commented 2022-12-11 12:34:26 +00:00 (Migrated from github.com)
Review
  1. Зачем что-то хранить в памяти, если оно не видно на экране/не используется, и нужно только в каких-то исключительных сценариях?
  2. На сколько большой оверхед от этих иконок, что от него важно прямо сейчас подстраховаться?
1. Зачем что-то хранить в памяти, если оно не видно на экране/не используется, и нужно только в каких-то исключительных сценариях? 2. На сколько большой оверхед от этих иконок, что от него важно прямо сейчас подстраховаться?
biodranik commented 2022-12-11 12:35:11 +00:00 (Migrated from github.com)
Review
    builder.setImage(getter.get() ? mCheckboxSelectedIcon : mCheckboxIcon);
```suggestion builder.setImage(getter.get() ? mCheckboxSelectedIcon : mCheckboxIcon); ```
biodranik commented 2022-12-11 12:36:01 +00:00 (Migrated from github.com)
Review

Если getter.get() используется больше одного раза, имеет смысл вынести его в final boolean

Если getter.get() используется больше одного раза, имеет смысл вынести его в `final boolean`
biodranik commented 2022-12-11 12:36:17 +00:00 (Migrated from github.com)
Review

ditto

ditto
Review

Ок. Перенес это в SettingsScreen и DrivingOptionsScreen

Ок. Перенес это в `SettingsScreen` и `DrivingOptionsScreen`
import app.organicmaps.R;
Review

I suggest merging this code back to SettingsScreen.java. It is not needed anywhere outside SettingsScreen.java.

I suggest merging this code back to `SettingsScreen.java`. It is not needed anywhere outside `SettingsScreen.java`.
Review

It looks like a hack. Why this invalidation is needed in this place?

It looks like a hack. Why this invalidation is needed in this place?
Review

Да, но createSharedPrefsCheckbox, как и createDrivingOptionCheckbox использует иконки чекбоксов. Не хочется каждый раз заново инициализировать иконки. Перемещение их в SettingsScreen приведет к тому, что они будут заново инициализироваться при создании экрана. Плюс есть еще DrivingOptionsScreen, который использует эти же иконки. Надо придумать, где и как их хранить. Это относится не только к чекбоксам, но и к остальным иконкам на других экранах. Пока что решение такое.

Да, но `createSharedPrefsCheckbox`, как и `createDrivingOptionCheckbox` использует иконки чекбоксов. Не хочется каждый раз заново инициализировать иконки. Перемещение их в `SettingsScreen` приведет к тому, что они будут заново инициализироваться при создании экрана. Плюс есть еще `DrivingOptionsScreen`, который использует эти же иконки. Надо придумать, где и как их хранить. Это относится не только к чекбоксам, но и к остальным иконкам на других экранах. Пока что решение такое.
Review

Нельзя изменить иконку на созданном объекте:

  • Создание происходит через Builder. На этапе установки обработчика невозможно получить доступ к объекту
  • В объектах нет методов для изменения его состояния. Т.е. какого-нибудь setIcon(...) нет.

Видимо, такая концепция AA. Приходится перерисовывать весь экран.

Нельзя изменить иконку на созданном объекте: * Создание происходит через Builder. На этапе установки обработчика невозможно получить доступ к объекту * В объектах нет методов для изменения его состояния. Т.е. какого-нибудь `setIcon(...)` нет. Видимо, такая концепция AA. Приходится перерисовывать весь экран.
biodranik commented 2022-12-08 21:23:02 +00:00 (Migrated from github.com)
Review

Там ещё есть ограничение, насколько часто можно перерисовывать экран.

Там ещё есть ограничение, насколько _часто_ можно перерисовывать экран.
Review

Перерисовывать один и тот же экран можно неограниченное количество раз
https://developer.android.com/static/training/cars/Android%20for%20Cars%20App%20Library%20design%20guidelines.pdf
Слайд 11

Перерисовывать один и тот же экран можно неограниченное количество раз https://developer.android.com/static/training/cars/Android%20for%20Cars%20App%20Library%20design%20guidelines.pdf Слайд 11
Review

Ну и конкретно для MapTemplate:

Template Restrictions In regards to template refreshes, as described in onGetTemplate, this template is considered a refresh of a previous one if:
The template title has not changed, and the number of rows and the title (not counting spans) of each row between the previous and new Panes or ItemLists have not changed.

https://developer.android.com/reference/androidx/car/app/navigation/model/MapTemplate

Ну и конкретно для MapTemplate: > Template Restrictions In regards to template refreshes, as described in [onGetTemplate](https://developer.android.com/reference/androidx/car/app/Screen#onGetTemplate()), this template is considered a refresh of a previous one if: The template title has not changed, and the number of rows and the title (not counting spans) of each row between the previous and new [Pane](https://developer.android.com/reference/androidx/car/app/model/Pane)s or [ItemList](https://developer.android.com/reference/androidx/car/app/model/ItemList)s have not changed. https://developer.android.com/reference/androidx/car/app/navigation/model/MapTemplate
biodranik commented 2022-12-11 12:34:26 +00:00 (Migrated from github.com)
Review
  1. Зачем что-то хранить в памяти, если оно не видно на экране/не используется, и нужно только в каких-то исключительных сценариях?
  2. На сколько большой оверхед от этих иконок, что от него важно прямо сейчас подстраховаться?
1. Зачем что-то хранить в памяти, если оно не видно на экране/не используется, и нужно только в каких-то исключительных сценариях? 2. На сколько большой оверхед от этих иконок, что от него важно прямо сейчас подстраховаться?
biodranik commented 2022-12-11 12:35:11 +00:00 (Migrated from github.com)
Review
    builder.setImage(getter.get() ? mCheckboxSelectedIcon : mCheckboxIcon);
```suggestion builder.setImage(getter.get() ? mCheckboxSelectedIcon : mCheckboxIcon); ```
biodranik commented 2022-12-11 12:36:01 +00:00 (Migrated from github.com)
Review

Если getter.get() используется больше одного раза, имеет смысл вынести его в final boolean

Если getter.get() используется больше одного раза, имеет смысл вынести его в `final boolean`
biodranik commented 2022-12-11 12:36:17 +00:00 (Migrated from github.com)
Review

ditto

ditto
Review

Ок. Перенес это в SettingsScreen и DrivingOptionsScreen

Ок. Перенес это в `SettingsScreen` и `DrivingOptionsScreen`
import app.organicmaps.car.screens.settings.SettingsScreen;
Review

I suggest merging this code back to SettingsScreen.java. It is not needed anywhere outside SettingsScreen.java.

I suggest merging this code back to `SettingsScreen.java`. It is not needed anywhere outside `SettingsScreen.java`.
Review

It looks like a hack. Why this invalidation is needed in this place?

It looks like a hack. Why this invalidation is needed in this place?
Review

Да, но createSharedPrefsCheckbox, как и createDrivingOptionCheckbox использует иконки чекбоксов. Не хочется каждый раз заново инициализировать иконки. Перемещение их в SettingsScreen приведет к тому, что они будут заново инициализироваться при создании экрана. Плюс есть еще DrivingOptionsScreen, который использует эти же иконки. Надо придумать, где и как их хранить. Это относится не только к чекбоксам, но и к остальным иконкам на других экранах. Пока что решение такое.

Да, но `createSharedPrefsCheckbox`, как и `createDrivingOptionCheckbox` использует иконки чекбоксов. Не хочется каждый раз заново инициализировать иконки. Перемещение их в `SettingsScreen` приведет к тому, что они будут заново инициализироваться при создании экрана. Плюс есть еще `DrivingOptionsScreen`, который использует эти же иконки. Надо придумать, где и как их хранить. Это относится не только к чекбоксам, но и к остальным иконкам на других экранах. Пока что решение такое.
Review

Нельзя изменить иконку на созданном объекте:

  • Создание происходит через Builder. На этапе установки обработчика невозможно получить доступ к объекту
  • В объектах нет методов для изменения его состояния. Т.е. какого-нибудь setIcon(...) нет.

Видимо, такая концепция AA. Приходится перерисовывать весь экран.

Нельзя изменить иконку на созданном объекте: * Создание происходит через Builder. На этапе установки обработчика невозможно получить доступ к объекту * В объектах нет методов для изменения его состояния. Т.е. какого-нибудь `setIcon(...)` нет. Видимо, такая концепция AA. Приходится перерисовывать весь экран.
biodranik commented 2022-12-08 21:23:02 +00:00 (Migrated from github.com)
Review

Там ещё есть ограничение, насколько часто можно перерисовывать экран.

Там ещё есть ограничение, насколько _часто_ можно перерисовывать экран.
Review

Перерисовывать один и тот же экран можно неограниченное количество раз
https://developer.android.com/static/training/cars/Android%20for%20Cars%20App%20Library%20design%20guidelines.pdf
Слайд 11

Перерисовывать один и тот же экран можно неограниченное количество раз https://developer.android.com/static/training/cars/Android%20for%20Cars%20App%20Library%20design%20guidelines.pdf Слайд 11
Review

Ну и конкретно для MapTemplate:

Template Restrictions In regards to template refreshes, as described in onGetTemplate, this template is considered a refresh of a previous one if:
The template title has not changed, and the number of rows and the title (not counting spans) of each row between the previous and new Panes or ItemLists have not changed.

https://developer.android.com/reference/androidx/car/app/navigation/model/MapTemplate

Ну и конкретно для MapTemplate: > Template Restrictions In regards to template refreshes, as described in [onGetTemplate](https://developer.android.com/reference/androidx/car/app/Screen#onGetTemplate()), this template is considered a refresh of a previous one if: The template title has not changed, and the number of rows and the title (not counting spans) of each row between the previous and new [Pane](https://developer.android.com/reference/androidx/car/app/model/Pane)s or [ItemList](https://developer.android.com/reference/androidx/car/app/model/ItemList)s have not changed. https://developer.android.com/reference/androidx/car/app/navigation/model/MapTemplate
biodranik commented 2022-12-11 12:34:26 +00:00 (Migrated from github.com)
Review
  1. Зачем что-то хранить в памяти, если оно не видно на экране/не используется, и нужно только в каких-то исключительных сценариях?
  2. На сколько большой оверхед от этих иконок, что от него важно прямо сейчас подстраховаться?
1. Зачем что-то хранить в памяти, если оно не видно на экране/не используется, и нужно только в каких-то исключительных сценариях? 2. На сколько большой оверхед от этих иконок, что от него важно прямо сейчас подстраховаться?
biodranik commented 2022-12-11 12:35:11 +00:00 (Migrated from github.com)
Review
    builder.setImage(getter.get() ? mCheckboxSelectedIcon : mCheckboxIcon);
```suggestion builder.setImage(getter.get() ? mCheckboxSelectedIcon : mCheckboxIcon); ```
biodranik commented 2022-12-11 12:36:01 +00:00 (Migrated from github.com)
Review

Если getter.get() используется больше одного раза, имеет смысл вынести его в final boolean

Если getter.get() используется больше одного раза, имеет смысл вынести его в `final boolean`
biodranik commented 2022-12-11 12:36:17 +00:00 (Migrated from github.com)
Review

ditto

ditto
Review

Ок. Перенес это в SettingsScreen и DrivingOptionsScreen

Ок. Перенес это в `SettingsScreen` и `DrivingOptionsScreen`
Review

I suggest merging this code back to SettingsScreen.java. It is not needed anywhere outside SettingsScreen.java.

I suggest merging this code back to `SettingsScreen.java`. It is not needed anywhere outside `SettingsScreen.java`.
Review

It looks like a hack. Why this invalidation is needed in this place?

It looks like a hack. Why this invalidation is needed in this place?
Review

Да, но createSharedPrefsCheckbox, как и createDrivingOptionCheckbox использует иконки чекбоксов. Не хочется каждый раз заново инициализировать иконки. Перемещение их в SettingsScreen приведет к тому, что они будут заново инициализироваться при создании экрана. Плюс есть еще DrivingOptionsScreen, который использует эти же иконки. Надо придумать, где и как их хранить. Это относится не только к чекбоксам, но и к остальным иконкам на других экранах. Пока что решение такое.

Да, но `createSharedPrefsCheckbox`, как и `createDrivingOptionCheckbox` использует иконки чекбоксов. Не хочется каждый раз заново инициализировать иконки. Перемещение их в `SettingsScreen` приведет к тому, что они будут заново инициализироваться при создании экрана. Плюс есть еще `DrivingOptionsScreen`, который использует эти же иконки. Надо придумать, где и как их хранить. Это относится не только к чекбоксам, но и к остальным иконкам на других экранах. Пока что решение такое.
Review

Нельзя изменить иконку на созданном объекте:

  • Создание происходит через Builder. На этапе установки обработчика невозможно получить доступ к объекту
  • В объектах нет методов для изменения его состояния. Т.е. какого-нибудь setIcon(...) нет.

Видимо, такая концепция AA. Приходится перерисовывать весь экран.

Нельзя изменить иконку на созданном объекте: * Создание происходит через Builder. На этапе установки обработчика невозможно получить доступ к объекту * В объектах нет методов для изменения его состояния. Т.е. какого-нибудь `setIcon(...)` нет. Видимо, такая концепция AA. Приходится перерисовывать весь экран.
biodranik commented 2022-12-08 21:23:02 +00:00 (Migrated from github.com)
Review

Там ещё есть ограничение, насколько часто можно перерисовывать экран.

Там ещё есть ограничение, насколько _часто_ можно перерисовывать экран.
Review

Перерисовывать один и тот же экран можно неограниченное количество раз
https://developer.android.com/static/training/cars/Android%20for%20Cars%20App%20Library%20design%20guidelines.pdf
Слайд 11

Перерисовывать один и тот же экран можно неограниченное количество раз https://developer.android.com/static/training/cars/Android%20for%20Cars%20App%20Library%20design%20guidelines.pdf Слайд 11
Review

Ну и конкретно для MapTemplate:

Template Restrictions In regards to template refreshes, as described in onGetTemplate, this template is considered a refresh of a previous one if:
The template title has not changed, and the number of rows and the title (not counting spans) of each row between the previous and new Panes or ItemLists have not changed.

https://developer.android.com/reference/androidx/car/app/navigation/model/MapTemplate

Ну и конкретно для MapTemplate: > Template Restrictions In regards to template refreshes, as described in [onGetTemplate](https://developer.android.com/reference/androidx/car/app/Screen#onGetTemplate()), this template is considered a refresh of a previous one if: The template title has not changed, and the number of rows and the title (not counting spans) of each row between the previous and new [Pane](https://developer.android.com/reference/androidx/car/app/model/Pane)s or [ItemList](https://developer.android.com/reference/androidx/car/app/model/ItemList)s have not changed. https://developer.android.com/reference/androidx/car/app/navigation/model/MapTemplate
biodranik commented 2022-12-11 12:34:26 +00:00 (Migrated from github.com)
Review
  1. Зачем что-то хранить в памяти, если оно не видно на экране/не используется, и нужно только в каких-то исключительных сценариях?
  2. На сколько большой оверхед от этих иконок, что от него важно прямо сейчас подстраховаться?
1. Зачем что-то хранить в памяти, если оно не видно на экране/не используется, и нужно только в каких-то исключительных сценариях? 2. На сколько большой оверхед от этих иконок, что от него важно прямо сейчас подстраховаться?
biodranik commented 2022-12-11 12:35:11 +00:00 (Migrated from github.com)
Review
    builder.setImage(getter.get() ? mCheckboxSelectedIcon : mCheckboxIcon);
```suggestion builder.setImage(getter.get() ? mCheckboxSelectedIcon : mCheckboxIcon); ```
biodranik commented 2022-12-11 12:36:01 +00:00 (Migrated from github.com)
Review

Если getter.get() используется больше одного раза, имеет смысл вынести его в final boolean

Если getter.get() используется больше одного раза, имеет смысл вынести его в `final boolean`
biodranik commented 2022-12-11 12:36:17 +00:00 (Migrated from github.com)
Review

ditto

ditto
Review

Ок. Перенес это в SettingsScreen и DrivingOptionsScreen

Ок. Перенес это в `SettingsScreen` и `DrivingOptionsScreen`
public final class UiHelpers
Review

I suggest merging this code back to SettingsScreen.java. It is not needed anywhere outside SettingsScreen.java.

I suggest merging this code back to `SettingsScreen.java`. It is not needed anywhere outside `SettingsScreen.java`.
Review

It looks like a hack. Why this invalidation is needed in this place?

It looks like a hack. Why this invalidation is needed in this place?
Review

Да, но createSharedPrefsCheckbox, как и createDrivingOptionCheckbox использует иконки чекбоксов. Не хочется каждый раз заново инициализировать иконки. Перемещение их в SettingsScreen приведет к тому, что они будут заново инициализироваться при создании экрана. Плюс есть еще DrivingOptionsScreen, который использует эти же иконки. Надо придумать, где и как их хранить. Это относится не только к чекбоксам, но и к остальным иконкам на других экранах. Пока что решение такое.

Да, но `createSharedPrefsCheckbox`, как и `createDrivingOptionCheckbox` использует иконки чекбоксов. Не хочется каждый раз заново инициализировать иконки. Перемещение их в `SettingsScreen` приведет к тому, что они будут заново инициализироваться при создании экрана. Плюс есть еще `DrivingOptionsScreen`, который использует эти же иконки. Надо придумать, где и как их хранить. Это относится не только к чекбоксам, но и к остальным иконкам на других экранах. Пока что решение такое.
Review

Нельзя изменить иконку на созданном объекте:

  • Создание происходит через Builder. На этапе установки обработчика невозможно получить доступ к объекту
  • В объектах нет методов для изменения его состояния. Т.е. какого-нибудь setIcon(...) нет.

Видимо, такая концепция AA. Приходится перерисовывать весь экран.

Нельзя изменить иконку на созданном объекте: * Создание происходит через Builder. На этапе установки обработчика невозможно получить доступ к объекту * В объектах нет методов для изменения его состояния. Т.е. какого-нибудь `setIcon(...)` нет. Видимо, такая концепция AA. Приходится перерисовывать весь экран.
biodranik commented 2022-12-08 21:23:02 +00:00 (Migrated from github.com)
Review

Там ещё есть ограничение, насколько часто можно перерисовывать экран.

Там ещё есть ограничение, насколько _часто_ можно перерисовывать экран.
Review

Перерисовывать один и тот же экран можно неограниченное количество раз
https://developer.android.com/static/training/cars/Android%20for%20Cars%20App%20Library%20design%20guidelines.pdf
Слайд 11

Перерисовывать один и тот же экран можно неограниченное количество раз https://developer.android.com/static/training/cars/Android%20for%20Cars%20App%20Library%20design%20guidelines.pdf Слайд 11
Review

Ну и конкретно для MapTemplate:

Template Restrictions In regards to template refreshes, as described in onGetTemplate, this template is considered a refresh of a previous one if:
The template title has not changed, and the number of rows and the title (not counting spans) of each row between the previous and new Panes or ItemLists have not changed.

https://developer.android.com/reference/androidx/car/app/navigation/model/MapTemplate

Ну и конкретно для MapTemplate: > Template Restrictions In regards to template refreshes, as described in [onGetTemplate](https://developer.android.com/reference/androidx/car/app/Screen#onGetTemplate()), this template is considered a refresh of a previous one if: The template title has not changed, and the number of rows and the title (not counting spans) of each row between the previous and new [Pane](https://developer.android.com/reference/androidx/car/app/model/Pane)s or [ItemList](https://developer.android.com/reference/androidx/car/app/model/ItemList)s have not changed. https://developer.android.com/reference/androidx/car/app/navigation/model/MapTemplate
biodranik commented 2022-12-11 12:34:26 +00:00 (Migrated from github.com)
Review
  1. Зачем что-то хранить в памяти, если оно не видно на экране/не используется, и нужно только в каких-то исключительных сценариях?
  2. На сколько большой оверхед от этих иконок, что от него важно прямо сейчас подстраховаться?
1. Зачем что-то хранить в памяти, если оно не видно на экране/не используется, и нужно только в каких-то исключительных сценариях? 2. На сколько большой оверхед от этих иконок, что от него важно прямо сейчас подстраховаться?
biodranik commented 2022-12-11 12:35:11 +00:00 (Migrated from github.com)
Review
    builder.setImage(getter.get() ? mCheckboxSelectedIcon : mCheckboxIcon);
```suggestion builder.setImage(getter.get() ? mCheckboxSelectedIcon : mCheckboxIcon); ```
biodranik commented 2022-12-11 12:36:01 +00:00 (Migrated from github.com)
Review

Если getter.get() используется больше одного раза, имеет смысл вынести его в final boolean

Если getter.get() используется больше одного раза, имеет смысл вынести его в `final boolean`
biodranik commented 2022-12-11 12:36:17 +00:00 (Migrated from github.com)
Review

ditto

ditto
Review

Ок. Перенес это в SettingsScreen и DrivingOptionsScreen

Ок. Перенес это в `SettingsScreen` и `DrivingOptionsScreen`
{
Review

I suggest merging this code back to SettingsScreen.java. It is not needed anywhere outside SettingsScreen.java.

I suggest merging this code back to `SettingsScreen.java`. It is not needed anywhere outside `SettingsScreen.java`.
Review

It looks like a hack. Why this invalidation is needed in this place?

It looks like a hack. Why this invalidation is needed in this place?
Review

Да, но createSharedPrefsCheckbox, как и createDrivingOptionCheckbox использует иконки чекбоксов. Не хочется каждый раз заново инициализировать иконки. Перемещение их в SettingsScreen приведет к тому, что они будут заново инициализироваться при создании экрана. Плюс есть еще DrivingOptionsScreen, который использует эти же иконки. Надо придумать, где и как их хранить. Это относится не только к чекбоксам, но и к остальным иконкам на других экранах. Пока что решение такое.

Да, но `createSharedPrefsCheckbox`, как и `createDrivingOptionCheckbox` использует иконки чекбоксов. Не хочется каждый раз заново инициализировать иконки. Перемещение их в `SettingsScreen` приведет к тому, что они будут заново инициализироваться при создании экрана. Плюс есть еще `DrivingOptionsScreen`, который использует эти же иконки. Надо придумать, где и как их хранить. Это относится не только к чекбоксам, но и к остальным иконкам на других экранах. Пока что решение такое.
Review

Нельзя изменить иконку на созданном объекте:

  • Создание происходит через Builder. На этапе установки обработчика невозможно получить доступ к объекту
  • В объектах нет методов для изменения его состояния. Т.е. какого-нибудь setIcon(...) нет.

Видимо, такая концепция AA. Приходится перерисовывать весь экран.

Нельзя изменить иконку на созданном объекте: * Создание происходит через Builder. На этапе установки обработчика невозможно получить доступ к объекту * В объектах нет методов для изменения его состояния. Т.е. какого-нибудь `setIcon(...)` нет. Видимо, такая концепция AA. Приходится перерисовывать весь экран.
biodranik commented 2022-12-08 21:23:02 +00:00 (Migrated from github.com)
Review

Там ещё есть ограничение, насколько часто можно перерисовывать экран.

Там ещё есть ограничение, насколько _часто_ можно перерисовывать экран.
Review

Перерисовывать один и тот же экран можно неограниченное количество раз
https://developer.android.com/static/training/cars/Android%20for%20Cars%20App%20Library%20design%20guidelines.pdf
Слайд 11

Перерисовывать один и тот же экран можно неограниченное количество раз https://developer.android.com/static/training/cars/Android%20for%20Cars%20App%20Library%20design%20guidelines.pdf Слайд 11
Review

Ну и конкретно для MapTemplate:

Template Restrictions In regards to template refreshes, as described in onGetTemplate, this template is considered a refresh of a previous one if:
The template title has not changed, and the number of rows and the title (not counting spans) of each row between the previous and new Panes or ItemLists have not changed.

https://developer.android.com/reference/androidx/car/app/navigation/model/MapTemplate

Ну и конкретно для MapTemplate: > Template Restrictions In regards to template refreshes, as described in [onGetTemplate](https://developer.android.com/reference/androidx/car/app/Screen#onGetTemplate()), this template is considered a refresh of a previous one if: The template title has not changed, and the number of rows and the title (not counting spans) of each row between the previous and new [Pane](https://developer.android.com/reference/androidx/car/app/model/Pane)s or [ItemList](https://developer.android.com/reference/androidx/car/app/model/ItemList)s have not changed. https://developer.android.com/reference/androidx/car/app/navigation/model/MapTemplate
biodranik commented 2022-12-11 12:34:26 +00:00 (Migrated from github.com)
Review
  1. Зачем что-то хранить в памяти, если оно не видно на экране/не используется, и нужно только в каких-то исключительных сценариях?
  2. На сколько большой оверхед от этих иконок, что от него важно прямо сейчас подстраховаться?
1. Зачем что-то хранить в памяти, если оно не видно на экране/не используется, и нужно только в каких-то исключительных сценариях? 2. На сколько большой оверхед от этих иконок, что от него важно прямо сейчас подстраховаться?
biodranik commented 2022-12-11 12:35:11 +00:00 (Migrated from github.com)
Review
    builder.setImage(getter.get() ? mCheckboxSelectedIcon : mCheckboxIcon);
```suggestion builder.setImage(getter.get() ? mCheckboxSelectedIcon : mCheckboxIcon); ```
biodranik commented 2022-12-11 12:36:01 +00:00 (Migrated from github.com)
Review

Если getter.get() используется больше одного раза, имеет смысл вынести его в final boolean

Если getter.get() используется больше одного раза, имеет смысл вынести его в `final boolean`
biodranik commented 2022-12-11 12:36:17 +00:00 (Migrated from github.com)
Review

ditto

ditto
Review

Ок. Перенес это в SettingsScreen и DrivingOptionsScreen

Ок. Перенес это в `SettingsScreen` и `DrivingOptionsScreen`
public static ActionStrip createSettingsActionStrip(@NonNull CarContext context, @NonNull SurfaceRenderer surfaceRenderer)
Review

I suggest merging this code back to SettingsScreen.java. It is not needed anywhere outside SettingsScreen.java.

I suggest merging this code back to `SettingsScreen.java`. It is not needed anywhere outside `SettingsScreen.java`.
Review

It looks like a hack. Why this invalidation is needed in this place?

It looks like a hack. Why this invalidation is needed in this place?
Review

Да, но createSharedPrefsCheckbox, как и createDrivingOptionCheckbox использует иконки чекбоксов. Не хочется каждый раз заново инициализировать иконки. Перемещение их в SettingsScreen приведет к тому, что они будут заново инициализироваться при создании экрана. Плюс есть еще DrivingOptionsScreen, который использует эти же иконки. Надо придумать, где и как их хранить. Это относится не только к чекбоксам, но и к остальным иконкам на других экранах. Пока что решение такое.

Да, но `createSharedPrefsCheckbox`, как и `createDrivingOptionCheckbox` использует иконки чекбоксов. Не хочется каждый раз заново инициализировать иконки. Перемещение их в `SettingsScreen` приведет к тому, что они будут заново инициализироваться при создании экрана. Плюс есть еще `DrivingOptionsScreen`, который использует эти же иконки. Надо придумать, где и как их хранить. Это относится не только к чекбоксам, но и к остальным иконкам на других экранах. Пока что решение такое.
Review

Нельзя изменить иконку на созданном объекте:

  • Создание происходит через Builder. На этапе установки обработчика невозможно получить доступ к объекту
  • В объектах нет методов для изменения его состояния. Т.е. какого-нибудь setIcon(...) нет.

Видимо, такая концепция AA. Приходится перерисовывать весь экран.

Нельзя изменить иконку на созданном объекте: * Создание происходит через Builder. На этапе установки обработчика невозможно получить доступ к объекту * В объектах нет методов для изменения его состояния. Т.е. какого-нибудь `setIcon(...)` нет. Видимо, такая концепция AA. Приходится перерисовывать весь экран.
biodranik commented 2022-12-08 21:23:02 +00:00 (Migrated from github.com)
Review

Там ещё есть ограничение, насколько часто можно перерисовывать экран.

Там ещё есть ограничение, насколько _часто_ можно перерисовывать экран.
Review

Перерисовывать один и тот же экран можно неограниченное количество раз
https://developer.android.com/static/training/cars/Android%20for%20Cars%20App%20Library%20design%20guidelines.pdf
Слайд 11

Перерисовывать один и тот же экран можно неограниченное количество раз https://developer.android.com/static/training/cars/Android%20for%20Cars%20App%20Library%20design%20guidelines.pdf Слайд 11
Review

Ну и конкретно для MapTemplate:

Template Restrictions In regards to template refreshes, as described in onGetTemplate, this template is considered a refresh of a previous one if:
The template title has not changed, and the number of rows and the title (not counting spans) of each row between the previous and new Panes or ItemLists have not changed.

https://developer.android.com/reference/androidx/car/app/navigation/model/MapTemplate

Ну и конкретно для MapTemplate: > Template Restrictions In regards to template refreshes, as described in [onGetTemplate](https://developer.android.com/reference/androidx/car/app/Screen#onGetTemplate()), this template is considered a refresh of a previous one if: The template title has not changed, and the number of rows and the title (not counting spans) of each row between the previous and new [Pane](https://developer.android.com/reference/androidx/car/app/model/Pane)s or [ItemList](https://developer.android.com/reference/androidx/car/app/model/ItemList)s have not changed. https://developer.android.com/reference/androidx/car/app/navigation/model/MapTemplate
biodranik commented 2022-12-11 12:34:26 +00:00 (Migrated from github.com)
Review
  1. Зачем что-то хранить в памяти, если оно не видно на экране/не используется, и нужно только в каких-то исключительных сценариях?
  2. На сколько большой оверхед от этих иконок, что от него важно прямо сейчас подстраховаться?
1. Зачем что-то хранить в памяти, если оно не видно на экране/не используется, и нужно только в каких-то исключительных сценариях? 2. На сколько большой оверхед от этих иконок, что от него важно прямо сейчас подстраховаться?
biodranik commented 2022-12-11 12:35:11 +00:00 (Migrated from github.com)
Review
    builder.setImage(getter.get() ? mCheckboxSelectedIcon : mCheckboxIcon);
```suggestion builder.setImage(getter.get() ? mCheckboxSelectedIcon : mCheckboxIcon); ```
biodranik commented 2022-12-11 12:36:01 +00:00 (Migrated from github.com)
Review

Если getter.get() используется больше одного раза, имеет смысл вынести его в final boolean

Если getter.get() используется больше одного раза, имеет смысл вынести его в `final boolean`
biodranik commented 2022-12-11 12:36:17 +00:00 (Migrated from github.com)
Review

ditto

ditto
Review

Ок. Перенес это в SettingsScreen и DrivingOptionsScreen

Ок. Перенес это в `SettingsScreen` и `DrivingOptionsScreen`
{
Review

I suggest merging this code back to SettingsScreen.java. It is not needed anywhere outside SettingsScreen.java.

I suggest merging this code back to `SettingsScreen.java`. It is not needed anywhere outside `SettingsScreen.java`.
Review

It looks like a hack. Why this invalidation is needed in this place?

It looks like a hack. Why this invalidation is needed in this place?
Review

Да, но createSharedPrefsCheckbox, как и createDrivingOptionCheckbox использует иконки чекбоксов. Не хочется каждый раз заново инициализировать иконки. Перемещение их в SettingsScreen приведет к тому, что они будут заново инициализироваться при создании экрана. Плюс есть еще DrivingOptionsScreen, который использует эти же иконки. Надо придумать, где и как их хранить. Это относится не только к чекбоксам, но и к остальным иконкам на других экранах. Пока что решение такое.

Да, но `createSharedPrefsCheckbox`, как и `createDrivingOptionCheckbox` использует иконки чекбоксов. Не хочется каждый раз заново инициализировать иконки. Перемещение их в `SettingsScreen` приведет к тому, что они будут заново инициализироваться при создании экрана. Плюс есть еще `DrivingOptionsScreen`, который использует эти же иконки. Надо придумать, где и как их хранить. Это относится не только к чекбоксам, но и к остальным иконкам на других экранах. Пока что решение такое.
Review

Нельзя изменить иконку на созданном объекте:

  • Создание происходит через Builder. На этапе установки обработчика невозможно получить доступ к объекту
  • В объектах нет методов для изменения его состояния. Т.е. какого-нибудь setIcon(...) нет.

Видимо, такая концепция AA. Приходится перерисовывать весь экран.

Нельзя изменить иконку на созданном объекте: * Создание происходит через Builder. На этапе установки обработчика невозможно получить доступ к объекту * В объектах нет методов для изменения его состояния. Т.е. какого-нибудь `setIcon(...)` нет. Видимо, такая концепция AA. Приходится перерисовывать весь экран.
biodranik commented 2022-12-08 21:23:02 +00:00 (Migrated from github.com)
Review

Там ещё есть ограничение, насколько часто можно перерисовывать экран.

Там ещё есть ограничение, насколько _часто_ можно перерисовывать экран.
Review

Перерисовывать один и тот же экран можно неограниченное количество раз
https://developer.android.com/static/training/cars/Android%20for%20Cars%20App%20Library%20design%20guidelines.pdf
Слайд 11

Перерисовывать один и тот же экран можно неограниченное количество раз https://developer.android.com/static/training/cars/Android%20for%20Cars%20App%20Library%20design%20guidelines.pdf Слайд 11
Review

Ну и конкретно для MapTemplate:

Template Restrictions In regards to template refreshes, as described in onGetTemplate, this template is considered a refresh of a previous one if:
The template title has not changed, and the number of rows and the title (not counting spans) of each row between the previous and new Panes or ItemLists have not changed.

https://developer.android.com/reference/androidx/car/app/navigation/model/MapTemplate

Ну и конкретно для MapTemplate: > Template Restrictions In regards to template refreshes, as described in [onGetTemplate](https://developer.android.com/reference/androidx/car/app/Screen#onGetTemplate()), this template is considered a refresh of a previous one if: The template title has not changed, and the number of rows and the title (not counting spans) of each row between the previous and new [Pane](https://developer.android.com/reference/androidx/car/app/model/Pane)s or [ItemList](https://developer.android.com/reference/androidx/car/app/model/ItemList)s have not changed. https://developer.android.com/reference/androidx/car/app/navigation/model/MapTemplate
biodranik commented 2022-12-11 12:34:26 +00:00 (Migrated from github.com)
Review
  1. Зачем что-то хранить в памяти, если оно не видно на экране/не используется, и нужно только в каких-то исключительных сценариях?
  2. На сколько большой оверхед от этих иконок, что от него важно прямо сейчас подстраховаться?
1. Зачем что-то хранить в памяти, если оно не видно на экране/не используется, и нужно только в каких-то исключительных сценариях? 2. На сколько большой оверхед от этих иконок, что от него важно прямо сейчас подстраховаться?
biodranik commented 2022-12-11 12:35:11 +00:00 (Migrated from github.com)
Review
    builder.setImage(getter.get() ? mCheckboxSelectedIcon : mCheckboxIcon);
```suggestion builder.setImage(getter.get() ? mCheckboxSelectedIcon : mCheckboxIcon); ```
biodranik commented 2022-12-11 12:36:01 +00:00 (Migrated from github.com)
Review

Если getter.get() используется больше одного раза, имеет смысл вынести его в final boolean

Если getter.get() используется больше одного раза, имеет смысл вынести его в `final boolean`
biodranik commented 2022-12-11 12:36:17 +00:00 (Migrated from github.com)
Review

ditto

ditto
Review

Ок. Перенес это в SettingsScreen и DrivingOptionsScreen

Ок. Перенес это в `SettingsScreen` и `DrivingOptionsScreen`
final CarIcon iconSettings = new CarIcon.Builder(IconCompat.createWithResource(context, R.drawable.ic_settings)).build();
Review

I suggest merging this code back to SettingsScreen.java. It is not needed anywhere outside SettingsScreen.java.

I suggest merging this code back to `SettingsScreen.java`. It is not needed anywhere outside `SettingsScreen.java`.
Review

It looks like a hack. Why this invalidation is needed in this place?

It looks like a hack. Why this invalidation is needed in this place?
Review

Да, но createSharedPrefsCheckbox, как и createDrivingOptionCheckbox использует иконки чекбоксов. Не хочется каждый раз заново инициализировать иконки. Перемещение их в SettingsScreen приведет к тому, что они будут заново инициализироваться при создании экрана. Плюс есть еще DrivingOptionsScreen, который использует эти же иконки. Надо придумать, где и как их хранить. Это относится не только к чекбоксам, но и к остальным иконкам на других экранах. Пока что решение такое.

Да, но `createSharedPrefsCheckbox`, как и `createDrivingOptionCheckbox` использует иконки чекбоксов. Не хочется каждый раз заново инициализировать иконки. Перемещение их в `SettingsScreen` приведет к тому, что они будут заново инициализироваться при создании экрана. Плюс есть еще `DrivingOptionsScreen`, который использует эти же иконки. Надо придумать, где и как их хранить. Это относится не только к чекбоксам, но и к остальным иконкам на других экранах. Пока что решение такое.
Review

Нельзя изменить иконку на созданном объекте:

  • Создание происходит через Builder. На этапе установки обработчика невозможно получить доступ к объекту
  • В объектах нет методов для изменения его состояния. Т.е. какого-нибудь setIcon(...) нет.

Видимо, такая концепция AA. Приходится перерисовывать весь экран.

Нельзя изменить иконку на созданном объекте: * Создание происходит через Builder. На этапе установки обработчика невозможно получить доступ к объекту * В объектах нет методов для изменения его состояния. Т.е. какого-нибудь `setIcon(...)` нет. Видимо, такая концепция AA. Приходится перерисовывать весь экран.
biodranik commented 2022-12-08 21:23:02 +00:00 (Migrated from github.com)
Review

Там ещё есть ограничение, насколько часто можно перерисовывать экран.

Там ещё есть ограничение, насколько _часто_ можно перерисовывать экран.
Review

Перерисовывать один и тот же экран можно неограниченное количество раз
https://developer.android.com/static/training/cars/Android%20for%20Cars%20App%20Library%20design%20guidelines.pdf
Слайд 11

Перерисовывать один и тот же экран можно неограниченное количество раз https://developer.android.com/static/training/cars/Android%20for%20Cars%20App%20Library%20design%20guidelines.pdf Слайд 11
Review

Ну и конкретно для MapTemplate:

Template Restrictions In regards to template refreshes, as described in onGetTemplate, this template is considered a refresh of a previous one if:
The template title has not changed, and the number of rows and the title (not counting spans) of each row between the previous and new Panes or ItemLists have not changed.

https://developer.android.com/reference/androidx/car/app/navigation/model/MapTemplate

Ну и конкретно для MapTemplate: > Template Restrictions In regards to template refreshes, as described in [onGetTemplate](https://developer.android.com/reference/androidx/car/app/Screen#onGetTemplate()), this template is considered a refresh of a previous one if: The template title has not changed, and the number of rows and the title (not counting spans) of each row between the previous and new [Pane](https://developer.android.com/reference/androidx/car/app/model/Pane)s or [ItemList](https://developer.android.com/reference/androidx/car/app/model/ItemList)s have not changed. https://developer.android.com/reference/androidx/car/app/navigation/model/MapTemplate
biodranik commented 2022-12-11 12:34:26 +00:00 (Migrated from github.com)
Review
  1. Зачем что-то хранить в памяти, если оно не видно на экране/не используется, и нужно только в каких-то исключительных сценариях?
  2. На сколько большой оверхед от этих иконок, что от него важно прямо сейчас подстраховаться?
1. Зачем что-то хранить в памяти, если оно не видно на экране/не используется, и нужно только в каких-то исключительных сценариях? 2. На сколько большой оверхед от этих иконок, что от него важно прямо сейчас подстраховаться?
biodranik commented 2022-12-11 12:35:11 +00:00 (Migrated from github.com)
Review
    builder.setImage(getter.get() ? mCheckboxSelectedIcon : mCheckboxIcon);
```suggestion builder.setImage(getter.get() ? mCheckboxSelectedIcon : mCheckboxIcon); ```
biodranik commented 2022-12-11 12:36:01 +00:00 (Migrated from github.com)
Review

Если getter.get() используется больше одного раза, имеет смысл вынести его в final boolean

Если getter.get() используется больше одного раза, имеет смысл вынести его в `final boolean`
biodranik commented 2022-12-11 12:36:17 +00:00 (Migrated from github.com)
Review

ditto

ditto
Review

Ок. Перенес это в SettingsScreen и DrivingOptionsScreen

Ок. Перенес это в `SettingsScreen` и `DrivingOptionsScreen`
final Action settings = new Action.Builder().setIcon(iconSettings).setOnClickListener(
Review

I suggest merging this code back to SettingsScreen.java. It is not needed anywhere outside SettingsScreen.java.

I suggest merging this code back to `SettingsScreen.java`. It is not needed anywhere outside `SettingsScreen.java`.
Review

It looks like a hack. Why this invalidation is needed in this place?

It looks like a hack. Why this invalidation is needed in this place?
Review

Да, но createSharedPrefsCheckbox, как и createDrivingOptionCheckbox использует иконки чекбоксов. Не хочется каждый раз заново инициализировать иконки. Перемещение их в SettingsScreen приведет к тому, что они будут заново инициализироваться при создании экрана. Плюс есть еще DrivingOptionsScreen, который использует эти же иконки. Надо придумать, где и как их хранить. Это относится не только к чекбоксам, но и к остальным иконкам на других экранах. Пока что решение такое.

Да, но `createSharedPrefsCheckbox`, как и `createDrivingOptionCheckbox` использует иконки чекбоксов. Не хочется каждый раз заново инициализировать иконки. Перемещение их в `SettingsScreen` приведет к тому, что они будут заново инициализироваться при создании экрана. Плюс есть еще `DrivingOptionsScreen`, который использует эти же иконки. Надо придумать, где и как их хранить. Это относится не только к чекбоксам, но и к остальным иконкам на других экранах. Пока что решение такое.
Review

Нельзя изменить иконку на созданном объекте:

  • Создание происходит через Builder. На этапе установки обработчика невозможно получить доступ к объекту
  • В объектах нет методов для изменения его состояния. Т.е. какого-нибудь setIcon(...) нет.

Видимо, такая концепция AA. Приходится перерисовывать весь экран.

Нельзя изменить иконку на созданном объекте: * Создание происходит через Builder. На этапе установки обработчика невозможно получить доступ к объекту * В объектах нет методов для изменения его состояния. Т.е. какого-нибудь `setIcon(...)` нет. Видимо, такая концепция AA. Приходится перерисовывать весь экран.
biodranik commented 2022-12-08 21:23:02 +00:00 (Migrated from github.com)
Review

Там ещё есть ограничение, насколько часто можно перерисовывать экран.

Там ещё есть ограничение, насколько _часто_ можно перерисовывать экран.
Review

Перерисовывать один и тот же экран можно неограниченное количество раз
https://developer.android.com/static/training/cars/Android%20for%20Cars%20App%20Library%20design%20guidelines.pdf
Слайд 11

Перерисовывать один и тот же экран можно неограниченное количество раз https://developer.android.com/static/training/cars/Android%20for%20Cars%20App%20Library%20design%20guidelines.pdf Слайд 11
Review

Ну и конкретно для MapTemplate:

Template Restrictions In regards to template refreshes, as described in onGetTemplate, this template is considered a refresh of a previous one if:
The template title has not changed, and the number of rows and the title (not counting spans) of each row between the previous and new Panes or ItemLists have not changed.

https://developer.android.com/reference/androidx/car/app/navigation/model/MapTemplate

Ну и конкретно для MapTemplate: > Template Restrictions In regards to template refreshes, as described in [onGetTemplate](https://developer.android.com/reference/androidx/car/app/Screen#onGetTemplate()), this template is considered a refresh of a previous one if: The template title has not changed, and the number of rows and the title (not counting spans) of each row between the previous and new [Pane](https://developer.android.com/reference/androidx/car/app/model/Pane)s or [ItemList](https://developer.android.com/reference/androidx/car/app/model/ItemList)s have not changed. https://developer.android.com/reference/androidx/car/app/navigation/model/MapTemplate
biodranik commented 2022-12-11 12:34:26 +00:00 (Migrated from github.com)
Review
  1. Зачем что-то хранить в памяти, если оно не видно на экране/не используется, и нужно только в каких-то исключительных сценариях?
  2. На сколько большой оверхед от этих иконок, что от него важно прямо сейчас подстраховаться?
1. Зачем что-то хранить в памяти, если оно не видно на экране/не используется, и нужно только в каких-то исключительных сценариях? 2. На сколько большой оверхед от этих иконок, что от него важно прямо сейчас подстраховаться?
biodranik commented 2022-12-11 12:35:11 +00:00 (Migrated from github.com)
Review
    builder.setImage(getter.get() ? mCheckboxSelectedIcon : mCheckboxIcon);
```suggestion builder.setImage(getter.get() ? mCheckboxSelectedIcon : mCheckboxIcon); ```
biodranik commented 2022-12-11 12:36:01 +00:00 (Migrated from github.com)
Review

Если getter.get() используется больше одного раза, имеет смысл вынести его в final boolean

Если getter.get() используется больше одного раза, имеет смысл вынести его в `final boolean`
biodranik commented 2022-12-11 12:36:17 +00:00 (Migrated from github.com)
Review

ditto

ditto
Review

Ок. Перенес это в SettingsScreen и DrivingOptionsScreen

Ок. Перенес это в `SettingsScreen` и `DrivingOptionsScreen`
() -> context.getCarService(ScreenManager.class).push(new SettingsScreen(context, surfaceRenderer))
Review

I suggest merging this code back to SettingsScreen.java. It is not needed anywhere outside SettingsScreen.java.

I suggest merging this code back to `SettingsScreen.java`. It is not needed anywhere outside `SettingsScreen.java`.
Review

It looks like a hack. Why this invalidation is needed in this place?

It looks like a hack. Why this invalidation is needed in this place?
Review

Да, но createSharedPrefsCheckbox, как и createDrivingOptionCheckbox использует иконки чекбоксов. Не хочется каждый раз заново инициализировать иконки. Перемещение их в SettingsScreen приведет к тому, что они будут заново инициализироваться при создании экрана. Плюс есть еще DrivingOptionsScreen, который использует эти же иконки. Надо придумать, где и как их хранить. Это относится не только к чекбоксам, но и к остальным иконкам на других экранах. Пока что решение такое.

Да, но `createSharedPrefsCheckbox`, как и `createDrivingOptionCheckbox` использует иконки чекбоксов. Не хочется каждый раз заново инициализировать иконки. Перемещение их в `SettingsScreen` приведет к тому, что они будут заново инициализироваться при создании экрана. Плюс есть еще `DrivingOptionsScreen`, который использует эти же иконки. Надо придумать, где и как их хранить. Это относится не только к чекбоксам, но и к остальным иконкам на других экранах. Пока что решение такое.
Review

Нельзя изменить иконку на созданном объекте:

  • Создание происходит через Builder. На этапе установки обработчика невозможно получить доступ к объекту
  • В объектах нет методов для изменения его состояния. Т.е. какого-нибудь setIcon(...) нет.

Видимо, такая концепция AA. Приходится перерисовывать весь экран.

Нельзя изменить иконку на созданном объекте: * Создание происходит через Builder. На этапе установки обработчика невозможно получить доступ к объекту * В объектах нет методов для изменения его состояния. Т.е. какого-нибудь `setIcon(...)` нет. Видимо, такая концепция AA. Приходится перерисовывать весь экран.
biodranik commented 2022-12-08 21:23:02 +00:00 (Migrated from github.com)
Review

Там ещё есть ограничение, насколько часто можно перерисовывать экран.

Там ещё есть ограничение, насколько _часто_ можно перерисовывать экран.
Review

Перерисовывать один и тот же экран можно неограниченное количество раз
https://developer.android.com/static/training/cars/Android%20for%20Cars%20App%20Library%20design%20guidelines.pdf
Слайд 11

Перерисовывать один и тот же экран можно неограниченное количество раз https://developer.android.com/static/training/cars/Android%20for%20Cars%20App%20Library%20design%20guidelines.pdf Слайд 11
Review

Ну и конкретно для MapTemplate:

Template Restrictions In regards to template refreshes, as described in onGetTemplate, this template is considered a refresh of a previous one if:
The template title has not changed, and the number of rows and the title (not counting spans) of each row between the previous and new Panes or ItemLists have not changed.

https://developer.android.com/reference/androidx/car/app/navigation/model/MapTemplate

Ну и конкретно для MapTemplate: > Template Restrictions In regards to template refreshes, as described in [onGetTemplate](https://developer.android.com/reference/androidx/car/app/Screen#onGetTemplate()), this template is considered a refresh of a previous one if: The template title has not changed, and the number of rows and the title (not counting spans) of each row between the previous and new [Pane](https://developer.android.com/reference/androidx/car/app/model/Pane)s or [ItemList](https://developer.android.com/reference/androidx/car/app/model/ItemList)s have not changed. https://developer.android.com/reference/androidx/car/app/navigation/model/MapTemplate
biodranik commented 2022-12-11 12:34:26 +00:00 (Migrated from github.com)
Review
  1. Зачем что-то хранить в памяти, если оно не видно на экране/не используется, и нужно только в каких-то исключительных сценариях?
  2. На сколько большой оверхед от этих иконок, что от него важно прямо сейчас подстраховаться?
1. Зачем что-то хранить в памяти, если оно не видно на экране/не используется, и нужно только в каких-то исключительных сценариях? 2. На сколько большой оверхед от этих иконок, что от него важно прямо сейчас подстраховаться?
biodranik commented 2022-12-11 12:35:11 +00:00 (Migrated from github.com)
Review
    builder.setImage(getter.get() ? mCheckboxSelectedIcon : mCheckboxIcon);
```suggestion builder.setImage(getter.get() ? mCheckboxSelectedIcon : mCheckboxIcon); ```
biodranik commented 2022-12-11 12:36:01 +00:00 (Migrated from github.com)
Review

Если getter.get() используется больше одного раза, имеет смысл вынести его в final boolean

Если getter.get() используется больше одного раза, имеет смысл вынести его в `final boolean`
biodranik commented 2022-12-11 12:36:17 +00:00 (Migrated from github.com)
Review

ditto

ditto
Review

Ок. Перенес это в SettingsScreen и DrivingOptionsScreen

Ок. Перенес это в `SettingsScreen` и `DrivingOptionsScreen`
).build();
Review

I suggest merging this code back to SettingsScreen.java. It is not needed anywhere outside SettingsScreen.java.

I suggest merging this code back to `SettingsScreen.java`. It is not needed anywhere outside `SettingsScreen.java`.
Review

It looks like a hack. Why this invalidation is needed in this place?

It looks like a hack. Why this invalidation is needed in this place?
Review

Да, но createSharedPrefsCheckbox, как и createDrivingOptionCheckbox использует иконки чекбоксов. Не хочется каждый раз заново инициализировать иконки. Перемещение их в SettingsScreen приведет к тому, что они будут заново инициализироваться при создании экрана. Плюс есть еще DrivingOptionsScreen, который использует эти же иконки. Надо придумать, где и как их хранить. Это относится не только к чекбоксам, но и к остальным иконкам на других экранах. Пока что решение такое.

Да, но `createSharedPrefsCheckbox`, как и `createDrivingOptionCheckbox` использует иконки чекбоксов. Не хочется каждый раз заново инициализировать иконки. Перемещение их в `SettingsScreen` приведет к тому, что они будут заново инициализироваться при создании экрана. Плюс есть еще `DrivingOptionsScreen`, который использует эти же иконки. Надо придумать, где и как их хранить. Это относится не только к чекбоксам, но и к остальным иконкам на других экранах. Пока что решение такое.
Review

Нельзя изменить иконку на созданном объекте:

  • Создание происходит через Builder. На этапе установки обработчика невозможно получить доступ к объекту
  • В объектах нет методов для изменения его состояния. Т.е. какого-нибудь setIcon(...) нет.

Видимо, такая концепция AA. Приходится перерисовывать весь экран.

Нельзя изменить иконку на созданном объекте: * Создание происходит через Builder. На этапе установки обработчика невозможно получить доступ к объекту * В объектах нет методов для изменения его состояния. Т.е. какого-нибудь `setIcon(...)` нет. Видимо, такая концепция AA. Приходится перерисовывать весь экран.
biodranik commented 2022-12-08 21:23:02 +00:00 (Migrated from github.com)
Review

Там ещё есть ограничение, насколько часто можно перерисовывать экран.

Там ещё есть ограничение, насколько _часто_ можно перерисовывать экран.
Review

Перерисовывать один и тот же экран можно неограниченное количество раз
https://developer.android.com/static/training/cars/Android%20for%20Cars%20App%20Library%20design%20guidelines.pdf
Слайд 11

Перерисовывать один и тот же экран можно неограниченное количество раз https://developer.android.com/static/training/cars/Android%20for%20Cars%20App%20Library%20design%20guidelines.pdf Слайд 11
Review

Ну и конкретно для MapTemplate:

Template Restrictions In regards to template refreshes, as described in onGetTemplate, this template is considered a refresh of a previous one if:
The template title has not changed, and the number of rows and the title (not counting spans) of each row between the previous and new Panes or ItemLists have not changed.

https://developer.android.com/reference/androidx/car/app/navigation/model/MapTemplate

Ну и конкретно для MapTemplate: > Template Restrictions In regards to template refreshes, as described in [onGetTemplate](https://developer.android.com/reference/androidx/car/app/Screen#onGetTemplate()), this template is considered a refresh of a previous one if: The template title has not changed, and the number of rows and the title (not counting spans) of each row between the previous and new [Pane](https://developer.android.com/reference/androidx/car/app/model/Pane)s or [ItemList](https://developer.android.com/reference/androidx/car/app/model/ItemList)s have not changed. https://developer.android.com/reference/androidx/car/app/navigation/model/MapTemplate
biodranik commented 2022-12-11 12:34:26 +00:00 (Migrated from github.com)
Review
  1. Зачем что-то хранить в памяти, если оно не видно на экране/не используется, и нужно только в каких-то исключительных сценариях?
  2. На сколько большой оверхед от этих иконок, что от него важно прямо сейчас подстраховаться?
1. Зачем что-то хранить в памяти, если оно не видно на экране/не используется, и нужно только в каких-то исключительных сценариях? 2. На сколько большой оверхед от этих иконок, что от него важно прямо сейчас подстраховаться?
biodranik commented 2022-12-11 12:35:11 +00:00 (Migrated from github.com)
Review
    builder.setImage(getter.get() ? mCheckboxSelectedIcon : mCheckboxIcon);
```suggestion builder.setImage(getter.get() ? mCheckboxSelectedIcon : mCheckboxIcon); ```
biodranik commented 2022-12-11 12:36:01 +00:00 (Migrated from github.com)
Review

Если getter.get() используется больше одного раза, имеет смысл вынести его в final boolean

Если getter.get() используется больше одного раза, имеет смысл вынести его в `final boolean`
biodranik commented 2022-12-11 12:36:17 +00:00 (Migrated from github.com)
Review

ditto

ditto
Review

Ок. Перенес это в SettingsScreen и DrivingOptionsScreen

Ок. Перенес это в `SettingsScreen` и `DrivingOptionsScreen`
return new ActionStrip.Builder().addAction(settings).build();
Review

I suggest merging this code back to SettingsScreen.java. It is not needed anywhere outside SettingsScreen.java.

I suggest merging this code back to `SettingsScreen.java`. It is not needed anywhere outside `SettingsScreen.java`.
Review

It looks like a hack. Why this invalidation is needed in this place?

It looks like a hack. Why this invalidation is needed in this place?
Review

Да, но createSharedPrefsCheckbox, как и createDrivingOptionCheckbox использует иконки чекбоксов. Не хочется каждый раз заново инициализировать иконки. Перемещение их в SettingsScreen приведет к тому, что они будут заново инициализироваться при создании экрана. Плюс есть еще DrivingOptionsScreen, который использует эти же иконки. Надо придумать, где и как их хранить. Это относится не только к чекбоксам, но и к остальным иконкам на других экранах. Пока что решение такое.

Да, но `createSharedPrefsCheckbox`, как и `createDrivingOptionCheckbox` использует иконки чекбоксов. Не хочется каждый раз заново инициализировать иконки. Перемещение их в `SettingsScreen` приведет к тому, что они будут заново инициализироваться при создании экрана. Плюс есть еще `DrivingOptionsScreen`, который использует эти же иконки. Надо придумать, где и как их хранить. Это относится не только к чекбоксам, но и к остальным иконкам на других экранах. Пока что решение такое.
Review

Нельзя изменить иконку на созданном объекте:

  • Создание происходит через Builder. На этапе установки обработчика невозможно получить доступ к объекту
  • В объектах нет методов для изменения его состояния. Т.е. какого-нибудь setIcon(...) нет.

Видимо, такая концепция AA. Приходится перерисовывать весь экран.

Нельзя изменить иконку на созданном объекте: * Создание происходит через Builder. На этапе установки обработчика невозможно получить доступ к объекту * В объектах нет методов для изменения его состояния. Т.е. какого-нибудь `setIcon(...)` нет. Видимо, такая концепция AA. Приходится перерисовывать весь экран.
biodranik commented 2022-12-08 21:23:02 +00:00 (Migrated from github.com)
Review

Там ещё есть ограничение, насколько часто можно перерисовывать экран.

Там ещё есть ограничение, насколько _часто_ можно перерисовывать экран.
Review

Перерисовывать один и тот же экран можно неограниченное количество раз
https://developer.android.com/static/training/cars/Android%20for%20Cars%20App%20Library%20design%20guidelines.pdf
Слайд 11

Перерисовывать один и тот же экран можно неограниченное количество раз https://developer.android.com/static/training/cars/Android%20for%20Cars%20App%20Library%20design%20guidelines.pdf Слайд 11
Review

Ну и конкретно для MapTemplate:

Template Restrictions In regards to template refreshes, as described in onGetTemplate, this template is considered a refresh of a previous one if:
The template title has not changed, and the number of rows and the title (not counting spans) of each row between the previous and new Panes or ItemLists have not changed.

https://developer.android.com/reference/androidx/car/app/navigation/model/MapTemplate

Ну и конкретно для MapTemplate: > Template Restrictions In regards to template refreshes, as described in [onGetTemplate](https://developer.android.com/reference/androidx/car/app/Screen#onGetTemplate()), this template is considered a refresh of a previous one if: The template title has not changed, and the number of rows and the title (not counting spans) of each row between the previous and new [Pane](https://developer.android.com/reference/androidx/car/app/model/Pane)s or [ItemList](https://developer.android.com/reference/androidx/car/app/model/ItemList)s have not changed. https://developer.android.com/reference/androidx/car/app/navigation/model/MapTemplate
biodranik commented 2022-12-11 12:34:26 +00:00 (Migrated from github.com)
Review
  1. Зачем что-то хранить в памяти, если оно не видно на экране/не используется, и нужно только в каких-то исключительных сценариях?
  2. На сколько большой оверхед от этих иконок, что от него важно прямо сейчас подстраховаться?
1. Зачем что-то хранить в памяти, если оно не видно на экране/не используется, и нужно только в каких-то исключительных сценариях? 2. На сколько большой оверхед от этих иконок, что от него важно прямо сейчас подстраховаться?
biodranik commented 2022-12-11 12:35:11 +00:00 (Migrated from github.com)
Review
    builder.setImage(getter.get() ? mCheckboxSelectedIcon : mCheckboxIcon);
```suggestion builder.setImage(getter.get() ? mCheckboxSelectedIcon : mCheckboxIcon); ```
biodranik commented 2022-12-11 12:36:01 +00:00 (Migrated from github.com)
Review

Если getter.get() используется больше одного раза, имеет смысл вынести его в final boolean

Если getter.get() используется больше одного раза, имеет смысл вынести его в `final boolean`
biodranik commented 2022-12-11 12:36:17 +00:00 (Migrated from github.com)
Review

ditto

ditto
Review

Ок. Перенес это в SettingsScreen и DrivingOptionsScreen

Ок. Перенес это в `SettingsScreen` и `DrivingOptionsScreen`
}
Review

I suggest merging this code back to SettingsScreen.java. It is not needed anywhere outside SettingsScreen.java.

I suggest merging this code back to `SettingsScreen.java`. It is not needed anywhere outside `SettingsScreen.java`.
Review

It looks like a hack. Why this invalidation is needed in this place?

It looks like a hack. Why this invalidation is needed in this place?
Review

Да, но createSharedPrefsCheckbox, как и createDrivingOptionCheckbox использует иконки чекбоксов. Не хочется каждый раз заново инициализировать иконки. Перемещение их в SettingsScreen приведет к тому, что они будут заново инициализироваться при создании экрана. Плюс есть еще DrivingOptionsScreen, который использует эти же иконки. Надо придумать, где и как их хранить. Это относится не только к чекбоксам, но и к остальным иконкам на других экранах. Пока что решение такое.

Да, но `createSharedPrefsCheckbox`, как и `createDrivingOptionCheckbox` использует иконки чекбоксов. Не хочется каждый раз заново инициализировать иконки. Перемещение их в `SettingsScreen` приведет к тому, что они будут заново инициализироваться при создании экрана. Плюс есть еще `DrivingOptionsScreen`, который использует эти же иконки. Надо придумать, где и как их хранить. Это относится не только к чекбоксам, но и к остальным иконкам на других экранах. Пока что решение такое.
Review

Нельзя изменить иконку на созданном объекте:

  • Создание происходит через Builder. На этапе установки обработчика невозможно получить доступ к объекту
  • В объектах нет методов для изменения его состояния. Т.е. какого-нибудь setIcon(...) нет.

Видимо, такая концепция AA. Приходится перерисовывать весь экран.

Нельзя изменить иконку на созданном объекте: * Создание происходит через Builder. На этапе установки обработчика невозможно получить доступ к объекту * В объектах нет методов для изменения его состояния. Т.е. какого-нибудь `setIcon(...)` нет. Видимо, такая концепция AA. Приходится перерисовывать весь экран.
biodranik commented 2022-12-08 21:23:02 +00:00 (Migrated from github.com)
Review

Там ещё есть ограничение, насколько часто можно перерисовывать экран.

Там ещё есть ограничение, насколько _часто_ можно перерисовывать экран.
Review

Перерисовывать один и тот же экран можно неограниченное количество раз
https://developer.android.com/static/training/cars/Android%20for%20Cars%20App%20Library%20design%20guidelines.pdf
Слайд 11

Перерисовывать один и тот же экран можно неограниченное количество раз https://developer.android.com/static/training/cars/Android%20for%20Cars%20App%20Library%20design%20guidelines.pdf Слайд 11
Review

Ну и конкретно для MapTemplate:

Template Restrictions In regards to template refreshes, as described in onGetTemplate, this template is considered a refresh of a previous one if:
The template title has not changed, and the number of rows and the title (not counting spans) of each row between the previous and new Panes or ItemLists have not changed.

https://developer.android.com/reference/androidx/car/app/navigation/model/MapTemplate

Ну и конкретно для MapTemplate: > Template Restrictions In regards to template refreshes, as described in [onGetTemplate](https://developer.android.com/reference/androidx/car/app/Screen#onGetTemplate()), this template is considered a refresh of a previous one if: The template title has not changed, and the number of rows and the title (not counting spans) of each row between the previous and new [Pane](https://developer.android.com/reference/androidx/car/app/model/Pane)s or [ItemList](https://developer.android.com/reference/androidx/car/app/model/ItemList)s have not changed. https://developer.android.com/reference/androidx/car/app/navigation/model/MapTemplate
biodranik commented 2022-12-11 12:34:26 +00:00 (Migrated from github.com)
Review
  1. Зачем что-то хранить в памяти, если оно не видно на экране/не используется, и нужно только в каких-то исключительных сценариях?
  2. На сколько большой оверхед от этих иконок, что от него важно прямо сейчас подстраховаться?
1. Зачем что-то хранить в памяти, если оно не видно на экране/не используется, и нужно только в каких-то исключительных сценариях? 2. На сколько большой оверхед от этих иконок, что от него важно прямо сейчас подстраховаться?
biodranik commented 2022-12-11 12:35:11 +00:00 (Migrated from github.com)
Review
    builder.setImage(getter.get() ? mCheckboxSelectedIcon : mCheckboxIcon);
```suggestion builder.setImage(getter.get() ? mCheckboxSelectedIcon : mCheckboxIcon); ```
biodranik commented 2022-12-11 12:36:01 +00:00 (Migrated from github.com)
Review

Если getter.get() используется больше одного раза, имеет смысл вынести его в final boolean

Если getter.get() используется больше одного раза, имеет смысл вынести его в `final boolean`
biodranik commented 2022-12-11 12:36:17 +00:00 (Migrated from github.com)
Review

ditto

ditto
Review

Ок. Перенес это в SettingsScreen и DrivingOptionsScreen

Ок. Перенес это в `SettingsScreen` и `DrivingOptionsScreen`
Review

I suggest merging this code back to SettingsScreen.java. It is not needed anywhere outside SettingsScreen.java.

I suggest merging this code back to `SettingsScreen.java`. It is not needed anywhere outside `SettingsScreen.java`.
Review

It looks like a hack. Why this invalidation is needed in this place?

It looks like a hack. Why this invalidation is needed in this place?
Review

Да, но createSharedPrefsCheckbox, как и createDrivingOptionCheckbox использует иконки чекбоксов. Не хочется каждый раз заново инициализировать иконки. Перемещение их в SettingsScreen приведет к тому, что они будут заново инициализироваться при создании экрана. Плюс есть еще DrivingOptionsScreen, который использует эти же иконки. Надо придумать, где и как их хранить. Это относится не только к чекбоксам, но и к остальным иконкам на других экранах. Пока что решение такое.

Да, но `createSharedPrefsCheckbox`, как и `createDrivingOptionCheckbox` использует иконки чекбоксов. Не хочется каждый раз заново инициализировать иконки. Перемещение их в `SettingsScreen` приведет к тому, что они будут заново инициализироваться при создании экрана. Плюс есть еще `DrivingOptionsScreen`, который использует эти же иконки. Надо придумать, где и как их хранить. Это относится не только к чекбоксам, но и к остальным иконкам на других экранах. Пока что решение такое.
Review

Нельзя изменить иконку на созданном объекте:

  • Создание происходит через Builder. На этапе установки обработчика невозможно получить доступ к объекту
  • В объектах нет методов для изменения его состояния. Т.е. какого-нибудь setIcon(...) нет.

Видимо, такая концепция AA. Приходится перерисовывать весь экран.

Нельзя изменить иконку на созданном объекте: * Создание происходит через Builder. На этапе установки обработчика невозможно получить доступ к объекту * В объектах нет методов для изменения его состояния. Т.е. какого-нибудь `setIcon(...)` нет. Видимо, такая концепция AA. Приходится перерисовывать весь экран.
biodranik commented 2022-12-08 21:23:02 +00:00 (Migrated from github.com)
Review

Там ещё есть ограничение, насколько часто можно перерисовывать экран.

Там ещё есть ограничение, насколько _часто_ можно перерисовывать экран.
Review

Перерисовывать один и тот же экран можно неограниченное количество раз
https://developer.android.com/static/training/cars/Android%20for%20Cars%20App%20Library%20design%20guidelines.pdf
Слайд 11

Перерисовывать один и тот же экран можно неограниченное количество раз https://developer.android.com/static/training/cars/Android%20for%20Cars%20App%20Library%20design%20guidelines.pdf Слайд 11
Review

Ну и конкретно для MapTemplate:

Template Restrictions In regards to template refreshes, as described in onGetTemplate, this template is considered a refresh of a previous one if:
The template title has not changed, and the number of rows and the title (not counting spans) of each row between the previous and new Panes or ItemLists have not changed.

https://developer.android.com/reference/androidx/car/app/navigation/model/MapTemplate

Ну и конкретно для MapTemplate: > Template Restrictions In regards to template refreshes, as described in [onGetTemplate](https://developer.android.com/reference/androidx/car/app/Screen#onGetTemplate()), this template is considered a refresh of a previous one if: The template title has not changed, and the number of rows and the title (not counting spans) of each row between the previous and new [Pane](https://developer.android.com/reference/androidx/car/app/model/Pane)s or [ItemList](https://developer.android.com/reference/androidx/car/app/model/ItemList)s have not changed. https://developer.android.com/reference/androidx/car/app/navigation/model/MapTemplate
biodranik commented 2022-12-11 12:34:26 +00:00 (Migrated from github.com)
Review
  1. Зачем что-то хранить в памяти, если оно не видно на экране/не используется, и нужно только в каких-то исключительных сценариях?
  2. На сколько большой оверхед от этих иконок, что от него важно прямо сейчас подстраховаться?
1. Зачем что-то хранить в памяти, если оно не видно на экране/не используется, и нужно только в каких-то исключительных сценариях? 2. На сколько большой оверхед от этих иконок, что от него важно прямо сейчас подстраховаться?
biodranik commented 2022-12-11 12:35:11 +00:00 (Migrated from github.com)
Review
    builder.setImage(getter.get() ? mCheckboxSelectedIcon : mCheckboxIcon);
```suggestion builder.setImage(getter.get() ? mCheckboxSelectedIcon : mCheckboxIcon); ```
biodranik commented 2022-12-11 12:36:01 +00:00 (Migrated from github.com)
Review

Если getter.get() используется больше одного раза, имеет смысл вынести его в final boolean

Если getter.get() используется больше одного раза, имеет смысл вынести его в `final boolean`
biodranik commented 2022-12-11 12:36:17 +00:00 (Migrated from github.com)
Review

ditto

ditto
Review

Ок. Перенес это в SettingsScreen и DrivingOptionsScreen

Ок. Перенес это в `SettingsScreen` и `DrivingOptionsScreen`
public static MapController createMapController(@NonNull CarContext context, @NonNull SurfaceRenderer surfaceRenderer)
Review

I suggest merging this code back to SettingsScreen.java. It is not needed anywhere outside SettingsScreen.java.

I suggest merging this code back to `SettingsScreen.java`. It is not needed anywhere outside `SettingsScreen.java`.
Review

It looks like a hack. Why this invalidation is needed in this place?

It looks like a hack. Why this invalidation is needed in this place?
Review

Да, но createSharedPrefsCheckbox, как и createDrivingOptionCheckbox использует иконки чекбоксов. Не хочется каждый раз заново инициализировать иконки. Перемещение их в SettingsScreen приведет к тому, что они будут заново инициализироваться при создании экрана. Плюс есть еще DrivingOptionsScreen, который использует эти же иконки. Надо придумать, где и как их хранить. Это относится не только к чекбоксам, но и к остальным иконкам на других экранах. Пока что решение такое.

Да, но `createSharedPrefsCheckbox`, как и `createDrivingOptionCheckbox` использует иконки чекбоксов. Не хочется каждый раз заново инициализировать иконки. Перемещение их в `SettingsScreen` приведет к тому, что они будут заново инициализироваться при создании экрана. Плюс есть еще `DrivingOptionsScreen`, который использует эти же иконки. Надо придумать, где и как их хранить. Это относится не только к чекбоксам, но и к остальным иконкам на других экранах. Пока что решение такое.
Review

Нельзя изменить иконку на созданном объекте:

  • Создание происходит через Builder. На этапе установки обработчика невозможно получить доступ к объекту
  • В объектах нет методов для изменения его состояния. Т.е. какого-нибудь setIcon(...) нет.

Видимо, такая концепция AA. Приходится перерисовывать весь экран.

Нельзя изменить иконку на созданном объекте: * Создание происходит через Builder. На этапе установки обработчика невозможно получить доступ к объекту * В объектах нет методов для изменения его состояния. Т.е. какого-нибудь `setIcon(...)` нет. Видимо, такая концепция AA. Приходится перерисовывать весь экран.
biodranik commented 2022-12-08 21:23:02 +00:00 (Migrated from github.com)
Review

Там ещё есть ограничение, насколько часто можно перерисовывать экран.

Там ещё есть ограничение, насколько _часто_ можно перерисовывать экран.
Review

Перерисовывать один и тот же экран можно неограниченное количество раз
https://developer.android.com/static/training/cars/Android%20for%20Cars%20App%20Library%20design%20guidelines.pdf
Слайд 11

Перерисовывать один и тот же экран можно неограниченное количество раз https://developer.android.com/static/training/cars/Android%20for%20Cars%20App%20Library%20design%20guidelines.pdf Слайд 11
Review

Ну и конкретно для MapTemplate:

Template Restrictions In regards to template refreshes, as described in onGetTemplate, this template is considered a refresh of a previous one if:
The template title has not changed, and the number of rows and the title (not counting spans) of each row between the previous and new Panes or ItemLists have not changed.

https://developer.android.com/reference/androidx/car/app/navigation/model/MapTemplate

Ну и конкретно для MapTemplate: > Template Restrictions In regards to template refreshes, as described in [onGetTemplate](https://developer.android.com/reference/androidx/car/app/Screen#onGetTemplate()), this template is considered a refresh of a previous one if: The template title has not changed, and the number of rows and the title (not counting spans) of each row between the previous and new [Pane](https://developer.android.com/reference/androidx/car/app/model/Pane)s or [ItemList](https://developer.android.com/reference/androidx/car/app/model/ItemList)s have not changed. https://developer.android.com/reference/androidx/car/app/navigation/model/MapTemplate
biodranik commented 2022-12-11 12:34:26 +00:00 (Migrated from github.com)
Review
  1. Зачем что-то хранить в памяти, если оно не видно на экране/не используется, и нужно только в каких-то исключительных сценариях?
  2. На сколько большой оверхед от этих иконок, что от него важно прямо сейчас подстраховаться?
1. Зачем что-то хранить в памяти, если оно не видно на экране/не используется, и нужно только в каких-то исключительных сценариях? 2. На сколько большой оверхед от этих иконок, что от него важно прямо сейчас подстраховаться?
biodranik commented 2022-12-11 12:35:11 +00:00 (Migrated from github.com)
Review
    builder.setImage(getter.get() ? mCheckboxSelectedIcon : mCheckboxIcon);
```suggestion builder.setImage(getter.get() ? mCheckboxSelectedIcon : mCheckboxIcon); ```
biodranik commented 2022-12-11 12:36:01 +00:00 (Migrated from github.com)
Review

Если getter.get() используется больше одного раза, имеет смысл вынести его в final boolean

Если getter.get() используется больше одного раза, имеет смысл вынести его в `final boolean`
biodranik commented 2022-12-11 12:36:17 +00:00 (Migrated from github.com)
Review

ditto

ditto
Review

Ок. Перенес это в SettingsScreen и DrivingOptionsScreen

Ок. Перенес это в `SettingsScreen` и `DrivingOptionsScreen`
{
Review

I suggest merging this code back to SettingsScreen.java. It is not needed anywhere outside SettingsScreen.java.

I suggest merging this code back to `SettingsScreen.java`. It is not needed anywhere outside `SettingsScreen.java`.
Review

It looks like a hack. Why this invalidation is needed in this place?

It looks like a hack. Why this invalidation is needed in this place?
Review

Да, но createSharedPrefsCheckbox, как и createDrivingOptionCheckbox использует иконки чекбоксов. Не хочется каждый раз заново инициализировать иконки. Перемещение их в SettingsScreen приведет к тому, что они будут заново инициализироваться при создании экрана. Плюс есть еще DrivingOptionsScreen, который использует эти же иконки. Надо придумать, где и как их хранить. Это относится не только к чекбоксам, но и к остальным иконкам на других экранах. Пока что решение такое.

Да, но `createSharedPrefsCheckbox`, как и `createDrivingOptionCheckbox` использует иконки чекбоксов. Не хочется каждый раз заново инициализировать иконки. Перемещение их в `SettingsScreen` приведет к тому, что они будут заново инициализироваться при создании экрана. Плюс есть еще `DrivingOptionsScreen`, который использует эти же иконки. Надо придумать, где и как их хранить. Это относится не только к чекбоксам, но и к остальным иконкам на других экранах. Пока что решение такое.
Review

Нельзя изменить иконку на созданном объекте:

  • Создание происходит через Builder. На этапе установки обработчика невозможно получить доступ к объекту
  • В объектах нет методов для изменения его состояния. Т.е. какого-нибудь setIcon(...) нет.

Видимо, такая концепция AA. Приходится перерисовывать весь экран.

Нельзя изменить иконку на созданном объекте: * Создание происходит через Builder. На этапе установки обработчика невозможно получить доступ к объекту * В объектах нет методов для изменения его состояния. Т.е. какого-нибудь `setIcon(...)` нет. Видимо, такая концепция AA. Приходится перерисовывать весь экран.
biodranik commented 2022-12-08 21:23:02 +00:00 (Migrated from github.com)
Review

Там ещё есть ограничение, насколько часто можно перерисовывать экран.

Там ещё есть ограничение, насколько _часто_ можно перерисовывать экран.
Review

Перерисовывать один и тот же экран можно неограниченное количество раз
https://developer.android.com/static/training/cars/Android%20for%20Cars%20App%20Library%20design%20guidelines.pdf
Слайд 11

Перерисовывать один и тот же экран можно неограниченное количество раз https://developer.android.com/static/training/cars/Android%20for%20Cars%20App%20Library%20design%20guidelines.pdf Слайд 11
Review

Ну и конкретно для MapTemplate:

Template Restrictions In regards to template refreshes, as described in onGetTemplate, this template is considered a refresh of a previous one if:
The template title has not changed, and the number of rows and the title (not counting spans) of each row between the previous and new Panes or ItemLists have not changed.

https://developer.android.com/reference/androidx/car/app/navigation/model/MapTemplate

Ну и конкретно для MapTemplate: > Template Restrictions In regards to template refreshes, as described in [onGetTemplate](https://developer.android.com/reference/androidx/car/app/Screen#onGetTemplate()), this template is considered a refresh of a previous one if: The template title has not changed, and the number of rows and the title (not counting spans) of each row between the previous and new [Pane](https://developer.android.com/reference/androidx/car/app/model/Pane)s or [ItemList](https://developer.android.com/reference/androidx/car/app/model/ItemList)s have not changed. https://developer.android.com/reference/androidx/car/app/navigation/model/MapTemplate
biodranik commented 2022-12-11 12:34:26 +00:00 (Migrated from github.com)
Review
  1. Зачем что-то хранить в памяти, если оно не видно на экране/не используется, и нужно только в каких-то исключительных сценариях?
  2. На сколько большой оверхед от этих иконок, что от него важно прямо сейчас подстраховаться?
1. Зачем что-то хранить в памяти, если оно не видно на экране/не используется, и нужно только в каких-то исключительных сценариях? 2. На сколько большой оверхед от этих иконок, что от него важно прямо сейчас подстраховаться?
biodranik commented 2022-12-11 12:35:11 +00:00 (Migrated from github.com)
Review
    builder.setImage(getter.get() ? mCheckboxSelectedIcon : mCheckboxIcon);
```suggestion builder.setImage(getter.get() ? mCheckboxSelectedIcon : mCheckboxIcon); ```
biodranik commented 2022-12-11 12:36:01 +00:00 (Migrated from github.com)
Review

Если getter.get() используется больше одного раза, имеет смысл вынести его в final boolean

Если getter.get() используется больше одного раза, имеет смысл вынести его в `final boolean`
biodranik commented 2022-12-11 12:36:17 +00:00 (Migrated from github.com)
Review

ditto

ditto
Review

Ок. Перенес это в SettingsScreen и DrivingOptionsScreen

Ок. Перенес это в `SettingsScreen` и `DrivingOptionsScreen`
final CarIcon iconPlus = new CarIcon.Builder(IconCompat.createWithResource(context, R.drawable.ic_plus)).build();
Review

I suggest merging this code back to SettingsScreen.java. It is not needed anywhere outside SettingsScreen.java.

I suggest merging this code back to `SettingsScreen.java`. It is not needed anywhere outside `SettingsScreen.java`.
Review

It looks like a hack. Why this invalidation is needed in this place?

It looks like a hack. Why this invalidation is needed in this place?
Review

Да, но createSharedPrefsCheckbox, как и createDrivingOptionCheckbox использует иконки чекбоксов. Не хочется каждый раз заново инициализировать иконки. Перемещение их в SettingsScreen приведет к тому, что они будут заново инициализироваться при создании экрана. Плюс есть еще DrivingOptionsScreen, который использует эти же иконки. Надо придумать, где и как их хранить. Это относится не только к чекбоксам, но и к остальным иконкам на других экранах. Пока что решение такое.

Да, но `createSharedPrefsCheckbox`, как и `createDrivingOptionCheckbox` использует иконки чекбоксов. Не хочется каждый раз заново инициализировать иконки. Перемещение их в `SettingsScreen` приведет к тому, что они будут заново инициализироваться при создании экрана. Плюс есть еще `DrivingOptionsScreen`, который использует эти же иконки. Надо придумать, где и как их хранить. Это относится не только к чекбоксам, но и к остальным иконкам на других экранах. Пока что решение такое.
Review

Нельзя изменить иконку на созданном объекте:

  • Создание происходит через Builder. На этапе установки обработчика невозможно получить доступ к объекту
  • В объектах нет методов для изменения его состояния. Т.е. какого-нибудь setIcon(...) нет.

Видимо, такая концепция AA. Приходится перерисовывать весь экран.

Нельзя изменить иконку на созданном объекте: * Создание происходит через Builder. На этапе установки обработчика невозможно получить доступ к объекту * В объектах нет методов для изменения его состояния. Т.е. какого-нибудь `setIcon(...)` нет. Видимо, такая концепция AA. Приходится перерисовывать весь экран.
biodranik commented 2022-12-08 21:23:02 +00:00 (Migrated from github.com)
Review

Там ещё есть ограничение, насколько часто можно перерисовывать экран.

Там ещё есть ограничение, насколько _часто_ можно перерисовывать экран.
Review

Перерисовывать один и тот же экран можно неограниченное количество раз
https://developer.android.com/static/training/cars/Android%20for%20Cars%20App%20Library%20design%20guidelines.pdf
Слайд 11

Перерисовывать один и тот же экран можно неограниченное количество раз https://developer.android.com/static/training/cars/Android%20for%20Cars%20App%20Library%20design%20guidelines.pdf Слайд 11
Review

Ну и конкретно для MapTemplate:

Template Restrictions In regards to template refreshes, as described in onGetTemplate, this template is considered a refresh of a previous one if:
The template title has not changed, and the number of rows and the title (not counting spans) of each row between the previous and new Panes or ItemLists have not changed.

https://developer.android.com/reference/androidx/car/app/navigation/model/MapTemplate

Ну и конкретно для MapTemplate: > Template Restrictions In regards to template refreshes, as described in [onGetTemplate](https://developer.android.com/reference/androidx/car/app/Screen#onGetTemplate()), this template is considered a refresh of a previous one if: The template title has not changed, and the number of rows and the title (not counting spans) of each row between the previous and new [Pane](https://developer.android.com/reference/androidx/car/app/model/Pane)s or [ItemList](https://developer.android.com/reference/androidx/car/app/model/ItemList)s have not changed. https://developer.android.com/reference/androidx/car/app/navigation/model/MapTemplate
biodranik commented 2022-12-11 12:34:26 +00:00 (Migrated from github.com)
Review
  1. Зачем что-то хранить в памяти, если оно не видно на экране/не используется, и нужно только в каких-то исключительных сценариях?
  2. На сколько большой оверхед от этих иконок, что от него важно прямо сейчас подстраховаться?
1. Зачем что-то хранить в памяти, если оно не видно на экране/не используется, и нужно только в каких-то исключительных сценариях? 2. На сколько большой оверхед от этих иконок, что от него важно прямо сейчас подстраховаться?
biodranik commented 2022-12-11 12:35:11 +00:00 (Migrated from github.com)
Review
    builder.setImage(getter.get() ? mCheckboxSelectedIcon : mCheckboxIcon);
```suggestion builder.setImage(getter.get() ? mCheckboxSelectedIcon : mCheckboxIcon); ```
biodranik commented 2022-12-11 12:36:01 +00:00 (Migrated from github.com)
Review

Если getter.get() используется больше одного раза, имеет смысл вынести его в final boolean

Если getter.get() используется больше одного раза, имеет смысл вынести его в `final boolean`
biodranik commented 2022-12-11 12:36:17 +00:00 (Migrated from github.com)
Review

ditto

ditto
Review

Ок. Перенес это в SettingsScreen и DrivingOptionsScreen

Ок. Перенес это в `SettingsScreen` и `DrivingOptionsScreen`
final CarIcon iconMinus = new CarIcon.Builder(IconCompat.createWithResource(context, R.drawable.ic_minus)).build();
Review

I suggest merging this code back to SettingsScreen.java. It is not needed anywhere outside SettingsScreen.java.

I suggest merging this code back to `SettingsScreen.java`. It is not needed anywhere outside `SettingsScreen.java`.
Review

It looks like a hack. Why this invalidation is needed in this place?

It looks like a hack. Why this invalidation is needed in this place?
Review

Да, но createSharedPrefsCheckbox, как и createDrivingOptionCheckbox использует иконки чекбоксов. Не хочется каждый раз заново инициализировать иконки. Перемещение их в SettingsScreen приведет к тому, что они будут заново инициализироваться при создании экрана. Плюс есть еще DrivingOptionsScreen, который использует эти же иконки. Надо придумать, где и как их хранить. Это относится не только к чекбоксам, но и к остальным иконкам на других экранах. Пока что решение такое.

Да, но `createSharedPrefsCheckbox`, как и `createDrivingOptionCheckbox` использует иконки чекбоксов. Не хочется каждый раз заново инициализировать иконки. Перемещение их в `SettingsScreen` приведет к тому, что они будут заново инициализироваться при создании экрана. Плюс есть еще `DrivingOptionsScreen`, который использует эти же иконки. Надо придумать, где и как их хранить. Это относится не только к чекбоксам, но и к остальным иконкам на других экранах. Пока что решение такое.
Review

Нельзя изменить иконку на созданном объекте:

  • Создание происходит через Builder. На этапе установки обработчика невозможно получить доступ к объекту
  • В объектах нет методов для изменения его состояния. Т.е. какого-нибудь setIcon(...) нет.

Видимо, такая концепция AA. Приходится перерисовывать весь экран.

Нельзя изменить иконку на созданном объекте: * Создание происходит через Builder. На этапе установки обработчика невозможно получить доступ к объекту * В объектах нет методов для изменения его состояния. Т.е. какого-нибудь `setIcon(...)` нет. Видимо, такая концепция AA. Приходится перерисовывать весь экран.
biodranik commented 2022-12-08 21:23:02 +00:00 (Migrated from github.com)
Review

Там ещё есть ограничение, насколько часто можно перерисовывать экран.

Там ещё есть ограничение, насколько _часто_ можно перерисовывать экран.
Review

Перерисовывать один и тот же экран можно неограниченное количество раз
https://developer.android.com/static/training/cars/Android%20for%20Cars%20App%20Library%20design%20guidelines.pdf
Слайд 11

Перерисовывать один и тот же экран можно неограниченное количество раз https://developer.android.com/static/training/cars/Android%20for%20Cars%20App%20Library%20design%20guidelines.pdf Слайд 11
Review

Ну и конкретно для MapTemplate:

Template Restrictions In regards to template refreshes, as described in onGetTemplate, this template is considered a refresh of a previous one if:
The template title has not changed, and the number of rows and the title (not counting spans) of each row between the previous and new Panes or ItemLists have not changed.

https://developer.android.com/reference/androidx/car/app/navigation/model/MapTemplate

Ну и конкретно для MapTemplate: > Template Restrictions In regards to template refreshes, as described in [onGetTemplate](https://developer.android.com/reference/androidx/car/app/Screen#onGetTemplate()), this template is considered a refresh of a previous one if: The template title has not changed, and the number of rows and the title (not counting spans) of each row between the previous and new [Pane](https://developer.android.com/reference/androidx/car/app/model/Pane)s or [ItemList](https://developer.android.com/reference/androidx/car/app/model/ItemList)s have not changed. https://developer.android.com/reference/androidx/car/app/navigation/model/MapTemplate
biodranik commented 2022-12-11 12:34:26 +00:00 (Migrated from github.com)
Review
  1. Зачем что-то хранить в памяти, если оно не видно на экране/не используется, и нужно только в каких-то исключительных сценариях?
  2. На сколько большой оверхед от этих иконок, что от него важно прямо сейчас подстраховаться?
1. Зачем что-то хранить в памяти, если оно не видно на экране/не используется, и нужно только в каких-то исключительных сценариях? 2. На сколько большой оверхед от этих иконок, что от него важно прямо сейчас подстраховаться?
biodranik commented 2022-12-11 12:35:11 +00:00 (Migrated from github.com)
Review
    builder.setImage(getter.get() ? mCheckboxSelectedIcon : mCheckboxIcon);
```suggestion builder.setImage(getter.get() ? mCheckboxSelectedIcon : mCheckboxIcon); ```
biodranik commented 2022-12-11 12:36:01 +00:00 (Migrated from github.com)
Review

Если getter.get() используется больше одного раза, имеет смысл вынести его в final boolean

Если getter.get() используется больше одного раза, имеет смысл вынести его в `final boolean`
biodranik commented 2022-12-11 12:36:17 +00:00 (Migrated from github.com)
Review

ditto

ditto
Review

Ок. Перенес это в SettingsScreen и DrivingOptionsScreen

Ок. Перенес это в `SettingsScreen` и `DrivingOptionsScreen`
final CarIcon iconLocation = new CarIcon.Builder(IconCompat.createWithResource(context, R.drawable.ic_not_follow)).build();
Review

I suggest merging this code back to SettingsScreen.java. It is not needed anywhere outside SettingsScreen.java.

I suggest merging this code back to `SettingsScreen.java`. It is not needed anywhere outside `SettingsScreen.java`.
Review

It looks like a hack. Why this invalidation is needed in this place?

It looks like a hack. Why this invalidation is needed in this place?
Review

Да, но createSharedPrefsCheckbox, как и createDrivingOptionCheckbox использует иконки чекбоксов. Не хочется каждый раз заново инициализировать иконки. Перемещение их в SettingsScreen приведет к тому, что они будут заново инициализироваться при создании экрана. Плюс есть еще DrivingOptionsScreen, который использует эти же иконки. Надо придумать, где и как их хранить. Это относится не только к чекбоксам, но и к остальным иконкам на других экранах. Пока что решение такое.

Да, но `createSharedPrefsCheckbox`, как и `createDrivingOptionCheckbox` использует иконки чекбоксов. Не хочется каждый раз заново инициализировать иконки. Перемещение их в `SettingsScreen` приведет к тому, что они будут заново инициализироваться при создании экрана. Плюс есть еще `DrivingOptionsScreen`, который использует эти же иконки. Надо придумать, где и как их хранить. Это относится не только к чекбоксам, но и к остальным иконкам на других экранах. Пока что решение такое.
Review

Нельзя изменить иконку на созданном объекте:

  • Создание происходит через Builder. На этапе установки обработчика невозможно получить доступ к объекту
  • В объектах нет методов для изменения его состояния. Т.е. какого-нибудь setIcon(...) нет.

Видимо, такая концепция AA. Приходится перерисовывать весь экран.

Нельзя изменить иконку на созданном объекте: * Создание происходит через Builder. На этапе установки обработчика невозможно получить доступ к объекту * В объектах нет методов для изменения его состояния. Т.е. какого-нибудь `setIcon(...)` нет. Видимо, такая концепция AA. Приходится перерисовывать весь экран.
biodranik commented 2022-12-08 21:23:02 +00:00 (Migrated from github.com)
Review

Там ещё есть ограничение, насколько часто можно перерисовывать экран.

Там ещё есть ограничение, насколько _часто_ можно перерисовывать экран.
Review

Перерисовывать один и тот же экран можно неограниченное количество раз
https://developer.android.com/static/training/cars/Android%20for%20Cars%20App%20Library%20design%20guidelines.pdf
Слайд 11

Перерисовывать один и тот же экран можно неограниченное количество раз https://developer.android.com/static/training/cars/Android%20for%20Cars%20App%20Library%20design%20guidelines.pdf Слайд 11
Review

Ну и конкретно для MapTemplate:

Template Restrictions In regards to template refreshes, as described in onGetTemplate, this template is considered a refresh of a previous one if:
The template title has not changed, and the number of rows and the title (not counting spans) of each row between the previous and new Panes or ItemLists have not changed.

https://developer.android.com/reference/androidx/car/app/navigation/model/MapTemplate

Ну и конкретно для MapTemplate: > Template Restrictions In regards to template refreshes, as described in [onGetTemplate](https://developer.android.com/reference/androidx/car/app/Screen#onGetTemplate()), this template is considered a refresh of a previous one if: The template title has not changed, and the number of rows and the title (not counting spans) of each row between the previous and new [Pane](https://developer.android.com/reference/androidx/car/app/model/Pane)s or [ItemList](https://developer.android.com/reference/androidx/car/app/model/ItemList)s have not changed. https://developer.android.com/reference/androidx/car/app/navigation/model/MapTemplate
biodranik commented 2022-12-11 12:34:26 +00:00 (Migrated from github.com)
Review
  1. Зачем что-то хранить в памяти, если оно не видно на экране/не используется, и нужно только в каких-то исключительных сценариях?
  2. На сколько большой оверхед от этих иконок, что от него важно прямо сейчас подстраховаться?
1. Зачем что-то хранить в памяти, если оно не видно на экране/не используется, и нужно только в каких-то исключительных сценариях? 2. На сколько большой оверхед от этих иконок, что от него важно прямо сейчас подстраховаться?
biodranik commented 2022-12-11 12:35:11 +00:00 (Migrated from github.com)
Review
    builder.setImage(getter.get() ? mCheckboxSelectedIcon : mCheckboxIcon);
```suggestion builder.setImage(getter.get() ? mCheckboxSelectedIcon : mCheckboxIcon); ```
biodranik commented 2022-12-11 12:36:01 +00:00 (Migrated from github.com)
Review

Если getter.get() используется больше одного раза, имеет смысл вынести его в final boolean

Если getter.get() используется больше одного раза, имеет смысл вынести его в `final boolean`
biodranik commented 2022-12-11 12:36:17 +00:00 (Migrated from github.com)
Review

ditto

ditto
Review

Ок. Перенес это в SettingsScreen и DrivingOptionsScreen

Ок. Перенес это в `SettingsScreen` и `DrivingOptionsScreen`
Review

I suggest merging this code back to SettingsScreen.java. It is not needed anywhere outside SettingsScreen.java.

I suggest merging this code back to `SettingsScreen.java`. It is not needed anywhere outside `SettingsScreen.java`.
Review

It looks like a hack. Why this invalidation is needed in this place?

It looks like a hack. Why this invalidation is needed in this place?
Review

Да, но createSharedPrefsCheckbox, как и createDrivingOptionCheckbox использует иконки чекбоксов. Не хочется каждый раз заново инициализировать иконки. Перемещение их в SettingsScreen приведет к тому, что они будут заново инициализироваться при создании экрана. Плюс есть еще DrivingOptionsScreen, который использует эти же иконки. Надо придумать, где и как их хранить. Это относится не только к чекбоксам, но и к остальным иконкам на других экранах. Пока что решение такое.

Да, но `createSharedPrefsCheckbox`, как и `createDrivingOptionCheckbox` использует иконки чекбоксов. Не хочется каждый раз заново инициализировать иконки. Перемещение их в `SettingsScreen` приведет к тому, что они будут заново инициализироваться при создании экрана. Плюс есть еще `DrivingOptionsScreen`, который использует эти же иконки. Надо придумать, где и как их хранить. Это относится не только к чекбоксам, но и к остальным иконкам на других экранах. Пока что решение такое.
Review

Нельзя изменить иконку на созданном объекте:

  • Создание происходит через Builder. На этапе установки обработчика невозможно получить доступ к объекту
  • В объектах нет методов для изменения его состояния. Т.е. какого-нибудь setIcon(...) нет.

Видимо, такая концепция AA. Приходится перерисовывать весь экран.

Нельзя изменить иконку на созданном объекте: * Создание происходит через Builder. На этапе установки обработчика невозможно получить доступ к объекту * В объектах нет методов для изменения его состояния. Т.е. какого-нибудь `setIcon(...)` нет. Видимо, такая концепция AA. Приходится перерисовывать весь экран.
biodranik commented 2022-12-08 21:23:02 +00:00 (Migrated from github.com)
Review

Там ещё есть ограничение, насколько часто можно перерисовывать экран.

Там ещё есть ограничение, насколько _часто_ можно перерисовывать экран.
Review

Перерисовывать один и тот же экран можно неограниченное количество раз
https://developer.android.com/static/training/cars/Android%20for%20Cars%20App%20Library%20design%20guidelines.pdf
Слайд 11

Перерисовывать один и тот же экран можно неограниченное количество раз https://developer.android.com/static/training/cars/Android%20for%20Cars%20App%20Library%20design%20guidelines.pdf Слайд 11
Review

Ну и конкретно для MapTemplate:

Template Restrictions In regards to template refreshes, as described in onGetTemplate, this template is considered a refresh of a previous one if:
The template title has not changed, and the number of rows and the title (not counting spans) of each row between the previous and new Panes or ItemLists have not changed.

https://developer.android.com/reference/androidx/car/app/navigation/model/MapTemplate

Ну и конкретно для MapTemplate: > Template Restrictions In regards to template refreshes, as described in [onGetTemplate](https://developer.android.com/reference/androidx/car/app/Screen#onGetTemplate()), this template is considered a refresh of a previous one if: The template title has not changed, and the number of rows and the title (not counting spans) of each row between the previous and new [Pane](https://developer.android.com/reference/androidx/car/app/model/Pane)s or [ItemList](https://developer.android.com/reference/androidx/car/app/model/ItemList)s have not changed. https://developer.android.com/reference/androidx/car/app/navigation/model/MapTemplate
biodranik commented 2022-12-11 12:34:26 +00:00 (Migrated from github.com)
Review
  1. Зачем что-то хранить в памяти, если оно не видно на экране/не используется, и нужно только в каких-то исключительных сценариях?
  2. На сколько большой оверхед от этих иконок, что от него важно прямо сейчас подстраховаться?
1. Зачем что-то хранить в памяти, если оно не видно на экране/не используется, и нужно только в каких-то исключительных сценариях? 2. На сколько большой оверхед от этих иконок, что от него важно прямо сейчас подстраховаться?
biodranik commented 2022-12-11 12:35:11 +00:00 (Migrated from github.com)
Review
    builder.setImage(getter.get() ? mCheckboxSelectedIcon : mCheckboxIcon);
```suggestion builder.setImage(getter.get() ? mCheckboxSelectedIcon : mCheckboxIcon); ```
biodranik commented 2022-12-11 12:36:01 +00:00 (Migrated from github.com)
Review

Если getter.get() используется больше одного раза, имеет смысл вынести его в final boolean

Если getter.get() используется больше одного раза, имеет смысл вынести его в `final boolean`
biodranik commented 2022-12-11 12:36:17 +00:00 (Migrated from github.com)
Review

ditto

ditto
Review

Ок. Перенес это в SettingsScreen и DrivingOptionsScreen

Ок. Перенес это в `SettingsScreen` и `DrivingOptionsScreen`
final Action panAction = new Action.Builder(Action.PAN).build();
Review

I suggest merging this code back to SettingsScreen.java. It is not needed anywhere outside SettingsScreen.java.

I suggest merging this code back to `SettingsScreen.java`. It is not needed anywhere outside `SettingsScreen.java`.
Review

It looks like a hack. Why this invalidation is needed in this place?

It looks like a hack. Why this invalidation is needed in this place?
Review

Да, но createSharedPrefsCheckbox, как и createDrivingOptionCheckbox использует иконки чекбоксов. Не хочется каждый раз заново инициализировать иконки. Перемещение их в SettingsScreen приведет к тому, что они будут заново инициализироваться при создании экрана. Плюс есть еще DrivingOptionsScreen, который использует эти же иконки. Надо придумать, где и как их хранить. Это относится не только к чекбоксам, но и к остальным иконкам на других экранах. Пока что решение такое.

Да, но `createSharedPrefsCheckbox`, как и `createDrivingOptionCheckbox` использует иконки чекбоксов. Не хочется каждый раз заново инициализировать иконки. Перемещение их в `SettingsScreen` приведет к тому, что они будут заново инициализироваться при создании экрана. Плюс есть еще `DrivingOptionsScreen`, который использует эти же иконки. Надо придумать, где и как их хранить. Это относится не только к чекбоксам, но и к остальным иконкам на других экранах. Пока что решение такое.
Review

Нельзя изменить иконку на созданном объекте:

  • Создание происходит через Builder. На этапе установки обработчика невозможно получить доступ к объекту
  • В объектах нет методов для изменения его состояния. Т.е. какого-нибудь setIcon(...) нет.

Видимо, такая концепция AA. Приходится перерисовывать весь экран.

Нельзя изменить иконку на созданном объекте: * Создание происходит через Builder. На этапе установки обработчика невозможно получить доступ к объекту * В объектах нет методов для изменения его состояния. Т.е. какого-нибудь `setIcon(...)` нет. Видимо, такая концепция AA. Приходится перерисовывать весь экран.
biodranik commented 2022-12-08 21:23:02 +00:00 (Migrated from github.com)
Review

Там ещё есть ограничение, насколько часто можно перерисовывать экран.

Там ещё есть ограничение, насколько _часто_ можно перерисовывать экран.
Review

Перерисовывать один и тот же экран можно неограниченное количество раз
https://developer.android.com/static/training/cars/Android%20for%20Cars%20App%20Library%20design%20guidelines.pdf
Слайд 11

Перерисовывать один и тот же экран можно неограниченное количество раз https://developer.android.com/static/training/cars/Android%20for%20Cars%20App%20Library%20design%20guidelines.pdf Слайд 11
Review

Ну и конкретно для MapTemplate:

Template Restrictions In regards to template refreshes, as described in onGetTemplate, this template is considered a refresh of a previous one if:
The template title has not changed, and the number of rows and the title (not counting spans) of each row between the previous and new Panes or ItemLists have not changed.

https://developer.android.com/reference/androidx/car/app/navigation/model/MapTemplate

Ну и конкретно для MapTemplate: > Template Restrictions In regards to template refreshes, as described in [onGetTemplate](https://developer.android.com/reference/androidx/car/app/Screen#onGetTemplate()), this template is considered a refresh of a previous one if: The template title has not changed, and the number of rows and the title (not counting spans) of each row between the previous and new [Pane](https://developer.android.com/reference/androidx/car/app/model/Pane)s or [ItemList](https://developer.android.com/reference/androidx/car/app/model/ItemList)s have not changed. https://developer.android.com/reference/androidx/car/app/navigation/model/MapTemplate
biodranik commented 2022-12-11 12:34:26 +00:00 (Migrated from github.com)
Review
  1. Зачем что-то хранить в памяти, если оно не видно на экране/не используется, и нужно только в каких-то исключительных сценариях?
  2. На сколько большой оверхед от этих иконок, что от него важно прямо сейчас подстраховаться?
1. Зачем что-то хранить в памяти, если оно не видно на экране/не используется, и нужно только в каких-то исключительных сценариях? 2. На сколько большой оверхед от этих иконок, что от него важно прямо сейчас подстраховаться?
biodranik commented 2022-12-11 12:35:11 +00:00 (Migrated from github.com)
Review
    builder.setImage(getter.get() ? mCheckboxSelectedIcon : mCheckboxIcon);
```suggestion builder.setImage(getter.get() ? mCheckboxSelectedIcon : mCheckboxIcon); ```
biodranik commented 2022-12-11 12:36:01 +00:00 (Migrated from github.com)
Review

Если getter.get() используется больше одного раза, имеет смысл вынести его в final boolean

Если getter.get() используется больше одного раза, имеет смысл вынести его в `final boolean`
biodranik commented 2022-12-11 12:36:17 +00:00 (Migrated from github.com)
Review

ditto

ditto
Review

Ок. Перенес это в SettingsScreen и DrivingOptionsScreen

Ок. Перенес это в `SettingsScreen` и `DrivingOptionsScreen`
final Action location = new Action.Builder().setIcon(iconLocation).setOnClickListener(
Review

I suggest merging this code back to SettingsScreen.java. It is not needed anywhere outside SettingsScreen.java.

I suggest merging this code back to `SettingsScreen.java`. It is not needed anywhere outside `SettingsScreen.java`.
Review

It looks like a hack. Why this invalidation is needed in this place?

It looks like a hack. Why this invalidation is needed in this place?
Review

Да, но createSharedPrefsCheckbox, как и createDrivingOptionCheckbox использует иконки чекбоксов. Не хочется каждый раз заново инициализировать иконки. Перемещение их в SettingsScreen приведет к тому, что они будут заново инициализироваться при создании экрана. Плюс есть еще DrivingOptionsScreen, который использует эти же иконки. Надо придумать, где и как их хранить. Это относится не только к чекбоксам, но и к остальным иконкам на других экранах. Пока что решение такое.

Да, но `createSharedPrefsCheckbox`, как и `createDrivingOptionCheckbox` использует иконки чекбоксов. Не хочется каждый раз заново инициализировать иконки. Перемещение их в `SettingsScreen` приведет к тому, что они будут заново инициализироваться при создании экрана. Плюс есть еще `DrivingOptionsScreen`, который использует эти же иконки. Надо придумать, где и как их хранить. Это относится не только к чекбоксам, но и к остальным иконкам на других экранах. Пока что решение такое.
Review

Нельзя изменить иконку на созданном объекте:

  • Создание происходит через Builder. На этапе установки обработчика невозможно получить доступ к объекту
  • В объектах нет методов для изменения его состояния. Т.е. какого-нибудь setIcon(...) нет.

Видимо, такая концепция AA. Приходится перерисовывать весь экран.

Нельзя изменить иконку на созданном объекте: * Создание происходит через Builder. На этапе установки обработчика невозможно получить доступ к объекту * В объектах нет методов для изменения его состояния. Т.е. какого-нибудь `setIcon(...)` нет. Видимо, такая концепция AA. Приходится перерисовывать весь экран.
biodranik commented 2022-12-08 21:23:02 +00:00 (Migrated from github.com)
Review

Там ещё есть ограничение, насколько часто можно перерисовывать экран.

Там ещё есть ограничение, насколько _часто_ можно перерисовывать экран.
Review

Перерисовывать один и тот же экран можно неограниченное количество раз
https://developer.android.com/static/training/cars/Android%20for%20Cars%20App%20Library%20design%20guidelines.pdf
Слайд 11

Перерисовывать один и тот же экран можно неограниченное количество раз https://developer.android.com/static/training/cars/Android%20for%20Cars%20App%20Library%20design%20guidelines.pdf Слайд 11
Review

Ну и конкретно для MapTemplate:

Template Restrictions In regards to template refreshes, as described in onGetTemplate, this template is considered a refresh of a previous one if:
The template title has not changed, and the number of rows and the title (not counting spans) of each row between the previous and new Panes or ItemLists have not changed.

https://developer.android.com/reference/androidx/car/app/navigation/model/MapTemplate

Ну и конкретно для MapTemplate: > Template Restrictions In regards to template refreshes, as described in [onGetTemplate](https://developer.android.com/reference/androidx/car/app/Screen#onGetTemplate()), this template is considered a refresh of a previous one if: The template title has not changed, and the number of rows and the title (not counting spans) of each row between the previous and new [Pane](https://developer.android.com/reference/androidx/car/app/model/Pane)s or [ItemList](https://developer.android.com/reference/androidx/car/app/model/ItemList)s have not changed. https://developer.android.com/reference/androidx/car/app/navigation/model/MapTemplate
biodranik commented 2022-12-11 12:34:26 +00:00 (Migrated from github.com)
Review
  1. Зачем что-то хранить в памяти, если оно не видно на экране/не используется, и нужно только в каких-то исключительных сценариях?
  2. На сколько большой оверхед от этих иконок, что от него важно прямо сейчас подстраховаться?
1. Зачем что-то хранить в памяти, если оно не видно на экране/не используется, и нужно только в каких-то исключительных сценариях? 2. На сколько большой оверхед от этих иконок, что от него важно прямо сейчас подстраховаться?
biodranik commented 2022-12-11 12:35:11 +00:00 (Migrated from github.com)
Review
    builder.setImage(getter.get() ? mCheckboxSelectedIcon : mCheckboxIcon);
```suggestion builder.setImage(getter.get() ? mCheckboxSelectedIcon : mCheckboxIcon); ```
biodranik commented 2022-12-11 12:36:01 +00:00 (Migrated from github.com)
Review

Если getter.get() используется больше одного раза, имеет смысл вынести его в final boolean

Если getter.get() используется больше одного раза, имеет смысл вынести его в `final boolean`
biodranik commented 2022-12-11 12:36:17 +00:00 (Migrated from github.com)
Review

ditto

ditto
Review

Ок. Перенес это в SettingsScreen и DrivingOptionsScreen

Ок. Перенес это в `SettingsScreen` и `DrivingOptionsScreen`
() -> CarToast.makeText(context, "Location", CarToast.LENGTH_LONG).show()
Review

I suggest merging this code back to SettingsScreen.java. It is not needed anywhere outside SettingsScreen.java.

I suggest merging this code back to `SettingsScreen.java`. It is not needed anywhere outside `SettingsScreen.java`.
Review

It looks like a hack. Why this invalidation is needed in this place?

It looks like a hack. Why this invalidation is needed in this place?
Review

Да, но createSharedPrefsCheckbox, как и createDrivingOptionCheckbox использует иконки чекбоксов. Не хочется каждый раз заново инициализировать иконки. Перемещение их в SettingsScreen приведет к тому, что они будут заново инициализироваться при создании экрана. Плюс есть еще DrivingOptionsScreen, который использует эти же иконки. Надо придумать, где и как их хранить. Это относится не только к чекбоксам, но и к остальным иконкам на других экранах. Пока что решение такое.

Да, но `createSharedPrefsCheckbox`, как и `createDrivingOptionCheckbox` использует иконки чекбоксов. Не хочется каждый раз заново инициализировать иконки. Перемещение их в `SettingsScreen` приведет к тому, что они будут заново инициализироваться при создании экрана. Плюс есть еще `DrivingOptionsScreen`, который использует эти же иконки. Надо придумать, где и как их хранить. Это относится не только к чекбоксам, но и к остальным иконкам на других экранах. Пока что решение такое.
Review

Нельзя изменить иконку на созданном объекте:

  • Создание происходит через Builder. На этапе установки обработчика невозможно получить доступ к объекту
  • В объектах нет методов для изменения его состояния. Т.е. какого-нибудь setIcon(...) нет.

Видимо, такая концепция AA. Приходится перерисовывать весь экран.

Нельзя изменить иконку на созданном объекте: * Создание происходит через Builder. На этапе установки обработчика невозможно получить доступ к объекту * В объектах нет методов для изменения его состояния. Т.е. какого-нибудь `setIcon(...)` нет. Видимо, такая концепция AA. Приходится перерисовывать весь экран.
biodranik commented 2022-12-08 21:23:02 +00:00 (Migrated from github.com)
Review

Там ещё есть ограничение, насколько часто можно перерисовывать экран.

Там ещё есть ограничение, насколько _часто_ можно перерисовывать экран.
Review

Перерисовывать один и тот же экран можно неограниченное количество раз
https://developer.android.com/static/training/cars/Android%20for%20Cars%20App%20Library%20design%20guidelines.pdf
Слайд 11

Перерисовывать один и тот же экран можно неограниченное количество раз https://developer.android.com/static/training/cars/Android%20for%20Cars%20App%20Library%20design%20guidelines.pdf Слайд 11
Review

Ну и конкретно для MapTemplate:

Template Restrictions In regards to template refreshes, as described in onGetTemplate, this template is considered a refresh of a previous one if:
The template title has not changed, and the number of rows and the title (not counting spans) of each row between the previous and new Panes or ItemLists have not changed.

https://developer.android.com/reference/androidx/car/app/navigation/model/MapTemplate

Ну и конкретно для MapTemplate: > Template Restrictions In regards to template refreshes, as described in [onGetTemplate](https://developer.android.com/reference/androidx/car/app/Screen#onGetTemplate()), this template is considered a refresh of a previous one if: The template title has not changed, and the number of rows and the title (not counting spans) of each row between the previous and new [Pane](https://developer.android.com/reference/androidx/car/app/model/Pane)s or [ItemList](https://developer.android.com/reference/androidx/car/app/model/ItemList)s have not changed. https://developer.android.com/reference/androidx/car/app/navigation/model/MapTemplate
biodranik commented 2022-12-11 12:34:26 +00:00 (Migrated from github.com)
Review
  1. Зачем что-то хранить в памяти, если оно не видно на экране/не используется, и нужно только в каких-то исключительных сценариях?
  2. На сколько большой оверхед от этих иконок, что от него важно прямо сейчас подстраховаться?
1. Зачем что-то хранить в памяти, если оно не видно на экране/не используется, и нужно только в каких-то исключительных сценариях? 2. На сколько большой оверхед от этих иконок, что от него важно прямо сейчас подстраховаться?
biodranik commented 2022-12-11 12:35:11 +00:00 (Migrated from github.com)
Review
    builder.setImage(getter.get() ? mCheckboxSelectedIcon : mCheckboxIcon);
```suggestion builder.setImage(getter.get() ? mCheckboxSelectedIcon : mCheckboxIcon); ```
biodranik commented 2022-12-11 12:36:01 +00:00 (Migrated from github.com)
Review

Если getter.get() используется больше одного раза, имеет смысл вынести его в final boolean

Если getter.get() используется больше одного раза, имеет смысл вынести его в `final boolean`
biodranik commented 2022-12-11 12:36:17 +00:00 (Migrated from github.com)
Review

ditto

ditto
Review

Ок. Перенес это в SettingsScreen и DrivingOptionsScreen

Ок. Перенес это в `SettingsScreen` и `DrivingOptionsScreen`
).build();
Review

I suggest merging this code back to SettingsScreen.java. It is not needed anywhere outside SettingsScreen.java.

I suggest merging this code back to `SettingsScreen.java`. It is not needed anywhere outside `SettingsScreen.java`.
Review

It looks like a hack. Why this invalidation is needed in this place?

It looks like a hack. Why this invalidation is needed in this place?
Review

Да, но createSharedPrefsCheckbox, как и createDrivingOptionCheckbox использует иконки чекбоксов. Не хочется каждый раз заново инициализировать иконки. Перемещение их в SettingsScreen приведет к тому, что они будут заново инициализироваться при создании экрана. Плюс есть еще DrivingOptionsScreen, который использует эти же иконки. Надо придумать, где и как их хранить. Это относится не только к чекбоксам, но и к остальным иконкам на других экранах. Пока что решение такое.

Да, но `createSharedPrefsCheckbox`, как и `createDrivingOptionCheckbox` использует иконки чекбоксов. Не хочется каждый раз заново инициализировать иконки. Перемещение их в `SettingsScreen` приведет к тому, что они будут заново инициализироваться при создании экрана. Плюс есть еще `DrivingOptionsScreen`, который использует эти же иконки. Надо придумать, где и как их хранить. Это относится не только к чекбоксам, но и к остальным иконкам на других экранах. Пока что решение такое.
Review

Нельзя изменить иконку на созданном объекте:

  • Создание происходит через Builder. На этапе установки обработчика невозможно получить доступ к объекту
  • В объектах нет методов для изменения его состояния. Т.е. какого-нибудь setIcon(...) нет.

Видимо, такая концепция AA. Приходится перерисовывать весь экран.

Нельзя изменить иконку на созданном объекте: * Создание происходит через Builder. На этапе установки обработчика невозможно получить доступ к объекту * В объектах нет методов для изменения его состояния. Т.е. какого-нибудь `setIcon(...)` нет. Видимо, такая концепция AA. Приходится перерисовывать весь экран.
biodranik commented 2022-12-08 21:23:02 +00:00 (Migrated from github.com)
Review

Там ещё есть ограничение, насколько часто можно перерисовывать экран.

Там ещё есть ограничение, насколько _часто_ можно перерисовывать экран.
Review

Перерисовывать один и тот же экран можно неограниченное количество раз
https://developer.android.com/static/training/cars/Android%20for%20Cars%20App%20Library%20design%20guidelines.pdf
Слайд 11

Перерисовывать один и тот же экран можно неограниченное количество раз https://developer.android.com/static/training/cars/Android%20for%20Cars%20App%20Library%20design%20guidelines.pdf Слайд 11
Review

Ну и конкретно для MapTemplate:

Template Restrictions In regards to template refreshes, as described in onGetTemplate, this template is considered a refresh of a previous one if:
The template title has not changed, and the number of rows and the title (not counting spans) of each row between the previous and new Panes or ItemLists have not changed.

https://developer.android.com/reference/androidx/car/app/navigation/model/MapTemplate

Ну и конкретно для MapTemplate: > Template Restrictions In regards to template refreshes, as described in [onGetTemplate](https://developer.android.com/reference/androidx/car/app/Screen#onGetTemplate()), this template is considered a refresh of a previous one if: The template title has not changed, and the number of rows and the title (not counting spans) of each row between the previous and new [Pane](https://developer.android.com/reference/androidx/car/app/model/Pane)s or [ItemList](https://developer.android.com/reference/androidx/car/app/model/ItemList)s have not changed. https://developer.android.com/reference/androidx/car/app/navigation/model/MapTemplate
biodranik commented 2022-12-11 12:34:26 +00:00 (Migrated from github.com)
Review
  1. Зачем что-то хранить в памяти, если оно не видно на экране/не используется, и нужно только в каких-то исключительных сценариях?
  2. На сколько большой оверхед от этих иконок, что от него важно прямо сейчас подстраховаться?
1. Зачем что-то хранить в памяти, если оно не видно на экране/не используется, и нужно только в каких-то исключительных сценариях? 2. На сколько большой оверхед от этих иконок, что от него важно прямо сейчас подстраховаться?
biodranik commented 2022-12-11 12:35:11 +00:00 (Migrated from github.com)
Review
    builder.setImage(getter.get() ? mCheckboxSelectedIcon : mCheckboxIcon);
```suggestion builder.setImage(getter.get() ? mCheckboxSelectedIcon : mCheckboxIcon); ```
biodranik commented 2022-12-11 12:36:01 +00:00 (Migrated from github.com)
Review

Если getter.get() используется больше одного раза, имеет смысл вынести его в final boolean

Если getter.get() используется больше одного раза, имеет смысл вынести его в `final boolean`
biodranik commented 2022-12-11 12:36:17 +00:00 (Migrated from github.com)
Review

ditto

ditto
Review

Ок. Перенес это в SettingsScreen и DrivingOptionsScreen

Ок. Перенес это в `SettingsScreen` и `DrivingOptionsScreen`
final Action zoomIn = new Action.Builder().setIcon(iconPlus).setOnClickListener(surfaceRenderer::onZoomIn).build();
Review

I suggest merging this code back to SettingsScreen.java. It is not needed anywhere outside SettingsScreen.java.

I suggest merging this code back to `SettingsScreen.java`. It is not needed anywhere outside `SettingsScreen.java`.
Review

It looks like a hack. Why this invalidation is needed in this place?

It looks like a hack. Why this invalidation is needed in this place?
Review

Да, но createSharedPrefsCheckbox, как и createDrivingOptionCheckbox использует иконки чекбоксов. Не хочется каждый раз заново инициализировать иконки. Перемещение их в SettingsScreen приведет к тому, что они будут заново инициализироваться при создании экрана. Плюс есть еще DrivingOptionsScreen, который использует эти же иконки. Надо придумать, где и как их хранить. Это относится не только к чекбоксам, но и к остальным иконкам на других экранах. Пока что решение такое.

Да, но `createSharedPrefsCheckbox`, как и `createDrivingOptionCheckbox` использует иконки чекбоксов. Не хочется каждый раз заново инициализировать иконки. Перемещение их в `SettingsScreen` приведет к тому, что они будут заново инициализироваться при создании экрана. Плюс есть еще `DrivingOptionsScreen`, который использует эти же иконки. Надо придумать, где и как их хранить. Это относится не только к чекбоксам, но и к остальным иконкам на других экранах. Пока что решение такое.
Review

Нельзя изменить иконку на созданном объекте:

  • Создание происходит через Builder. На этапе установки обработчика невозможно получить доступ к объекту
  • В объектах нет методов для изменения его состояния. Т.е. какого-нибудь setIcon(...) нет.

Видимо, такая концепция AA. Приходится перерисовывать весь экран.

Нельзя изменить иконку на созданном объекте: * Создание происходит через Builder. На этапе установки обработчика невозможно получить доступ к объекту * В объектах нет методов для изменения его состояния. Т.е. какого-нибудь `setIcon(...)` нет. Видимо, такая концепция AA. Приходится перерисовывать весь экран.
biodranik commented 2022-12-08 21:23:02 +00:00 (Migrated from github.com)
Review

Там ещё есть ограничение, насколько часто можно перерисовывать экран.

Там ещё есть ограничение, насколько _часто_ можно перерисовывать экран.
Review

Перерисовывать один и тот же экран можно неограниченное количество раз
https://developer.android.com/static/training/cars/Android%20for%20Cars%20App%20Library%20design%20guidelines.pdf
Слайд 11

Перерисовывать один и тот же экран можно неограниченное количество раз https://developer.android.com/static/training/cars/Android%20for%20Cars%20App%20Library%20design%20guidelines.pdf Слайд 11
Review

Ну и конкретно для MapTemplate:

Template Restrictions In regards to template refreshes, as described in onGetTemplate, this template is considered a refresh of a previous one if:
The template title has not changed, and the number of rows and the title (not counting spans) of each row between the previous and new Panes or ItemLists have not changed.

https://developer.android.com/reference/androidx/car/app/navigation/model/MapTemplate

Ну и конкретно для MapTemplate: > Template Restrictions In regards to template refreshes, as described in [onGetTemplate](https://developer.android.com/reference/androidx/car/app/Screen#onGetTemplate()), this template is considered a refresh of a previous one if: The template title has not changed, and the number of rows and the title (not counting spans) of each row between the previous and new [Pane](https://developer.android.com/reference/androidx/car/app/model/Pane)s or [ItemList](https://developer.android.com/reference/androidx/car/app/model/ItemList)s have not changed. https://developer.android.com/reference/androidx/car/app/navigation/model/MapTemplate
biodranik commented 2022-12-11 12:34:26 +00:00 (Migrated from github.com)
Review
  1. Зачем что-то хранить в памяти, если оно не видно на экране/не используется, и нужно только в каких-то исключительных сценариях?
  2. На сколько большой оверхед от этих иконок, что от него важно прямо сейчас подстраховаться?
1. Зачем что-то хранить в памяти, если оно не видно на экране/не используется, и нужно только в каких-то исключительных сценариях? 2. На сколько большой оверхед от этих иконок, что от него важно прямо сейчас подстраховаться?
biodranik commented 2022-12-11 12:35:11 +00:00 (Migrated from github.com)
Review
    builder.setImage(getter.get() ? mCheckboxSelectedIcon : mCheckboxIcon);
```suggestion builder.setImage(getter.get() ? mCheckboxSelectedIcon : mCheckboxIcon); ```
biodranik commented 2022-12-11 12:36:01 +00:00 (Migrated from github.com)
Review

Если getter.get() используется больше одного раза, имеет смысл вынести его в final boolean

Если getter.get() используется больше одного раза, имеет смысл вынести его в `final boolean`
biodranik commented 2022-12-11 12:36:17 +00:00 (Migrated from github.com)
Review

ditto

ditto
Review

Ок. Перенес это в SettingsScreen и DrivingOptionsScreen

Ок. Перенес это в `SettingsScreen` и `DrivingOptionsScreen`
final Action zoomOut = new Action.Builder().setIcon(iconMinus).setOnClickListener(surfaceRenderer::onZoomOut).build();
Review

I suggest merging this code back to SettingsScreen.java. It is not needed anywhere outside SettingsScreen.java.

I suggest merging this code back to `SettingsScreen.java`. It is not needed anywhere outside `SettingsScreen.java`.
Review

It looks like a hack. Why this invalidation is needed in this place?

It looks like a hack. Why this invalidation is needed in this place?
Review

Да, но createSharedPrefsCheckbox, как и createDrivingOptionCheckbox использует иконки чекбоксов. Не хочется каждый раз заново инициализировать иконки. Перемещение их в SettingsScreen приведет к тому, что они будут заново инициализироваться при создании экрана. Плюс есть еще DrivingOptionsScreen, который использует эти же иконки. Надо придумать, где и как их хранить. Это относится не только к чекбоксам, но и к остальным иконкам на других экранах. Пока что решение такое.

Да, но `createSharedPrefsCheckbox`, как и `createDrivingOptionCheckbox` использует иконки чекбоксов. Не хочется каждый раз заново инициализировать иконки. Перемещение их в `SettingsScreen` приведет к тому, что они будут заново инициализироваться при создании экрана. Плюс есть еще `DrivingOptionsScreen`, который использует эти же иконки. Надо придумать, где и как их хранить. Это относится не только к чекбоксам, но и к остальным иконкам на других экранах. Пока что решение такое.
Review

Нельзя изменить иконку на созданном объекте:

  • Создание происходит через Builder. На этапе установки обработчика невозможно получить доступ к объекту
  • В объектах нет методов для изменения его состояния. Т.е. какого-нибудь setIcon(...) нет.

Видимо, такая концепция AA. Приходится перерисовывать весь экран.

Нельзя изменить иконку на созданном объекте: * Создание происходит через Builder. На этапе установки обработчика невозможно получить доступ к объекту * В объектах нет методов для изменения его состояния. Т.е. какого-нибудь `setIcon(...)` нет. Видимо, такая концепция AA. Приходится перерисовывать весь экран.
biodranik commented 2022-12-08 21:23:02 +00:00 (Migrated from github.com)
Review

Там ещё есть ограничение, насколько часто можно перерисовывать экран.

Там ещё есть ограничение, насколько _часто_ можно перерисовывать экран.
Review

Перерисовывать один и тот же экран можно неограниченное количество раз
https://developer.android.com/static/training/cars/Android%20for%20Cars%20App%20Library%20design%20guidelines.pdf
Слайд 11

Перерисовывать один и тот же экран можно неограниченное количество раз https://developer.android.com/static/training/cars/Android%20for%20Cars%20App%20Library%20design%20guidelines.pdf Слайд 11
Review

Ну и конкретно для MapTemplate:

Template Restrictions In regards to template refreshes, as described in onGetTemplate, this template is considered a refresh of a previous one if:
The template title has not changed, and the number of rows and the title (not counting spans) of each row between the previous and new Panes or ItemLists have not changed.

https://developer.android.com/reference/androidx/car/app/navigation/model/MapTemplate

Ну и конкретно для MapTemplate: > Template Restrictions In regards to template refreshes, as described in [onGetTemplate](https://developer.android.com/reference/androidx/car/app/Screen#onGetTemplate()), this template is considered a refresh of a previous one if: The template title has not changed, and the number of rows and the title (not counting spans) of each row between the previous and new [Pane](https://developer.android.com/reference/androidx/car/app/model/Pane)s or [ItemList](https://developer.android.com/reference/androidx/car/app/model/ItemList)s have not changed. https://developer.android.com/reference/androidx/car/app/navigation/model/MapTemplate
biodranik commented 2022-12-11 12:34:26 +00:00 (Migrated from github.com)
Review
  1. Зачем что-то хранить в памяти, если оно не видно на экране/не используется, и нужно только в каких-то исключительных сценариях?
  2. На сколько большой оверхед от этих иконок, что от него важно прямо сейчас подстраховаться?
1. Зачем что-то хранить в памяти, если оно не видно на экране/не используется, и нужно только в каких-то исключительных сценариях? 2. На сколько большой оверхед от этих иконок, что от него важно прямо сейчас подстраховаться?
biodranik commented 2022-12-11 12:35:11 +00:00 (Migrated from github.com)
Review
    builder.setImage(getter.get() ? mCheckboxSelectedIcon : mCheckboxIcon);
```suggestion builder.setImage(getter.get() ? mCheckboxSelectedIcon : mCheckboxIcon); ```
biodranik commented 2022-12-11 12:36:01 +00:00 (Migrated from github.com)
Review

Если getter.get() используется больше одного раза, имеет смысл вынести его в final boolean

Если getter.get() используется больше одного раза, имеет смысл вынести его в `final boolean`
biodranik commented 2022-12-11 12:36:17 +00:00 (Migrated from github.com)
Review

ditto

ditto
Review

Ок. Перенес это в SettingsScreen и DrivingOptionsScreen

Ок. Перенес это в `SettingsScreen` и `DrivingOptionsScreen`
final ActionStrip mapActionStrip = new ActionStrip.Builder()
Review

I suggest merging this code back to SettingsScreen.java. It is not needed anywhere outside SettingsScreen.java.

I suggest merging this code back to `SettingsScreen.java`. It is not needed anywhere outside `SettingsScreen.java`.
Review

It looks like a hack. Why this invalidation is needed in this place?

It looks like a hack. Why this invalidation is needed in this place?
Review

Да, но createSharedPrefsCheckbox, как и createDrivingOptionCheckbox использует иконки чекбоксов. Не хочется каждый раз заново инициализировать иконки. Перемещение их в SettingsScreen приведет к тому, что они будут заново инициализироваться при создании экрана. Плюс есть еще DrivingOptionsScreen, который использует эти же иконки. Надо придумать, где и как их хранить. Это относится не только к чекбоксам, но и к остальным иконкам на других экранах. Пока что решение такое.

Да, но `createSharedPrefsCheckbox`, как и `createDrivingOptionCheckbox` использует иконки чекбоксов. Не хочется каждый раз заново инициализировать иконки. Перемещение их в `SettingsScreen` приведет к тому, что они будут заново инициализироваться при создании экрана. Плюс есть еще `DrivingOptionsScreen`, который использует эти же иконки. Надо придумать, где и как их хранить. Это относится не только к чекбоксам, но и к остальным иконкам на других экранах. Пока что решение такое.
Review

Нельзя изменить иконку на созданном объекте:

  • Создание происходит через Builder. На этапе установки обработчика невозможно получить доступ к объекту
  • В объектах нет методов для изменения его состояния. Т.е. какого-нибудь setIcon(...) нет.

Видимо, такая концепция AA. Приходится перерисовывать весь экран.

Нельзя изменить иконку на созданном объекте: * Создание происходит через Builder. На этапе установки обработчика невозможно получить доступ к объекту * В объектах нет методов для изменения его состояния. Т.е. какого-нибудь `setIcon(...)` нет. Видимо, такая концепция AA. Приходится перерисовывать весь экран.
biodranik commented 2022-12-08 21:23:02 +00:00 (Migrated from github.com)
Review

Там ещё есть ограничение, насколько часто можно перерисовывать экран.

Там ещё есть ограничение, насколько _часто_ можно перерисовывать экран.
Review

Перерисовывать один и тот же экран можно неограниченное количество раз
https://developer.android.com/static/training/cars/Android%20for%20Cars%20App%20Library%20design%20guidelines.pdf
Слайд 11

Перерисовывать один и тот же экран можно неограниченное количество раз https://developer.android.com/static/training/cars/Android%20for%20Cars%20App%20Library%20design%20guidelines.pdf Слайд 11
Review

Ну и конкретно для MapTemplate:

Template Restrictions In regards to template refreshes, as described in onGetTemplate, this template is considered a refresh of a previous one if:
The template title has not changed, and the number of rows and the title (not counting spans) of each row between the previous and new Panes or ItemLists have not changed.

https://developer.android.com/reference/androidx/car/app/navigation/model/MapTemplate

Ну и конкретно для MapTemplate: > Template Restrictions In regards to template refreshes, as described in [onGetTemplate](https://developer.android.com/reference/androidx/car/app/Screen#onGetTemplate()), this template is considered a refresh of a previous one if: The template title has not changed, and the number of rows and the title (not counting spans) of each row between the previous and new [Pane](https://developer.android.com/reference/androidx/car/app/model/Pane)s or [ItemList](https://developer.android.com/reference/androidx/car/app/model/ItemList)s have not changed. https://developer.android.com/reference/androidx/car/app/navigation/model/MapTemplate
biodranik commented 2022-12-11 12:34:26 +00:00 (Migrated from github.com)
Review
  1. Зачем что-то хранить в памяти, если оно не видно на экране/не используется, и нужно только в каких-то исключительных сценариях?
  2. На сколько большой оверхед от этих иконок, что от него важно прямо сейчас подстраховаться?
1. Зачем что-то хранить в памяти, если оно не видно на экране/не используется, и нужно только в каких-то исключительных сценариях? 2. На сколько большой оверхед от этих иконок, что от него важно прямо сейчас подстраховаться?
biodranik commented 2022-12-11 12:35:11 +00:00 (Migrated from github.com)
Review
    builder.setImage(getter.get() ? mCheckboxSelectedIcon : mCheckboxIcon);
```suggestion builder.setImage(getter.get() ? mCheckboxSelectedIcon : mCheckboxIcon); ```
biodranik commented 2022-12-11 12:36:01 +00:00 (Migrated from github.com)
Review

Если getter.get() используется больше одного раза, имеет смысл вынести его в final boolean

Если getter.get() используется больше одного раза, имеет смысл вынести его в `final boolean`
biodranik commented 2022-12-11 12:36:17 +00:00 (Migrated from github.com)
Review

ditto

ditto
Review

Ок. Перенес это в SettingsScreen и DrivingOptionsScreen

Ок. Перенес это в `SettingsScreen` и `DrivingOptionsScreen`
.addAction(location)
Review

I suggest merging this code back to SettingsScreen.java. It is not needed anywhere outside SettingsScreen.java.

I suggest merging this code back to `SettingsScreen.java`. It is not needed anywhere outside `SettingsScreen.java`.
Review

It looks like a hack. Why this invalidation is needed in this place?

It looks like a hack. Why this invalidation is needed in this place?
Review

Да, но createSharedPrefsCheckbox, как и createDrivingOptionCheckbox использует иконки чекбоксов. Не хочется каждый раз заново инициализировать иконки. Перемещение их в SettingsScreen приведет к тому, что они будут заново инициализироваться при создании экрана. Плюс есть еще DrivingOptionsScreen, который использует эти же иконки. Надо придумать, где и как их хранить. Это относится не только к чекбоксам, но и к остальным иконкам на других экранах. Пока что решение такое.

Да, но `createSharedPrefsCheckbox`, как и `createDrivingOptionCheckbox` использует иконки чекбоксов. Не хочется каждый раз заново инициализировать иконки. Перемещение их в `SettingsScreen` приведет к тому, что они будут заново инициализироваться при создании экрана. Плюс есть еще `DrivingOptionsScreen`, который использует эти же иконки. Надо придумать, где и как их хранить. Это относится не только к чекбоксам, но и к остальным иконкам на других экранах. Пока что решение такое.
Review

Нельзя изменить иконку на созданном объекте:

  • Создание происходит через Builder. На этапе установки обработчика невозможно получить доступ к объекту
  • В объектах нет методов для изменения его состояния. Т.е. какого-нибудь setIcon(...) нет.

Видимо, такая концепция AA. Приходится перерисовывать весь экран.

Нельзя изменить иконку на созданном объекте: * Создание происходит через Builder. На этапе установки обработчика невозможно получить доступ к объекту * В объектах нет методов для изменения его состояния. Т.е. какого-нибудь `setIcon(...)` нет. Видимо, такая концепция AA. Приходится перерисовывать весь экран.
biodranik commented 2022-12-08 21:23:02 +00:00 (Migrated from github.com)
Review

Там ещё есть ограничение, насколько часто можно перерисовывать экран.

Там ещё есть ограничение, насколько _часто_ можно перерисовывать экран.
Review

Перерисовывать один и тот же экран можно неограниченное количество раз
https://developer.android.com/static/training/cars/Android%20for%20Cars%20App%20Library%20design%20guidelines.pdf
Слайд 11

Перерисовывать один и тот же экран можно неограниченное количество раз https://developer.android.com/static/training/cars/Android%20for%20Cars%20App%20Library%20design%20guidelines.pdf Слайд 11
Review

Ну и конкретно для MapTemplate:

Template Restrictions In regards to template refreshes, as described in onGetTemplate, this template is considered a refresh of a previous one if:
The template title has not changed, and the number of rows and the title (not counting spans) of each row between the previous and new Panes or ItemLists have not changed.

https://developer.android.com/reference/androidx/car/app/navigation/model/MapTemplate

Ну и конкретно для MapTemplate: > Template Restrictions In regards to template refreshes, as described in [onGetTemplate](https://developer.android.com/reference/androidx/car/app/Screen#onGetTemplate()), this template is considered a refresh of a previous one if: The template title has not changed, and the number of rows and the title (not counting spans) of each row between the previous and new [Pane](https://developer.android.com/reference/androidx/car/app/model/Pane)s or [ItemList](https://developer.android.com/reference/androidx/car/app/model/ItemList)s have not changed. https://developer.android.com/reference/androidx/car/app/navigation/model/MapTemplate
biodranik commented 2022-12-11 12:34:26 +00:00 (Migrated from github.com)
Review
  1. Зачем что-то хранить в памяти, если оно не видно на экране/не используется, и нужно только в каких-то исключительных сценариях?
  2. На сколько большой оверхед от этих иконок, что от него важно прямо сейчас подстраховаться?
1. Зачем что-то хранить в памяти, если оно не видно на экране/не используется, и нужно только в каких-то исключительных сценариях? 2. На сколько большой оверхед от этих иконок, что от него важно прямо сейчас подстраховаться?
biodranik commented 2022-12-11 12:35:11 +00:00 (Migrated from github.com)
Review
    builder.setImage(getter.get() ? mCheckboxSelectedIcon : mCheckboxIcon);
```suggestion builder.setImage(getter.get() ? mCheckboxSelectedIcon : mCheckboxIcon); ```
biodranik commented 2022-12-11 12:36:01 +00:00 (Migrated from github.com)
Review

Если getter.get() используется больше одного раза, имеет смысл вынести его в final boolean

Если getter.get() используется больше одного раза, имеет смысл вынести его в `final boolean`
biodranik commented 2022-12-11 12:36:17 +00:00 (Migrated from github.com)
Review

ditto

ditto
Review

Ок. Перенес это в SettingsScreen и DrivingOptionsScreen

Ок. Перенес это в `SettingsScreen` и `DrivingOptionsScreen`
.addAction(zoomIn)
Review

I suggest merging this code back to SettingsScreen.java. It is not needed anywhere outside SettingsScreen.java.

I suggest merging this code back to `SettingsScreen.java`. It is not needed anywhere outside `SettingsScreen.java`.
Review

It looks like a hack. Why this invalidation is needed in this place?

It looks like a hack. Why this invalidation is needed in this place?
Review

Да, но createSharedPrefsCheckbox, как и createDrivingOptionCheckbox использует иконки чекбоксов. Не хочется каждый раз заново инициализировать иконки. Перемещение их в SettingsScreen приведет к тому, что они будут заново инициализироваться при создании экрана. Плюс есть еще DrivingOptionsScreen, который использует эти же иконки. Надо придумать, где и как их хранить. Это относится не только к чекбоксам, но и к остальным иконкам на других экранах. Пока что решение такое.

Да, но `createSharedPrefsCheckbox`, как и `createDrivingOptionCheckbox` использует иконки чекбоксов. Не хочется каждый раз заново инициализировать иконки. Перемещение их в `SettingsScreen` приведет к тому, что они будут заново инициализироваться при создании экрана. Плюс есть еще `DrivingOptionsScreen`, который использует эти же иконки. Надо придумать, где и как их хранить. Это относится не только к чекбоксам, но и к остальным иконкам на других экранах. Пока что решение такое.
Review

Нельзя изменить иконку на созданном объекте:

  • Создание происходит через Builder. На этапе установки обработчика невозможно получить доступ к объекту
  • В объектах нет методов для изменения его состояния. Т.е. какого-нибудь setIcon(...) нет.

Видимо, такая концепция AA. Приходится перерисовывать весь экран.

Нельзя изменить иконку на созданном объекте: * Создание происходит через Builder. На этапе установки обработчика невозможно получить доступ к объекту * В объектах нет методов для изменения его состояния. Т.е. какого-нибудь `setIcon(...)` нет. Видимо, такая концепция AA. Приходится перерисовывать весь экран.
biodranik commented 2022-12-08 21:23:02 +00:00 (Migrated from github.com)
Review

Там ещё есть ограничение, насколько часто можно перерисовывать экран.

Там ещё есть ограничение, насколько _часто_ можно перерисовывать экран.
Review

Перерисовывать один и тот же экран можно неограниченное количество раз
https://developer.android.com/static/training/cars/Android%20for%20Cars%20App%20Library%20design%20guidelines.pdf
Слайд 11

Перерисовывать один и тот же экран можно неограниченное количество раз https://developer.android.com/static/training/cars/Android%20for%20Cars%20App%20Library%20design%20guidelines.pdf Слайд 11
Review

Ну и конкретно для MapTemplate:

Template Restrictions In regards to template refreshes, as described in onGetTemplate, this template is considered a refresh of a previous one if:
The template title has not changed, and the number of rows and the title (not counting spans) of each row between the previous and new Panes or ItemLists have not changed.

https://developer.android.com/reference/androidx/car/app/navigation/model/MapTemplate

Ну и конкретно для MapTemplate: > Template Restrictions In regards to template refreshes, as described in [onGetTemplate](https://developer.android.com/reference/androidx/car/app/Screen#onGetTemplate()), this template is considered a refresh of a previous one if: The template title has not changed, and the number of rows and the title (not counting spans) of each row between the previous and new [Pane](https://developer.android.com/reference/androidx/car/app/model/Pane)s or [ItemList](https://developer.android.com/reference/androidx/car/app/model/ItemList)s have not changed. https://developer.android.com/reference/androidx/car/app/navigation/model/MapTemplate
biodranik commented 2022-12-11 12:34:26 +00:00 (Migrated from github.com)
Review
  1. Зачем что-то хранить в памяти, если оно не видно на экране/не используется, и нужно только в каких-то исключительных сценариях?
  2. На сколько большой оверхед от этих иконок, что от него важно прямо сейчас подстраховаться?
1. Зачем что-то хранить в памяти, если оно не видно на экране/не используется, и нужно только в каких-то исключительных сценариях? 2. На сколько большой оверхед от этих иконок, что от него важно прямо сейчас подстраховаться?
biodranik commented 2022-12-11 12:35:11 +00:00 (Migrated from github.com)
Review
    builder.setImage(getter.get() ? mCheckboxSelectedIcon : mCheckboxIcon);
```suggestion builder.setImage(getter.get() ? mCheckboxSelectedIcon : mCheckboxIcon); ```
biodranik commented 2022-12-11 12:36:01 +00:00 (Migrated from github.com)
Review

Если getter.get() используется больше одного раза, имеет смысл вынести его в final boolean

Если getter.get() используется больше одного раза, имеет смысл вынести его в `final boolean`
biodranik commented 2022-12-11 12:36:17 +00:00 (Migrated from github.com)
Review

ditto

ditto
Review

Ок. Перенес это в SettingsScreen и DrivingOptionsScreen

Ок. Перенес это в `SettingsScreen` и `DrivingOptionsScreen`
.addAction(zoomOut)
Review

I suggest merging this code back to SettingsScreen.java. It is not needed anywhere outside SettingsScreen.java.

I suggest merging this code back to `SettingsScreen.java`. It is not needed anywhere outside `SettingsScreen.java`.
Review

It looks like a hack. Why this invalidation is needed in this place?

It looks like a hack. Why this invalidation is needed in this place?
Review

Да, но createSharedPrefsCheckbox, как и createDrivingOptionCheckbox использует иконки чекбоксов. Не хочется каждый раз заново инициализировать иконки. Перемещение их в SettingsScreen приведет к тому, что они будут заново инициализироваться при создании экрана. Плюс есть еще DrivingOptionsScreen, который использует эти же иконки. Надо придумать, где и как их хранить. Это относится не только к чекбоксам, но и к остальным иконкам на других экранах. Пока что решение такое.

Да, но `createSharedPrefsCheckbox`, как и `createDrivingOptionCheckbox` использует иконки чекбоксов. Не хочется каждый раз заново инициализировать иконки. Перемещение их в `SettingsScreen` приведет к тому, что они будут заново инициализироваться при создании экрана. Плюс есть еще `DrivingOptionsScreen`, который использует эти же иконки. Надо придумать, где и как их хранить. Это относится не только к чекбоксам, но и к остальным иконкам на других экранах. Пока что решение такое.
Review

Нельзя изменить иконку на созданном объекте:

  • Создание происходит через Builder. На этапе установки обработчика невозможно получить доступ к объекту
  • В объектах нет методов для изменения его состояния. Т.е. какого-нибудь setIcon(...) нет.

Видимо, такая концепция AA. Приходится перерисовывать весь экран.

Нельзя изменить иконку на созданном объекте: * Создание происходит через Builder. На этапе установки обработчика невозможно получить доступ к объекту * В объектах нет методов для изменения его состояния. Т.е. какого-нибудь `setIcon(...)` нет. Видимо, такая концепция AA. Приходится перерисовывать весь экран.
biodranik commented 2022-12-08 21:23:02 +00:00 (Migrated from github.com)
Review

Там ещё есть ограничение, насколько часто можно перерисовывать экран.

Там ещё есть ограничение, насколько _часто_ можно перерисовывать экран.
Review

Перерисовывать один и тот же экран можно неограниченное количество раз
https://developer.android.com/static/training/cars/Android%20for%20Cars%20App%20Library%20design%20guidelines.pdf
Слайд 11

Перерисовывать один и тот же экран можно неограниченное количество раз https://developer.android.com/static/training/cars/Android%20for%20Cars%20App%20Library%20design%20guidelines.pdf Слайд 11
Review

Ну и конкретно для MapTemplate:

Template Restrictions In regards to template refreshes, as described in onGetTemplate, this template is considered a refresh of a previous one if:
The template title has not changed, and the number of rows and the title (not counting spans) of each row between the previous and new Panes or ItemLists have not changed.

https://developer.android.com/reference/androidx/car/app/navigation/model/MapTemplate

Ну и конкретно для MapTemplate: > Template Restrictions In regards to template refreshes, as described in [onGetTemplate](https://developer.android.com/reference/androidx/car/app/Screen#onGetTemplate()), this template is considered a refresh of a previous one if: The template title has not changed, and the number of rows and the title (not counting spans) of each row between the previous and new [Pane](https://developer.android.com/reference/androidx/car/app/model/Pane)s or [ItemList](https://developer.android.com/reference/androidx/car/app/model/ItemList)s have not changed. https://developer.android.com/reference/androidx/car/app/navigation/model/MapTemplate
biodranik commented 2022-12-11 12:34:26 +00:00 (Migrated from github.com)
Review
  1. Зачем что-то хранить в памяти, если оно не видно на экране/не используется, и нужно только в каких-то исключительных сценариях?
  2. На сколько большой оверхед от этих иконок, что от него важно прямо сейчас подстраховаться?
1. Зачем что-то хранить в памяти, если оно не видно на экране/не используется, и нужно только в каких-то исключительных сценариях? 2. На сколько большой оверхед от этих иконок, что от него важно прямо сейчас подстраховаться?
biodranik commented 2022-12-11 12:35:11 +00:00 (Migrated from github.com)
Review
    builder.setImage(getter.get() ? mCheckboxSelectedIcon : mCheckboxIcon);
```suggestion builder.setImage(getter.get() ? mCheckboxSelectedIcon : mCheckboxIcon); ```
biodranik commented 2022-12-11 12:36:01 +00:00 (Migrated from github.com)
Review

Если getter.get() используется больше одного раза, имеет смысл вынести его в final boolean

Если getter.get() используется больше одного раза, имеет смысл вынести его в `final boolean`
biodranik commented 2022-12-11 12:36:17 +00:00 (Migrated from github.com)
Review

ditto

ditto
Review

Ок. Перенес это в SettingsScreen и DrivingOptionsScreen

Ок. Перенес это в `SettingsScreen` и `DrivingOptionsScreen`
.addAction(panAction)
Review

I suggest merging this code back to SettingsScreen.java. It is not needed anywhere outside SettingsScreen.java.

I suggest merging this code back to `SettingsScreen.java`. It is not needed anywhere outside `SettingsScreen.java`.
Review

It looks like a hack. Why this invalidation is needed in this place?

It looks like a hack. Why this invalidation is needed in this place?
Review

Да, но createSharedPrefsCheckbox, как и createDrivingOptionCheckbox использует иконки чекбоксов. Не хочется каждый раз заново инициализировать иконки. Перемещение их в SettingsScreen приведет к тому, что они будут заново инициализироваться при создании экрана. Плюс есть еще DrivingOptionsScreen, который использует эти же иконки. Надо придумать, где и как их хранить. Это относится не только к чекбоксам, но и к остальным иконкам на других экранах. Пока что решение такое.

Да, но `createSharedPrefsCheckbox`, как и `createDrivingOptionCheckbox` использует иконки чекбоксов. Не хочется каждый раз заново инициализировать иконки. Перемещение их в `SettingsScreen` приведет к тому, что они будут заново инициализироваться при создании экрана. Плюс есть еще `DrivingOptionsScreen`, который использует эти же иконки. Надо придумать, где и как их хранить. Это относится не только к чекбоксам, но и к остальным иконкам на других экранах. Пока что решение такое.
Review

Нельзя изменить иконку на созданном объекте:

  • Создание происходит через Builder. На этапе установки обработчика невозможно получить доступ к объекту
  • В объектах нет методов для изменения его состояния. Т.е. какого-нибудь setIcon(...) нет.

Видимо, такая концепция AA. Приходится перерисовывать весь экран.

Нельзя изменить иконку на созданном объекте: * Создание происходит через Builder. На этапе установки обработчика невозможно получить доступ к объекту * В объектах нет методов для изменения его состояния. Т.е. какого-нибудь `setIcon(...)` нет. Видимо, такая концепция AA. Приходится перерисовывать весь экран.
biodranik commented 2022-12-08 21:23:02 +00:00 (Migrated from github.com)
Review

Там ещё есть ограничение, насколько часто можно перерисовывать экран.

Там ещё есть ограничение, насколько _часто_ можно перерисовывать экран.
Review

Перерисовывать один и тот же экран можно неограниченное количество раз
https://developer.android.com/static/training/cars/Android%20for%20Cars%20App%20Library%20design%20guidelines.pdf
Слайд 11

Перерисовывать один и тот же экран можно неограниченное количество раз https://developer.android.com/static/training/cars/Android%20for%20Cars%20App%20Library%20design%20guidelines.pdf Слайд 11
Review

Ну и конкретно для MapTemplate:

Template Restrictions In regards to template refreshes, as described in onGetTemplate, this template is considered a refresh of a previous one if:
The template title has not changed, and the number of rows and the title (not counting spans) of each row between the previous and new Panes or ItemLists have not changed.

https://developer.android.com/reference/androidx/car/app/navigation/model/MapTemplate

Ну и конкретно для MapTemplate: > Template Restrictions In regards to template refreshes, as described in [onGetTemplate](https://developer.android.com/reference/androidx/car/app/Screen#onGetTemplate()), this template is considered a refresh of a previous one if: The template title has not changed, and the number of rows and the title (not counting spans) of each row between the previous and new [Pane](https://developer.android.com/reference/androidx/car/app/model/Pane)s or [ItemList](https://developer.android.com/reference/androidx/car/app/model/ItemList)s have not changed. https://developer.android.com/reference/androidx/car/app/navigation/model/MapTemplate
biodranik commented 2022-12-11 12:34:26 +00:00 (Migrated from github.com)
Review
  1. Зачем что-то хранить в памяти, если оно не видно на экране/не используется, и нужно только в каких-то исключительных сценариях?
  2. На сколько большой оверхед от этих иконок, что от него важно прямо сейчас подстраховаться?
1. Зачем что-то хранить в памяти, если оно не видно на экране/не используется, и нужно только в каких-то исключительных сценариях? 2. На сколько большой оверхед от этих иконок, что от него важно прямо сейчас подстраховаться?
biodranik commented 2022-12-11 12:35:11 +00:00 (Migrated from github.com)
Review
    builder.setImage(getter.get() ? mCheckboxSelectedIcon : mCheckboxIcon);
```suggestion builder.setImage(getter.get() ? mCheckboxSelectedIcon : mCheckboxIcon); ```
biodranik commented 2022-12-11 12:36:01 +00:00 (Migrated from github.com)
Review

Если getter.get() используется больше одного раза, имеет смысл вынести его в final boolean

Если getter.get() используется больше одного раза, имеет смысл вынести его в `final boolean`
biodranik commented 2022-12-11 12:36:17 +00:00 (Migrated from github.com)
Review

ditto

ditto
Review

Ок. Перенес это в SettingsScreen и DrivingOptionsScreen

Ок. Перенес это в `SettingsScreen` и `DrivingOptionsScreen`
.build();
Review

I suggest merging this code back to SettingsScreen.java. It is not needed anywhere outside SettingsScreen.java.

I suggest merging this code back to `SettingsScreen.java`. It is not needed anywhere outside `SettingsScreen.java`.
Review

It looks like a hack. Why this invalidation is needed in this place?

It looks like a hack. Why this invalidation is needed in this place?
Review

Да, но createSharedPrefsCheckbox, как и createDrivingOptionCheckbox использует иконки чекбоксов. Не хочется каждый раз заново инициализировать иконки. Перемещение их в SettingsScreen приведет к тому, что они будут заново инициализироваться при создании экрана. Плюс есть еще DrivingOptionsScreen, который использует эти же иконки. Надо придумать, где и как их хранить. Это относится не только к чекбоксам, но и к остальным иконкам на других экранах. Пока что решение такое.

Да, но `createSharedPrefsCheckbox`, как и `createDrivingOptionCheckbox` использует иконки чекбоксов. Не хочется каждый раз заново инициализировать иконки. Перемещение их в `SettingsScreen` приведет к тому, что они будут заново инициализироваться при создании экрана. Плюс есть еще `DrivingOptionsScreen`, который использует эти же иконки. Надо придумать, где и как их хранить. Это относится не только к чекбоксам, но и к остальным иконкам на других экранах. Пока что решение такое.
Review

Нельзя изменить иконку на созданном объекте:

  • Создание происходит через Builder. На этапе установки обработчика невозможно получить доступ к объекту
  • В объектах нет методов для изменения его состояния. Т.е. какого-нибудь setIcon(...) нет.

Видимо, такая концепция AA. Приходится перерисовывать весь экран.

Нельзя изменить иконку на созданном объекте: * Создание происходит через Builder. На этапе установки обработчика невозможно получить доступ к объекту * В объектах нет методов для изменения его состояния. Т.е. какого-нибудь `setIcon(...)` нет. Видимо, такая концепция AA. Приходится перерисовывать весь экран.
biodranik commented 2022-12-08 21:23:02 +00:00 (Migrated from github.com)
Review

Там ещё есть ограничение, насколько часто можно перерисовывать экран.

Там ещё есть ограничение, насколько _часто_ можно перерисовывать экран.
Review

Перерисовывать один и тот же экран можно неограниченное количество раз
https://developer.android.com/static/training/cars/Android%20for%20Cars%20App%20Library%20design%20guidelines.pdf
Слайд 11

Перерисовывать один и тот же экран можно неограниченное количество раз https://developer.android.com/static/training/cars/Android%20for%20Cars%20App%20Library%20design%20guidelines.pdf Слайд 11
Review

Ну и конкретно для MapTemplate:

Template Restrictions In regards to template refreshes, as described in onGetTemplate, this template is considered a refresh of a previous one if:
The template title has not changed, and the number of rows and the title (not counting spans) of each row between the previous and new Panes or ItemLists have not changed.

https://developer.android.com/reference/androidx/car/app/navigation/model/MapTemplate

Ну и конкретно для MapTemplate: > Template Restrictions In regards to template refreshes, as described in [onGetTemplate](https://developer.android.com/reference/androidx/car/app/Screen#onGetTemplate()), this template is considered a refresh of a previous one if: The template title has not changed, and the number of rows and the title (not counting spans) of each row between the previous and new [Pane](https://developer.android.com/reference/androidx/car/app/model/Pane)s or [ItemList](https://developer.android.com/reference/androidx/car/app/model/ItemList)s have not changed. https://developer.android.com/reference/androidx/car/app/navigation/model/MapTemplate
biodranik commented 2022-12-11 12:34:26 +00:00 (Migrated from github.com)
Review
  1. Зачем что-то хранить в памяти, если оно не видно на экране/не используется, и нужно только в каких-то исключительных сценариях?
  2. На сколько большой оверхед от этих иконок, что от него важно прямо сейчас подстраховаться?
1. Зачем что-то хранить в памяти, если оно не видно на экране/не используется, и нужно только в каких-то исключительных сценариях? 2. На сколько большой оверхед от этих иконок, что от него важно прямо сейчас подстраховаться?
biodranik commented 2022-12-11 12:35:11 +00:00 (Migrated from github.com)
Review
    builder.setImage(getter.get() ? mCheckboxSelectedIcon : mCheckboxIcon);
```suggestion builder.setImage(getter.get() ? mCheckboxSelectedIcon : mCheckboxIcon); ```
biodranik commented 2022-12-11 12:36:01 +00:00 (Migrated from github.com)
Review

Если getter.get() используется больше одного раза, имеет смысл вынести его в final boolean

Если getter.get() используется больше одного раза, имеет смысл вынести его в `final boolean`
biodranik commented 2022-12-11 12:36:17 +00:00 (Migrated from github.com)
Review

ditto

ditto
Review

Ок. Перенес это в SettingsScreen и DrivingOptionsScreen

Ок. Перенес это в `SettingsScreen` и `DrivingOptionsScreen`
return new MapController.Builder().setMapActionStrip(mapActionStrip).build();
Review

I suggest merging this code back to SettingsScreen.java. It is not needed anywhere outside SettingsScreen.java.

I suggest merging this code back to `SettingsScreen.java`. It is not needed anywhere outside `SettingsScreen.java`.
Review

It looks like a hack. Why this invalidation is needed in this place?

It looks like a hack. Why this invalidation is needed in this place?
Review

Да, но createSharedPrefsCheckbox, как и createDrivingOptionCheckbox использует иконки чекбоксов. Не хочется каждый раз заново инициализировать иконки. Перемещение их в SettingsScreen приведет к тому, что они будут заново инициализироваться при создании экрана. Плюс есть еще DrivingOptionsScreen, который использует эти же иконки. Надо придумать, где и как их хранить. Это относится не только к чекбоксам, но и к остальным иконкам на других экранах. Пока что решение такое.

Да, но `createSharedPrefsCheckbox`, как и `createDrivingOptionCheckbox` использует иконки чекбоксов. Не хочется каждый раз заново инициализировать иконки. Перемещение их в `SettingsScreen` приведет к тому, что они будут заново инициализироваться при создании экрана. Плюс есть еще `DrivingOptionsScreen`, который использует эти же иконки. Надо придумать, где и как их хранить. Это относится не только к чекбоксам, но и к остальным иконкам на других экранах. Пока что решение такое.
Review

Нельзя изменить иконку на созданном объекте:

  • Создание происходит через Builder. На этапе установки обработчика невозможно получить доступ к объекту
  • В объектах нет методов для изменения его состояния. Т.е. какого-нибудь setIcon(...) нет.

Видимо, такая концепция AA. Приходится перерисовывать весь экран.

Нельзя изменить иконку на созданном объекте: * Создание происходит через Builder. На этапе установки обработчика невозможно получить доступ к объекту * В объектах нет методов для изменения его состояния. Т.е. какого-нибудь `setIcon(...)` нет. Видимо, такая концепция AA. Приходится перерисовывать весь экран.
biodranik commented 2022-12-08 21:23:02 +00:00 (Migrated from github.com)
Review

Там ещё есть ограничение, насколько часто можно перерисовывать экран.

Там ещё есть ограничение, насколько _часто_ можно перерисовывать экран.
Review

Перерисовывать один и тот же экран можно неограниченное количество раз
https://developer.android.com/static/training/cars/Android%20for%20Cars%20App%20Library%20design%20guidelines.pdf
Слайд 11

Перерисовывать один и тот же экран можно неограниченное количество раз https://developer.android.com/static/training/cars/Android%20for%20Cars%20App%20Library%20design%20guidelines.pdf Слайд 11
Review

Ну и конкретно для MapTemplate:

Template Restrictions In regards to template refreshes, as described in onGetTemplate, this template is considered a refresh of a previous one if:
The template title has not changed, and the number of rows and the title (not counting spans) of each row between the previous and new Panes or ItemLists have not changed.

https://developer.android.com/reference/androidx/car/app/navigation/model/MapTemplate

Ну и конкретно для MapTemplate: > Template Restrictions In regards to template refreshes, as described in [onGetTemplate](https://developer.android.com/reference/androidx/car/app/Screen#onGetTemplate()), this template is considered a refresh of a previous one if: The template title has not changed, and the number of rows and the title (not counting spans) of each row between the previous and new [Pane](https://developer.android.com/reference/androidx/car/app/model/Pane)s or [ItemList](https://developer.android.com/reference/androidx/car/app/model/ItemList)s have not changed. https://developer.android.com/reference/androidx/car/app/navigation/model/MapTemplate
biodranik commented 2022-12-11 12:34:26 +00:00 (Migrated from github.com)
Review
  1. Зачем что-то хранить в памяти, если оно не видно на экране/не используется, и нужно только в каких-то исключительных сценариях?
  2. На сколько большой оверхед от этих иконок, что от него важно прямо сейчас подстраховаться?
1. Зачем что-то хранить в памяти, если оно не видно на экране/не используется, и нужно только в каких-то исключительных сценариях? 2. На сколько большой оверхед от этих иконок, что от него важно прямо сейчас подстраховаться?
biodranik commented 2022-12-11 12:35:11 +00:00 (Migrated from github.com)
Review
    builder.setImage(getter.get() ? mCheckboxSelectedIcon : mCheckboxIcon);
```suggestion builder.setImage(getter.get() ? mCheckboxSelectedIcon : mCheckboxIcon); ```
biodranik commented 2022-12-11 12:36:01 +00:00 (Migrated from github.com)
Review

Если getter.get() используется больше одного раза, имеет смысл вынести его в final boolean

Если getter.get() используется больше одного раза, имеет смысл вынести его в `final boolean`
biodranik commented 2022-12-11 12:36:17 +00:00 (Migrated from github.com)
Review

ditto

ditto
Review

Ок. Перенес это в SettingsScreen и DrivingOptionsScreen

Ок. Перенес это в `SettingsScreen` и `DrivingOptionsScreen`
}
Review

I suggest merging this code back to SettingsScreen.java. It is not needed anywhere outside SettingsScreen.java.

I suggest merging this code back to `SettingsScreen.java`. It is not needed anywhere outside `SettingsScreen.java`.
Review

It looks like a hack. Why this invalidation is needed in this place?

It looks like a hack. Why this invalidation is needed in this place?
Review

Да, но createSharedPrefsCheckbox, как и createDrivingOptionCheckbox использует иконки чекбоксов. Не хочется каждый раз заново инициализировать иконки. Перемещение их в SettingsScreen приведет к тому, что они будут заново инициализироваться при создании экрана. Плюс есть еще DrivingOptionsScreen, который использует эти же иконки. Надо придумать, где и как их хранить. Это относится не только к чекбоксам, но и к остальным иконкам на других экранах. Пока что решение такое.

Да, но `createSharedPrefsCheckbox`, как и `createDrivingOptionCheckbox` использует иконки чекбоксов. Не хочется каждый раз заново инициализировать иконки. Перемещение их в `SettingsScreen` приведет к тому, что они будут заново инициализироваться при создании экрана. Плюс есть еще `DrivingOptionsScreen`, который использует эти же иконки. Надо придумать, где и как их хранить. Это относится не только к чекбоксам, но и к остальным иконкам на других экранах. Пока что решение такое.
Review

Нельзя изменить иконку на созданном объекте:

  • Создание происходит через Builder. На этапе установки обработчика невозможно получить доступ к объекту
  • В объектах нет методов для изменения его состояния. Т.е. какого-нибудь setIcon(...) нет.

Видимо, такая концепция AA. Приходится перерисовывать весь экран.

Нельзя изменить иконку на созданном объекте: * Создание происходит через Builder. На этапе установки обработчика невозможно получить доступ к объекту * В объектах нет методов для изменения его состояния. Т.е. какого-нибудь `setIcon(...)` нет. Видимо, такая концепция AA. Приходится перерисовывать весь экран.
biodranik commented 2022-12-08 21:23:02 +00:00 (Migrated from github.com)
Review

Там ещё есть ограничение, насколько часто можно перерисовывать экран.

Там ещё есть ограничение, насколько _часто_ можно перерисовывать экран.
Review

Перерисовывать один и тот же экран можно неограниченное количество раз
https://developer.android.com/static/training/cars/Android%20for%20Cars%20App%20Library%20design%20guidelines.pdf
Слайд 11

Перерисовывать один и тот же экран можно неограниченное количество раз https://developer.android.com/static/training/cars/Android%20for%20Cars%20App%20Library%20design%20guidelines.pdf Слайд 11
Review

Ну и конкретно для MapTemplate:

Template Restrictions In regards to template refreshes, as described in onGetTemplate, this template is considered a refresh of a previous one if:
The template title has not changed, and the number of rows and the title (not counting spans) of each row between the previous and new Panes or ItemLists have not changed.

https://developer.android.com/reference/androidx/car/app/navigation/model/MapTemplate

Ну и конкретно для MapTemplate: > Template Restrictions In regards to template refreshes, as described in [onGetTemplate](https://developer.android.com/reference/androidx/car/app/Screen#onGetTemplate()), this template is considered a refresh of a previous one if: The template title has not changed, and the number of rows and the title (not counting spans) of each row between the previous and new [Pane](https://developer.android.com/reference/androidx/car/app/model/Pane)s or [ItemList](https://developer.android.com/reference/androidx/car/app/model/ItemList)s have not changed. https://developer.android.com/reference/androidx/car/app/navigation/model/MapTemplate
biodranik commented 2022-12-11 12:34:26 +00:00 (Migrated from github.com)
Review
  1. Зачем что-то хранить в памяти, если оно не видно на экране/не используется, и нужно только в каких-то исключительных сценариях?
  2. На сколько большой оверхед от этих иконок, что от него важно прямо сейчас подстраховаться?
1. Зачем что-то хранить в памяти, если оно не видно на экране/не используется, и нужно только в каких-то исключительных сценариях? 2. На сколько большой оверхед от этих иконок, что от него важно прямо сейчас подстраховаться?
biodranik commented 2022-12-11 12:35:11 +00:00 (Migrated from github.com)
Review
    builder.setImage(getter.get() ? mCheckboxSelectedIcon : mCheckboxIcon);
```suggestion builder.setImage(getter.get() ? mCheckboxSelectedIcon : mCheckboxIcon); ```
biodranik commented 2022-12-11 12:36:01 +00:00 (Migrated from github.com)
Review

Если getter.get() используется больше одного раза, имеет смысл вынести его в final boolean

Если getter.get() используется больше одного раза, имеет смысл вынести его в `final boolean`
biodranik commented 2022-12-11 12:36:17 +00:00 (Migrated from github.com)
Review

ditto

ditto
Review

Ок. Перенес это в SettingsScreen и DrivingOptionsScreen

Ок. Перенес это в `SettingsScreen` и `DrivingOptionsScreen`
}
Review

I suggest merging this code back to SettingsScreen.java. It is not needed anywhere outside SettingsScreen.java.

I suggest merging this code back to `SettingsScreen.java`. It is not needed anywhere outside `SettingsScreen.java`.
Review

It looks like a hack. Why this invalidation is needed in this place?

It looks like a hack. Why this invalidation is needed in this place?
Review

Да, но createSharedPrefsCheckbox, как и createDrivingOptionCheckbox использует иконки чекбоксов. Не хочется каждый раз заново инициализировать иконки. Перемещение их в SettingsScreen приведет к тому, что они будут заново инициализироваться при создании экрана. Плюс есть еще DrivingOptionsScreen, который использует эти же иконки. Надо придумать, где и как их хранить. Это относится не только к чекбоксам, но и к остальным иконкам на других экранах. Пока что решение такое.

Да, но `createSharedPrefsCheckbox`, как и `createDrivingOptionCheckbox` использует иконки чекбоксов. Не хочется каждый раз заново инициализировать иконки. Перемещение их в `SettingsScreen` приведет к тому, что они будут заново инициализироваться при создании экрана. Плюс есть еще `DrivingOptionsScreen`, который использует эти же иконки. Надо придумать, где и как их хранить. Это относится не только к чекбоксам, но и к остальным иконкам на других экранах. Пока что решение такое.
Review

Нельзя изменить иконку на созданном объекте:

  • Создание происходит через Builder. На этапе установки обработчика невозможно получить доступ к объекту
  • В объектах нет методов для изменения его состояния. Т.е. какого-нибудь setIcon(...) нет.

Видимо, такая концепция AA. Приходится перерисовывать весь экран.

Нельзя изменить иконку на созданном объекте: * Создание происходит через Builder. На этапе установки обработчика невозможно получить доступ к объекту * В объектах нет методов для изменения его состояния. Т.е. какого-нибудь `setIcon(...)` нет. Видимо, такая концепция AA. Приходится перерисовывать весь экран.
biodranik commented 2022-12-08 21:23:02 +00:00 (Migrated from github.com)
Review

Там ещё есть ограничение, насколько часто можно перерисовывать экран.

Там ещё есть ограничение, насколько _часто_ можно перерисовывать экран.
Review

Перерисовывать один и тот же экран можно неограниченное количество раз
https://developer.android.com/static/training/cars/Android%20for%20Cars%20App%20Library%20design%20guidelines.pdf
Слайд 11

Перерисовывать один и тот же экран можно неограниченное количество раз https://developer.android.com/static/training/cars/Android%20for%20Cars%20App%20Library%20design%20guidelines.pdf Слайд 11
Review

Ну и конкретно для MapTemplate:

Template Restrictions In regards to template refreshes, as described in onGetTemplate, this template is considered a refresh of a previous one if:
The template title has not changed, and the number of rows and the title (not counting spans) of each row between the previous and new Panes or ItemLists have not changed.

https://developer.android.com/reference/androidx/car/app/navigation/model/MapTemplate

Ну и конкретно для MapTemplate: > Template Restrictions In regards to template refreshes, as described in [onGetTemplate](https://developer.android.com/reference/androidx/car/app/Screen#onGetTemplate()), this template is considered a refresh of a previous one if: The template title has not changed, and the number of rows and the title (not counting spans) of each row between the previous and new [Pane](https://developer.android.com/reference/androidx/car/app/model/Pane)s or [ItemList](https://developer.android.com/reference/androidx/car/app/model/ItemList)s have not changed. https://developer.android.com/reference/androidx/car/app/navigation/model/MapTemplate
biodranik commented 2022-12-11 12:34:26 +00:00 (Migrated from github.com)
Review
  1. Зачем что-то хранить в памяти, если оно не видно на экране/не используется, и нужно только в каких-то исключительных сценариях?
  2. На сколько большой оверхед от этих иконок, что от него важно прямо сейчас подстраховаться?
1. Зачем что-то хранить в памяти, если оно не видно на экране/не используется, и нужно только в каких-то исключительных сценариях? 2. На сколько большой оверхед от этих иконок, что от него важно прямо сейчас подстраховаться?
biodranik commented 2022-12-11 12:35:11 +00:00 (Migrated from github.com)
Review
    builder.setImage(getter.get() ? mCheckboxSelectedIcon : mCheckboxIcon);
```suggestion builder.setImage(getter.get() ? mCheckboxSelectedIcon : mCheckboxIcon); ```
biodranik commented 2022-12-11 12:36:01 +00:00 (Migrated from github.com)
Review

Если getter.get() используется больше одного раза, имеет смысл вынести его в final boolean

Если getter.get() используется больше одного раза, имеет смысл вынести его в `final boolean`
biodranik commented 2022-12-11 12:36:17 +00:00 (Migrated from github.com)
Review

ditto

ditto
Review

Ок. Перенес это в SettingsScreen и DrivingOptionsScreen

Ок. Перенес это в `SettingsScreen` и `DrivingOptionsScreen`

View file

@ -0,0 +1,135 @@
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
package app.organicmaps.car.screens;
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
import android.graphics.drawable.Drawable;
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
import androidx.annotation.NonNull;
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
import androidx.annotation.Nullable;
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
import androidx.car.app.CarContext;
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
import androidx.car.app.constraints.ConstraintManager;
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
import androidx.car.app.model.Action;
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
import androidx.car.app.model.CarIcon;
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
import androidx.car.app.model.Header;
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
import androidx.car.app.model.ItemList;
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
import androidx.car.app.model.Row;
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
import androidx.car.app.model.Template;
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
import androidx.car.app.navigation.model.MapTemplate;
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
import androidx.core.graphics.drawable.IconCompat;
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
import app.organicmaps.R;
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
import app.organicmaps.bookmarks.data.BookmarkCategory;
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
import app.organicmaps.bookmarks.data.BookmarkInfo;
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
import app.organicmaps.bookmarks.data.BookmarkManager;
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
import app.organicmaps.car.SurfaceRenderer;
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
import app.organicmaps.car.UiHelpers;
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
import app.organicmaps.util.Graphics;
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
import java.util.ArrayList;
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
import java.util.List;
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
public class BookmarksScreen extends MapScreen
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
{
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
private final int MAX_CATEGORIES_SIZE;
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
@Nullable
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
private BookmarkCategory mBookmarkCategory;
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
public BookmarksScreen(@NonNull CarContext carContext, @NonNull SurfaceRenderer surfaceRenderer)
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
{
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
super(carContext, surfaceRenderer);
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
final ConstraintManager constraintManager = getCarContext().getCarService(ConstraintManager.class);
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
MAX_CATEGORIES_SIZE = constraintManager.getContentLimit(ConstraintManager.CONTENT_LIMIT_TYPE_LIST);
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
}
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
private BookmarksScreen(@NonNull CarContext carContext, @NonNull SurfaceRenderer surfaceRenderer, @NonNull BookmarkCategory bookmarkCategory)
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
{
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
this(carContext, surfaceRenderer);
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
mBookmarkCategory = bookmarkCategory;
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
}
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
@NonNull
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
@Override
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
public Template onGetTemplate()
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
{
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
MapTemplate.Builder builder = new MapTemplate.Builder();
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
builder.setHeader(createHeader());
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
builder.setMapController(UiHelpers.createMapController(getCarContext(), getSurfaceRenderer()));
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
builder.setActionStrip(UiHelpers.createSettingsActionStrip(getCarContext(), getSurfaceRenderer()));
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
builder.setItemList(mBookmarkCategory == null ? createBookmarkCategoriesList() : createBookmarksList());
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
return builder.build();
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
}
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
@NonNull
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
private Header createHeader()
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
{
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
Header.Builder builder = new Header.Builder();
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
builder.setStartHeaderAction(Action.BACK);
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
builder.setTitle(mBookmarkCategory == null ? getCarContext().getString(R.string.bookmarks) : mBookmarkCategory.getName());
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
return builder.build();
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
}
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
@NonNull
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
private ItemList createBookmarkCategoriesList()
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
{
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
final List<BookmarkCategory> bookmarkCategories = getBookmarks();
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
final int categoriesSize = Math.min(bookmarkCategories.size(), MAX_CATEGORIES_SIZE);
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
ItemList.Builder builder = new ItemList.Builder();
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
for (int i = 0; i < categoriesSize; ++i)
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
{
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
final BookmarkCategory bookmarkCategory = bookmarkCategories.get(i);
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
Row.Builder itemBuilder = new Row.Builder();
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
itemBuilder.setTitle(bookmarkCategory.getName());
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
itemBuilder.addText(bookmarkCategory.getDescription());
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
itemBuilder.setOnClickListener(() -> getScreenManager().push(new BookmarksScreen(getCarContext(), getSurfaceRenderer(), bookmarkCategory)));
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
itemBuilder.setBrowsable(true);
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
builder.addItem(itemBuilder.build());
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
}
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
return builder.build();
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
}
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
@NonNull
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
private ItemList createBookmarksList()
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
Review

I have this screen working, but taping on a bookmark button does nothing. Is it just not finished yet? I don't see where buttons are connected to any callbacks.

I have this screen working, but taping on a bookmark button does nothing. Is it just not finished yet? I don't see where buttons are connected to any callbacks.
Review

Пока я реализовал только отображение. Как и поиск. Полную поддержку можно будет сделать после либо с базовой навигацией. Это нужен отдельный PR.

Пока я реализовал только отображение. Как и поиск. Полную поддержку можно будет сделать после либо с базовой навигацией. Это нужен отдельный PR.
Review

OK

OK
{
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
final long bookmarkCategoryId = mBookmarkCategory.getId();
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
final int bookmarkCategoriesSize = Math.min(mBookmarkCategory.getBookmarksCount(), MAX_CATEGORIES_SIZE);
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
ItemList.Builder builder = new ItemList.Builder();
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
for (int i = 0; i < bookmarkCategoriesSize; ++i)
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
{
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
final long bookmarkId = BookmarkManager.INSTANCE.getBookmarkIdByPosition(bookmarkCategoryId, i);
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
final BookmarkInfo bookmarkInfo = new BookmarkInfo(bookmarkCategoryId, bookmarkId);
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
final Row.Builder itemBuilder = new Row.Builder();
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
itemBuilder.setTitle(bookmarkInfo.getName());
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
if (!bookmarkInfo.getAddress().isEmpty())
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
itemBuilder.addText(bookmarkInfo.getAddress());
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
if (!bookmarkInfo.getFeatureType().isEmpty())
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
itemBuilder.addText(bookmarkInfo.getFeatureType());
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
final Drawable icon = Graphics.drawCircleAndImage(bookmarkInfo.getIcon().argb(),
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
R.dimen.track_circle_size,
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
bookmarkInfo.getIcon().getResId(),
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
R.dimen.bookmark_icon_size,
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
getCarContext());
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
itemBuilder.setImage(new CarIcon.Builder(IconCompat.createWithBitmap(Graphics.drawableToBitmap(icon))).build());
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
builder.addItem(itemBuilder.build());
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
}
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
return builder.build();
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
}
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
@NonNull
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
private static List<BookmarkCategory> getBookmarks()
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
{
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
final List<BookmarkCategory> bookmarkCategories = new ArrayList<>(BookmarkManager.INSTANCE.getCategories());
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
final List<BookmarkCategory> toRemove = new ArrayList<>();
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
for (BookmarkCategory bookmarkCategory : bookmarkCategories)
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
{
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
if (bookmarkCategory.getBookmarksCount() == 0)
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
toRemove.add(bookmarkCategory);
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
}
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
bookmarkCategories.removeAll(toRemove);
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
return bookmarkCategories;
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
}
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto
}
Review

nit: save the service in a temporary variable, just to improve readability of the code.

nit: save the service in a temporary variable, just to improve readability of the code.
Review

Да. По-хорошему, как и иконки в UiHelper, надо где-то отдельно хранить, потому что будет часто и много где использоваться.

PS. Обидно вообще-то 😄 image
Да. По-хорошему, как и иконки в `UiHelper`, надо где-то отдельно хранить, потому что будет часто и много где использоваться. <details> <summary>PS. Обидно вообще-то 😄 </summary> <img width="642" alt="image" src="https://user-images.githubusercontent.com/10351358/206543495-691a97b1-2b73-4d59-9f5a-ba742a112e90.png"> </details>
biodranik commented 2022-12-08 21:23:51 +00:00 (Migrated from github.com)
Review
https://onetwobytes.wordpress.com/2021/11/09/nit-code-review/
biodranik commented 2022-12-11 12:36:53 +00:00 (Migrated from github.com)
Review

ditto

ditto
biodranik commented 2022-12-11 12:37:08 +00:00 (Migrated from github.com)
Review

ditto

ditto

View file

@ -0,0 +1,95 @@
package app.organicmaps.car.screens;
import androidx.annotation.DrawableRes;
import androidx.annotation.NonNull;
import androidx.annotation.StringRes;
import androidx.car.app.CarContext;
import androidx.car.app.constraints.ConstraintManager;
import androidx.car.app.model.Action;
import androidx.car.app.model.CarIcon;
import androidx.car.app.model.Header;
import androidx.car.app.model.ItemList;
import androidx.car.app.model.Row;
import androidx.car.app.model.Template;
import androidx.car.app.navigation.model.MapTemplate;
import androidx.core.graphics.drawable.IconCompat;
import app.organicmaps.R;
import app.organicmaps.car.SurfaceRenderer;
import app.organicmaps.car.UiHelpers;
import java.util.Arrays;
import java.util.List;
public class CategoriesScreen extends MapScreen
{
private static class CategoryData
{
@StringRes
public final int nameResId;
@DrawableRes
public final int iconResId;
public CategoryData(int nameResId, int iconResId)
{
this.nameResId = nameResId;
this.iconResId = iconResId;
}
}
private static final List<CategoryData> CATEGORIES = Arrays.asList(
new CategoryData(R.string.fuel, R.drawable.ic_category_fuel),
new CategoryData(R.string.parking, R.drawable.ic_category_parking),
new CategoryData(R.string.eat, R.drawable.ic_category_eat),
new CategoryData(R.string.food, R.drawable.ic_category_food),
new CategoryData(R.string.hotel, R.drawable.ic_category_hotel),
new CategoryData(R.string.toilet, R.drawable.ic_category_toilet),
new CategoryData(R.string.rv, R.drawable.ic_category_rv)
);
private final int MAX_CATEGORIES_SIZE;
public CategoriesScreen(@NonNull CarContext carContext, @NonNull SurfaceRenderer surfaceRenderer)
{
super(carContext, surfaceRenderer);
final ConstraintManager constraintManager = getCarContext().getCarService(ConstraintManager.class);
MAX_CATEGORIES_SIZE = constraintManager.getContentLimit(ConstraintManager.CONTENT_LIMIT_TYPE_LIST);
}
@NonNull
@Override
public Template onGetTemplate()
{
MapTemplate.Builder builder = new MapTemplate.Builder();
builder.setHeader(createHeader());
builder.setMapController(UiHelpers.createMapController(getCarContext(), getSurfaceRenderer()));
builder.setActionStrip(UiHelpers.createSettingsActionStrip(getCarContext(), getSurfaceRenderer()));
builder.setItemList(createCategoriesList());
return builder.build();
}
@NonNull
private Header createHeader()
{
Header.Builder builder = new Header.Builder();
builder.setStartHeaderAction(Action.BACK);
builder.setTitle(getCarContext().getString(R.string.categories));
return builder.build();
}
@NonNull
private ItemList createCategoriesList()
{
ItemList.Builder builder = new ItemList.Builder();
int categoriesSize = Math.min(CATEGORIES.size(), MAX_CATEGORIES_SIZE);
for (int i = 0; i < categoriesSize; ++i)
{
Row.Builder itemBuilder = new Row.Builder();
itemBuilder.setTitle(getCarContext().getString(CATEGORIES.get(i).nameResId));
itemBuilder.setImage(new CarIcon.Builder(IconCompat.createWithResource(getCarContext(), CATEGORIES.get(i).iconResId)).build());
builder.addItem(itemBuilder.build());
}
return builder.build();
}
}

View file

@ -0,0 +1,32 @@
package app.organicmaps.car.screens;
import android.util.Log;
import androidx.annotation.NonNull;
import androidx.car.app.CarContext;
import androidx.car.app.Screen;
import androidx.car.app.model.LongMessageTemplate;
import androidx.car.app.model.Template;
import app.organicmaps.R;
public class ErrorScreen extends Screen
{
private static final String TAG = ErrorScreen.class.getSimpleName();
public ErrorScreen(@NonNull CarContext carContext)
{
super(carContext);
}
@NonNull
@Override
public Template onGetTemplate()
{
Log.d(TAG, "onGetTemplate");
LongMessageTemplate.Builder builder = new LongMessageTemplate.Builder(getCarContext().getString(R.string.dialog_error_storage_message));
builder.setTitle(getCarContext().getString(R.string.dialog_error_storage_title));
return builder.build();
}
}

View file

@ -0,0 +1,25 @@
package app.organicmaps.car.screens;
import androidx.annotation.NonNull;
import androidx.car.app.CarContext;
import androidx.car.app.Screen;
import app.organicmaps.car.SurfaceRenderer;
public abstract class MapScreen extends Screen
{
@NonNull
private final SurfaceRenderer mSurfaceRenderer;
public MapScreen(@NonNull CarContext carContext, @NonNull SurfaceRenderer surfaceRenderer)
{
super(carContext);
mSurfaceRenderer = surfaceRenderer;
}
@NonNull
public SurfaceRenderer getSurfaceRenderer()
{
return mSurfaceRenderer;
}
}

View file

@ -0,0 +1,104 @@
package app.organicmaps.car.screens;
import androidx.annotation.NonNull;
import androidx.car.app.CarContext;
import androidx.car.app.model.Action;
import androidx.car.app.model.CarIcon;
import androidx.car.app.model.Header;
import androidx.car.app.model.Item;
import androidx.car.app.model.ItemList;
import androidx.car.app.model.Row;
import androidx.car.app.model.Template;
import androidx.car.app.navigation.model.MapTemplate;
import androidx.core.graphics.drawable.IconCompat;
import app.organicmaps.R;
import app.organicmaps.car.SurfaceRenderer;
import app.organicmaps.car.UiHelpers;
public class NavigationScreen extends MapScreen
{
public NavigationScreen(@NonNull CarContext carContext, @NonNull SurfaceRenderer surfaceRenderer)
{
super(carContext, surfaceRenderer);
}
@NonNull
@Override
public Template onGetTemplate()
{
MapTemplate.Builder builder = new MapTemplate.Builder();
builder.setHeader(createHeader());
builder.setMapController(UiHelpers.createMapController(getCarContext(), getSurfaceRenderer()));
builder.setActionStrip(UiHelpers.createSettingsActionStrip(getCarContext(), getSurfaceRenderer()));
builder.setItemList(createList());
return builder.build();
}
@NonNull
private Header createHeader()
{
Header.Builder builder = new Header.Builder();
builder.setStartHeaderAction(new Action.Builder(Action.APP_ICON).build());
builder.setTitle(getCarContext().getString(R.string.app_name));
return builder.build();
}
@NonNull
private ItemList createList()
{
ItemList.Builder builder = new ItemList.Builder();
builder.addItem(createSearchItem());
builder.addItem(createCategoriesItem());
builder.addItem(createBookmarksItem());
return builder.build();
}
@NonNull
private Item createSearchItem()
{
final CarIcon iconSearch = new CarIcon.Builder(IconCompat.createWithResource(getCarContext(), R.drawable.ic_search)).build();
Row.Builder builder = new Row.Builder();
builder.setTitle(getCarContext().getString(R.string.search));
builder.setImage(iconSearch);
builder.setBrowsable(true);
builder.setOnClickListener(this::openSearch);
return builder.build();
}
@NonNull
private Item createCategoriesItem()
{
Row.Builder builder = new Row.Builder();
builder.setTitle(getCarContext().getString(R.string.categories));
builder.setBrowsable(true);
builder.setOnClickListener(this::openCategories);
return builder.build();
}
@NonNull
private Item createBookmarksItem()
{
Row.Builder builder = new Row.Builder();
builder.setTitle(getCarContext().getString(R.string.bookmarks));
builder.setBrowsable(true);
builder.setOnClickListener(this::openBookmarks);
return builder.build();
}
private void openSearch()
{
getScreenManager().push(new SearchScreen(getCarContext()));
}
private void openCategories()
{
getScreenManager().push(new CategoriesScreen(getCarContext(), getSurfaceRenderer()));
}
private void openBookmarks()
{
getScreenManager().push(new BookmarksScreen(getCarContext(), getSurfaceRenderer()));
}
}

View file

@ -0,0 +1,62 @@
package app.organicmaps.car.screens;
import androidx.annotation.NonNull;
import androidx.car.app.CarContext;
import androidx.car.app.Screen;
import androidx.car.app.constraints.ConstraintManager;
import androidx.car.app.model.Action;
import androidx.car.app.model.CarIcon;
import androidx.car.app.model.ItemList;
import androidx.car.app.model.Row;
import androidx.car.app.model.SearchTemplate;
import androidx.car.app.model.Template;
import androidx.core.graphics.drawable.IconCompat;
import app.organicmaps.R;
import app.organicmaps.search.SearchRecents;
public class SearchScreen extends Screen implements SearchTemplate.SearchCallback
{
private final int MAX_RESULTS_SIZE;
biodranik commented 2022-12-11 12:41:42 +00:00 (Migrated from github.com)
Review

Почему бы здесь сразу и не инициализировать?

Почему бы здесь сразу и не инициализировать?
Review

Нужен Context.

Нужен `Context`.
private ItemList mResults;
biodranik commented 2022-12-11 12:41:23 +00:00 (Migrated from github.com)
Review

А зачем их хранить?

А зачем их хранить?
Review

Там будут храниться результаты поискового запроса
Логика:

  • Вводим запрос в поиске
  • Получаем результаты
  • Заполняем mResults
  • Перерисовываем экран
  • Отображаем данные из mResults
Там будут храниться результаты поискового запроса Логика: * Вводим запрос в поиске * Получаем результаты * Заполняем `mResults` * Перерисовываем экран * Отображаем данные из `mResults`
biodranik commented 2022-12-11 13:55:35 +00:00 (Migrated from github.com)
Review

А проще передать данные прямо в отрисовку никак нельзя?

А проще передать данные прямо в отрисовку никак нельзя?
Review

Нет. В AA нельзя обновлять данные на экране. Только через перерисовку всего экрана

Нет. В AA нельзя обновлять данные на экране. Только через перерисовку всего экрана
Review

Окей, проблема понятна.

Окей, проблема понятна.
private String mSearchText = "";
public SearchScreen(@NonNull CarContext carContext)
{
super(carContext);
final ConstraintManager constraintManager = getCarContext().getCarService(ConstraintManager.class);
MAX_RESULTS_SIZE = constraintManager.getContentLimit(ConstraintManager.CONTENT_LIMIT_TYPE_LIST);
}
@NonNull
@Override
public Template onGetTemplate()
{
SearchTemplate.Builder builder = new SearchTemplate.Builder(this);
builder.setHeaderAction(Action.BACK);
builder.setShowKeyboardByDefault(false);
if (mSearchText.isEmpty() || mResults == null)
loadRecents();
builder.setItemList(mResults);
builder.setInitialSearchText(mSearchText);
return builder.build();
}
private void loadRecents()
{
final CarIcon iconRecent = new CarIcon.Builder(IconCompat.createWithResource(getCarContext(), R.drawable.ic_search_recent)).build();
ItemList.Builder builder = new ItemList.Builder();
builder.setNoItemsMessage(getCarContext().getString(R.string.search_history_text));
SearchRecents.refresh();
int recentsSize = Math.min(SearchRecents.getSize(), MAX_RESULTS_SIZE);
for (int i = 0; i < recentsSize; ++i)
{
Row.Builder itemBuilder = new Row.Builder();
itemBuilder.setTitle(SearchRecents.get(i));
itemBuilder.setImage(iconRecent);
builder.addItem(itemBuilder.build());
}
mResults = builder.build();
}
}

View file

@ -0,0 +1,82 @@
package app.organicmaps.car.screens.settings;
import androidx.annotation.NonNull;
import androidx.annotation.StringRes;
import androidx.car.app.CarContext;
import androidx.car.app.model.Action;
import androidx.car.app.model.CarIcon;
import androidx.car.app.model.Header;
import androidx.car.app.model.ItemList;
import androidx.car.app.model.Row;
import androidx.car.app.model.Template;
import androidx.car.app.navigation.model.MapTemplate;
import androidx.core.graphics.drawable.IconCompat;
import app.organicmaps.R;
import app.organicmaps.car.SurfaceRenderer;
import app.organicmaps.car.UiHelpers;
import app.organicmaps.car.screens.MapScreen;
import app.organicmaps.routing.RoutingOptions;
import app.organicmaps.settings.RoadType;
public class DrivingOptionsScreen extends MapScreen
{
@NonNull
private final CarIcon mCheckboxIcon;
@NonNull
private final CarIcon mCheckboxSelectedIcon;
public DrivingOptionsScreen(@NonNull CarContext carContext, @NonNull SurfaceRenderer surfaceRenderer)
{
super(carContext, surfaceRenderer);
mCheckboxIcon = new CarIcon.Builder(IconCompat.createWithResource(carContext, R.drawable.ic_check_box)).build();
mCheckboxSelectedIcon = new CarIcon.Builder(IconCompat.createWithResource(carContext, R.drawable.ic_check_box_checked)).build();
}
@NonNull
@Override
public Template onGetTemplate()
{
MapTemplate.Builder builder = new MapTemplate.Builder();
builder.setHeader(createHeader());
builder.setMapController(UiHelpers.createMapController(getCarContext(), getSurfaceRenderer()));
builder.setItemList(createDrivingOptionsList());
return builder.build();
}
@NonNull
private Header createHeader()
{
Header.Builder builder = new Header.Builder();
builder.setStartHeaderAction(Action.BACK);
builder.setTitle(getCarContext().getString(R.string.driving_options_subheader));
return builder.build();
}
@NonNull
private ItemList createDrivingOptionsList()
{
ItemList.Builder builder = new ItemList.Builder();
builder.addItem(createDrivingOptionCheckbox(RoadType.Toll, R.string.avoid_tolls));
builder.addItem(createDrivingOptionCheckbox(RoadType.Dirty, R.string.avoid_unpaved));
builder.addItem(createDrivingOptionCheckbox(RoadType.Ferry, R.string.avoid_ferry));
builder.addItem(createDrivingOptionCheckbox(RoadType.Motorway, R.string.avoid_motorways));
return builder.build();
}
@NonNull
private Row createDrivingOptionCheckbox(RoadType roadType, @StringRes int titleRes)
{
Row.Builder builder = new Row.Builder();
builder.setTitle(getCarContext().getString(titleRes));
builder.setOnClickListener(() -> {
if (RoutingOptions.hasOption(roadType))
RoutingOptions.removeOption(roadType);
else
RoutingOptions.addOption(roadType);
DrivingOptionsScreen.this.invalidate();
});
builder.setImage(RoutingOptions.hasOption(roadType) ? mCheckboxSelectedIcon : mCheckboxIcon);
return builder.build();
}
}

View file

@ -0,0 +1,74 @@
package app.organicmaps.car.screens.settings;
import androidx.annotation.NonNull;
import androidx.car.app.CarContext;
import androidx.car.app.model.Action;
import androidx.car.app.model.Header;
import androidx.car.app.model.Item;
import androidx.car.app.model.ItemList;
import androidx.car.app.model.Row;
import androidx.car.app.model.Template;
import androidx.car.app.navigation.model.MapTemplate;
import app.organicmaps.BuildConfig;
import app.organicmaps.Framework;
import app.organicmaps.R;
import app.organicmaps.car.SurfaceRenderer;
import app.organicmaps.car.UiHelpers;
import app.organicmaps.car.screens.MapScreen;
import app.organicmaps.util.DateUtils;
public class HelpScreen extends MapScreen
{
public HelpScreen(@NonNull CarContext carContext, @NonNull SurfaceRenderer surfaceRenderer)
{
super(carContext, surfaceRenderer);
}
@NonNull
@Override
public Template onGetTemplate()
{
MapTemplate.Builder builder = new MapTemplate.Builder();
builder.setHeader(createHeader());
builder.setMapController(UiHelpers.createMapController(getCarContext(), getSurfaceRenderer()));
builder.setItemList(createSettingsList());
return builder.build();
}
@NonNull
private Header createHeader()
{
Header.Builder builder = new Header.Builder();
builder.setStartHeaderAction(Action.BACK);
builder.setTitle(getCarContext().getString(R.string.help));
return builder.build();
}
@NonNull
private ItemList createSettingsList()
{
ItemList.Builder builder = new ItemList.Builder();
builder.addItem(createVersionInfo());
builder.addItem(createDataVersionInfo());
return builder.build();
}
@NonNull
private Item createVersionInfo()
{
return new Row.Builder()
.setTitle(getCarContext().getString(R.string.app_name))
.addText(BuildConfig.VERSION_NAME)
.build();
}
@NonNull
private Item createDataVersionInfo()
{
return new Row.Builder()
.setTitle(getCarContext().getString(R.string.data_version, ""))
biodranik commented 2022-12-11 12:42:28 +00:00 (Migrated from github.com)
Review

Заголовок пустой?

Заголовок пустой?
Review

Нет.
В R.string.data_version лежит <string name="data_version">OpenStreetMap data: %s</string>.
Вместо %s подставляется пустая строка.
На экране:
image

Нет. В `R.string.data_version` лежит `<string name="data_version">OpenStreetMap data: %s</string>`. Вместо `%s` подставляется пустая строка. На экране: ![image](https://user-images.githubusercontent.com/10351358/206905103-6748aa10-d338-44f7-b8b6-7d698d4b5df9.png)
.addText(DateUtils.getLocalDate(Framework.nativeGetDataVersion()))
.build();
}
}

View file

@ -0,0 +1,111 @@
package app.organicmaps.car.screens.settings;
import androidx.annotation.NonNull;
import androidx.annotation.StringRes;
import androidx.car.app.CarContext;
import androidx.car.app.model.Action;
import androidx.car.app.model.CarIcon;
import androidx.car.app.model.Header;
import androidx.car.app.model.Item;
import androidx.car.app.model.ItemList;
import androidx.car.app.model.Row;
import androidx.car.app.model.Template;
import androidx.car.app.navigation.model.MapTemplate;
import androidx.core.graphics.drawable.IconCompat;
import app.organicmaps.R;
import app.organicmaps.car.SurfaceRenderer;
import app.organicmaps.car.UiHelpers;
import app.organicmaps.car.screens.MapScreen;
import app.organicmaps.util.Config;
public class SettingsScreen extends MapScreen
{
private interface PrefsGetter
{
boolean get();
}
private interface PrefsSetter
{
void set(boolean newValue);
}
@NonNull
private final CarIcon mCheckboxIcon;
@NonNull
private final CarIcon mCheckboxSelectedIcon;
public SettingsScreen(@NonNull CarContext carContext, @NonNull SurfaceRenderer surfaceRenderer)
{
super(carContext, surfaceRenderer);
mCheckboxIcon = new CarIcon.Builder(IconCompat.createWithResource(carContext, R.drawable.ic_check_box)).build();
mCheckboxSelectedIcon = new CarIcon.Builder(IconCompat.createWithResource(carContext, R.drawable.ic_check_box_checked)).build();
}
@NonNull
@Override
public Template onGetTemplate()
{
MapTemplate.Builder builder = new MapTemplate.Builder();
builder.setHeader(createHeader());
builder.setMapController(UiHelpers.createMapController(getCarContext(), getSurfaceRenderer()));
builder.setItemList(createSettingsList());
return builder.build();
}
@NonNull
private Header createHeader()
{
Header.Builder builder = new Header.Builder();
builder.setStartHeaderAction(Action.BACK);
builder.setTitle(getCarContext().getString(R.string.settings));
return builder.build();
}
@NonNull
private ItemList createSettingsList()
{
ItemList.Builder builder = new ItemList.Builder();
builder.addItem(createRoutingOptionsItem());
builder.addItem(createSharedPrefsCheckbox(R.string.big_font, Config::isLargeFontsSize, Config::setLargeFontsSize));
builder.addItem(createSharedPrefsCheckbox(R.string.transliteration_title, Config::isTransliteration, Config::setTransliteration));
builder.addItem(createHelpItem());
return builder.build();
}
@NonNull
private Item createRoutingOptionsItem()
{
Row.Builder builder = new Row.Builder();
builder.setTitle(getCarContext().getString(R.string.driving_options_title));
builder.setOnClickListener(() -> getScreenManager().push(new DrivingOptionsScreen(getCarContext(), getSurfaceRenderer())));
builder.setBrowsable(true);
return builder.build();
}
@NonNull
private Item createHelpItem()
{
Row.Builder builder = new Row.Builder();
builder.setTitle(getCarContext().getString(R.string.help));
builder.setOnClickListener(() -> getScreenManager().push(new HelpScreen(getCarContext(), getSurfaceRenderer())));
builder.setBrowsable(true);
return builder.build();
}
@NonNull
private Row createSharedPrefsCheckbox(@StringRes int titleRes, PrefsGetter getter, PrefsSetter setter)
{
final boolean getterValue = getter.get();
Row.Builder builder = new Row.Builder();
builder.setTitle(getCarContext().getString(titleRes));
builder.setOnClickListener(() -> {
setter.set(!getterValue);
SettingsScreen.this.invalidate();
});
builder.setImage(getterValue ? mCheckboxSelectedIcon : mCheckboxIcon);
return builder.build();
}
}