/* * Copyright (C) 2019 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 com.android.car.settings.datausage; import android.content.Context; import android.content.Intent; import android.text.TextUtils; import android.util.AttributeSet; import android.view.View; import android.widget.Button; import android.widget.TextView; import androidx.annotation.StyleRes; import androidx.preference.PreferenceViewHolder; import com.android.car.settings.R; import com.android.car.settings.common.ProgressBarPreference; /** Extends {@link ProgressBarPreference} in order to support multiple text fields. */ public class DataUsageSummaryPreference extends ProgressBarPreference { private CharSequence mDataLimitText; private CharSequence mRemainingBillingCycleText; private CharSequence mCarrierInfoText; private Intent mManageSubscriptionIntent; @StyleRes private int mCarrierInfoTextStyle = R.style.DataUsageSummaryCarrierInfoTextAppearance; public DataUsageSummaryPreference(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { super(context, attrs, defStyleAttr, defStyleRes); init(); } public DataUsageSummaryPreference(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(); } public DataUsageSummaryPreference(Context context, AttributeSet attrs) { super(context, attrs); init(); } public DataUsageSummaryPreference(Context context) { super(context); init(); } private void init() { setLayoutResource(R.layout.data_usage_summary_preference); } /** Sets the data limit text. */ public void setDataLimitText(CharSequence text) { if (!TextUtils.equals(mDataLimitText, text)) { mDataLimitText = text; notifyChanged(); } } /** Gets the data limit text. */ public CharSequence getDataLimitText() { return mDataLimitText; } /** Sets the remaining billing cycle description. */ public void setRemainingBillingCycleText(CharSequence text) { if (!TextUtils.equals(mRemainingBillingCycleText, text)) { mRemainingBillingCycleText = text; notifyChanged(); } } /** Gets the remaining billing cycle description. */ public CharSequence getRemainingBillingCycleText() { return mRemainingBillingCycleText; } /** Sets the carrier info text. */ public void setCarrierInfoText(CharSequence text) { if (!TextUtils.equals(mCarrierInfoText, text)) { mCarrierInfoText = text; notifyChanged(); } } /** Gets the carrier info text. */ public CharSequence getCarrierInfoText() { return mCarrierInfoText; } /** Sets the carrier info text style. */ public void setCarrierInfoTextStyle(@StyleRes int styleId) { if (mCarrierInfoTextStyle != styleId) { mCarrierInfoTextStyle = styleId; notifyChanged(); } } /** Gets the carrier info text style. */ @StyleRes public int getCarrierInfoTextStyle() { return mCarrierInfoTextStyle; } /** Sets the manage subscription intent. */ public void setManageSubscriptionIntent(Intent intent) { mManageSubscriptionIntent = intent; notifyChanged(); } /** Gets the manage subscription intent. */ public Intent getManageSubscriptionIntent() { return mManageSubscriptionIntent; } @Override public void onBindViewHolder(PreferenceViewHolder view) { super.onBindViewHolder(view); setTextAndVisibility((TextView) view.findViewById(R.id.data_limit_text), mDataLimitText); setTextAndVisibility((TextView) view.findViewById(R.id.remaining_billing_cycle_time_text), mRemainingBillingCycleText); TextView carrierInfo = (TextView) view.findViewById(R.id.carrier_info_text); setTextAndVisibility(carrierInfo, mCarrierInfoText); carrierInfo.setTextAppearance(mCarrierInfoTextStyle); Button button = (Button) view.findViewById(R.id.manage_subscription_button); if (mManageSubscriptionIntent != null) { button.setVisibility(View.VISIBLE); button.setOnClickListener(v -> getContext().startActivity(mManageSubscriptionIntent)); } else { button.setVisibility(View.GONE); } } private void setTextAndVisibility(TextView textView, CharSequence value) { if (!TextUtils.isEmpty(value)) { textView.setText(value); textView.setVisibility(View.VISIBLE); } else { textView.setVisibility(View.GONE); } } }