// Copyright 2013 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. package org.chromium.memconsumer; import android.app.Activity; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.ServiceConnection; import android.os.Bundle; import android.os.IBinder; import android.view.Gravity; import android.view.KeyEvent; import android.view.View; import android.widget.EditText; import android.widget.NumberPicker; import android.widget.TextView; public class MemConsumer extends Activity { public static final String NOTIFICATION_ACTION = MemConsumer.class.toString() + ".NOTIFICATION"; private ResidentService mResidentService; private int mMemory = 0; private NumberPicker mMemoryPicker; private ServiceConnection mServiceConnection = new ServiceConnection() { @Override public void onServiceConnected(ComponentName name, IBinder binder) { mResidentService = ((ResidentService.ServiceBinder) binder).getService(); mResidentService.useMemory(mMemory); } @Override public void onServiceDisconnected(ComponentName name) { mResidentService = null; } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mMemoryPicker = new NumberPicker(this); mMemoryPicker.setGravity(Gravity.CENTER); mMemoryPicker.setMaxValue(Integer.MAX_VALUE); mMemoryPicker.setMinValue(0); mMemoryPicker.setOnValueChangedListener(new NumberPicker.OnValueChangeListener() { @Override public void onValueChange(NumberPicker picker, int oldVal, int newVal) { updateMemoryConsumption(picker.getValue()); } }); for (int i = 0; i < mMemoryPicker.getChildCount(); i++) { View child = mMemoryPicker.getChildAt(i); if (child instanceof EditText) { EditText editText = (EditText) child; editText.setOnEditorActionListener(new TextView.OnEditorActionListener() { @Override public boolean onEditorAction (TextView v, int actionId, KeyEvent event) { if (v.getText().length() > 0) { updateMemoryConsumption(Integer.parseInt(v.getText().toString())); } return false; } }); } } setContentView(mMemoryPicker); onNewIntent(getIntent()); } @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); if (intent.getAction() == NOTIFICATION_ACTION) { updateMemoryConsumption(0); return; } if (!intent.hasExtra("memory")) return; updateMemoryConsumption(intent.getIntExtra("memory", 0)); } void updateMemoryConsumption(int memory) { if (memory == mMemory || memory < 0) return; mMemory = memory; mMemoryPicker.setValue(mMemory); if (mResidentService == null) { if (mMemory > 0) { Intent resident = new Intent(); resident.setClass(this, ResidentService.class); startService(resident); bindService(new Intent(this, ResidentService.class), mServiceConnection, Context.BIND_AUTO_CREATE); } } else { mResidentService.useMemory(mMemory); if (mMemory == 0) { unbindService(mServiceConnection); stopService(new Intent(this, ResidentService.class)); mResidentService = null; } } } }