package org.solovyev.android.calculator.release;
import android.content.Context;
import android.util.SparseArray;
import org.solovyev.android.calculator.App;
import org.solovyev.android.calculator.R;
import org.solovyev.common.text.Strings;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.Nonnull;
public final class ReleaseNotes {
private static final SparseArray<ReleaseNote> map = new SparseArray<>();
static {
map.put(143, ReleaseNote.make("2.1.4", R.string.cpp_release_notes_143));
map.put(148, ReleaseNote.make("2.2.1", R.string.cpp_release_notes_148));
map.put(150, ReleaseNote.make("2.2.2", R.string.cpp_release_notes_150));
map.put(152, ReleaseNote.make("2.2.3", R.string.cpp_release_notes_152));
}
@Nonnull
public static String getReleaseNotes(@Nonnull Context context) {
return getReleaseNotesString(context, 0);
}
@Nonnull
public static String getReleaseNoteVersion(int version) {
final ReleaseNote releaseNote = map.get(version);
return releaseNote == null ? String.valueOf(version) : releaseNote.versionName;
}
@Nonnull
public static String getReleaseNoteDescription(@Nonnull Context context, int version) {
final ReleaseNote releaseNote = map.get(version);
return releaseNote == null ? "" : getDescription(context, releaseNote.description);
}
@Nonnull
public static String getReleaseNotesString(@Nonnull Context context, int minVersion) {
final StringBuilder result = new StringBuilder();
final String releaseNotesForTitle = context.getString(R.string.c_release_notes_for_title);
final int currentVersionCode = App.getAppVersionCode(context);
boolean first = true;
for (int versionCode = currentVersionCode; versionCode >= minVersion; versionCode--) {
final ReleaseNote releaseNote = map.get(versionCode);
if (releaseNote == null) {
continue;
}
if (!first) {
result.append("<br/><br/>");
} else {
first = false;
}
final String descriptionHtml = getDescription(context, releaseNote.description);
result.append("<b>").append(releaseNotesForTitle).append(releaseNote.versionName).append("</b><br/><br/>");
result.append(descriptionHtml);
}
return result.toString();
}
@Nonnull
private static String getDescription(@Nonnull Context context, int description) {
return context.getResources().getString(description).replace("\n", "<br/>");
}
@Nonnull
public static List<Integer> getReleaseNotesVersions(@Nonnull Context context, int minVersion) {
final List<Integer> releaseNotes = new ArrayList<>();
final int currentVersionCode = App.getAppVersionCode(context);
for (int versionCode = currentVersionCode; versionCode >= minVersion; versionCode--) {
if (versionCode == ChooseThemeReleaseNoteStep.VERSION_CODE) {
releaseNotes.add(ChooseThemeReleaseNoteStep.VERSION_CODE);
}
final ReleaseNote releaseNote = map.get(versionCode);
if (releaseNote == null) {
continue;
}
final String description = context.getString(releaseNote.description);
if (!Strings.isEmpty(description)) {
releaseNotes.add(versionCode);
}
}
return releaseNotes;
}
public static boolean hasReleaseNotes(@Nonnull Context context, int minVersion) {
final int currentVersionCode = App.getAppVersionCode(context);
for (int versionCode = currentVersionCode; versionCode >= minVersion; versionCode--) {
if (versionCode == ChooseThemeReleaseNoteStep.VERSION_CODE) {
return true;
}
final ReleaseNote releaseNote = map.get(versionCode);
if (releaseNote == null) {
continue;
}
if (!Strings.isEmpty(context.getString(releaseNote.description))) {
return true;
}
}
return false;
}
}