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