1d459f4bbfcfe4989a0e2298b3cfd36064b386b88Dianne Hackborn/* 2d459f4bbfcfe4989a0e2298b3cfd36064b386b88Dianne Hackborn * Copyright (C) 2012 The Android Open Source Project 3d459f4bbfcfe4989a0e2298b3cfd36064b386b88Dianne Hackborn * 4d459f4bbfcfe4989a0e2298b3cfd36064b386b88Dianne Hackborn * Licensed under the Apache License, Version 2.0 (the "License"); 5d459f4bbfcfe4989a0e2298b3cfd36064b386b88Dianne Hackborn * you may not use this file except in compliance with the License. 6d459f4bbfcfe4989a0e2298b3cfd36064b386b88Dianne Hackborn * You may obtain a copy of the License at 7d459f4bbfcfe4989a0e2298b3cfd36064b386b88Dianne Hackborn * 8d459f4bbfcfe4989a0e2298b3cfd36064b386b88Dianne Hackborn * http://www.apache.org/licenses/LICENSE-2.0 9d459f4bbfcfe4989a0e2298b3cfd36064b386b88Dianne Hackborn * 10d459f4bbfcfe4989a0e2298b3cfd36064b386b88Dianne Hackborn * Unless required by applicable law or agreed to in writing, software 11d459f4bbfcfe4989a0e2298b3cfd36064b386b88Dianne Hackborn * distributed under the License is distributed on an "AS IS" BASIS, 12d459f4bbfcfe4989a0e2298b3cfd36064b386b88Dianne Hackborn * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13d459f4bbfcfe4989a0e2298b3cfd36064b386b88Dianne Hackborn * See the License for the specific language governing permissions and 14d459f4bbfcfe4989a0e2298b3cfd36064b386b88Dianne Hackborn * limitations under the License. 15d459f4bbfcfe4989a0e2298b3cfd36064b386b88Dianne Hackborn */ 16d459f4bbfcfe4989a0e2298b3cfd36064b386b88Dianne Hackborn 17d459f4bbfcfe4989a0e2298b3cfd36064b386b88Dianne Hackbornpackage com.android.fakeoemfeatures; 18d459f4bbfcfe4989a0e2298b3cfd36064b386b88Dianne Hackborn 19d459f4bbfcfe4989a0e2298b3cfd36064b386b88Dianne Hackbornimport java.util.ArrayList; 20d459f4bbfcfe4989a0e2298b3cfd36064b386b88Dianne Hackbornimport java.util.Random; 21d459f4bbfcfe4989a0e2298b3cfd36064b386b88Dianne Hackborn 22d459f4bbfcfe4989a0e2298b3cfd36064b386b88Dianne Hackbornimport android.app.Dialog; 23d459f4bbfcfe4989a0e2298b3cfd36064b386b88Dianne Hackbornimport android.app.Service; 24d459f4bbfcfe4989a0e2298b3cfd36064b386b88Dianne Hackbornimport android.content.Context; 25d459f4bbfcfe4989a0e2298b3cfd36064b386b88Dianne Hackbornimport android.content.Intent; 26d459f4bbfcfe4989a0e2298b3cfd36064b386b88Dianne Hackbornimport android.os.Handler; 27d459f4bbfcfe4989a0e2298b3cfd36064b386b88Dianne Hackbornimport android.os.IBinder; 28d459f4bbfcfe4989a0e2298b3cfd36064b386b88Dianne Hackbornimport android.os.Message; 29d459f4bbfcfe4989a0e2298b3cfd36064b386b88Dianne Hackbornimport android.view.Display; 30d459f4bbfcfe4989a0e2298b3cfd36064b386b88Dianne Hackbornimport android.view.ViewGroup; 31d459f4bbfcfe4989a0e2298b3cfd36064b386b88Dianne Hackbornimport android.view.WindowManager; 32d459f4bbfcfe4989a0e2298b3cfd36064b386b88Dianne Hackborn 33d459f4bbfcfe4989a0e2298b3cfd36064b386b88Dianne Hackbornpublic class FakeBackgroundService extends Service { 34d459f4bbfcfe4989a0e2298b3cfd36064b386b88Dianne Hackborn final ArrayList<int[]> mAllocs = new ArrayList<int[]>(); 35d459f4bbfcfe4989a0e2298b3cfd36064b386b88Dianne Hackborn 36d459f4bbfcfe4989a0e2298b3cfd36064b386b88Dianne Hackborn final Random mRandom = new Random(); 37d459f4bbfcfe4989a0e2298b3cfd36064b386b88Dianne Hackborn 38d459f4bbfcfe4989a0e2298b3cfd36064b386b88Dianne Hackborn static final long TICK_DELAY = 30*1000; // 30 seconds 39d459f4bbfcfe4989a0e2298b3cfd36064b386b88Dianne Hackborn static final int MSG_TICK = 1; 40d459f4bbfcfe4989a0e2298b3cfd36064b386b88Dianne Hackborn final Handler mHandler = new Handler() { 41d459f4bbfcfe4989a0e2298b3cfd36064b386b88Dianne Hackborn @Override public void handleMessage(Message msg) { 42d459f4bbfcfe4989a0e2298b3cfd36064b386b88Dianne Hackborn switch (msg.what) { 43d459f4bbfcfe4989a0e2298b3cfd36064b386b88Dianne Hackborn case MSG_TICK: 44d459f4bbfcfe4989a0e2298b3cfd36064b386b88Dianne Hackborn // We are awesome! To prove we are doing awesome stuff, 45d459f4bbfcfe4989a0e2298b3cfd36064b386b88Dianne Hackborn // we must use some memory! It wouldn't be awesome if 46d459f4bbfcfe4989a0e2298b3cfd36064b386b88Dianne Hackborn // we didn't use memory! 47d459f4bbfcfe4989a0e2298b3cfd36064b386b88Dianne Hackborn for (int i=0; i<5; i++) { 48d459f4bbfcfe4989a0e2298b3cfd36064b386b88Dianne Hackborn try { 49d459f4bbfcfe4989a0e2298b3cfd36064b386b88Dianne Hackborn int[] alloc = new int[FakeApp.PAGE_SIZE/4]; 50d459f4bbfcfe4989a0e2298b3cfd36064b386b88Dianne Hackborn mAllocs.add(alloc); 51d459f4bbfcfe4989a0e2298b3cfd36064b386b88Dianne Hackborn final int VAL = mRandom.nextInt(); 52d459f4bbfcfe4989a0e2298b3cfd36064b386b88Dianne Hackborn for (int j=0; j<FakeApp.PAGE_SIZE/4; j++) { 53d459f4bbfcfe4989a0e2298b3cfd36064b386b88Dianne Hackborn alloc[j] = VAL; 54d459f4bbfcfe4989a0e2298b3cfd36064b386b88Dianne Hackborn } 55d459f4bbfcfe4989a0e2298b3cfd36064b386b88Dianne Hackborn } catch (OutOfMemoryError e) { 56d459f4bbfcfe4989a0e2298b3cfd36064b386b88Dianne Hackborn } 57d459f4bbfcfe4989a0e2298b3cfd36064b386b88Dianne Hackborn } 58d459f4bbfcfe4989a0e2298b3cfd36064b386b88Dianne Hackborn sendEmptyMessageDelayed(MSG_TICK, TICK_DELAY); 59d459f4bbfcfe4989a0e2298b3cfd36064b386b88Dianne Hackborn break; 60d459f4bbfcfe4989a0e2298b3cfd36064b386b88Dianne Hackborn default: 61d459f4bbfcfe4989a0e2298b3cfd36064b386b88Dianne Hackborn super.handleMessage(msg); 62d459f4bbfcfe4989a0e2298b3cfd36064b386b88Dianne Hackborn break; 63d459f4bbfcfe4989a0e2298b3cfd36064b386b88Dianne Hackborn } 64d459f4bbfcfe4989a0e2298b3cfd36064b386b88Dianne Hackborn } 65d459f4bbfcfe4989a0e2298b3cfd36064b386b88Dianne Hackborn }; 66d459f4bbfcfe4989a0e2298b3cfd36064b386b88Dianne Hackborn 67d459f4bbfcfe4989a0e2298b3cfd36064b386b88Dianne Hackborn @Override public void onCreate() { 68d459f4bbfcfe4989a0e2298b3cfd36064b386b88Dianne Hackborn super.onCreate(); 69d459f4bbfcfe4989a0e2298b3cfd36064b386b88Dianne Hackborn mHandler.sendEmptyMessageDelayed(MSG_TICK, TICK_DELAY); 70d459f4bbfcfe4989a0e2298b3cfd36064b386b88Dianne Hackborn 71d459f4bbfcfe4989a0e2298b3cfd36064b386b88Dianne Hackborn final WindowManager wm = (WindowManager)getSystemService(Context.WINDOW_SERVICE); 72d459f4bbfcfe4989a0e2298b3cfd36064b386b88Dianne Hackborn final Display display = wm.getDefaultDisplay(); 73d459f4bbfcfe4989a0e2298b3cfd36064b386b88Dianne Hackborn 74d459f4bbfcfe4989a0e2298b3cfd36064b386b88Dianne Hackborn // Make a fake window that is always around eating graphics resources. 75d459f4bbfcfe4989a0e2298b3cfd36064b386b88Dianne Hackborn FakeView view = new FakeView(this); 76d459f4bbfcfe4989a0e2298b3cfd36064b386b88Dianne Hackborn Dialog dialog = new Dialog(this, android.R.style.Theme_Holo_Dialog); 77d459f4bbfcfe4989a0e2298b3cfd36064b386b88Dianne Hackborn dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT); 78d459f4bbfcfe4989a0e2298b3cfd36064b386b88Dianne Hackborn dialog.getWindow().setFlags( 79d459f4bbfcfe4989a0e2298b3cfd36064b386b88Dianne Hackborn WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE 80d459f4bbfcfe4989a0e2298b3cfd36064b386b88Dianne Hackborn | WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE 81d459f4bbfcfe4989a0e2298b3cfd36064b386b88Dianne Hackborn | WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS 82d459f4bbfcfe4989a0e2298b3cfd36064b386b88Dianne Hackborn | WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED, 83d459f4bbfcfe4989a0e2298b3cfd36064b386b88Dianne Hackborn WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE 84d459f4bbfcfe4989a0e2298b3cfd36064b386b88Dianne Hackborn | WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE 85d459f4bbfcfe4989a0e2298b3cfd36064b386b88Dianne Hackborn | WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS 86d459f4bbfcfe4989a0e2298b3cfd36064b386b88Dianne Hackborn | WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED 87d459f4bbfcfe4989a0e2298b3cfd36064b386b88Dianne Hackborn | WindowManager.LayoutParams.FLAG_DIM_BEHIND); 88d459f4bbfcfe4989a0e2298b3cfd36064b386b88Dianne Hackborn dialog.getWindow().setDimAmount(0); 89d459f4bbfcfe4989a0e2298b3cfd36064b386b88Dianne Hackborn dialog.getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, 90d459f4bbfcfe4989a0e2298b3cfd36064b386b88Dianne Hackborn ViewGroup.LayoutParams.MATCH_PARENT); 91d459f4bbfcfe4989a0e2298b3cfd36064b386b88Dianne Hackborn WindowManager.LayoutParams lp = dialog.getWindow().getAttributes(); 92d459f4bbfcfe4989a0e2298b3cfd36064b386b88Dianne Hackborn int maxSize = display.getMaximumSizeDimension(); 93d459f4bbfcfe4989a0e2298b3cfd36064b386b88Dianne Hackborn maxSize *= 2; 94d459f4bbfcfe4989a0e2298b3cfd36064b386b88Dianne Hackborn lp.x = maxSize; 95d459f4bbfcfe4989a0e2298b3cfd36064b386b88Dianne Hackborn lp.y = maxSize; 96d459f4bbfcfe4989a0e2298b3cfd36064b386b88Dianne Hackborn lp.setTitle(getPackageName() + ":background"); 97d459f4bbfcfe4989a0e2298b3cfd36064b386b88Dianne Hackborn dialog.getWindow().setAttributes(lp); 98d459f4bbfcfe4989a0e2298b3cfd36064b386b88Dianne Hackborn dialog.getWindow().setContentView(view); 99d459f4bbfcfe4989a0e2298b3cfd36064b386b88Dianne Hackborn dialog.show(); 100d459f4bbfcfe4989a0e2298b3cfd36064b386b88Dianne Hackborn } 101d459f4bbfcfe4989a0e2298b3cfd36064b386b88Dianne Hackborn 102d459f4bbfcfe4989a0e2298b3cfd36064b386b88Dianne Hackborn @Override public void onDestroy() { 103d459f4bbfcfe4989a0e2298b3cfd36064b386b88Dianne Hackborn super.onDestroy(); 104d459f4bbfcfe4989a0e2298b3cfd36064b386b88Dianne Hackborn mHandler.removeMessages(MSG_TICK); 105d459f4bbfcfe4989a0e2298b3cfd36064b386b88Dianne Hackborn } 106d459f4bbfcfe4989a0e2298b3cfd36064b386b88Dianne Hackborn 107d459f4bbfcfe4989a0e2298b3cfd36064b386b88Dianne Hackborn @Override public IBinder onBind(Intent intent) { 108d459f4bbfcfe4989a0e2298b3cfd36064b386b88Dianne Hackborn return null; 109d459f4bbfcfe4989a0e2298b3cfd36064b386b88Dianne Hackborn } 110d459f4bbfcfe4989a0e2298b3cfd36064b386b88Dianne Hackborn} 111