Separate notification settings and call handling
This commit is contained in:
parent
ef4b018e87
commit
e22aa92525
|
@ -8,12 +8,16 @@ public class App extends Application {
|
|||
|
||||
private static App instance;
|
||||
|
||||
private static Settings settings;
|
||||
|
||||
@Override
|
||||
public void onCreate() {
|
||||
super.onCreate();
|
||||
|
||||
instance = this;
|
||||
|
||||
settings = new Settings(this);
|
||||
|
||||
EventBus.builder()
|
||||
.throwSubscriberException(BuildConfig.DEBUG)
|
||||
.sendNoSubscriberEvent(false)
|
||||
|
@ -29,4 +33,8 @@ public class App extends Application {
|
|||
return instance;
|
||||
}
|
||||
|
||||
public static Settings getSettings() {
|
||||
return settings;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -2,10 +2,8 @@ package dummydomain.yetanothercallblocker;
|
|||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.content.BroadcastReceiver;
|
||||
import android.content.ComponentName;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.os.Build;
|
||||
import android.telecom.TelecomManager;
|
||||
import android.telephony.TelephonyManager;
|
||||
|
@ -28,20 +26,6 @@ public class CallReceiver extends BroadcastReceiver {
|
|||
|
||||
private static boolean isOnCall; // TODO: proper handling
|
||||
|
||||
public static boolean isEnabled(Context context) {
|
||||
return context.getPackageManager()
|
||||
.getComponentEnabledSetting(new ComponentName(context, CallReceiver.class))
|
||||
!= PackageManager.COMPONENT_ENABLED_STATE_DISABLED;
|
||||
}
|
||||
|
||||
public static void setEnabled(Context context, boolean enable) {
|
||||
context.getPackageManager().setComponentEnabledSetting(
|
||||
new ComponentName(context, CallReceiver.class),
|
||||
enable ? PackageManager.COMPONENT_ENABLED_STATE_ENABLED
|
||||
: PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
|
||||
PackageManager.DONT_KILL_APP);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onReceive(Context context, Intent intent) {
|
||||
if (!TelephonyManager.ACTION_PHONE_STATE_CHANGED.equals(intent.getAction())) return;
|
||||
|
@ -56,19 +40,28 @@ public class CallReceiver extends BroadcastReceiver {
|
|||
} else if (TelephonyManager.EXTRA_STATE_RINGING.equals(telephonyExtraState)) {
|
||||
if (incomingNumber == null) return;
|
||||
|
||||
NumberInfo numberInfo = DatabaseSingleton.getNumberInfo(incomingNumber);
|
||||
Settings settings = App.getSettings();
|
||||
|
||||
boolean blocked = false;
|
||||
if (!isOnCall && numberInfo.rating == NumberInfo.Rating.NEGATIVE
|
||||
&& new Settings(context).getBlockCalls()) {
|
||||
blocked = rejectCall(context);
|
||||
boolean blockCalls = settings.getBlockCalls();
|
||||
boolean showNotifications = settings.getIncomingCallNotifications();
|
||||
|
||||
if (blocked) {
|
||||
NotificationHelper.showBlockedCallNotification(context, numberInfo);
|
||||
if (blockCalls || showNotifications) {
|
||||
NumberInfo numberInfo = DatabaseSingleton.getNumberInfo(incomingNumber);
|
||||
|
||||
boolean blocked = false;
|
||||
if (!isOnCall && numberInfo.rating == NumberInfo.Rating.NEGATIVE
|
||||
&& blockCalls) {
|
||||
blocked = rejectCall(context);
|
||||
|
||||
if (blocked) {
|
||||
NotificationHelper.showBlockedCallNotification(context, numberInfo);
|
||||
}
|
||||
}
|
||||
|
||||
if (!blocked && showNotifications) {
|
||||
NotificationHelper.showIncomingCallNotification(context, numberInfo);
|
||||
}
|
||||
}
|
||||
|
||||
if (!blocked) NotificationHelper.showIncomingCallNotification(context, numberInfo);
|
||||
} else if(TelephonyManager.EXTRA_STATE_IDLE.equals(telephonyExtraState)) {
|
||||
isOnCall = false;
|
||||
NotificationHelper.hideIncomingCallNotification(context, incomingNumber);
|
||||
|
@ -86,7 +79,7 @@ public class CallReceiver extends BroadcastReceiver {
|
|||
|
||||
return true;
|
||||
} catch (Exception e) {
|
||||
LOG.warn("Error while rejecting call on API 26+", e);
|
||||
LOG.warn("Error while rejecting call on API 28+", e);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -47,15 +47,17 @@ public class MainActivity extends AppCompatActivity {
|
|||
RecyclerView recyclerView = findViewById(R.id.callLogList);
|
||||
recyclerView.setAdapter(callLogAdapter);
|
||||
|
||||
Settings settings = App.getSettings();
|
||||
|
||||
SwitchCompat notificationsSwitch = findViewById(R.id.notificationsEnabledSwitch);
|
||||
notificationsSwitch.setChecked(CallReceiver.isEnabled(this));
|
||||
notificationsSwitch.setChecked(settings.getIncomingCallNotifications());
|
||||
notificationsSwitch.setOnCheckedChangeListener((buttonView, isChecked)
|
||||
-> CallReceiver.setEnabled(MainActivity.this, isChecked));
|
||||
-> settings.setIncomingCallNotifications(isChecked));
|
||||
|
||||
SwitchCompat blockCallsSwitch = findViewById(R.id.blockCallsSwitch);
|
||||
blockCallsSwitch.setChecked(new Settings(this).getBlockCalls());
|
||||
blockCallsSwitch.setChecked(settings.getBlockCalls());
|
||||
blockCallsSwitch.setOnCheckedChangeListener((buttonView, isChecked)
|
||||
-> new Settings(this).setBlockCalls(isChecked));
|
||||
-> settings.setBlockCalls(isChecked));
|
||||
|
||||
UpdateScheduler updateScheduler = UpdateScheduler.get(this);
|
||||
SwitchCompat autoUpdateSwitch = findViewById(R.id.autoUpdateEnabledSwitch);
|
||||
|
|
|
@ -5,20 +5,41 @@ import android.content.SharedPreferences;
|
|||
|
||||
public class Settings {
|
||||
|
||||
private static final String PREF_INCOMING_CALL_NOTIFICATIONS = "incomingCallNotifications";
|
||||
private static final String PREF_BLOCK_CALLS = "blockCalls";
|
||||
|
||||
private final SharedPreferences pref;
|
||||
|
||||
public Settings(Context context) {
|
||||
Settings(Context context) {
|
||||
pref = context.getSharedPreferences("yacb_preferences", Context.MODE_PRIVATE);
|
||||
}
|
||||
|
||||
public boolean getIncomingCallNotifications() {
|
||||
return getBoolean(PREF_INCOMING_CALL_NOTIFICATIONS, true);
|
||||
}
|
||||
|
||||
public void setIncomingCallNotifications(boolean show) {
|
||||
setBoolean(PREF_INCOMING_CALL_NOTIFICATIONS, show);
|
||||
}
|
||||
|
||||
public boolean getBlockCalls() {
|
||||
return pref.getBoolean(PREF_BLOCK_CALLS, false);
|
||||
return getBoolean(PREF_BLOCK_CALLS);
|
||||
}
|
||||
|
||||
public void setBlockCalls(boolean block) {
|
||||
pref.edit().putBoolean(PREF_BLOCK_CALLS, block).apply();
|
||||
setBoolean(PREF_BLOCK_CALLS, block);
|
||||
}
|
||||
|
||||
public boolean getBoolean(String key) {
|
||||
return getBoolean(key, false);
|
||||
}
|
||||
|
||||
public boolean getBoolean(String key, boolean defValue) {
|
||||
return pref.getBoolean(key, defValue);
|
||||
}
|
||||
|
||||
private void setBoolean(String key, boolean value) {
|
||||
pref.edit().putBoolean(key, value).apply();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue