package net.naonedbus.fragment.impl; import net.naonedbus.R; import net.naonedbus.activity.impl.MainActivity; import net.naonedbus.fragment.CustomFragment; import net.naonedbus.manager.impl.HoraireManager; import net.naonedbus.manager.impl.UpdaterManager; import net.naonedbus.manager.impl.UpdaterManager.UpdateType; import net.naonedbus.utils.VersionUtils; import android.content.Context; import android.os.AsyncTask; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.view.animation.AnimationUtils; import android.widget.TextView; public class UpdateFragment extends CustomFragment { public UpdateFragment() { super(R.layout.fragment_update); } private UpdateCard mUpdateCard; @Override public void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); new UpdateAndCleanTask().execute(); } @Override protected void bindView(View view, Bundle savedInstanceState) { mUpdateCard = new UpdateCard(getActivity(), view.findViewById(R.id.updateView), new OnClickListener() { @Override public void onClick(final View v) { final MainActivity mainActivity = (MainActivity) getActivity(); mainActivity.onUpgradeDone(); } }); final UpdaterManager updaterManager = new UpdaterManager(); final UpdateType updateType = updaterManager.needUpdate(getActivity()); if (UpdateType.FIRST_LAUNCH.equals(updateType)) { mUpdateCard.setTitles(R.string.setup, R.string.setup_complete); } else { mUpdateCard.setTitles(R.string.updating, R.string.updating_complete); } mUpdateCard.show(); } private static class UpdateCard { private final Context mContext; private final OnClickListener mOnNextClickListener; private final View mUpdateView; private int mTitleProgressId; private int mTitleCompleteId; public UpdateCard(final Context context, final View view, final OnClickListener onNextClickListener) { mContext = context; mUpdateView = view; mOnNextClickListener = onNextClickListener; } public void show() { mUpdateView.setVisibility(View.VISIBLE); ((TextView) mUpdateView.findViewById(android.R.id.title)).setText(mTitleProgressId); final String version = mContext.getString(R.string.version_number, VersionUtils.getVersion(mContext)); ((TextView) mUpdateView.findViewById(R.id.version)).setText(version); final String versionNotes = VersionUtils.getCurrentVersionNotes(mContext); ((TextView) mUpdateView.findViewById(R.id.versionNotes)).setText(versionNotes); mUpdateView.findViewById(R.id.nextButton).setOnClickListener(mOnNextClickListener); } public void setComplete() { ((TextView) mUpdateView.findViewById(android.R.id.title)).setText(mTitleCompleteId); mUpdateView.findViewById(android.R.id.progress).setVisibility(View.GONE); final View nextButton = mUpdateView.findViewById(R.id.nextButton); nextButton.setVisibility(View.VISIBLE); nextButton.startAnimation(AnimationUtils.loadAnimation(mContext, android.R.anim.fade_in)); } public void setTitles(final int titleProgressId, final int titleCompleteId) { mTitleProgressId = titleProgressId; mTitleCompleteId = titleCompleteId; } } /** * Task chargée de déclencher une éventuelle mise à jour et de vider le * cache horaire. * * @author romain.guefveneu * */ private class UpdateAndCleanTask extends AsyncTask<Void, Void, Void> { @Override protected Void doInBackground(final Void... params) { Thread.currentThread().setPriority(Thread.MAX_PRIORITY); // Déclencher une éventuelle mise à jour final UpdaterManager updaterManager = new UpdaterManager(); updaterManager.triggerUpdate(getActivity()); // Vider les anciens horaires final HoraireManager horaireManager = HoraireManager.getInstance(); horaireManager.clearOldSchedules(getActivity().getContentResolver()); return null; } @Override protected void onPostExecute(final Void result) { mUpdateCard.setComplete(); } } }