Skip to content

Commit

Permalink
Merge pull request #2 from ojhdt/develop
Browse files Browse the repository at this point in the history
v1.2
  • Loading branch information
ojhdt committed Jan 26, 2022
2 parents 3f8003d + 2f1294b commit 656cfc6
Show file tree
Hide file tree
Showing 97 changed files with 1,895 additions and 765 deletions.
2 changes: 2 additions & 0 deletions .gitignore
Expand Up @@ -14,3 +14,5 @@
.cxx
local.properties
/app/release
app/release/app-release.apk
app/release/output-metadata.json
2 changes: 2 additions & 0 deletions .idea/misc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 4 additions & 1 deletion app/build.gradle
Expand Up @@ -40,7 +40,7 @@ android {

static def getSelfDefinedVersion(type) {
int aa = 1
int bb = 0
int bb = 2
Process process = "git rev-list --count HEAD".execute()
process.waitFor()
int cccc = process.getText().toInteger()
Expand All @@ -66,6 +66,9 @@ dependencies {
def paging_version = "3.1.0"
def work_version = "2.7.1"

// Chrome Custom Tab
implementation "androidx.browser:browser:1.3.0"

// Play Services
implementation 'com.google.android.gms:play-services-awareness:19.0.1'
implementation 'com.google.android.gms:play-services-location:19.0.1'
Expand Down
Binary file modified app/release/app-release.apk
Binary file not shown.
4 changes: 2 additions & 2 deletions app/release/output-metadata.json
Expand Up @@ -11,8 +11,8 @@
"type": "SINGLE",
"filters": [],
"attributes": [],
"versionCode": 1000282,
"versionName": "1.0.282.220117.d97197f",
"versionCode": 1010287,
"versionName": "1.1.287.220121.917c6d5",
"outputFile": "app-release.apk"
}
],
Expand Down
6 changes: 3 additions & 3 deletions app/src/main/AndroidManifest.xml
Expand Up @@ -11,11 +11,11 @@
<uses-permission-sdk-23 android:name="android.permission.BODY_SENSORS" /> <!-- <uses-permission-sdk-23 android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> -->
<uses-permission-sdk-23 android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission-sdk-23 android:name="android.permission.MANAGE_DOCUMENTS" />
<uses-permission-sdk-23 android:name="android.permission.READ_PHONE_STATE" />
<!-- <uses-permission-sdk-23 android:name="android.permission.READ_PHONE_STATE" />-->
<uses-permission-sdk-23 android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission-sdk-23 android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission-sdk-23 android:name="android.permission.READ_PHONE_STATE" />
<!-- <uses-permission-sdk-23 android:name="android.permission.CHANGE_WIFI_STATE" />-->
<uses-permission-sdk-23 android:name="android.permission.FOREGROUND_SERVICE"/>
<uses-permission-sdk-23 android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS"/>
<!-- <uses-permission-sdk-23 android:name="com.google.android.gms.permission.ACTIVITY_RECOGNITION" /> -->
<!-- <uses-permission android:name="com.google.android.gms.permission.ACTIVITY_RECOGNITION" />-->

Expand Down
Binary file added app/src/main/ic_launcher-playstore.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
5 changes: 5 additions & 0 deletions app/src/main/java/com/ojhdtapp/action/BaseApplication.kt
Expand Up @@ -86,6 +86,11 @@ interface MyOnClickListener {
fun onClick()
}

interface MyOperationListener{
fun onSuccess()
fun onFailure()
}

open class Event<out T>(private val content: T) {

var hasBeenHandled = false
Expand Down
4 changes: 4 additions & 0 deletions app/src/main/java/com/ojhdtapp/action/MainActivity.kt
Expand Up @@ -20,6 +20,7 @@ import androidx.preference.PreferenceFragmentCompat
import androidx.preference.PreferenceManager
import com.google.android.material.color.DynamicColors
import com.ojhdtapp.action.databinding.ActivityMainBinding
import com.ojhdtapp.action.logic.detector.AchievementPusher
import com.ojhdtapp.action.logic.detector.DetectService
import com.ojhdtapp.action.ui.home.SharedViewModel
import com.ojhdtapp.action.ui.welcome.WelcomeActivity
Expand Down Expand Up @@ -166,6 +167,9 @@ class MainActivity : AppCompatActivity(),
override fun onServiceDisconnected(name: ComponentName?) {
}
}, Context.BIND_AUTO_CREATE)

// Check Achievement
AchievementPusher.getPusher().tryPushingNewAchievement()
}

