Skip to content

Instantly share code, notes, and snippets.

View PetkevichPavel's full-sized avatar
💭
🚀 Never Stop 🚀

Pavel Petkevich PetkevichPavel

💭
🚀 Never Stop 🚀
View GitHub Profile
@PetkevichPavel
PetkevichPavel / PreferencesDelegate.kt
Last active May 3, 2020 20:39
SharedPreferences under Delegated properties - PreferencesDelegate without implementation.
open class PreferencesDelegate<T>(private val key: String) {
private var variable: Any? = null
/**
* Performing operation on synchronized thread.
* @param thisRef - is the reference to the class that contains the property
* @param property - is an instance of the [KProperty] class, which contains metadata.
* @return T - desired value by a given key or null.
*/
open operator fun getValue(thisRef: Any?, property: KProperty<*>): T? {
@PetkevichPavel
PetkevichPavel / SharedPreferencesProvider.kt
Created May 3, 2020 18:59
SharedPreferences under Delegated Properties
interface SharedPreferencesProvider {
val preferences: SharedPreferences
}
@PetkevichPavel
PetkevichPavel / CodeExample.kt
Last active August 28, 2019 15:45
AN_Cloud Function: Code example.
fun Context.setDefaultRCFromFile() : Boolean =
File(filesDir, LOCAL_RC_JSON).takeIf { it.exists() }?.let {file->
val defaultRC = mutableMapOf<String, Any>()
gson.fromJson(file.inputStream().convertLocalJsonToString(), RCModel::class.java)?.let { rcModel ->
defaultRC[RemoteConfigConstants.RC_JSON_PARAM_NAME] = file.inputStream().convertLocalJsonToString()
remoteConfigManager.updateRc(rcModel)
remoteConfigManager.updateFetchState(true, currentDateTimestamp)
}
app?.firebaseRemoteConfig?.setDefaults(defaultRC)
file.inputStream().close()
@PetkevichPavel
PetkevichPavel / CodeExample.kt
Last active August 24, 2019 08:38
AN_Cloud Function: Code example.
fetchAndActivate().addOnCompleteListener { task ->
task.isSuccessful.takeIf { it }?.apply {
context.saveFile(getString(RemoteConfigConstants.RC_JSON_PARAM_NAME).toByteArray(),
LOCAL_RC_JSON)
}
}
@PetkevichPavel
PetkevichPavel / FileExtension.kt
Created August 24, 2019 08:37
AN_Cloud Function: Class for File extension functions.
/**
* Context extension function which will save the file into the device local storage.
* @param data - content of the file.
* @param fileName - name of the final file.
*/
fun Context.saveFile(data: ByteArray, fileName: String) =
openFileOutput(fileName, Context.MODE_PRIVATE)?.apply {
write(data)
close()
}
@PetkevichPavel
PetkevichPavel / RemoteConfigFunctions.kt
Last active August 24, 2019 09:03
AN_Cloud Function: Helpful class with certain functions for remote config.
class RemoteConfigFunctions(private val gson: Gson, private val context: Context,
private val app: App?,
private val remoteConfigManager: RemoteConfigManager) {
companion object {
private const val TAG = "RemoteConfigFunctions:"
private const val RECEIVER_TAG = "FCM Receiver:"
}
/**
@PetkevichPavel
PetkevichPavel / RemoteConfigConstants.kt
Last active August 24, 2019 08:29
An_Cloud Function: Class for Remote Config constants.
class RemoteConfigConstants {
companion object {
const val DEFAULT_LOCAL_RC_JSON = "RemoteConfig.json"
const val LOCAL_RC_JSON = "DeviceRemoteConfig.json"
const val RC_JSON_PARAM_NAME = "config_json"
const val RC_EXTRA_BACK_NOTIFICATION = "rc_extra_back_notification"
}
}
@PetkevichPavel
PetkevichPavel / MainActivity.kt
Last active August 24, 2019 08:27
AN_Cloud Function: Example of handleRcUpdate override in MainActivity.
override fun handleRcUpdate(isItServiceUpdate: Boolean,
isFeatureOnBoardingVisible: Boolean) {
super.handleRcUpdate(isItServiceUpdate, isFeatureOnBoardingVisible)
when {
isItServiceUpdate -> updateUrls()
isFeatureOnBoardingVisible ->
navigateToOnBoardingMenu(true)
}
}
@PetkevichPavel
PetkevichPavel / BaseActivity.kt
Created August 24, 2019 08:22
AN_Cloud Function: Base activity of the application.
abstract class BaseActivity : AppCompatActivity() {
companion object {
private const val TAG = "BaseActivity:"
private const val RECEIVER_TAG = "BaseActivity-Receiver:"
}
private val localBroadcastManager: LocalBroadcastManager by lazy {
LocalBroadcastManager.getInstance(this)
}
@PetkevichPavel
PetkevichPavel / FCMService.kt
Created August 24, 2019 08:20
AN_Cloud Function: Firebase Messaging Service for processing the notifications.
class FCMService : FirebaseMessagingService() {
companion object {
private const val TAG = "FCMService"
private const val RECEIVER_TAG = "Receiver:"
const val IN_AP_EX_STR_TITLE = "in_ap_ex_str_title"
const val IN_AP_EX_STR_BODY = "in_ap_ex_str_body"
}
@SuppressLint("TimberArgCount")