1a7a0406958991f7a964370295821d8e477f503e9Svet Ganov/*
2a7a0406958991f7a964370295821d8e477f503e9Svet Ganov * Copyright (C) 2015 The Android Open Source Project
3a7a0406958991f7a964370295821d8e477f503e9Svet Ganov *
4a7a0406958991f7a964370295821d8e477f503e9Svet Ganov * Licensed under the Apache License, Version 2.0 (the "License");
5a7a0406958991f7a964370295821d8e477f503e9Svet Ganov * you may not use this file except in compliance with the License.
6a7a0406958991f7a964370295821d8e477f503e9Svet Ganov * You may obtain a copy of the License at
7a7a0406958991f7a964370295821d8e477f503e9Svet Ganov *
8a7a0406958991f7a964370295821d8e477f503e9Svet Ganov *      http://www.apache.org/licenses/LICENSE-2.0
9a7a0406958991f7a964370295821d8e477f503e9Svet Ganov *
10a7a0406958991f7a964370295821d8e477f503e9Svet Ganov * Unless required by applicable law or agreed to in writing, software
11a7a0406958991f7a964370295821d8e477f503e9Svet Ganov * distributed under the License is distributed on an "AS IS" BASIS,
12a7a0406958991f7a964370295821d8e477f503e9Svet Ganov * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13a7a0406958991f7a964370295821d8e477f503e9Svet Ganov * See the License for the specific language governing permissions and
14a7a0406958991f7a964370295821d8e477f503e9Svet Ganov * limitations under the License.
15a7a0406958991f7a964370295821d8e477f503e9Svet Ganov */
16a7a0406958991f7a964370295821d8e477f503e9Svet Ganov
17a7a0406958991f7a964370295821d8e477f503e9Svet Ganovpackage com.android.packageinstaller.permission.model;
18a7a0406958991f7a964370295821d8e477f503e9Svet Ganov
19267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganovimport android.graphics.drawable.Drawable;
20a7a0406958991f7a964370295821d8e477f503e9Svet Ganov
21a7a0406958991f7a964370295821d8e477f503e9Svet Ganovpublic final class PermissionGroup implements Comparable<PermissionGroup> {
22a7a0406958991f7a964370295821d8e477f503e9Svet Ganov    private final String mName;
23267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov    private final String mDeclaringPackage;
24a7a0406958991f7a964370295821d8e477f503e9Svet Ganov    private final CharSequence mLabel;
25267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov    private final Drawable mIcon;
269337ca6d658fa5abf7bc42cfff195827d07c496bPhilip P. Moltmann    private final int mTotal;
279337ca6d658fa5abf7bc42cfff195827d07c496bPhilip P. Moltmann    private final int mGranted;
28785a9b6369db4c46a389a43ae30e1f6e8003366bSvet Ganov
299337ca6d658fa5abf7bc42cfff195827d07c496bPhilip P. Moltmann    PermissionGroup(String name, String declaringPackage, CharSequence label, Drawable icon,
309337ca6d658fa5abf7bc42cfff195827d07c496bPhilip P. Moltmann            int total, int granted) {
31267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov        mDeclaringPackage = declaringPackage;
32a7a0406958991f7a964370295821d8e477f503e9Svet Ganov        mName = name;
33a7a0406958991f7a964370295821d8e477f503e9Svet Ganov        mLabel = label;
34267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov        mIcon = icon;
359337ca6d658fa5abf7bc42cfff195827d07c496bPhilip P. Moltmann        mTotal = total;
369337ca6d658fa5abf7bc42cfff195827d07c496bPhilip P. Moltmann        mGranted = granted;
37a7a0406958991f7a964370295821d8e477f503e9Svet Ganov    }
38a7a0406958991f7a964370295821d8e477f503e9Svet Ganov
39a7a0406958991f7a964370295821d8e477f503e9Svet Ganov    public String getName() {
40a7a0406958991f7a964370295821d8e477f503e9Svet Ganov        return mName;
41a7a0406958991f7a964370295821d8e477f503e9Svet Ganov    }
42a7a0406958991f7a964370295821d8e477f503e9Svet Ganov
43267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov    public String getDeclaringPackage() {
44267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov        return mDeclaringPackage;
45a7a0406958991f7a964370295821d8e477f503e9Svet Ganov    }
46a7a0406958991f7a964370295821d8e477f503e9Svet Ganov
47a7a0406958991f7a964370295821d8e477f503e9Svet Ganov    public CharSequence getLabel() {
48a7a0406958991f7a964370295821d8e477f503e9Svet Ganov        return mLabel;
49a7a0406958991f7a964370295821d8e477f503e9Svet Ganov    }
50a7a0406958991f7a964370295821d8e477f503e9Svet Ganov
51267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov    public Drawable getIcon() {
52267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov        return mIcon;
530430e255aebb6cf64f65eeaaf052786ee2834819Svet Ganov    }
540430e255aebb6cf64f65eeaaf052786ee2834819Svet Ganov
559337ca6d658fa5abf7bc42cfff195827d07c496bPhilip P. Moltmann    /**
569337ca6d658fa5abf7bc42cfff195827d07c496bPhilip P. Moltmann     * @return The number of apps that might request permissions of this group
579337ca6d658fa5abf7bc42cfff195827d07c496bPhilip P. Moltmann     */
589337ca6d658fa5abf7bc42cfff195827d07c496bPhilip P. Moltmann    public int getTotal() {
599337ca6d658fa5abf7bc42cfff195827d07c496bPhilip P. Moltmann        return mTotal;
609337ca6d658fa5abf7bc42cfff195827d07c496bPhilip P. Moltmann    }
619337ca6d658fa5abf7bc42cfff195827d07c496bPhilip P. Moltmann
629337ca6d658fa5abf7bc42cfff195827d07c496bPhilip P. Moltmann    /**
639337ca6d658fa5abf7bc42cfff195827d07c496bPhilip P. Moltmann     * @return The number of apps that were granted permissions of this group
649337ca6d658fa5abf7bc42cfff195827d07c496bPhilip P. Moltmann     */
659337ca6d658fa5abf7bc42cfff195827d07c496bPhilip P. Moltmann    public int getGranted() {
669337ca6d658fa5abf7bc42cfff195827d07c496bPhilip P. Moltmann        return mGranted;
679337ca6d658fa5abf7bc42cfff195827d07c496bPhilip P. Moltmann    }
689337ca6d658fa5abf7bc42cfff195827d07c496bPhilip P. Moltmann
69a7a0406958991f7a964370295821d8e477f503e9Svet Ganov    @Override
70a7a0406958991f7a964370295821d8e477f503e9Svet Ganov    public int compareTo(PermissionGroup another) {
71267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov        return mLabel.toString().compareTo(another.mLabel.toString());
72a7a0406958991f7a964370295821d8e477f503e9Svet Ganov    }
73a7a0406958991f7a964370295821d8e477f503e9Svet Ganov
74a7a0406958991f7a964370295821d8e477f503e9Svet Ganov    @Override
75a7a0406958991f7a964370295821d8e477f503e9Svet Ganov    public boolean equals(Object obj) {
76a7a0406958991f7a964370295821d8e477f503e9Svet Ganov        if (this == obj) {
77a7a0406958991f7a964370295821d8e477f503e9Svet Ganov            return true;
78a7a0406958991f7a964370295821d8e477f503e9Svet Ganov        }
79a7a0406958991f7a964370295821d8e477f503e9Svet Ganov
80a7a0406958991f7a964370295821d8e477f503e9Svet Ganov        if (obj == null) {
81a7a0406958991f7a964370295821d8e477f503e9Svet Ganov            return false;
82a7a0406958991f7a964370295821d8e477f503e9Svet Ganov        }
83a7a0406958991f7a964370295821d8e477f503e9Svet Ganov
84a7a0406958991f7a964370295821d8e477f503e9Svet Ganov        if (getClass() != obj.getClass()) {
85a7a0406958991f7a964370295821d8e477f503e9Svet Ganov            return false;
86a7a0406958991f7a964370295821d8e477f503e9Svet Ganov        }
87a7a0406958991f7a964370295821d8e477f503e9Svet Ganov
88a7a0406958991f7a964370295821d8e477f503e9Svet Ganov        PermissionGroup other = (PermissionGroup) obj;
89a7a0406958991f7a964370295821d8e477f503e9Svet Ganov
90a7a0406958991f7a964370295821d8e477f503e9Svet Ganov        if (mName == null) {
91a7a0406958991f7a964370295821d8e477f503e9Svet Ganov            if (other.mName != null) {
92a7a0406958991f7a964370295821d8e477f503e9Svet Ganov                return false;
93a7a0406958991f7a964370295821d8e477f503e9Svet Ganov            }
94a7a0406958991f7a964370295821d8e477f503e9Svet Ganov        } else if (!mName.equals(other.mName)) {
95a7a0406958991f7a964370295821d8e477f503e9Svet Ganov            return false;
96a7a0406958991f7a964370295821d8e477f503e9Svet Ganov        }
97a7a0406958991f7a964370295821d8e477f503e9Svet Ganov
989337ca6d658fa5abf7bc42cfff195827d07c496bPhilip P. Moltmann        if (mTotal != other.mTotal) {
999337ca6d658fa5abf7bc42cfff195827d07c496bPhilip P. Moltmann            return false;
1009337ca6d658fa5abf7bc42cfff195827d07c496bPhilip P. Moltmann        }
1019337ca6d658fa5abf7bc42cfff195827d07c496bPhilip P. Moltmann
1029337ca6d658fa5abf7bc42cfff195827d07c496bPhilip P. Moltmann        if (mGranted != other.mGranted) {
1039337ca6d658fa5abf7bc42cfff195827d07c496bPhilip P. Moltmann            return false;
1049337ca6d658fa5abf7bc42cfff195827d07c496bPhilip P. Moltmann        }
1059337ca6d658fa5abf7bc42cfff195827d07c496bPhilip P. Moltmann
106a7a0406958991f7a964370295821d8e477f503e9Svet Ganov        return true;
107a7a0406958991f7a964370295821d8e477f503e9Svet Ganov    }
108a7a0406958991f7a964370295821d8e477f503e9Svet Ganov
109a7a0406958991f7a964370295821d8e477f503e9Svet Ganov    @Override
110a7a0406958991f7a964370295821d8e477f503e9Svet Ganov    public int hashCode() {
1119337ca6d658fa5abf7bc42cfff195827d07c496bPhilip P. Moltmann        return mName != null ? mName.hashCode() + mTotal + mGranted : mTotal + mGranted;
112a7a0406958991f7a964370295821d8e477f503e9Svet Ganov    }
113a7a0406958991f7a964370295821d8e477f503e9Svet Ganov}
114