diff --git a/app/build.gradle b/app/build.gradle index c3b93ff..bea1ed1 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -2,12 +2,12 @@ apply plugin: 'com.android.application' android { namespace 'org.sil.hearthis' - compileSdk 35 + compileSdk 36 defaultConfig { applicationId "org.sil.hearthis" minSdk 21 - targetSdk 35 + targetSdk 36 testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner' } diff --git a/app/src/main/java/org/sil/hearthis/ChooseBookActivity.java b/app/src/main/java/org/sil/hearthis/ChooseBookActivity.java index ed874a3..741ca98 100644 --- a/app/src/main/java/org/sil/hearthis/ChooseBookActivity.java +++ b/app/src/main/java/org/sil/hearthis/ChooseBookActivity.java @@ -3,7 +3,13 @@ import android.content.Context; import android.content.Intent; import android.os.Bundle; + +import androidx.activity.EdgeToEdge; import androidx.appcompat.app.AppCompatActivity; +import androidx.core.graphics.Insets; +import androidx.core.view.ViewCompat; +import androidx.core.view.WindowInsetsCompat; + import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; @@ -19,8 +25,19 @@ public class ChooseBookActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { + EdgeToEdge.enable(this); super.onCreate(savedInstanceState); setContentView(R.layout.activity_choose_book); + + View mainLayout = findViewById(R.id.booksFlow); + if (mainLayout != null) { + ViewCompat.setOnApplyWindowInsetsListener(mainLayout, (v, insets) -> { + Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars()); + v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom); + return insets; + }); + } + IScriptProvider scripture = ServiceLocator.getServiceLocator().init(this).getScriptProvider(); Project project = new Project("Sample", scripture); getSupportActionBar().setTitle(R.string.choose_book); diff --git a/app/src/main/java/org/sil/hearthis/ChooseChapterActivity.java b/app/src/main/java/org/sil/hearthis/ChooseChapterActivity.java index 6aba68a..3451a14 100644 --- a/app/src/main/java/org/sil/hearthis/ChooseChapterActivity.java +++ b/app/src/main/java/org/sil/hearthis/ChooseChapterActivity.java @@ -5,7 +5,13 @@ import android.content.Context; import android.content.Intent; import android.os.Bundle; + +import androidx.activity.EdgeToEdge; import androidx.appcompat.app.AppCompatActivity; +import androidx.core.graphics.Insets; +import androidx.core.view.ViewCompat; +import androidx.core.view.WindowInsetsCompat; + import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -14,8 +20,19 @@ public class ChooseChapterActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { + EdgeToEdge.enable(this); super.onCreate(savedInstanceState); setContentView(R.layout.activity_chapters); + + View mainLayout = findViewById(R.id.chapsFlow); + if (mainLayout != null) { + ViewCompat.setOnApplyWindowInsetsListener(mainLayout, (v, insets) -> { + Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars()); + v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom); + return insets; + }); + } + getSupportActionBar().setTitle(R.string.choose_chapter); ServiceLocator.getServiceLocator().init(this); Intent intent = getIntent(); diff --git a/app/src/main/java/org/sil/hearthis/ChooseProjectActivity.java b/app/src/main/java/org/sil/hearthis/ChooseProjectActivity.java index 5ef3d83..90933f8 100644 --- a/app/src/main/java/org/sil/hearthis/ChooseProjectActivity.java +++ b/app/src/main/java/org/sil/hearthis/ChooseProjectActivity.java @@ -1,7 +1,13 @@ package org.sil.hearthis; import android.os.Bundle; + +import androidx.activity.EdgeToEdge; import androidx.appcompat.app.AppCompatActivity; +import androidx.core.graphics.Insets; +import androidx.core.view.ViewCompat; +import androidx.core.view.WindowInsetsCompat; + import android.view.View; import android.widget.AdapterView; import android.widget.ArrayAdapter; @@ -16,8 +22,19 @@ public class ChooseProjectActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { + EdgeToEdge.enable(this); super.onCreate(savedInstanceState); setContentView(R.layout.activity_choose_project); + + View mainLayout = findViewById(R.id.projects_list); + if (mainLayout != null) { + ViewCompat.setOnApplyWindowInsetsListener(mainLayout, (v, insets) -> { + Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars()); + v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom); + return insets; + }); + } + getSupportActionBar().setTitle(R.string.choose_project); ServiceLocator.getServiceLocator().init(this); final ArrayList rootDirs = getProjectRootDirectories(); diff --git a/app/src/main/java/org/sil/hearthis/RecordActivity.java b/app/src/main/java/org/sil/hearthis/RecordActivity.java index 6e508e1..cfc0062 100644 --- a/app/src/main/java/org/sil/hearthis/RecordActivity.java +++ b/app/src/main/java/org/sil/hearthis/RecordActivity.java @@ -23,6 +23,8 @@ import android.media.MediaRecorder.AudioSource; import android.media.MediaRecorder.OutputFormat; import android.os.Bundle; + +import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; import androidx.core.app.ActivityCompat; import androidx.core.content.ContextCompat; @@ -367,7 +369,7 @@ public void run() { recorder.setAudioEncodingBitRate(44100); File file = new File(_recordingFilePath); File dir = file.getParentFile(); - if (!dir.exists()) + if (!dir.exists()) dir.mkdirs(); recorder.setOutputFile(file.getAbsolutePath()); try { @@ -414,20 +416,20 @@ private boolean requestRecordAudioPermission() { @Override public void onRequestPermissionsResult( int requestCode, - String permissions[], - int[] grantResults) { - switch (requestCode) { - case RECORD_ACTIVITY_RECORD_PERMISSION: - if (grantResults.length > 0) { + @NonNull String[] permissions, + @NonNull int[] grantResults) { + super.onRequestPermissionsResult(requestCode, permissions, grantResults); + if (requestCode == RECORD_ACTIVITY_RECORD_PERMISSION) { + if (grantResults.length > 0) { // We seem to get spurious callbacks with no results at all, before the user // even responds. This might be because multiple events on the record button // result in multiple requests. So just ignore any callback with no results. - if (grantResults[0] != PackageManager.PERMISSION_GRANTED) { - // The user denied permission to record audio. We can't do much useful. - // This toast just might help. - Toast.makeText(this, R.string.no_use_without_record, Toast.LENGTH_LONG).show(); - } + if (grantResults[0] != PackageManager.PERMISSION_GRANTED) { + // The user denied permission to record audio. We can't do much useful. + // This toast just might help. + Toast.makeText(this, R.string.no_use_without_record, Toast.LENGTH_LONG).show(); } + } } } @@ -464,7 +466,7 @@ else if (recorder != null) { // Press not long enough; treat as failure. new AlertDialog.Builder(this) //.setTitle("Too short!") - .setMessage("Hold down the record button while talking, and only let it go when you're done.") + .setMessage(R.string.record_too_short) .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { // nothing to do diff --git a/app/src/main/java/org/sil/hearthis/SyncActivity.java b/app/src/main/java/org/sil/hearthis/SyncActivity.java index aca2526..eb650cf 100644 --- a/app/src/main/java/org/sil/hearthis/SyncActivity.java +++ b/app/src/main/java/org/sil/hearthis/SyncActivity.java @@ -255,27 +255,12 @@ private String getOurIpAddress() { } catch (SocketException e) { // TODO Auto-generated catch block e.printStackTrace(); - ip += "Something Wrong! " + e.toString() + "\n"; + ip = getString(R.string.ip_error, e.toString()); } return ip; } - @Override - public boolean onOptionsItemSelected(MenuItem item) { - // Handle action bar item clicks here. The action bar will - // automatically handle clicks on the Home/Up button, so long - // as you specify a parent activity in AndroidManifest.xml. - int id = item.getItemId(); - - //noinspection SimplifiableIfStatement - if (id == R.id.action_settings) { - return true; - } - - return super.onOptionsItemSelected(item); - } - @Override public void onNotification(String message) { AcceptNotificationHandler.removeNotificationListener(this); @@ -297,7 +282,6 @@ public void run() { } Date lastProgress = new Date(); - boolean stopUpdatingProgress = false; @Override public void receivingFile(final String name) { @@ -306,7 +290,7 @@ public void receivingFile(final String name) { if (new Date().getTime() - lastProgress.getTime() < 1000) return; lastProgress = new Date(); - setProgress("receiving " + name); + setProgress(getString(R.string.receiving_file, name)); } @Override @@ -314,7 +298,7 @@ public void sendingFile(final String name) { if (new Date().getTime() - lastProgress.getTime() < 1000) return; lastProgress = new Date(); - setProgress("sending " + name); + setProgress(getString(R.string.sending_file, name)); } // This class is responsible to send one message packet to the IP address we diff --git a/app/src/main/java/org/sil/hearthis/SyncService.java b/app/src/main/java/org/sil/hearthis/SyncService.java index 179e78f..dab894b 100644 --- a/app/src/main/java/org/sil/hearthis/SyncService.java +++ b/app/src/main/java/org/sil/hearthis/SyncService.java @@ -61,7 +61,7 @@ private void createNotificationChannel() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { NotificationChannel serviceChannel = new NotificationChannel( CHANNEL_ID, - "Sync Service Channel", + getString(R.string.sync_service_channel_name), NotificationManager.IMPORTANCE_LOW ); NotificationManager manager = getSystemService(NotificationManager.class); diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 471d647..45c5e43 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -31,4 +31,9 @@ Permission wanted OK Cancel + Hold down the record button while talking, and only let it go when you\'re done. + Sync Service Channel + receiving %1$s + sending %1$s + Something Wrong! %1$s