Skip to content

Commit

Permalink
Changes per PR feedback
Browse files Browse the repository at this point in the history
- Fix Context.registerReceiver() on newer Androids
- Quirks to work around problems with ContextCompat.registerReceiver() at Robolectric tests
- Remove CMake version
  • Loading branch information
TranceLove committed Feb 10, 2025
1 parent c2b6392 commit fa2abeb
Show file tree
Hide file tree
Showing 14 changed files with 122 additions and 28 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -21,12 +21,15 @@
package com.amaze.filemanager.asynchronous.broadcast_receivers;

import com.amaze.filemanager.asynchronous.loaders.AppListLoader;
import com.amaze.filemanager.utils.ContextCompatExtKt;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;

import androidx.core.content.ContextCompat;

/**
* Created by vishal on 23/2/17.
*
Expand All @@ -35,7 +38,7 @@
*/
public class PackageReceiver extends BroadcastReceiver {

private AppListLoader listLoader;
private final AppListLoader listLoader;

public PackageReceiver(AppListLoader listLoader) {

Expand All @@ -45,12 +48,14 @@ public PackageReceiver(AppListLoader listLoader) {
filter.addAction(Intent.ACTION_PACKAGE_REMOVED);
filter.addAction(Intent.ACTION_PACKAGE_CHANGED);
filter.addDataScheme("package");
listLoader.getContext().registerReceiver(this, filter);
ContextCompatExtKt.registerReceiverCompat(
listLoader.getContext(), this, filter, ContextCompat.RECEIVER_NOT_EXPORTED);

// Register for events related to SD card installation
IntentFilter sdcardFilter = new IntentFilter(Intent.ACTION_EXTERNAL_APPLICATIONS_AVAILABLE);
sdcardFilter.addAction(Intent.ACTION_EXTERNAL_APPLICATIONS_UNAVAILABLE);
listLoader.getContext().registerReceiver(this, sdcardFilter);
ContextCompatExtKt.registerReceiverCompat(
listLoader.getContext(), this, sdcardFilter, ContextCompat.RECEIVER_NOT_EXPORTED);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@
import com.amaze.filemanager.filesystem.root.MoveFileCommand;
import com.amaze.filemanager.ui.activities.MainActivity;
import com.amaze.filemanager.ui.notifications.NotificationConstants;
import com.amaze.filemanager.utils.ContextCompatExtKt;
import com.amaze.filemanager.utils.DatapointParcelable;
import com.amaze.filemanager.utils.ObtainableServiceBinder;
import com.amaze.filemanager.utils.ProgressHandler;
Expand All @@ -67,6 +68,7 @@
import androidx.annotation.StringRes;
import androidx.core.app.NotificationCompat;
import androidx.core.app.NotificationManagerCompat;
import androidx.core.content.ContextCompat;
import androidx.preference.PreferenceManager;

public class CopyService extends AbstractProgressiveService {
Expand Down Expand Up @@ -96,7 +98,11 @@ public class CopyService extends AbstractProgressiveService {
public void onCreate() {
super.onCreate();
c = getApplicationContext();
registerReceiver(receiver3, new IntentFilter(TAG_BROADCAST_COPY_CANCEL));
ContextCompatExtKt.registerReceiverCompat(
this,
cancelReceiver,
new IntentFilter(TAG_BROADCAST_COPY_CANCEL),
ContextCompat.RECEIVER_NOT_EXPORTED);
}

@Override
Expand Down Expand Up @@ -226,7 +232,7 @@ protected void clearDataPackages() {

public void onDestroy() {
super.onDestroy();
unregisterReceiver(receiver3);
unregisterReceiver(cancelReceiver);
}

private class DoInBackground extends AsyncTask<Bundle, Void, Void> {
Expand Down Expand Up @@ -529,7 +535,7 @@ private void copyFiles(
}
}

private final BroadcastReceiver receiver3 =
private final BroadcastReceiver cancelReceiver =
new BroadcastReceiver() {

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@
import com.amaze.filemanager.ui.activities.MainActivity;
import com.amaze.filemanager.ui.notifications.NotificationConstants;
import com.amaze.filemanager.utils.AESCrypt;
import com.amaze.filemanager.utils.ContextCompatExtKt;
import com.amaze.filemanager.utils.DatapointParcelable;
import com.amaze.filemanager.utils.ObtainableServiceBinder;
import com.amaze.filemanager.utils.ProgressHandler;
Expand All @@ -59,6 +60,7 @@
import androidx.annotation.StringRes;
import androidx.core.app.NotificationCompat;
import androidx.core.app.NotificationManagerCompat;
import androidx.core.content.ContextCompat;
import androidx.preference.PreferenceManager;

/**
Expand Down Expand Up @@ -94,7 +96,11 @@ public void onCreate() {
super.onCreate();

context = getApplicationContext();
registerReceiver(cancelReceiver, new IntentFilter(TAG_BROADCAST_CRYPT_CANCEL));
ContextCompatExtKt.registerReceiverCompat(
this,
cancelReceiver,
new IntentFilter(TAG_BROADCAST_CRYPT_CANCEL),
ContextCompat.RECEIVER_NOT_EXPORTED);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@
import com.amaze.filemanager.filesystem.files.CryptUtil;
import com.amaze.filemanager.ui.activities.MainActivity;
import com.amaze.filemanager.ui.notifications.NotificationConstants;
import com.amaze.filemanager.utils.ContextCompatExtKt;
import com.amaze.filemanager.utils.DatapointParcelable;
import com.amaze.filemanager.utils.ObtainableServiceBinder;
import com.amaze.filemanager.utils.ProgressHandler;
Expand All @@ -57,6 +58,7 @@
import androidx.annotation.StringRes;
import androidx.core.app.NotificationCompat;
import androidx.core.app.NotificationManagerCompat;
import androidx.core.content.ContextCompat;
import androidx.preference.PreferenceManager;

/** Created by vishal on 8/4/17 edited by Emmanuel Messulam <[email protected]> */
Expand Down Expand Up @@ -95,7 +97,11 @@ public void onCreate() {
super.onCreate();

context = getApplicationContext();
registerReceiver(cancelReceiver, new IntentFilter(TAG_BROADCAST_CRYPT_CANCEL));
ContextCompatExtKt.registerReceiverCompat(
this,
cancelReceiver,
new IntentFilter(TAG_BROADCAST_CRYPT_CANCEL),
ContextCompat.RECEIVER_NOT_EXPORTED);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@
import com.amaze.filemanager.ui.activities.MainActivity;
import com.amaze.filemanager.ui.dialogs.GeneralDialogCreation;
import com.amaze.filemanager.ui.notifications.NotificationConstants;
import com.amaze.filemanager.utils.ContextCompatExtKt;
import com.amaze.filemanager.utils.DatapointParcelable;
import com.amaze.filemanager.utils.ObtainableServiceBinder;
import com.amaze.filemanager.utils.ProgressHandler;
Expand All @@ -62,6 +63,7 @@
import androidx.appcompat.widget.AppCompatEditText;
import androidx.core.app.NotificationCompat;
import androidx.core.app.NotificationManagerCompat;
import androidx.core.content.ContextCompat;
import androidx.preference.PreferenceManager;

public class ExtractService extends AbstractProgressiveService {
Expand All @@ -87,7 +89,11 @@ public class ExtractService extends AbstractProgressiveService {
@Override
public void onCreate() {
super.onCreate();
registerReceiver(receiver1, new IntentFilter(TAG_BROADCAST_EXTRACT_CANCEL));
ContextCompatExtKt.registerReceiverCompat(
this,
cancelReceiver,
new IntentFilter(TAG_BROADCAST_EXTRACT_CANCEL),
ContextCompat.RECEIVER_NOT_EXPORTED);
}

@Override
Expand Down Expand Up @@ -220,7 +226,7 @@ public void onDestroy() {
if (extractingAsyncTask != null) {
extractingAsyncTask.cancel(true);
}
unregisterReceiver(receiver1);
unregisterReceiver(cancelReceiver);
}

/**
Expand Down Expand Up @@ -449,7 +455,7 @@ private void toastOnParseError(IOException result) {
* Class used for the client Binder. Because we know this service always runs in the same process
* as its clients, we don't need to deal with IPC.
*/
private final BroadcastReceiver receiver1 =
private final BroadcastReceiver cancelReceiver =
new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,11 +30,13 @@ import android.content.SharedPreferences
import android.net.Uri
import android.os.Build.VERSION.SDK_INT
import android.os.Build.VERSION_CODES.O
import android.os.Build.VERSION_CODES.TIRAMISU
import android.os.IBinder
import android.widget.RemoteViews
import androidx.annotation.StringRes
import androidx.core.app.NotificationCompat
import androidx.core.app.NotificationManagerCompat
import androidx.core.content.ContextCompat
import androidx.preference.PreferenceManager
import com.amaze.filemanager.R
import com.amaze.filemanager.application.AppConfig
Expand All @@ -48,6 +50,7 @@ import com.amaze.filemanager.ui.notifications.NotificationConstants
import com.amaze.filemanager.utils.DatapointParcelable
import com.amaze.filemanager.utils.ObtainableServiceBinder
import com.amaze.filemanager.utils.ProgressHandler
import com.amaze.filemanager.utils.registerReceiverCompat
import io.reactivex.Completable
import io.reactivex.CompletableEmitter
import io.reactivex.android.schedulers.AndroidSchedulers
Expand Down Expand Up @@ -89,7 +92,11 @@ class ZipService : AbstractProgressiveService() {

override fun onCreate() {
super.onCreate()
registerReceiver(receiver1, IntentFilter(KEY_COMPRESS_BROADCAST_CANCEL))
registerReceiverCompat(
receiver1,
IntentFilter(KEY_COMPRESS_BROADCAST_CANCEL),
ContextCompat.RECEIVER_NOT_EXPORTED,
)
}

override fun onStartCommand(
Expand All @@ -99,7 +106,14 @@ class ZipService : AbstractProgressiveService() {
): Int {
val mZipPath = intent.getStringExtra(KEY_COMPRESS_PATH)
val baseFiles: ArrayList<HybridFileParcelable> =
intent.getParcelableArrayListExtra(KEY_COMPRESS_FILES)!!
if (SDK_INT >= TIRAMISU) {
intent.getParcelableArrayListExtra(
KEY_COMPRESS_FILES,
HybridFileParcelable::class.java,
)!!
} else {
intent.getParcelableArrayListExtra(KEY_COMPRESS_FILES)!!
}
val zipFile = File(mZipPath)
mNotifyManager = NotificationManagerCompat.from(applicationContext)
if (!zipFile.exists()) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -138,6 +138,7 @@
import com.amaze.filemanager.ui.views.drawer.Drawer;
import com.amaze.filemanager.utils.AppConstants;
import com.amaze.filemanager.utils.BookSorter;
import com.amaze.filemanager.utils.ContextCompatExtKt;
import com.amaze.filemanager.utils.DataUtils;
import com.amaze.filemanager.utils.GenericExtKt;
import com.amaze.filemanager.utils.MainActivityActionMode;
Expand Down Expand Up @@ -198,6 +199,7 @@
import androidx.annotation.StringRes;
import androidx.arch.core.util.Function;
import androidx.coordinatorlayout.widget.CoordinatorLayout;
import androidx.core.content.ContextCompat;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentTransaction;
import androidx.loader.app.LoaderManager;
Expand Down Expand Up @@ -1360,8 +1362,14 @@ public void onResume() {
newFilter.addAction(Intent.ACTION_MEDIA_MOUNTED);
newFilter.addAction(Intent.ACTION_MEDIA_UNMOUNTED);
newFilter.addDataScheme(ContentResolver.SCHEME_FILE);
registerReceiver(mainActivityHelper.mNotificationReceiver, newFilter);
registerReceiver(receiver2, new IntentFilter(TAG_INTENT_FILTER_GENERAL));
// This receiver is responsible for receiving media mount events, should be exported
ContextCompatExtKt.registerReceiverCompat(
this, mainActivityHelper.mNotificationReceiver, newFilter, ContextCompat.RECEIVER_EXPORTED);
ContextCompatExtKt.registerReceiverCompat(
this,
receiver2,
new IntentFilter(TAG_INTENT_FILTER_GENERAL),
ContextCompat.RECEIVER_NOT_EXPORTED);

if (SDK_INT >= Build.VERSION_CODES.KITKAT) {
updateUsbInformation();
Expand Down Expand Up @@ -1404,7 +1412,7 @@ private void updateUsbInformation() {
IntentFilter otgFilter = new IntentFilter();
otgFilter.addAction(UsbManager.ACTION_USB_DEVICE_ATTACHED);
otgFilter.addAction(UsbManager.ACTION_USB_DEVICE_DETACHED);
registerReceiver(mOtgReceiver, otgFilter);
ContextCompat.registerReceiver(this, mOtgReceiver, otgFilter, ContextCompat.RECEIVER_EXPORTED);
}

/** Receiver to check if a USB device is connected at the runtime of application */
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
import com.amaze.filemanager.ui.fragments.preferencefragments.PreferencesConstants;
import com.amaze.filemanager.ui.theme.AppTheme;
import com.amaze.filemanager.ui.theme.AppThemePreference;
import com.amaze.filemanager.utils.ContextCompatExtKt;
import com.amaze.filemanager.utils.PreferenceUtils;
import com.amaze.filemanager.utils.Utils;
import com.readystatesoftware.systembartint.SystemBarTintManager;
Expand Down Expand Up @@ -356,8 +357,11 @@ protected void onDestroy() {
*/
private void registerPowerModeReceiver() {
if (SDK_INT >= LOLLIPOP) {
registerReceiver(
powerModeReceiver, new IntentFilter(PowerManager.ACTION_POWER_SAVE_MODE_CHANGED));
ContextCompatExtKt.registerReceiverCompat(
this,
powerModeReceiver,
new IntentFilter(PowerManager.ACTION_POWER_SAVE_MODE_CHANGED),
ContextCompat.RECEIVER_EXPORTED);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@ import androidx.appcompat.widget.AppCompatButton
import androidx.appcompat.widget.AppCompatImageButton
import androidx.appcompat.widget.AppCompatTextView
import androidx.coordinatorlayout.widget.CoordinatorLayout
import androidx.core.content.ContextCompat
import androidx.core.text.HtmlCompat
import androidx.core.text.HtmlCompat.FROM_HTML_MODE_COMPACT
import androidx.fragment.app.Fragment
Expand Down Expand Up @@ -542,7 +543,11 @@ class FtpServerFragment : Fragment(R.layout.fragment_ftp) {
super.onResume()
val wifiFilter = IntentFilter()
wifiFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTION)
requireContext().registerReceiver(mWifiReceiver, wifiFilter)
requireContext().registerReceiver(
mWifiReceiver,
wifiFilter,
ContextCompat.RECEIVER_NOT_EXPORTED,
)
EventBus.getDefault().register(this)
updateStatus()
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,7 @@
import com.amaze.filemanager.ui.views.FastScroller;
import com.amaze.filemanager.ui.views.WarnableTextInputValidator;
import com.amaze.filemanager.utils.BottomBarButtonPath;
import com.amaze.filemanager.utils.ContextCompatExtKt;
import com.amaze.filemanager.utils.DataUtils;
import com.amaze.filemanager.utils.GenericExtKt;
import com.amaze.filemanager.utils.OTGUtil;
Expand Down Expand Up @@ -116,6 +117,7 @@
import androidx.appcompat.widget.AppCompatEditText;
import androidx.appcompat.widget.AppCompatImageView;
import androidx.appcompat.widget.AppCompatTextView;
import androidx.core.content.ContextCompat;
import androidx.core.content.pm.ShortcutInfoCompat;
import androidx.core.content.pm.ShortcutManagerCompat;
import androidx.core.graphics.drawable.IconCompat;
Expand Down Expand Up @@ -962,9 +964,11 @@ private LayoutElementParcelable getBackElement() {
*/
private void resumeDecryptOperations() {
if (SDK_INT >= JELLY_BEAN_MR2) {
(requireMainActivity())
.registerReceiver(
decryptReceiver, new IntentFilter(EncryptDecryptUtils.DECRYPT_BROADCAST));
ContextCompatExtKt.registerReceiverCompat(
requireMainActivity(),
decryptReceiver,
new IntentFilter(EncryptDecryptUtils.DECRYPT_BROADCAST),
ContextCompat.RECEIVER_NOT_EXPORTED);
if (!mainFragmentViewModel.isEncryptOpen()
&& !Utils.isNullOrEmpty(mainFragmentViewModel.getEncryptBaseFiles())) {
// we've opened the file and are ready to delete it
Expand Down Expand Up @@ -1232,8 +1236,11 @@ public void updateList(boolean forceReload) {
@Override
public void onResume() {
super.onResume();
(requireActivity())
.registerReceiver(receiver2, new IntentFilter(MainActivity.KEY_INTENT_LOAD_LIST));
ContextCompatExtKt.registerReceiverCompat(
requireMainActivity(),
receiver2,
new IntentFilter(MainActivity.KEY_INTENT_LOAD_LIST),
ContextCompat.RECEIVER_NOT_EXPORTED);

resumeDecryptOperations();
startFileObserver();
Expand Down
Loading

0 comments on commit fa2abeb

Please sign in to comment.