From 012b88698d970d926bedf087d6d26b0c8f552c3b Mon Sep 17 00:00:00 2001 From: Luca Stefani Date: Wed, 4 Sep 2019 17:52:04 +0200 Subject: Revert "Remove Permissions Hub." This reverts commit 5747740517e37ebe05209fde129cc776af4c2127. Change-Id: Ic38e77e8b11baa2dded3593089720d6592d8ddb6 --- .../ui/handheld/ExpandablePreferenceGroup.java | 135 +++++++++++++++++++++ 1 file changed, 135 insertions(+) create mode 100644 src/com/android/packageinstaller/permission/ui/handheld/ExpandablePreferenceGroup.java (limited to 'src/com/android/packageinstaller/permission/ui/handheld/ExpandablePreferenceGroup.java') diff --git a/src/com/android/packageinstaller/permission/ui/handheld/ExpandablePreferenceGroup.java b/src/com/android/packageinstaller/permission/ui/handheld/ExpandablePreferenceGroup.java new file mode 100644 index 00000000..49a2d5f6 --- /dev/null +++ b/src/com/android/packageinstaller/permission/ui/handheld/ExpandablePreferenceGroup.java @@ -0,0 +1,135 @@ +/* + * Copyright (C) 2018 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.packageinstaller.permission.ui.handheld; + +import android.content.Context; +import android.text.TextUtils; +import android.util.Pair; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.annotation.DrawableRes; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.preference.Preference; +import androidx.preference.PreferenceGroup; +import androidx.preference.PreferenceViewHolder; + +import com.android.permissioncontroller.R; + +import java.util.ArrayList; +import java.util.List; + +/** + * A preference group that expands/collapses its children when clicked. + */ +public class ExpandablePreferenceGroup extends PreferenceGroup { + private @NonNull Context mContext; + private @NonNull List mPreferences; + private @NonNull List> mSummaryIcons; + private boolean mExpanded; + + public ExpandablePreferenceGroup(@NonNull Context context) { + super(context, null); + + mContext = context; + mPreferences = new ArrayList<>(); + mSummaryIcons = new ArrayList<>(); + mExpanded = false; + + setLayoutResource(R.layout.preference_usage); + setWidgetLayoutResource(R.layout.image_view); + setOnPreferenceClickListener(preference -> { + if (!mExpanded) { + int numPreferences = mPreferences.size(); + for (int i = 0; i < numPreferences; i++) { + super.addPreference(mPreferences.get(i)); + } + } else { + removeAll(); + } + mExpanded = !mExpanded; + return true; + }); + } + + @Override + public void onBindViewHolder(PreferenceViewHolder holder) { + ImageView icon = (ImageView) holder.findViewById(android.R.id.icon); + int rightIconSize = mContext.getResources().getDimensionPixelSize( + R.dimen.secondary_app_icon_size); + icon.setMaxWidth(rightIconSize); + icon.setMaxHeight(rightIconSize); + + super.onBindViewHolder(holder); + + TextView summary = (TextView) holder.findViewById(android.R.id.summary); + summary.setMaxLines(1); + summary.setEllipsize(TextUtils.TruncateAt.END); + + ImageView rightImageView = holder.findViewById( + android.R.id.widget_frame).findViewById(R.id.icon); + if (mExpanded) { + rightImageView.setImageResource(R.drawable.ic_arrow_up); + } else { + rightImageView.setImageResource(R.drawable.ic_arrow_down); + } + + holder.setDividerAllowedAbove(false); + holder.setDividerAllowedBelow(false); + + holder.findViewById(R.id.title_widget_frame).setVisibility(View.GONE); + + ViewGroup summaryFrame = (ViewGroup) holder.findViewById(R.id.summary_widget_frame); + if (mSummaryIcons.isEmpty()) { + summaryFrame.setVisibility(View.GONE); + } else { + summaryFrame.removeAllViews(); + int numIcons = mSummaryIcons.size(); + for (int i = 0; i < numIcons; i++) { + LayoutInflater inflater = mContext.getSystemService(LayoutInflater.class); + ViewGroup group = (ViewGroup) inflater.inflate(R.layout.title_summary_image_view, + null); + ImageView imageView = group.requireViewById(R.id.icon); + Pair summaryIcons = mSummaryIcons.get(i); + imageView.setImageResource(summaryIcons.first); + if (summaryIcons.second != null) { + imageView.setContentDescription(summaryIcons.second); + } + summaryFrame.addView(group); + } + } + } + + @Override + public boolean addPreference(Preference preference) { + mPreferences.add(preference); + return true; + } + + /** + * Show the given icon next to this preference's summary. + * + * @param resId the resourceId of the drawable to use as the icon. + */ + public void addSummaryIcon(@DrawableRes int resId, @Nullable CharSequence contentDescription) { + mSummaryIcons.add(Pair.create(resId, contentDescription)); + } +} -- cgit v1.2.3