package com.androsz.electricsleepbeta.app.wizard;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.ApplicationInfo;
import android.os.Bundle;
import android.os.Parcelable;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import com.actionbarsherlock.app.ActionBar;
import com.actionbarsherlock.view.Menu;
import com.actionbarsherlock.view.MenuItem;
import com.androsz.electricsleepbeta.R;
import com.androsz.electricsleepbeta.app.HomeActivity;
import com.androsz.electricsleepbeta.app.SettingsActivity;
import com.viewpagerindicator.TitleProvider;
public class WelcomeTutorialWizardActivity extends WizardActivity {
public static boolean enforceCalibrationBeforeStartingSleep(
final Activity context) {
final SharedPreferences userPrefs = context.getSharedPreferences(
SettingsActivity.PREFERENCES_ENVIRONMENT, Context.MODE_PRIVATE);
final int prefsVersion = userPrefs.getInt(
SettingsActivity.PREFERENCES_ENVIRONMENT, 0);
String message = "";
if (prefsVersion == 0) {
message = context.getString(R.string.message_not_calibrated);
} else if (prefsVersion != context.getResources().getInteger(
R.integer.prefs_version)) {
message = context.getString(R.string.message_prefs_not_compatible);
}
if (message.length() > 0) {
message += context
.getString(R.string.message_recommend_calibration);
final AlertDialog.Builder dialog = new AlertDialog.Builder(context)
.setMessage(message)
.setCancelable(false)
.setPositiveButton(context.getString(R.string.calibrate),
new DialogInterface.OnClickListener() {
@Override
public void onClick(
final DialogInterface dialog,
final int id) {
context.startActivity(new Intent(context,
CalibrationWizardActivity.class));
context.finish();
}
})
.setNeutralButton(context.getString(R.string.manual),
new DialogInterface.OnClickListener() {
@Override
public void onClick(
final DialogInterface dialog,
final int id) {
context.startActivity(new Intent(context,
SettingsActivity.class));
context.finish();
}
})
.setNegativeButton(context.getString(R.string.cancel),
new DialogInterface.OnClickListener() {
@Override
public void onClick(
final DialogInterface dialog,
final int id) {
dialog.cancel();
}
});
dialog.show();
return false;
} else {
return true;
}
}
private boolean required = false;
@Override
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
required = getIntent().hasExtra("required");
if (required) {
final ActionBar bar = getSupportActionBar();
bar.setDisplayHomeAsUpEnabled(false);
}
}
// Prevents options from showing up if required
@Override
public boolean onCreateOptionsMenu(final Menu menu) {
if (required) {
return false;
} else {
return super.onCreateOptionsMenu(menu);
}
}
// Prevents Home button from triggering if required
@Override
public boolean onOptionsItemSelected(final MenuItem item) {
if (required && item.getItemId() == android.R.id.home) {
return false;
} else {
return super.onOptionsItemSelected(item);
}
}
@Override
protected void onFinishWizardActivity() {
final int applicationFlags = getApplicationInfo().flags;
// is android:debuggable is set to true?
if ((applicationFlags & ApplicationInfo.FLAG_DEBUGGABLE) != 0
|| !required) {
if (enforceCalibrationBeforeStartingSleep(this)) {
startActivity(new Intent(this, HomeActivity.class));
finish();
}
} else {
startActivity(new Intent(this, CalibrationWizardActivity.class));
finish();
}
}
@Override
public void onRightButtonClick(View v) {
findViewById(R.id.leftButton).setVisibility(View.VISIBLE);
super.onRightButtonClick(v);
}
@Override
public void onLeftButtonClick(final View v) {
if (getCurrentWizardIndex() == 0) {
onFinishWizardActivity();
} else {
super.onLeftButtonClick(v);
}
}
@Override
protected void onPrepareLastSlide(Button rightButton) {
if (required) {
rightButton.setText(R.string.calibrate);
}
}
@Override
protected void onRestoreInstanceState(final Bundle savedState) {
super.onRestoreInstanceState(savedState);
required = savedState.getBoolean("required");
}
@Override
protected void onSaveInstanceState(final Bundle outState) {
super.onSaveInstanceState(outState);
outState.putBoolean("required", required);
}
@Override
protected void onPerformWizardAction(int index) {
}
@Override
protected void setupNavigationButtons(int index) {
super.setupNavigationButtons(index);
final Button leftButton = (Button) findViewById(R.id.leftButton);
if (index == 0) {
leftButton.setText(R.string.skip_tutorial);
}
}
private class WizardPagerAdapter extends PagerAdapter implements
TitleProvider {
private String[] titles = new String[] { "Welcome", "How It Works" };
@Override
public String getTitle(int position) {
return titles[position];
}
@Override
public int getCount() {
return titles.length;
}
@Override
public void startUpdate(View container) {
// TODO Auto-generated method stub
}
@Override
public Object instantiateItem(View container, int position) {
View instantiatedItem = null;
LayoutInflater inflater = getLayoutInflater();
switch (position) {
case 0:
instantiatedItem = inflater.inflate(
R.layout.wizard_welcome_welcome, null);
break;
case 1:
instantiatedItem = inflater.inflate(
R.layout.wizard_welcome_how, null);
break;
}
((ViewGroup) container).addView(instantiatedItem);
return instantiatedItem;
}
@Override
public void destroyItem(View container, int position, Object object) {
((ViewPager) container).removeView((View) object);
}
@Override
public void finishUpdate(View container) {
// TODO Auto-generated method stub
}
@Override
public boolean isViewFromObject(View view, Object object) {
return ((View) object).equals(view);
}
@Override
public Parcelable saveState() {
// TODO Auto-generated method stub
return null;
}
@Override
public void restoreState(Parcelable state, ClassLoader loader) {
// TODO Auto-generated method stub
}
}
@Override
protected PagerAdapter getPagerAdapter() {
return new WizardPagerAdapter();
}
}