/* * 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 android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.content.Context; import android.graphics.Bitmap; import android.util.Log; import android.view.View; import android.widget.FrameLayout; import android.widget.ImageView; import android.widget.TextView; /** * This class is responsible for drawing the whole instrument cluster. */ public class DemoInstrumentClusterView extends FrameLayout { private final String TAG = DemoInstrumentClusterView.class.getSimpleName(); private TextView mSpeedView; private TextView mEventTitleView; private TextView mDistanceView; private View mNavPanel; private TextView mMediaArtistView; private TextView mMediaAlbumView; private TextView mMediaTrackView; private ImageView mMediaImageView; private View mMediaPanel; private View mPhonePanel; private TextView mPhoneTitle; private TextView mPhoneSubtitle; private ImageView mPhoneImage; private final Integer mAnimationDurationMs; public DemoInstrumentClusterView(Context context) { super(context); mAnimationDurationMs = getResources().getInteger(android.R.integer.config_longAnimTime); init(); } public void setSpeed(String speed) { Log.d(TAG, "setSpeed, meterPerSecond: " + speed); mSpeedView.setText(speed); } public void showNavigation() { Log.d(TAG, "showNavigation"); mEventTitleView.setText(""); mDistanceView.setText(""); mNavPanel.setVisibility(VISIBLE); } public void hideNavigation() { Log.d(TAG, "hideNavigation"); mNavPanel.setVisibility(INVISIBLE); } public void setNextTurn(Bitmap image, String title) { Log.d(TAG, "setNextTurn, image: " + image + ", title: " + title); mEventTitleView.setText(title); } public void setNextTurnDistance(String distance) { Log.d(TAG, "setNextTurnDistance, distance: " + distance); mDistanceView.setText(distance); } public void setMediaData(final CharSequence artist, final CharSequence album, final CharSequence track, final Bitmap image) { Log.d(TAG, "setMediaData" + " artist = " + artist + ", album: " + album + ", track: " + track + ", bitmap: " + image); mMediaArtistView.setText(artist); mMediaAlbumView.setText(album); mMediaTrackView.setText(track); mMediaImageView.setImageBitmap(image); } private void showAnimated(final View view) { if (view.getVisibility() == VISIBLE && view.getAlpha() > 0) { return; } view.setAlpha(0); view.setVisibility(VISIBLE); view.animate() .alpha(1f) .setDuration(mAnimationDurationMs) .setListener(null); } private void hideAnimated(final View view) { if (view.getVisibility() == GONE) { return; } view.animate() .alpha(0f) .setDuration(mAnimationDurationMs) .setListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { view.setVisibility(GONE); } }); } public void showMedia() { Log.d(TAG, "showMedia"); showAnimated(mMediaPanel); } public void hideMedia() { Log.d(TAG, "hideMedia"); hideAnimated(mMediaPanel); } public void showPhone() { Log.d(TAG, "showPhone"); mPhoneSubtitle.setText(""); mPhoneImage.setImageResource(0); // To clear previous contact photo (if any). mPhoneTitle.setText(""); showAnimated(mPhonePanel); } public void hidePhone() { Log.d(TAG, "hidePhone"); hideAnimated(mPhonePanel); } public void setPhoneTitle(String number) { Log.d(TAG, "setPhoneTitle, number: " + number); mPhoneTitle.setText(number); } public void setPhoneSubtitle(String contact) { Log.d(TAG, "setPhoneContact, contact: " + contact); mPhoneSubtitle.setText(contact); } public void setPhoneImage(Bitmap photo) { Log.d(TAG, "setPhoneImage, photo: " + photo); mPhoneImage.setImageBitmap(photo); } private void init() { Log.d(TAG, "init"); View rootView = inflate(getContext(), R.layout.instrument_cluster, null); mSpeedView = (TextView) rootView.findViewById(R.id.speed); mEventTitleView = (TextView) rootView.findViewById(R.id.nav_event_title); mDistanceView = (TextView) rootView.findViewById(R.id.nav_distance); mNavPanel = rootView.findViewById(R.id.nav_layout); mMediaPanel = rootView.findViewById(R.id.media_layout); mMediaArtistView = (TextView) rootView.findViewById(R.id.media_artist); mMediaAlbumView = (TextView) rootView.findViewById(R.id.media_album); mMediaTrackView = (TextView) rootView.findViewById(R.id.media_track); mMediaImageView = (ImageView) rootView.findViewById(R.id.media_image); mPhonePanel = rootView.findViewById(R.id.phone_layout); mPhoneImage = (ImageView) rootView.findViewById(R.id.phone_contact_photo); mPhoneSubtitle = (TextView) rootView.findViewById(R.id.phone_subtitle); mPhoneTitle = (TextView) rootView.findViewById(R.id.phone_title); setSpeed("0"); addView(rootView); } }