Skip to content

Instantly share code, notes, and snippets.

View KwabenBerko's full-sized avatar

Kwabena Bio Berko KwabenBerko

View GitHub Profile
@KwabenBerko
KwabenBerko / MainActivity.java
Created February 27, 2019 02:37
Generate Hash Key
public void generateHashkey(){
try {
PackageInfo info = getPackageManager().getPackageInfo(
"YOUR_PACKAGE_NAME",
PackageManager.GET_SIGNATURES);
for (Signature signature : info.signatures) {
MessageDigest md = MessageDigest.getInstance("SHA");
md.update(signature.toByteArray());
Log.d(Constants.TAG, "HASH BELOW");
@KwabenBerko
KwabenBerko / docker-help.md
Created March 17, 2019 00:06 — forked from bradtraversy/docker-help.md
Docker Commands, Help & Tips

Docker Commands, Help & Tips

Show commands & management commands

$ docker

Docker version info

@KwabenBerko
KwabenBerko / gist:eeccca7d5a26f9f67a4c141594be11b5
Created September 15, 2019 00:06 — forked from rxaviers/gist:7360908
Complete list of github markdown emoji markup

People

:bowtie: :bowtie: 😄 :smile: 😆 :laughing:
😊 :blush: 😃 :smiley: ☺️ :relaxed:
😏 :smirk: 😍 :heart_eyes: 😘 :kissing_heart:
😚 :kissing_closed_eyes: 😳 :flushed: 😌 :relieved:
😆 :satisfied: 😁 :grin: 😉 :wink:
😜 :stuck_out_tongue_winking_eye: 😝 :stuck_out_tongue_closed_eyes: 😀 :grinning:
😗 :kissing: 😙 :kissing_smiling_eyes: 😛 :stuck_out_tongue:
@KwabenBerko
KwabenBerko / user.service.ts
Created December 25, 2019 23:35
UserService
export const findByEmail = (email: string): Promise<User> => {
// Some Logic
}
import * as UserService from "./user.service";
export const register = async (email: string, password: string): Promise<User> =>{
const user = await UserService.findByEmail(email);
if(user){
throw new Error("An account with this email already exists.")
}
//Continue Logic
}
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@android:id/background">
<shape>
<corners android:radius="8dp"/>
<solid android:color="@color/gray"/>
</shape>
</item>
<item android:id="@android:id/progress"
android:top="1dp"
@KwabenBerko
KwabenBerko / Extensions.kt
Created April 5, 2021 13:16
Debounced Text Watcher
@ExperimentalCoroutinesApi
fun EditText.doAfterTextChanged(): Flow<CharSequence?> {
return callbackFlow<CharSequence?> {
val listener = object : TextWatcher {
override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) =
Unit
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) = Unit
override fun afterTextChanged(s: Editable?) {
offer(s)
@KwabenBerko
KwabenBerko / Extensions.kt
Created April 5, 2021 13:33
Debounced SearchView
@ExperimentalCoroutinesApi
fun SearchView.doOnQueryTextChanged(): Flow<CharSequence?> {
return callbackFlow<CharSequence?> {
val listener = object : SearchView.OnQueryTextListener {
override fun onQueryTextSubmit(query: String?) = false
override fun onQueryTextChange(newText: String?): Boolean {
offer(newText)
return false
}
@KwabenBerko
KwabenBerko / ConverterScreen.kt
Created August 11, 2021 18:19
Snackbars In Compose
@Composable
fun ConverterScreen(
navController: NavController,
viewModel: ConverterViewModel
) {
val scaffoldState = rememberScaffoldState()
val viewState by viewModel.viewState.collectAsState()
val viewEffects by viewModel.viewEffects.collectAsState(initial = null)
class MainCoroutineRule : TestWatcher() {
private val testDispatcher = TestCoroutineDispatcher()
override fun starting(description: Description?) {
Dispatchers.setMain(testDispatcher)
}
fun setup(setupBody: () -> Unit){
testDispatcher.pauseDispatcher()