/* * Copyright (C) 2016 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package android.car.cluster.demorenderer; import static android.car.navigation.CarNavigationManager.TURN_SIDE_LEFT; import static android.car.navigation.CarNavigationManager.TURN_SIDE_RIGHT; import static android.car.navigation.CarNavigationManager.TURN_TURN; import android.car.cluster.renderer.NavigationRenderer; import android.content.Context; import android.graphics.Bitmap; import android.util.Log; import android.util.Pair; import java.util.HashMap; import java.util.Map; /** * Demo implementation of {@link NavigationRenderer}. */ public class DemoNavigationRenderer extends NavigationRenderer { private static final String TAG = DemoNavigationRenderer.class.getSimpleName(); private final DemoInstrumentClusterView mView; private final Context mContext; private final static Map, Integer> sTurns; static { sTurns = new HashMap<>(); sTurns.put(new Pair<>(TURN_TURN, TURN_SIDE_LEFT), R.string.turn_left); sTurns.put(new Pair<>(TURN_TURN, TURN_SIDE_RIGHT), R.string.turn_right); // TODO: add more localized strings here. } DemoNavigationRenderer(DemoInstrumentClusterView view) { mView = view; mContext = view.getContext(); } @Override public void onStartNavigation() { mView.showNavigation(); } @Override public void onStopNavigation() { mView.hideNavigation(); } @Override public void onNextTurnChanged(int event, String road, int turnAngle, int turnNumber, final Bitmap image, int turnSide) { String localizedAction = getLocalizedNavigationAction(event, turnSide); final String localizedTitle = String.format( mContext.getString(R.string.nav_event_title_format), localizedAction, road); mView.setNextTurn(image, localizedTitle); } @Override public void onNextTurnDistanceChanged(final int distanceMeters, int timeSeconds) { mView.setNextTurnDistance(toHumanReadableDistance(distanceMeters)); } private String getLocalizedNavigationAction(int event, int turnSide) { Pair key = new Pair<>(event, turnSide); if (sTurns.containsKey(key)) { Integer resourceId = sTurns.get(key); return mContext.getResources().getString(resourceId); } else { Log.w(TAG, "Navigation event / turn not localized: " + event + ", " + turnSide); return String.format("Event: %d, Side: %d", event, turnSide); } } private String toHumanReadableDistance(int meters) { // TODO: implement. return "in " + String.valueOf(meters) + " " + mContext.getString(R.string.meters); } }