12b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm/*
22b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm * Copyright (C) 2010 The Android Open Source Project
32b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm *
42b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm * Licensed under the Apache License, Version 2.0 (the "License");
52b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm * you may not use this file except in compliance with the License.
62b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm * You may obtain a copy of the License at
72b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm *
82b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm *      http://www.apache.org/licenses/LICENSE-2.0
92b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm *
102b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm * Unless required by applicable law or agreed to in writing, software
112b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm * distributed under the License is distributed on an "AS IS" BASIS,
122b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
132b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm * See the License for the specific language governing permissions and
142b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm * limitations under the License.
152b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm */
162b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm
172b1168acefb6a4104bb7f008df6ac51fcd1de7ecsmpackage com.replica.replicaisland;
182b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm
192b1168acefb6a4104bb7f008df6ac51fcd1de7ecsmimport java.lang.reflect.InvocationTargetException;
202b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm
212b1168acefb6a4104bb7f008df6ac51fcd1de7ecsmimport android.app.Activity;
222b1168acefb6a4104bb7f008df6ac51fcd1de7ecsmimport android.content.Context;
232b1168acefb6a4104bb7f008df6ac51fcd1de7ecsmimport android.content.SharedPreferences;
242b1168acefb6a4104bb7f008df6ac51fcd1de7ecsmimport android.graphics.Canvas;
252b1168acefb6a4104bb7f008df6ac51fcd1de7ecsmimport android.os.Bundle;
262b1168acefb6a4104bb7f008df6ac51fcd1de7ecsmimport android.os.SystemClock;
272b1168acefb6a4104bb7f008df6ac51fcd1de7ecsmimport android.util.AttributeSet;
282b1168acefb6a4104bb7f008df6ac51fcd1de7ecsmimport android.view.View;
292b1168acefb6a4104bb7f008df6ac51fcd1de7ecsmimport android.widget.Button;
302b1168acefb6a4104bb7f008df6ac51fcd1de7ecsmimport android.widget.TextView;
312b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm
322b1168acefb6a4104bb7f008df6ac51fcd1de7ecsmpublic class GameOverActivity extends Activity {
332b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm	private float mPearlPercent = 100.0f;
342b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm	private float mEnemiesDestroyedPercent = 100.0f;
352b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm	private float mPlayTime = 0.0f;
362b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm	private int mEnding = AnimationPlayerActivity.KABOCHA_ENDING;
372b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm
382b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm	private IncrementingTextView mPearlView;
392b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm	private IncrementingTextView mEnemiesDestroyedView;
402b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm	private IncrementingTextView mPlayTimeView;
412b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm	private TextView mEndingView;
422b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm
432b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm    public static class IncrementingTextView extends TextView {
442b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm    	private static final int INCREMENT_DELAY_MS = 2 * 1000;
452b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm    	private static final int MODE_NONE = 0;
462b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm    	private static final int MODE_PERCENT = 1;
472b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm    	private static final int MODE_TIME = 2;
482b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm
492b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm    	private float mTargetValue;
502b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm    	private float mIncrement = 1.0f;
512b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm    	private float mCurrentValue = 0.0f;
522b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm    	private long mLastTime = 0;
532b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm    	private int mMode = MODE_NONE;
542b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm
552b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm    	public IncrementingTextView(Context context) {
562b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm            super(context);
572b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm        }
582b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm
592b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm        public IncrementingTextView(Context context, AttributeSet attrs) {
602b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm            super(context, attrs);
612b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm        }
622b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm
632b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm        public IncrementingTextView(Context context, AttributeSet attrs, int defStyle) {
642b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm            super(context, attrs, defStyle);
652b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm        }
662b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm
672b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm        public void setTargetValue(float target) {
682b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm        	mTargetValue = target;
692b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm        	postInvalidate();
702b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm        }
712b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm
722b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm        public void setMode(int mode) {
732b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm        	mMode = mode;
742b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm        }
752b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm
762b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm        public void setIncrement(float increment) {
772b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm        	mIncrement = increment;
782b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm        }
792b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm
802b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm        @Override
812b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm        public void onDraw(Canvas canvas) {
822b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm            final long time = SystemClock.uptimeMillis();
832b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm            final long delta = time - mLastTime;
842b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm            if (delta > INCREMENT_DELAY_MS) {
852b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm            	if (mCurrentValue < mTargetValue) {
862b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm            		mCurrentValue += mIncrement;
872b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm            		mCurrentValue = Math.min(mCurrentValue, mTargetValue);
882b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm            		String value;
892b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm            		if (mMode == MODE_PERCENT) {
902b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm            			value = mCurrentValue + "%";
912b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm            		} else if (mMode == MODE_TIME) {
922b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm            			float seconds = mCurrentValue;
932b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm            			float minutes = seconds / 60.0f;
942b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm            			float hours = minutes / 60.0f;
952b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm
962b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm            			int totalHours = (int)Math.floor(hours);
972b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm            			float totalHourMinutes = totalHours * 60.0f;
982b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm            			int totalMinutes = (int)(minutes - totalHourMinutes);
992b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm            			float totalMinuteSeconds = totalMinutes * 60.0f;
1002b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm            			float totalHourSeconds = totalHourMinutes * 60.0f;
1012b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm            			int totalSeconds = (int)(seconds - (totalMinuteSeconds + totalHourSeconds));
1022b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm
1032b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm            			value = totalHours + ":" + totalMinutes + ":" + totalSeconds;
1042b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm            		} else {
1052b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm            			value = mCurrentValue + "";
1062b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm            		}
1072b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm            		setText(value);
1082b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm                    postInvalidateDelayed(INCREMENT_DELAY_MS);
1092b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm            	}
1102b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm            }
1112b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm            super.onDraw(canvas);
1122b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm        }
1132b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm    }
1142b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm
1152b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm    private View.OnClickListener sOKClickListener = new View.OnClickListener() {
1162b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm        public void onClick(View v) {
1172b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm        	finish();
1182b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm        	if (UIConstants.mOverridePendingTransition != null) {
1192b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm   		       try {
1202b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm   		    	  UIConstants.mOverridePendingTransition.invoke(GameOverActivity.this, R.anim.activity_fade_in, R.anim.activity_fade_out);
1212b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm   		       } catch (InvocationTargetException ite) {
1222b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm   		           DebugLog.d("Activity Transition", "Invocation Target Exception");
1232b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm   		       } catch (IllegalAccessException ie) {
1242b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm   		    	   DebugLog.d("Activity Transition", "Illegal Access Exception");
1252b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm   		       }
1262b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm         	}
1272b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm        }
1282b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm    };
1292b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm
1302b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm	@Override
1312b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm    public void onCreate(Bundle savedInstanceState) {
1322b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm        super.onCreate(savedInstanceState);
1332b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm        setContentView(R.layout.game_over);
1342b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm
1352b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm        mPearlView = (IncrementingTextView)findViewById(R.id.pearl_percent);
1362b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm        mEnemiesDestroyedView = (IncrementingTextView)findViewById(R.id.enemy_percent);
1372b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm        mPlayTimeView = (IncrementingTextView)findViewById(R.id.total_play_time);
1382b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm        mEndingView = (TextView)findViewById(R.id.ending);
1392b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm
1402b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm        SharedPreferences prefs = getSharedPreferences(PreferenceConstants.PREFERENCE_NAME, MODE_PRIVATE);
1412b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm        final float playTime = prefs.getFloat(PreferenceConstants.PREFERENCE_TOTAL_GAME_TIME, 0.0f);
1422b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm        final int ending = prefs.getInt(PreferenceConstants.PREFERENCE_LAST_ENDING, -1);
1432b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm        final int pearlsCollected = prefs.getInt(PreferenceConstants.PREFERENCE_PEARLS_COLLECTED, 0);
1442b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm        final int pearlsTotal = prefs.getInt(PreferenceConstants.PREFERENCE_PEARLS_TOTAL, 0);
1452b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm
1462b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm        final int enemies = prefs.getInt(PreferenceConstants.PREFERENCE_ROBOTS_DESTROYED, 0);
1472b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm
1482b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm        if (pearlsCollected > 0 && pearlsTotal > 0) {
1492b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm        	mPearlView.setTargetValue((int)((pearlsCollected / (float)pearlsTotal) * 100.0f));
1502b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm        } else {
1512b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm        	mPearlView.setText("--");
1522b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm        }
1532b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm        mPearlView.setMode(IncrementingTextView.MODE_PERCENT);
1542b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm        mEnemiesDestroyedView.setTargetValue(enemies);
1552b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm        mPlayTimeView.setTargetValue(playTime);
1562b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm        mPlayTimeView.setIncrement(90.0f);
1572b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm        mPlayTimeView.setMode(IncrementingTextView.MODE_TIME);
1582b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm
1592b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm        if (ending == AnimationPlayerActivity.KABOCHA_ENDING) {
1602b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm        	mEndingView.setText(R.string.game_results_kabocha_ending);
1612b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm        } else if (ending == AnimationPlayerActivity.ROKUDOU_ENDING) {
1622b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm        	mEndingView.setText(R.string.game_results_rokudou_ending);
1632b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm        } else {
1642b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm        	mEndingView.setText(R.string.game_results_wanda_ending);
1652b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm        }
1662b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm
1672b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm        Button okButton = (Button)findViewById(R.id.ok);
1682b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm        okButton.setOnClickListener(sOKClickListener);
1692b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm
1702b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm	}
1712b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm
1722b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm
1732b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm}
174