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 App instance;
|
||||||
|
|
||||||
|
private static Settings settings;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onCreate() {
|
public void onCreate() {
|
||||||
super.onCreate();
|
super.onCreate();
|
||||||
|
|
||||||
instance = this;
|
instance = this;
|
||||||
|
|
||||||
|
settings = new Settings(this);
|
||||||
|
|
||||||
EventBus.builder()
|
EventBus.builder()
|
||||||
.throwSubscriberException(BuildConfig.DEBUG)
|
.throwSubscriberException(BuildConfig.DEBUG)
|
||||||
.sendNoSubscriberEvent(false)
|
.sendNoSubscriberEvent(false)
|
||||||
|
@ -29,4 +33,8 @@ public class App extends Application {
|
||||||
return instance;
|
return instance;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static Settings getSettings() {
|
||||||
|
return settings;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,10 +2,8 @@ package dummydomain.yetanothercallblocker;
|
||||||
|
|
||||||
import android.annotation.SuppressLint;
|
import android.annotation.SuppressLint;
|
||||||
import android.content.BroadcastReceiver;
|
import android.content.BroadcastReceiver;
|
||||||
import android.content.ComponentName;
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.pm.PackageManager;
|
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
import android.telecom.TelecomManager;
|
import android.telecom.TelecomManager;
|
||||||
import android.telephony.TelephonyManager;
|
import android.telephony.TelephonyManager;
|
||||||
|
@ -28,20 +26,6 @@ public class CallReceiver extends BroadcastReceiver {
|
||||||
|
|
||||||
private static boolean isOnCall; // TODO: proper handling
|
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
|
@Override
|
||||||
public void onReceive(Context context, Intent intent) {
|
public void onReceive(Context context, Intent intent) {
|
||||||
if (!TelephonyManager.ACTION_PHONE_STATE_CHANGED.equals(intent.getAction())) return;
|
if (!TelephonyManager.ACTION_PHONE_STATE_CHANGED.equals(intent.getAction())) return;
|
||||||
|
@ -56,11 +40,17 @@ public class CallReceiver extends BroadcastReceiver {
|
||||||
} else if (TelephonyManager.EXTRA_STATE_RINGING.equals(telephonyExtraState)) {
|
} else if (TelephonyManager.EXTRA_STATE_RINGING.equals(telephonyExtraState)) {
|
||||||
if (incomingNumber == null) return;
|
if (incomingNumber == null) return;
|
||||||
|
|
||||||
|
Settings settings = App.getSettings();
|
||||||
|
|
||||||
|
boolean blockCalls = settings.getBlockCalls();
|
||||||
|
boolean showNotifications = settings.getIncomingCallNotifications();
|
||||||
|
|
||||||
|
if (blockCalls || showNotifications) {
|
||||||
NumberInfo numberInfo = DatabaseSingleton.getNumberInfo(incomingNumber);
|
NumberInfo numberInfo = DatabaseSingleton.getNumberInfo(incomingNumber);
|
||||||
|
|
||||||
boolean blocked = false;
|
boolean blocked = false;
|
||||||
if (!isOnCall && numberInfo.rating == NumberInfo.Rating.NEGATIVE
|
if (!isOnCall && numberInfo.rating == NumberInfo.Rating.NEGATIVE
|
||||||
&& new Settings(context).getBlockCalls()) {
|
&& blockCalls) {
|
||||||
blocked = rejectCall(context);
|
blocked = rejectCall(context);
|
||||||
|
|
||||||
if (blocked) {
|
if (blocked) {
|
||||||
|
@ -68,7 +58,10 @@ public class CallReceiver extends BroadcastReceiver {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!blocked) NotificationHelper.showIncomingCallNotification(context, numberInfo);
|
if (!blocked && showNotifications) {
|
||||||
|
NotificationHelper.showIncomingCallNotification(context, numberInfo);
|
||||||
|
}
|
||||||
|
}
|
||||||
} else if(TelephonyManager.EXTRA_STATE_IDLE.equals(telephonyExtraState)) {
|
} else if(TelephonyManager.EXTRA_STATE_IDLE.equals(telephonyExtraState)) {
|
||||||
isOnCall = false;
|
isOnCall = false;
|
||||||
NotificationHelper.hideIncomingCallNotification(context, incomingNumber);
|
NotificationHelper.hideIncomingCallNotification(context, incomingNumber);
|
||||||
|
@ -86,7 +79,7 @@ public class CallReceiver extends BroadcastReceiver {
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
} catch (Exception e) {
|
} 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 recyclerView = findViewById(R.id.callLogList);
|
||||||
recyclerView.setAdapter(callLogAdapter);
|
recyclerView.setAdapter(callLogAdapter);
|
||||||
|
|
||||||
|
Settings settings = App.getSettings();
|
||||||
|
|
||||||
SwitchCompat notificationsSwitch = findViewById(R.id.notificationsEnabledSwitch);
|
SwitchCompat notificationsSwitch = findViewById(R.id.notificationsEnabledSwitch);
|
||||||
notificationsSwitch.setChecked(CallReceiver.isEnabled(this));
|
notificationsSwitch.setChecked(settings.getIncomingCallNotifications());
|
||||||
notificationsSwitch.setOnCheckedChangeListener((buttonView, isChecked)
|
notificationsSwitch.setOnCheckedChangeListener((buttonView, isChecked)
|
||||||
-> CallReceiver.setEnabled(MainActivity.this, isChecked));
|
-> settings.setIncomingCallNotifications(isChecked));
|
||||||
|
|
||||||
SwitchCompat blockCallsSwitch = findViewById(R.id.blockCallsSwitch);
|
SwitchCompat blockCallsSwitch = findViewById(R.id.blockCallsSwitch);
|
||||||
blockCallsSwitch.setChecked(new Settings(this).getBlockCalls());
|
blockCallsSwitch.setChecked(settings.getBlockCalls());
|
||||||
blockCallsSwitch.setOnCheckedChangeListener((buttonView, isChecked)
|
blockCallsSwitch.setOnCheckedChangeListener((buttonView, isChecked)
|
||||||
-> new Settings(this).setBlockCalls(isChecked));
|
-> settings.setBlockCalls(isChecked));
|
||||||
|
|
||||||
UpdateScheduler updateScheduler = UpdateScheduler.get(this);
|
UpdateScheduler updateScheduler = UpdateScheduler.get(this);
|
||||||
SwitchCompat autoUpdateSwitch = findViewById(R.id.autoUpdateEnabledSwitch);
|
SwitchCompat autoUpdateSwitch = findViewById(R.id.autoUpdateEnabledSwitch);
|
||||||
|
|
|
@ -5,20 +5,41 @@ import android.content.SharedPreferences;
|
||||||
|
|
||||||
public class Settings {
|
public class Settings {
|
||||||
|
|
||||||
|
private static final String PREF_INCOMING_CALL_NOTIFICATIONS = "incomingCallNotifications";
|
||||||
private static final String PREF_BLOCK_CALLS = "blockCalls";
|
private static final String PREF_BLOCK_CALLS = "blockCalls";
|
||||||
|
|
||||||
private final SharedPreferences pref;
|
private final SharedPreferences pref;
|
||||||
|
|
||||||
public Settings(Context context) {
|
Settings(Context context) {
|
||||||
pref = context.getSharedPreferences("yacb_preferences", Context.MODE_PRIVATE);
|
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() {
|
public boolean getBlockCalls() {
|
||||||
return pref.getBoolean(PREF_BLOCK_CALLS, false);
|
return getBoolean(PREF_BLOCK_CALLS);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setBlockCalls(boolean block) {
|
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