diff --git a/app/build.gradle b/app/build.gradle index d66632b..d9b3cca 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -16,18 +16,16 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' -apply plugin: 'kotlin-android-extensions' apply plugin: 'kotlin-kapt' apply plugin: 'dagger.hilt.android.plugin' android { compileSdkVersion 30 - buildToolsVersion "29.0.3" defaultConfig { applicationId "com.devrel.android.minwos" minSdkVersion 26 - targetSdkVersion 29 + targetSdkVersion 30 versionCode 301 versionName "3.0" @@ -42,7 +40,7 @@ android { } buildFeatures { - viewBinding = true + viewBinding true } compileOptions { @@ -56,28 +54,26 @@ android { } dependencies { - implementation 'androidx.activity:activity-ktx:1.2.0-beta01' + implementation 'androidx.activity:activity-ktx:1.3.0-alpha07' implementation 'androidx.appcompat:appcompat:1.2.0' - implementation 'androidx.constraintlayout:constraintlayout:2.0.3' + implementation 'androidx.constraintlayout:constraintlayout:2.0.4' implementation 'androidx.core:core-ktx:1.3.2' - implementation 'androidx.fragment:fragment-ktx:1.3.0-beta01' - implementation 'androidx.lifecycle:lifecycle-common-java8:2.2.0' - implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.2.0' - implementation 'androidx.lifecycle:lifecycle-service:2.2.0' - implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.2.0' - implementation 'androidx.navigation:navigation-fragment-ktx:2.3.1' - implementation 'androidx.navigation:navigation-ui-ktx:2.3.1' - implementation 'androidx.recyclerview:recyclerview:1.1.0' - implementation 'com.google.android.material:material:1.2.1' - implementation "androidx.hilt:hilt-lifecycle-viewmodel:1.0.0-alpha02" + implementation 'androidx.fragment:fragment-ktx:1.3.3' + implementation 'androidx.lifecycle:lifecycle-common-java8:2.3.1' + implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.3.1' + implementation 'androidx.lifecycle:lifecycle-service:2.3.1' + implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.3.1' + implementation 'androidx.navigation:navigation-fragment-ktx:2.3.5' + implementation 'androidx.navigation:navigation-ui-ktx:2.3.5' + implementation 'androidx.recyclerview:recyclerview:1.2.0' + implementation 'com.google.android.material:material:1.3.0' implementation "com.google.dagger:hilt-android:$hilt_version" implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" - kapt 'androidx.hilt:hilt-compiler:1.0.0-alpha02' kapt "com.google.dagger:hilt-android-compiler:$hilt_version" testImplementation 'androidx.arch.core:core-testing:2.1.0' testImplementation 'com.google.truth:truth:1.0.1' - testImplementation 'junit:junit:4.13' + testImplementation 'junit:junit:4.13.2' testImplementation 'org.mockito:mockito-core:3.3.3' androidTestImplementation 'androidx.test:rules:1.3.0' @@ -87,7 +83,7 @@ dependencies { androidTestImplementation 'androidx.test.uiautomator:uiautomator:2.2.0' androidTestImplementation "com.google.dagger:hilt-android-testing:$hilt_version" androidTestImplementation 'com.google.truth:truth:1.0.1' - androidTestImplementation 'junit:junit:4.13' + androidTestImplementation 'junit:junit:4.13.2' androidTestImplementation 'org.mockito:mockito-core:3.3.3' kaptAndroidTest "com.google.dagger:hilt-android-compiler:$hilt_version" } diff --git a/app/src/main/java/com/devrel/android/minwos/App.kt b/app/src/main/java/com/devrel/android/minwos/App.kt index 6381010..1c5a0ea 100644 --- a/app/src/main/java/com/devrel/android/minwos/App.kt +++ b/app/src/main/java/com/devrel/android/minwos/App.kt @@ -26,15 +26,15 @@ import dagger.Module import dagger.Provides import dagger.hilt.InstallIn import dagger.hilt.android.HiltAndroidApp -import dagger.hilt.android.components.ApplicationComponent import dagger.hilt.android.qualifiers.ApplicationContext +import dagger.hilt.components.SingletonComponent import javax.inject.Singleton @HiltAndroidApp class App : Application() @Module -@InstallIn(ApplicationComponent::class) +@InstallIn(SingletonComponent::class) object AppModule { @Provides @Singleton @@ -54,5 +54,5 @@ object AppModule { @Provides @Singleton fun provideSubscriptionManager(@ApplicationContext context: Context) = - context.getSystemService(SubscriptionManager::class.java) + context.getSystemService(SubscriptionManager::class.java)!! } diff --git a/app/src/main/java/com/devrel/android/minwos/data/DataListenersModule.kt b/app/src/main/java/com/devrel/android/minwos/data/DataListenersModule.kt index 5e95f7a..9be1e57 100644 --- a/app/src/main/java/com/devrel/android/minwos/data/DataListenersModule.kt +++ b/app/src/main/java/com/devrel/android/minwos/data/DataListenersModule.kt @@ -23,19 +23,19 @@ import com.devrel.android.minwos.data.phonestate.TelephonyStatusListenerImpl import dagger.Binds import dagger.Module import dagger.hilt.InstallIn -import dagger.hilt.android.components.ActivityComponent +import dagger.hilt.android.components.ActivityRetainedComponent import dagger.hilt.android.components.ServiceComponent -import dagger.hilt.android.scopes.ActivityScoped +import dagger.hilt.android.scopes.ActivityRetainedScoped @Module -@InstallIn(ActivityComponent::class) +@InstallIn(ActivityRetainedComponent::class) abstract class DataListenersActivityModule { - @ActivityScoped + @ActivityRetainedScoped @Binds abstract fun bindConnectivityStatusListener(impl: ConnectivityStatusListenerImpl): ConnectivityStatusListener - @ActivityScoped + @ActivityRetainedScoped @Binds abstract fun bindTelephonyStatusListener(impl: TelephonyStatusListenerImpl): TelephonyStatusListener diff --git a/app/src/main/java/com/devrel/android/minwos/data/phonestate/SubscriptionInfo.kt b/app/src/main/java/com/devrel/android/minwos/data/phonestate/SubscriptionInfo.kt index 53734a7..1c70bd3 100644 --- a/app/src/main/java/com/devrel/android/minwos/data/phonestate/SubscriptionInfo.kt +++ b/app/src/main/java/com/devrel/android/minwos/data/phonestate/SubscriptionInfo.kt @@ -32,7 +32,11 @@ data class SubscriptionInfo( fun getForId(id: Int) = SubscriptionInfo( id = id, - simSlot = SubscriptionManager.getSlotIndex(id), + simSlot = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { + SubscriptionManager.getSlotIndex(id) + } else { + 0 + }, isDefault = SubscriptionManager.getDefaultSubscriptionId() == id, isDefaultSms = SubscriptionManager.getDefaultSmsSubscriptionId() == id, isDefaultData = SubscriptionManager.getDefaultDataSubscriptionId() == id, diff --git a/app/src/main/java/com/devrel/android/minwos/data/phonestate/TelephonyStatus.kt b/app/src/main/java/com/devrel/android/minwos/data/phonestate/TelephonyStatus.kt index ae06fe8..130c249 100644 --- a/app/src/main/java/com/devrel/android/minwos/data/phonestate/TelephonyStatus.kt +++ b/app/src/main/java/com/devrel/android/minwos/data/phonestate/TelephonyStatus.kt @@ -16,6 +16,7 @@ package com.devrel.android.minwos.data.phonestate +import android.annotation.SuppressLint import android.os.Build import android.telephony.AccessNetworkConstants import android.telephony.CellSignalStrength @@ -32,6 +33,7 @@ import android.telephony.TelephonyDisplayInfo import android.telephony.TelephonyManager import androidx.recyclerview.widget.DiffUtil +@SuppressLint("NewApi") data class TelephonyStatus( val subscriptions: List ) { @@ -55,23 +57,22 @@ data class TelephonyStatus( val nrState get() = networkRegistrationInfo?.toString()?.let { nrStateFromString(it) } val cellBandwidths: List? get() = - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { - serviceState?.cellBandwidths?.takeUnless { it.isEmpty() }?.toList() - } else { - null - } + serviceState + .takeIf { Build.VERSION.SDK_INT >= Build.VERSION_CODES.P } + ?.cellBandwidths + ?.takeIf { it.isNotEmpty() } + ?.toList() val signalStrengths: List? get() = signalStrength?.let { signalStrengthToString(it) } val networkRegistrationInfo get() = - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { - serviceState?.networkRegistrationInfoList?.find { + serviceState + .takeIf { Build.VERSION.SDK_INT >= Build.VERSION_CODES.R } + ?.networkRegistrationInfoList + ?.find { it.transportType == AccessNetworkConstants.TRANSPORT_TYPE_WWAN && it.domain and NetworkRegistrationInfo.DOMAIN_PS != 0 } - } else { - null - } companion object { val diffUtil = object : DiffUtil.ItemCallback() { diff --git a/app/src/main/java/com/devrel/android/minwos/ui/fragments/networks/NetworksViewModel.kt b/app/src/main/java/com/devrel/android/minwos/ui/fragments/networks/NetworksViewModel.kt index 0ecc125..a4431b5 100644 --- a/app/src/main/java/com/devrel/android/minwos/ui/fragments/networks/NetworksViewModel.kt +++ b/app/src/main/java/com/devrel/android/minwos/ui/fragments/networks/NetworksViewModel.kt @@ -16,14 +16,16 @@ package com.devrel.android.minwos.ui.fragments.networks -import androidx.hilt.lifecycle.ViewModelInject import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import com.devrel.android.minwos.data.networks.ConnectivityStatus import com.devrel.android.minwos.data.networks.ConnectivityStatusListener +import dagger.hilt.android.lifecycle.HiltViewModel +import javax.inject.Inject -class NetworksViewModel @ViewModelInject constructor( +@HiltViewModel +class NetworksViewModel @Inject constructor( private val connectivityStatusListener: ConnectivityStatusListener ) : ViewModel() { private val connectivityStatusMutable = MutableLiveData() diff --git a/app/src/main/java/com/devrel/android/minwos/ui/fragments/phonestate/PhoneStateViewModel.kt b/app/src/main/java/com/devrel/android/minwos/ui/fragments/phonestate/PhoneStateViewModel.kt index 55a2812..e3f56d1 100644 --- a/app/src/main/java/com/devrel/android/minwos/ui/fragments/phonestate/PhoneStateViewModel.kt +++ b/app/src/main/java/com/devrel/android/minwos/ui/fragments/phonestate/PhoneStateViewModel.kt @@ -16,14 +16,16 @@ package com.devrel.android.minwos.ui.fragments.phonestate -import androidx.hilt.lifecycle.ViewModelInject import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import com.devrel.android.minwos.data.phonestate.TelephonyStatus import com.devrel.android.minwos.data.phonestate.TelephonyStatusListener +import dagger.hilt.android.lifecycle.HiltViewModel +import javax.inject.Inject -class PhoneStateViewModel @ViewModelInject constructor( +@HiltViewModel +class PhoneStateViewModel @Inject constructor( private val telephonyStatusListener: TelephonyStatusListener ) : ViewModel() { private val telephonyStatusMutable = MutableLiveData() diff --git a/build.gradle b/build.gradle index 089dd4f..a63a672 100644 --- a/build.gradle +++ b/build.gradle @@ -16,23 +16,23 @@ buildscript { ext{ - hilt_version = '2.28-alpha' - kotlin_version = '1.4.10' + hilt_version = '2.35' + kotlin_version = '1.5.0' ktlint_version = '0.39.0' } repositories { google() - jcenter() + mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:4.1.0' + classpath 'com.android.tools.build:gradle:4.2.0' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath "com.google.dagger:hilt-android-gradle-plugin:$hilt_version" } } plugins { - id 'com.diffplug.spotless' version '5.7.0' + id 'com.diffplug.spotless' version '5.7.0' } subprojects { @@ -56,6 +56,6 @@ subprojects { allprojects { repositories { google() - jcenter() + mavenCentral() } } diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index fd953b5..1b1a1b3 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Mon Oct 05 23:18:10 BST 2020 +#Mon May 10 18:42:03 BST 2021 distributionBase=GRADLE_USER_HOME +distributionUrl=https\://services.gradle.org/distributions/gradle-6.7.1-bin.zip distributionPath=wrapper/dists -zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.5-bin.zip +zipStoreBase=GRADLE_USER_HOME