* Update all-in-one benchmark prompts for continuation task * Small fix * Add pure-text benchmark support for minicpm-v-2_6 * Support lookahead for model.llm generate of minicpmv * Add prompt reference * Small update * Small fix
760 lines
24 KiB
Text
760 lines
24 KiB
Text
Please complete the code given below.
|
|
app/src/main/java/com/matejdro/pebbledialer/callactions/EndCallAction.java
|
|
public class EndCallAction extends CallAction
|
|
{
|
|
public static final int END_CALL_ACTION_ID = 1;
|
|
|
|
private PendingIntent notificationEndCallIntent;
|
|
private static Method getITelephonyMethod;
|
|
|
|
public EndCallAction(CallModule callModule)
|
|
{
|
|
super(callModule);
|
|
|
|
try {
|
|
getITelephonyMethod = TelephonyManager.class.getDeclaredMethod("getITelephony", (Class[]) null);
|
|
getITelephonyMethod.setAccessible(true);
|
|
} catch (NoSuchMethodException e) {
|
|
Timber.e(e, "iTelephony end not supported on your phone!");
|
|
} catch (Exception e) {
|
|
Timber.e(e, "Error while acquiring iTelephony");
|
|
Crashlytics.logException(e);
|
|
}
|
|
|
|
}
|
|
|
|
public void registerNotificationEndCallIntent(PendingIntent notificationAnswerIntent)
|
|
{
|
|
this.notificationEndCallIntent = notificationAnswerIntent;
|
|
}
|
|
|
|
@Override
|
|
public void executeAction()
|
|
{
|
|
getCallModule().setCloseAutomaticallyAfterThisCall(true);
|
|
|
|
if (getCallModule().getService().getGlobalSettings().getBoolean("rootMode", false))
|
|
{
|
|
Timber.d("Ending call using root method...");
|
|
try {
|
|
Runtime.getRuntime().exec(new String[] {"su", "-c", "input keyevent 6"});
|
|
return;
|
|
} catch (IOException e) {
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
|
|
if (getCallModule().getCallState() == CallModule.CallState.RINGING && notificationEndCallIntent != null)
|
|
{
|
|
Timber.d("Ending call using notification method...");
|
|
|
|
try {
|
|
notificationEndCallIntent.send();
|
|
return;
|
|
} catch (PendingIntent.CanceledException e) {
|
|
}
|
|
}
|
|
|
|
if (getITelephonyMethod != null)
|
|
{
|
|
Timber.d("Ending call using generic iTelephony method...");
|
|
try
|
|
{
|
|
ITelephony iTelephony = (ITelephony) getITelephonyMethod.invoke(getCallModule().getService().getSystemService(Context.TELEPHONY_SERVICE), (Object[]) null);
|
|
iTelephony.endCall();
|
|
return;
|
|
}
|
|
catch (SecurityException e)
|
|
{
|
|
Timber.e("Cannot decline call, no CALL_PHONE permission.");
|
|
}
|
|
catch (Exception e) {
|
|
Timber.e(e, "Error while invoking iTelephony.endCall()");
|
|
Crashlytics.logException(e);
|
|
}
|
|
}
|
|
|
|
Timber.e("All end call options failed! Nothing is supported.");
|
|
}
|
|
|
|
@Override
|
|
public void onCallEnd()
|
|
{
|
|
notificationEndCallIntent = null; //Reset intent (there will be new intent at next call)
|
|
}
|
|
|
|
@Override
|
|
public int getIcon()
|
|
{
|
|
return CallAction.ICON_BUTTON_END_CALL;
|
|
}
|
|
|
|
public static EndCallAction get(CallModule callModule)
|
|
{
|
|
return (EndCallAction) callModule.getCallAction(END_CALL_ACTION_ID);
|
|
}
|
|
}
|
|
app/src/main/java/com/matejdro/pebbledialer/callactions/AnswerCallAction.java
|
|
public class AnswerCallAction extends CallAction
|
|
{
|
|
public static final int ANSWER_ACTION_ID = 0;
|
|
|
|
private PendingIntent notificationAnswerIntent;
|
|
|
|
public AnswerCallAction(CallModule callModule)
|
|
{
|
|
super(callModule);
|
|
}
|
|
|
|
public void registerNotificationAnswerIntent(PendingIntent notificationAnswerIntent)
|
|
{
|
|
this.notificationAnswerIntent = notificationAnswerIntent;
|
|
}
|
|
|
|
@Override
|
|
public void executeAction()
|
|
{
|
|
if (getCallModule().getCallState() != CallModule.CallState.RINGING)
|
|
return;
|
|
|
|
if (getCallModule().getService().getGlobalSettings().getBoolean("rootMode", false))
|
|
{
|
|
Timber.d("Answering using root method...");
|
|
try {
|
|
Runtime.getRuntime().exec(new String[] {"su", "-c", "input keyevent 5"});
|
|
return;
|
|
} catch (IOException e) {
|
|
e.printStackTrace();
|
|
}
|
|
|
|
}
|
|
|
|
if (notificationAnswerIntent != null)
|
|
{
|
|
Timber.d("Answering using notification method...");
|
|
|
|
try {
|
|
notificationAnswerIntent.send();
|
|
return;
|
|
} catch (PendingIntent.CanceledException e) {
|
|
}
|
|
}
|
|
|
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)
|
|
{
|
|
answerNativelyOreo();
|
|
}
|
|
else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
|
|
{
|
|
answerUsingMediaServer();
|
|
}
|
|
else
|
|
{
|
|
Timber.d("Answering using generic headset hook method...");
|
|
Intent buttonUp = new Intent(Intent.ACTION_MEDIA_BUTTON);
|
|
buttonUp.putExtra(Intent.EXTRA_KEY_EVENT, new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_HEADSETHOOK));
|
|
getCallModule().getService().sendOrderedBroadcast(buttonUp, "android.permission.CALL_PRIVILEGED");
|
|
}
|
|
|
|
}
|
|
|
|
@TargetApi(Build.VERSION_CODES.O)
|
|
private void answerNativelyOreo() {
|
|
TelecomManager telecomManager
|
|
= (TelecomManager) getCallModule().getService().getSystemService(Context.TELECOM_SERVICE);
|
|
|
|
Timber.d("Answering natively with Oreo.");
|
|
|
|
try {
|
|
telecomManager.acceptRingingCall();
|
|
} catch (SecurityException e) {
|
|
Timber.e("No accept call permission!");
|
|
}
|
|
}
|
|
|
|
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
|
|
private void answerUsingMediaServer()
|
|
{
|
|
Timber.d("Answering using media server method...");
|
|
|
|
MediaSessionManager mediaSessionManager = (MediaSessionManager) getCallModule().getService().getSystemService(Context.MEDIA_SESSION_SERVICE);
|
|
|
|
try {
|
|
List<MediaController> mediaControllerList = mediaSessionManager.getActiveSessions
|
|
(new ComponentName(getCallModule().getService(), JellybeanNotificationListener.class));
|
|
|
|
for (MediaController m : mediaControllerList) {
|
|
if ("com.android.server.telecom".equals(m.getPackageName())) {
|
|
Timber.d("Found telephony media controller!");
|
|
m.dispatchMediaButtonEvent(new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_HEADSETHOOK));
|
|
break;
|
|
}
|
|
}
|
|
} catch (SecurityException e) {
|
|
Timber.e("Notification service not running!");
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void onCallEnd()
|
|
{
|
|
notificationAnswerIntent = null; //Reset intent (there will be new intent at next call)
|
|
}
|
|
|
|
@Override
|
|
public int getIcon()
|
|
{
|
|
return CallAction.ICON_BUTTON_ANSWER;
|
|
}
|
|
|
|
public static AnswerCallAction get(CallModule callModule)
|
|
{
|
|
return (AnswerCallAction) callModule.getCallAction(ANSWER_ACTION_ID);
|
|
}
|
|
}
|
|
app/src/main/java/com/matejdro/pebbledialer/callactions/SMSReplyAction.java
|
|
public class SMSReplyAction extends CallAction
|
|
{
|
|
public static final int SMS_REPLY_ACTION_ID = 6;
|
|
|
|
public SMSReplyAction(CallModule callModule)
|
|
{
|
|
super(callModule);
|
|
}
|
|
|
|
@Override
|
|
public void executeAction()
|
|
{
|
|
ToggleRingerAction toggleRingerAction = ToggleRingerAction.get(getCallModule());
|
|
toggleRingerAction.mute();
|
|
|
|
SMSReplyModule smsReplyModule = SMSReplyModule.get(getCallModule().getService());
|
|
smsReplyModule.startSMSProcess(getCallModule().getNumber());
|
|
|
|
getCallModule().setCloseAutomaticallyAfterThisCall(false);
|
|
}
|
|
|
|
@Override
|
|
public void onCallEnd()
|
|
{
|
|
}
|
|
|
|
@Override
|
|
public int getIcon()
|
|
{
|
|
return CallAction.ICON_BUTTON_END_CALL;
|
|
}
|
|
|
|
public static SMSReplyAction get(CallModule callModule)
|
|
{
|
|
return (SMSReplyAction) callModule.getCallAction(SMS_REPLY_ACTION_ID);
|
|
}
|
|
}
|
|
app/src/main/java/com/matejdro/pebbledialer/callactions/ToggleMicrophoneAction.java
|
|
public class ToggleMicrophoneAction extends CallAction
|
|
{
|
|
public static final int TOGGLE_MICROPHONE_ACTION_ID = 3;
|
|
|
|
private boolean microphoneMuted = false;
|
|
|
|
public ToggleMicrophoneAction(CallModule callModule)
|
|
{
|
|
super(callModule);
|
|
}
|
|
|
|
@Override
|
|
public void executeAction()
|
|
{
|
|
if (getCallModule().getCallState() != CallModule.CallState.ESTABLISHED)
|
|
return;
|
|
|
|
microphoneMuted = !microphoneMuted;
|
|
|
|
if (getCallModule().getService().getGlobalSettings().getBoolean("rootMode", false))
|
|
{
|
|
String muteCommand;
|
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
|
|
muteCommand = "input keyevent 79";
|
|
else
|
|
muteCommand = "input keyevent 91";
|
|
try {
|
|
Runtime.getRuntime().exec(new String[] {"su", "-c", muteCommand});
|
|
} catch (IOException e) {
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
else
|
|
{
|
|
AudioManager audioManager = (AudioManager) getCallModule().getService().getSystemService(Context.AUDIO_SERVICE);
|
|
audioManager.setMicrophoneMute(microphoneMuted);
|
|
}
|
|
|
|
getCallModule().updatePebble();
|
|
}
|
|
|
|
@Override
|
|
public int getIcon()
|
|
{
|
|
return microphoneMuted ? CallAction.ICON_BUTTON_MIC_OFF : CallAction.ICON_BUTTON_MIC_ON;
|
|
}
|
|
|
|
public static ToggleMicrophoneAction get(CallModule callModule)
|
|
{
|
|
return (ToggleMicrophoneAction) callModule.getCallAction(TOGGLE_MICROPHONE_ACTION_ID);
|
|
}
|
|
}
|
|
app/src/main/java/com/matejdro/pebbledialer/callactions/ToggleRingerAction.java
|
|
public class ToggleRingerAction extends CallAction
|
|
{
|
|
public static final int TOGGLE_RINGER_ACTION_ID = 2;
|
|
|
|
private boolean isMutedViaAudioManager = false;
|
|
private int prevRingerMode = AudioManager.RINGER_MODE_NORMAL;
|
|
|
|
public ToggleRingerAction(CallModule callModule)
|
|
{
|
|
super(callModule);
|
|
}
|
|
|
|
@Override
|
|
public void executeAction()
|
|
{
|
|
if (getCallModule().getCallState() != CallModule.CallState.RINGING)
|
|
return;
|
|
|
|
AudioManager audioManager = (AudioManager) getCallModule().getService().getSystemService(Context.AUDIO_SERVICE);
|
|
|
|
getCallModule().setVibration(false);
|
|
|
|
if (!isMutedViaAudioManager)
|
|
{
|
|
if (getCallModule().getService().getGlobalSettings().getBoolean("rootMode", false))
|
|
{
|
|
Timber.d("Muting using root method...");
|
|
try {
|
|
Runtime.getRuntime().exec(new String[] {"su", "-c", "input keyevent " + KeyEvent.KEYCODE_VOLUME_DOWN});
|
|
} catch (IOException e) {
|
|
e.printStackTrace();
|
|
}
|
|
|
|
}
|
|
else if (canMuteRinger(getCallModule().getService()))
|
|
{
|
|
isMutedViaAudioManager = true;
|
|
prevRingerMode = audioManager.getRingerMode();
|
|
|
|
audioManager.setStreamSolo(AudioManager.STREAM_MUSIC, true);
|
|
audioManager.setRingerMode(AudioManager.RINGER_MODE_SILENT);
|
|
}
|
|
}
|
|
else if (canMuteRinger(getCallModule().getService()))
|
|
{
|
|
isMutedViaAudioManager = false;
|
|
audioManager.setStreamSolo(AudioManager.STREAM_MUSIC, false);
|
|
audioManager.setRingerMode(prevRingerMode);
|
|
}
|
|
|
|
getCallModule().updatePebble();
|
|
}
|
|
|
|
public void mute()
|
|
{
|
|
if (!isMutedViaAudioManager)
|
|
executeAction();
|
|
}
|
|
|
|
public static boolean canMuteRinger(Context context)
|
|
{
|
|
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M)
|
|
return true;
|
|
|
|
NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
|
|
return notificationManager.isNotificationPolicyAccessGranted();
|
|
}
|
|
|
|
@Override
|
|
public void onCallEnd()
|
|
{ if (isMutedViaAudioManager && canMuteRinger(getCallModule().getService()))
|
|
{
|
|
AudioManager audioManager = (AudioManager) getCallModule().getService().getSystemService(Context.AUDIO_SERVICE);
|
|
isMutedViaAudioManager = false;
|
|
audioManager.setStreamSolo(AudioManager.STREAM_MUSIC, false);
|
|
audioManager.setRingerMode(prevRingerMode);
|
|
}
|
|
|
|
getCallModule().setVibration(true);
|
|
}
|
|
|
|
@Override
|
|
public int getIcon()
|
|
{
|
|
return isMutedViaAudioManager ? CallAction.ICON_BUTTON_SPEAKER_OFF : CallAction.ICON_BUTTON_SPEKAER_ON;
|
|
}
|
|
|
|
public static ToggleRingerAction get(CallModule callModule)
|
|
{
|
|
return (ToggleRingerAction) callModule.getCallAction(TOGGLE_RINGER_ACTION_ID);
|
|
}
|
|
}
|
|
app/src/main/java/com/matejdro/pebbledialer/callactions/AnswerCallWithSpeakerAction.java
|
|
public class AnswerCallWithSpeakerAction extends CallAction
|
|
{
|
|
public static final int ANSWER_WITH_SPEAKER_ACTION_ID = 5;
|
|
|
|
private boolean enableSpeakerImmediately = false;
|
|
|
|
public AnswerCallWithSpeakerAction(CallModule callModule)
|
|
{
|
|
super(callModule);
|
|
}
|
|
|
|
|
|
@Override
|
|
public void executeAction()
|
|
{
|
|
if (getCallModule().getCallState() != CallModule.CallState.RINGING)
|
|
return;
|
|
|
|
enableSpeakerImmediately = true;
|
|
AnswerCallAction.get(getCallModule()).executeAction();
|
|
}
|
|
|
|
@Override
|
|
public void onCallEnd()
|
|
{
|
|
enableSpeakerImmediately = false; //Reset intent (there will be new intent at next call)
|
|
}
|
|
|
|
@Override
|
|
public void onPhoneOffhook()
|
|
{
|
|
if (enableSpeakerImmediately)
|
|
{
|
|
ToggleSpeakerAction speakerAction = ToggleSpeakerAction.get(getCallModule());
|
|
|
|
if (!speakerAction.isSpeakerphoneEnabled())
|
|
speakerAction.executeAction();
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public int getIcon()
|
|
{
|
|
return CallAction.ICON_BUTTON_ANSWER;
|
|
}
|
|
|
|
public static AnswerCallWithSpeakerAction get(CallModule callModule)
|
|
{
|
|
return (AnswerCallWithSpeakerAction) callModule.getCallAction(ANSWER_WITH_SPEAKER_ACTION_ID);
|
|
}
|
|
}
|
|
app/src/main/java/com/matejdro/pebbledialer/callactions/VolumeDownAction.java
|
|
public class VolumeDownAction extends CallAction
|
|
{
|
|
public static final int VOLUME_DOWN_ACTION_ID = 7;
|
|
|
|
public VolumeDownAction(CallModule callModule)
|
|
{
|
|
super(callModule);
|
|
}
|
|
|
|
@Override
|
|
public void executeAction()
|
|
{
|
|
if (getCallModule().getCallState() != CallModule.CallState.ESTABLISHED)
|
|
return;
|
|
|
|
AudioManager audioManager = (AudioManager) getCallModule().getService().getSystemService(Context.AUDIO_SERVICE);
|
|
audioManager.adjustStreamVolume(AudioManager.STREAM_VOICE_CALL, AudioManager.ADJUST_LOWER, 0);
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
public int getIcon()
|
|
{
|
|
return CallAction.ICON_BUTTON_VOLUME_DOWN;
|
|
}
|
|
}
|
|
app/src/main/java/com/matejdro/pebbledialer/callactions/CallAction.java
|
|
public abstract class CallAction
|
|
{
|
|
public static final int ICON_BUTTON_ANSWER = 0;
|
|
public static final int ICON_BUTTON_END_CALL = 1;
|
|
public static final int ICON_BUTTON_MIC_ON = 2;
|
|
public static final int ICON_BUTTON_MIC_OFF = 3;
|
|
public static final int ICON_BUTTON_SPEKAER_ON = 4;
|
|
public static final int ICON_BUTTON_SPEAKER_OFF = 5;
|
|
public static final int ICON_BUTTON_VOLUME_DOWN = 6;
|
|
public static final int ICON_BUTTON_VOLUME_UP = 7;
|
|
public static final int ICON_BLANK = 0xFF;
|
|
|
|
private CallModule callModule;
|
|
|
|
public CallAction(CallModule callModule)
|
|
{
|
|
this.callModule = callModule;
|
|
}
|
|
|
|
public CallModule getCallModule()
|
|
{
|
|
return callModule;
|
|
}
|
|
|
|
public void onPhoneOffhook()
|
|
{
|
|
|
|
}
|
|
|
|
public void onCallRinging()
|
|
{
|
|
|
|
}
|
|
|
|
public void onCallEnd()
|
|
{
|
|
|
|
}
|
|
|
|
public abstract void executeAction();
|
|
public abstract int getIcon();
|
|
}
|
|
app/src/main/java/com/matejdro/pebbledialer/notifications/JellybeanNotificationListener.java
|
|
@TargetApi(value = Build.VERSION_CODES.JELLY_BEAN_MR2)
|
|
public class JellybeanNotificationListener extends NotificationListenerService {
|
|
private static JellybeanNotificationListener instance = null;
|
|
|
|
@Override
|
|
public void onDestroy() {
|
|
Timber.d("Notification Listener stopped...");
|
|
super.onDestroy();
|
|
|
|
instance = null;
|
|
}
|
|
|
|
@Override
|
|
public void onCreate() {
|
|
Timber.d("Creating Notification Listener...");
|
|
super.onCreate();
|
|
|
|
instance = this;
|
|
}
|
|
|
|
public static boolean isActive()
|
|
{
|
|
return instance != null;
|
|
}
|
|
|
|
@TargetApi(value = Build.VERSION_CODES.LOLLIPOP)
|
|
public static boolean isPhoneInDoNotInterrupt()
|
|
{
|
|
if (instance == null)
|
|
return false;
|
|
|
|
int interruptionFilter = instance.getCurrentInterruptionFilter();
|
|
Timber.d("Interrupt filter: %d", interruptionFilter);
|
|
return interruptionFilter != NotificationListenerService.INTERRUPTION_FILTER_ALL && interruptionFilter != 0;
|
|
}
|
|
|
|
@Override
|
|
public void onNotificationPosted(final StatusBarNotification sbn) {
|
|
Timber.d("Got new jellybean notification");
|
|
NotificationHandler.newNotification(JellybeanNotificationListener.this, sbn.getPackageName(), sbn.getNotification());
|
|
|
|
|
|
}
|
|
|
|
@Override
|
|
public void onNotificationRemoved(StatusBarNotification sbn) {
|
|
}
|
|
}
|
|
app/src/main/java/com/matejdro/pebbledialer/callactions/ToggleSpeakerAction.java
|
|
public class ToggleSpeakerAction extends CallAction
|
|
{
|
|
public static final int TOGGLE_SPEAKER_ACTION_ID = 4;
|
|
|
|
private boolean speakerphoneEnabled = false;
|
|
|
|
public ToggleSpeakerAction(CallModule callModule)
|
|
{
|
|
super(callModule);
|
|
}
|
|
|
|
@Override
|
|
public void executeAction()
|
|
{
|
|
if (getCallModule().getCallState() != CallModule.CallState.ESTABLISHED)
|
|
return;
|
|
|
|
AudioManager audioManager = (AudioManager) getCallModule().getService().getSystemService(Context.AUDIO_SERVICE);
|
|
|
|
speakerphoneEnabled = !speakerphoneEnabled;
|
|
audioManager.setSpeakerphoneOn(speakerphoneEnabled);
|
|
|
|
getCallModule().updatePebble();
|
|
}
|
|
|
|
public boolean isSpeakerphoneEnabled()
|
|
{
|
|
return speakerphoneEnabled;
|
|
}
|
|
|
|
private void updateSpeakerphoneEnabled()
|
|
{
|
|
AudioManager audioManager = (AudioManager) getCallModule().getService().getSystemService(Context.AUDIO_SERVICE);
|
|
speakerphoneEnabled = audioManager.isSpeakerphoneOn();
|
|
}
|
|
|
|
@Override
|
|
public void onPhoneOffhook()
|
|
{
|
|
updateSpeakerphoneEnabled();
|
|
}
|
|
|
|
@Override
|
|
public int getIcon()
|
|
{
|
|
return speakerphoneEnabled ? ICON_BUTTON_SPEKAER_ON : ICON_BUTTON_SPEAKER_OFF;
|
|
}
|
|
|
|
public static ToggleSpeakerAction get(CallModule callModule)
|
|
{
|
|
return (ToggleSpeakerAction) callModule.getCallAction(TOGGLE_SPEAKER_ACTION_ID);
|
|
}
|
|
}
|
|
app/src/main/java/com/matejdro/pebbledialer/callactions/VolumeUpAction.java
|
|
public class VolumeUpAction extends CallAction
|
|
{
|
|
public static final int VOLUME_UP_ACTION_ID = 8;
|
|
|
|
public VolumeUpAction(CallModule callModule)
|
|
{
|
|
super(callModule);
|
|
}
|
|
|
|
@Override
|
|
public void executeAction()
|
|
{
|
|
if (getCallModule().getCallState() != CallModule.CallState.ESTABLISHED)
|
|
return;
|
|
|
|
AudioManager audioManager = (AudioManager) getCallModule().getService().getSystemService(Context.AUDIO_SERVICE);
|
|
audioManager.adjustStreamVolume(AudioManager.STREAM_VOICE_CALL, AudioManager.ADJUST_RAISE, 0);
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
public int getIcon()
|
|
{
|
|
return CallAction.ICON_BUTTON_VOLUME_UP;
|
|
}
|
|
}
|
|
app/src/main/java/com/matejdro/pebbledialer/callactions/DummyAction.java
|
|
public class DummyAction extends CallAction
|
|
{
|
|
public static final int DUMMY_ACTION_ID = 999;
|
|
|
|
|
|
public DummyAction(CallModule callModule)
|
|
{
|
|
super(callModule);
|
|
|
|
}
|
|
|
|
@Override
|
|
public void executeAction()
|
|
{
|
|
}
|
|
|
|
@Override
|
|
public int getIcon()
|
|
{
|
|
return CallAction.ICON_BLANK;
|
|
}
|
|
|
|
public static DummyAction get(CallModule callModule)
|
|
{
|
|
return (DummyAction) callModule.getCallAction(DUMMY_ACTION_ID);
|
|
}
|
|
}
|
|
package com.matejdro.pebbledialer.modules;
|
|
import android.app.PendingIntent;
|
|
import android.content.Intent;
|
|
import android.content.SharedPreferences;
|
|
import android.database.Cursor;
|
|
import android.graphics.Bitmap;
|
|
import android.net.Uri;
|
|
import android.os.Build;
|
|
import android.provider.ContactsContract;
|
|
import android.provider.MediaStore;
|
|
import android.service.notification.NotificationListenerService;
|
|
import android.telephony.TelephonyManager;
|
|
import android.util.SparseArray;
|
|
import com.getpebble.android.kit.util.PebbleDictionary;
|
|
import com.matejdro.pebblecommons.pebble.CommModule;
|
|
import com.matejdro.pebblecommons.pebble.PebbleCommunication;
|
|
import com.matejdro.pebblecommons.pebble.PebbleImageToolkit;
|
|
import com.matejdro.pebblecommons.pebble.PebbleTalkerService;
|
|
import com.matejdro.pebblecommons.pebble.PebbleUtil;
|
|
import com.matejdro.pebblecommons.util.ContactUtils;
|
|
import com.matejdro.pebblecommons.util.Size;
|
|
import com.matejdro.pebblecommons.util.TextUtil;
|
|
import com.matejdro.pebblecommons.vibration.PebbleVibrationPattern;
|
|
import com.matejdro.pebbledialer.callactions.AnswerCallAction;
|
|
import com.matejdro.pebbledialer.callactions.AnswerCallWithSpeakerAction;
|
|
import com.matejdro.pebbledialer.callactions.CallAction;
|
|
import com.matejdro.pebbledialer.callactions.DummyAction;
|
|
import com.matejdro.pebbledialer.callactions.EndCallAction;
|
|
import com.matejdro.pebbledialer.callactions.SMSReplyAction;
|
|
import com.matejdro.pebbledialer.callactions.ToggleMicrophoneAction;
|
|
import com.matejdro.pebbledialer.callactions.ToggleRingerAction;
|
|
import com.matejdro.pebbledialer.callactions.ToggleSpeakerAction;
|
|
import com.matejdro.pebbledialer.callactions.VolumeDownAction;
|
|
import com.matejdro.pebbledialer.callactions.VolumeUpAction;
|
|
import com.matejdro.pebbledialer.notifications.JellybeanNotificationListener;
|
|
import java.io.IOException;
|
|
import java.util.Calendar;
|
|
import java.util.List;
|
|
import timber.log.Timber;
|
|
|
|
|
|
|
|
|
|
|
|
public class CallModule extends CommModule
|
|
{
|
|
public static final String INTENT_CALL_STATUS = "CallStatus";
|
|
public static final String INTENT_ACTION_FROM_NOTIFICATION = "ActionFromNotification";
|
|
|
|
public static int MODULE_CALL = 1;
|
|
|
|
private SparseArray<CallAction> actions = new SparseArray<CallAction>();
|
|
|
|
private boolean updateRequired;
|
|
private boolean identityUpdateRequired;
|
|
private boolean callerNameUpdateRequired;
|
|
private int callerImageNextByte = -1;
|
|
|
|
private String number = "Outgoing Call";
|
|
private String name = null;
|
|
private String type = null;
|
|
private Bitmap callerImage = null;
|
|
private byte[] callerImageBytes;
|
|
|
|
private CallState callState = CallState.NO_CALL;
|
|
|
|
private boolean vibrating;
|
|
private boolean closeAutomaticallyAfterThisCall = true;
|
|
|
|
long callStartTime;
|
|
|
|
public CallModule(PebbleTalkerService service)
|
|
{
|
|
super(service);
|
|
|
|
service.registerIntent(INTENT_CALL_STATUS, this);
|
|
service.registerIntent(INTENT_ACTION_FROM_NOTIFICATION, this);
|
|
|
|
registerCallAction(new AnswerCallAction(this), AnswerCallAction.ANSWER_ACTION_ID);
|
|
registerCallAction(new EndCallAction(this), EndCallAction.END_CALL_ACTION_ID);Next line of code:
|