Skip to content

Commit

Permalink
Basic com.termux.shared purgging
Browse files Browse the repository at this point in the history
  • Loading branch information
fornwall committed Oct 24, 2023
1 parent 392374d commit e51f8d2
Show file tree
Hide file tree
Showing 72 changed files with 288 additions and 1,108 deletions.
16 changes: 1 addition & 15 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -28,9 +28,6 @@ android {
versionCode 118
versionName "0.118.0"

if (appVersionName) versionName = appVersionName
validateVersionName(versionName)

externalNativeBuild {
ndkBuild {
cFlags "-std=c11", "-Wall", "-Wextra", "-Werror", "-Os", "-fno-stack-protector", "-Wl,--gc-sections"
Expand Down Expand Up @@ -80,10 +77,6 @@ android {
}
}

lint {
disable 'ProtectedPermissions'
}

testOptions {
unitTests {
includeAndroidResources = true
Expand Down Expand Up @@ -115,19 +108,12 @@ dependencies {
testImplementation "org.robolectric:robolectric:4.10"
}

task versionName {
tasks.register('versionName') {
doLast {
print android.defaultConfig.versionName
}
}

def validateVersionName(String versionName) {
// https://semver.org/spec/v2.0.0.html#is-there-a-suggested-regular-expression-regex-to-check-a-semver-string
// ^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$
if (!java.util.regex.Pattern.matches("^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?\$", versionName))
throw new GradleException("The versionName '" + versionName + "' is not a valid version as per semantic version '2.0.0' spec in the format 'major.minor.patch(-prerelease)(+buildmetadata)'. https://semver.org/spec/v2.0.0.html.")
}

def downloadBootstrap(String arch, String expectedChecksum, String version) {
def digest = java.security.MessageDigest.getInstance("SHA-256")

Expand Down
3 changes: 1 addition & 2 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:installLocation="internalOnly"
android:sharedUserLabel="@string/shared_user_label">
android:installLocation="internalOnly">

<uses-feature
android:name="android.hardware.touchscreen"
Expand Down
2 changes: 1 addition & 1 deletion settings.gradle
Original file line number Diff line number Diff line change
@@ -1 +1 @@
include ':app', ':terminal-emulator', ':terminal-view', ':termux-styling', ':termux-boot', ':termux-api', ':termux-widget'
include ':app', ':terminal-emulator', ':terminal-view', ':termux-styling', ':termux-boot', ':termux-api', ':termux-widget', ':termux-tasker'
26 changes: 1 addition & 25 deletions termux-api/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -3,19 +3,16 @@ apply plugin: 'com.android.application'
android {
namespace "com.termux.api"

compileSdkVersion project.properties.compileSdkVersion.toInteger()
def appVersionName = System.getenv("TERMUX_API_APP_VERSION_NAME") ?: ""
def apkVersionTag = System.getenv("TERMUX_API_APK_VERSION_TAG") ?: ""

defaultConfig {
compileSdk project.properties.compileSdkVersion.toInteger()
minSdkVersion project.properties.minSdkVersion.toInteger()
targetSdkVersion project.properties.targetSdkVersion.toInteger()
versionCode 51
versionName "0.50.1"

if (appVersionName) versionName = appVersionName
validateVersionName(versionName)

manifestPlaceholders.TERMUX_PACKAGE_NAME = "com.termux"
manifestPlaceholders.TERMUX_APP_NAME = "Termux"
manifestPlaceholders.TERMUX_API_APP_NAME = "Termux:API"
Expand Down Expand Up @@ -56,37 +53,16 @@ android {
}
}
}

packagingOptions {
// Remove terminal-emulator and termux-shared JNI libs added via termux-shared dependency
exclude 'lib/*/libtermux.so'
exclude 'lib/*/liblocal-socket.so'
}
}

dependencies {
implementation 'com.google.android.material:material:1.10.0'
implementation 'androidx.biometric:biometric:1.2.0-alpha05'
implementation 'androidx.media:media:1.6.0'
implementation 'com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava'

implementation 'com.termux.termux-app:termux-shared:8c1749ef96'
// Use if below libraries are published locally by termux-app with `./gradlew publishReleasePublicationToMavenLocal` and used with `mavenLocal()`.
// If updates are done, republish there and sync project with gradle files here
// https://github.com/termux/termux-app/wiki/Termux-Libraries
// implementation 'com.termux:termux-shared:0.118.0'
}

task versionName {
doLast {
print android.defaultConfig.versionName
}
}

@SuppressWarnings("UnnecessaryQualifiedReference")
static def validateVersionName(String versionName) {
// https://semver.org/spec/v2.0.0.html#is-there-a-suggested-regular-expression-regex-to-check-a-semver-string
// ^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$
if (!java.util.regex.Pattern.matches("^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?\$", versionName))
throw new GradleException("The versionName '" + versionName + "' is not a valid version as per semantic version '2.0.0' spec in the format 'major.minor.patch(-prerelease)(+buildmetadata)'. https://semver.org/spec/v2.0.0.html.")
}
2 changes: 1 addition & 1 deletion termux-api/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@

<activity
android:name=".activities.TermuxAPIActivity"
android:theme="@style/Theme.BaseActivity.DayNight.NoActionBar"
android:theme="@android:style/Theme.DeviceDefault"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
Expand Down
4 changes: 0 additions & 4 deletions termux-api/src/main/java/com/termux/api/KeepAliveService.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,16 +6,12 @@

import androidx.annotation.Nullable;

import com.termux.shared.logger.Logger;

public class KeepAliveService extends Service {

private static final String LOG_TAG = "KeepAliveService";

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Logger.logDebug(LOG_TAG, "onStartCommand");

return Service.START_STICKY;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ public class SocketListener {

private static final String LOG_TAG = "SocketListener";

public static void createSocketListener(Application app, Context context) {
public static void createSocketListener(Application app) {
if (listener == null) {
listener = new Thread(() -> {
try (LocalServerSocket listen = new LocalServerSocket(LISTEN_ADDRESS)) {
Expand Down
10 changes: 0 additions & 10 deletions termux-api/src/main/java/com/termux/api/TermuxAPIApplication.java
Original file line number Diff line number Diff line change
@@ -1,21 +1,11 @@
package com.termux.api;

import android.app.Application;
import android.content.Context;

import com.termux.api.util.ResultReturner;
import com.termux.shared.logger.Logger;
import com.termux.shared.termux.TermuxConstants;
import com.termux.shared.termux.crash.TermuxCrashUtils;
import com.termux.shared.termux.settings.preferences.TermuxAPIAppSharedPreferences;


public class TermuxAPIApplication extends Application {

public void onCreate() {
super.onCreate();
// Set crash handler for the app
//ResultReturner.setContext(this);
SocketListener.createSocketListener(this);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import android.content.Intent;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Button;
Expand All @@ -11,20 +12,12 @@
import androidx.appcompat.app.AppCompatActivity;

import com.termux.api.util.ViewUtils;
import com.termux.shared.activities.ReportActivity;
import com.termux.shared.activity.media.AppCompatActivityUtils;
import com.termux.shared.android.AndroidUtils;
import com.termux.shared.android.PermissionUtils;
import com.termux.shared.data.IntentUtils;
import com.termux.shared.file.FileUtils;
import com.termux.shared.logger.Logger;
import com.termux.shared.models.ReportInfo;
import com.termux.shared.termux.TermuxConstants;
import com.termux.shared.termux.TermuxUtils;
import com.termux.api.R;

public class TermuxAPIActivity extends AppCompatActivity {

private static final int REQUEST_GRANT_DISPLAY_OVER_OTHER_APPS_PERMISSION = 1;

private TextView mBatteryOptimizationNotDisabledWarning;
private TextView mDisplayOverOtherAppsPermissionNotGrantedWarning;

Expand All @@ -35,19 +28,14 @@ public class TermuxAPIActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
Logger.logDebug(LOG_TAG, "onCreate");

super.onCreate(savedInstanceState);
setContentView(R.layout.activity_termux_api);

AppCompatActivityUtils.setToolbar(this, com.termux.shared.R.id.toolbar);
AppCompatActivityUtils.setToolbarTitle(this, com.termux.shared.R.id.toolbar, TermuxConstants.TERMUX_API_APP_NAME, 0);
//AppCompatActivityUtils.setToolbar(this, com.termux.shared.R.id.toolbar);
//AppCompatActivityUtils.setToolbarTitle(this, com.termux.shared.R.id.toolbar, TermuxConstants.TERMUX_API_APP_NAME, 0);

TextView pluginInfo = findViewById(R.id.textview_plugin_info);
pluginInfo.setText(getString(R.string.plugin_info, TermuxConstants.TERMUX_GITHUB_REPO_URL,
TermuxConstants.TERMUX_API_GITHUB_REPO_URL, TermuxConstants.TERMUX_API_APT_PACKAGE_NAME,
TermuxConstants.TERMUX_API_APT_GITHUB_REPO_URL));

//pluginInfo.setText(getString(R.string.plugin_info, TermuxConstants.TERMUX_GITHUB_REPO_URL, TermuxConstants.TERMUX_API_GITHUB_REPO_URL, TermuxConstants.TERMUX_API_APT_PACKAGE_NAME, TermuxConstants.TERMUX_API_APT_GITHUB_REPO_URL));
mBatteryOptimizationNotDisabledWarning = findViewById(R.id.textview_battery_optimization_not_disabled_warning);
mDisableBatteryOptimization = findViewById(R.id.btn_disable_battery_optimizations);
mDisableBatteryOptimization.setOnClickListener(v -> requestDisableBatteryOptimizations());
Expand Down Expand Up @@ -91,43 +79,40 @@ private void showInfo() {
new Thread() {
@Override
public void run() {
/*
String title = "About";
StringBuilder aboutString = new StringBuilder();
aboutString.append(TermuxUtils.getAppInfoMarkdownString(TermuxAPIActivity.this, TermuxUtils.AppInfoMode.TERMUX_AND_PLUGIN_PACKAGE));
aboutString.append("\n\n").append(AndroidUtils.getDeviceInfoMarkdownString(TermuxAPIActivity.this));
aboutString.append("\n\n").append(TermuxUtils.getImportantLinksMarkdownString(TermuxAPIActivity.this));
ReportInfo reportInfo = new ReportInfo(title,
TermuxConstants.TERMUX_APP.TERMUX_SETTINGS_ACTIVITY_NAME, title);
ReportInfo reportInfo = new ReportInfo(title, TermuxConstants.TERMUX_APP.TERMUX_SETTINGS_ACTIVITY_NAME, title);
reportInfo.setReportString(aboutString.toString());
reportInfo.setReportSaveFileLabelAndPath(title,
Environment.getExternalStorageDirectory() + "/" +
FileUtils.sanitizeFileName(TermuxConstants.TERMUX_APP_NAME + "-" + title + ".log", true, true));

reportInfo.setReportSaveFileLabelAndPath(title, Environment.getExternalStorageDirectory() + "/" + FileUtils.sanitizeFileName(TermuxConstants.TERMUX_APP_NAME + "-" + title + ".log", true, true));
ReportActivity.startReportActivity(TermuxAPIActivity.this, reportInfo);
*/
}
}.start();
}



private void checkIfBatteryOptimizationNotDisabled() {
if (mBatteryOptimizationNotDisabledWarning == null) return;

/*
// If battery optimizations not disabled
if (!PermissionUtils.checkIfBatteryOptimizationsDisabled(this)) {
ViewUtils.setWarningTextViewAndButtonState(this, mBatteryOptimizationNotDisabledWarning,
mDisableBatteryOptimization, true, getString(R.string.action_disable_battery_optimizations));
ViewUtils.setWarningTextViewAndButtonState(this, mBatteryOptimizationNotDisabledWarning, mDisableBatteryOptimization, true, getString(R.string.action_disable_battery_optimizations));
} else {
ViewUtils.setWarningTextViewAndButtonState(this, mBatteryOptimizationNotDisabledWarning,
mDisableBatteryOptimization, false, getString(R.string.action_already_disabled));
}
*/
}

private void requestDisableBatteryOptimizations() {
Logger.logDebug(LOG_TAG, "Requesting to disable battery optimizations");
PermissionUtils.requestDisableBatteryOptimizations(this, PermissionUtils.REQUEST_DISABLE_BATTERY_OPTIMIZATIONS);
Log.d(LOG_TAG, "Requesting to disable battery optimizations");
//PermissionUtils.requestDisableBatteryOptimizations(this, PermissionUtils.REQUEST_DISABLE_BATTERY_OPTIMIZATIONS);
}


Expand All @@ -136,27 +121,29 @@ private void checkIfDisplayOverOtherAppsPermissionNotGranted() {
if (mDisplayOverOtherAppsPermissionNotGrantedWarning == null) return;

// If display over other apps permission not granted
/*
if (!PermissionUtils.checkDisplayOverOtherAppsPermission(this)) {
ViewUtils.setWarningTextViewAndButtonState(this, mDisplayOverOtherAppsPermissionNotGrantedWarning,
mGrantDisplayOverOtherAppsPermission, true, getString(R.string.action_grant_display_over_other_apps_permission));
} else {
ViewUtils.setWarningTextViewAndButtonState(this, mDisplayOverOtherAppsPermissionNotGrantedWarning,
mGrantDisplayOverOtherAppsPermission, false, getString(R.string.action_already_granted));
}
*/
}

private void requestDisplayOverOtherAppsPermission() {
Logger.logDebug(LOG_TAG, "Requesting to grant display over other apps permission");
PermissionUtils.requestDisplayOverOtherAppsPermission(this, PermissionUtils.REQUEST_GRANT_DISPLAY_OVER_OTHER_APPS_PERMISSION);
Log.d(LOG_TAG, "Requesting to grant display over other apps permission");
//PermissionUtils.requestDisplayOverOtherAppsPermission(this, PermissionUtils.REQUEST_GRANT_DISPLAY_OVER_OTHER_APPS_PERMISSION);
}



@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Logger.logVerbose(LOG_TAG, "onActivityResult: requestCode: " + requestCode + ", resultCode: " + resultCode + ", data: " + IntentUtils.getIntentString(data));

/*
switch (requestCode) {
case PermissionUtils.REQUEST_DISABLE_BATTERY_OPTIMIZATIONS:
if(PermissionUtils.checkIfBatteryOptimizationsDisabled(this))
Expand All @@ -166,19 +153,20 @@ protected void onActivityResult(int requestCode, int resultCode, Intent data) {
break;
case PermissionUtils.REQUEST_GRANT_DISPLAY_OVER_OTHER_APPS_PERMISSION:
if(PermissionUtils.checkDisplayOverOtherAppsPermission(this))
Logger.logDebug(LOG_TAG, "Display over other apps granted by user on request.");
Log.d(LOG_TAG, "Display over other apps granted by user on request.");
else
Logger.logDebug(LOG_TAG, "Display over other apps denied by user on request.");
Log.d(LOG_TAG, "Display over other apps denied by user on request.");
break;
default:
Logger.logError(LOG_TAG, "Unknown request code \"" + requestCode + "\" passed to onRequestPermissionsResult");
Log.d(LOG_TAG, "Unknown request code \"" + requestCode + "\" passed to onRequestPermissionsResult");
}
*/
}



private void openSettings() {
startActivity(new Intent().setClassName(TermuxConstants.TERMUX_PACKAGE_NAME, TermuxConstants.TERMUX_APP.TERMUX_SETTINGS_ACTIVITY_NAME));
//startActivity(new Intent().setClassName(TermuxConstants.TERMUX_PACKAGE_NAME, TermuxConstants.TERMUX_APP.TERMUX_SETTINGS_ACTIVITY_NAME));
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@

import com.termux.api.TermuxAPIConstants;
import com.termux.api.util.ResultReturner;
import com.termux.shared.android.PermissionUtils;

import java.util.ArrayList;

Expand All @@ -30,9 +29,9 @@ public class TermuxApiPermissionActivity extends Activity {
public static boolean checkAndRequestPermissions(Context context, Intent intent, String... permissions) {
final ArrayList<String> permissionsToRequest = new ArrayList<>();
for (String permission : permissions) {
if (!PermissionUtils.checkPermission(context, permission)) {
permissionsToRequest.add(permission);
}
//TODO: if (!PermissionUtils.checkPermission(context, permission)) {
//permissionsToRequest.add(permission);
//}
}

if (permissionsToRequest.isEmpty()) {
Expand Down Expand Up @@ -70,7 +69,7 @@ protected void onResume() {
super.onResume();
Log.v(LOG_TAG, "onResume");
ArrayList<String> permissionValues = getIntent().getStringArrayListExtra(PERMISSIONS_EXTRA);
PermissionUtils.requestPermissions(this, permissionValues.toArray(new String[0]), 0);
//PermissionUtils.requestPermissions(this, permissionValues.toArray(new String[0]), 0);
finish();
}

Expand Down
3 changes: 0 additions & 3 deletions termux-api/src/main/java/com/termux/api/apis/AudioAPI.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,15 +10,12 @@

import com.termux.api.TermuxApiReceiver;
import com.termux.api.util.ResultReturner;
import com.termux.shared.logger.Logger;

public class AudioAPI {

private static final String LOG_TAG = "AudioAPI";

public static void onReceive(TermuxApiReceiver apiReceiver, final Context context, Intent intent) {
Logger.logDebug(LOG_TAG, "onReceive");

AudioManager am = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
final String SampleRate = am.getProperty(AudioManager.PROPERTY_OUTPUT_SAMPLE_RATE);
final String framesPerBuffer = am.getProperty(AudioManager.PROPERTY_OUTPUT_FRAMES_PER_BUFFER);
Expand Down
Loading

0 comments on commit e51f8d2

Please sign in to comment.