diff --git a/README.md b/README.md index f75455f..cc9f881 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,6 @@ # ckChangeLog - An Android Library to display a Change Log -![Screenshot](screenshot_1.png) -![Screenshot](screenshot_2.png) +![Screenshot](http://i.imgur.com/5U6xzvk.png) This library provides an easy way to display a change log in your app. diff --git a/ckChangeLog/.gitignore b/ckChangeLog/.gitignore new file mode 100644 index 0000000..a5e492a --- /dev/null +++ b/ckChangeLog/.gitignore @@ -0,0 +1,50 @@ +#Android generated +bin +gen +build + +#built application files +*.apk +*.ap_ + +# files for the dex VM +*.dex + +# Java class files +*.class + +#Eclipse +.project +.classpath +.settings + +# Intellij IDEA (see https://intellij-support.jetbrains.com/entries/23393067) +.idea +*.iml + +#Maven +target +release.properties +pom.xml.* + +#Command line +local.properties +build.xml +proguard-project.txt + +# Windows thumbnail db +Thumbs.db + +# OSX files +.DS_Store + +# Crashlytics +com_crashlytics_export_strings.xml +crashlytics-build.properties +crashlytics.properties + +# Android Studio +.gradle +gradle +gradlew +gradlew.bat \ No newline at end of file diff --git a/ckChangeLog/build.gradle b/ckChangeLog/build.gradle index d15f833..4e93ba0 100644 --- a/ckChangeLog/build.gradle +++ b/ckChangeLog/build.gradle @@ -4,10 +4,15 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:1.0.0' + classpath 'com.android.tools.build:gradle:1.2.2' } } +repositories { + jcenter() + mavenCentral() +} + apply plugin: 'com.android.library' android { @@ -15,12 +20,16 @@ android { buildToolsVersion "21.1.2" defaultConfig { - versionName "1.2.2" - - minSdkVersion 4 + versionName "2.0.0" + minSdkVersion 9 } } +dependencies { + compile 'com.afollestad:material-dialogs:0.7.2.8' + compile 'se.emilsjolander:stickylistheaders:2.5.2' +} + project.ext { pom = [ group: "de.cketti.library.changelog", @@ -42,5 +51,5 @@ project.ext { ] } -apply from: '../android-mvn-push.gradle' +//apply from: '../android-mvn-push.gradle' diff --git a/ckChangeLog/src/main/java/de/cketti/library/changelog/ChangeLog.java b/ckChangeLog/src/main/java/de/cketti/library/changelog/ChangeLog.java index b87b3f0..6a59c08 100644 --- a/ckChangeLog/src/main/java/de/cketti/library/changelog/ChangeLog.java +++ b/ckChangeLog/src/main/java/de/cketti/library/changelog/ChangeLog.java @@ -33,18 +33,7 @@ */ package de.cketti.library.changelog; -import java.io.IOException; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Comparator; -import java.util.List; - -import org.xmlpull.v1.XmlPullParser; -import org.xmlpull.v1.XmlPullParserException; - -import android.app.AlertDialog; import android.content.Context; -import android.content.DialogInterface; import android.content.SharedPreferences; import android.content.pm.PackageInfo; import android.content.pm.PackageManager.NameNotFoundException; @@ -52,7 +41,19 @@ import android.preference.PreferenceManager; import android.util.Log; import android.util.SparseArray; -import android.webkit.WebView; + +import com.afollestad.materialdialogs.MaterialDialog; + +import org.xmlpull.v1.XmlPullParser; +import org.xmlpull.v1.XmlPullParserException; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.List; + +import se.emilsjolander.stickylistheaders.StickyListHeadersListView; /** @@ -60,6 +61,7 @@ */ @SuppressWarnings("UnusedDeclaration") public class ChangeLog { + /** * Tag that is used when sending error/debug messages to the log. */ @@ -75,25 +77,11 @@ public class ChangeLog { */ protected static final int NO_VERSION = -1; - /** - * Default CSS styles used to format the change log. - */ - public static final String DEFAULT_CSS = - "h1 { margin-left: 0px; font-size: 1.2em; }" + "\n" + - "li { margin-left: 0px; }" + "\n" + - "ul { padding-left: 2em; }"; - - /** * Context that is used to access the resources and to create the ChangeLog dialogs. */ protected final Context mContext; - /** - * Contains the CSS rules used to format the change log. - */ - protected final String mCss; - /** * Last version code read from {@code SharedPreferences} or {@link #NO_VERSION}. */ @@ -114,70 +102,53 @@ public class ChangeLog { * Contains constants for the root element of {@code changelog.xml}. */ protected interface ChangeLogTag { - static final String NAME = "changelog"; + + String NAME = "changelog"; } /** * Contains constants for the release element of {@code changelog.xml}. */ protected interface ReleaseTag { - static final String NAME = "release"; - static final String ATTRIBUTE_VERSION = "version"; - static final String ATTRIBUTE_VERSION_CODE = "versioncode"; + + String NAME = "release"; + String ATTRIBUTE_VERSION = "version"; + String ATTRIBUTE_VERSION_CODE = "versioncode"; } /** * Contains constants for the change element of {@code changelog.xml}. */ protected interface ChangeTag { - static final String NAME = "change"; - } - /** - * Create a {@code ChangeLog} instance using the default {@link SharedPreferences} file. - * - * @param context - * Context that is used to access the resources and to create the ChangeLog dialogs. - */ - public ChangeLog(Context context) { - this(context, PreferenceManager.getDefaultSharedPreferences(context), DEFAULT_CSS); + String NAME = "change"; } /** * Create a {@code ChangeLog} instance using the default {@link SharedPreferences} file. * - * @param context - * Context that is used to access the resources and to create the ChangeLog dialogs. - * @param css - * CSS styles that will be used to format the change log. + * @param context Context that is used to access the resources and to create the ChangeLog dialogs. */ - public ChangeLog(Context context, String css) { - this(context, PreferenceManager.getDefaultSharedPreferences(context), css); + public ChangeLog(Context context) { + this(context, PreferenceManager.getDefaultSharedPreferences(context)); } /** * Create a {@code ChangeLog} instance using the supplied {@code SharedPreferences} instance. * - * @param context - * Context that is used to access the resources and to create the ChangeLog dialogs. - * @param preferences - * {@code SharedPreferences} instance that is used to persist the last version code. - * @param css - * CSS styles used to format the change log (excluding {@code }). - * + * @param context Context that is used to access the resources and to create the ChangeLog dialogs. + * @param preferences {@code SharedPreferences} instance that is used to persist the last version code. */ - public ChangeLog(Context context, SharedPreferences preferences, String css) { + public ChangeLog(Context context, SharedPreferences preferences) { mContext = context; - mCss = css; // Get last version code mLastVersionCode = preferences.getInt(VERSION_KEY, NO_VERSION); // Get current version code and version name try { - PackageInfo packageInfo = context.getPackageManager().getPackageInfo( - context.getPackageName(), 0); + PackageInfo packageInfo = context.getPackageManager() + .getPackageInfo(context.getPackageName(), 0); mCurrentVersionCode = packageInfo.versionCode; mCurrentVersionName = packageInfo.versionName; @@ -191,10 +162,9 @@ public ChangeLog(Context context, SharedPreferences preferences, String css) { * Get version code of last installation. * * @return The version code of the last installation of this app (as described in the former - * manifest). This will be the same as returned by {@link #getCurrentVersionCode()} the - * second time this version of the app is launched (more precisely: the second time - * {@code ChangeLog} is instantiated). - * + * manifest). This will be the same as returned by {@link #getCurrentVersionCode()} the + * second time this version of the app is launched (more precisely: the second time + * {@code ChangeLog} is instantiated). * @see android:versionCode */ public int getLastVersionCode() { @@ -205,7 +175,6 @@ public int getLastVersionCode() { * Get version code of current installation. * * @return The version code of this app as described in the manifest. - * * @see android:versionCode */ public int getCurrentVersionCode() { @@ -216,7 +185,6 @@ public int getCurrentVersionCode() { * Get version name of current installation. * * @return The version name of this app as described in the manifest. - * * @see android:versionName */ public String getCurrentVersionName() { @@ -236,7 +204,7 @@ public boolean isFirstRun() { * Check if this is a new installation. * * @return {@code true} if your app including {@code ChangeLog} is started the first time ever. - * Also {@code true} if your app was uninstalled and installed again. + * Also {@code true} if your app was uninstalled and installed again. */ public boolean isFirstRunEver() { return mLastVersionCode == NO_VERSION; @@ -244,7 +212,7 @@ public boolean isFirstRunEver() { /** * Skip the "What's new" dialog for this app version. - * + *