override fun onPreferenceStartFragment(
Expand Down
5 changes: 4 additions & 1 deletion app/src/main/java/com/ojhdtapp/action/logic/AppDataBase.kt
Expand Up @@ -5,17 +5,20 @@ import androidx.room.Room
import androidx.room.RoomDatabase
import androidx.room.TypeConverters
import com.ojhdtapp.action.BaseApplication
import com.ojhdtapp.action.logic.dao.AchievementDao
import com.ojhdtapp.action.logic.dao.ActionDao
import com.ojhdtapp.action.logic.dao.SuggestDao
import com.ojhdtapp.action.logic.model.Achievement
import com.ojhdtapp.action.logic.model.Action
import com.ojhdtapp.action.logic.model.Suggest
import com.ojhdtapp.action.logic.network.Converters

@Database(version = 1, entities = [Action::class, Suggest::class], exportSchema = false)
@Database(version = 1, entities = [Action::class, Suggest::class, Achievement::class], exportSchema = false)
@TypeConverters(Converters::class)
abstract class AppDataBase : RoomDatabase() {
abstract fun actionDao(): ActionDao
abstract fun suggestDao(): SuggestDao
abstract fun achievementDao(): AchievementDao

companion object {
private val instance by lazy {
Expand Down
54 changes: 47 additions & 7 deletions app/src/main/java/com/ojhdtapp/action/logic/LeanCloudDataBase.kt
@@ -1,16 +1,19 @@
package com.ojhdtapp.action.logic

import android.util.Log
import android.widget.Toast
import cn.leancloud.LCObject
import io.reactivex.disposables.Disposable
import cn.leancloud.LCQuery
import com.ojhdtapp.action.BaseApplication
import com.ojhdtapp.action.R
import com.ojhdtapp.action.logic.detector.AchievementPusher
import com.ojhdtapp.action.logic.model.Action
import com.ojhdtapp.action.logic.model.Suggest
import io.reactivex.Observer
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Job
import kotlinx.coroutines.launch
import java.sql.ClientInfoStatus
import kotlin.coroutines.resume
import kotlin.coroutines.resumeWithException
import kotlin.coroutines.suspendCoroutine
Expand Down Expand Up @@ -57,18 +60,20 @@ object LeanCloudDataBase {
}
}

fun lcObject2Action(obj:LCObject) : Action{
fun lcObject2Action(obj: LCObject): Action {
val storeAction = Action()
Log.d("aaa", storeAction.toString())
val list = obj.getList("label") as List<HashMap<String, Any>>
val map = mutableMapOf<Int, String>()
list.forEach {
map[it["first"] as Int] = it["second"] as String
}
return storeAction.apply {
title = obj.getString("title")
imageID = obj.getInt("imageID")
imageUrl = obj.getString("imageUrl")
content = obj.getString("content")
label = map
history = emptyList()
hightlight = obj.getList("highlight") as List<String>
weight = obj.getInt("weight")
activityStateTrigger = obj.getInt("activityStateTrigger")
Expand All @@ -83,13 +88,14 @@ object LeanCloudDataBase {
}
}

suspend fun getNewSuggest(type: Int) = suspendCoroutine<Suggest> {
private suspend fun getSuggestWithSkip(type: Int, skip: Int = 0) = suspendCoroutine<Suggest> {
val query = LCQuery<LCObject>("Suggest")
when (type) {
1 -> query.whereEqualTo("type", 1)
2 -> query.whereEqualTo("type", 2)
else -> {}
}
query.skip(skip)
query.firstInBackground.subscribe(object : Observer<LCObject?> {
override fun onSubscribe(d: Disposable) {
}
Expand All @@ -107,6 +113,28 @@ object LeanCloudDataBase {
})
}

suspend fun getNewSuggest(type: Int): Suggest {
AchievementPusher.getPusher().tryPushingNewAchievement("suggestion")
var skip = 0
var suggest: Suggest? = null
do {
// Log.d("aaa", skip.toString())
try {
suggest = getSuggestWithSkip(type, skip)
Log.d("aaa", suggest.toString())
if (dataBase.suggestDao()
.isStored(suggest.objectId!!)
) {
suggest = null
skip += 1
}
} catch (e: Exception) {
break
}
} while (suggest == null)
return suggest!!
}

suspend fun syncSuggest(objectId: String): Suggest {
val result = suspendCoroutine<Suggest> {
val storedSuggest = dataBase.suggestDao().querySuggestByObjId(objectId)
Expand Down Expand Up @@ -137,17 +165,29 @@ object LeanCloudDataBase {
return result
}

fun syncAllAction(){
interface SyncActionListener {
fun onSuccess(dataSize: Int)
fun onFailure()
}

fun syncAllAction(listener: SyncActionListener) {
Toast.makeText(
BaseApplication.context,
BaseApplication.context.getString(R.string.sync_action_database_syncing_summary),
Toast.LENGTH_SHORT
).show()
val query = LCQuery<LCObject>("Action")
query.findInBackground().subscribe(object : Observer<List<LCObject>> {
override fun onSubscribe(d: Disposable) {
}

override fun onNext(t: List<LCObject>) {
storeActionsToDatabase(t)
listener.onSuccess(t.size)
}

override fun onError(e: Throwable) {
listener.onFailure()
}

override fun onComplete() {
Expand All @@ -157,11 +197,11 @@ object LeanCloudDataBase {
})
}

fun storeActionsToDatabase(list:List<LCObject>){
fun storeActionsToDatabase(list: List<LCObject>) {
val job = Job()
CoroutineScope(job).launch {
list.forEach {
if(!dataBase.actionDao().isStored(it.objectId))
if (!dataBase.actionDao().isStored(it.objectId))
dataBase.actionDao().insertAction(lcObject2Action(it))
}
}
Expand Down
@@ -0,0 +1,27 @@
package com.ojhdtapp.action.logic

import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.util.Log
import android.widget.Toast
import com.ojhdtapp.action.BaseApplication
import com.ojhdtapp.action.R
import com.ojhdtapp.action.util.NotificationUtil

class NotificationActionReceiver : BroadcastReceiver() {
override fun onReceive(context: Context?, intent: Intent?) {
val action = intent?.action
val actionId = intent?.getLongExtra("action_id", -1)
Log.d("aaa", actionId.toString())
if (action == NotificationUtil.ACTION_FINISHED && !actionId!!.equals(-1)) {
Log.d("aaa", "action finished tap")
NotificationUtil.cancelAction(actionId.toInt())
Toast.makeText(BaseApplication.context, R.string.notification_finished_action_toast, Toast.LENGTH_SHORT).show()
} else if (action == NotificationUtil.ACTION_IGNORED && !actionId!!.equals(-1)) {
NotificationUtil.cancelAction(actionId.toInt())
Log.d("aaa", "action ignored tap")
Toast.makeText(BaseApplication.context, R.string.notification_ignored_action_toast, Toast.LENGTH_SHORT).show()
}
}
}
45 changes: 32 additions & 13 deletions app/src/main/java/com/ojhdtapp/action/logic/Repository.kt
Expand Up @@ -13,9 +13,8 @@ import com.ojhdtapp.action.R
import com.ojhdtapp.action.logic.model.*
import com.ojhdtapp.action.logic.network.Network
import com.ojhdtapp.action.util.LocationUtil
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.async
import kotlinx.coroutines.coroutineScope
import com.ojhdtapp.action.util.NotificationUtil
import kotlinx.coroutines.*
import java.lang.RuntimeException
import java.math.RoundingMode
import java.sql.Timestamp
Expand Down Expand Up @@ -84,22 +83,17 @@ object Repository {
fun getAllActionLive(): LiveData<List<Action>> =
database.actionDao().loadAllActionLive()

fun getActivatedActionLive(): LiveData<List<Action>> =
database.actionDao().loadActivatedActionLive()

fun getReadSuggestLive(): LiveData<List<Suggest>> =
database.suggestDao().loadAllReadSuggestLive()

fun getArchivedSuggestLive(): LiveData<List<Suggest>> =
database.suggestDao().loadAllArchivedSuggestLive()

fun getGainedAchievementLive(): LiveData<List<Achievement>> {
return liveData {
val list = listOf(
Achievement(),
Achievement(),
Achievement(),
)
emit(list)
}
}
fun getGainedAchievementLive(): LiveData<List<Achievement>> =
database.achievementDao().loadAllAchievementLive()

fun loadAvailableActionByConditions(
activityStateTrigger: Int = -1,
Expand All @@ -117,6 +111,31 @@ object Repository {
currentTime
)

fun updateAllActivatingActionState() {
val job = Job()
CoroutineScope(job).launch {
val list = database.actionDao().loadAllActivatingAction()
val milltime =
(sharedPreference.getString("action_expired_time", "10")!!.toInt() * 60000).toLong()
if (list.isNotEmpty()) {
list.forEach {
if (System.currentTimeMillis() - it.lastTriggered > milltime) {
it.let {
it.isActivating = false
Log.d(
"aaa",
"No." + it.id.toString() + "task has been automatically cleared"
)
database.actionDao().updateAction(it)
NotificationUtil.cancelAction(it.id.toInt())
}
}
}
}
}
job.complete()
}

// From Cloud
suspend fun storeSuggestFromCloud(type: Int): Result<String> {
return try {
Expand Down
29 changes: 29 additions & 0 deletions app/src/main/java/com/ojhdtapp/action/logic/dao/AchievementDao.kt
@@ -0,0 +1,29 @@
package com.ojhdtapp.action.logic.dao

import androidx.lifecycle.LiveData
import androidx.room.*
import com.ojhdtapp.action.logic.model.Achievement

@Dao
interface AchievementDao {
@Insert
fun insertAchievement(achievement: Achievement): Long

@Delete
fun deleteAchievement(achievement: Achievement)

@Update
fun updateAchievement(newAchievement: Achievement)

@Query("DELETE FROM achievement_table")
fun deleteAll()

@Query("SELECT * FROM achievement_table")
fun loadAllAchievement(): List<Achievement>

@Query("SELECT * FROM achievement_table")
fun loadAllAchievementLive(): LiveData<List<Achievement>>

@Query("SELECT 1 FROM achievement_table WHERE title = :title LIMIT 1")
fun isStored(title: String): Boolean
}

0 comments on commit 656cfc6

Please sign in to comment.