ResourcesKey.java revision 05e6dde3a0b9ba1eb3d13d511fe2e27a0d10c851
188c0589969b17e66559cd2f132094cdaa0ee351dCraig Mautner/*
288c0589969b17e66559cd2f132094cdaa0ee351dCraig Mautner * Copyright (C) 2013 The Android Open Source Project
388c0589969b17e66559cd2f132094cdaa0ee351dCraig Mautner *
488c0589969b17e66559cd2f132094cdaa0ee351dCraig Mautner * Licensed under the Apache License, Version 2.0 (the "License");
588c0589969b17e66559cd2f132094cdaa0ee351dCraig Mautner * you may not use this file except in compliance with the License.
688c0589969b17e66559cd2f132094cdaa0ee351dCraig Mautner * You may obtain a copy of the License at
788c0589969b17e66559cd2f132094cdaa0ee351dCraig Mautner *
888c0589969b17e66559cd2f132094cdaa0ee351dCraig Mautner *      http://www.apache.org/licenses/LICENSE-2.0
988c0589969b17e66559cd2f132094cdaa0ee351dCraig Mautner *
1088c0589969b17e66559cd2f132094cdaa0ee351dCraig Mautner * Unless required by applicable law or agreed to in writing, software
1188c0589969b17e66559cd2f132094cdaa0ee351dCraig Mautner * distributed under the License is distributed on an "AS IS" BASIS,
1288c0589969b17e66559cd2f132094cdaa0ee351dCraig Mautner * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1388c0589969b17e66559cd2f132094cdaa0ee351dCraig Mautner * See the License for the specific language governing permissions and
1488c0589969b17e66559cd2f132094cdaa0ee351dCraig Mautner * limitations under the License.
1588c0589969b17e66559cd2f132094cdaa0ee351dCraig Mautner */
1688c0589969b17e66559cd2f132094cdaa0ee351dCraig Mautner
1788c0589969b17e66559cd2f132094cdaa0ee351dCraig Mautnerpackage android.content.res;
1888c0589969b17e66559cd2f132094cdaa0ee351dCraig Mautner
1988c0589969b17e66559cd2f132094cdaa0ee351dCraig Mautnerimport android.os.IBinder;
2088c0589969b17e66559cd2f132094cdaa0ee351dCraig Mautner
2188c0589969b17e66559cd2f132094cdaa0ee351dCraig Mautner/** @hide */
2288c0589969b17e66559cd2f132094cdaa0ee351dCraig Mautnerpublic final class ResourcesKey {
2388c0589969b17e66559cd2f132094cdaa0ee351dCraig Mautner    final String mResDir;
2488c0589969b17e66559cd2f132094cdaa0ee351dCraig Mautner    final float mScale;
2588c0589969b17e66559cd2f132094cdaa0ee351dCraig Mautner    private final int mHash;
2688c0589969b17e66559cd2f132094cdaa0ee351dCraig Mautner    private final IBinder mToken;
2788c0589969b17e66559cd2f132094cdaa0ee351dCraig Mautner
2888c0589969b17e66559cd2f132094cdaa0ee351dCraig Mautner    public final int mDisplayId;
2988c0589969b17e66559cd2f132094cdaa0ee351dCraig Mautner    public final Configuration mOverrideConfiguration = new Configuration();
3088c0589969b17e66559cd2f132094cdaa0ee351dCraig Mautner
3188c0589969b17e66559cd2f132094cdaa0ee351dCraig Mautner    public ResourcesKey(String resDir, int displayId, Configuration overrideConfiguration,
3288c0589969b17e66559cd2f132094cdaa0ee351dCraig Mautner            float scale, IBinder token) {
3388c0589969b17e66559cd2f132094cdaa0ee351dCraig Mautner        mResDir = resDir;
3488c0589969b17e66559cd2f132094cdaa0ee351dCraig Mautner        mDisplayId = displayId;
3588c0589969b17e66559cd2f132094cdaa0ee351dCraig Mautner        if (overrideConfiguration != null) {
3688c0589969b17e66559cd2f132094cdaa0ee351dCraig Mautner            mOverrideConfiguration.setTo(overrideConfiguration);
3788c0589969b17e66559cd2f132094cdaa0ee351dCraig Mautner        }
3888c0589969b17e66559cd2f132094cdaa0ee351dCraig Mautner        mScale = scale;
3988c0589969b17e66559cd2f132094cdaa0ee351dCraig Mautner        mToken = token;
4088c0589969b17e66559cd2f132094cdaa0ee351dCraig Mautner
4188c0589969b17e66559cd2f132094cdaa0ee351dCraig Mautner        int hash = 17;
4288c0589969b17e66559cd2f132094cdaa0ee351dCraig Mautner        hash = 31 * hash + (mResDir == null ? 0 : mResDir.hashCode());
4388c0589969b17e66559cd2f132094cdaa0ee351dCraig Mautner        hash = 31 * hash + mDisplayId;
4488c0589969b17e66559cd2f132094cdaa0ee351dCraig Mautner        hash = 31 * hash + (mOverrideConfiguration != null
4588c0589969b17e66559cd2f132094cdaa0ee351dCraig Mautner                ? mOverrideConfiguration.hashCode() : 0);
4688c0589969b17e66559cd2f132094cdaa0ee351dCraig Mautner        hash = 31 * hash + Float.floatToIntBits(mScale);
4788c0589969b17e66559cd2f132094cdaa0ee351dCraig Mautner        mHash = hash;
4888c0589969b17e66559cd2f132094cdaa0ee351dCraig Mautner    }
4988c0589969b17e66559cd2f132094cdaa0ee351dCraig Mautner
5088c0589969b17e66559cd2f132094cdaa0ee351dCraig Mautner    public boolean hasOverrideConfiguration() {
5188c0589969b17e66559cd2f132094cdaa0ee351dCraig Mautner        return !Configuration.EMPTY.equals(mOverrideConfiguration);
5288c0589969b17e66559cd2f132094cdaa0ee351dCraig Mautner    }
5388c0589969b17e66559cd2f132094cdaa0ee351dCraig Mautner
5488c0589969b17e66559cd2f132094cdaa0ee351dCraig Mautner    @Override
5588c0589969b17e66559cd2f132094cdaa0ee351dCraig Mautner    public int hashCode() {
5688c0589969b17e66559cd2f132094cdaa0ee351dCraig Mautner        return mHash;
5788c0589969b17e66559cd2f132094cdaa0ee351dCraig Mautner    }
5888c0589969b17e66559cd2f132094cdaa0ee351dCraig Mautner
5988c0589969b17e66559cd2f132094cdaa0ee351dCraig Mautner    @Override
6088c0589969b17e66559cd2f132094cdaa0ee351dCraig Mautner    public boolean equals(Object obj) {
6188c0589969b17e66559cd2f132094cdaa0ee351dCraig Mautner        if (!(obj instanceof ResourcesKey)) {
6288c0589969b17e66559cd2f132094cdaa0ee351dCraig Mautner            return false;
6388c0589969b17e66559cd2f132094cdaa0ee351dCraig Mautner        }
6488c0589969b17e66559cd2f132094cdaa0ee351dCraig Mautner        ResourcesKey peer = (ResourcesKey) obj;
6505e6dde3a0b9ba1eb3d13d511fe2e27a0d10c851Wink Saville
6605e6dde3a0b9ba1eb3d13d511fe2e27a0d10c851Wink Saville        if ((mResDir == null) && (peer.mResDir != null)) {
6705e6dde3a0b9ba1eb3d13d511fe2e27a0d10c851Wink Saville            return false;
6805e6dde3a0b9ba1eb3d13d511fe2e27a0d10c851Wink Saville        }
6905e6dde3a0b9ba1eb3d13d511fe2e27a0d10c851Wink Saville        if ((mResDir != null) && (peer.mResDir == null)) {
7005e6dde3a0b9ba1eb3d13d511fe2e27a0d10c851Wink Saville            return false;
7105e6dde3a0b9ba1eb3d13d511fe2e27a0d10c851Wink Saville        }
7205e6dde3a0b9ba1eb3d13d511fe2e27a0d10c851Wink Saville        if ((mResDir != null) && (peer.mResDir != null)) {
7305e6dde3a0b9ba1eb3d13d511fe2e27a0d10c851Wink Saville            if (!mResDir.equals(peer.mResDir)) {
7454130de7d2a0827179acaa35980dbce419cb4fcaAdam Lesinski                return false;
7554130de7d2a0827179acaa35980dbce419cb4fcaAdam Lesinski            }
7688c0589969b17e66559cd2f132094cdaa0ee351dCraig Mautner        }
7788c0589969b17e66559cd2f132094cdaa0ee351dCraig Mautner        if (mDisplayId != peer.mDisplayId) {
7888c0589969b17e66559cd2f132094cdaa0ee351dCraig Mautner            return false;
7988c0589969b17e66559cd2f132094cdaa0ee351dCraig Mautner        }
8088c0589969b17e66559cd2f132094cdaa0ee351dCraig Mautner        if (mOverrideConfiguration != peer.mOverrideConfiguration) {
8188c0589969b17e66559cd2f132094cdaa0ee351dCraig Mautner            if (mOverrideConfiguration == null || peer.mOverrideConfiguration == null) {
8288c0589969b17e66559cd2f132094cdaa0ee351dCraig Mautner                return false;
8388c0589969b17e66559cd2f132094cdaa0ee351dCraig Mautner            }
8488c0589969b17e66559cd2f132094cdaa0ee351dCraig Mautner            if (!mOverrideConfiguration.equals(peer.mOverrideConfiguration)) {
8588c0589969b17e66559cd2f132094cdaa0ee351dCraig Mautner                return false;
8688c0589969b17e66559cd2f132094cdaa0ee351dCraig Mautner            }
8788c0589969b17e66559cd2f132094cdaa0ee351dCraig Mautner        }
8888c0589969b17e66559cd2f132094cdaa0ee351dCraig Mautner        if (mScale != peer.mScale) {
8988c0589969b17e66559cd2f132094cdaa0ee351dCraig Mautner            return false;
9088c0589969b17e66559cd2f132094cdaa0ee351dCraig Mautner        }
9188c0589969b17e66559cd2f132094cdaa0ee351dCraig Mautner        return true;
9288c0589969b17e66559cd2f132094cdaa0ee351dCraig Mautner    }
9388c0589969b17e66559cd2f132094cdaa0ee351dCraig Mautner
9488c0589969b17e66559cd2f132094cdaa0ee351dCraig Mautner    @Override
9588c0589969b17e66559cd2f132094cdaa0ee351dCraig Mautner    public String toString() {
9688c0589969b17e66559cd2f132094cdaa0ee351dCraig Mautner        return Integer.toHexString(mHash);
9788c0589969b17e66559cd2f132094cdaa0ee351dCraig Mautner    }
9888c0589969b17e66559cd2f132094cdaa0ee351dCraig Mautner}
99