*

* Future calls to {@link #isFirstRun()} and {@link #isFirstRunEver()} will return {@code false} * for the current app version. @@ -258,10 +226,10 @@ public void skipLogDialog() { * Get the "What's New" dialog. * * @return An AlertDialog displaying the changes since the previous installed version of your - * app (What's New). But when this is the first run of your app including - * {@code ChangeLog} then the full log dialog is show. + * app (What's New). But when this is the first run of your app including + * {@code ChangeLog} then the full log dialog is show. */ - public AlertDialog getLogDialog() { + public MaterialDialog getLogDialog() { return getDialog(isFirstRunEver()); } @@ -270,142 +238,78 @@ public AlertDialog getLogDialog() { * * @return An AlertDialog with a full change log displayed. */ - public AlertDialog getFullLogDialog() { + public MaterialDialog getFullLogDialog() { return getDialog(true); } /** * Create a dialog containing (parts of the) change log. * - * @param full - * If this is {@code true} the full change log is displayed. Otherwise only changes for - * versions newer than the last version are displayed. - * + * @param full If this is {@code true} the full change log is displayed. Otherwise only changes for + * versions newer than the last version are displayed. * @return A dialog containing the (partial) change log. */ - protected AlertDialog getDialog(boolean full) { - WebView wv = new WebView(mContext); - //wv.setBackgroundColor(0); // transparent - wv.loadDataWithBaseURL(null, getLog(full), "text/html", "UTF-8", null); - - AlertDialog.Builder builder = new AlertDialog.Builder(mContext); - builder.setTitle( - mContext.getResources().getString( - full ? R.string.changelog_full_title : R.string.changelog_title)) - .setView(wv) - .setCancelable(false) - // OK button - .setPositiveButton( - mContext.getResources().getString(R.string.changelog_ok_button), - new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - // The user clicked "OK" so save the current version code as - // "last version code". - updateVersionInPreferences(); - } - }); + protected MaterialDialog getDialog(boolean full) { + MaterialDialog.Builder builder = new MaterialDialog.Builder(mContext); + builder.title(mContext.getResources().getString(full ? R.string.changelog_full_title : R.string.changelog_title)); + builder.cancelable(false); + builder.positiveText(mContext.getResources().getString(R.string.changelog_ok_button)); + builder.callback(new ChangelogButtonCallback()); + builder.customView(R.layout.dialog_layout, false); if (!full) { // Show "More…" button if we're only displaying a partial change log. - builder.setNegativeButton(R.string.changelog_show_full, - new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int id) { - getFullLogDialog().show(); - } - }); + builder.neutralText(R.string.changelog_show_full); } - return builder.create(); - } + MaterialDialog dialog = builder.build(); - /** - * Write current version code to the preferences. - */ - protected void updateVersionInPreferences() { - SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(mContext); - SharedPreferences.Editor editor = sp.edit(); - editor.putInt(VERSION_KEY, mCurrentVersionCode); + ChangelogListAdapter adapter = new ChangelogListAdapter(mContext, getChangeLog(full)); + ((StickyListHeadersListView) dialog.getCustomView()).setAdapter(adapter); - // TODO: Update preferences from a background thread - editor.commit(); + return dialog; } - /** - * Get changes since last version as HTML string. - * - * @return HTML string containing the changes since the previous installed version of your app - * (What's New). - */ - public String getLog() { - return getLog(false); - } + private class ChangelogButtonCallback extends MaterialDialog.ButtonCallback { - /** - * Get full change log as HTML string. - * - * @return HTML string containing the full change log. - */ - public String getFullLog() { - return getLog(true); + @Override + public void onNeutral(MaterialDialog dialog) { + getFullLogDialog().show(); + } + + @Override + public void onPositive(MaterialDialog dialog) { + // The user clicked "OK" so save the current version code as + // "last version code". + updateVersionInPreferences(); + } } /** - * Get (partial) change log as HTML string. - * - * @param full - * If this is {@code true} the full change log is returned. Otherwise only changes for - * versions newer than the last version are returned. - * - * @return The (partial) change log. + * Write current version code to the preferences. */ - protected String getLog(boolean full) { - StringBuilder sb = new StringBuilder(); - - sb.append(""); - - String versionFormat = mContext.getResources().getString(R.string.changelog_version_format); - - List changelog = getChangeLog(full); - - for (ReleaseItem release : changelog) { - sb.append("

"); - sb.append(String.format(versionFormat, release.versionName)); - sb.append("

"); - } - - sb.append(""); + protected void updateVersionInPreferences() { + SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(mContext); + SharedPreferences.Editor editor = sp.edit(); + editor.putInt(VERSION_KEY, mCurrentVersionCode); - return sb.toString(); + editor.apply(); } /** * Returns the merged change log. * - * @param full - * If this is {@code true} the full change log is returned. Otherwise only changes for - * versions newer than the last version are returned. - * + * @param full If this is {@code true} the full change log is returned. Otherwise only changes for + * versions newer than the last version are returned. * @return A sorted {@code List} containing {@link ReleaseItem}s representing the (partial) - * change log. - * + * change log. * @see #getChangeLogComparator() */ public List getChangeLog(boolean full) { SparseArray masterChangelog = getMasterChangeLog(full); SparseArray changelog = getLocalizedChangeLog(full); - List mergedChangeLog = - new ArrayList(masterChangelog.size()); + List mergedChangeLog = new ArrayList(masterChangelog.size()); for (int i = 0, len = masterChangelog.size(); i < len; i++) { int key = masterChangelog.keyAt(i); @@ -443,14 +347,11 @@ protected SparseArray getLocalizedChangeLog(boolean full) { /** * Read change log from XML resource file. * - * @param resId - * Resource ID of the XML file to read the change log from. - * @param full - * If this is {@code true} the full change log is returned. Otherwise only changes for - * versions newer than the last version are returned. - * + * @param resId Resource ID of the XML file to read the change log from. + * @param full If this is {@code true} the full change log is returned. Otherwise only changes for + * versions newer than the last version are returned. * @return A {@code SparseArray} containing {@link ReleaseItem}s representing the (partial) - * change log. + * change log. */ protected final SparseArray readChangeLogFromResource(int resId, boolean full) { XmlResourceParser xml = mContext.getResources().getXml(resId); @@ -464,12 +365,9 @@ protected final SparseArray readChangeLogFromResource(int resId, bo /** * Read the change log from an XML file. * - * @param xml - * The {@code XmlPullParser} instance used to read the change log. - * @param full - * If {@code true} the full change log is read. Otherwise only the changes since the - * last (saved) version are read. - * + * @param xml The {@code XmlPullParser} instance used to read the change log. + * @param full If {@code true} the full change log is read. Otherwise only the changes since the + * last (saved) version are read. * @return A {@code SparseArray} mapping the version codes to release information. */ protected SparseArray readChangeLog(XmlPullParser xml, boolean full) { @@ -499,25 +397,19 @@ protected SparseArray readChangeLog(XmlPullParser xml, boolean full /** * Parse the {@code release} tag of a change log XML file. * - * @param xml - * The {@code XmlPullParser} instance used to read the change log. - * @param full - * If {@code true} the contents of the {@code release} tag are always added to - * {@code changelog}. Otherwise only if the item's {@code versioncode} attribute is - * higher than the last version code. - * @param changelog - * The {@code SparseArray} to add a new {@link ReleaseItem} instance to. - * + * @param xml The {@code XmlPullParser} instance used to read the change log. + * @param full If {@code true} the contents of the {@code release} tag are always added to + * {@code changelog}. Otherwise only if the item's {@code versioncode} attribute is + * higher than the last version code. + * @param changelog The {@code SparseArray} to add a new {@link ReleaseItem} instance to. * @return {@code true} if the {@code release} element is describing changes of a version older - * or equal to the last version. In that case {@code changelog} won't be modified and - * {@link #readChangeLog(XmlPullParser, boolean)} will stop reading more elements from - * the change log file. - * + * or equal to the last version. In that case {@code changelog} won't be modified and + * {@link #readChangeLog(XmlPullParser, boolean)} will stop reading more elements from + * the change log file. * @throws XmlPullParserException * @throws IOException */ - private boolean parseReleaseTag(XmlPullParser xml, boolean full, - SparseArray changelog) throws XmlPullParserException, IOException { + private boolean parseReleaseTag(XmlPullParser xml, boolean full, SparseArray changelog) throws XmlPullParserException, IOException { String version = xml.getAttributeValue(null, ReleaseTag.ATTRIBUTE_VERSION); @@ -552,13 +444,14 @@ private boolean parseReleaseTag(XmlPullParser xml, boolean full, /** * Returns a {@link Comparator} that specifies the sort order of the {@link ReleaseItem}s. - * + *

*

* The default implementation returns the items in reverse order (latest version first). *

*/ protected Comparator getChangeLogComparator() { return new Comparator() { + @Override public int compare(ReleaseItem lhs, ReleaseItem rhs) { if (lhs.versionCode < rhs.versionCode) { @@ -576,6 +469,7 @@ public int compare(ReleaseItem lhs, ReleaseItem rhs) { * Container used to store information about a release/version. */ public static class ReleaseItem { + /** * Version code of the release. */ diff --git a/ckChangeLog/src/main/java/de/cketti/library/changelog/ChangelogListAdapter.java b/ckChangeLog/src/main/java/de/cketti/library/changelog/ChangelogListAdapter.java new file mode 100644 index 0000000..ca407aa --- /dev/null +++ b/ckChangeLog/src/main/java/de/cketti/library/changelog/ChangelogListAdapter.java @@ -0,0 +1,117 @@ +package de.cketti.library.changelog; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.TextView; + +import java.util.ArrayList; +import java.util.List; + +import se.emilsjolander.stickylistheaders.StickyListHeadersAdapter; + +public class ChangelogListAdapter extends BaseAdapter implements StickyListHeadersAdapter { + + private Context context; + private LayoutInflater inflater; + private List changes = new ArrayList<>(); + + private class Change { + + int versionCode; + String versionName, changeText; + + private Change(int versionCode, String versionName, String changeText) { + this.versionCode = versionCode; + this.versionName = versionName; + this.changeText = changeText; + } + + } + + public ChangelogListAdapter(Context context, List releases) { + this.context = context; + this.inflater = LayoutInflater.from(context); + for (ChangeLog.ReleaseItem release : releases) { + for (String change : release.changes) { + changes.add(new Change(release.versionCode, release.versionName, change)); + } + } + } + + @Override + public View getHeaderView(int position, View convertView, ViewGroup parent) { + if (convertView == null) { + convertView = inflater.inflate(R.layout.change_header_item, parent, false); + } + TextView headerText = (TextView) convertView.findViewById(R.id.headerText); + headerText.setText("Version " + changes.get(position).versionName); + return convertView; + } + + @Override + public long getHeaderId(int position) { + return changes.get(position).versionCode; + } + + @Override + public boolean areAllItemsEnabled() { + return false; + } + + @Override + public boolean isEnabled(int position) { + return false; + } + + @Override + public int getCount() { + return changes.size(); + } + + @Override + public Object getItem(int position) { + return changes.get(position); + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public boolean hasStableIds() { + return false; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + TextView changeText; + + if (convertView == null) { + convertView = inflater.inflate(R.layout.change_list_item, parent, false); + } + + changeText = (TextView) convertView.findViewById(R.id.changeText); + changeText.setText(changes.get(position).changeText); + + return convertView; + } + + @Override + public int getItemViewType(int position) { + return 1; + } + + @Override + public int getViewTypeCount() { + return 1; + } + + @Override + public boolean isEmpty() { + return changes.isEmpty(); + } +} diff --git a/ckChangeLog/src/main/res/layout/change_header_item.xml b/ckChangeLog/src/main/res/layout/change_header_item.xml new file mode 100644 index 0000000..ab1b25d --- /dev/null +++ b/ckChangeLog/src/main/res/layout/change_header_item.xml @@ -0,0 +1,14 @@ + + \ No newline at end of file diff --git a/ckChangeLog/src/main/res/layout/change_list_item.xml b/ckChangeLog/src/main/res/layout/change_list_item.xml new file mode 100644 index 0000000..6765e04 --- /dev/null +++ b/ckChangeLog/src/main/res/layout/change_list_item.xml @@ -0,0 +1,15 @@ + + \ No newline at end of file diff --git a/ckChangeLog/src/main/res/layout/dialog_layout.xml b/ckChangeLog/src/main/res/layout/dialog_layout.xml new file mode 100644 index 0000000..353cfce --- /dev/null +++ b/ckChangeLog/src/main/res/layout/dialog_layout.xml @@ -0,0 +1,9 @@ + + + + diff --git a/sample/build.gradle b/sample/build.gradle index cf427a0..685d2e6 100644 --- a/sample/build.gradle +++ b/sample/build.gradle @@ -4,12 +4,19 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:1.0.0' + classpath 'com.android.tools.build:gradle:1.2.2' } } apply plugin: 'com.android.application' +repositories { + jcenter() + mavenCentral() + maven { url 'http://download.crashlytics.com/maven' } + maven { url "https://oss.sonatype.org/content/repositories/snapshots/" } +} + android { compileSdkVersion 21 buildToolsVersion "21.1.2" @@ -18,14 +25,14 @@ android { versionCode 1 versionName "1.0" - minSdkVersion 7 + minSdkVersion 9 targetSdkVersion 21 } } dependencies { compile project(':ckChangeLog') - compile 'com.android.support:support-v4:21.0.3' + compile 'com.android.support:support-v4:22.1.1' } diff --git a/sample/src/main/java/de/cketti/sample/changelog/MainActivity.java b/sample/src/main/java/de/cketti/sample/changelog/MainActivity.java index 01e8652..ea27e34 100644 --- a/sample/src/main/java/de/cketti/sample/changelog/MainActivity.java +++ b/sample/src/main/java/de/cketti/sample/changelog/MainActivity.java @@ -1,13 +1,12 @@ package de.cketti.sample.changelog; -import de.cketti.library.changelog.ChangeLog; -import android.content.Context; import android.os.Bundle; import android.support.v4.app.FragmentActivity; -import android.view.ContextThemeWrapper; import android.view.Menu; import android.view.MenuItem; +import de.cketti.library.changelog.ChangeLog; + public class MainActivity extends FragmentActivity { @@ -31,10 +30,10 @@ public boolean onCreateOptionsMenu(Menu menu) { @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { - case R.id.menu_whats_new: { - new DarkThemeChangeLog(this).getLogDialog().show(); - break; - } +// case R.id.menu_whats_new: { +// new DarkThemeChangeLog(this).getLogDialog().show(); +// break; +// } case R.id.menu_full_changelog: { new ChangeLog(this).getFullLogDialog().show(); break; @@ -44,15 +43,15 @@ public boolean onOptionsItemSelected(MenuItem item) { return true; } - /** - * Example that shows how to create a themed dialog. - */ - public static class DarkThemeChangeLog extends ChangeLog { - public static final String DARK_THEME_CSS = - "body { color: #ffffff; background-color: #282828; }" + "\n" + DEFAULT_CSS; - - public DarkThemeChangeLog(Context context) { - super(new ContextThemeWrapper(context, R.style.DarkTheme), DARK_THEME_CSS); - } - } +// /** +// * Example that shows how to create a themed dialog. +// */ +// public static class DarkThemeChangeLog extends ChangeLog { +// public static final String DARK_THEME_CSS = +// "body { color: #ffffff; background-color: #282828; }" + "\n" + DEFAULT_CSS; +// +// public DarkThemeChangeLog(Context context) { +// super(new ContextThemeWrapper(context, R.style.DarkTheme), DARK_THEME_CSS); +// } +// } } diff --git a/screenshot_1.png b/screenshot_1.png deleted file mode 100644 index 7b0462a..0000000 Binary files a/screenshot_1.png and /dev/null differ diff --git a/screenshot_2.png b/screenshot_2.png deleted file mode 100644 index efaf3e5..0000000 Binary files a/screenshot_2.png and /dev/null differ