Skip to content

Commit

Permalink
Add AppKillerManager and Smart App Rate libraries.
Browse files Browse the repository at this point in the history
Minor fixes and cleanup.
  • Loading branch information
iamashank committed Feb 11, 2019
1 parent b40077f commit f26ca1c
Show file tree
Hide file tree
Showing 15 changed files with 148 additions and 98 deletions.
35 changes: 29 additions & 6 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ android {
minSdkVersion 21
targetSdkVersion 28
versionCode 1
versionName "1.0"
versionName "1.0.0"
kapt {
arguments {
arg("room.schemaLocation", "$projectDir/schemas".toString())
Expand All @@ -23,8 +23,21 @@ android {
}
buildTypes {
release {
minifyEnabled false
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
android.applicationVariants.all { variant ->
variant.outputs.all {
outputFileName = "${variant.name}-${variant.versionName}.apk"
}
variant.assembleProvider.get().doLast {
if (variant.mappingFile != null && variant.mappingFile.exists()) {
def mappingFilename = "$archivesBaseName-$variant.baseName-mapping-${variant.versionName}.txt"
(new File(variant.mappingFile.parent, mappingFilename)).delete()
variant.mappingFile.renameTo(variant.mappingFile.parent +
"/" + mappingFilename)
}
}
}
}
}
dataBinding {
Expand All @@ -37,7 +50,7 @@ ext {
gson_version = "2.8.5"
room_version = "2.1.0-alpha04"
coroutines_version = "1.1.0"
firebase_core_version = "16.0.6"
firebase_core_version = "16.0.7"
firebase_messaging_version = "17.3.4"
firebase_jobdispatcher_version = "0.8.5"
retrofit_version = "2.5.0"
Expand All @@ -47,6 +60,9 @@ ext {
workmanager_version = "1.0.0-beta04"
lifecycle_version = "2.1.0-alpha02"
material_version = "1.0.0"
safetynet_version = "16.0.0"
appkillermanager_version = "2.1.1"
smartapprate_version = "1.0.8"
}

dependencies {
Expand All @@ -58,8 +74,8 @@ dependencies {
implementation 'androidx.legacy:legacy-support-v4:1.0.0'

testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test:runner:1.1.1'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1'
androidTestImplementation 'androidx.test:runner:1.1.2-alpha01'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.2-alpha01'

// ViewModel & LiveData
implementation "androidx.lifecycle:lifecycle-extensions:$lifecycle_version"
Expand Down Expand Up @@ -103,7 +119,14 @@ dependencies {
implementation "com.google.android.material:material:$material_version"

// Captcha
implementation 'com.google.android.gms:play-services-safetynet:16.0.0'
implementation "com.google.android.gms:play-services-safetynet:$safetynet_version"

// 3rd party
// https://github.com/thelittlefireman/AppKillerManager/tree/master
implementation "com.thelittlefireman:AppKillerManager:$appkillermanager_version"

// https://github.com/codemybrainsout/smart-app-rate
implementation "com.codemybrainsout.rating:ratingdialog:$smartapprate_version"
}

apply plugin: 'com.google.gms.google-services'
13 changes: 11 additions & 2 deletions app/src/main/java/in/bitotsav/HomeActivity.kt
Original file line number Diff line number Diff line change
@@ -1,9 +1,7 @@
package `in`.bitotsav

import `in`.bitotsav.databinding.ActivityHomeBinding
import `in`.bitotsav.events.ui.ScheduleViewModel
import `in`.bitotsav.shared.ui.UiUtilViewModel
import `in`.bitotsav.shared.utils.getColorCompat
import android.os.Build
import android.os.Bundle
import android.util.TypedValue
Expand All @@ -14,6 +12,8 @@ import androidx.databinding.DataBindingUtil
import androidx.navigation.Navigation
import androidx.navigation.ui.setupWithNavController
import com.google.android.material.bottomnavigation.BottomNavigationView
import com.thelittlefireman.appkillermanager.managers.KillerManager
import com.thelittlefireman.appkillermanager.ui.DialogKillerManagerBuilder
import org.koin.androidx.viewmodel.ext.viewModel

class HomeActivity : AppCompatActivity() {
Expand All @@ -40,6 +40,11 @@ class HomeActivity : AppCompatActivity() {
binding.lifecycleOwner = this
handlePlatformLimitations()
setupBottomNavMenu()

// AppKillerManager
startDialog(KillerManager.Actions.ACTION_AUTOSTART)
startDialog(KillerManager.Actions.ACTION_NOTIFICATIONS)
startDialog(KillerManager.Actions.ACTION_POWERSAVING)
}

private fun setupBottomNavMenu() {
Expand All @@ -57,4 +62,8 @@ class HomeActivity : AppCompatActivity() {
}
}
}

private fun startDialog(actions: KillerManager.Actions) {
DialogKillerManagerBuilder().setContext(this).setAction(actions).show()
}
}
12 changes: 6 additions & 6 deletions app/src/main/java/in/bitotsav/events/data/Event.kt
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ data class Event(
@SerializedName("eventRules") val rules: String,
@SerializedName("eventContact1Name") val contact1Name: String,
@SerializedName("eventContact1Number") val contact1Number: Long,
// TODO: This can be null or empty. Handle it in UI accordingly
// This can be null or empty. Handle it in UI accordingly
@SerializedName("eventContact2Name") val contact2Name: String? = null,
@SerializedName("eventContact2Number") val contact2Number: Long? = null,
@SerializedName("eventPoints1") val points1: Int,
Expand All @@ -40,12 +40,12 @@ data class Event(
@SerializedName("eventPrize1") val prize1: Int,
@SerializedName("eventPrize2") val prize2: Int,
@SerializedName("eventPrize3") val prize3: Int,
// TODO: Note: Default value is empty map
// Note: Default value is empty map
// eventPosition1: {
// teamLeader: req.body.eventPosition1,
// teamLeaderName: map[req.body.eventPosition1].name,
// championshipTeam: (team1 != null) ? team1 : "-1",
// points: (team1 != null) ? event.eventPoints1 : 0
// teamLeader: String,
// teamLeaderName: String,
// championshipTeam: String = "-1",
// points: String = 0
//}
@SerializedName("eventPosition1") val position1: Map<String, String>?,
@SerializedName("eventPosition2") val position2: Map<String, String>?,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ fun registerForEventAsync(
val response = request.await()
Log.d(TAG, "Response Code: ${response.code()}")
when (response.code()) {
200 -> Log.d(TAG, "Registered for event $eventId")
200 -> run { Log.d(TAG, "Registered for event $eventId") }
404 -> throw Exception("Incorrect Bitotsav id and/or email id")
405 -> throw Exception("All members don't belong to the same college")
408 -> throw Exception("Registration for this event has been closed")
Expand All @@ -61,7 +61,7 @@ fun deregisterForEventAsync(
val response = request.await()
Log.d(TAG, "Response Code: ${response.code()}")
when (response.code()) {
200 -> Log.d(TAG, "De-registered for event $eventId")
200 -> run { Log.d(TAG, "De-registered for event $eventId") }
403 -> throw Exception("Not registered for this event or not the team leader")
408 -> throw Exception("De-registration for this event has been closed")
else -> throw Exception("Server is currently facing some issues. Try again later")
Expand Down
39 changes: 38 additions & 1 deletion app/src/main/java/in/bitotsav/info/ui/InfoFragment.kt
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,18 @@ package `in`.bitotsav.info.ui
import `in`.bitotsav.R
import `in`.bitotsav.databinding.FragmentInfoBinding
import `in`.bitotsav.info.ui.InfoPageFragment.InfoPage
import `in`.bitotsav.shared.utils.getColorCompat
import android.content.Intent
import android.net.Uri
import android.os.Bundle
import android.util.TypedValue
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.appcompat.content.res.AppCompatResources
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentManager
import androidx.fragment.app.FragmentPagerAdapter
import com.codemybrainsout.ratingdialog.RatingDialog
import org.koin.androidx.viewmodel.ext.sharedViewModel


Expand Down Expand Up @@ -40,6 +43,9 @@ class InfoFragment : Fragment() {
infoPager.offscreenPageLimit = PAGES - 1
infoPager.adapter = InfoPageAdapter(childFragmentManager)
appBar.tabs.setupWithViewPager(infoPager)
feedbackFab.setOnClickListener {
feedback()
}
}
.root

Expand All @@ -57,4 +63,35 @@ class InfoFragment : Fragment() {
}
}

private fun feedback() {
context?.let {
val ratingDialog = RatingDialog.Builder(it)
.icon(AppCompatResources.getDrawable(it, `in`.bitotsav.R.drawable.ic_bitotsav_red_24dp)!!)
.threshold(4f)
.title("How was your experience with us?")
.positiveButtonText("Not Now")
.negativeButtonText("Never")
.formTitle("Submit Feedback")
.formHint("Tell us where we can improve")
.formSubmitText("Submit")
.formCancelText("Cancel")
.playstoreUrl("YOUR_URL")
.onRatingBarFormSumbit { feedback ->
val intent = Intent(Intent.ACTION_SENDTO).apply {
data = Uri.parse("mailto:")
putExtra(Intent.EXTRA_EMAIL, arrayOf("[email protected]"))
putExtra(Intent.EXTRA_SUBJECT, "Bitotsav '19 App Feedback")
putExtra(Intent.EXTRA_TEXT, feedback)
}
activity?.packageManager?.let { packageManager ->
if (intent.resolveActivity(packageManager) != null) {
startActivity(intent)
}
}
}.build()

ratingDialog.show()
}
}

}
11 changes: 1 addition & 10 deletions app/src/main/java/in/bitotsav/info/ui/InfoViewModel.kt
Original file line number Diff line number Diff line change
@@ -1,14 +1,5 @@
package `in`.bitotsav.info.ui

import `in`.bitotsav.shared.ui.BaseViewModel
import androidx.lifecycle.ViewModel

class InfoViewModel : BaseViewModel() {

fun feedback() {

}



}
class InfoViewModel : BaseViewModel()
2 changes: 0 additions & 2 deletions app/src/main/java/in/bitotsav/notification/utils/FcmUtils.kt
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,6 @@ fun sendFcmTokenAsync(authToken: String, fcmToken: String): Deferred<Any> {
return@async true
} else {
when (response.code()) {
// TODO("Delete local token for 403")
403 -> throw NonRetryableException("Fcm token missing or user authentication failed")
409 -> throw NonRetryableException("Token already exists")
else -> throw NetworkException("Unable to send token to server. Response code: ${response.code()}")
Expand All @@ -58,7 +57,6 @@ fun deleteFcmTokenAsync(authToken: String, fcmToken: String): Deferred<Any> {
return@async true
} else {
when (response.code()) {
// TODO("Delete local token for 403")
403 -> throw NonRetryableException("Fcm token missing or user authentication failed")
404 -> throw NonRetryableException("Token not found")
else -> throw NetworkException("Unable to send token to server. Response code: ${response.code()}")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,6 @@ fun displayNotification(
val bigTextStyle = NotificationCompat.BigTextStyle()
bigTextStyle.bigText(content)

// TODO("Set small icon, large icon and color")
val channelId = channel.id
val notificationBuilder = NotificationCompat.Builder(context, channelId)
.setSmallIcon(getIconByChannel(channel))
Expand Down
4 changes: 2 additions & 2 deletions app/src/main/java/in/bitotsav/profile/utils/AuthUtils.kt
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ fun registerAsync(
val request = authService.registerAsync(body)
val response = request.await()
when (response.code()) {
200 -> Log.d(TAG, "Registration Stage 1 complete")
200 -> run { Log.d(TAG, "Registration Stage 1 complete") }
403 -> throw AuthException("Captcha verification failed")
409 -> throw AuthException("Email id is already registered")
else -> throw NetworkException(
Expand Down Expand Up @@ -92,7 +92,7 @@ fun verifyAsync(
val request = authService.verifyAsync(body)
val response = request.await()
when (response.code()) {
200 -> Log.d(TAG, "Registration Stage 2: OTP verification complete")
200 -> run { Log.d(TAG, "Registration Stage 2: OTP verification complete") }

403 -> throw AuthException("Incorrect OTP(s)")
400 -> throw AuthException(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,6 @@ fun fetchProfileDetailsAsync(authToken: String): Deferred<Any> {
val response = request.await()
if (response.code() == 200) {
Log.d(TAG, "Participant details received from server")
// ("Store participant details here")
// "teamMembers": [
// {
// "name": $name,
Expand Down
Loading

0 comments on commit f26ca1c

Please sign in to comment.