Skip to content

Commit e6dfb7b

Browse files
authored
Merge pull request #5 from odaridavid/in-app-updates
In app updates
2 parents d54d181 + 8efbe2d commit e6dfb7b

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

50 files changed

+301
-185
lines changed

app/build.gradle

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,9 @@ dependencies {
4848
implementation 'androidx.core:core-ktx:1.2.0'
4949
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
5050

51+
//In-app updates
52+
implementation 'com.google.android.play:core:1.7.2'
53+
5154
//Material Design
5255
implementation "com.google.android.material:material:$material_design_version"
5356

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
/**
2+
*
3+
* Copyright 2020 David Odari
4+
*
5+
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
6+
* in compliance with the License. You may obtain a copy of the License at
7+
* http://www.apache.org/licenses/LICENSE-2.0
8+
* Unless required by applicable law or agreed to in writing, software distributed under the License
9+
* is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
10+
* or implied. See the License for the specific language governing permissions and limitations under
11+
* the License.
12+
*
13+
**/
14+
package com.github.odaridavid.designpatterns
15+
16+
import android.app.Activity
17+
import android.content.Context
18+
import com.google.android.play.core.appupdate.AppUpdateInfo
19+
import com.google.android.play.core.appupdate.AppUpdateManager
20+
import com.google.android.play.core.appupdate.AppUpdateManagerFactory
21+
import com.google.android.play.core.install.model.AppUpdateType
22+
import com.google.android.play.core.install.model.UpdateAvailability
23+
24+
25+
internal class InAppUpdateManager(private val context: Context, private val activity: Activity) {
26+
27+
fun checkForUpdate() {
28+
val appUpdateManager: AppUpdateManager = AppUpdateManagerFactory.create(context)
29+
val appUpdateInfo = appUpdateManager.appUpdateInfo
30+
appUpdateInfo?.addOnSuccessListener { info ->
31+
handleUpdateImmediately(appUpdateManager, info)
32+
}
33+
}
34+
35+
private fun handleUpdateImmediately(
36+
appUpdateManager: AppUpdateManager,
37+
appUpdateInfo: AppUpdateInfo
38+
) {
39+
val updateAvailability = appUpdateInfo.updateAvailability()
40+
if ((updateAvailability == UpdateAvailability.UPDATE_AVAILABLE || updateAvailability == UpdateAvailability.DEVELOPER_TRIGGERED_UPDATE_IN_PROGRESS) &&
41+
appUpdateInfo.isUpdateTypeAllowed(AppUpdateType.IMMEDIATE)
42+
) {
43+
appUpdateManager.startUpdateFlowForResult(
44+
appUpdateInfo,
45+
AppUpdateType.IMMEDIATE,
46+
activity,
47+
RQ_REQUEST_UPDATE
48+
)
49+
}
50+
}
51+
52+
companion object {
53+
const val RQ_REQUEST_UPDATE = 4000
54+
}
55+
}

app/src/main/java/com/github/odaridavid/designpatterns/helpers/Extensions.kt

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ package com.github.odaridavid.designpatterns.helpers
1515

1616
import android.app.Activity
1717
import android.content.Intent
18+
import android.widget.Toast
1819
import us.feras.mdv.MarkdownView
1920

2021

@@ -26,15 +27,19 @@ inline fun <reified T> Activity.navigateTo(noinline intentExtras: ((Intent) -> U
2627
startActivity(intent)
2728
}
2829

29-
fun MarkdownView.loadWithKotlinCss(filePath: String) {
30+
internal fun MarkdownView.loadWithKotlinCss(filePath: String) {
3031
loadMarkdownFile(
3132
filePath,
3233
KOTLIN_CSS_PATH
3334
)
3435
}
3536

36-
fun String.checkUrlScheme(): String {
37+
internal fun String.checkUrlScheme(): String {
3738
return if (!startsWith("http://") && !startsWith("https://"))
3839
"http://$this"
3940
else this
41+
}
42+
43+
internal fun Activity.showToast(msg: String) {
44+
Toast.makeText(this, msg, Toast.LENGTH_LONG).show()
4045
}

app/src/main/java/com/github/odaridavid/designpatterns/helpers/SdkUtils.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ package com.github.odaridavid.designpatterns.helpers
1616
import android.os.Build
1717
import androidx.annotation.IntRange
1818

19-
object SdkUtils {
19+
internal object SdkUtils {
2020
fun versionFrom(@IntRange(from = 0, to = 29) versionCodes: Int): Boolean {
2121
return Build.VERSION.SDK_INT >= versionCodes
2222
}

app/src/main/java/com/github/odaridavid/designpatterns/abstractfactory/AbstractFactoryPattern.kt renamed to app/src/main/java/com/github/odaridavid/designpatterns/patterns/abstractfactory/AbstractFactoryPattern.kt

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,25 +11,25 @@
1111
* the License.
1212
*
1313
**/
14-
package com.github.odaridavid.designpatterns.abstractfactory
14+
package com.github.odaridavid.designpatterns.patterns.abstractfactory
1515

16-
interface Truck {
16+
internal interface Truck {
1717
val color: String
1818
fun noOfWheels(): Int
1919
}
2020

21-
class Isuzu(override val color: String) :
21+
internal class Isuzu(override val color: String) :
2222
Truck {
2323
override fun noOfWheels(): Int = 18
2424
}
2525

26-
class Benz(override val color: String) :
26+
internal class Benz(override val color: String) :
2727
Truck {
2828
override fun noOfWheels(): Int = 22
2929
}
3030

3131

32-
abstract class CarFactory {
32+
internal abstract class CarFactory {
3333
abstract fun getTruck(): Truck
3434

3535
companion object {
@@ -44,11 +44,11 @@ abstract class CarFactory {
4444
}
4545
}
4646

47-
class JapanTruckFactory : CarFactory() {
47+
internal class JapanTruckFactory : CarFactory() {
4848
override fun getTruck(): Truck = Isuzu(color = "White")
4949
}
5050

51-
class GermanTruckFactory : CarFactory() {
51+
internal class GermanTruckFactory : CarFactory() {
5252
override fun getTruck(): Truck = Benz(color = "Black")
5353
}
5454

app/src/main/java/com/github/odaridavid/designpatterns/adapter/AdapterPattern.kt renamed to app/src/main/java/com/github/odaridavid/designpatterns/patterns/adapter/AdapterPattern.kt

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,29 +11,29 @@
1111
* the License.
1212
*
1313
**/
14-
package com.github.odaridavid.designpatterns.adapter
14+
package com.github.odaridavid.designpatterns.patterns.adapter
1515

16-
interface LaptopCable {
16+
internal interface LaptopCable {
1717
fun onConnectedToPowerPort()
1818
}
1919

20-
interface PowerBrick {
20+
internal interface PowerBrick {
2121
fun onConnectedToSocket()
2222
}
2323

24-
class HpPowerBrick : PowerBrick {
24+
internal class HpPowerBrick : PowerBrick {
2525
override fun onConnectedToSocket() {
2626
println("PowerBrick Receiving Power Supply")
2727
}
2828
}
2929

30-
open class StockCable : LaptopCable {
30+
internal open class StockCable : LaptopCable {
3131
override fun onConnectedToPowerPort() {
3232
println("Cable Connected To Laptop")
3333
}
3434
}
3535

36-
class StockCableAdapter(private val hpPowerBrick: HpPowerBrick) : StockCable() {
36+
internal class StockCableAdapter(private val hpPowerBrick: HpPowerBrick) : StockCable() {
3737
override fun onConnectedToPowerPort() {
3838
super.onConnectedToPowerPort()
3939
hpPowerBrick.onConnectedToSocket()

app/src/main/java/com/github/odaridavid/designpatterns/bridge/BridgePattern.kt renamed to app/src/main/java/com/github/odaridavid/designpatterns/patterns/bridge/BridgePattern.kt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,20 +11,20 @@
1111
* the License.
1212
*
1313
**/
14-
package com.github.odaridavid.designpatterns.bridge
14+
package com.github.odaridavid.designpatterns.patterns.bridge
1515

16-
interface FurnitureTheme {
16+
internal interface FurnitureTheme {
1717
fun getTheme(): String
1818
}
1919

20-
class VintageFurniture : FurnitureTheme {
20+
internal class VintageFurniture : FurnitureTheme {
2121
override fun getTheme(): String = "Vintage"
2222
}
2323

24-
abstract class Furniture(val furnitureTheme: FurnitureTheme) {
24+
internal abstract class Furniture(val furnitureTheme: FurnitureTheme) {
2525
abstract fun getType(): String
2626
}
2727

28-
class Chair(private val theme: FurnitureTheme) : Furniture(theme) {
28+
internal class Chair(private val theme: FurnitureTheme) : Furniture(theme) {
2929
override fun getType(): String = "${theme.getTheme()} Chair."
3030
}

app/src/main/java/com/github/odaridavid/designpatterns/builder/BuilderPattern.kt renamed to app/src/main/java/com/github/odaridavid/designpatterns/patterns/builder/BuilderPattern.kt

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,11 @@
1111
* the License.
1212
*
1313
**/
14-
package com.github.odaridavid.designpatterns.builder
14+
package com.github.odaridavid.designpatterns.patterns.builder
1515

1616
import androidx.annotation.FloatRange
1717

18-
class GameEnvironmentBuilder {
18+
internal class GameEnvironmentBuilder {
1919

2020
private var quality = RenderQuality.MEDIUM
2121
private var frequency = 0.0f
@@ -50,19 +50,19 @@ class GameEnvironmentBuilder {
5050

5151
}
5252

53-
enum class TimeOfDay {
53+
internal enum class TimeOfDay {
5454
MORNING, NOON, AFTERNOON, EVENING, NIGHT
5555
}
5656

57-
enum class Scene {
57+
internal enum class Scene {
5858
FOREST, CITY, CAVE, BARRACKS, CLUB
5959
}
6060

61-
enum class RenderQuality {
61+
internal enum class RenderQuality {
6262
LOW, MEDIUM, MAX, ULTRA
6363
}
6464

65-
data class GameEnvironment(
65+
internal data class GameEnvironment(
6666
val quality: RenderQuality,
6767
val frequencyOfRocks: Float,
6868
val timeOfDay: TimeOfDay,

app/src/main/java/com/github/odaridavid/designpatterns/chainofresponsibility/ChainOfResponsibilityPattern.kt renamed to app/src/main/java/com/github/odaridavid/designpatterns/patterns/chainofresponsibility/ChainOfResponsibilityPattern.kt

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,20 +11,20 @@
1111
* the License.
1212
*
1313
**/
14-
package com.github.odaridavid.designpatterns.chainofresponsibility
14+
package com.github.odaridavid.designpatterns.patterns.chainofresponsibility
1515

16-
interface OrderHandler {
16+
internal interface OrderHandler {
1717
val nextHandler: OrderHandler?
1818
fun handleRequest(order: Order)
1919
}
2020

21-
interface Order {
21+
internal interface Order {
2222
val items: Map<String, Int>
2323
}
2424

25-
class IceCreamOrder(override val items: Map<String, Int>) : Order
25+
internal class IceCreamOrder(override val items: Map<String, Int>) : Order
2626

27-
class IceCreamVendor(override val nextHandler: OrderHandler?) : OrderHandler {
27+
internal class IceCreamVendor(override val nextHandler: OrderHandler?) : OrderHandler {
2828
override fun handleRequest(order: Order) {
2929
val orderSize = order.items.values.sum()
3030
if (orderSize > 5) {
@@ -36,7 +36,7 @@ class IceCreamVendor(override val nextHandler: OrderHandler?) : OrderHandler {
3636
}
3737
}
3838

39-
class IceCreamRetailer(override val nextHandler: OrderHandler?) : OrderHandler {
39+
internal class IceCreamRetailer(override val nextHandler: OrderHandler?) : OrderHandler {
4040
override fun handleRequest(order: Order) {
4141
val orderSize = order.items.values.sum()
4242
if (orderSize > 10) {
@@ -48,7 +48,7 @@ class IceCreamRetailer(override val nextHandler: OrderHandler?) : OrderHandler {
4848
}
4949
}
5050

51-
class IceCreamFactory(override val nextHandler: OrderHandler?) : OrderHandler {
51+
internal class IceCreamFactory(override val nextHandler: OrderHandler?) : OrderHandler {
5252
override fun handleRequest(order: Order) {
5353
val orderSize = order.items.values.sum()
5454
if (orderSize > 100) {

app/src/main/java/com/github/odaridavid/designpatterns/command/CommandPattern.kt renamed to app/src/main/java/com/github/odaridavid/designpatterns/patterns/command/CommandPattern.kt

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,13 @@
1111
* the License.
1212
*
1313
**/
14-
package com.github.odaridavid.designpatterns.command
14+
package com.github.odaridavid.designpatterns.patterns.command
1515

16-
interface Command {
16+
internal interface Command {
1717
fun execute()
1818
}
1919

20-
class RaceOrganizer {
20+
internal class RaceOrganizer {
2121
private val queue = ArrayList<Command>()
2222

2323
fun register(command: Command) {
@@ -32,19 +32,19 @@ class RaceOrganizer {
3232

3333
}
3434

35-
class RaceCommand(private val event: Event) : Command {
35+
internal class RaceCommand(private val event: Event) : Command {
3636
override fun execute() {
3737
event.beginRace()
3838
}
3939
}
4040

41-
class DetourCommand(private val event: Event) : Command {
41+
internal class DetourCommand(private val event: Event) : Command {
4242
override fun execute() {
4343
event.takeDetour()
4444
}
4545
}
4646

47-
class Event {
47+
internal class Event {
4848
fun beginRace() {
4949
println("Racing Begins")
5050
}

0 commit comments

Comments
 (0)