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