2
0
mirror of https://github.com/KDE/kdeconnect-android synced 2025-08-22 09:58:08 +00:00

Use ContextCompat.getSystemService() to retrieve system services without casting.

This commit is contained in:
Isira Seneviratne 2020-07-07 16:45:02 +05:30
parent f4ff5c3c89
commit 52aafe6b8c
25 changed files with 112 additions and 93 deletions

View File

@ -37,6 +37,7 @@ import android.text.TextUtils;
import android.util.Log; import android.util.Log;
import androidx.core.app.NotificationCompat; import androidx.core.app.NotificationCompat;
import androidx.core.content.ContextCompat;
import org.kde.kdeconnect.Backends.BaseLink; import org.kde.kdeconnect.Backends.BaseLink;
import org.kde.kdeconnect.Backends.BaseLinkProvider; import org.kde.kdeconnect.Backends.BaseLinkProvider;
@ -141,7 +142,7 @@ public class BackgroundService extends Service {
if (NotificationHelper.isPersistentNotificationEnabled(this)) { if (NotificationHelper.isPersistentNotificationEnabled(this)) {
//Update the foreground notification with the currently connected device list //Update the foreground notification with the currently connected device list
NotificationManager nm = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); NotificationManager nm = ContextCompat.getSystemService(this, NotificationManager.class);
nm.notify(FOREGROUND_NOTIFICATION_ID, createForegroundNotification()); nm.notify(FOREGROUND_NOTIFICATION_ID, createForegroundNotification());
} }
} }
@ -316,7 +317,7 @@ public class BackgroundService extends Service {
} }
public void changePersistentNotificationVisibility(boolean visible) { public void changePersistentNotificationVisibility(boolean visible) {
NotificationManager nm = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); NotificationManager nm = ContextCompat.getSystemService(this, NotificationManager.class);
if (visible) { if (visible) {
nm.notify(FOREGROUND_NOTIFICATION_ID, createForegroundNotification()); nm.notify(FOREGROUND_NOTIFICATION_ID, createForegroundNotification());
} else { } else {

View File

@ -396,7 +396,7 @@ public class Device implements BaseLink.PacketReceiver {
Resources res = getContext().getResources(); Resources res = getContext().getResources();
final NotificationManager notificationManager = (NotificationManager) getContext().getSystemService(Context.NOTIFICATION_SERVICE); final NotificationManager notificationManager = ContextCompat.getSystemService(getContext(), NotificationManager.class);
Notification noti = new NotificationCompat.Builder(getContext(), NotificationHelper.Channels.DEFAULT) Notification noti = new NotificationCompat.Builder(getContext(), NotificationHelper.Channels.DEFAULT)
.setContentTitle(res.getString(R.string.pairing_request_from, getName())) .setContentTitle(res.getString(R.string.pairing_request_from, getName()))
@ -414,7 +414,8 @@ public class Device implements BaseLink.PacketReceiver {
} }
public void hidePairingNotification() { public void hidePairingNotification() {
final NotificationManager notificationManager = (NotificationManager) getContext().getSystemService(Context.NOTIFICATION_SERVICE); final NotificationManager notificationManager = ContextCompat.getSystemService(getContext(),
NotificationManager.class);
notificationManager.cancel(notificationId); notificationManager.cancel(notificationId);
} }

View File

@ -8,6 +8,8 @@ import android.content.SharedPreferences;
import android.os.Build; import android.os.Build;
import android.preference.PreferenceManager; import android.preference.PreferenceManager;
import androidx.core.content.ContextCompat;
import org.kde.kdeconnect_tp.R; import org.kde.kdeconnect_tp.R;
public class NotificationHelper { public class NotificationHelper {
@ -45,7 +47,7 @@ public class NotificationHelper {
return; return;
} }
NotificationManager manager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); NotificationManager manager = ContextCompat.getSystemService(context, NotificationManager.class);
NotificationChannel persistentChannel = new NotificationChannel( NotificationChannel persistentChannel = new NotificationChannel(
Channels.PERSISTENT, Channels.PERSISTENT,

View File

@ -31,6 +31,7 @@ import android.util.Log;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi; import androidx.annotation.RequiresApi;
import androidx.core.content.ContextCompat;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
@ -48,7 +49,8 @@ public class TelephonyHelper {
public static List<Integer> getActiveSubscriptionIDs( public static List<Integer> getActiveSubscriptionIDs(
@NonNull Context context) @NonNull Context context)
throws SecurityException { throws SecurityException {
SubscriptionManager subscriptionManager = (SubscriptionManager) context.getSystemService(Context.TELEPHONY_SUBSCRIPTION_SERVICE); SubscriptionManager subscriptionManager = ContextCompat.getSystemService(context,
SubscriptionManager.class);
if (subscriptionManager == null) { if (subscriptionManager == null) {
// I don't know why or when this happens... // I don't know why or when this happens...
Log.w(LOGGING_TAG, "Could not get SubscriptionManager"); Log.w(LOGGING_TAG, "Could not get SubscriptionManager");
@ -79,7 +81,8 @@ public class TelephonyHelper {
// See: https://developer.android.com/about/versions/android-5.1.html#multisim // See: https://developer.android.com/about/versions/android-5.1.html#multisim
// There were vendor-specific implmentations before then, but those are very difficult to support // There were vendor-specific implmentations before then, but those are very difficult to support
// S/O Reference: https://stackoverflow.com/a/28571835/3723163 // S/O Reference: https://stackoverflow.com/a/28571835/3723163
TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); TelephonyManager telephonyManager = ContextCompat.getSystemService(context,
TelephonyManager.class);
if (telephonyManager == null) { if (telephonyManager == null) {
// I don't know why or when this happens... // I don't know why or when this happens...
Log.w(LOGGING_TAG, "Could not get TelephonyManager"); Log.w(LOGGING_TAG, "Could not get TelephonyManager");
@ -89,7 +92,8 @@ public class TelephonyHelper {
return Collections.singletonList(phoneNumber); return Collections.singletonList(phoneNumber);
} else { } else {
// Potentially multi-sim case // Potentially multi-sim case
SubscriptionManager subscriptionManager = (SubscriptionManager)context.getSystemService(Context.TELEPHONY_SUBSCRIPTION_SERVICE); SubscriptionManager subscriptionManager = ContextCompat.getSystemService(context,
SubscriptionManager.class);
if (subscriptionManager == null) { if (subscriptionManager == null) {
// I don't know why or when this happens... // I don't know why or when this happens...
Log.w(LOGGING_TAG, "Could not get SubscriptionManager"); Log.w(LOGGING_TAG, "Could not get SubscriptionManager");

View File

@ -1,9 +1,5 @@
package org.kde.kdeconnect.Helpers; package org.kde.kdeconnect.Helpers;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import android.Manifest; import android.Manifest;
import android.content.Context; import android.content.Context;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
@ -12,12 +8,12 @@ import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager; import android.net.wifi.WifiManager;
import android.preference.PreferenceManager; import android.preference.PreferenceManager;
import android.text.TextUtils; import android.text.TextUtils;
import android.util.Log;
import androidx.core.content.ContextCompat; import androidx.core.content.ContextCompat;
import org.kde.kdeconnect.UserInterface.PermissionsAlertDialogFragment; import java.util.Arrays;
import org.kde.kdeconnect_tp.R; import java.util.Collections;
import java.util.List;
public class TrustedNetworkHelper { public class TrustedNetworkHelper {
@ -70,7 +66,8 @@ public class TrustedNetworkHelper {
} }
public String currentSSID() { public String currentSSID() {
WifiManager wifiManager = (WifiManager) context.getApplicationContext().getSystemService(Context.WIFI_SERVICE); WifiManager wifiManager = ContextCompat.getSystemService(context.getApplicationContext(),
WifiManager.class);
if (wifiManager == null) return ""; if (wifiManager == null) return "";
WifiInfo wifiInfo = wifiManager.getConnectionInfo(); WifiInfo wifiInfo = wifiManager.getConnectionInfo();
if (wifiInfo.getSupplicantState() != SupplicantState.COMPLETED) { if (wifiInfo.getSupplicantState() != SupplicantState.COMPLETED) {

View File

@ -20,15 +20,15 @@
package org.kde.kdeconnect.Plugins.ClibpoardPlugin; package org.kde.kdeconnect.Plugins.ClibpoardPlugin;
import androidx.appcompat.app.AppCompatActivity;
import android.content.ClipData; import android.content.ClipData;
import android.content.ClipboardManager; import android.content.ClipboardManager;
import android.content.Context;
import android.os.Bundle; import android.os.Bundle;
import android.view.WindowManager; import android.view.WindowManager;
import android.widget.Toast; import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.content.ContextCompat;
import org.kde.kdeconnect.BackgroundService; import org.kde.kdeconnect.BackgroundService;
import org.kde.kdeconnect.Device; import org.kde.kdeconnect.Device;
import org.kde.kdeconnect_tp.R; import org.kde.kdeconnect_tp.R;
@ -56,7 +56,8 @@ public class ClipboardFloatingActivity extends AppCompatActivity {
super.onWindowFocusChanged(hasFocus); super.onWindowFocusChanged(hasFocus);
if (hasFocus) { if (hasFocus) {
// We are now sure that clipboard can be accessed from here. // We are now sure that clipboard can be accessed from here.
ClipboardManager clipboardManager = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE); ClipboardManager clipboardManager = ContextCompat.getSystemService(this,
ClipboardManager.class);
ClipData.Item item; ClipData.Item item;
if (clipboardManager.hasPrimaryClip()) { if (clipboardManager.hasPrimaryClip()) {
item = clipboardManager.getPrimaryClip().getItemAt(0); item = clipboardManager.getPrimaryClip().getItemAt(0);

View File

@ -28,6 +28,8 @@ import android.os.Build;
import android.os.Handler; import android.os.Handler;
import android.os.Looper; import android.os.Looper;
import androidx.core.content.ContextCompat;
import java.util.HashSet; import java.util.HashSet;
@TargetApi(Build.VERSION_CODES.HONEYCOMB) @TargetApi(Build.VERSION_CODES.HONEYCOMB)
@ -68,7 +70,7 @@ public class ClipboardListener {
context = ctx; context = ctx;
new Handler(Looper.getMainLooper()).post(() -> { new Handler(Looper.getMainLooper()).post(() -> {
cm = (ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE); cm = ContextCompat.getSystemService(context, ClipboardManager.class);
listener = () -> { listener = () -> {
try { try {

View File

@ -23,7 +23,6 @@ package org.kde.kdeconnect.Plugins.FindMyPhonePlugin;
import android.app.Activity; import android.app.Activity;
import android.app.NotificationManager; import android.app.NotificationManager;
import android.app.PendingIntent; import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.SharedPreferences; import android.content.SharedPreferences;
import android.media.AudioManager; import android.media.AudioManager;
@ -37,6 +36,7 @@ import android.util.Log;
import androidx.annotation.RequiresApi; import androidx.annotation.RequiresApi;
import androidx.core.app.NotificationCompat; import androidx.core.app.NotificationCompat;
import androidx.core.content.ContextCompat;
import org.kde.kdeconnect.Helpers.DeviceHelper; import org.kde.kdeconnect.Helpers.DeviceHelper;
import org.kde.kdeconnect.Helpers.NotificationHelper; import org.kde.kdeconnect.Helpers.NotificationHelper;
@ -81,10 +81,10 @@ public class FindMyPhonePlugin extends Plugin {
@Override @Override
public boolean onCreate() { public boolean onCreate() {
notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); notificationManager = ContextCompat.getSystemService(context, NotificationManager.class);
notificationId = (int) System.currentTimeMillis(); notificationId = (int) System.currentTimeMillis();
audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); audioManager = ContextCompat.getSystemService(context, AudioManager.class);
powerManager = (PowerManager) context.getSystemService(Context.POWER_SERVICE); powerManager = ContextCompat.getSystemService(context, PowerManager.class);
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
Uri ringtone; Uri ringtone;

View File

@ -20,7 +20,6 @@
package org.kde.kdeconnect.Plugins.MousePadPlugin; package org.kde.kdeconnect.Plugins.MousePadPlugin;
import android.content.Context;
import android.content.SharedPreferences; import android.content.SharedPreferences;
import android.os.Build; import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
@ -34,11 +33,11 @@ import android.view.MotionEvent;
import android.view.View; import android.view.View;
import android.view.inputmethod.InputMethodManager; import android.view.inputmethod.InputMethodManager;
import org.kde.kdeconnect.BackgroundService;
import org.kde.kdeconnect.UserInterface.ThemeUtil;
import org.kde.kdeconnect_tp.R;
import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.app.AppCompatActivity;
import androidx.core.content.ContextCompat;
import org.kde.kdeconnect.BackgroundService;
import org.kde.kdeconnect_tp.R;
public class MousePadActivity extends AppCompatActivity implements GestureDetector.OnGestureListener, GestureDetector.OnDoubleTapListener, MousePadGestureDetector.OnGestureListener { public class MousePadActivity extends AppCompatActivity implements GestureDetector.OnGestureListener, GestureDetector.OnDoubleTapListener, MousePadGestureDetector.OnGestureListener {
private String deviceId; private String deviceId;
@ -367,7 +366,7 @@ public class MousePadActivity extends AppCompatActivity implements GestureDetect
//TODO: Does not work on KitKat with or without requestFocus() //TODO: Does not work on KitKat with or without requestFocus()
private void showKeyboard() { private void showKeyboard() {
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); InputMethodManager imm = ContextCompat.getSystemService(this, InputMethodManager.class);
keyListenerView.requestFocus(); keyListenerView.requestFocus();
imm.toggleSoftInputFromWindow(keyListenerView.getWindowToken(), 0, 0); imm.toggleSoftInputFromWindow(keyListenerView.getWindowToken(), 0, 0);
} }

View File

@ -47,6 +47,7 @@ import java.security.NoSuchAlgorithmException;
import java.util.ArrayList; import java.util.ArrayList;
import androidx.collection.LruCache; import androidx.collection.LruCache;
import androidx.core.content.ContextCompat;
/** /**
* Handles the cache for album art * Handles the cache for album art
@ -110,7 +111,8 @@ final class AlbumArtCache {
Log.e("KDE/Mpris/AlbumArtCache", "Could not open the album art disk cache!", e); Log.e("KDE/Mpris/AlbumArtCache", "Could not open the album art disk cache!", e);
} }
connectivityManager = (ConnectivityManager) context.getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE); connectivityManager = ContextCompat.getSystemService(context.getApplicationContext(),
ConnectivityManager.class);
} }
/** /**

View File

@ -48,6 +48,7 @@ import java.util.HashSet;
import androidx.annotation.RequiresApi; import androidx.annotation.RequiresApi;
import androidx.core.app.NotificationCompat; import androidx.core.app.NotificationCompat;
import androidx.core.app.TaskStackBuilder; import androidx.core.app.TaskStackBuilder;
import androidx.core.content.ContextCompat;
import androidx.media.app.NotificationCompat.MediaStyle; import androidx.media.app.NotificationCompat.MediaStyle;
/** /**
@ -461,14 +462,14 @@ public class MprisMediaSession implements SharedPreferences.OnSharedPreferenceCh
//Display the notification //Display the notification
mediaSession.setActive(true); mediaSession.setActive(true);
final NotificationManager nm = (NotificationManager) service.getSystemService(Context.NOTIFICATION_SERVICE); final NotificationManager nm = ContextCompat.getSystemService(context, NotificationManager.class);
nm.notify(MPRIS_MEDIA_NOTIFICATION_ID, notification.build()); nm.notify(MPRIS_MEDIA_NOTIFICATION_ID, notification.build());
}); });
} }
public void closeMediaNotification() { public void closeMediaNotification() {
//Remove the notification //Remove the notification
NotificationManager nm = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); NotificationManager nm = ContextCompat.getSystemService(context, NotificationManager.class);
nm.cancel(MPRIS_MEDIA_NOTIFICATION_ID); nm.cancel(MPRIS_MEDIA_NOTIFICATION_ID);
//Clear the current player and media session //Clear the current player and media session

View File

@ -21,7 +21,6 @@
package org.kde.kdeconnect.Plugins.MprisReceiverPlugin; package org.kde.kdeconnect.Plugins.MprisReceiverPlugin;
import android.content.ComponentName; import android.content.ComponentName;
import android.content.Context;
import android.media.session.MediaController; import android.media.session.MediaController;
import android.media.session.MediaSessionManager; import android.media.session.MediaSessionManager;
import android.os.Build; import android.os.Build;
@ -30,6 +29,11 @@ import android.os.Looper;
import android.provider.Settings; import android.provider.Settings;
import android.util.Log; import android.util.Log;
import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi;
import androidx.core.content.ContextCompat;
import androidx.fragment.app.DialogFragment;
import org.kde.kdeconnect.Helpers.AppsHelper; import org.kde.kdeconnect.Helpers.AppsHelper;
import org.kde.kdeconnect.NetworkPacket; import org.kde.kdeconnect.NetworkPacket;
import org.kde.kdeconnect.Plugins.NotificationsPlugin.NotificationReceiver; import org.kde.kdeconnect.Plugins.NotificationsPlugin.NotificationReceiver;
@ -42,10 +46,6 @@ import org.kde.kdeconnect_tp.R;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi;
import androidx.fragment.app.DialogFragment;
@PluginFactory.LoadablePlugin @PluginFactory.LoadablePlugin
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP_MR1) @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP_MR1)
public class MprisReceiverPlugin extends Plugin { public class MprisReceiverPlugin extends Plugin {
@ -65,7 +65,7 @@ public class MprisReceiverPlugin extends Plugin {
players = new HashMap<>(); players = new HashMap<>();
try { try {
MediaSessionManager manager = (MediaSessionManager) context.getSystemService(Context.MEDIA_SESSION_SERVICE); MediaSessionManager manager = ContextCompat.getSystemService(context, MediaSessionManager.class);
if (null == manager) if (null == manager)
return false; return false;
@ -85,7 +85,7 @@ public class MprisReceiverPlugin extends Plugin {
@Override @Override
public void onDestroy() { public void onDestroy() {
super.onDestroy(); super.onDestroy();
MediaSessionManager manager = (MediaSessionManager) context.getSystemService(Context.MEDIA_SESSION_SERVICE); MediaSessionManager manager = ContextCompat.getSystemService(context, MediaSessionManager.class);
if (manager != null && mediaSessionChangeListener != null) { if (manager != null && mediaSessionChangeListener != null) {
manager.removeOnActiveSessionsChangedListener(mediaSessionChangeListener); manager.removeOnActiveSessionsChangedListener(mediaSessionChangeListener);
mediaSessionChangeListener = null; mediaSessionChangeListener = null;

View File

@ -24,10 +24,12 @@ import android.app.Activity;
import android.app.Notification; import android.app.Notification;
import android.app.NotificationManager; import android.app.NotificationManager;
import android.app.PendingIntent; import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.util.Log; import android.util.Log;
import androidx.core.app.NotificationCompat;
import androidx.core.content.ContextCompat;
import org.kde.kdeconnect.Helpers.NotificationHelper; import org.kde.kdeconnect.Helpers.NotificationHelper;
import org.kde.kdeconnect.NetworkPacket; import org.kde.kdeconnect.NetworkPacket;
import org.kde.kdeconnect.Plugins.Plugin; import org.kde.kdeconnect.Plugins.Plugin;
@ -35,8 +37,6 @@ import org.kde.kdeconnect.Plugins.PluginFactory;
import org.kde.kdeconnect.UserInterface.MainActivity; import org.kde.kdeconnect.UserInterface.MainActivity;
import org.kde.kdeconnect_tp.R; import org.kde.kdeconnect_tp.R;
import androidx.core.app.NotificationCompat;
@PluginFactory.LoadablePlugin @PluginFactory.LoadablePlugin
public class PingPlugin extends Plugin { public class PingPlugin extends Plugin {
@ -79,7 +79,7 @@ public class PingPlugin extends Plugin {
id = 42; //A unique id to create only one notification id = 42; //A unique id to create only one notification
} }
NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); NotificationManager notificationManager = ContextCompat.getSystemService(context, NotificationManager.class);
Notification noti = new NotificationCompat.Builder(context, NotificationHelper.Channels.DEFAULT) Notification noti = new NotificationCompat.Builder(context, NotificationHelper.Channels.DEFAULT)
.setContentTitle(device.getName()) .setContentTitle(device.getName())

View File

@ -20,7 +20,6 @@
package org.kde.kdeconnect.Plugins.PresenterPlugin; package org.kde.kdeconnect.Plugins.PresenterPlugin;
import android.content.Context;
import android.hardware.Sensor; import android.hardware.Sensor;
import android.hardware.SensorEvent; import android.hardware.SensorEvent;
import android.hardware.SensorEventListener; import android.hardware.SensorEventListener;
@ -36,12 +35,13 @@ import android.view.MenuItem;
import android.view.MotionEvent; import android.view.MotionEvent;
import android.view.View; import android.view.View;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.content.ContextCompat;
import androidx.media.VolumeProviderCompat;
import org.kde.kdeconnect.BackgroundService; import org.kde.kdeconnect.BackgroundService;
import org.kde.kdeconnect_tp.R; import org.kde.kdeconnect_tp.R;
import androidx.appcompat.app.AppCompatActivity;
import androidx.media.VolumeProviderCompat;
public class PresenterActivity extends AppCompatActivity implements SensorEventListener { public class PresenterActivity extends AppCompatActivity implements SensorEventListener {
private MediaSessionCompat mMediaSession; private MediaSessionCompat mMediaSession;
@ -74,7 +74,7 @@ public class PresenterActivity extends AppCompatActivity implements SensorEventL
if (sensorManager != null) { if (sensorManager != null) {
return; //Already enabled return; //Already enabled
} }
sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE); sensorManager = ContextCompat.getSystemService(this, SensorManager.class);
findViewById(R.id.pointer_button).setVisibility(View.VISIBLE); findViewById(R.id.pointer_button).setVisibility(View.VISIBLE);
findViewById(R.id.pointer_button).setOnTouchListener((v, event) -> { findViewById(R.id.pointer_button).setOnTouchListener((v, event) -> {
if(event.getAction() == MotionEvent.ACTION_DOWN){ if(event.getAction() == MotionEvent.ACTION_DOWN){
@ -147,7 +147,7 @@ public class PresenterActivity extends AppCompatActivity implements SensorEventL
} }
if (mMediaSession != null) { if (mMediaSession != null) {
PowerManager pm = (PowerManager) this.getSystemService(Context.POWER_SERVICE); PowerManager pm = ContextCompat.getSystemService(this, PowerManager.class);
boolean screenOn; boolean screenOn;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT_WATCH) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT_WATCH) {
screenOn = pm.isInteractive(); screenOn = pm.isInteractive();

View File

@ -23,12 +23,14 @@ package org.kde.kdeconnect.Plugins.ReceiveNotificationsPlugin;
import android.app.Notification; import android.app.Notification;
import android.app.NotificationManager; import android.app.NotificationManager;
import android.app.PendingIntent; import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.graphics.Bitmap; import android.graphics.Bitmap;
import android.graphics.BitmapFactory; import android.graphics.BitmapFactory;
import android.util.Log; import android.util.Log;
import androidx.core.app.NotificationCompat;
import androidx.core.content.ContextCompat;
import org.kde.kdeconnect.Helpers.NotificationHelper; import org.kde.kdeconnect.Helpers.NotificationHelper;
import org.kde.kdeconnect.NetworkPacket; import org.kde.kdeconnect.NetworkPacket;
import org.kde.kdeconnect.Plugins.Plugin; import org.kde.kdeconnect.Plugins.Plugin;
@ -38,8 +40,6 @@ import org.kde.kdeconnect_tp.R;
import java.io.InputStream; import java.io.InputStream;
import androidx.core.app.NotificationCompat;
@PluginFactory.LoadablePlugin @PluginFactory.LoadablePlugin
public class ReceiveNotificationsPlugin extends Plugin { public class ReceiveNotificationsPlugin extends Plugin {
@ -106,7 +106,7 @@ public class ReceiveNotificationsPlugin extends Plugin {
} }
} }
NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); NotificationManager notificationManager = ContextCompat.getSystemService(context, NotificationManager.class);
Notification noti = new NotificationCompat.Builder(context, NotificationHelper.Channels.RECEIVENOTIFICATION) Notification noti = new NotificationCompat.Builder(context, NotificationHelper.Channels.RECEIVENOTIFICATION)
.setContentTitle(np.getString("appName")) .setContentTitle(np.getString("appName"))

View File

@ -20,7 +20,6 @@
package org.kde.kdeconnect.Plugins.RemoteKeyboardPlugin; package org.kde.kdeconnect.Plugins.RemoteKeyboardPlugin;
import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.inputmethodservice.InputMethodService; import android.inputmethodservice.InputMethodService;
import android.inputmethodservice.Keyboard; import android.inputmethodservice.Keyboard;
@ -34,8 +33,10 @@ import android.view.inputmethod.EditorInfo;
import android.view.inputmethod.InputMethodManager; import android.view.inputmethod.InputMethodManager;
import android.widget.Toast; import android.widget.Toast;
import org.kde.kdeconnect.UserInterface.PluginSettingsActivity; import androidx.core.content.ContextCompat;
import org.kde.kdeconnect.UserInterface.MainActivity; import org.kde.kdeconnect.UserInterface.MainActivity;
import org.kde.kdeconnect.UserInterface.PluginSettingsActivity;
import org.kde.kdeconnect_tp.R; import org.kde.kdeconnect_tp.R;
import java.util.ArrayList; import java.util.ArrayList;
@ -189,7 +190,7 @@ public class RemoteKeyboardService
break; break;
} }
case 2: { // "keyboard" case 2: { // "keyboard"
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); InputMethodManager imm = ContextCompat.getSystemService(this, InputMethodManager.class);
imm.showInputMethodPicker(); imm.showInputMethodPicker();
break; break;
} }

View File

@ -21,8 +21,8 @@
package org.kde.kdeconnect.Plugins.RunCommandPlugin; package org.kde.kdeconnect.Plugins.RunCommandPlugin;
import android.content.ClipData;
import android.content.ClipboardManager; import android.content.ClipboardManager;
import android.content.Context;
import android.os.Build; import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import android.util.Log; import android.util.Log;
@ -35,6 +35,11 @@ import android.widget.ListView;
import android.widget.TextView; import android.widget.TextView;
import android.widget.Toast; import android.widget.Toast;
import androidx.annotation.RequiresApi;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.content.ContextCompat;
import com.google.android.material.floatingactionbutton.FloatingActionButton; import com.google.android.material.floatingactionbutton.FloatingActionButton;
import org.json.JSONException; import org.json.JSONException;
@ -46,10 +51,6 @@ import org.kde.kdeconnect_tp.R;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import androidx.annotation.RequiresApi;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
public class RunCommandActivity extends AppCompatActivity { public class RunCommandActivity extends AppCompatActivity {
private String deviceId; private String deviceId;
@ -143,7 +144,7 @@ public class RunCommandActivity extends AppCompatActivity {
if (item.getItemId() == R.id.copy_url_to_clipboard) { if (item.getItemId() == R.id.copy_url_to_clipboard) {
CommandEntry entry = (CommandEntry) commandItems.get(info.position); CommandEntry entry = (CommandEntry) commandItems.get(info.position);
String url = "kdeconnect://runcommand/" + deviceId + "/" + entry.getKey(); String url = "kdeconnect://runcommand/" + deviceId + "/" + entry.getKey();
ClipboardManager cm = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE); ClipboardManager cm = ContextCompat.getSystemService(this, ClipboardManager.class);
cm.setText(url); cm.setText(url);
Toast toast = Toast.makeText(this, R.string.clipboard_toast, Toast.LENGTH_SHORT); Toast toast = Toast.makeText(this, R.string.clipboard_toast, Toast.LENGTH_SHORT);
toast.show(); toast.show();

View File

@ -22,12 +22,16 @@ package org.kde.kdeconnect.Plugins.SharePlugin;
import android.app.DownloadManager; import android.app.DownloadManager;
import android.content.ActivityNotFoundException; import android.content.ActivityNotFoundException;
import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.net.Uri; import android.net.Uri;
import android.os.Build; import android.os.Build;
import android.util.Log; import android.util.Log;
import androidx.annotation.GuardedBy;
import androidx.core.content.ContextCompat;
import androidx.core.content.FileProvider;
import androidx.documentfile.provider.DocumentFile;
import org.kde.kdeconnect.Device; import org.kde.kdeconnect.Device;
import org.kde.kdeconnect.Helpers.FilesHelper; import org.kde.kdeconnect.Helpers.FilesHelper;
import org.kde.kdeconnect.Helpers.MediaStoreHelper; import org.kde.kdeconnect.Helpers.MediaStoreHelper;
@ -43,10 +47,6 @@ import java.io.OutputStream;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import androidx.annotation.GuardedBy;
import androidx.core.content.FileProvider;
import androidx.documentfile.provider.DocumentFile;
/** /**
* A type of {@link BackgroundJob} that reads Files from another device. * A type of {@link BackgroundJob} that reads Files from another device.
* *
@ -330,7 +330,8 @@ public class CompositeReceiveFileJob extends BackgroundJob<Device, Void> {
private void publishFile(DocumentFile fileDocument, long size) { private void publishFile(DocumentFile fileDocument, long size) {
if (!ShareSettingsFragment.isCustomDestinationEnabled(getDevice().getContext())) { if (!ShareSettingsFragment.isCustomDestinationEnabled(getDevice().getContext())) {
Log.i("SharePlugin", "Adding to downloads"); Log.i("SharePlugin", "Adding to downloads");
DownloadManager manager = (DownloadManager) getDevice().getContext().getSystemService(Context.DOWNLOAD_SERVICE); DownloadManager manager = ContextCompat.getSystemService(getDevice().getContext(),
DownloadManager.class);
manager.addCompletedDownload(fileDocument.getUri().getLastPathSegment(), getDevice().getName(), true, fileDocument.getType(), fileDocument.getUri().getPath(), size, false); manager.addCompletedDownload(fileDocument.getUri().getLastPathSegment(), getDevice().getName(), true, fileDocument.getType(), fileDocument.getUri().getPath(), size, false);
} else { } else {
//Make sure it is added to the Android Gallery anyway //Make sure it is added to the Android Gallery anyway

View File

@ -23,7 +23,6 @@ package org.kde.kdeconnect.Plugins.SharePlugin;
import android.app.Notification; import android.app.Notification;
import android.app.NotificationManager; import android.app.NotificationManager;
import android.app.PendingIntent; import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.SharedPreferences; import android.content.SharedPreferences;
import android.graphics.Bitmap; import android.graphics.Bitmap;
@ -32,6 +31,10 @@ import android.net.Uri;
import android.os.Build; import android.os.Build;
import android.preference.PreferenceManager; import android.preference.PreferenceManager;
import androidx.core.app.NotificationCompat;
import androidx.core.content.ContextCompat;
import androidx.core.content.FileProvider;
import org.kde.kdeconnect.Device; import org.kde.kdeconnect.Device;
import org.kde.kdeconnect.Helpers.NotificationHelper; import org.kde.kdeconnect.Helpers.NotificationHelper;
import org.kde.kdeconnect_tp.R; import org.kde.kdeconnect_tp.R;
@ -40,9 +43,6 @@ import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import androidx.core.app.NotificationCompat;
import androidx.core.content.FileProvider;
class ReceiveNotification { class ReceiveNotification {
private final NotificationManager notificationManager; private final NotificationManager notificationManager;
private final int notificationId; private final int notificationId;
@ -59,7 +59,7 @@ class ReceiveNotification {
this.jobId = jobId; this.jobId = jobId;
notificationId = (int) System.currentTimeMillis(); notificationId = (int) System.currentTimeMillis();
notificationManager = (NotificationManager) device.getContext().getSystemService(Context.NOTIFICATION_SERVICE); notificationManager = ContextCompat.getSystemService(device.getContext(), NotificationManager.class);
builder = new NotificationCompat.Builder(device.getContext(), NotificationHelper.Channels.FILETRANSFER) builder = new NotificationCompat.Builder(device.getContext(), NotificationHelper.Channels.FILETRANSFER)
.setSmallIcon(android.R.drawable.stat_sys_download) .setSmallIcon(android.R.drawable.stat_sys_download)
.setAutoCancel(true) .setAutoCancel(true)

View File

@ -23,7 +23,6 @@ package org.kde.kdeconnect.Plugins.SharePlugin;
import android.Manifest; import android.Manifest;
import android.app.Activity; import android.app.Activity;
import android.content.ClipboardManager; import android.content.ClipboardManager;
import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable;
import android.net.Uri; import android.net.Uri;
@ -33,6 +32,10 @@ import android.os.Looper;
import android.util.Log; import android.util.Log;
import android.widget.Toast; import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.annotation.WorkerThread;
import androidx.core.content.ContextCompat;
import org.kde.kdeconnect.Helpers.FilesHelper; import org.kde.kdeconnect.Helpers.FilesHelper;
import org.kde.kdeconnect.Helpers.IntentHelper; import org.kde.kdeconnect.Helpers.IntentHelper;
import org.kde.kdeconnect.NetworkPacket; import org.kde.kdeconnect.NetworkPacket;
@ -46,10 +49,6 @@ import org.kde.kdeconnect_tp.R;
import java.net.URL; import java.net.URL;
import java.util.ArrayList; import java.util.ArrayList;
import androidx.annotation.NonNull;
import androidx.annotation.WorkerThread;
import androidx.core.content.ContextCompat;
/** /**
* A Plugin for sharing and receiving files and uris. * A Plugin for sharing and receiving files and uris.
* <p> * <p>
@ -176,7 +175,7 @@ public class SharePlugin extends Plugin {
private void receiveText(NetworkPacket np) { private void receiveText(NetworkPacket np) {
String text = np.getString("text"); String text = np.getString("text");
ClipboardManager cm = (ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE); ClipboardManager cm = ContextCompat.getSystemService(context, ClipboardManager.class);
cm.setText(text); cm.setText(text);
handler.post(() -> Toast.makeText(context, R.string.shareplugin_text_saved, Toast.LENGTH_LONG).show()); handler.post(() -> Toast.makeText(context, R.string.shareplugin_text_saved, Toast.LENGTH_LONG).show());
} }

View File

@ -23,17 +23,17 @@ package org.kde.kdeconnect.Plugins.SharePlugin;
import android.app.Notification; import android.app.Notification;
import android.app.NotificationManager; import android.app.NotificationManager;
import android.app.PendingIntent; import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.SharedPreferences; import android.content.SharedPreferences;
import androidx.core.app.NotificationCompat;
import androidx.core.content.ContextCompat;
import androidx.preference.PreferenceManager;
import org.kde.kdeconnect.Device; import org.kde.kdeconnect.Device;
import org.kde.kdeconnect.Helpers.NotificationHelper; import org.kde.kdeconnect.Helpers.NotificationHelper;
import org.kde.kdeconnect_tp.R; import org.kde.kdeconnect_tp.R;
import androidx.core.app.NotificationCompat;
import androidx.preference.PreferenceManager;
class UploadNotification { class UploadNotification {
private final NotificationManager notificationManager; private final NotificationManager notificationManager;
private NotificationCompat.Builder builder; private NotificationCompat.Builder builder;
@ -46,7 +46,7 @@ class UploadNotification {
this.jobId = jobId; this.jobId = jobId;
notificationId = (int) System.currentTimeMillis(); notificationId = (int) System.currentTimeMillis();
notificationManager = (NotificationManager) device.getContext().getSystemService(Context.NOTIFICATION_SERVICE); notificationManager = ContextCompat.getSystemService(device.getContext(), NotificationManager.class);
builder = new NotificationCompat.Builder(device.getContext(), NotificationHelper.Channels.FILETRANSFER) builder = new NotificationCompat.Builder(device.getContext(), NotificationHelper.Channels.FILETRANSFER)
.setSmallIcon(android.R.drawable.stat_sys_upload) .setSmallIcon(android.R.drawable.stat_sys_upload)
.setAutoCancel(true) .setAutoCancel(true)

View File

@ -227,7 +227,7 @@ public class TelephonyPlugin extends Plugin {
private void unmuteRinger() { private void unmuteRinger() {
if (isMuted) { if (isMuted) {
AudioManager am = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); AudioManager am = ContextCompat.getSystemService(context, AudioManager.class);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
am.setStreamVolume(AudioManager.STREAM_RING, AudioManager.ADJUST_UNMUTE, 0); am.setStreamVolume(AudioManager.STREAM_RING, AudioManager.ADJUST_UNMUTE, 0);
} else { } else {
@ -239,7 +239,7 @@ public class TelephonyPlugin extends Plugin {
private void muteRinger() { private void muteRinger() {
if (!isMuted) { if (!isMuted) {
AudioManager am = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); AudioManager am = ContextCompat.getSystemService(context, AudioManager.class);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
am.setStreamVolume(AudioManager.STREAM_RING, AudioManager.ADJUST_MUTE, 0); am.setStreamVolume(AudioManager.STREAM_RING, AudioManager.ADJUST_MUTE, 0);
} else { } else {

View File

@ -27,6 +27,7 @@ import android.view.ViewGroup;
import android.widget.ArrayAdapter; import android.widget.ArrayAdapter;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.core.content.ContextCompat;
import java.util.ArrayList; import java.util.ArrayList;
@ -43,7 +44,7 @@ public class ListAdapter extends ArrayAdapter<ListAdapter.Item> {
public ListAdapter(Context context, ArrayList<Item> items) { public ListAdapter(Context context, ArrayList<Item> items) {
super(context, 0, items); super(context, 0, items);
this.items = items; this.items = items;
layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); layoutInflater = ContextCompat.getSystemService(context, LayoutInflater.class);
} }
@NonNull @NonNull

View File

@ -42,6 +42,7 @@ import android.widget.ListView;
import android.widget.TextView; import android.widget.TextView;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.core.content.ContextCompat;
import androidx.fragment.app.Fragment; import androidx.fragment.app.Fragment;
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
@ -123,7 +124,8 @@ public class PairingFragment extends Fragment implements PairingDeviceItem.Callb
updateDeviceList(); updateDeviceList();
} }
}; };
ConnectivityManager connManager = (ConnectivityManager) getContext().getSystemService(Context.CONNECTIVITY_SERVICE); ConnectivityManager connManager = ContextCompat.getSystemService(requireContext(),
ConnectivityManager.class);
connManager.registerNetworkCallback(new NetworkRequest.Builder().build(), (ConnectivityManager.NetworkCallback) networkChangeListener); connManager.registerNetworkCallback(new NetworkRequest.Builder().build(), (ConnectivityManager.NetworkCallback) networkChangeListener);
} }
@ -133,7 +135,8 @@ public class PairingFragment extends Fragment implements PairingDeviceItem.Callb
@Override @Override
public void onDestroyView() { public void onDestroyView() {
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
ConnectivityManager connManager = (ConnectivityManager) getContext().getSystemService(Context.CONNECTIVITY_SERVICE); ConnectivityManager connManager = ContextCompat.getSystemService(requireContext(),
ConnectivityManager.class);
connManager.unregisterNetworkCallback((ConnectivityManager.NetworkCallback) networkChangeListener); connManager.unregisterNetworkCallback((ConnectivityManager.NetworkCallback) networkChangeListener);
} }
@ -186,7 +189,8 @@ public class PairingFragment extends Fragment implements PairingDeviceItem.Callb
((ListView) rootView.findViewById(R.id.devices_list)).removeHeaderView(headerText); ((ListView) rootView.findViewById(R.id.devices_list)).removeHeaderView(headerText);
((ListView) rootView.findViewById(R.id.devices_list)).removeHeaderView(noWifiHeader); ((ListView) rootView.findViewById(R.id.devices_list)).removeHeaderView(noWifiHeader);
((ListView) rootView.findViewById(R.id.devices_list)).removeHeaderView(notTrustedText); ((ListView) rootView.findViewById(R.id.devices_list)).removeHeaderView(notTrustedText);
ConnectivityManager connManager = (ConnectivityManager) getContext().getSystemService(Context.CONNECTIVITY_SERVICE); ConnectivityManager connManager = ContextCompat.getSystemService(requireContext(),
ConnectivityManager.class);
NetworkInfo wifi = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI); NetworkInfo wifi = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
//Check if we're on Wi-Fi. If we still see a device, don't do anything special //Check if we're on Wi-Fi. If we still see a device, don't do anything special
if (someDevicesReachable || wifi.isConnected()) { if (someDevicesReachable || wifi.isConnected()) {

View File

@ -27,6 +27,8 @@ import android.preference.PreferenceManager;
import android.util.Base64; import android.util.Base64;
import android.util.Log; import android.util.Log;
import androidx.core.content.ContextCompat;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
@ -111,7 +113,7 @@ public class DeviceTest {
PowerMockito.when(PreferenceManager.getDefaultSharedPreferences(any())).thenReturn(defaultSettings); PowerMockito.when(PreferenceManager.getDefaultSharedPreferences(any())).thenReturn(defaultSettings);
RsaHelper.initialiseRsaKeys(context); RsaHelper.initialiseRsaKeys(context);
Mockito.when(context.getSystemService(eq(Context.NOTIFICATION_SERVICE))).thenReturn(Mockito.mock(NotificationManager.class)); Mockito.when(ContextCompat.getSystemService(context, NotificationManager.class)).thenReturn(Mockito.mock(NotificationManager.class));
} }
@Test @Test