172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project/*
272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * Copyright (C) 2008 Esmertec AG.
372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * Copyright (C) 2008 The Android Open Source Project
472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project *
572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * you may not use this file except in compliance with the License.
772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * You may obtain a copy of the License at
872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project *
972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
1072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project *
1172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software
1272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
1372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * See the License for the specific language governing permissions and
1572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * limitations under the License.
1672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project */
1772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
1872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectpackage com.android.mms.model;
1972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
20d64419030e1fec1e751695dab3bd7236e2fb0214Roger Chenimport java.util.ArrayList;
2172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
220ecc26df09777835cfa8dbfd3c48ca7b7fa7f011Tom Taylorimport android.util.Config;
2372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.util.Log;
2472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
25d64419030e1fec1e751695dab3bd7236e2fb0214Roger Chenimport com.android.mms.layout.LayoutManager;
26d64419030e1fec1e751695dab3bd7236e2fb0214Roger Chenimport com.android.mms.layout.LayoutParameters;
2772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
2872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectpublic class LayoutModel extends Model {
297fa61cafe50deb74beb0819bdf52128239d50201Wei Huang    private static final String TAG = SlideModel.TAG;
3072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    private static final boolean DEBUG = false;
310ecc26df09777835cfa8dbfd3c48ca7b7fa7f011Tom Taylor    private static final boolean LOCAL_LOGV = DEBUG ? Config.LOGD : Config.LOGV;
3272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
3372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    public static final String IMAGE_REGION_ID = "Image";
3472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    public static final String TEXT_REGION_ID  = "Text";
3572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
3672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    public static final int LAYOUT_BOTTOM_TEXT = 0;
3772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    public static final int LAYOUT_TOP_TEXT    = 1;
3872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    public static final int DEFAULT_LAYOUT_TYPE = LAYOUT_BOTTOM_TEXT;
3972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
4072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    private int mLayoutType = DEFAULT_LAYOUT_TYPE;
4172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    private RegionModel mRootLayout;
4272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    private RegionModel mImageRegion;
4372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    private RegionModel mTextRegion;
4472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    private ArrayList<RegionModel> mNonStdRegions;
4572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    private LayoutParameters mLayoutParams;
4672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
4772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    public LayoutModel() {
4872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        mLayoutParams = LayoutManager.getInstance().getLayoutParameters();
4972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        // Create default root-layout and regions.
5072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        createDefaultRootLayout();
5172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        createDefaultImageRegion();
5272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        createDefaultTextRegion();
5372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    }
5472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
5572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    public LayoutModel(RegionModel rootLayout, ArrayList<RegionModel> regions) {
5672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        mLayoutParams = LayoutManager.getInstance().getLayoutParameters();
5772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        mRootLayout = rootLayout;
5872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        mNonStdRegions = new ArrayList<RegionModel>();
5972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
6072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        for (RegionModel r : regions) {
6172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project            String rId = r.getRegionId();
6272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project            if (rId.equals(IMAGE_REGION_ID)) {
6372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project                mImageRegion = r;
6472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project            } else if (rId.equals(TEXT_REGION_ID)) {
6572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project                mTextRegion = r;
6672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project            } else {
6772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project                if (LOCAL_LOGV) {
6872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project                    Log.v(TAG, "Found non-standard region: " + rId);
6972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project                }
7072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project                mNonStdRegions.add(r);
7172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project            }
7272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        }
7372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
7472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        validateLayouts();
7572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    }
7672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
7772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    private void createDefaultRootLayout() {
7872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        mRootLayout = new RegionModel(null, 0, 0, mLayoutParams.getWidth(),
7972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project                                                  mLayoutParams.getHeight());
8072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    }
8172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
8272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    private void createDefaultImageRegion() {
8372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        if (mRootLayout == null) {
8472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project            throw new IllegalStateException("Root-Layout uninitialized.");
8572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        }
8672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
8772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        mImageRegion = new RegionModel(IMAGE_REGION_ID, 0, 0,
8872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project                mRootLayout.getWidth(), mLayoutParams.getImageHeight());
8972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    }
9072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
9172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    private void createDefaultTextRegion() {
9272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        if (mRootLayout == null) {
9372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project            throw new IllegalStateException("Root-Layout uninitialized.");
9472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        }
9572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
9672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        mTextRegion = new RegionModel(
9772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project                TEXT_REGION_ID, 0, mLayoutParams.getImageHeight(),
9872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project                mRootLayout.getWidth(), mLayoutParams.getTextHeight());
9972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    }
10072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
10172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    private void validateLayouts() {
10272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        if (mRootLayout == null) {
10372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project            createDefaultRootLayout();
10472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        }
10572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
10672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        if (mImageRegion == null) {
10772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project            createDefaultImageRegion();
10872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        }
10972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
11072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        if (mTextRegion == null) {
11172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project            createDefaultTextRegion();
11272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        }
11372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    }
11472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
11572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    public RegionModel getRootLayout() {
11672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        return mRootLayout;
11772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    }
11872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
11972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    public void setRootLayout(RegionModel rootLayout) {
12072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        mRootLayout = rootLayout;
12172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    }
12272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
12372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    public RegionModel getImageRegion() {
12472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        return mImageRegion;
12572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    }
12672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
12772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    public void setImageRegion(RegionModel imageRegion) {
12872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        mImageRegion = imageRegion;
12972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    }
13072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
13172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    public RegionModel getTextRegion() {
13272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        return mTextRegion;
13372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    }
13472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
13572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    public void setTextRegion(RegionModel textRegion) {
13672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        mTextRegion = textRegion;
13772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    }
13872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
13972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    /**
14072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project     * Get all regions except root-layout. The result is READ-ONLY.
14172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project     */
14272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    public ArrayList<RegionModel> getRegions() {
14372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        ArrayList<RegionModel> regions = new ArrayList<RegionModel>();
14472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        if (mImageRegion != null) {
14572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project            regions.add(mImageRegion);
14672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        }
14772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        if (mTextRegion != null) {
14872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project            regions.add(mTextRegion);
14972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        }
15072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        return regions;
15172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    }
15272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
15372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    public RegionModel findRegionById(String rId) {
15472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        if (IMAGE_REGION_ID.equals(rId)) {
15572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project            return mImageRegion;
15672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        } else if (TEXT_REGION_ID.equals(rId)) {
15772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project            return mTextRegion;
15872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        } else {
15972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project            for (RegionModel r : mNonStdRegions) {
16072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project                if (r.getRegionId().equals(rId)) {
16172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project                    return r;
16272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project                }
16372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project            }
16472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
16572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project            if (LOCAL_LOGV) {
16672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project                Log.v(TAG, "Region not found: " + rId);
16772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project            }
16872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project            return null;
16972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        }
17072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    }
17172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
17272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    public int getLayoutWidth() {
17372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        return mRootLayout.getWidth();
17472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    }
17572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
17672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    public int getLayoutHeight() {
17772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        return mRootLayout.getHeight();
17872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    }
17972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
18072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    public String getBackgroundColor() {
18172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        return mRootLayout.getBackgroundColor();
18272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    }
18372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
18472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    public void changeTo(int layout) {
18572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        if (mRootLayout == null) {
18672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project            throw new IllegalStateException("Root-Layout uninitialized.");
18772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        }
18872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
18972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        if (mLayoutParams == null) {
19072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project            mLayoutParams = LayoutManager.getInstance().getLayoutParameters();
19172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        }
19272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
19372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        if (mLayoutType != layout) {
19472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project            switch (layout) {
19572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project                case LAYOUT_BOTTOM_TEXT: {
19672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project                    mImageRegion.setTop(0);
19772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project                    mTextRegion.setTop(mLayoutParams.getImageHeight());
19872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project                    mLayoutType = layout;
19972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project                    notifyModelChanged(true);
20072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project                }
20172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project                break;
20272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project                case LAYOUT_TOP_TEXT: {
20372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project                    mImageRegion.setTop(mLayoutParams.getTextHeight());
20472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project                    mTextRegion.setTop(0);
20572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project                    mLayoutType = layout;
20672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project                    notifyModelChanged(true);
20772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project                }
20872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project                break;
20972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project                default: {
21072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project                    Log.w(TAG, "Unknown layout type: " + layout);
21172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project                }
21272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project            }
21372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        } else {
21472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project            if (LOCAL_LOGV) {
21572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project                Log.v(TAG, "Skip changing layout.");
21672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project            }
21772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        }
21872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    }
21972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
22072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    public int getLayoutType() {
22172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        return mLayoutType;
22272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    }
22372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
22472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    @Override
22572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    protected void registerModelChangedObserverInDescendants(
22672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project            IModelChangedObserver observer) {
22772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        if (mRootLayout != null) {
22872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project            mRootLayout.registerModelChangedObserver(observer);
22972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        }
23072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
23172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        if (mImageRegion != null) {
23272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project            mImageRegion.registerModelChangedObserver(observer);
23372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        }
23472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
23572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        if (mTextRegion != null) {
23672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project            mTextRegion.registerModelChangedObserver(observer);
23772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        }
23872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    }
23972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
24072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    @Override
24172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    protected void unregisterModelChangedObserverInDescendants(
24272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project            IModelChangedObserver observer) {
24372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        if (mRootLayout != null) {
24472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project            mRootLayout.unregisterModelChangedObserver(observer);
24572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        }
24672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
24772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        if (mImageRegion != null) {
24872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project            mImageRegion.unregisterModelChangedObserver(observer);
24972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        }
25072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
25172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        if (mTextRegion != null) {
25272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project            mTextRegion.unregisterModelChangedObserver(observer);
25372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        }
25472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    }
25572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
25672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    @Override
25772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    protected void unregisterAllModelChangedObserversInDescendants() {
25872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        if (mRootLayout != null) {
25972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project            mRootLayout.unregisterAllModelChangedObservers();
26072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        }
26172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
26272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        if (mImageRegion != null) {
26372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project            mImageRegion.unregisterAllModelChangedObservers();
26472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        }
26572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
26672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        if (mTextRegion != null) {
26772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project            mTextRegion.unregisterAllModelChangedObservers();
26872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        }
26972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    }
27072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project}
271