AbstractItemHierarchy.java revision 05acfbb2e7c7f2c992b530b98f8a9333ec6b17f0
1960c0ea0b1d36904beef0f01715dd43a211e88caMaurice Lam/*
2960c0ea0b1d36904beef0f01715dd43a211e88caMaurice Lam * Copyright (C) 2015 The Android Open Source Project
3960c0ea0b1d36904beef0f01715dd43a211e88caMaurice Lam *
4960c0ea0b1d36904beef0f01715dd43a211e88caMaurice Lam * Licensed under the Apache License, Version 2.0 (the "License");
5960c0ea0b1d36904beef0f01715dd43a211e88caMaurice Lam * you may not use this file except in compliance with the License.
6960c0ea0b1d36904beef0f01715dd43a211e88caMaurice Lam * You may obtain a copy of the License at
7960c0ea0b1d36904beef0f01715dd43a211e88caMaurice Lam *
8960c0ea0b1d36904beef0f01715dd43a211e88caMaurice Lam *      http://www.apache.org/licenses/LICENSE-2.0
9960c0ea0b1d36904beef0f01715dd43a211e88caMaurice Lam *
10960c0ea0b1d36904beef0f01715dd43a211e88caMaurice Lam * Unless required by applicable law or agreed to in writing, software
11960c0ea0b1d36904beef0f01715dd43a211e88caMaurice Lam * distributed under the License is distributed on an "AS IS" BASIS,
12960c0ea0b1d36904beef0f01715dd43a211e88caMaurice Lam * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13960c0ea0b1d36904beef0f01715dd43a211e88caMaurice Lam * See the License for the specific language governing permissions and
14960c0ea0b1d36904beef0f01715dd43a211e88caMaurice Lam * limitations under the License.
15960c0ea0b1d36904beef0f01715dd43a211e88caMaurice Lam */
16960c0ea0b1d36904beef0f01715dd43a211e88caMaurice Lam
17960c0ea0b1d36904beef0f01715dd43a211e88caMaurice Lampackage com.android.setupwizardlib.items;
18960c0ea0b1d36904beef0f01715dd43a211e88caMaurice Lam
19960c0ea0b1d36904beef0f01715dd43a211e88caMaurice Lamimport android.content.Context;
20960c0ea0b1d36904beef0f01715dd43a211e88caMaurice Lamimport android.content.res.TypedArray;
21960c0ea0b1d36904beef0f01715dd43a211e88caMaurice Lamimport android.util.AttributeSet;
22960c0ea0b1d36904beef0f01715dd43a211e88caMaurice Lam
23960c0ea0b1d36904beef0f01715dd43a211e88caMaurice Lamimport com.android.setupwizardlib.R;
24960c0ea0b1d36904beef0f01715dd43a211e88caMaurice Lam
25960c0ea0b1d36904beef0f01715dd43a211e88caMaurice Lamimport java.util.ArrayList;
26960c0ea0b1d36904beef0f01715dd43a211e88caMaurice Lam
27960c0ea0b1d36904beef0f01715dd43a211e88caMaurice Lam/**
28960c0ea0b1d36904beef0f01715dd43a211e88caMaurice Lam * An abstract item hierarchy; provides default implementation for ID and observers.
29960c0ea0b1d36904beef0f01715dd43a211e88caMaurice Lam */
30960c0ea0b1d36904beef0f01715dd43a211e88caMaurice Lampublic abstract class AbstractItemHierarchy implements ItemHierarchy {
31960c0ea0b1d36904beef0f01715dd43a211e88caMaurice Lam
32960c0ea0b1d36904beef0f01715dd43a211e88caMaurice Lam    private ArrayList<Observer> mObservers = new ArrayList<>();
33960c0ea0b1d36904beef0f01715dd43a211e88caMaurice Lam    private int mId = 0;
34960c0ea0b1d36904beef0f01715dd43a211e88caMaurice Lam
35960c0ea0b1d36904beef0f01715dd43a211e88caMaurice Lam    public AbstractItemHierarchy() {
36960c0ea0b1d36904beef0f01715dd43a211e88caMaurice Lam    }
37960c0ea0b1d36904beef0f01715dd43a211e88caMaurice Lam
38960c0ea0b1d36904beef0f01715dd43a211e88caMaurice Lam    public AbstractItemHierarchy(Context context, AttributeSet attrs) {
39960c0ea0b1d36904beef0f01715dd43a211e88caMaurice Lam        TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.SuwAbstractItem);
40960c0ea0b1d36904beef0f01715dd43a211e88caMaurice Lam        mId = a.getResourceId(R.styleable.SuwAbstractItem_android_id, 0);
41960c0ea0b1d36904beef0f01715dd43a211e88caMaurice Lam        a.recycle();
42960c0ea0b1d36904beef0f01715dd43a211e88caMaurice Lam    }
43960c0ea0b1d36904beef0f01715dd43a211e88caMaurice Lam
44960c0ea0b1d36904beef0f01715dd43a211e88caMaurice Lam    public void setId(int id) {
45960c0ea0b1d36904beef0f01715dd43a211e88caMaurice Lam        mId = id;
46960c0ea0b1d36904beef0f01715dd43a211e88caMaurice Lam    }
47960c0ea0b1d36904beef0f01715dd43a211e88caMaurice Lam
48960c0ea0b1d36904beef0f01715dd43a211e88caMaurice Lam    public int getId() {
49960c0ea0b1d36904beef0f01715dd43a211e88caMaurice Lam        return mId;
50960c0ea0b1d36904beef0f01715dd43a211e88caMaurice Lam    }
51960c0ea0b1d36904beef0f01715dd43a211e88caMaurice Lam
5205acfbb2e7c7f2c992b530b98f8a9333ec6b17f0Ajay Nadathur    public int getViewId() {
5305acfbb2e7c7f2c992b530b98f8a9333ec6b17f0Ajay Nadathur        return getId();
5405acfbb2e7c7f2c992b530b98f8a9333ec6b17f0Ajay Nadathur    }
5505acfbb2e7c7f2c992b530b98f8a9333ec6b17f0Ajay Nadathur
56960c0ea0b1d36904beef0f01715dd43a211e88caMaurice Lam    @Override
57960c0ea0b1d36904beef0f01715dd43a211e88caMaurice Lam    public void registerObserver(Observer observer) {
58960c0ea0b1d36904beef0f01715dd43a211e88caMaurice Lam        mObservers.add(observer);
59960c0ea0b1d36904beef0f01715dd43a211e88caMaurice Lam    }
60960c0ea0b1d36904beef0f01715dd43a211e88caMaurice Lam
61960c0ea0b1d36904beef0f01715dd43a211e88caMaurice Lam    @Override
62960c0ea0b1d36904beef0f01715dd43a211e88caMaurice Lam    public void unregisterObserver(Observer observer) {
63960c0ea0b1d36904beef0f01715dd43a211e88caMaurice Lam        mObservers.remove(observer);
64960c0ea0b1d36904beef0f01715dd43a211e88caMaurice Lam    }
65960c0ea0b1d36904beef0f01715dd43a211e88caMaurice Lam
66960c0ea0b1d36904beef0f01715dd43a211e88caMaurice Lam    public void notifyChanged() {
67960c0ea0b1d36904beef0f01715dd43a211e88caMaurice Lam        for (Observer observer : mObservers) {
68960c0ea0b1d36904beef0f01715dd43a211e88caMaurice Lam            observer.onChanged(this);
69960c0ea0b1d36904beef0f01715dd43a211e88caMaurice Lam        }
70960c0ea0b1d36904beef0f01715dd43a211e88caMaurice Lam    }
71960c0ea0b1d36904beef0f01715dd43a211e88caMaurice Lam}
72