Skip to content

Commit c19d38e

Browse files
committed
3.0.0 nonfatal fixes
1 parent ab92cf5 commit c19d38e

File tree

12 files changed

+42
-22
lines changed

12 files changed

+42
-22
lines changed

app/src/main/java/sk/styk/martin/apkanalyzer/dependencyinjection/ActivityCommonModule.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import sk.styk.martin.apkanalyzer.manager.permission.PermissionsManagerImpl
2020
import sk.styk.martin.apkanalyzer.manager.promo.UserReviewManager
2121
import sk.styk.martin.apkanalyzer.manager.resources.ActivityColorThemeManager
2222
import sk.styk.martin.apkanalyzer.manager.resources.ColorThemeManager
23+
import sk.styk.martin.apkanalyzer.util.coroutines.DispatcherProvider
2324

2425
@InstallIn(ActivityComponent::class)
2526
@Module
@@ -59,10 +60,10 @@ class ActivityCommonModule {
5960

6061
@Provides
6162
@ActivityScoped
62-
fun provideFragmentScreenTracker(activity: AppCompatActivity, analyticsTracker: AnalyticsTracker, foregroundWatcher: ForegroundFragmentWatcher): FragmentScreenTracker {
63+
fun provideFragmentScreenTracker(activity: AppCompatActivity, analyticsTracker: AnalyticsTracker, foregroundWatcher: ForegroundFragmentWatcher, dispatcherProvider: DispatcherProvider): FragmentScreenTracker {
6364
return ViewModelProvider(activity, object : ViewModelProvider.Factory {
6465
override fun <T : ViewModel?> create(modelClass: Class<T>): T {
65-
return FragmentScreenTracker(foregroundWatcher, analyticsTracker) as T
66+
return FragmentScreenTracker(foregroundWatcher, analyticsTracker, dispatcherProvider) as T
6667
}
6768
}).get(FragmentScreenTracker::class.java)
6869
}

app/src/main/java/sk/styk/martin/apkanalyzer/manager/analytics/FragmentScreenTracker.kt

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,19 +4,31 @@ import androidx.lifecycle.ViewModel
44
import androidx.lifecycle.viewModelScope
55
import dagger.hilt.android.scopes.ActivityScoped
66
import kotlinx.coroutines.flow.collect
7+
import kotlinx.coroutines.flow.filter
8+
import kotlinx.coroutines.flow.onEach
79
import kotlinx.coroutines.launch
810
import sk.styk.martin.apkanalyzer.manager.navigationdrawer.ForegroundFragmentWatcher
11+
import sk.styk.martin.apkanalyzer.util.FragmentTag
12+
import sk.styk.martin.apkanalyzer.util.coroutines.DispatcherProvider
913
import javax.inject.Inject
1014

1115
@ActivityScoped
1216
class FragmentScreenTracker @Inject constructor(private val foregroundFragmentWatcher: ForegroundFragmentWatcher,
13-
private val analyticsTracker: AnalyticsTracker) : ViewModel() {
17+
private val analyticsTracker: AnalyticsTracker,
18+
private val dispatcherProvider: DispatcherProvider) : ViewModel() {
19+
20+
private var lastTrackedTag: FragmentTag? = null
1421

1522
init {
16-
viewModelScope.launch {
17-
foregroundFragmentWatcher.foregroundFragment.collect {
18-
analyticsTracker.trackScreenView(it.tag)
19-
}
23+
viewModelScope.launch(dispatcherProvider.default()) {
24+
foregroundFragmentWatcher.foregroundFragment
25+
.filter {
26+
it != lastTrackedTag
27+
}.onEach {
28+
lastTrackedTag = it
29+
}.collect {
30+
analyticsTracker.trackScreenView(it.tag)
31+
}
2032
}
2133
}
2234

app/src/main/java/sk/styk/martin/apkanalyzer/manager/file/DrawableSaveManager.kt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,11 @@ class DrawableSaveManager @Inject constructor(
4747
}
4848
} else {
4949
val imagePath = Environment.getExternalStoragePublicDirectory(directory).absolutePath
50-
val imageFile = File(imagePath, "$SUBDIRECTORY/fileName")
50+
val subdirectory = File(imagePath, SUBDIRECTORY)
51+
if (!subdirectory.exists()) {
52+
subdirectory.mkdirs()
53+
}
54+
val imageFile = File(imagePath, "$SUBDIRECTORY/$fileName")
5155
save(FileOutputStream(imageFile), bitmap)
5256
mediaManager.addMediaRecord(imageFile)
5357
imageFile.toUri()

app/src/main/java/sk/styk/martin/apkanalyzer/model/detail/ContentProviderData.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import kotlinx.android.parcel.Parcelize
88
@Parcelize
99
data class ContentProviderData(
1010
val name: String,
11-
val authority: String, //the name provider is published under this content
11+
val authority: String? = null, //the name provider is published under this content
1212
val readPermission: String? = null, //Optional permission required for read-only access this content provider
1313
val writePermission: String? = null, //Optional permission required for read/write access this content provider
1414
val isExported: Boolean = false //May be called by another activity

app/src/main/java/sk/styk/martin/apkanalyzer/ui/appdetail/AppDetailFragment.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -128,8 +128,8 @@ class AppDetailFragment : Fragment(), BackPressedListener {
128128
reenterTransition = MaterialSharedAxis(MaterialSharedAxis.Z, false)
129129

130130
parentFragmentManager.beginTransaction()
131-
.replace(R.id.container, AndroidManifestFragment.create(manifestRequest), AndroidManifestFragment.TAG)
132-
.addToBackStack(AndroidManifestFragment.TAG)
131+
.replace(R.id.container, AndroidManifestFragment.create(manifestRequest), FragmentTag.Manifest.tag)
132+
.addToBackStack(FragmentTag.Manifest.tag)
133133
.setReorderingAllowed(true)
134134
.commit()
135135
}

app/src/main/java/sk/styk/martin/apkanalyzer/ui/appdetail/AppDetailFragmentViewModel.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,7 @@ class AppDetailFragmentViewModel @AssistedInject constructor(
140140
}
141141

142142
init {
143+
Timber.tag(TAG_APP_DETAIL).i("Open app detail for request $appDetailRequest")
143144
loadDetail()
144145
observeApkActions()
145146
}

app/src/main/java/sk/styk/martin/apkanalyzer/ui/appdetail/page/provider/AppProviderDetailListAdapter.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ class AppProviderDetailListAdapter @Inject constructor() : DetailInfoDescription
4949

5050
val authority = DetailInfoAdapter.DetailInfo(
5151
name = TextInfo.from(R.string.provider_authority),
52-
value = TextInfo.from(expandedProviderData.contentProviderData.authority),
52+
value = if (expandedProviderData.contentProviderData.authority != null) TextInfo.from(expandedProviderData.contentProviderData.authority) else TextInfo.from(R.string.none),
5353
description = TextInfo.from(R.string.provider_authority_description)
5454
)
5555
val readPermission = DetailInfoAdapter.DetailInfo(

app/src/main/java/sk/styk/martin/apkanalyzer/ui/manifest/AndroidManifestFragment.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,6 @@ class AndroidManifestFragment : Fragment() {
9999

100100
companion object {
101101
private const val MANIFEST_REQUEST = "manifest_request"
102-
const val TAG = "AndroidManifestFragment"
103102

104103
fun create(manifestRequest: ManifestRequest) = AndroidManifestFragment().apply {
105104
arguments = Bundle().apply {

app/src/main/java/sk/styk/martin/apkanalyzer/util/FragmentTag.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@ enum class FragmentTag(val tag: String) {
88
Settings("Settings"),
99
Premium("Premium"),
1010
AppDetailParent("AppDetailParent"),
11-
PermissionDetail("PermissionDetail");
11+
PermissionDetail("PermissionDetail"),
12+
Manifest("Manifest");
1213

1314
fun isTag(stringTag: String?) = tag == stringTag
1415

app/src/main/res/layout/list_item_activity_detail.xml

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,8 @@
2222
android:id="@+id/headerContainer"
2323
android:layout_width="match_parent"
2424
android:layout_height="wrap_content"
25-
android:onLongClick="@{() -> viewModel.onTitleLongClick()}"
2625
android:background="?android:selectableItemBackground"
26+
android:onLongClick="@{() -> viewModel.onTitleLongClick()}"
2727
android:padding="@dimen/padding_default_medium">
2828

2929
<TextView
@@ -33,7 +33,7 @@
3333
android:layout_height="wrap_content"
3434
android:text="@{viewModel.packageName}"
3535
app:layout_constraintBottom_toTopOf="@id/activity_name"
36-
app:layout_constraintEnd_toStartOf="@id/toggleArrow"
36+
app:layout_constraintEnd_toStartOf="@id/playArrow"
3737
app:layout_constraintStart_toStartOf="parent"
3838
app:layout_constraintTop_toTopOf="parent"
3939
tools:text="sk.styk.martin.apkanalyzer" />
@@ -55,13 +55,14 @@
5555
android:id="@+id/playArrow"
5656
android:layout_width="20dp"
5757
android:layout_height="20dp"
58-
android:layout_marginStart="8dp"
58+
android:layout_marginEnd="8dp"
5959
android:background="?android:selectableItemBackgroundBorderless"
6060
android:onClick="@{() -> viewModel.onRunClick()}"
6161
android:visibility="@{viewModel.runButtonVisible ? View.VISIBLE : View.GONE}"
62-
app:layout_constraintBottom_toBottomOf="@id/activity_name"
62+
app:layout_constraintBottom_toBottomOf="parent"
6363
app:layout_constraintEnd_toStartOf="@id/toggleArrow"
64-
app:layout_constraintTop_toTopOf="@id/activity_name"
64+
app:layout_constraintStart_toEndOf="@id/activity_package_name"
65+
app:layout_constraintTop_toTopOf="parent"
6566
app:srcCompat="@drawable/ic_play"
6667
app:tint="?android:textColorSecondary" />
6768

@@ -72,7 +73,7 @@
7273
android:layout_weight="0"
7374
app:layout_constraintBottom_toBottomOf="parent"
7475
app:layout_constraintEnd_toEndOf="parent"
75-
app:layout_constraintStart_toEndOf="@+id/activity_package_name"
76+
app:layout_constraintStart_toEndOf="@+id/playArrow"
7677
app:layout_constraintTop_toTopOf="parent"
7778
app:srcCompat="@drawable/ic_arrow_expandable"
7879
app:tint="?android:textColorSecondary" />

0 commit comments

Comments
 (0)