Skip to content

Commit

Permalink
- Fixed Expanded Smartspace overlay not working on Android 14 QPR3 Be…
Browse files Browse the repository at this point in the history
…ta 1 (KieronQuinn#160)

- Improved Wi-Fi Requirement logic after reboot
  • Loading branch information
KieronQuinn authored Feb 10, 2024
1 parent 3080ad7 commit 2f86a47
Show file tree
Hide file tree
Showing 4 changed files with 38 additions and 11 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
package android.app;

import android.annotation.SuppressLint;
import android.app.ActivityOptionsHidden.SceneTransitionInfo;
import android.app.ActivityThread.ActivityClientRecord;
import android.app.servertransaction.PendingTransactionActions;
import android.content.ComponentName;
Expand Down Expand Up @@ -779,7 +780,11 @@ private static boolean isAtLeastS(){

private static void handleStartActivity(IBinder binder, ActivityThread mActivityThread, PendingTransactionActions pendingActions){
if(isAtLeastS()) {
mActivityThread.handleStartActivity(mActivityThread.getActivityClient(binder), pendingActions, null);
try {
mActivityThread.handleStartActivity(mActivityThread.getActivityClient(binder), pendingActions, (SceneTransitionInfo) null);
}catch (NoSuchMethodError e) {
mActivityThread.handleStartActivity(mActivityThread.getActivityClient(binder), pendingActions, (ActivityOptions) null);
}
}else{
try {
mActivityThread.handleStartActivity(mActivityThread.getActivityClient(binder), pendingActions);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,7 @@ import android.Manifest.permission.ACCESS_COARSE_LOCATION
import android.Manifest.permission.ACCESS_FINE_LOCATION
import android.Manifest.permission.ACCESS_WIFI_STATE
import android.annotation.SuppressLint
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.content.IntentFilter
import android.net.ConnectivityManager
import android.net.NetworkCapabilities
Expand All @@ -17,14 +15,13 @@ import android.net.wifi.WifiInfo
import android.net.wifi.WifiManager
import android.os.Build
import android.provider.Settings
import android.util.Log
import com.kieronquinn.app.smartspacer.components.smartspace.requirements.WiFiRequirement
import com.kieronquinn.app.smartspacer.repositories.WiFiRepository.WiFiNetwork
import com.kieronquinn.app.smartspacer.sdk.provider.SmartspacerRequirementProvider
import com.kieronquinn.app.smartspacer.utils.extensions.broadcastReceiverAsFlow
import com.kieronquinn.app.smartspacer.utils.extensions.currentWiFiNetwork
import com.kieronquinn.app.smartspacer.utils.extensions.getSSIDCompat
import com.kieronquinn.app.smartspacer.utils.extensions.hasPermission
import com.kieronquinn.app.smartspacer.utils.extensions.registerReceiverCompat
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.MainScope
import kotlinx.coroutines.flow.MutableStateFlow
Expand Down Expand Up @@ -90,6 +87,8 @@ class WiFiRepositoryImpl(
@VisibleForTesting
val refreshBus = MutableStateFlow(System.currentTimeMillis())

private val scanRefreshBus = MutableStateFlow(System.currentTimeMillis())

private val wifiManager = context.getSystemService(Context.WIFI_SERVICE) as WifiManager
private val connectivityManager =
context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
Expand All @@ -102,8 +101,13 @@ class WiFiRepositoryImpl(
it?.toWiFiNetwork()
}.distinctUntilChanged().onEach {
notifyWiFiChanged()
scanRefreshBus.emit(System.currentTimeMillis())
}.stateIn(scope, SharingStarted.Eagerly, null)

private val scanResultBus = scanRefreshBus.flatMapLatest {
context.broadcastReceiverAsFlow(IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION))
}

/**
* Uses Shizuku service to get a list of saved WiFi networks via Shell.
*/
Expand All @@ -120,6 +124,7 @@ class WiFiRepositoryImpl(
override fun refresh() {
scope.launch {
refreshBus.emit(System.currentTimeMillis())
scanRefreshBus.emit(System.currentTimeMillis())
}
}

Expand All @@ -128,12 +133,10 @@ class WiFiRepositoryImpl(
wifiManager.startScan()
}

private fun registerWiFiScanReceiver() {
context.registerReceiverCompat(object: BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
onNetworksChanged()
}
}, IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION))
private fun registerWiFiScanReceiver() = scope.launch {
scanResultBus.collect {
onNetworksChanged()
}
}

@SuppressLint("MissingPermission")
Expand Down
12 changes: 12 additions & 0 deletions systemstubs/src/main/java/android/app/ActivityOptionsHidden.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package android.app;

import dev.rikka.tools.refine.RefineAs;

@RefineAs(ActivityOptions.class)
public class ActivityOptionsHidden {

public static class SceneTransitionInfo {
//Stub!
}

}
7 changes: 7 additions & 0 deletions systemstubs/src/main/java/android/app/ActivityThread.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package android.app;

import android.app.ActivityOptionsHidden.SceneTransitionInfo;
import android.app.servertransaction.PendingTransactionActions;
import android.content.Intent;
import android.content.pm.ActivityInfo;
Expand Down Expand Up @@ -44,11 +45,17 @@ public void handleStartActivity(ActivityClientRecord r, PendingTransactionAction
throw new RuntimeException("Stub!");
}

//maxApi = U (there is an overlap)
@RequiresApi(Build.VERSION_CODES.S)
public void handleStartActivity(ActivityClientRecord r, PendingTransactionActions pendingActions, ActivityOptions activityOptions) {
throw new RuntimeException("Stub!");
}

@RequiresApi(Build.VERSION_CODES.S)
public void handleStartActivity(ActivityClientRecord r, PendingTransactionActions pendingActions, SceneTransitionInfo sceneTransitionInfo) {
throw new RuntimeException("Stub!");
}

//maxApi = R
@Deprecated
public ActivityClientRecord performResumeActivity(IBinder token, boolean finalStateRequest,
Expand Down

0 comments on commit 2f86a47

Please sign in to comment.