1067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn/*
2067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn * Copyright 2014 The Android Open Source Project
3067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn *
4067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn * Licensed under the Apache License, Version 2.0 (the "License");
5067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn * you may not use this file except in compliance with the License.
6067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn * You may obtain a copy of the License at
7067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn *
8067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn *      http://www.apache.org/licenses/LICENSE-2.0
9067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn *
10067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn * Unless required by applicable law or agreed to in writing, software
11067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn * distributed under the License is distributed on an "AS IS" BASIS,
12067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn * See the License for the specific language governing permissions and
14067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn * limitations under the License.
15067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn */
16067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn
17067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackbornpackage com.example.wallpapertest;
18067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn
19067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackbornimport android.app.Activity;
20067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackbornimport android.app.WallpaperManager;
21067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackbornimport android.content.Context;
22067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackbornimport android.graphics.Point;
23067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackbornimport android.graphics.Rect;
24067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackbornimport android.os.Bundle;
25067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackbornimport android.os.IBinder;
26067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackbornimport android.text.Editable;
27067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackbornimport android.text.TextUtils;
28067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackbornimport android.text.TextWatcher;
29067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackbornimport android.util.Log;
30067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackbornimport android.view.WindowManager;
31067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackbornimport android.widget.TextView;
32067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn
33067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackbornpublic class MainActivity extends Activity {
34067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn    private static final String TAG = "MainActivity";
35067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn
36067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn    WallpaperManager mWallpaperManager;
37067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn    WindowManager mWindowManager;
38067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn
39067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn    TextView mDimenWidthView;
40067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn    TextView mDimenHeightView;
41067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn
42067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn    TextView mWallOffXView;
43067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn    TextView mWallOffYView;
44067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn
45067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn    TextView mPaddingLeftView;
46067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn    TextView mPaddingRightView;
47067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn    TextView mPaddingTopView;
48067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn    TextView mPaddingBottomView;
49067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn
50067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn    TextView mDispOffXView;
51067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn    TextView mDispOffYView;
52067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn
53067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn    @Override
54067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn    public void onCreate(Bundle savedInstanceState) {
55067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn        super.onCreate(savedInstanceState);
56067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn        setContentView(R.layout.activity_main);
57067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn
58067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn        mWallpaperManager = (WallpaperManager)getSystemService(Context.WALLPAPER_SERVICE);
59067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn        mWindowManager = (WindowManager)getSystemService(Context.WINDOW_SERVICE);
60067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn
61067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn        mDimenWidthView = (TextView) findViewById(R.id.dimen_width);
62067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn        mDimenWidthView.addTextChangedListener(mTextWatcher);
63067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn        mDimenHeightView = (TextView) findViewById(R.id.dimen_height);
64067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn        mDimenHeightView.addTextChangedListener(mTextWatcher);
65067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn
66067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn        mWallOffXView = (TextView) findViewById(R.id.walloff_x);
67067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn        mWallOffXView.addTextChangedListener(mTextWatcher);
68067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn        mWallOffYView = (TextView) findViewById(R.id.walloff_y);
69067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn        mWallOffYView.addTextChangedListener(mTextWatcher);
70067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn
71067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn        mPaddingLeftView = (TextView) findViewById(R.id.padding_left);
72067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn        mPaddingLeftView.addTextChangedListener(mTextWatcher);
73067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn        mPaddingRightView = (TextView) findViewById(R.id.padding_right);
74067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn        mPaddingRightView.addTextChangedListener(mTextWatcher);
75067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn        mPaddingTopView = (TextView) findViewById(R.id.padding_top);
76067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn        mPaddingTopView.addTextChangedListener(mTextWatcher);
77067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn        mPaddingBottomView = (TextView) findViewById(R.id.padding_bottom);
78067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn        mPaddingBottomView.addTextChangedListener(mTextWatcher);
79067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn
80067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn        mDispOffXView = (TextView) findViewById(R.id.dispoff_x);
81067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn        mDispOffXView.addTextChangedListener(mTextWatcher);
82067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn        mDispOffYView = (TextView) findViewById(R.id.dispoff_y);
83067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn        mDispOffYView.addTextChangedListener(mTextWatcher);
84067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn
85067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn        updateDimens();
86067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn        updateWallOff();
87067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn        updatePadding();
88067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn        updateDispOff();
89067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn    }
90067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn
91067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn    private int loadPropIntText(TextView view, int baseVal) {
92067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn        String str = view.getText().toString();
93067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn        if (str != null && !TextUtils.isEmpty(str)) {
94067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn            try {
95067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn                float fval = Float.parseFloat(str);
96067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn                return (int)(fval*baseVal);
97067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn            } catch (NumberFormatException e) {
98067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn                Log.i(TAG, "Bad number: " + str, e);
99067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn            }
100067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn        }
101067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn        return baseVal;
102067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn    }
103067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn
104067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn    private float loadFloatText(TextView view) {
105067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn        String str = view.getText().toString();
106067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn        if (str != null && !TextUtils.isEmpty(str)) {
107067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn            try {
108067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn                return Float.parseFloat(str);
109067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn            } catch (NumberFormatException e) {
110067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn                Log.i(TAG, "Bad number: " + str, e);
111067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn            }
112067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn        }
113067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn        return 0;
114067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn    }
115067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn
116067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn    private int loadIntText(TextView view) {
117067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn        String str = view.getText().toString();
118067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn        if (str != null && !TextUtils.isEmpty(str)) {
119067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn            try {
120067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn                return Integer.parseInt(str);
121067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn            } catch (NumberFormatException e) {
122067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn                Log.i(TAG, "Bad number: " + str, e);
123067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn            }
124067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn        }
125067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn        return 0;
126067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn    }
127067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn
128067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn    public void updateDimens() {
129067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn        Point minDims = new Point();
130067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn        Point maxDims = new Point();
131067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn        mWindowManager.getDefaultDisplay().getCurrentSizeRange(minDims, maxDims);
132067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn        mWallpaperManager.suggestDesiredDimensions(
133067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn                loadPropIntText(mDimenWidthView, maxDims.x),
134067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn                loadPropIntText(mDimenHeightView, maxDims.y));
135067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn    }
136067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn
137067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn    public void updateWallOff() {
138067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn        IBinder token = getWindow().getDecorView().getWindowToken();
139067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn        if (token != null) {
140067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn            mWallpaperManager.setWallpaperOffsets(token, loadFloatText(mWallOffXView),
141067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn                    loadFloatText(mWallOffYView));
142067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn        }
143067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn    }
144067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn
145067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn    public void updatePadding() {
146067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn        Rect padding = new Rect();
147067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn        padding.left = loadIntText(mPaddingLeftView);
148067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn        padding.top = loadIntText(mPaddingTopView);
149067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn        padding.right = loadIntText(mPaddingRightView);
150067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn        padding.bottom = loadIntText(mPaddingBottomView);
151067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn        mWallpaperManager.setDisplayPadding(padding);
152067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn    }
153067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn
154067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn    public void updateDispOff() {
155067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn        IBinder token = getWindow().getDecorView().getWindowToken();
156067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn        if (token != null) {
157067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn            mWallpaperManager.setDisplayOffset(token, loadIntText(mDispOffXView),
158067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn                    loadIntText(mDispOffYView));
159067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn        }
160067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn    }
161067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn
162067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn    final TextWatcher mTextWatcher = new TextWatcher() {
163067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn        @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) {
164067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn        }
165067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn
166067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn        @Override public void onTextChanged(CharSequence s, int start, int before, int count) {
167067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn            updateDimens();
168067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn            updateWallOff();
169067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn            updatePadding();
170067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn            updateDispOff();
171067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn        }
172067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn
173067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn        @Override public void afterTextChanged(Editable s) {
174067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn        }
175067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn    };
176067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn}
177