| /* |
| * Copyright (C) 2010 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package com.replica.replicaisland; |
| |
| |
| import java.lang.reflect.InvocationTargetException; |
| import java.lang.reflect.Method; |
| |
| import android.app.Activity; |
| import android.app.AlertDialog; |
| import android.app.Dialog; |
| import android.content.DialogInterface; |
| import android.content.Intent; |
| import android.content.SharedPreferences; |
| import android.content.pm.PackageManager; |
| import android.media.AudioManager; |
| import android.os.Build; |
| import android.os.Bundle; |
| import android.text.Html; |
| import android.view.View; |
| import android.view.animation.Animation; |
| import android.view.animation.AnimationUtils; |
| import android.widget.ImageView; |
| |
| public class MainMenuActivity extends Activity { |
| private boolean mPaused; |
| private View mStartButton; |
| private View mOptionsButton; |
| private View mExtrasButton; |
| private View mBackground; |
| private View mTicker; |
| private Animation mButtonFlickerAnimation; |
| private Animation mFadeOutAnimation; |
| private Animation mAlternateFadeOutAnimation; |
| private Animation mFadeInAnimation; |
| private boolean mJustCreated; |
| private String mSelectedControlsString; |
| |
| |
| private final static int WHATS_NEW_DIALOG = 0; |
| private final static int TILT_TO_SCREEN_CONTROLS_DIALOG = 1; |
| private final static int CONTROL_SETUP_DIALOG = 2; |
| |
| // Create an anonymous implementation of OnClickListener |
| private View.OnClickListener sContinueButtonListener = new View.OnClickListener() { |
| public void onClick(View v) { |
| if (!mPaused) { |
| Intent i = new Intent(getBaseContext(), AndouKun.class); |
| v.startAnimation(mButtonFlickerAnimation); |
| mFadeOutAnimation.setAnimationListener(new StartActivityAfterAnimation(i)); |
| mBackground.startAnimation(mFadeOutAnimation); |
| mOptionsButton.startAnimation(mAlternateFadeOutAnimation); |
| mExtrasButton.startAnimation(mAlternateFadeOutAnimation); |
| mTicker.startAnimation(mAlternateFadeOutAnimation); |
| mPaused = true; |
| } |
| } |
| }; |
| |
| private View.OnClickListener sOptionButtonListener = new View.OnClickListener() { |
| public void onClick(View v) { |
| if (!mPaused) { |
| Intent i = new Intent(getBaseContext(), SetPreferencesActivity.class); |
| |
| v.startAnimation(mButtonFlickerAnimation); |
| mFadeOutAnimation.setAnimationListener(new StartActivityAfterAnimation(i)); |
| mBackground.startAnimation(mFadeOutAnimation); |
| mStartButton.startAnimation(mAlternateFadeOutAnimation); |
| mExtrasButton.startAnimation(mAlternateFadeOutAnimation); |
| mTicker.startAnimation(mAlternateFadeOutAnimation); |
| mPaused = true; |
| } |
| } |
| }; |
| |
| private View.OnClickListener sExtrasButtonListener = new View.OnClickListener() { |
| public void onClick(View v) { |
| if (!mPaused) { |
| Intent i = new Intent(getBaseContext(), ExtrasMenuActivity.class); |
| |
| v.startAnimation(mButtonFlickerAnimation); |
| mButtonFlickerAnimation.setAnimationListener(new StartActivityAfterAnimation(i)); |
| mPaused = true; |
| |
| } |
| } |
| }; |
| |
| private View.OnClickListener sStartButtonListener = new View.OnClickListener() { |
| public void onClick(View v) { |
| if (!mPaused) { |
| Intent i = new Intent(getBaseContext(), DifficultyMenuActivity.class); |
| i.putExtra("newGame", true); |
| v.startAnimation(mButtonFlickerAnimation); |
| mButtonFlickerAnimation.setAnimationListener(new StartActivityAfterAnimation(i)); |
| |
| mPaused = true; |
| |
| } |
| } |
| }; |
| |
| @Override |
| public void onCreate(Bundle savedInstanceState) { |
| super.onCreate(savedInstanceState); |
| setContentView(R.layout.mainmenu); |
| mPaused = true; |
| |
| mStartButton = findViewById(R.id.startButton); |
| mOptionsButton = findViewById(R.id.optionButton); |
| mBackground = findViewById(R.id.mainMenuBackground); |
| |
| if (mOptionsButton != null) { |
| mOptionsButton.setOnClickListener(sOptionButtonListener); |
| } |
| |
| mExtrasButton = findViewById(R.id.extrasButton); |
| mExtrasButton.setOnClickListener(sExtrasButtonListener); |
| |
| mButtonFlickerAnimation = AnimationUtils.loadAnimation(this, R.anim.button_flicker); |
| mFadeOutAnimation = AnimationUtils.loadAnimation(this, R.anim.fade_out); |
| mAlternateFadeOutAnimation = AnimationUtils.loadAnimation(this, R.anim.fade_out); |
| mFadeInAnimation = AnimationUtils.loadAnimation(this, R.anim.fade_in); |
| |
| SharedPreferences prefs = getSharedPreferences(PreferenceConstants.PREFERENCE_NAME, MODE_PRIVATE); |
| final int row = prefs.getInt(PreferenceConstants.PREFERENCE_LEVEL_ROW, 0); |
| final int index = prefs.getInt(PreferenceConstants.PREFERENCE_LEVEL_INDEX, 0); |
| int levelTreeResource = R.xml.level_tree; |
| if (row != 0 || index != 0) { |
| final int linear = prefs.getInt(PreferenceConstants.PREFERENCE_LINEAR_MODE, 0); |
| if (linear != 0) { |
| levelTreeResource = R.xml.linear_level_tree; |
| } |
| } |
| |
| if (!LevelTree.isLoaded(levelTreeResource)) { |
| LevelTree.loadLevelTree(levelTreeResource, this); |
| LevelTree.loadAllDialog(this); |
| } |
| |
| mTicker = findViewById(R.id.ticker); |
| if (mTicker != null) { |
| mTicker.setFocusable(true); |
| mTicker.requestFocus(); |
| mTicker.setSelected(true); |
| } |
| |
| mJustCreated = true; |
| |
| // Keep the volume control type consistent across all activities. |
| setVolumeControlStream(AudioManager.STREAM_MUSIC); |
| |
| //MediaPlayer mp = MediaPlayer.create(this, R.raw.bwv_115); |
| //mp.start(); |
| |
| |
| } |
| |
| |
| @Override |
| protected void onPause() { |
| super.onPause(); |
| mPaused = true; |
| } |
| |
| @Override |
| protected void onResume() { |
| super.onResume(); |
| mPaused = false; |
| |
| mButtonFlickerAnimation.setAnimationListener(null); |
| |
| if (mStartButton != null) { |
| |
| // Change "start" to "continue" if there's a saved game. |
| SharedPreferences prefs = getSharedPreferences(PreferenceConstants.PREFERENCE_NAME, MODE_PRIVATE); |
| final int row = prefs.getInt(PreferenceConstants.PREFERENCE_LEVEL_ROW, 0); |
| final int index = prefs.getInt(PreferenceConstants.PREFERENCE_LEVEL_INDEX, 0); |
| if (row != 0 || index != 0) { |
| ((ImageView)mStartButton).setImageDrawable(getResources().getDrawable(R.drawable.ui_button_continue)); |
| mStartButton.setOnClickListener(sContinueButtonListener); |
| } else { |
| ((ImageView)mStartButton).setImageDrawable(getResources().getDrawable(R.drawable.ui_button_start)); |
| mStartButton.setOnClickListener(sStartButtonListener); |
| } |
| |
| TouchFilter touch; |
| final int sdkVersion = Integer.parseInt(Build.VERSION.SDK); |
| if (sdkVersion < Build.VERSION_CODES.ECLAIR) { |
| touch = new SingleTouchFilter(); |
| } else { |
| touch = new MultiTouchFilter(); |
| } |
| |
| final int lastVersion = prefs.getInt(PreferenceConstants.PREFERENCE_LAST_VERSION, 0); |
| if (lastVersion == 0) { |
| // This is the first time the game has been run. |
| // Pre-configure the control options to match the device. |
| // The resource system can tell us what this device has. |
| // TODO: is there a better way to do this? Seems like a kind of neat |
| // way to do custom device profiles. |
| final String navType = getString(R.string.nav_type); |
| mSelectedControlsString = getString(R.string.control_setup_dialog_trackball); |
| if (navType != null) { |
| if (navType.equalsIgnoreCase("DPad")) { |
| // Turn off the click-to-attack pref on devices that have a dpad. |
| SharedPreferences.Editor editor = prefs.edit(); |
| editor.putBoolean(PreferenceConstants.PREFERENCE_CLICK_ATTACK, false); |
| editor.commit(); |
| mSelectedControlsString = getString(R.string.control_setup_dialog_dpad); |
| } else if (navType.equalsIgnoreCase("None")) { |
| SharedPreferences.Editor editor = prefs.edit(); |
| |
| // This test relies on the PackageManager if api version >= 5. |
| if (touch.supportsMultitouch(this)) { |
| // Default to screen controls. |
| editor.putBoolean(PreferenceConstants.PREFERENCE_SCREEN_CONTROLS, true); |
| mSelectedControlsString = getString(R.string.control_setup_dialog_screen); |
| } else { |
| // Turn on tilt controls if there's nothing else. |
| editor.putBoolean(PreferenceConstants.PREFERENCE_TILT_CONTROLS, true); |
| mSelectedControlsString = getString(R.string.control_setup_dialog_tilt); |
| } |
| editor.commit(); |
| |
| } |
| } |
| |
| } |
| |
| if (Math.abs(lastVersion) < Math.abs(AndouKun.VERSION)) { |
| // This is a new install or an upgrade. |
| |
| // Check the safe mode option. |
| // Useful reference: http://en.wikipedia.org/wiki/List_of_Android_devices |
| if (Build.PRODUCT.contains("morrison") || // Motorola Cliq/Dext |
| Build.MODEL.contains("Pulse") || // Huawei Pulse |
| Build.MODEL.contains("U8220") || // Huawei Pulse |
| Build.MODEL.contains("U8230") || // Huawei U8230 |
| Build.MODEL.contains("MB300") || // Motorola Backflip |
| Build.MODEL.contains("MB501") || // Motorola Quench / Cliq XT |
| Build.MODEL.contains("Behold+II")) { // Samsung Behold II |
| // These are all models that users have complained about. They likely use |
| // the same buggy QTC graphics driver. Turn on Safe Mode by default |
| // for these devices. |
| SharedPreferences.Editor editor = prefs.edit(); |
| editor.putBoolean(PreferenceConstants.PREFERENCE_SAFE_MODE, true); |
| editor.commit(); |
| } |
| |
| SharedPreferences.Editor editor = prefs.edit(); |
| |
| if (lastVersion > 0 && lastVersion < 14) { |
| // if the user has beat the game once, go ahead and unlock stuff for them. |
| if (prefs.getInt(PreferenceConstants.PREFERENCE_LAST_ENDING, -1) != -1) { |
| editor.putBoolean(PreferenceConstants.PREFERENCE_EXTRAS_UNLOCKED, true); |
| } |
| } |
| |
| // show what's new message |
| editor.putInt(PreferenceConstants.PREFERENCE_LAST_VERSION, AndouKun.VERSION); |
| editor.commit(); |
| |
| showDialog(WHATS_NEW_DIALOG); |
| |
| // screen controls were added in version 14 |
| if (lastVersion > 0 && lastVersion < 14 && |
| prefs.getBoolean(PreferenceConstants.PREFERENCE_TILT_CONTROLS, false)) { |
| if (touch.supportsMultitouch(this)) { |
| // show message about switching from tilt to screen controls |
| showDialog(TILT_TO_SCREEN_CONTROLS_DIALOG); |
| } |
| } else if (lastVersion == 0) { |
| // show message about auto-selected control schemes. |
| showDialog(CONTROL_SETUP_DIALOG); |
| } |
| |
| } |
| |
| } |
| |
| |
| if (mBackground != null) { |
| mBackground.clearAnimation(); |
| } |
| |
| if (mTicker != null) { |
| mTicker.clearAnimation(); |
| mTicker.setAnimation(mFadeInAnimation); |
| } |
| |
| if (mJustCreated) { |
| if (mStartButton != null) { |
| mStartButton.startAnimation(AnimationUtils.loadAnimation(this, R.anim.button_slide)); |
| } |
| if (mExtrasButton != null) { |
| Animation anim = AnimationUtils.loadAnimation(this, R.anim.button_slide); |
| anim.setStartOffset(500L); |
| mExtrasButton.startAnimation(anim); |
| } |
| |
| if (mOptionsButton != null) { |
| Animation anim = AnimationUtils.loadAnimation(this, R.anim.button_slide); |
| anim.setStartOffset(1000L); |
| mOptionsButton.startAnimation(anim); |
| } |
| mJustCreated = false; |
| |
| } else { |
| mStartButton.clearAnimation(); |
| mOptionsButton.clearAnimation(); |
| mExtrasButton.clearAnimation(); |
| } |
| |
| |
| } |
| |
| @Override |
| protected Dialog onCreateDialog(int id) { |
| Dialog dialog; |
| if (id == WHATS_NEW_DIALOG) { |
| dialog = new AlertDialog.Builder(this) |
| .setTitle(R.string.whats_new_dialog_title) |
| .setPositiveButton(R.string.whats_new_dialog_ok, null) |
| .setMessage(R.string.whats_new_dialog_message) |
| .create(); |
| } else if (id == TILT_TO_SCREEN_CONTROLS_DIALOG) { |
| dialog = new AlertDialog.Builder(this) |
| .setTitle(R.string.onscreen_tilt_dialog_title) |
| .setPositiveButton(R.string.onscreen_tilt_dialog_ok, new DialogInterface.OnClickListener() { |
| public void onClick(DialogInterface dialog, int whichButton) { |
| SharedPreferences prefs = getSharedPreferences(PreferenceConstants.PREFERENCE_NAME, MODE_PRIVATE); |
| SharedPreferences.Editor editor = prefs.edit(); |
| editor.putBoolean(PreferenceConstants.PREFERENCE_SCREEN_CONTROLS, true); |
| editor.commit(); |
| } |
| }) |
| .setNegativeButton(R.string.onscreen_tilt_dialog_cancel, null) |
| .setMessage(R.string.onscreen_tilt_dialog_message) |
| .create(); |
| } else if (id == CONTROL_SETUP_DIALOG) { |
| String messageFormat = getResources().getString(R.string.control_setup_dialog_message); |
| String message = String.format(messageFormat, mSelectedControlsString); |
| CharSequence sytledMessage = Html.fromHtml(message); // lame. |
| dialog = new AlertDialog.Builder(this) |
| .setTitle(R.string.control_setup_dialog_title) |
| .setPositiveButton(R.string.control_setup_dialog_ok, null) |
| .setNegativeButton(R.string.control_setup_dialog_change, new DialogInterface.OnClickListener() { |
| public void onClick(DialogInterface dialog, int whichButton) { |
| Intent i = new Intent(getBaseContext(), SetPreferencesActivity.class); |
| i.putExtra("controlConfig", true); |
| startActivity(i); |
| } |
| }) |
| .setMessage(sytledMessage) |
| .create(); |
| } else { |
| dialog = super.onCreateDialog(id); |
| } |
| return dialog; |
| } |
| |
| protected class StartActivityAfterAnimation implements Animation.AnimationListener { |
| private Intent mIntent; |
| |
| StartActivityAfterAnimation(Intent intent) { |
| mIntent = intent; |
| } |
| |
| |
| public void onAnimationEnd(Animation animation) { |
| |
| startActivity(mIntent); |
| |
| if (UIConstants.mOverridePendingTransition != null) { |
| try { |
| UIConstants.mOverridePendingTransition.invoke(MainMenuActivity.this, R.anim.activity_fade_in, R.anim.activity_fade_out); |
| } catch (InvocationTargetException ite) { |
| DebugLog.d("Activity Transition", "Invocation Target Exception"); |
| } catch (IllegalAccessException ie) { |
| DebugLog.d("Activity Transition", "Illegal Access Exception"); |
| } |
| } |
| } |
| |
| public void onAnimationRepeat(Animation animation) { |
| // TODO Auto-generated method stub |
| |
| } |
| |
| public void onAnimationStart(Animation animation) { |
| // TODO Auto-generated method stub |
| |
| } |
| |
| } |
| } |