public
class
SplitterActivity
extends
Activity
implements
SensorEventListener {
private
ImageView imageViewResult;
private
TextView textViewMsg;
private
int
[][] result =
new
int
[][] {
{ R.drawable.rock, R.string.rock_result_msg },
{ R.drawable.paper, R.string.paper_result_msg },
{ R.drawable.scissors, R.string.scissors_result_msg } };
private
SensorManager sensorManager;
private
Sensor sensor;
private
Vibrator vibrator;
private
SoundPool soundPool;
private
int
streamSoundId;
private
static
final
int
UPDATE_VIEW =
0x01
;
private
Handler handler =
new
Handler() {
@Override
public
void
handleMessage(Message msg) {
if
(msg.what == UPDATE_VIEW) {
if
(vibrator.hasVibrator()) {
vibrator.vibrate(
new
long
[] { 200L, 500L }, -
1
);
}
soundPool.play(streamSoundId,
0
.5F,
0
.5F,
5
,
0
,
1
.0F);
Random random =
new
Random();
int
index = random.nextInt(result.length);
imageViewResult.setImageResource(result[index][
0
]);
textViewMsg.setText(result[index][
1
]);
}
}
};
public
SplitterActivity() {
}
@Override
protected
void
onCreate(Bundle savedInstanceState) {
super
.onCreate(savedInstanceState);
this
.setContentView(R.layout.activity_splitter);
imageViewResult = (ImageView)
this
.findViewById(R.id.image_result);
textViewMsg = (TextView)
this
.findViewById(R.id.text_msg);
sensorManager = (SensorManager)
this
.getSystemService(SENSOR_SERVICE);
sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
vibrator = (Vibrator)
this
.getSystemService(VIBRATOR_SERVICE);
soundPool =
new
SoundPool(
10
, AudioManager.STREAM_SYSTEM,
5
);
streamSoundId = soundPool.load(
this
, R.raw.call_result,
0
);
}
@Override
protected
void
onResume() {
super
.onResume();
sensorManager.registerListener(
this
, sensor,
SensorManager.SENSOR_DELAY_NORMAL);
}
@Override
protected
void
onStop() {
sensorManager.unregisterListener(
this
);
if
(
null
!= vibrator) {
vibrator.cancel();
vibrator =
null
;
}
if
(
null
!= soundPool) {
soundPool.release();
soundPool =
null
;
}
super
.onStop();
}
@Override
public
void
onSensorChanged(SensorEvent event) {
if
(event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
float
[] values = event.values;
if
(isNormalAcceler(values)) {
new
Thread(
new
Runnable() {
@Override
public
void
run() {
Message msg =
new
Message();
msg.what = UPDATE_VIEW;
handler.sendMessage(msg);
}
}).start();
}
}
}
private
boolean
isNormalAcceler(
float
[] values) {
int
g =
15
;
return
(Math.abs(values[
0
]) > g && Math.abs(values[
1
]) > g)
|| Math.abs(values[
2
]) > g;
}
@Override
public
void
onAccuracyChanged(Sensor sensor,
int
accuracy) {
}
@Override
public
boolean
onKeyDown(
int
keyCode, KeyEvent event) {
if
(keyCode == KeyEvent.KEYCODE_BACK) {
BackListener backListener =
new
BackListener();
new
AlertDialog.Builder(
this
)
.setIcon(android.R.drawable.ic_dialog_info)
.setTitle(R.string.app_name)
.setMessage(R.string.exite_app_info)
.setPositiveButton(R.string.leave, backListener)
.setNegativeButton(R.string.without, backListener).show();
return
true
;
}
return
super
.onKeyDown(keyCode, event);
}
private
class
BackListener
implements
DialogInterface.OnClickListener {
@Override
public
void
onClick(DialogInterface dialog,
int
which) {
switch
(which) {
case
DialogInterface.BUTTON_POSITIVE:
SplitterActivity.
this
.finish();
break
;
case
DialogInterface.BUTTON_NEGATIVE:
break
;
default
:
break
;
}
}
}
}