From ddb4803452fa4ff649336139009672414e7d5982 Mon Sep 17 00:00:00 2001 From: JingMatrix Date: Wed, 29 Jul 2026 10:08:56 +0200 Subject: [PATCH 1/2] Remove the GitHub sign-in that no build ever had GITHUB_CLIENT_ID came from a `githubClientId` Gradle property that is set nowhere -- not in gradle.properties, not in CI -- so every build compiled it as "". isConfigured was therefore always false: the card returned before drawing anything, signIn() short-circuited to Unavailable("no client id"), and tokenProvider() always returned null, so no request ever carried an Authorization header. It bought only the rate limit, 60 requests an hour anonymous against 5000 signed in, and nothing depends on having it: the canary screen already sources its zips from release assets precisely so that testing a build needs no account, and every GitHub surface renders anonymously by design. Deleting it rather than supplying a client id, because the flow also has nowhere good to keep a token. Parasitically the manager's SharedPreferences land in com.android.shell's data directory, whose shared_prefs is world-executable, so a token would sit outside our own sandbox. That is worth solving before offering sign-in again, not alongside it. Also drops the SignInState import CanaryScreen never used. --- manager/build.gradle.kts | 8 - .../vector/manager/data/github/GitHubAuth.kt | 211 ------------------ .../manager/data/github/GitHubRepository.kt | 7 - .../vector/manager/di/ServiceLocator.kt | 4 - .../vector/manager/ui/components/TakePart.kt | 132 ----------- .../manager/ui/screens/canary/CanaryScreen.kt | 1 - .../manager/ui/screens/home/HomeScreen.kt | 11 - .../manager/ui/screens/home/HomeViewModel.kt | 20 -- manager/src/main/res/values-ar/strings.xml | 10 - manager/src/main/res/values-de/strings.xml | 10 - manager/src/main/res/values-es/strings.xml | 10 - manager/src/main/res/values-fa/strings.xml | 10 - manager/src/main/res/values-fr/strings.xml | 10 - manager/src/main/res/values-in/strings.xml | 10 - manager/src/main/res/values-it/strings.xml | 10 - manager/src/main/res/values-iw/strings.xml | 10 - manager/src/main/res/values-ja/strings.xml | 10 - manager/src/main/res/values-ko/strings.xml | 10 - manager/src/main/res/values-pl/strings.xml | 10 - .../src/main/res/values-pt-rBR/strings.xml | 10 - manager/src/main/res/values-ru/strings.xml | 10 - manager/src/main/res/values-tr/strings.xml | 10 - manager/src/main/res/values-uk/strings.xml | 10 - manager/src/main/res/values-vi/strings.xml | 10 - .../src/main/res/values-zh-rCN/strings.xml | 10 - .../src/main/res/values-zh-rTW/strings.xml | 10 - manager/src/main/res/values/strings.xml | 10 - 27 files changed, 584 deletions(-) delete mode 100644 manager/src/main/kotlin/org/matrix/vector/manager/data/github/GitHubAuth.kt diff --git a/manager/build.gradle.kts b/manager/build.gradle.kts index ccdb96840..edde5911a 100644 --- a/manager/build.gradle.kts +++ b/manager/build.gradle.kts @@ -61,14 +61,6 @@ android { buildConfigField("String", "MANAGER_PACKAGE_NAME", "\"$defaultManagerPackageName\"") buildConfigField("String", "INJECTED_PACKAGE_NAME", "\"$injectedPackageName\"") - // OAuth client id for the optional GitHub device-flow sign-in on Home. It is a Gradle - // property, so set `githubClientId` in ~/.gradle/gradle.properties or pass - // -PgithubClientId=... — local.properties is read by AGP for the SDK location and never - // reaches `providers.gradleProperty`. Left empty the app hides sign-in entirely rather - // than offering something broken. - val githubClientId = providers.gradleProperty("githubClientId").getOrElse("") - buildConfigField("String", "GITHUB_CLIENT_ID", "\"$githubClientId\"") - // The languages this module is actually translated into, listed from the resource folders // that carry our own strings.xml. AssetManager.getLocales() cannot answer this: it reports // every locale any dependency ships a resource for — AndroidX alone drags in dozens — plus diff --git a/manager/src/main/kotlin/org/matrix/vector/manager/data/github/GitHubAuth.kt b/manager/src/main/kotlin/org/matrix/vector/manager/data/github/GitHubAuth.kt deleted file mode 100644 index 991bb2df2..000000000 --- a/manager/src/main/kotlin/org/matrix/vector/manager/data/github/GitHubAuth.kt +++ /dev/null @@ -1,211 +0,0 @@ -package org.matrix.vector.manager.data.github -import org.matrix.vector.manager.logW - -import android.content.Context -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.delay -import kotlinx.coroutines.flow.MutableStateFlow -import kotlinx.coroutines.flow.StateFlow -import kotlinx.coroutines.flow.asStateFlow -import kotlinx.coroutines.withContext -import kotlinx.serialization.SerialName -import kotlinx.serialization.Serializable -import kotlinx.serialization.json.Json -import okhttp3.FormBody -import okhttp3.OkHttpClient -import okhttp3.Request -import org.matrix.vector.manager.BuildConfig - -/** - * Optional GitHub sign-in, over the **device authorisation flow**. - * - * Why this flow and not a browser redirect: it needs no redirect URI, no custom scheme and no - * callback into the app — which matters here because parasitically the manager has no package - * identity of its own to register a scheme against. The user is shown a short code, types it at - * github.com/login/device in any browser on any device, and this polls until it is approved. - * - * **No scopes are requested.** A token with an empty scope set can read public data and nothing - * else, so one leaking out of the host process's data directory cannot be used to act as the user. - * What it buys is the rate limit: 60 requests/hour for an anonymous client, 5000 signed in. - * - * Signing in is never required. Every surface that uses this renders without it, because a large - * part of this project's users cannot reach github.com at all — see [SignInState.Unavailable]. - */ -class GitHubAuth(context: Context, private val client: OkHttpClient) { - - private val prefs = context.getSharedPreferences("vector_github", Context.MODE_PRIVATE) - - private val json = Json { - ignoreUnknownKeys = true - isLenient = true - } - - private val _state = MutableStateFlow(initialState()) - val state: StateFlow = _state.asStateFlow() - - val token: String? - get() = prefs.getString(KEY_TOKEN, null) - - /** False when no OAuth client id was compiled in, in which case the UI hides sign-in entirely. */ - val isConfigured: Boolean - get() = BuildConfig.GITHUB_CLIENT_ID.isNotEmpty() - - private fun initialState(): SignInState { - val stored = prefs.getString(KEY_TOKEN, null) ?: return SignInState.SignedOut - return SignInState.SignedIn(login = prefs.getString(KEY_LOGIN, null), token = stored) - } - - /** - * Starts the flow and polls to completion. Emits [SignInState.AwaitingUser] with the code the - * user has to type, so the UI can show it and offer to copy it. - */ - suspend fun signIn() { - if (!isConfigured) { - _state.value = SignInState.Unavailable("no client id") - return - } - withContext(Dispatchers.IO) { - val start = - runCatching { requestDeviceCode() } - .getOrElse { - // Unreachable is the expected case for a lot of users, not an error worth - // shouting about. - logW("auth: github device code request failed", it) - _state.value = SignInState.Unavailable(it.message ?: "unreachable") - return@withContext - } - - _state.value = - SignInState.AwaitingUser( - userCode = start.userCode, - verificationUri = start.verificationUri, - ) - - val deadline = System.currentTimeMillis() + start.expiresIn * 1000L - var interval = start.interval.coerceAtLeast(5) - - while (System.currentTimeMillis() < deadline) { - delay(interval * 1000L) - val poll = runCatching { pollForToken(start.deviceCode) }.getOrNull() ?: continue - when { - poll.accessToken != null -> { - val login = runCatching { fetchLogin(poll.accessToken) }.getOrNull() - prefs - .edit() - .putString(KEY_TOKEN, poll.accessToken) - .putString(KEY_LOGIN, login) - .apply() - _state.value = SignInState.SignedIn(login, poll.accessToken) - return@withContext - } - poll.error == "authorization_pending" -> Unit - poll.error == "slow_down" -> interval += 5 - poll.error == "access_denied" -> { - _state.value = SignInState.SignedOut - return@withContext - } - else -> { - logW("auth: github device flow refused: ${poll.error ?: "unknown"}") - _state.value = SignInState.Unavailable(poll.error ?: "unknown") - return@withContext - } - } - } - _state.value = SignInState.SignedOut - } - } - - fun signOut() { - prefs.edit().remove(KEY_TOKEN).remove(KEY_LOGIN).apply() - _state.value = SignInState.SignedOut - } - - fun cancel() { - if (_state.value is SignInState.AwaitingUser) _state.value = SignInState.SignedOut - } - - private fun requestDeviceCode(): DeviceCodeResponse { - val body = - FormBody.Builder() - .add("client_id", BuildConfig.GITHUB_CLIENT_ID) - // Deliberately empty: read-only access to public data is all this needs. - .add("scope", "") - .build() - val request = - Request.Builder() - .url("https://github.com/login/device/code") - .header("Accept", "application/json") - .post(body) - .build() - client.newCall(request).execute().use { response -> - val text = response.body.string() - return json.decodeFromString(text) - } - } - - private fun pollForToken(deviceCode: String): TokenResponse { - val body = - FormBody.Builder() - .add("client_id", BuildConfig.GITHUB_CLIENT_ID) - .add("device_code", deviceCode) - .add("grant_type", "urn:ietf:params:oauth:grant-type:device_code") - .build() - val request = - Request.Builder() - .url("https://github.com/login/oauth/access_token") - .header("Accept", "application/json") - .post(body) - .build() - client.newCall(request).execute().use { response -> - val text = response.body.string() - return json.decodeFromString(text) - } - } - - private fun fetchLogin(token: String): String? { - val request = - Request.Builder() - .url("https://api.github.com/user") - .header("Authorization", "Bearer $token") - .header("Accept", "application/vnd.github+json") - .build() - client.newCall(request).execute().use { response -> - if (!response.isSuccessful) return null - return json.decodeFromString(response.body.string()).login - } - } - - private companion object { - const val KEY_TOKEN = "token" - const val KEY_LOGIN = "login" - } -} - -sealed interface SignInState { - data object SignedOut : SignInState - - data class AwaitingUser(val userCode: String, val verificationUri: String) : SignInState - - data class SignedIn(val login: String?, val token: String) : SignInState - - /** - * No client id was compiled in, GitHub could not be reached, or it refused the grant. Not an - * error state: every surface that offers sign-in renders without it. - */ - data class Unavailable(val reason: String) : SignInState -} - -@Serializable -private data class DeviceCodeResponse( - @SerialName("device_code") val deviceCode: String, - @SerialName("user_code") val userCode: String, - @SerialName("verification_uri") val verificationUri: String, - @SerialName("expires_in") val expiresIn: Int = 900, - val interval: Int = 5, -) - -@Serializable -private data class TokenResponse( - @SerialName("access_token") val accessToken: String? = null, - val error: String? = null, -) diff --git a/manager/src/main/kotlin/org/matrix/vector/manager/data/github/GitHubRepository.kt b/manager/src/main/kotlin/org/matrix/vector/manager/data/github/GitHubRepository.kt index 0a38c0bef..a5dde4024 100644 --- a/manager/src/main/kotlin/org/matrix/vector/manager/data/github/GitHubRepository.kt +++ b/manager/src/main/kotlin/org/matrix/vector/manager/data/github/GitHubRepository.kt @@ -23,11 +23,6 @@ import org.matrix.vector.manager.logW class GitHubRepository( private val client: OkHttpClient, cacheDir: File, - /** - * Supplies the optional sign-in token. Anonymous access is a fully supported mode — this only - * ever raises the rate limit from 60 to 5000 requests an hour. - */ - private val tokenProvider: () -> String? = { null }, /** How far back to reach, in months. User-configurable; see SettingsRepository. */ private val windowMonthsProvider: () -> Int = { DEFAULT_WINDOW_MONTHS }, ) { @@ -458,7 +453,6 @@ class GitHubRepository( Request.Builder() .url("$API/$REPO/commits?per_page=1") .header("Accept", "application/vnd.github+json") - .apply { tokenProvider()?.let { header("Authorization", "Bearer $it") } } .build() client.newCall(request).execute().use { response -> val link = response.header("Link") ?: return 0L @@ -483,7 +477,6 @@ class GitHubRepository( .url(url) .header("Accept", "application/vnd.github+json") .header("X-GitHub-Api-Version", "2022-11-28") - .apply { tokenProvider()?.let { header("Authorization", "Bearer $it") } } .apply { // OkHttp replays the stored ETag as If-None-Match on its own. A 304 costs // nothing against GitHub's 60/hour budget, so revalidation stays cheap. diff --git a/manager/src/main/kotlin/org/matrix/vector/manager/di/ServiceLocator.kt b/manager/src/main/kotlin/org/matrix/vector/manager/di/ServiceLocator.kt index c86645045..fe1c59acc 100644 --- a/manager/src/main/kotlin/org/matrix/vector/manager/di/ServiceLocator.kt +++ b/manager/src/main/kotlin/org/matrix/vector/manager/di/ServiceLocator.kt @@ -26,7 +26,6 @@ import kotlinx.coroutines.flow.merge import kotlinx.coroutines.launch import okhttp3.OkHttpClient import org.lsposed.lspd.ILSPManagerService -import org.matrix.vector.manager.data.github.GitHubAuth import org.matrix.vector.manager.data.log.CrashRecorder import org.matrix.vector.manager.data.github.GitHubRepository import org.matrix.vector.manager.data.repository.AppRepository @@ -199,13 +198,10 @@ object ServiceLocator { val backup: BackupRepository by lazy { BackupRepository(context, daemon) } - val githubAuth: GitHubAuth by lazy { GitHubAuth(context, http) } - val github: GitHubRepository by lazy { GitHubRepository( client = http, cacheDir = context.cacheDir, - tokenProvider = { githubAuth.token }, windowMonthsProvider = { settings.activityWindowMonths.value }, ) } diff --git a/manager/src/main/kotlin/org/matrix/vector/manager/ui/components/TakePart.kt b/manager/src/main/kotlin/org/matrix/vector/manager/ui/components/TakePart.kt index f259d7c49..cd3623169 100644 --- a/manager/src/main/kotlin/org/matrix/vector/manager/ui/components/TakePart.kt +++ b/manager/src/main/kotlin/org/matrix/vector/manager/ui/components/TakePart.kt @@ -1,8 +1,5 @@ package org.matrix.vector.manager.ui.components -import android.content.ClipData -import android.content.ClipboardManager -import android.content.Context import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.IntrinsicSize @@ -17,29 +14,20 @@ import androidx.compose.foundation.layout.width import androidx.compose.material.icons.Icons import androidx.compose.material.icons.rounded.BugReport import androidx.compose.material.icons.rounded.Forum -import androidx.compose.material.icons.rounded.MergeType import androidx.compose.material.icons.rounded.RateReview import androidx.compose.material.icons.rounded.Science -import androidx.compose.material3.Card -import androidx.compose.material3.CardDefaults -import androidx.compose.material3.FilledTonalButton import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme import androidx.compose.material3.OutlinedCard import androidx.compose.material3.Text -import androidx.compose.material3.TextButton import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.vector.ImageVector -import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.stringResource -import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp import org.matrix.vector.manager.R import org.matrix.vector.manager.data.github.GitHubRepository -import org.matrix.vector.manager.data.github.SignInState -import org.matrix.vector.manager.ui.theme.VectorMono /** * Where the page turns a reader into a participant. @@ -145,123 +133,3 @@ private fun Door( } } } - -/** - * Optional sign-in, rendered only when it can actually do something. - * - * The card is hidden entirely when no OAuth client id was compiled in, and when GitHub turns out - * to be unreachable it collapses to a single quiet line rather than an error. A large share of this - * project's users cannot reach github.com at all, and for them the rest of Home must still be a - * complete, working screen — so sign-in is never a gate, only an upgrade. - */ -@Composable -fun GitHubSignInCard( - state: SignInState, - isConfigured: Boolean, - onSignIn: () -> Unit, - onSignOut: () -> Unit, - onCancel: () -> Unit, - onOpen: (String) -> Unit, - modifier: Modifier = Modifier, -) { - if (!isConfigured) return - val context = LocalContext.current - - when (state) { - is SignInState.SignedOut -> - OutlinedCard(modifier = modifier.fillMaxWidth()) { - Column(Modifier.padding(16.dp)) { - Text( - stringResource(R.string.github_sign_in), - style = MaterialTheme.typography.titleSmall, - ) - Spacer(Modifier.height(4.dp)) - Text( - stringResource(R.string.github_sign_in_why), - style = MaterialTheme.typography.bodySmall, - color = MaterialTheme.colorScheme.onSurfaceVariant, - ) - Spacer(Modifier.height(10.dp)) - FilledTonalButton(onClick = onSignIn) { - Text(stringResource(R.string.github_sign_in)) - } - } - } - - is SignInState.AwaitingUser -> - Card( - modifier = modifier.fillMaxWidth(), - colors = - CardDefaults.cardColors( - containerColor = MaterialTheme.colorScheme.secondaryContainer - ), - ) { - Column(Modifier.padding(16.dp)) { - Text( - stringResource(R.string.github_sign_in_code, state.verificationUri), - style = MaterialTheme.typography.bodySmall, - ) - Spacer(Modifier.height(10.dp)) - // The code is the whole point of this state, so it is set large and - // monospaced — it is meant to be read off a screen and typed on another. - Text( - text = state.userCode, - style = VectorMono.copy(fontSize = MaterialTheme.typography.headlineSmall.fontSize), - textAlign = TextAlign.Center, - modifier = Modifier.fillMaxWidth(), - ) - Spacer(Modifier.height(10.dp)) - Row(horizontalArrangement = Arrangement.spacedBy(8.dp)) { - FilledTonalButton(onClick = { onOpen(state.verificationUri) }) { - Text(stringResource(R.string.github_open_browser)) - } - TextButton(onClick = { copyCode(context, state.userCode) }) { - Text(stringResource(R.string.github_copy_code)) - } - TextButton(onClick = onCancel) { - Text(stringResource(R.string.github_cancel)) - } - } - } - } - - is SignInState.SignedIn -> - Row( - modifier = modifier.fillMaxWidth(), - verticalAlignment = Alignment.CenterVertically, - ) { - Icon( - Icons.Rounded.MergeType, - contentDescription = null, - modifier = Modifier.size(16.dp), - tint = MaterialTheme.colorScheme.onSurfaceVariant, - ) - Spacer(Modifier.width(8.dp)) - Text( - stringResource(R.string.github_signed_in_as, state.login ?: "GitHub"), - style = MaterialTheme.typography.labelMedium, - color = MaterialTheme.colorScheme.onSurfaceVariant, - modifier = Modifier.weight(1f), - ) - TextButton(onClick = onSignOut) { - Text(stringResource(R.string.github_sign_out)) - } - } - - is SignInState.Unavailable -> - Text( - text = stringResource(R.string.github_unreachable), - style = MaterialTheme.typography.labelSmall, - color = MaterialTheme.colorScheme.onSurfaceVariant, - modifier = modifier.fillMaxWidth(), - ) - } -} - -private fun copyCode(context: Context, code: String) { - val clipboard = context.getSystemService(Context.CLIPBOARD_SERVICE) as? ClipboardManager - clipboard?.setPrimaryClip( - // Android 13 and later show this label in the clipboard preview, so it is user-visible. - ClipData.newPlainText(context.getString(R.string.github_device_code), code) - ) -} diff --git a/manager/src/main/kotlin/org/matrix/vector/manager/ui/screens/canary/CanaryScreen.kt b/manager/src/main/kotlin/org/matrix/vector/manager/ui/screens/canary/CanaryScreen.kt index 2f699e128..9eee1a120 100644 --- a/manager/src/main/kotlin/org/matrix/vector/manager/ui/screens/canary/CanaryScreen.kt +++ b/manager/src/main/kotlin/org/matrix/vector/manager/ui/screens/canary/CanaryScreen.kt @@ -47,7 +47,6 @@ import androidx.compose.ui.unit.dp import org.matrix.vector.manager.R import org.matrix.vector.manager.data.github.CanaryBuild import org.matrix.vector.manager.data.github.GitHubRepository -import org.matrix.vector.manager.data.github.SignInState import org.matrix.vector.manager.di.ServiceLocator import org.matrix.vector.manager.ui.theme.VectorMono diff --git a/manager/src/main/kotlin/org/matrix/vector/manager/ui/screens/home/HomeScreen.kt b/manager/src/main/kotlin/org/matrix/vector/manager/ui/screens/home/HomeScreen.kt index c8e660eca..e9d302b2f 100644 --- a/manager/src/main/kotlin/org/matrix/vector/manager/ui/screens/home/HomeScreen.kt +++ b/manager/src/main/kotlin/org/matrix/vector/manager/ui/screens/home/HomeScreen.kt @@ -106,7 +106,6 @@ import org.matrix.vector.manager.ui.components.MonthMarkerRow import org.matrix.vector.manager.ui.components.GapRow import org.matrix.vector.manager.ui.components.HistoryFootRow import org.matrix.vector.manager.ui.components.ContributorAvatar -import org.matrix.vector.manager.ui.components.GitHubSignInCard import org.matrix.vector.manager.ui.components.TakePartSection import org.matrix.vector.manager.ui.components.StatusHeader import org.matrix.vector.manager.ui.components.ambience.AmbienceKind @@ -138,7 +137,6 @@ fun HomeScreen( val status by viewModel.status.collectAsStateWithLifecycle() val feed by viewModel.feed.collectAsStateWithLifecycle() val refreshing by viewModel.refreshing.collectAsStateWithLifecycle() - val signIn by viewModel.signInState.collectAsStateWithLifecycle() val openExternally by viewModel.openLinksExternally.collectAsStateWithLifecycle() val feedItems by viewModel.feedItems.collectAsStateWithLifecycle() val loadingHistory by viewModel.loadingHistory.collectAsStateWithLifecycle() @@ -274,15 +272,6 @@ fun HomeScreen( onReport = onOpenReport, ) Spacer(Modifier.height(14.dp)) - GitHubSignInCard( - state = signIn, - isConfigured = viewModel.isSignInConfigured, - onSignIn = viewModel::signIn, - onSignOut = viewModel::signOut, - onCancel = viewModel::cancelSignIn, - onOpen = ::open, - ) - Spacer(Modifier.height(14.dp)) ProjectFooter(feed = feed, onClick = { open(GitHubRepository.REPO_URL) }) Spacer(Modifier.height(26.dp)) } diff --git a/manager/src/main/kotlin/org/matrix/vector/manager/ui/screens/home/HomeViewModel.kt b/manager/src/main/kotlin/org/matrix/vector/manager/ui/screens/home/HomeViewModel.kt index 7f6089640..29d4cbd59 100644 --- a/manager/src/main/kotlin/org/matrix/vector/manager/ui/screens/home/HomeViewModel.kt +++ b/manager/src/main/kotlin/org/matrix/vector/manager/ui/screens/home/HomeViewModel.kt @@ -21,7 +21,6 @@ import kotlin.random.Random import kotlinx.coroutines.launch import org.lsposed.lspd.ILSPManagerService import org.matrix.vector.manager.data.github.CommunityFeed -import org.matrix.vector.manager.data.github.GitHubAuth import org.matrix.vector.manager.data.github.GitHubRepository import org.matrix.vector.manager.di.ServiceLocator import org.matrix.vector.manager.ipc.DaemonClient @@ -138,30 +137,12 @@ data class DeviceInfo( class HomeViewModel( private val daemon: DaemonClient, private val github: GitHubRepository, - private val auth: GitHubAuth, ) : ViewModel() { - val signInState: StateFlow = auth.state - val openLinksExternally: StateFlow = ServiceLocator.settings.openLinksExternally val headerAmbience: StateFlow = ServiceLocator.settings.headerAmbience - val isSignInConfigured: Boolean - get() = auth.isConfigured - - fun signIn() { - viewModelScope.launch { auth.signIn() } - } - - fun signOut() { - auth.signOut() - // The rate limit changes with the token, so the feed is worth re-reading. - refreshFeed(GitHubRepository.Freshness.Force) - } - - fun cancelSignIn() = auth.cancel() - private val _status = MutableStateFlow(FrameworkStatus()) val status: StateFlow = _status.asStateFlow() @@ -613,7 +594,6 @@ class HomeViewModel( HomeViewModel( ServiceLocator.daemon, ServiceLocator.github, - ServiceLocator.githubAuth, ) as T } diff --git a/manager/src/main/res/values-ar/strings.xml b/manager/src/main/res/values-ar/strings.xml index e31100008..b7749cb05 100644 --- a/manager/src/main/res/values-ar/strings.xml +++ b/manager/src/main/res/values-ar/strings.xml @@ -76,15 +76,6 @@ النقاشات راجِع تغييرًا - تسجيل الدخول إلى GitHub - اختياري. يرفع الحد الساعي لتحديثات النشاط، ويتيح لـ Vector أن يعرض ما ينتظرك. للقراءة فقط — لا يُطلب أي إذن. - أدخل هذا الرمز في %1$s - فتح المتصفح - نسخ الرمز - سجّلت الدخول باسم %1$s - تسجيل الخروج - إلغاء - تعذّر الوصول إلى GitHub. وكل ما عداه يعمل كالمعتاد. %1$s و%2$s %1$s و%2$d آخرين @@ -316,7 +307,6 @@ الدليل الكامل في المشكلة رُفض الروت. اسمح لـ Vector في مدير الروت لديك ثم أعد المحاولة%1$s إصدار خاص — أحدث من master - رمز جهاز GitHub اللغة لغة النظام اتّباع اللغة المضبوطة على الهاتف diff --git a/manager/src/main/res/values-de/strings.xml b/manager/src/main/res/values-de/strings.xml index 42db7560e..403a9276d 100644 --- a/manager/src/main/res/values-de/strings.xml +++ b/manager/src/main/res/values-de/strings.xml @@ -68,15 +68,6 @@ Diskussionen Änderung prüfen - Bei GitHub anmelden - Optional. Erhöht das Stundenlimit für Aktivitäts-Updates und lässt Vector zeigen, was auf dich wartet. Nur lesend — es werden keine Berechtigungen angefordert. - Gib diesen Code auf %1$s ein - Browser öffnen - Code kopieren - Angemeldet als %1$s - Abmelden - Abbrechen - GitHub war nicht erreichbar. Alles andere funktioniert weiterhin. %1$s & %2$s %1$s & %2$d weitere @@ -272,7 +263,6 @@ Vollständige Anleitung im Issue Root verweigert. Erlaube Vector in deinem Root-Manager und versuche es erneut%1$s Eigener Build — neuer als master - GitHub-Gerätecode Sprache Systemstandard Der auf dem Telefon eingestellten Sprache folgen diff --git a/manager/src/main/res/values-es/strings.xml b/manager/src/main/res/values-es/strings.xml index 48a7e161d..b05666dbf 100644 --- a/manager/src/main/res/values-es/strings.xml +++ b/manager/src/main/res/values-es/strings.xml @@ -68,15 +68,6 @@ Debates Revisar un cambio - Iniciar sesión en GitHub - Opcional. Sube el límite por hora de las actualizaciones de actividad y permite que Vector muestre lo que te está esperando. Solo lectura: no se pide ningún permiso. - Introduce este código en %1$s - Abrir el navegador - Copiar el código - Sesión iniciada como %1$s - Cerrar sesión - Cancelar - No se pudo acceder a GitHub. Todo lo demás sigue funcionando. %1$s y %2$s %1$s y %2$d más @@ -272,7 +263,6 @@ Guía completa en la incidencia Root denegado. Autoriza a Vector en tu gestor de root y vuelve a intentarlo%1$s Compilación propia: por delante de master - Código de dispositivo de GitHub Idioma El del sistema Seguir el idioma configurado en el teléfono diff --git a/manager/src/main/res/values-fa/strings.xml b/manager/src/main/res/values-fa/strings.xml index ede8280a9..b1bce8d0a 100644 --- a/manager/src/main/res/values-fa/strings.xml +++ b/manager/src/main/res/values-fa/strings.xml @@ -68,15 +68,6 @@ گفتگوها بازبینی یک تغییر - ورود به GitHub - اختیاری. سقف ساعتی به‌روزرسانی فعالیت را بالا می‌برد و به Vector اجازه می‌دهد آنچه چشم‌به‌راه شماست را نشان دهد. فقط‌خواندنی — هیچ اجازه‌ای درخواست نمی‌شود. - این کد را در %1$s وارد کنید - باز کردن مرورگر - رونوشت کد - واردشده با نام %1$s - خروج - انصراف - دسترسی به GitHub ممکن نشد. باقی چیزها همچنان کار می‌کنند. %1$s و %2$s %1$s و %2$d نفر دیگر @@ -272,7 +263,6 @@ راهنمای کامل در همان مسئله روت رد شد. در مدیر روت خود به Vector اجازه دهید و دوباره تلاش کنید%1$s ساخت شخصی — جلوتر از master - کد دستگاه GitHub زبان پیش‌فرض سامانه هماهنگ با زبانی که روی گوشی تنظیم شده است diff --git a/manager/src/main/res/values-fr/strings.xml b/manager/src/main/res/values-fr/strings.xml index 062f84154..d6d9f30bf 100644 --- a/manager/src/main/res/values-fr/strings.xml +++ b/manager/src/main/res/values-fr/strings.xml @@ -68,15 +68,6 @@ Discussions Relire une modification - Se connecter à GitHub - Facultatif. Relève la limite horaire des mises à jour d\'activité et permet à Vector de montrer ce qui vous attend. Lecture seule — aucune autorisation n\'est demandée. - Saisissez ce code sur %1$s - Ouvrir le navigateur - Copier le code - Connecté en tant que %1$s - Se déconnecter - Annuler - GitHub était injoignable. Tout le reste fonctionne. %1$s & %2$s %1$s & %2$d autres @@ -272,7 +263,6 @@ Guide complet dans le ticket Root refusé. Autorisez Vector dans votre gestionnaire root, puis réessayez%1$s Build personnalisé — en avance sur master - Code d\'appareil GitHub Langue Langue du système Suivre la langue configurée sur le téléphone diff --git a/manager/src/main/res/values-in/strings.xml b/manager/src/main/res/values-in/strings.xml index 17255e2de..4d812b158 100644 --- a/manager/src/main/res/values-in/strings.xml +++ b/manager/src/main/res/values-in/strings.xml @@ -70,15 +70,6 @@ Diskusi Tinjau sebuah perubahan - Masuk ke GitHub - Opsional. Menaikkan batas per jam untuk pembaruan aktivitas, dan membuat Vector bisa menampilkan apa yang menunggu Anda. Hanya baca — tidak ada izin yang diminta. - Masukkan kode ini di %1$s - Buka peramban - Salin kode - Masuk sebagai %1$s - Keluar - Batal - GitHub tidak dapat dihubungi. Selebihnya tetap berjalan. %1$s & %2$s %1$s & %2$d lainnya @@ -265,7 +256,6 @@ Panduan lengkap ada di isu Root ditolak. Izinkan Vector di pengelola root Anda, lalu coba lagi%1$s Build sendiri — lebih maju dari master - Kode perangkat GitHub Bahasa Bawaan sistem Ikuti bahasa yang disetel di ponsel diff --git a/manager/src/main/res/values-it/strings.xml b/manager/src/main/res/values-it/strings.xml index 7a6dd2467..35eb6308d 100644 --- a/manager/src/main/res/values-it/strings.xml +++ b/manager/src/main/res/values-it/strings.xml @@ -68,15 +68,6 @@ Discussioni Rivedi una modifica - Accedi a GitHub - Facoltativo. Alza il limite orario degli aggiornamenti di attività e permette a Vector di mostrare cosa ti sta aspettando. Sola lettura — non viene chiesto alcun permesso. - Inserisci questo codice su %1$s - Apri il browser - Copia il codice - Connesso come %1$s - Disconnetti - Annulla - GitHub non era raggiungibile. Tutto il resto funziona lo stesso. %1$s e %2$s %1$s e altri %2$d @@ -272,7 +263,6 @@ Guida completa nella issue Root negato. Autorizza Vector nel tuo gestore root, poi riprova%1$s Build personalizzata — avanti rispetto a master - Codice dispositivo GitHub Lingua Predefinita di sistema Segui la lingua impostata sul telefono diff --git a/manager/src/main/res/values-iw/strings.xml b/manager/src/main/res/values-iw/strings.xml index 2d7ea5749..fa5e5ddc7 100644 --- a/manager/src/main/res/values-iw/strings.xml +++ b/manager/src/main/res/values-iw/strings.xml @@ -76,15 +76,6 @@ דיונים סקירת שינוי - התחברות ל-GitHub - רשות. מעלה את המגבלה השעתית על עדכוני פעילות, ומאפשר ל-Vector להראות מה מחכה לכם. קריאה בלבד — לא מתבקשות שום הרשאות. - הזינו את הקוד הזה ב-%1$s - פתיחת דפדפן - העתקת הקוד - מחוברים בתור %1$s - התנתקות - ביטול - לא הייתה גישה ל-GitHub. כל השאר עדיין עובד. %1$s ו-%2$s %1$s ועוד %2$d @@ -298,7 +289,6 @@ המדריך המלא בתקלה ‏root נדחה. אשרו את Vector במנהל ה-root שלכם ונסו שוב%1$s גרסה עצמאית — מקדימה את master - קוד מכשיר של GitHub שפה ברירת המחדל של המערכת לפי השפה שמוגדרת בטלפון diff --git a/manager/src/main/res/values-ja/strings.xml b/manager/src/main/res/values-ja/strings.xml index c6ff8ab53..a1c6f6cd0 100644 --- a/manager/src/main/res/values-ja/strings.xml +++ b/manager/src/main/res/values-ja/strings.xml @@ -66,15 +66,6 @@ ディスカッション 変更をレビュー - GitHub にログイン - 任意です。動きの更新にかかる 1 時間あたりの上限が上がり、あなたを待っているものを Vector が表示できるようになります。読み取り専用で、権限は一切要求しません。 - %1$s でこのコードを入力してください - ブラウザーを開く - コードをコピー - %1$s としてログイン中 - ログアウト - キャンセル - GitHub に接続できませんでした。それ以外は問題なく使えます。 %1$s と %2$s %1$s ほか %2$d 名 @@ -261,7 +252,6 @@ 詳しい手引きは課題に root が拒否されました。お使いの root マネージャーで Vector を許可してから、もう一度お試しください%1$s 独自ビルド — master より先行 - GitHub デバイスコード 言語 システムに合わせる 端末で設定されている言語に従います diff --git a/manager/src/main/res/values-ko/strings.xml b/manager/src/main/res/values-ko/strings.xml index a3e8a9891..9d65ab174 100644 --- a/manager/src/main/res/values-ko/strings.xml +++ b/manager/src/main/res/values-ko/strings.xml @@ -66,15 +66,6 @@ 토론 변경 사항 검토 - GitHub에 로그인 - 선택 사항입니다. 활동 갱신의 시간당 한도가 올라가고, 나를 기다리는 항목을 Vector가 보여줄 수 있습니다. 읽기 전용이며 어떤 권한도 요청하지 않습니다. - %1$s 에서 이 코드를 입력하세요 - 브라우저 열기 - 코드 복사 - %1$s(으)로 로그인함 - 로그아웃 - 취소 - GitHub에 연결하지 못했습니다. 나머지는 그대로 동작합니다. %1$s 및 %2$s %1$s 외 %2$d명 @@ -261,7 +252,6 @@ 전체 안내는 이슈에 루트가 거부되었습니다. 루트 관리자에서 Vector를 허용한 뒤 다시 시도하세요%1$s 직접 만든 빌드 — master보다 앞섬 - GitHub 기기 코드 언어 시스템 기본값 휴대전화에 설정된 언어를 따릅니다 diff --git a/manager/src/main/res/values-pl/strings.xml b/manager/src/main/res/values-pl/strings.xml index 2a63a9fd8..e275f35ab 100644 --- a/manager/src/main/res/values-pl/strings.xml +++ b/manager/src/main/res/values-pl/strings.xml @@ -72,15 +72,6 @@ Dyskusje Przejrzyj zmianę - Zaloguj się w GitHubie - Opcjonalne. Podnosi godzinowy limit aktualizacji aktywności i pozwala Vectorowi pokazać, co na Ciebie czeka. Tylko do odczytu — żadne uprawnienia nie są proszone. - Wpisz ten kod na %1$s - Otwórz przeglądarkę - Kopiuj kod - Zalogowano jako %1$s - Wyloguj się - Anuluj - Nie udało się połączyć z GitHubem. Cała reszta działa dalej. %1$s i %2$s %1$s i %2$d innych @@ -294,7 +285,6 @@ Pełny poradnik w zgłoszeniu Odmówiono roota. Zezwól Vectorowi w swoim menedżerze roota i spróbuj ponownie%1$s Własna kompilacja — nowsza niż master - Kod urządzenia GitHub Język Domyślny systemowy Używaj języka ustawionego w telefonie diff --git a/manager/src/main/res/values-pt-rBR/strings.xml b/manager/src/main/res/values-pt-rBR/strings.xml index 4b8aa86ec..0a2e81860 100644 --- a/manager/src/main/res/values-pt-rBR/strings.xml +++ b/manager/src/main/res/values-pt-rBR/strings.xml @@ -68,15 +68,6 @@ Discussões Revisar uma alteração - Entrar no GitHub - Opcional. Aumenta o limite por hora das atualizações de atividade e deixa o Vector mostrar o que está esperando por você. Somente leitura — nenhuma permissão é solicitada. - Digite este código em %1$s - Abrir o navegador - Copiar o código - Conectado como %1$s - Sair - Cancelar - Não foi possível acessar o GitHub. Todo o resto continua funcionando. %1$s e %2$s %1$s e mais %2$d @@ -272,7 +263,6 @@ Guia completo na issue Root recusado. Autorize o Vector no seu gerenciador de root e tente de novo%1$s Versão própria — à frente da master - Código de dispositivo do GitHub Idioma Padrão do sistema Seguir o idioma configurado no telefone diff --git a/manager/src/main/res/values-ru/strings.xml b/manager/src/main/res/values-ru/strings.xml index 98811739f..474076b2f 100644 --- a/manager/src/main/res/values-ru/strings.xml +++ b/manager/src/main/res/values-ru/strings.xml @@ -66,15 +66,6 @@ Сообщить о проблеме Обсуждения Просмотреть изменения - Войти в GitHub - Необязательно. Повышает часовой лимит на обновления ленты и позволяет Vector показать, что ждёт вас. Только чтение — никакие права не запрашиваются. - Введите этот код на %1$s - Открыть браузер - Скопировать код - Вы вошли как %1$s - Выйти - Отмена - GitHub недоступен. Всё остальное продолжает работать. %1$s и %2$s %1$s и ещё %2$d %1$s · %2$s @@ -274,7 +265,6 @@ Полное руководство в issue В root отказано. Разрешите Vector в вашем root-менеджере и повторите%1$s Своя сборка — новее master - Код устройства GitHub Язык Как в системе diff --git a/manager/src/main/res/values-tr/strings.xml b/manager/src/main/res/values-tr/strings.xml index d10943b12..c8c2a7c03 100644 --- a/manager/src/main/res/values-tr/strings.xml +++ b/manager/src/main/res/values-tr/strings.xml @@ -68,15 +68,6 @@ Tartışmalar Bir değişikliği incele - GitHub\'a giriş yap - İsteğe bağlı. Hareket güncellemelerinin saatlik sınırını yükseltir ve Vector\'ün sizi bekleyenleri göstermesini sağlar. Yalnızca okuma — hiçbir izin istenmez. - Bu kodu %1$s adresine girin - Tarayıcıyı aç - Kodu kopyala - %1$s olarak giriş yapıldı - Çıkış yap - Vazgeç - GitHub\'a ulaşılamadı. Diğer her şey çalışmaya devam ediyor. %1$s ve %2$s %1$s ve %2$d kişi daha @@ -272,7 +263,6 @@ Tam kılavuz sorunda Root reddedildi. Root yöneticinizde Vector\'e izin verip yeniden deneyin%1$s Özel derleme — master\'ın ilerisinde - GitHub cihaz kodu Dil Sistem varsayılanı Telefonda ayarlı dili izle diff --git a/manager/src/main/res/values-uk/strings.xml b/manager/src/main/res/values-uk/strings.xml index 532e8b08a..defa0fa7a 100644 --- a/manager/src/main/res/values-uk/strings.xml +++ b/manager/src/main/res/values-uk/strings.xml @@ -72,15 +72,6 @@ Обговорення Переглянути зміну - Увійти в GitHub - Необов\'язково. Підвищує погодинний ліміт на оновлення активності й дає Vector змогу показувати те, що чекає на вас. Лише читання — жодних дозволів не запитується. - Введіть цей код на %1$s - Відкрити браузер - Копіювати код - Ви ввійшли як %1$s - Вийти - Скасувати - GitHub недоступний. Решта працює як звичайно. %1$s і %2$s %1$s і ще %2$d @@ -294,7 +285,6 @@ Повний посібник у задачі Root відхилено. Дозвольте Vector у своєму root-менеджері й спробуйте ще раз%1$s Власна збірка — попереду master - Код пристрою GitHub Мова Як у системі Використовувати мову, налаштовану на телефоні diff --git a/manager/src/main/res/values-vi/strings.xml b/manager/src/main/res/values-vi/strings.xml index 41d286651..a8c40d934 100644 --- a/manager/src/main/res/values-vi/strings.xml +++ b/manager/src/main/res/values-vi/strings.xml @@ -66,15 +66,6 @@ Thảo luận Xem lại một thay đổi - Đăng nhập GitHub - Không bắt buộc. Nâng giới hạn theo giờ cho việc cập nhật hoạt động, và cho phép Vector hiện những gì đang chờ bạn. Chỉ đọc — không yêu cầu quyền nào. - Nhập mã này tại %1$s - Mở trình duyệt - Sao chép mã - Đã đăng nhập với %1$s - Đăng xuất - Huỷ - Không kết nối được GitHub. Mọi thứ khác vẫn chạy. %1$s và %2$s %1$s và %2$d người khác @@ -261,7 +252,6 @@ Hướng dẫn đầy đủ ở issue Root bị từ chối. Hãy cho phép Vector trong trình quản lý root rồi thử lại%1$s Bản dựng riêng — mới hơn master - Mã thiết bị GitHub Ngôn ngữ Theo hệ thống Dùng ngôn ngữ đã đặt trên điện thoại diff --git a/manager/src/main/res/values-zh-rCN/strings.xml b/manager/src/main/res/values-zh-rCN/strings.xml index 4f49cfbb1..35fa035f0 100644 --- a/manager/src/main/res/values-zh-rCN/strings.xml +++ b/manager/src/main/res/values-zh-rCN/strings.xml @@ -66,15 +66,6 @@ 讨论区 审阅代码 - 登录 GitHub - 可选。提高动态更新的每小时限额,并让 Vector 显示等待你处理的内容。只读——不申请任何权限。 - 在 %1$s 输入此代码 - 打开浏览器 - 复制代码 - 已登录为 %1$s - 退出登录 - 取消 - 无法连接 GitHub。其余功能仍可正常使用。 %1$s 与 %2$s %1$s 等 %2$d 人 @@ -261,7 +252,6 @@ 完整指南见 issue Root 请求被拒绝。请在你的 Root 管理器中允许 Vector,然后重试%1$s 自定义构建——领先于 master - GitHub 设备代码 语言 跟随系统 diff --git a/manager/src/main/res/values-zh-rTW/strings.xml b/manager/src/main/res/values-zh-rTW/strings.xml index 3693609b6..1f64f1e47 100644 --- a/manager/src/main/res/values-zh-rTW/strings.xml +++ b/manager/src/main/res/values-zh-rTW/strings.xml @@ -66,15 +66,6 @@ 討論區 審閱變更 - 登入 GitHub - 選用。可提高動態更新的每小時上限,並讓 Vector 顯示等待你處理的項目。唯讀——不要求任何權限。 - 在 %1$s 輸入此代碼 - 開啟瀏覽器 - 複製代碼 - 已以 %1$s 登入 - 登出 - 取消 - 無法連線 GitHub。其餘功能仍可正常使用。 %1$s 與 %2$s %1$s 等 %2$d 人 @@ -261,7 +252,6 @@ 完整指南見 issue Root 要求遭拒。請在你的 Root 管理器中允許 Vector,然後重試%1$s 自訂建置——領先於 master - GitHub 裝置代碼 語言 跟隨系統 diff --git a/manager/src/main/res/values/strings.xml b/manager/src/main/res/values/strings.xml index d92e8991e..df407cd4d 100644 --- a/manager/src/main/res/values/strings.xml +++ b/manager/src/main/res/values/strings.xml @@ -127,15 +127,6 @@ Review a change - Sign in to GitHub - Optional. Raises the hourly limit on activity updates, and lets Vector show what is waiting on you. Read-only — no permissions are requested. - Enter this code at %1$s - Open browser - Copy code - Signed in as %1$s - Sign out - Cancel - GitHub could not be reached. Everything else still works. %1$s & %2$s %1$s & %2$d others @@ -417,7 +408,6 @@ Full guide in issue Root refused. Allow Vector in your root manager, then try again%1$s Custom build — ahead of master - GitHub device code Language System default Follow the language your phone is set to From a4c3aab5f7cc394661cc645f7761d81df8168f20 Mon Sep 17 00:00:00 2001 From: JingMatrix Date: Thu, 30 Jul 2026 12:18:52 +0200 Subject: [PATCH 2/2] Remove the code the Compose rewrite left behind buildSrc holds two Gradle task classes no build script registers, and neither output survives: there is no LangList.java and no material_theme_builder.xml, the locale list comes from BuildConfig.TRANSLATIONS computed in manager/build.gradle.kts, and the only XML theme left wraps Theme.DeviceDefault.NoActionBar. Its README documents registering both tasks against :app, gone since #796. The directory goes, with the format task's include for its Kotlin. The version catalog still pins the whole View stack -- Glide, Rikka's rikkax-* widgets, Fragment, Navigation 2 with safeargs, preference, RecyclerView, SwipeRefreshLayout, ConstraintLayout, Material Components for Views. No build script references any of those 26 aliases, the safeargs plugin, or the nav, glide and appcenter versions. rikkax-parcelablelist stays; :services:manager-service exposes it for the AIDL's ParcelableListSlice. hiddenapi/stubs carries 20 files nothing compiles against, mostly LSPosed-era rather than rewrite fallout. Where the platform declares the same class the stub is already inert: :daemon compiles PackageManager.VERSION_CODE_HIGHEST and XSharedPreferences compiles Environment.getDataDirectory(), neither of which the stub declares, so android.jar wins today. They are compileOnly and never reach a dex, so lsplant's FindClass on dalvik/system/VMRuntime keeps resolving the framework class. Four HiddenApiBridge wrappers and the stub members that existed only to type them go with them. In :manager the four @Serializable models for the Actions runs and artifacts API became unreachable when eb0795511 moved canary sourcing to release prereleases, and relativeTime, levelLabel, sectionHeaderStyle, SeedScheme.parseHex, VectorLightColors, VectorDarkColors, ModulesViewModel.selectAll, LogPaneState.atOldest and GOOD_FIRST_ISSUE_URL have no call site at all. RelativeTime.kt becomes TimeText.kt, since relative time is what left it. Seventeen strings go too, translations deleted alongside their source so the next Crowdin pull does not add them back. Three of them -- store_offline, settings_window, module_toggle_failed -- read more like missing features than dead weight, and their translated copy in eighteen languages goes with them. Daemon-side, CliHandler.isPackageInstalled, Utils.getZoneId, Utils.isLENOVO and :xposed's trackedApks have no caller; the live tracker is LoadedApkTracker.activeApks. magisk-loader goes as well, and that is the one deletion here that ships behaviour. Before #550 the loader baked the raw githubusercontent URL of magisk-loader/update/zygisk.json into every module.prop, so Magisk on a pre-v2.0 install polls it and will now get a 404. Effectively everyone is on v2.0 by now, and zygisk/update.json -- what module.prop has pointed at since -- is untouched. Nothing else changes behaviour. Release builds already shrink unused resources, and no deletion touches a de.robv or io.github.libxposed surface, an AIDL transaction id, a JNI name, a manifest entry or a keep rule. --- .github/workflows/core.yml | 1 - build.gradle.kts | 1 - buildSrc/README.md | 57 ----------- buildSrc/build.gradle.kts | 13 --- .../src/main/kotlin/GenerateLangListTask.kt | 91 ------------------ .../main/kotlin/GenerateMaterialThemeTask.kt | 54 ----------- .../matrix/vector/daemon/ipc/CliHandler.kt | 6 -- gradle/libs.versions.toml | 31 ------ .../java/hidden/ByteBufferDexClassLoader.java | 4 - .../src/main/java/hidden/HiddenApiBridge.java | 29 ------ .../java/android/app/IActivityController.java | 66 ------------- .../java/android/app/IActivityManager.java | 19 ---- .../android/app/INotificationManager.java | 7 -- .../src/main/java/android/app/LoadedApk.java | 6 -- .../android/content/BroadcastReceiver.java | 5 - .../main/java/android/content/Context.java | 6 -- .../android/content/pm/IPackageManager.java | 36 ------- .../java/android/content/pm/PackageInfo.java | 2 - .../android/content/pm/PackageInstaller.java | 7 -- .../android/content/pm/PackageManager.java | 9 -- .../src/main/java/android/os/Environment.java | 9 -- .../src/main/java/android/os/Handler.java | 4 - .../main/java/android/os/IServiceManager.java | 2 - .../main/java/android/os/IUserManager.java | 8 -- .../src/main/java/android/os/Parcelable.java | 10 -- .../main/java/android/os/ResultReceiver.java | 4 - .../main/java/android/os/ShellCallback.java | 25 ----- .../main/java/android/os/ShellCommand.java | 33 ------- .../src/main/java/android/os/UserHandle.java | 9 -- .../src/main/java/android/os/UserManager.java | 11 --- .../permission/IPermissionManager.java | 8 -- .../webkit/WebViewFactoryProvider.java | 4 - .../com/android/server/LocalServices.java | 8 -- .../com/android/server/SystemService.java | 4 - .../android/server/SystemServiceManager.java | 7 -- .../server/am/ActivityManagerService.java | 14 --- .../com/android/server/am/ProcessRecord.java | 5 - .../dalvik/system/BaseDexClassLoader.java | 4 - .../main/java/dalvik/system/VMRuntime.java | 15 --- .../java/sun/misc/CompoundEnumeration.java | 34 ------- magisk-loader/update/changelog.md | 16 ---- magisk-loader/update/zygisk.json | 6 -- .../org/matrix/vector/manager/Logging.kt | 10 +- .../manager/data/github/GitHubModels.kt | 29 ------ .../manager/data/github/GitHubRepository.kt | 7 -- .../vector/manager/ui/components/TakePart.kt | 2 +- .../{RelativeTime.kt => TimeText.kt} | 31 ------ .../ui/components/ambience/MatrixRenderer.kt | 1 - .../vector/manager/ui/screens/logs/LogRows.kt | 14 --- .../manager/ui/screens/logs/LogsViewModel.kt | 3 - .../ui/screens/modules/ModulesViewModel.kt | 4 - .../matrix/vector/manager/ui/theme/Color.kt | 95 +------------------ .../vector/manager/ui/theme/SeedScheme.kt | 17 ++-- .../matrix/vector/manager/ui/theme/Type.kt | 13 --- manager/src/main/res/values-ar/strings.xml | 30 ------ .../src/main/res/values-ar/strings_logs.xml | 8 -- .../src/main/res/values-ar/strings_store.xml | 2 - manager/src/main/res/values-de/strings.xml | 18 ---- .../src/main/res/values-de/strings_logs.xml | 8 -- .../src/main/res/values-de/strings_store.xml | 2 - manager/src/main/res/values-es/strings.xml | 18 ---- .../src/main/res/values-es/strings_logs.xml | 8 -- .../src/main/res/values-es/strings_store.xml | 2 - manager/src/main/res/values-fa/strings.xml | 18 ---- .../src/main/res/values-fa/strings_logs.xml | 8 -- .../src/main/res/values-fa/strings_store.xml | 2 - manager/src/main/res/values-fr/strings.xml | 18 ---- .../src/main/res/values-fr/strings_logs.xml | 8 -- .../src/main/res/values-fr/strings_store.xml | 2 - manager/src/main/res/values-in/strings.xml | 15 --- .../src/main/res/values-in/strings_logs.xml | 8 -- .../src/main/res/values-in/strings_store.xml | 2 - manager/src/main/res/values-it/strings.xml | 18 ---- .../src/main/res/values-it/strings_logs.xml | 8 -- .../src/main/res/values-it/strings_store.xml | 2 - manager/src/main/res/values-iw/strings.xml | 24 ----- .../src/main/res/values-iw/strings_logs.xml | 8 -- .../src/main/res/values-iw/strings_store.xml | 2 - manager/src/main/res/values-ja/strings.xml | 15 --- .../src/main/res/values-ja/strings_logs.xml | 8 -- .../src/main/res/values-ja/strings_store.xml | 2 - manager/src/main/res/values-ko/strings.xml | 15 --- .../src/main/res/values-ko/strings_logs.xml | 8 -- .../src/main/res/values-ko/strings_store.xml | 2 - manager/src/main/res/values-pl/strings.xml | 24 ----- .../src/main/res/values-pl/strings_logs.xml | 8 -- .../src/main/res/values-pl/strings_store.xml | 2 - .../src/main/res/values-pt-rBR/strings.xml | 18 ---- .../main/res/values-pt-rBR/strings_logs.xml | 8 -- .../main/res/values-pt-rBR/strings_store.xml | 2 - manager/src/main/res/values-ru/strings.xml | 23 ----- .../src/main/res/values-ru/strings_logs.xml | 7 -- .../src/main/res/values-ru/strings_store.xml | 2 - manager/src/main/res/values-tr/strings.xml | 18 ---- .../src/main/res/values-tr/strings_logs.xml | 8 -- .../src/main/res/values-tr/strings_store.xml | 2 - manager/src/main/res/values-uk/strings.xml | 24 ----- .../src/main/res/values-uk/strings_logs.xml | 8 -- .../src/main/res/values-uk/strings_store.xml | 2 - manager/src/main/res/values-vi/strings.xml | 15 --- .../src/main/res/values-vi/strings_logs.xml | 8 -- .../src/main/res/values-vi/strings_store.xml | 2 - .../src/main/res/values-zh-rCN/strings.xml | 15 --- .../main/res/values-zh-rCN/strings_logs.xml | 8 -- .../main/res/values-zh-rCN/strings_store.xml | 2 - .../src/main/res/values-zh-rTW/strings.xml | 15 --- .../main/res/values-zh-rTW/strings_logs.xml | 8 -- .../main/res/values-zh-rTW/strings_store.xml | 2 - manager/src/main/res/values/strings.xml | 23 ----- manager/src/main/res/values/strings_logs.xml | 9 -- manager/src/main/res/values/strings_store.xml | 2 - .../java/org/lsposed/lspd/util/Utils.java | 13 --- .../vector/impl/hookers/LoadedApkHookers.kt | 3 - 113 files changed, 17 insertions(+), 1469 deletions(-) delete mode 100644 buildSrc/README.md delete mode 100644 buildSrc/build.gradle.kts delete mode 100644 buildSrc/src/main/kotlin/GenerateLangListTask.kt delete mode 100644 buildSrc/src/main/kotlin/GenerateMaterialThemeTask.kt delete mode 100644 hiddenapi/stubs/src/main/java/android/app/IActivityController.java delete mode 100644 hiddenapi/stubs/src/main/java/android/content/BroadcastReceiver.java delete mode 100644 hiddenapi/stubs/src/main/java/android/content/pm/PackageInstaller.java delete mode 100644 hiddenapi/stubs/src/main/java/android/content/pm/PackageManager.java delete mode 100644 hiddenapi/stubs/src/main/java/android/os/Environment.java delete mode 100644 hiddenapi/stubs/src/main/java/android/os/Handler.java delete mode 100644 hiddenapi/stubs/src/main/java/android/os/Parcelable.java delete mode 100644 hiddenapi/stubs/src/main/java/android/os/ResultReceiver.java delete mode 100644 hiddenapi/stubs/src/main/java/android/os/ShellCallback.java delete mode 100644 hiddenapi/stubs/src/main/java/android/os/ShellCommand.java delete mode 100644 hiddenapi/stubs/src/main/java/android/os/UserManager.java delete mode 100644 hiddenapi/stubs/src/main/java/android/permission/IPermissionManager.java delete mode 100644 hiddenapi/stubs/src/main/java/android/webkit/WebViewFactoryProvider.java delete mode 100644 hiddenapi/stubs/src/main/java/com/android/server/LocalServices.java delete mode 100644 hiddenapi/stubs/src/main/java/com/android/server/SystemService.java delete mode 100644 hiddenapi/stubs/src/main/java/com/android/server/SystemServiceManager.java delete mode 100644 hiddenapi/stubs/src/main/java/com/android/server/am/ActivityManagerService.java delete mode 100644 hiddenapi/stubs/src/main/java/com/android/server/am/ProcessRecord.java delete mode 100644 hiddenapi/stubs/src/main/java/dalvik/system/VMRuntime.java delete mode 100644 hiddenapi/stubs/src/main/java/sun/misc/CompoundEnumeration.java delete mode 100644 magisk-loader/update/changelog.md delete mode 100644 magisk-loader/update/zygisk.json rename manager/src/main/kotlin/org/matrix/vector/manager/ui/components/{RelativeTime.kt => TimeText.kt} (76%) diff --git a/.github/workflows/core.yml b/.github/workflows/core.yml index 22c9dd112..535a0f2e7 100644 --- a/.github/workflows/core.yml +++ b/.github/workflows/core.yml @@ -92,7 +92,6 @@ jobs: echo 'android.native.buildOutput=verbose' >> ~/.gradle/gradle.properties echo 'org.gradle.parallel=true' >> ~/.gradle/gradle.properties echo 'org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8 -XX:+UseParallelGC' >> ~/.gradle/gradle.properties - echo 'android.native.buildOutput=verbose' >> ~/.gradle/gradle.properties - name: Setup ninja uses: seanmiddleditch/gha-setup-ninja@v6 diff --git a/build.gradle.kts b/build.gradle.kts index 5e85fae41..ccb7fe3c9 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -311,7 +311,6 @@ tasks.register("format") { "*/build.gradle.kts", "hiddenapi/*/build.gradle.kts", "services/*-service/build.gradle.kts", - "buildSrc/src/main/kotlin/**/*.kt", ) // The daemon subproject is stuck on ktfmt's default (Meta) style instead of the // kotlinLangStyle() applied everywhere else — the wrong style was set for it, but a diff --git a/buildSrc/README.md b/buildSrc/README.md deleted file mode 100644 index 925230339..000000000 --- a/buildSrc/README.md +++ /dev/null @@ -1,57 +0,0 @@ -# Vector Build Logic - -The `buildSrc` project holds build logic that Gradle compiles before configuring the main build. It currently contains two source generators consumed by the `:app` (manager) module. Both produce data that the manager references at compile time, so they participate in every application build rather than running as a manual pre-step. - -The manager exposes two user-facing settings that require precomputed, per-build data: an in-app language selector and an accent-color selector. The language selector needs the concrete set of locales the application ships translations for, and the color selector needs a full Material 3 palette for each preset seed color. These generators derive that data from the resource tree and a fixed color table, so the settings stay consistent with the translations and palette definitions actually present in the source. - -## Directory Structure - -```text -buildSrc/ -├── build.gradle.kts # kotlin-dsl module; declares the color-generation library -└── src/main/kotlin/ - ├── GenerateLangListTask.kt # translated-locale enumeration - └── GenerateMaterialThemeTask.kt # accent-color theme overlays -``` - -## Integration - -The task classes live in the default package and are therefore visible to the module build scripts without an import. The `:app` build registers them per variant through the AGP variant API: - -```kotlin -androidComponents { - onVariants { variant -> - val langList = tasks.register("generate${cap}LangList") { … } - variant.sources.java?.addGeneratedSourceDirectory(langList, GenerateLangListTask::outputDir) - - val theme = tasks.register("generate${cap}MaterialTheme") { … } - variant.sources.res?.addGeneratedSourceDirectory(theme, GenerateMaterialThemeTask::outputDir) - } -} -``` - -`addGeneratedSourceDirectory` binds each task's `outputDir` into the variant's Java or resource source set. AGP owns the output location, wires the task into the source-merge graph, and establishes the task dependency automatically, so the generated Java is compiled and the generated resources are merged like any hand-written source. - -## Locale List Generation - -`GenerateLangListTask` emits the `org.lsposed.manager.util.LangList` class, which the settings screen reads to populate the language dropdown (`LangList.LOCALES` for entry values, `LangList.DISPLAY_LOCALES` for the script-qualified display keys). - -Inputs are the resource directories to scan (`resDirs`), the target `packageName` and `className`, and the leading `firstItem` (`SYSTEM`). The task: - -* Collects every `values-` folder that contains a `strings.xml`, treating the qualifier as a translated locale and ignoring configuration-only qualifiers such as `values-night` or `values-v31`. -* Converts each Android qualifier to a BCP-47 tag: a `b+`-prefixed qualifier has its `+` separators replaced with `-`, and a trailing `-r` segment drops its `r` marker (`zh-rCN` becomes `zh-CN`, `pt-rBR` becomes `pt-BR`). -* Adds `en` for the default `values/` resources, sorts the tags, and prepends `firstItem`. -* Produces `DISPLAY_LOCALES` as a parallel array in which the Simplified and Traditional Chinese tags are rewritten to their script forms (`zh-CN` to `zh-Hans`, `zh-TW` to `zh-Hant`); all other tags are identical to `LOCALES`. - -Adding a new translation is therefore a matter of dropping a `values-/strings.xml` folder into the module; the list updates on the next build with no manual edits. - -## Material Theme Generation - -`GenerateMaterialThemeTask` emits a resource `values.xml` containing the color roles and theme-overlay styles that back the accent-color options. The manager maps each preset to a generated style through `ThemeUtil` (for example `MATERIAL_RED` to `R.style.ThemeOverlay_MaterialRed`) and applies it to recolor the interface. - -Inputs are the seed color table (`seedColors`, mapping a theme name to a hex value), the `generatePalette` flag, and the `lightThemeFormat` / `darkThemeFormat` style-name templates. For each seed the task computes a Material 3 tonal palette (primary, secondary, tertiary, neutral, neutral-variant, and error ramps across the standard tone stops) and writes: - -* The resolved color roles for the light and dark schemes (`colorPrimary`, `colorOnPrimary`, `colorPrimaryContainer`, and the remaining container, surface, and outline roles). -* A `ThemeOverlay.Light.Material` and `ThemeOverlay.Dark.Material` style that binds those roles, plus the discrete palette attributes (`palettePrimary0` through `palettePrimary100`, and the equivalent ramps for the other tonal palettes) when `generatePalette` is set. - -The color science and XML serialization are provided by the `dev.rikka.tools.materialthemebuilder` artifact declared in `build.gradle.kts`. The task drives it directly: it instantiates a `MaterialThemeBuilderExtension` through the `ObjectFactory`, populates the theme container from `seedColors`, and invokes `ValuesAllGenerator`. Only the library classes are used; the artifact's Gradle plugin is not applied. Themes are keyed in a `NamedDomainObjectContainer`, so the output is ordered by theme name and is deterministic for a given seed table. diff --git a/buildSrc/build.gradle.kts b/buildSrc/build.gradle.kts deleted file mode 100644 index df91c774b..000000000 --- a/buildSrc/build.gradle.kts +++ /dev/null @@ -1,13 +0,0 @@ -plugins { `kotlin-dsl` } - -repositories { - google() - mavenCentral() -} - -dependencies { - // Supplies the Material color science (HCT, tonal palettes) and XML generators used by - // GenerateMaterialThemeTask. Only the library classes are referenced; the plugin is not - // applied. - implementation("dev.rikka.tools.materialthemebuilder:gradle-plugin:1.5.1") -} diff --git a/buildSrc/src/main/kotlin/GenerateLangListTask.kt b/buildSrc/src/main/kotlin/GenerateLangListTask.kt deleted file mode 100644 index 0ca995f68..000000000 --- a/buildSrc/src/main/kotlin/GenerateLangListTask.kt +++ /dev/null @@ -1,91 +0,0 @@ -import java.io.File -import org.gradle.api.DefaultTask -import org.gradle.api.file.ConfigurableFileCollection -import org.gradle.api.file.DirectoryProperty -import org.gradle.api.provider.Property -import org.gradle.api.tasks.Input -import org.gradle.api.tasks.InputFiles -import org.gradle.api.tasks.OutputDirectory -import org.gradle.api.tasks.PathSensitive -import org.gradle.api.tasks.PathSensitivity -import org.gradle.api.tasks.TaskAction - -/** - * Generates the `LangList` class enumerating the locales the app is translated into. - * - * Scans [resDirs] for `values-` folders containing a `strings.xml`, converts each - * Android locale qualifier to a BCP-47 tag (`zh-rCN` -> `zh-CN`, `pt-rBR` -> `pt-BR`), adds `en` - * for the default `values/` resources, sorts the result, and prepends [firstItem]. - * `DISPLAY_LOCALES` mirrors `LOCALES` with the script-qualified aliases the UI expects (`zh-CN` -> - * `zh-Hans`, `zh-TW` -> `zh-Hant`). - */ -abstract class GenerateLangListTask : DefaultTask() { - @get:InputFiles - @get:PathSensitive(PathSensitivity.RELATIVE) - abstract val resDirs: ConfigurableFileCollection - - @get:Input abstract val packageName: Property - - @get:Input abstract val className: Property - - @get:Input abstract val firstItem: Property - - @get:OutputDirectory abstract val outputDir: DirectoryProperty - - @TaskAction - fun generate() { - val tags = sortedSetOf() - tags.add("en") // the default `values/` resources are English - resDirs.files.forEach { res -> - (res.listFiles() ?: emptyArray()).forEach { dir -> - if ( - dir.isDirectory && - dir.name.startsWith("values-") && - File(dir, "strings.xml").exists() - ) { - tags.add(toBcp47(dir.name.removePrefix("values-"))) - } - } - } - - val locales = buildList { - add(firstItem.get()) - addAll(tags) - } - val display = locales.map { DISPLAY_ALIASES.getOrDefault(it, it) } - - val pkg = packageName.get() - val cls = className.get() - val out = outputDir.get().asFile.resolve(pkg.replace('.', '/')).resolve("$cls.java") - out.parentFile.mkdirs() - out.writeText( - buildString { - append("package ").append(pkg).append(";\n\n") - append("public final class ").append(cls).append(" {\n") - append(" public static final String[] LOCALES = {") - append(locales.joinToString(",") { "\"$it\"" }) - append("};\n") - append(" public static final String[] DISPLAY_LOCALES = {") - append(display.joinToString(",") { "\"$it\"" }) - append("};\n") - append("}\n") - } - ) - } - - /** Converts an Android resource locale qualifier to a BCP-47 language tag. */ - private fun toBcp47(qualifier: String): String { - if (qualifier.startsWith("b+")) return qualifier.substring(2).replace('+', '-') - // A `-r` segment carries a leading `r` marker to strip (e.g. `rCN` -> `CN`). - return qualifier - .split("-") - .mapIndexed { index, seg -> - if (index > 0 && seg.length == 3 && seg[0] == 'r') seg.substring(1) else seg - } - .joinToString("-") - } - - private companion object { - val DISPLAY_ALIASES = mapOf("zh-CN" to "zh-Hans", "zh-TW" to "zh-Hant") - } -} diff --git a/buildSrc/src/main/kotlin/GenerateMaterialThemeTask.kt b/buildSrc/src/main/kotlin/GenerateMaterialThemeTask.kt deleted file mode 100644 index 0ec8c1802..000000000 --- a/buildSrc/src/main/kotlin/GenerateMaterialThemeTask.kt +++ /dev/null @@ -1,54 +0,0 @@ -import dev.rikka.tools.materialthemebuilder.MaterialThemeBuilderExtension -import dev.rikka.tools.materialthemebuilder.generator.ValuesAllGenerator -import java.io.File -import javax.inject.Inject -import org.gradle.api.DefaultTask -import org.gradle.api.file.DirectoryProperty -import org.gradle.api.model.ObjectFactory -import org.gradle.api.provider.MapProperty -import org.gradle.api.provider.Property -import org.gradle.api.tasks.Input -import org.gradle.api.tasks.OutputDirectory -import org.gradle.api.tasks.TaskAction - -/** - * Generates the Material theme-overlay colors and styles that back the app's accent-color options. - * - * For each [seedColors] entry (theme name without the `Material` prefix mapped to a hex seed) it - * computes a Material 3 tonal palette and emits a `ThemeOverlay.Light/Dark.Material` style, - * named via [lightThemeFormat] / [darkThemeFormat]. The color math and XML writer are provided by - * the materialthemebuilder library through a [MaterialThemeBuilderExtension]. - */ -abstract class GenerateMaterialThemeTask @Inject constructor(private val objects: ObjectFactory) : - DefaultTask() { - @get:Input abstract val seedColors: MapProperty - - @get:Input abstract val generatePalette: Property - - @get:Input abstract val lightThemeFormat: Property - - @get:Input abstract val darkThemeFormat: Property - - @get:OutputDirectory abstract val outputDir: DirectoryProperty - - @TaskAction - fun generate() { - val extension = objects.newInstance(MaterialThemeBuilderExtension::class.java) - extension.isGeneratePalette = generatePalette.get() - val light = lightThemeFormat.get() - val dark = darkThemeFormat.get() - seedColors.get().toSortedMap().forEach { (name, color) -> - extension.themes.create("Material$name") { - primaryColor = "#$color" - lightThemeFormat = light - darkThemeFormat = dark - } - } - - val root = outputDir.get().asFile - // Wipe stale output so removed themes don't linger. - root.walkBottomUp().forEach { if (it != root) it.delete() } - val valuesDir = File(root, "values").apply { mkdirs() } - ValuesAllGenerator(File(valuesDir, "values.xml"), extension).generate() - } -} diff --git a/daemon/src/main/kotlin/org/matrix/vector/daemon/ipc/CliHandler.kt b/daemon/src/main/kotlin/org/matrix/vector/daemon/ipc/CliHandler.kt index 4133f0869..2013fabce 100644 --- a/daemon/src/main/kotlin/org/matrix/vector/daemon/ipc/CliHandler.kt +++ b/daemon/src/main/kotlin/org/matrix/vector/daemon/ipc/CliHandler.kt @@ -10,7 +10,6 @@ import org.matrix.vector.daemon.CliResponse import org.matrix.vector.daemon.data.ConfigCache import org.matrix.vector.daemon.data.ModuleDatabase import org.matrix.vector.daemon.data.PreferenceStore -import org.matrix.vector.daemon.system.* object CliHandler { @@ -44,11 +43,6 @@ object CliHandler { "Status Notification" to PreferenceStore.isStatusNotificationEnabled()) } - private fun isPackageInstalled(pkg: String, userId: Int = 0): Boolean { - return runCatching { packageManager?.getPackageInfo(pkg, 0, userId) != null } - .getOrDefault(false) - } - private fun handleModules(request: CliRequest): Any { return when (request.action) { "ls" -> { diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index e41b210af..83ccdc3d9 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,9 +1,6 @@ [versions] agp = "9.3.1" kotlin = "2.4.10" -nav = "2.9.8" -appcenter = "5.0.5" -glide = "5.0.9" okhttp = "5.4.0" ktfmt = "0.26.0" coroutines = "1.11.0" @@ -24,7 +21,6 @@ agp-app = { id = "com.android.application", version.ref = "agp" } kotlin = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" } kotlin-compose = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" } kotlin-serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" } -nav-safeargs = { id = "androidx.navigation.safeargs", version.ref = "nav" } ktfmt = { id = "com.ncorti.ktfmt.gradle", version.ref = "ktfmt" } lsplugin-apksign = { id = "org.lsposed.lsplugin.apksign", version = "1.4" } @@ -62,42 +58,15 @@ coil-network-okhttp = { group = "io.coil-kt.coil3", name = "coil-network-okhttp" kotlinx-serialization-json = { module = "org.jetbrains.kotlinx:kotlinx-serialization-json", version = "1.11.0" } -rikkax-appcompat = { module = "dev.rikka.rikkax.appcompat:appcompat", version = "1.6.1" } -rikkax-core = { module = "dev.rikka.rikkax.core:core", version = "1.4.1" } -rikkax-insets = { module = "dev.rikka.rikkax.insets:insets", version = "1.3.0" } -rikkax-layoutinflater = { module = "dev.rikka.rikkax.layoutinflater:layoutinflater", version = "1.3.0" } -rikkax-material = { module = "dev.rikka.rikkax.material:material", version = "2.7.2" } -rikkax-material-preference = { module = "dev.rikka.rikkax.material:material-preference", version = "2.0.0" } rikkax-parcelablelist = { module = "dev.rikka.rikkax.parcelablelist:parcelablelist", version = "2.0.1" } -rikkax-recyclerview = { module = "dev.rikka.rikkax.recyclerview:recyclerview-ktx", version = "1.3.2" } -rikkax-widget-borderview = { module = "dev.rikka.rikkax.widget:borderview", version = "1.1.0" } -rikkax-widget-mainswitchbar = { module = "dev.rikka.rikkax.widget:mainswitchbar", version = "1.0.2" } -androidx-activity = { module = "androidx.activity:activity", version = "1.13.0" } androidx-annotation = { module = "androidx.annotation:annotation", version = "1.10.0" } -androidx-browser = { module = "androidx.browser:browser", version = "1.10.0" } -androidx-constraintlayout = { module = "androidx.constraintlayout:constraintlayout", version = "2.2.1" } -androidx-core = { module = "androidx.core:core", version = "1.19.0" } -androidx-fragment = { module = "androidx.fragment:fragment", version = "1.8.9" } -androidx-navigation-fragment = { group = "androidx.navigation", name = "navigation-fragment", version.ref = "nav" } -androidx-navigation-ui = { group = "androidx.navigation", name = "navigation-ui", version.ref = "nav" } -androidx-preference = { module = "androidx.preference:preference", version = "1.2.1" } -androidx-recyclerview = { module = "androidx.recyclerview:recyclerview", version = "1.4.0" } -androidx-swiperefreshlayout = { module = "androidx.swiperefreshlayout:swiperefreshlayout", version = "1.2.0" } - -glide = { group = "com.github.bumptech.glide", name = "glide", version.ref = "glide" } -glide-compiler = { group = "com.github.bumptech.glide", name = "compiler", version.ref = "glide" } okhttp = { group = "com.squareup.okhttp3", name = "okhttp", version.ref = "okhttp" } okhttp-dnsoverhttps = { group = "com.squareup.okhttp3", name = "okhttp-dnsoverhttps", version.ref = "okhttp" } -okhttp-logging-interceptor = { group = "com.squareup.okhttp3", name = "logging-interceptor", version.ref = "okhttp" } agp-apksig = { group = "com.android.tools.build", name = "apksig", version.ref = "agp" } -appiconloader = { module = "me.zhanghai.android.appiconloader:appiconloader", version = "1.5.0" } -material = { module = "com.google.android.material:material", version = "1.12.0" } gson = { module = "com.google.code.gson:gson", version = "2.14.0" } -hiddenapibypass = { module = "org.lsposed.hiddenapibypass:hiddenapibypass", version = "6.1" } -kotlin-stdlib = { module = "org.jetbrains.kotlin:kotlin-stdlib", version.ref = "kotlin" } kotlinx-coroutines-android = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-android", version.ref = "coroutines" } kotlinx-coroutines-core = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core", version.ref = "coroutines" } picocli = { module = "info.picocli:picocli", version = "4.7.7" } diff --git a/hiddenapi/bridge/src/main/java/hidden/ByteBufferDexClassLoader.java b/hiddenapi/bridge/src/main/java/hidden/ByteBufferDexClassLoader.java index 622eb709b..9115dbfd5 100644 --- a/hiddenapi/bridge/src/main/java/hidden/ByteBufferDexClassLoader.java +++ b/hiddenapi/bridge/src/main/java/hidden/ByteBufferDexClassLoader.java @@ -13,8 +13,4 @@ public ByteBufferDexClassLoader(ByteBuffer[] dexFiles, ClassLoader parent) { public ByteBufferDexClassLoader(ByteBuffer[] dexFiles, String librarySearchPath, ClassLoader parent) { super(dexFiles, librarySearchPath, parent); } - - public String getLdLibraryPath() { - return super.getLdLibraryPath(); - } } diff --git a/hiddenapi/bridge/src/main/java/hidden/HiddenApiBridge.java b/hiddenapi/bridge/src/main/java/hidden/HiddenApiBridge.java index 8055bf378..c2aa4d493 100644 --- a/hiddenapi/bridge/src/main/java/hidden/HiddenApiBridge.java +++ b/hiddenapi/bridge/src/main/java/hidden/HiddenApiBridge.java @@ -20,20 +20,14 @@ package hidden; import android.app.ActivityManager; -import android.content.BroadcastReceiver; import android.content.Context; -import android.content.Intent; -import android.content.IntentFilter; import android.content.pm.ApplicationInfo; -import android.content.pm.PackageInstaller; import android.content.res.AssetManager; import android.content.res.CompatibilityInfo; import android.content.res.Resources; import android.content.res.ResourcesImpl; import android.os.Binder; import android.os.Build; -import android.os.Environment; -import android.os.Handler; import android.os.IBinder; import android.os.UserHandle; import android.system.ErrnoException; @@ -43,7 +37,6 @@ import androidx.annotation.RequiresApi; -import java.io.File; import java.io.FileDescriptor; public class HiddenApiBridge { @@ -59,32 +52,10 @@ public static void Resources_setImpl(Resources resources, ResourcesImpl impl) { resources.setImpl(impl); } - public static int PackageInstaller_SessionParams_installFlags(PackageInstaller.SessionParams params) { - return params.installFlags; - } - - public static void PackageInstaller_SessionParams_installFlags(PackageInstaller.SessionParams params, int flags) { - params.installFlags = flags; - } - public static IBinder Context_getActivityToken(Context ctx) { return ctx.getActivityToken(); } - public static File Environment_getDataProfilesDePackageDirectory(int userId, String packageName) { - return Environment.getDataProfilesDePackageDirectory(userId, packageName); - } - - public static Intent Context_registerReceiverAsUser(Context ctx, BroadcastReceiver receiver, UserHandle user, - IntentFilter filter, String broadcastPermission, Handler scheduler) { - - return ctx.registerReceiverAsUser(receiver, user, filter, broadcastPermission, scheduler); - } - - public static UserHandle UserHandle_ALL() { - return UserHandle.ALL; - } - public static UserHandle UserHandle(int h) { return new UserHandle(h); } diff --git a/hiddenapi/stubs/src/main/java/android/app/IActivityController.java b/hiddenapi/stubs/src/main/java/android/app/IActivityController.java deleted file mode 100644 index a88ac8fa4..000000000 --- a/hiddenapi/stubs/src/main/java/android/app/IActivityController.java +++ /dev/null @@ -1,66 +0,0 @@ -package android.app; - -import android.content.Intent; -import android.os.Binder; -import android.os.Bundle; -import android.os.IBinder; -import android.os.IInterface; - -public interface IActivityController extends IInterface { - /** - * The system is trying to start an activity. Return true to allow - * it to be started as normal, or false to cancel/reject this activity. - */ - boolean activityStarting(Intent intent, String pkg); - - /** - * The system is trying to return to an activity. Return true to allow - * it to be resumed as normal, or false to cancel/reject this activity. - */ - boolean activityResuming(String pkg); - - /** - * An application process has crashed (in Java). Return true for the - * normal error recovery (app crash dialog) to occur, false to kill - * it immediately. - */ - boolean appCrashed(String processName, int pid, - String shortMsg, String longMsg, - long timeMillis, String stackTrace); - - /** - * Early call as soon as an ANR is detected. - */ - int appEarlyNotResponding(String processName, int pid, String annotation); - - /** - * An application process is not responding. Return 0 to show the "app - * not responding" dialog, 1 to continue waiting, or -1 to kill it - * immediately. - */ - int appNotResponding(String processName, int pid, String processStats); - - /** - * The system process watchdog has detected that the system seems to be - * hung. Return 1 to continue waiting, or -1 to let it continue with its - * normal kill. - */ - int systemNotResponding(String msg); - - /** - * 360 phones - */ - boolean moveTaskToFront(String pkg, int task, int flags, Bundle options); - - abstract class Stub extends Binder implements IActivityController { - - public static IActivityController asInterface(IBinder obj) { - throw new UnsupportedOperationException(); - } - - @Override - public IBinder asBinder() { - throw new UnsupportedOperationException(); - } - } -} diff --git a/hiddenapi/stubs/src/main/java/android/app/IActivityManager.java b/hiddenapi/stubs/src/main/java/android/app/IActivityManager.java index 0a70a72c4..7cbe5220b 100644 --- a/hiddenapi/stubs/src/main/java/android/app/IActivityManager.java +++ b/hiddenapi/stubs/src/main/java/android/app/IActivityManager.java @@ -23,7 +23,6 @@ import android.content.Intent; import android.content.IntentFilter; import android.content.pm.UserInfo; -import android.content.res.Configuration; import android.os.Binder; import android.os.Bundle; import android.os.IBinder; @@ -60,16 +59,6 @@ int broadcastIntent(IApplicationThread caller, Intent intent, String resultData, Bundle map, String[] requiredPermissions, int appOp, Bundle options, boolean serialized, boolean sticky, int userId) throws RemoteException; - int startActivity(IApplicationThread caller, String callingPackage, Intent intent, - String resolvedType, IBinder resultTo, String resultWho, int requestCode, - int flags, ProfilerInfo profilerInfo, Bundle options) throws RemoteException; - - @RequiresApi(30) - int startActivityWithFeature(IApplicationThread caller, String callingPackage, - String callingFeatureId, Intent intent, String resolvedType, - IBinder resultTo, String resultWho, int requestCode, int flags, - ProfilerInfo profilerInfo, Bundle options) throws RemoteException; - int startActivityAsUser(IApplicationThread caller, String callingPackage, Intent intent, String resolvedType, IBinder resultTo, String resultWho, int requestCode, int flags, ProfilerInfo profilerInfo, @@ -83,8 +72,6 @@ int startActivityAsUserWithFeature(IApplicationThread caller, String callingPack void forceStopPackage(String packageName, int userId) throws RemoteException; - boolean startUserInBackground(int userid) throws RemoteException; - Intent registerReceiver(IApplicationThread caller, String callerPackage, IIntentReceiver receiver, IntentFilter filter, String requiredPermission, int userId, int flags) throws RemoteException; @@ -117,20 +104,14 @@ int bindService(IApplicationThread caller, IBinder token, Intent service, UserInfo getCurrentUser() throws RemoteException; - void setActivityController(IActivityController watcher, boolean imAMonkey) throws RemoteException; - @RequiresApi(29) ContentProviderHolder getContentProviderExternal(String name, int userId, IBinder token, String tag) throws RemoteException; ContentProviderHolder getContentProviderExternal(String name, int userId, IBinder token) throws RemoteException; - Configuration getConfiguration() throws RemoteException; - void registerUidObserver(IUidObserver observer, int which, int cutpoint, String callingPackage) throws RemoteException; abstract class Stub extends Binder implements IActivityManager { - public static int TRANSACTION_setActivityController; - public static IActivityManager asInterface(IBinder obj) { throw new UnsupportedOperationException(); } diff --git a/hiddenapi/stubs/src/main/java/android/app/INotificationManager.java b/hiddenapi/stubs/src/main/java/android/app/INotificationManager.java index 8a73e0e91..c90fed798 100644 --- a/hiddenapi/stubs/src/main/java/android/app/INotificationManager.java +++ b/hiddenapi/stubs/src/main/java/android/app/INotificationManager.java @@ -19,13 +19,6 @@ void enqueueNotificationWithTag(String pkg, String opPkg, String tag, int id, void createNotificationChannelsForPackage(String pkg, int uid, ParceledListSlice channelsList) throws RemoteException; - void updateNotificationChannelForPackage(String pkg, int uid, NotificationChannel channel); - - @RequiresApi(30) - NotificationChannel getNotificationChannelForPackage(String pkg, int uid, String channelId, String conversationId, boolean includeDeleted) throws RemoteException; - - NotificationChannel getNotificationChannelForPackage(String pkg, int uid, String channelId, boolean includeDeleted) throws RemoteException; - abstract class Stub extends Binder implements INotificationManager { public static INotificationManager asInterface(IBinder obj) { throw new UnsupportedOperationException(); diff --git a/hiddenapi/stubs/src/main/java/android/app/LoadedApk.java b/hiddenapi/stubs/src/main/java/android/app/LoadedApk.java index 32f294c1e..bd8c7a6bd 100644 --- a/hiddenapi/stubs/src/main/java/android/app/LoadedApk.java +++ b/hiddenapi/stubs/src/main/java/android/app/LoadedApk.java @@ -3,8 +3,6 @@ import android.content.pm.ApplicationInfo; public final class LoadedApk { - private ClassLoader mDefaultClassLoader; - public ApplicationInfo getApplicationInfo() { throw new UnsupportedOperationException("STUB"); } @@ -16,8 +14,4 @@ public ClassLoader getClassLoader() { public String getPackageName() { throw new UnsupportedOperationException("STUB"); } - - public String getResDir() { - throw new UnsupportedOperationException("STUB"); - } } diff --git a/hiddenapi/stubs/src/main/java/android/content/BroadcastReceiver.java b/hiddenapi/stubs/src/main/java/android/content/BroadcastReceiver.java deleted file mode 100644 index d70f080aa..000000000 --- a/hiddenapi/stubs/src/main/java/android/content/BroadcastReceiver.java +++ /dev/null @@ -1,5 +0,0 @@ -package android.content; - -public abstract class BroadcastReceiver { - public abstract void onReceive(Context context, Intent intent); -} diff --git a/hiddenapi/stubs/src/main/java/android/content/Context.java b/hiddenapi/stubs/src/main/java/android/content/Context.java index fc22c4492..1084a435f 100644 --- a/hiddenapi/stubs/src/main/java/android/content/Context.java +++ b/hiddenapi/stubs/src/main/java/android/content/Context.java @@ -1,15 +1,9 @@ package android.content; -import android.os.Handler; import android.os.IBinder; -import android.os.UserHandle; public class Context { public IBinder getActivityToken() { throw new UnsupportedOperationException("STUB"); } - public Intent registerReceiverAsUser(BroadcastReceiver receiver, UserHandle user, - IntentFilter filter, String broadcastPermission, Handler scheduler) { - throw new UnsupportedOperationException("STUB"); - } } diff --git a/hiddenapi/stubs/src/main/java/android/content/pm/IPackageManager.java b/hiddenapi/stubs/src/main/java/android/content/pm/IPackageManager.java index 15578dc7c..af158e886 100644 --- a/hiddenapi/stubs/src/main/java/android/content/pm/IPackageManager.java +++ b/hiddenapi/stubs/src/main/java/android/content/pm/IPackageManager.java @@ -30,42 +30,6 @@ PackageInfo getPackageInfo(String packageName, int flags, int userId) PackageInfo getPackageInfo(String packageName, long flags, int userId) throws RemoteException; - int getPackageUid(String packageName, int flags, int userId) throws RemoteException; - - @RequiresApi(33) - int getPackageUid(String packageName, long flags, int userId) throws RemoteException; - - String[] getPackagesForUid(int uid) - throws RemoteException; - - ParceledListSlice getInstalledApplications(int flags, int userId) - throws RemoteException; - - @RequiresApi(33) - ParceledListSlice getInstalledApplications(long flags, int userId) - throws RemoteException; - - int getUidForSharedUser(String sharedUserName) - throws RemoteException; - - void grantRuntimePermission(String packageName, String permissionName, int userId) - throws RemoteException; - - void revokeRuntimePermission(String packageName, String permissionName, int userId) - throws RemoteException; - - int getPermissionFlags(String permissionName, String packageName, int userId) - throws RemoteException; - - void updatePermissionFlags(String permissionName, String packageName, int flagMask, int flagValues, int userId) - throws RemoteException; - - int checkPermission(String permName, String pkgName, int userId) - throws RemoteException; - - int checkUidPermission(String permName, int uid) - throws RemoteException; - IPackageInstaller getPackageInstaller() throws RemoteException; int installExistingPackageAsUser(String packageName, int userId, int installFlags, diff --git a/hiddenapi/stubs/src/main/java/android/content/pm/PackageInfo.java b/hiddenapi/stubs/src/main/java/android/content/pm/PackageInfo.java index f087c27c9..654296045 100644 --- a/hiddenapi/stubs/src/main/java/android/content/pm/PackageInfo.java +++ b/hiddenapi/stubs/src/main/java/android/content/pm/PackageInfo.java @@ -1,6 +1,4 @@ package android.content.pm; public class PackageInfo { - - public String overlayTarget; } diff --git a/hiddenapi/stubs/src/main/java/android/content/pm/PackageInstaller.java b/hiddenapi/stubs/src/main/java/android/content/pm/PackageInstaller.java deleted file mode 100644 index ab6b0de4d..000000000 --- a/hiddenapi/stubs/src/main/java/android/content/pm/PackageInstaller.java +++ /dev/null @@ -1,7 +0,0 @@ -package android.content.pm; - -public class PackageInstaller { - public static class SessionParams { - public int installFlags = 0; - } -} diff --git a/hiddenapi/stubs/src/main/java/android/content/pm/PackageManager.java b/hiddenapi/stubs/src/main/java/android/content/pm/PackageManager.java deleted file mode 100644 index cb035235f..000000000 --- a/hiddenapi/stubs/src/main/java/android/content/pm/PackageManager.java +++ /dev/null @@ -1,9 +0,0 @@ -package android.content.pm; - -import java.util.List; - -public class PackageManager { - public List getInstalledPackagesAsUser(int flags, int userId) { - throw new UnsupportedOperationException("STUB"); - } -} diff --git a/hiddenapi/stubs/src/main/java/android/os/Environment.java b/hiddenapi/stubs/src/main/java/android/os/Environment.java deleted file mode 100644 index f769f46d0..000000000 --- a/hiddenapi/stubs/src/main/java/android/os/Environment.java +++ /dev/null @@ -1,9 +0,0 @@ -package android.os; - -import java.io.File; - -public class Environment { - public static File getDataProfilesDePackageDirectory(int userId, String packageName) { - throw new IllegalArgumentException("STUB"); - } -} diff --git a/hiddenapi/stubs/src/main/java/android/os/Handler.java b/hiddenapi/stubs/src/main/java/android/os/Handler.java deleted file mode 100644 index dd6327221..000000000 --- a/hiddenapi/stubs/src/main/java/android/os/Handler.java +++ /dev/null @@ -1,4 +0,0 @@ -package android.os; - -public class Handler { -} diff --git a/hiddenapi/stubs/src/main/java/android/os/IServiceManager.java b/hiddenapi/stubs/src/main/java/android/os/IServiceManager.java index 7a1b19617..1e1193ee9 100644 --- a/hiddenapi/stubs/src/main/java/android/os/IServiceManager.java +++ b/hiddenapi/stubs/src/main/java/android/os/IServiceManager.java @@ -2,8 +2,6 @@ public interface IServiceManager extends IInterface { - void tryUnregisterService(java.lang.String name, android.os.IBinder service); - IBinder getService(String name); public void registerForNotifications(String name, IServiceCallback cb); diff --git a/hiddenapi/stubs/src/main/java/android/os/IUserManager.java b/hiddenapi/stubs/src/main/java/android/os/IUserManager.java index f2295d0b7..96f3e7e54 100644 --- a/hiddenapi/stubs/src/main/java/android/os/IUserManager.java +++ b/hiddenapi/stubs/src/main/java/android/os/IUserManager.java @@ -2,15 +2,9 @@ import android.content.pm.UserInfo; -import androidx.annotation.RequiresApi; - import java.util.List; public interface IUserManager extends IInterface { - @RequiresApi(26) - boolean isUserUnlocked(int userId) - throws RemoteException; - List getUsers(boolean excludeDying) throws RemoteException; @@ -21,8 +15,6 @@ List getUsers(boolean excludePartial, boolean excludeDying, boolean ex UserInfo getProfileParent(int userId) throws RemoteException; - boolean isUserUnlockingOrUnlocked(int userId) throws RemoteException; - abstract class Stub extends Binder implements IUserManager { public static IUserManager asInterface(IBinder obj) { diff --git a/hiddenapi/stubs/src/main/java/android/os/Parcelable.java b/hiddenapi/stubs/src/main/java/android/os/Parcelable.java deleted file mode 100644 index 5c716ee51..000000000 --- a/hiddenapi/stubs/src/main/java/android/os/Parcelable.java +++ /dev/null @@ -1,10 +0,0 @@ -package android.os; - -public interface Parcelable { - interface Creator{ - public T createFromParcel(Parcel source); - public T[] newArray(int size); - } - void writeToParcel(Parcel dest, int flags); - int describeContents(); -} diff --git a/hiddenapi/stubs/src/main/java/android/os/ResultReceiver.java b/hiddenapi/stubs/src/main/java/android/os/ResultReceiver.java deleted file mode 100644 index 358ae780f..000000000 --- a/hiddenapi/stubs/src/main/java/android/os/ResultReceiver.java +++ /dev/null @@ -1,4 +0,0 @@ -package android.os; - -public class ResultReceiver { -} diff --git a/hiddenapi/stubs/src/main/java/android/os/ShellCallback.java b/hiddenapi/stubs/src/main/java/android/os/ShellCallback.java deleted file mode 100644 index fe342213a..000000000 --- a/hiddenapi/stubs/src/main/java/android/os/ShellCallback.java +++ /dev/null @@ -1,25 +0,0 @@ -package android.os; - -public class ShellCallback implements Parcelable { - public static final Parcelable.Creator CREATOR = new Creator() { - @Override - public ShellCallback createFromParcel(Parcel source) { - throw new IllegalArgumentException("STUB"); - } - - @Override - public ShellCallback[] newArray(int size) { - throw new IllegalArgumentException("STUB"); - } - }; - - @Override - public void writeToParcel(Parcel dest, int flags) { - throw new IllegalArgumentException("STUB"); - } - - @Override - public int describeContents() { - throw new IllegalArgumentException("STUB"); - } -} diff --git a/hiddenapi/stubs/src/main/java/android/os/ShellCommand.java b/hiddenapi/stubs/src/main/java/android/os/ShellCommand.java deleted file mode 100644 index 56dac90c2..000000000 --- a/hiddenapi/stubs/src/main/java/android/os/ShellCommand.java +++ /dev/null @@ -1,33 +0,0 @@ -package android.os; - -import java.io.FileDescriptor; -import java.io.InputStream; -import java.io.PrintWriter; - -public abstract class ShellCommand { - public int exec(Binder target, FileDescriptor in, FileDescriptor out, FileDescriptor err, - String[] args, ShellCallback callback, ResultReceiver resultReceiver) { - throw new IllegalArgumentException("STUB!"); - } - - public abstract int onCommand(String cmd); - public abstract void onHelp(); - - public String getNextOption(){ - throw new IllegalArgumentException("STUB!"); - } - - public String getNextArgRequired() { - throw new IllegalArgumentException("STUB!"); - } - - public PrintWriter getErrPrintWriter() { - throw new IllegalArgumentException("STUB!"); - } - public PrintWriter getOutPrintWriter() { - throw new IllegalArgumentException("STUB!"); - } - public InputStream getRawInputStream() { - throw new IllegalArgumentException("STUB!"); - } -} diff --git a/hiddenapi/stubs/src/main/java/android/os/UserHandle.java b/hiddenapi/stubs/src/main/java/android/os/UserHandle.java index 310fe2463..0c5f51cd2 100644 --- a/hiddenapi/stubs/src/main/java/android/os/UserHandle.java +++ b/hiddenapi/stubs/src/main/java/android/os/UserHandle.java @@ -1,17 +1,8 @@ package android.os; -import android.annotation.NonNull; - public class UserHandle { public UserHandle(int h) { throw new RuntimeException("STUB"); } - - public int getIdentifier() { - throw new RuntimeException("STUB"); - } - - public static final @NonNull - UserHandle ALL = null; } diff --git a/hiddenapi/stubs/src/main/java/android/os/UserManager.java b/hiddenapi/stubs/src/main/java/android/os/UserManager.java deleted file mode 100644 index 1dda5b631..000000000 --- a/hiddenapi/stubs/src/main/java/android/os/UserManager.java +++ /dev/null @@ -1,11 +0,0 @@ -package android.os; - -import android.content.pm.UserInfo; - -import java.util.List; - -public class UserManager { - public List getUsers() { - throw new UnsupportedOperationException("STUB"); - } -} diff --git a/hiddenapi/stubs/src/main/java/android/permission/IPermissionManager.java b/hiddenapi/stubs/src/main/java/android/permission/IPermissionManager.java deleted file mode 100644 index 595f4756e..000000000 --- a/hiddenapi/stubs/src/main/java/android/permission/IPermissionManager.java +++ /dev/null @@ -1,8 +0,0 @@ -package android.permission; - -import java.util.List; - -public interface IPermissionManager { - - List getSplitPermissions(); -} diff --git a/hiddenapi/stubs/src/main/java/android/webkit/WebViewFactoryProvider.java b/hiddenapi/stubs/src/main/java/android/webkit/WebViewFactoryProvider.java deleted file mode 100644 index 43b5fd5e3..000000000 --- a/hiddenapi/stubs/src/main/java/android/webkit/WebViewFactoryProvider.java +++ /dev/null @@ -1,4 +0,0 @@ -package android.webkit; - -public class WebViewFactoryProvider { -} diff --git a/hiddenapi/stubs/src/main/java/com/android/server/LocalServices.java b/hiddenapi/stubs/src/main/java/com/android/server/LocalServices.java deleted file mode 100644 index 06717abf4..000000000 --- a/hiddenapi/stubs/src/main/java/com/android/server/LocalServices.java +++ /dev/null @@ -1,8 +0,0 @@ -package com.android.server; - -public class LocalServices { - - public static T getService(Class type) { - throw new UnsupportedOperationException("STUB"); - } -} diff --git a/hiddenapi/stubs/src/main/java/com/android/server/SystemService.java b/hiddenapi/stubs/src/main/java/com/android/server/SystemService.java deleted file mode 100644 index 2f678e8a2..000000000 --- a/hiddenapi/stubs/src/main/java/com/android/server/SystemService.java +++ /dev/null @@ -1,4 +0,0 @@ -package com.android.server; - -public abstract class SystemService { -} diff --git a/hiddenapi/stubs/src/main/java/com/android/server/SystemServiceManager.java b/hiddenapi/stubs/src/main/java/com/android/server/SystemServiceManager.java deleted file mode 100644 index d9e2a920e..000000000 --- a/hiddenapi/stubs/src/main/java/com/android/server/SystemServiceManager.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.android.server; - -import java.util.ArrayList; - -public class SystemServiceManager { - private final ArrayList mServices = new ArrayList<>(); -} diff --git a/hiddenapi/stubs/src/main/java/com/android/server/am/ActivityManagerService.java b/hiddenapi/stubs/src/main/java/com/android/server/am/ActivityManagerService.java deleted file mode 100644 index 2d51101f2..000000000 --- a/hiddenapi/stubs/src/main/java/com/android/server/am/ActivityManagerService.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.android.server.am; - -import com.android.server.SystemService; - -public class ActivityManagerService { - public static final class Lifecycle extends SystemService { - public ActivityManagerService getService() { - throw new UnsupportedOperationException("STUB"); - } - private ProcessRecord findProcessLocked(String process, int userId, String callName) { - throw new UnsupportedOperationException("STUB"); - } - } -} diff --git a/hiddenapi/stubs/src/main/java/com/android/server/am/ProcessRecord.java b/hiddenapi/stubs/src/main/java/com/android/server/am/ProcessRecord.java deleted file mode 100644 index 8947ce02f..000000000 --- a/hiddenapi/stubs/src/main/java/com/android/server/am/ProcessRecord.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.android.server.am; - -public class ProcessRecord { - String processName = null; -} diff --git a/hiddenapi/stubs/src/main/java/dalvik/system/BaseDexClassLoader.java b/hiddenapi/stubs/src/main/java/dalvik/system/BaseDexClassLoader.java index 4979dc44f..dd2aec20a 100644 --- a/hiddenapi/stubs/src/main/java/dalvik/system/BaseDexClassLoader.java +++ b/hiddenapi/stubs/src/main/java/dalvik/system/BaseDexClassLoader.java @@ -10,8 +10,4 @@ public BaseDexClassLoader(ByteBuffer[] dexFiles, ClassLoader parent) { public BaseDexClassLoader(ByteBuffer[] dexFiles, String librarySearchPath, ClassLoader parent) { throw new RuntimeException("Stub!"); } - - public String getLdLibraryPath() { - throw new RuntimeException("Stub!"); - } } diff --git a/hiddenapi/stubs/src/main/java/dalvik/system/VMRuntime.java b/hiddenapi/stubs/src/main/java/dalvik/system/VMRuntime.java deleted file mode 100644 index 692b45694..000000000 --- a/hiddenapi/stubs/src/main/java/dalvik/system/VMRuntime.java +++ /dev/null @@ -1,15 +0,0 @@ -package dalvik.system; - -public class VMRuntime { - - public static VMRuntime getRuntime() { - throw new RuntimeException("Stub!"); - } - - // Use `Process.is64Bit()` instead - public native boolean is64Bit(); - - public native String vmInstructionSet(); - - public native boolean isJavaDebuggable(); -} diff --git a/hiddenapi/stubs/src/main/java/sun/misc/CompoundEnumeration.java b/hiddenapi/stubs/src/main/java/sun/misc/CompoundEnumeration.java deleted file mode 100644 index 26eeedc10..000000000 --- a/hiddenapi/stubs/src/main/java/sun/misc/CompoundEnumeration.java +++ /dev/null @@ -1,34 +0,0 @@ -package sun.misc; - -import java.util.Enumeration; -import java.util.NoSuchElementException; - -public class CompoundEnumeration implements Enumeration { - private final Enumeration[] enums; - private int index = 0; - - public CompoundEnumeration(Enumeration[] enums) { - this.enums = enums; - } - - private boolean next() { - while (index < enums.length) { - if (enums[index] != null && enums[index].hasMoreElements()) { - return true; - } - index++; - } - return false; - } - - public boolean hasMoreElements() { - return next(); - } - - public E nextElement() { - if (!next()) { - throw new NoSuchElementException(); - } - return enums[index].nextElement(); - } -} diff --git a/magisk-loader/update/changelog.md b/magisk-loader/update/changelog.md deleted file mode 100644 index a5bb3a2fd..000000000 --- a/magisk-loader/update/changelog.md +++ /dev/null @@ -1,16 +0,0 @@ -🎉 **Release: Vector 2.0** 🎉 - -Welcome to Vector 2.0! As part of our ongoing transition, the project has officially been renamed from `LSPosed` to `Vector`. While our major internal refactoring is still underway, we are releasing 2.0 now to provide a stable, feature-complete environment for those relying on legacy libxposed APIs. - -### 📚 libxposed API 100 & 101 -With the recent publication of libxposed API 101, the ecosystem is moving toward a new standard with significant breaking changes. Because API 100 was never officially published, **Vector 2.0 serves as the definitive implementation of the API 100 era**, built from the exact commit prior to the API 101 jump. - -### 🏗️ Architecture & API Updates -* **Vector & Zygisk Overhaul:** Officially renamed and modularized the project, featuring a completely rewritten, modern Zygisk architecture. -* **API 100 Finalization:** Completed all remaining libxposed API 100 features, including comprehensive support for static initializers, constructor hooking, and centralized logging. - - -### ⚙️ Core Engine & System Enhancements -* 🔓 **Bypassed Bionic `LD_PRELOAD` Restrictions:** Resolved fatal namespace errors on Android 10 by loading the `dex2oat` hook library via a `memfd_create` tmpfs-backed file descriptor, bypassing the linker's namespace checks. -* 🛡️ **Reflection Parity Overhaul:** Completely rebuilt the `invokeSpecialMethod` backend to improve performance, enhance robustness, and mirror standard Java reflection behavior. -* ⏱️ **Late Injection Standalone Launch:** Added native support for manual late injection (triggered by NeoZygisk), without relying on Magisk's early-init phase—highly useful for AOSP debug builds. diff --git a/magisk-loader/update/zygisk.json b/magisk-loader/update/zygisk.json deleted file mode 100644 index 96fc577a8..000000000 --- a/magisk-loader/update/zygisk.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "version": "v2.0", - "versionCode": 3021, - "zipUrl": "https://github.com/JingMatrix/LSPosed/releases/download/v2.0/Vector-v2.0-Release.zip", - "changelog": "https://raw.githubusercontent.com/JingMatrix/LSPosed/master/zygisk/changelog.md" -} diff --git a/manager/src/main/kotlin/org/matrix/vector/manager/Logging.kt b/manager/src/main/kotlin/org/matrix/vector/manager/Logging.kt index 3a859191b..235d1b7ec 100644 --- a/manager/src/main/kotlin/org/matrix/vector/manager/Logging.kt +++ b/manager/src/main/kotlin/org/matrix/vector/manager/Logging.kt @@ -32,13 +32,13 @@ import java.io.StringWriter * ordinary Android practice and would land nowhere; there are none in this app. * * A message is `area: lowercase phrase naming the operation and its subject`, where the area is one - * of ipc, dns, apps, modules, backup, restore, scope, store, update, feed, auth, status, framework, - * logs, actions, report, splash. The subject matters: "modules: enable of $packageName failed" can - * be acted on, "failed to enable module" cannot. + * of ipc, dns, apps, modules, backup, restore, scope, store, update, feed, status, framework, logs, + * actions, report, splash. The subject matters: "modules: enable of $packageName failed" can be + * acted on, "failed to enable module" cannot. * * The `Throwable` is always the last argument — never `e.message`, which discards the stack. - * Nothing secret is ever interpolated: no OAuth token, no SAF `Uri` beyond its authority, no - * third-party query string. + * Nothing secret is ever interpolated: no SAF `Uri` beyond its authority, no third-party query + * string. * * Levels are [logE] when something the user asked for did not happen and nothing else will explain * it, [logW] for a degraded path recovered from, and [logI] for a one-off milestone worth having in diff --git a/manager/src/main/kotlin/org/matrix/vector/manager/data/github/GitHubModels.kt b/manager/src/main/kotlin/org/matrix/vector/manager/data/github/GitHubModels.kt index 7078b9f4e..a13bae7bb 100644 --- a/manager/src/main/kotlin/org/matrix/vector/manager/data/github/GitHubModels.kt +++ b/manager/src/main/kotlin/org/matrix/vector/manager/data/github/GitHubModels.kt @@ -247,35 +247,6 @@ data class GhReleaseAsset( @SerialName("browser_download_url") val downloadUrl: String? = null, ) -@Serializable -data class GhWorkflowRuns( - @SerialName("workflow_runs") val runs: List = emptyList() -) - -@Serializable -data class GhWorkflowRun( - val id: Long, - val name: String? = null, - @SerialName("head_branch") val headBranch: String? = null, - @SerialName("head_sha") val headSha: String = "", - @SerialName("display_title") val displayTitle: String? = null, - @SerialName("created_at") val createdAt: String = "", - @SerialName("html_url") val htmlUrl: String? = null, - val conclusion: String? = null, -) - -@Serializable -data class GhArtifacts(val artifacts: List = emptyList()) - -@Serializable -data class GhArtifact( - val id: Long, - val name: String, - @SerialName("size_in_bytes") val sizeInBytes: Long = 0, - val expired: Boolean = false, - @SerialName("archive_download_url") val downloadUrl: String? = null, -) - /** A successful CI run, as the canary screen renders it. */ data class CanaryBuild( val id: Long, diff --git a/manager/src/main/kotlin/org/matrix/vector/manager/data/github/GitHubRepository.kt b/manager/src/main/kotlin/org/matrix/vector/manager/data/github/GitHubRepository.kt index a5dde4024..ea360eb18 100644 --- a/manager/src/main/kotlin/org/matrix/vector/manager/data/github/GitHubRepository.kt +++ b/manager/src/main/kotlin/org/matrix/vector/manager/data/github/GitHubRepository.kt @@ -922,14 +922,7 @@ class GitHubRepository( const val ISSUES_URL = "$REPO_URL/issues" const val PULLS_URL = "$REPO_URL/pulls" const val DISCUSSIONS_URL = "$REPO_URL/discussions" - const val GOOD_FIRST_ISSUE_URL = "$REPO_URL/issues?q=is%3Aopen+label%3A%22good+first+issue%22" - /** - * The workflow's own run list, filtered to master. - * - * The way out of the app for anyone who wants a build log, or a commit older than the five - * canaries CI keeps published. [canaryBuilds] itself reads prereleases, not this page. - */ /** * The Actions page, filtered the way the project README's build badge filters it. * diff --git a/manager/src/main/kotlin/org/matrix/vector/manager/ui/components/TakePart.kt b/manager/src/main/kotlin/org/matrix/vector/manager/ui/components/TakePart.kt index cd3623169..31a789c9b 100644 --- a/manager/src/main/kotlin/org/matrix/vector/manager/ui/components/TakePart.kt +++ b/manager/src/main/kotlin/org/matrix/vector/manager/ui/components/TakePart.kt @@ -89,7 +89,7 @@ fun TakePartSection( ) { // A screen rather than a link to the Actions page, which shows an anonymous visitor // that a build exists and then refuses to hand it over. The screen lists the builds - // without a sign-in and explains what signing in would buy. + // without a sign-in. Door( Icons.Rounded.Science, stringResource(R.string.home_test_canary), diff --git a/manager/src/main/kotlin/org/matrix/vector/manager/ui/components/RelativeTime.kt b/manager/src/main/kotlin/org/matrix/vector/manager/ui/components/TimeText.kt similarity index 76% rename from manager/src/main/kotlin/org/matrix/vector/manager/ui/components/RelativeTime.kt rename to manager/src/main/kotlin/org/matrix/vector/manager/ui/components/TimeText.kt index 0b72c07d1..3103230ee 100644 --- a/manager/src/main/kotlin/org/matrix/vector/manager/ui/components/RelativeTime.kt +++ b/manager/src/main/kotlin/org/matrix/vector/manager/ui/components/TimeText.kt @@ -3,40 +3,9 @@ package org.matrix.vector.manager.ui.components import androidx.compose.runtime.Composable import androidx.compose.runtime.remember import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.res.stringResource import java.util.Locale -import org.matrix.vector.manager.R import org.matrix.vector.manager.ui.theme.currentLocale -/** - * "4 days ago", in the user's language. - * - * Coarse on purpose. The commit feed answers "is this project alive and who is working on it", - * which minutes and hours do not help with, and a coarse label stays correct for longer without - * recomposing. - */ -@Composable -fun relativeTime(epochSeconds: Long): String { - val context = LocalContext.current - val days = ((System.currentTimeMillis() / 1000 - epochSeconds) / 86_400L).toInt() - return when { - // Today is the one case where the exact hour is worth more than the coarse label: it is - // how someone watching a fix land tells "just now" from "this morning". Rendered in the - // device's own locale and 12/24-hour preference. - days <= 0 -> - android.text.format.DateFormat.getTimeFormat(context) - .format(java.util.Date(epochSeconds * 1000)) - days == 1 -> stringResource(R.string.time_yesterday) - days < 7 -> context.resources.getQuantityString(R.plurals.time_days_ago, days, days) - days < 31 -> - (days / 7).let { context.resources.getQuantityString(R.plurals.time_weeks_ago, it, it) } - else -> - (days / 30).let { - context.resources.getQuantityString(R.plurals.time_months_ago, it, it) - } - } -} - /** * Compact counts for the project footer: 11905 becomes "11.9k". * diff --git a/manager/src/main/kotlin/org/matrix/vector/manager/ui/components/ambience/MatrixRenderer.kt b/manager/src/main/kotlin/org/matrix/vector/manager/ui/components/ambience/MatrixRenderer.kt index 5a2846a2c..b5241a0c0 100644 --- a/manager/src/main/kotlin/org/matrix/vector/manager/ui/components/ambience/MatrixRenderer.kt +++ b/manager/src/main/kotlin/org/matrix/vector/manager/ui/components/ambience/MatrixRenderer.kt @@ -8,7 +8,6 @@ import androidx.compose.ui.text.TextMeasurer import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.drawText import androidx.compose.ui.text.font.FontFamily -import androidx.compose.ui.unit.sp import kotlin.math.abs import kotlin.random.Random diff --git a/manager/src/main/kotlin/org/matrix/vector/manager/ui/screens/logs/LogRows.kt b/manager/src/main/kotlin/org/matrix/vector/manager/ui/screens/logs/LogRows.kt index db8cb59ec..4fcfd3519 100644 --- a/manager/src/main/kotlin/org/matrix/vector/manager/ui/screens/logs/LogRows.kt +++ b/manager/src/main/kotlin/org/matrix/vector/manager/ui/screens/logs/LogRows.kt @@ -484,20 +484,6 @@ fun levelColor(level: LogLevel): Color = else -> MaterialTheme.colorScheme.outline } -@Composable -fun levelLabel(level: LogLevel): String = - stringResource( - when (level) { - LogLevel.VERBOSE -> R.string.logs_level_verbose - LogLevel.DEBUG -> R.string.logs_level_debug - LogLevel.INFO -> R.string.logs_level_info - LogLevel.WARN -> R.string.logs_level_warn - LogLevel.ERROR -> R.string.logs_level_error - LogLevel.FATAL -> R.string.logs_level_fatal - else -> R.string.logs_level_other - } - ) - /** * The throwable type an entry's message names, or null if it does not name one. * diff --git a/manager/src/main/kotlin/org/matrix/vector/manager/ui/screens/logs/LogsViewModel.kt b/manager/src/main/kotlin/org/matrix/vector/manager/ui/screens/logs/LogsViewModel.kt index bd94dc189..87af5be1d 100644 --- a/manager/src/main/kotlin/org/matrix/vector/manager/ui/screens/logs/LogsViewModel.kt +++ b/manager/src/main/kotlin/org/matrix/vector/manager/ui/screens/logs/LogsViewModel.kt @@ -98,9 +98,6 @@ data class LogPaneState( val filtered: Boolean get() = query.isActive - val atOldest: Boolean - get() = windowFirst == 0 - val atNewest: Boolean get() = windowLast >= visibleLines } diff --git a/manager/src/main/kotlin/org/matrix/vector/manager/ui/screens/modules/ModulesViewModel.kt b/manager/src/main/kotlin/org/matrix/vector/manager/ui/screens/modules/ModulesViewModel.kt index 19e65efd4..9cf6dbc57 100644 --- a/manager/src/main/kotlin/org/matrix/vector/manager/ui/screens/modules/ModulesViewModel.kt +++ b/manager/src/main/kotlin/org/matrix/vector/manager/ui/screens/modules/ModulesViewModel.kt @@ -298,10 +298,6 @@ class ModulesViewModel( _selection.update { if (key in it) it - key else it + key } } - fun selectAll(modules: List) { - _selection.update { it + modules.map { m -> ModuleKey(m.packageName, m.userId) } } - } - fun clearSelection() { _selection.value = emptySet() } diff --git a/manager/src/main/kotlin/org/matrix/vector/manager/ui/theme/Color.kt b/manager/src/main/kotlin/org/matrix/vector/manager/ui/theme/Color.kt index cbdd62f12..d2d0900d0 100644 --- a/manager/src/main/kotlin/org/matrix/vector/manager/ui/theme/Color.kt +++ b/manager/src/main/kotlin/org/matrix/vector/manager/ui/theme/Color.kt @@ -1,103 +1,18 @@ package org.matrix.vector.manager.ui.theme import androidx.compose.material3.ColorScheme -import androidx.compose.material3.darkColorScheme -import androidx.compose.material3.lightColorScheme import androidx.compose.ui.graphics.Color -/** - * The fallback palette, used below Android 12 and whenever the user turns dynamic colour off. - * - * It is seeded from the Winged Victory's own patina, `#6ABFCF` — the deepest of the eight tones in - * `ic_winged_victory.xml`. Above API 31 the wallpaper decides instead, which is why nothing in this - * app may rely on a specific hue to carry meaning: `StatusHeader` and `UpdatableVersion` carry - * state by shape, icon, label and motion as well as by colour. - */ -val VectorLightColors: ColorScheme = - lightColorScheme( - primary = Color(0xFF00687A), - onPrimary = Color(0xFFFFFFFF), - primaryContainer = Color(0xFFADEDFF), - onPrimaryContainer = Color(0xFF001F27), - inversePrimary = Color(0xFF55D6F2), - secondary = Color(0xFF4B6269), - onSecondary = Color(0xFFFFFFFF), - secondaryContainer = Color(0xFFCEE7EF), - onSecondaryContainer = Color(0xFF061F25), - tertiary = Color(0xFF5A5B7E), - onTertiary = Color(0xFFFFFFFF), - tertiaryContainer = Color(0xFFE0E0FF), - onTertiaryContainer = Color(0xFF171837), - error = Color(0xFFBA1A1A), - onError = Color(0xFFFFFFFF), - errorContainer = Color(0xFFFFDAD6), - onErrorContainer = Color(0xFF410002), - background = Color(0xFFF5FAFC), - onBackground = Color(0xFF171C1E), - surface = Color(0xFFF5FAFC), - onSurface = Color(0xFF171C1E), - surfaceVariant = Color(0xFFDBE4E7), - onSurfaceVariant = Color(0xFF3F484B), - surfaceTint = Color(0xFF00687A), - inverseSurface = Color(0xFF2B3134), - inverseOnSurface = Color(0xFFECF1F4), - outline = Color(0xFF6F797B), - outlineVariant = Color(0xFFBFC8CB), - scrim = Color(0xFF000000), - surfaceBright = Color(0xFFF5FAFC), - surfaceDim = Color(0xFFD6DBDE), - surfaceContainerLowest = Color(0xFFFFFFFF), - surfaceContainerLow = Color(0xFFEFF4F7), - surfaceContainer = Color(0xFFE9EEF1), - surfaceContainerHigh = Color(0xFFE3E9EB), - surfaceContainerHighest = Color(0xFFDEE3E6), - ) - -val VectorDarkColors: ColorScheme = - darkColorScheme( - primary = Color(0xFF55D6F2), - onPrimary = Color(0xFF003641), - primaryContainer = Color(0xFF004E5C), - onPrimaryContainer = Color(0xFFADEDFF), - inversePrimary = Color(0xFF00687A), - secondary = Color(0xFFB2CBD3), - onSecondary = Color(0xFF1D343A), - secondaryContainer = Color(0xFF334A51), - onSecondaryContainer = Color(0xFFCEE7EF), - tertiary = Color(0xFFC3C3EB), - onTertiary = Color(0xFF2C2D4D), - tertiaryContainer = Color(0xFF424365), - onTertiaryContainer = Color(0xFFE0E0FF), - error = Color(0xFFFFB4AB), - onError = Color(0xFF690005), - errorContainer = Color(0xFF93000A), - onErrorContainer = Color(0xFFFFDAD6), - background = Color(0xFF0E1416), - onBackground = Color(0xFFDEE3E6), - surface = Color(0xFF0E1416), - onSurface = Color(0xFFDEE3E6), - surfaceVariant = Color(0xFF3F484B), - onSurfaceVariant = Color(0xFFBFC8CB), - surfaceTint = Color(0xFF55D6F2), - inverseSurface = Color(0xFFDEE3E6), - inverseOnSurface = Color(0xFF2B3134), - outline = Color(0xFF899295), - outlineVariant = Color(0xFF3F484B), - scrim = Color(0xFF000000), - surfaceBright = Color(0xFF343A3C), - surfaceDim = Color(0xFF0E1416), - surfaceContainerLowest = Color(0xFF090F11), - surfaceContainerLow = Color(0xFF171C1E), - surfaceContainer = Color(0xFF1B2022), - surfaceContainerHigh = Color(0xFF252B2D), - surfaceContainerHighest = Color(0xFF303638), - ) - /** * Collapses every background role to true black, for OLED panels. * * Applied on top of whichever dark scheme is in use — including a dynamic one — so the accent * colours the user's wallpaper produced survive. + * + * Which palette is in force is never this app's choice: from API 31 the wallpaper decides it, and + * below that, or whenever the user turns dynamic colour off, the seed they picked does. So nothing + * in this app may rely on a specific hue to carry meaning — `StatusHeader` and `UpdatableVersion` + * carry state by shape, icon, label and motion as well as by colour. */ fun ColorScheme.toAmoled(): ColorScheme = copy( diff --git a/manager/src/main/kotlin/org/matrix/vector/manager/ui/theme/SeedScheme.kt b/manager/src/main/kotlin/org/matrix/vector/manager/ui/theme/SeedScheme.kt index 544af5eea..709409f46 100644 --- a/manager/src/main/kotlin/org/matrix/vector/manager/ui/theme/SeedScheme.kt +++ b/manager/src/main/kotlin/org/matrix/vector/manager/ui/theme/SeedScheme.kt @@ -18,8 +18,8 @@ import kotlin.math.sin * Android's own generator is only reachable through `dynamicColorScheme`, which reads the * *wallpaper* and nothing else — there is no public API that takes a colour and hands back a * scheme. So a user who wants Vector in their own colour, or anyone below Android 12 where dynamic - * colour does not exist at all, would otherwise be stuck with the one hand-written palette in - * [VectorLightColors]. This file removes that limit without pulling in a dependency. + * colour does not exist at all, would otherwise be stuck with a single hand-written palette. This + * file removes that limit without pulling in a dependency. * * The work happens in **CIE LCh**, which is the same idea as Google's HCT: hold the hue and the * colourfulness of the seed fixed, and walk the *lightness* up and down to build a tonal ramp. That @@ -36,7 +36,10 @@ import kotlin.math.sin */ object SeedScheme { - /** The Winged Victory's patina, and the app's identity colour when nothing else is chosen. */ + /** + * The Winged Victory's patina — the deepest of the eight tones in `ic_winged_victory.xml` — and + * the app's identity colour when nothing else is chosen. + */ const val DEFAULT_SEED: Int = 0xFF6ABFCF.toInt() /** @@ -291,12 +294,4 @@ object SeedScheme { fun Color.toHex(): String = "#%02X%02X%02X" .format((red * 255).roundToInt(), (green * 255).roundToInt(), (blue * 255).roundToInt()) - - /** Parses `#RRGGBB` or `RRGGBB`, returning null rather than throwing on a half-typed value. */ - fun parseHex(text: String): Int? { - val body = text.trim().removePrefix("#") - if (body.length != 6) return null - val value = body.toLongOrNull(16) ?: return null - return (0xFF000000L or value).toInt() - } } diff --git a/manager/src/main/kotlin/org/matrix/vector/manager/ui/theme/Type.kt b/manager/src/main/kotlin/org/matrix/vector/manager/ui/theme/Type.kt index fb231ced4..e54dec60b 100644 --- a/manager/src/main/kotlin/org/matrix/vector/manager/ui/theme/Type.kt +++ b/manager/src/main/kotlin/org/matrix/vector/manager/ui/theme/Type.kt @@ -1,12 +1,8 @@ package org.matrix.vector.manager.ui.theme -import androidx.compose.material3.Typography -import androidx.compose.runtime.Composable -import androidx.compose.runtime.remember import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.style.TextDirection import androidx.compose.ui.text.font.FontFamily -import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.sp /** @@ -38,12 +34,3 @@ val VectorLogLine: TextStyle = // A log line is machine output; it is read in the order it was written, always. textDirection = TextDirection.Ltr, ) - -/** - * Section headers on Home read as a magazine front page rather than a settings list, so they get - * extra tracking and weight against the default `titleMedium`. - */ -@Composable -fun sectionHeaderStyle(base: Typography): TextStyle = remember(base) { - base.titleSmall.copy(fontWeight = FontWeight.SemiBold, letterSpacing = 0.8.sp) -} diff --git a/manager/src/main/res/values-ar/strings.xml b/manager/src/main/res/values-ar/strings.xml index b7749cb05..fb6770e1f 100644 --- a/manager/src/main/res/values-ar/strings.xml +++ b/manager/src/main/res/values-ar/strings.xml @@ -107,32 +107,6 @@ %1$d يوم هدوء - أمس - - اليوم - قبل يوم - قبل يومين - قبل %1$d أيام - قبل %1$d يومًا - قبل %1$d يوم - - - هذا الأسبوع - قبل أسبوع - قبل أسبوعين - قبل %1$d أسابيع - قبل %1$d أسبوعًا - قبل %1$d أسبوع - - - هذا الشهر - قبل شهر - قبل شهرين - قبل %1$d أشهر - قبل %1$d شهرًا - قبل %1$d شهر - - المظهر السمة حسب النظام @@ -170,7 +144,6 @@ تحتاج واجهة Xposed %1$d، وهذا الإطار لا يوفّرها. بُني على libxposed API %1$d. غيّر الإصدار %2$d الواجهة، لذا قد لا تعمل هذه الوحدة بالكامل. ‏Vector لا يعمل، لذا قائمة الوحدات غير متاحة. افتح حالة النظام من الرئيسية لمعرفة السبب. - تعذّر تغيير %1$s. رفض الإطار التغيير. فتح في المتصفح @@ -188,7 +161,6 @@ غيّر ترتيبها، أو أخفِ ما لا تفتحه أبدًا. تدفّق النشاط - التاريخ المعروض في الرئيسية بلا أشهر آخر شهر @@ -249,7 +221,6 @@ أُلغي تثبيت %1$s. تعذّر إلغاء تثبيت %1$s. - الإعدادات رجوع إعادة المحاولة @@ -333,7 +304,6 @@ تعذّر بدء برنامج التثبيت. تعذّر تنزيل التحديث. أخفق برنامج التثبيت (رمز الخروج %1$d). - يتوفر تحديث تجاهل تحديثات هذه الوحدة لن تُحتسب قديمة بعد الآن، لا هنا ولا في قائمة الوحدات خيارات diff --git a/manager/src/main/res/values-ar/strings_logs.xml b/manager/src/main/res/values-ar/strings_logs.xml index 9a70e4a8e..c1a555251 100644 --- a/manager/src/main/res/values-ar/strings_logs.xml +++ b/manager/src/main/res/values-ar/strings_logs.xml @@ -14,14 +14,6 @@ مسح التصفية تُقرأ كامل الملف كي تتجاوز التصفية ما يظهر على الشاشة. - مفصّل - تنقيح - معلومة - تحذير - خطأ - فادح - أخرى - الأسطر %1$d–%2$d من %3$d لا أسطر مطابقة diff --git a/manager/src/main/res/values-ar/strings_store.xml b/manager/src/main/res/values-ar/strings_store.xml index 729db590a..681485458 100644 --- a/manager/src/main/res/values-ar/strings_store.xml +++ b/manager/src/main/res/values-ar/strings_store.xml @@ -27,7 +27,6 @@ %1$d تحديث كل ما لديك محدَّث - يُعرض الفهرس المحفوظ التحديث إلى %1$s إعادة تثبيت %1$s @@ -51,7 +50,6 @@ فتح صفحة الوحدة تثبيت - تحديث إعادة التثبيت اختر ملفًا للتثبيت diff --git a/manager/src/main/res/values-de/strings.xml b/manager/src/main/res/values-de/strings.xml index 403a9276d..5799979b1 100644 --- a/manager/src/main/res/values-de/strings.xml +++ b/manager/src/main/res/values-de/strings.xml @@ -87,20 +87,6 @@ %1$d Tage still - gestern - - vor %1$d Tag - vor %1$d Tagen - - - vor %1$d Woche - vor %1$d Wochen - - - vor %1$d Monat - vor %1$d Monaten - - Darstellung Design System folgen @@ -138,7 +124,6 @@ Benötigt Xposed-API %1$d, die dieses Framework nicht bereitstellt. Für libxposed-API %1$d gebaut. API %2$d hat die Schnittstelle geändert, daher funktioniert dieses Modul möglicherweise nicht vollständig. Vector läuft nicht, deshalb ist die Modulliste nicht verfügbar. Öffne den Systemstatus auf der Startseite, um zu sehen, warum. - %1$s konnte nicht geändert werden. Das Framework hat die Änderung abgelehnt. Im Browser öffnen @@ -156,7 +141,6 @@ Ändere ihre Reihenfolge oder blende aus, was du nie öffnest. Aktivitätsverlauf - Auf der Startseite gezeigter Verlauf Letzter %1$d Monat Letzte %1$d Monate @@ -213,7 +197,6 @@ %1$s deinstalliert. %1$s konnte nicht deinstalliert werden. - Einstellungen Zurück Erneut versuchen @@ -289,7 +272,6 @@ Das Installationsprogramm ließ sich nicht starten. Das Update konnte nicht geladen werden. Das Installationsprogramm ist fehlgeschlagen (Exit %1$d). - Update verfügbar Updates für dieses Modul ignorieren Es gilt hier und in der Modulliste nicht mehr als veraltet Optionen diff --git a/manager/src/main/res/values-de/strings_logs.xml b/manager/src/main/res/values-de/strings_logs.xml index 7780e9dd9..eae016b67 100644 --- a/manager/src/main/res/values-de/strings_logs.xml +++ b/manager/src/main/res/values-de/strings_logs.xml @@ -14,14 +14,6 @@ Filter löschen Die ganze Datei wird gelesen, damit der Filter über das Sichtbare hinaus greift. - Ausführlich - Debug - Info - Warnung - Fehler - Fatal - Sonstige - Zeilen %1$d–%2$d von %3$d %1$d passende Zeile diff --git a/manager/src/main/res/values-de/strings_store.xml b/manager/src/main/res/values-de/strings_store.xml index 269682d34..08884db7a 100644 --- a/manager/src/main/res/values-de/strings_store.xml +++ b/manager/src/main/res/values-de/strings_store.xml @@ -19,7 +19,6 @@ %1$d Updates alles, was du hast, ist aktuell - Gespeicherter Katalog Update auf %1$s %1$s neu installieren @@ -43,7 +42,6 @@ Modulseite öffnen Installieren - Aktualisieren Neu installieren Datei zur Installation wählen diff --git a/manager/src/main/res/values-es/strings.xml b/manager/src/main/res/values-es/strings.xml index b05666dbf..d115df52c 100644 --- a/manager/src/main/res/values-es/strings.xml +++ b/manager/src/main/res/values-es/strings.xml @@ -87,20 +87,6 @@ %1$d días en calma - ayer - - hace %1$d día - hace %1$d días - - - hace %1$d semana - hace %1$d semanas - - - hace %1$d mes - hace %1$d meses - - Apariencia Tema Seguir al sistema @@ -138,7 +124,6 @@ Necesita la API %1$d de Xposed, que este framework no proporciona. Compilado para la API %1$d de libxposed. La API %2$d cambió la interfaz, así que este módulo podría no funcionar del todo. Vector no está en marcha, así que la lista de módulos no está disponible. Abre el estado del sistema desde Inicio para ver por qué. - No se pudo cambiar %1$s. El framework rechazó el cambio. Abrir en el navegador @@ -156,7 +141,6 @@ Cambia su orden, u oculta las que nunca abres. Actividad - Historial mostrado en Inicio Último %1$d mes Últimos %1$d meses @@ -213,7 +197,6 @@ %1$s desinstalada. No se pudo desinstalar %1$s. - Ajustes Atrás Reintentar @@ -289,7 +272,6 @@ No se pudo iniciar el instalador. No se pudo descargar la actualización. El instalador falló (código %1$d). - Actualización disponible Ignorar las actualizaciones de este módulo Deja de contar como desactualizado, aquí y en la lista de módulos Opciones diff --git a/manager/src/main/res/values-es/strings_logs.xml b/manager/src/main/res/values-es/strings_logs.xml index 3eaa9bd8c..896e2b9fd 100644 --- a/manager/src/main/res/values-es/strings_logs.xml +++ b/manager/src/main/res/values-es/strings_logs.xml @@ -14,14 +14,6 @@ Quitar el filtro Leyendo el archivo entero para que el filtro alcance más allá de lo que hay en pantalla. - Detallado - Depuración - Info - Aviso - Error - Fatal - Otro - Líneas %1$d–%2$d de %3$d %1$d línea coincidente diff --git a/manager/src/main/res/values-es/strings_store.xml b/manager/src/main/res/values-es/strings_store.xml index 5318a0311..f33180783 100644 --- a/manager/src/main/res/values-es/strings_store.xml +++ b/manager/src/main/res/values-es/strings_store.xml @@ -19,7 +19,6 @@ %1$d actualizaciones todo lo que tienes está al día - Mostrando el catálogo guardado Actualizar a %1$s Reinstalar %1$s @@ -43,7 +42,6 @@ Abrir la página del módulo Instalar - Actualizar Reinstalar Elige el archivo que instalar diff --git a/manager/src/main/res/values-fa/strings.xml b/manager/src/main/res/values-fa/strings.xml index b1bce8d0a..9c8b1aa48 100644 --- a/manager/src/main/res/values-fa/strings.xml +++ b/manager/src/main/res/values-fa/strings.xml @@ -87,20 +87,6 @@ %1$d روز آرامش - دیروز - - %1$d روز پیش - %1$d روز پیش - - - %1$d هفته پیش - %1$d هفته پیش - - - %1$d ماه پیش - %1$d ماه پیش - - ظاهر پوسته هماهنگ با سامانه @@ -138,7 +124,6 @@ به واسط Xposed %1$d نیاز دارد که این چارچوب فراهم نمی‌کند. برای libxposed API %1$d ساخته شده است. API %2$d رابط را تغییر داد، پس ممکن است این ماژول کامل کار نکند. ‏Vector در حال اجرا نیست، پس فهرست ماژول‌ها در دسترس نیست. برای دیدن علت، وضعیت سامانه را از خانه باز کنید. - تغییر %1$s ممکن نشد. چارچوب این تغییر را نپذیرفت. باز کردن در مرورگر @@ -156,7 +141,6 @@ ترتیبشان را تغییر دهید، یا آن‌هایی را که هرگز باز نمی‌کنید پنهان کنید. جریان فعالیت - تاریخچهٔ نمایش‌داده‌شده در خانه %1$d ماه اخیر %1$d ماه اخیر @@ -213,7 +197,6 @@ ‏%1$s حذف شد. حذف %1$s ممکن نشد. - تنظیمات بازگشت تلاش دوباره @@ -289,7 +272,6 @@ نصب‌کننده اجرا نشد. به‌روزرسانی بارگیری نشد. نصب‌کننده شکست خورد (کد %1$d). - به‌روزرسانی موجود است نادیده گرفتن به‌روزرسانی‌های این ماژول دیگر نه اینجا و نه در فهرست ماژول‌ها قدیمی شمرده نمی‌شود گزینه‌ها diff --git a/manager/src/main/res/values-fa/strings_logs.xml b/manager/src/main/res/values-fa/strings_logs.xml index 6f52deaff..144f8aa4a 100644 --- a/manager/src/main/res/values-fa/strings_logs.xml +++ b/manager/src/main/res/values-fa/strings_logs.xml @@ -14,14 +14,6 @@ پاک کردن پالایه کل پرونده خوانده می‌شود تا پالایه فراتر از آنچه روی نمایشگر است را ببیند. - پرگو - اشکال‌زدایی - اطلاع - هشدار - خطا - مرگبار - دیگر - سطرهای %1$d–%2$d از %3$d %1$d سطر هم‌خوان diff --git a/manager/src/main/res/values-fa/strings_store.xml b/manager/src/main/res/values-fa/strings_store.xml index cc199e608..fe614bbb7 100644 --- a/manager/src/main/res/values-fa/strings_store.xml +++ b/manager/src/main/res/values-fa/strings_store.xml @@ -19,7 +19,6 @@ %1$d به‌روزرسانی هر چه دارید تازه است - فهرست ذخیره‌شده نمایش داده می‌شود به‌روزرسانی به %1$s نصب دوباره %1$s @@ -43,7 +42,6 @@ باز کردن صفحهٔ ماژول نصب - به‌روزرسانی نصب دوباره پرونده‌ای برای نصب برگزینید diff --git a/manager/src/main/res/values-fr/strings.xml b/manager/src/main/res/values-fr/strings.xml index d6d9f30bf..a03b0aa69 100644 --- a/manager/src/main/res/values-fr/strings.xml +++ b/manager/src/main/res/values-fr/strings.xml @@ -87,20 +87,6 @@ %1$d jours de calme - hier - - il y a %1$d jour - il y a %1$d jours - - - il y a %1$d semaine - il y a %1$d semaines - - - il y a %1$d mois - il y a %1$d mois - - Apparence Thème Suivre le système @@ -138,7 +124,6 @@ Nécessite l\'API Xposed %1$d, que ce framework ne fournit pas. Conçu pour l’API libxposed %1$d. L’API %2$d a modifié l’interface : ce module peut ne pas fonctionner entièrement. Vector ne fonctionne pas, la liste des modules est donc indisponible. Ouvrez l\'état du système depuis l\'accueil pour savoir pourquoi. - Impossible de modifier %1$s. Le framework a refusé la modification. Ouvrir dans le navigateur @@ -156,7 +141,6 @@ Changez leur ordre, ou masquez celles que vous n\'ouvrez jamais. Fil d\'activité - Historique affiché sur l\'accueil Dernier %1$d mois %1$d derniers mois @@ -213,7 +197,6 @@ %1$s désinstallée. Impossible de désinstaller %1$s. - Paramètres Retour Réessayer @@ -289,7 +272,6 @@ Impossible de lancer l\'installateur. Impossible de télécharger la mise à jour. L\'installateur a échoué (code %1$d). - Mise à jour disponible Ignorer les mises à jour de ce module Il ne comptera plus comme obsolète, ici comme dans la liste des modules Options diff --git a/manager/src/main/res/values-fr/strings_logs.xml b/manager/src/main/res/values-fr/strings_logs.xml index 5b19a6ada..6b490b410 100644 --- a/manager/src/main/res/values-fr/strings_logs.xml +++ b/manager/src/main/res/values-fr/strings_logs.xml @@ -14,14 +14,6 @@ Effacer le filtre Lecture du fichier entier pour que le filtre voie au-delà de l\'écran. - Verbeux - Débogage - Info - Avertissement - Erreur - Fatal - Autre - Lignes %1$d–%2$d sur %3$d %1$d ligne correspondante diff --git a/manager/src/main/res/values-fr/strings_store.xml b/manager/src/main/res/values-fr/strings_store.xml index b948ff095..4a112011a 100644 --- a/manager/src/main/res/values-fr/strings_store.xml +++ b/manager/src/main/res/values-fr/strings_store.xml @@ -19,7 +19,6 @@ %1$d mises à jour tout ce que vous avez est à jour - Catalogue enregistré Mettre à jour vers %1$s Réinstaller %1$s @@ -43,7 +42,6 @@ Ouvrir la page du module Installer - Mettre à jour Réinstaller Choisir un fichier à installer diff --git a/manager/src/main/res/values-in/strings.xml b/manager/src/main/res/values-in/strings.xml index 4d812b158..05d2eef2e 100644 --- a/manager/src/main/res/values-in/strings.xml +++ b/manager/src/main/res/values-in/strings.xml @@ -86,17 +86,6 @@ %1$d hari sepi - kemarin - - %1$d hari lalu - - - %1$d minggu lalu - - - %1$d bulan lalu - - Tampilan Tema Ikuti sistem @@ -134,7 +123,6 @@ Butuh API Xposed %1$d, yang tidak disediakan framework ini. Dibuat untuk libxposed API %1$d. API %2$d mengubah antarmukanya, jadi modul ini mungkin tidak berfungsi penuh. Vector tidak berjalan, jadi daftar modul tidak tersedia. Buka status sistem dari Beranda untuk melihat sebabnya. - %1$s tidak bisa diubah. Framework menolak perubahan itu. Buka di peramban @@ -152,7 +140,6 @@ Ubah urutannya, atau sembunyikan yang tidak pernah dibuka. Umpan aktivitas - Riwayat yang ditampilkan di Beranda %1$d bulan terakhir @@ -208,7 +195,6 @@ %1$s dicopot. %1$s tidak bisa dicopot. - Setelan Kembali Coba lagi @@ -282,7 +268,6 @@ Pemasang tidak bisa dijalankan. Pembaruan tidak bisa diunduh. Pemasang gagal (kode %1$d). - Pembaruan tersedia Abaikan pembaruan untuk modul ini Ia berhenti dihitung usang, di sini maupun di daftar modul Opsi diff --git a/manager/src/main/res/values-in/strings_logs.xml b/manager/src/main/res/values-in/strings_logs.xml index e18ad2e73..8973886d7 100644 --- a/manager/src/main/res/values-in/strings_logs.xml +++ b/manager/src/main/res/values-in/strings_logs.xml @@ -14,14 +14,6 @@ Hapus saringan Membaca seluruh berkas agar saringan bisa melihat melampaui apa yang ada di layar. - Rinci - Debug - Info - Peringatan - Kesalahan - Fatal - Lainnya - Baris %1$d–%2$d dari %3$d %1$d baris cocok diff --git a/manager/src/main/res/values-in/strings_store.xml b/manager/src/main/res/values-in/strings_store.xml index 38c2145c0..e5306d33f 100644 --- a/manager/src/main/res/values-in/strings_store.xml +++ b/manager/src/main/res/values-in/strings_store.xml @@ -17,7 +17,6 @@ %1$d pembaruan semua yang Anda punya sudah mutakhir - Menampilkan katalog tersimpan Perbarui ke %1$s Pasang ulang %1$s @@ -41,7 +40,6 @@ Buka halaman modul Pasang - Perbarui Pasang ulang Pilih berkas untuk dipasang diff --git a/manager/src/main/res/values-it/strings.xml b/manager/src/main/res/values-it/strings.xml index 35eb6308d..7c9a2198b 100644 --- a/manager/src/main/res/values-it/strings.xml +++ b/manager/src/main/res/values-it/strings.xml @@ -87,20 +87,6 @@ %1$d giorni di calma - ieri - - %1$d giorno fa - %1$d giorni fa - - - %1$d settimana fa - %1$d settimane fa - - - %1$d mese fa - %1$d mesi fa - - Aspetto Tema Segui il sistema @@ -138,7 +124,6 @@ Richiede l\'API Xposed %1$d, che questo framework non fornisce. Compilato per l’API libxposed %1$d. L’API %2$d ha cambiato l’interfaccia, quindi questo modulo potrebbe non funzionare del tutto. Vector non è in esecuzione, quindi l\'elenco dei moduli non è disponibile. Apri lo stato del sistema dalla Home per vedere perché. - Impossibile modificare %1$s. Il framework ha rifiutato la modifica. Apri nel browser @@ -156,7 +141,6 @@ Cambia il loro ordine, o nascondi quelle che non apri mai. Attività - Cronologia mostrata nella Home Ultimo %1$d mese Ultimi %1$d mesi @@ -213,7 +197,6 @@ %1$s disinstallata. Impossibile disinstallare %1$s. - Impostazioni Indietro Riprova @@ -289,7 +272,6 @@ Non è stato possibile avviare il programma di installazione. Non è stato possibile scaricare l\'aggiornamento. Il programma di installazione è fallito (codice %1$d). - Aggiornamento disponibile Ignora gli aggiornamenti di questo modulo Smette di contare come non aggiornato, qui e nell\'elenco dei moduli Opzioni diff --git a/manager/src/main/res/values-it/strings_logs.xml b/manager/src/main/res/values-it/strings_logs.xml index 2af0ac1ed..c0b6bf1b7 100644 --- a/manager/src/main/res/values-it/strings_logs.xml +++ b/manager/src/main/res/values-it/strings_logs.xml @@ -14,14 +14,6 @@ Rimuovi il filtro Lettura dell\'intero file, così il filtro vede oltre quello che c\'è sullo schermo. - Dettagliato - Debug - Info - Avviso - Errore - Fatale - Altro - Righe %1$d–%2$d di %3$d %1$d riga corrispondente diff --git a/manager/src/main/res/values-it/strings_store.xml b/manager/src/main/res/values-it/strings_store.xml index b3125ceee..e2c6154fd 100644 --- a/manager/src/main/res/values-it/strings_store.xml +++ b/manager/src/main/res/values-it/strings_store.xml @@ -19,7 +19,6 @@ %1$d aggiornamenti tutto quello che hai è aggiornato - Catalogo salvato Aggiorna a %1$s Reinstalla %1$s @@ -43,7 +42,6 @@ Apri la pagina del modulo Installa - Aggiorna Reinstalla Scegli un file da installare diff --git a/manager/src/main/res/values-iw/strings.xml b/manager/src/main/res/values-iw/strings.xml index fa5e5ddc7..aac5d259c 100644 --- a/manager/src/main/res/values-iw/strings.xml +++ b/manager/src/main/res/values-iw/strings.xml @@ -101,26 +101,6 @@ %1$d ימי שקט - אתמול - - לפני יום - לפני יומיים - לפני %1$d ימים - לפני %1$d ימים - - - לפני שבוע - לפני שבועיים - לפני %1$d שבועות - לפני %1$d שבועות - - - לפני חודש - לפני חודשיים - לפני %1$d חודשים - לפני %1$d חודשים - - מראה ערכת נושא לפי המערכת @@ -158,7 +138,6 @@ דורש ממשק Xposed %1$d, שהמסגרת הזאת לא מספקת. נבנה עבור libxposed API %1$d. גרסה %2$d שינתה את הממשק, ולכן ייתכן שהמודול לא יעבוד במלואו. ‏Vector לא פועל, ולכן רשימת המודולים לא זמינה. פתחו את מצב המערכת מהבית כדי לראות למה. - לא ניתן היה לשנות את %1$s. המסגרת דחתה את השינוי. פתיחה בדפדפן @@ -176,7 +155,6 @@ אפשר לשנות את סדרם, או להסתיר את מה שאף פעם לא נפתח. זרם הפעילות - ההיסטוריה שמוצגת בבית החודש האחרון החודשיים האחרונים @@ -235,7 +213,6 @@ ‏%1$s הוסרה. לא ניתן היה להסיר את %1$s. - הגדרות חזרה ניסיון נוסף @@ -315,7 +292,6 @@ לא ניתן היה להפעיל את תוכנית ההתקנה. לא ניתן היה להוריד את העדכון. תוכנית ההתקנה נכשלה (קוד %1$d). - יש עדכון התעלמות מעדכונים של המודול הזה הוא יפסיק להיחשב מיושן, כאן וברשימת המודולים אפשרויות diff --git a/manager/src/main/res/values-iw/strings_logs.xml b/manager/src/main/res/values-iw/strings_logs.xml index 3ffe81942..408a846ab 100644 --- a/manager/src/main/res/values-iw/strings_logs.xml +++ b/manager/src/main/res/values-iw/strings_logs.xml @@ -14,14 +14,6 @@ ניקוי הסינון הקובץ כולו נקרא כדי שהסינון יראה גם את מה שמחוץ למסך. - מפורט - ניפוי שגיאות - מידע - אזהרה - שגיאה - קריטי - אחר - שורות %1$d–%2$d מתוך %3$d שורה תואמת אחת diff --git a/manager/src/main/res/values-iw/strings_store.xml b/manager/src/main/res/values-iw/strings_store.xml index b29908d6f..9739c3b72 100644 --- a/manager/src/main/res/values-iw/strings_store.xml +++ b/manager/src/main/res/values-iw/strings_store.xml @@ -23,7 +23,6 @@ %1$d עדכונים כל מה שיש לכם עדכני - מוצג הקטלוג השמור עדכון ל-%1$s התקנה מחדש של %1$s @@ -47,7 +46,6 @@ פתיחת דף המודול התקנה - עדכון התקנה מחדש בחרו קובץ להתקנה diff --git a/manager/src/main/res/values-ja/strings.xml b/manager/src/main/res/values-ja/strings.xml index a1c6f6cd0..f716acb89 100644 --- a/manager/src/main/res/values-ja/strings.xml +++ b/manager/src/main/res/values-ja/strings.xml @@ -82,17 +82,6 @@ %1$d 日間の静けさ - 昨日 - - %1$d 日前 - - - %1$d 週間前 - - - %1$d か月前 - - 外観 テーマ システムに合わせる @@ -130,7 +119,6 @@ Xposed API %1$d が必要ですが、このフレームワークは提供していません。 libxposed API %1$d 向けにビルドされています。API %2$d でインターフェースが変わったため、完全には動作しない可能性があります。 Vector が動作していないため、モジュール一覧を取得できません。理由はホームのシステム状態で確認できます。 - %1$s を変更できませんでした。フレームワークが変更を拒否しました。 ブラウザーで開く @@ -148,7 +136,6 @@ 並び順を変えたり、開かないものを隠したりできます。 活動フィード - ホームに表示する期間 直近 %1$d か月 @@ -204,7 +191,6 @@ %1$s をアンインストールしました。 %1$s をアンインストールできませんでした。 - 設定 戻る 再試行 @@ -278,7 +264,6 @@ インストーラーを起動できませんでした。 更新をダウンロードできませんでした。 インストーラーが失敗しました(終了コード %1$d)。 - 更新があります このモジュールの更新を無視する ここでもモジュール一覧でも、古いものとして数えられなくなります オプション diff --git a/manager/src/main/res/values-ja/strings_logs.xml b/manager/src/main/res/values-ja/strings_logs.xml index 49ae1a3ee..3b3264be4 100644 --- a/manager/src/main/res/values-ja/strings_logs.xml +++ b/manager/src/main/res/values-ja/strings_logs.xml @@ -14,14 +14,6 @@ 絞り込みを解除 画面の外まで絞り込めるよう、ファイル全体を読み込んでいます。 - 詳細 - デバッグ - 情報 - 警告 - エラー - 致命的 - その他 - %3$d 行中 %1$d–%2$d 行 一致 %1$d 行 diff --git a/manager/src/main/res/values-ja/strings_store.xml b/manager/src/main/res/values-ja/strings_store.xml index 10b750663..334b8e33f 100644 --- a/manager/src/main/res/values-ja/strings_store.xml +++ b/manager/src/main/res/values-ja/strings_store.xml @@ -17,7 +17,6 @@ %1$d 件の更新 手元のものはすべて最新です - 保存済みのカタログを表示しています %1$s に更新 %1$s を再インストール @@ -41,7 +40,6 @@ モジュールのページを開く インストール - 更新 再インストール インストールするファイルを選択 diff --git a/manager/src/main/res/values-ko/strings.xml b/manager/src/main/res/values-ko/strings.xml index 9d65ab174..92efcf615 100644 --- a/manager/src/main/res/values-ko/strings.xml +++ b/manager/src/main/res/values-ko/strings.xml @@ -82,17 +82,6 @@ %1$d일간 잠잠 - 어제 - - %1$d일 전 - - - %1$d주 전 - - - %1$d개월 전 - - 모양 테마 시스템 설정 따르기 @@ -130,7 +119,6 @@ Xposed API %1$d이(가) 필요하지만 이 프레임워크는 제공하지 않습니다. libxposed API %1$d용으로 빌드되었습니다. API %2$d에서 인터페이스가 바뀌어 이 모듈이 완전히 작동하지 않을 수 있습니다. Vector가 실행 중이 아니라 모듈 목록을 가져올 수 없습니다. 이유는 홈의 시스템 상태에서 확인하세요. - %1$s을(를) 변경하지 못했습니다. 프레임워크가 변경을 거부했습니다. 브라우저에서 열기 @@ -148,7 +136,6 @@ 순서를 바꾸거나, 열지 않는 패널을 숨깁니다. 활동 피드 - 홈에 표시할 기간 최근 %1$d개월 @@ -204,7 +191,6 @@ %1$s을(를) 제거했습니다. %1$s을(를) 제거하지 못했습니다. - 설정 뒤로 다시 시도 @@ -278,7 +264,6 @@ 설치 프로그램을 시작하지 못했습니다. 업데이트를 내려받지 못했습니다. 설치 프로그램이 실패했습니다(종료 코드 %1$d). - 업데이트 있음 이 모듈의 업데이트 무시 여기서도 모듈 목록에서도 더 이상 오래된 것으로 세지 않습니다 옵션 diff --git a/manager/src/main/res/values-ko/strings_logs.xml b/manager/src/main/res/values-ko/strings_logs.xml index fd21c00ba..6503610b8 100644 --- a/manager/src/main/res/values-ko/strings_logs.xml +++ b/manager/src/main/res/values-ko/strings_logs.xml @@ -14,14 +14,6 @@ 필터 지우기 화면 밖까지 걸러낼 수 있도록 파일 전체를 읽는 중입니다. - 상세 - 디버그 - 정보 - 경고 - 오류 - 치명적 - 기타 - %3$d줄 중 %1$d–%2$d줄 일치하는 줄 %1$d개 diff --git a/manager/src/main/res/values-ko/strings_store.xml b/manager/src/main/res/values-ko/strings_store.xml index 510b72166..107f14d71 100644 --- a/manager/src/main/res/values-ko/strings_store.xml +++ b/manager/src/main/res/values-ko/strings_store.xml @@ -17,7 +17,6 @@ 업데이트 %1$d건 가진 것 모두 최신입니다 - 저장된 카탈로그를 표시합니다 %1$s(으)로 업데이트 %1$s 다시 설치 @@ -41,7 +40,6 @@ 모듈 페이지 열기 설치 - 업데이트 다시 설치 설치할 파일 고르기 diff --git a/manager/src/main/res/values-pl/strings.xml b/manager/src/main/res/values-pl/strings.xml index e275f35ab..047f846c5 100644 --- a/manager/src/main/res/values-pl/strings.xml +++ b/manager/src/main/res/values-pl/strings.xml @@ -97,26 +97,6 @@ %1$d dnia ciszy - wczoraj - - %1$d dzień temu - %1$d dni temu - %1$d dni temu - %1$d dnia temu - - - %1$d tydzień temu - %1$d tygodnie temu - %1$d tygodni temu - %1$d tygodnia temu - - - %1$d miesiąc temu - %1$d miesiące temu - %1$d miesięcy temu - %1$d miesiąca temu - - Wygląd Motyw Jak w systemie @@ -154,7 +134,6 @@ Wymaga API Xposed %1$d, którego ten szkielet nie udostępnia. Zbudowany dla API libxposed %1$d. API %2$d zmieniło interfejs, więc ten moduł może nie działać w pełni. Vector nie działa, więc lista modułów jest niedostępna. Otwórz stan systemu ze strony startowej, aby zobaczyć dlaczego. - Nie udało się zmienić %1$s. Szkielet odrzucił tę zmianę. Otwórz w przeglądarce @@ -172,7 +151,6 @@ Zmień ich kolejność albo ukryj te, których nigdy nie otwierasz. Strumień aktywności - Historia pokazywana na stronie startowej Ostatni %1$d miesiąc Ostatnie %1$d miesiące @@ -231,7 +209,6 @@ Odinstalowano %1$s. Nie udało się odinstalować %1$s. - Ustawienia Wstecz Spróbuj ponownie @@ -311,7 +288,6 @@ Nie udało się uruchomić instalatora. Nie udało się pobrać aktualizacji. Instalator zawiódł (kod %1$d). - Dostępna aktualizacja Ignoruj aktualizacje tego modułu Przestaje liczyć się jako nieaktualny, tutaj i na liście modułów Opcje diff --git a/manager/src/main/res/values-pl/strings_logs.xml b/manager/src/main/res/values-pl/strings_logs.xml index d031bf6fb..83ca60450 100644 --- a/manager/src/main/res/values-pl/strings_logs.xml +++ b/manager/src/main/res/values-pl/strings_logs.xml @@ -14,14 +14,6 @@ Wyczyść filtr Wczytywanie całego pliku, aby filtr sięgał poza to, co widać na ekranie. - Szczegółowy - Debugowanie - Informacja - Ostrzeżenie - Błąd - Krytyczny - Inne - Wiersze %1$d–%2$d z %3$d %1$d pasujący wiersz diff --git a/manager/src/main/res/values-pl/strings_store.xml b/manager/src/main/res/values-pl/strings_store.xml index f2b467296..bb64dd0f7 100644 --- a/manager/src/main/res/values-pl/strings_store.xml +++ b/manager/src/main/res/values-pl/strings_store.xml @@ -23,7 +23,6 @@ %1$d aktualizacji wszystko, co masz, jest aktualne - Pokazano zapisany katalog Aktualizuj do %1$s Zainstaluj ponownie %1$s @@ -47,7 +46,6 @@ Otwórz stronę modułu Zainstaluj - Aktualizuj Zainstaluj ponownie Wybierz plik do zainstalowania diff --git a/manager/src/main/res/values-pt-rBR/strings.xml b/manager/src/main/res/values-pt-rBR/strings.xml index 0a2e81860..5d4c7e7e7 100644 --- a/manager/src/main/res/values-pt-rBR/strings.xml +++ b/manager/src/main/res/values-pt-rBR/strings.xml @@ -87,20 +87,6 @@ %1$d dias parado - ontem - - há %1$d dia - há %1$d dias - - - há %1$d semana - há %1$d semanas - - - há %1$d mês - há %1$d meses - - Aparência Tema Seguir o sistema @@ -138,7 +124,6 @@ Precisa da API %1$d do Xposed, que este framework não fornece. Compilado para a API %1$d do libxposed. A API %2$d mudou a interface, então este módulo pode não funcionar totalmente. O Vector não está em execução, então a lista de módulos não está disponível. Abra o status do sistema pelo Início para ver por quê. - Não foi possível alterar %1$s. O framework recusou a alteração. Abrir no navegador @@ -156,7 +141,6 @@ Mude a ordem delas, ou oculte as que você nunca abre. Feed de atividade - Histórico mostrado no Início Último %1$d mês Últimos %1$d meses @@ -213,7 +197,6 @@ %1$s desinstalado. Não foi possível desinstalar %1$s. - Configurações Voltar Tentar de novo @@ -289,7 +272,6 @@ Não foi possível iniciar o instalador. Não foi possível baixar a atualização. O instalador falhou (código %1$d). - Atualização disponível Ignorar atualizações deste módulo Ele deixa de contar como desatualizado, aqui e na lista de módulos Opções diff --git a/manager/src/main/res/values-pt-rBR/strings_logs.xml b/manager/src/main/res/values-pt-rBR/strings_logs.xml index 707e5303b..d0b9814d6 100644 --- a/manager/src/main/res/values-pt-rBR/strings_logs.xml +++ b/manager/src/main/res/values-pt-rBR/strings_logs.xml @@ -14,14 +14,6 @@ Limpar o filtro Lendo o arquivo inteiro para que o filtro alcance além do que está na tela. - Detalhado - Depuração - Info - Aviso - Erro - Fatal - Outro - Linhas %1$d–%2$d de %3$d %1$d linha correspondente diff --git a/manager/src/main/res/values-pt-rBR/strings_store.xml b/manager/src/main/res/values-pt-rBR/strings_store.xml index 90065ab46..469d2811b 100644 --- a/manager/src/main/res/values-pt-rBR/strings_store.xml +++ b/manager/src/main/res/values-pt-rBR/strings_store.xml @@ -19,7 +19,6 @@ %1$d atualizações tudo o que você tem está atualizado - Mostrando o catálogo salvo Atualizar para %1$s Reinstalar %1$s @@ -43,7 +42,6 @@ Abrir a página do módulo Instalar - Atualizar Reinstalar Escolha um arquivo para instalar diff --git a/manager/src/main/res/values-ru/strings.xml b/manager/src/main/res/values-ru/strings.xml index 474076b2f..ed2fe975b 100644 --- a/manager/src/main/res/values-ru/strings.xml +++ b/manager/src/main/res/values-ru/strings.xml @@ -88,25 +88,6 @@ %1$d дней тишины %1$d дней тишины - вчера - - %1$d день назад - %1$d дня назад - %1$d дней назад - %1$d дней назад - - - %1$d неделю назад - %1$d недели назад - %1$d недель назад - %1$d недель назад - - - %1$d месяц назад - %1$d месяца назад - %1$d месяцев назад - %1$d месяцев назад - Оформление Тема Как в системе @@ -143,7 +124,6 @@ Требуется Xposed API %1$d, которого этот фреймворк не предоставляет. Собран под libxposed API %1$d. В API %2$d интерфейс изменился, поэтому модуль может работать не полностью. Vector не запущен, поэтому список модулей недоступен. Откройте состояние системы с главного экрана, чтобы узнать причину. - Не удалось изменить %1$s. Фреймворк отклонил изменение. Открыть в браузере Фон заголовка Снег @@ -158,7 +138,6 @@ Измените их порядок или скройте те, которые никогда не открываете. Лента активности - Период истории на главной Последний %1$d месяц Последние %1$d месяца @@ -214,7 +193,6 @@ Не удалось переоптимизировать %1$s. %1$s удалено. Не удалось удалить %1$s. - Настройки Назад Повторить Цвет @@ -292,7 +270,6 @@ Не удалось запустить установщик. Не удалось загрузить обновление. Установщик завершился с ошибкой (код %1$d). - Есть обновление Не сообщать об обновлениях этого модуля Он перестанет считаться устаревшим и здесь, и в списке модулей Параметры diff --git a/manager/src/main/res/values-ru/strings_logs.xml b/manager/src/main/res/values-ru/strings_logs.xml index 26cbed2fa..ef5f02770 100644 --- a/manager/src/main/res/values-ru/strings_logs.xml +++ b/manager/src/main/res/values-ru/strings_logs.xml @@ -10,13 +10,6 @@ Тег Сбросить фильтр Читается весь файл, чтобы фильтр видел больше, чем помещается на экране. - Подробно - Отладка - Информация - Предупреждение - Ошибка - Критическая - Прочее Строки %1$d–%2$d из %3$d %1$d совпавшая строка diff --git a/manager/src/main/res/values-ru/strings_store.xml b/manager/src/main/res/values-ru/strings_store.xml index 7b27dfaa3..3544f2559 100644 --- a/manager/src/main/res/values-ru/strings_store.xml +++ b/manager/src/main/res/values-ru/strings_store.xml @@ -21,7 +21,6 @@ %1$d обновлений всё установленное актуально - Показан сохранённый каталог Обновить до %1$s Переустановить %1$s Установлен @@ -40,7 +39,6 @@ Открыть на GitHub Открыть страницу модуля Установить - Обновить Переустановить Выберите файл для установки diff --git a/manager/src/main/res/values-tr/strings.xml b/manager/src/main/res/values-tr/strings.xml index c8c2a7c03..15b739ab0 100644 --- a/manager/src/main/res/values-tr/strings.xml +++ b/manager/src/main/res/values-tr/strings.xml @@ -87,20 +87,6 @@ %1$d gün sessizlik - dün - - %1$d gün önce - %1$d gün önce - - - %1$d hafta önce - %1$d hafta önce - - - %1$d ay önce - %1$d ay önce - - Görünüm Tema Sistemi izle @@ -138,7 +124,6 @@ Xposed API %1$d gerekiyor; bu çatı onu sağlamıyor. libxposed API %1$d için derlendi. API %2$d arayüzü değiştirdi; bu modül tam çalışmayabilir. Vector çalışmıyor, bu yüzden modül listesi alınamıyor. Nedenini görmek için Ana sayfadan sistem durumunu açın. - %1$s değiştirilemedi. Çatı değişikliği reddetti. Tarayıcıda aç @@ -156,7 +141,6 @@ Sıralarını değiştirin ya da hiç açmadıklarınızı gizleyin. Hareket akışı - Ana sayfada gösterilen geçmiş Son %1$d ay Son %1$d ay @@ -213,7 +197,6 @@ %1$s kaldırıldı. %1$s kaldırılamadı. - Ayarlar Geri Yeniden dene @@ -289,7 +272,6 @@ Kurulum programı başlatılamadı. Güncelleme indirilemedi. Kurulum programı başarısız oldu (çıkış %1$d). - Güncelleme var Bu modülün güncellemelerini yok say Ne burada ne de modül listesinde artık eski sayılır Seçenekler diff --git a/manager/src/main/res/values-tr/strings_logs.xml b/manager/src/main/res/values-tr/strings_logs.xml index f4217ec8f..793cfecf3 100644 --- a/manager/src/main/res/values-tr/strings_logs.xml +++ b/manager/src/main/res/values-tr/strings_logs.xml @@ -14,14 +14,6 @@ Süzgeci temizle Süzgecin ekranda görünenin ötesini de görebilmesi için dosyanın tamamı okunuyor. - Ayrıntılı - Hata ayıklama - Bilgi - Uyarı - Hata - Ölümcül - Diğer - %3$d satırdan %1$d–%2$d %1$d eşleşen satır diff --git a/manager/src/main/res/values-tr/strings_store.xml b/manager/src/main/res/values-tr/strings_store.xml index d865292c4..e7936bf35 100644 --- a/manager/src/main/res/values-tr/strings_store.xml +++ b/manager/src/main/res/values-tr/strings_store.xml @@ -19,7 +19,6 @@ %1$d güncelleme elinizdeki her şey güncel - Kayıtlı katalog gösteriliyor %1$s sürümüne güncelle %1$s sürümünü yeniden kur @@ -43,7 +42,6 @@ Modül sayfasını aç Kur - Güncelle Yeniden kur Kurulacak dosyayı seçin diff --git a/manager/src/main/res/values-uk/strings.xml b/manager/src/main/res/values-uk/strings.xml index defa0fa7a..f78417482 100644 --- a/manager/src/main/res/values-uk/strings.xml +++ b/manager/src/main/res/values-uk/strings.xml @@ -97,26 +97,6 @@ %1$d дня тиші - учора - - %1$d день тому - %1$d дні тому - %1$d днів тому - %1$d дня тому - - - %1$d тиждень тому - %1$d тижні тому - %1$d тижнів тому - %1$d тижня тому - - - %1$d місяць тому - %1$d місяці тому - %1$d місяців тому - %1$d місяця тому - - Вигляд Тема Як у системі @@ -154,7 +134,6 @@ Потрібен Xposed API %1$d, якого цей фреймворк не надає. Зібрано під libxposed API %1$d. В API %2$d інтерфейс змінився, тож модуль може працювати не повністю. Vector не працює, тож перелік модулів недоступний. Відкрийте стан системи з головної, щоб побачити причину. - Не вдалося змінити %1$s. Фреймворк відхилив зміну. Відкрити в браузері @@ -172,7 +151,6 @@ Змініть їхній порядок або сховайте ті, які ніколи не відкриваєте. Стрічка активності - Історія на головній Останній %1$d місяць Останні %1$d місяці @@ -231,7 +209,6 @@ %1$s видалено. Не вдалося видалити %1$s. - Налаштування Назад Повторити @@ -311,7 +288,6 @@ Не вдалося запустити встановлювач. Не вдалося завантажити оновлення. Встановлювач завершився помилкою (код %1$d). - Є оновлення Ігнорувати оновлення цього модуля Він перестане рахуватися застарілим — і тут, і в переліку модулів Параметри diff --git a/manager/src/main/res/values-uk/strings_logs.xml b/manager/src/main/res/values-uk/strings_logs.xml index 9915738a0..a02226db1 100644 --- a/manager/src/main/res/values-uk/strings_logs.xml +++ b/manager/src/main/res/values-uk/strings_logs.xml @@ -14,14 +14,6 @@ Очистити фільтр Читається весь файл, щоб фільтр бачив і те, чого немає на екрані. - Докладний - Налагодження - Інформація - Попередження - Помилка - Критична - Інше - Рядки %1$d–%2$d з %3$d %1$d збіг у рядку diff --git a/manager/src/main/res/values-uk/strings_store.xml b/manager/src/main/res/values-uk/strings_store.xml index f1d29f34a..a56667c87 100644 --- a/manager/src/main/res/values-uk/strings_store.xml +++ b/manager/src/main/res/values-uk/strings_store.xml @@ -23,7 +23,6 @@ %1$d оновлення усе, що у вас є, найновіше - Показано збережений каталог Оновити до %1$s Перевстановити %1$s @@ -47,7 +46,6 @@ Відкрити сторінку модуля Встановити - Оновити Перевстановити Виберіть файл для встановлення diff --git a/manager/src/main/res/values-vi/strings.xml b/manager/src/main/res/values-vi/strings.xml index a8c40d934..efdb9e072 100644 --- a/manager/src/main/res/values-vi/strings.xml +++ b/manager/src/main/res/values-vi/strings.xml @@ -82,17 +82,6 @@ %1$d ngày yên ắng - hôm qua - - %1$d ngày trước - - - %1$d tuần trước - - - %1$d tháng trước - - Giao diện Chủ đề Theo hệ thống @@ -130,7 +119,6 @@ Cần API Xposed %1$d, framework này không cung cấp. Được dựng cho libxposed API %1$d. API %2$d đã đổi giao diện nên mô-đun này có thể không chạy đầy đủ. Vector không chạy nên không lấy được danh sách mô-đun. Mở trạng thái hệ thống ở trang chính để xem vì sao. - Không đổi được %1$s. Framework đã từ chối thay đổi. Mở bằng trình duyệt @@ -148,7 +136,6 @@ Đổi thứ tự, hoặc ẩn những mục bạn không bao giờ mở. Dòng hoạt động - Lịch sử hiện ở trang chính %1$d tháng gần nhất @@ -204,7 +191,6 @@ Đã gỡ %1$s. Không gỡ được %1$s. - Cài đặt Quay lại Thử lại @@ -278,7 +264,6 @@ Không khởi chạy được trình cài đặt. Không tải được bản cập nhật. Trình cài đặt thất bại (mã %1$d). - Có bản cập nhật Bỏ qua cập nhật của mô-đun này Nó thôi bị tính là cũ, ở đây và trong danh sách mô-đun Tuỳ chọn diff --git a/manager/src/main/res/values-vi/strings_logs.xml b/manager/src/main/res/values-vi/strings_logs.xml index 8f45bb1c5..1802e40e7 100644 --- a/manager/src/main/res/values-vi/strings_logs.xml +++ b/manager/src/main/res/values-vi/strings_logs.xml @@ -14,14 +14,6 @@ Xoá bộ lọc Đang đọc toàn bộ tệp để bộ lọc thấy được cả phần ngoài màn hình. - Chi tiết - Gỡ lỗi - Thông tin - Cảnh báo - Lỗi - Nghiêm trọng - Khác - Dòng %1$d–%2$d trên %3$d %1$d dòng khớp diff --git a/manager/src/main/res/values-vi/strings_store.xml b/manager/src/main/res/values-vi/strings_store.xml index 697fd843c..a9ef4d8cc 100644 --- a/manager/src/main/res/values-vi/strings_store.xml +++ b/manager/src/main/res/values-vi/strings_store.xml @@ -17,7 +17,6 @@ %1$d bản cập nhật mọi thứ bạn có đều là mới nhất - Đang hiện danh mục đã lưu Cập nhật lên %1$s Cài lại %1$s @@ -41,7 +40,6 @@ Mở trang của mô-đun Cài đặt - Cập nhật Cài lại Chọn tệp để cài diff --git a/manager/src/main/res/values-zh-rCN/strings.xml b/manager/src/main/res/values-zh-rCN/strings.xml index 35fa035f0..7e89559b1 100644 --- a/manager/src/main/res/values-zh-rCN/strings.xml +++ b/manager/src/main/res/values-zh-rCN/strings.xml @@ -82,17 +82,6 @@ 静默 %1$d 天 - 昨天 - - %1$d 天前 - - - %1$d 周前 - - - %1$d 个月前 - - 外观 主题 跟随系统 @@ -130,7 +119,6 @@ 需要 Xposed API %1$d,本框架未提供该版本。 针对 libxposed API %1$d 构建。API %2$d 更改了接口,此模块可能无法完全工作。 Vector 未运行,因此无法列出模块。请从主页打开系统状态查看原因。 - 无法更改 %1$s。框架拒绝了此次更改。 在浏览器中打开 @@ -148,7 +136,6 @@ 调整顺序,或隐藏从不打开的面板。 动态 - 主页显示的历史范围 最近 %1$d 个月 @@ -204,7 +191,6 @@ 已卸载 %1$s。 无法卸载 %1$s。 - 设置 返回 重试 @@ -279,7 +265,6 @@ 无法启动安装程序。 无法下载此更新。 安装程序失败(退出码 %1$d)。 - 有可用更新 忽略此模块的更新 在此处与模块列表中都不再计为过期 选项 diff --git a/manager/src/main/res/values-zh-rCN/strings_logs.xml b/manager/src/main/res/values-zh-rCN/strings_logs.xml index 945ce9f0f..37c02e6cd 100644 --- a/manager/src/main/res/values-zh-rCN/strings_logs.xml +++ b/manager/src/main/res/values-zh-rCN/strings_logs.xml @@ -14,14 +14,6 @@ 清除筛选 正在读取整个文件,以便筛选能覆盖屏幕之外的内容。 - 详细 - 调试 - 信息 - 警告 - 错误 - 致命 - 其他 - 第 %1$d–%2$d 行,共 %3$d 行 %1$d 行匹配 diff --git a/manager/src/main/res/values-zh-rCN/strings_store.xml b/manager/src/main/res/values-zh-rCN/strings_store.xml index 49b06d761..4677a9464 100644 --- a/manager/src/main/res/values-zh-rCN/strings_store.xml +++ b/manager/src/main/res/values-zh-rCN/strings_store.xml @@ -17,7 +17,6 @@ %1$d 个可更新 已安装的都是最新版 - 正在显示已保存的目录 可更新至 %1$s 重新安装 %1$s @@ -41,7 +40,6 @@ 打开模块页面 安装 - 更新 重新安装 选择要安装的文件 diff --git a/manager/src/main/res/values-zh-rTW/strings.xml b/manager/src/main/res/values-zh-rTW/strings.xml index 1f64f1e47..558461cab 100644 --- a/manager/src/main/res/values-zh-rTW/strings.xml +++ b/manager/src/main/res/values-zh-rTW/strings.xml @@ -82,17 +82,6 @@ 靜默 %1$d 天 - 昨天 - - %1$d 天前 - - - %1$d 週前 - - - %1$d 個月前 - - 外觀 主題 跟隨系統 @@ -130,7 +119,6 @@ 需要 Xposed API %1$d,本框架未提供該版本。 針對 libxposed API %1$d 建置。API %2$d 變更了介面,此模組可能無法完全運作。 Vector 未執行,因此無法列出模組。請從主畫面開啟系統狀態以查看原因。 - 無法變更 %1$s。框架拒絕了這次變更。 在瀏覽器中開啟 @@ -148,7 +136,6 @@ 調整順序,或隱藏從不開啟的面板。 動態 - 主畫面顯示的歷史範圍 最近 %1$d 個月 @@ -204,7 +191,6 @@ 已解除安裝 %1$s。 無法解除安裝 %1$s。 - 設定 返回 重試 @@ -279,7 +265,6 @@ 無法啟動安裝程式。 無法下載此更新。 安裝程式失敗(結束碼 %1$d)。 - 有可用更新 忽略此模組的更新 在此處與模組列表中都不再計為過期 選項 diff --git a/manager/src/main/res/values-zh-rTW/strings_logs.xml b/manager/src/main/res/values-zh-rTW/strings_logs.xml index 1f7357cf2..52436f609 100644 --- a/manager/src/main/res/values-zh-rTW/strings_logs.xml +++ b/manager/src/main/res/values-zh-rTW/strings_logs.xml @@ -14,14 +14,6 @@ 清除篩選 正在讀取整個檔案,讓篩選能涵蓋畫面之外的內容。 - 詳細 - 除錯 - 資訊 - 警告 - 錯誤 - 嚴重 - 其他 - 第 %1$d–%2$d 行,共 %3$d 行 %1$d 行符合 diff --git a/manager/src/main/res/values-zh-rTW/strings_store.xml b/manager/src/main/res/values-zh-rTW/strings_store.xml index 54d5ac3e4..9ce8cd5e3 100644 --- a/manager/src/main/res/values-zh-rTW/strings_store.xml +++ b/manager/src/main/res/values-zh-rTW/strings_store.xml @@ -17,7 +17,6 @@ %1$d 個可更新 已安裝的都是最新版 - 正在顯示已儲存的目錄 可更新至 %1$s 重新安裝 %1$s @@ -41,7 +40,6 @@ 開啟模組頁面 安裝 - 更新 重新安裝 選擇要安裝的檔案 diff --git a/manager/src/main/res/values/strings.xml b/manager/src/main/res/values/strings.xml index df407cd4d..50c140b23 100644 --- a/manager/src/main/res/values/strings.xml +++ b/manager/src/main/res/values/strings.xml @@ -126,7 +126,6 @@ Discussions Review a change - %1$s & %2$s %1$s & %2$d others @@ -148,24 +147,6 @@ %1$d days quiet - - - yesterday - - %1$d day ago - %1$d days ago - - - %1$d week ago - %1$d weeks ago - - - %1$d month ago - %1$d months ago - - - - Appearance Theme @@ -228,7 +209,6 @@ Needs Xposed API %1$d, which this framework does not provide. Built for libxposed API %1$d. API %2$d changed the interface, so this module may not work fully. Vector is not running, so the module list is unavailable. Open system status from Home to see why. - Could not change %1$s. The framework refused the change. Open in browser @@ -250,7 +230,6 @@ Activity feed - History shown on Home Last %1$d month Last %1$d months @@ -329,7 +308,6 @@ Could not uninstall %1$s. - Settings Back Retry Vector @@ -435,7 +413,6 @@ The installer could not be started. The update could not be downloaded. The installer failed (exit %1$d). - Update available Ignore updates for this module It stops counting as out of date, here and on the modules list Options diff --git a/manager/src/main/res/values/strings_logs.xml b/manager/src/main/res/values/strings_logs.xml index 00c7dc814..e7bc55865 100644 --- a/manager/src/main/res/values/strings_logs.xml +++ b/manager/src/main/res/values/strings_logs.xml @@ -23,15 +23,6 @@ Clear filter Reading the whole file so the filter can see past what is on screen. - - Verbose - Debug - Info - Warning - Error - Fatal - Other - Lines %1$d–%2$d of %3$d diff --git a/manager/src/main/res/values/strings_store.xml b/manager/src/main/res/values/strings_store.xml index d65385c2f..964e62c60 100644 --- a/manager/src/main/res/values/strings_store.xml +++ b/manager/src/main/res/values/strings_store.xml @@ -28,7 +28,6 @@ %1$d updates everything you have is current - Showing the saved catalogue Update to %1$s @@ -58,7 +57,6 @@ Install - Update Reinstall Choose a file to install diff --git a/services/daemon-service/src/main/java/org/lsposed/lspd/util/Utils.java b/services/daemon-service/src/main/java/org/lsposed/lspd/util/Utils.java index f39533842..0aca992b1 100644 --- a/services/daemon-service/src/main/java/org/lsposed/lspd/util/Utils.java +++ b/services/daemon-service/src/main/java/org/lsposed/lspd/util/Utils.java @@ -25,15 +25,11 @@ import java.io.PrintWriter; import java.io.StringWriter; -import java.time.ZoneId; -import java.time.ZoneOffset; -import java.time.zone.ZoneRulesException; public class Utils { public static final String LOG_TAG = "Vector"; public static final boolean isMIUI = !TextUtils.isEmpty(SystemProperties.get("ro.miui.ui.version.name")); - public static final boolean isLENOVO = !TextUtils.isEmpty(SystemProperties.get("ro.lenovo.region")); public class Log { public static final int VERBOSE = android.util.Log.VERBOSE; @@ -153,13 +149,4 @@ public static void logE(String msg) { public static void logE(String msg, Throwable throwable) { Log.e(LOG_TAG, msg, throwable); } - - public static ZoneId getZoneId() { - var timezone = SystemProperties.get("persist.sys.timezone", "GMT"); - try { - return ZoneId.of(timezone); - } catch (ZoneRulesException e) { - return ZoneOffset.UTC; - } - } } diff --git a/xposed/src/main/kotlin/org/matrix/vector/impl/hookers/LoadedApkHookers.kt b/xposed/src/main/kotlin/org/matrix/vector/impl/hookers/LoadedApkHookers.kt index bac9d9cc2..a38e2e774 100644 --- a/xposed/src/main/kotlin/org/matrix/vector/impl/hookers/LoadedApkHookers.kt +++ b/xposed/src/main/kotlin/org/matrix/vector/impl/hookers/LoadedApkHookers.kt @@ -6,7 +6,6 @@ import androidx.annotation.RequiresApi import io.github.libxposed.api.XposedInterface import java.util.Collections import java.util.WeakHashMap -import java.util.concurrent.ConcurrentHashMap import org.lsposed.lspd.util.Utils import org.matrix.vector.impl.VectorLifecycleManager import org.matrix.vector.impl.di.LegacyPackageInfo @@ -87,8 +86,6 @@ private object LoadedApkTracker { /** Tracks and prepares Application instances when their LoadedApk is instantiated. */ object LoadedApkCtorHooker : XposedInterface.Hooker { - val trackedApks = ConcurrentHashMap.newKeySet() - override fun intercept(chain: XposedInterface.Chain): Any? { val result = chain.proceed() val loadedApk = chain.thisObject ?: return result