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&lt;DaggerApplication&gt; { @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&lt;DaggerApplication&gt; { @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