Screenshoot Library Sample
FrogoLog (with line code)
// Function Log Debug
FrogoLog.d("Debug")
// Function Log Info
FrogoLog.i("Info")
// Function Log Verbose
FrogoLog.v("Verbose")
// Function Log Warn
FrogoLog.w("Warn")
// Function Log Error
FrogoLog.e("Error")
// Function Log Simple Debug without message params
FrogoLog.d()
FrogoLog (with line code and Toast)
// Function Log Debug (adding context params)
FrogoLog.d("Debug", this@MainActivity)
// Function Log Info (adding context params)
FrogoLog.i("Info", this@MainActivity)
// Function Log Verbose
FrogoLog.v("Verbose", this@MainActivity)
// Function Log Warn (adding context params)
FrogoLog.w("Warn", this@MainActivity)
// Function Log Error (adding context params)
FrogoLog.e("Error", this@MainActivity)
// Function Log Simple Debug without message params
FrogoLog.d(this@MainActivity)
FLog (without line code)
// Function Log Debug
FLog.d("Debug")
// Function Log Info
FLog.i("Info")
// Function Log Verbose
FLog.v("Verbose")
// Function Log Warn
FLog.w("Warn")
// Function Log Error
FLog.e("Error")
// Function Log Simple Debug without message params
FLog.d()
Flog (without line code with toast)
// Function Log Debug (adding context params)
FLog.d("Debug", this@MainActivity)
// Function Log Info (adding context params)
FLog.i("Info", this@MainActivity)
// Function Log Verbose
FLog.v("Verbose", this@MainActivity)
// Function Log Warn (adding context params)
FLog.w("Warn", this@MainActivity)
// Function Log Error (adding context params)
FLog.e("Error", this@MainActivity)
// Function Log Simple Debug without message params
FLog.d(this@MainActivity)
Result FrogoLog
FrogoNotification
- SDK for your notification problem to make easier developing android apps
- frogo-notification is under huge large development
- Notification with singleton method
- Simple and eazy to use
- With many feature
- Full documentation
- Custom Layout Notification
Screenshoot Sample
Simple Notification |
Stack Notification |
Custom Notification (1) |
Custom Notification (2) |
|
|
|
|
FrogoNotification.Inject(this) // Intialize for Context
.setChannelId(CHANNEL_ID) // Intialize for Channel ID
.setChannelName(CHANNEL_NAME) // Initialize for Channel Name
.setContentIntent(pendingIntent) // Initialize for Content Intent
.setSmallIcon(R.drawable.ic_frogo_notif) // Initialize for Small Icon
.setLargeIcon(R.drawable.ic_frogo_notif) // Initialize for Large Icon
.setContentTitle(resources.getString(R.string.content_title)) // Initialize for Content Title
.setContentText(resources.getString(R.string.content_text)) // Initialize for Content Text
.setSubText(resources.getString(R.string.subtext)) // Initialize for Sub Text
.setupAutoCancel() // Initialize for Auto Cancel
.build() // Build the Frogo Notification
.launch(NOTIFICATION_ID) // Notify the Frogo Notification
Simple Notification
FrogoNotification.Inject(this) // Intialize for Context
.setChannelId(CHANNEL_ID) // Intialize for Channel ID
.setChannelName(CHANNEL_NAME) // Initialize for Channel Name
.setContentIntent(pendingIntent) // Initialize for Content Intent
.setSmallIcon(R.drawable.ic_frogo_notif) // Initialize for Small Icon
.setLargeIcon(R.drawable.ic_frogo_notif) // Initialize for Large Icon
.setContentTitle(resources.getString(R.string.content_title)) // Initialize for Content Title
.setContentText(resources.getString(R.string.content_text)) // Initialize for Content Text
.setSubText(resources.getString(R.string.subtext)) // Initialize for Sub Text
.setupAutoCancel() // Initialize for Auto Cancel
.build() // Build the Frogo Notification
.launch(NOTIFICATION_ID) // Notify the Frogo Notification
Custom Layout (NEW FEATURE)
val collapsed = object : FrogoNotifCustomContentViewListener {
override fun setupCustomView(): Int {
return R.layout.notification_collapsed
}
override fun setupComponent(context: Context, customView: RemoteViews) {
customView.apply{
setTextViewText(R.id.text_view_collapsed_1, "Hello World!")
}
}
}
val expanded = object : FrogoNotifCustomContentViewListener {
override fun setupCustomView(): Int {
return R.layout.notification_expanded
}
override fun setupComponent(context: Context, customView: RemoteViews) {
customView.apply {
setImageViewResource(R.id.image_view_expanded, R.drawable.ic_android)
setOnClickPendingIntent(R.id.image_view_expanded, clickPendingIntent)
}
}
}
FrogoNotification.Inject(this) // Intialize for Context
.setChannelId(FrogoApp.CHANNEL_ID) // Intialize for Channel ID
.setChannelName(FrogoApp.CHANNEL_NAME) // Initialize for Channel Name
.setSmallIcon(R.drawable.ic_android) // Initialize for Small Icon
.setCustomContentView(collapsed)
.setCustomBigContentView(expanded)
.build() // Build the Frogo Notification
.launch(FrogoApp.NOTIFICATION_ID) // Notify the Frogo Notification
With Action Replay
FrogoNotification.Inject(this)
.setChannelId(CHANNEL_ID)
.setChannelName(CHANNEL_NAME as String)
.setSmallIcon(R.drawable.ic_frogo_notif)
.setContentTitle(getString(R.string.notif_title))
.setContentText(getString(R.string.notif_content))
.setupShowWhen()
.setupActionRemoteInput(object : FrogoNotifActionRemoteInputListener {
override fun setRemoteInputResultKey(): String {
return KEY_REPLY
}
override fun setRemoteInputLabel(): String {
return getString(R.string.notif_action_reply)
}
override fun setActionIcon(): Int {
return R.drawable.ic_frogo_send
}
override fun setActionTitle(): String {
return getString(R.string.notif_action_reply)
}
override fun setActionIntent(): PendingIntent? {
return getReplyPendingIntent()
}
override fun setAllowGeneratedReplies(): Boolean {
return true
}
})
.build()
.launch(mNotificationId)
With Inbox Style (Stack)
val frogoNotification = FrogoNotification.Inject(this)
.setChannelId(CHANNEL_ID)
.setChannelName(CHANNEL_NAME)
.setSmallIcon(R.drawable.ic_frogo_email)
.setGroup(GROUP_KEY_EMAILS)
.setContentIntent(pendingIntent)
.setupAutoCancel()
// Check if NotificationID is smaller than Max Notif
if (idNotification < MAX_NOTIFICATION) {
stackNotif[idNotification].message?.let {
frogoNotification
.setContentTitle("New Email from " + stackNotif[idNotification].sender)
.setContentText(it)
.setLargeIcon(R.drawable.ic_frogo_notif)
}
} else {
frogoNotification
.setContentTitle("$idNotification new emails")
.setContentText("[email protected]")
.setGroupSummary()
.setupInboxStyle(object : FrogoNotifInboxStyleListener {
override fun addLine1(): String {
return "New Email from " + stackNotif[idNotification].sender
}
override fun addLine2(): String {
return "New Email from " + stackNotif[idNotification - 1].sender
}
override fun setBigContentTitle(): String {
return "$idNotification new emails"
}
override fun setSummaryText(): String {
return "mail@frogobox"
}
})
}
frogoNotification
.build()
.launch(idNotification)
With Frogo Style
FrogoNotification.Inject(this) // Intialize for Context
.setSmallIcon(R.drawable.ic_frogo_notif) // Initialize for Small Icon
.setupWithFrogoStyle()
.build() // Build the Frogo Notification
.launch(NOTIFICATION_ID) // Notify the Frogo Notification
For Documentation
Colaborator
Very open to anyone, I'll write your name under this, please contribute by sending an email to me
- Mail To [email protected]
- Subject : Github _ [Github-Username-Account] _ [Language] _ [Repository-Name]
- Example : Github_amirisback_kotlin_admob-helper-implementation
Name Of Contribute
- Muhammad Faisal Amir
- Waiting List
- Waiting List
Waiting for your contribute
Attention !!!
- Please enjoy and don't forget fork and give a star
- Don't Forget Follow My Github Account
About This Project (release 👷🔧️👷♀️⛏)
- SDK for anything your problem to make easier developing android apps
- Available for android and desktop
- Privacy Policy Click Here
- License Click Here
ScreenShoot
Version Release
This Is Latest Release
$version_release = 1.0.8
What's New??
* SDK Android and Desktop *
* Adding Ext Function *
* Update: Fixing Bug RxJava Ext *
Download this project
Step 1. Add the JitPack repository to your build file (build.gradle : Project)
<Option 1> Groovy Gradle
// Add it in your root build.gradle at the end of repositories:
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
<Option 2> Kotlin DSL Gradle
// Add it in your root build.gradle.kts at the end of repositories:
allprojects {
repositories {
...
maven("https://jitpack.io")
}
}
Step 2. Add the dependency (build.gradle : Module)
#### <Option 1> Groovy Gradle
dependencies {
// library frogo-sdk
implementation 'com.github.frogobox:frogo-sdk:1.0.8'
// library frogo-sdk for desktop
implementation 'com.github.frogobox.frogo-sdk:frogocoresdk:1.0.8'
}
#### <Option 2> Kotlin DSL Gradle
dependencies {
// library frogo-sdk
implementation("com.github.frogobox:frogo-sdk:1.0.8")
// library frogo-sdk for desktop
implementation("com.github.frogobox.frogo-sdk:frogocoresdk:1.0.8")
}
Step 3. Function from this SDK
All Class SDK (android)
FrogoActivity
FrogoApplication
FrogoComposeActivity
FrogoFragment
FrogoFunc
FrogoMusic
FrogoMutableLiveData
FrogoNavigation
FrogoPagerHelper
FrogoPiracyActivity
FrogoPreference
FrogoSinglePreference
FrogoViewModel
All Class SDK (desktop & android)
FrogoApiClient
FrogoApiModel
FrogoApiObserver
FrogoConstant
FrogoDataResponse
FrogoDate
FrogoLocalObserver
FrogoStateResponse
IFrogoDate
FrogoActivity
fun setupDetailActivity(title: String)
fun setupChildFragment(frameId: Int, fragment: Fragment)
fun showToast(message: String)
fun setupEmptyView(view: View, isEmpty: Boolean)
fun setupProgressView(view: View, isProgress: Boolean)
fun checkExtra(extraKey: String): Boolean
fun <Model> FrogoFragmentNewInstance(
fragment: FrogoFragment<*>,
argumentKey: String,
extraDataResult: Model
)
fun isNetworkConnected(): Boolean
fun setupFullScreen()
fun setupHideSystemUI()
fun shareApp(packageName: String, appName: String)
fun rateApp(packageName: String)
FrogoFragment
fun setupChildFragment(frameId: Int, fragment: Fragment)
fun checkArgument(argsKey: String): Boolean
fun setupEmptyView(view: View, isEmpty: Boolean)
fun setupProgressView(view: View, isProgress: Boolean)
fun showToast(message: String)
fun <Model> frogoNewInstance(argsKey: String, data: Model)
Ext Function
FrogoRetrofitExt.kt
// Single Api Request
fun <T : Any> Call<T>.doApiRequest(callback: FrogoDataResponse<T>) {
callback.onShowProgress()
enqueue(object : Callback<T> {
override fun onResponse(call: Call<T>, response: Response<T>) {
response.body()?.let { callback.onSuccess(it) }
callback.onHideProgress()
}
override fun onFailure(call: Call<T>, t: Throwable) {
callback.onFailed(500, t.localizedMessage)
callback.onHideProgress()
}
})
}
FrogoRxJavaObservableExt.kt
// Single Api Request with scheduler
fun <T : Any> Observable<T>.doApiRequest(scheduler: Scheduler, callback: FrogoDataResponse<T>) {
subscribeOn(Schedulers.io())
.doOnSubscribe { callback.onShowProgress() }
.doOnTerminate { callback.onHideProgress() }
.observeOn(scheduler)
.subscribe(object : FrogoApiObserver<T>() {
override fun onSuccess(data: T) {
callback.onSuccess(data)
}
override fun onFailure(code: Int, errorMessage: String) {
callback.onFailed(code, errorMessage)
}
})
}
// -------------------------------------------------------------------------------------------------
// Single Api Request
fun <T : Any> Observable<T>.doApiRequest(callback: FrogoDataResponse<T>) {
doOnSubscribe { callback.onShowProgress() }
.doOnTerminate { callback.onHideProgress() }
.subscribe(object : FrogoApiObserver<T>() {
override fun onSuccess(data: T) {
callback.onSuccess(data)
}
override fun onFailure(code: Int, errorMessage: String) {
callback.onFailed(code, errorMessage)
}
})
}
FrogoContextActivityExt.kt
inline fun <reified ClassActivity> Context.singleStartActivity() {
FLog.d("Activity : ${ClassActivity::class.java.simpleName}")
startActivity(Intent(this, ClassActivity::class.java))
}
// -------------------------------------------------------------------------------------------------
inline fun <reified ClassActivity, reified Model> Context.singleStartActivity(
extraKey: String,
data: Model
) {
val intent = Intent(this, ClassActivity::class.java)
val extraData = Gson().toJson(data)
intent.putExtra(extraKey, extraData)
FLog.d("Activity : ${ClassActivity::class.java.simpleName}")
FLog.d("Data : Extra Data (${Model::class.java.simpleName}) : $extraData")
startActivity(intent)
}
// -------------------------------------------------------------------------------------------------
inline fun <reified Model> Activity.singleGetExtraData(extraKey: String): Model {
val extraIntent = intent.getStringExtra(extraKey)
return Gson().fromJson(extraIntent, Model::class.java)
}
// -------------------------------------------------------------------------------------------------
fun Context.singleStartActivityShareApp(subject: String, text: String) {
val intent = Intent(Intent.ACTION_SEND)
intent.type = "text/plain"
intent.putExtra(Intent.EXTRA_SUBJECT, subject)
intent.putExtra(Intent.EXTRA_TEXT, text)
FLog.d("$TAG : Subject Share App : $subject")
FLog.d("$TAG : Message Share App : $text")
startActivity(Intent.createChooser(intent, subject))
}
// -------------------------------------------------------------------------------------------------
fun Context.singleStartActivityOpenApp(url: String) {
FLog.d("$TAG : Url : $url")
startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(url)))
}
FrogoContextFragmentExt.kt
fun <Model> Fragment.singleNewInstance(argsKey: String, data: Model) {
val argsData = Gson().toJson(data)
val bundleArgs = Bundle().apply {
putString(argsKey, argsData)
}
this.arguments = bundleArgs
}
// -------------------------------------------------------------------------------------------------
inline fun <reified Model> Fragment.singleGetInstance(argsKey: String): Model {
val argsData = this.arguments?.getString(argsKey)
return Gson().fromJson(argsData, Model::class.java)
}
FrogoImageViewExt.kt
fun ImageView.glideLoad(data: Any?) {
FLog.d("$TAG : Params : $data")
FLog.d("$TAG : Glide Load Ext")
Glide.with(context).load(data).into(this)
}
FrogoViewExt.kt
fun View.visible() {
FLog.d("$TAG : View Visible")
visibility = View.VISIBLE
}
// -------------------------------------------------------------------------------------------------
fun View.gone() {
FLog.d("$TAG : View Gone")
visibility = View.GONE
}
// -------------------------------------------------------------------------------------------------
fun View.invisible() {
FLog.d("$TAG : View Invisible")
visibility = View.INVISIBLE
}
// -------------------------------------------------------------------------------------------------
fun View.progressViewHandle(isProgressState: Boolean) {
FLog.d("$TAG : isProgressState >> $isProgressState")
if (isProgressState) {
visible()
} else {
gone()
}
}
// -------------------------------------------------------------------------------------------------
fun View.emptyViewHandle(isEmptyState: Boolean) {
FLog.d("$TAG : isEmptyState >> $isEmptyState")
if (isEmptyState) {
visible()
} else {
gone()
}
}
FrogoContextExt.kt
fun Context.getAppVersionCode(): Int? {
try {
return packageManager?.getPackageInfo(packageName, 0)
?.let { PackageInfoCompat.getLongVersionCode(it).toInt() }
} catch (ex: Exception) {
FLog.e("$TAG : ${ex.message.orEmpty()}")
}
return null
}
// -------------------------------------------------------------------------------------------------
fun Context.showToast(
message: String,
duration: Int = Toast.LENGTH_SHORT
) {
Toast.makeText(this, message, duration).show()
}
// -------------------------------------------------------------------------------------------------
fun Context.hasCameraPermission(): Boolean =
ContextCompat.checkSelfPermission(
this,
Manifest.permission.CAMERA
) == PackageManager.PERMISSION_GRANTED
// -------------------------------------------------------------------------------------------------
fun Context.hasReadExtStoragePermission(): Boolean {
return ContextCompat.checkSelfPermission(
this,
Manifest.permission.READ_EXTERNAL_STORAGE
) == PackageManager.PERMISSION_GRANTED
}
fun Context.hasWriteExtStoragePermission(): Boolean {
return ContextCompat.checkSelfPermission(
this,
Manifest.permission.WRITE_EXTERNAL_STORAGE
) == PackageManager.PERMISSION_GRANTED
}
Added Function
Click for detail !!!
FrogoLog
- SDK for your Log problem to make easier developing android apps
- frogo-log is Long Term Service
- Line number show
- Toast for easy develop and debug
Screenshoot Result
SS 1 |
SS 2 |
SS 3 |
SS 4 |
|
|
|
|
Screenshoot Library Sample
FrogoLog (with line code)
// Function Log Debug
FrogoLog.d("Debug")
// Function Log Info
FrogoLog.i("Info")
// Function Log Verbose
FrogoLog.v("Verbose")
// Function Log Warn
FrogoLog.w("Warn")
// Function Log Error
FrogoLog.e("Error")
// Function Log Simple Debug without message params
FrogoLog.d()
FrogoLog (with line code and Toast)
// Function Log Debug (adding context params)
FrogoLog.d("Debug", this@MainActivity)
// Function Log Info (adding context params)
FrogoLog.i("Info", this@MainActivity)
// Function Log Verbose
FrogoLog.v("Verbose", this@MainActivity)
// Function Log Warn (adding context params)
FrogoLog.w("Warn", this@MainActivity)
// Function Log Error (adding context params)
FrogoLog.e("Error", this@MainActivity)
// Function Log Simple Debug without message params
FrogoLog.d(this@MainActivity)
FLog (without line code)
// Function Log Debug
FLog.d("Debug")
// Function Log Info
FLog.i("Info")
// Function Log Verbose
FLog.v("Verbose")
// Function Log Warn
FLog.w("Warn")
// Function Log Error
FLog.e("Error")
// Function Log Simple Debug without message params
FLog.d()
Flog (without line code with toast)
// Function Log Debug (adding context params)
FLog.d("Debug", this@MainActivity)
// Function Log Info (adding context params)
FLog.i("Info", this@MainActivity)
// Function Log Verbose
FLog.v("Verbose", this@MainActivity)
// Function Log Warn (adding context params)
FLog.w("Warn", this@MainActivity)
// Function Log Error (adding context params)
FLog.e("Error", this@MainActivity)
// Function Log Simple Debug without message params
FLog.d(this@MainActivity)
Result FrogoLog
FrogoNotification
- SDK for your notification problem to make easier developing android apps
- frogo-notification is under huge large development
- Notification with singleton method
- Simple and eazy to use
- With many feature
- Full documentation
- Custom Layout Notification
Screenshoot Sample
Simple Notification |
Stack Notification |
Custom Notification (1) |
Custom Notification (2) |
|
|
|
|
FrogoNotification.Inject(this) // Intialize for Context
.setChannelId(CHANNEL_ID) // Intialize for Channel ID
.setChannelName(CHANNEL_NAME) // Initialize for Channel Name
.setContentIntent(pendingIntent) // Initialize for Content Intent
.setSmallIcon(R.drawable.ic_frogo_notif) // Initialize for Small Icon
.setLargeIcon(R.drawable.ic_frogo_notif) // Initialize for Large Icon
.setContentTitle(resources.getString(R.string.content_title)) // Initialize for Content Title
.setContentText(resources.getString(R.string.content_text)) // Initialize for Content Text
.setSubText(resources.getString(R.string.subtext)) // Initialize for Sub Text
.setupAutoCancel() // Initialize for Auto Cancel
.build() // Build the Frogo Notification
.launch(NOTIFICATION_ID) // Notify the Frogo Notification
Simple Notification
FrogoNotification.Inject(this) // Intialize for Context
.setChannelId(CHANNEL_ID) // Intialize for Channel ID
.setChannelName(CHANNEL_NAME) // Initialize for Channel Name
.setContentIntent(pendingIntent) // Initialize for Content Intent
.setSmallIcon(R.drawable.ic_frogo_notif) // Initialize for Small Icon
.setLargeIcon(R.drawable.ic_frogo_notif) // Initialize for Large Icon
.setContentTitle(resources.getString(R.string.content_title)) // Initialize for Content Title
.setContentText(resources.getString(R.string.content_text)) // Initialize for Content Text
.setSubText(resources.getString(R.string.subtext)) // Initialize for Sub Text
.setupAutoCancel() // Initialize for Auto Cancel
.build() // Build the Frogo Notification
.launch(NOTIFICATION_ID) // Notify the Frogo Notification
Custom Layout (NEW FEATURE)
val collapsed = object : FrogoNotifCustomContentViewListener {
override fun setupCustomView(): Int {
return R.layout.notification_collapsed
}
override fun setupComponent(context: Context, customView: RemoteViews) {
customView.apply{
setTextViewText(R.id.text_view_collapsed_1, "Hello World!")
}
}
}
val expanded = object : FrogoNotifCustomContentViewListener {
override fun setupCustomView(): Int {
return R.layout.notification_expanded
}
override fun setupComponent(context: Context, customView: RemoteViews) {
customView.apply {
setImageViewResource(R.id.image_view_expanded, R.drawable.ic_android)
setOnClickPendingIntent(R.id.image_view_expanded, clickPendingIntent)
}
}
}
FrogoNotification.Inject(this) // Intialize for Context
.setChannelId(FrogoApp.CHANNEL_ID) // Intialize for Channel ID
.setChannelName(FrogoApp.CHANNEL_NAME) // Initialize for Channel Name
.setSmallIcon(R.drawable.ic_android) // Initialize for Small Icon
.setCustomContentView(collapsed)
.setCustomBigContentView(expanded)
.build() // Build the Frogo Notification
.launch(FrogoApp.NOTIFICATION_ID) // Notify the Frogo Notification
With Action Replay
FrogoNotification.Inject(this)
.setChannelId(CHANNEL_ID)
.setChannelName(CHANNEL_NAME as String)
.setSmallIcon(R.drawable.ic_frogo_notif)
.setContentTitle(getString(R.string.notif_title))
.setContentText(getString(R.string.notif_content))
.setupShowWhen()
.setupActionRemoteInput(object : FrogoNotifActionRemoteInputListener {
override fun setRemoteInputResultKey(): String {
return KEY_REPLY
}
override fun setRemoteInputLabel(): String {
return getString(R.string.notif_action_reply)
}
override fun setActionIcon(): Int {
return R.drawable.ic_frogo_send
}
override fun setActionTitle(): String {
return getString(R.string.notif_action_reply)
}
override fun setActionIntent(): PendingIntent? {
return getReplyPendingIntent()
}
override fun setAllowGeneratedReplies(): Boolean {
return true
}
})
.build()
.launch(mNotificationId)
With Inbox Style (Stack)
val frogoNotification = FrogoNotification.Inject(this)
.setChannelId(CHANNEL_ID)
.setChannelName(CHANNEL_NAME)
.setSmallIcon(R.drawable.ic_frogo_email)
.setGroup(GROUP_KEY_EMAILS)
.setContentIntent(pendingIntent)
.setupAutoCancel()
// Check if NotificationID is smaller than Max Notif
if (idNotification < MAX_NOTIFICATION) {
stackNotif[idNotification].message?.let {
frogoNotification
.setContentTitle("New Email from " + stackNotif[idNotification].sender)
.setContentText(it)
.setLargeIcon(R.drawable.ic_frogo_notif)
}
} else {
frogoNotification
.setContentTitle("$idNotification new emails")
.setContentText("[email protected]")
.setGroupSummary()
.setupInboxStyle(object : FrogoNotifInboxStyleListener {
override fun addLine1(): String {
return "New Email from " + stackNotif[idNotification].sender
}
override fun addLine2(): String {
return "New Email from " + stackNotif[idNotification - 1].sender
}
override fun setBigContentTitle(): String {
return "$idNotification new emails"
}
override fun setSummaryText(): String {
return "mail@frogobox"
}
})
}
frogoNotification
.build()
.launch(idNotification)
With Frogo Style
FrogoNotification.Inject(this) // Intialize for Context
.setSmallIcon(R.drawable.ic_frogo_notif) // Initialize for Small Icon
.setupWithFrogoStyle()
.build() // Build the Frogo Notification
.launch(NOTIFICATION_ID) // Notify the Frogo Notification
For Documentation
Colaborator
Very open to anyone, I'll write your name under this, please contribute by sending an email to me
- Mail To [email protected]
- Subject : Github _ [Github-Username-Account] _ [Language] _ [Repository-Name]
- Example : Github_amirisback_kotlin_admob-helper-implementation
Name Of Contribute
- Muhammad Faisal Amir
- Waiting List
- Waiting List
Waiting for your contribute
Attention !!!
- Please enjoy and don't forget fork and give a star
- Don't Forget Follow My Github Account
Source code(tar.gz)
Source code(zip)
1.0.7(May 30, 2022)
About This Project (release 👷🔧️👷♀️⛏)
- SDK for anything your problem to make easier developing android apps
- Available for android and desktop
- Privacy Policy Click Here
- License Click Here
ScreenShoot
Version Release
This Is Latest Release
$version_release = 1.0.7
What's New??
* SDK Android and Desktop *
* Adding Ext Function *
* Update: Fixing Bug RxJava Ext *
Download this project
Step 1. Add the JitPack repository to your build file (build.gradle : Project)
<Option 1> Groovy Gradle
// Add it in your root build.gradle at the end of repositories:
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
<Option 2> Kotlin DSL Gradle
// Add it in your root build.gradle.kts at the end of repositories:
allprojects {
repositories {
...
maven("https://jitpack.io")
}
}
Step 2. Add the dependency (build.gradle : Module)
#### <Option 1> Groovy Gradle
dependencies {
// library frogo-sdk
implementation 'com.github.frogobox:frogo-sdk:1.0.7'
// library frogo-sdk for desktop
implementation 'com.github.frogobox.frogo-sdk:frogocoresdk:1.0.7'
}
#### <Option 2> Kotlin DSL Gradle
dependencies {
// library frogo-sdk
implementation("com.github.frogobox:frogo-sdk:1.0.7")
// library frogo-sdk for desktop
implementation("com.github.frogobox.frogo-sdk:frogocoresdk:1.0.7")
}
Step 3. Function from this SDK
All Class SDK (android)
FrogoActivity
FrogoApplication
FrogoComposeActivity
FrogoFragment
FrogoFunc
FrogoMusic
FrogoMutableLiveData
FrogoNavigation
FrogoPagerHelper
FrogoPiracyActivity
FrogoPreference
FrogoSinglePreference
FrogoViewModel
All Class SDK (desktop & android)
FrogoApiClient
FrogoApiModel
FrogoApiObserver
FrogoConstant
FrogoDataResponse
FrogoDate
FrogoLocalObserver
FrogoStateResponse
IFrogoDate
FrogoActivity
fun setupDetailActivity(title: String)
fun setupChildFragment(frameId: Int, fragment: Fragment)
fun showToast(message: String)
fun setupEmptyView(view: View, isEmpty: Boolean)
fun setupProgressView(view: View, isProgress: Boolean)
fun checkExtra(extraKey: String): Boolean
fun <Model> FrogoFragmentNewInstance(
fragment: FrogoFragment<*>,
argumentKey: String,
extraDataResult: Model
)
fun isNetworkConnected(): Boolean
fun setupFullScreen()
fun setupHideSystemUI()
fun shareApp(packageName: String, appName: String)
fun rateApp(packageName: String)
FrogoFragment
fun setupChildFragment(frameId: Int, fragment: Fragment)
fun checkArgument(argsKey: String): Boolean
fun setupEmptyView(view: View, isEmpty: Boolean)
fun setupProgressView(view: View, isProgress: Boolean)
fun showToast(message: String)
fun <Model> frogoNewInstance(argsKey: String, data: Model)
Ext Function
FrogoRetrofitExt.kt
// Single Api Request
fun <T : Any> Call<T>.doApiRequest(callback: FrogoDataResponse<T>) {
callback.onShowProgress()
enqueue(object : Callback<T> {
override fun onResponse(call: Call<T>, response: Response<T>) {
response.body()?.let { callback.onSuccess(it) }
callback.onHideProgress()
}
override fun onFailure(call: Call<T>, t: Throwable) {
callback.onFailed(500, t.localizedMessage)
callback.onHideProgress()
}
})
}
FrogoRxJavaObservableExt.kt
// Single Api Request with scheduler
fun <T : Any> Observable<T>.doApiRequest(scheduler: Scheduler, callback: FrogoDataResponse<T>) {
subscribeOn(Schedulers.io())
.doOnSubscribe { callback.onShowProgress() }
.doOnTerminate { callback.onHideProgress() }
.observeOn(scheduler)
.subscribe(object : FrogoApiObserver<T>() {
override fun onSuccess(data: T) {
callback.onSuccess(data)
}
override fun onFailure(code: Int, errorMessage: String) {
callback.onFailed(code, errorMessage)
}
})
}
// -------------------------------------------------------------------------------------------------
// Single Api Request
fun <T : Any> Observable<T>.doApiRequest(callback: FrogoDataResponse<T>) {
doOnSubscribe { callback.onShowProgress() }
.doOnTerminate { callback.onHideProgress() }
.subscribe(object : FrogoApiObserver<T>() {
override fun onSuccess(data: T) {
callback.onSuccess(data)
}
override fun onFailure(code: Int, errorMessage: String) {
callback.onFailed(code, errorMessage)
}
})
}
FrogoContextActivityExt.kt
inline fun <reified ClassActivity> Context.singleStartActivity() {
FLog.d("Activity : ${ClassActivity::class.java.simpleName}")
startActivity(Intent(this, ClassActivity::class.java))
}
// -------------------------------------------------------------------------------------------------
inline fun <reified ClassActivity, reified Model> Context.singleStartActivity(
extraKey: String,
data: Model
) {
val intent = Intent(this, ClassActivity::class.java)
val extraData = Gson().toJson(data)
intent.putExtra(extraKey, extraData)
FLog.d("Activity : ${ClassActivity::class.java.simpleName}")
FLog.d("Data : Extra Data (${Model::class.java.simpleName}) : $extraData")
startActivity(intent)
}
// -------------------------------------------------------------------------------------------------
inline fun <reified Model> Activity.singleGetExtraData(extraKey: String): Model {
val extraIntent = intent.getStringExtra(extraKey)
return Gson().fromJson(extraIntent, Model::class.java)
}
// -------------------------------------------------------------------------------------------------
fun Context.singleStartActivityShareApp(subject: String, text: String) {
val intent = Intent(Intent.ACTION_SEND)
intent.type = "text/plain"
intent.putExtra(Intent.EXTRA_SUBJECT, subject)
intent.putExtra(Intent.EXTRA_TEXT, text)
FLog.d("$TAG : Subject Share App : $subject")
FLog.d("$TAG : Message Share App : $text")
startActivity(Intent.createChooser(intent, subject))
}
// -------------------------------------------------------------------------------------------------
fun Context.singleStartActivityOpenApp(url: String) {
FLog.d("$TAG : Url : $url")
startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(url)))
}
FrogoContextFragmentExt.kt
fun <Model> Fragment.singleNewInstance(argsKey: String, data: Model) {
val argsData = Gson().toJson(data)
val bundleArgs = Bundle().apply {
putString(argsKey, argsData)
}
this.arguments = bundleArgs
}
// -------------------------------------------------------------------------------------------------
inline fun <reified Model> Fragment.singleGetInstance(argsKey: String): Model {
val argsData = this.arguments?.getString(argsKey)
return Gson().fromJson(argsData, Model::class.java)
}
FrogoImageViewExt.kt
fun ImageView.glideLoad(data: Any?) {
FLog.d("$TAG : Params : $data")
FLog.d("$TAG : Glide Load Ext")
Glide.with(context).load(data).into(this)
}
FrogoViewExt.kt
fun View.visible() {
FLog.d("$TAG : View Visible")
visibility = View.VISIBLE
}
// -------------------------------------------------------------------------------------------------
fun View.gone() {
FLog.d("$TAG : View Gone")
visibility = View.GONE
}
// -------------------------------------------------------------------------------------------------
fun View.invisible() {
FLog.d("$TAG : View Invisible")
visibility = View.INVISIBLE
}
// -------------------------------------------------------------------------------------------------
fun View.progressViewHandle(isProgressState: Boolean) {
FLog.d("$TAG : isProgressState >> $isProgressState")
if (isProgressState) {
visible()
} else {
gone()
}
}
// -------------------------------------------------------------------------------------------------
fun View.emptyViewHandle(isEmptyState: Boolean) {
FLog.d("$TAG : isEmptyState >> $isEmptyState")
if (isEmptyState) {
visible()
} else {
gone()
}
}
FrogoContextExt.kt
fun Context.getAppVersionCode(): Int? {
try {
return packageManager?.getPackageInfo(packageName, 0)
?.let { PackageInfoCompat.getLongVersionCode(it).toInt() }
} catch (ex: Exception) {
FLog.e("$TAG : ${ex.message.orEmpty()}")
}
return null
}
// -------------------------------------------------------------------------------------------------
fun Context.showToast(
message: String,
duration: Int = Toast.LENGTH_SHORT
) {
Toast.makeText(this, message, duration).show()
}
// -------------------------------------------------------------------------------------------------
fun Context.hasCameraPermission(): Boolean =
ContextCompat.checkSelfPermission(
this,
Manifest.permission.CAMERA
) == PackageManager.PERMISSION_GRANTED
// -------------------------------------------------------------------------------------------------
fun Context.hasReadExtStoragePermission(): Boolean {
return ContextCompat.checkSelfPermission(
this,
Manifest.permission.READ_EXTERNAL_STORAGE
) == PackageManager.PERMISSION_GRANTED
}
fun Context.hasWriteExtStoragePermission(): Boolean {
return ContextCompat.checkSelfPermission(
this,
Manifest.permission.WRITE_EXTERNAL_STORAGE
) == PackageManager.PERMISSION_GRANTED
}
Added Function
Click for detail !!!
FrogoLog
- SDK for your Log problem to make easier developing android apps
- frogo-log is Long Term Service
- Line number show
- Toast for easy develop and debug
Screenshoot Result
SS 1 |
SS 2 |
SS 3 |
SS 4 |
|
|
|
|
Screenshoot Library Sample
FrogoLog (with line code)
// Function Log Debug
FrogoLog.d("Debug")
// Function Log Info
FrogoLog.i("Info")
// Function Log Verbose
FrogoLog.v("Verbose")
// Function Log Warn
FrogoLog.w("Warn")
// Function Log Error
FrogoLog.e("Error")
// Function Log Simple Debug without message params
FrogoLog.d()
FrogoLog (with line code and Toast)
// Function Log Debug (adding context params)
FrogoLog.d("Debug", this@MainActivity)
// Function Log Info (adding context params)
FrogoLog.i("Info", this@MainActivity)
// Function Log Verbose
FrogoLog.v("Verbose", this@MainActivity)
// Function Log Warn (adding context params)
FrogoLog.w("Warn", this@MainActivity)
// Function Log Error (adding context params)
FrogoLog.e("Error", this@MainActivity)
// Function Log Simple Debug without message params
FrogoLog.d(this@MainActivity)
FLog (without line code)
// Function Log Debug
FLog.d("Debug")
// Function Log Info
FLog.i("Info")
// Function Log Verbose
FLog.v("Verbose")
// Function Log Warn
FLog.w("Warn")
// Function Log Error
FLog.e("Error")
// Function Log Simple Debug without message params
FLog.d()
Flog (without line code with toast)
// Function Log Debug (adding context params)
FLog.d("Debug", this@MainActivity)
// Function Log Info (adding context params)
FLog.i("Info", this@MainActivity)
// Function Log Verbose
FLog.v("Verbose", this@MainActivity)
// Function Log Warn (adding context params)
FLog.w("Warn", this@MainActivity)
// Function Log Error (adding context params)
FLog.e("Error", this@MainActivity)
// Function Log Simple Debug without message params
FLog.d(this@MainActivity)
Result FrogoLog
FrogoNotification
- SDK for your notification problem to make easier developing android apps
- frogo-notification is under huge large development
- Notification with singleton method
- Simple and eazy to use
- With many feature
- Full documentation
- Custom Layout Notification
Screenshoot Sample
Simple Notification |
Stack Notification |
Custom Notification (1) |
Custom Notification (2) |
|
|
|
|
FrogoNotification.Inject(this) // Intialize for Context
.setChannelId(CHANNEL_ID) // Intialize for Channel ID
.setChannelName(CHANNEL_NAME) // Initialize for Channel Name
.setContentIntent(pendingIntent) // Initialize for Content Intent
.setSmallIcon(R.drawable.ic_frogo_notif) // Initialize for Small Icon
.setLargeIcon(R.drawable.ic_frogo_notif) // Initialize for Large Icon
.setContentTitle(resources.getString(R.string.content_title)) // Initialize for Content Title
.setContentText(resources.getString(R.string.content_text)) // Initialize for Content Text
.setSubText(resources.getString(R.string.subtext)) // Initialize for Sub Text
.setupAutoCancel() // Initialize for Auto Cancel
.build() // Build the Frogo Notification
.launch(NOTIFICATION_ID) // Notify the Frogo Notification
Simple Notification
FrogoNotification.Inject(this) // Intialize for Context
.setChannelId(CHANNEL_ID) // Intialize for Channel ID
.setChannelName(CHANNEL_NAME) // Initialize for Channel Name
.setContentIntent(pendingIntent) // Initialize for Content Intent
.setSmallIcon(R.drawable.ic_frogo_notif) // Initialize for Small Icon
.setLargeIcon(R.drawable.ic_frogo_notif) // Initialize for Large Icon
.setContentTitle(resources.getString(R.string.content_title)) // Initialize for Content Title
.setContentText(resources.getString(R.string.content_text)) // Initialize for Content Text
.setSubText(resources.getString(R.string.subtext)) // Initialize for Sub Text
.setupAutoCancel() // Initialize for Auto Cancel
.build() // Build the Frogo Notification
.launch(NOTIFICATION_ID) // Notify the Frogo Notification
Custom Layout (NEW FEATURE)
val collapsed = object : FrogoNotifCustomContentViewListener {
override fun setupCustomView(): Int {
return R.layout.notification_collapsed
}
override fun setupComponent(context: Context, customView: RemoteViews) {
customView.apply{
setTextViewText(R.id.text_view_collapsed_1, "Hello World!")
}
}
}
val expanded = object : FrogoNotifCustomContentViewListener {
override fun setupCustomView(): Int {
return R.layout.notification_expanded
}
override fun setupComponent(context: Context, customView: RemoteViews) {
customView.apply {
setImageViewResource(R.id.image_view_expanded, R.drawable.ic_android)
setOnClickPendingIntent(R.id.image_view_expanded, clickPendingIntent)
}
}
}
FrogoNotification.Inject(this) // Intialize for Context
.setChannelId(FrogoApp.CHANNEL_ID) // Intialize for Channel ID
.setChannelName(FrogoApp.CHANNEL_NAME) // Initialize for Channel Name
.setSmallIcon(R.drawable.ic_android) // Initialize for Small Icon
.setCustomContentView(collapsed)
.setCustomBigContentView(expanded)
.build() // Build the Frogo Notification
.launch(FrogoApp.NOTIFICATION_ID) // Notify the Frogo Notification
With Action Replay
FrogoNotification.Inject(this)
.setChannelId(CHANNEL_ID)
.setChannelName(CHANNEL_NAME as String)
.setSmallIcon(R.drawable.ic_frogo_notif)
.setContentTitle(getString(R.string.notif_title))
.setContentText(getString(R.string.notif_content))
.setupShowWhen()
.setupActionRemoteInput(object : FrogoNotifActionRemoteInputListener {
override fun setRemoteInputResultKey(): String {
return KEY_REPLY
}
override fun setRemoteInputLabel(): String {
return getString(R.string.notif_action_reply)
}
override fun setActionIcon(): Int {
return R.drawable.ic_frogo_send
}
override fun setActionTitle(): String {
return getString(R.string.notif_action_reply)
}
override fun setActionIntent(): PendingIntent? {
return getReplyPendingIntent()
}
override fun setAllowGeneratedReplies(): Boolean {
return true
}
})
.build()
.launch(mNotificationId)
With Inbox Style (Stack)
val frogoNotification = FrogoNotification.Inject(this)
.setChannelId(CHANNEL_ID)
.setChannelName(CHANNEL_NAME)
.setSmallIcon(R.drawable.ic_frogo_email)
.setGroup(GROUP_KEY_EMAILS)
.setContentIntent(pendingIntent)
.setupAutoCancel()
// Check if NotificationID is smaller than Max Notif
if (idNotification < MAX_NOTIFICATION) {
stackNotif[idNotification].message?.let {
frogoNotification
.setContentTitle("New Email from " + stackNotif[idNotification].sender)
.setContentText(it)
.setLargeIcon(R.drawable.ic_frogo_notif)
}
} else {
frogoNotification
.setContentTitle("$idNotification new emails")
.setContentText("[email protected]")
.setGroupSummary()
.setupInboxStyle(object : FrogoNotifInboxStyleListener {
override fun addLine1(): String {
return "New Email from " + stackNotif[idNotification].sender
}
override fun addLine2(): String {
return "New Email from " + stackNotif[idNotification - 1].sender
}
override fun setBigContentTitle(): String {
return "$idNotification new emails"
}
override fun setSummaryText(): String {
return "mail@frogobox"
}
})
}
frogoNotification
.build()
.launch(idNotification)
With Frogo Style
FrogoNotification.Inject(this) // Intialize for Context
.setSmallIcon(R.drawable.ic_frogo_notif) // Initialize for Small Icon
.setupWithFrogoStyle()
.build() // Build the Frogo Notification
.launch(NOTIFICATION_ID) // Notify the Frogo Notification
For Documentation
Colaborator
Very open to anyone, I'll write your name under this, please contribute by sending an email to me
- Mail To [email protected]
- Subject : Github _ [Github-Username-Account] _ [Language] _ [Repository-Name]
- Example : Github_amirisback_kotlin_admob-helper-implementation
Name Of Contribute
- Muhammad Faisal Amir
- Waiting List
- Waiting List
Waiting for your contribute
Attention !!!
- Please enjoy and don't forget fork and give a star
- Don't Forget Follow My Github Account
Source code(tar.gz)
Source code(zip)
1.0.6(May 11, 2022)
About This Project (release 👷🔧️👷♀️⛏)
- SDK for anything your problem to make easier developing android apps
- Available for android and desktop
- Privacy Policy Click Here
- License Click Here
ScreenShoot
Version Release
This Is Latest Release
$version_release = 1.0.6
What's New??
* SDK Android and Desktop *
* Adding Ext Function *
* Update: Fixing Bug RxJava Ext *
Download this project
Step 1. Add the JitPack repository to your build file (build.gradle : Project)
<Option 1> Groovy Gradle
// Add it in your root build.gradle at the end of repositories:
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
<Option 2> Kotlin DSL Gradle
// Add it in your root build.gradle.kts at the end of repositories:
allprojects {
repositories {
...
maven("https://jitpack.io")
}
}
Step 2. Add the dependency (build.gradle : Module)
#### <Option 1> Groovy Gradle
dependencies {
// library frogo-sdk
implementation 'com.github.frogobox:frogo-sdk:1.0.6'
// library frogo-sdk for desktop
implementation 'com.github.frogobox.frogo-sdk:frogocoresdk:1.0.6'
}
#### <Option 2> Kotlin DSL Gradle
dependencies {
// library frogo-sdk
implementation("com.github.frogobox:frogo-sdk:1.0.6")
// library frogo-sdk for desktop
implementation("com.github.frogobox.frogo-sdk:frogocoresdk:1.0.6")
}
Step 3. Function from this SDK
All Class SDK (android)
FrogoActivity
FrogoApplication
FrogoComposeActivity
FrogoFragment
FrogoFunc
FrogoMusic
FrogoMutableLiveData
FrogoNavigation
FrogoPagerHelper
FrogoPiracyActivity
FrogoPreference
FrogoSinglePreference
FrogoViewModel
All Class SDK (desktop & android)
FrogoApiClient
FrogoApiModel
FrogoApiObserver
FrogoConstant
FrogoDataResponse
FrogoDate
FrogoLocalObserver
FrogoStateResponse
IFrogoDate
FrogoActivity
fun setupDetailActivity(title: String)
fun setupChildFragment(frameId: Int, fragment: Fragment)
fun showToast(message: String)
fun setupEmptyView(view: View, isEmpty: Boolean)
fun setupProgressView(view: View, isProgress: Boolean)
fun checkExtra(extraKey: String): Boolean
fun <Model> FrogoFragmentNewInstance(
fragment: FrogoFragment<*>,
argumentKey: String,
extraDataResult: Model
)
fun isNetworkConnected(): Boolean
fun setupFullScreen()
fun setupHideSystemUI()
fun shareApp(packageName: String, appName: String)
fun rateApp(packageName: String)
FrogoFragment
fun setupChildFragment(frameId: Int, fragment: Fragment)
fun checkArgument(argsKey: String): Boolean
fun setupEmptyView(view: View, isEmpty: Boolean)
fun setupProgressView(view: View, isProgress: Boolean)
fun showToast(message: String)
fun <Model> frogoNewInstance(argsKey: String, data: Model)
Ext Function
FrogoRetrofitExt.kt
// Single Api Request
fun <T : Any> Call<T>.doApiRequest(callback: FrogoDataResponse<T>) {
callback.onShowProgress()
enqueue(object : Callback<T> {
override fun onResponse(call: Call<T>, response: Response<T>) {
response.body()?.let { callback.onSuccess(it) }
callback.onHideProgress()
}
override fun onFailure(call: Call<T>, t: Throwable) {
callback.onFailed(500, t.localizedMessage)
callback.onHideProgress()
}
})
}
FrogoRxJavaObservableExt.kt
// Single Api Request with scheduler
fun <T : Any> Observable<T>.doApiRequest(scheduler: Scheduler, callback: FrogoDataResponse<T>) {
subscribeOn(Schedulers.io())
.doOnSubscribe { callback.onShowProgress() }
.doOnTerminate { callback.onHideProgress() }
.observeOn(scheduler)
.subscribe(object : FrogoApiObserver<T>() {
override fun onSuccess(data: T) {
callback.onSuccess(data)
}
override fun onFailure(code: Int, errorMessage: String) {
callback.onFailed(code, errorMessage)
}
})
}
// -------------------------------------------------------------------------------------------------
// Single Api Request
fun <T : Any> Observable<T>.doApiRequest(callback: FrogoDataResponse<T>) {
doOnSubscribe { callback.onShowProgress() }
.doOnTerminate { callback.onHideProgress() }
.subscribe(object : FrogoApiObserver<T>() {
override fun onSuccess(data: T) {
callback.onSuccess(data)
}
override fun onFailure(code: Int, errorMessage: String) {
callback.onFailed(code, errorMessage)
}
})
}
FrogoContextActivityExt.kt
inline fun <reified ClassActivity> Context.singleStartActivity() {
FLog.d("Activity : ${ClassActivity::class.java.simpleName}")
startActivity(Intent(this, ClassActivity::class.java))
}
// -------------------------------------------------------------------------------------------------
inline fun <reified ClassActivity, reified Model> Context.singleStartActivity(
extraKey: String,
data: Model
) {
val intent = Intent(this, ClassActivity::class.java)
val extraData = Gson().toJson(data)
intent.putExtra(extraKey, extraData)
FLog.d("Activity : ${ClassActivity::class.java.simpleName}")
FLog.d("Data : Extra Data (${Model::class.java.simpleName}) : $extraData")
startActivity(intent)
}
// -------------------------------------------------------------------------------------------------
inline fun <reified Model> Activity.singleGetExtraData(extraKey: String): Model {
val extraIntent = intent.getStringExtra(extraKey)
return Gson().fromJson(extraIntent, Model::class.java)
}
// -------------------------------------------------------------------------------------------------
fun Context.singleStartActivityShareApp(subject: String, text: String) {
val intent = Intent(Intent.ACTION_SEND)
intent.type = "text/plain"
intent.putExtra(Intent.EXTRA_SUBJECT, subject)
intent.putExtra(Intent.EXTRA_TEXT, text)
FLog.d("$TAG : Subject Share App : $subject")
FLog.d("$TAG : Message Share App : $text")
startActivity(Intent.createChooser(intent, subject))
}
// -------------------------------------------------------------------------------------------------
fun Context.singleStartActivityOpenApp(url: String) {
FLog.d("$TAG : Url : $url")
startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(url)))
}
FrogoContextFragmentExt.kt
fun <Model> Fragment.singleNewInstance(argsKey: String, data: Model) {
val argsData = Gson().toJson(data)
val bundleArgs = Bundle().apply {
putString(argsKey, argsData)
}
this.arguments = bundleArgs
}
// -------------------------------------------------------------------------------------------------
inline fun <reified Model> Fragment.singleGetInstance(argsKey: String): Model {
val argsData = this.arguments?.getString(argsKey)
return Gson().fromJson(argsData, Model::class.java)
}
FrogoImageViewExt.kt
fun ImageView.glideLoad(data: Any?) {
FLog.d("$TAG : Params : $data")
FLog.d("$TAG : Glide Load Ext")
Glide.with(context).load(data).into(this)
}
FrogoViewExt.kt
fun View.visible() {
FLog.d("$TAG : View Visible")
visibility = View.VISIBLE
}
// -------------------------------------------------------------------------------------------------
fun View.gone() {
FLog.d("$TAG : View Gone")
visibility = View.GONE
}
// -------------------------------------------------------------------------------------------------
fun View.invisible() {
FLog.d("$TAG : View Invisible")
visibility = View.INVISIBLE
}
// -------------------------------------------------------------------------------------------------
fun View.progressViewHandle(isProgressState: Boolean) {
FLog.d("$TAG : isProgressState >> $isProgressState")
if (isProgressState) {
visible()
} else {
gone()
}
}
// -------------------------------------------------------------------------------------------------
fun View.emptyViewHandle(isEmptyState: Boolean) {
FLog.d("$TAG : isEmptyState >> $isEmptyState")
if (isEmptyState) {
visible()
} else {
gone()
}
}
FrogoContextExt.kt
fun Context.getAppVersionCode(): Int? {
try {
return packageManager?.getPackageInfo(packageName, 0)
?.let { PackageInfoCompat.getLongVersionCode(it).toInt() }
} catch (ex: Exception) {
FLog.e("$TAG : ${ex.message.orEmpty()}")
}
return null
}
// -------------------------------------------------------------------------------------------------
fun Context.showToast(
message: String,
duration: Int = Toast.LENGTH_SHORT
) {
Toast.makeText(this, message, duration).show()
}
// -------------------------------------------------------------------------------------------------
fun Context.hasCameraPermission(): Boolean =
ContextCompat.checkSelfPermission(
this,
Manifest.permission.CAMERA
) == PackageManager.PERMISSION_GRANTED
// -------------------------------------------------------------------------------------------------
fun Context.hasReadExtStoragePermission(): Boolean {
return ContextCompat.checkSelfPermission(
this,
Manifest.permission.READ_EXTERNAL_STORAGE
) == PackageManager.PERMISSION_GRANTED
}
fun Context.hasWriteExtStoragePermission(): Boolean {
return ContextCompat.checkSelfPermission(
this,
Manifest.permission.WRITE_EXTERNAL_STORAGE
) == PackageManager.PERMISSION_GRANTED
}
Added Function
Click for detail !!!
FrogoLog
- SDK for your Log problem to make easier developing android apps
- frogo-log is Long Term Service
- Line number show
- Toast for easy develop and debug
Screenshoot Result
SS 1 |
SS 2 |
SS 3 |
SS 4 |
|
|
|
|
Screenshoot Library Sample
FrogoLog (with line code)
// Function Log Debug
FrogoLog.d("Debug")
// Function Log Info
FrogoLog.i("Info")
// Function Log Verbose
FrogoLog.v("Verbose")
// Function Log Warn
FrogoLog.w("Warn")
// Function Log Error
FrogoLog.e("Error")
// Function Log Simple Debug without message params
FrogoLog.d()
FrogoLog (with line code and Toast)
// Function Log Debug (adding context params)
FrogoLog.d("Debug", this@MainActivity)
// Function Log Info (adding context params)
FrogoLog.i("Info", this@MainActivity)
// Function Log Verbose
FrogoLog.v("Verbose", this@MainActivity)
// Function Log Warn (adding context params)
FrogoLog.w("Warn", this@MainActivity)
// Function Log Error (adding context params)
FrogoLog.e("Error", this@MainActivity)
// Function Log Simple Debug without message params
FrogoLog.d(this@MainActivity)
FLog (without line code)
// Function Log Debug
FLog.d("Debug")
// Function Log Info
FLog.i("Info")
// Function Log Verbose
FLog.v("Verbose")
// Function Log Warn
FLog.w("Warn")
// Function Log Error
FLog.e("Error")
// Function Log Simple Debug without message params
FLog.d()
Flog (without line code with toast)
// Function Log Debug (adding context params)
FLog.d("Debug", this@MainActivity)
// Function Log Info (adding context params)
FLog.i("Info", this@MainActivity)
// Function Log Verbose
FLog.v("Verbose", this@MainActivity)
// Function Log Warn (adding context params)
FLog.w("Warn", this@MainActivity)
// Function Log Error (adding context params)
FLog.e("Error", this@MainActivity)
// Function Log Simple Debug without message params
FLog.d(this@MainActivity)
Result FrogoLog
FrogoNotification
- SDK for your notification problem to make easier developing android apps
- frogo-notification is under huge large development
- Notification with singleton method
- Simple and eazy to use
- With many feature
- Full documentation
- Custom Layout Notification
Screenshoot Sample
Simple Notification |
Stack Notification |
Custom Notification (1) |
Custom Notification (2) |
|
|
|
|
FrogoNotification.Inject(this) // Intialize for Context
.setChannelId(CHANNEL_ID) // Intialize for Channel ID
.setChannelName(CHANNEL_NAME) // Initialize for Channel Name
.setContentIntent(pendingIntent) // Initialize for Content Intent
.setSmallIcon(R.drawable.ic_frogo_notif) // Initialize for Small Icon
.setLargeIcon(R.drawable.ic_frogo_notif) // Initialize for Large Icon
.setContentTitle(resources.getString(R.string.content_title)) // Initialize for Content Title
.setContentText(resources.getString(R.string.content_text)) // Initialize for Content Text
.setSubText(resources.getString(R.string.subtext)) // Initialize for Sub Text
.setupAutoCancel() // Initialize for Auto Cancel
.build() // Build the Frogo Notification
.launch(NOTIFICATION_ID) // Notify the Frogo Notification
Simple Notification
FrogoNotification.Inject(this) // Intialize for Context
.setChannelId(CHANNEL_ID) // Intialize for Channel ID
.setChannelName(CHANNEL_NAME) // Initialize for Channel Name
.setContentIntent(pendingIntent) // Initialize for Content Intent
.setSmallIcon(R.drawable.ic_frogo_notif) // Initialize for Small Icon
.setLargeIcon(R.drawable.ic_frogo_notif) // Initialize for Large Icon
.setContentTitle(resources.getString(R.string.content_title)) // Initialize for Content Title
.setContentText(resources.getString(R.string.content_text)) // Initialize for Content Text
.setSubText(resources.getString(R.string.subtext)) // Initialize for Sub Text
.setupAutoCancel() // Initialize for Auto Cancel
.build() // Build the Frogo Notification
.launch(NOTIFICATION_ID) // Notify the Frogo Notification
Custom Layout (NEW FEATURE)
val collapsed = object : FrogoNotifCustomContentViewListener {
override fun setupCustomView(): Int {
return R.layout.notification_collapsed
}
override fun setupComponent(context: Context, customView: RemoteViews) {
customView.apply{
setTextViewText(R.id.text_view_collapsed_1, "Hello World!")
}
}
}
val expanded = object : FrogoNotifCustomContentViewListener {
override fun setupCustomView(): Int {
return R.layout.notification_expanded
}
override fun setupComponent(context: Context, customView: RemoteViews) {
customView.apply {
setImageViewResource(R.id.image_view_expanded, R.drawable.ic_android)
setOnClickPendingIntent(R.id.image_view_expanded, clickPendingIntent)
}
}
}
FrogoNotification.Inject(this) // Intialize for Context
.setChannelId(FrogoApp.CHANNEL_ID) // Intialize for Channel ID
.setChannelName(FrogoApp.CHANNEL_NAME) // Initialize for Channel Name
.setSmallIcon(R.drawable.ic_android) // Initialize for Small Icon
.setCustomContentView(collapsed)
.setCustomBigContentView(expanded)
.build() // Build the Frogo Notification
.launch(FrogoApp.NOTIFICATION_ID) // Notify the Frogo Notification
With Action Replay
FrogoNotification.Inject(this)
.setChannelId(CHANNEL_ID)
.setChannelName(CHANNEL_NAME as String)
.setSmallIcon(R.drawable.ic_frogo_notif)
.setContentTitle(getString(R.string.notif_title))
.setContentText(getString(R.string.notif_content))
.setupShowWhen()
.setupActionRemoteInput(object : FrogoNotifActionRemoteInputListener {
override fun setRemoteInputResultKey(): String {
return KEY_REPLY
}
override fun setRemoteInputLabel(): String {
return getString(R.string.notif_action_reply)
}
override fun setActionIcon(): Int {
return R.drawable.ic_frogo_send
}
override fun setActionTitle(): String {
return getString(R.string.notif_action_reply)
}
override fun setActionIntent(): PendingIntent? {
return getReplyPendingIntent()
}
override fun setAllowGeneratedReplies(): Boolean {
return true
}
})
.build()
.launch(mNotificationId)
With Inbox Style (Stack)
val frogoNotification = FrogoNotification.Inject(this)
.setChannelId(CHANNEL_ID)
.setChannelName(CHANNEL_NAME)
.setSmallIcon(R.drawable.ic_frogo_email)
.setGroup(GROUP_KEY_EMAILS)
.setContentIntent(pendingIntent)
.setupAutoCancel()
// Check if NotificationID is smaller than Max Notif
if (idNotification < MAX_NOTIFICATION) {
stackNotif[idNotification].message?.let {
frogoNotification
.setContentTitle("New Email from " + stackNotif[idNotification].sender)
.setContentText(it)
.setLargeIcon(R.drawable.ic_frogo_notif)
}
} else {
frogoNotification
.setContentTitle("$idNotification new emails")
.setContentText("[email protected]")
.setGroupSummary()
.setupInboxStyle(object : FrogoNotifInboxStyleListener {
override fun addLine1(): String {
return "New Email from " + stackNotif[idNotification].sender
}
override fun addLine2(): String {
return "New Email from " + stackNotif[idNotification - 1].sender
}
override fun setBigContentTitle(): String {
return "$idNotification new emails"
}
override fun setSummaryText(): String {
return "mail@frogobox"
}
})
}
frogoNotification
.build()
.launch(idNotification)
With Frogo Style
FrogoNotification.Inject(this) // Intialize for Context
.setSmallIcon(R.drawable.ic_frogo_notif) // Initialize for Small Icon
.setupWithFrogoStyle()
.build() // Build the Frogo Notification
.launch(NOTIFICATION_ID) // Notify the Frogo Notification
For Documentation
Colaborator
Very open to anyone, I'll write your name under this, please contribute by sending an email to me
- Mail To [email protected]
- Subject : Github _ [Github-Username-Account] _ [Language] _ [Repository-Name]
- Example : Github_amirisback_kotlin_admob-helper-implementation
Name Of Contribute
- Muhammad Faisal Amir
- Waiting List
- Waiting List
Waiting for your contribute
Attention !!!
- Please enjoy and don't forget fork and give a star
- Don't Forget Follow My Github Account
Source code(tar.gz)
Source code(zip)
1.0.5(Apr 30, 2022)
About This Project (release 👷🔧️👷♀️⛏)
- SDK for anything your problem to make easier developing android apps
- Available for android and desktop
- Privacy Policy Click Here
- License Click Here
ScreenShoot
Version Release
This Is Latest Release
$version_release = 1.0.5
What's New??
* SDK Android and Desktop *
* Adding Ext Function *
* Update: Fixing Bug RxJava Ext *
Download this project
Step 1. Add the JitPack repository to your build file (build.gradle : Project)
<Option 1> Groovy Gradle
// Add it in your root build.gradle at the end of repositories:
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
<Option 2> Kotlin DSL Gradle
// Add it in your root build.gradle.kts at the end of repositories:
allprojects {
repositories {
...
maven("https://jitpack.io")
}
}
Step 2. Add the dependency (build.gradle : Module)
#### <Option 1> Groovy Gradle
dependencies {
// library frogo-sdk
implementation 'com.github.frogobox:frogo-sdk:1.0.5'
// library frogo-sdk for desktop
implementation 'com.github.frogobox.frogo-sdk:frogocoresdk:1.0.5'
}
#### <Option 2> Kotlin DSL Gradle
dependencies {
// library frogo-sdk
implementation("com.github.frogobox:frogo-sdk:1.0.5")
// library frogo-sdk for desktop
implementation("com.github.frogobox.frogo-sdk:frogocoresdk:1.0.5")
}
Step 3. Function from this SDK
All Class SDK (android)
FrogoActivity
FrogoApplication
FrogoComposeActivity
FrogoFragment
FrogoFunc
FrogoMusic
FrogoMutableLiveData
FrogoNavigation
FrogoPagerHelper
FrogoPiracyActivity
FrogoPreference
FrogoSinglePreference
FrogoViewModel
All Class SDK (desktop & android)
FrogoApiClient
FrogoApiModel
FrogoApiObserver
FrogoConstant
FrogoDataResponse
FrogoDate
FrogoLocalObserver
FrogoStateResponse
IFrogoDate
FrogoActivity
fun setupDetailActivity(title: String)
fun setupChildFragment(frameId: Int, fragment: Fragment)
fun showToast(message: String)
fun setupEmptyView(view: View, isEmpty: Boolean)
fun setupProgressView(view: View, isProgress: Boolean)
fun checkExtra(extraKey: String): Boolean
fun <Model> FrogoFragmentNewInstance(
fragment: FrogoFragment<*>,
argumentKey: String,
extraDataResult: Model
)
fun isNetworkConnected(): Boolean
fun setupFullScreen()
fun setupHideSystemUI()
fun shareApp(packageName: String, appName: String)
fun rateApp(packageName: String)
FrogoFragment
fun setupChildFragment(frameId: Int, fragment: Fragment)
fun checkArgument(argsKey: String): Boolean
fun setupEmptyView(view: View, isEmpty: Boolean)
fun setupProgressView(view: View, isProgress: Boolean)
fun showToast(message: String)
fun <Model> frogoNewInstance(argsKey: String, data: Model)
Ext Function
FrogoRetrofitExt.kt
// Single Api Request
fun <T : Any> Call<T>.doApiRequest(callback: FrogoDataResponse<T>) {
callback.onShowProgress()
enqueue(object : Callback<T> {
override fun onResponse(call: Call<T>, response: Response<T>) {
response.body()?.let { callback.onSuccess(it) }
callback.onHideProgress()
}
override fun onFailure(call: Call<T>, t: Throwable) {
callback.onFailed(500, t.localizedMessage)
callback.onHideProgress()
}
})
}
FrogoRxJavaObservableExt.kt
// Single Api Request with scheduler
fun <T : Any> Observable<T>.doApiRequest(scheduler: Scheduler, callback: FrogoDataResponse<T>) {
subscribeOn(Schedulers.io())
.doOnSubscribe { callback.onShowProgress() }
.doOnTerminate { callback.onHideProgress() }
.observeOn(scheduler)
.subscribe(object : FrogoApiObserver<T>() {
override fun onSuccess(data: T) {
callback.onSuccess(data)
}
override fun onFailure(code: Int, errorMessage: String) {
callback.onFailed(code, errorMessage)
}
})
}
// -------------------------------------------------------------------------------------------------
// Single Api Request
fun <T : Any> Observable<T>.doApiRequest(callback: FrogoDataResponse<T>) {
doOnSubscribe { callback.onShowProgress() }
.doOnTerminate { callback.onHideProgress() }
.subscribe(object : FrogoApiObserver<T>() {
override fun onSuccess(data: T) {
callback.onSuccess(data)
}
override fun onFailure(code: Int, errorMessage: String) {
callback.onFailed(code, errorMessage)
}
})
}
FrogoContextActivityExt.kt
inline fun <reified ClassActivity> Context.singleStartActivity() {
FLog.d("Activity : ${ClassActivity::class.java.simpleName}")
startActivity(Intent(this, ClassActivity::class.java))
}
// -------------------------------------------------------------------------------------------------
inline fun <reified ClassActivity, reified Model> Context.singleStartActivity(
extraKey: String,
data: Model
) {
val intent = Intent(this, ClassActivity::class.java)
val extraData = Gson().toJson(data)
intent.putExtra(extraKey, extraData)
FLog.d("Activity : ${ClassActivity::class.java.simpleName}")
FLog.d("Data : Extra Data (${Model::class.java.simpleName}) : $extraData")
startActivity(intent)
}
// -------------------------------------------------------------------------------------------------
inline fun <reified Model> Activity.singleGetExtraData(extraKey: String): Model {
val extraIntent = intent.getStringExtra(extraKey)
return Gson().fromJson(extraIntent, Model::class.java)
}
// -------------------------------------------------------------------------------------------------
fun Context.singleStartActivityShareApp(subject: String, text: String) {
val intent = Intent(Intent.ACTION_SEND)
intent.type = "text/plain"
intent.putExtra(Intent.EXTRA_SUBJECT, subject)
intent.putExtra(Intent.EXTRA_TEXT, text)
FLog.d("$TAG : Subject Share App : $subject")
FLog.d("$TAG : Message Share App : $text")
startActivity(Intent.createChooser(intent, subject))
}
// -------------------------------------------------------------------------------------------------
fun Context.singleStartActivityOpenApp(url: String) {
FLog.d("$TAG : Url : $url")
startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(url)))
}
FrogoContextFragmentExt.kt
fun <Model> Fragment.singleNewInstance(argsKey: String, data: Model) {
val argsData = Gson().toJson(data)
val bundleArgs = Bundle().apply {
putString(argsKey, argsData)
}
this.arguments = bundleArgs
}
// -------------------------------------------------------------------------------------------------
inline fun <reified Model> Fragment.singleGetInstance(argsKey: String): Model {
val argsData = this.arguments?.getString(argsKey)
return Gson().fromJson(argsData, Model::class.java)
}
FrogoImageViewExt.kt
fun ImageView.glideLoad(data: Any?) {
FLog.d("$TAG : Params : $data")
FLog.d("$TAG : Glide Load Ext")
Glide.with(context).load(data).into(this)
}
FrogoViewExt.kt
fun View.visible() {
FLog.d("$TAG : View Visible")
visibility = View.VISIBLE
}
// -------------------------------------------------------------------------------------------------
fun View.gone() {
FLog.d("$TAG : View Gone")
visibility = View.GONE
}
// -------------------------------------------------------------------------------------------------
fun View.invisible() {
FLog.d("$TAG : View Invisible")
visibility = View.INVISIBLE
}
// -------------------------------------------------------------------------------------------------
fun View.progressViewHandle(isProgressState: Boolean) {
FLog.d("$TAG : isProgressState >> $isProgressState")
if (isProgressState) {
visible()
} else {
gone()
}
}
// -------------------------------------------------------------------------------------------------
fun View.emptyViewHandle(isEmptyState: Boolean) {
FLog.d("$TAG : isEmptyState >> $isEmptyState")
if (isEmptyState) {
visible()
} else {
gone()
}
}
FrogoContextExt.kt
fun Context.getAppVersionCode(): Int? {
try {
return packageManager?.getPackageInfo(packageName, 0)
?.let { PackageInfoCompat.getLongVersionCode(it).toInt() }
} catch (ex: Exception) {
FLog.e("$TAG : ${ex.message.orEmpty()}")
}
return null
}
// -------------------------------------------------------------------------------------------------
fun Context.showToast(
message: String,
duration: Int = Toast.LENGTH_SHORT
) {
Toast.makeText(this, message, duration).show()
}
// -------------------------------------------------------------------------------------------------
fun Context.hasCameraPermission(): Boolean =
ContextCompat.checkSelfPermission(
this,
Manifest.permission.CAMERA
) == PackageManager.PERMISSION_GRANTED
// -------------------------------------------------------------------------------------------------
fun Context.hasReadExtStoragePermission(): Boolean {
return ContextCompat.checkSelfPermission(
this,
Manifest.permission.READ_EXTERNAL_STORAGE
) == PackageManager.PERMISSION_GRANTED
}
fun Context.hasWriteExtStoragePermission(): Boolean {
return ContextCompat.checkSelfPermission(
this,
Manifest.permission.WRITE_EXTERNAL_STORAGE
) == PackageManager.PERMISSION_GRANTED
}
Added Function
Click for detail !!!
FrogoLog
- SDK for your Log problem to make easier developing android apps
- frogo-log is Long Term Service
- Line number show
- Toast for easy develop and debug
Screenshoot Result
SS 1 |
SS 2 |
SS 3 |
SS 4 |
|
|
|
|
Screenshoot Library Sample
FrogoLog (with line code)
// Function Log Debug
FrogoLog.d("Debug")
// Function Log Info
FrogoLog.i("Info")
// Function Log Verbose
FrogoLog.v("Verbose")
// Function Log Warn
FrogoLog.w("Warn")
// Function Log Error
FrogoLog.e("Error")
// Function Log Simple Debug without message params
FrogoLog.d()
FrogoLog (with line code and Toast)
// Function Log Debug (adding context params)
FrogoLog.d("Debug", this@MainActivity)
// Function Log Info (adding context params)
FrogoLog.i("Info", this@MainActivity)
// Function Log Verbose
FrogoLog.v("Verbose", this@MainActivity)
// Function Log Warn (adding context params)
FrogoLog.w("Warn", this@MainActivity)
// Function Log Error (adding context params)
FrogoLog.e("Error", this@MainActivity)
// Function Log Simple Debug without message params
FrogoLog.d(this@MainActivity)
FLog (without line code)
// Function Log Debug
FLog.d("Debug")
// Function Log Info
FLog.i("Info")
// Function Log Verbose
FLog.v("Verbose")
// Function Log Warn
FLog.w("Warn")
// Function Log Error
FLog.e("Error")
// Function Log Simple Debug without message params
FLog.d()
Flog (without line code with toast)
// Function Log Debug (adding context params)
FLog.d("Debug", this@MainActivity)
// Function Log Info (adding context params)
FLog.i("Info", this@MainActivity)
// Function Log Verbose
FLog.v("Verbose", this@MainActivity)
// Function Log Warn (adding context params)
FLog.w("Warn", this@MainActivity)
// Function Log Error (adding context params)
FLog.e("Error", this@MainActivity)
// Function Log Simple Debug without message params
FLog.d(this@MainActivity)
Result FrogoLog
FrogoNotification
- SDK for your notification problem to make easier developing android apps
- frogo-notification is under huge large development
- Notification with singleton method
- Simple and eazy to use
- With many feature
- Full documentation
- Custom Layout Notification
Screenshoot Sample
Simple Notification |
Stack Notification |
Custom Notification (1) |
Custom Notification (2) |
|
|
|
|
FrogoNotification.Inject(this) // Intialize for Context
.setChannelId(CHANNEL_ID) // Intialize for Channel ID
.setChannelName(CHANNEL_NAME) // Initialize for Channel Name
.setContentIntent(pendingIntent) // Initialize for Content Intent
.setSmallIcon(R.drawable.ic_frogo_notif) // Initialize for Small Icon
.setLargeIcon(R.drawable.ic_frogo_notif) // Initialize for Large Icon
.setContentTitle(resources.getString(R.string.content_title)) // Initialize for Content Title
.setContentText(resources.getString(R.string.content_text)) // Initialize for Content Text
.setSubText(resources.getString(R.string.subtext)) // Initialize for Sub Text
.setupAutoCancel() // Initialize for Auto Cancel
.build() // Build the Frogo Notification
.launch(NOTIFICATION_ID) // Notify the Frogo Notification
Simple Notification
FrogoNotification.Inject(this) // Intialize for Context
.setChannelId(CHANNEL_ID) // Intialize for Channel ID
.setChannelName(CHANNEL_NAME) // Initialize for Channel Name
.setContentIntent(pendingIntent) // Initialize for Content Intent
.setSmallIcon(R.drawable.ic_frogo_notif) // Initialize for Small Icon
.setLargeIcon(R.drawable.ic_frogo_notif) // Initialize for Large Icon
.setContentTitle(resources.getString(R.string.content_title)) // Initialize for Content Title
.setContentText(resources.getString(R.string.content_text)) // Initialize for Content Text
.setSubText(resources.getString(R.string.subtext)) // Initialize for Sub Text
.setupAutoCancel() // Initialize for Auto Cancel
.build() // Build the Frogo Notification
.launch(NOTIFICATION_ID) // Notify the Frogo Notification
Custom Layout (NEW FEATURE)
val collapsed = object : FrogoNotifCustomContentViewListener {
override fun setupCustomView(): Int {
return R.layout.notification_collapsed
}
override fun setupComponent(context: Context, customView: RemoteViews) {
customView.apply{
setTextViewText(R.id.text_view_collapsed_1, "Hello World!")
}
}
}
val expanded = object : FrogoNotifCustomContentViewListener {
override fun setupCustomView(): Int {
return R.layout.notification_expanded
}
override fun setupComponent(context: Context, customView: RemoteViews) {
customView.apply {
setImageViewResource(R.id.image_view_expanded, R.drawable.ic_android)
setOnClickPendingIntent(R.id.image_view_expanded, clickPendingIntent)
}
}
}
FrogoNotification.Inject(this) // Intialize for Context
.setChannelId(FrogoApp.CHANNEL_ID) // Intialize for Channel ID
.setChannelName(FrogoApp.CHANNEL_NAME) // Initialize for Channel Name
.setSmallIcon(R.drawable.ic_android) // Initialize for Small Icon
.setCustomContentView(collapsed)
.setCustomBigContentView(expanded)
.build() // Build the Frogo Notification
.launch(FrogoApp.NOTIFICATION_ID) // Notify the Frogo Notification
With Action Replay
FrogoNotification.Inject(this)
.setChannelId(CHANNEL_ID)
.setChannelName(CHANNEL_NAME as String)
.setSmallIcon(R.drawable.ic_frogo_notif)
.setContentTitle(getString(R.string.notif_title))
.setContentText(getString(R.string.notif_content))
.setupShowWhen()
.setupActionRemoteInput(object : FrogoNotifActionRemoteInputListener {
override fun setRemoteInputResultKey(): String {
return KEY_REPLY
}
override fun setRemoteInputLabel(): String {
return getString(R.string.notif_action_reply)
}
override fun setActionIcon(): Int {
return R.drawable.ic_frogo_send
}
override fun setActionTitle(): String {
return getString(R.string.notif_action_reply)
}
override fun setActionIntent(): PendingIntent? {
return getReplyPendingIntent()
}
override fun setAllowGeneratedReplies(): Boolean {
return true
}
})
.build()
.launch(mNotificationId)
With Inbox Style (Stack)
val frogoNotification = FrogoNotification.Inject(this)
.setChannelId(CHANNEL_ID)
.setChannelName(CHANNEL_NAME)
.setSmallIcon(R.drawable.ic_frogo_email)
.setGroup(GROUP_KEY_EMAILS)
.setContentIntent(pendingIntent)
.setupAutoCancel()
// Check if NotificationID is smaller than Max Notif
if (idNotification < MAX_NOTIFICATION) {
stackNotif[idNotification].message?.let {
frogoNotification
.setContentTitle("New Email from " + stackNotif[idNotification].sender)
.setContentText(it)
.setLargeIcon(R.drawable.ic_frogo_notif)
}
} else {
frogoNotification
.setContentTitle("$idNotification new emails")
.setContentText("[email protected]")
.setGroupSummary()
.setupInboxStyle(object : FrogoNotifInboxStyleListener {
override fun addLine1(): String {
return "New Email from " + stackNotif[idNotification].sender
}
override fun addLine2(): String {
return "New Email from " + stackNotif[idNotification - 1].sender
}
override fun setBigContentTitle(): String {
return "$idNotification new emails"
}
override fun setSummaryText(): String {
return "mail@frogobox"
}
})
}
frogoNotification
.build()
.launch(idNotification)
With Frogo Style
FrogoNotification.Inject(this) // Intialize for Context
.setSmallIcon(R.drawable.ic_frogo_notif) // Initialize for Small Icon
.setupWithFrogoStyle()
.build() // Build the Frogo Notification
.launch(NOTIFICATION_ID) // Notify the Frogo Notification
For Documentation
Colaborator
Very open to anyone, I'll write your name under this, please contribute by sending an email to me
- Mail To [email protected]
- Subject : Github _ [Github-Username-Account] _ [Language] _ [Repository-Name]
- Example : Github_amirisback_kotlin_admob-helper-implementation
Name Of Contribute
- Muhammad Faisal Amir
- Waiting List
- Waiting List
Waiting for your contribute
Attention !!!
- Please enjoy and don't forget fork and give a star
- Don't Forget Follow My Github Account
Source code(tar.gz)
Source code(zip)
1.0.4(Apr 18, 2022)
About This Project (release 👷🔧️👷♀️⛏)
- SDK for anything your problem to make easier developing android apps
- Available for android and desktop
- Privacy Policy Click Here
- License Click Here
ScreenShoot
Version Release
This Is Latest Release
$version_release = 1.0.4
What's New??
* SDK Android and Desktop *
* Adding Ext Function *
* Update: Fixing Bug RxJava Ext *
Download this project
Step 1. Add the JitPack repository to your build file (build.gradle : Project)
<Option 1> Groovy Gradle
// Add it in your root build.gradle at the end of repositories:
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
<Option 2> Kotlin DSL Gradle
// Add it in your root build.gradle.kts at the end of repositories:
allprojects {
repositories {
...
maven("https://jitpack.io")
}
}
Step 2. Add the dependency (build.gradle : Module)
#### <Option 1> Groovy Gradle
dependencies {
// library frogo-sdk
implementation 'com.github.frogobox:frogo-sdk:1.0.4'
// library frogo-sdk for desktop
implementation 'com.github.frogobox.frogo-sdk:frogocoresdk:1.0.4'
}
#### <Option 2> Kotlin DSL Gradle
dependencies {
// library frogo-sdk
implementation("com.github.frogobox:frogo-sdk:1.0.4")
// library frogo-sdk for desktop
implementation("com.github.frogobox.frogo-sdk:frogocoresdk:1.0.4")
}
Step 3. Function from this SDK
All Class SDK (android)
FrogoActivity
FrogoApplication
FrogoComposeActivity
FrogoFragment
FrogoFunc
FrogoMusic
FrogoMutableLiveData
FrogoNavigation
FrogoPagerHelper
FrogoPiracyActivity
FrogoPreference
FrogoSinglePreference
FrogoViewModel
All Class SDK (desktop & android)
FrogoApiClient
FrogoApiModel
FrogoApiObserver
FrogoConstant
FrogoDataResponse
FrogoDate
FrogoLocalObserver
FrogoStateResponse
IFrogoDate
FrogoActivity
fun setupDetailActivity(title: String)
fun setupChildFragment(frameId: Int, fragment: Fragment)
fun showToast(message: String)
fun setupEmptyView(view: View, isEmpty: Boolean)
fun setupProgressView(view: View, isProgress: Boolean)
fun checkExtra(extraKey: String): Boolean
fun <Model> FrogoFragmentNewInstance(
fragment: FrogoFragment<*>,
argumentKey: String,
extraDataResult: Model
)
fun isNetworkConnected(): Boolean
fun setupFullScreen()
fun setupHideSystemUI()
fun shareApp(packageName: String, appName: String)
fun rateApp(packageName: String)
FrogoFragment
fun setupChildFragment(frameId: Int, fragment: Fragment)
fun checkArgument(argsKey: String): Boolean
fun setupEmptyView(view: View, isEmpty: Boolean)
fun setupProgressView(view: View, isProgress: Boolean)
fun showToast(message: String)
fun <Model> frogoNewInstance(argsKey: String, data: Model)
Ext Function
FrogoRetrofitExt.kt
// Single Api Request
fun <T : Any> Call<T>.doApiRequest(callback: FrogoDataResponse<T>) {
callback.onShowProgress()
enqueue(object : Callback<T> {
override fun onResponse(call: Call<T>, response: Response<T>) {
response.body()?.let { callback.onSuccess(it) }
callback.onHideProgress()
}
override fun onFailure(call: Call<T>, t: Throwable) {
callback.onFailed(500, t.localizedMessage)
callback.onHideProgress()
}
})
}
FrogoRxJavaObservableExt.kt
// Single Api Request with scheduler
fun <T : Any> Observable<T>.doApiRequest(scheduler: Scheduler, callback: FrogoDataResponse<T>) {
subscribeOn(Schedulers.io())
.doOnSubscribe { callback.onShowProgress() }
.doOnTerminate { callback.onHideProgress() }
.observeOn(scheduler)
.subscribe(object : FrogoApiObserver<T>() {
override fun onSuccess(data: T) {
callback.onSuccess(data)
}
override fun onFailure(code: Int, errorMessage: String) {
callback.onFailed(code, errorMessage)
}
})
}
// -------------------------------------------------------------------------------------------------
// Single Api Request
fun <T : Any> Observable<T>.doApiRequest(callback: FrogoDataResponse<T>) {
doOnSubscribe { callback.onShowProgress() }
.doOnTerminate { callback.onHideProgress() }
.subscribe(object : FrogoApiObserver<T>() {
override fun onSuccess(data: T) {
callback.onSuccess(data)
}
override fun onFailure(code: Int, errorMessage: String) {
callback.onFailed(code, errorMessage)
}
})
}
FrogoContextActivityExt.kt
inline fun <reified ClassActivity> Context.singleStartActivity() {
FLog.d("Activity : ${ClassActivity::class.java.simpleName}")
startActivity(Intent(this, ClassActivity::class.java))
}
// -------------------------------------------------------------------------------------------------
inline fun <reified ClassActivity, reified Model> Context.singleStartActivity(
extraKey: String,
data: Model
) {
val intent = Intent(this, ClassActivity::class.java)
val extraData = Gson().toJson(data)
intent.putExtra(extraKey, extraData)
FLog.d("Activity : ${ClassActivity::class.java.simpleName}")
FLog.d("Data : Extra Data (${Model::class.java.simpleName}) : $extraData")
startActivity(intent)
}
// -------------------------------------------------------------------------------------------------
inline fun <reified Model> Activity.singleGetExtraData(extraKey: String): Model {
val extraIntent = intent.getStringExtra(extraKey)
return Gson().fromJson(extraIntent, Model::class.java)
}
// -------------------------------------------------------------------------------------------------
fun Context.singleStartActivityShareApp(subject: String, text: String) {
val intent = Intent(Intent.ACTION_SEND)
intent.type = "text/plain"
intent.putExtra(Intent.EXTRA_SUBJECT, subject)
intent.putExtra(Intent.EXTRA_TEXT, text)
FLog.d("$TAG : Subject Share App : $subject")
FLog.d("$TAG : Message Share App : $text")
startActivity(Intent.createChooser(intent, subject))
}
// -------------------------------------------------------------------------------------------------
fun Context.singleStartActivityOpenApp(url: String) {
FLog.d("$TAG : Url : $url")
startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(url)))
}
FrogoContextFragmentExt.kt
fun <Model> Fragment.singleNewInstance(argsKey: String, data: Model) {
val argsData = Gson().toJson(data)
val bundleArgs = Bundle().apply {
putString(argsKey, argsData)
}
this.arguments = bundleArgs
}
// -------------------------------------------------------------------------------------------------
inline fun <reified Model> Fragment.singleGetInstance(argsKey: String): Model {
val argsData = this.arguments?.getString(argsKey)
return Gson().fromJson(argsData, Model::class.java)
}
FrogoImageViewExt.kt
fun ImageView.glideLoad(data: Any?) {
FLog.d("$TAG : Params : $data")
FLog.d("$TAG : Glide Load Ext")
Glide.with(context).load(data).into(this)
}
FrogoViewExt.kt
fun View.visible() {
FLog.d("$TAG : View Visible")
visibility = View.VISIBLE
}
// -------------------------------------------------------------------------------------------------
fun View.gone() {
FLog.d("$TAG : View Gone")
visibility = View.GONE
}
// -------------------------------------------------------------------------------------------------
fun View.invisible() {
FLog.d("$TAG : View Invisible")
visibility = View.INVISIBLE
}
// -------------------------------------------------------------------------------------------------
fun View.progressViewHandle(isProgressState: Boolean) {
FLog.d("$TAG : isProgressState >> $isProgressState")
if (isProgressState) {
visible()
} else {
gone()
}
}
// -------------------------------------------------------------------------------------------------
fun View.emptyViewHandle(isEmptyState: Boolean) {
FLog.d("$TAG : isEmptyState >> $isEmptyState")
if (isEmptyState) {
visible()
} else {
gone()
}
}
FrogoContextExt.kt
fun Context.getAppVersionCode(): Int? {
try {
return packageManager?.getPackageInfo(packageName, 0)
?.let { PackageInfoCompat.getLongVersionCode(it).toInt() }
} catch (ex: Exception) {
FLog.e("$TAG : ${ex.message.orEmpty()}")
}
return null
}
// -------------------------------------------------------------------------------------------------
fun Context.showToast(
message: String,
duration: Int = Toast.LENGTH_SHORT
) {
Toast.makeText(this, message, duration).show()
}
// -------------------------------------------------------------------------------------------------
fun Context.hasCameraPermission(): Boolean =
ContextCompat.checkSelfPermission(
this,
Manifest.permission.CAMERA
) == PackageManager.PERMISSION_GRANTED
// -------------------------------------------------------------------------------------------------
fun Context.hasReadExtStoragePermission(): Boolean {
return ContextCompat.checkSelfPermission(
this,
Manifest.permission.READ_EXTERNAL_STORAGE
) == PackageManager.PERMISSION_GRANTED
}
fun Context.hasWriteExtStoragePermission(): Boolean {
return ContextCompat.checkSelfPermission(
this,
Manifest.permission.WRITE_EXTERNAL_STORAGE
) == PackageManager.PERMISSION_GRANTED
}
Added Function
Click for detail !!!
FrogoLog
- SDK for your Log problem to make easier developing android apps
- frogo-log is Long Term Service
- Line number show
- Toast for easy develop and debug
Screenshoot Result
SS 1 |
SS 2 |
SS 3 |
SS 4 |
|
|
|
|
Screenshoot Library Sample
FrogoLog (with line code)
// Function Log Debug
FrogoLog.d("Debug")
// Function Log Info
FrogoLog.i("Info")
// Function Log Verbose
FrogoLog.v("Verbose")
// Function Log Warn
FrogoLog.w("Warn")
// Function Log Error
FrogoLog.e("Error")
// Function Log Simple Debug without message params
FrogoLog.d()
FrogoLog (with line code and Toast)
// Function Log Debug (adding context params)
FrogoLog.d("Debug", this@MainActivity)
// Function Log Info (adding context params)
FrogoLog.i("Info", this@MainActivity)
// Function Log Verbose
FrogoLog.v("Verbose", this@MainActivity)
// Function Log Warn (adding context params)
FrogoLog.w("Warn", this@MainActivity)
// Function Log Error (adding context params)
FrogoLog.e("Error", this@MainActivity)
// Function Log Simple Debug without message params
FrogoLog.d(this@MainActivity)
FLog (without line code)
// Function Log Debug
FLog.d("Debug")
// Function Log Info
FLog.i("Info")
// Function Log Verbose
FLog.v("Verbose")
// Function Log Warn
FLog.w("Warn")
// Function Log Error
FLog.e("Error")
// Function Log Simple Debug without message params
FLog.d()
Flog (without line code with toast)
// Function Log Debug (adding context params)
FLog.d("Debug", this@MainActivity)
// Function Log Info (adding context params)
FLog.i("Info", this@MainActivity)
// Function Log Verbose
FLog.v("Verbose", this@MainActivity)
// Function Log Warn (adding context params)
FLog.w("Warn", this@MainActivity)
// Function Log Error (adding context params)
FLog.e("Error", this@MainActivity)
// Function Log Simple Debug without message params
FLog.d(this@MainActivity)
Result FrogoLog
FrogoNotification
- SDK for your notification problem to make easier developing android apps
- frogo-notification is under huge large development
- Notification with singleton method
- Simple and eazy to use
- With many feature
- Full documentation
- Custom Layout Notification
Screenshoot Sample
Simple Notification |
Stack Notification |
Custom Notification (1) |
Custom Notification (2) |
|
|
|
|
FrogoNotification.Inject(this) // Intialize for Context
.setChannelId(CHANNEL_ID) // Intialize for Channel ID
.setChannelName(CHANNEL_NAME) // Initialize for Channel Name
.setContentIntent(pendingIntent) // Initialize for Content Intent
.setSmallIcon(R.drawable.ic_frogo_notif) // Initialize for Small Icon
.setLargeIcon(R.drawable.ic_frogo_notif) // Initialize for Large Icon
.setContentTitle(resources.getString(R.string.content_title)) // Initialize for Content Title
.setContentText(resources.getString(R.string.content_text)) // Initialize for Content Text
.setSubText(resources.getString(R.string.subtext)) // Initialize for Sub Text
.setupAutoCancel() // Initialize for Auto Cancel
.build() // Build the Frogo Notification
.launch(NOTIFICATION_ID) // Notify the Frogo Notification
Simple Notification
FrogoNotification.Inject(this) // Intialize for Context
.setChannelId(CHANNEL_ID) // Intialize for Channel ID
.setChannelName(CHANNEL_NAME) // Initialize for Channel Name
.setContentIntent(pendingIntent) // Initialize for Content Intent
.setSmallIcon(R.drawable.ic_frogo_notif) // Initialize for Small Icon
.setLargeIcon(R.drawable.ic_frogo_notif) // Initialize for Large Icon
.setContentTitle(resources.getString(R.string.content_title)) // Initialize for Content Title
.setContentText(resources.getString(R.string.content_text)) // Initialize for Content Text
.setSubText(resources.getString(R.string.subtext)) // Initialize for Sub Text
.setupAutoCancel() // Initialize for Auto Cancel
.build() // Build the Frogo Notification
.launch(NOTIFICATION_ID) // Notify the Frogo Notification
Custom Layout (NEW FEATURE)
val collapsed = object : FrogoNotifCustomContentViewListener {
override fun setupCustomView(): Int {
return R.layout.notification_collapsed
}
override fun setupComponent(context: Context, customView: RemoteViews) {
customView.apply{
setTextViewText(R.id.text_view_collapsed_1, "Hello World!")
}
}
}
val expanded = object : FrogoNotifCustomContentViewListener {
override fun setupCustomView(): Int {
return R.layout.notification_expanded
}
override fun setupComponent(context: Context, customView: RemoteViews) {
customView.apply {
setImageViewResource(R.id.image_view_expanded, R.drawable.ic_android)
setOnClickPendingIntent(R.id.image_view_expanded, clickPendingIntent)
}
}
}
FrogoNotification.Inject(this) // Intialize for Context
.setChannelId(FrogoApp.CHANNEL_ID) // Intialize for Channel ID
.setChannelName(FrogoApp.CHANNEL_NAME) // Initialize for Channel Name
.setSmallIcon(R.drawable.ic_android) // Initialize for Small Icon
.setCustomContentView(collapsed)
.setCustomBigContentView(expanded)
.build() // Build the Frogo Notification
.launch(FrogoApp.NOTIFICATION_ID) // Notify the Frogo Notification
With Action Replay
FrogoNotification.Inject(this)
.setChannelId(CHANNEL_ID)
.setChannelName(CHANNEL_NAME as String)
.setSmallIcon(R.drawable.ic_frogo_notif)
.setContentTitle(getString(R.string.notif_title))
.setContentText(getString(R.string.notif_content))
.setupShowWhen()
.setupActionRemoteInput(object : FrogoNotifActionRemoteInputListener {
override fun setRemoteInputResultKey(): String {
return KEY_REPLY
}
override fun setRemoteInputLabel(): String {
return getString(R.string.notif_action_reply)
}
override fun setActionIcon(): Int {
return R.drawable.ic_frogo_send
}
override fun setActionTitle(): String {
return getString(R.string.notif_action_reply)
}
override fun setActionIntent(): PendingIntent? {
return getReplyPendingIntent()
}
override fun setAllowGeneratedReplies(): Boolean {
return true
}
})
.build()
.launch(mNotificationId)
With Inbox Style (Stack)
val frogoNotification = FrogoNotification.Inject(this)
.setChannelId(CHANNEL_ID)
.setChannelName(CHANNEL_NAME)
.setSmallIcon(R.drawable.ic_frogo_email)
.setGroup(GROUP_KEY_EMAILS)
.setContentIntent(pendingIntent)
.setupAutoCancel()
// Check if NotificationID is smaller than Max Notif
if (idNotification < MAX_NOTIFICATION) {
stackNotif[idNotification].message?.let {
frogoNotification
.setContentTitle("New Email from " + stackNotif[idNotification].sender)
.setContentText(it)
.setLargeIcon(R.drawable.ic_frogo_notif)
}
} else {
frogoNotification
.setContentTitle("$idNotification new emails")
.setContentText("[email protected]")
.setGroupSummary()
.setupInboxStyle(object : FrogoNotifInboxStyleListener {
override fun addLine1(): String {
return "New Email from " + stackNotif[idNotification].sender
}
override fun addLine2(): String {
return "New Email from " + stackNotif[idNotification - 1].sender
}
override fun setBigContentTitle(): String {
return "$idNotification new emails"
}
override fun setSummaryText(): String {
return "mail@frogobox"
}
})
}
frogoNotification
.build()
.launch(idNotification)
With Frogo Style
FrogoNotification.Inject(this) // Intialize for Context
.setSmallIcon(R.drawable.ic_frogo_notif) // Initialize for Small Icon
.setupWithFrogoStyle()
.build() // Build the Frogo Notification
.launch(NOTIFICATION_ID) // Notify the Frogo Notification
For Documentation
Colaborator
Very open to anyone, I'll write your name under this, please contribute by sending an email to me
- Mail To [email protected]
- Subject : Github _ [Github-Username-Account] _ [Language] _ [Repository-Name]
- Example : Github_amirisback_kotlin_admob-helper-implementation
Name Of Contribute
- Muhammad Faisal Amir
- Waiting List
- Waiting List
Waiting for your contribute
Attention !!!
- Please enjoy and don't forget fork and give a star
- Don't Forget Follow My Github Account
Source code(tar.gz)
Source code(zip)
1.0.3(Apr 17, 2022)
About This Project (release 👷🔧️👷♀️⛏)
- SDK for anything your problem to make easier developing android apps
- Available for android and desktop
- Privacy Policy Click Here
- License Click Here
ScreenShoot
Version Release
This Is Latest Release
$version_release = 1.0.3
What's New??
* SDK Android and Desktop *
* Adding Ext Function *
* Update: Fixing Bug RxJava Ext *
Download this project
Step 1. Add the JitPack repository to your build file (build.gradle : Project)
<Option 1> Groovy Gradle
// Add it in your root build.gradle at the end of repositories:
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
<Option 2> Kotlin DSL Gradle
// Add it in your root build.gradle.kts at the end of repositories:
allprojects {
repositories {
...
maven("https://jitpack.io")
}
}
Step 2. Add the dependency (build.gradle : Module)
#### <Option 1> Groovy Gradle
dependencies {
// library frogo-sdk
implementation 'com.github.frogobox:frogo-sdk:1.0.3'
// library frogo-sdk for desktop
implementation 'com.github.frogobox.frogo-sdk:frogocoresdk:1.0.3'
}
#### <Option 2> Kotlin DSL Gradle
dependencies {
// library frogo-sdk
implementation("com.github.frogobox:frogo-sdk:1.0.3")
// library frogo-sdk for desktop
implementation("com.github.frogobox.frogo-sdk:frogocoresdk:1.0.3")
}
Step 3. Function from this SDK
All Class SDK (android)
FrogoActivity
FrogoApplication
FrogoComposeActivity
FrogoFragment
FrogoFunc
FrogoMusic
FrogoMutableLiveData
FrogoNavigation
FrogoPagerHelper
FrogoPiracyActivity
FrogoPreference
FrogoSinglePreference
FrogoViewModel
All Class SDK (desktop & android)
FrogoApiClient
FrogoApiModel
FrogoApiObserver
FrogoConstant
FrogoDataResponse
FrogoDate
FrogoLocalObserver
FrogoStateResponse
IFrogoDate
FrogoActivity
fun setupDetailActivity(title: String)
fun setupChildFragment(frameId: Int, fragment: Fragment)
fun showToast(message: String)
fun setupEmptyView(view: View, isEmpty: Boolean)
fun setupProgressView(view: View, isProgress: Boolean)
fun checkExtra(extraKey: String): Boolean
fun <Model> FrogoFragmentNewInstance(
fragment: FrogoFragment<*>,
argumentKey: String,
extraDataResult: Model
)
fun isNetworkConnected(): Boolean
fun setupFullScreen()
fun setupHideSystemUI()
fun shareApp(packageName: String, appName: String)
fun rateApp(packageName: String)
FrogoFragment
fun setupChildFragment(frameId: Int, fragment: Fragment)
fun checkArgument(argsKey: String): Boolean
fun setupEmptyView(view: View, isEmpty: Boolean)
fun setupProgressView(view: View, isProgress: Boolean)
fun showToast(message: String)
fun <Model> frogoNewInstance(argsKey: String, data: Model)
Ext Function
FrogoRetrofitExt.kt
// Single Api Request
fun <T : Any> Call<T>.doApiRequest(callback: FrogoDataResponse<T>) {
callback.onShowProgress()
enqueue(object : Callback<T> {
override fun onResponse(call: Call<T>, response: Response<T>) {
response.body()?.let { callback.onSuccess(it) }
callback.onHideProgress()
}
override fun onFailure(call: Call<T>, t: Throwable) {
callback.onFailed(500, t.localizedMessage)
callback.onHideProgress()
}
})
}
FrogoRxJavaObservableExt.kt
// Single Api Request with scheduler
fun <T : Any> Observable<T>.doApiRequest(scheduler: Scheduler, callback: FrogoDataResponse<T>) {
subscribeOn(Schedulers.io())
.doOnSubscribe { callback.onShowProgress() }
.doOnTerminate { callback.onHideProgress() }
.observeOn(scheduler)
.subscribe(object : FrogoApiObserver<T>() {
override fun onSuccess(data: T) {
callback.onSuccess(data)
}
override fun onFailure(code: Int, errorMessage: String) {
callback.onFailed(code, errorMessage)
}
})
}
// -------------------------------------------------------------------------------------------------
// Single Api Request
fun <T : Any> Observable<T>.doApiRequest(callback: FrogoDataResponse<T>) {
doOnSubscribe { callback.onShowProgress() }
.doOnTerminate { callback.onHideProgress() }
.subscribe(object : FrogoApiObserver<T>() {
override fun onSuccess(data: T) {
callback.onSuccess(data)
}
override fun onFailure(code: Int, errorMessage: String) {
callback.onFailed(code, errorMessage)
}
})
}
FrogoContextActivityExt.kt
inline fun <reified ClassActivity> Context.singleStartActivity() {
FLog.d("Activity : ${ClassActivity::class.java.simpleName}")
startActivity(Intent(this, ClassActivity::class.java))
}
// -------------------------------------------------------------------------------------------------
inline fun <reified ClassActivity, reified Model> Context.singleStartActivity(
extraKey: String,
data: Model
) {
val intent = Intent(this, ClassActivity::class.java)
val extraData = Gson().toJson(data)
intent.putExtra(extraKey, extraData)
FLog.d("Activity : ${ClassActivity::class.java.simpleName}")
FLog.d("Data : Extra Data (${Model::class.java.simpleName}) : $extraData")
startActivity(intent)
}
// -------------------------------------------------------------------------------------------------
inline fun <reified Model> Activity.singleGetExtraData(extraKey: String): Model {
val extraIntent = intent.getStringExtra(extraKey)
return Gson().fromJson(extraIntent, Model::class.java)
}
// -------------------------------------------------------------------------------------------------
fun Context.singleStartActivityShareApp(subject: String, text: String) {
val intent = Intent(Intent.ACTION_SEND)
intent.type = "text/plain"
intent.putExtra(Intent.EXTRA_SUBJECT, subject)
intent.putExtra(Intent.EXTRA_TEXT, text)
FLog.d("$TAG : Subject Share App : $subject")
FLog.d("$TAG : Message Share App : $text")
startActivity(Intent.createChooser(intent, subject))
}
// -------------------------------------------------------------------------------------------------
fun Context.singleStartActivityOpenApp(url: String) {
FLog.d("$TAG : Url : $url")
startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(url)))
}
FrogoContextFragmentExt.kt
fun <Model> Fragment.singleNewInstance(argsKey: String, data: Model) {
val argsData = Gson().toJson(data)
val bundleArgs = Bundle().apply {
putString(argsKey, argsData)
}
this.arguments = bundleArgs
}
// -------------------------------------------------------------------------------------------------
inline fun <reified Model> Fragment.singleGetInstance(argsKey: String): Model {
val argsData = this.arguments?.getString(argsKey)
return Gson().fromJson(argsData, Model::class.java)
}
FrogoImageViewExt.kt
fun ImageView.glideLoad(data: Any?) {
FLog.d("$TAG : Params : $data")
FLog.d("$TAG : Glide Load Ext")
Glide.with(context).load(data).into(this)
}
FrogoViewExt.kt
fun View.visible() {
FLog.d("$TAG : View Visible")
visibility = View.VISIBLE
}
// -------------------------------------------------------------------------------------------------
fun View.gone() {
FLog.d("$TAG : View Gone")
visibility = View.GONE
}
// -------------------------------------------------------------------------------------------------
fun View.invisible() {
FLog.d("$TAG : View Invisible")
visibility = View.INVISIBLE
}
// -------------------------------------------------------------------------------------------------
fun View.progressViewHandle(isProgressState: Boolean) {
FLog.d("$TAG : isProgressState >> $isProgressState")
if (isProgressState) {
visible()
} else {
gone()
}
}
// -------------------------------------------------------------------------------------------------
fun View.emptyViewHandle(isEmptyState: Boolean) {
FLog.d("$TAG : isEmptyState >> $isEmptyState")
if (isEmptyState) {
visible()
} else {
gone()
}
}
FrogoContextExt.kt
fun Context.getAppVersionCode(): Int? {
try {
return packageManager?.getPackageInfo(packageName, 0)
?.let { PackageInfoCompat.getLongVersionCode(it).toInt() }
} catch (ex: Exception) {
FLog.e("$TAG : ${ex.message.orEmpty()}")
}
return null
}
// -------------------------------------------------------------------------------------------------
fun Context.showToast(
message: String,
duration: Int = Toast.LENGTH_SHORT
) {
Toast.makeText(this, message, duration).show()
}
// -------------------------------------------------------------------------------------------------
fun Context.hasCameraPermission(): Boolean =
ContextCompat.checkSelfPermission(
this,
Manifest.permission.CAMERA
) == PackageManager.PERMISSION_GRANTED
// -------------------------------------------------------------------------------------------------
fun Context.hasReadExtStoragePermission(): Boolean {
return ContextCompat.checkSelfPermission(
this,
Manifest.permission.READ_EXTERNAL_STORAGE
) == PackageManager.PERMISSION_GRANTED
}
fun Context.hasWriteExtStoragePermission(): Boolean {
return ContextCompat.checkSelfPermission(
this,
Manifest.permission.WRITE_EXTERNAL_STORAGE
) == PackageManager.PERMISSION_GRANTED
}
Added Function
Click for detail !!!
FrogoLog
- SDK for your Log problem to make easier developing android apps
- frogo-log is Long Term Service
- Line number show
- Toast for easy develop and debug
Screenshoot Result
SS 1 |
SS 2 |
SS 3 |
SS 4 |
|
|
|
|
Screenshoot Library Sample
FrogoLog (with line code)
// Function Log Debug
FrogoLog.d("Debug")
// Function Log Info
FrogoLog.i("Info")
// Function Log Verbose
FrogoLog.v("Verbose")
// Function Log Warn
FrogoLog.w("Warn")
// Function Log Error
FrogoLog.e("Error")
// Function Log Simple Debug without message params
FrogoLog.d()
FrogoLog (with line code and Toast)
// Function Log Debug (adding context params)
FrogoLog.d("Debug", this@MainActivity)
// Function Log Info (adding context params)
FrogoLog.i("Info", this@MainActivity)
// Function Log Verbose
FrogoLog.v("Verbose", this@MainActivity)
// Function Log Warn (adding context params)
FrogoLog.w("Warn", this@MainActivity)
// Function Log Error (adding context params)
FrogoLog.e("Error", this@MainActivity)
// Function Log Simple Debug without message params
FrogoLog.d(this@MainActivity)
FLog (without line code)
// Function Log Debug
FLog.d("Debug")
// Function Log Info
FLog.i("Info")
// Function Log Verbose
FLog.v("Verbose")
// Function Log Warn
FLog.w("Warn")
// Function Log Error
FLog.e("Error")
// Function Log Simple Debug without message params
FLog.d()
Flog (without line code with toast)
// Function Log Debug (adding context params)
FLog.d("Debug", this@MainActivity)
// Function Log Info (adding context params)
FLog.i("Info", this@MainActivity)
// Function Log Verbose
FLog.v("Verbose", this@MainActivity)
// Function Log Warn (adding context params)
FLog.w("Warn", this@MainActivity)
// Function Log Error (adding context params)
FLog.e("Error", this@MainActivity)
// Function Log Simple Debug without message params
FLog.d(this@MainActivity)
Result FrogoLog
FrogoNotification
- SDK for your notification problem to make easier developing android apps
- frogo-notification is under huge large development
- Notification with singleton method
- Simple and eazy to use
- With many feature
- Full documentation
- Custom Layout Notification
Screenshoot Sample
Simple Notification |
Stack Notification |
Custom Notification (1) |
Custom Notification (2) |
|
|
|
|
FrogoNotification.Inject(this) // Intialize for Context
.setChannelId(CHANNEL_ID) // Intialize for Channel ID
.setChannelName(CHANNEL_NAME) // Initialize for Channel Name
.setContentIntent(pendingIntent) // Initialize for Content Intent
.setSmallIcon(R.drawable.ic_frogo_notif) // Initialize for Small Icon
.setLargeIcon(R.drawable.ic_frogo_notif) // Initialize for Large Icon
.setContentTitle(resources.getString(R.string.content_title)) // Initialize for Content Title
.setContentText(resources.getString(R.string.content_text)) // Initialize for Content Text
.setSubText(resources.getString(R.string.subtext)) // Initialize for Sub Text
.setupAutoCancel() // Initialize for Auto Cancel
.build() // Build the Frogo Notification
.launch(NOTIFICATION_ID) // Notify the Frogo Notification
Simple Notification
FrogoNotification.Inject(this) // Intialize for Context
.setChannelId(CHANNEL_ID) // Intialize for Channel ID
.setChannelName(CHANNEL_NAME) // Initialize for Channel Name
.setContentIntent(pendingIntent) // Initialize for Content Intent
.setSmallIcon(R.drawable.ic_frogo_notif) // Initialize for Small Icon
.setLargeIcon(R.drawable.ic_frogo_notif) // Initialize for Large Icon
.setContentTitle(resources.getString(R.string.content_title)) // Initialize for Content Title
.setContentText(resources.getString(R.string.content_text)) // Initialize for Content Text
.setSubText(resources.getString(R.string.subtext)) // Initialize for Sub Text
.setupAutoCancel() // Initialize for Auto Cancel
.build() // Build the Frogo Notification
.launch(NOTIFICATION_ID) // Notify the Frogo Notification
Custom Layout (NEW FEATURE)
val collapsed = object : FrogoNotifCustomContentViewListener {
override fun setupCustomView(): Int {
return R.layout.notification_collapsed
}
override fun setupComponent(context: Context, customView: RemoteViews) {
customView.apply{
setTextViewText(R.id.text_view_collapsed_1, "Hello World!")
}
}
}
val expanded = object : FrogoNotifCustomContentViewListener {
override fun setupCustomView(): Int {
return R.layout.notification_expanded
}
override fun setupComponent(context: Context, customView: RemoteViews) {
customView.apply {
setImageViewResource(R.id.image_view_expanded, R.drawable.ic_android)
setOnClickPendingIntent(R.id.image_view_expanded, clickPendingIntent)
}
}
}
FrogoNotification.Inject(this) // Intialize for Context
.setChannelId(FrogoApp.CHANNEL_ID) // Intialize for Channel ID
.setChannelName(FrogoApp.CHANNEL_NAME) // Initialize for Channel Name
.setSmallIcon(R.drawable.ic_android) // Initialize for Small Icon
.setCustomContentView(collapsed)
.setCustomBigContentView(expanded)
.build() // Build the Frogo Notification
.launch(FrogoApp.NOTIFICATION_ID) // Notify the Frogo Notification
With Action Replay
FrogoNotification.Inject(this)
.setChannelId(CHANNEL_ID)
.setChannelName(CHANNEL_NAME as String)
.setSmallIcon(R.drawable.ic_frogo_notif)
.setContentTitle(getString(R.string.notif_title))
.setContentText(getString(R.string.notif_content))
.setupShowWhen()
.setupActionRemoteInput(object : FrogoNotifActionRemoteInputListener {
override fun setRemoteInputResultKey(): String {
return KEY_REPLY
}
override fun setRemoteInputLabel(): String {
return getString(R.string.notif_action_reply)
}
override fun setActionIcon(): Int {
return R.drawable.ic_frogo_send
}
override fun setActionTitle(): String {
return getString(R.string.notif_action_reply)
}
override fun setActionIntent(): PendingIntent? {
return getReplyPendingIntent()
}
override fun setAllowGeneratedReplies(): Boolean {
return true
}
})
.build()
.launch(mNotificationId)
With Inbox Style (Stack)
val frogoNotification = FrogoNotification.Inject(this)
.setChannelId(CHANNEL_ID)
.setChannelName(CHANNEL_NAME)
.setSmallIcon(R.drawable.ic_frogo_email)
.setGroup(GROUP_KEY_EMAILS)
.setContentIntent(pendingIntent)
.setupAutoCancel()
// Check if NotificationID is smaller than Max Notif
if (idNotification < MAX_NOTIFICATION) {
stackNotif[idNotification].message?.let {
frogoNotification
.setContentTitle("New Email from " + stackNotif[idNotification].sender)
.setContentText(it)
.setLargeIcon(R.drawable.ic_frogo_notif)
}
} else {
frogoNotification
.setContentTitle("$idNotification new emails")
.setContentText("[email protected]")
.setGroupSummary()
.setupInboxStyle(object : FrogoNotifInboxStyleListener {
override fun addLine1(): String {
return "New Email from " + stackNotif[idNotification].sender
}
override fun addLine2(): String {
return "New Email from " + stackNotif[idNotification - 1].sender
}
override fun setBigContentTitle(): String {
return "$idNotification new emails"
}
override fun setSummaryText(): String {
return "mail@frogobox"
}
})
}
frogoNotification
.build()
.launch(idNotification)
With Frogo Style
FrogoNotification.Inject(this) // Intialize for Context
.setSmallIcon(R.drawable.ic_frogo_notif) // Initialize for Small Icon
.setupWithFrogoStyle()
.build() // Build the Frogo Notification
.launch(NOTIFICATION_ID) // Notify the Frogo Notification
For Documentation
Colaborator
Very open to anyone, I'll write your name under this, please contribute by sending an email to me
- Mail To [email protected]
- Subject : Github _ [Github-Username-Account] _ [Language] _ [Repository-Name]
- Example : Github_amirisback_kotlin_admob-helper-implementation
Name Of Contribute
- Muhammad Faisal Amir
- Waiting List
- Waiting List
Waiting for your contribute
Attention !!!
- Please enjoy and don't forget fork and give a star
- Don't Forget Follow My Github Account
Source code(tar.gz)
Source code(zip)
1.0.2(Apr 14, 2022)
About This Project (release 👷🔧️👷♀️⛏)
- SDK for anything your problem to make easier developing android apps
- Available for android and desktop
- Privacy Policy Click Here
- License Click Here
ScreenShoot
Version Release
This Is Latest Release
$version_release = 1.0.2
What's New??
* SDK Android and Desktop *
* Adding Ext Function *
* Update: Fixing Bug RxJava Ext *
Download this project
Step 1. Add the JitPack repository to your build file (build.gradle : Project)
<Option 1> Groovy Gradle
// Add it in your root build.gradle at the end of repositories:
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
<Option 2> Kotlin DSL Gradle
// Add it in your root build.gradle.kts at the end of repositories:
allprojects {
repositories {
...
maven("https://jitpack.io")
}
}
Step 2. Add the dependency (build.gradle : Module)
#### <Option 1> Groovy Gradle
dependencies {
// library frogo-sdk
implementation 'com.github.frogobox:frogo-sdk:1.0.2'
// library frogo-sdk for desktop
implementation 'com.github.frogobox.frogo-sdk:frogocoresdk:1.0.2'
}
#### <Option 2> Kotlin DSL Gradle
dependencies {
// library frogo-sdk
implementation("com.github.frogobox:frogo-sdk:1.0.2")
// library frogo-sdk for desktop
implementation("com.github.frogobox.frogo-sdk:frogocoresdk:1.0.2")
}
Step 3. Function from this SDK
All Class SDK (android)
FrogoActivity
FrogoApplication
FrogoComposeActivity
FrogoFragment
FrogoFunc
FrogoMusic
FrogoMutableLiveData
FrogoNavigation
FrogoPagerHelper
FrogoPiracyActivity
FrogoPreference
FrogoSinglePreference
FrogoViewModel
All Class SDK (desktop & android)
FrogoApiClient
FrogoApiModel
FrogoApiObserver
FrogoConstant
FrogoDataResponse
FrogoDate
FrogoLocalObserver
FrogoStateResponse
IFrogoDate
FrogoActivity
fun setupDetailActivity(title: String)
fun setupChildFragment(frameId: Int, fragment: Fragment)
fun showToast(message: String)
fun setupEmptyView(view: View, isEmpty: Boolean)
fun setupProgressView(view: View, isProgress: Boolean)
fun checkExtra(extraKey: String): Boolean
fun <Model> FrogoFragmentNewInstance(
fragment: FrogoFragment<*>,
argumentKey: String,
extraDataResult: Model
)
fun isNetworkConnected(): Boolean
fun setupFullScreen()
fun setupHideSystemUI()
fun shareApp(packageName: String, appName: String)
fun rateApp(packageName: String)
FrogoFragment
fun setupChildFragment(frameId: Int, fragment: Fragment)
fun checkArgument(argsKey: String): Boolean
fun setupEmptyView(view: View, isEmpty: Boolean)
fun setupProgressView(view: View, isProgress: Boolean)
fun showToast(message: String)
fun <Model> frogoNewInstance(argsKey: String, data: Model)
Ext Function
FrogoRetrofitExt.kt
// Single Api Request
fun <T : Any> Call<T>.doApiRequest(callback: FrogoDataResponse<T>) {
callback.onShowProgress()
enqueue(object : Callback<T> {
override fun onResponse(call: Call<T>, response: Response<T>) {
response.body()?.let { callback.onSuccess(it) }
callback.onHideProgress()
}
override fun onFailure(call: Call<T>, t: Throwable) {
callback.onFailed(500, t.localizedMessage)
callback.onHideProgress()
}
})
}
FrogoRxJavaObservableExt.kt
// Single Api Request with scheduler
fun <T : Any> Observable<T>.doApiRequest(scheduler: Scheduler, callback: FrogoDataResponse<T>) {
subscribeOn(Schedulers.io())
.doOnSubscribe { callback.onShowProgress() }
.doOnTerminate { callback.onHideProgress() }
.observeOn(scheduler)
.subscribe(object : FrogoApiObserver<T>() {
override fun onSuccess(data: T) {
callback.onSuccess(data)
}
override fun onFailure(code: Int, errorMessage: String) {
callback.onFailed(code, errorMessage)
}
})
}
// -------------------------------------------------------------------------------------------------
// Single Api Request
fun <T : Any> Observable<T>.doApiRequest(callback: FrogoDataResponse<T>) {
doOnSubscribe { callback.onShowProgress() }
.doOnTerminate { callback.onHideProgress() }
.subscribe(object : FrogoApiObserver<T>() {
override fun onSuccess(data: T) {
callback.onSuccess(data)
}
override fun onFailure(code: Int, errorMessage: String) {
callback.onFailed(code, errorMessage)
}
})
}
FrogoContextActivityExt.kt
inline fun <reified ClassActivity> Context.singleStartActivity() {
FLog.d("Activity : ${ClassActivity::class.java.simpleName}")
startActivity(Intent(this, ClassActivity::class.java))
}
// -------------------------------------------------------------------------------------------------
inline fun <reified ClassActivity, reified Model> Context.singleStartActivity(
extraKey: String,
data: Model
) {
val intent = Intent(this, ClassActivity::class.java)
val extraData = Gson().toJson(data)
intent.putExtra(extraKey, extraData)
FLog.d("Activity : ${ClassActivity::class.java.simpleName}")
FLog.d("Data : Extra Data (${Model::class.java.simpleName}) : $extraData")
startActivity(intent)
}
// -------------------------------------------------------------------------------------------------
inline fun <reified Model> Activity.singleGetExtraData(extraKey: String): Model {
val extraIntent = intent.getStringExtra(extraKey)
return Gson().fromJson(extraIntent, Model::class.java)
}
// -------------------------------------------------------------------------------------------------
fun Context.singleStartActivityShareApp(subject: String, text: String) {
val intent = Intent(Intent.ACTION_SEND)
intent.type = "text/plain"
intent.putExtra(Intent.EXTRA_SUBJECT, subject)
intent.putExtra(Intent.EXTRA_TEXT, text)
FLog.d("$TAG : Subject Share App : $subject")
FLog.d("$TAG : Message Share App : $text")
startActivity(Intent.createChooser(intent, subject))
}
// -------------------------------------------------------------------------------------------------
fun Context.singleStartActivityOpenApp(url: String) {
FLog.d("$TAG : Url : $url")
startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(url)))
}
FrogoContextFragmentExt.kt
fun <Model> Fragment.singleNewInstance(argsKey: String, data: Model) {
val argsData = Gson().toJson(data)
val bundleArgs = Bundle().apply {
putString(argsKey, argsData)
}
this.arguments = bundleArgs
}
// -------------------------------------------------------------------------------------------------
inline fun <reified Model> Fragment.singleGetInstance(argsKey: String): Model {
val argsData = this.arguments?.getString(argsKey)
return Gson().fromJson(argsData, Model::class.java)
}
FrogoImageViewExt.kt
fun ImageView.glideLoad(data: Any?) {
FLog.d("$TAG : Params : $data")
FLog.d("$TAG : Glide Load Ext")
Glide.with(context).load(data).into(this)
}
FrogoViewExt.kt
fun View.visible() {
FLog.d("$TAG : View Visible")
visibility = View.VISIBLE
}
// -------------------------------------------------------------------------------------------------
fun View.gone() {
FLog.d("$TAG : View Gone")
visibility = View.GONE
}
// -------------------------------------------------------------------------------------------------
fun View.invisible() {
FLog.d("$TAG : View Invisible")
visibility = View.INVISIBLE
}
// -------------------------------------------------------------------------------------------------
fun View.progressViewHandle(isProgressState: Boolean) {
FLog.d("$TAG : isProgressState >> $isProgressState")
if (isProgressState) {
visible()
} else {
gone()
}
}
// -------------------------------------------------------------------------------------------------
fun View.emptyViewHandle(isEmptyState: Boolean) {
FLog.d("$TAG : isEmptyState >> $isEmptyState")
if (isEmptyState) {
visible()
} else {
gone()
}
}
FrogoContextExt.kt
fun Context.getAppVersionCode(): Int? {
try {
return packageManager?.getPackageInfo(packageName, 0)
?.let { PackageInfoCompat.getLongVersionCode(it).toInt() }
} catch (ex: Exception) {
FLog.e("$TAG : ${ex.message.orEmpty()}")
}
return null
}
// -------------------------------------------------------------------------------------------------
fun Context.showToast(
message: String,
duration: Int = Toast.LENGTH_SHORT
) {
Toast.makeText(this, message, duration).show()
}
// -------------------------------------------------------------------------------------------------
fun Context.hasCameraPermission(): Boolean =
ContextCompat.checkSelfPermission(
this,
Manifest.permission.CAMERA
) == PackageManager.PERMISSION_GRANTED
// -------------------------------------------------------------------------------------------------
fun Context.hasReadExtStoragePermission(): Boolean {
return ContextCompat.checkSelfPermission(
this,
Manifest.permission.READ_EXTERNAL_STORAGE
) == PackageManager.PERMISSION_GRANTED
}
fun Context.hasWriteExtStoragePermission(): Boolean {
return ContextCompat.checkSelfPermission(
this,
Manifest.permission.WRITE_EXTERNAL_STORAGE
) == PackageManager.PERMISSION_GRANTED
}
Added Function
Click for detail !!!
FrogoLog
- SDK for your Log problem to make easier developing android apps
- frogo-log is Long Term Service
- Line number show
- Toast for easy develop and debug
Screenshoot Result
SS 1 |
SS 2 |
SS 3 |
SS 4 |
|
|
|
|
Screenshoot Library Sample
FrogoLog (with line code)
// Function Log Debug
FrogoLog.d("Debug")
// Function Log Info
FrogoLog.i("Info")
// Function Log Verbose
FrogoLog.v("Verbose")
// Function Log Warn
FrogoLog.w("Warn")
// Function Log Error
FrogoLog.e("Error")
// Function Log Simple Debug without message params
FrogoLog.d()
FrogoLog (with line code and Toast)
// Function Log Debug (adding context params)
FrogoLog.d("Debug", this@MainActivity)
// Function Log Info (adding context params)
FrogoLog.i("Info", this@MainActivity)
// Function Log Verbose
FrogoLog.v("Verbose", this@MainActivity)
// Function Log Warn (adding context params)
FrogoLog.w("Warn", this@MainActivity)
// Function Log Error (adding context params)
FrogoLog.e("Error", this@MainActivity)
// Function Log Simple Debug without message params
FrogoLog.d(this@MainActivity)
FLog (without line code)
// Function Log Debug
FLog.d("Debug")
// Function Log Info
FLog.i("Info")
// Function Log Verbose
FLog.v("Verbose")
// Function Log Warn
FLog.w("Warn")
// Function Log Error
FLog.e("Error")
// Function Log Simple Debug without message params
FLog.d()
Flog (without line code with toast)
// Function Log Debug (adding context params)
FLog.d("Debug", this@MainActivity)
// Function Log Info (adding context params)
FLog.i("Info", this@MainActivity)
// Function Log Verbose
FLog.v("Verbose", this@MainActivity)
// Function Log Warn (adding context params)
FLog.w("Warn", this@MainActivity)
// Function Log Error (adding context params)
FLog.e("Error", this@MainActivity)
// Function Log Simple Debug without message params
FLog.d(this@MainActivity)
Result FrogoLog
FrogoNotification
- SDK for your notification problem to make easier developing android apps
- frogo-notification is under huge large development
- Notification with singleton method
- Simple and eazy to use
- With many feature
- Full documentation
- Custom Layout Notification
Screenshoot Sample
Simple Notification |
Stack Notification |
Custom Notification (1) |
Custom Notification (2) |
|
|
|
|
FrogoNotification.Inject(this) // Intialize for Context
.setChannelId(CHANNEL_ID) // Intialize for Channel ID
.setChannelName(CHANNEL_NAME) // Initialize for Channel Name
.setContentIntent(pendingIntent) // Initialize for Content Intent
.setSmallIcon(R.drawable.ic_frogo_notif) // Initialize for Small Icon
.setLargeIcon(R.drawable.ic_frogo_notif) // Initialize for Large Icon
.setContentTitle(resources.getString(R.string.content_title)) // Initialize for Content Title
.setContentText(resources.getString(R.string.content_text)) // Initialize for Content Text
.setSubText(resources.getString(R.string.subtext)) // Initialize for Sub Text
.setupAutoCancel() // Initialize for Auto Cancel
.build() // Build the Frogo Notification
.launch(NOTIFICATION_ID) // Notify the Frogo Notification
Simple Notification
FrogoNotification.Inject(this) // Intialize for Context
.setChannelId(CHANNEL_ID) // Intialize for Channel ID
.setChannelName(CHANNEL_NAME) // Initialize for Channel Name
.setContentIntent(pendingIntent) // Initialize for Content Intent
.setSmallIcon(R.drawable.ic_frogo_notif) // Initialize for Small Icon
.setLargeIcon(R.drawable.ic_frogo_notif) // Initialize for Large Icon
.setContentTitle(resources.getString(R.string.content_title)) // Initialize for Content Title
.setContentText(resources.getString(R.string.content_text)) // Initialize for Content Text
.setSubText(resources.getString(R.string.subtext)) // Initialize for Sub Text
.setupAutoCancel() // Initialize for Auto Cancel
.build() // Build the Frogo Notification
.launch(NOTIFICATION_ID) // Notify the Frogo Notification
Custom Layout (NEW FEATURE)
val collapsed = object : FrogoNotifCustomContentViewListener {
override fun setupCustomView(): Int {
return R.layout.notification_collapsed
}
override fun setupComponent(context: Context, customView: RemoteViews) {
customView.apply{
setTextViewText(R.id.text_view_collapsed_1, "Hello World!")
}
}
}
val expanded = object : FrogoNotifCustomContentViewListener {
override fun setupCustomView(): Int {
return R.layout.notification_expanded
}
override fun setupComponent(context: Context, customView: RemoteViews) {
customView.apply {
setImageViewResource(R.id.image_view_expanded, R.drawable.ic_android)
setOnClickPendingIntent(R.id.image_view_expanded, clickPendingIntent)
}
}
}
FrogoNotification.Inject(this) // Intialize for Context
.setChannelId(FrogoApp.CHANNEL_ID) // Intialize for Channel ID
.setChannelName(FrogoApp.CHANNEL_NAME) // Initialize for Channel Name
.setSmallIcon(R.drawable.ic_android) // Initialize for Small Icon
.setCustomContentView(collapsed)
.setCustomBigContentView(expanded)
.build() // Build the Frogo Notification
.launch(FrogoApp.NOTIFICATION_ID) // Notify the Frogo Notification
With Action Replay
FrogoNotification.Inject(this)
.setChannelId(CHANNEL_ID)
.setChannelName(CHANNEL_NAME as String)
.setSmallIcon(R.drawable.ic_frogo_notif)
.setContentTitle(getString(R.string.notif_title))
.setContentText(getString(R.string.notif_content))
.setupShowWhen()
.setupActionRemoteInput(object : FrogoNotifActionRemoteInputListener {
override fun setRemoteInputResultKey(): String {
return KEY_REPLY
}
override fun setRemoteInputLabel(): String {
return getString(R.string.notif_action_reply)
}
override fun setActionIcon(): Int {
return R.drawable.ic_frogo_send
}
override fun setActionTitle(): String {
return getString(R.string.notif_action_reply)
}
override fun setActionIntent(): PendingIntent? {
return getReplyPendingIntent()
}
override fun setAllowGeneratedReplies(): Boolean {
return true
}
})
.build()
.launch(mNotificationId)
With Inbox Style (Stack)
val frogoNotification = FrogoNotification.Inject(this)
.setChannelId(CHANNEL_ID)
.setChannelName(CHANNEL_NAME)
.setSmallIcon(R.drawable.ic_frogo_email)
.setGroup(GROUP_KEY_EMAILS)
.setContentIntent(pendingIntent)
.setupAutoCancel()
// Check if NotificationID is smaller than Max Notif
if (idNotification < MAX_NOTIFICATION) {
stackNotif[idNotification].message?.let {
frogoNotification
.setContentTitle("New Email from " + stackNotif[idNotification].sender)
.setContentText(it)
.setLargeIcon(R.drawable.ic_frogo_notif)
}
} else {
frogoNotification
.setContentTitle("$idNotification new emails")
.setContentText("[email protected]")
.setGroupSummary()
.setupInboxStyle(object : FrogoNotifInboxStyleListener {
override fun addLine1(): String {
return "New Email from " + stackNotif[idNotification].sender
}
override fun addLine2(): String {
return "New Email from " + stackNotif[idNotification - 1].sender
}
override fun setBigContentTitle(): String {
return "$idNotification new emails"
}
override fun setSummaryText(): String {
return "mail@frogobox"
}
})
}
frogoNotification
.build()
.launch(idNotification)
With Frogo Style
FrogoNotification.Inject(this) // Intialize for Context
.setSmallIcon(R.drawable.ic_frogo_notif) // Initialize for Small Icon
.setupWithFrogoStyle()
.build() // Build the Frogo Notification
.launch(NOTIFICATION_ID) // Notify the Frogo Notification
For Documentation
Colaborator
Very open to anyone, I'll write your name under this, please contribute by sending an email to me
- Mail To [email protected]
- Subject : Github _ [Github-Username-Account] _ [Language] _ [Repository-Name]
- Example : Github_amirisback_kotlin_admob-helper-implementation
Name Of Contribute
- Muhammad Faisal Amir
- Waiting List
- Waiting List
Waiting for your contribute
Attention !!!
- Please enjoy and don't forget fork and give a star
- Don't Forget Follow My Github Account
Source code(tar.gz)
Source code(zip)
1.0.1(Apr 11, 2022)
Full Changelog: https://github.com/frogobox/frogo-sdk/compare/1.0.0...1.0.1
About This Project (release 👷🔧️👷♀️⛏)
- SDK for anything your problem to make easier developing android apps
- Available for android and desktop
- Privacy Policy Click Here
- License Click Here
ScreenShoot
Version Release
This Is Latest Release
$version_release = 1.0.1
What's New??
* SDK Android and Desktop *
* Adding Ext Function *
Download this project
Step 1. Add the JitPack repository to your build file (build.gradle : Project)
<Option 1> Groovy Gradle
// Add it in your root build.gradle at the end of repositories:
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
<Option 2> Kotlin DSL Gradle
// Add it in your root build.gradle.kts at the end of repositories:
allprojects {
repositories {
...
maven("https://jitpack.io")
}
}
Step 2. Add the dependency (build.gradle : Module)
#### <Option 1> Groovy Gradle
dependencies {
// library frogo-sdk
implementation 'com.github.frogobox:frogo-sdk:1.0.1'
}
#### <Option 2> Kotlin DSL Gradle
dependencies {
// library frogo-sdk
implementation("com.github.frogobox:frogo-sdk:1.0.1")
}
Step 3. Function from this SDK
All Class SDK (android)
FrogoActivity
FrogoApplication
FrogoComposeActivity
FrogoFragment
FrogoFunc
FrogoMusic
FrogoMutableLiveData
FrogoNavigation
FrogoPagerHelper
FrogoPiracyActivity
FrogoPreference
FrogoSinglePreference
FrogoViewModel
All Class SDK (desktop & android)
FrogoApiClient
FrogoApiModel
FrogoApiObserver
FrogoConstant
FrogoDataResponse
FrogoDate
FrogoLocalObserver
FrogoStateResponse
IFrogoDate
FrogoActivity
fun setupDetailActivity(title: String)
fun setupChildFragment(frameId: Int, fragment: Fragment)
fun showToast(message: String)
fun setupEmptyView(view: View, isEmpty: Boolean)
fun setupProgressView(view: View, isProgress: Boolean)
fun checkExtra(extraKey: String): Boolean
fun <Model> FrogoFragmentNewInstance(
fragment: FrogoFragment<*>,
argumentKey: String,
extraDataResult: Model
)
fun isNetworkConnected(): Boolean
fun setupFullScreen()
fun setupHideSystemUI()
fun shareApp(packageName: String, appName: String)
fun rateApp(packageName: String)
FrogoFragment
fun setupChildFragment(frameId: Int, fragment: Fragment)
fun checkArgument(argsKey: String): Boolean
fun setupEmptyView(view: View, isEmpty: Boolean)
fun setupProgressView(view: View, isProgress: Boolean)
fun showToast(message: String)
fun <Model> frogoNewInstance(argsKey: String, data: Model)
Ext Function
FrogoRetrofitExt.kt
// Single Api Request
fun <T : Any> Call<T>.doApiRequest(callback: FrogoDataResponse<T>) {
callback.onShowProgress()
enqueue(object : Callback<T> {
override fun onResponse(call: Call<T>, response: Response<T>) {
response.body()?.let { callback.onSuccess(it) }
callback.onHideProgress()
}
override fun onFailure(call: Call<T>, t: Throwable) {
callback.onFailed(500, t.localizedMessage)
callback.onHideProgress()
}
})
}
FrogoRxJavaObservableExt.kt
// Single Api Request with scheduler
fun <T : Any> Observable<T>.doApiRequest(scheduler: Scheduler, callback: FrogoDataResponse<T>) {
subscribeOn(Schedulers.io())
.doOnSubscribe { callback.onShowProgress() }
.doOnTerminate { callback.onHideProgress() }
.observeOn(scheduler)
.subscribe(object : FrogoApiObserver<T>() {
override fun onSuccess(data: T) {
callback.onSuccess(data)
}
override fun onFailure(code: Int, errorMessage: String) {
callback.onFailed(code, errorMessage)
}
})
}
// -------------------------------------------------------------------------------------------------
// Single Api Request
fun <T : Any> Observable<T>.doApiRequest(callback: FrogoDataResponse<T>) {
doOnSubscribe { callback.onShowProgress() }
.doOnTerminate { callback.onHideProgress() }
.subscribe(object : FrogoApiObserver<T>() {
override fun onSuccess(data: T) {
callback.onSuccess(data)
}
override fun onFailure(code: Int, errorMessage: String) {
callback.onFailed(code, errorMessage)
}
})
}
FrogoContextActivityExt.kt
inline fun <reified ClassActivity> Context.singleStartActivity() {
FLog.d("Activity : ${ClassActivity::class.java.simpleName}")
startActivity(Intent(this, ClassActivity::class.java))
}
// -------------------------------------------------------------------------------------------------
inline fun <reified ClassActivity, reified Model> Context.singleStartActivity(
extraKey: String,
data: Model
) {
val intent = Intent(this, ClassActivity::class.java)
val extraData = Gson().toJson(data)
intent.putExtra(extraKey, extraData)
FLog.d("Activity : ${ClassActivity::class.java.simpleName}")
FLog.d("Data : Extra Data (${Model::class.java.simpleName}) : $extraData")
startActivity(intent)
}
// -------------------------------------------------------------------------------------------------
inline fun <reified Model> Activity.singleGetExtraData(extraKey: String): Model {
val extraIntent = intent.getStringExtra(extraKey)
return Gson().fromJson(extraIntent, Model::class.java)
}
// -------------------------------------------------------------------------------------------------
fun Context.singleStartActivityShareApp(subject: String, text: String) {
val intent = Intent(Intent.ACTION_SEND)
intent.type = "text/plain"
intent.putExtra(Intent.EXTRA_SUBJECT, subject)
intent.putExtra(Intent.EXTRA_TEXT, text)
FLog.d("$TAG : Subject Share App : $subject")
FLog.d("$TAG : Message Share App : $text")
startActivity(Intent.createChooser(intent, subject))
}
// -------------------------------------------------------------------------------------------------
fun Context.singleStartActivityOpenApp(url: String) {
FLog.d("$TAG : Url : $url")
startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(url)))
}
FrogoContextFragmentExt.kt
fun <Model> Fragment.singleNewInstance(argsKey: String, data: Model) {
val argsData = Gson().toJson(data)
val bundleArgs = Bundle().apply {
putString(argsKey, argsData)
}
this.arguments = bundleArgs
}
// -------------------------------------------------------------------------------------------------
inline fun <reified Model> Fragment.singleGetInstance(argsKey: String): Model {
val argsData = this.arguments?.getString(argsKey)
return Gson().fromJson(argsData, Model::class.java)
}
FrogoImageViewExt.kt
fun ImageView.glideLoad(data: Any?) {
FLog.d("$TAG : Params : $data")
FLog.d("$TAG : Glide Load Ext")
Glide.with(context).load(data).into(this)
}
FrogoViewExt.kt
fun View.visible() {
FLog.d("$TAG : View Visible")
visibility = View.VISIBLE
}
// -------------------------------------------------------------------------------------------------
fun View.gone() {
FLog.d("$TAG : View Gone")
visibility = View.GONE
}
// -------------------------------------------------------------------------------------------------
fun View.invisible() {
FLog.d("$TAG : View Invisible")
visibility = View.INVISIBLE
}
// -------------------------------------------------------------------------------------------------
fun View.progressViewHandle(isProgressState: Boolean) {
FLog.d("$TAG : isProgressState >> $isProgressState")
if (isProgressState) {
visible()
} else {
gone()
}
}
// -------------------------------------------------------------------------------------------------
fun View.emptyViewHandle(isEmptyState: Boolean) {
FLog.d("$TAG : isEmptyState >> $isEmptyState")
if (isEmptyState) {
visible()
} else {
gone()
}
}
FrogoContextExt.kt
fun Context.getAppVersionCode(): Int? {
try {
return packageManager?.getPackageInfo(packageName, 0)
?.let { PackageInfoCompat.getLongVersionCode(it).toInt() }
} catch (ex: Exception) {
FLog.e("$TAG : ${ex.message.orEmpty()}")
}
return null
}
// -------------------------------------------------------------------------------------------------
fun Context.showToast(
message: String,
duration: Int = Toast.LENGTH_SHORT
) {
Toast.makeText(this, message, duration).show()
}
// -------------------------------------------------------------------------------------------------
fun Context.hasCameraPermission(): Boolean =
ContextCompat.checkSelfPermission(
this,
Manifest.permission.CAMERA
) == PackageManager.PERMISSION_GRANTED
// -------------------------------------------------------------------------------------------------
fun Context.hasReadExtStoragePermission(): Boolean {
return ContextCompat.checkSelfPermission(
this,
Manifest.permission.READ_EXTERNAL_STORAGE
) == PackageManager.PERMISSION_GRANTED
}
fun Context.hasWriteExtStoragePermission(): Boolean {
return ContextCompat.checkSelfPermission(
this,
Manifest.permission.WRITE_EXTERNAL_STORAGE
) == PackageManager.PERMISSION_GRANTED
}
Added Function
Click for detail !!!
FrogoLog
- SDK for your Log problem to make easier developing android apps
- frogo-log is Long Term Service
- Line number show
- Toast for easy develop and debug
Screenshoot Result
SS 1 |
SS 2 |
SS 3 |
SS 4 |
|
|
|
|
Screenshoot Library Sample
FrogoLog (with line code)
// Function Log Debug
FrogoLog.d("Debug")
// Function Log Info
FrogoLog.i("Info")
// Function Log Verbose
FrogoLog.v("Verbose")
// Function Log Warn
FrogoLog.w("Warn")
// Function Log Error
FrogoLog.e("Error")
// Function Log Simple Debug without message params
FrogoLog.d()
FrogoLog (with line code and Toast)
// Function Log Debug (adding context params)
FrogoLog.d("Debug", this@MainActivity)
// Function Log Info (adding context params)
FrogoLog.i("Info", this@MainActivity)
// Function Log Verbose
FrogoLog.v("Verbose", this@MainActivity)
// Function Log Warn (adding context params)
FrogoLog.w("Warn", this@MainActivity)
// Function Log Error (adding context params)
FrogoLog.e("Error", this@MainActivity)
// Function Log Simple Debug without message params
FrogoLog.d(this@MainActivity)
FLog (without line code)
// Function Log Debug
FLog.d("Debug")
// Function Log Info
FLog.i("Info")
// Function Log Verbose
FLog.v("Verbose")
// Function Log Warn
FLog.w("Warn")
// Function Log Error
FLog.e("Error")
// Function Log Simple Debug without message params
FLog.d()
Flog (without line code with toast)
// Function Log Debug (adding context params)
FLog.d("Debug", this@MainActivity)
// Function Log Info (adding context params)
FLog.i("Info", this@MainActivity)
// Function Log Verbose
FLog.v("Verbose", this@MainActivity)
// Function Log Warn (adding context params)
FLog.w("Warn", this@MainActivity)
// Function Log Error (adding context params)
FLog.e("Error", this@MainActivity)
// Function Log Simple Debug without message params
FLog.d(this@MainActivity)
Result FrogoLog
FrogoNotification
- SDK for your notification problem to make easier developing android apps
- frogo-notification is under huge large development
- Notification with singleton method
- Simple and eazy to use
- With many feature
- Full documentation
- Custom Layout Notification
Screenshoot Sample
Simple Notification |
Stack Notification |
Custom Notification (1) |
Custom Notification (2) |
|
|
|
|
FrogoNotification.Inject(this) // Intialize for Context
.setChannelId(CHANNEL_ID) // Intialize for Channel ID
.setChannelName(CHANNEL_NAME) // Initialize for Channel Name
.setContentIntent(pendingIntent) // Initialize for Content Intent
.setSmallIcon(R.drawable.ic_frogo_notif) // Initialize for Small Icon
.setLargeIcon(R.drawable.ic_frogo_notif) // Initialize for Large Icon
.setContentTitle(resources.getString(R.string.content_title)) // Initialize for Content Title
.setContentText(resources.getString(R.string.content_text)) // Initialize for Content Text
.setSubText(resources.getString(R.string.subtext)) // Initialize for Sub Text
.setupAutoCancel() // Initialize for Auto Cancel
.build() // Build the Frogo Notification
.launch(NOTIFICATION_ID) // Notify the Frogo Notification
Simple Notification
FrogoNotification.Inject(this) // Intialize for Context
.setChannelId(CHANNEL_ID) // Intialize for Channel ID
.setChannelName(CHANNEL_NAME) // Initialize for Channel Name
.setContentIntent(pendingIntent) // Initialize for Content Intent
.setSmallIcon(R.drawable.ic_frogo_notif) // Initialize for Small Icon
.setLargeIcon(R.drawable.ic_frogo_notif) // Initialize for Large Icon
.setContentTitle(resources.getString(R.string.content_title)) // Initialize for Content Title
.setContentText(resources.getString(R.string.content_text)) // Initialize for Content Text
.setSubText(resources.getString(R.string.subtext)) // Initialize for Sub Text
.setupAutoCancel() // Initialize for Auto Cancel
.build() // Build the Frogo Notification
.launch(NOTIFICATION_ID) // Notify the Frogo Notification
Custom Layout (NEW FEATURE)
val collapsed = object : FrogoNotifCustomContentViewListener {
override fun setupCustomView(): Int {
return R.layout.notification_collapsed
}
override fun setupComponent(context: Context, customView: RemoteViews) {
customView.apply{
setTextViewText(R.id.text_view_collapsed_1, "Hello World!")
}
}
}
val expanded = object : FrogoNotifCustomContentViewListener {
override fun setupCustomView(): Int {
return R.layout.notification_expanded
}
override fun setupComponent(context: Context, customView: RemoteViews) {
customView.apply {
setImageViewResource(R.id.image_view_expanded, R.drawable.ic_android)
setOnClickPendingIntent(R.id.image_view_expanded, clickPendingIntent)
}
}
}
FrogoNotification.Inject(this) // Intialize for Context
.setChannelId(FrogoApp.CHANNEL_ID) // Intialize for Channel ID
.setChannelName(FrogoApp.CHANNEL_NAME) // Initialize for Channel Name
.setSmallIcon(R.drawable.ic_android) // Initialize for Small Icon
.setCustomContentView(collapsed)
.setCustomBigContentView(expanded)
.build() // Build the Frogo Notification
.launch(FrogoApp.NOTIFICATION_ID) // Notify the Frogo Notification
With Action Replay
FrogoNotification.Inject(this)
.setChannelId(CHANNEL_ID)
.setChannelName(CHANNEL_NAME as String)
.setSmallIcon(R.drawable.ic_frogo_notif)
.setContentTitle(getString(R.string.notif_title))
.setContentText(getString(R.string.notif_content))
.setupShowWhen()
.setupActionRemoteInput(object : FrogoNotifActionRemoteInputListener {
override fun setRemoteInputResultKey(): String {
return KEY_REPLY
}
override fun setRemoteInputLabel(): String {
return getString(R.string.notif_action_reply)
}
override fun setActionIcon(): Int {
return R.drawable.ic_frogo_send
}
override fun setActionTitle(): String {
return getString(R.string.notif_action_reply)
}
override fun setActionIntent(): PendingIntent? {
return getReplyPendingIntent()
}
override fun setAllowGeneratedReplies(): Boolean {
return true
}
})
.build()
.launch(mNotificationId)
With Inbox Style (Stack)
val frogoNotification = FrogoNotification.Inject(this)
.setChannelId(CHANNEL_ID)
.setChannelName(CHANNEL_NAME)
.setSmallIcon(R.drawable.ic_frogo_email)
.setGroup(GROUP_KEY_EMAILS)
.setContentIntent(pendingIntent)
.setupAutoCancel()
// Check if NotificationID is smaller than Max Notif
if (idNotification < MAX_NOTIFICATION) {
stackNotif[idNotification].message?.let {
frogoNotification
.setContentTitle("New Email from " + stackNotif[idNotification].sender)
.setContentText(it)
.setLargeIcon(R.drawable.ic_frogo_notif)
}
} else {
frogoNotification
.setContentTitle("$idNotification new emails")
.setContentText("[email protected]")
.setGroupSummary()
.setupInboxStyle(object : FrogoNotifInboxStyleListener {
override fun addLine1(): String {
return "New Email from " + stackNotif[idNotification].sender
}
override fun addLine2(): String {
return "New Email from " + stackNotif[idNotification - 1].sender
}
override fun setBigContentTitle(): String {
return "$idNotification new emails"
}
override fun setSummaryText(): String {
return "mail@frogobox"
}
})
}
frogoNotification
.build()
.launch(idNotification)
With Frogo Style
FrogoNotification.Inject(this) // Intialize for Context
.setSmallIcon(R.drawable.ic_frogo_notif) // Initialize for Small Icon
.setupWithFrogoStyle()
.build() // Build the Frogo Notification
.launch(NOTIFICATION_ID) // Notify the Frogo Notification
For Documentation
Colaborator
Very open to anyone, I'll write your name under this, please contribute by sending an email to me
- Mail To [email protected]
- Subject : Github _ [Github-Username-Account] _ [Language] _ [Repository-Name]
- Example : Github_amirisback_kotlin_admob-helper-implementation
Name Of Contribute
- Muhammad Faisal Amir
- Waiting List
- Waiting List
Waiting for your contribute
Attention !!!
- Please enjoy and don't forget fork and give a star
- Don't Forget Follow My Github Account
Source code(tar.gz)
Source code(zip)
1.0.0(Apr 11, 2022)
About This Project (release 👷🔧️👷♀️⛏)
- SDK for anything your problem to make easier developing android apps
- Available for android and desktop
- Privacy Policy Click Here
- License Click Here
ScreenShoot
Version Release
This Is Latest Release
$version_release = 1.0.0
What's New??
* SDK Android and Desktop *
* Adding Ext Function *
Download this project
Step 1. Add the JitPack repository to your build file (build.gradle : Project)
<Option 1> Groovy Gradle
// Add it in your root build.gradle at the end of repositories:
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
<Option 2> Kotlin DSL Gradle
// Add it in your root build.gradle.kts at the end of repositories:
allprojects {
repositories {
...
maven("https://jitpack.io")
}
}
Step 2. Add the dependency (build.gradle : Module)
#### <Option 1> Groovy Gradle
dependencies {
// library frogo-sdk
implementation 'com.github.frogobox:frogo-sdk:1.0.0'
}
#### <Option 2> Kotlin DSL Gradle
dependencies {
// library frogo-sdk
implementation("com.github.frogobox:frogo-sdk:1.0.0")
}
Step 3. Function from this SDK
All Class SDK (android)
FrogoActivity
FrogoApplication
FrogoComposeActivity
FrogoFragment
FrogoFunc
FrogoMusic
FrogoMutableLiveData
FrogoNavigation
FrogoPagerHelper
FrogoPiracyActivity
FrogoPreference
FrogoSinglePreference
FrogoViewModel
All Class SDK (desktop & android)
FrogoApiClient
FrogoApiModel
FrogoApiObserver
FrogoConstant
FrogoDataResponse
FrogoDate
FrogoLocalObserver
FrogoStateResponse
IFrogoDate
FrogoActivity
fun setupDetailActivity(title: String)
fun setupChildFragment(frameId: Int, fragment: Fragment)
fun showToast(message: String)
fun setupEmptyView(view: View, isEmpty: Boolean)
fun setupProgressView(view: View, isProgress: Boolean)
fun checkExtra(extraKey: String): Boolean
fun <Model> FrogoFragmentNewInstance(
fragment: FrogoFragment<*>,
argumentKey: String,
extraDataResult: Model
)
fun isNetworkConnected(): Boolean
fun setupFullScreen()
fun setupHideSystemUI()
fun shareApp(packageName: String, appName: String)
fun rateApp(packageName: String)
FrogoFragment
fun setupChildFragment(frameId: Int, fragment: Fragment)
fun checkArgument(argsKey: String): Boolean
fun setupEmptyView(view: View, isEmpty: Boolean)
fun setupProgressView(view: View, isProgress: Boolean)
fun showToast(message: String)
fun <Model> frogoNewInstance(argsKey: String, data: Model)
Ext Function
FrogoRetrofitExt.kt
// Single Api Request
fun <T : Any> Call<T>.doApiRequest(callback: FrogoDataResponse<T>) {
callback.onShowProgress()
enqueue(object : Callback<T> {
override fun onResponse(call: Call<T>, response: Response<T>) {
response.body()?.let { callback.onSuccess(it) }
callback.onHideProgress()
}
override fun onFailure(call: Call<T>, t: Throwable) {
callback.onFailed(500, t.localizedMessage)
callback.onHideProgress()
}
})
}
FrogoRxJavaObservableExt.kt
// Single Api Request with scheduler
fun <T : Any> Observable<T>.doApiRequest(scheduler: Scheduler, callback: FrogoDataResponse<T>) {
subscribeOn(Schedulers.io())
.doOnSubscribe { callback.onShowProgress() }
.doOnTerminate { callback.onHideProgress() }
.observeOn(scheduler)
.subscribe(object : FrogoApiObserver<T>() {
override fun onSuccess(data: T) {
callback.onSuccess(data)
}
override fun onFailure(code: Int, errorMessage: String) {
callback.onFailed(code, errorMessage)
}
})
}
// -------------------------------------------------------------------------------------------------
// Single Api Request
fun <T : Any> Observable<T>.doApiRequest(callback: FrogoDataResponse<T>) {
doOnSubscribe { callback.onShowProgress() }
.doOnTerminate { callback.onHideProgress() }
.subscribe(object : FrogoApiObserver<T>() {
override fun onSuccess(data: T) {
callback.onSuccess(data)
}
override fun onFailure(code: Int, errorMessage: String) {
callback.onFailed(code, errorMessage)
}
})
}
FrogoContextActivityExt.kt
inline fun <reified ClassActivity> Context.singleStartActivity() {
FLog.d("Activity : ${ClassActivity::class.java.simpleName}")
startActivity(Intent(this, ClassActivity::class.java))
}
// -------------------------------------------------------------------------------------------------
inline fun <reified ClassActivity, reified Model> Context.singleStartActivity(
extraKey: String,
data: Model
) {
val intent = Intent(this, ClassActivity::class.java)
val extraData = Gson().toJson(data)
intent.putExtra(extraKey, extraData)
FLog.d("Activity : ${ClassActivity::class.java.simpleName}")
FLog.d("Data : Extra Data (${Model::class.java.simpleName}) : $extraData")
startActivity(intent)
}
// -------------------------------------------------------------------------------------------------
inline fun <reified Model> Activity.singleGetExtraData(extraKey: String): Model {
val extraIntent = intent.getStringExtra(extraKey)
return Gson().fromJson(extraIntent, Model::class.java)
}
// -------------------------------------------------------------------------------------------------
fun Context.singleStartActivityShareApp(subject: String, text: String) {
val intent = Intent(Intent.ACTION_SEND)
intent.type = "text/plain"
intent.putExtra(Intent.EXTRA_SUBJECT, subject)
intent.putExtra(Intent.EXTRA_TEXT, text)
FLog.d("$TAG : Subject Share App : $subject")
FLog.d("$TAG : Message Share App : $text")
startActivity(Intent.createChooser(intent, subject))
}
// -------------------------------------------------------------------------------------------------
fun Context.singleStartActivityOpenApp(url: String) {
FLog.d("$TAG : Url : $url")
startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(url)))
}
FrogoContextFragmentExt.kt
fun <Model> Fragment.singleNewInstance(argsKey: String, data: Model) {
val argsData = Gson().toJson(data)
val bundleArgs = Bundle().apply {
putString(argsKey, argsData)
}
this.arguments = bundleArgs
}
// -------------------------------------------------------------------------------------------------
inline fun <reified Model> Fragment.singleGetInstance(argsKey: String): Model {
val argsData = this.arguments?.getString(argsKey)
return Gson().fromJson(argsData, Model::class.java)
}
FrogoImageViewExt.kt
fun ImageView.glideLoad(data: Any?) {
FLog.d("$TAG : Params : $data")
FLog.d("$TAG : Glide Load Ext")
Glide.with(context).load(data).into(this)
}
FrogoViewExt.kt
fun View.visible() {
FLog.d("$TAG : View Visible")
visibility = View.VISIBLE
}
// -------------------------------------------------------------------------------------------------
fun View.gone() {
FLog.d("$TAG : View Gone")
visibility = View.GONE
}
// -------------------------------------------------------------------------------------------------
fun View.invisible() {
FLog.d("$TAG : View Invisible")
visibility = View.INVISIBLE
}
// -------------------------------------------------------------------------------------------------
fun View.progressViewHandle(isProgressState: Boolean) {
FLog.d("$TAG : isProgressState >> $isProgressState")
if (isProgressState) {
visible()
} else {
gone()
}
}
// -------------------------------------------------------------------------------------------------
fun View.emptyViewHandle(isEmptyState: Boolean) {
FLog.d("$TAG : isEmptyState >> $isEmptyState")
if (isEmptyState) {
visible()
} else {
gone()
}
}
FrogoContextExt.kt
fun Context.getAppVersionCode(): Int? {
try {
return packageManager?.getPackageInfo(packageName, 0)
?.let { PackageInfoCompat.getLongVersionCode(it).toInt() }
} catch (ex: Exception) {
FLog.e("$TAG : ${ex.message.orEmpty()}")
}
return null
}
// -------------------------------------------------------------------------------------------------
fun Context.showToast(
message: String,
duration: Int = Toast.LENGTH_SHORT
) {
Toast.makeText(this, message, duration).show()
}
// -------------------------------------------------------------------------------------------------
fun Context.hasCameraPermission(): Boolean =
ContextCompat.checkSelfPermission(
this,
Manifest.permission.CAMERA
) == PackageManager.PERMISSION_GRANTED
// -------------------------------------------------------------------------------------------------
fun Context.hasReadExtStoragePermission(): Boolean {
return ContextCompat.checkSelfPermission(
this,
Manifest.permission.READ_EXTERNAL_STORAGE
) == PackageManager.PERMISSION_GRANTED
}
fun Context.hasWriteExtStoragePermission(): Boolean {
return ContextCompat.checkSelfPermission(
this,
Manifest.permission.WRITE_EXTERNAL_STORAGE
) == PackageManager.PERMISSION_GRANTED
}
Added Function
Click for detail !!!
FrogoLog
- SDK for your Log problem to make easier developing android apps
- frogo-log is Long Term Service
- Line number show
- Toast for easy develop and debug
Screenshoot Result
SS 1 |
SS 2 |
SS 3 |
SS 4 |
|
|
|
|
Screenshoot Library Sample
FrogoLog (with line code)
// Function Log Debug
FrogoLog.d("Debug")
// Function Log Info
FrogoLog.i("Info")
// Function Log Verbose
FrogoLog.v("Verbose")
// Function Log Warn
FrogoLog.w("Warn")
// Function Log Error
FrogoLog.e("Error")
// Function Log Simple Debug without message params
FrogoLog.d()
FrogoLog (with line code and Toast)
// Function Log Debug (adding context params)
FrogoLog.d("Debug", this@MainActivity)
// Function Log Info (adding context params)
FrogoLog.i("Info", this@MainActivity)
// Function Log Verbose
FrogoLog.v("Verbose", this@MainActivity)
// Function Log Warn (adding context params)
FrogoLog.w("Warn", this@MainActivity)
// Function Log Error (adding context params)
FrogoLog.e("Error", this@MainActivity)
// Function Log Simple Debug without message params
FrogoLog.d(this@MainActivity)
FLog (without line code)
// Function Log Debug
FLog.d("Debug")
// Function Log Info
FLog.i("Info")
// Function Log Verbose
FLog.v("Verbose")
// Function Log Warn
FLog.w("Warn")
// Function Log Error
FLog.e("Error")
// Function Log Simple Debug without message params
FLog.d()
Flog (without line code with toast)
// Function Log Debug (adding context params)
FLog.d("Debug", this@MainActivity)
// Function Log Info (adding context params)
FLog.i("Info", this@MainActivity)
// Function Log Verbose
FLog.v("Verbose", this@MainActivity)
// Function Log Warn (adding context params)
FLog.w("Warn", this@MainActivity)
// Function Log Error (adding context params)
FLog.e("Error", this@MainActivity)
// Function Log Simple Debug without message params
FLog.d(this@MainActivity)
Result FrogoLog
FrogoNotification
- SDK for your notification problem to make easier developing android apps
- frogo-notification is under huge large development
- Notification with singleton method
- Simple and eazy to use
- With many feature
- Full documentation
- Custom Layout Notification
Screenshoot Sample
Simple Notification |
Stack Notification |
Custom Notification (1) |
Custom Notification (2) |
|
|
|
|
FrogoNotification.Inject(this) // Intialize for Context
.setChannelId(CHANNEL_ID) // Intialize for Channel ID
.setChannelName(CHANNEL_NAME) // Initialize for Channel Name
.setContentIntent(pendingIntent) // Initialize for Content Intent
.setSmallIcon(R.drawable.ic_frogo_notif) // Initialize for Small Icon
.setLargeIcon(R.drawable.ic_frogo_notif) // Initialize for Large Icon
.setContentTitle(resources.getString(R.string.content_title)) // Initialize for Content Title
.setContentText(resources.getString(R.string.content_text)) // Initialize for Content Text
.setSubText(resources.getString(R.string.subtext)) // Initialize for Sub Text
.setupAutoCancel() // Initialize for Auto Cancel
.build() // Build the Frogo Notification
.launch(NOTIFICATION_ID) // Notify the Frogo Notification
Simple Notification
FrogoNotification.Inject(this) // Intialize for Context
.setChannelId(CHANNEL_ID) // Intialize for Channel ID
.setChannelName(CHANNEL_NAME) // Initialize for Channel Name
.setContentIntent(pendingIntent) // Initialize for Content Intent
.setSmallIcon(R.drawable.ic_frogo_notif) // Initialize for Small Icon
.setLargeIcon(R.drawable.ic_frogo_notif) // Initialize for Large Icon
.setContentTitle(resources.getString(R.string.content_title)) // Initialize for Content Title
.setContentText(resources.getString(R.string.content_text)) // Initialize for Content Text
.setSubText(resources.getString(R.string.subtext)) // Initialize for Sub Text
.setupAutoCancel() // Initialize for Auto Cancel
.build() // Build the Frogo Notification
.launch(NOTIFICATION_ID) // Notify the Frogo Notification
Custom Layout (NEW FEATURE)
val collapsed = object : FrogoNotifCustomContentViewListener {
override fun setupCustomView(): Int {
return R.layout.notification_collapsed
}
override fun setupComponent(context: Context, customView: RemoteViews) {
customView.apply{
setTextViewText(R.id.text_view_collapsed_1, "Hello World!")
}
}
}
val expanded = object : FrogoNotifCustomContentViewListener {
override fun setupCustomView(): Int {
return R.layout.notification_expanded
}
override fun setupComponent(context: Context, customView: RemoteViews) {
customView.apply {
setImageViewResource(R.id.image_view_expanded, R.drawable.ic_android)
setOnClickPendingIntent(R.id.image_view_expanded, clickPendingIntent)
}
}
}
FrogoNotification.Inject(this) // Intialize for Context
.setChannelId(FrogoApp.CHANNEL_ID) // Intialize for Channel ID
.setChannelName(FrogoApp.CHANNEL_NAME) // Initialize for Channel Name
.setSmallIcon(R.drawable.ic_android) // Initialize for Small Icon
.setCustomContentView(collapsed)
.setCustomBigContentView(expanded)
.build() // Build the Frogo Notification
.launch(FrogoApp.NOTIFICATION_ID) // Notify the Frogo Notification
With Action Replay
FrogoNotification.Inject(this)
.setChannelId(CHANNEL_ID)
.setChannelName(CHANNEL_NAME as String)
.setSmallIcon(R.drawable.ic_frogo_notif)
.setContentTitle(getString(R.string.notif_title))
.setContentText(getString(R.string.notif_content))
.setupShowWhen()
.setupActionRemoteInput(object : FrogoNotifActionRemoteInputListener {
override fun setRemoteInputResultKey(): String {
return KEY_REPLY
}
override fun setRemoteInputLabel(): String {
return getString(R.string.notif_action_reply)
}
override fun setActionIcon(): Int {
return R.drawable.ic_frogo_send
}
override fun setActionTitle(): String {
return getString(R.string.notif_action_reply)
}
override fun setActionIntent(): PendingIntent? {
return getReplyPendingIntent()
}
override fun setAllowGeneratedReplies(): Boolean {
return true
}
})
.build()
.launch(mNotificationId)
With Inbox Style (Stack)
val frogoNotification = FrogoNotification.Inject(this)
.setChannelId(CHANNEL_ID)
.setChannelName(CHANNEL_NAME)
.setSmallIcon(R.drawable.ic_frogo_email)
.setGroup(GROUP_KEY_EMAILS)
.setContentIntent(pendingIntent)
.setupAutoCancel()
// Check if NotificationID is smaller than Max Notif
if (idNotification < MAX_NOTIFICATION) {
stackNotif[idNotification].message?.let {
frogoNotification
.setContentTitle("New Email from " + stackNotif[idNotification].sender)
.setContentText(it)
.setLargeIcon(R.drawable.ic_frogo_notif)
}
} else {
frogoNotification
.setContentTitle("$idNotification new emails")
.setContentText("[email protected]")
.setGroupSummary()
.setupInboxStyle(object : FrogoNotifInboxStyleListener {
override fun addLine1(): String {
return "New Email from " + stackNotif[idNotification].sender
}
override fun addLine2(): String {
return "New Email from " + stackNotif[idNotification - 1].sender
}
override fun setBigContentTitle(): String {
return "$idNotification new emails"
}
override fun setSummaryText(): String {
return "mail@frogobox"
}
})
}
frogoNotification
.build()
.launch(idNotification)
With Frogo Style
FrogoNotification.Inject(this) // Intialize for Context
.setSmallIcon(R.drawable.ic_frogo_notif) // Initialize for Small Icon
.setupWithFrogoStyle()
.build() // Build the Frogo Notification
.launch(NOTIFICATION_ID) // Notify the Frogo Notification
For Documentation
Colaborator
Very open to anyone, I'll write your name under this, please contribute by sending an email to me
- Mail To [email protected]
- Subject : Github _ [Github-Username-Account] _ [Language] _ [Repository-Name]
- Example : Github_amirisback_kotlin_admob-helper-implementation
Name Of Contribute
- Muhammad Faisal Amir
- Waiting List
- Waiting List
Waiting for your contribute
Attention !!!
- Please enjoy and don't forget fork and give a star
- Don't Forget Follow My Github Account
Source code(tar.gz)
Source code(zip)
0.0.3(Apr 7, 2022)
About This Project (release 👷🔧️👷♀️⛏)
- SDK for anything your problem to make easier developing android apps
- Available for android and desktop
- Privacy Policy Click Here
- License Click Here
Version Release
This Is Latest Release
$version_release = 0.0.3
What's New??
* SDK Android and Desktop *
* Adding Ext Function *
Download this project
Step 1. Add the JitPack repository to your build file (build.gradle : Project)
<Option 1> Groovy Gradle
// Add it in your root build.gradle at the end of repositories:
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
<Option 2> Kotlin DSL Gradle
// Add it in your root build.gradle.kts at the end of repositories:
allprojects {
repositories {
...
maven("https://jitpack.io")
}
}
Step 2. Add the dependency (build.gradle : Module)
#### <Option 1> Groovy Gradle
dependencies {
// library frogo-sdk
implementation 'com.github.frogobox:frogo-sdk:0.0.3'
}
#### <Option 2> Kotlin DSL Gradle
dependencies {
// library frogo-sdk
implementation("com.github.frogobox:frogo-sdk:0.0.3")
}
Step 3. Function from this SDK
All Class SDK (android)
FrogoActivity
FrogoApplication
FrogoComposeActivity
FrogoFragment
FrogoFunc
FrogoMusic
FrogoMutableLiveData
FrogoNavigation
FrogoPagerHelper
FrogoPiracyActivity
FrogoPreference
FrogoSinglePreference
FrogoViewModel
All Class SDK (desktop & android)
FrogoApiClient
FrogoApiModel
FrogoApiObserver
FrogoConstant
FrogoDataResponse
FrogoDate
FrogoLocalObserver
FrogoStateResponse
IFrogoDate
FrogoActivity
fun setupDetailActivity(title: String)
fun setupChildFragment(frameId: Int, fragment: Fragment)
fun showToast(message: String)
fun setupEmptyView(view: View, isEmpty: Boolean)
fun setupProgressView(view: View, isProgress: Boolean)
fun checkExtra(extraKey: String): Boolean
fun <Model> FrogoFragmentNewInstance(
fragment: FrogoFragment<*>,
argumentKey: String,
extraDataResult: Model
)
fun isNetworkConnected(): Boolean
fun setupFullScreen()
fun setupHideSystemUI()
fun shareApp(packageName: String, appName: String)
fun rateApp(packageName: String)
FrogoFragment
fun setupChildFragment(frameId: Int, fragment: Fragment)
fun checkArgument(argsKey: String): Boolean
fun setupEmptyView(view: View, isEmpty: Boolean)
fun setupProgressView(view: View, isProgress: Boolean)
fun showToast(message: String)
fun <Model> frogoNewInstance(argsKey: String, data: Model)
Ext Function
FrogoRetrofitExt.kt
// Single Api Request
fun <T : Any> Call<T>.doApiRequest(callback: FrogoDataResponse<T>) {
callback.onShowProgress()
enqueue(object : Callback<T> {
override fun onResponse(call: Call<T>, response: Response<T>) {
response.body()?.let { callback.onSuccess(it) }
callback.onHideProgress()
}
override fun onFailure(call: Call<T>, t: Throwable) {
callback.onFailed(500, t.localizedMessage)
callback.onHideProgress()
}
})
}
FrogoRxJavaObservableExt.kt
// Single Api Request with scheduler
fun <T : Any> Observable<T>.doApiRequest(scheduler: Scheduler, callback: FrogoDataResponse<T>) {
subscribeOn(Schedulers.io())
.doOnSubscribe { callback.onShowProgress() }
.doOnTerminate { callback.onHideProgress() }
.observeOn(scheduler)
.subscribe(object : FrogoApiObserver<T>() {
override fun onSuccess(data: T) {
callback.onSuccess(data)
}
override fun onFailure(code: Int, errorMessage: String) {
callback.onFailed(code, errorMessage)
}
})
}
// -------------------------------------------------------------------------------------------------
// Single Api Request
fun <T : Any> Observable<T>.doApiRequest(callback: FrogoDataResponse<T>) {
doOnSubscribe { callback.onShowProgress() }
.doOnTerminate { callback.onHideProgress() }
.subscribe(object : FrogoApiObserver<T>() {
override fun onSuccess(data: T) {
callback.onSuccess(data)
}
override fun onFailure(code: Int, errorMessage: String) {
callback.onFailed(code, errorMessage)
}
})
}
FrogoContextActivityExt.kt
inline fun <reified ClassActivity> Context.singleStartActivity() {
FLog.d("Activity : ${ClassActivity::class.java.simpleName}")
startActivity(Intent(this, ClassActivity::class.java))
}
// -------------------------------------------------------------------------------------------------
inline fun <reified ClassActivity, reified Model> Context.singleStartActivity(
extraKey: String,
data: Model
) {
val intent = Intent(this, ClassActivity::class.java)
val extraData = Gson().toJson(data)
intent.putExtra(extraKey, extraData)
FLog.d("Activity : ${ClassActivity::class.java.simpleName}")
FLog.d("Data : Extra Data (${Model::class.java.simpleName}) : $extraData")
startActivity(intent)
}
// -------------------------------------------------------------------------------------------------
inline fun <reified Model> Activity.singleGetExtraData(extraKey: String): Model {
val extraIntent = intent.getStringExtra(extraKey)
return Gson().fromJson(extraIntent, Model::class.java)
}
// -------------------------------------------------------------------------------------------------
fun Context.singleStartActivityShareApp(subject: String, text: String) {
val intent = Intent(Intent.ACTION_SEND)
intent.type = "text/plain"
intent.putExtra(Intent.EXTRA_SUBJECT, subject)
intent.putExtra(Intent.EXTRA_TEXT, text)
FLog.d("$TAG : Subject Share App : $subject")
FLog.d("$TAG : Message Share App : $text")
startActivity(Intent.createChooser(intent, subject))
}
// -------------------------------------------------------------------------------------------------
fun Context.singleStartActivityOpenApp(url: String) {
FLog.d("$TAG : Url : $url")
startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(url)))
}
FrogoContextFragmentExt.kt
fun <Model> Fragment.singleNewInstance(argsKey: String, data: Model) {
val argsData = Gson().toJson(data)
val bundleArgs = Bundle().apply {
putString(argsKey, argsData)
}
this.arguments = bundleArgs
}
// -------------------------------------------------------------------------------------------------
inline fun <reified Model> Fragment.singleGetInstance(argsKey: String): Model {
val argsData = this.arguments?.getString(argsKey)
return Gson().fromJson(argsData, Model::class.java)
}
FrogoImageViewExt.kt
fun ImageView.glideLoad(data: Any?) {
FLog.d("$TAG : Params : $data")
FLog.d("$TAG : Glide Load Ext")
Glide.with(context).load(data).into(this)
}
FrogoViewExt.kt
fun View.visible() {
FLog.d("$TAG : View Visible")
visibility = View.VISIBLE
}
// -------------------------------------------------------------------------------------------------
fun View.gone() {
FLog.d("$TAG : View Gone")
visibility = View.GONE
}
// -------------------------------------------------------------------------------------------------
fun View.invisible() {
FLog.d("$TAG : View Invisible")
visibility = View.INVISIBLE
}
// -------------------------------------------------------------------------------------------------
fun View.progressViewHandle(isProgressState: Boolean) {
FLog.d("$TAG : isProgressState >> $isProgressState")
if (isProgressState) {
visible()
} else {
gone()
}
}
// -------------------------------------------------------------------------------------------------
fun View.emptyViewHandle(isEmptyState: Boolean) {
FLog.d("$TAG : isEmptyState >> $isEmptyState")
if (isEmptyState) {
visible()
} else {
gone()
}
}
FrogoContextExt.kt
fun Context.getAppVersionCode(): Int? {
try {
return packageManager?.getPackageInfo(packageName, 0)
?.let { PackageInfoCompat.getLongVersionCode(it).toInt() }
} catch (ex: Exception) {
FLog.e("$TAG : ${ex.message.orEmpty()}")
}
return null
}
// -------------------------------------------------------------------------------------------------
fun Context.showToast(
message: String,
duration: Int = Toast.LENGTH_SHORT
) {
Toast.makeText(this, message, duration).show()
}
// -------------------------------------------------------------------------------------------------
fun Context.hasCameraPermission(): Boolean =
ContextCompat.checkSelfPermission(
this,
Manifest.permission.CAMERA
) == PackageManager.PERMISSION_GRANTED
// -------------------------------------------------------------------------------------------------
fun Context.hasReadExtStoragePermission(): Boolean {
return ContextCompat.checkSelfPermission(
this,
Manifest.permission.READ_EXTERNAL_STORAGE
) == PackageManager.PERMISSION_GRANTED
}
fun Context.hasWriteExtStoragePermission(): Boolean {
return ContextCompat.checkSelfPermission(
this,
Manifest.permission.WRITE_EXTERNAL_STORAGE
) == PackageManager.PERMISSION_GRANTED
}
Added Function
Click for detail !!!
FrogoLog
- SDK for your Log problem to make easier developing android apps
- frogo-log is Long Term Service
- Line number show
- Toast for easy develop and debug
Screenshoot Result
SS 1 |
SS 2 |
SS 3 |
SS 4 |
|
|
|
|
Screenshoot Library Sample
FrogoLog (with line code)
// Function Log Debug
FrogoLog.d("Debug")
// Function Log Info
FrogoLog.i("Info")
// Function Log Verbose
FrogoLog.v("Verbose")
// Function Log Warn
FrogoLog.w("Warn")
// Function Log Error
FrogoLog.e("Error")
// Function Log Simple Debug without message params
FrogoLog.d()
FrogoLog (with line code and Toast)
// Function Log Debug (adding context params)
FrogoLog.d("Debug", this@MainActivity)
// Function Log Info (adding context params)
FrogoLog.i("Info", this@MainActivity)
// Function Log Verbose
FrogoLog.v("Verbose", this@MainActivity)
// Function Log Warn (adding context params)
FrogoLog.w("Warn", this@MainActivity)
// Function Log Error (adding context params)
FrogoLog.e("Error", this@MainActivity)
// Function Log Simple Debug without message params
FrogoLog.d(this@MainActivity)
FLog (without line code)
// Function Log Debug
FLog.d("Debug")
// Function Log Info
FLog.i("Info")
// Function Log Verbose
FLog.v("Verbose")
// Function Log Warn
FLog.w("Warn")
// Function Log Error
FLog.e("Error")
// Function Log Simple Debug without message params
FLog.d()
Flog (without line code with toast)
// Function Log Debug (adding context params)
FLog.d("Debug", this@MainActivity)
// Function Log Info (adding context params)
FLog.i("Info", this@MainActivity)
// Function Log Verbose
FLog.v("Verbose", this@MainActivity)
// Function Log Warn (adding context params)
FLog.w("Warn", this@MainActivity)
// Function Log Error (adding context params)
FLog.e("Error", this@MainActivity)
// Function Log Simple Debug without message params
FLog.d(this@MainActivity)
Result FrogoLog
FrogoNotification
- SDK for your notification problem to make easier developing android apps
- frogo-notification is under huge large development
- Notification with singleton method
- Simple and eazy to use
- With many feature
- Full documentation
- Custom Layout Notification
Screenshoot Sample
Simple Notification |
Stack Notification |
Custom Notification (1) |
Custom Notification (2) |
|
|
|
|
FrogoNotification.Inject(this) // Intialize for Context
.setChannelId(CHANNEL_ID) // Intialize for Channel ID
.setChannelName(CHANNEL_NAME) // Initialize for Channel Name
.setContentIntent(pendingIntent) // Initialize for Content Intent
.setSmallIcon(R.drawable.ic_frogo_notif) // Initialize for Small Icon
.setLargeIcon(R.drawable.ic_frogo_notif) // Initialize for Large Icon
.setContentTitle(resources.getString(R.string.content_title)) // Initialize for Content Title
.setContentText(resources.getString(R.string.content_text)) // Initialize for Content Text
.setSubText(resources.getString(R.string.subtext)) // Initialize for Sub Text
.setupAutoCancel() // Initialize for Auto Cancel
.build() // Build the Frogo Notification
.launch(NOTIFICATION_ID) // Notify the Frogo Notification
Simple Notification
FrogoNotification.Inject(this) // Intialize for Context
.setChannelId(CHANNEL_ID) // Intialize for Channel ID
.setChannelName(CHANNEL_NAME) // Initialize for Channel Name
.setContentIntent(pendingIntent) // Initialize for Content Intent
.setSmallIcon(R.drawable.ic_frogo_notif) // Initialize for Small Icon
.setLargeIcon(R.drawable.ic_frogo_notif) // Initialize for Large Icon
.setContentTitle(resources.getString(R.string.content_title)) // Initialize for Content Title
.setContentText(resources.getString(R.string.content_text)) // Initialize for Content Text
.setSubText(resources.getString(R.string.subtext)) // Initialize for Sub Text
.setupAutoCancel() // Initialize for Auto Cancel
.build() // Build the Frogo Notification
.launch(NOTIFICATION_ID) // Notify the Frogo Notification
Custom Layout (NEW FEATURE)
val collapsed = object : FrogoNotifCustomContentViewListener {
override fun setupCustomView(): Int {
return R.layout.notification_collapsed
}
override fun setupComponent(context: Context, customView: RemoteViews) {
customView.apply{
setTextViewText(R.id.text_view_collapsed_1, "Hello World!")
}
}
}
val expanded = object : FrogoNotifCustomContentViewListener {
override fun setupCustomView(): Int {
return R.layout.notification_expanded
}
override fun setupComponent(context: Context, customView: RemoteViews) {
customView.apply {
setImageViewResource(R.id.image_view_expanded, R.drawable.ic_android)
setOnClickPendingIntent(R.id.image_view_expanded, clickPendingIntent)
}
}
}
FrogoNotification.Inject(this) // Intialize for Context
.setChannelId(FrogoApp.CHANNEL_ID) // Intialize for Channel ID
.setChannelName(FrogoApp.CHANNEL_NAME) // Initialize for Channel Name
.setSmallIcon(R.drawable.ic_android) // Initialize for Small Icon
.setCustomContentView(collapsed)
.setCustomBigContentView(expanded)
.build() // Build the Frogo Notification
.launch(FrogoApp.NOTIFICATION_ID) // Notify the Frogo Notification
With Action Replay
FrogoNotification.Inject(this)
.setChannelId(CHANNEL_ID)
.setChannelName(CHANNEL_NAME as String)
.setSmallIcon(R.drawable.ic_frogo_notif)
.setContentTitle(getString(R.string.notif_title))
.setContentText(getString(R.string.notif_content))
.setupShowWhen()
.setupActionRemoteInput(object : FrogoNotifActionRemoteInputListener {
override fun setRemoteInputResultKey(): String {
return KEY_REPLY
}
override fun setRemoteInputLabel(): String {
return getString(R.string.notif_action_reply)
}
override fun setActionIcon(): Int {
return R.drawable.ic_frogo_send
}
override fun setActionTitle(): String {
return getString(R.string.notif_action_reply)
}
override fun setActionIntent(): PendingIntent? {
return getReplyPendingIntent()
}
override fun setAllowGeneratedReplies(): Boolean {
return true
}
})
.build()
.launch(mNotificationId)
With Inbox Style (Stack)
val frogoNotification = FrogoNotification.Inject(this)
.setChannelId(CHANNEL_ID)
.setChannelName(CHANNEL_NAME)
.setSmallIcon(R.drawable.ic_frogo_email)
.setGroup(GROUP_KEY_EMAILS)
.setContentIntent(pendingIntent)
.setupAutoCancel()
// Check if NotificationID is smaller than Max Notif
if (idNotification < MAX_NOTIFICATION) {
stackNotif[idNotification].message?.let {
frogoNotification
.setContentTitle("New Email from " + stackNotif[idNotification].sender)
.setContentText(it)
.setLargeIcon(R.drawable.ic_frogo_notif)
}
} else {
frogoNotification
.setContentTitle("$idNotification new emails")
.setContentText("[email protected]")
.setGroupSummary()
.setupInboxStyle(object : FrogoNotifInboxStyleListener {
override fun addLine1(): String {
return "New Email from " + stackNotif[idNotification].sender
}
override fun addLine2(): String {
return "New Email from " + stackNotif[idNotification - 1].sender
}
override fun setBigContentTitle(): String {
return "$idNotification new emails"
}
override fun setSummaryText(): String {
return "mail@frogobox"
}
})
}
frogoNotification
.build()
.launch(idNotification)
With Frogo Style
FrogoNotification.Inject(this) // Intialize for Context
.setSmallIcon(R.drawable.ic_frogo_notif) // Initialize for Small Icon
.setupWithFrogoStyle()
.build() // Build the Frogo Notification
.launch(NOTIFICATION_ID) // Notify the Frogo Notification
For Documentation
Colaborator
Very open to anyone, I'll write your name under this, please contribute by sending an email to me
- Mail To [email protected]
- Subject : Github _ [Github-Username-Account] _ [Language] _ [Repository-Name]
- Example : Github_amirisback_kotlin_admob-helper-implementation
Name Of Contribute
- Muhammad Faisal Amir
- Waiting List
- Waiting List
Waiting for your contribute
Attention !!!
- Please enjoy and don't forget fork and give a star
- Don't Forget Follow My Github Account
Source code(tar.gz)
Source code(zip)
0.0.2-beta02(Mar 29, 2022)
About This Project (release-and-work-in-progress 👷🔧️👷♀️⛏)
- SDK for anything your problem to make easier developing android apps
- Available for android and desktop
- Privacy Policy Click Here
- License Click Here
Version Release
This Is Latest Release
~ Beta Release
$version_release = 0.0.2-beta02
What's New??
* SDK Android and Desktop *
* Beta Release *
Download this project
Step 1. Add the JitPack repository to your build file (build.gradle : Project)
<Option 1> Groovy Gradle
// Add it in your root build.gradle at the end of repositories:
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
<Option 2> Kotlin DSL Gradle
// Add it in your root build.gradle.kts at the end of repositories:
allprojects {
repositories {
...
maven("https://jitpack.io")
}
}
Step 2. Add the dependency (build.gradle : Module)
#### <Option 1> Groovy Gradle
dependencies {
// library frogo-sdk
implementation 'com.github.frogobox:frogo-sdk:0.0.2-beta02'
}
#### <Option 2> Kotlin DSL Gradle
dependencies {
// library frogo-sdk
implementation("com.github.frogobox:frogo-sdk:0.0.2-beta02")
}
Step 3. Function from this SDK
All Class SDK (android)
FrogoActivity
FrogoApiClient
FrogoApplication
FrogoComposeActivity
FrogoDate
FrogoFragment
FrogoFunc
FrogoMusic
FrogoMutableLiveData
FrogoNavigation
FrogoPagerHelper
FrogoPreference
FrogoViewModel
All Class SDK (desktop & android)
FrogoApiModel
FrogoApiObserver
FrogoConstant
FrogoCoreApiClient
FrogoDataResponse
FrogoLocalObserver
FrogoStateResponse
FrogoActivity
fun setupDetailActivity(title: String)
fun setupChildFragment(frameId: Int, fragment: Fragment)
fun showToast(message: String)
fun setupEventEmptyView(view: View, isEmpty: Boolean)
fun setupEventProgressView(view: View, progress: Boolean)
fun checkExtra(extraKey: String): Boolean
fun <Model> baseFragmentNewInstance(
fragment: FrogoFragment<*>,
argumentKey: String,
extraDataResult: Model
)
fun verifySignature()
fun readSignature()
fun verifyInstallerId()
fun verifyUnauthorizedApps()
fun verifyStores()
fun verifyDebug()
fun verifyEmulator()
fun showApkSignatures()
FrogoFragment
fun setupChildFragment(frameId: Int, fragment: Fragment)
fun checkArgument(argsKey: String): Boolean
fun setupEventEmptyView(view: View, isEmpty: Boolean)
fun setupEventProgressView(view: View, progress: Boolean)
fun showToast(message: String)
fun <Model> baseNewInstance(argsKey: String, data: Model)
FrogoFunc
fun createFolderPictureVideo()
fun getVideoFilePath(): String
fun createDialogDefault(
context: Context,
title: String,
message: String,
listenerYes: () -> Unit,
listenerNo: () -> Unit
)
fun noAction(): Boolean
fun randomNumber(start: Int, end: Int): Int
fun isNetworkAvailable(context: Context): Boolean?
fun <T> fetchRawData(mContext: Context, sourceRaw: Int): ArrayList<T>
fun <T> fetchRawData(mContext: Context, sourceRaw: Int, shuffle: Boolean): ArrayList<T>
fun getJsonFromAsset(context: Context, filename: String): String?
fun <T> getArrayFromJsonAsset(context: Context, filename: String): MutableList<T>
fun getDrawableString(context: Context, nameResource: String): Int
fun getRawString(context: Context, nameResource: String): Int
FrogoMusic
fun playMusic(context: Context, musicFile: Int)
fun stopMusic()
fun pauseMusic()
FrogoDate
fun getTimeStamp(): String
fun getTimeNow(): String
fun getCurrentDate(format: String): String
fun dateTimeToTimeStamp(date: String?): Long
fun getCurrentUTC(): String
fun timetoHour(date: String?): String
fun dateTimeTZtoHour(date: String?): String
fun DateTimeMonth(date: String?): String
fun dateTimeSet(date: String?): String
fun dateTimeProblem(date: String?): String
fun getTimeAgo(time: Long): String?
fun compareDate(newDate: String): String?
fun messageDate(newDate: String): String?
fun getDataChat(time: Long): String?
fun convertClassificationDate(string: String?): String
fun convertDateNewFormat(string: String?): String
fun convertLongDateNewFormat(string: String?): String
fun revertFromLongDateNewFormat(string: String?): String
fun convertTargetDate(string: String?): String
fun diffTime(timeStart: String, timeEnd: String): Long
Added Function
Click for detail !!!
FrogoLog
- SDK for your Log problem to make easier developing android apps
- frogo-log is Long Term Service
- Line number show
- Toast for easy develop and debug
Screenshoot Result
SS 1 |
SS 2 |
SS 3 |
SS 4 |
|
|
|
|
Screenshoot Library Sample
FrogoLog (with line code)
// Function Log Debug
FrogoLog.d("Debug")
// Function Log Info
FrogoLog.i("Info")
// Function Log Verbose
FrogoLog.v("Verbose")
// Function Log Warn
FrogoLog.w("Warn")
// Function Log Error
FrogoLog.e("Error")
// Function Log Simple Debug without message params
FrogoLog.d()
FrogoLog (with line code and Toast)
// Function Log Debug (adding context params)
FrogoLog.d("Debug", this@MainActivity)
// Function Log Info (adding context params)
FrogoLog.i("Info", this@MainActivity)
// Function Log Verbose
FrogoLog.v("Verbose", this@MainActivity)
// Function Log Warn (adding context params)
FrogoLog.w("Warn", this@MainActivity)
// Function Log Error (adding context params)
FrogoLog.e("Error", this@MainActivity)
// Function Log Simple Debug without message params
FrogoLog.d(this@MainActivity)
FLog (without line code)
// Function Log Debug
FLog.d("Debug")
// Function Log Info
FLog.i("Info")
// Function Log Verbose
FLog.v("Verbose")
// Function Log Warn
FLog.w("Warn")
// Function Log Error
FLog.e("Error")
// Function Log Simple Debug without message params
FLog.d()
Flog (without line code with toast)
// Function Log Debug (adding context params)
FLog.d("Debug", this@MainActivity)
// Function Log Info (adding context params)
FLog.i("Info", this@MainActivity)
// Function Log Verbose
FLog.v("Verbose", this@MainActivity)
// Function Log Warn (adding context params)
FLog.w("Warn", this@MainActivity)
// Function Log Error (adding context params)
FLog.e("Error", this@MainActivity)
// Function Log Simple Debug without message params
FLog.d(this@MainActivity)
Result FrogoLog
FrogoNotification
- SDK for your notification problem to make easier developing android apps
- frogo-notification is under huge large development
- Notification with singleton method
- Simple and eazy to use
- With many feature
- Full documentation
- Custom Layout Notification
Screenshoot Sample
Simple Notification |
Stack Notification |
Custom Notification (1) |
Custom Notification (2) |
|
|
|
|
FrogoNotification.Inject(this) // Intialize for Context
.setChannelId(CHANNEL_ID) // Intialize for Channel ID
.setChannelName(CHANNEL_NAME) // Initialize for Channel Name
.setContentIntent(pendingIntent) // Initialize for Content Intent
.setSmallIcon(R.drawable.ic_frogo_notif) // Initialize for Small Icon
.setLargeIcon(R.drawable.ic_frogo_notif) // Initialize for Large Icon
.setContentTitle(resources.getString(R.string.content_title)) // Initialize for Content Title
.setContentText(resources.getString(R.string.content_text)) // Initialize for Content Text
.setSubText(resources.getString(R.string.subtext)) // Initialize for Sub Text
.setupAutoCancel() // Initialize for Auto Cancel
.build() // Build the Frogo Notification
.launch(NOTIFICATION_ID) // Notify the Frogo Notification
Simple Notification
FrogoNotification.Inject(this) // Intialize for Context
.setChannelId(CHANNEL_ID) // Intialize for Channel ID
.setChannelName(CHANNEL_NAME) // Initialize for Channel Name
.setContentIntent(pendingIntent) // Initialize for Content Intent
.setSmallIcon(R.drawable.ic_frogo_notif) // Initialize for Small Icon
.setLargeIcon(R.drawable.ic_frogo_notif) // Initialize for Large Icon
.setContentTitle(resources.getString(R.string.content_title)) // Initialize for Content Title
.setContentText(resources.getString(R.string.content_text)) // Initialize for Content Text
.setSubText(resources.getString(R.string.subtext)) // Initialize for Sub Text
.setupAutoCancel() // Initialize for Auto Cancel
.build() // Build the Frogo Notification
.launch(NOTIFICATION_ID) // Notify the Frogo Notification
Custom Layout (NEW FEATURE)
val collapsed = object : FrogoNotifCustomContentViewListener {
override fun setupCustomView(): Int {
return R.layout.notification_collapsed
}
override fun setupComponent(context: Context, customView: RemoteViews) {
customView.apply{
setTextViewText(R.id.text_view_collapsed_1, "Hello World!")
}
}
}
val expanded = object : FrogoNotifCustomContentViewListener {
override fun setupCustomView(): Int {
return R.layout.notification_expanded
}
override fun setupComponent(context: Context, customView: RemoteViews) {
customView.apply {
setImageViewResource(R.id.image_view_expanded, R.drawable.ic_android)
setOnClickPendingIntent(R.id.image_view_expanded, clickPendingIntent)
}
}
}
FrogoNotification.Inject(this) // Intialize for Context
.setChannelId(FrogoApp.CHANNEL_ID) // Intialize for Channel ID
.setChannelName(FrogoApp.CHANNEL_NAME) // Initialize for Channel Name
.setSmallIcon(R.drawable.ic_android) // Initialize for Small Icon
.setCustomContentView(collapsed)
.setCustomBigContentView(expanded)
.build() // Build the Frogo Notification
.launch(FrogoApp.NOTIFICATION_ID) // Notify the Frogo Notification
With Action Replay
FrogoNotification.Inject(this)
.setChannelId(CHANNEL_ID)
.setChannelName(CHANNEL_NAME as String)
.setSmallIcon(R.drawable.ic_frogo_notif)
.setContentTitle(getString(R.string.notif_title))
.setContentText(getString(R.string.notif_content))
.setupShowWhen()
.setupActionRemoteInput(object : FrogoNotifActionRemoteInputListener {
override fun setRemoteInputResultKey(): String {
return KEY_REPLY
}
override fun setRemoteInputLabel(): String {
return getString(R.string.notif_action_reply)
}
override fun setActionIcon(): Int {
return R.drawable.ic_frogo_send
}
override fun setActionTitle(): String {
return getString(R.string.notif_action_reply)
}
override fun setActionIntent(): PendingIntent? {
return getReplyPendingIntent()
}
override fun setAllowGeneratedReplies(): Boolean {
return true
}
})
.build()
.launch(mNotificationId)
With Inbox Style (Stack)
val frogoNotification = FrogoNotification.Inject(this)
.setChannelId(CHANNEL_ID)
.setChannelName(CHANNEL_NAME)
.setSmallIcon(R.drawable.ic_frogo_email)
.setGroup(GROUP_KEY_EMAILS)
.setContentIntent(pendingIntent)
.setupAutoCancel()
// Check if NotificationID is smaller than Max Notif
if (idNotification < MAX_NOTIFICATION) {
stackNotif[idNotification].message?.let {
frogoNotification
.setContentTitle("New Email from " + stackNotif[idNotification].sender)
.setContentText(it)
.setLargeIcon(R.drawable.ic_frogo_notif)
}
} else {
frogoNotification
.setContentTitle("$idNotification new emails")
.setContentText("[email protected]")
.setGroupSummary()
.setupInboxStyle(object : FrogoNotifInboxStyleListener {
override fun addLine1(): String {
return "New Email from " + stackNotif[idNotification].sender
}
override fun addLine2(): String {
return "New Email from " + stackNotif[idNotification - 1].sender
}
override fun setBigContentTitle(): String {
return "$idNotification new emails"
}
override fun setSummaryText(): String {
return "mail@frogobox"
}
})
}
frogoNotification
.build()
.launch(idNotification)
With Frogo Style
FrogoNotification.Inject(this) // Intialize for Context
.setSmallIcon(R.drawable.ic_frogo_notif) // Initialize for Small Icon
.setupWithFrogoStyle()
.build() // Build the Frogo Notification
.launch(NOTIFICATION_ID) // Notify the Frogo Notification
For Documentation
Colaborator
Very open to anyone, I'll write your name under this, please contribute by sending an email to me
- Mail To [email protected]
- Subject : Github _ [Github-Username-Account] _ [Language] _ [Repository-Name]
- Example : Github_amirisback_kotlin_admob-helper-implementation
Name Of Contribute
- Muhammad Faisal Amir
- Waiting List
- Waiting List
Waiting for your contribute
Attention !!!
- Please enjoy and don't forget fork and give a star
- Don't Forget Follow My Github Account
Source code(tar.gz)
Source code(zip)
0.0.2(Mar 29, 2022)
About This Project (release-and-work-in-progress 👷🔧️👷♀️⛏)
- SDK for anything your problem to make easier developing android apps
- Available for android and desktop
- Privacy Policy Click Here
- License Click Here
Version Release
This Is Latest Release
$version_release = 0.0.2
What's New??
* SDK Android and Desktop *
Download this project
Step 1. Add the JitPack repository to your build file (build.gradle : Project)
<Option 1> Groovy Gradle
// Add it in your root build.gradle at the end of repositories:
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
<Option 2> Kotlin DSL Gradle
// Add it in your root build.gradle.kts at the end of repositories:
allprojects {
repositories {
...
maven("https://jitpack.io")
}
}
Step 2. Add the dependency (build.gradle : Module)
#### <Option 1> Groovy Gradle
dependencies {
// library frogo-sdk
implementation 'com.github.frogobox:frogo-sdk:0.0.2'
}
#### <Option 2> Kotlin DSL Gradle
dependencies {
// library frogo-sdk
implementation("com.github.frogobox:frogo-sdk:0.0.2")
}
Step 3. Function from this SDK
All Class SDK (android)
FrogoActivity
FrogoApiClient
FrogoApplication
FrogoComposeActivity
FrogoDate
FrogoFragment
FrogoFunc
FrogoMusic
FrogoMutableLiveData
FrogoNavigation
FrogoPagerHelper
FrogoPreference
FrogoViewModel
All Class SDK (desktop & android)
FrogoApiModel
FrogoApiObserver
FrogoConstant
FrogoCoreApiClient
FrogoDataResponse
FrogoLocalObserver
FrogoStateResponse
FrogoActivity
fun setupDetailActivity(title: String)
fun setupChildFragment(frameId: Int, fragment: Fragment)
fun showToast(message: String)
fun setupEventEmptyView(view: View, isEmpty: Boolean)
fun setupEventProgressView(view: View, progress: Boolean)
fun checkExtra(extraKey: String): Boolean
fun <Model> baseFragmentNewInstance(
fragment: FrogoFragment<*>,
argumentKey: String,
extraDataResult: Model
)
fun verifySignature()
fun readSignature()
fun verifyInstallerId()
fun verifyUnauthorizedApps()
fun verifyStores()
fun verifyDebug()
fun verifyEmulator()
fun showApkSignatures()
FrogoFragment
fun setupChildFragment(frameId: Int, fragment: Fragment)
fun checkArgument(argsKey: String): Boolean
fun setupEventEmptyView(view: View, isEmpty: Boolean)
fun setupEventProgressView(view: View, progress: Boolean)
fun showToast(message: String)
fun <Model> baseNewInstance(argsKey: String, data: Model)
FrogoFunc
fun createFolderPictureVideo()
fun getVideoFilePath(): String
fun createDialogDefault(
context: Context,
title: String,
message: String,
listenerYes: () -> Unit,
listenerNo: () -> Unit
)
fun noAction(): Boolean
fun randomNumber(start: Int, end: Int): Int
fun isNetworkAvailable(context: Context): Boolean?
fun <T> fetchRawData(mContext: Context, sourceRaw: Int): ArrayList<T>
fun <T> fetchRawData(mContext: Context, sourceRaw: Int, shuffle: Boolean): ArrayList<T>
fun getJsonFromAsset(context: Context, filename: String): String?
fun <T> getArrayFromJsonAsset(context: Context, filename: String): MutableList<T>
fun getDrawableString(context: Context, nameResource: String): Int
fun getRawString(context: Context, nameResource: String): Int
FrogoMusic
fun playMusic(context: Context, musicFile: Int)
fun stopMusic()
fun pauseMusic()
FrogoDate
fun getTimeStamp(): String
fun getTimeNow(): String
fun getCurrentDate(format: String): String
fun dateTimeToTimeStamp(date: String?): Long
fun getCurrentUTC(): String
fun timetoHour(date: String?): String
fun dateTimeTZtoHour(date: String?): String
fun DateTimeMonth(date: String?): String
fun dateTimeSet(date: String?): String
fun dateTimeProblem(date: String?): String
fun getTimeAgo(time: Long): String?
fun compareDate(newDate: String): String?
fun messageDate(newDate: String): String?
fun getDataChat(time: Long): String?
fun convertClassificationDate(string: String?): String
fun convertDateNewFormat(string: String?): String
fun convertLongDateNewFormat(string: String?): String
fun revertFromLongDateNewFormat(string: String?): String
fun convertTargetDate(string: String?): String
fun diffTime(timeStart: String, timeEnd: String): Long
Added Function
Click for detail !!!
FrogoLog
- SDK for your Log problem to make easier developing android apps
- frogo-log is Long Term Service
- Line number show
- Toast for easy develop and debug
Screenshoot Result
SS 1 |
SS 2 |
SS 3 |
SS 4 |
|
|
|
|
Screenshoot Library Sample
FrogoLog (with line code)
// Function Log Debug
FrogoLog.d("Debug")
// Function Log Info
FrogoLog.i("Info")
// Function Log Verbose
FrogoLog.v("Verbose")
// Function Log Warn
FrogoLog.w("Warn")
// Function Log Error
FrogoLog.e("Error")
// Function Log Simple Debug without message params
FrogoLog.d()
FrogoLog (with line code and Toast)
// Function Log Debug (adding context params)
FrogoLog.d("Debug", this@MainActivity)
// Function Log Info (adding context params)
FrogoLog.i("Info", this@MainActivity)
// Function Log Verbose
FrogoLog.v("Verbose", this@MainActivity)
// Function Log Warn (adding context params)
FrogoLog.w("Warn", this@MainActivity)
// Function Log Error (adding context params)
FrogoLog.e("Error", this@MainActivity)
// Function Log Simple Debug without message params
FrogoLog.d(this@MainActivity)
FLog (without line code)
// Function Log Debug
FLog.d("Debug")
// Function Log Info
FLog.i("Info")
// Function Log Verbose
FLog.v("Verbose")
// Function Log Warn
FLog.w("Warn")
// Function Log Error
FLog.e("Error")
// Function Log Simple Debug without message params
FLog.d()
Flog (without line code with toast)
// Function Log Debug (adding context params)
FLog.d("Debug", this@MainActivity)
// Function Log Info (adding context params)
FLog.i("Info", this@MainActivity)
// Function Log Verbose
FLog.v("Verbose", this@MainActivity)
// Function Log Warn (adding context params)
FLog.w("Warn", this@MainActivity)
// Function Log Error (adding context params)
FLog.e("Error", this@MainActivity)
// Function Log Simple Debug without message params
FLog.d(this@MainActivity)
Result FrogoLog
FrogoNotification
- SDK for your notification problem to make easier developing android apps
- frogo-notification is under huge large development
- Notification with singleton method
- Simple and eazy to use
- With many feature
- Full documentation
- Custom Layout Notification
Screenshoot Sample
Simple Notification |
Stack Notification |
Custom Notification (1) |
Custom Notification (2) |
|
|
|
|
FrogoNotification.Inject(this) // Intialize for Context
.setChannelId(CHANNEL_ID) // Intialize for Channel ID
.setChannelName(CHANNEL_NAME) // Initialize for Channel Name
.setContentIntent(pendingIntent) // Initialize for Content Intent
.setSmallIcon(R.drawable.ic_frogo_notif) // Initialize for Small Icon
.setLargeIcon(R.drawable.ic_frogo_notif) // Initialize for Large Icon
.setContentTitle(resources.getString(R.string.content_title)) // Initialize for Content Title
.setContentText(resources.getString(R.string.content_text)) // Initialize for Content Text
.setSubText(resources.getString(R.string.subtext)) // Initialize for Sub Text
.setupAutoCancel() // Initialize for Auto Cancel
.build() // Build the Frogo Notification
.launch(NOTIFICATION_ID) // Notify the Frogo Notification
Simple Notification
FrogoNotification.Inject(this) // Intialize for Context
.setChannelId(CHANNEL_ID) // Intialize for Channel ID
.setChannelName(CHANNEL_NAME) // Initialize for Channel Name
.setContentIntent(pendingIntent) // Initialize for Content Intent
.setSmallIcon(R.drawable.ic_frogo_notif) // Initialize for Small Icon
.setLargeIcon(R.drawable.ic_frogo_notif) // Initialize for Large Icon
.setContentTitle(resources.getString(R.string.content_title)) // Initialize for Content Title
.setContentText(resources.getString(R.string.content_text)) // Initialize for Content Text
.setSubText(resources.getString(R.string.subtext)) // Initialize for Sub Text
.setupAutoCancel() // Initialize for Auto Cancel
.build() // Build the Frogo Notification
.launch(NOTIFICATION_ID) // Notify the Frogo Notification
Custom Layout (NEW FEATURE)
val collapsed = object : FrogoNotifCustomContentViewListener {
override fun setupCustomView(): Int {
return R.layout.notification_collapsed
}
override fun setupComponent(context: Context, customView: RemoteViews) {
customView.apply{
setTextViewText(R.id.text_view_collapsed_1, "Hello World!")
}
}
}
val expanded = object : FrogoNotifCustomContentViewListener {
override fun setupCustomView(): Int {
return R.layout.notification_expanded
}
override fun setupComponent(context: Context, customView: RemoteViews) {
customView.apply {
setImageViewResource(R.id.image_view_expanded, R.drawable.ic_android)
setOnClickPendingIntent(R.id.image_view_expanded, clickPendingIntent)
}
}
}
FrogoNotification.Inject(this) // Intialize for Context
.setChannelId(FrogoApp.CHANNEL_ID) // Intialize for Channel ID
.setChannelName(FrogoApp.CHANNEL_NAME) // Initialize for Channel Name
.setSmallIcon(R.drawable.ic_android) // Initialize for Small Icon
.setCustomContentView(collapsed)
.setCustomBigContentView(expanded)
.build() // Build the Frogo Notification
.launch(FrogoApp.NOTIFICATION_ID) // Notify the Frogo Notification
With Action Replay
FrogoNotification.Inject(this)
.setChannelId(CHANNEL_ID)
.setChannelName(CHANNEL_NAME as String)
.setSmallIcon(R.drawable.ic_frogo_notif)
.setContentTitle(getString(R.string.notif_title))
.setContentText(getString(R.string.notif_content))
.setupShowWhen()
.setupActionRemoteInput(object : FrogoNotifActionRemoteInputListener {
override fun setRemoteInputResultKey(): String {
return KEY_REPLY
}
override fun setRemoteInputLabel(): String {
return getString(R.string.notif_action_reply)
}
override fun setActionIcon(): Int {
return R.drawable.ic_frogo_send
}
override fun setActionTitle(): String {
return getString(R.string.notif_action_reply)
}
override fun setActionIntent(): PendingIntent? {
return getReplyPendingIntent()
}
override fun setAllowGeneratedReplies(): Boolean {
return true
}
})
.build()
.launch(mNotificationId)
With Inbox Style (Stack)
val frogoNotification = FrogoNotification.Inject(this)
.setChannelId(CHANNEL_ID)
.setChannelName(CHANNEL_NAME)
.setSmallIcon(R.drawable.ic_frogo_email)
.setGroup(GROUP_KEY_EMAILS)
.setContentIntent(pendingIntent)
.setupAutoCancel()
// Check if NotificationID is smaller than Max Notif
if (idNotification < MAX_NOTIFICATION) {
stackNotif[idNotification].message?.let {
frogoNotification
.setContentTitle("New Email from " + stackNotif[idNotification].sender)
.setContentText(it)
.setLargeIcon(R.drawable.ic_frogo_notif)
}
} else {
frogoNotification
.setContentTitle("$idNotification new emails")
.setContentText("[email protected]")
.setGroupSummary()
.setupInboxStyle(object : FrogoNotifInboxStyleListener {
override fun addLine1(): String {
return "New Email from " + stackNotif[idNotification].sender
}
override fun addLine2(): String {
return "New Email from " + stackNotif[idNotification - 1].sender
}
override fun setBigContentTitle(): String {
return "$idNotification new emails"
}
override fun setSummaryText(): String {
return "mail@frogobox"
}
})
}
frogoNotification
.build()
.launch(idNotification)
With Frogo Style
FrogoNotification.Inject(this) // Intialize for Context
.setSmallIcon(R.drawable.ic_frogo_notif) // Initialize for Small Icon
.setupWithFrogoStyle()
.build() // Build the Frogo Notification
.launch(NOTIFICATION_ID) // Notify the Frogo Notification
For Documentation
Colaborator
Very open to anyone, I'll write your name under this, please contribute by sending an email to me
- Mail To [email protected]
- Subject : Github _ [Github-Username-Account] _ [Language] _ [Repository-Name]
- Example : Github_amirisback_kotlin_admob-helper-implementation
Name Of Contribute
- Muhammad Faisal Amir
- Waiting List
- Waiting List
Waiting for your contribute
Attention !!!
- Please enjoy and don't forget fork and give a star
- Don't Forget Follow My Github Account
Source code(tar.gz)
Source code(zip)
0.0.2-beta01(Mar 20, 2022)
About This Project (release-and-work-in-progress 👷🔧️👷♀️⛏)
- SDK for anything your problem to make easier developing android apps
- Available for android and desktop
- Privacy Policy Click Here
- License Click Here
Version Release
This Is Latest Release
~ Beta Release
$version_release = 0.0.2-beta01
What's New??
* SDK Android and Desktop *
* Beta Release *
Download this project
Step 1. Add the JitPack repository to your build file (build.gradle : Project)
<Option 1> Groovy Gradle
// Add it in your root build.gradle at the end of repositories:
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
<Option 2> Kotlin DSL Gradle
// Add it in your root build.gradle.kts at the end of repositories:
allprojects {
repositories {
...
maven { url = uri("https://jitpack.io") }
}
}
Step 2. Add the dependency (build.gradle : Module)
#### <Option 1> Groovy Gradle
dependencies {
// library frogo-sdk
implementation 'com.github.frogobox:frogo-sdk:0.0.2-beta01'
}
#### <Option 2> Kotlin DSL Gradle
dependencies {
// library frogo-sdk
implementation("com.github.frogobox:frogo-sdk:0.0.2-beta01")
}
Step 3. Function from this SDK
All Class SDK (android)
FrogoActivity
FrogoApiClient
FrogoApplication
FrogoComposeActivity
FrogoDate
FrogoFragment
FrogoFunc
FrogoMusic
FrogoMutableLiveData
FrogoNavigation
FrogoPagerHelper
FrogoPreference
FrogoViewModel
All Class SDK (desktop & android)
FrogoApiModel
FrogoApiObserver
FrogoConstant
FrogoCoreApiClient
FrogoDataResponse
FrogoLocalObserver
FrogoStateResponse
FrogoActivity
fun setupDetailActivity(title: String)
fun setupChildFragment(frameId: Int, fragment: Fragment)
fun showToast(message: String)
fun setupEventEmptyView(view: View, isEmpty: Boolean)
fun setupEventProgressView(view: View, progress: Boolean)
fun checkExtra(extraKey: String): Boolean
fun <Model> baseFragmentNewInstance(
fragment: FrogoFragment<*>,
argumentKey: String,
extraDataResult: Model
)
fun verifySignature()
fun readSignature()
fun verifyInstallerId()
fun verifyUnauthorizedApps()
fun verifyStores()
fun verifyDebug()
fun verifyEmulator()
fun showApkSignatures()
FrogoFragment
fun setupChildFragment(frameId: Int, fragment: Fragment)
fun checkArgument(argsKey: String): Boolean
fun setupEventEmptyView(view: View, isEmpty: Boolean)
fun setupEventProgressView(view: View, progress: Boolean)
fun showToast(message: String)
fun <Model> baseNewInstance(argsKey: String, data: Model)
FrogoFunc
fun createFolderPictureVideo()
fun getVideoFilePath(): String
fun createDialogDefault(
context: Context,
title: String,
message: String,
listenerYes: () -> Unit,
listenerNo: () -> Unit
)
fun noAction(): Boolean
fun randomNumber(start: Int, end: Int): Int
fun isNetworkAvailable(context: Context): Boolean?
fun <T> fetchRawData(mContext: Context, sourceRaw: Int): ArrayList<T>
fun <T> fetchRawData(mContext: Context, sourceRaw: Int, shuffle: Boolean): ArrayList<T>
fun getJsonFromAsset(context: Context, filename: String): String?
fun <T> getArrayFromJsonAsset(context: Context, filename: String): MutableList<T>
fun getDrawableString(context: Context, nameResource: String): Int
fun getRawString(context: Context, nameResource: String): Int
FrogoMusic
fun playMusic(context: Context, musicFile: Int)
fun stopMusic()
fun pauseMusic()
FrogoDate
fun getTimeStamp(): String
fun getTimeNow(): String
fun getCurrentDate(format: String): String
fun dateTimeToTimeStamp(date: String?): Long
fun getCurrentUTC(): String
fun timetoHour(date: String?): String
fun dateTimeTZtoHour(date: String?): String
fun DateTimeMonth(date: String?): String
fun dateTimeSet(date: String?): String
fun dateTimeProblem(date: String?): String
fun getTimeAgo(time: Long): String?
fun compareDate(newDate: String): String?
fun messageDate(newDate: String): String?
fun getDataChat(time: Long): String?
fun convertClassificationDate(string: String?): String
fun convertDateNewFormat(string: String?): String
fun convertLongDateNewFormat(string: String?): String
fun revertFromLongDateNewFormat(string: String?): String
fun convertTargetDate(string: String?): String
fun diffTime(timeStart: String, timeEnd: String): Long
Colaborator
Very open to anyone, I'll write your name under this, please contribute by sending an email to me
- Mail To [email protected]
- Subject : Github _ [Github-Username-Account] _ [Language] _ [Repository-Name]
- Example : Github_amirisback_kotlin_admob-helper-implementation
Name Of Contribute
- Muhammad Faisal Amir
- Waiting List
- Waiting List
Waiting for your contribute
Attention !!!
- Please enjoy and don't forget fork and give a star
- Don't Forget Follow My Github Account
Source code(tar.gz)
Source code(zip)
0.0.1-beta10(Mar 18, 2022)
About This Project (release-and-work-in-progress 👷🔧️👷♀️⛏)
- SDK for anything your problem to make easier developing android apps
- Available for android and desktop
- Privacy Policy Click Here
- License Click Here
Version Release
This Is Latest Release
~ Beta Release
$version_release = 0.0.1-beta10
What's New??
* SDK Android and Desktop *
* Beta Release *
Download this project
Step 1. Add the JitPack repository to your build file (build.gradle : Project)
<Option 1> Groovy Gradle
// Add it in your root build.gradle at the end of repositories:
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
<Option 2> Kotlin DSL Gradle
// Add it in your root build.gradle.kts at the end of repositories:
allprojects {
repositories {
...
maven { url = uri("https://jitpack.io") }
}
}
Step 2. Add the dependency (build.gradle : Module)
#### <Option 1> Groovy Gradle
dependencies {
// library frogo-sdk
implementation 'com.github.frogobox:frogo-sdk:0.0.1-beta10'
}
#### <Option 2> Kotlin DSL Gradle
dependencies {
// library frogo-sdk
implementation("com.github.frogobox:frogo-sdk:0.0.1-beta10")
}
Step 3. Function from this SDK
All Class SDK (android)
FrogoActivity
FrogoApiClient
FrogoApplication
FrogoComposeActivity
FrogoDate
FrogoFragment
FrogoFunc
FrogoMusic
FrogoMutableLiveData
FrogoNavigation
FrogoPagerHelper
FrogoPreference
FrogoViewModel
All Class SDK (desktop & android)
FrogoApiModel
FrogoApiObserver
FrogoConstant
FrogoCoreApiClient
FrogoDataResponse
FrogoLocalObserver
FrogoStateResponse
FrogoActivity
fun setupDetailActivity(title: String)
fun setupChildFragment(frameId: Int, fragment: Fragment)
fun showToast(message: String)
fun setupEventEmptyView(view: View, isEmpty: Boolean)
fun setupEventProgressView(view: View, progress: Boolean)
fun checkExtra(extraKey: String): Boolean
fun <Model> baseFragmentNewInstance(
fragment: FrogoFragment<*>,
argumentKey: String,
extraDataResult: Model
)
fun verifySignature()
fun readSignature()
fun verifyInstallerId()
fun verifyUnauthorizedApps()
fun verifyStores()
fun verifyDebug()
fun verifyEmulator()
fun showApkSignatures()
FrogoFragment
fun setupChildFragment(frameId: Int, fragment: Fragment)
fun checkArgument(argsKey: String): Boolean
fun setupEventEmptyView(view: View, isEmpty: Boolean)
fun setupEventProgressView(view: View, progress: Boolean)
fun showToast(message: String)
fun <Model> baseNewInstance(argsKey: String, data: Model)
FrogoFunc
fun createFolderPictureVideo()
fun getVideoFilePath(): String
fun createDialogDefault(
context: Context,
title: String,
message: String,
listenerYes: () -> Unit,
listenerNo: () -> Unit
)
fun noAction(): Boolean
fun randomNumber(start: Int, end: Int): Int
fun isNetworkAvailable(context: Context): Boolean?
fun <T> fetchRawData(mContext: Context, sourceRaw: Int): ArrayList<T>
fun <T> fetchRawData(mContext: Context, sourceRaw: Int, shuffle: Boolean): ArrayList<T>
fun getJsonFromAsset(context: Context, filename: String): String?
fun <T> getArrayFromJsonAsset(context: Context, filename: String): MutableList<T>
fun getDrawableString(context: Context, nameResource: String): Int
fun getRawString(context: Context, nameResource: String): Int
FrogoMusic
fun playMusic(context: Context, musicFile: Int)
fun stopMusic()
fun pauseMusic()
FrogoDate
fun getTimeStamp(): String
fun getTimeNow(): String
fun getCurrentDate(format: String): String
fun dateTimeToTimeStamp(date: String?): Long
fun getCurrentUTC(): String
fun timetoHour(date: String?): String
fun dateTimeTZtoHour(date: String?): String
fun DateTimeMonth(date: String?): String
fun dateTimeSet(date: String?): String
fun dateTimeProblem(date: String?): String
fun getTimeAgo(time: Long): String?
fun compareDate(newDate: String): String?
fun messageDate(newDate: String): String?
fun getDataChat(time: Long): String?
fun convertClassificationDate(string: String?): String
fun convertDateNewFormat(string: String?): String
fun convertLongDateNewFormat(string: String?): String
fun revertFromLongDateNewFormat(string: String?): String
fun convertTargetDate(string: String?): String
fun diffTime(timeStart: String, timeEnd: String): Long
Colaborator
Very open to anyone, I'll write your name under this, please contribute by sending an email to me
- Mail To [email protected]
- Subject : Github _ [Github-Username-Account] _ [Language] _ [Repository-Name]
- Example : Github_amirisback_kotlin_admob-helper-implementation
Name Of Contribute
- Muhammad Faisal Amir
- Waiting List
- Waiting List
Waiting for your contribute
Attention !!!
- Please enjoy and don't forget fork and give a star
- Don't Forget Follow My Github Account
Source code(tar.gz)
Source code(zip)
0.0.1-beta09(Mar 14, 2022)
About This Project (release-and-work-in-progress 👷🔧️👷♀️⛏)
- SDK for anything your problem to make easier developing android apps
- Available for android and desktop
- Privacy Policy Click Here
- License Click Here
Version Release
This Is Latest Release
~ Beta Release
$version_release = 0.0.1-beta09
What's New??
* SDK Android and Desktop *
* Beta Release *
Download this project
Step 1. Add the JitPack repository to your build file (build.gradle : Project)
<Option 1> Groovy Gradle
// Add it in your root build.gradle at the end of repositories:
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
<Option 2> Kotlin DSL Gradle
// Add it in your root build.gradle.kts at the end of repositories:
allprojects {
repositories {
...
maven { url = uri("https://jitpack.io") }
}
}
Step 2. Add the dependency (build.gradle : Module)
#### <Option 1> Groovy Gradle
dependencies {
// library frogo-sdk
implementation 'com.github.frogobox:frogo-sdk:0.0.1-beta09'
}
#### <Option 2> Kotlin DSL Gradle
dependencies {
// library frogo-sdk
implementation("com.github.frogobox:frogo-sdk:0.0.1-beta09")
}
Step 3. Function from this SDK
All Class SDK (android)
FrogoActivity
FrogoApiClient
FrogoApplication
FrogoComposeActivity
FrogoDate
FrogoFragment
FrogoFunc
FrogoMusic
FrogoMutableLiveData
FrogoNavigation
FrogoPagerHelper
FrogoPreference
FrogoViewModel
All Class SDK (desktop & android)
FrogoApiModel
FrogoApiObserver
FrogoConstant
FrogoCoreApiClient
FrogoDataResponse
FrogoLocalObserver
FrogoStateResponse
FrogoActivity
fun setupDetailActivity(title: String)
fun setupChildFragment(frameId: Int, fragment: Fragment)
fun showToast(message: String)
fun setupEventEmptyView(view: View, isEmpty: Boolean)
fun setupEventProgressView(view: View, progress: Boolean)
fun checkExtra(extraKey: String): Boolean
fun <Model> baseFragmentNewInstance(
fragment: FrogoFragment<*>,
argumentKey: String,
extraDataResult: Model
)
fun verifySignature()
fun readSignature()
fun verifyInstallerId()
fun verifyUnauthorizedApps()
fun verifyStores()
fun verifyDebug()
fun verifyEmulator()
fun showApkSignatures()
FrogoFragment
fun setupChildFragment(frameId: Int, fragment: Fragment)
fun checkArgument(argsKey: String): Boolean
fun setupEventEmptyView(view: View, isEmpty: Boolean)
fun setupEventProgressView(view: View, progress: Boolean)
fun showToast(message: String)
fun <Model> baseNewInstance(argsKey: String, data: Model)
FrogoFunc
fun createFolderPictureVideo()
fun getVideoFilePath(): String
fun createDialogDefault(
context: Context,
title: String,
message: String,
listenerYes: () -> Unit,
listenerNo: () -> Unit
)
fun noAction(): Boolean
fun randomNumber(start: Int, end: Int): Int
fun isNetworkAvailable(context: Context): Boolean?
fun <T> fetchRawData(mContext: Context, sourceRaw: Int): ArrayList<T>
fun <T> fetchRawData(mContext: Context, sourceRaw: Int, shuffle: Boolean): ArrayList<T>
fun getJsonFromAsset(context: Context, filename: String): String?
fun <T> getArrayFromJsonAsset(context: Context, filename: String): MutableList<T>
fun getDrawableString(context: Context, nameResource: String): Int
fun getRawString(context: Context, nameResource: String): Int
FrogoMusic
fun playMusic(context: Context, musicFile: Int)
fun stopMusic()
fun pauseMusic()
FrogoDate
fun getTimeStamp(): String
fun getTimeNow(): String
fun getCurrentDate(format: String): String
fun dateTimeToTimeStamp(date: String?): Long
fun getCurrentUTC(): String
fun timetoHour(date: String?): String
fun dateTimeTZtoHour(date: String?): String
fun DateTimeMonth(date: String?): String
fun dateTimeSet(date: String?): String
fun dateTimeProblem(date: String?): String
fun getTimeAgo(time: Long): String?
fun compareDate(newDate: String): String?
fun messageDate(newDate: String): String?
fun getDataChat(time: Long): String?
fun convertClassificationDate(string: String?): String
fun convertDateNewFormat(string: String?): String
fun convertLongDateNewFormat(string: String?): String
fun revertFromLongDateNewFormat(string: String?): String
fun convertTargetDate(string: String?): String
fun diffTime(timeStart: String, timeEnd: String): Long
Colaborator
Very open to anyone, I'll write your name under this, please contribute by sending an email to me
- Mail To [email protected]
- Subject : Github _ [Github-Username-Account] _ [Language] _ [Repository-Name]
- Example : Github_amirisback_kotlin_admob-helper-implementation
Name Of Contribute
- Muhammad Faisal Amir
- Waiting List
- Waiting List
Waiting for your contribute
Attention !!!
- Please enjoy and don't forget fork and give a star
- Don't Forget Follow My Github Account
Source code(tar.gz)
Source code(zip)
0.0.1-beta08(Mar 8, 2022)
About This Project (release-and-work-in-progress 👷🔧️👷♀️⛏)
- SDK for anything your problem to make easier developing android apps
- Available for android and desktop
- Privacy Policy Click Here
- License Click Here
Version Release
This Is Latest Release
~ Beta Release
$version_release = 0.0.1-beta08
What's New??
* SDK Android and Desktop *
* Beta Release *
Download this project
Step 1. Add the JitPack repository to your build file (build.gradle : Project)
<Option 1> Groovy Gradle
// Add it in your root build.gradle at the end of repositories:
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
<Option 2> Kotlin DSL Gradle
// Add it in your root build.gradle.kts at the end of repositories:
allprojects {
repositories {
...
maven { url = uri("https://jitpack.io") }
}
}
Step 2. Add the dependency (build.gradle : Module)
#### <Option 1> Groovy Gradle
dependencies {
// library frogo-sdk
implementation 'com.github.frogobox:frogo-sdk:0.0.1-beta08'
}
#### <Option 2> Kotlin DSL Gradle
dependencies {
// library frogo-sdk
implementation("com.github.frogobox:frogo-sdk:0.0.1-beta08")
}
Step 3. Function from this SDK
All Class SDK (android)
FrogoActivity
FrogoApiClient
FrogoApplication
FrogoComposeActivity
FrogoDate
FrogoFragment
FrogoFunc
FrogoMusic
FrogoMutableLiveData
FrogoNavigation
FrogoPagerHelper
FrogoPreference
FrogoViewModel
All Class SDK (desktop & android)
FrogoApiModel
FrogoApiObserver
FrogoConstant
FrogoCoreApiClient
FrogoDataResponse
FrogoLocalObserver
FrogoStateResponse
FrogoActivity
fun setupDetailActivity(title: String)
fun setupChildFragment(frameId: Int, fragment: Fragment)
fun showToast(message: String)
fun setupEventEmptyView(view: View, isEmpty: Boolean)
fun setupEventProgressView(view: View, progress: Boolean)
fun checkExtra(extraKey: String): Boolean
fun <Model> baseFragmentNewInstance(
fragment: FrogoFragment<*>,
argumentKey: String,
extraDataResult: Model
)
fun verifySignature()
fun readSignature()
fun verifyInstallerId()
fun verifyUnauthorizedApps()
fun verifyStores()
fun verifyDebug()
fun verifyEmulator()
fun showApkSignatures()
FrogoFragment
fun setupChildFragment(frameId: Int, fragment: Fragment)
fun checkArgument(argsKey: String): Boolean
fun setupEventEmptyView(view: View, isEmpty: Boolean)
fun setupEventProgressView(view: View, progress: Boolean)
fun showToast(message: String)
fun <Model> baseNewInstance(argsKey: String, data: Model)
FrogoFunc
fun createFolderPictureVideo()
fun getVideoFilePath(): String
fun createDialogDefault(
context: Context,
title: String,
message: String,
listenerYes: () -> Unit,
listenerNo: () -> Unit
)
fun noAction(): Boolean
fun randomNumber(start: Int, end: Int): Int
fun isNetworkAvailable(context: Context): Boolean?
fun <T> fetchRawData(mContext: Context, sourceRaw: Int): ArrayList<T>
fun <T> fetchRawData(mContext: Context, sourceRaw: Int, shuffle: Boolean): ArrayList<T>
fun getJsonFromAsset(context: Context, filename: String): String?
fun <T> getArrayFromJsonAsset(context: Context, filename: String): MutableList<T>
fun getDrawableString(context: Context, nameResource: String): Int
fun getRawString(context: Context, nameResource: String): Int
FrogoMusic
fun playMusic(context: Context, musicFile: Int)
fun stopMusic()
fun pauseMusic()
FrogoDate
fun getTimeStamp(): String
fun getTimeNow(): String
fun getCurrentDate(format: String): String
fun dateTimeToTimeStamp(date: String?): Long
fun getCurrentUTC(): String
fun timetoHour(date: String?): String
fun dateTimeTZtoHour(date: String?): String
fun DateTimeMonth(date: String?): String
fun dateTimeSet(date: String?): String
fun dateTimeProblem(date: String?): String
fun getTimeAgo(time: Long): String?
fun compareDate(newDate: String): String?
fun messageDate(newDate: String): String?
fun getDataChat(time: Long): String?
fun convertClassificationDate(string: String?): String
fun convertDateNewFormat(string: String?): String
fun convertLongDateNewFormat(string: String?): String
fun revertFromLongDateNewFormat(string: String?): String
fun convertTargetDate(string: String?): String
fun diffTime(timeStart: String, timeEnd: String): Long
Colaborator
Very open to anyone, I'll write your name under this, please contribute by sending an email to me
- Mail To [email protected]
- Subject : Github _ [Github-Username-Account] _ [Language] _ [Repository-Name]
- Example : Github_amirisback_kotlin_admob-helper-implementation
Name Of Contribute
- Muhammad Faisal Amir
- Waiting List
- Waiting List
Waiting for your contribute
Attention !!!
- Please enjoy and don't forget fork and give a star
- Don't Forget Follow My Github Account
Source code(tar.gz)
Source code(zip)
0
Nov 25, 2022
3
Oct 27, 2022
976
Dec 29, 2022
Countly Product Analytics Android SDK
Countly Android SDK We're hiring: Countly is looking for Android SDK developers, full stack devs, devops and growth hackers (remote work). Click this
648
Dec 23, 2022
659
May 14, 2022
Evernote SDK for Android
Evernote SDK for Android version 2.0.0-RC4 Evernote API version 1.25 Overview This SDK wraps the Evernote Cloud API and provides OAuth authentication
424
Dec 9, 2022
219
Nov 25, 2022
Android Chat SDK built on Firebase
Chat21 is the core of the open source live chat platform Tiledesk.com. Chat21 SDK Documentation Features With Chat21 Android SDK you can: Send a direc
235
Dec 2, 2022
Liquid SDK (Android)
Liquid Android SDK Quick Start to Liquid SDK for Android This document is just a quick start introduction to Liquid SDK for Android. We recommend you
17
Nov 12, 2021
975
Dec 24, 2022