Тестовое задание для кандидата Android

Отобразить на карте (Google Maps) точки, полученные от сервера. Иконки маркеров должны соответствовать категории точки. Данные меняться не будут, достаточно загрузить один раз.

Документация API: https://work.gofura.com/api/test/api-docs/. Ресурс /api/test/places возвращает данные, упорядоченные по Id. В параметре startFromнужно передавать Id последней записи с загруженной страницы.

Требования:

  • оффлайн режим (данные о загруженных точках должны кешироваться);
  • карта должна занимать весь экран;
  • сразу после запуска приложения пользователь видит карту;
  • данные о точках должны загружаться в фоне;
  • маркеры должны добавляться на карту по мере загрузки;
  • информировать пользователя о завершении загрузки;
  • приложение должно адекватно реагировать на изменения конфигурации устройства;
  • код приложения выложить на Github.

Плюсом будет использование:

  • Kotlin;
  • RxJava;
  • объектно-ориентированной базы (Realm, например).

По любым вопросам прошу писать на abogomolov@mustapp.me. Удачи 👹!

September 14, 2017by horse315
43
0

Android

Tinted status bar in Android

From https://github.com/mapsme/omim/blob/master/android/src/com/mapswithme/util/UiUtils.java

Your UIUtils or base activity class:

fun setupStatusBar(activity: Activity){
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) return

    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
        activity.window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS)
    } else {
        activity.window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
    }

    val statusBarTintView = View(activity).also {
        it.layoutParams = FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, getStatusBarHeight(activity)).also { it.gravity = Gravity.TOP }
        it.setBackgroundColor(ResourcesCompat.getColor(activity.resources, R.color.statusBarTint, activity.theme))
        it.visibility = View.VISIBLE
    }

    activity.window.decorView.let {it as ViewGroup}.addView(statusBarTintView)
}

fun getStatusBarHeight(context: Context): Int {
    var result = 0
    val res = context.resources
    val resourceId = res.getIdentifier("status_bar_height", "dimen", "android")
    if (resourceId > 0)
        result = res.getDimensionPixelSize(resourceId)

    return result
}

Your activity theme should have transparent status bar:

<style name="...">
    <item name="android:statusBarColor" tools:targetApi="lollipop">@android:color/transparent</item>
</style>

Your layout should not fit system windows:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="false" 
    tools:context="com.nakedhearts.elbi.MainActivity">
</android.support.constraint.ConstraintLayout>

Your activity should apply styling in code:

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)

    UIUtils.setupStatusBar(this)

    setContentView(R.layout.activity_main)
}
August 21, 2017by horse315
34
0

AndroidDevelopment
Show more