From 81e90c75d78d2bf70e562d96bf1a90fefdd8c058 Mon Sep 17 00:00:00 2001 From: Avery Dorgan Date: Wed, 23 Apr 2025 00:19:44 -0400 Subject: [PATCH 1/3] Upgrade every depend that needs it --- app/build.gradle | 28 ++--- .../smsmatrix/ExampleInstrumentedTest.java | 2 +- app/src/main/AndroidManifest.xml | 11 +- .../eu/droogers/smsmatrix/MMSMonitor.java | 105 ++++++++---------- .../eu/droogers/smsmatrix/MainActivity.java | 51 ++++----- .../java/eu/droogers/smsmatrix/Matrix.java | 33 ++---- .../eu/droogers/smsmatrix/MatrixService.java | 29 ++--- .../eu/droogers/smsmatrix/NotSendMesage.java | 4 +- .../droogers/smsmatrix/ReceiverListener.java | 24 ++-- app/src/main/res/layout/activity_main.xml | 7 +- app/src/main/res/values/styles.xml | 8 +- build.gradle | 14 +-- gradle/wrapper/gradle-wrapper.properties | 4 +- 13 files changed, 147 insertions(+), 173 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 4236d52..555e11b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -4,12 +4,12 @@ apply plugin: 'kotlin-kapt' apply plugin: 'realm-android' android { - compileSdkVersion 29 - buildToolsVersion '28.0.3' + compileSdkVersion 34 defaultConfig { applicationId "eu.droogers.smsmatrix" + namespace "eu.droogers.smsmatrix" minSdkVersion 23 - targetSdkVersion 29 + targetSdkVersion 34 versionCode 16 versionName "0.0.16" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" @@ -21,36 +21,30 @@ android { } } - repositories { - flatDir { - dir 'libs' - } - } - compileOptions { - sourceCompatibility 1.8 - targetCompatibility 1.8 + sourceCompatibility 21 + targetCompatibility 21 } } dependencies { - implementation 'androidx.appcompat:appcompat:1.1.0' - implementation 'androidx.preference:preference:1.1.0' + implementation 'androidx.appcompat:appcompat:1.7.0' + implementation 'androidx.preference:preference-ktx:1.2.1' implementation fileTree(dir: 'libs', include: ['*.jar']) + implementation 'androidx.test.ext:junit:1.2.1' androidTestImplementation('androidx.test.espresso:espresso-core:3.1.0', { exclude group: 'com.android.support', module: 'support-annotations' }) - implementation 'androidx.constraintlayout:constraintlayout:1.1.3' - testImplementation 'junit:junit:4.12' + implementation 'androidx.constraintlayout:constraintlayout:2.2.1' + testImplementation 'junit:junit:4.13.2' /************* Matrix SDK management **************/ implementation 'com.github.Bubu:matrix-android-sdk:v0.9.30-no-webrtc' - implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" implementation 'com.squareup.retrofit2:retrofit:2.6.0' implementation 'com.squareup.retrofit2:converter-gson:2.6.0' - implementation 'com.google.code.gson:gson:2.8.5' + implementation 'com.google.code.gson:gson:2.11.0' implementation 'com.squareup.okhttp3:okhttp:3.12.3' implementation 'com.squareup.okhttp3:logging-interceptor:3.12.3' implementation 'com.facebook.stetho:stetho:1.5.0' diff --git a/app/src/androidTest/java/eu/droogers/smsmatrix/ExampleInstrumentedTest.java b/app/src/androidTest/java/eu/droogers/smsmatrix/ExampleInstrumentedTest.java index 3288948..e920e5d 100644 --- a/app/src/androidTest/java/eu/droogers/smsmatrix/ExampleInstrumentedTest.java +++ b/app/src/androidTest/java/eu/droogers/smsmatrix/ExampleInstrumentedTest.java @@ -19,7 +19,7 @@ public class ExampleInstrumentedTest { @Test public void useAppContext() throws Exception { // Context of the app under test. - Context appContext = InstrumentationRegistry.getTargetContext(); + Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext(); assertEquals("eu.droogers.smsmatrix", appContext.getPackageName()); } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index b04e089..ea9e19e 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -3,6 +3,10 @@ xmlns:tools="http://schemas.android.com/tools" package="eu.droogers.smsmatrix"> + + @@ -18,7 +22,8 @@ android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme"> - + @@ -26,7 +31,9 @@ - + diff --git a/app/src/main/java/eu/droogers/smsmatrix/MMSMonitor.java b/app/src/main/java/eu/droogers/smsmatrix/MMSMonitor.java index 76c9764..281f6cc 100644 --- a/app/src/main/java/eu/droogers/smsmatrix/MMSMonitor.java +++ b/app/src/main/java/eu/droogers/smsmatrix/MMSMonitor.java @@ -10,16 +10,17 @@ import android.provider.Telephony; import android.util.Log; +import androidx.annotation.NonNull; + import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; +import java.util.Objects; public class MMSMonitor { - private MatrixService mainActivity; - private ContentResolver contentResolver = null; - private Context mainContext; - private Handler mmshandler = null; - private ContentObserver mmsObserver = null; + private final MatrixService mainActivity; + private final ContentResolver contentResolver; + private final ContentObserver mmsObserver; public boolean monitorStatus = false; private int mmsCount = 0; private static final String TAG = "MMSMonitor"; @@ -27,8 +28,7 @@ public class MMSMonitor { public MMSMonitor(final MatrixService mainActivity, final Context mainContext) { this.mainActivity = mainActivity; contentResolver = mainActivity.getContentResolver(); - this.mainContext = mainContext; - mmshandler = new MMSHandler(); + Handler mmshandler = new MMSHandler(); mmsObserver = new MMSObserver(mmshandler); Log.i(TAG, "***** Start MMS Monitor *****"); } @@ -37,29 +37,27 @@ public MMSMonitor(final MatrixService mainActivity, final Context mainContext) { public void startMMSMonitoring() { try { monitorStatus = false; - if (!monitorStatus) { - contentResolver.registerContentObserver( - Uri.parse("content://mms"), - true, - mmsObserver - ); - - // Save the count of MMS messages on start-up. - Uri uriMMSURI = Uri.parse("content://mms-sms"); - Cursor mmsCur = mainActivity.getContentResolver().query( - uriMMSURI, - null, - Telephony.Mms.MESSAGE_BOX + " = " + Telephony.Mms.MESSAGE_BOX_INBOX, - null, - Telephony.Mms._ID - ); - if (mmsCur != null && mmsCur.getCount() > 0) { - mmsCount = mmsCur.getCount(); - Log.d(TAG, "Init MMSCount = " + mmsCount); - } + contentResolver.registerContentObserver( + Uri.parse("content://mms"), + true, + mmsObserver + ); + + // Save the count of MMS messages on start-up. + Uri uriMMSURI = Uri.parse("content://mms-sms"); + Cursor mmsCur = mainActivity.getContentResolver().query( + uriMMSURI, + null, + Telephony.Mms.MESSAGE_BOX + " = " + Telephony.Mms.MESSAGE_BOX_INBOX, + null, + Telephony.Mms._ID + ); + if (mmsCur != null && mmsCur.getCount() > 0) { + mmsCount = mmsCur.getCount(); + Log.d(TAG, "Init MMSCount = " + mmsCount); } } catch (Exception e) { - Log.e(TAG, e.getMessage()); + Log.e(TAG, Objects.requireNonNull(e.getMessage())); } } @@ -67,24 +65,22 @@ public void startMMSMonitoring() { public void stopMMSMonitoring() { try { monitorStatus = false; - if (!monitorStatus){ - contentResolver.unregisterContentObserver(mmsObserver); - } + contentResolver.unregisterContentObserver(mmsObserver); } catch (Exception e) { - Log.e(TAG, e.getMessage()); + Log.e(TAG, Objects.requireNonNull(e.getMessage())); } } - class MMSHandler extends Handler { - public void handleMessage(final Message msg) { + static class MMSHandler extends Handler { + public void handleMessage(@NonNull final Message msg) { //Log.i(TAG, "Handler"); } } class MMSObserver extends ContentObserver { - private Handler mms_handle = null; + private final Handler mms_handle; public MMSObserver(final Handler mmshandle) { super(mmshandle); mms_handle = mmshandle; @@ -119,6 +115,7 @@ public void onChange(final boolean bSelfChange) { // Proceed if there is a new message. if (currMMSCount > mmsCount) { mmsCount = currMMSCount; + assert mmsCur != null; mmsCur.moveToLast(); // Get the message id and subject. @@ -130,7 +127,7 @@ public void onChange(final boolean bSelfChange) { byte[] mediaData = null; String message = ""; String address = ""; - String fileName = ""; + String fileName; String fileType = ""; String messageType = ""; @@ -143,6 +140,7 @@ public void onChange(final boolean bSelfChange) { null, Telephony.Mms.Part._ID ); + assert curPart != null; Log.d(TAG, "Parts records length = " + curPart.getCount()); curPart.moveToLast(); do { @@ -171,7 +169,7 @@ public void onChange(final boolean bSelfChange) { null, Telephony.Mms.Part._ID ); - for (int i = 0; i < curPart1.getColumnCount(); i++) + for (int i = 0; i < Objects.requireNonNull(curPart1).getColumnCount(); i++) { Log.d(TAG,"Column Name : " + curPart1.getColumnName(i)); } @@ -232,7 +230,7 @@ public void onChange(final boolean bSelfChange) { } } catch (Exception e) { - Log.e(TAG, e.getMessage()); + Log.e(TAG, Objects.requireNonNull(e.getMessage())); } } } @@ -251,6 +249,7 @@ private byte[] readMMSPart(String partId) { is = mContentResolver.openInputStream(partURI); byte[] buffer = new byte[256]; + assert is != null; int len = is.read(buffer); while (len >= 0) { baos.write(buffer, 0, len); @@ -275,28 +274,20 @@ private byte[] readMMSPart(String partId) { private boolean isImageType(String mime) { - boolean result = false; - if (mime.equalsIgnoreCase("image/jpg") - || mime.equalsIgnoreCase("image/jpeg") - || mime.equalsIgnoreCase("image/png") - || mime.equalsIgnoreCase("image/gif") - || mime.equalsIgnoreCase("image/bmp")) { - result = true; - } - return result; + return mime.equalsIgnoreCase("image/jpg") + || mime.equalsIgnoreCase("image/jpeg") + || mime.equalsIgnoreCase("image/png") + || mime.equalsIgnoreCase("image/gif") + || mime.equalsIgnoreCase("image/bmp"); } private boolean isVideoType(String mime) { - boolean result = false; - if (mime.equalsIgnoreCase("video/3gpp") - || mime.equalsIgnoreCase("video/3gpp2") - || mime.equalsIgnoreCase("video/avi") - || mime.equalsIgnoreCase("video/mp4") - || mime.equalsIgnoreCase("video/mpeg") - || mime.equalsIgnoreCase("video/webm")) { - result = true; - } - return result; + return mime.equalsIgnoreCase("video/3gpp") + || mime.equalsIgnoreCase("video/3gpp2") + || mime.equalsIgnoreCase("video/avi") + || mime.equalsIgnoreCase("video/mp4") + || mime.equalsIgnoreCase("video/mpeg") + || mime.equalsIgnoreCase("video/webm"); } } \ No newline at end of file diff --git a/app/src/main/java/eu/droogers/smsmatrix/MainActivity.java b/app/src/main/java/eu/droogers/smsmatrix/MainActivity.java index de21cfd..c73ccd7 100644 --- a/app/src/main/java/eu/droogers/smsmatrix/MainActivity.java +++ b/app/src/main/java/eu/droogers/smsmatrix/MainActivity.java @@ -43,13 +43,13 @@ protected void onCreate(Bundle savedInstanceState) { setContentView(R.layout.activity_main); sp = getSharedPreferences("settings", Context.MODE_PRIVATE); - botUsername = (EditText) findViewById(R.id.editText_botUsername); - botPassword = (EditText) findViewById(R.id.editText_botpassword); - username = (EditText) findViewById(R.id.editText_username); - device = (EditText) findViewById(R.id.editText_device); - hsUrl = (EditText) findViewById(R.id.editText_hsUrl); - syncDelay = (EditText) findViewById(R.id.editText_syncDelay); - syncTimeout = (EditText) findViewById(R.id.editText_syncTimeout); + botUsername = findViewById(R.id.editText_botUsername); + botPassword = findViewById(R.id.editText_botpassword); + username = findViewById(R.id.editText_username); + device = findViewById(R.id.editText_device); + hsUrl = findViewById(R.id.editText_hsUrl); + syncDelay = findViewById(R.id.editText_syncDelay); + syncTimeout = findViewById(R.id.editText_syncTimeout); botUsername.setText(sp.getString("botUsername", "")); botPassword.setText(sp.getString("botPassword", "")); @@ -60,28 +60,25 @@ protected void onCreate(Bundle savedInstanceState) { syncTimeout.setText(sp.getString("syncTimeout", "30")); - Button saveButton = (Button) findViewById(R.id.button_save); - saveButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (!checkPermissions()) { - askPermissions(); - } else { - SharedPreferences.Editor editor = sp.edit(); - editor.putString("botUsername", botUsername.getText().toString()); - editor.putString("botPassword", botPassword.getText().toString()); - editor.putString("username", username.getText().toString()); - editor.putString("device", device.getText().toString()); - editor.putString("hsUrl", hsUrl.getText().toString()); - editor.putString("syncDelay", syncDelay.getText().toString()); - editor.putString("syncTimeout", syncTimeout.getText().toString()); - editor.apply(); - - Log.e(TAG, "onClick: " + botUsername.getText().toString() ); - startService(); - } + Button saveButton = findViewById(R.id.button_save); + saveButton.setOnClickListener(v -> { + if (!checkPermissions()) { + askPermissions(); + } else { + SharedPreferences.Editor editor = sp.edit(); + editor.putString("botUsername", botUsername.getText().toString()); + editor.putString("botPassword", botPassword.getText().toString()); + editor.putString("username", username.getText().toString()); + editor.putString("device", device.getText().toString()); + editor.putString("hsUrl", hsUrl.getText().toString()); + editor.putString("syncDelay", syncDelay.getText().toString()); + editor.putString("syncTimeout", syncTimeout.getText().toString()); + editor.apply(); + Log.e(TAG, "onClick: " + botUsername.getText().toString() ); + startService(); } + }); if (!checkPermissions()) { askPermissions(); diff --git a/app/src/main/java/eu/droogers/smsmatrix/Matrix.java b/app/src/main/java/eu/droogers/smsmatrix/Matrix.java index be74969..2661e85 100644 --- a/app/src/main/java/eu/droogers/smsmatrix/Matrix.java +++ b/app/src/main/java/eu/droogers/smsmatrix/Matrix.java @@ -1,20 +1,14 @@ package eu.droogers.smsmatrix; import android.content.Context; -import android.content.Intent; import android.database.Cursor; import android.net.Uri; import android.provider.ContactsContract; import android.telephony.SmsManager; import android.util.Log; -import android.widget.Toast; - -import com.google.gson.JsonElement; import com.google.gson.JsonObject; -import org.json.JSONException; - import org.matrix.androidsdk.HomeServerConnectionConfig; import org.matrix.androidsdk.MXDataHandler; import org.matrix.androidsdk.MXSession; @@ -53,16 +47,13 @@ public class Matrix { Context context; MXSession session; int transaction; - private String tag = "Matrix"; - private List notSendMesages = new ArrayList<>(); + private final List notSendMessages = new ArrayList<>(); MXDataHandler dh; private IMXEventListener evLis; IMXStore store; String deviceName; - private String botUsername; - private String botHSUrl; - private String realUserid; + private final String realUserid; // Message type constants. public static final String MESSAGE_TYPE_TEXT = "m.text"; @@ -79,8 +70,6 @@ public Matrix(final Context context, String url, String botUsername, String botP realUserid = username; deviceName = device; - this.botUsername = botUsername; - botHSUrl = url; this.syncDelay = Integer.parseInt(syncDelay); this.syncTimeout = Integer.parseInt(syncTimeout); @@ -192,17 +181,18 @@ public void onSuccess(Void aVoid) { changeDisplayname(info, getContactName(phoneNumber, context)); Room room = store.getRoom(info); - SendMesageToRoom(room, body, type); + SendMessageToRoom(room, body, type); } }); } } else { changeDisplayname(room.getRoomId(), getContactName(phoneNumber, context)); - SendMesageToRoom(room, body, type); + SendMessageToRoom(room, body, type); } } else { + String tag = "Matrix"; Log.e(tag, "Error with sending message"); - notSendMesages.add(new NotSendMesage(phoneNumber, body, type)); + notSendMessages.add(new NotSendMessage(phoneNumber, body, type)); } } @@ -232,6 +222,7 @@ public void onUploadComplete(final String uploadId, final String contentUri) { JsonObject info = new JsonObject(); info.addProperty("mimetype", contentType); json.add("info", info); + assert room != null; session.getRoomsApiClient().sendEventToRoom( String.valueOf(transaction), room.getRoomId(), @@ -262,7 +253,7 @@ public void onSuccess(Void aVoid) { }); } - public void SendMesageToRoom(Room room, String body, String type) { + public void SendMessageToRoom(Room room, String body, String type) { Message msg = new Message(); msg.body = body; msg.msgtype = type; @@ -346,12 +337,12 @@ public void onSuccess(Void aVoid) { public void onEventStreamLoaded() { - sendMessageList(notSendMesages); - notSendMesages.clear(); + sendMessageList(notSendMessages); + notSendMessages.clear(); } - public void sendMessageList(List messages) { - for (NotSendMesage ms : messages) { + public void sendMessageList(List messages) { + for (NotSendMessage ms : messages) { sendMessage(ms.getPhone(), ms.getBody(), ms.getType()); } } diff --git a/app/src/main/java/eu/droogers/smsmatrix/MatrixService.java b/app/src/main/java/eu/droogers/smsmatrix/MatrixService.java index f8305c5..1f294db 100644 --- a/app/src/main/java/eu/droogers/smsmatrix/MatrixService.java +++ b/app/src/main/java/eu/droogers/smsmatrix/MatrixService.java @@ -4,7 +4,6 @@ import android.app.NotificationChannel; import android.app.NotificationManager; import android.app.Service; -import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; @@ -23,14 +22,6 @@ public class MatrixService extends Service { private Matrix mx; - private final String TAG = "MatrixService"; - private String botUsername; - private String botPassword; - private String username; - private String device; - private String hsUrl; - private String syncDelay; - private String syncTimeout; private MMSMonitor mms; private String mChannelId = ""; @@ -57,17 +48,18 @@ public int onStartCommand(Intent intent, int flags, int startId) { } SharedPreferences sp = getSharedPreferences("settings", Context.MODE_PRIVATE); - botUsername = sp.getString("botUsername", ""); - botPassword = sp.getString("botPassword", ""); - username = sp.getString("username", ""); - device = sp.getString("device", ""); - hsUrl = sp.getString("hsUrl", ""); - syncDelay = sp.getString("syncDelay", "12"); - syncTimeout = sp.getString("syncTimeout", "60"); - + String botUsername = sp.getString("botUsername", ""); + String botPassword = sp.getString("botPassword", ""); + String username = sp.getString("username", ""); + String device = sp.getString("device", ""); + String hsUrl = sp.getString("hsUrl", ""); + String syncDelay = sp.getString("syncDelay", "12"); + String syncTimeout = sp.getString("syncTimeout", "60"); + + String TAG = "MatrixService"; if (mx == null && !botUsername.isEmpty() && !botPassword.isEmpty() && !username.isEmpty() && !device.isEmpty() && !hsUrl.isEmpty() && !syncDelay.isEmpty() && !syncTimeout.isEmpty()) { mx = new Matrix(getApplication(), hsUrl, botUsername, botPassword, username, device, syncDelay, syncTimeout); - Log.e(TAG, "onStartCommand: " + hsUrl ); + Log.e(TAG, "onStartCommand: " + hsUrl); Toast.makeText(this, "service starting:", Toast.LENGTH_SHORT).show(); } else if (mx == null) { Toast.makeText(this, "Missing Information", Toast.LENGTH_SHORT).show(); @@ -79,6 +71,7 @@ public int onStartCommand(Intent intent, int flags, int startId) { String type = intent.getStringExtra("SendSms_type"); if (phone != null) { System.out.println(phone); + assert type != null; if (type.equals(Matrix.MESSAGE_TYPE_TEXT) || type.equals(Matrix.MESSAGE_TYPE_NOTICE)) { String body = intent.getStringExtra("SendSms_body"); diff --git a/app/src/main/java/eu/droogers/smsmatrix/NotSendMesage.java b/app/src/main/java/eu/droogers/smsmatrix/NotSendMesage.java index bf4ff09..c2e4a1b 100644 --- a/app/src/main/java/eu/droogers/smsmatrix/NotSendMesage.java +++ b/app/src/main/java/eu/droogers/smsmatrix/NotSendMesage.java @@ -4,12 +4,12 @@ * Created by gerben on 9-10-17. */ -class NotSendMesage { +class NotSendMessage { private String type; private String phone; private String body; - public NotSendMesage(String phone, String body, String type) { + public NotSendMessage(String phone, String body, String type) { this.phone = phone; this.body = body; this.type = type; diff --git a/app/src/main/java/eu/droogers/smsmatrix/ReceiverListener.java b/app/src/main/java/eu/droogers/smsmatrix/ReceiverListener.java index 23431a0..88339b1 100644 --- a/app/src/main/java/eu/droogers/smsmatrix/ReceiverListener.java +++ b/app/src/main/java/eu/droogers/smsmatrix/ReceiverListener.java @@ -11,6 +11,7 @@ import java.util.HashMap; import java.util.Map; +import java.util.Objects; /** * Created by gerben on 6-10-17. @@ -21,12 +22,12 @@ public class ReceiverListener extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { - if(intent.getAction().equals("android.provider.Telephony.SMS_RECEIVED")){ + if(Objects.equals(intent.getAction(), "android.provider.Telephony.SMS_RECEIVED")){ handleIncomingSMS(context, intent); - } else if (intent.getAction().equals("android.intent.action.PHONE_STATE")) { + } else if (Objects.equals(intent.getAction(), "android.intent.action.PHONE_STATE")) { handleIncomingCall(context, intent); } - else if (intent.getAction().equals("android.intent.action.BOOT_COMPLETED")) { + else if (Objects.equals(intent.getAction(), "android.intent.action.BOOT_COMPLETED")) { Intent intentServ = new Intent(context, MatrixService.class); ContextCompat.startForegroundService(context, intentServ); } @@ -34,7 +35,7 @@ else if (intent.getAction().equals("android.intent.action.BOOT_COMPLETED")) { private void handleIncomingSMS(Context context, Intent intent) { Map msg = null; - SmsMessage[] msgs = null; + SmsMessage[] msgs; Bundle bundle = intent.getExtras(); if (bundle != null && bundle.containsKey("pdus")) { @@ -42,39 +43,40 @@ private void handleIncomingSMS(Context context, Intent intent) { if (pdus != null) { int nbrOfpdus = pdus.length; - msg = new HashMap(nbrOfpdus); + msg = new HashMap<>(nbrOfpdus); msgs = new SmsMessage[nbrOfpdus]; // Send long SMS of same sender in one message for (int i = 0; i < nbrOfpdus; i++) { msgs[i] = SmsMessage.createFromPdu((byte[])pdus[i]); - String originatinAddress = msgs[i].getOriginatingAddress(); + String originationAddress = msgs[i].getOriginatingAddress(); // Check if index with number exists - if (!msg.containsKey(originatinAddress)) { + if (!msg.containsKey(originationAddress)) { // Index with number doesn't exist msg.put(msgs[i].getOriginatingAddress(), msgs[i].getMessageBody()); } else { // Number is there. - String previousparts = msg.get(originatinAddress); + String previousparts = msg.get(originationAddress); String msgString = previousparts + msgs[i].getMessageBody(); - msg.put(originatinAddress, msgString); + msg.put(originationAddress, msgString); } } } } + assert msg != null; for (String originatinAddress : msg.keySet()) { Utilities.sendMatrix(context, msg.get(originatinAddress), originatinAddress, Matrix.MESSAGE_TYPE_TEXT); } } private void handleIncomingCall(Context context, Intent intent) { - String cal_state = intent.getExtras().getString(TelephonyManager.EXTRA_STATE); + String cal_state = Objects.requireNonNull(intent.getExtras()).getString(TelephonyManager.EXTRA_STATE); String cal_from = intent.getExtras().getString(TelephonyManager.EXTRA_INCOMING_NUMBER); String body = cal_from; - switch(cal_state){ + switch(Objects.requireNonNull(cal_state)){ case "IDLE": body += " end call"; break; diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index b386f52..5c7d486 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -1,7 +1,5 @@ - @@ -27,6 +25,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="1" + android:autofillHints="" android:ems="10" android:hint="botSms" android:inputType="textPersonName" diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 550f148..dca8b8b 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -5,13 +5,13 @@ - + + + +