gabrielemariotti / changeloglib Goto Github PK
View Code? Open in Web Editor NEWAndroid Library to display your changelog
Android Library to display your changelog
[a href="domain.com"]more[/a] should be really helpful.
also don't know about how to change the color for some tex like [b color="#e4e4e4"]new[/b] Notification.
Ciao,
Aggiornando le librerie Appcompat etc di Google alla versione 23.2.0, le voci del changelog appaiono sparse a grande distanza una dall'altra.
Il mio codice è questo:
<it.gmariotti.changelibs.library.view.ChangeLogRecyclerView android:layout_width="match_parent" android:layout_height="match_parent" risuscito:changeLogFileResourceId="@raw/changelog_full" risuscito:rowHeaderLayoutId="@layout/changelogrowheader_material_layout" risuscito:rowLayoutId="@layout/changelogrow_material_layout" android:id="@+id/aboutText" />
Grazie in anticipo.
While some users may find the changelog informative and interesting, I find that some users get annoyed by changelog popups when frequent updates occur.
Would it be possible to include a "Never show again" option in the changelog dialog?
Thanks for the consideration and the awesome lib.
Hey is there a function that determines if dialog has shown before to user?
I've found another changelob lib which has that function https://github.com/cketti/ckChangeLog
kind a;
ChangeLog cl = new ChangeLog(this);
if (cl.isFirstRun()) {
cl.getLogDialog().show();
}
Thanks.
Hi. Is it possible to add support for api 7?
java.lang.NullPointerException: Attempt to read from field 'int android.support.v7.widget.RecyclerView$ItemAnimator$ItemHolderInfo.left' on a null object reference
at android.support.v7.widget.SimpleItemAnimator.animateDisappearance(SimpleItemAnimator.java:78)
at android.support.v7.widget.RecyclerView.animateDisappearance(RecyclerView.java:3246)
at android.support.v7.widget.RecyclerView.access$700(RecyclerView.java:147)
at android.support.v7.widget.RecyclerView$4.processDisappeared(RecyclerView.java:422)
at android.support.v7.widget.ViewInfoStore.process(ViewInfoStore.java:231)
at android.support.v7.widget.RecyclerView.dispatchLayoutStep3(RecyclerView.java:3086)
at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:2914)
at android.support.v7.widget.RecyclerView.onLayout(RecyclerView.java:3277)
at android.view.View.layout(View.java:16636)
at android.view.ViewGroup.layout(ViewGroup.java:5437)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:336)
at android.widget.FrameLayout.onLayout(FrameLayout.java:273)
at android.view.View.layout(View.java:16636)
at android.view.ViewGroup.layout(ViewGroup.java:5437)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:336)
at android.widget.FrameLayout.onLayout(FrameLayout.java:273)
at android.view.View.layout(View.java:16636)
at android.view.ViewGroup.layout(ViewGroup.java:5437)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1743)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1586)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1495)
at android.view.View.layout(View.java:16636)
at android.view.ViewGroup.layout(ViewGroup.java:5437)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:336)
at android.widget.FrameLayout.onLayout(FrameLayout.java:273)
at android.view.View.layout(View.java:16636)
at android.view.ViewGroup.layout(ViewGroup.java:5437)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:336)
at android.widget.FrameLayout.onLayout(FrameLayout.java:273)
at android.view.View.layout(View.java:16636)
at android.view.ViewGroup.layout(ViewGroup.java:5437)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:336)
at android.widget.FrameLayout.onLayout(FrameLayout.java:273)
at android.view.View.layout(View.java:16636)
at android.view.ViewGroup.layout(ViewGroup.java:5437)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1743)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1586)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1495)
at android.view.View.layout(View.java:16636)
at android.view.ViewGroup.layout(ViewGroup.java:5437)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:336)
at android.widget.FrameLayout.onLayout(FrameLayout.java:273)
at com.android.internal.policy.PhoneWindow$DecorView.onLayout(PhoneWindow.java:2678)
at android.view.View.layout(View.java:16636)
at android.view.ViewGroup.layout(ViewGroup.java:5437)
at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2171)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1931)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1107)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6013)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:858)
at android.view.Choreographer.doCallbacks(Choreographer.java:670)
at android.view.Choreographer.doFrame(Choreographer.java:606)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:844)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.
Adding <
in the changelog text is not working... Using a CDATA
approach neither...
The changelog line with an <
in it is always cut of at the position of <
...
Any other way to get a <
in my changelog?
After enabling ProGuard, all the changelog info disappears. Any tips on setting up ProGuard configuration?
Would you mind to upload this library to maven or gradle?
Here is a link
https://docs.sonatype.org/display/Repository/Sonatype+OSS+Maven+Repository+Usage+Guide
It would be great to be able to create a simple hierarchie in the changelog, e.g.
The HTML representation I have in mind talking about an hierarchie would look like
<ul>
<li>
<b>UI</b>
</li>
<ul>
<li>Using the SUpport Design Library</li>
</ul>
</ul>
The bold formatting could be done with the given possibilities using [b] [/b]
but it would be great to get the idention feature.
Maybe by introducing a new tag <changelogsubtext></changelogsubtext>
.
It would be really useful if, when building the app, the changelog.xml could be checked to see if it already contains the changelogversion for the version being built. If not, create a stub with the versionName and changeDate auto-filled.
I know this wouldn't be perfect, because you would essentially need to run the build twice. Another problem is that if, like me, you use "dev" of "b1" etc suffixes in the versionName then you probably don't want a changelogversion for each of those.
Anyway, just a thought!
As reported by Zeliret in #28:
For me there is another problem. I have a crash:
java.lang.NullPointerException: Attempt to read from field 'int android.support.v7.widget.RecyclerView$ItemAnimator$ItemHolderInfo.left' on a null object reference
at android.support.v7.widget.SimpleItemAnimator.animateDisappearance(SimpleItemAnimator.java:78)
at android.support.v7.widget.RecyclerView.animateDisappearance(RecyclerView.java:3246)
at android.support.v7.widget.RecyclerView.access$700(RecyclerView.java:147)
at android.support.v7.widget.RecyclerView$4.processDisappeared(RecyclerView.java:422)
at android.support.v7.widget.ViewInfoStore.process(ViewInfoStore.java:231)
at android.support.v7.widget.RecyclerView.dispatchLayoutStep3(RecyclerView.java:3086)
at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:2914)
at android.support.v7.widget.RecyclerView.onLayout(RecyclerView.java:3277)
at android.view.View.layout(View.java:16636)
at android.view.ViewGroup.layout(ViewGroup.java:5437)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:336)
at android.widget.FrameLayout.onLayout(FrameLayout.java:273)
at android.view.View.layout(View.java:16636)
at android.view.ViewGroup.layout(ViewGroup.java:5437)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:336)
at android.widget.FrameLayout.onLayout(FrameLayout.java:273)
at android.view.View.layout(View.java:16636)
at android.view.ViewGroup.layout(ViewGroup.java:5437)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1743)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1586)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1495)
at android.view.View.layout(View.java:16636)
at android.view.ViewGroup.layout(ViewGroup.java:5437)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:336)
at android.widget.FrameLayout.onLayout(FrameLayout.java:273)
at android.view.View.layout(View.java:16636)
at android.view.ViewGroup.layout(ViewGroup.java:5437)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:336)
at android.widget.FrameLayout.onLayout(FrameLayout.java:273)
at android.view.View.layout(View.java:16636)
at android.view.ViewGroup.layout(ViewGroup.java:5437)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:336)
at android.widget.FrameLayout.onLayout(FrameLayout.java:273)
at android.view.View.layout(View.java:16636)
at android.view.ViewGroup.layout(ViewGroup.java:5437)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1743)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1586)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1495)
at android.view.View.layout(View.java:16636)
at android.view.ViewGroup.layout(ViewGroup.java:5437)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:336)
at android.widget.FrameLayout.onLayout(FrameLayout.java:273)
at com.android.internal.policy.PhoneWindow$DecorView.onLayout(PhoneWindow.java:2678)
at android.view.View.layout(View.java:16636)
at android.view.ViewGroup.layout(ViewGroup.java:5437)
at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2171)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1931)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1107)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6013)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:858)
at android.view.Choreographer.doCallbacks(Choreographer.java:670)
at android.view.Choreographer.doFrame(Choreographer.java:606)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:844)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.jav
My layout:
<it.gmariotti.changelibs.library.view.ChangeLogRecyclerView
android:id="@+id/view"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:clipToPadding="false"
android:paddingBottom="@dimen/padding_narrow"
android:paddingTop="@dimen/padding_narrow"
app:rowHeaderLayoutId="@layout/header_changelog"
app:rowLayoutId="@layout/item_changelog"/>
First: Thanks for your great library!
One feature, developers want to provide using your library, might be to auto show the changelog if a new version is installed. Therefore, it is necessary to determine the installed version and to compare it. In my opinion this is a common use case and should be part of this lib.
My feature suggestion:
Please provide a function e.g. firstRun() which returns true if the app in the current version is started the first time. (other ways to implement this are of course ok, too. e.g. a static constructor autoFirstRun() which shows the changelog only if a new version is installed).
To inspire, you can take a look at the firstRun method of this lib: See here
Thanks!
This library crashes when used together with aapt2 since the changeling.xml reference is removed.
How to show up the Dialog??????????!???!!!!!!! My app crashes !
Hi,
Thanks for the great library. I like it because it very useful.
But it would be great to decrease minSdkVersion attribute to 8 to support max range of devices. Is this possible?
Thanks.
Hi, I get this error, here is the logcat. Did I do something wrong? I did as in your build.md
01-06 15:42:13.457: E/AndroidRuntime(4221): FATAL EXCEPTION: main
01-06 15:42:13.457: E/AndroidRuntime(4221): android.view.InflateException: Binary XML file line #2: Error inflating class it.gmariotti.changelibs.library.view.ChangeLogListView
01-06 15:42:13.457: E/AndroidRuntime(4221): at android.view.LayoutInflater.createView(LayoutInflater.java:613)
01-06 15:42:13.457: E/AndroidRuntime(4221): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:687)
01-06 15:42:13.457: E/AndroidRuntime(4221): at android.view.LayoutInflater.inflate(LayoutInflater.java:466)
01-06 15:42:13.457: E/AndroidRuntime(4221): at android.view.LayoutInflater.inflate(LayoutInflater.java:396)
01-06 15:42:13.457: E/AndroidRuntime(4221): at android.view.LayoutInflater.inflate(LayoutInflater.java:352)
01-06 15:42:13.457: E/AndroidRuntime(4221): at com.huteri.monas.BaseActivity.onOptionsItemSelected(BaseActivity.java:53)
01-06 15:42:13.457: E/AndroidRuntime(4221): at com.huteri.monas.MainActivity.onOptionsItemSelected(MainActivity.java:198)
01-06 15:42:13.457: E/AndroidRuntime(4221): at android.support.v4.app.Watson.onMenuItemSelected(Watson.java:118)
01-06 15:42:13.457: E/AndroidRuntime(4221): at com.actionbarsherlock.ActionBarSherlock.callbackOptionsItemSelected(ActionBarSherlock.java:604)
01-06 15:42:13.457: E/AndroidRuntime(4221): at com.actionbarsherlock.internal.ActionBarSherlockNative.dispatchOptionsItemSelected(ActionBarSherlockNative.java:92)
01-06 15:42:13.457: E/AndroidRuntime(4221): at com.actionbarsherlock.app.SherlockFragmentActivity.onMenuItemSelected(SherlockFragmentActivity.java:204)
01-06 15:42:13.457: E/AndroidRuntime(4221): at com.android.internal.policy.impl.PhoneWindow.onMenuItemSelected(PhoneWindow.java:958)
01-06 15:42:13.457: E/AndroidRuntime(4221): at com.android.internal.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:735)
01-06 15:42:13.457: E/AndroidRuntime(4221): at com.android.internal.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:149)
01-06 15:42:13.457: E/AndroidRuntime(4221): at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:874)
01-06 15:42:13.457: E/AndroidRuntime(4221): at com.android.internal.view.menu.MenuPopupHelper.onItemClick(MenuPopupHelper.java:156)
01-06 15:42:13.457: E/AndroidRuntime(4221): at android.widget.AdapterView.performItemClick(AdapterView.java:298)
01-06 15:42:13.457: E/AndroidRuntime(4221): at android.widget.AbsListView.performItemClick(AbsListView.java:1086)
01-06 15:42:13.457: E/AndroidRuntime(4221): at android.widget.AbsListView$PerformClick.run(AbsListView.java:2855)
01-06 15:42:13.457: E/AndroidRuntime(4221): at android.widget.AbsListView$1.run(AbsListView.java:3529)
01-06 15:42:13.457: E/AndroidRuntime(4221): at android.os.Handler.handleCallback(Handler.java:615)
01-06 15:42:13.457: E/AndroidRuntime(4221): at android.os.Handler.dispatchMessage(Handler.java:92)
01-06 15:42:13.457: E/AndroidRuntime(4221): at android.os.Looper.loop(Looper.java:137)
01-06 15:42:13.457: E/AndroidRuntime(4221): at android.app.ActivityThread.main(ActivityThread.java:4745)
01-06 15:42:13.457: E/AndroidRuntime(4221): at java.lang.reflect.Method.invokeNative(Native Method)
01-06 15:42:13.457: E/AndroidRuntime(4221): at java.lang.reflect.Method.invoke(Method.java:511)
01-06 15:42:13.457: E/AndroidRuntime(4221): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
01-06 15:42:13.457: E/AndroidRuntime(4221): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
01-06 15:42:13.457: E/AndroidRuntime(4221): at dalvik.system.NativeStart.main(Native Method)
01-06 15:42:13.457: E/AndroidRuntime(4221): Caused by: java.lang.reflect.InvocationTargetException
01-06 15:42:13.457: E/AndroidRuntime(4221): at java.lang.reflect.Constructor.constructNative(Native Method)
01-06 15:42:13.457: E/AndroidRuntime(4221): at java.lang.reflect.Constructor.newInstance(Constructor.java:417)
01-06 15:42:13.457: E/AndroidRuntime(4221): at android.view.LayoutInflater.createView(LayoutInflater.java:587)
01-06 15:42:13.457: E/AndroidRuntime(4221): ... 28 more
01-06 15:42:13.457: E/AndroidRuntime(4221): Caused by: java.lang.NoClassDefFoundError: it.gmariotti.changelibs.R$styleable
01-06 15:42:13.457: E/AndroidRuntime(4221): at it.gmariotti.changelibs.library.view.ChangeLogListView.initAttrs(ChangeLogListView.java:105)
01-06 15:42:13.457: E/AndroidRuntime(4221): at it.gmariotti.changelibs.library.view.ChangeLogListView.init(ChangeLogListView.java:89)
01-06 15:42:13.457: E/AndroidRuntime(4221): at it.gmariotti.changelibs.library.view.ChangeLogListView.(ChangeLogListView.java:69)
01-06 15:42:13.457: E/AndroidRuntime(4221): ... 31 more
When I make a new activity, after each item there is a large gap between one item and the next
Hi,
Nice work on this!
I have a question, is the android:allowBackup = true necessary in your AndroidManifest?
It's causing a manifest merging failed on my own project (which is set to false.. company policy)
Pull requests are not merged so I'm asking this question...
I still like the lib and added following (or am adding this currently):
And I would make a pull request then...
When we upgrade AppCompat in app to 23.2.0 and we using MaterialDialogs (https://github.com/afollestad/material-dialogs) to wrap Changeloglib app crash.
It looks as incompatibility of this lib which uses older 22.2.0
Could you please upgrade appCompat libs?
Hi,
Sometime it takes long to parse the changelog file from rae resources and there is no empty view to display (i.e.: a progressbar). Could that be added?
M
Currently the colors are held in colors.xml
and we can override them by defining them ourselves again in colors.xml
.
This works ok as long as you're only using one theme. I've got two themes in my app (dark/light). I define all my colors as attributes and can define them per theme in styles.xml
.
I really like your library and it works great as long as I use my light theme (light background, your default colors). When I switch to my dark theme I get a dark background and your default colors.
Now, overriding your colors in colors.xml
will force me to use a single text color for all themes. If you defined your colors as attributes, I could override them per theme.
There's a good article about this here:
http://daniel-codes.blogspot.co.uk/2011/03/custom-styles-in-android-libraries.html
that explains how to make a library "themable".
You'd basically get:
<attr name="chglib_material_color_text_1" format="reference|color"/>
And you can use it in your library as
android:textColor="?attr/chglib_material_color_text_1"
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.