tag:github.com,2008:https://github.com/skydoves/PreferenceRoom/releases
Release notes from PreferenceRoom
2021-08-14T04:44:25Z
tag:github.com,2008:Repository/111425878/1.2.2
2021-08-14T04:48:32Z
1.2.2
<p>🎉 Released a new version <code>1.2.2</code>! 🎉</p>
<h3>What's New?</h3>
<ul>
<li>Fixed: <code>@PreferenceFunction</code> annotation doesn't work with objects. (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="666694202" data-permission-text="Title is private" data-url="https://github.com/skydoves/PreferenceRoom/issues/20" data-hovercard-type="issue" data-hovercard-url="/skydoves/PreferenceRoom/issues/20/hovercard" href="https://github.com/skydoves/PreferenceRoom/issues/20">#20</a>)</li>
<li>Added Consumer Proguard-rules internally. We don't need to add rules manually for dependency injection.</li>
</ul>
skydoves
tag:github.com,2008:Repository/111425878/1.2.1
2020-08-02T11:25:32Z
1.2.1
<p>🎉 Released a new version <code>1.2.1</code>! 🎉</p>
<h3>What's New?</h3>
<ul>
<li>Bump the javapoet version to <code>1.13.0</code> internally.</li>
<li>Added new lines in long code statements from generated.</li>
</ul>
skydoves
tag:github.com,2008:Repository/111425878/1.2.0
2020-03-08T08:43:51Z
1.2.0
<p>Released a new version <code>1.2.0</code>.</p>
<p>We can inject dependencies using <strong>Dagger</strong> instead of using <code>@InjectPreference</code> annotation.</p>
<p>Here is the way to migrate Dagger.</p>
<h3>1. If you using <code>PreferenceEntity</code> without <code>PreferenceComponent</code>.</h3>
<div class="highlight highlight-source-kotlin notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content=" @Provides
@Singleton
fun provideInitialEntity(context: Context): Preference_InitialEntity {
return Preference_InitialEntity.getInstance(context)
}
@Provides
@Singleton
fun provideSettingEntity(context: Context): Preference_SettingEntity {
return Preference_SettingEntity.getInstance(context)
}"><pre> @Provides
@Singleton
<span class="pl-k">fun</span> <span class="pl-en">provideInitialEntity</span>(<span class="pl-smi">context</span><span class="pl-k">:</span> <span class="pl-en">Context</span>): <span class="pl-en">Preference_InitialEntity</span> {
<span class="pl-k">return</span> <span class="pl-en">Preference_InitialEntity</span>.getInstance(context)
}
@Provides
@Singleton
<span class="pl-k">fun</span> <span class="pl-en">provideSettingEntity</span>(<span class="pl-smi">context</span><span class="pl-k">:</span> <span class="pl-en">Context</span>): <span class="pl-en">Preference_SettingEntity</span> {
<span class="pl-k">return</span> <span class="pl-en">Preference_SettingEntity</span>.getInstance(context)
}</pre></div>
<h3>1. If you using <code>PreferenceEntity</code> with <code>PreferenceComponent</code>.</h3>
<h4>1. Add method for injecting an instance of <code>PreferenceComponent</code> to Dagger's <code>Builder</code>.</h4>
<div class="highlight highlight-source-diff notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="@Singleton
@Component( ... )
interface AppComponent : AndroidInjector<DaggerApplication> {
@Component.Builder
interface Builder {
@BindsInstance fun application(application: Application): Builder
+ @BindsInstance fun preferenceRoom(prefAppComponent: PrefAppComponent): Builder
fun build(): AppComponent
}
}"><pre>@Singleton
@Component( ... )
interface AppComponent : AndroidInjector<DaggerApplication> {
@Component.Builder
interface Builder {
@BindsInstance fun application(application: Application): Builder
<span class="pl-mi1"><span class="pl-mi1">+</span> @BindsInstance fun preferenceRoom(prefAppComponent: PrefAppComponent): Builder</span>
fun build(): AppComponent
}
}</pre></div>
<h4>2. Inject an initialized <code>PreferenceComponent</code> that generated by the compiler.</h4>
<p>The most important thing is the <code>appComponent</code> should be initialized lazily or in the <code>onCreate</code>.<br>
Because the <code>Context</code> is <code>null</code> when initializing properties in the <code>Application</code> class.</p>
<div class="highlight highlight-source-diff notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="class MyApplication: DaggerApplication() {
private val appComponent by lazy {
DaggerAppComponent.builder()
.application(this)
+ .preferenceRoom(PreferenceComponent_PrefAppComponent.init(this))
.build()
}
}"><pre>class MyApplication: DaggerApplication() {
private val appComponent by lazy {
DaggerAppComponent.builder()
.application(this)
<span class="pl-mi1"><span class="pl-mi1">+</span> .preferenceRoom(PreferenceComponent_PrefAppComponent.init(this))</span>
.build()
}
}</pre></div>
<h4>3. Make entity providing abstract methods in the <code>PreferenceComponent</code></h4>
<div class="highlight highlight-source-kotlin notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="@PreferenceComponent(entities = [InitialEntity::class, SettingEntity::class])
interface PrefAppComponent {
// provides entities
fun initialEntity(): InitialEntity
fun settingEntity(): SettingEntity"><pre>@PreferenceComponent(entities <span class="pl-k">=</span> [<span class="pl-en">InitialEntity</span>::<span class="pl-c1">class</span>, <span class="pl-en">SettingEntity</span>::<span class="pl-c1">class</span>])
<span class="pl-k">interface</span> <span class="pl-en">PrefAppComponent</span> {
<span class="pl-c"><span class="pl-c">//</span> provides entities</span>
<span class="pl-k">fun</span> <span class="pl-en">initialEntity</span>(): <span class="pl-en">InitialEntity</span>
<span class="pl-k">fun</span> <span class="pl-en">settingEntity</span>(): <span class="pl-en">SettingEntity</span></pre></div>
<h4>4. Provide instances of the instances on the module.</h4>
<p>I just created a new module: <code>PreferenceModule</code>.</p>
<div class="highlight highlight-source-kotlin notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="@Module
class PreferenceModule {
@Provides
@Singleton
fun provideInitialEntity(prefAppComponent: PrefAppComponent): Preference_InitialEntity {
return prefAppComponent.initialEntity() as Preference_InitialEntity
}
@Provides
@Singleton
fun provideSettingEntity(prefAppComponent: PrefAppComponent): Preference_SettingEntity {
return prefAppComponent.settingEntity() as Preference_SettingEntity
}
}"><pre>@Module
<span class="pl-k">class</span> <span class="pl-en">PreferenceModule</span> {
@Provides
@Singleton
<span class="pl-k">fun</span> <span class="pl-en">provideInitialEntity</span>(<span class="pl-smi">prefAppComponent</span><span class="pl-k">:</span> <span class="pl-en">PrefAppComponent</span>): <span class="pl-en">Preference_InitialEntity</span> {
<span class="pl-k">return</span> prefAppComponent.initialEntity() <span class="pl-k">as</span> <span class="pl-en">Preference_InitialEntity</span>
}
@Provides
@Singleton
<span class="pl-k">fun</span> <span class="pl-en">provideSettingEntity</span>(<span class="pl-smi">prefAppComponent</span><span class="pl-k">:</span> <span class="pl-en">PrefAppComponent</span>): <span class="pl-en">Preference_SettingEntity</span> {
<span class="pl-k">return</span> prefAppComponent.settingEntity() <span class="pl-k">as</span> <span class="pl-en">Preference_SettingEntity</span>
}
}</pre></div>
<h4>5. It's finished. And you can inject dependency using <code>@Inject</code> annotation by dagger.</h4>
<div class="highlight highlight-source-kotlin notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="class SnsViewModel @Inject constructor(
val initialEntity: Preference_InitialEntity,
val settingEntity: Preference_SettingEntity
) : ViewModel() {
"><pre><span class="pl-k">class</span> <span class="pl-en">SnsViewModel</span> @Inject constructor(
<span class="pl-k">val</span> <span class="pl-smi">initialEntity</span><span class="pl-k">:</span> <span class="pl-en">Preference_InitialEntity</span>,
<span class="pl-k">val</span> <span class="pl-smi">settingEntity</span><span class="pl-k">:</span> <span class="pl-en">Preference_SettingEntity</span>
) : ViewModel() {
</pre></div>
skydoves
tag:github.com,2008:Repository/111425878/1.1.9
2020-01-30T15:48:46Z
1.1.9
<p>Support incremental annotation processing for kapt (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="557571155" data-permission-text="Title is private" data-url="https://github.com/skydoves/PreferenceRoom/issues/18" data-hovercard-type="pull_request" data-hovercard-url="/skydoves/PreferenceRoom/pull/18/hovercard" href="https://github.com/skydoves/PreferenceRoom/pull/18">#18</a>)</p>
skydoves
tag:github.com,2008:Repository/111425878/1.1.8
2019-07-18T14:55:56Z
1.1.8
<ul>
<li>downgraded internal Gradle build tools version to '3.3.0'.</li>
<li>downgraded internal Gradle version to <code>4.10.1</code>.</li>
</ul>
skydoves
tag:github.com,2008:Repository/111425878/v1.1.8
2019-06-16T13:32:42Z
v1.1.8
<p>added funding template</p>
skydoves
tag:github.com,2008:Repository/111425878/v1.1.7
2019-02-27T04:43:12Z
v1.1.7
<ul>
<li>implements addOnChangedListener method spec</li>
<li>base64 class from android open source util for using apache commons codes on android</li>
</ul>
skydoves
tag:github.com,2008:Repository/111425878/v1.1.6
2019-02-22T07:28:49Z
v1.1.6
<p>Encrypting an entity using @EncryptEntity annotation.</p>
skydoves
tag:github.com,2008:Repository/111425878/v1.1.5
2019-02-04T18:01:43Z
v1.1.5
No content.
skydoves
tag:github.com,2008:Repository/111425878/v1.1.4
2019-01-15T15:11:02Z
v1.1.4
<p>Implemented OnChangedListener by auto-generation.</p>
skydoves