10fc6f684e730b0137900fe317f2c759c1b3909c7Mario Bertschler/* 20fc6f684e730b0137900fe317f2c759c1b3909c7Mario Bertschler * Copyright (C) 2017 The Android Open Source Project 30fc6f684e730b0137900fe317f2c759c1b3909c7Mario Bertschler * 40fc6f684e730b0137900fe317f2c759c1b3909c7Mario Bertschler * Licensed under the Apache License, Version 2.0 (the "License"); 50fc6f684e730b0137900fe317f2c759c1b3909c7Mario Bertschler * you may not use this file except in compliance with the License. 60fc6f684e730b0137900fe317f2c759c1b3909c7Mario Bertschler * You may obtain a copy of the License at 70fc6f684e730b0137900fe317f2c759c1b3909c7Mario Bertschler * 80fc6f684e730b0137900fe317f2c759c1b3909c7Mario Bertschler * http://www.apache.org/licenses/LICENSE-2.0 90fc6f684e730b0137900fe317f2c759c1b3909c7Mario Bertschler * 100fc6f684e730b0137900fe317f2c759c1b3909c7Mario Bertschler * Unless required by applicable law or agreed to in writing, software 110fc6f684e730b0137900fe317f2c759c1b3909c7Mario Bertschler * distributed under the License is distributed on an "AS IS" BASIS, 120fc6f684e730b0137900fe317f2c759c1b3909c7Mario Bertschler * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 130fc6f684e730b0137900fe317f2c759c1b3909c7Mario Bertschler * See the License for the specific language governing permissions and 140fc6f684e730b0137900fe317f2c759c1b3909c7Mario Bertschler * limitations under the License. 150fc6f684e730b0137900fe317f2c759c1b3909c7Mario Bertschler */ 160fc6f684e730b0137900fe317f2c759c1b3909c7Mario Bertschler 170fc6f684e730b0137900fe317f2c759c1b3909c7Mario Bertschlerpackage com.android.launcher3.discovery; 180fc6f684e730b0137900fe317f2c759c1b3909c7Mario Bertschler 190fc6f684e730b0137900fe317f2c759c1b3909c7Mario Bertschlerimport android.content.Context; 200fc6f684e730b0137900fe317f2c759c1b3909c7Mario Bertschlerimport android.support.annotation.NonNull; 210fc6f684e730b0137900fe317f2c759c1b3909c7Mario Bertschlerimport android.util.AttributeSet; 220fc6f684e730b0137900fe317f2c759c1b3909c7Mario Bertschlerimport android.view.View; 230fc6f684e730b0137900fe317f2c759c1b3909c7Mario Bertschlerimport android.widget.ImageView; 240fc6f684e730b0137900fe317f2c759c1b3909c7Mario Bertschlerimport android.widget.RelativeLayout; 250fc6f684e730b0137900fe317f2c759c1b3909c7Mario Bertschlerimport android.widget.TextView; 260fc6f684e730b0137900fe317f2c759c1b3909c7Mario Bertschler 270fc6f684e730b0137900fe317f2c759c1b3909c7Mario Bertschlerimport com.android.launcher3.R; 280fc6f684e730b0137900fe317f2c759c1b3909c7Mario Bertschler 290fc6f684e730b0137900fe317f2c759c1b3909c7Mario Bertschlerimport java.text.DecimalFormat; 300fc6f684e730b0137900fe317f2c759c1b3909c7Mario Bertschlerimport java.text.NumberFormat; 310fc6f684e730b0137900fe317f2c759c1b3909c7Mario Bertschler 320fc6f684e730b0137900fe317f2c759c1b3909c7Mario Bertschlerpublic class AppDiscoveryItemView extends RelativeLayout { 330fc6f684e730b0137900fe317f2c759c1b3909c7Mario Bertschler 340fc6f684e730b0137900fe317f2c759c1b3909c7Mario Bertschler private static boolean SHOW_REVIEW_COUNT = false; 350fc6f684e730b0137900fe317f2c759c1b3909c7Mario Bertschler 360fc6f684e730b0137900fe317f2c759c1b3909c7Mario Bertschler private ImageView mImage; 370fc6f684e730b0137900fe317f2c759c1b3909c7Mario Bertschler private TextView mTitle; 380fc6f684e730b0137900fe317f2c759c1b3909c7Mario Bertschler private TextView mRatingText; 390fc6f684e730b0137900fe317f2c759c1b3909c7Mario Bertschler private RatingView mRatingView; 400fc6f684e730b0137900fe317f2c759c1b3909c7Mario Bertschler private TextView mReviewCount; 410fc6f684e730b0137900fe317f2c759c1b3909c7Mario Bertschler private TextView mPrice; 420fc6f684e730b0137900fe317f2c759c1b3909c7Mario Bertschler private OnLongClickListener mOnLongClickListener; 430fc6f684e730b0137900fe317f2c759c1b3909c7Mario Bertschler 440fc6f684e730b0137900fe317f2c759c1b3909c7Mario Bertschler public AppDiscoveryItemView(Context context) { 450fc6f684e730b0137900fe317f2c759c1b3909c7Mario Bertschler this(context, null); 460fc6f684e730b0137900fe317f2c759c1b3909c7Mario Bertschler } 470fc6f684e730b0137900fe317f2c759c1b3909c7Mario Bertschler 480fc6f684e730b0137900fe317f2c759c1b3909c7Mario Bertschler public AppDiscoveryItemView(Context context, AttributeSet attrs) { 490fc6f684e730b0137900fe317f2c759c1b3909c7Mario Bertschler this(context, attrs, 0); 500fc6f684e730b0137900fe317f2c759c1b3909c7Mario Bertschler } 510fc6f684e730b0137900fe317f2c759c1b3909c7Mario Bertschler 520fc6f684e730b0137900fe317f2c759c1b3909c7Mario Bertschler public AppDiscoveryItemView(Context context, AttributeSet attrs, int defStyle) { 530fc6f684e730b0137900fe317f2c759c1b3909c7Mario Bertschler super(context, attrs, defStyle); 540fc6f684e730b0137900fe317f2c759c1b3909c7Mario Bertschler } 550fc6f684e730b0137900fe317f2c759c1b3909c7Mario Bertschler 560fc6f684e730b0137900fe317f2c759c1b3909c7Mario Bertschler @Override 570fc6f684e730b0137900fe317f2c759c1b3909c7Mario Bertschler protected void onFinishInflate() { 580fc6f684e730b0137900fe317f2c759c1b3909c7Mario Bertschler super.onFinishInflate(); 590fc6f684e730b0137900fe317f2c759c1b3909c7Mario Bertschler this.mImage = (ImageView) findViewById(R.id.image); 600fc6f684e730b0137900fe317f2c759c1b3909c7Mario Bertschler this.mTitle = (TextView) findViewById(R.id.title); 610fc6f684e730b0137900fe317f2c759c1b3909c7Mario Bertschler this.mRatingText = (TextView) findViewById(R.id.rating); 620fc6f684e730b0137900fe317f2c759c1b3909c7Mario Bertschler this.mRatingView = (RatingView) findViewById(R.id.rating_view); 630fc6f684e730b0137900fe317f2c759c1b3909c7Mario Bertschler this.mPrice = (TextView) findViewById(R.id.price); 640fc6f684e730b0137900fe317f2c759c1b3909c7Mario Bertschler this.mReviewCount = (TextView) findViewById(R.id.review_count); 650fc6f684e730b0137900fe317f2c759c1b3909c7Mario Bertschler } 660fc6f684e730b0137900fe317f2c759c1b3909c7Mario Bertschler 670fc6f684e730b0137900fe317f2c759c1b3909c7Mario Bertschler public void init(OnClickListener clickListener, 680fc6f684e730b0137900fe317f2c759c1b3909c7Mario Bertschler AccessibilityDelegate accessibilityDelegate, 690fc6f684e730b0137900fe317f2c759c1b3909c7Mario Bertschler OnLongClickListener onLongClickListener) { 700fc6f684e730b0137900fe317f2c759c1b3909c7Mario Bertschler setOnClickListener(clickListener); 710fc6f684e730b0137900fe317f2c759c1b3909c7Mario Bertschler mImage.setOnClickListener(clickListener); 720fc6f684e730b0137900fe317f2c759c1b3909c7Mario Bertschler setAccessibilityDelegate(accessibilityDelegate); 730fc6f684e730b0137900fe317f2c759c1b3909c7Mario Bertschler mOnLongClickListener = onLongClickListener; 740fc6f684e730b0137900fe317f2c759c1b3909c7Mario Bertschler } 750fc6f684e730b0137900fe317f2c759c1b3909c7Mario Bertschler 760fc6f684e730b0137900fe317f2c759c1b3909c7Mario Bertschler public void apply(@NonNull AppDiscoveryAppInfo info) { 770fc6f684e730b0137900fe317f2c759c1b3909c7Mario Bertschler setTag(info); 780fc6f684e730b0137900fe317f2c759c1b3909c7Mario Bertschler mImage.setTag(info); 790fc6f684e730b0137900fe317f2c759c1b3909c7Mario Bertschler mImage.setImageBitmap(info.iconBitmap); 800fc6f684e730b0137900fe317f2c759c1b3909c7Mario Bertschler mImage.setOnLongClickListener(info.isDragAndDropSupported() ? mOnLongClickListener : null); 810fc6f684e730b0137900fe317f2c759c1b3909c7Mario Bertschler mTitle.setText(info.title); 820fc6f684e730b0137900fe317f2c759c1b3909c7Mario Bertschler mPrice.setText(info.priceFormatted != null ? info.priceFormatted : ""); 830fc6f684e730b0137900fe317f2c759c1b3909c7Mario Bertschler mReviewCount.setVisibility(SHOW_REVIEW_COUNT ? View.VISIBLE : View.GONE); 840fc6f684e730b0137900fe317f2c759c1b3909c7Mario Bertschler if (info.rating >= 0) { 850287a44c81244d7b03cd964949203d58f548af93Mario Bertschler mRatingText.setText(new DecimalFormat("#.0").format(info.rating)); 860fc6f684e730b0137900fe317f2c759c1b3909c7Mario Bertschler mRatingView.setRating(info.rating); 870fc6f684e730b0137900fe317f2c759c1b3909c7Mario Bertschler mRatingView.setVisibility(View.VISIBLE); 880fc6f684e730b0137900fe317f2c759c1b3909c7Mario Bertschler String reviewCountFormatted = NumberFormat.getInstance().format(info.reviewCount); 890fc6f684e730b0137900fe317f2c759c1b3909c7Mario Bertschler mReviewCount.setText("(" + reviewCountFormatted + ")"); 900fc6f684e730b0137900fe317f2c759c1b3909c7Mario Bertschler } else { 910fc6f684e730b0137900fe317f2c759c1b3909c7Mario Bertschler // if we don't have a rating 920fc6f684e730b0137900fe317f2c759c1b3909c7Mario Bertschler mRatingView.setVisibility(View.GONE); 930fc6f684e730b0137900fe317f2c759c1b3909c7Mario Bertschler mRatingText.setText(""); 940fc6f684e730b0137900fe317f2c759c1b3909c7Mario Bertschler mReviewCount.setText(""); 950fc6f684e730b0137900fe317f2c759c1b3909c7Mario Bertschler } 960fc6f684e730b0137900fe317f2c759c1b3909c7Mario Bertschler } 970fc6f684e730b0137900fe317f2c759c1b3909c7Mario Bertschler} 98