1/*
2* Copyright (C) 2014 Samsung System LSI
3* Licensed under the Apache License, Version 2.0 (the "License");
4* you may not use this file except in compliance with the License.
5* You may obtain a copy of the License at
6*
7*      http://www.apache.org/licenses/LICENSE-2.0
8*
9* Unless required by applicable law or agreed to in writing, software
10* distributed under the License is distributed on an "AS IS" BASIS,
11* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12* See the License for the specific language governing permissions and
13* limitations under the License.
14*/
15
16package com.android.bluetooth.map;
17
18import android.graphics.drawable.Drawable;
19import android.util.Log;
20
21/**
22 * Class to contain all the info about the items of the Map Email Settings Menu.
23 * It can be used for both Email Apps (group Parent item) and Accounts (Group child Item).
24 *
25 */
26public class BluetoothMapAccountItem implements Comparable<BluetoothMapAccountItem>{
27    private static final String TAG = "BluetoothMapAccountItem";
28
29    private static final boolean D = BluetoothMapService.DEBUG;
30    private static final boolean V = BluetoothMapService.VERBOSE;
31
32    protected boolean mIsChecked;
33    private final String mName;
34    private final String mPackageName;
35    private final String mId;
36    private final String mProviderAuthority;
37    private final Drawable mIcon;
38    private final BluetoothMapUtils.TYPE mType;
39    public final String mBase_uri;
40    public final String mBase_uri_no_account;
41    private final String mUci;
42    private final String mUciPrefix;
43
44    public BluetoothMapAccountItem(String id, String name, String packageName, String authority,
45            Drawable icon, BluetoothMapUtils.TYPE appType, String uci, String uciPrefix) {
46        this.mName = name;
47        this.mIcon = icon;
48        this.mPackageName = packageName;
49        this.mId = id;
50        this.mProviderAuthority = authority;
51        this.mType = appType;
52        this.mBase_uri_no_account = "content://" + authority;
53        this.mBase_uri = mBase_uri_no_account + "/"+id;
54        this.mUci = uci;
55        this.mUciPrefix = uciPrefix;
56    }
57
58    public static BluetoothMapAccountItem create(String id, String name, String packageName,
59            String authority, Drawable icon, BluetoothMapUtils.TYPE appType) {
60        return new BluetoothMapAccountItem(id, name, packageName, authority,
61                icon, appType, null, null);
62    }
63
64    public static BluetoothMapAccountItem create(String id, String name, String packageName,
65            String authority, Drawable icon, BluetoothMapUtils.TYPE appType, String uci,
66            String uciPrefix) {
67        return new BluetoothMapAccountItem(id, name, packageName, authority,
68                icon, appType, uci, uciPrefix);
69    }
70    public long getAccountId() {
71        if(mId != null) {
72            return Long.parseLong(mId);
73        }
74        return -1;
75    }
76
77    public String getUci() {
78        return mUci;
79    }
80
81    public String getUciPrefix(){
82        return mUciPrefix;
83    }
84
85    public String getUciFull(){
86        if(mUci == null)
87            return null;
88        if(mUciPrefix == null)
89            return null;
90        return new StringBuilder(mUciPrefix).append(":").append(mUci).toString();
91    }
92
93    @Override
94    public int compareTo(BluetoothMapAccountItem other) {
95
96        if(!other.mId.equals(this.mId)){
97            if(V) Log.d(TAG, "Wrong id : " + this.mId + " vs " + other.mId);
98            return -1;
99        }
100        if(!other.mName.equals(this.mName)){
101            if(V) Log.d(TAG, "Wrong name : " + this.mName + " vs " + other.mName);
102            return -1;
103        }
104        if(!other.mPackageName.equals(this.mPackageName)){
105            if(V) Log.d(TAG, "Wrong packageName : " + this.mPackageName + " vs "
106                    + other.mPackageName);
107             return -1;
108        }
109        if(!other.mProviderAuthority.equals(this.mProviderAuthority)){
110            if(V) Log.d(TAG, "Wrong providerName : " + this.mProviderAuthority + " vs "
111                    + other.mProviderAuthority);
112            return -1;
113        }
114        if(other.mIsChecked != this.mIsChecked){
115            if(V) Log.d(TAG, "Wrong isChecked : " + this.mIsChecked + " vs " + other.mIsChecked);
116            return -1;
117        }
118        if(!other.mType.equals(this.mType)){
119            if(V) Log.d(TAG, "Wrong appType : " + this.mType + " vs " + other.mType);
120             return -1;
121        }
122        return 0;
123    }
124
125    @Override
126    public int hashCode() {
127        final int prime = 31;
128        int result = 1;
129        result = prime * result + ((mId == null) ? 0 : mId.hashCode());
130        result = prime * result + ((mName == null) ? 0 : mName.hashCode());
131        result = prime * result
132                + ((mPackageName == null) ? 0 : mPackageName.hashCode());
133        result = prime * result
134                + ((mProviderAuthority == null) ? 0 : mProviderAuthority.hashCode());
135        return result;
136    }
137
138    @Override
139    public boolean equals(Object obj) {
140        if (this == obj)
141            return true;
142        if (obj == null)
143            return false;
144        if (getClass() != obj.getClass())
145            return false;
146        BluetoothMapAccountItem other = (BluetoothMapAccountItem) obj;
147        if (mId == null) {
148            if (other.mId != null)
149                return false;
150        } else if (!mId.equals(other.mId))
151            return false;
152        if (mName == null) {
153            if (other.mName != null)
154                return false;
155        } else if (!mName.equals(other.mName))
156            return false;
157        if (mPackageName == null) {
158            if (other.mPackageName != null)
159                return false;
160        } else if (!mPackageName.equals(other.mPackageName))
161            return false;
162        if (mProviderAuthority == null) {
163            if (other.mProviderAuthority != null)
164                return false;
165        } else if (!mProviderAuthority.equals(other.mProviderAuthority))
166            return false;
167        if (mType == null) {
168            if (other.mType != null)
169                return false;
170        } else if (!mType.equals(other.mType))
171            return false;
172        return true;
173    }
174
175    @Override
176    public String toString() {
177        return mName + " (" + mBase_uri + ")";
178    }
179
180    public Drawable getIcon() {
181        return mIcon;
182    }
183
184    public String getName() {
185        return mName;
186    }
187
188    public String getId() {
189        return mId;
190    }
191
192    public String getPackageName() {
193        return mPackageName;
194    }
195
196    public String getProviderAuthority() {
197        return mProviderAuthority;
198    }
199
200    public BluetoothMapUtils.TYPE getType() {
201        return mType;
202    }
203
204}
205