Compare commits
5 Commits
v2.0.7
...
v2.0.8-bet
Author | SHA1 | Date | |
---|---|---|---|
ce9f5a6e45 | |||
8f0f6bc868 | |||
34d8fa4b59 | |||
9401b89036 | |||
842c0d764f |
1
.gitignore
vendored
1
.gitignore
vendored
@ -9,3 +9,4 @@
|
|||||||
.externalNativeBuild
|
.externalNativeBuild
|
||||||
/tasksintegration/build
|
/tasksintegration/build
|
||||||
apikey.properties
|
apikey.properties
|
||||||
|
/app/google-services.json
|
||||||
|
BIN
.idea/caches/build_file_checksums.ser
generated
BIN
.idea/caches/build_file_checksums.ser
generated
Binary file not shown.
@ -22,8 +22,8 @@ android {
|
|||||||
applicationId "com.tommasoberlose.anotherwidget"
|
applicationId "com.tommasoberlose.anotherwidget"
|
||||||
minSdkVersion 23
|
minSdkVersion 23
|
||||||
targetSdkVersion 29
|
targetSdkVersion 29
|
||||||
versionCode 84
|
versionCode 86
|
||||||
versionName "2.0.7"
|
versionName "2.0.8"
|
||||||
|
|
||||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||||
|
|
||||||
|
@ -1,40 +0,0 @@
|
|||||||
{
|
|
||||||
"project_info": {
|
|
||||||
"project_number": "791844924473",
|
|
||||||
"firebase_url": "https://anotherwidget-182008.firebaseio.com",
|
|
||||||
"project_id": "anotherwidget-182008",
|
|
||||||
"storage_bucket": "anotherwidget-182008.appspot.com"
|
|
||||||
},
|
|
||||||
"client": [
|
|
||||||
{
|
|
||||||
"client_info": {
|
|
||||||
"mobilesdk_app_id": "1:791844924473:android:0ad4f6e3890f1ad320b1e8",
|
|
||||||
"android_client_info": {
|
|
||||||
"package_name": "com.tommasoberlose.anotherwidget"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"oauth_client": [
|
|
||||||
{
|
|
||||||
"client_id": "791844924473-73dh46rorjq8vm97dgbn6can2dcpqlf0.apps.googleusercontent.com",
|
|
||||||
"client_type": 3
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"api_key": [
|
|
||||||
{
|
|
||||||
"current_key": "AIzaSyAeJRXstqnzebibxmm3FRM98nbwE_kC8tA"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"services": {
|
|
||||||
"appinvite_service": {
|
|
||||||
"other_platform_oauth_client": [
|
|
||||||
{
|
|
||||||
"client_id": "791844924473-73dh46rorjq8vm97dgbn6can2dcpqlf0.apps.googleusercontent.com",
|
|
||||||
"client_type": 3
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"configuration_version": "1"
|
|
||||||
}
|
|
Binary file not shown.
@ -86,44 +86,16 @@
|
|||||||
android:enabled="true"
|
android:enabled="true"
|
||||||
android:exported="true">
|
android:exported="true">
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
<action android:name="android.intent.action.BOOT_COMPLETED" />
|
|
||||||
<action android:name="com.tommasoberlose.anotherwidget.action.ACTION_WEATHER_UPDATE" />
|
<action android:name="com.tommasoberlose.anotherwidget.action.ACTION_WEATHER_UPDATE" />
|
||||||
<category android:name="android.intent.category.DEFAULT" />
|
<category android:name="android.intent.category.DEFAULT" />
|
||||||
<action android:name="android.intent.action.MY_PACKAGE_REPLACED" />
|
<action android:name="android.intent.action.MY_PACKAGE_REPLACED" />
|
||||||
|
<action android:name="android.intent.action.BOOT_COMPLETED" />
|
||||||
<action android:name="android.intent.action.TIME_SET" />
|
<action android:name="android.intent.action.TIME_SET" />
|
||||||
<action android:name="android.intent.action.TIMEZONE_CHANGED" />
|
<action android:name="android.intent.action.TIMEZONE_CHANGED" />
|
||||||
<action android:name="android.intent.action.LOCALE_CHANGED" />
|
<action android:name="android.intent.action.LOCALE_CHANGED" />
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
</receiver>
|
</receiver>
|
||||||
|
|
||||||
<receiver
|
|
||||||
android:name=".receivers.PlayerReceiver"
|
|
||||||
android:enabled="true"
|
|
||||||
android:exported="true"
|
|
||||||
tools:ignore="ExportedReceiver">
|
|
||||||
<intent-filter>
|
|
||||||
<action android:name="com.android.music.metachanged" />
|
|
||||||
<action android:name="com.android.music.playstatechanged" />
|
|
||||||
<action android:name="com.android.music.playbackcomplete" />
|
|
||||||
<action android:name="com.android.music.queuechanged" />
|
|
||||||
|
|
||||||
<action android:name="com.htc.music.metachanged" />
|
|
||||||
<action android:name="fm.last.android.metachanged" />
|
|
||||||
<action android:name="com.sec.android.app.music.metachanged" />
|
|
||||||
<action android:name="com.nullsoft.winamp.metachanged" />
|
|
||||||
<action android:name="com.amazon.mp3.metachanged" />
|
|
||||||
<action android:name="com.miui.player.metachanged" />
|
|
||||||
<action android:name="com.real.IMP.metachanged" />
|
|
||||||
<action android:name="com.sonyericsson.music.metachanged" />
|
|
||||||
<action android:name="com.rdio.android.metachanged" />
|
|
||||||
<action android:name="com.samsung.sec.android.MusicPlayer.metachanged" />
|
|
||||||
<action android:name="com.andrew.apollo.metachanged" />
|
|
||||||
<action android:name="com.spotify.music.playbackstatechanged"/>
|
|
||||||
<action android:name="com.spotify.music.metadatachanged"/>
|
|
||||||
<action android:name="com.spotify.music.queuechanged"/>
|
|
||||||
</intent-filter>
|
|
||||||
</receiver>
|
|
||||||
|
|
||||||
<receiver
|
<receiver
|
||||||
android:name=".receivers.WidgetClickListenerReceiver"
|
android:name=".receivers.WidgetClickListenerReceiver"
|
||||||
android:enabled="true"
|
android:enabled="true"
|
||||||
@ -162,11 +134,13 @@
|
|||||||
</intent-filter>
|
</intent-filter>
|
||||||
</receiver>
|
</receiver>
|
||||||
|
|
||||||
<receiver android:name=".receivers.FenceReceiver"
|
<receiver android:name=".receivers.ActivityDetectionReceiver"
|
||||||
android:exported="false"
|
android:exported="false"
|
||||||
android:permission="com.google.android.gms.permission.ACTIVITY_RECOGNITION">
|
android:permission="com.google.android.gms.permission.ACTIVITY_RECOGNITION">
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
<action android:name="com.mypackage.ACTION_PROCESS_ACTIVITY_TRANSITIONS" />
|
<action android:name="com.mypackage.ACTION_PROCESS_ACTIVITY_TRANSITIONS" />
|
||||||
|
<action android:name="android.intent.action.MY_PACKAGE_REPLACED" />
|
||||||
|
<action android:name="android.intent.action.BOOT_COMPLETED" />
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
</receiver>
|
</receiver>
|
||||||
|
|
||||||
|
@ -16,6 +16,7 @@ import com.google.android.material.bottomsheet.BottomSheetBehavior
|
|||||||
import com.google.android.material.bottomsheet.BottomSheetDialog
|
import com.google.android.material.bottomsheet.BottomSheetDialog
|
||||||
import com.google.android.material.card.MaterialCardView
|
import com.google.android.material.card.MaterialCardView
|
||||||
import com.tommasoberlose.anotherwidget.R
|
import com.tommasoberlose.anotherwidget.R
|
||||||
|
import com.tommasoberlose.anotherwidget.global.Constants
|
||||||
import com.tommasoberlose.anotherwidget.helpers.ColorHelper.isColorDark
|
import com.tommasoberlose.anotherwidget.helpers.ColorHelper.isColorDark
|
||||||
import com.tommasoberlose.anotherwidget.helpers.GlanceProviderHelper
|
import com.tommasoberlose.anotherwidget.helpers.GlanceProviderHelper
|
||||||
import com.tommasoberlose.anotherwidget.models.GlanceProvider
|
import com.tommasoberlose.anotherwidget.models.GlanceProvider
|
||||||
@ -87,6 +88,7 @@ class GlanceProviderSortMenu(
|
|||||||
|
|
||||||
adapter.updateData(
|
adapter.updateData(
|
||||||
GlanceProviderHelper.getGlanceProviders()
|
GlanceProviderHelper.getGlanceProviders()
|
||||||
|
.filter { it != Constants.GlanceProviderId.BATTERY_LEVEL_LOW }
|
||||||
.mapNotNull { GlanceProviderHelper.getGlanceProviderById(context, it) }
|
.mapNotNull { GlanceProviderHelper.getGlanceProviderById(context, it) }
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -1,97 +0,0 @@
|
|||||||
package com.tommasoberlose.anotherwidget.helpers
|
|
||||||
|
|
||||||
import android.Manifest
|
|
||||||
import android.app.PendingIntent
|
|
||||||
import android.content.Context
|
|
||||||
import android.content.Intent
|
|
||||||
import android.os.Build
|
|
||||||
import com.google.android.gms.location.ActivityRecognition
|
|
||||||
import com.google.android.gms.location.ActivityTransition
|
|
||||||
import com.google.android.gms.location.ActivityTransitionRequest
|
|
||||||
import com.google.android.gms.location.DetectedActivity
|
|
||||||
import com.tommasoberlose.anotherwidget.global.Preferences
|
|
||||||
import com.tommasoberlose.anotherwidget.receivers.FenceReceiver
|
|
||||||
import com.tommasoberlose.anotherwidget.utils.checkGrantedPermission
|
|
||||||
|
|
||||||
|
|
||||||
object DailyStepsHelper {
|
|
||||||
fun registerFence(context: Context) {
|
|
||||||
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q || context.checkGrantedPermission(Manifest.permission.ACTIVITY_RECOGNITION)) {
|
|
||||||
val transitions = mutableListOf<ActivityTransition>()
|
|
||||||
|
|
||||||
transitions +=
|
|
||||||
ActivityTransition.Builder()
|
|
||||||
.setActivityType(DetectedActivity.WALKING)
|
|
||||||
.setActivityTransition(ActivityTransition.ACTIVITY_TRANSITION_ENTER)
|
|
||||||
.build()
|
|
||||||
|
|
||||||
transitions +=
|
|
||||||
ActivityTransition.Builder()
|
|
||||||
.setActivityType(DetectedActivity.WALKING)
|
|
||||||
.setActivityTransition(ActivityTransition.ACTIVITY_TRANSITION_EXIT)
|
|
||||||
.build()
|
|
||||||
|
|
||||||
transitions +=
|
|
||||||
ActivityTransition.Builder()
|
|
||||||
.setActivityType(DetectedActivity.RUNNING)
|
|
||||||
.setActivityTransition(ActivityTransition.ACTIVITY_TRANSITION_ENTER)
|
|
||||||
.build()
|
|
||||||
|
|
||||||
transitions +=
|
|
||||||
ActivityTransition.Builder()
|
|
||||||
.setActivityType(DetectedActivity.RUNNING)
|
|
||||||
.setActivityTransition(ActivityTransition.ACTIVITY_TRANSITION_EXIT)
|
|
||||||
.build()
|
|
||||||
|
|
||||||
transitions +=
|
|
||||||
ActivityTransition.Builder()
|
|
||||||
.setActivityType(DetectedActivity.STILL)
|
|
||||||
.setActivityTransition(ActivityTransition.ACTIVITY_TRANSITION_ENTER)
|
|
||||||
.build()
|
|
||||||
|
|
||||||
val request = ActivityTransitionRequest(transitions)
|
|
||||||
|
|
||||||
// myPendingIntent is the instance of PendingIntent where the app receives callbacks.
|
|
||||||
val task = ActivityRecognition.getClient(context)
|
|
||||||
.requestActivityTransitionUpdates(
|
|
||||||
request,
|
|
||||||
PendingIntent.getBroadcast(
|
|
||||||
context,
|
|
||||||
2,
|
|
||||||
Intent(context, FenceReceiver::class.java),
|
|
||||||
0
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
task.addOnFailureListener { e: Exception ->
|
|
||||||
e.printStackTrace()
|
|
||||||
Preferences.showDailySteps = false
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fun unregisterFence(context: Context) {
|
|
||||||
val task = ActivityRecognition.getClient(context)
|
|
||||||
.removeActivityTransitionUpdates(
|
|
||||||
PendingIntent.getBroadcast(
|
|
||||||
context,
|
|
||||||
2,
|
|
||||||
Intent(context, FenceReceiver::class.java),
|
|
||||||
0
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
task.addOnCompleteListener {
|
|
||||||
if (it.isSuccessful) {
|
|
||||||
PendingIntent.getBroadcast(
|
|
||||||
context,
|
|
||||||
2,
|
|
||||||
Intent(context, FenceReceiver::class.java),
|
|
||||||
0
|
|
||||||
).cancel()
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -0,0 +1,171 @@
|
|||||||
|
package com.tommasoberlose.anotherwidget.receivers
|
||||||
|
|
||||||
|
import android.Manifest
|
||||||
|
import android.app.AlarmManager
|
||||||
|
import android.app.PendingIntent
|
||||||
|
import android.content.BroadcastReceiver
|
||||||
|
import android.content.Context
|
||||||
|
import android.content.Intent
|
||||||
|
import android.os.Build
|
||||||
|
import android.util.Log
|
||||||
|
import com.google.android.gms.auth.api.signin.GoogleSignIn
|
||||||
|
import com.google.android.gms.auth.api.signin.GoogleSignInAccount
|
||||||
|
import com.google.android.gms.fitness.Fitness
|
||||||
|
import com.google.android.gms.fitness.FitnessOptions
|
||||||
|
import com.google.android.gms.fitness.data.DataType
|
||||||
|
import com.google.android.gms.fitness.data.Field.FIELD_STEPS
|
||||||
|
import com.google.android.gms.fitness.request.DataReadRequest
|
||||||
|
import com.google.android.gms.location.*
|
||||||
|
import com.tommasoberlose.anotherwidget.global.Preferences
|
||||||
|
import com.tommasoberlose.anotherwidget.ui.widgets.MainWidget
|
||||||
|
import com.tommasoberlose.anotherwidget.utils.checkGrantedPermission
|
||||||
|
import java.util.*
|
||||||
|
import java.util.concurrent.TimeUnit
|
||||||
|
|
||||||
|
|
||||||
|
class ActivityDetectionReceiver : BroadcastReceiver() {
|
||||||
|
|
||||||
|
override fun onReceive(context: Context, intent: Intent) {
|
||||||
|
if (ActivityTransitionResult.hasResult(intent)) {
|
||||||
|
val result = ActivityTransitionResult.extractResult(intent)!!
|
||||||
|
val lastEvent = result.transitionEvents.last()
|
||||||
|
|
||||||
|
if (lastEvent.activityType == DetectedActivity.WALKING || lastEvent.activityType == DetectedActivity.RUNNING && lastEvent.transitionType == ActivityTransition.ACTIVITY_TRANSITION_EXIT) {
|
||||||
|
requestDailySteps(context)
|
||||||
|
setTimeout(context)
|
||||||
|
} else {
|
||||||
|
resetDailySteps()
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (intent.action == Intent.ACTION_BOOT_COMPLETED || intent.action == Intent.ACTION_MY_PACKAGE_REPLACED && Preferences.showDailySteps && Build.VERSION.SDK_INT < Build.VERSION_CODES.Q || context.checkGrantedPermission(Manifest.permission.ACTIVITY_RECOGNITION)) {
|
||||||
|
registerFence(context)
|
||||||
|
} else {
|
||||||
|
resetDailySteps()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun resetDailySteps() {
|
||||||
|
Preferences.googleFitSteps = -1
|
||||||
|
}
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
val FITNESS_OPTIONS: FitnessOptions = FitnessOptions.builder()
|
||||||
|
.addDataType(DataType.TYPE_STEP_COUNT_DELTA, FitnessOptions.ACCESS_READ)
|
||||||
|
.addDataType(DataType.AGGREGATE_STEP_COUNT_DELTA, FitnessOptions.ACCESS_READ)
|
||||||
|
.build()
|
||||||
|
|
||||||
|
fun registerFence(context: Context) {
|
||||||
|
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q || context.checkGrantedPermission(
|
||||||
|
Manifest.permission.ACTIVITY_RECOGNITION)) {
|
||||||
|
val transitions = mutableListOf<ActivityTransition>()
|
||||||
|
|
||||||
|
transitions +=
|
||||||
|
ActivityTransition.Builder()
|
||||||
|
.setActivityType(DetectedActivity.WALKING)
|
||||||
|
.setActivityTransition(ActivityTransition.ACTIVITY_TRANSITION_EXIT)
|
||||||
|
.build()
|
||||||
|
|
||||||
|
transitions +=
|
||||||
|
ActivityTransition.Builder()
|
||||||
|
.setActivityType(DetectedActivity.RUNNING)
|
||||||
|
.setActivityTransition(ActivityTransition.ACTIVITY_TRANSITION_EXIT)
|
||||||
|
.build()
|
||||||
|
|
||||||
|
val request = ActivityTransitionRequest(transitions)
|
||||||
|
|
||||||
|
// myPendingIntent is the instance of PendingIntent where the app receives callbacks.
|
||||||
|
val task = ActivityRecognition.getClient(context)
|
||||||
|
.requestActivityTransitionUpdates(
|
||||||
|
request,
|
||||||
|
PendingIntent.getBroadcast(
|
||||||
|
context,
|
||||||
|
2,
|
||||||
|
Intent(context, ActivityDetectionReceiver::class.java),
|
||||||
|
0
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
task.addOnFailureListener { e: Exception ->
|
||||||
|
e.printStackTrace()
|
||||||
|
Preferences.showDailySteps = false
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun unregisterFence(context: Context) {
|
||||||
|
val task = ActivityRecognition.getClient(context)
|
||||||
|
.removeActivityTransitionUpdates(
|
||||||
|
PendingIntent.getBroadcast(
|
||||||
|
context,
|
||||||
|
2,
|
||||||
|
Intent(context, ActivityDetectionReceiver::class.java),
|
||||||
|
0
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
task.addOnCompleteListener {
|
||||||
|
if (it.isSuccessful) {
|
||||||
|
PendingIntent.getBroadcast(
|
||||||
|
context,
|
||||||
|
2,
|
||||||
|
Intent(context, ActivityDetectionReceiver::class.java),
|
||||||
|
0
|
||||||
|
).cancel()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun requestDailySteps(context: Context) {
|
||||||
|
|
||||||
|
val account: GoogleSignInAccount? = GoogleSignIn.getLastSignedInAccount(context)
|
||||||
|
if (account != null && GoogleSignIn.hasPermissions(account, FITNESS_OPTIONS)) {
|
||||||
|
|
||||||
|
val cal: Calendar = Calendar.getInstance()
|
||||||
|
cal.set(Calendar.HOUR_OF_DAY, 0)
|
||||||
|
cal.set(Calendar.MINUTE, 0)
|
||||||
|
cal.set(Calendar.SECOND, 0)
|
||||||
|
cal.set(Calendar.MILLISECOND, 0)
|
||||||
|
val startTime: Long = cal.timeInMillis
|
||||||
|
|
||||||
|
cal.add(Calendar.DAY_OF_YEAR, 1)
|
||||||
|
val endTime: Long = cal.timeInMillis
|
||||||
|
|
||||||
|
val readRequest = DataReadRequest.Builder()
|
||||||
|
.aggregate(
|
||||||
|
DataType.TYPE_STEP_COUNT_DELTA,
|
||||||
|
DataType.AGGREGATE_STEP_COUNT_DELTA
|
||||||
|
)
|
||||||
|
.setTimeRange(startTime, endTime, TimeUnit.MILLISECONDS)
|
||||||
|
.bucketByTime(1, TimeUnit.DAYS)
|
||||||
|
.build()
|
||||||
|
|
||||||
|
Fitness.getHistoryClient(context, account)
|
||||||
|
.readData(readRequest)
|
||||||
|
.addOnSuccessListener { response ->
|
||||||
|
Preferences.googleFitSteps = response.buckets.sumBy {
|
||||||
|
it.getDataSet(DataType.AGGREGATE_STEP_COUNT_DELTA)?.dataPoints?.get(0)?.getValue(FIELD_STEPS)?.asInt() ?: 0
|
||||||
|
}.toLong()
|
||||||
|
MainWidget.updateWidget(context)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun setTimeout(context: Context) {
|
||||||
|
with(context.getSystemService(Context.ALARM_SERVICE) as AlarmManager) {
|
||||||
|
cancel(PendingIntent.getBroadcast(context, 0, Intent(context, ActivityDetectionReceiver::class.java), 0))
|
||||||
|
setExactAndAllowWhileIdle(
|
||||||
|
AlarmManager.RTC,
|
||||||
|
Calendar.getInstance().timeInMillis + 15 * 60 * 1000,
|
||||||
|
PendingIntent.getBroadcast(
|
||||||
|
context,
|
||||||
|
0,
|
||||||
|
Intent(context, ActivityDetectionReceiver::class.java),
|
||||||
|
0
|
||||||
|
)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,83 +0,0 @@
|
|||||||
package com.tommasoberlose.anotherwidget.receivers
|
|
||||||
|
|
||||||
import android.content.BroadcastReceiver
|
|
||||||
import android.content.Context
|
|
||||||
import android.content.Intent
|
|
||||||
import android.util.Log
|
|
||||||
import com.google.android.gms.auth.api.signin.GoogleSignIn
|
|
||||||
import com.google.android.gms.auth.api.signin.GoogleSignInAccount
|
|
||||||
import com.google.android.gms.fitness.Fitness
|
|
||||||
import com.google.android.gms.fitness.FitnessOptions
|
|
||||||
import com.google.android.gms.fitness.data.DataSource
|
|
||||||
import com.google.android.gms.fitness.data.DataType
|
|
||||||
import com.google.android.gms.fitness.data.Field.FIELD_STEPS
|
|
||||||
import com.google.android.gms.fitness.request.DataReadRequest
|
|
||||||
import com.google.android.gms.location.ActivityTransitionResult
|
|
||||||
import com.google.android.gms.location.DetectedActivity
|
|
||||||
import com.tommasoberlose.anotherwidget.global.Preferences
|
|
||||||
import com.tommasoberlose.anotherwidget.ui.widgets.MainWidget
|
|
||||||
import java.util.*
|
|
||||||
import java.util.concurrent.TimeUnit
|
|
||||||
|
|
||||||
|
|
||||||
class FenceReceiver : BroadcastReceiver() {
|
|
||||||
|
|
||||||
override fun onReceive(context: Context, intent: Intent) {
|
|
||||||
if (ActivityTransitionResult.hasResult(intent)) {
|
|
||||||
val result = ActivityTransitionResult.extractResult(intent)!!
|
|
||||||
val lastEvent = result.transitionEvents.last()
|
|
||||||
|
|
||||||
if (lastEvent.activityType == DetectedActivity.WALKING || lastEvent.activityType == DetectedActivity.RUNNING) {
|
|
||||||
requestDailySteps(context)
|
|
||||||
} else {
|
|
||||||
resetDailySteps()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun requestDailySteps(context: Context) {
|
|
||||||
val fitnessOptions = FitnessOptions.builder()
|
|
||||||
.addDataType(DataType.TYPE_STEP_COUNT_DELTA, FitnessOptions.ACCESS_READ)
|
|
||||||
.addDataType(DataType.AGGREGATE_STEP_COUNT_DELTA, FitnessOptions.ACCESS_READ)
|
|
||||||
.build()
|
|
||||||
|
|
||||||
val account: GoogleSignInAccount? = GoogleSignIn.getLastSignedInAccount(context)
|
|
||||||
|
|
||||||
Log.d("ciao", "hasPermission: ${GoogleSignIn.hasPermissions(account, fitnessOptions)}")
|
|
||||||
|
|
||||||
if (GoogleSignIn.hasPermissions(account, fitnessOptions)) {
|
|
||||||
val cal: Calendar = Calendar.getInstance()
|
|
||||||
cal.time = Date()
|
|
||||||
val endTime: Long = cal.timeInMillis
|
|
||||||
cal.add(Calendar.YEAR, -1)
|
|
||||||
val startTime: Long = cal.timeInMillis
|
|
||||||
val readRequest = DataReadRequest.Builder()
|
|
||||||
.aggregate(
|
|
||||||
DataType.TYPE_STEP_COUNT_DELTA,
|
|
||||||
DataType.AGGREGATE_STEP_COUNT_DELTA
|
|
||||||
)
|
|
||||||
.setTimeRange(startTime, endTime, TimeUnit.MILLISECONDS)
|
|
||||||
.bucketByTime(1, TimeUnit.DAYS)
|
|
||||||
.build()
|
|
||||||
|
|
||||||
if (account != null) {
|
|
||||||
Fitness.getHistoryClient(context, account)
|
|
||||||
.readData(readRequest)
|
|
||||||
.addOnSuccessListener { response ->
|
|
||||||
Preferences.googleFitSteps =
|
|
||||||
response.dataSets[0].dataPoints[0].getValue(FIELD_STEPS).asFloat()
|
|
||||||
.toLong()
|
|
||||||
Log.d("ciao",
|
|
||||||
"response: ${response.dataSets[0].dataPoints[0].getValue(FIELD_STEPS)
|
|
||||||
.asFloat().toLong()}"
|
|
||||||
)
|
|
||||||
MainWidget.updateWidget(context)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun resetDailySteps() {
|
|
||||||
Preferences.googleFitSteps = -1
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,22 +0,0 @@
|
|||||||
package com.tommasoberlose.anotherwidget.receivers
|
|
||||||
|
|
||||||
import android.content.BroadcastReceiver
|
|
||||||
import android.content.Context
|
|
||||||
import android.content.Intent
|
|
||||||
import android.util.Log
|
|
||||||
|
|
||||||
|
|
||||||
class PlayerReceiver : BroadcastReceiver() {
|
|
||||||
|
|
||||||
override fun onReceive(context: Context, intent: Intent) {
|
|
||||||
Log.d("ciao", "player ok")
|
|
||||||
|
|
||||||
// val cmd = intent.getStringExtra("command")
|
|
||||||
// Log.v("tag ", "$action / $cmd")
|
|
||||||
// val artist = intent.getStringExtra("artist")
|
|
||||||
// val album = intent.getStringExtra("album")
|
|
||||||
// val track = intent.getStringExtra("track")
|
|
||||||
// Log.v("tag", "$artist:$album:$track")
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
@ -176,7 +176,7 @@ class GeneralTabFragment : Fragment() {
|
|||||||
private fun setupListener() {
|
private fun setupListener() {
|
||||||
action_main_text_size.setOnClickListener {
|
action_main_text_size.setOnClickListener {
|
||||||
val dialog = BottomSheetMenu<Float>(requireContext(), header = getString(R.string.title_main_text_size)).setSelectedValue(Preferences.textMainSize)
|
val dialog = BottomSheetMenu<Float>(requireContext(), header = getString(R.string.title_main_text_size)).setSelectedValue(Preferences.textMainSize)
|
||||||
(32 downTo 10).filter { it % 2 == 0 }.forEach {
|
(40 downTo 10).filter { it % 2 == 0 }.forEach {
|
||||||
dialog.addItem("${it}sp", it.toFloat())
|
dialog.addItem("${it}sp", it.toFloat())
|
||||||
}
|
}
|
||||||
dialog.addOnSelectItemListener { value ->
|
dialog.addOnSelectItemListener { value ->
|
||||||
@ -186,7 +186,7 @@ class GeneralTabFragment : Fragment() {
|
|||||||
|
|
||||||
action_second_text_size.setOnClickListener {
|
action_second_text_size.setOnClickListener {
|
||||||
val dialog = BottomSheetMenu<Float>(requireContext(), header = getString(R.string.title_second_text_size)).setSelectedValue(Preferences.textSecondSize)
|
val dialog = BottomSheetMenu<Float>(requireContext(), header = getString(R.string.title_second_text_size)).setSelectedValue(Preferences.textSecondSize)
|
||||||
(28 downTo 10).filter { it % 2 == 0 }.forEach {
|
(40 downTo 10).filter { it % 2 == 0 }.forEach {
|
||||||
dialog.addItem("${it}sp", it.toFloat())
|
dialog.addItem("${it}sp", it.toFloat())
|
||||||
}
|
}
|
||||||
dialog.addOnSelectItemListener { value ->
|
dialog.addOnSelectItemListener { value ->
|
||||||
|
@ -10,6 +10,7 @@ import android.content.IntentFilter
|
|||||||
import android.content.pm.PackageManager
|
import android.content.pm.PackageManager
|
||||||
import android.os.Build
|
import android.os.Build
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
|
import android.util.Log
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
@ -22,8 +23,8 @@ import androidx.lifecycle.ViewModelProvider
|
|||||||
import androidx.lifecycle.lifecycleScope
|
import androidx.lifecycle.lifecycleScope
|
||||||
import com.google.android.gms.auth.api.signin.GoogleSignIn
|
import com.google.android.gms.auth.api.signin.GoogleSignIn
|
||||||
import com.google.android.gms.auth.api.signin.GoogleSignInAccount
|
import com.google.android.gms.auth.api.signin.GoogleSignInAccount
|
||||||
import com.google.android.gms.fitness.FitnessOptions
|
import com.google.android.gms.auth.api.signin.GoogleSignInOptions
|
||||||
import com.google.android.gms.fitness.data.DataType
|
import com.google.android.gms.common.api.ApiException
|
||||||
import com.karumi.dexter.Dexter
|
import com.karumi.dexter.Dexter
|
||||||
import com.karumi.dexter.MultiplePermissionsReport
|
import com.karumi.dexter.MultiplePermissionsReport
|
||||||
import com.karumi.dexter.PermissionToken
|
import com.karumi.dexter.PermissionToken
|
||||||
@ -36,8 +37,9 @@ import com.tommasoberlose.anotherwidget.components.GlanceProviderSortMenu
|
|||||||
import com.tommasoberlose.anotherwidget.databinding.FragmentGlanceSettingsBinding
|
import com.tommasoberlose.anotherwidget.databinding.FragmentGlanceSettingsBinding
|
||||||
import com.tommasoberlose.anotherwidget.global.Preferences
|
import com.tommasoberlose.anotherwidget.global.Preferences
|
||||||
import com.tommasoberlose.anotherwidget.helpers.AlarmHelper
|
import com.tommasoberlose.anotherwidget.helpers.AlarmHelper
|
||||||
import com.tommasoberlose.anotherwidget.helpers.DailyStepsHelper
|
|
||||||
import com.tommasoberlose.anotherwidget.helpers.MediaPlayerHelper
|
import com.tommasoberlose.anotherwidget.helpers.MediaPlayerHelper
|
||||||
|
import com.tommasoberlose.anotherwidget.receivers.ActivityDetectionReceiver
|
||||||
|
import com.tommasoberlose.anotherwidget.receivers.ActivityDetectionReceiver.Companion.FITNESS_OPTIONS
|
||||||
import com.tommasoberlose.anotherwidget.ui.activities.MainActivity
|
import com.tommasoberlose.anotherwidget.ui.activities.MainActivity
|
||||||
import com.tommasoberlose.anotherwidget.ui.viewmodels.MainViewModel
|
import com.tommasoberlose.anotherwidget.ui.viewmodels.MainViewModel
|
||||||
import com.tommasoberlose.anotherwidget.utils.checkGrantedPermission
|
import com.tommasoberlose.anotherwidget.utils.checkGrantedPermission
|
||||||
@ -110,12 +112,12 @@ class GlanceTabFragment : Fragment() {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
// viewModel.showDailySteps.observe(viewLifecycleOwner, Observer {
|
viewModel.showDailySteps.observe(viewLifecycleOwner, Observer {
|
||||||
// maintainScrollPosition {
|
maintainScrollPosition {
|
||||||
// show_steps_label?.text = if (it) getString(R.string.settings_visible) else getString(R.string.settings_not_visible)
|
show_steps_label?.text = if (it) getString(R.string.settings_visible) else getString(R.string.settings_not_visible)
|
||||||
// }
|
}
|
||||||
// checkFitnessPermission()
|
checkFitnessPermission()
|
||||||
// })
|
})
|
||||||
|
|
||||||
viewModel.customInfo.observe(viewLifecycleOwner, Observer {
|
viewModel.customInfo.observe(viewLifecycleOwner, Observer {
|
||||||
maintainScrollPosition {
|
maintainScrollPosition {
|
||||||
@ -191,7 +193,17 @@ class GlanceTabFragment : Fragment() {
|
|||||||
.addItem(getString(R.string.settings_visible), true)
|
.addItem(getString(R.string.settings_visible), true)
|
||||||
.addItem(getString(R.string.settings_not_visible), false)
|
.addItem(getString(R.string.settings_not_visible), false)
|
||||||
.addOnSelectItemListener { value ->
|
.addOnSelectItemListener { value ->
|
||||||
Preferences.showDailySteps = value
|
if (value) {
|
||||||
|
val account: GoogleSignInAccount? = GoogleSignIn.getLastSignedInAccount(requireContext())
|
||||||
|
if (!GoogleSignIn.hasPermissions(account, FITNESS_OPTIONS)) {
|
||||||
|
val mGoogleSignInClient = GoogleSignIn.getClient(requireActivity(), GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN).addExtension(FITNESS_OPTIONS).build())
|
||||||
|
startActivityForResult(mGoogleSignInClient.signInIntent, 2)
|
||||||
|
} else {
|
||||||
|
Preferences.showDailySteps = true
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
Preferences.showDailySteps = false
|
||||||
|
}
|
||||||
}.show()
|
}.show()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -255,83 +267,87 @@ class GlanceTabFragment : Fragment() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// private fun checkFitnessPermission() {
|
private fun checkFitnessPermission() {
|
||||||
// if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q || activity?.checkGrantedPermission(Manifest.permission.ACTIVITY_RECOGNITION) == true) {
|
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q || activity?.checkGrantedPermission(Manifest.permission.ACTIVITY_RECOGNITION) == true) {
|
||||||
// fitness_permission_alert?.isVisible = false
|
fitness_permission_alert?.isVisible = false
|
||||||
// if (Preferences.showDailySteps) {
|
if (Preferences.showDailySteps) {
|
||||||
// val fitnessOptions = FitnessOptions.builder()
|
ActivityDetectionReceiver.registerFence(requireContext())
|
||||||
// .addDataType(DataType.TYPE_STEP_COUNT_DELTA, FitnessOptions.ACCESS_READ)
|
} else {
|
||||||
// .addDataType(DataType.AGGREGATE_STEP_COUNT_DELTA, FitnessOptions.ACCESS_READ)
|
ActivityDetectionReceiver.unregisterFence(requireContext())
|
||||||
// .build()
|
}
|
||||||
//
|
show_steps_label?.text = if (Preferences.showDailySteps) getString(R.string.settings_visible) else getString(R.string.settings_not_visible)
|
||||||
// val account: GoogleSignInAccount = GoogleSignIn.getLastSignedInAccount(requireContext()) ?: GoogleSignIn.getAccountForExtension(requireContext(), fitnessOptions)
|
} else if (Preferences.showDailySteps) {
|
||||||
//
|
ActivityDetectionReceiver.unregisterFence(requireContext())
|
||||||
// if (!GoogleSignIn.hasPermissions(account, fitnessOptions)) {
|
fitness_permission_alert?.isVisible = true
|
||||||
// GoogleSignIn.requestPermissions(
|
show_steps_label?.text = getString(R.string.settings_request_fitness_access)
|
||||||
// requireActivity(),
|
fitness_permission_alert?.setOnClickListener {
|
||||||
// 1,
|
requireFitnessPermission()
|
||||||
// account,
|
}
|
||||||
// fitnessOptions)
|
} else {
|
||||||
// } else {
|
ActivityDetectionReceiver.unregisterFence(requireContext())
|
||||||
// DailyStepsHelper.registerFence(requireContext())
|
show_steps_label?.text = getString(R.string.settings_not_visible)
|
||||||
// }
|
fitness_permission_alert?.isVisible = false
|
||||||
// } else {
|
}
|
||||||
// DailyStepsHelper.unregisterFence(requireContext())
|
}
|
||||||
// }
|
|
||||||
// show_steps_label?.text = if (Preferences.showDailySteps) getString(R.string.settings_visible) else getString(R.string.settings_not_visible)
|
|
||||||
// } else if (Preferences.showDailySteps) {
|
|
||||||
// DailyStepsHelper.unregisterFence(requireContext())
|
|
||||||
// fitness_permission_alert?.isVisible = true
|
|
||||||
// show_steps_label?.text = getString(R.string.settings_request_fitness_access)
|
|
||||||
// fitness_permission_alert?.setOnClickListener {
|
|
||||||
// requireFitnessPermission()
|
|
||||||
// }
|
|
||||||
// } else {
|
|
||||||
// DailyStepsHelper.unregisterFence(requireContext())
|
|
||||||
// show_steps_label?.text = getString(R.string.settings_not_visible)
|
|
||||||
// fitness_permission_alert?.isVisible = false
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// override fun onActivityResult(
|
|
||||||
// requestCode: Int,
|
|
||||||
// resultCode: Int,
|
|
||||||
// data: Intent?
|
|
||||||
// ) {
|
|
||||||
// if (resultCode == Activity.RESULT_OK) {
|
|
||||||
// if (requestCode == 1) {
|
|
||||||
// DailyStepsHelper.registerFence(requireContext())
|
|
||||||
// } else {
|
|
||||||
// Preferences.showDailySteps = false
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
// private fun requireFitnessPermission() {
|
override fun onActivityResult(
|
||||||
// Dexter.withContext(requireContext())
|
requestCode: Int,
|
||||||
// .withPermissions(
|
resultCode: Int,
|
||||||
// "com.google.android.gms.permission.ACTIVITY_RECOGNITION",
|
data: Intent?
|
||||||
// "android.gms.permission.ACTIVITY_RECOGNITION",
|
) {
|
||||||
// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) Manifest.permission.ACTIVITY_RECOGNITION else "com.google.android.gms.permission.ACTIVITY_RECOGNITION"
|
when (requestCode) {
|
||||||
// ).withListener(object: MultiplePermissionsListener {
|
1 -> {
|
||||||
// override fun onPermissionsChecked(report: MultiplePermissionsReport?) {
|
if (resultCode == Activity.RESULT_OK) {
|
||||||
// report?.let {
|
checkFitnessPermission()
|
||||||
// if (report.areAllPermissionsGranted()){
|
} else {
|
||||||
// checkFitnessPermission()
|
Preferences.showDailySteps = false
|
||||||
// }
|
}
|
||||||
// }
|
}
|
||||||
// }
|
2-> {
|
||||||
// override fun onPermissionRationaleShouldBeShown(
|
try {
|
||||||
// permissions: MutableList<PermissionRequest>?,
|
val account: GoogleSignInAccount? = GoogleSignIn.getSignedInAccountFromIntent(data).getResult(ApiException::class.java)
|
||||||
// token: PermissionToken?
|
if (!GoogleSignIn.hasPermissions(account, FITNESS_OPTIONS)) {
|
||||||
// ) {
|
GoogleSignIn.requestPermissions(
|
||||||
// // Remember to invoke this method when the custom rationale is closed
|
requireActivity(),
|
||||||
// // or just by default if you don't want to use any custom rationale.
|
1,
|
||||||
// token?.continuePermissionRequest()
|
account,
|
||||||
// }
|
FITNESS_OPTIONS)
|
||||||
// })
|
} else {
|
||||||
// .check()
|
checkFitnessPermission()
|
||||||
// }
|
}
|
||||||
|
} catch (e: ApiException) {
|
||||||
|
e.printStackTrace()
|
||||||
|
Preferences.showDailySteps = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun requireFitnessPermission() {
|
||||||
|
Dexter.withContext(requireContext())
|
||||||
|
.withPermissions(
|
||||||
|
"com.google.android.gms.permission.ACTIVITY_RECOGNITION",
|
||||||
|
"android.gms.permission.ACTIVITY_RECOGNITION",
|
||||||
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) Manifest.permission.ACTIVITY_RECOGNITION else "com.google.android.gms.permission.ACTIVITY_RECOGNITION"
|
||||||
|
).withListener(object: MultiplePermissionsListener {
|
||||||
|
override fun onPermissionsChecked(report: MultiplePermissionsReport?) {
|
||||||
|
report?.let {
|
||||||
|
if (report.areAllPermissionsGranted()){
|
||||||
|
checkFitnessPermission()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
override fun onPermissionRationaleShouldBeShown(
|
||||||
|
permissions: MutableList<PermissionRequest>?,
|
||||||
|
token: PermissionToken?
|
||||||
|
) {
|
||||||
|
// Remember to invoke this method when the custom rationale is closed
|
||||||
|
// or just by default if you don't want to use any custom rationale.
|
||||||
|
token?.continuePermissionRequest()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.check()
|
||||||
|
}
|
||||||
|
|
||||||
private fun maintainScrollPosition(callback: () -> Unit) {
|
private fun maintainScrollPosition(callback: () -> Unit) {
|
||||||
val scrollPosition = scrollView.scrollY
|
val scrollPosition = scrollView.scrollY
|
||||||
|
@ -194,7 +194,6 @@
|
|||||||
android:paddingRight="8dp"
|
android:paddingRight="8dp"
|
||||||
android:clickable="true"
|
android:clickable="true"
|
||||||
android:focusable="true"
|
android:focusable="true"
|
||||||
android:visibility="gone"
|
|
||||||
android:background="?android:attr/selectableItemBackground"
|
android:background="?android:attr/selectableItemBackground"
|
||||||
android:gravity="center_vertical"
|
android:gravity="center_vertical"
|
||||||
android:id="@+id/action_show_steps"
|
android:id="@+id/action_show_steps"
|
||||||
|
1
tasksintegration/.gitignore
vendored
1
tasksintegration/.gitignore
vendored
@ -1 +0,0 @@
|
|||||||
/build
|
|
@ -1,27 +0,0 @@
|
|||||||
apply plugin: 'com.android.dynamic-feature'
|
|
||||||
|
|
||||||
android {
|
|
||||||
compileSdkVersion 29
|
|
||||||
|
|
||||||
|
|
||||||
defaultConfig {
|
|
||||||
minSdkVersion 23
|
|
||||||
targetSdkVersion 29
|
|
||||||
versionCode 1
|
|
||||||
versionName "1.0"
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
compileOptions {
|
|
||||||
sourceCompatibility JavaVersion.VERSION_1_8
|
|
||||||
targetCompatibility JavaVersion.VERSION_1_8
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
dependencies {
|
|
||||||
implementation fileTree(dir: 'libs', include: ['*.jar'])
|
|
||||||
implementation project(':app')
|
|
||||||
}
|
|
@ -1,13 +0,0 @@
|
|||||||
/**
|
|
||||||
* Automatically generated file. DO NOT MODIFY
|
|
||||||
*/
|
|
||||||
package com.tommasoberlose.tasksintegration;
|
|
||||||
|
|
||||||
public final class BuildConfig {
|
|
||||||
public static final boolean DEBUG = Boolean.parseBoolean("true");
|
|
||||||
public static final String APPLICATION_ID = "com.tommasoberlose.tasksintegration";
|
|
||||||
public static final String BUILD_TYPE = "debug";
|
|
||||||
public static final String FLAVOR = "";
|
|
||||||
public static final int VERSION_CODE = 1;
|
|
||||||
public static final String VERSION_NAME = "1.0";
|
|
||||||
}
|
|
@ -1 +0,0 @@
|
|||||||
{}
|
|
@ -1 +0,0 @@
|
|||||||
[{"type":"MAIN","splits":[],"versionCode":1,"versionName":"1.0","enabled":true,"outputFile":"tasksintegration-debug.apk","fullName":"debug","baseName":"debug","dirName":""}]
|
|
@ -1,23 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
xmlns:dist="http://schemas.android.com/apk/distribution"
|
|
||||||
featureSplit="tasksintegration"
|
|
||||||
package="com.tommasoberlose.anotherwidget"
|
|
||||||
android:versionCode="83"
|
|
||||||
android:versionName="2.0.6" >
|
|
||||||
|
|
||||||
<uses-sdk
|
|
||||||
android:minSdkVersion="23"
|
|
||||||
android:targetSdkVersion="29" />
|
|
||||||
|
|
||||||
<dist:module
|
|
||||||
dist:instant="false"
|
|
||||||
dist:title="@string/title_tasksintegration" >
|
|
||||||
<dist:delivery>
|
|
||||||
<dist:on-demand />
|
|
||||||
</dist:delivery>
|
|
||||||
|
|
||||||
<dist:fusing dist:include="true" />
|
|
||||||
</dist:module>
|
|
||||||
|
|
||||||
</manifest>
|
|
@ -1 +0,0 @@
|
|||||||
[{"outputType":{"type":"BUNDLE_MANIFEST"},"apkData":{"type":"MAIN","splits":[],"versionCode":1,"versionName":"1.0","enabled":true,"outputFile":"tasksintegration-debug.apk","fullName":"debug","baseName":"debug","dirName":""},"path":"AndroidManifest.xml","properties":{"packageId":"com.tommasoberlose.anotherwidget","split":"","minSdkVersion":"23"}}]
|
|
@ -1 +0,0 @@
|
|||||||
[]
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -1,2 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<merger version="3"><dataSet config="main" ignore_pattern="!.svn:!.git:!.ds_store:!*.scc:.*:<dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~"><source path="/Users/tommaso/Documents/MyCode/another-widget/tasksintegration/src/main/assets"/><source path="/Users/tommaso/Documents/MyCode/another-widget/tasksintegration/build/intermediates/shader_assets/debug/out"/></dataSet><dataSet config="debug" ignore_pattern="!.svn:!.git:!.ds_store:!*.scc:.*:<dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~"><source path="/Users/tommaso/Documents/MyCode/another-widget/tasksintegration/src/debug/assets"/></dataSet></merger>
|
|
@ -1,2 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<merger version="3"><dataSet config="main" ignore_pattern="!.svn:!.git:!.ds_store:!*.scc:.*:<dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~"><source path="/Users/tommaso/Documents/MyCode/another-widget/tasksintegration/src/main/jniLibs"/></dataSet><dataSet config="debug" ignore_pattern="!.svn:!.git:!.ds_store:!*.scc:.*:<dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~"><source path="/Users/tommaso/Documents/MyCode/another-widget/tasksintegration/src/debug/jniLibs"/></dataSet></merger>
|
|
@ -1 +0,0 @@
|
|||||||
#Sat May 09 15:57:24 CEST 2020
|
|
@ -1,2 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<merger version="3"><dataSet aapt-namespace="http://schemas.android.com/apk/res-auto" config="main$Generated" generated="true" ignore_pattern="!.svn:!.git:!.ds_store:!*.scc:.*:<dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~"><source path="/Users/tommaso/Documents/MyCode/another-widget/tasksintegration/src/main/res"/><source path="/Users/tommaso/Documents/MyCode/another-widget/tasksintegration/build/generated/res/rs/debug"/><source path="/Users/tommaso/Documents/MyCode/another-widget/tasksintegration/build/generated/res/resValues/debug"/></dataSet><dataSet aapt-namespace="http://schemas.android.com/apk/res-auto" config="main" generated-set="main$Generated" ignore_pattern="!.svn:!.git:!.ds_store:!*.scc:.*:<dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~"><source path="/Users/tommaso/Documents/MyCode/another-widget/tasksintegration/src/main/res"/><source path="/Users/tommaso/Documents/MyCode/another-widget/tasksintegration/build/generated/res/rs/debug"/><source path="/Users/tommaso/Documents/MyCode/another-widget/tasksintegration/build/generated/res/resValues/debug"/></dataSet><dataSet aapt-namespace="http://schemas.android.com/apk/res-auto" config="debug$Generated" generated="true" ignore_pattern="!.svn:!.git:!.ds_store:!*.scc:.*:<dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~"><source path="/Users/tommaso/Documents/MyCode/another-widget/tasksintegration/src/debug/res"/></dataSet><dataSet aapt-namespace="http://schemas.android.com/apk/res-auto" config="debug" generated-set="debug$Generated" ignore_pattern="!.svn:!.git:!.ds_store:!*.scc:.*:<dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~"><source path="/Users/tommaso/Documents/MyCode/another-widget/tasksintegration/src/debug/res"/></dataSet><mergedItems/></merger>
|
|
@ -1,2 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<merger version="3"><dataSet config="main" ignore_pattern="!.svn:!.git:!.ds_store:!*.scc:.*:<dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~"><source path="/Users/tommaso/Documents/MyCode/another-widget/tasksintegration/src/main/shaders"/></dataSet><dataSet config="debug" ignore_pattern="!.svn:!.git:!.ds_store:!*.scc:.*:<dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~"><source path="/Users/tommaso/Documents/MyCode/another-widget/tasksintegration/src/debug/shaders"/></dataSet></merger>
|
|
@ -1,4 +0,0 @@
|
|||||||
#Sun May 10 11:42:33 CEST 2020
|
|
||||||
base.0=/Users/tommaso/Documents/MyCode/another-widget/tasksintegration/build/intermediates/dex/debug/mergeProjectDexDebug/out/classes.dex
|
|
||||||
path.0=classes.dex
|
|
||||||
renamed.0=classes.dex
|
|
Binary file not shown.
Binary file not shown.
@ -1,24 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
xmlns:dist="http://schemas.android.com/apk/distribution"
|
|
||||||
featureSplit="tasksintegration"
|
|
||||||
package="com.tommasoberlose.anotherwidget"
|
|
||||||
android:targetSandboxVersion="2"
|
|
||||||
android:versionCode="83"
|
|
||||||
android:versionName="2.0.6" >
|
|
||||||
|
|
||||||
<uses-sdk
|
|
||||||
android:minSdkVersion="23"
|
|
||||||
android:targetSdkVersion="29" />
|
|
||||||
|
|
||||||
<dist:module
|
|
||||||
dist:instant="false"
|
|
||||||
dist:title="@string/title_tasksintegration" >
|
|
||||||
<dist:delivery>
|
|
||||||
<dist:on-demand />
|
|
||||||
</dist:delivery>
|
|
||||||
|
|
||||||
<dist:fusing dist:include="true" />
|
|
||||||
</dist:module>
|
|
||||||
|
|
||||||
</manifest>
|
|
@ -1 +0,0 @@
|
|||||||
[{"outputType":{"type":"INSTANT_APP_MANIFEST"},"apkData":{"type":"MAIN","splits":[],"versionCode":1,"versionName":"1.0","enabled":true,"outputFile":"tasksintegration-debug.apk","fullName":"debug","baseName":"debug","dirName":""},"path":"AndroidManifest.xml","properties":{"packageId":"com.tommasoberlose.anotherwidget","split":"","minSdkVersion":"23"}}]
|
|
@ -1,32 +0,0 @@
|
|||||||
1<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
2<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
3 xmlns:dist="http://schemas.android.com/apk/distribution"
|
|
||||||
4 featureSplit="tasksintegration"
|
|
||||||
5 package="com.tommasoberlose.anotherwidget"
|
|
||||||
6 android:versionCode="83"
|
|
||||||
7 android:versionName="2.0.6" >
|
|
||||||
8
|
|
||||||
9 <uses-sdk
|
|
||||||
10 android:minSdkVersion="23"
|
|
||||||
10-->/Users/tommaso/Documents/MyCode/another-widget/tasksintegration/src/main/AndroidManifest.xml
|
|
||||||
11 android:targetSdkVersion="29" />
|
|
||||||
11-->/Users/tommaso/Documents/MyCode/another-widget/tasksintegration/src/main/AndroidManifest.xml
|
|
||||||
12
|
|
||||||
13 <dist:module
|
|
||||||
13-->/Users/tommaso/Documents/MyCode/another-widget/tasksintegration/src/main/AndroidManifest.xml:5:5-12:19
|
|
||||||
14 dist:instant="false"
|
|
||||||
14-->/Users/tommaso/Documents/MyCode/another-widget/tasksintegration/src/main/AndroidManifest.xml:6:9-29
|
|
||||||
15 dist:title="@string/title_tasksintegration" >
|
|
||||||
15-->/Users/tommaso/Documents/MyCode/another-widget/tasksintegration/src/main/AndroidManifest.xml:7:9-52
|
|
||||||
16 <dist:delivery>
|
|
||||||
16-->/Users/tommaso/Documents/MyCode/another-widget/tasksintegration/src/main/AndroidManifest.xml:8:9-10:25
|
|
||||||
17 <dist:on-demand />
|
|
||||||
17-->/Users/tommaso/Documents/MyCode/another-widget/tasksintegration/src/main/AndroidManifest.xml:9:13-31
|
|
||||||
18 </dist:delivery>
|
|
||||||
19
|
|
||||||
20 <dist:fusing dist:include="true" />
|
|
||||||
20-->/Users/tommaso/Documents/MyCode/another-widget/tasksintegration/src/main/AndroidManifest.xml:11:9-44
|
|
||||||
20-->/Users/tommaso/Documents/MyCode/another-widget/tasksintegration/src/main/AndroidManifest.xml:11:22-41
|
|
||||||
21 </dist:module>
|
|
||||||
22
|
|
||||||
23</manifest>
|
|
Binary file not shown.
@ -1,23 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
xmlns:dist="http://schemas.android.com/apk/distribution"
|
|
||||||
featureSplit="tasksintegration"
|
|
||||||
package="com.tommasoberlose.anotherwidget"
|
|
||||||
android:versionCode="83"
|
|
||||||
android:versionName="2.0.6" >
|
|
||||||
|
|
||||||
<uses-sdk
|
|
||||||
android:minSdkVersion="23"
|
|
||||||
android:targetSdkVersion="29" />
|
|
||||||
|
|
||||||
<dist:module
|
|
||||||
dist:instant="false"
|
|
||||||
dist:title="@string/title_tasksintegration" >
|
|
||||||
<dist:delivery>
|
|
||||||
<dist:on-demand />
|
|
||||||
</dist:delivery>
|
|
||||||
|
|
||||||
<dist:fusing dist:include="true" />
|
|
||||||
</dist:module>
|
|
||||||
|
|
||||||
</manifest>
|
|
@ -1 +0,0 @@
|
|||||||
[{"outputType":{"type":"MERGED_MANIFESTS"},"apkData":{"type":"MAIN","splits":[],"versionCode":1,"versionName":"1.0","enabled":true,"outputFile":"tasksintegration-debug.apk","fullName":"debug","baseName":"debug","dirName":""},"path":"AndroidManifest.xml","properties":{"packageId":"com.tommasoberlose.anotherwidget","split":"","minSdkVersion":"23"}}]
|
|
@ -1 +0,0 @@
|
|||||||
{"modulePath":":tasksintegration","applicationId":"com.tommasoberlose.tasksintegration"}
|
|
@ -1,21 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
xmlns:dist="http://schemas.android.com/apk/distribution"
|
|
||||||
featureSplit="tasksintegration"
|
|
||||||
package="com.tommasoberlose.anotherwidget"
|
|
||||||
android:versionCode="83"
|
|
||||||
android:versionName="2.0.6" >
|
|
||||||
|
|
||||||
<uses-sdk android:targetSdkVersion="29" />
|
|
||||||
|
|
||||||
<dist:module
|
|
||||||
dist:instant="false"
|
|
||||||
dist:title="@string/title_tasksintegration" >
|
|
||||||
<dist:delivery>
|
|
||||||
<dist:on-demand />
|
|
||||||
</dist:delivery>
|
|
||||||
|
|
||||||
<dist:fusing dist:include="true" />
|
|
||||||
</dist:module>
|
|
||||||
|
|
||||||
</manifest>
|
|
@ -1 +0,0 @@
|
|||||||
[{"outputType":{"type":"METADATA_FEATURE_MANIFEST"},"apkData":{"type":"MAIN","splits":[],"versionCode":1,"versionName":"1.0","enabled":true,"outputFile":"tasksintegration-debug.apk","fullName":"debug","baseName":"debug","dirName":""},"path":"AndroidManifest.xml","properties":{}}]
|
|
@ -1 +0,0 @@
|
|||||||
[]
|
|
@ -1 +0,0 @@
|
|||||||
[{"outputType":{"type":"PROCESSED_RES"},"apkData":{"type":"MAIN","splits":[],"versionCode":1,"versionName":"1.0","enabled":true,"outputFile":"tasksintegration-debug.apk","fullName":"debug","baseName":"debug","dirName":""},"path":"resources-debug.ap_","properties":{"packageId":"com.tommasoberlose.anotherwidget","split":"","minSdkVersion":"23"}}]
|
|
Binary file not shown.
@ -1 +0,0 @@
|
|||||||
[{"outputType":{"type":"APK"},"apkData":{"type":"MAIN","splits":[],"versionCode":1,"versionName":"1.0","enabled":true,"outputFile":"tasksintegration-debug.apk","fullName":"debug","baseName":"debug","dirName":""},"path":"tasksintegration-debug.apk","properties":{}}]
|
|
@ -1,53 +0,0 @@
|
|||||||
-- Merging decision tree log ---
|
|
||||||
manifest
|
|
||||||
ADDED from /Users/tommaso/Documents/MyCode/another-widget/tasksintegration/src/main/AndroidManifest.xml:1:1-13:12
|
|
||||||
INJECTED from /Users/tommaso/Documents/MyCode/another-widget/tasksintegration/src/main/AndroidManifest.xml:1:1-13:12
|
|
||||||
INJECTED from /Users/tommaso/Documents/MyCode/another-widget/tasksintegration/src/main/AndroidManifest.xml:1:1-13:12
|
|
||||||
INJECTED from /Users/tommaso/Documents/MyCode/another-widget/tasksintegration/src/main/AndroidManifest.xml:1:1-13:12
|
|
||||||
INJECTED from /Users/tommaso/Documents/MyCode/another-widget/tasksintegration/src/main/AndroidManifest.xml:1:1-13:12
|
|
||||||
INJECTED from /Users/tommaso/Documents/MyCode/another-widget/tasksintegration/src/main/AndroidManifest.xml:1:1-13:12
|
|
||||||
INJECTED from /Users/tommaso/Documents/MyCode/another-widget/tasksintegration/src/main/AndroidManifest.xml:1:1-13:12
|
|
||||||
package
|
|
||||||
ADDED from /Users/tommaso/Documents/MyCode/another-widget/tasksintegration/src/main/AndroidManifest.xml:3:5-50
|
|
||||||
INJECTED from /Users/tommaso/Documents/MyCode/another-widget/tasksintegration/src/main/AndroidManifest.xml
|
|
||||||
INJECTED from /Users/tommaso/Documents/MyCode/another-widget/tasksintegration/src/main/AndroidManifest.xml
|
|
||||||
android:versionName
|
|
||||||
INJECTED from /Users/tommaso/Documents/MyCode/another-widget/tasksintegration/src/main/AndroidManifest.xml
|
|
||||||
ADDED from /Users/tommaso/Documents/MyCode/another-widget/tasksintegration/src/main/AndroidManifest.xml:1:1-13:12
|
|
||||||
INJECTED from /Users/tommaso/Documents/MyCode/another-widget/tasksintegration/src/main/AndroidManifest.xml
|
|
||||||
xmlns:dist
|
|
||||||
ADDED from /Users/tommaso/Documents/MyCode/another-widget/tasksintegration/src/main/AndroidManifest.xml:2:5-61
|
|
||||||
android:versionCode
|
|
||||||
INJECTED from /Users/tommaso/Documents/MyCode/another-widget/tasksintegration/src/main/AndroidManifest.xml
|
|
||||||
ADDED from /Users/tommaso/Documents/MyCode/another-widget/tasksintegration/src/main/AndroidManifest.xml:1:1-13:12
|
|
||||||
INJECTED from /Users/tommaso/Documents/MyCode/another-widget/tasksintegration/src/main/AndroidManifest.xml
|
|
||||||
xmlns:android
|
|
||||||
ADDED from /Users/tommaso/Documents/MyCode/another-widget/tasksintegration/src/main/AndroidManifest.xml:1:11-69
|
|
||||||
dist:module
|
|
||||||
ADDED from /Users/tommaso/Documents/MyCode/another-widget/tasksintegration/src/main/AndroidManifest.xml:5:5-12:19
|
|
||||||
dist:instant
|
|
||||||
ADDED from /Users/tommaso/Documents/MyCode/another-widget/tasksintegration/src/main/AndroidManifest.xml:6:9-29
|
|
||||||
dist:title
|
|
||||||
ADDED from /Users/tommaso/Documents/MyCode/another-widget/tasksintegration/src/main/AndroidManifest.xml:7:9-52
|
|
||||||
dist:delivery
|
|
||||||
ADDED from /Users/tommaso/Documents/MyCode/another-widget/tasksintegration/src/main/AndroidManifest.xml:8:9-10:25
|
|
||||||
dist:on-demand
|
|
||||||
ADDED from /Users/tommaso/Documents/MyCode/another-widget/tasksintegration/src/main/AndroidManifest.xml:9:13-31
|
|
||||||
dist:fusing
|
|
||||||
ADDED from /Users/tommaso/Documents/MyCode/another-widget/tasksintegration/src/main/AndroidManifest.xml:11:9-44
|
|
||||||
dist:include
|
|
||||||
ADDED from /Users/tommaso/Documents/MyCode/another-widget/tasksintegration/src/main/AndroidManifest.xml:11:22-41
|
|
||||||
uses-sdk
|
|
||||||
INJECTED from /Users/tommaso/Documents/MyCode/another-widget/tasksintegration/src/main/AndroidManifest.xml reason: use-sdk injection requested
|
|
||||||
INJECTED from /Users/tommaso/Documents/MyCode/another-widget/tasksintegration/src/main/AndroidManifest.xml
|
|
||||||
INJECTED from /Users/tommaso/Documents/MyCode/another-widget/tasksintegration/src/main/AndroidManifest.xml
|
|
||||||
INJECTED from /Users/tommaso/Documents/MyCode/another-widget/tasksintegration/src/main/AndroidManifest.xml
|
|
||||||
INJECTED from /Users/tommaso/Documents/MyCode/another-widget/tasksintegration/src/main/AndroidManifest.xml
|
|
||||||
android:targetSdkVersion
|
|
||||||
INJECTED from /Users/tommaso/Documents/MyCode/another-widget/tasksintegration/src/main/AndroidManifest.xml
|
|
||||||
ADDED from /Users/tommaso/Documents/MyCode/another-widget/tasksintegration/src/main/AndroidManifest.xml
|
|
||||||
INJECTED from /Users/tommaso/Documents/MyCode/another-widget/tasksintegration/src/main/AndroidManifest.xml
|
|
||||||
android:minSdkVersion
|
|
||||||
INJECTED from /Users/tommaso/Documents/MyCode/another-widget/tasksintegration/src/main/AndroidManifest.xml
|
|
||||||
ADDED from /Users/tommaso/Documents/MyCode/another-widget/tasksintegration/src/main/AndroidManifest.xml
|
|
||||||
INJECTED from /Users/tommaso/Documents/MyCode/another-widget/tasksintegration/src/main/AndroidManifest.xml
|
|
@ -1,14 +0,0 @@
|
|||||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
xmlns:dist="http://schemas.android.com/apk/distribution"
|
|
||||||
package="com.tommasoberlose.tasksintegration">
|
|
||||||
|
|
||||||
<dist:module
|
|
||||||
dist:instant="false"
|
|
||||||
dist:title="@string/title_tasksintegration">
|
|
||||||
<dist:delivery>
|
|
||||||
<dist:on-demand />
|
|
||||||
</dist:delivery>
|
|
||||||
<dist:fusing dist:include="true" />
|
|
||||||
</dist:module>
|
|
||||||
</manifest>
|
|
||||||
|
|
Reference in New Issue
Block a user