mirror of
https://github.com/FossifyOrg/Launcher.git
synced 2025-12-26 17:20:54 -05:00
Compare commits
96 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
baf44b3ecf | ||
|
|
7cd94f4c65 | ||
|
|
76bfc030cb | ||
|
|
cadcde79bc | ||
|
|
b60fc160de | ||
|
|
eef787c633 | ||
|
|
6bc8240941 | ||
|
|
e4bde274cb | ||
|
|
b7f5846dd8 | ||
|
|
8b791e0e47 | ||
|
|
7c7e4b56e2 | ||
|
|
c0355fd2e2 | ||
|
|
535398a3c6 | ||
|
|
e9e7788fed | ||
|
|
f0b5e51a45 | ||
|
|
355e4aa7ad | ||
|
|
562ea3e5f9 | ||
|
|
7a0741ff6f | ||
|
|
dde7a3dbcd | ||
|
|
081d438dd9 | ||
|
|
c62a59c2c7 | ||
|
|
0608d59b00 | ||
|
|
f2c4c99255 | ||
|
|
8d7458688e | ||
|
|
41233ba439 | ||
|
|
47dfcc7c6a | ||
|
|
f3f2eb8500 | ||
|
|
598da18f7d | ||
|
|
a09315cb60 | ||
|
|
6905d13a65 | ||
|
|
afc7d0fea3 | ||
|
|
80160e72d1 | ||
|
|
66c5bb89ef | ||
|
|
c0cfab1a19 | ||
|
|
aa96344a2f | ||
|
|
aca9945ad8 | ||
|
|
07924360ab | ||
|
|
94fa10982a | ||
|
|
6359da6d6c | ||
|
|
61148a880d | ||
|
|
de83a3e3ac | ||
|
|
f19d289909 | ||
|
|
de14db9cd5 | ||
|
|
cd6a3ec5c9 | ||
|
|
5a56ac9e3b | ||
|
|
018dd2dd69 | ||
|
|
7aeff1fd73 | ||
|
|
b4553b7abe | ||
|
|
c37b911cf6 | ||
|
|
5b57af9a2e | ||
|
|
1314f56042 | ||
|
|
c31798faf9 | ||
|
|
1c02710bff | ||
|
|
0964e1a448 | ||
|
|
cd4688d35c | ||
|
|
a229b99432 | ||
|
|
b483db96c1 | ||
|
|
e0a4133bcf | ||
|
|
d055684056 | ||
|
|
0a7283e757 | ||
|
|
35ed71bb40 | ||
|
|
6da6265d73 | ||
|
|
e23ff94832 | ||
|
|
66ea58b192 | ||
|
|
740471bc1d | ||
|
|
3b47d8d79e | ||
|
|
338518e493 | ||
|
|
7d59256d6c | ||
|
|
245a6d1c03 | ||
|
|
91b42f3758 | ||
|
|
5eec1d87d5 | ||
|
|
2d01e5c46c | ||
|
|
eb3f8f6ad3 | ||
|
|
4d0ba27326 | ||
|
|
bdd12d84a8 | ||
|
|
bd08d29e7c | ||
|
|
35fc459787 | ||
|
|
fc2ade5cea | ||
|
|
0d81e44d68 | ||
|
|
a0cb828f63 | ||
|
|
bff35b8b9e | ||
|
|
653a229c6a | ||
|
|
06bf7062b8 | ||
|
|
13d8358cdb | ||
|
|
f73958f3c6 | ||
|
|
8334136002 | ||
|
|
0f5ef439c6 | ||
|
|
49a9524b84 | ||
|
|
c508ddebd2 | ||
|
|
c985558a83 | ||
|
|
abfdb77e6a | ||
|
|
4a9eaee83b | ||
|
|
90f5db27d5 | ||
|
|
b373839683 | ||
|
|
95b111b4c8 | ||
|
|
f61492daa4 |
2
.fossify/release-marker.txt
Normal file
2
.fossify/release-marker.txt
Normal file
@@ -0,0 +1,2 @@
|
||||
# Auto-generated file. DO NOT EDIT.
|
||||
1.2.0
|
||||
28
.github/PULL_REQUEST_TEMPLATE.md
vendored
28
.github/PULL_REQUEST_TEMPLATE.md
vendored
@@ -1,28 +0,0 @@
|
||||
<!-- Hey there. Thank you so much for improving Fossify. Please consider filling out the details :)-->
|
||||
|
||||
#### What is it?
|
||||
- [ ] Bugfix
|
||||
- [ ] Feature
|
||||
- [ ] Codebase improvement
|
||||
|
||||
#### Description of the changes in your PR
|
||||
<!-- Bullet points are preferred. The following is an example -->
|
||||
- Updated colors
|
||||
- Update strings
|
||||
- Added documentation
|
||||
|
||||
#### Before/After Screenshots/Screen Record
|
||||
<!-- If your PR changes the app's UI in any way, consider including screenshots or a video showing exactly what changed, so that developers and users can pinpoint it easily. Delete this if it doesn't apply to your PR.-->
|
||||
- Before:
|
||||
- After:
|
||||
|
||||
#### Fixes the following issue(s)
|
||||
<!-- Prefix issues with "Fixes" so that GitHub closes them when the PR is merged (note that each "Fixes #" should be in its own item). Also add any other relevant links. -->
|
||||
- Fixes #
|
||||
|
||||
#### Relies on the following changes
|
||||
<!-- Delete this if it doesn't apply to your PR. -->
|
||||
-
|
||||
|
||||
#### Acknowledgement
|
||||
- [ ] I read the [contribution guidelines](https://github.com/FossifyOrg/Launcher/blob/main/CONTRIBUTING.md).
|
||||
46
.github/dependabot.yml
vendored
Normal file
46
.github/dependabot.yml
vendored
Normal file
@@ -0,0 +1,46 @@
|
||||
version: 2
|
||||
|
||||
registries:
|
||||
maven-google:
|
||||
type: maven-repository
|
||||
url: "https://dl.google.com/dl/android/maven2/"
|
||||
|
||||
maven-central:
|
||||
type: maven-repository
|
||||
url: "https://repo.maven.apache.org/maven2"
|
||||
|
||||
jitpack:
|
||||
type: maven-repository
|
||||
url: "https://jitpack.io"
|
||||
|
||||
updates:
|
||||
- package-ecosystem: "bundler"
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
commit-message:
|
||||
prefix: "chore"
|
||||
prefix-development: "chore"
|
||||
include: "scope"
|
||||
|
||||
- package-ecosystem: "gradle"
|
||||
directory: "/"
|
||||
registries:
|
||||
- maven-central
|
||||
- maven-google
|
||||
- jitpack
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
commit-message:
|
||||
prefix: "chore"
|
||||
prefix-development: "chore"
|
||||
include: "scope"
|
||||
|
||||
- package-ecosystem: "github-actions"
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
commit-message:
|
||||
prefix: "chore"
|
||||
prefix-development: "chore"
|
||||
include: "scope"
|
||||
148
.github/workflows/image-minimizer.js
vendored
148
.github/workflows/image-minimizer.js
vendored
@@ -1,148 +0,0 @@
|
||||
/*
|
||||
* Script for minimizing big images (jpg,gif,png) when they are uploaded to GitHub and not edited otherwise.
|
||||
* Source: https://github.com/TeamNewPipe/NewPipe/blob/dev/.github/workflows/image-minimizer.js
|
||||
*/
|
||||
module.exports = async ({github, context}) => {
|
||||
const IGNORE_KEY = '<!-- IGNORE IMAGE MINIFY -->';
|
||||
const IGNORE_ALT_NAME_END = 'ignoreImageMinify';
|
||||
// Targeted maximum height
|
||||
const IMG_MAX_HEIGHT_PX = 400;
|
||||
// maximum width of GitHub issues/comments
|
||||
const IMG_MAX_WIDTH_PX = 800;
|
||||
// all images that have a lower aspect ratio (-> have a smaller width) than this will be minimized
|
||||
const MIN_ASPECT_RATIO = IMG_MAX_WIDTH_PX / IMG_MAX_HEIGHT_PX
|
||||
|
||||
// Get the body of the image
|
||||
let initialBody = null;
|
||||
if (context.eventName == 'issue_comment') {
|
||||
initialBody = context.payload.comment.body;
|
||||
} else if (context.eventName == 'issues') {
|
||||
initialBody = context.payload.issue.body;
|
||||
} else if (context.eventName == 'pull_request_target') {
|
||||
initialBody = context.payload.pull_request.body;
|
||||
} else {
|
||||
console.log('Aborting: No body found');
|
||||
return;
|
||||
}
|
||||
console.log(`Found body: \n${initialBody}\n`);
|
||||
|
||||
// Check if we should ignore the currently processing element
|
||||
if (initialBody.includes(IGNORE_KEY)) {
|
||||
console.log('Ignoring: Body contains IGNORE_KEY');
|
||||
return;
|
||||
}
|
||||
|
||||
// Regex for finding images (simple variant) 
|
||||
const REGEX_USER_CONTENT_IMAGE_LOOKUP = /\!\[(.*)\]\((https:\/\/[-a-z0-9]+\.githubusercontent\.com\/\d+\/[-0-9a-f]{32,512}\.(jpg|gif|png))\)/gm;
|
||||
const REGEX_ASSETS_IMAGE_LOCKUP = /\!\[(.*)\]\((https:\/\/github\.com\/user-attachments\/assets\/[\-0-9a-f]{36,})\)/gm;
|
||||
|
||||
// Check if we found something
|
||||
let foundSimpleImages = REGEX_USER_CONTENT_IMAGE_LOOKUP.test(initialBody)
|
||||
|| REGEX_ASSETS_IMAGE_LOCKUP.test(initialBody);
|
||||
if (!foundSimpleImages) {
|
||||
console.log('Found no simple images to process');
|
||||
return;
|
||||
}
|
||||
|
||||
console.log('Found at least one simple image to process');
|
||||
|
||||
// Require the probe lib for getting the image dimensions
|
||||
const probe = require('probe-image-size');
|
||||
|
||||
var wasMatchModified = false;
|
||||
|
||||
// Try to find and replace the images with minimized ones
|
||||
let newBody = await replaceAsync(initialBody, REGEX_USER_CONTENT_IMAGE_LOOKUP, minimizeAsync);
|
||||
newBody = await replaceAsync(newBody, REGEX_ASSETS_IMAGE_LOCKUP, minimizeAsync);
|
||||
|
||||
if (!wasMatchModified) {
|
||||
console.log('Nothing was modified. Skipping update');
|
||||
return;
|
||||
}
|
||||
|
||||
// Update the corresponding element
|
||||
if (context.eventName == 'issue_comment') {
|
||||
console.log('Updating comment with id', context.payload.comment.id);
|
||||
await github.rest.issues.updateComment({
|
||||
comment_id: context.payload.comment.id,
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
body: newBody
|
||||
})
|
||||
} else if (context.eventName == 'issues') {
|
||||
console.log('Updating issue', context.payload.issue.number);
|
||||
await github.rest.issues.update({
|
||||
issue_number: context.payload.issue.number,
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
body: newBody
|
||||
});
|
||||
} else if (context.eventName == 'pull_request_target') {
|
||||
console.log('Updating pull request', context.payload.pull_request.number);
|
||||
await github.rest.pulls.update({
|
||||
pull_number: context.payload.pull_request.number,
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
body: newBody
|
||||
});
|
||||
}
|
||||
|
||||
// Async replace function from https://stackoverflow.com/a/48032528
|
||||
async function replaceAsync(str, regex, asyncFn) {
|
||||
const promises = [];
|
||||
str.replace(regex, (match, ...args) => {
|
||||
const promise = asyncFn(match, ...args);
|
||||
promises.push(promise);
|
||||
});
|
||||
const data = await Promise.all(promises);
|
||||
return str.replace(regex, () => data.shift());
|
||||
}
|
||||
|
||||
async function minimizeAsync(match, g1, g2) {
|
||||
console.log(`Found match '${match}'`);
|
||||
|
||||
if (g1.endsWith(IGNORE_ALT_NAME_END)) {
|
||||
console.log(`Ignoring match '${match}': IGNORE_ALT_NAME_END`);
|
||||
return match;
|
||||
}
|
||||
|
||||
let probeAspectRatio = 0;
|
||||
let shouldModify = false;
|
||||
try {
|
||||
console.log(`Probing ${g2}`);
|
||||
let probeResult = await probe(g2);
|
||||
if (probeResult == null) {
|
||||
throw 'No probeResult';
|
||||
}
|
||||
if (probeResult.hUnits != 'px') {
|
||||
throw `Unexpected probeResult.hUnits (expected px but got ${probeResult.hUnits})`;
|
||||
}
|
||||
if (probeResult.height <= 0) {
|
||||
throw `Unexpected probeResult.height (height is invalid: ${probeResult.height})`;
|
||||
}
|
||||
if (probeResult.wUnits != 'px') {
|
||||
throw `Unexpected probeResult.wUnits (expected px but got ${probeResult.wUnits})`;
|
||||
}
|
||||
if (probeResult.width <= 0) {
|
||||
throw `Unexpected probeResult.width (width is invalid: ${probeResult.width})`;
|
||||
}
|
||||
console.log(`Probing resulted in ${probeResult.width}x${probeResult.height}px`);
|
||||
|
||||
probeAspectRatio = probeResult.width / probeResult.height;
|
||||
shouldModify = probeResult.height > IMG_MAX_HEIGHT_PX && probeAspectRatio < MIN_ASPECT_RATIO;
|
||||
} catch(e) {
|
||||
console.log('Probing failed:', e);
|
||||
// Immediately abort
|
||||
return match;
|
||||
}
|
||||
|
||||
if (shouldModify) {
|
||||
wasMatchModified = true;
|
||||
console.log(`Modifying match '${match}'`);
|
||||
return `<img alt="${g1}" src="${g2}" width=${Math.min(600, Math.floor(IMG_MAX_HEIGHT_PX * probeAspectRatio))} />`;
|
||||
}
|
||||
|
||||
console.log(`Match '${match}' is ok/will not be modified`);
|
||||
return match;
|
||||
}
|
||||
}
|
||||
26
.github/workflows/image-minimizer.yml
vendored
26
.github/workflows/image-minimizer.yml
vendored
@@ -9,26 +9,6 @@ on:
|
||||
types: [opened, edited]
|
||||
|
||||
jobs:
|
||||
try-minimize:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
token: ${{ secrets.FOSSIFYBOT_TOKEN }}
|
||||
|
||||
- uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: 16
|
||||
|
||||
- name: Install probe-image-size
|
||||
run: npm i probe-image-size@7.2.3 --ignore-scripts
|
||||
|
||||
- name: Minimize simple images
|
||||
uses: actions/github-script@v7
|
||||
timeout-minutes: 3
|
||||
with:
|
||||
github-token: ${{ secrets.FOSSIFYBOT_TOKEN }}
|
||||
script: |
|
||||
const script = require('.github/workflows/image-minimizer.js');
|
||||
await script({github, context});
|
||||
call-image-minimizer-workflow:
|
||||
uses: FossifyOrg/.github/.github/workflows/image-minimizer.yml@main
|
||||
secrets: inherit
|
||||
|
||||
23
.github/workflows/no-response.yml
vendored
23
.github/workflows/no-response.yml
vendored
@@ -1,24 +1,11 @@
|
||||
name: no-response
|
||||
name: No Response
|
||||
|
||||
on:
|
||||
schedule:
|
||||
- cron: '0 0 * * *' # Runs daily at midnight
|
||||
- cron: "0 12 * * *" # Runs daily at noon
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
noResponse:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/stale@v9
|
||||
with:
|
||||
repo-token: ${{ secrets.FOSSIFYBOT_TOKEN }}
|
||||
days-before-stale: -1
|
||||
# Number of days of inactivity before an issue is closed for lack of response.
|
||||
days-before-close: 14
|
||||
only-labels: 'waiting for author'
|
||||
stale-issue-label: 'waiting for author'
|
||||
stale-pr-label: 'waiting for author'
|
||||
remove-stale-when-updated: false
|
||||
ignore-updates: true
|
||||
close-issue-message: This issue has been automatically closed due to inactivity. We requested additional information but have not received a response from the original author. Without the requested details, we cannot proceed. If you have or find the information needed, please comment so we can reopen the issue.
|
||||
close-pr-message: This pull request has been automatically closed due to inactivity. We requested additional information but have not received a response from the original author. Without the requested details, we cannot proceed. If you have the needed information or updates, please reopen the PR or comment so we can continue the review.
|
||||
call-no-response-workflow:
|
||||
uses: FossifyOrg/.github/.github/workflows/no-response.yml@main
|
||||
secrets: inherit
|
||||
|
||||
10
.github/workflows/pr-labeler.yml
vendored
Normal file
10
.github/workflows/pr-labeler.yml
vendored
Normal file
@@ -0,0 +1,10 @@
|
||||
name: PR Labeler
|
||||
|
||||
on:
|
||||
pull_request_target:
|
||||
types: [opened]
|
||||
|
||||
jobs:
|
||||
call-pr-labeler-workflow:
|
||||
uses: FossifyOrg/.github/.github/workflows/pr-labeler.yml@main
|
||||
secrets: inherit
|
||||
15
.github/workflows/prepare-release-pr.yml
vendored
Normal file
15
.github/workflows/prepare-release-pr.yml
vendored
Normal file
@@ -0,0 +1,15 @@
|
||||
name: Prepare Release PR
|
||||
|
||||
on:
|
||||
repository_dispatch:
|
||||
types: [prepare-release]
|
||||
workflow_dispatch:
|
||||
push:
|
||||
branches: [main]
|
||||
paths:
|
||||
- "CHANGELOG.md"
|
||||
|
||||
jobs:
|
||||
call-release-pr:
|
||||
uses: FossifyOrg/.github/.github/workflows/prepare-release-pr.yml@main
|
||||
secrets: inherit
|
||||
17
.github/workflows/release.yml
vendored
Normal file
17
.github/workflows/release.yml
vendored
Normal file
@@ -0,0 +1,17 @@
|
||||
name: Release
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ main ]
|
||||
paths:
|
||||
- ".fossify/release-marker.txt"
|
||||
|
||||
jobs:
|
||||
call-release-workflow:
|
||||
name: Release
|
||||
uses: FossifyOrg/.github/.github/workflows/release.yml@main
|
||||
with:
|
||||
track: ${{ vars.GPLAY_TRACK || 'beta' }}
|
||||
rollout: ${{ vars.GPLAY_ROLLOUT || '0.05' }}
|
||||
validate_only: ${{ vars.GPLAY_DRY_RUN == 'true' }}
|
||||
secrets: inherit
|
||||
11
.github/workflows/update-lint-baselines.yml
vendored
Normal file
11
.github/workflows/update-lint-baselines.yml
vendored
Normal file
@@ -0,0 +1,11 @@
|
||||
name: Update lint baselines
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
schedule:
|
||||
- cron: "0 0 1 * *"
|
||||
|
||||
jobs:
|
||||
update-lint-baselines:
|
||||
uses: FossifyOrg/.github/.github/workflows/update-lint-baselines.yml@main
|
||||
secrets: inherit
|
||||
15
.github/workflows/validate-fastlane-metadata.yml
vendored
Normal file
15
.github/workflows/validate-fastlane-metadata.yml
vendored
Normal file
@@ -0,0 +1,15 @@
|
||||
name: Fastlane metadata validation
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [main]
|
||||
paths:
|
||||
- "fastlane/**"
|
||||
pull_request:
|
||||
branches: [main]
|
||||
paths:
|
||||
- "fastlane/**"
|
||||
|
||||
jobs:
|
||||
validate:
|
||||
uses: FossifyOrg/.github/.github/workflows/validate-fastlane-metadata.yml@main
|
||||
4
.gitignore
vendored
4
.gitignore
vendored
@@ -9,5 +9,5 @@
|
||||
keystore.jks
|
||||
keystore.properties
|
||||
fastlane/fastlane.json
|
||||
Gemfile
|
||||
Gemfile.lock
|
||||
fastlane/report.xml
|
||||
.kotlin/
|
||||
|
||||
88
CHANGELOG.md
88
CHANGELOG.md
@@ -1,22 +1,80 @@
|
||||
Changelog
|
||||
==========
|
||||
# Changelog
|
||||
All notable changes to this project will be documented in this file.
|
||||
|
||||
Version 1.1.0 *(2025-03-19)*
|
||||
----------------------------
|
||||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
||||
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||
|
||||
* Added double tap to lock screen feature (https://github.com/FossifyOrg/Launcher/issues/63)
|
||||
* Added more translations
|
||||
## [Unreleased]
|
||||
|
||||
Version 1.0.1 *(2025-01-01)*
|
||||
----------------------------
|
||||
## [1.2.0] - 2025-07-15
|
||||
### Added
|
||||
- Option to show keyboard automatically in app drawer ([#106])
|
||||
|
||||
* Fixed scrolling performance issues (https://github.com/FossifyOrg/Launcher/issues/65)
|
||||
* Fixed various issues related to widgets (https://github.com/FossifyOrg/Launcher/issues/5, https://github.com/FossifyOrg/Launcher/issues/44, https://github.com/FossifyOrg/Launcher/issues/74)
|
||||
* Other minor bug fixes and improvements
|
||||
* Added more translations
|
||||
### Changed
|
||||
- Updated translations
|
||||
|
||||
## [1.1.4] - 2025-06-28
|
||||
### Fixed
|
||||
- Addressed crash on startup due to widgets ([#182])
|
||||
|
||||
Version 1.0.0 *(2024-10-16)*
|
||||
----------------------------
|
||||
## [1.1.3] - 2025-06-19
|
||||
### Changed
|
||||
- Updated translations
|
||||
|
||||
* Initial release
|
||||
### Fixed
|
||||
- Addressed frequently occurring crashes ([#6])
|
||||
|
||||
## [1.1.2] - 2025-06-06
|
||||
### Changed
|
||||
- Updated translations
|
||||
|
||||
### Fixed
|
||||
- Clicking home screen app labels now works as expected ([#115])
|
||||
|
||||
## [1.1.1] - 2025-05-14
|
||||
### Changed
|
||||
- Updated translations
|
||||
|
||||
### Removed
|
||||
- Removed redundant launcher settings icon from the app drawer ([#51])
|
||||
|
||||
## [1.1.0] - 2025-03-19
|
||||
### Added
|
||||
- Added double tap to lock screen feature ([#63])
|
||||
|
||||
### Changed
|
||||
- Added more translations
|
||||
|
||||
## [1.0.1] - 2025-01-01
|
||||
### Changed
|
||||
- Other minor bug fixes and improvements
|
||||
- Added more translations
|
||||
|
||||
### Fixed
|
||||
- Fixed scrolling performance issues ([#65])
|
||||
- Fixed various issues related to widgets ([#5], [#44], [#74])
|
||||
|
||||
## [1.0.0] - 2024-10-16
|
||||
### Added
|
||||
- Initial release
|
||||
|
||||
[#5]: https://github.com/FossifyOrg/Launcher/issues/5
|
||||
[#6]: https://github.com/FossifyOrg/Launcher/issues/6
|
||||
[#44]: https://github.com/FossifyOrg/Launcher/issues/44
|
||||
[#51]: https://github.com/FossifyOrg/Launcher/issues/51
|
||||
[#63]: https://github.com/FossifyOrg/Launcher/issues/63
|
||||
[#65]: https://github.com/FossifyOrg/Launcher/issues/65
|
||||
[#74]: https://github.com/FossifyOrg/Launcher/issues/74
|
||||
[#106]: https://github.com/FossifyOrg/Launcher/issues/106
|
||||
[#115]: https://github.com/FossifyOrg/Launcher/issues/115
|
||||
[#182]: https://github.com/FossifyOrg/Launcher/issues/182
|
||||
|
||||
[Unreleased]: https://github.com/FossifyOrg/Launcher/compare/1.2.0...HEAD
|
||||
[1.2.0]: https://github.com/FossifyOrg/Launcher/compare/1.1.4...1.2.0
|
||||
[1.1.4]: https://github.com/FossifyOrg/Launcher/compare/1.1.3...1.1.4
|
||||
[1.1.3]: https://github.com/FossifyOrg/Launcher/compare/1.1.2...1.1.3
|
||||
[1.1.2]: https://github.com/FossifyOrg/Launcher/compare/1.1.1...1.1.2
|
||||
[1.1.1]: https://github.com/FossifyOrg/Launcher/compare/1.1.0...1.1.1
|
||||
[1.1.0]: https://github.com/FossifyOrg/Launcher/compare/1.0.1...1.1.0
|
||||
[1.0.1]: https://github.com/FossifyOrg/Launcher/compare/1.0.0...1.0.1
|
||||
[1.0.0]: https://github.com/FossifyOrg/Launcher/releases/tag/1.0.0
|
||||
|
||||
1
CODEOWNERS
Normal file
1
CODEOWNERS
Normal file
@@ -0,0 +1 @@
|
||||
* @naveensingh
|
||||
4
Gemfile
Normal file
4
Gemfile
Normal file
@@ -0,0 +1,4 @@
|
||||
source "https://rubygems.org"
|
||||
|
||||
gem "fastlane"
|
||||
gem "fastlane-plugin-fossify", "~> 1.0"
|
||||
231
Gemfile.lock
Normal file
231
Gemfile.lock
Normal file
@@ -0,0 +1,231 @@
|
||||
GEM
|
||||
remote: https://rubygems.org/
|
||||
specs:
|
||||
CFPropertyList (3.0.7)
|
||||
base64
|
||||
nkf
|
||||
rexml
|
||||
abbrev (0.1.2)
|
||||
addressable (2.8.7)
|
||||
public_suffix (>= 2.0.2, < 7.0)
|
||||
artifactory (3.0.17)
|
||||
atomos (0.1.3)
|
||||
aws-eventstream (1.4.0)
|
||||
aws-partitions (1.1116.0)
|
||||
aws-sdk-core (3.225.2)
|
||||
aws-eventstream (~> 1, >= 1.3.0)
|
||||
aws-partitions (~> 1, >= 1.992.0)
|
||||
aws-sigv4 (~> 1.9)
|
||||
base64
|
||||
jmespath (~> 1, >= 1.6.1)
|
||||
logger
|
||||
aws-sdk-kms (1.105.0)
|
||||
aws-sdk-core (~> 3, >= 3.225.0)
|
||||
aws-sigv4 (~> 1.5)
|
||||
aws-sdk-s3 (1.189.1)
|
||||
aws-sdk-core (~> 3, >= 3.225.0)
|
||||
aws-sdk-kms (~> 1)
|
||||
aws-sigv4 (~> 1.5)
|
||||
aws-sigv4 (1.12.1)
|
||||
aws-eventstream (~> 1, >= 1.0.2)
|
||||
babosa (1.0.4)
|
||||
base64 (0.3.0)
|
||||
claide (1.1.0)
|
||||
colored (1.2)
|
||||
colored2 (3.1.2)
|
||||
commander (4.6.0)
|
||||
highline (~> 2.0.0)
|
||||
declarative (0.0.20)
|
||||
digest-crc (0.7.0)
|
||||
rake (>= 12.0.0, < 14.0.0)
|
||||
domain_name (0.6.20240107)
|
||||
dotenv (2.8.1)
|
||||
emoji_regex (3.2.3)
|
||||
excon (0.112.0)
|
||||
faraday (1.10.4)
|
||||
faraday-em_http (~> 1.0)
|
||||
faraday-em_synchrony (~> 1.0)
|
||||
faraday-excon (~> 1.1)
|
||||
faraday-httpclient (~> 1.0)
|
||||
faraday-multipart (~> 1.0)
|
||||
faraday-net_http (~> 1.0)
|
||||
faraday-net_http_persistent (~> 1.0)
|
||||
faraday-patron (~> 1.0)
|
||||
faraday-rack (~> 1.0)
|
||||
faraday-retry (~> 1.0)
|
||||
ruby2_keywords (>= 0.0.4)
|
||||
faraday-cookie_jar (0.0.7)
|
||||
faraday (>= 0.8.0)
|
||||
http-cookie (~> 1.0.0)
|
||||
faraday-em_http (1.0.0)
|
||||
faraday-em_synchrony (1.0.0)
|
||||
faraday-excon (1.1.0)
|
||||
faraday-httpclient (1.0.1)
|
||||
faraday-multipart (1.1.0)
|
||||
multipart-post (~> 2.0)
|
||||
faraday-net_http (1.0.2)
|
||||
faraday-net_http_persistent (1.2.0)
|
||||
faraday-patron (1.0.0)
|
||||
faraday-rack (1.0.0)
|
||||
faraday-retry (1.0.3)
|
||||
faraday_middleware (1.2.1)
|
||||
faraday (~> 1.0)
|
||||
fastimage (2.4.0)
|
||||
fastlane (2.228.0)
|
||||
CFPropertyList (>= 2.3, < 4.0.0)
|
||||
addressable (>= 2.8, < 3.0.0)
|
||||
artifactory (~> 3.0)
|
||||
aws-sdk-s3 (~> 1.0)
|
||||
babosa (>= 1.0.3, < 2.0.0)
|
||||
bundler (>= 1.12.0, < 3.0.0)
|
||||
colored (~> 1.2)
|
||||
commander (~> 4.6)
|
||||
dotenv (>= 2.1.1, < 3.0.0)
|
||||
emoji_regex (>= 0.1, < 4.0)
|
||||
excon (>= 0.71.0, < 1.0.0)
|
||||
faraday (~> 1.0)
|
||||
faraday-cookie_jar (~> 0.0.6)
|
||||
faraday_middleware (~> 1.0)
|
||||
fastimage (>= 2.1.0, < 3.0.0)
|
||||
fastlane-sirp (>= 1.0.0)
|
||||
gh_inspector (>= 1.1.2, < 2.0.0)
|
||||
google-apis-androidpublisher_v3 (~> 0.3)
|
||||
google-apis-playcustomapp_v1 (~> 0.1)
|
||||
google-cloud-env (>= 1.6.0, < 2.0.0)
|
||||
google-cloud-storage (~> 1.31)
|
||||
highline (~> 2.0)
|
||||
http-cookie (~> 1.0.5)
|
||||
json (< 3.0.0)
|
||||
jwt (>= 2.1.0, < 3)
|
||||
mini_magick (>= 4.9.4, < 5.0.0)
|
||||
multipart-post (>= 2.0.0, < 3.0.0)
|
||||
naturally (~> 2.2)
|
||||
optparse (>= 0.1.1, < 1.0.0)
|
||||
plist (>= 3.1.0, < 4.0.0)
|
||||
rubyzip (>= 2.0.0, < 3.0.0)
|
||||
security (= 0.1.5)
|
||||
simctl (~> 1.6.3)
|
||||
terminal-notifier (>= 2.0.0, < 3.0.0)
|
||||
terminal-table (~> 3)
|
||||
tty-screen (>= 0.6.3, < 1.0.0)
|
||||
tty-spinner (>= 0.8.0, < 1.0.0)
|
||||
word_wrap (~> 1.0.0)
|
||||
xcodeproj (>= 1.13.0, < 2.0.0)
|
||||
xcpretty (~> 0.4.1)
|
||||
xcpretty-travis-formatter (>= 0.0.3, < 2.0.0)
|
||||
fastlane-plugin-fossify (1.0.2)
|
||||
abbrev
|
||||
fastlane-sirp (1.0.0)
|
||||
sysrandom (~> 1.0)
|
||||
gh_inspector (1.1.3)
|
||||
google-apis-androidpublisher_v3 (0.54.0)
|
||||
google-apis-core (>= 0.11.0, < 2.a)
|
||||
google-apis-core (0.11.3)
|
||||
addressable (~> 2.5, >= 2.5.1)
|
||||
googleauth (>= 0.16.2, < 2.a)
|
||||
httpclient (>= 2.8.1, < 3.a)
|
||||
mini_mime (~> 1.0)
|
||||
representable (~> 3.0)
|
||||
retriable (>= 2.0, < 4.a)
|
||||
rexml
|
||||
google-apis-iamcredentials_v1 (0.17.0)
|
||||
google-apis-core (>= 0.11.0, < 2.a)
|
||||
google-apis-playcustomapp_v1 (0.13.0)
|
||||
google-apis-core (>= 0.11.0, < 2.a)
|
||||
google-apis-storage_v1 (0.31.0)
|
||||
google-apis-core (>= 0.11.0, < 2.a)
|
||||
google-cloud-core (1.8.0)
|
||||
google-cloud-env (>= 1.0, < 3.a)
|
||||
google-cloud-errors (~> 1.0)
|
||||
google-cloud-env (1.6.0)
|
||||
faraday (>= 0.17.3, < 3.0)
|
||||
google-cloud-errors (1.5.0)
|
||||
google-cloud-storage (1.47.0)
|
||||
addressable (~> 2.8)
|
||||
digest-crc (~> 0.4)
|
||||
google-apis-iamcredentials_v1 (~> 0.1)
|
||||
google-apis-storage_v1 (~> 0.31.0)
|
||||
google-cloud-core (~> 1.6)
|
||||
googleauth (>= 0.16.2, < 2.a)
|
||||
mini_mime (~> 1.0)
|
||||
googleauth (1.8.1)
|
||||
faraday (>= 0.17.3, < 3.a)
|
||||
jwt (>= 1.4, < 3.0)
|
||||
multi_json (~> 1.11)
|
||||
os (>= 0.9, < 2.0)
|
||||
signet (>= 0.16, < 2.a)
|
||||
highline (2.0.3)
|
||||
http-cookie (1.0.8)
|
||||
domain_name (~> 0.5)
|
||||
httpclient (2.9.0)
|
||||
mutex_m
|
||||
jmespath (1.6.2)
|
||||
json (2.12.2)
|
||||
jwt (2.10.1)
|
||||
base64
|
||||
logger (1.7.0)
|
||||
mini_magick (4.13.2)
|
||||
mini_mime (1.1.5)
|
||||
multi_json (1.15.0)
|
||||
multipart-post (2.4.1)
|
||||
mutex_m (0.3.0)
|
||||
nanaimo (0.4.0)
|
||||
naturally (2.3.0)
|
||||
nkf (0.2.0)
|
||||
optparse (0.6.0)
|
||||
os (1.1.4)
|
||||
plist (3.7.2)
|
||||
public_suffix (6.0.2)
|
||||
rake (13.3.0)
|
||||
representable (3.2.0)
|
||||
declarative (< 0.1.0)
|
||||
trailblazer-option (>= 0.1.1, < 0.2.0)
|
||||
uber (< 0.2.0)
|
||||
retriable (3.1.2)
|
||||
rexml (3.4.1)
|
||||
rouge (3.28.0)
|
||||
ruby2_keywords (0.0.5)
|
||||
rubyzip (2.4.1)
|
||||
security (0.1.5)
|
||||
signet (0.20.0)
|
||||
addressable (~> 2.8)
|
||||
faraday (>= 0.17.5, < 3.a)
|
||||
jwt (>= 1.5, < 3.0)
|
||||
multi_json (~> 1.10)
|
||||
simctl (1.6.10)
|
||||
CFPropertyList
|
||||
naturally
|
||||
sysrandom (1.0.5)
|
||||
terminal-notifier (2.0.0)
|
||||
terminal-table (3.0.2)
|
||||
unicode-display_width (>= 1.1.1, < 3)
|
||||
trailblazer-option (0.1.2)
|
||||
tty-cursor (0.7.1)
|
||||
tty-screen (0.8.2)
|
||||
tty-spinner (0.9.3)
|
||||
tty-cursor (~> 0.7)
|
||||
uber (0.1.0)
|
||||
unicode-display_width (2.6.0)
|
||||
word_wrap (1.0.0)
|
||||
xcodeproj (1.27.0)
|
||||
CFPropertyList (>= 2.3.3, < 4.0)
|
||||
atomos (~> 0.1.3)
|
||||
claide (>= 1.0.2, < 2.0)
|
||||
colored2 (~> 3.1)
|
||||
nanaimo (~> 0.4.0)
|
||||
rexml (>= 3.3.6, < 4.0)
|
||||
xcpretty (0.4.1)
|
||||
rouge (~> 3.28.0)
|
||||
xcpretty-travis-formatter (1.0.1)
|
||||
xcpretty (~> 0.2, >= 0.0.7)
|
||||
|
||||
PLATFORMS
|
||||
ruby
|
||||
x86_64-linux
|
||||
|
||||
DEPENDENCIES
|
||||
fastlane
|
||||
fastlane-plugin-fossify (~> 1.0)
|
||||
|
||||
BUNDLED WITH
|
||||
2.6.8
|
||||
2
app/.gitignore
vendored
2
app/.gitignore
vendored
@@ -1,3 +1,3 @@
|
||||
/build
|
||||
/foss
|
||||
/prepaid
|
||||
/gplay
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
|
||||
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
|
||||
import org.jetbrains.kotlin.konan.properties.Properties
|
||||
import java.io.FileInputStream
|
||||
@@ -15,15 +16,22 @@ if (keystorePropertiesFile.exists()) {
|
||||
keystoreProperties.load(FileInputStream(keystorePropertiesFile))
|
||||
}
|
||||
|
||||
fun hasSigningVars(): Boolean {
|
||||
return providers.environmentVariable("SIGNING_KEY_ALIAS").orNull != null
|
||||
&& providers.environmentVariable("SIGNING_KEY_PASSWORD").orNull != null
|
||||
&& providers.environmentVariable("SIGNING_STORE_FILE").orNull != null
|
||||
&& providers.environmentVariable("SIGNING_STORE_PASSWORD").orNull != null
|
||||
}
|
||||
|
||||
android {
|
||||
compileSdk = project.libs.versions.app.build.compileSDKVersion.get().toInt()
|
||||
|
||||
defaultConfig {
|
||||
applicationId = libs.versions.app.version.appId.get()
|
||||
applicationId = project.property("APP_ID").toString()
|
||||
minSdk = project.libs.versions.app.build.minimumSDK.get().toInt()
|
||||
targetSdk = project.libs.versions.app.build.targetSDK.get().toInt()
|
||||
versionName = project.libs.versions.app.version.versionName.get()
|
||||
versionCode = project.libs.versions.app.version.versionCode.get().toInt()
|
||||
versionName = project.property("VERSION_NAME").toString()
|
||||
versionCode = project.property("VERSION_CODE").toString().toInt()
|
||||
setProperty("archivesBaseName", "launcher-$versionCode")
|
||||
ksp {
|
||||
arg("room.schemaLocation", "$projectDir/schemas")
|
||||
@@ -38,6 +46,15 @@ android {
|
||||
storeFile = file(keystoreProperties.getProperty("storeFile"))
|
||||
storePassword = keystoreProperties.getProperty("storePassword")
|
||||
}
|
||||
} else if (hasSigningVars()) {
|
||||
register("release") {
|
||||
keyAlias = providers.environmentVariable("SIGNING_KEY_ALIAS").get()
|
||||
keyPassword = providers.environmentVariable("SIGNING_KEY_PASSWORD").get()
|
||||
storeFile = file(providers.environmentVariable("SIGNING_STORE_FILE").get())
|
||||
storePassword = providers.environmentVariable("SIGNING_STORE_PASSWORD").get()
|
||||
}
|
||||
} else {
|
||||
logger.warn("Warning: No signing config found. Build will be unsigned.")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -57,7 +74,7 @@ android {
|
||||
getDefaultProguardFile("proguard-android-optimize.txt"),
|
||||
"proguard-rules.pro"
|
||||
)
|
||||
if (keystorePropertiesFile.exists()) {
|
||||
if (keystorePropertiesFile.exists() || hasSigningVars()) {
|
||||
signingConfig = signingConfigs.getByName("release")
|
||||
}
|
||||
}
|
||||
@@ -67,7 +84,7 @@ android {
|
||||
productFlavors {
|
||||
register("core")
|
||||
register("foss")
|
||||
register("prepaid")
|
||||
register("gplay")
|
||||
}
|
||||
|
||||
sourceSets {
|
||||
@@ -84,22 +101,29 @@ android {
|
||||
includeInApk = false
|
||||
}
|
||||
|
||||
tasks.withType<KotlinCompile> {
|
||||
kotlinOptions.jvmTarget = project.libs.versions.app.build.kotlinJVMTarget.get()
|
||||
androidResources {
|
||||
@Suppress("UnstableApiUsage")
|
||||
generateLocaleConfig = true
|
||||
}
|
||||
|
||||
namespace = libs.versions.app.version.appId.get()
|
||||
tasks.withType<KotlinCompile> {
|
||||
compilerOptions.jvmTarget.set(
|
||||
JvmTarget.fromTarget(project.libs.versions.app.build.kotlinJVMTarget.get())
|
||||
)
|
||||
}
|
||||
|
||||
namespace = project.property("APP_ID").toString()
|
||||
|
||||
lint {
|
||||
checkReleaseBuilds = false
|
||||
abortOnError = true
|
||||
warningsAsErrors = true
|
||||
warningsAsErrors = false
|
||||
baseline = file("lint-baseline.xml")
|
||||
lintConfig = rootProject.file("lint.xml")
|
||||
}
|
||||
|
||||
bundle {
|
||||
language {
|
||||
@Suppress("UnstableApiUsage")
|
||||
enableSplit = false
|
||||
}
|
||||
}
|
||||
@@ -107,6 +131,9 @@ android {
|
||||
|
||||
detekt {
|
||||
baseline = file("detekt-baseline.xml")
|
||||
config.setFrom("$rootDir/detekt.yml")
|
||||
buildUponDefaultConfig = true
|
||||
allRules = false
|
||||
}
|
||||
|
||||
dependencies {
|
||||
@@ -114,4 +141,5 @@ dependencies {
|
||||
|
||||
implementation(libs.bundles.room)
|
||||
ksp(libs.androidx.room.compiler)
|
||||
detektPlugins(libs.compose.detekt)
|
||||
}
|
||||
|
||||
@@ -1,464 +1,152 @@
|
||||
<?xml version="1.0" ?>
|
||||
<SmellBaseline>
|
||||
<ManuallySuppressedIssues></ManuallySuppressedIssues>
|
||||
<CurrentIssues>
|
||||
<ID>ComplexCondition:HomeScreenGrid.kt$AnimatedGridPager$currentPage < getMaxPage() && diffX > 0f || currentPage > 0 && diffX
|
||||
< 0f
|
||||
</ID>
|
||||
<ID>ComplexCondition:HomeScreenGrid.kt$HomeScreenGrid$item.page != 0 && gridItems.none { it.page == item.page && it.id != item.id &&
|
||||
it.parentId == null }
|
||||
</ID>
|
||||
<ID>ComplexCondition:HomeScreenGrid.kt$HomeScreenGrid$newParentId != null && gridItems.any { it.parentId == newParentId && it.left ==
|
||||
left } && (newParentId != oldParentId || left != oldLeft)
|
||||
</ID>
|
||||
<ID>ComplexCondition:HomeScreenGrid.kt$HomeScreenGrid$x >= left && x <= right && y >= top && y <= bottom</ID>
|
||||
<ID>ComplexCondition:HomeScreenGrid.kt$HomeScreenGrid$x >= rect.left && x <= rect.right && y >= rect.top && y <=
|
||||
rect.bottom
|
||||
</ID>
|
||||
<ID>CyclomaticComplexMethod:Activity.kt$fun Activity.handleGridItemPopupMenu(anchorView: View, gridItem: HomeScreenGridItem, isOnAllAppsFragment:
|
||||
Boolean, listener: ItemMenuListener): PopupMenu
|
||||
</ID>
|
||||
<ID>CyclomaticComplexMethod:HomeScreenGrid.kt$HomeScreenGrid$fun draggedItemMoved(x: Int, y: Int)</ID>
|
||||
<ID>CyclomaticComplexMethod:HomeScreenGrid.kt$HomeScreenGrid$fun drawInto(canvas: Canvas)</ID>
|
||||
<ID>CyclomaticComplexMethod:HomeScreenGrid.kt$HomeScreenGrid$fun isClickingGridItem(x: Int, y: Int): HomeScreenGridItem?</ID>
|
||||
<ID>CyclomaticComplexMethod:HomeScreenGrid.kt$HomeScreenGrid$private fun addAppIconOrShortcut( draggedHomeGridItem: HomeScreenGridItem?, xIndex: Int,
|
||||
yIndex: Int, newParentId: Long? = null, toFolderEnd: Boolean = true )
|
||||
</ID>
|
||||
<ID>CyclomaticComplexMethod:HomeScreenGrid.kt$HomeScreenGrid$private fun addAppIconOrShortcut()</ID>
|
||||
<ID>CyclomaticComplexMethod:HomeScreenGrid.kt$HomeScreenGrid$private fun addWidget()</ID>
|
||||
<ID>CyclomaticComplexMethod:HomeScreenGrid.kt$HomeScreenGrid$private fun moveItem()</ID>
|
||||
<ID>CyclomaticComplexMethod:MainActivity.kt$MainActivity$override fun onTouchEvent(event: MotionEvent?): Boolean</ID>
|
||||
<ID>CyclomaticComplexMethod:MyAppWidgetResizeFrame.kt$MyAppWidgetResizeFrame$override fun onTouchEvent(event: MotionEvent?): Boolean</ID>
|
||||
<ID>EmptyCatchBlock:Context.kt${ }</ID>
|
||||
<ID>EmptyCatchBlock:MainActivity.kt$MainActivity${ }</ID>
|
||||
<ID>EmptyCatchBlock:WidgetsFragment.kt$WidgetsFragment${ }</ID>
|
||||
<ID>EmptyFunctionBlock:FolderIconsAdapter.kt$FolderIconsAdapter${}</ID>
|
||||
<ID>EmptyFunctionBlock:HiddenIconsAdapter.kt$HiddenIconsAdapter${}</ID>
|
||||
<ID>LargeClass:HomeScreenGrid.kt$HomeScreenGrid : RelativeLayout</ID>
|
||||
<ID>LargeClass:MainActivity.kt$MainActivity : SimpleActivityFlingListener</ID>
|
||||
<ID>LongMethod:Activity.kt$fun Activity.handleGridItemPopupMenu(anchorView: View, gridItem: HomeScreenGridItem, isOnAllAppsFragment: Boolean, listener:
|
||||
ItemMenuListener): PopupMenu
|
||||
</ID>
|
||||
<ID>LongMethod:HomeScreenGrid.kt$HomeScreenGrid$fun draggedItemMoved(x: Int, y: Int)</ID>
|
||||
<ID>LongMethod:HomeScreenGrid.kt$HomeScreenGrid$fun drawInto(canvas: Canvas)</ID>
|
||||
<ID>LongMethod:HomeScreenGrid.kt$HomeScreenGrid$private fun addAppIconOrShortcut( draggedHomeGridItem: HomeScreenGridItem?, xIndex: Int, yIndex: Int,
|
||||
newParentId: Long? = null, toFolderEnd: Boolean = true )
|
||||
</ID>
|
||||
<ID>LongMethod:HomeScreenGrid.kt$HomeScreenGrid$private fun addAppIconOrShortcut()</ID>
|
||||
<ID>LongMethod:HomeScreenGrid.kt$HomeScreenGrid$private fun addWidget()</ID>
|
||||
<ID>LongMethod:MainActivity.kt$MainActivity$override fun onTouchEvent(event: MotionEvent?): Boolean</ID>
|
||||
<ID>LongMethod:MainActivity.kt$MainActivity$private fun getDefaultAppPackages(appLaunchers: ArrayList<AppLauncher>)</ID>
|
||||
<ID>LongMethod:MyAppWidgetResizeFrame.kt$MyAppWidgetResizeFrame$override fun onTouchEvent(event: MotionEvent?): Boolean</ID>
|
||||
<ID>LongParameterList:HomeScreenGrid.kt$AnimatedGridPager$( private val getMaxPage: () -> Int, private val redrawGrid: () -> Unit, private val
|
||||
getWidth: () -> Int, private val getHandler: () -> Handler, private val getNextPageBound: () -> Int, private val getPrevPageBound: () ->
|
||||
Int, private val pageChangeStarted: () -> Unit )
|
||||
</ID>
|
||||
<ID>LongParameterList:HomeScreenGridItemsDao.kt$HomeScreenGridItemsDao$(left: Int, top: Int, right: Int, bottom: Int, page: Int, docked: Boolean,
|
||||
parentId: Long?, id: Long)
|
||||
</ID>
|
||||
<ID>LongParameterList:MyAppWidgetResizeFrame.kt$MyAppWidgetResizeFrame$( coords: Rect, cellWidth: Int, cellHeight: Int, sideMargins: Rect, gridItem:
|
||||
HomeScreenGridItem, allGridItems: ArrayList<HomeScreenGridItem> )
|
||||
</ID>
|
||||
<ID>LoopWithTooManyJumpStatements:MainActivity.kt$MainActivity$for</ID>
|
||||
<ID>MagicNumber:AppsDatabase.kt$AppsDatabase.Companion.<no name provided>$3</ID>
|
||||
<ID>MagicNumber:AppsDatabase.kt$AppsDatabase.Companion.<no name provided>$4</ID>
|
||||
<ID>MagicNumber:AppsDatabase.kt$AppsDatabase.Companion.<no name provided>$5</ID>
|
||||
<ID>MagicNumber:Context.kt$30</ID>
|
||||
<ID>MagicNumber:Context.kt$70.0</ID>
|
||||
<ID>MagicNumber:Converters.kt$Converters$100</ID>
|
||||
<ID>MagicNumber:HiddenIconsAdapter.kt$HiddenIconsAdapter$0.1f</ID>
|
||||
<ID>MagicNumber:HiddenIconsAdapter.kt$HiddenIconsAdapter$150</ID>
|
||||
<ID>MagicNumber:HomeScreenGrid.kt$AnimatedGridPager$0.5f</ID>
|
||||
<ID>MagicNumber:HomeScreenGrid.kt$AnimatedGridPager$255</ID>
|
||||
<ID>MagicNumber:HomeScreenGrid.kt$AnimatedGridPager$255.0f</ID>
|
||||
<ID>MagicNumber:HomeScreenGrid.kt$HomeScreenGrid$1.2f</ID>
|
||||
<ID>MagicNumber:HomeScreenGrid.kt$HomeScreenGrid$1.5f</ID>
|
||||
<ID>MagicNumber:HomeScreenGrid.kt$HomeScreenGrid$3f</ID>
|
||||
<ID>MagicNumber:HomeScreenGrid.kt$HomeScreenGrid$5</ID>
|
||||
<ID>MagicNumber:HomeScreenGrid.kt$HomeScreenGrid.HomeScreenFolder$0.2f</ID>
|
||||
<ID>MagicNumber:HomeScreenGrid.kt$HomeScreenGrid.HomeScreenFolder$3</ID>
|
||||
<ID>MagicNumber:HomeScreenGrid.kt$HomeScreenGrid.HomeScreenFolder$5f</ID>
|
||||
<ID>MagicNumber:HomeScreenGrid.kt$HomeScreenGrid.HomeScreenFolder.<no name provided>$0.2f</ID>
|
||||
<ID>MagicNumber:HomeScreenGrid.kt$HomeScreenGrid.HomeScreenGridTouchHelper$100</ID>
|
||||
<ID>MagicNumber:LaunchersAdapter.kt$LaunchersAdapter$0.1f</ID>
|
||||
<ID>MagicNumber:LaunchersAdapter.kt$LaunchersAdapter.ViewHolder$150</ID>
|
||||
<ID>MagicNumber:MainActivity.kt$MainActivity$0.5</ID>
|
||||
<ID>MagicNumber:MainActivity.kt$MainActivity$2000</ID>
|
||||
<ID>MagicNumber:MainActivity.kt$MainActivity$3</ID>
|
||||
<ID>MagicNumber:MainActivity.kt$MainActivity$4</ID>
|
||||
<ID>MagicNumber:MainActivity.kt$MainActivity.MyGestureListener$500L</ID>
|
||||
<ID>MagicNumber:MyAppWidgetHostView.kt$MyAppWidgetHostView$4</ID>
|
||||
<ID>MagicNumber:MyAppWidgetResizeFrame.kt$MyAppWidgetResizeFrame$3</ID>
|
||||
<ID>MagicNumber:MyAppWidgetResizeFrame.kt$MyAppWidgetResizeFrame$4</ID>
|
||||
<ID>MagicNumber:MyAppWidgetResizeFrame.kt$MyAppWidgetResizeFrame$5</ID>
|
||||
<ID>MaxLineLength:Activity.kt$LauncherApps.ShortcutQuery.FLAG_MATCH_DYNAMIC or LauncherApps.ShortcutQuery.FLAG_MATCH_MANIFEST or
|
||||
LauncherApps.ShortcutQuery.FLAG_MATCH_PINNED
|
||||
</ID>
|
||||
<ID>MaxLineLength:Activity.kt$fun</ID>
|
||||
<ID>MaxLineLength:Activity.kt$launcherApps.getShortcutIconDrawable(it, resources.displayMetrics.densityDpi).toBitmap(width = iconSize, height =
|
||||
iconSize)
|
||||
</ID>
|
||||
<ID>MaxLineLength:Activity.kt$menu.findItem(R.id.rename).isVisible = (gridItem.type == ITEM_TYPE_ICON || gridItem.type == ITEM_TYPE_FOLDER) &&
|
||||
!isOnAllAppsFragment
|
||||
</ID>
|
||||
<ID>MaxLineLength:Activity.kt$menu.findItem(R.id.uninstall).isVisible = gridItem.type == ITEM_TYPE_ICON &&
|
||||
canAppBeUninstalled(gridItem.packageName)
|
||||
</ID>
|
||||
<ID>MaxLineLength:AllAppsFragment.kt$AllAppsFragment$// some devices ACTION_MOVE keeps triggering for the whole long press duration, but we are
|
||||
interested in real moves only, when coords change
|
||||
</ID>
|
||||
<ID>MaxLineLength:AllAppsFragment.kt$AllAppsFragment$binding.allAppsGrid.setPadding(0, 0,
|
||||
resources.getDimension(org.fossify.commons.R.dimen.medium_margin).toInt(), bottomListPadding)
|
||||
</ID>
|
||||
<ID>MaxLineLength:AllAppsFragment.kt$AllAppsFragment$class</ID>
|
||||
<ID>MaxLineLength:AppLauncher.kt$AppLauncher$@ColumnInfo(name = "activity_name") var activityName: String</ID>
|
||||
<ID>MaxLineLength:AppLauncher.kt$AppLauncher$sorting and SORT_BY_TITLE != 0 ->
|
||||
title.normalizeString().lowercase().compareTo(other.title.normalizeString().lowercase())
|
||||
</ID>
|
||||
<ID>MaxLineLength:AppsDatabase.kt$AppsDatabase.Companion.<no name provided>$database.execSQL("CREATE TABLE IF NOT EXISTS `hidden_icons` (`id`
|
||||
INTEGER PRIMARY KEY AUTOINCREMENT, `package_name` TEXT NOT NULL, `activity_name` TEXT NOT NULL, `title` TEXT NOT NULL)")
|
||||
</ID>
|
||||
<ID>MaxLineLength:AppsDatabase.kt$AppsDatabase.Companion.<no name provided>$database.execSQL("CREATE TABLE `home_screen_grid_items_new` (`id`
|
||||
INTEGER PRIMARY KEY AUTOINCREMENT, `left` INTEGER NOT NULL, `top` INTEGER NOT NULL, `right` INTEGER NOT NULL, `bottom` INTEGER NOT NULL, `page`
|
||||
INTEGER NOT NULL, `package_name` TEXT NOT NULL, `activity_name` TEXT NOT NULL, `title` TEXT NOT NULL, `type` INTEGER NOT NULL, `class_name` TEXT NOT
|
||||
NULL, `widget_id` INTEGER NOT NULL, `shortcut_id` TEXT NOT NULL, `icon` BLOB, `docked` INTEGER NOT NULL DEFAULT 0, `parent_id` INTEGER)")
|
||||
</ID>
|
||||
<ID>MaxLineLength:AppsDatabase.kt$AppsDatabase.Companion.<no name provided>$database.execSQL("CREATE UNIQUE INDEX
|
||||
`index_home_screen_grid_items_id` ON `home_screen_grid_items` (`id`)")
|
||||
</ID>
|
||||
<ID>MaxLineLength:AppsDatabase.kt$AppsDatabase.Companion.<no name provided>$database.execSQL("INSERT INTO `home_screen_grid_items_new` (`id`,
|
||||
`left`, `top`, `right`, `bottom`, `page`, `package_name`, `activity_name`, `title`, `type`, `class_name`, `widget_id`, `shortcut_id`, `icon`,
|
||||
`docked`, `parent_id`) SELECT `id`, `left`, `top`, `right`, `bottom`, 0 as `page`, `package_name`, `activity_name`, `title`, `type`, `class_name`,
|
||||
`widget_id`, `shortcut_id`, `icon`, CASE WHEN `type` != 1 AND `top` = 5 THEN 1 ELSE 0 END AS `docked`, NULL AS `parent_id` FROM
|
||||
`home_screen_grid_items` WHERE `intent` IS NULL OR `intent` = ''")
|
||||
</ID>
|
||||
<ID>MaxLineLength:Context.kt$val Context.homeScreenGridItemsDB: HomeScreenGridItemsDao get() =
|
||||
AppsDatabase.getInstance(applicationContext).HomeScreenGridItemsDao()
|
||||
</ID>
|
||||
<ID>MaxLineLength:FolderIconsAdapter.kt$FolderIconsAdapter.<no name provided>$val yOffset =
|
||||
resources.getDimension(R.dimen.long_press_anchor_button_offset_y) * (visibleMenuItems - 1)
|
||||
</ID>
|
||||
<ID>MaxLineLength:HiddenIconsAdapter.kt$HiddenIconsAdapter$private fun getSelectedItems()</ID>
|
||||
<ID>MaxLineLength:HomeScreenGrid.kt$AnimatedGridPager$((pageChangeSwipedPercentage > 0f && item.page == currentPage - 1) ||
|
||||
(pageChangeSwipedPercentage < 0f && item.page == currentPage + 1))
|
||||
</ID>
|
||||
<ID>MaxLineLength:HomeScreenGrid.kt$HomeScreenGrid$(context as? MainActivity)</ID>
|
||||
<ID>MaxLineLength:HomeScreenGrid.kt$HomeScreenGrid$.</ID>
|
||||
<ID>MaxLineLength:HomeScreenGrid.kt$HomeScreenGrid$Math.abs(it.x - draggedItemCurrentCoords.first + sideMargins.left) + Math.abs(it.y -
|
||||
draggedItemCurrentCoords.second + sideMargins.top)
|
||||
</ID>
|
||||
<ID>MaxLineLength:HomeScreenGrid.kt$HomeScreenGrid$abs(it.second - draggedItemCurrentCoords.first + sideMargins.left) + abs(it.third -
|
||||
draggedItemCurrentCoords.second + sideMargins.top)
|
||||
</ID>
|
||||
<ID>MaxLineLength:HomeScreenGrid.kt$HomeScreenGrid$abs(it.x - draggedItemCurrentCoords.first + sideMargins.left) + abs(it.y -
|
||||
draggedItemCurrentCoords.second + sideMargins.top)
|
||||
</ID>
|
||||
<ID>MaxLineLength:HomeScreenGrid.kt$HomeScreenGrid$canvas.drawCircle(currentIndicatorPosition + pageIndicatorRadius, pageIndicatorY,
|
||||
pageIndicatorRadius, currentPageIndicatorPaint)
|
||||
</ID>
|
||||
<ID>MaxLineLength:HomeScreenGrid.kt$HomeScreenGrid$canvas.drawCircle(currentPageIndicatorLeft + pageIndicatorRadius, pageIndicatorY,
|
||||
pageIndicatorRadius, emptyPageIndicatorPaint)
|
||||
</ID>
|
||||
<ID>MaxLineLength:HomeScreenGrid.kt$HomeScreenGrid$canvas.drawRoundRect(folderRect, roundedCornerRadius / folder.scale, roundedCornerRadius /
|
||||
folder.scale, folderBackgroundPaint)
|
||||
</ID>
|
||||
<ID>MaxLineLength:HomeScreenGrid.kt$HomeScreenGrid$canvas.drawRoundRect(leftSide, topSide, rightSide, bottomSide, roundedCornerRadius,
|
||||
roundedCornerRadius, dragShadowCirclePaint)
|
||||
</ID>
|
||||
<ID>MaxLineLength:HomeScreenGrid.kt$HomeScreenGrid$context.homeScreenGridItemsDB.updateItemPosition(item.left, item.top, item.right, item.bottom,
|
||||
item.page, false, null, item.id!!)
|
||||
</ID>
|
||||
<ID>MaxLineLength:HomeScreenGrid.kt$HomeScreenGrid$context.homeScreenGridItemsDB.updateItemPosition(left, top, right, bottom, page, docked, newId,
|
||||
id!!)
|
||||
</ID>
|
||||
<ID>MaxLineLength:HomeScreenGrid.kt$HomeScreenGrid$context.homeScreenGridItemsDB.updateItemPosition(left, top, right, bottom, page, docked, newParentId,
|
||||
id!!)
|
||||
</ID>
|
||||
<ID>MaxLineLength:HomeScreenGrid.kt$HomeScreenGrid$context.homeScreenGridItemsDB.updateItemPosition(left, top, right, bottom, page, docked, parentId,
|
||||
id!!)
|
||||
</ID>
|
||||
<ID>MaxLineLength:HomeScreenGrid.kt$HomeScreenGrid$draggedItem!!.drawable =
|
||||
Bitmap.createBitmap(draggedWidgetView.drawingCache).toDrawable(context.resources)
|
||||
</ID>
|
||||
<ID>MaxLineLength:HomeScreenGrid.kt$HomeScreenGrid$gridItems.filter { it.isSingleCellType() && pager.isItemOnLastPage(it) && !it.docked
|
||||
&& it.parentId == null }
|
||||
</ID>
|
||||
<ID>MaxLineLength:HomeScreenGrid.kt$HomeScreenGrid$gridItems.filter { it.parentId == item.parentId && it.left > item.left && it.id !=
|
||||
item.id }
|
||||
</ID>
|
||||
<ID>MaxLineLength:HomeScreenGrid.kt$HomeScreenGrid$gridItems.filter { it.parentId == newParentId && it.left >= newItem.left && it.id
|
||||
!= newItem.id}
|
||||
</ID>
|
||||
<ID>MaxLineLength:HomeScreenGrid.kt$HomeScreenGrid$if</ID>
|
||||
<ID>MaxLineLength:HomeScreenGrid.kt$HomeScreenGrid$private</ID>
|
||||
<ID>MaxLineLength:HomeScreenGrid.kt$HomeScreenGrid$private fun HomeScreenGridItem.isSingleCellType()</ID>
|
||||
<ID>MaxLineLength:HomeScreenGrid.kt$HomeScreenGrid$private fun HomeScreenGridItem.visibleOnCurrentPage()</ID>
|
||||
<ID>MaxLineLength:HomeScreenGrid.kt$HomeScreenGrid$private var labelSideMargin =
|
||||
context.resources.getDimension(org.fossify.commons.R.dimen.small_margin).toInt()
|
||||
</ID>
|
||||
<ID>MaxLineLength:HomeScreenGrid.kt$HomeScreenGrid$private var roundedCornerRadius =
|
||||
context.resources.getDimension(org.fossify.commons.R.dimen.activity_margin)
|
||||
</ID>
|
||||
<ID>MaxLineLength:HomeScreenGrid.kt$HomeScreenGrid$return Rect(clickableLeft, clickableTop, clickableLeft + iconSize + 2 * iconMargin, clickableTop +
|
||||
iconSize + 2 * iconMargin)
|
||||
</ID>
|
||||
<ID>MaxLineLength:HomeScreenGrid.kt$HomeScreenGrid$val appWidgetProviderInfo = item.providerInfo ?: appWidgetManager!!.installedProviders.firstOrNull {
|
||||
it.provider.className == item.className }
|
||||
</ID>
|
||||
<ID>MaxLineLength:HomeScreenGrid.kt$HomeScreenGrid$val coveredFolder = gridItems.firstOrNull { it.type == ITEM_TYPE_FOLDER && it.left ==
|
||||
coveredCell.x && it.top == coveredCell.y }
|
||||
</ID>
|
||||
<ID>MaxLineLength:HomeScreenGrid.kt$HomeScreenGrid$val currentIndicatorPosition = pageIndicatorsStart + pager.getCurrentViewPositionInFullPageSpace() *
|
||||
pageIndicatorStep
|
||||
</ID>
|
||||
<ID>MaxLineLength:HomeScreenGrid.kt$HomeScreenGrid$val drawableWidth = draggedItem!!.getWidthInCells() * cellWidth - iconMargin *
|
||||
(draggedItem!!.getWidthInCells() - 1)
|
||||
</ID>
|
||||
<ID>MaxLineLength:HomeScreenGrid.kt$HomeScreenGrid$val pageIndicatorsRequiredWidth = pageCount * pageIndicatorRadius * 2 + pageCount *
|
||||
(pageIndicatorMargin - 1)
|
||||
</ID>
|
||||
<ID>MaxLineLength:HomeScreenGrid.kt$HomeScreenGrid$val rect = Rect(left, item.y, left + draggedItem!!.getWidthInCells() - 1, item.y +
|
||||
draggedItem!!.getHeightInCells() - 1)
|
||||
</ID>
|
||||
<ID>MaxLineLength:HomeScreenGrid.kt$HomeScreenGrid$val widgetView = appWidgetHost.createView((context as MainActivity).baseContext, appWidgetId,
|
||||
appWidgetProviderInfo) as MyAppWidgetHostView
|
||||
</ID>
|
||||
<ID>MaxLineLength:HomeScreenGrid.kt$HomeScreenGrid$}</ID>
|
||||
<ID>MaxLineLength:HomeScreenGrid.kt$HomeScreenGrid.HomeScreenFolder$newDrawable?.setBounds(drawableX, drawableY, drawableX + scaledIconSize.toInt(),
|
||||
drawableY + scaledIconSize.toInt())
|
||||
</ID>
|
||||
<ID>MaxLineLength:HomeScreenGrid.kt$HomeScreenGrid.HomeScreenFolder$return RectF(folderDialogLeft, folderDialogTop, folderDialogLeft +
|
||||
folderDialogWidth, folderDialogTop + folderDialogHeight)
|
||||
</ID>
|
||||
<ID>MaxLineLength:HomeScreenGrid.kt$HomeScreenGrid.HomeScreenFolder$val circlePath = Path().apply { addCircle((iconSize / 2).toFloat(), (iconSize /
|
||||
2).toFloat(), (iconSize / 2).toFloat(), Path.Direction.CCW) }
|
||||
</ID>
|
||||
<ID>MaxLineLength:HomeScreenGrid.kt$HomeScreenGrid.HomeScreenFolder$val folderDialogHeight = rowsCount * cellSize + 3 * folderPadding +
|
||||
folderTitleTextPaint.textSize + rowsCount * yGap
|
||||
</ID>
|
||||
<ID>MaxLineLength:HomeScreenGrid.kt$HomeScreenGrid.HomeScreenGridTouchHelper$val</ID>
|
||||
<ID>MaxLineLength:HomeScreenGrid.kt$HomeScreenGrid.HomeScreenGridTouchHelper$val item = gridItems.firstOrNull { it.id?.toInt() == virtualViewId } ?:
|
||||
throw IllegalArgumentException("Unknown id")
|
||||
</ID>
|
||||
<ID>MaxLineLength:HomeScreenGridItem.kt$HomeScreenGridItem$@ColumnInfo(name = "activity_name") var activityName: String</ID>
|
||||
<ID>MaxLineLength:HomeScreenGridItem.kt$HomeScreenGridItem$@ColumnInfo(name = "docked") var docked: Boolean = false</ID>
|
||||
<ID>MaxLineLength:HomeScreenGridItem.kt$HomeScreenGridItem$@ColumnInfo(name = "icon") var icon: Bitmap? = null</ID>
|
||||
<ID>MaxLineLength:HomeScreenGridItem.kt$HomeScreenGridItem$constructor() : this(null, -1, -1, -1, -1, 0, "", "", "", ITEM_TYPE_ICON, "", -1, "", null,
|
||||
false, null, null, null, null, 1, 1)
|
||||
</ID>
|
||||
<ID>MaxLineLength:HomeScreenGridItemsDao.kt$HomeScreenGridItemsDao$@Query("DELETE FROM home_screen_grid_items WHERE parent_id IN (SELECT id FROM
|
||||
home_screen_grid_items WHERE package_name = :packageName)")
|
||||
</ID>
|
||||
<ID>MaxLineLength:HomeScreenGridItemsDao.kt$HomeScreenGridItemsDao$@Query("UPDATE home_screen_grid_items SET `left` = :left, `top` = :top, `right` =
|
||||
:right, `bottom` = :bottom, `page` = :page, `docked` = :docked , `parent_id` = :parentId WHERE id = :id")
|
||||
</ID>
|
||||
<ID>MaxLineLength:HomeScreenGridItemsDao.kt$HomeScreenGridItemsDao$@Query("UPDATE home_screen_grid_items SET `left` = `left` + :shiftBy WHERE parent_id
|
||||
== :folderId AND `left` > :shiftFrom AND id != :excludingId")
|
||||
</ID>
|
||||
<ID>MaxLineLength:HomeScreenGridItemsDao.kt$HomeScreenGridItemsDao$fun</ID>
|
||||
<ID>MaxLineLength:LaunchersAdapter.kt$LaunchersAdapter$filteredLaunchers = launchers.filter { filterQuery == null || it.title.contains(filterQuery!!,
|
||||
ignoreCase = true) }
|
||||
</ID>
|
||||
<ID>MaxLineLength:LaunchersAdapter.kt$LaunchersAdapter$val filteredPosition = filteredLaunchers.indexOfFirst { it.getLauncherIdentifier() ==
|
||||
item.getItemIdentifier() }
|
||||
</ID>
|
||||
<ID>MaxLineLength:LaunchersAdapter.kt$LaunchersAdapter.ViewHolder$allAppsListener.onAppLauncherLongPressed((location[0] + width / 2).toFloat(),
|
||||
location[1].toFloat(), launcher)
|
||||
</ID>
|
||||
<ID>MaxLineLength:LaunchersAdapter.kt$LaunchersAdapter.ViewHolder$val placeholderDrawable =
|
||||
activity.resources.getColoredDrawableWithColor(R.drawable.placeholder_drawable, launcher.thumbnailColor)
|
||||
</ID>
|
||||
<ID>MaxLineLength:MainActivity.kt$MainActivity$((Math.abs(mTouchDownX - event.x) > mMoveGestureThreshold) || (Math.abs(mTouchDownY - event.y) >
|
||||
mMoveGestureThreshold))
|
||||
</ID>
|
||||
<ID>MaxLineLength:MainActivity.kt$MainActivity$// delay showing the shortcut both to let the user see adding it in realtime and hackily avoid concurrent
|
||||
modification exception at HomeScreenGrid
|
||||
</ID>
|
||||
<ID>MaxLineLength:MainActivity.kt$MainActivity$// some devices ACTION_MOVE keeps triggering for the whole long press duration, but we are interested in
|
||||
real moves only, when coords change
|
||||
</ID>
|
||||
<ID>
|
||||
MaxLineLength:MainActivity.kt$MainActivity$Class.forName("android.app.StatusBarManager").getMethod("expandNotificationsPanel").invoke(getSystemService("statusbar"))
|
||||
</ID>
|
||||
<ID>MaxLineLength:MainActivity.kt$MainActivity$WindowCompat.getInsetsController(window, binding.root).isAppearanceLightStatusBars =
|
||||
backgroundColor.getContrastColor() == DARK_GREY
|
||||
</ID>
|
||||
<ID>MaxLineLength:MainActivity.kt$MainActivity$allApps.add(AppLauncher(null, label, packageName, activityName, 0, placeholderColor,
|
||||
drawable.toBitmap().toDrawable(resources)))
|
||||
</ID>
|
||||
<ID>MaxLineLength:MainActivity.kt$MainActivity$arrayOf(binding.allAppsFragment.root as MyFragment<*>, binding.widgetsFragment.root as MyFragment<*>)</ID>
|
||||
<ID>MaxLineLength:MainActivity.kt$MainActivity$fun</ID>
|
||||
<ID>MaxLineLength:MainActivity.kt$MainActivity$if</ID>
|
||||
<ID>MaxLineLength:MainActivity.kt$MainActivity$mOpenPopupMenu = handleGridItemPopupMenu(binding.homeScreenPopupMenuAnchor, gridItem,
|
||||
isOnAllAppsFragment, menuListener)
|
||||
</ID>
|
||||
<ID>MaxLineLength:MainActivity.kt$MainActivity$return Pair(page, Rect(wantedCell.second, wantedCell.third, wantedCell.second, wantedCell.third))</ID>
|
||||
<ID>MaxLineLength:MainActivity.kt$MainActivity$val anchorY = binding.homeScreenGrid.root.sideMargins.top + (clickedGridItem.top *
|
||||
binding.homeScreenGrid.root.cellHeight.toFloat())
|
||||
</ID>
|
||||
<ID>MaxLineLength:MainActivity.kt$MainActivity$val defaultDialerPackage = (getSystemService(Context.TELECOM_SERVICE) as
|
||||
TelecomManager).defaultDialerPackage
|
||||
</ID>
|
||||
<ID>MaxLineLength:MainActivity.kt$MainActivity$val icon = launcherApps.getShortcutBadgedIconDrawable(item.shortcutInfo!!,
|
||||
resources.displayMetrics.densityDpi)
|
||||
</ID>
|
||||
<ID>MaxLineLength:MainActivity.kt$MainActivity$val launcherApps = applicationContext.getSystemService(Context.LAUNCHER_APPS_SERVICE) as LauncherApps
|
||||
</ID>
|
||||
<ID>MaxLineLength:MainActivity.kt$MainActivity$val launcherSettings = AppLauncher(null, getString(R.string.launcher_settings), packageName, "", 0,
|
||||
placeholderColor, drawable.toBitmap().toDrawable(resources))
|
||||
</ID>
|
||||
<ID>MaxLineLength:MainActivity.kt$MainActivity$val storePackage = potentialStores.firstOrNull { isPackageInstalled(it) && appLaunchers.map {
|
||||
it.packageName }.contains(it) }
|
||||
</ID>
|
||||
<ID>MaxLineLength:MainActivity.kt$MainActivity.MyGestureListener$private</ID>
|
||||
<ID>MaxLineLength:MyAppWidgetHostView.kt$MyAppWidgetHostView$if</ID>
|
||||
<ID>MaxLineLength:MyAppWidgetHostView.kt$MyAppWidgetHostView$var onIgnoreInterceptedListener: (() -> Unit)? = null // let the home grid react on
|
||||
swallowed clicks, for example by hiding the widget resize frame
|
||||
</ID>
|
||||
<ID>MaxLineLength:MyAppWidgetResizeFrame.kt$MyAppWidgetResizeFrame$canvas.drawRect(lineDotRadius, lineDotRadius, width.toFloat() - lineDotRadius,
|
||||
height.toFloat() - lineDotRadius, resizeWidgetLinePaint)
|
||||
</ID>
|
||||
<ID>MaxLineLength:MyAppWidgetResizeFrame.kt$MyAppWidgetResizeFrame$class</ID>
|
||||
<ID>MaxLineLength:MyAppWidgetResizeFrame.kt$MyAppWidgetResizeFrame$minResizeWidthCells = Math.min(context.config.homeColumnCount,
|
||||
context.getCellCount(providerInfo.minResizeWidth))
|
||||
</ID>
|
||||
<ID>MaxLineLength:MyAppWidgetResizeFrame.kt$MyAppWidgetResizeFrame$private val MAX_TOUCH_LINE_DISTANCE = lineDotRadius * 5 // how close we have to be to
|
||||
the widgets side to drag it
|
||||
</ID>
|
||||
<ID>MaxLineLength:MyAppWidgetResizeFrame.kt$MyAppWidgetResizeFrame$val</ID>
|
||||
<ID>MaxLineLength:MyAppWidgetResizeFrame.kt$MyAppWidgetResizeFrame$val wantedBottom = roundToClosestMultiplyOfNumber(frameRect.bottom - sideMargins.top,
|
||||
cellHeight)
|
||||
</ID>
|
||||
<ID>MaxLineLength:MyAppWidgetResizeFrame.kt$MyAppWidgetResizeFrame$val wantedBottomCellY = roundToClosestMultiplyOfNumber(wantedBottom -
|
||||
sideMargins.top, cellHeight) / cellHeight - 1
|
||||
</ID>
|
||||
<ID>MaxLineLength:MyAppWidgetResizeFrame.kt$MyAppWidgetResizeFrame$val wantedLeft = roundToClosestMultiplyOfNumber(frameRect.left - sideMargins.left,
|
||||
cellWidth)
|
||||
</ID>
|
||||
<ID>MaxLineLength:MyAppWidgetResizeFrame.kt$MyAppWidgetResizeFrame$val wantedLeftCellX = roundToClosestMultiplyOfNumber(wantedLeft - sideMargins.left,
|
||||
cellWidth) / cellWidth
|
||||
</ID>
|
||||
<ID>MaxLineLength:MyAppWidgetResizeFrame.kt$MyAppWidgetResizeFrame$val wantedRight = roundToClosestMultiplyOfNumber(frameRect.right - sideMargins.left,
|
||||
cellWidth)
|
||||
</ID>
|
||||
<ID>MaxLineLength:MyAppWidgetResizeFrame.kt$MyAppWidgetResizeFrame$val wantedRightCellX = roundToClosestMultiplyOfNumber(wantedRight - sideMargins.left,
|
||||
cellWidth) / cellWidth - 1
|
||||
</ID>
|
||||
<ID>MaxLineLength:MyAppWidgetResizeFrame.kt$MyAppWidgetResizeFrame$val wantedTopCellY = roundToClosestMultiplyOfNumber(wantedTop - sideMargins.top,
|
||||
cellHeight) / cellHeight
|
||||
</ID>
|
||||
<ID>MaxLineLength:MyFragment.kt$MyFragment$abstract</ID>
|
||||
<ID>MaxLineLength:SettingsActivity.kt$SettingsActivity$binding.settingsUseEnglishHolder.beVisibleIf((config.wasUseEnglishToggled ||
|
||||
Locale.getDefault().language != "en") && !isTiramisuPlus())
|
||||
</ID>
|
||||
<ID>MaxLineLength:SettingsActivity.kt$SettingsActivity$faqItems.add(FAQItem(org.fossify.commons.R.string.faq_2_title_commons,
|
||||
org.fossify.commons.R.string.faq_2_text_commons))
|
||||
</ID>
|
||||
<ID>MaxLineLength:SettingsActivity.kt$SettingsActivity$faqItems.add(FAQItem(org.fossify.commons.R.string.faq_6_title_commons,
|
||||
org.fossify.commons.R.string.faq_6_text_commons))
|
||||
</ID>
|
||||
<ID>MaxLineLength:SettingsActivity.kt$SettingsActivity$findItem(R.id.more_apps_from_us).isVisible =
|
||||
!resources.getBoolean(org.fossify.commons.R.bool.hide_google_relations)
|
||||
</ID>
|
||||
<ID>MaxLineLength:SettingsActivity.kt$SettingsActivity$items.add(RadioItem(i, resources.getQuantityString(org.fossify.commons.R.plurals.column_counts,
|
||||
i, i)))
|
||||
</ID>
|
||||
<ID>MaxLineLength:SettingsActivity.kt$SettingsActivity$items.add(RadioItem(i, resources.getQuantityString(org.fossify.commons.R.plurals.row_counts, i,
|
||||
i)))
|
||||
</ID>
|
||||
<ID>MaxLineLength:SettingsActivity.kt$SettingsActivity$updateMaterialActivityViews(binding.settingsCoordinator, binding.settingsHolder,
|
||||
useTransparentNavigation = true, useTopSearchMenu = false)
|
||||
</ID>
|
||||
<ID>MaxLineLength:WidgetsAdapter.kt$WidgetsAdapter$marginStart = activity.resources.getDimension(org.fossify.commons.R.dimen.activity_margin).toInt()
|
||||
</ID>
|
||||
<ID>MaxLineLength:WidgetsFragment.kt$WidgetsFragment$// some devices ACTION_MOVE keeps triggering for the whole long press duration, but we are
|
||||
interested in real moves only, when coords change
|
||||
</ID>
|
||||
<ID>MaxLineLength:WidgetsFragment.kt$WidgetsFragment$AppWidget(appPackageName, appTitle, appIcon, widgetTitle, widgetPreviewImage, widthCells,
|
||||
heightCells, false, className, info, null)
|
||||
</ID>
|
||||
<ID>MaxLineLength:WidgetsFragment.kt$WidgetsFragment$appWidgets = appWidgets.sortedWith(compareBy({ it.appTitle }, { it.appPackageName }, {
|
||||
it.widgetTitle })).toMutableList() as ArrayList<AppWidget>
|
||||
</ID>
|
||||
<ID>MaxLineLength:WidgetsFragment.kt$WidgetsFragment$class</ID>
|
||||
<ID>MaxLineLength:WidgetsFragment.kt$WidgetsFragment$if</ID>
|
||||
<ID>MaxLineLength:WidgetsFragment.kt$WidgetsFragment$val widget = AppWidget(appPackageName, appTitle, appIcon, widgetTitle, widgetPreviewImage, 0, 0,
|
||||
true, "", null, info.activityInfo)
|
||||
</ID>
|
||||
<ID>MaxLineLength:WidgetsFragment.kt$WidgetsFragment$val widgetPreviewImage = packageManager.getDrawable(componentInfo.packageName, info.iconResource,
|
||||
componentInfo)
|
||||
</ID>
|
||||
<ID>NestedBlockDepth:HomeScreenGrid.kt$HomeScreenGrid$@SuppressLint("ClickableViewAccessibility") fun widgetLongPressed(item: HomeScreenGridItem)</ID>
|
||||
<ID>NestedBlockDepth:HomeScreenGrid.kt$HomeScreenGrid$fun drawInto(canvas: Canvas)</ID>
|
||||
<ID>NestedBlockDepth:HomeScreenGrid.kt$HomeScreenGrid$private fun Canvas.drawItemInCell(item: HomeScreenGridItem, cell: Rect)</ID>
|
||||
<ID>NestedBlockDepth:HomeScreenGrid.kt$HomeScreenGrid$private fun addAppIconOrShortcut()</ID>
|
||||
<ID>NestedBlockDepth:HomeScreenGrid.kt$HomeScreenGrid$private fun addWidget()</ID>
|
||||
<ID>NestedBlockDepth:HomeScreenGrid.kt$HomeScreenGrid$private fun moveItem()</ID>
|
||||
<ID>NestedBlockDepth:MainActivity.kt$MainActivity$override fun onActivityResult(requestCode: Int, resultCode: Int, resultData: Intent?)</ID>
|
||||
<ID>NestedBlockDepth:MainActivity.kt$MainActivity$override fun onTouchEvent(event: MotionEvent?): Boolean</ID>
|
||||
<ID>NestedBlockDepth:MainActivity.kt$MainActivity$private fun findFirstEmptyCell(): Pair<Int, Rect></ID>
|
||||
<ID>NestedBlockDepth:MyAppWidgetResizeFrame.kt$MyAppWidgetResizeFrame$override fun onTouchEvent(event: MotionEvent?): Boolean</ID>
|
||||
<ID>ReturnCount:AllAppsFragment.kt$AllAppsFragment$override fun onInterceptTouchEvent(event: MotionEvent?): Boolean</ID>
|
||||
<ID>ReturnCount:HomeScreenGrid.kt$HomeScreenGrid$fun isClickingGridItem(x: Int, y: Int): HomeScreenGridItem?</ID>
|
||||
<ID>ReturnCount:HomeScreenGrid.kt$HomeScreenGrid.HomeScreenFolder$fun generateDrawable(): Drawable?</ID>
|
||||
<ID>ReturnCount:HomeScreenGrid.kt$HomeScreenGrid.HomeScreenGridTouchHelper$override fun onPerformActionForVirtualView(virtualViewId: Int, action: Int,
|
||||
arguments: Bundle?): Boolean
|
||||
</ID>
|
||||
<ID>ReturnCount:MyAppWidgetHostView.kt$MyAppWidgetHostView$override fun onInterceptTouchEvent(event: MotionEvent?): Boolean</ID>
|
||||
<ID>ReturnCount:WidgetsFragment.kt$WidgetsFragment$override fun onInterceptTouchEvent(event: MotionEvent?): Boolean</ID>
|
||||
<ID>SwallowedException:Activity.kt$e: Exception</ID>
|
||||
<ID>SwallowedException:Context.kt$e: Error</ID>
|
||||
<ID>SwallowedException:Context.kt$e: Exception</ID>
|
||||
<ID>SwallowedException:MainActivity.kt$MainActivity$e: ActivityNotFoundException</ID>
|
||||
<ID>SwallowedException:MainActivity.kt$MainActivity$e: Exception</ID>
|
||||
<ID>SwallowedException:WidgetsFragment.kt$WidgetsFragment$error: Error</ID>
|
||||
<ID>TooGenericExceptionCaught:Activity.kt$e: Exception</ID>
|
||||
<ID>TooGenericExceptionCaught:Context.kt$e: Error</ID>
|
||||
<ID>TooGenericExceptionCaught:Context.kt$e: Exception</ID>
|
||||
<ID>TooGenericExceptionCaught:MainActivity.kt$MainActivity$e: Exception</ID>
|
||||
<ID>TooGenericExceptionCaught:WidgetsFragment.kt$WidgetsFragment$error: Error</ID>
|
||||
<ID>TooManyFunctions:AllAppsFragment.kt$AllAppsFragment : MyFragmentAllAppsListener</ID>
|
||||
<ID>TooManyFunctions:FolderIconsAdapter.kt$FolderIconsAdapter : MyRecyclerViewAdapter</ID>
|
||||
<ID>TooManyFunctions:HiddenIconsAdapter.kt$HiddenIconsAdapter : MyRecyclerViewAdapter</ID>
|
||||
<ID>TooManyFunctions:HomeScreenGrid.kt$AnimatedGridPager</ID>
|
||||
<ID>TooManyFunctions:HomeScreenGrid.kt$HomeScreenGrid : RelativeLayout</ID>
|
||||
<ID>TooManyFunctions:HomeScreenGridItemsDao.kt$HomeScreenGridItemsDao</ID>
|
||||
<ID>TooManyFunctions:MainActivity.kt$MainActivity : SimpleActivityFlingListener</ID>
|
||||
<ID>TooManyFunctions:SettingsActivity.kt$SettingsActivity : SimpleActivity</ID>
|
||||
<ID>UnusedParameter:HomeScreenGrid.kt$AnimatedGridPager$y: Int</ID>
|
||||
<ID>UnusedParameter:WidgetsAdapter.kt$WidgetsAdapter.ViewHolder$widgetListItem: WidgetsListItem</ID>
|
||||
<ID>UnusedPrivateMember:MyAppWidgetHostView.kt$MyAppWidgetHostView$private fun hasFingerMoved(x: Float, y: Float)</ID>
|
||||
<ID>VariableNaming:MainActivity.kt$MainActivity$val SMSMessengerIcon = HomeScreenGridItem( null, 1, config.homeRowCount - 1, 1, config.homeRowCount - 1,
|
||||
0, defaultSMSMessengerPackage, "", title, ITEM_TYPE_ICON, "", -1, "", null, true, null )
|
||||
</ID>
|
||||
<ID>VariableNaming:MyAppWidgetResizeFrame.kt$MyAppWidgetResizeFrame$private val DRAGGING_BOTTOM = 4</ID>
|
||||
<ID>VariableNaming:MyAppWidgetResizeFrame.kt$MyAppWidgetResizeFrame$private val DRAGGING_LEFT = 1</ID>
|
||||
<ID>VariableNaming:MyAppWidgetResizeFrame.kt$MyAppWidgetResizeFrame$private val DRAGGING_NONE = 0</ID>
|
||||
<ID>VariableNaming:MyAppWidgetResizeFrame.kt$MyAppWidgetResizeFrame$private val DRAGGING_RIGHT = 3</ID>
|
||||
<ID>VariableNaming:MyAppWidgetResizeFrame.kt$MyAppWidgetResizeFrame$private val DRAGGING_TOP = 2</ID>
|
||||
<ID>VariableNaming:MyAppWidgetResizeFrame.kt$MyAppWidgetResizeFrame$private val MAX_TOUCH_LINE_DISTANCE = lineDotRadius * 5 // how close we have to be
|
||||
to the widgets side to drag it
|
||||
</ID>
|
||||
<ID>WildcardImport:AllAppsFragment.kt$import org.fossify.commons.extensions.*</ID>
|
||||
<ID>WildcardImport:AppLauncher.kt$import androidx.room.*</ID>
|
||||
<ID>WildcardImport:HiddenIcon.kt$import androidx.room.*</ID>
|
||||
<ID>WildcardImport:HiddenIconsDao.kt$import androidx.room.*</ID>
|
||||
<ID>WildcardImport:HomeScreenGrid.kt$import android.graphics.*</ID>
|
||||
<ID>WildcardImport:HomeScreenGrid.kt$import org.fossify.commons.extensions.*</ID>
|
||||
<ID>WildcardImport:HomeScreenGrid.kt$import org.fossify.commons.helpers.*</ID>
|
||||
<ID>WildcardImport:HomeScreenGrid.kt$import org.fossify.home.helpers.*</ID>
|
||||
<ID>WildcardImport:HomeScreenGrid.kt$import kotlin.math.*</ID>
|
||||
<ID>WildcardImport:HomeScreenGridItem.kt$import androidx.room.*</ID>
|
||||
<ID>WildcardImport:HomeScreenGridItemsDao.kt$import androidx.room.*</ID>
|
||||
<ID>WildcardImport:MainActivity.kt$import android.view.*</ID>
|
||||
<ID>WildcardImport:MainActivity.kt$import org.fossify.commons.extensions.*</ID>
|
||||
<ID>WildcardImport:MainActivity.kt$import org.fossify.commons.helpers.*</ID>
|
||||
<ID>WildcardImport:MainActivity.kt$import org.fossify.home.extensions.*</ID>
|
||||
<ID>WildcardImport:MainActivity.kt$import org.fossify.home.helpers.*</ID>
|
||||
<ID>WildcardImport:MyAppWidgetResizeFrame.kt$import android.graphics.*</ID>
|
||||
<ID>WildcardImport:RenameItemDialog.kt$import org.fossify.commons.extensions.*</ID>
|
||||
<ID>WildcardImport:SettingsActivity.kt$import org.fossify.commons.extensions.*</ID>
|
||||
<ID>WildcardImport:WidgetsFragment.kt$import org.fossify.commons.extensions.*</ID>
|
||||
<ID>WildcardImport:WidgetsFragment.kt$import org.fossify.home.models.*</ID>
|
||||
</CurrentIssues>
|
||||
<ManuallySuppressedIssues/>
|
||||
<CurrentIssues>
|
||||
<ID>ComplexCondition:HomeScreenGrid.kt$AnimatedGridPager$currentPage < getMaxPage() && diffX > 0f || currentPage > 0 && diffX < 0f</ID>
|
||||
<ID>ComplexCondition:HomeScreenGrid.kt$HomeScreenGrid$item.page != 0 && gridItems .none { it.page == item.page && it.id != item.id && it.parentId == null }</ID>
|
||||
<ID>ComplexCondition:HomeScreenGrid.kt$HomeScreenGrid$newParentId != null && gridItems.any { it.parentId == newParentId && it.left == left } && (newParentId != oldParentId || left != oldLeft)</ID>
|
||||
<ID>ComplexCondition:HomeScreenGrid.kt$HomeScreenGrid$x >= left && x <= right && y >= top && y <= bottom</ID>
|
||||
<ID>ComplexCondition:HomeScreenGrid.kt$HomeScreenGrid$x >= rect.left && x <= rect.right && y >= rect.top && y <= rect.bottom</ID>
|
||||
<ID>CyclomaticComplexMethod:Activity.kt$fun Activity.handleGridItemPopupMenu( anchorView: View, gridItem: HomeScreenGridItem, isOnAllAppsFragment: Boolean, listener: ItemMenuListener, ): PopupMenu</ID>
|
||||
<ID>CyclomaticComplexMethod:HomeScreenGrid.kt$HomeScreenGrid$fun draggedItemMoved(x: Int, y: Int)</ID>
|
||||
<ID>CyclomaticComplexMethod:HomeScreenGrid.kt$HomeScreenGrid$fun drawInto(canvas: Canvas)</ID>
|
||||
<ID>CyclomaticComplexMethod:HomeScreenGrid.kt$HomeScreenGrid$fun isClickingGridItem(x: Int, y: Int): HomeScreenGridItem?</ID>
|
||||
<ID>CyclomaticComplexMethod:HomeScreenGrid.kt$HomeScreenGrid$private fun addAppIconOrShortcut( draggedHomeGridItem: HomeScreenGridItem?, xIndex: Int, yIndex: Int, newParentId: Long? = null, toFolderEnd: Boolean = true, )</ID>
|
||||
<ID>CyclomaticComplexMethod:HomeScreenGrid.kt$HomeScreenGrid$private fun addAppIconOrShortcut()</ID>
|
||||
<ID>CyclomaticComplexMethod:HomeScreenGrid.kt$HomeScreenGrid$private fun addWidget()</ID>
|
||||
<ID>CyclomaticComplexMethod:HomeScreenGrid.kt$HomeScreenGrid$private fun moveItem()</ID>
|
||||
<ID>CyclomaticComplexMethod:MainActivity.kt$MainActivity$override fun onTouchEvent(event: MotionEvent?): Boolean</ID>
|
||||
<ID>CyclomaticComplexMethod:MyAppWidgetResizeFrame.kt$MyAppWidgetResizeFrame$override fun onTouchEvent(event: MotionEvent?): Boolean</ID>
|
||||
<ID>EmptyCatchBlock:Context.kt${ }</ID>
|
||||
<ID>EmptyCatchBlock:WidgetsFragment.kt$WidgetsFragment${ }</ID>
|
||||
<ID>EmptyFunctionBlock:FolderIconsAdapter.kt$FolderIconsAdapter${}</ID>
|
||||
<ID>EmptyFunctionBlock:HiddenIconsAdapter.kt$HiddenIconsAdapter${}</ID>
|
||||
<ID>ForbiddenComment:AllAppsFragment.kt$AllAppsFragment$// TODO: Use WindowInsets API</ID>
|
||||
<ID>LargeClass:HomeScreenGrid.kt$HomeScreenGrid : RelativeLayout</ID>
|
||||
<ID>LargeClass:MainActivity.kt$MainActivity : SimpleActivityFlingListener</ID>
|
||||
<ID>LongMethod:HomeScreenGrid.kt$HomeScreenGrid$fun drawInto(canvas: Canvas)</ID>
|
||||
<ID>LongMethod:HomeScreenGrid.kt$HomeScreenGrid$private fun addAppIconOrShortcut( draggedHomeGridItem: HomeScreenGridItem?, xIndex: Int, yIndex: Int, newParentId: Long? = null, toFolderEnd: Boolean = true, )</ID>
|
||||
<ID>LongMethod:MainActivity.kt$MainActivity$private fun getDefaultAppPackages(appLaunchers: ArrayList<AppLauncher>)</ID>
|
||||
<ID>LongMethod:MyAppWidgetResizeFrame.kt$MyAppWidgetResizeFrame$override fun onTouchEvent(event: MotionEvent?): Boolean</ID>
|
||||
<ID>LoopWithTooManyJumpStatements:MainActivity.kt$MainActivity$for</ID>
|
||||
<ID>MagicNumber:Context.kt$30</ID>
|
||||
<ID>MagicNumber:Context.kt$70.0</ID>
|
||||
<ID>MagicNumber:Converters.kt$Converters$100</ID>
|
||||
<ID>MagicNumber:HiddenIconsAdapter.kt$HiddenIconsAdapter$0.1f</ID>
|
||||
<ID>MagicNumber:HiddenIconsAdapter.kt$HiddenIconsAdapter$150</ID>
|
||||
<ID>MagicNumber:HomeScreenGrid.kt$AnimatedGridPager$0.5f</ID>
|
||||
<ID>MagicNumber:HomeScreenGrid.kt$AnimatedGridPager$255</ID>
|
||||
<ID>MagicNumber:HomeScreenGrid.kt$AnimatedGridPager$255.0f</ID>
|
||||
<ID>MagicNumber:HomeScreenGrid.kt$HomeScreenGrid$0.9f</ID>
|
||||
<ID>MagicNumber:HomeScreenGrid.kt$HomeScreenGrid$1.2f</ID>
|
||||
<ID>MagicNumber:HomeScreenGrid.kt$HomeScreenGrid$1.5f</ID>
|
||||
<ID>MagicNumber:HomeScreenGrid.kt$HomeScreenGrid$3f</ID>
|
||||
<ID>MagicNumber:HomeScreenGrid.kt$HomeScreenGrid$5</ID>
|
||||
<ID>MagicNumber:HomeScreenGrid.kt$HomeScreenGrid.HomeScreenFolder$0.2f</ID>
|
||||
<ID>MagicNumber:HomeScreenGrid.kt$HomeScreenGrid.HomeScreenFolder$3</ID>
|
||||
<ID>MagicNumber:HomeScreenGrid.kt$HomeScreenGrid.HomeScreenFolder$4f</ID>
|
||||
<ID>MagicNumber:HomeScreenGrid.kt$HomeScreenGrid.HomeScreenFolder$5f</ID>
|
||||
<ID>MagicNumber:HomeScreenGrid.kt$HomeScreenGrid.HomeScreenFolder.<no name provided>$0.2f</ID>
|
||||
<ID>MagicNumber:HomeScreenGrid.kt$HomeScreenGrid.HomeScreenGridTouchHelper$100</ID>
|
||||
<ID>MagicNumber:LaunchersAdapter.kt$LaunchersAdapter$0.1f</ID>
|
||||
<ID>MagicNumber:MainActivity.kt$MainActivity$0.5</ID>
|
||||
<ID>MagicNumber:MainActivity.kt$MainActivity$2000</ID>
|
||||
<ID>MagicNumber:MainActivity.kt$MainActivity.MyGestureListener$500L</ID>
|
||||
<ID>MagicNumber:MyAppWidgetHostView.kt$MyAppWidgetHostView$4</ID>
|
||||
<ID>MagicNumber:MyAppWidgetResizeFrame.kt$MyAppWidgetResizeFrame$3</ID>
|
||||
<ID>MagicNumber:MyAppWidgetResizeFrame.kt$MyAppWidgetResizeFrame$4</ID>
|
||||
<ID>MagicNumber:MyAppWidgetResizeFrame.kt$MyAppWidgetResizeFrame$5</ID>
|
||||
<ID>MaxLineLength:Activity.kt$LauncherApps.ShortcutQuery.FLAG_MATCH_DYNAMIC or LauncherApps.ShortcutQuery.FLAG_MATCH_MANIFEST or LauncherApps.ShortcutQuery.FLAG_MATCH_PINNED</ID>
|
||||
<ID>MaxLineLength:AllAppsFragment.kt$AllAppsFragment$// some devices ACTION_MOVE keeps triggering for the whole long press duration, but we are interested in real moves only, when coords change</ID>
|
||||
<ID>MaxLineLength:AppLauncher.kt$AppLauncher$@ColumnInfo(name = "activity_name") var activityName: String</ID>
|
||||
<ID>MaxLineLength:AppLauncher.kt$AppLauncher$sorting and SORT_BY_TITLE != 0 -> title.normalizeString().lowercase().compareTo(other.title.normalizeString().lowercase())</ID>
|
||||
<ID>MaxLineLength:FolderIconsAdapter.kt$FolderIconsAdapter.<no name provided>$val yOffset = resources.getDimension(R.dimen.long_press_anchor_button_offset_y) * (visibleMenuItems - 1)</ID>
|
||||
<ID>MaxLineLength:HiddenIconsAdapter.kt$HiddenIconsAdapter$private fun getSelectedItems()</ID>
|
||||
<ID>MaxLineLength:HomeScreenGrid.kt$AnimatedGridPager$((pageChangeSwipedPercentage > 0f && item.page == currentPage - 1) || (pageChangeSwipedPercentage < 0f && item.page == currentPage + 1))</ID>
|
||||
<ID>MaxLineLength:HomeScreenGrid.kt$HomeScreenGrid$(context as? MainActivity)</ID>
|
||||
<ID>MaxLineLength:HomeScreenGrid.kt$HomeScreenGrid$abs(it.second - draggedItemCurrentCoords.first + sideMargins.left) + abs(it.third - draggedItemCurrentCoords.second + sideMargins.top)</ID>
|
||||
<ID>MaxLineLength:HomeScreenGrid.kt$HomeScreenGrid$abs(it.x - draggedItemCurrentCoords.first + sideMargins.left) + abs(it.y - draggedItemCurrentCoords.second + sideMargins.top)</ID>
|
||||
<ID>MaxLineLength:HomeScreenGrid.kt$HomeScreenGrid$draggedItem!!.getWidthInCells() * cellWidth - iconMargin * (draggedItem!!.getWidthInCells() - 1)</ID>
|
||||
<ID>MaxLineLength:HomeScreenGridItem.kt$HomeScreenGridItem$@ColumnInfo(name = "activity_name") var activityName: String</ID>
|
||||
<ID>MaxLineLength:HomeScreenGridItem.kt$HomeScreenGridItem$@ColumnInfo(name = "docked") var docked: Boolean = false</ID>
|
||||
<ID>MaxLineLength:HomeScreenGridItem.kt$HomeScreenGridItem$@ColumnInfo(name = "icon") var icon: Bitmap? = null</ID>
|
||||
<ID>MaxLineLength:HomeScreenGridItem.kt$HomeScreenGridItem$constructor() : this(null, -1, -1, -1, -1, 0, "", "", "", ITEM_TYPE_ICON, "", -1, "", null, false, null, null, null, null, 1, 1)</ID>
|
||||
<ID>MaxLineLength:HomeScreenGridItemsDao.kt$HomeScreenGridItemsDao$@Query("DELETE FROM home_screen_grid_items WHERE parent_id IN (SELECT id FROM home_screen_grid_items WHERE package_name = :packageName)")</ID>
|
||||
<ID>MaxLineLength:HomeScreenGridItemsDao.kt$HomeScreenGridItemsDao$@Query("UPDATE home_screen_grid_items SET `left` = :left, `top` = :top, `right` = :right, `bottom` = :bottom, `page` = :page, `docked` = :docked , `parent_id` = :parentId WHERE id = :id")</ID>
|
||||
<ID>MaxLineLength:HomeScreenGridItemsDao.kt$HomeScreenGridItemsDao$@Query("UPDATE home_screen_grid_items SET `left` = `left` + :shiftBy WHERE parent_id == :folderId AND `left` > :shiftFrom AND id != :excludingId")</ID>
|
||||
<ID>MaxLineLength:HomeScreenGridItemsDao.kt$HomeScreenGridItemsDao$fun</ID>
|
||||
<ID>MaxLineLength:MainActivity.kt$MainActivity$(abs(mTouchDownX - event.x) > mMoveGestureThreshold || abs(mTouchDownY - event.y) > mMoveGestureThreshold)</ID>
|
||||
<ID>MaxLineLength:MainActivity.kt$MainActivity$// delay showing the shortcut both to let the user see adding it in realtime and hackily avoid concurrent modification exception at HomeScreenGrid</ID>
|
||||
<ID>MaxLineLength:MainActivity.kt$MainActivity$// some devices ACTION_MOVE keeps triggering for the whole long press duration, but we are interested in real moves only, when coords change</ID>
|
||||
<ID>MaxLineLength:MainActivity.kt$MainActivity$if</ID>
|
||||
<ID>MaxLineLength:MyAppWidgetHostView.kt$MyAppWidgetHostView$if</ID>
|
||||
<ID>MaxLineLength:MyAppWidgetHostView.kt$MyAppWidgetHostView$var onIgnoreInterceptedListener: (() -> Unit)? = null // let the home grid react on swallowed clicks, for example by hiding the widget resize frame</ID>
|
||||
<ID>MaxLineLength:MyAppWidgetResizeFrame.kt$MyAppWidgetResizeFrame$canvas.drawRect(lineDotRadius, lineDotRadius, width.toFloat() - lineDotRadius, height.toFloat() - lineDotRadius, resizeWidgetLinePaint)</ID>
|
||||
<ID>MaxLineLength:MyAppWidgetResizeFrame.kt$MyAppWidgetResizeFrame$class</ID>
|
||||
<ID>MaxLineLength:MyAppWidgetResizeFrame.kt$MyAppWidgetResizeFrame$minResizeWidthCells = Math.min(context.config.homeColumnCount, context.getCellCount(providerInfo.minResizeWidth))</ID>
|
||||
<ID>MaxLineLength:MyAppWidgetResizeFrame.kt$MyAppWidgetResizeFrame$private val MAX_TOUCH_LINE_DISTANCE = lineDotRadius * 5 // how close we have to be to the widgets side to drag it</ID>
|
||||
<ID>MaxLineLength:MyAppWidgetResizeFrame.kt$MyAppWidgetResizeFrame$val</ID>
|
||||
<ID>MaxLineLength:MyAppWidgetResizeFrame.kt$MyAppWidgetResizeFrame$val wantedBottom = roundToClosestMultiplyOfNumber(frameRect.bottom - sideMargins.top, cellHeight)</ID>
|
||||
<ID>MaxLineLength:MyAppWidgetResizeFrame.kt$MyAppWidgetResizeFrame$val wantedBottomCellY = roundToClosestMultiplyOfNumber(wantedBottom - sideMargins.top, cellHeight) / cellHeight - 1</ID>
|
||||
<ID>MaxLineLength:MyAppWidgetResizeFrame.kt$MyAppWidgetResizeFrame$val wantedLeft = roundToClosestMultiplyOfNumber(frameRect.left - sideMargins.left, cellWidth)</ID>
|
||||
<ID>MaxLineLength:MyAppWidgetResizeFrame.kt$MyAppWidgetResizeFrame$val wantedLeftCellX = roundToClosestMultiplyOfNumber(wantedLeft - sideMargins.left, cellWidth) / cellWidth</ID>
|
||||
<ID>MaxLineLength:MyAppWidgetResizeFrame.kt$MyAppWidgetResizeFrame$val wantedRight = roundToClosestMultiplyOfNumber(frameRect.right - sideMargins.left, cellWidth)</ID>
|
||||
<ID>MaxLineLength:MyAppWidgetResizeFrame.kt$MyAppWidgetResizeFrame$val wantedRightCellX = roundToClosestMultiplyOfNumber(wantedRight - sideMargins.left, cellWidth) / cellWidth - 1</ID>
|
||||
<ID>MaxLineLength:MyAppWidgetResizeFrame.kt$MyAppWidgetResizeFrame$val wantedTopCellY = roundToClosestMultiplyOfNumber(wantedTop - sideMargins.top, cellHeight) / cellHeight</ID>
|
||||
<ID>MaxLineLength:WidgetsFragment.kt$WidgetsFragment$// some devices ACTION_MOVE keeps triggering for the whole long press duration, but we are interested in real moves only, when coords change</ID>
|
||||
<ID>MaxLineLength:WidgetsFragment.kt$WidgetsFragment$if</ID>
|
||||
<ID>NestedBlockDepth:AllAppsFragment.kt$AllAppsFragment$override fun onInterceptTouchEvent(event: MotionEvent?): Boolean</ID>
|
||||
<ID>NestedBlockDepth:HomeScreenGrid.kt$HomeScreenGrid$@SuppressLint("ClickableViewAccessibility") fun widgetLongPressed(item: HomeScreenGridItem)</ID>
|
||||
<ID>NestedBlockDepth:HomeScreenGrid.kt$HomeScreenGrid$fun drawInto(canvas: Canvas)</ID>
|
||||
<ID>NestedBlockDepth:HomeScreenGrid.kt$HomeScreenGrid$private fun Canvas.drawItemInCell(item: HomeScreenGridItem, cell: Rect)</ID>
|
||||
<ID>NestedBlockDepth:HomeScreenGrid.kt$HomeScreenGrid$private fun addAppIconOrShortcut()</ID>
|
||||
<ID>NestedBlockDepth:HomeScreenGrid.kt$HomeScreenGrid$private fun addWidget()</ID>
|
||||
<ID>NestedBlockDepth:HomeScreenGrid.kt$HomeScreenGrid$private fun moveItem()</ID>
|
||||
<ID>NestedBlockDepth:MainActivity.kt$MainActivity$override fun onActivityResult(requestCode: Int, resultCode: Int, resultData: Intent?)</ID>
|
||||
<ID>NestedBlockDepth:MainActivity.kt$MainActivity$override fun onTouchEvent(event: MotionEvent?): Boolean</ID>
|
||||
<ID>NestedBlockDepth:MainActivity.kt$MainActivity$private fun findFirstEmptyCell(): Pair<Int, Rect></ID>
|
||||
<ID>NestedBlockDepth:MyAppWidgetResizeFrame.kt$MyAppWidgetResizeFrame$override fun onTouchEvent(event: MotionEvent?): Boolean</ID>
|
||||
<ID>NewLineAtEndOfFile:IconCache.kt$org.fossify.home.helpers.IconCache.kt</ID>
|
||||
<ID>NewLineAtEndOfFile:View.kt$org.fossify.home.extensions.View.kt</ID>
|
||||
<ID>ReturnCount:AllAppsFragment.kt$AllAppsFragment$override fun onInterceptTouchEvent(event: MotionEvent?): Boolean</ID>
|
||||
<ID>ReturnCount:HomeScreenGrid.kt$HomeScreenGrid$fun isClickingGridItem(x: Int, y: Int): HomeScreenGridItem?</ID>
|
||||
<ID>ReturnCount:HomeScreenGrid.kt$HomeScreenGrid.HomeScreenFolder$fun generateDrawable(): Drawable?</ID>
|
||||
<ID>ReturnCount:HomeScreenGrid.kt$HomeScreenGrid.HomeScreenFolder$fun getDrawingRect(): RectF</ID>
|
||||
<ID>ReturnCount:HomeScreenGrid.kt$HomeScreenGrid.HomeScreenGridTouchHelper$override fun onPerformActionForVirtualView( virtualViewId: Int, action: Int, arguments: Bundle?, ): Boolean</ID>
|
||||
<ID>ReturnCount:MyAppWidgetHostView.kt$MyAppWidgetHostView$override fun onInterceptTouchEvent(event: MotionEvent?): Boolean</ID>
|
||||
<ID>ReturnCount:WidgetsFragment.kt$WidgetsFragment$override fun onInterceptTouchEvent(event: MotionEvent?): Boolean</ID>
|
||||
<ID>SwallowedException:Activity.kt$e: Exception</ID>
|
||||
<ID>SwallowedException:Context.kt$e: Error</ID>
|
||||
<ID>SwallowedException:Context.kt$e: Exception</ID>
|
||||
<ID>SwallowedException:WidgetsFragment.kt$WidgetsFragment$error: Error</ID>
|
||||
<ID>TooGenericExceptionCaught:Activity.kt$e: Exception</ID>
|
||||
<ID>TooGenericExceptionCaught:Context.kt$e: Error</ID>
|
||||
<ID>TooGenericExceptionCaught:Context.kt$e: Exception</ID>
|
||||
<ID>TooGenericExceptionCaught:MainActivity.kt$MainActivity$e: Exception</ID>
|
||||
<ID>TooGenericExceptionCaught:WidgetsFragment.kt$WidgetsFragment$error: Error</ID>
|
||||
<ID>TooManyFunctions:AllAppsFragment.kt$AllAppsFragment : MyFragmentAllAppsListener</ID>
|
||||
<ID>TooManyFunctions:FolderIconsAdapter.kt$FolderIconsAdapter : MyRecyclerViewAdapter</ID>
|
||||
<ID>TooManyFunctions:HiddenIconsAdapter.kt$HiddenIconsAdapter : MyRecyclerViewAdapter</ID>
|
||||
<ID>TooManyFunctions:HomeScreenGrid.kt$AnimatedGridPager</ID>
|
||||
<ID>TooManyFunctions:HomeScreenGrid.kt$HomeScreenGrid : RelativeLayout</ID>
|
||||
<ID>TooManyFunctions:HomeScreenGridItemsDao.kt$HomeScreenGridItemsDao</ID>
|
||||
<ID>TooManyFunctions:MainActivity.kt$MainActivity : SimpleActivityFlingListener</ID>
|
||||
<ID>TooManyFunctions:SettingsActivity.kt$SettingsActivity : SimpleActivity</ID>
|
||||
<ID>UnusedParameter:HomeScreenGrid.kt$AnimatedGridPager$y: Int</ID>
|
||||
<ID>UnusedParameter:WidgetsAdapter.kt$WidgetsAdapter.ViewHolder$widgetListItem: WidgetsListItem</ID>
|
||||
<ID>UnusedPrivateMember:MyAppWidgetHostView.kt$MyAppWidgetHostView$private fun hasFingerMoved(x: Float, y: Float)</ID>
|
||||
<ID>VariableNaming:MyAppWidgetResizeFrame.kt$MyAppWidgetResizeFrame$private val DRAGGING_BOTTOM = 4</ID>
|
||||
<ID>VariableNaming:MyAppWidgetResizeFrame.kt$MyAppWidgetResizeFrame$private val DRAGGING_LEFT = 1</ID>
|
||||
<ID>VariableNaming:MyAppWidgetResizeFrame.kt$MyAppWidgetResizeFrame$private val DRAGGING_NONE = 0</ID>
|
||||
<ID>VariableNaming:MyAppWidgetResizeFrame.kt$MyAppWidgetResizeFrame$private val DRAGGING_RIGHT = 3</ID>
|
||||
<ID>VariableNaming:MyAppWidgetResizeFrame.kt$MyAppWidgetResizeFrame$private val DRAGGING_TOP = 2</ID>
|
||||
<ID>VariableNaming:MyAppWidgetResizeFrame.kt$MyAppWidgetResizeFrame$private val MAX_TOUCH_LINE_DISTANCE = lineDotRadius * 5 // how close we have to be to the widgets side to drag it</ID>
|
||||
<ID>WildcardImport:AppLauncher.kt$import androidx.room.*</ID>
|
||||
<ID>WildcardImport:HiddenIcon.kt$import androidx.room.*</ID>
|
||||
<ID>WildcardImport:HiddenIconsDao.kt$import androidx.room.*</ID>
|
||||
<ID>WildcardImport:HomeScreenGridItem.kt$import androidx.room.*</ID>
|
||||
<ID>WildcardImport:HomeScreenGridItemsDao.kt$import androidx.room.*</ID>
|
||||
<ID>WildcardImport:MyAppWidgetResizeFrame.kt$import android.graphics.*</ID>
|
||||
<ID>WildcardImport:RenameItemDialog.kt$import org.fossify.commons.extensions.*</ID>
|
||||
</CurrentIssues>
|
||||
</SmellBaseline>
|
||||
|
||||
@@ -1,269 +1,689 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<issues format="6" by="lint 8.1.1" type="baseline" client="gradle" dependencies="false" name="AGP (8.1.1)" variant="all" version="8.1.1">
|
||||
<issues format="6" by="lint 8.10.1" type="baseline" client="gradle" dependencies="false" name="AGP (8.10.1)" variant="all" version="8.10.1">
|
||||
|
||||
<issue id="NewApi" message="`android:enforceNavigationBarContrast` requires API level 29 (current min is 26)"
|
||||
<issue
|
||||
id="NewApi"
|
||||
message="`android:enforceNavigationBarContrast` requires API level 29 (current min is 26)"
|
||||
errorLine1=" <item name="android:enforceNavigationBarContrast">false</item>"
|
||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
|
||||
<location file="src/main/res/values/styles.xml" line="12" column="15" />
|
||||
<location
|
||||
file="src/main/res/values/styles.xml"
|
||||
line="12"
|
||||
column="15"/>
|
||||
</issue>
|
||||
|
||||
<issue id="NewApi" message="`android:enforceStatusBarContrast` requires API level 29 (current min is 26)"
|
||||
<issue
|
||||
id="NewApi"
|
||||
message="`android:enforceStatusBarContrast` requires API level 29 (current min is 26)"
|
||||
errorLine1=" <item name="android:enforceStatusBarContrast">false</item>"
|
||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
|
||||
<location file="src/main/res/values/styles.xml" line="13" column="15" />
|
||||
<location
|
||||
file="src/main/res/values/styles.xml"
|
||||
line="13"
|
||||
column="15"/>
|
||||
</issue>
|
||||
|
||||
<issue id="NewApi" message="`android:windowLayoutInDisplayCutoutMode` requires API level 27 (current min is 26)"
|
||||
<issue
|
||||
id="NewApi"
|
||||
message="`android:windowLayoutInDisplayCutoutMode` requires API level 27 (current min is 26)"
|
||||
errorLine1=" <item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>"
|
||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
|
||||
<location file="src/main/res/values/styles.xml" line="14" column="15" />
|
||||
<location
|
||||
file="src/main/res/values/styles.xml"
|
||||
line="14"
|
||||
column="15"/>
|
||||
</issue>
|
||||
|
||||
<issue id="NotificationPermission"
|
||||
<issue
|
||||
id="NotificationPermission"
|
||||
message="When targeting Android 13 or higher, posting a permission requires holding the `POST_NOTIFICATIONS` permission (usage from org.fossify.commons.asynctasks.CopyMoveTask)">
|
||||
<location file="src/main/AndroidManifest.xml" />
|
||||
<location
|
||||
file="src/main/AndroidManifest.xml"/>
|
||||
</issue>
|
||||
|
||||
<issue id="UnusedAttribute" message="Attribute `localeConfig` is only used in API level 33 and higher (current min is 26)"
|
||||
errorLine1=" android:localeConfig="@xml/locale_config"" errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
|
||||
<location file="src/main/AndroidManifest.xml" line="30" column="9" />
|
||||
<issue
|
||||
id="OldTargetApi"
|
||||
message="Not targeting the latest versions of Android; compatibility modes apply. Consider testing and updating this version. Consult the `android.os.Build.VERSION_CODES` javadoc for details."
|
||||
errorLine1="app-build-targetSDK = "34""
|
||||
errorLine2=" ~~~~">
|
||||
<location
|
||||
file="$HOME/Projects/Fossify/FossifyOrg/Launcher/gradle/libs.versions.toml"
|
||||
line="17"
|
||||
column="23"/>
|
||||
</issue>
|
||||
|
||||
<issue id="CustomSplashScreen" message="The application should not provide its own launch screen" errorLine1="class SplashActivity : BaseSplashActivity() {"
|
||||
<issue
|
||||
id="CustomSplashScreen"
|
||||
message="The application should not provide its own launch screen"
|
||||
errorLine1="class SplashActivity : BaseSplashActivity() {"
|
||||
errorLine2=" ~~~~~~~~~~~~~~">
|
||||
<location file="src/main/kotlin/org.fossify.home/activities/SplashActivity.kt" line="6" column="7" />
|
||||
<location
|
||||
file="src/main/kotlin/org/fossify/home/activities/SplashActivity.kt"
|
||||
line="6"
|
||||
column="7"/>
|
||||
</issue>
|
||||
|
||||
<issue id="LockedOrientationActivity"
|
||||
<issue
|
||||
id="AndroidGradlePluginVersion"
|
||||
message="A newer version of Gradle than 8.11.1 is available: 8.14.2"
|
||||
errorLine1="distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-bin.zip"
|
||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
|
||||
<location
|
||||
file="$HOME/Projects/Fossify/FossifyOrg/Launcher/gradle/wrapper/gradle-wrapper.properties"
|
||||
line="3"
|
||||
column="17"/>
|
||||
</issue>
|
||||
|
||||
<issue
|
||||
id="AndroidGradlePluginVersion"
|
||||
message="A newer version of com.android.application than 8.10.1 is available: 8.11.0"
|
||||
errorLine1="gradlePlugins-agp = "8.10.1""
|
||||
errorLine2=" ~~~~~~~~">
|
||||
<location
|
||||
file="$HOME/Projects/Fossify/FossifyOrg/Launcher/gradle/libs.versions.toml"
|
||||
line="14"
|
||||
column="21"/>
|
||||
</issue>
|
||||
|
||||
<issue
|
||||
id="GradleDependency"
|
||||
message="A newer version of `compileSdkVersion` than 34 is available: 35"
|
||||
errorLine1="app-build-compileSDKVersion = "34""
|
||||
errorLine2=" ~~~~">
|
||||
<location
|
||||
file="$HOME/Projects/Fossify/FossifyOrg/Launcher/gradle/libs.versions.toml"
|
||||
line="16"
|
||||
column="31"/>
|
||||
</issue>
|
||||
|
||||
<issue
|
||||
id="LockedOrientationActivity"
|
||||
message="Expecting `android:screenOrientation="unspecified"` or `"fullSensor"` for this activity so the user can use the application in any orientation and provide a great experience on Chrome OS devices"
|
||||
errorLine1=" android:screenOrientation="portrait"" errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
|
||||
<location file="src/main/AndroidManifest.xml" line="47" column="13" />
|
||||
errorLine1=" android:screenOrientation="portrait""
|
||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
|
||||
<location
|
||||
file="src/main/AndroidManifest.xml"
|
||||
line="47"
|
||||
column="13"/>
|
||||
</issue>
|
||||
|
||||
<issue id="MissingTranslation"
|
||||
message=""app_launcher_name" is not translated in "hi" (Hindi), "fil" (Filipino; Pilipino), "lt" (Lithuanian), "lv" (Latvian), "mk" (Macedonian), "ms" (Malay), "en" (English), "eo" (Esperanto), "is" (Icelandic), "my" (Burmese), "eu" (Basque), "ar" (Arabic), "ne" (Nepali), "az" (Azerbaijani), "fa" (Persian), "nl" (Dutch), "nn" (Norwegian Nynorsk), "be" (Belarusian), "bn" (Bangla), "br" (Breton), "si" (Sinhala), "ltg", "kn" (Kannada), "or" (Odia), "ko" (Korean), "kr" (Kanuri), "sat" (Santali), "ta" (Tamil), "cr" (Cree), "te" (Telugu), "th" (Thai), "cy" (Welsh), "ckb", "da" (Danish)"
|
||||
errorLine1=" <string name="app_launcher_name">Launcher_debug</string>" errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
|
||||
<location file="src/debug/res/values/strings.xml" line="3" column="13" />
|
||||
<issue
|
||||
id="DiscouragedApi"
|
||||
message="Should not restrict activity to fixed orientation. This may not be suitable for different form factors, causing the app to be letterboxed."
|
||||
errorLine1=" android:screenOrientation="portrait""
|
||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
|
||||
<location
|
||||
file="src/main/AndroidManifest.xml"
|
||||
line="47"
|
||||
column="13"/>
|
||||
</issue>
|
||||
|
||||
<issue id="MissingTranslation"
|
||||
message=""app_name" is not translated in "hi" (Hindi), "fil" (Filipino; Pilipino), "lt" (Lithuanian), "lv" (Latvian), "ia" (Interlingua), "mk" (Macedonian), "in" (Indonesian), "ms" (Malay), "en" (English), "eo" (Esperanto), "is" (Icelandic), "my" (Burmese), "eu" (Basque), "ar" (Arabic), "nb" (Norwegian Bokmål), "ne" (Nepali), "az" (Azerbaijani), "fa" (Persian), "nn" (Norwegian Nynorsk), "be" (Belarusian), "bn" (Bangla), "br" (Breton), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ca" (Catalan), "ltg", "kn" (Kannada), "or" (Odia), "ko" (Korean), "kr" (Kanuri), "sat" (Santali), "ta" (Tamil), "cr" (Cree), "te" (Telugu), "th" (Thai), "cy" (Welsh), "ckb", "da" (Danish)"
|
||||
errorLine1=" <string name="app_name">Simple Launcher</string>" errorLine2=" ~~~~~~~~~~~~~~~">
|
||||
<location file="src/main/res/values/strings.xml" line="3" column="13" />
|
||||
<issue
|
||||
id="UseRequiresApi"
|
||||
message="Use `@RequiresApi(Build.VERSION_CODES.Q) instead of `@TargetApi` to propagate the requirement to callers of `getRoleManager`"
|
||||
errorLine1="@get:TargetApi(Build.VERSION_CODES.Q)"
|
||||
errorLine2="~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
|
||||
<location
|
||||
file="src/main/kotlin/org/fossify/home/extensions/Context.kt"
|
||||
line="34"
|
||||
column="1"/>
|
||||
</issue>
|
||||
|
||||
<issue id="MissingTranslation"
|
||||
message=""app_launcher_name" is not translated in "hi" (Hindi), "fil" (Filipino; Pilipino), "lt" (Lithuanian), "lv" (Latvian), "mk" (Macedonian), "ms" (Malay), "en" (English), "eo" (Esperanto), "is" (Icelandic), "my" (Burmese), "eu" (Basque), "ar" (Arabic), "ne" (Nepali), "az" (Azerbaijani), "fa" (Persian), "nl" (Dutch), "nn" (Norwegian Nynorsk), "be" (Belarusian), "bn" (Bangla), "br" (Breton), "si" (Sinhala), "ltg", "kn" (Kannada), "or" (Odia), "ko" (Korean), "kr" (Kanuri), "sat" (Santali), "ta" (Tamil), "cr" (Cree), "te" (Telugu), "th" (Thai), "cy" (Welsh), "ckb", "da" (Danish)"
|
||||
errorLine1=" <string name="app_launcher_name">Launcher</string>" errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
|
||||
<location file="src/main/res/values/strings.xml" line="4" column="13" />
|
||||
<issue
|
||||
id="UseRequiresApi"
|
||||
message="Use `@RequiresApi(Build.VERSION_CODES.Q) instead of `@TargetApi` to propagate the requirement to callers of `isDefaultLauncher`"
|
||||
errorLine1="@TargetApi(Build.VERSION_CODES.Q)"
|
||||
errorLine2="~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
|
||||
<location
|
||||
file="src/main/kotlin/org/fossify/home/extensions/Context.kt"
|
||||
line="79"
|
||||
column="1"/>
|
||||
</issue>
|
||||
|
||||
<issue id="MissingTranslation"
|
||||
message=""launcher_settings" is not translated in "hi" (Hindi), "fil" (Filipino; Pilipino), "lt" (Lithuanian), "lv" (Latvian), "mk" (Macedonian), "ms" (Malay), "en" (English), "eo" (Esperanto), "is" (Icelandic), "my" (Burmese), "eu" (Basque), "ne" (Nepali), "az" (Azerbaijani), "fa" (Persian), "nn" (Norwegian Nynorsk), "be" (Belarusian), "bn" (Bangla), "br" (Breton), "si" (Sinhala), "ltg", "kn" (Kannada), "or" (Odia), "ko" (Korean), "kr" (Kanuri), "sat" (Santali), "ta" (Tamil), "cr" (Cree), "te" (Telugu), "th" (Thai), "cy" (Welsh), "da" (Danish)"
|
||||
errorLine1=" <string name="launcher_settings">Launcher Settings</string>" errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
|
||||
<location file="src/main/res/values/strings.xml" line="5" column="13" />
|
||||
<issue
|
||||
id="MissingTranslation"
|
||||
message=""app_launcher_name" is not translated in "fil" (Filipino; Pilipino), "lt" (Lithuanian), "lv" (Latvian), "ms" (Malay), "en" (English), "is" (Icelandic), "my" (Burmese), "ar" (Arabic), "ne" (Nepali), "az" (Azerbaijani), "fa" (Persian), "nn" (Norwegian Nynorsk), "be" (Belarusian), "bn" (Bangla), "br" (Breton), "si" (Sinhala), "ltg", "kn" (Kannada), "or" (Odia), "ko" (Korean), "kr" (Kanuri), "sat" (Santali), "ta" (Tamil), "cr" (Cree), "te" (Telugu), "th" (Thai), "cy" (Welsh), "ckb""
|
||||
errorLine1=" <string name="app_launcher_name">Launcher_debug</string>"
|
||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
|
||||
<location
|
||||
file="src/debug/res/values/strings.xml"
|
||||
line="3"
|
||||
column="13"/>
|
||||
</issue>
|
||||
|
||||
<issue id="MissingTranslation"
|
||||
message=""app_info" is not translated in "hi" (Hindi), "fil" (Filipino; Pilipino), "lt" (Lithuanian), "lv" (Latvian), "mk" (Macedonian), "ms" (Malay), "en" (English), "eo" (Esperanto), "is" (Icelandic), "my" (Burmese), "eu" (Basque), "ne" (Nepali), "az" (Azerbaijani), "fa" (Persian), "nn" (Norwegian Nynorsk), "be" (Belarusian), "bn" (Bangla), "br" (Breton), "si" (Sinhala), "ltg", "kn" (Kannada), "or" (Odia), "ko" (Korean), "kr" (Kanuri), "sat" (Santali), "ta" (Tamil), "cr" (Cree), "te" (Telugu), "th" (Thai), "cy" (Welsh), "da" (Danish)"
|
||||
errorLine1=" <string name="app_info">App info</string>" errorLine2=" ~~~~~~~~~~~~~~~">
|
||||
<location file="src/main/res/values/strings.xml" line="6" column="13" />
|
||||
<issue
|
||||
id="MissingTranslation"
|
||||
message=""app_launcher_name" is not translated in "fil" (Filipino; Pilipino), "lt" (Lithuanian), "lv" (Latvian), "ms" (Malay), "en" (English), "is" (Icelandic), "my" (Burmese), "ar" (Arabic), "ne" (Nepali), "az" (Azerbaijani), "fa" (Persian), "nn" (Norwegian Nynorsk), "be" (Belarusian), "bn" (Bangla), "br" (Breton), "si" (Sinhala), "ltg", "kn" (Kannada), "or" (Odia), "ko" (Korean), "kr" (Kanuri), "sat" (Santali), "ta" (Tamil), "cr" (Cree), "te" (Telugu), "th" (Thai), "cy" (Welsh), "ckb""
|
||||
errorLine1=" <string name="app_launcher_name">Launcher</string>"
|
||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
|
||||
<location
|
||||
file="src/main/res/values/strings.xml"
|
||||
line="3"
|
||||
column="13"/>
|
||||
</issue>
|
||||
|
||||
<issue id="MissingTranslation"
|
||||
message=""touch_hold_widget" is not translated in "hi" (Hindi), "fil" (Filipino; Pilipino), "lt" (Lithuanian), "lv" (Latvian), "ia" (Interlingua), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "eo" (Esperanto), "is" (Icelandic), "my" (Burmese), "eu" (Basque), "ne" (Nepali), "az" (Azerbaijani), "fa" (Persian), "nn" (Norwegian Nynorsk), "be" (Belarusian), "bn" (Bangla), "br" (Breton), "si" (Sinhala), "ltg", "kn" (Kannada), "or" (Odia), "ko" (Korean), "kr" (Kanuri), "sat" (Santali), "ta" (Tamil), "cr" (Cree), "te" (Telugu), "th" (Thai), "cy" (Welsh), "da" (Danish)"
|
||||
<issue
|
||||
id="MissingTranslation"
|
||||
message=""launcher_settings" is not translated in "fil" (Filipino; Pilipino), "lt" (Lithuanian), "lv" (Latvian), "mk" (Macedonian), "ms" (Malay), "en" (English), "is" (Icelandic), "my" (Burmese), "ne" (Nepali), "az" (Azerbaijani), "fa" (Persian), "nn" (Norwegian Nynorsk), "be" (Belarusian), "bn" (Bangla), "br" (Breton), "si" (Sinhala), "ltg", "kn" (Kannada), "or" (Odia), "ko" (Korean), "kr" (Kanuri), "sat" (Santali), "ta" (Tamil), "cr" (Cree), "te" (Telugu), "th" (Thai), "cy" (Welsh)"
|
||||
errorLine1=" <string name="launcher_settings">Launcher Settings</string>"
|
||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
|
||||
<location
|
||||
file="src/main/res/values/strings.xml"
|
||||
line="4"
|
||||
column="13"/>
|
||||
</issue>
|
||||
|
||||
<issue
|
||||
id="MissingTranslation"
|
||||
message=""app_info" is not translated in "fil" (Filipino; Pilipino), "lt" (Lithuanian), "lv" (Latvian), "mk" (Macedonian), "ms" (Malay), "en" (English), "is" (Icelandic), "my" (Burmese), "ne" (Nepali), "az" (Azerbaijani), "fa" (Persian), "nn" (Norwegian Nynorsk), "be" (Belarusian), "bn" (Bangla), "br" (Breton), "si" (Sinhala), "ltg", "kn" (Kannada), "or" (Odia), "ko" (Korean), "kr" (Kanuri), "sat" (Santali), "ta" (Tamil), "cr" (Cree), "te" (Telugu), "th" (Thai), "cy" (Welsh), "da" (Danish)"
|
||||
errorLine1=" <string name="app_info">App info</string>"
|
||||
errorLine2=" ~~~~~~~~~~~~~~~">
|
||||
<location
|
||||
file="src/main/res/values/strings.xml"
|
||||
line="5"
|
||||
column="13"/>
|
||||
</issue>
|
||||
|
||||
<issue
|
||||
id="MissingTranslation"
|
||||
message=""touch_hold_widget" is not translated in "fil" (Filipino; Pilipino), "lt" (Lithuanian), "lv" (Latvian), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "is" (Icelandic), "my" (Burmese), "ne" (Nepali), "az" (Azerbaijani), "fa" (Persian), "nn" (Norwegian Nynorsk), "be" (Belarusian), "bn" (Bangla), "br" (Breton), "si" (Sinhala), "ltg", "kn" (Kannada), "or" (Odia), "ko" (Korean), "kr" (Kanuri), "sat" (Santali), "ta" (Tamil), "cr" (Cree), "te" (Telugu), "th" (Thai), "cy" (Welsh), "da" (Danish)"
|
||||
errorLine1=" <string name="touch_hold_widget">Long press the widget and drag it on your home screen</string>"
|
||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
|
||||
<location file="src/main/res/values/strings.xml" line="7" column="13" />
|
||||
<location
|
||||
file="src/main/res/values/strings.xml"
|
||||
line="6"
|
||||
column="13"/>
|
||||
</issue>
|
||||
|
||||
<issue id="MissingTranslation"
|
||||
message=""uninstall" is not translated in "hi" (Hindi), "fil" (Filipino; Pilipino), "lt" (Lithuanian), "lv" (Latvian), "mk" (Macedonian), "ms" (Malay), "en" (English), "eo" (Esperanto), "is" (Icelandic), "my" (Burmese), "eu" (Basque), "ne" (Nepali), "az" (Azerbaijani), "fa" (Persian), "nn" (Norwegian Nynorsk), "be" (Belarusian), "bn" (Bangla), "br" (Breton), "si" (Sinhala), "ltg", "kn" (Kannada), "or" (Odia), "ko" (Korean), "kr" (Kanuri), "sat" (Santali), "ta" (Tamil), "cr" (Cree), "te" (Telugu), "th" (Thai), "cy" (Welsh), "da" (Danish)"
|
||||
errorLine1=" <string name="uninstall">Uninstall</string>" errorLine2=" ~~~~~~~~~~~~~~~~">
|
||||
<location file="src/main/res/values/strings.xml" line="8" column="13" />
|
||||
<issue
|
||||
id="MissingTranslation"
|
||||
message=""uninstall" is not translated in "fil" (Filipino; Pilipino), "lt" (Lithuanian), "lv" (Latvian), "mk" (Macedonian), "ms" (Malay), "en" (English), "is" (Icelandic), "my" (Burmese), "ne" (Nepali), "az" (Azerbaijani), "fa" (Persian), "nn" (Norwegian Nynorsk), "be" (Belarusian), "bn" (Bangla), "br" (Breton), "si" (Sinhala), "ltg", "kn" (Kannada), "or" (Odia), "ko" (Korean), "kr" (Kanuri), "sat" (Santali), "ta" (Tamil), "cr" (Cree), "te" (Telugu), "th" (Thai), "cy" (Welsh), "da" (Danish)"
|
||||
errorLine1=" <string name="uninstall">Uninstall</string>"
|
||||
errorLine2=" ~~~~~~~~~~~~~~~~">
|
||||
<location
|
||||
file="src/main/res/values/strings.xml"
|
||||
line="7"
|
||||
column="13"/>
|
||||
</issue>
|
||||
|
||||
<issue id="MissingTranslation"
|
||||
message=""hide_icon" is not translated in "hi" (Hindi), "fil" (Filipino; Pilipino), "lt" (Lithuanian), "lv" (Latvian), "mk" (Macedonian), "ms" (Malay), "en" (English), "eo" (Esperanto), "is" (Icelandic), "my" (Burmese), "eu" (Basque), "ne" (Nepali), "az" (Azerbaijani), "fa" (Persian), "nn" (Norwegian Nynorsk), "be" (Belarusian), "bn" (Bangla), "br" (Breton), "si" (Sinhala), "ltg", "kn" (Kannada), "or" (Odia), "ko" (Korean), "kr" (Kanuri), "sat" (Santali), "ta" (Tamil), "cr" (Cree), "te" (Telugu), "th" (Thai), "cy" (Welsh), "da" (Danish)"
|
||||
errorLine1=" <string name="hide_icon">Hide icon</string>" errorLine2=" ~~~~~~~~~~~~~~~~">
|
||||
<location file="src/main/res/values/strings.xml" line="9" column="13" />
|
||||
<issue
|
||||
id="MissingTranslation"
|
||||
message=""hide_icon" is not translated in "fil" (Filipino; Pilipino), "lt" (Lithuanian), "lv" (Latvian), "mk" (Macedonian), "ms" (Malay), "en" (English), "is" (Icelandic), "my" (Burmese), "ne" (Nepali), "az" (Azerbaijani), "fa" (Persian), "nn" (Norwegian Nynorsk), "be" (Belarusian), "bn" (Bangla), "br" (Breton), "si" (Sinhala), "ltg", "kn" (Kannada), "or" (Odia), "ko" (Korean), "kr" (Kanuri), "sat" (Santali), "ta" (Tamil), "cr" (Cree), "te" (Telugu), "th" (Thai), "cy" (Welsh), "da" (Danish)"
|
||||
errorLine1=" <string name="hide_icon">Hide icon</string>"
|
||||
errorLine2=" ~~~~~~~~~~~~~~~~">
|
||||
<location
|
||||
file="src/main/res/values/strings.xml"
|
||||
line="8"
|
||||
column="13"/>
|
||||
</issue>
|
||||
|
||||
<issue id="MissingTranslation"
|
||||
message=""add_hidden_icons" is not translated in "hi" (Hindi), "fil" (Filipino; Pilipino), "lt" (Lithuanian), "lv" (Latvian), "mk" (Macedonian), "ms" (Malay), "en" (English), "eo" (Esperanto), "is" (Icelandic), "my" (Burmese), "eu" (Basque), "ne" (Nepali), "az" (Azerbaijani), "fa" (Persian), "nn" (Norwegian Nynorsk), "be" (Belarusian), "bn" (Bangla), "br" (Breton), "si" (Sinhala), "ltg", "kn" (Kannada), "or" (Odia), "ko" (Korean), "kr" (Kanuri), "sat" (Santali), "ta" (Tamil), "cr" (Cree), "te" (Telugu), "th" (Thai), "cy" (Welsh), "da" (Danish)"
|
||||
errorLine1=" <string name="add_hidden_icons">Add hidden icons</string>" errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
|
||||
<location file="src/main/res/values/strings.xml" line="10" column="13" />
|
||||
<issue
|
||||
id="MissingTranslation"
|
||||
message=""add_hidden_icons" is not translated in "fil" (Filipino; Pilipino), "lt" (Lithuanian), "lv" (Latvian), "mk" (Macedonian), "ms" (Malay), "en" (English), "is" (Icelandic), "my" (Burmese), "ne" (Nepali), "az" (Azerbaijani), "fa" (Persian), "nn" (Norwegian Nynorsk), "be" (Belarusian), "bn" (Bangla), "br" (Breton), "si" (Sinhala), "ltg", "kn" (Kannada), "or" (Odia), "ko" (Korean), "kr" (Kanuri), "sat" (Santali), "ta" (Tamil), "cr" (Cree), "te" (Telugu), "th" (Thai), "cy" (Welsh), "da" (Danish)"
|
||||
errorLine1=" <string name="add_hidden_icons">Add hidden icons</string>"
|
||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
|
||||
<location
|
||||
file="src/main/res/values/strings.xml"
|
||||
line="9"
|
||||
column="13"/>
|
||||
</issue>
|
||||
|
||||
<issue id="MissingTranslation"
|
||||
message=""manage_hidden_icons" is not translated in "hi" (Hindi), "fil" (Filipino; Pilipino), "lt" (Lithuanian), "lv" (Latvian), "mk" (Macedonian), "ms" (Malay), "en" (English), "eo" (Esperanto), "is" (Icelandic), "my" (Burmese), "eu" (Basque), "ne" (Nepali), "az" (Azerbaijani), "fa" (Persian), "nn" (Norwegian Nynorsk), "be" (Belarusian), "bn" (Bangla), "br" (Breton), "si" (Sinhala), "ltg", "kn" (Kannada), "or" (Odia), "ko" (Korean), "kr" (Kanuri), "sat" (Santali), "ta" (Tamil), "cr" (Cree), "te" (Telugu), "th" (Thai), "cy" (Welsh), "da" (Danish)"
|
||||
errorLine1=" <string name="manage_hidden_icons">Manage hidden icons</string>" errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~">
|
||||
<location file="src/main/res/values/strings.xml" line="11" column="13" />
|
||||
<issue
|
||||
id="MissingTranslation"
|
||||
message=""manage_hidden_icons" is not translated in "fil" (Filipino; Pilipino), "lt" (Lithuanian), "lv" (Latvian), "mk" (Macedonian), "ms" (Malay), "en" (English), "is" (Icelandic), "my" (Burmese), "ne" (Nepali), "az" (Azerbaijani), "fa" (Persian), "nn" (Norwegian Nynorsk), "be" (Belarusian), "bn" (Bangla), "br" (Breton), "si" (Sinhala), "ltg", "kn" (Kannada), "or" (Odia), "ko" (Korean), "kr" (Kanuri), "sat" (Santali), "ta" (Tamil), "cr" (Cree), "te" (Telugu), "th" (Thai), "cy" (Welsh), "da" (Danish)"
|
||||
errorLine1=" <string name="manage_hidden_icons">Manage hidden icons</string>"
|
||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~">
|
||||
<location
|
||||
file="src/main/res/values/strings.xml"
|
||||
line="10"
|
||||
column="13"/>
|
||||
</issue>
|
||||
|
||||
<issue id="MissingTranslation"
|
||||
message=""hidden_icons" is not translated in "hi" (Hindi), "fil" (Filipino; Pilipino), "lt" (Lithuanian), "lv" (Latvian), "mk" (Macedonian), "ms" (Malay), "en" (English), "eo" (Esperanto), "is" (Icelandic), "my" (Burmese), "eu" (Basque), "ne" (Nepali), "az" (Azerbaijani), "fa" (Persian), "nn" (Norwegian Nynorsk), "be" (Belarusian), "bn" (Bangla), "br" (Breton), "si" (Sinhala), "ltg", "kn" (Kannada), "or" (Odia), "ko" (Korean), "kr" (Kanuri), "sat" (Santali), "ta" (Tamil), "cr" (Cree), "te" (Telugu), "th" (Thai), "cy" (Welsh), "da" (Danish)"
|
||||
errorLine1=" <string name="hidden_icons">Hidden icons</string>" errorLine2=" ~~~~~~~~~~~~~~~~~~~">
|
||||
<location file="src/main/res/values/strings.xml" line="12" column="13" />
|
||||
<issue
|
||||
id="MissingTranslation"
|
||||
message=""hidden_icons" is not translated in "fil" (Filipino; Pilipino), "lt" (Lithuanian), "lv" (Latvian), "mk" (Macedonian), "ms" (Malay), "en" (English), "is" (Icelandic), "my" (Burmese), "ne" (Nepali), "az" (Azerbaijani), "fa" (Persian), "nn" (Norwegian Nynorsk), "be" (Belarusian), "bn" (Bangla), "br" (Breton), "si" (Sinhala), "ltg", "kn" (Kannada), "or" (Odia), "ko" (Korean), "kr" (Kanuri), "sat" (Santali), "ta" (Tamil), "cr" (Cree), "te" (Telugu), "th" (Thai), "cy" (Welsh), "da" (Danish)"
|
||||
errorLine1=" <string name="hidden_icons">Hidden icons</string>"
|
||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
|
||||
<location
|
||||
file="src/main/res/values/strings.xml"
|
||||
line="11"
|
||||
column="13"/>
|
||||
</issue>
|
||||
|
||||
<issue id="MissingTranslation"
|
||||
message=""hidden_icons_placeholder" is not translated in "hi" (Hindi), "fil" (Filipino; Pilipino), "lt" (Lithuanian), "lv" (Latvian), "mk" (Macedonian), "ms" (Malay), "en" (English), "eo" (Esperanto), "is" (Icelandic), "my" (Burmese), "eu" (Basque), "ne" (Nepali), "az" (Azerbaijani), "fa" (Persian), "nn" (Norwegian Nynorsk), "be" (Belarusian), "bn" (Bangla), "br" (Breton), "si" (Sinhala), "ltg", "kn" (Kannada), "or" (Odia), "ko" (Korean), "kr" (Kanuri), "sat" (Santali), "ta" (Tamil), "cr" (Cree), "te" (Telugu), "th" (Thai), "cy" (Welsh), "da" (Danish)"
|
||||
<issue
|
||||
id="MissingTranslation"
|
||||
message=""hidden_icons_placeholder" is not translated in "fil" (Filipino; Pilipino), "lt" (Lithuanian), "lv" (Latvian), "mk" (Macedonian), "ms" (Malay), "en" (English), "is" (Icelandic), "my" (Burmese), "ne" (Nepali), "az" (Azerbaijani), "fa" (Persian), "nn" (Norwegian Nynorsk), "be" (Belarusian), "bn" (Bangla), "br" (Breton), "si" (Sinhala), "ltg", "kn" (Kannada), "or" (Odia), "ko" (Korean), "kr" (Kanuri), "sat" (Santali), "ta" (Tamil), "cr" (Cree), "te" (Telugu), "th" (Thai), "cy" (Welsh), "da" (Danish)"
|
||||
errorLine1=" <string name="hidden_icons_placeholder">Some apps cannot be uninstalled due to system restrictions, but you can at least hide their icons to avoid seeing them.</string>"
|
||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
|
||||
<location file="src/main/res/values/strings.xml" line="13" column="13" />
|
||||
<location
|
||||
file="src/main/res/values/strings.xml"
|
||||
line="12"
|
||||
column="13"/>
|
||||
</issue>
|
||||
|
||||
<issue id="MissingTranslation"
|
||||
message=""app_drawer_settings" is not translated in "hi" (Hindi), "fil" (Filipino; Pilipino), "lt" (Lithuanian), "hr" (Croatian), "lv" (Latvian), "mk" (Macedonian), "ml" (Malayalam), "in" (Indonesian), "ms" (Malay), "en" (English), "eo" (Esperanto), "is" (Icelandic), "my" (Burmese), "iw" (Hebrew), "eu" (Basque), "nb" (Norwegian Bokmål), "ja" (Japanese), "ne" (Nepali), "az" (Azerbaijani), "fa" (Persian), "nn" (Norwegian Nynorsk), "be" (Belarusian), "fi" (Finnish), "bg" (Bulgarian), "bn" (Bangla), "br" (Breton), "bs" (Bosnian), "si" (Sinhala), "sl" (Slovenian), "zgh" (Standard Moroccan Tamazight), "ltg", "sr" (Serbian), "kn" (Kannada), "or" (Odia), "ko" (Korean), "gl" (Galician), "kr" (Kanuri), "sat" (Santali), "ta" (Tamil), "cr" (Cree), "pa" (Punjabi), "te" (Telugu), "th" (Thai), "cy" (Welsh), "da" (Danish)"
|
||||
errorLine1=" <string name="app_drawer_settings">App drawer</string>" errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~">
|
||||
<location file="src/main/res/values/strings.xml" line="14" column="13" />
|
||||
<issue
|
||||
id="MissingTranslation"
|
||||
message=""app_drawer_settings" is not translated in "fil" (Filipino; Pilipino), "lt" (Lithuanian), "lv" (Latvian), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "is" (Icelandic), "my" (Burmese), "nb" (Norwegian Bokmål), "ne" (Nepali), "az" (Azerbaijani), "fa" (Persian), "nn" (Norwegian Nynorsk), "be" (Belarusian), "bg" (Bulgarian), "bn" (Bangla), "br" (Breton), "bs" (Bosnian), "si" (Sinhala), "sl" (Slovenian), "zgh" (Standard Moroccan Tamazight), "ltg", "sr" (Serbian), "kn" (Kannada), "or" (Odia), "ko" (Korean), "kr" (Kanuri), "sat" (Santali), "ta" (Tamil), "cr" (Cree), "pa" (Punjabi), "te" (Telugu), "th" (Thai), "cy" (Welsh), "da" (Danish)"
|
||||
errorLine1=" <string name="app_drawer_settings">App drawer</string>"
|
||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~">
|
||||
<location
|
||||
file="src/main/res/values/strings.xml"
|
||||
line="13"
|
||||
column="13"/>
|
||||
</issue>
|
||||
|
||||
<issue id="MissingTranslation"
|
||||
message=""close_app_drawer_on_app_open" is not translated in "hi" (Hindi), "fil" (Filipino; Pilipino), "lt" (Lithuanian), "hr" (Croatian), "lv" (Latvian), "mk" (Macedonian), "ml" (Malayalam), "in" (Indonesian), "ms" (Malay), "en" (English), "eo" (Esperanto), "is" (Icelandic), "my" (Burmese), "iw" (Hebrew), "eu" (Basque), "nb" (Norwegian Bokmål), "ja" (Japanese), "ne" (Nepali), "az" (Azerbaijani), "fa" (Persian), "nn" (Norwegian Nynorsk), "be" (Belarusian), "fi" (Finnish), "bg" (Bulgarian), "bn" (Bangla), "br" (Breton), "bs" (Bosnian), "si" (Sinhala), "sl" (Slovenian), "zgh" (Standard Moroccan Tamazight), "ltg", "sr" (Serbian), "kn" (Kannada), "or" (Odia), "ko" (Korean), "gl" (Galician), "kr" (Kanuri), "sat" (Santali), "ta" (Tamil), "cr" (Cree), "pa" (Punjabi), "te" (Telugu), "th" (Thai), "cy" (Welsh), "da" (Danish)"
|
||||
<issue
|
||||
id="MissingTranslation"
|
||||
message=""close_app_drawer_on_app_open" is not translated in "fil" (Filipino; Pilipino), "lt" (Lithuanian), "lv" (Latvian), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "is" (Icelandic), "my" (Burmese), "nb" (Norwegian Bokmål), "ne" (Nepali), "az" (Azerbaijani), "fa" (Persian), "nn" (Norwegian Nynorsk), "be" (Belarusian), "bg" (Bulgarian), "bn" (Bangla), "br" (Breton), "bs" (Bosnian), "si" (Sinhala), "sl" (Slovenian), "zgh" (Standard Moroccan Tamazight), "ltg", "sr" (Serbian), "kn" (Kannada), "or" (Odia), "ko" (Korean), "kr" (Kanuri), "sat" (Santali), "ta" (Tamil), "cr" (Cree), "pa" (Punjabi), "te" (Telugu), "th" (Thai), "cy" (Welsh), "da" (Danish)"
|
||||
errorLine1=" <string name="close_app_drawer_on_app_open">Close app drawer on opening an app</string>"
|
||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
|
||||
<location file="src/main/res/values/strings.xml" line="15" column="13" />
|
||||
<location
|
||||
file="src/main/res/values/strings.xml"
|
||||
line="14"
|
||||
column="13"/>
|
||||
</issue>
|
||||
|
||||
<issue id="MissingTranslation"
|
||||
message=""home_screen_settings" is not translated in "hi" (Hindi), "fil" (Filipino; Pilipino), "lt" (Lithuanian), "hr" (Croatian), "lv" (Latvian), "hu" (Hungarian), "mk" (Macedonian), "ml" (Malayalam), "in" (Indonesian), "ms" (Malay), "en" (English), "eo" (Esperanto), "is" (Icelandic), "my" (Burmese), "iw" (Hebrew), "eu" (Basque), "ar" (Arabic), "nb" (Norwegian Bokmål), "ja" (Japanese), "ne" (Nepali), "az" (Azerbaijani), "fa" (Persian), "nn" (Norwegian Nynorsk), "be" (Belarusian), "fi" (Finnish), "bg" (Bulgarian), "bn" (Bangla), "br" (Breton), "bs" (Bosnian), "si" (Sinhala), "sl" (Slovenian), "zgh" (Standard Moroccan Tamazight), "ca" (Catalan), "ltg", "sr" (Serbian), "kn" (Kannada), "or" (Odia), "ko" (Korean), "gl" (Galician), "kr" (Kanuri), "sat" (Santali), "ta" (Tamil), "cr" (Cree), "pa" (Punjabi), "te" (Telugu), "th" (Thai), "cy" (Welsh), "da" (Danish)"
|
||||
errorLine1=" <string name="home_screen_settings">Home screen</string>" errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
|
||||
<location file="src/main/res/values/strings.xml" line="16" column="13" />
|
||||
<issue
|
||||
id="MissingTranslation"
|
||||
message=""home_screen_settings" is not translated in "fil" (Filipino; Pilipino), "lt" (Lithuanian), "lv" (Latvian), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "is" (Icelandic), "my" (Burmese), "ar" (Arabic), "nb" (Norwegian Bokmål), "ne" (Nepali), "az" (Azerbaijani), "fa" (Persian), "nn" (Norwegian Nynorsk), "be" (Belarusian), "bg" (Bulgarian), "bn" (Bangla), "br" (Breton), "bs" (Bosnian), "si" (Sinhala), "sl" (Slovenian), "zgh" (Standard Moroccan Tamazight), "ltg", "sr" (Serbian), "kn" (Kannada), "or" (Odia), "ko" (Korean), "kr" (Kanuri), "sat" (Santali), "ta" (Tamil), "cr" (Cree), "pa" (Punjabi), "te" (Telugu), "th" (Thai), "cy" (Welsh), "da" (Danish)"
|
||||
errorLine1=" <string name="home_screen_settings">Home screen</string>"
|
||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
|
||||
<location
|
||||
file="src/main/res/values/strings.xml"
|
||||
line="15"
|
||||
column="13"/>
|
||||
</issue>
|
||||
|
||||
<issue id="MissingTranslation"
|
||||
message=""widget_too_big" is not translated in "hi" (Hindi), "fil" (Filipino; Pilipino), "lt" (Lithuanian), "hr" (Croatian), "lv" (Latvian), "mk" (Macedonian), "ml" (Malayalam), "in" (Indonesian), "ms" (Malay), "en" (English), "eo" (Esperanto), "is" (Icelandic), "my" (Burmese), "iw" (Hebrew), "eu" (Basque), "nb" (Norwegian Bokmål), "ja" (Japanese), "ne" (Nepali), "az" (Azerbaijani), "fa" (Persian), "nn" (Norwegian Nynorsk), "be" (Belarusian), "fi" (Finnish), "bg" (Bulgarian), "bn" (Bangla), "br" (Breton), "bs" (Bosnian), "si" (Sinhala), "sl" (Slovenian), "zgh" (Standard Moroccan Tamazight), "ltg", "sr" (Serbian), "kn" (Kannada), "or" (Odia), "ko" (Korean), "gl" (Galician), "kr" (Kanuri), "sat" (Santali), "ta" (Tamil), "cr" (Cree), "pa" (Punjabi), "te" (Telugu), "th" (Thai), "cy" (Welsh), "da" (Danish)"
|
||||
<issue
|
||||
id="MissingTranslation"
|
||||
message=""widget_too_big" is not translated in "fil" (Filipino; Pilipino), "lt" (Lithuanian), "lv" (Latvian), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "is" (Icelandic), "my" (Burmese), "nb" (Norwegian Bokmål), "ne" (Nepali), "az" (Azerbaijani), "fa" (Persian), "nn" (Norwegian Nynorsk), "be" (Belarusian), "bg" (Bulgarian), "bn" (Bangla), "br" (Breton), "bs" (Bosnian), "si" (Sinhala), "sl" (Slovenian), "zgh" (Standard Moroccan Tamazight), "ltg", "sr" (Serbian), "kn" (Kannada), "or" (Odia), "ko" (Korean), "kr" (Kanuri), "sat" (Santali), "ta" (Tamil), "cr" (Cree), "pa" (Punjabi), "te" (Telugu), "th" (Thai), "cy" (Welsh), "da" (Danish)"
|
||||
errorLine1=" <string name="widget_too_big">Widget is too big for current home screen size</string>"
|
||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~">
|
||||
<location file="src/main/res/values/strings.xml" line="17" column="13" />
|
||||
<location
|
||||
file="src/main/res/values/strings.xml"
|
||||
line="16"
|
||||
column="13"/>
|
||||
</issue>
|
||||
|
||||
<issue id="NotifyDataSetChanged"
|
||||
<issue
|
||||
id="MissingTranslation"
|
||||
message=""double_tap_to_lock" is not translated in "fil" (Filipino; Pilipino), "lt" (Lithuanian), "lv" (Latvian), "ia" (Interlingua), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "is" (Icelandic), "my" (Burmese), "ar" (Arabic), "vi" (Vietnamese), "nb" (Norwegian Bokmål), "ja" (Japanese), "ne" (Nepali), "az" (Azerbaijani), "fa" (Persian), "ro" (Romanian), "nn" (Norwegian Nynorsk), "be" (Belarusian), "bg" (Bulgarian), "bn" (Bangla), "br" (Breton), "bs" (Bosnian), "si" (Sinhala), "sk" (Slovak), "sl" (Slovenian), "zgh" (Standard Moroccan Tamazight), "ltg", "sr" (Serbian), "kn" (Kannada), "or" (Odia), "ko" (Korean), "gl" (Galician), "kr" (Kanuri), "sat" (Santali), "ta" (Tamil), "cr" (Cree), "pa" (Punjabi), "te" (Telugu), "th" (Thai), "cy" (Welsh), "ckb", "da" (Danish)"
|
||||
errorLine1=" <string name="double_tap_to_lock">Double tap to lock screen</string>"
|
||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
|
||||
<location
|
||||
file="src/main/res/values/strings.xml"
|
||||
line="17"
|
||||
column="13"/>
|
||||
</issue>
|
||||
|
||||
<issue
|
||||
id="MissingTranslation"
|
||||
message=""lock_device_admin_hint" is not translated in "fil" (Filipino; Pilipino), "lt" (Lithuanian), "lv" (Latvian), "ia" (Interlingua), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "is" (Icelandic), "my" (Burmese), "ar" (Arabic), "vi" (Vietnamese), "nb" (Norwegian Bokmål), "ja" (Japanese), "ne" (Nepali), "az" (Azerbaijani), "fa" (Persian), "ro" (Romanian), "nn" (Norwegian Nynorsk), "be" (Belarusian), "bg" (Bulgarian), "bn" (Bangla), "br" (Breton), "bs" (Bosnian), "si" (Sinhala), "sk" (Slovak), "sl" (Slovenian), "zgh" (Standard Moroccan Tamazight), "ltg", "sr" (Serbian), "kn" (Kannada), "or" (Odia), "ko" (Korean), "gl" (Galician), "kr" (Kanuri), "sat" (Santali), "ta" (Tamil), "cr" (Cree), "pa" (Punjabi), "te" (Telugu), "th" (Thai), "cy" (Welsh), "ckb", "da" (Danish)"
|
||||
errorLine1=" <string name="lock_device_admin_hint">To enable the double tap to lock screen feature, you need to grant admin permission. Note that the app cannot be uninstalled until this permission is removed.</string>"
|
||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
|
||||
<location
|
||||
file="src/main/res/values/strings.xml"
|
||||
line="18"
|
||||
column="13"/>
|
||||
</issue>
|
||||
|
||||
<issue
|
||||
id="MissingTranslation"
|
||||
message=""lock_device_admin_warning" is not translated in "fil" (Filipino; Pilipino), "lt" (Lithuanian), "lv" (Latvian), "ia" (Interlingua), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "is" (Icelandic), "my" (Burmese), "ar" (Arabic), "vi" (Vietnamese), "nb" (Norwegian Bokmål), "ja" (Japanese), "ne" (Nepali), "az" (Azerbaijani), "fa" (Persian), "ro" (Romanian), "nn" (Norwegian Nynorsk), "be" (Belarusian), "bg" (Bulgarian), "bn" (Bangla), "br" (Breton), "bs" (Bosnian), "si" (Sinhala), "sk" (Slovak), "sl" (Slovenian), "zgh" (Standard Moroccan Tamazight), "ltg", "sr" (Serbian), "kn" (Kannada), "or" (Odia), "ko" (Korean), "gl" (Galician), "kr" (Kanuri), "sat" (Santali), "ta" (Tamil), "cr" (Cree), "pa" (Punjabi), "te" (Telugu), "th" (Thai), "cy" (Welsh), "ckb", "da" (Danish)"
|
||||
errorLine1=" <string name="lock_device_admin_warning">Deactivating admin permission will disable the double tap to lock screen feature.</string>"
|
||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
|
||||
<location
|
||||
file="src/main/res/values/strings.xml"
|
||||
line="19"
|
||||
column="13"/>
|
||||
</issue>
|
||||
|
||||
<issue
|
||||
id="NotifyDataSetChanged"
|
||||
message="It will always be more efficient to use more specific change events if you can. Rely on `notifyDataSetChanged` as a last resort."
|
||||
errorLine1=" notifyDataSetChanged()" errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
|
||||
<location file="src/main/kotlin/org.fossify.home/adapters/FolderIconsAdapter.kt" line="107" column="9" />
|
||||
errorLine1=" notifyDataSetChanged()"
|
||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
|
||||
<location
|
||||
file="src/main/kotlin/org/fossify/home/adapters/FolderIconsAdapter.kt"
|
||||
line="107"
|
||||
column="9"/>
|
||||
</issue>
|
||||
|
||||
<issue id="NotifyDataSetChanged"
|
||||
<issue
|
||||
id="NotifyDataSetChanged"
|
||||
message="It will always be more efficient to use more specific change events if you can. Rely on `notifyDataSetChanged` as a last resort."
|
||||
errorLine1=" notifyDataSetChanged()" errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
|
||||
<location file="src/main/kotlin/org.fossify.home/adapters/LaunchersAdapter.kt" line="83" column="13" />
|
||||
errorLine1=" notifyDataSetChanged()"
|
||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
|
||||
<location
|
||||
file="src/main/kotlin/org/fossify/home/adapters/WidgetsAdapter.kt"
|
||||
line="120"
|
||||
column="13"/>
|
||||
</issue>
|
||||
|
||||
<issue id="NotifyDataSetChanged"
|
||||
<issue
|
||||
id="NotifyDataSetChanged"
|
||||
message="It will always be more efficient to use more specific change events if you can. Rely on `notifyDataSetChanged` as a last resort."
|
||||
errorLine1=" notifyDataSetChanged()" errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
|
||||
<location file="src/main/kotlin/org.fossify.home/adapters/LaunchersAdapter.kt" line="92" column="13" />
|
||||
errorLine1=" notifyDataSetChanged()"
|
||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
|
||||
<location
|
||||
file="src/main/kotlin/org/fossify/home/adapters/WidgetsAdapter.kt"
|
||||
line="127"
|
||||
column="13"/>
|
||||
</issue>
|
||||
|
||||
<issue id="NotifyDataSetChanged"
|
||||
message="It will always be more efficient to use more specific change events if you can. Rely on `notifyDataSetChanged` as a last resort."
|
||||
errorLine1=" notifyDataSetChanged()" errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
|
||||
<location file="src/main/kotlin/org.fossify.home/adapters/LaunchersAdapter.kt" line="99" column="13" />
|
||||
</issue>
|
||||
|
||||
<issue id="NotifyDataSetChanged"
|
||||
message="It will always be more efficient to use more specific change events if you can. Rely on `notifyDataSetChanged` as a last resort."
|
||||
errorLine1=" notifyDataSetChanged()" errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
|
||||
<location file="src/main/kotlin/org.fossify.home/adapters/WidgetsAdapter.kt" line="120" column="13" />
|
||||
</issue>
|
||||
|
||||
<issue id="NotifyDataSetChanged"
|
||||
message="It will always be more efficient to use more specific change events if you can. Rely on `notifyDataSetChanged` as a last resort."
|
||||
errorLine1=" notifyDataSetChanged()" errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
|
||||
<location file="src/main/kotlin/org.fossify.home/adapters/WidgetsAdapter.kt" line="127" column="13" />
|
||||
</issue>
|
||||
|
||||
<issue id="ObsoleteSdkInt"
|
||||
<issue
|
||||
id="ObsoleteSdkInt"
|
||||
message="This folder configuration (`v26`) is unnecessary; `minSdkVersion` is 26. Merge all the resources in this folder into `mipmap-anydpi`.">
|
||||
<location file="src/main/res/mipmap-anydpi-v26" />
|
||||
<location
|
||||
file="src/main/res/mipmap-anydpi-v26"/>
|
||||
</issue>
|
||||
|
||||
<issue id="VectorPath"
|
||||
message="Very long vector path (937 characters), which is bad for performance. Considering reducing precision, removing minor details or rasterizing vector."
|
||||
errorLine1=" <path android:fillColor="#FFFFFFFF" android:pathData="M16.952 32.327c-0.206 0-0.377-0.068-0.512-0.202-0.135-0.136-0.203-0.307-0.203-0.513v-8.838l-1.429 1.096c-0.159 0.127-0.334 0.175-0.524 0.143-0.191-0.032-0.349-0.127-0.476-0.286-0.127-0.159-0.175-0.334-0.143-0.524 0.032-0.191 0.127-0.349 0.286-0.476l2.287-1.739v-2.001c0-0.206 0.067-0.377 0.202-0.512s0.306-0.202 0.512-0.202c0.206 0 0.377 0.068 0.512 0.202 0.135 0.135 0.202 0.306 0.202 0.512v0.905l5.765-4.383c0.064-0.048 0.131-0.083 0.202-0.107 0.071-0.024 0.147-0.036 0.226-0.036 0.079 0 0.155 0.012 0.226 0.036 0.071 0.024 0.139 0.06 0.202 0.107l9.505 7.242c0.159 0.127 0.25 0.286 0.274 0.476 0.024 0.191-0.028 0.365-0.155 0.524-0.127 0.159-0.282 0.25-0.465 0.274-0.183 0.024-0.353-0.028-0.512-0.155l-1.453-1.096v8.838c0 0.206-0.068 0.377-0.202 0.512-0.135 0.135-0.306 0.202-0.512 0.202h-4.35a1 1 44.991 0 1-1-1l-0.001-2.941a1.001 1.001 45.025 0 0-1-1.001l-1.114-0.001a0.999 0.999 135.043 0 0-1 0.999l-0.001 2.944a1 1 135.009 0 1-1 1z"/>"
|
||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
|
||||
<location file="src/main/res/drawable/ic_launcher_monochrome.xml" line="2" column="59" />
|
||||
<issue
|
||||
id="VectorPath"
|
||||
message="Very long vector path (864 characters), which is bad for performance. Considering reducing precision, removing minor details or rasterizing vector."
|
||||
errorLine1=" <path android:fillColor="#ffffff" android:pathData="M200.501 347.513q-9.168 0-15.694-6.526-6.527-6.527-6.527-15.694v-79.43l-22.22 16.938q-3.885 2.774-8.331 2.356-4.446-0.418-7.22-4.303t-2.223-8.331q0.551-4.446 4.446-7.22l99.703-76.37q3.059-2.223 6.526-3.334 3.467-1.111 7.077-1.111t7.077 1.111q3.467 1.111 6.526 3.334l30.828 23.608v-6.108q0-6.944 4.864-11.799 4.864-4.864 11.799-4.864 6.944 0 11.799 4.864 4.864 4.864 4.864 11.799v31.663l35.549 27.217q3.61 2.774 4.303 7.22 0.694 4.446-2.08 8.331t-7.22 4.303q-4.446 0.418-8.331-2.356l-22.22-16.938v79.43q0 9.168-6.526 15.694-6.517 6.517-15.675 6.517H300.49q-9.168 0-15.694-6.526-6.527-6.527-6.527-15.694v-22.22q0-9.168-6.526-15.694-6.527-6.527-15.694-6.527-9.168 0-15.694 6.526-6.527 6.526-6.527 15.694v22.22q0 9.168-6.526 15.694-6.527 6.527-15.694 6.527zm33.326-110.817h44.431q0-8.882-6.669-14.582-6.669-5.69-15.552-5.69-8.882 0-15.552 5.69-6.669 5.69-6.669 14.582z"/>"
|
||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
|
||||
<location
|
||||
file="src/main/res/drawable/ic_launcher_foreground.xml"
|
||||
line="2"
|
||||
column="57"/>
|
||||
</issue>
|
||||
|
||||
<issue id="Overdraw"
|
||||
<issue
|
||||
id="VectorPath"
|
||||
message="Very long vector path (864 characters), which is bad for performance. Considering reducing precision, removing minor details or rasterizing vector."
|
||||
errorLine1=" <path android:pathData="M200.501 347.513q-9.168 0-15.694-6.526-6.527-6.527-6.527-15.694v-79.43l-22.22 16.938q-3.885 2.774-8.331 2.356-4.446-0.418-7.22-4.303t-2.223-8.331q0.551-4.446 4.446-7.22l99.703-76.37q3.059-2.223 6.526-3.334 3.467-1.111 7.077-1.111t7.077 1.111q3.467 1.111 6.526 3.334l30.828 23.608v-6.108q0-6.944 4.864-11.799 4.864-4.864 11.799-4.864 6.944 0 11.799 4.864 4.864 4.864 4.864 11.799v31.663l35.549 27.217q3.61 2.774 4.303 7.22 0.694 4.446-2.08 8.331t-7.22 4.303q-4.446 0.418-8.331-2.356l-22.22-16.938v79.43q0 9.168-6.526 15.694-6.517 6.517-15.675 6.517H300.49q-9.168 0-15.694-6.526-6.527-6.527-6.527-15.694v-22.22q0-9.168-6.526-15.694-6.527-6.527-15.694-6.527-9.168 0-15.694 6.526-6.527 6.526-6.527 15.694v22.22q0 9.168-6.526 15.694-6.527 6.527-15.694 6.527zm33.326-110.817h44.431q0-8.882-6.669-14.582-6.669-5.69-15.552-5.69-8.882 0-15.552 5.69-6.669 5.69-6.669 14.582z" android:fillColor="#ffffff"/>"
|
||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
|
||||
<location
|
||||
file="src/main/res/drawable/ic_launcher_monochrome.xml"
|
||||
line="2"
|
||||
column="29"/>
|
||||
</issue>
|
||||
|
||||
<issue
|
||||
id="Overdraw"
|
||||
message="Possible overdraw: Root element paints background `?attr/selectableItemBackground` with a theme that also paints a background (inferred theme is `@style/AppTheme`)"
|
||||
errorLine1=" android:background="?attr/selectableItemBackground"" errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
|
||||
<location file="src/main/res/layout/item_hidden_icon.xml" line="6" column="5" />
|
||||
errorLine1=" android:background="?attr/selectableItemBackground""
|
||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
|
||||
<location
|
||||
file="src/main/res/layout/item_hidden_icon.xml"
|
||||
line="6"
|
||||
column="5"/>
|
||||
</issue>
|
||||
|
||||
<issue id="Overdraw"
|
||||
message="Possible overdraw: Root element paints background `?attr/selectableItemBackground` with a theme that also paints a background (inferred theme is `@style/AppTheme`)"
|
||||
errorLine1=" android:background="?attr/selectableItemBackground"" errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
|
||||
<location file="src/main/res/layout/item_launcher_label.xml" line="6" column="5" />
|
||||
<issue
|
||||
id="UnusedResources"
|
||||
message="The resource `R.layout.dialog_folder_icons` appears to be unused"
|
||||
errorLine1="<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android""
|
||||
errorLine2="^">
|
||||
<location
|
||||
file="src/main/res/layout/dialog_folder_icons.xml"
|
||||
line="2"
|
||||
column="1"/>
|
||||
</issue>
|
||||
|
||||
<issue id="UnusedResources" message="The resource `R.layout.dialog_folder_icons` appears to be unused"
|
||||
errorLine1="<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"" errorLine2="^">
|
||||
<location file="src/main/res/layout/dialog_folder_icons.xml" line="2" column="1" />
|
||||
</issue>
|
||||
|
||||
<issue id="UnusedResources" message="The resource `R.dimen.icon_long_press_anchor_offset_y` appears to be unused"
|
||||
<issue
|
||||
id="UnusedResources"
|
||||
message="The resource `R.dimen.icon_long_press_anchor_offset_y` appears to be unused"
|
||||
errorLine1=" <dimen name="icon_long_press_anchor_offset_y">150dp</dimen>"
|
||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
|
||||
<location file="src/main/res/values/dimens.xml" line="3" column="12" />
|
||||
<location
|
||||
file="src/main/res/values/dimens.xml"
|
||||
line="3"
|
||||
column="12"/>
|
||||
</issue>
|
||||
|
||||
<issue id="UnusedResources" message="The resource `R.dimen.min_folder_view_height` appears to be unused"
|
||||
errorLine1=" <dimen name="min_folder_view_height">200dp</dimen>" errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
|
||||
<location file="src/main/res/values/dimens.xml" line="12" column="12" />
|
||||
<issue
|
||||
id="UnusedResources"
|
||||
message="The resource `R.dimen.min_folder_view_height` appears to be unused"
|
||||
errorLine1=" <dimen name="min_folder_view_height">200dp</dimen>"
|
||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
|
||||
<location
|
||||
file="src/main/res/values/dimens.xml"
|
||||
line="12"
|
||||
column="12"/>
|
||||
</issue>
|
||||
|
||||
<issue id="UnusedResources" message="The resource `R.dimen.max_folder_view_height` appears to be unused"
|
||||
errorLine1=" <dimen name="max_folder_view_height">500dp</dimen>" errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
|
||||
<location file="src/main/res/values/dimens.xml" line="13" column="12" />
|
||||
<issue
|
||||
id="UnusedResources"
|
||||
message="The resource `R.dimen.max_folder_view_height` appears to be unused"
|
||||
errorLine1=" <dimen name="max_folder_view_height">500dp</dimen>"
|
||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
|
||||
<location
|
||||
file="src/main/res/values/dimens.xml"
|
||||
line="13"
|
||||
column="12"/>
|
||||
</issue>
|
||||
|
||||
<issue id="UnusedResources" message="The resource `R.string.hide_icon` appears to be unused"
|
||||
errorLine1=" <string name="hide_icon">Hide icon</string>" errorLine2=" ~~~~~~~~~~~~~~~~">
|
||||
<location file="src/main/res/values/strings.xml" line="9" column="13" />
|
||||
<issue
|
||||
id="UnusedResources"
|
||||
message="The resource `R.color.ic_launcher_amber_background` appears to be unused"
|
||||
errorLine1=" <color name="ic_launcher_amber_background">#106D20</color>"
|
||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
|
||||
<location
|
||||
file="src/main/res/values/ic_launcher_amber_background.xml"
|
||||
line="3"
|
||||
column="12"/>
|
||||
</issue>
|
||||
|
||||
<issue id="UnusedResources" message="The resource `R.string.add_hidden_icons` appears to be unused"
|
||||
errorLine1=" <string name="add_hidden_icons">Add hidden icons</string>" errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
|
||||
<location file="src/main/res/values/strings.xml" line="10" column="13" />
|
||||
<issue
|
||||
id="UnusedResources"
|
||||
message="The resource `R.color.ic_launcher_blue_background` appears to be unused"
|
||||
errorLine1=" <color name="ic_launcher_blue_background">#106D20</color>"
|
||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
|
||||
<location
|
||||
file="src/main/res/values/ic_launcher_blue_background.xml"
|
||||
line="3"
|
||||
column="12"/>
|
||||
</issue>
|
||||
|
||||
<issue id="AlwaysShowAction" message="Prefer "`ifRoom`" instead of "`always`""
|
||||
errorLine1=" app:showAsAction="always" />" errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
|
||||
<location file="src/main/res/menu/menu_app_icon.xml" line="9" column="13" />
|
||||
<location file="src/main/res/menu/menu_app_icon.xml" line="14" column="13" />
|
||||
<location file="src/main/res/menu/menu_app_icon.xml" line="19" column="13" />
|
||||
<location file="src/main/res/menu/menu_app_icon.xml" line="24" column="13" />
|
||||
<location file="src/main/res/menu/menu_app_icon.xml" line="29" column="13" />
|
||||
<location file="src/main/res/menu/menu_app_icon.xml" line="34" column="13" />
|
||||
<issue
|
||||
id="UnusedResources"
|
||||
message="The resource `R.string.hide_icon` appears to be unused"
|
||||
errorLine1=" <string name="hide_icon">Hide icon</string>"
|
||||
errorLine2=" ~~~~~~~~~~~~~~~~">
|
||||
<location
|
||||
file="src/main/res/values/strings.xml"
|
||||
line="8"
|
||||
column="13"/>
|
||||
</issue>
|
||||
|
||||
<issue id="AlwaysShowAction" message="Prefer "`ifRoom`" instead of "`always`""
|
||||
errorLine1=" app:showAsAction="always" />" errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
|
||||
<location file="src/main/res/menu/menu_home_screen.xml" line="7" column="9" />
|
||||
<location file="src/main/res/menu/menu_home_screen.xml" line="11" column="9" />
|
||||
<issue
|
||||
id="UnusedResources"
|
||||
message="The resource `R.string.add_hidden_icons` appears to be unused"
|
||||
errorLine1=" <string name="add_hidden_icons">Add hidden icons</string>"
|
||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
|
||||
<location
|
||||
file="src/main/res/values/strings.xml"
|
||||
line="9"
|
||||
column="13"/>
|
||||
</issue>
|
||||
|
||||
<issue id="ClickableViewAccessibility" message="Custom view `MyAppWidgetHostView` overrides `onTouchEvent` but not `performClick`"
|
||||
errorLine1=" override fun onTouchEvent(event: MotionEvent?): Boolean {" errorLine2=" ~~~~~~~~~~~~">
|
||||
<location file="src/main/kotlin/org.fossify.home/views/MyAppWidgetHostView.kt" line="23" column="18" />
|
||||
<issue
|
||||
id="UseKtx"
|
||||
message="Use the KTX extension function `SharedPreferences.edit` instead?"
|
||||
errorLine1=" set(wasHomeScreenInit) = prefs.edit().putBoolean(WAS_HOME_SCREEN_INIT, wasHomeScreenInit).apply()"
|
||||
errorLine2=" ~~~~~~~~~~~~">
|
||||
<location
|
||||
file="src/main/kotlin/org/fossify/home/helpers/Config.kt"
|
||||
line="14"
|
||||
column="34"/>
|
||||
</issue>
|
||||
|
||||
<issue id="ClickableViewAccessibility" message="Custom view `MyAppWidgetResizeFrame` overrides `onTouchEvent` but not `performClick`"
|
||||
errorLine1=" override fun onTouchEvent(event: MotionEvent?): Boolean {" errorLine2=" ~~~~~~~~~~~~">
|
||||
<location file="src/main/kotlin/org.fossify.home/views/MyAppWidgetResizeFrame.kt" line="105" column="18" />
|
||||
<issue
|
||||
id="UseKtx"
|
||||
message="Use the KTX extension function `SharedPreferences.edit` instead?"
|
||||
errorLine1=" set(homeColumnCount) = prefs.edit().putInt(HOME_COLUMN_COUNT, homeColumnCount).apply()"
|
||||
errorLine2=" ~~~~~~~~~~~~">
|
||||
<location
|
||||
file="src/main/kotlin/org/fossify/home/helpers/Config.kt"
|
||||
line="18"
|
||||
column="32"/>
|
||||
</issue>
|
||||
|
||||
<issue id="ContentDescription" message="Missing `contentDescription` attribute on image" errorLine1=" <ImageView" errorLine2=" ~~~~~~~~~">
|
||||
<location file="src/main/res/layout/item_widget_preview.xml" line="9" column="6" />
|
||||
<issue
|
||||
id="UseKtx"
|
||||
message="Use the KTX extension function `SharedPreferences.edit` instead?"
|
||||
errorLine1=" set(homeRowCount) = prefs.edit().putInt(HOME_ROW_COUNT, homeRowCount).apply()"
|
||||
errorLine2=" ~~~~~~~~~~~~">
|
||||
<location
|
||||
file="src/main/kotlin/org/fossify/home/helpers/Config.kt"
|
||||
line="22"
|
||||
column="29"/>
|
||||
</issue>
|
||||
|
||||
<issue id="RtlSymmetry" message="When you define `paddingStart` you should probably also define `paddingEnd` for right-to-left symmetry"
|
||||
errorLine1=" android:paddingStart="@dimen/medium_margin"" errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
|
||||
<location file="src/main/res/layout/item_widget_list_section.xml" line="27" column="9" />
|
||||
<issue
|
||||
id="UseKtx"
|
||||
message="Use the KTX extension function `SharedPreferences.edit` instead?"
|
||||
errorLine1=" set(drawerColumnCount) = prefs.edit().putInt(DRAWER_COLUMN_COUNT, drawerColumnCount).apply()"
|
||||
errorLine2=" ~~~~~~~~~~~~">
|
||||
<location
|
||||
file="src/main/kotlin/org/fossify/home/helpers/Config.kt"
|
||||
line="26"
|
||||
column="34"/>
|
||||
</issue>
|
||||
|
||||
<issue
|
||||
id="UseKtx"
|
||||
message="Use the KTX extension function `SharedPreferences.edit` instead?"
|
||||
errorLine1=" set(showSearchBar) = prefs.edit().putBoolean(SHOW_SEARCH_BAR, showSearchBar).apply()"
|
||||
errorLine2=" ~~~~~~~~~~~~">
|
||||
<location
|
||||
file="src/main/kotlin/org/fossify/home/helpers/Config.kt"
|
||||
line="30"
|
||||
column="30"/>
|
||||
</issue>
|
||||
|
||||
<issue
|
||||
id="UseKtx"
|
||||
message="Use the KTX extension function `SharedPreferences.edit` instead?"
|
||||
errorLine1=" set(closeAppDrawer) = prefs.edit().putBoolean(CLOSE_APP_DRAWER, closeAppDrawer).apply()"
|
||||
errorLine2=" ~~~~~~~~~~~~">
|
||||
<location
|
||||
file="src/main/kotlin/org/fossify/home/helpers/Config.kt"
|
||||
line="34"
|
||||
column="31"/>
|
||||
</issue>
|
||||
|
||||
<issue
|
||||
id="UseKtx"
|
||||
message="Use the KTX extension function `Int.toDrawable` instead?"
|
||||
errorLine1=" background = ColorDrawable(Color.TRANSPARENT)"
|
||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
|
||||
<location
|
||||
file="src/main/kotlin/org/fossify/home/views/MyAppWidgetResizeFrame.kt"
|
||||
line="48"
|
||||
column="22"/>
|
||||
</issue>
|
||||
|
||||
<issue
|
||||
id="UseKtx"
|
||||
message="Use the KTX extension function `Int.toDrawable` instead?"
|
||||
errorLine1=" background = ColorDrawable(Color.TRANSPARENT)"
|
||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
|
||||
<location
|
||||
file="src/main/kotlin/org/fossify/home/views/MyAppWidgetResizeFrame.kt"
|
||||
line="48"
|
||||
column="22"/>
|
||||
</issue>
|
||||
|
||||
<issue
|
||||
id="UseKtx"
|
||||
message="Use the KTX extension function `Int.toDrawable` instead?"
|
||||
errorLine1=" background = ColorDrawable(backgroundColor)"
|
||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
|
||||
<location
|
||||
file="src/main/kotlin/org/fossify/home/extensions/View.kt"
|
||||
line="31"
|
||||
column="18"/>
|
||||
</issue>
|
||||
|
||||
<issue
|
||||
id="UseKtx"
|
||||
message="Use the KTX extension function `Int.toDrawable` instead?"
|
||||
errorLine1=" background = ColorDrawable(backgroundColor)"
|
||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
|
||||
<location
|
||||
file="src/main/kotlin/org/fossify/home/extensions/View.kt"
|
||||
line="31"
|
||||
column="18"/>
|
||||
</issue>
|
||||
|
||||
<issue
|
||||
id="ClickableViewAccessibility"
|
||||
message="Custom view `MyAppWidgetHostView` overrides `onTouchEvent` but not `performClick`"
|
||||
errorLine1=" override fun onTouchEvent(event: MotionEvent?): Boolean {"
|
||||
errorLine2=" ~~~~~~~~~~~~">
|
||||
<location
|
||||
file="src/main/kotlin/org/fossify/home/views/MyAppWidgetHostView.kt"
|
||||
line="23"
|
||||
column="18"/>
|
||||
</issue>
|
||||
|
||||
<issue
|
||||
id="ClickableViewAccessibility"
|
||||
message="Custom view `MyAppWidgetResizeFrame` overrides `onTouchEvent` but not `performClick`"
|
||||
errorLine1=" override fun onTouchEvent(event: MotionEvent?): Boolean {"
|
||||
errorLine2=" ~~~~~~~~~~~~">
|
||||
<location
|
||||
file="src/main/kotlin/org/fossify/home/views/MyAppWidgetResizeFrame.kt"
|
||||
line="105"
|
||||
column="18"/>
|
||||
</issue>
|
||||
|
||||
<issue
|
||||
id="ContentDescription"
|
||||
message="Missing `contentDescription` attribute on image"
|
||||
errorLine1=" <ImageView"
|
||||
errorLine2=" ~~~~~~~~~">
|
||||
<location
|
||||
file="src/main/res/layout/item_widget_preview.xml"
|
||||
line="9"
|
||||
column="6"/>
|
||||
</issue>
|
||||
|
||||
<issue
|
||||
id="SetTextI18n"
|
||||
message="Number formatting does not take into account locale settings. Consider using `String.format` instead."
|
||||
errorLine1=" binding.settingsDrawerColumnCount.text = currentColumnCount.toString()"
|
||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
|
||||
<location
|
||||
file="src/main/kotlin/org/fossify/home/activities/SettingsActivity.kt"
|
||||
line="165"
|
||||
column="50"/>
|
||||
</issue>
|
||||
|
||||
<issue
|
||||
id="SetTextI18n"
|
||||
message="Number formatting does not take into account locale settings. Consider using `String.format` instead."
|
||||
errorLine1=" binding.settingsHomeScreenRowCount.text = currentRowCount.toString()"
|
||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~">
|
||||
<location
|
||||
file="src/main/kotlin/org/fossify/home/activities/SettingsActivity.kt"
|
||||
line="200"
|
||||
column="51"/>
|
||||
</issue>
|
||||
|
||||
<issue
|
||||
id="SetTextI18n"
|
||||
message="Number formatting does not take into account locale settings. Consider using `String.format` instead."
|
||||
errorLine1=" binding.settingsHomeScreenColumnCount.text = currentColumnCount.toString()"
|
||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
|
||||
<location
|
||||
file="src/main/kotlin/org/fossify/home/activities/SettingsActivity.kt"
|
||||
line="226"
|
||||
column="54"/>
|
||||
</issue>
|
||||
|
||||
<issue
|
||||
id="RtlSymmetry"
|
||||
message="When you define `paddingStart` you should probably also define `paddingEnd` for right-to-left symmetry"
|
||||
errorLine1=" android:paddingStart="@dimen/medium_margin""
|
||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
|
||||
<location
|
||||
file="src/main/res/layout/item_widget_list_section.xml"
|
||||
line="27"
|
||||
column="9"/>
|
||||
</issue>
|
||||
|
||||
</issues>
|
||||
|
||||
@@ -28,7 +28,6 @@
|
||||
android:appCategory="productivity"
|
||||
android:icon="@mipmap/ic_launcher"
|
||||
android:label="@string/app_launcher_name"
|
||||
android:localeConfig="@xml/locale_config"
|
||||
android:roundIcon="@mipmap/ic_launcher"
|
||||
android:supportsRtl="true"
|
||||
android:theme="@style/AppTheme">
|
||||
|
||||
@@ -2,7 +2,6 @@ package org.fossify.home.activities
|
||||
|
||||
import android.animation.ObjectAnimator
|
||||
import android.annotation.SuppressLint
|
||||
import android.app.Activity
|
||||
import android.app.admin.DevicePolicyManager
|
||||
import android.app.role.RoleManager
|
||||
import android.appwidget.AppWidgetHost
|
||||
@@ -10,7 +9,6 @@ import android.appwidget.AppWidgetManager
|
||||
import android.appwidget.AppWidgetProviderInfo
|
||||
import android.content.ActivityNotFoundException
|
||||
import android.content.ComponentName
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.content.pm.ActivityInfo
|
||||
import android.content.pm.LauncherApps
|
||||
@@ -20,7 +18,6 @@ import android.graphics.Bitmap
|
||||
import android.graphics.Color
|
||||
import android.graphics.Rect
|
||||
import android.graphics.drawable.Drawable
|
||||
import android.net.Uri
|
||||
import android.os.Bundle
|
||||
import android.os.Handler
|
||||
import android.os.Looper
|
||||
@@ -36,6 +33,7 @@ import android.view.animation.DecelerateInterpolator
|
||||
import android.widget.PopupMenu
|
||||
import androidx.core.graphics.drawable.toBitmap
|
||||
import androidx.core.graphics.drawable.toDrawable
|
||||
import androidx.core.net.toUri
|
||||
import androidx.core.view.GestureDetectorCompat
|
||||
import androidx.core.view.WindowCompat
|
||||
import androidx.core.view.WindowInsetsCompat
|
||||
@@ -54,6 +52,7 @@ import org.fossify.commons.extensions.onGlobalLayout
|
||||
import org.fossify.commons.extensions.performHapticFeedback
|
||||
import org.fossify.commons.extensions.realScreenSize
|
||||
import org.fossify.commons.extensions.showErrorToast
|
||||
import org.fossify.commons.extensions.showKeyboard
|
||||
import org.fossify.commons.extensions.toast
|
||||
import org.fossify.commons.extensions.viewBinding
|
||||
import org.fossify.commons.helpers.DARK_GREY
|
||||
@@ -222,7 +221,7 @@ class MainActivity : SimpleActivity(), FlingListener {
|
||||
if (!showIcon) {
|
||||
try {
|
||||
launchersDB.deleteById(it.id!!)
|
||||
} catch (ignored: Exception) {
|
||||
} catch (_: Exception) {
|
||||
}
|
||||
}
|
||||
showIcon
|
||||
@@ -248,7 +247,11 @@ class MainActivity : SimpleActivity(), FlingListener {
|
||||
|
||||
override fun onStop() {
|
||||
super.onStop()
|
||||
binding.homeScreenGrid.root.appWidgetHost.stopListening()
|
||||
try {
|
||||
binding.homeScreenGrid.root.appWidgetHost.stopListening()
|
||||
} catch (_: Exception) {
|
||||
}
|
||||
|
||||
wasJustPaused = false
|
||||
}
|
||||
|
||||
@@ -283,19 +286,20 @@ class MainActivity : SimpleActivity(), FlingListener {
|
||||
}
|
||||
}
|
||||
|
||||
REQUEST_ALLOW_BINDING_WIDGET -> mActionOnCanBindWidget?.invoke(resultCode == Activity.RESULT_OK)
|
||||
REQUEST_CONFIGURE_WIDGET -> mActionOnWidgetConfiguredWidget?.invoke(resultCode == Activity.RESULT_OK)
|
||||
REQUEST_ALLOW_BINDING_WIDGET -> mActionOnCanBindWidget?.invoke(resultCode == RESULT_OK)
|
||||
REQUEST_CONFIGURE_WIDGET -> mActionOnWidgetConfiguredWidget?.invoke(resultCode == RESULT_OK)
|
||||
REQUEST_CREATE_SHORTCUT -> {
|
||||
if (resultCode == Activity.RESULT_OK && resultData != null) {
|
||||
if (resultCode == RESULT_OK && resultData != null) {
|
||||
val launcherApps =
|
||||
applicationContext.getSystemService(Context.LAUNCHER_APPS_SERVICE) as LauncherApps
|
||||
applicationContext.getSystemService(LAUNCHER_APPS_SERVICE) as LauncherApps
|
||||
if (launcherApps.hasShortcutHostPermission()) {
|
||||
val item = launcherApps.getPinItemRequest(resultData)
|
||||
val shortcutInfo = item?.shortcutInfo ?: return
|
||||
if (item.accept()) {
|
||||
val shortcutId = item.shortcutInfo?.id!!
|
||||
val label = item.shortcutInfo.getLabel()
|
||||
val shortcutId = shortcutInfo.id
|
||||
val label = shortcutInfo.getLabel()
|
||||
val icon = launcherApps.getShortcutBadgedIconDrawable(
|
||||
item.shortcutInfo!!,
|
||||
shortcutInfo,
|
||||
resources.displayMetrics.densityDpi
|
||||
)
|
||||
mActionOnAddShortcut?.invoke(shortcutId, label, icon)
|
||||
@@ -324,7 +328,7 @@ class MainActivity : SimpleActivity(), FlingListener {
|
||||
|
||||
try {
|
||||
mDetector.onTouchEvent(event)
|
||||
} catch (ignored: Exception) {
|
||||
} catch (_: Exception) {
|
||||
}
|
||||
|
||||
when (event.actionMasked) {
|
||||
@@ -436,17 +440,15 @@ class MainActivity : SimpleActivity(), FlingListener {
|
||||
private fun handleIntentAction(intent: Intent) {
|
||||
if (intent.action == LauncherApps.ACTION_CONFIRM_PIN_SHORTCUT) {
|
||||
val launcherApps =
|
||||
applicationContext.getSystemService(Context.LAUNCHER_APPS_SERVICE) as LauncherApps
|
||||
applicationContext.getSystemService(LAUNCHER_APPS_SERVICE) as LauncherApps
|
||||
val item = launcherApps.getPinItemRequest(intent)
|
||||
if (item.shortcutInfo == null) {
|
||||
return
|
||||
}
|
||||
val shortcutInfo = item?.shortcutInfo ?: return
|
||||
|
||||
ensureBackgroundThread {
|
||||
val shortcutId = item.shortcutInfo?.id!!
|
||||
val label = item.shortcutInfo.getLabel()
|
||||
val shortcutId = shortcutInfo.id
|
||||
val label = shortcutInfo.getLabel()
|
||||
val icon = launcherApps.getShortcutBadgedIconDrawable(
|
||||
item.shortcutInfo!!,
|
||||
shortcutInfo,
|
||||
resources.displayMetrics.densityDpi
|
||||
)
|
||||
val (page, rect) = findFirstEmptyCell()
|
||||
@@ -457,7 +459,7 @@ class MainActivity : SimpleActivity(), FlingListener {
|
||||
right = rect.right,
|
||||
bottom = rect.bottom,
|
||||
page = page,
|
||||
packageName = item.shortcutInfo!!.`package`,
|
||||
packageName = shortcutInfo.`package`,
|
||||
activityName = "",
|
||||
title = label,
|
||||
type = ITEM_TYPE_SHORTCUT,
|
||||
@@ -479,7 +481,7 @@ class MainActivity : SimpleActivity(), FlingListener {
|
||||
try {
|
||||
item.accept()
|
||||
binding.homeScreenGrid.root.storeAndShowGridItem(gridItem)
|
||||
} catch (ignored: IllegalStateException) {
|
||||
} catch (_: IllegalStateException) {
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -573,11 +575,23 @@ class MainActivity : SimpleActivity(), FlingListener {
|
||||
window.navigationBarColor = resources.getColor(R.color.semitransparent_navigation)
|
||||
binding.homeScreenGrid.root.fragmentExpanded()
|
||||
binding.homeScreenGrid.root.hideResizeLines()
|
||||
|
||||
@SuppressLint("AccessibilityFocus")
|
||||
fragment.root.performAccessibilityAction(
|
||||
AccessibilityNodeInfo.ACTION_ACCESSIBILITY_FOCUS,
|
||||
null
|
||||
)
|
||||
|
||||
if (
|
||||
fragment is AllAppsFragmentBinding
|
||||
&& config.showSearchBar
|
||||
&& config.autoShowKeyboardInAppDrawer
|
||||
) {
|
||||
fragment.root.postDelayed({
|
||||
showKeyboard(fragment.searchBar.binding.topToolbarSearch)
|
||||
}, animationDuration)
|
||||
}
|
||||
|
||||
Handler(Looper.getMainLooper()).postDelayed({
|
||||
updateStatusBarIcons()
|
||||
}, animationDuration)
|
||||
@@ -641,7 +655,7 @@ class MainActivity : SimpleActivity(), FlingListener {
|
||||
}
|
||||
|
||||
val devicePolicyManager =
|
||||
getSystemService(Context.DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
getSystemService(DEVICE_POLICY_SERVICE) as DevicePolicyManager
|
||||
val isLockDeviceAdminActive = devicePolicyManager.isAdminActive(
|
||||
ComponentName(this, LockDeviceAdminReceiver::class.java)
|
||||
)
|
||||
@@ -694,7 +708,7 @@ class MainActivity : SimpleActivity(), FlingListener {
|
||||
val userHandle = android.os.Process.myUserHandle()
|
||||
val shortcutBounds = binding.homeScreenGrid.root.getClickableRect(clickedGridItem)
|
||||
val launcherApps =
|
||||
applicationContext.getSystemService(Context.LAUNCHER_APPS_SERVICE) as LauncherApps
|
||||
applicationContext.getSystemService(LAUNCHER_APPS_SERVICE) as LauncherApps
|
||||
launcherApps.startShortcut(packageName, id, shortcutBounds, null, userHandle)
|
||||
}
|
||||
}
|
||||
@@ -718,7 +732,7 @@ class MainActivity : SimpleActivity(), FlingListener {
|
||||
x: Float,
|
||||
y: Float,
|
||||
gridItem: HomeScreenGridItem,
|
||||
isOnAllAppsFragment: Boolean
|
||||
isOnAllAppsFragment: Boolean,
|
||||
) {
|
||||
binding.homeScreenGrid.root.hideResizeLines()
|
||||
mLongPressedIcon = gridItem
|
||||
@@ -813,7 +827,7 @@ class MainActivity : SimpleActivity(), FlingListener {
|
||||
Intent(Intent.ACTION_SET_WALLPAPER).apply {
|
||||
startActivity(this)
|
||||
}
|
||||
} catch (e: ActivityNotFoundException) {
|
||||
} catch (_: ActivityNotFoundException) {
|
||||
toast(org.fossify.commons.R.string.no_app_found)
|
||||
} catch (e: Exception) {
|
||||
showErrorToast(e)
|
||||
@@ -883,7 +897,7 @@ class MainActivity : SimpleActivity(), FlingListener {
|
||||
}
|
||||
|
||||
private class MyGestureListener(
|
||||
private val flingListener: FlingListener
|
||||
private val flingListener: FlingListener,
|
||||
) : GestureDetector.SimpleOnGestureListener() {
|
||||
override fun onSingleTapUp(event: MotionEvent): Boolean {
|
||||
(flingListener as MainActivity).homeScreenClicked(event.x, event.y)
|
||||
@@ -899,7 +913,7 @@ class MainActivity : SimpleActivity(), FlingListener {
|
||||
event1: MotionEvent?,
|
||||
event2: MotionEvent,
|
||||
velocityX: Float,
|
||||
velocityY: Float
|
||||
velocityY: Float,
|
||||
): Boolean {
|
||||
// ignore fling events just after releasing an icon from dragging
|
||||
if (System.currentTimeMillis() - mLastUpEvent < 500L) {
|
||||
@@ -955,7 +969,7 @@ class MainActivity : SimpleActivity(), FlingListener {
|
||||
Class.forName("android.app.StatusBarManager")
|
||||
.getMethod("expandNotificationsPanel")
|
||||
.invoke(getSystemService("statusbar"))
|
||||
} catch (e: Exception) {
|
||||
} catch (_: Exception) {
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1004,9 +1018,16 @@ class MainActivity : SimpleActivity(), FlingListener {
|
||||
}
|
||||
|
||||
val label = info.loadLabel(packageManager).toString()
|
||||
val drawable =
|
||||
info.loadIcon(packageManager) ?: getDrawableForPackageName(packageName) ?: continue
|
||||
val placeholderColor = calculateAverageColor(drawable.toBitmap())
|
||||
val drawable = info.loadIcon(packageManager)
|
||||
?: getDrawableForPackageName(packageName)
|
||||
?: continue
|
||||
|
||||
val bitmap = drawable.toBitmap(
|
||||
width = max(drawable.intrinsicWidth, 1),
|
||||
height = max(drawable.intrinsicHeight, 1),
|
||||
config = Bitmap.Config.ARGB_8888
|
||||
)
|
||||
val placeholderColor = calculateAverageColor(bitmap)
|
||||
allApps.add(
|
||||
AppLauncher(
|
||||
id = null,
|
||||
@@ -1015,25 +1036,11 @@ class MainActivity : SimpleActivity(), FlingListener {
|
||||
activityName = activityName,
|
||||
order = 0,
|
||||
thumbnailColor = placeholderColor,
|
||||
drawable = drawable.toBitmap().toDrawable(resources)
|
||||
drawable = bitmap.toDrawable(resources)
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
// add Launcher settings as an app
|
||||
val drawable = getDrawableForPackageName(packageName)
|
||||
val placeholderColor = calculateAverageColor(drawable!!.toBitmap())
|
||||
val launcherSettings =
|
||||
AppLauncher(
|
||||
id = null,
|
||||
title = getString(R.string.launcher_settings),
|
||||
packageName = packageName,
|
||||
activityName = "",
|
||||
order = 0,
|
||||
thumbnailColor = placeholderColor,
|
||||
drawable = drawable.toBitmap().toDrawable(resources)
|
||||
)
|
||||
allApps.add(launcherSettings)
|
||||
launchersDB.insertAll(allApps)
|
||||
return allApps
|
||||
}
|
||||
@@ -1042,7 +1049,7 @@ class MainActivity : SimpleActivity(), FlingListener {
|
||||
val homeScreenGridItems = ArrayList<HomeScreenGridItem>()
|
||||
try {
|
||||
val defaultDialerPackage =
|
||||
(getSystemService(Context.TELECOM_SERVICE) as TelecomManager).defaultDialerPackage
|
||||
(getSystemService(TELECOM_SERVICE) as TelecomManager).defaultDialerPackage
|
||||
appLaunchers.firstOrNull { it.packageName == defaultDialerPackage }?.apply {
|
||||
val dialerIcon =
|
||||
HomeScreenGridItem(
|
||||
@@ -1065,7 +1072,7 @@ class MainActivity : SimpleActivity(), FlingListener {
|
||||
)
|
||||
homeScreenGridItems.add(dialerIcon)
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
} catch (_: Exception) {
|
||||
}
|
||||
|
||||
try {
|
||||
@@ -1092,11 +1099,11 @@ class MainActivity : SimpleActivity(), FlingListener {
|
||||
)
|
||||
homeScreenGridItems.add(messengerIcon)
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
} catch (_: Exception) {
|
||||
}
|
||||
|
||||
try {
|
||||
val browserIntent = Intent("android.intent.action.VIEW", Uri.parse("http://"))
|
||||
val browserIntent = Intent(Intent.ACTION_VIEW, "http://".toUri())
|
||||
val resolveInfo =
|
||||
packageManager.resolveActivity(browserIntent, PackageManager.MATCH_DEFAULT_ONLY)
|
||||
val defaultBrowserPackage = resolveInfo!!.activityInfo.packageName
|
||||
@@ -1122,7 +1129,7 @@ class MainActivity : SimpleActivity(), FlingListener {
|
||||
)
|
||||
homeScreenGridItems.add(browserIcon)
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
} catch (_: Exception) {
|
||||
}
|
||||
|
||||
try {
|
||||
@@ -1155,7 +1162,7 @@ class MainActivity : SimpleActivity(), FlingListener {
|
||||
homeScreenGridItems.add(storeIcon)
|
||||
}
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
} catch (_: Exception) {
|
||||
}
|
||||
|
||||
try {
|
||||
@@ -1185,7 +1192,7 @@ class MainActivity : SimpleActivity(), FlingListener {
|
||||
)
|
||||
homeScreenGridItems.add(cameraIcon)
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
} catch (_: Exception) {
|
||||
}
|
||||
|
||||
homeScreenGridItemsDB.insertAll(homeScreenGridItems)
|
||||
@@ -1195,7 +1202,7 @@ class MainActivity : SimpleActivity(), FlingListener {
|
||||
appWidgetManager: AppWidgetManager,
|
||||
appWidgetId: Int,
|
||||
appWidgetInfo: AppWidgetProviderInfo,
|
||||
callback: (canBind: Boolean) -> Unit
|
||||
callback: (canBind: Boolean) -> Unit,
|
||||
) {
|
||||
mActionOnCanBindWidget = null
|
||||
val canCreateWidget =
|
||||
@@ -1215,7 +1222,7 @@ class MainActivity : SimpleActivity(), FlingListener {
|
||||
fun handleWidgetConfigureScreen(
|
||||
appWidgetHost: AppWidgetHost,
|
||||
appWidgetId: Int,
|
||||
callback: (canBind: Boolean) -> Unit
|
||||
callback: (canBind: Boolean) -> Unit,
|
||||
) {
|
||||
mActionOnWidgetConfiguredWidget = callback
|
||||
appWidgetHost.startAppWidgetConfigureActivityForResult(
|
||||
@@ -1229,7 +1236,7 @@ class MainActivity : SimpleActivity(), FlingListener {
|
||||
|
||||
fun handleShorcutCreation(
|
||||
activityInfo: ActivityInfo,
|
||||
callback: (shortcutId: String, label: String, icon: Drawable) -> Unit
|
||||
callback: (shortcutId: String, label: String, icon: Drawable) -> Unit,
|
||||
) {
|
||||
mActionOnAddShortcut = callback
|
||||
val componentName = ComponentName(activityInfo.packageName, activityInfo.name)
|
||||
|
||||
@@ -59,6 +59,7 @@ class SettingsActivity : SimpleActivity() {
|
||||
setupUseEnglish()
|
||||
setupDoubleTapToLock()
|
||||
setupCloseAppDrawerOnOtherAppOpen()
|
||||
setupOpenKeyboardOnAppDrawer()
|
||||
setupDrawerColumnCount()
|
||||
setupDrawerSearchBar()
|
||||
setupHomeRowCount()
|
||||
@@ -152,6 +153,15 @@ class SettingsActivity : SimpleActivity() {
|
||||
}
|
||||
}
|
||||
|
||||
private fun setupOpenKeyboardOnAppDrawer() {
|
||||
binding.settingsOpenKeyboardOnAppDrawerHolder.beVisibleIf(config.showSearchBar)
|
||||
binding.settingsOpenKeyboardOnAppDrawer.isChecked = config.autoShowKeyboardInAppDrawer
|
||||
binding.settingsOpenKeyboardOnAppDrawerHolder.setOnClickListener {
|
||||
binding.settingsOpenKeyboardOnAppDrawer.toggle()
|
||||
config.autoShowKeyboardInAppDrawer = binding.settingsOpenKeyboardOnAppDrawer.isChecked
|
||||
}
|
||||
}
|
||||
|
||||
private fun setupCloseAppDrawerOnOtherAppOpen() {
|
||||
binding.settingsCloseAppDrawerOnOtherApp.isChecked = config.closeAppDrawer
|
||||
binding.settingsCloseAppDrawerOnOtherAppHolder.setOnClickListener {
|
||||
@@ -192,6 +202,7 @@ class SettingsActivity : SimpleActivity() {
|
||||
binding.settingsDrawerSearchHolder.setOnClickListener {
|
||||
binding.settingsShowSearchBar.toggle()
|
||||
config.showSearchBar = binding.settingsShowSearchBar.isChecked
|
||||
binding.settingsOpenKeyboardOnAppDrawerHolder.beVisibleIf(config.showSearchBar)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -38,12 +38,6 @@ import org.fossify.home.interfaces.ItemMenuListener
|
||||
import org.fossify.home.models.HomeScreenGridItem
|
||||
|
||||
fun Activity.launchApp(packageName: String, activityName: String) {
|
||||
// if this is true, launch the app settings
|
||||
if (packageName == this.packageName) {
|
||||
startActivity(Intent(applicationContext, SettingsActivity::class.java))
|
||||
return
|
||||
}
|
||||
|
||||
try {
|
||||
Intent(Intent.ACTION_MAIN).apply {
|
||||
addCategory(Intent.CATEGORY_LAUNCHER)
|
||||
|
||||
@@ -32,4 +32,9 @@ class Config(context: Context) : BaseConfig(context) {
|
||||
var closeAppDrawer: Boolean
|
||||
get() = prefs.getBoolean(CLOSE_APP_DRAWER, false)
|
||||
set(closeAppDrawer) = prefs.edit().putBoolean(CLOSE_APP_DRAWER, closeAppDrawer).apply()
|
||||
|
||||
var autoShowKeyboardInAppDrawer: Boolean
|
||||
get() = prefs.getBoolean(AUTO_SHOW_KEYBOARD_IN_APP_DRAWER, false)
|
||||
set(autoShowKeyboardInAppDrawer) = prefs.edit()
|
||||
.putBoolean(AUTO_SHOW_KEYBOARD_IN_APP_DRAWER, autoShowKeyboardInAppDrawer).apply()
|
||||
}
|
||||
|
||||
@@ -12,6 +12,7 @@ const val HOME_COLUMN_COUNT = "home_column_count"
|
||||
const val DRAWER_COLUMN_COUNT = "drawer_column_count"
|
||||
const val SHOW_SEARCH_BAR = "show_search_bar"
|
||||
const val CLOSE_APP_DRAWER = "close_app_drawer"
|
||||
const val AUTO_SHOW_KEYBOARD_IN_APP_DRAWER = "auto_show_keyboard_in_app_drawer"
|
||||
|
||||
// default home screen grid size
|
||||
const val ROW_COUNT = 6
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -203,6 +203,22 @@
|
||||
|
||||
</RelativeLayout>
|
||||
|
||||
<RelativeLayout
|
||||
android:id="@+id/settings_open_keyboard_on_app_drawer_holder"
|
||||
style="@style/SettingsHolderSwitchStyle"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@drawable/ripple_background">
|
||||
|
||||
<org.fossify.commons.views.MyMaterialSwitch
|
||||
android:id="@+id/settings_open_keyboard_on_app_drawer"
|
||||
style="@style/SettingsSwitchStyle"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/auto_show_keyboard_in_app_drawer" />
|
||||
|
||||
</RelativeLayout>
|
||||
|
||||
<RelativeLayout
|
||||
android:id="@+id/settings_close_app_drawer_on_other_app_holder"
|
||||
style="@style/SettingsHolderSwitchStyle"
|
||||
|
||||
@@ -10,6 +10,6 @@
|
||||
app:showAsAction="always" />
|
||||
<item
|
||||
android:id="@+id/more_apps_from_us"
|
||||
android:title="@string/more_apps_from_us"
|
||||
android:title="@string/more_fossify_apps"
|
||||
app:showAsAction="never" />
|
||||
</menu>
|
||||
|
||||
1
app/src/main/res/resources.properties
Normal file
1
app/src/main/res/resources.properties
Normal file
@@ -0,0 +1 @@
|
||||
unqualifiedResLocale=en-US
|
||||
@@ -17,4 +17,5 @@
|
||||
<string name="double_tap_to_lock">Toc doble per a bloquejar la pantalla</string>
|
||||
<string name="lock_device_admin_hint">Per a activar la funció de toc doble per a bloquejar la pantalla, heu de concedir permís d\'administració. Tingueu en compte que l\'aplicació no es pot desinstal·lar fins que no s\'elimini aquest permís.</string>
|
||||
<string name="lock_device_admin_warning">Desactivant el permís d\'administració es desactivarà la funció de toc doble per a bloquejar la pantalla.</string>
|
||||
</resources>
|
||||
<string name="auto_show_keyboard_in_app_drawer">Mostra automàticament el teclat al calaix</string>
|
||||
</resources>
|
||||
|
||||
@@ -17,4 +17,5 @@
|
||||
<string name="lock_device_admin_hint">Chcete-li povolit funkci zamykání obrazovky dvojitým klepnutím, musíte udělit oprávnění správce. Upozornění: aplikaci nelze odinstalovat, dokud toto oprávnění neodeberete.</string>
|
||||
<string name="lock_device_admin_warning">Deaktivací oprávnění správce zakážete funkci zamykání obrazovky dvojitým klepnutím.</string>
|
||||
<string name="double_tap_to_lock">Klepněte dvakrát pro zamknutí obrazovky</string>
|
||||
</resources>
|
||||
<string name="auto_show_keyboard_in_app_drawer">Automaticky zobrazit klávesnici v seznamu aplikací</string>
|
||||
</resources>
|
||||
|
||||
@@ -17,4 +17,5 @@
|
||||
<string name="lock_device_admin_hint">Um die Funktion „Doppeltes Antippen zum Sperren des Bildschirms“ zu aktivieren, musst du die Administratorberechtigung erteilen. Beachte, dass die App nicht deinstalliert werden kann, bis diese Berechtigung entfernt wird.</string>
|
||||
<string name="double_tap_to_lock">Doppeltes Antippen zum Sperren des Bildschirms</string>
|
||||
<string name="lock_device_admin_warning">Durch Entfernen der Administratorberechtigung wird die Funktion „Doppeltes Antippen zum Sperren des Bildschirms“ deaktiviert.</string>
|
||||
</resources>
|
||||
<string name="auto_show_keyboard_in_app_drawer">Keyboard automatisch in App-Schublade anzeigen</string>
|
||||
</resources>
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
<string name="app_launcher_name">Εκκινητής</string>
|
||||
<string name="launcher_settings">Ρυθμίσεις Εκκινητή</string>
|
||||
<string name="app_info">Πληροφορίες εφαρμογής</string>
|
||||
<string name="touch_hold_widget">Παρατεταμένο άγγιγμα στο Γραφικό και σύρετέ το στην αρχική σας οθόνη.</string>
|
||||
<string name="touch_hold_widget">Πατήστε παρατεταμένα το γραφικό στοιχείο και σύρετέ το στην αρχική οθόνη</string>
|
||||
<string name="uninstall">Απεγκατάσταση</string>
|
||||
<string name="hide_icon">Απόκρυψη εικονιδίου</string>
|
||||
<string name="add_hidden_icons">Προσθήκη κρυφών εικονιδίων</string>
|
||||
@@ -14,4 +14,7 @@
|
||||
<string name="close_app_drawer_on_app_open">Κλείστε το συρτάρι εφαρμογών κατά το άνοιγμα μιας εφαρμογής</string>
|
||||
<string name="home_screen_settings">Αρχική οθόνη</string>
|
||||
<string name="widget_too_big">Το γραφικό είναι πολύ μεγάλο για το τρέχον μέγεθος της αρχικής οθόνης</string>
|
||||
<string name="lock_device_admin_hint">Για να ενεργοποιήσετε τη λειτουργία διπλής βρύσης για κλείδωμα οθόνης, πρέπει να παραχωρήσετε άδεια διαχειριστή. Λάβετε υπόψη ότι δεν είναι δυνατή η κατάργηση εγκατάστασης της εφαρμογής μέχρι να καταργηθεί αυτή η άδεια.</string>
|
||||
<string name="double_tap_to_lock">Διπλό πάτημα για κλείδωμα οθόνης</string>
|
||||
<string name="lock_device_admin_warning">Η απενεργοποίηση της άδειας διαχειριστή θα απενεργοποιήσει τη λειτουργία διπλής βρύσης για κλείδωμα οθόνης.</string>
|
||||
</resources>
|
||||
|
||||
@@ -15,4 +15,6 @@
|
||||
<string name="widget_too_big">El widget es demasiado grande para el tamaño actual de la pantalla de inicio</string>
|
||||
<string name="home_screen_settings">Pantalla de inicio</string>
|
||||
<string name="double_tap_to_lock">Toca dos veces para bloquear la pantalla</string>
|
||||
<string name="lock_device_admin_warning">Al desactivar el permiso de administrador se desactivará la función de doble toque para bloquear la pantalla.</string>
|
||||
<string name="lock_device_admin_hint">Para activar la función de doble toque para bloquear la pantalla, debes conceder un permiso de administrador. Tenga en cuenta que la aplicación no se puede desinstalar hasta que se elimine este permiso.</string>
|
||||
</resources>
|
||||
|
||||
@@ -11,4 +11,10 @@
|
||||
<string name="hidden_icons">Piilotetut kuvakkeet</string>
|
||||
<string name="hidden_icons_placeholder">Joitakin sovelluksia ei ole järjestelmärajoitusten vuoksi mahdollista poistaa, mutta voit kuitenkin piilottaa niiden kuvakkeet näkyvistä.</string>
|
||||
<string name="widget_too_big">Vimpain on liian suuri nykyiseen aloitusnäytön kokoon</string>
|
||||
<string name="home_screen_settings">Kotinäyttö</string>
|
||||
<string name="close_app_drawer_on_app_open">Sulje sovellusvedin, kun uusi sovellus avataan</string>
|
||||
<string name="app_drawer_settings">Sovellusvedin</string>
|
||||
<string name="lock_device_admin_hint">Näytön kaksoisnapautuslukitus vaatii pääkäyttäjäoikeuksia. Huomio, että sovellusta ei voida poistaa, ennen kuin tämä oikeus on poistettu.</string>
|
||||
<string name="double_tap_to_lock">Kaksoisnapauta lukitaksesi näytön</string>
|
||||
<string name="lock_device_admin_warning">Pääkäyttäjäoikeuden poiskytkentä, estää kaksoisnapautuslukituksen toiminnan.</string>
|
||||
</resources>
|
||||
|
||||
@@ -14,4 +14,7 @@
|
||||
<string name="close_app_drawer_on_app_open">ऐप खोलने पर ऐप ड्रॉअर बंद कर दें</string>
|
||||
<string name="home_screen_settings">होम स्क्रीन</string>
|
||||
<string name="widget_too_big">वर्तमान होम स्क्रीन आकार के लिए विजेट बहुत बड़ा है</string>
|
||||
<string name="lock_device_admin_hint">स्क्रीन लॉक करने के लिए डबल-टैप करने वाले फीचर को सक्षम करने के लिए प्रशासनिक अनुमति आवश्यक है। ध्यान रखें कि ये ऐप अनइंस्टॉल नहीं हो पाएगा जब तक ये अनुमति रहेगी।</string>
|
||||
<string name="double_tap_to_lock">स्क्रीन लॉक करने के लिए डबल टैप करें</string>
|
||||
<string name="lock_device_admin_warning">प्रशासनिक अनुमतियाँ हटाये जाने पर डबल-टैप स्क्रीन लॉक सुविधा अक्षम हो जायेगी।</string>
|
||||
</resources>
|
||||
|
||||
@@ -2,10 +2,10 @@
|
||||
<resources>
|
||||
<string name="app_launcher_name">משגר</string>
|
||||
<string name="launcher_settings">הגדרות משגר</string>
|
||||
<string name="app_info">מידע על האפליקציה</string>
|
||||
<string name="app_info">פרטי אפליקציה</string>
|
||||
<string name="touch_hold_widget">לחיצה ארוכה על הווידג\'ט וגרירה שלו במסך הראשי</string>
|
||||
<string name="uninstall">הסרה</string>
|
||||
<string name="hide_icon">החבא אייקון</string>
|
||||
<string name="hide_icon">הסתר אייקון</string>
|
||||
<string name="add_hidden_icons">הוסף אייקונים נסתרים</string>
|
||||
<string name="manage_hidden_icons">ניהול אייקונים נסתרים</string>
|
||||
<string name="hidden_icons">אייקונים נסתרים</string>
|
||||
|
||||
@@ -1,2 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources></resources>
|
||||
<resources>
|
||||
<string name="app_launcher_name">Покренувач</string>
|
||||
</resources>
|
||||
|
||||
@@ -17,4 +17,5 @@
|
||||
<string name="double_tap_to_lock">Naciśnij dwukrotnie, aby zablokować ekran</string>
|
||||
<string name="lock_device_admin_hint">Aby włączyć funkcję dwukrotnego naciśnięcia w celu zablokowania ekranu, musisz udzielić uprawnienia administratora. Uwaga: aplikacja nie może zostać odinstalowana, dopóki to uprawnienie nie zostanie usunięte.</string>
|
||||
<string name="lock_device_admin_warning">Dezaktywacja uprawnienia administratora spowoduje wyłączenie funkcji dwukrotnego naciśnięcia w celu zablokowania ekranu.</string>
|
||||
</resources>
|
||||
<string name="auto_show_keyboard_in_app_drawer">Automatycznie pokazuj klawiaturę w szufladzie</string>
|
||||
</resources>
|
||||
|
||||
@@ -13,5 +13,8 @@
|
||||
<string name="close_app_drawer_on_app_open">Fechar gaveta de aplicativos ao abrir um aplicativo</string>
|
||||
<string name="home_screen_settings">Tela inicial</string>
|
||||
<string name="widget_too_big">O widget é muito grande para o tamanho atual da tela inicial</string>
|
||||
<string name="app_launcher_name">Launcher</string>
|
||||
</resources>
|
||||
<string name="app_launcher_name">Iniciador</string>
|
||||
<string name="double_tap_to_lock">Toque duas vezes para bloquear a tela</string>
|
||||
<string name="lock_device_admin_hint">Para habilitar o recurso de toque duplo para bloquear a tela, você precisa conceder permissão de administrador. Observe que o aplicativo não pode ser desinstalado até que essa permissão seja removida.</string>
|
||||
<string name="lock_device_admin_warning">Desativar a permissão de administrador desabilitará o recurso de toque duplo para bloquear a tela.</string>
|
||||
</resources>
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
<string name="hidden_icons_placeholder">Some apps cannot be uninstalled due to system restrictions, but you can at least hide their icons to avoid seeing them.</string>
|
||||
<string name="app_drawer_settings">App drawer</string>
|
||||
<string name="close_app_drawer_on_app_open">Close app drawer on opening an app</string>
|
||||
<string name="auto_show_keyboard_in_app_drawer">Automatically show keyboard in drawer</string>
|
||||
<string name="home_screen_settings">Home screen</string>
|
||||
<string name="widget_too_big">Widget is too big for current home screen size</string>
|
||||
<string name="double_tap_to_lock">Double tap to lock screen</string>
|
||||
|
||||
58
detekt.yml
Normal file
58
detekt.yml
Normal file
@@ -0,0 +1,58 @@
|
||||
build:
|
||||
maxIssues: 0
|
||||
weights:
|
||||
complexity: 2
|
||||
LongParameterList: 2
|
||||
style: 1
|
||||
|
||||
processors:
|
||||
active: true
|
||||
exclude:
|
||||
- "FunctionCountProcessor"
|
||||
- "PropertyCountProcessor"
|
||||
|
||||
config:
|
||||
validation: true
|
||||
|
||||
complexity:
|
||||
LongParameterList:
|
||||
active: true
|
||||
functionThreshold: 10
|
||||
constructorThreshold: 8
|
||||
ignoreDefaultParameters: true
|
||||
ignoreAnnotated:
|
||||
- "Composable"
|
||||
LongMethod:
|
||||
active: true
|
||||
threshold: 120
|
||||
ignoreAnnotated:
|
||||
- "Composable"
|
||||
- "Preview"
|
||||
|
||||
style:
|
||||
MagicNumber:
|
||||
active: true
|
||||
ignoreAnnotated: ["Composable"]
|
||||
ignoreEnums: true
|
||||
ignoreNumbers: ["-1", "0", "1", "2", "42", "1000"]
|
||||
MaxLineLength:
|
||||
active: true
|
||||
maxLineLength: 120
|
||||
excludePackageStatements: true
|
||||
excludeImportStatements: true
|
||||
|
||||
naming:
|
||||
FunctionNaming:
|
||||
active: true
|
||||
ignoreAnnotated: ["Composable", "Preview"]
|
||||
functionPattern: "[a-z][A-Za-z0-9]*"
|
||||
|
||||
Compose: # io.nlopez.compose.rules
|
||||
ComposableParametersOrdering:
|
||||
active: true
|
||||
ModifierDefaultValue:
|
||||
active: true
|
||||
MissingModifierDefaultValue:
|
||||
active: true
|
||||
PublicComposablePreview:
|
||||
active: true
|
||||
@@ -1,38 +1,12 @@
|
||||
# This file contains the fastlane.tools configuration
|
||||
# You can find the documentation at https://docs.fastlane.tools
|
||||
#
|
||||
# For a list of all available actions, check out
|
||||
#
|
||||
# https://docs.fastlane.tools/actions
|
||||
#
|
||||
# For a list of all available plugins, check out
|
||||
#
|
||||
# https://docs.fastlane.tools/plugins/available-plugins
|
||||
#
|
||||
|
||||
# Uncomment the line if you want fastlane to automatically update itself
|
||||
# update_fastlane
|
||||
|
||||
default_platform(:android)
|
||||
|
||||
platform :android do
|
||||
desc "Runs all the tests"
|
||||
lane :test do
|
||||
gradle(task: "test")
|
||||
end
|
||||
desc 'Run unit & instrumentation tests'
|
||||
lane(:test) { test_android }
|
||||
|
||||
desc "Submit a new Beta Build to Crashlytics Beta"
|
||||
lane :beta do
|
||||
gradle(task: "clean assembleRelease")
|
||||
crashlytics
|
||||
|
||||
# sh "your_script.sh"
|
||||
# You can also use other beta testing services here
|
||||
end
|
||||
desc 'Build & deploy AAB to Google Play (includes metadata)'
|
||||
lane(:deploy) { deploy_android }
|
||||
|
||||
desc "Deploy a new version to the Google Play"
|
||||
lane :deploy do
|
||||
gradle(task: "clean assembleRelease")
|
||||
upload_to_play_store
|
||||
end
|
||||
desc 'Push Play Store metadata'
|
||||
lane(:metadata) { metadata_android }
|
||||
end
|
||||
|
||||
48
fastlane/README.md
Normal file
48
fastlane/README.md
Normal file
@@ -0,0 +1,48 @@
|
||||
fastlane documentation
|
||||
----
|
||||
|
||||
# Installation
|
||||
|
||||
Make sure you have the latest version of the Xcode command line tools installed:
|
||||
|
||||
```sh
|
||||
xcode-select --install
|
||||
```
|
||||
|
||||
For _fastlane_ installation instructions, see [Installing _fastlane_](https://docs.fastlane.tools/#installing-fastlane)
|
||||
|
||||
# Available Actions
|
||||
|
||||
## Android
|
||||
|
||||
### android test
|
||||
|
||||
```sh
|
||||
[bundle exec] fastlane android test
|
||||
```
|
||||
|
||||
Run unit & instrumentation tests
|
||||
|
||||
### android deploy
|
||||
|
||||
```sh
|
||||
[bundle exec] fastlane android deploy
|
||||
```
|
||||
|
||||
Build & deploy AAB to Google Play (includes metadata)
|
||||
|
||||
### android metadata
|
||||
|
||||
```sh
|
||||
[bundle exec] fastlane android metadata
|
||||
```
|
||||
|
||||
Push Play Store metadata
|
||||
|
||||
----
|
||||
|
||||
This README.md is auto-generated and will be re-generated every time [_fastlane_](https://fastlane.tools) is run.
|
||||
|
||||
More information about _fastlane_ can be found on [fastlane.tools](https://fastlane.tools).
|
||||
|
||||
The documentation of _fastlane_ can be found on [docs.fastlane.tools](https://docs.fastlane.tools).
|
||||
@@ -1 +0,0 @@
|
||||
* প্রাথমিক প্রকাশ
|
||||
@@ -1 +0,0 @@
|
||||
* Llançament inicial
|
||||
@@ -1,4 +0,0 @@
|
||||
* S'han corregit problemes de rendiment de desplaçament
|
||||
* S'han corregit diversos problemes relacionats amb els ginys
|
||||
* Altres correccions d'errors i millores menors
|
||||
* S'han afegit més traduccions
|
||||
@@ -1 +0,0 @@
|
||||
Fossify Launcher
|
||||
@@ -1 +0,0 @@
|
||||
* Prvotní vydání
|
||||
@@ -1,4 +0,0 @@
|
||||
* Opraveny problémy s výkonem při posunu
|
||||
* Opraveny různé problémy týkající se widgetů
|
||||
* Další menší opravy chyb a vylepšení
|
||||
* Přidány další překlady
|
||||
@@ -1 +0,0 @@
|
||||
Launcher Fossify
|
||||
@@ -1 +0,0 @@
|
||||
* Erste Veröffentlichung
|
||||
@@ -1,4 +0,0 @@
|
||||
* Probleme mit der Scroll-Performance behoben
|
||||
* Verschiedene Probleme im Zusammenhang mit Widgets behoben
|
||||
* Weitere kleinere Fehlerbehebungen und Verbesserungen
|
||||
* Weitere Übersetzungen hinzugefügt
|
||||
@@ -1 +0,0 @@
|
||||
Fossify Launcher
|
||||
7
fastlane/metadata/android/en-US/changelogs/4.txt
Normal file
7
fastlane/metadata/android/en-US/changelogs/4.txt
Normal file
@@ -0,0 +1,7 @@
|
||||
Changed:
|
||||
|
||||
• Updated translations
|
||||
|
||||
Removed:
|
||||
|
||||
• Removed redundant launcher settings icon from the app drawer
|
||||
8
fastlane/metadata/android/en-US/changelogs/5.txt
Normal file
8
fastlane/metadata/android/en-US/changelogs/5.txt
Normal file
@@ -0,0 +1,8 @@
|
||||
Changed:
|
||||
|
||||
• Updated translations
|
||||
|
||||
Fixed:
|
||||
|
||||
• Clicking home screen app labels now works as expected
|
||||
|
||||
8
fastlane/metadata/android/en-US/changelogs/6.txt
Normal file
8
fastlane/metadata/android/en-US/changelogs/6.txt
Normal file
@@ -0,0 +1,8 @@
|
||||
Changed:
|
||||
|
||||
• Updated translations
|
||||
|
||||
Fixed:
|
||||
|
||||
• Addressed frequently occurring crashes
|
||||
|
||||
4
fastlane/metadata/android/en-US/changelogs/7.txt
Normal file
4
fastlane/metadata/android/en-US/changelogs/7.txt
Normal file
@@ -0,0 +1,4 @@
|
||||
Fixed:
|
||||
|
||||
• Addressed crash on startup due to widgets
|
||||
|
||||
8
fastlane/metadata/android/en-US/changelogs/8.txt
Normal file
8
fastlane/metadata/android/en-US/changelogs/8.txt
Normal file
@@ -0,0 +1,8 @@
|
||||
Added:
|
||||
|
||||
• Option to show keyboard automatically in app drawer
|
||||
|
||||
Changed:
|
||||
|
||||
• Updated translations
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
Fossify Lanĉilo
|
||||
@@ -1 +0,0 @@
|
||||
* Versión inicial
|
||||
@@ -1 +0,0 @@
|
||||
Fossify Launcher
|
||||
@@ -1 +0,0 @@
|
||||
* Esmane versioon
|
||||
@@ -1,4 +0,0 @@
|
||||
* Parandasime jõudlusvead kerimisel
|
||||
* Parandasime erinevad vidinate vead
|
||||
* Muud väiksemad veaparandused ja täiendused
|
||||
* Lisasime veel tõlkeid
|
||||
@@ -1 +0,0 @@
|
||||
Fossify käivitaja
|
||||
@@ -1 +0,0 @@
|
||||
* Version initiale
|
||||
@@ -1,4 +0,0 @@
|
||||
* Correction des problèmes de performances de défilement
|
||||
* Correction de divers problèmes liés aux widgets
|
||||
* Autres corrections de bugs et améliorations mineures
|
||||
* Ajout de traductions supplémentaires
|
||||
@@ -10,7 +10,7 @@ Gérez facilement vos applications en les masquant ou en les désinstallant en q
|
||||
<b>🔒 CONFIDENTIALITÉ ET SÉCURITÉ :</b><br>
|
||||
Votre vie privée est au cœur de Fossify Launcher. Sans accès à Internet et sans autorisations intrusives, vos données restent avec vous. Pas de suivi, pas de publicités : juste un lanceur conçu pour respecter votre vie privée.<br><br>
|
||||
<b>🌐 ASSURANCE OPEN SOURCE :</b><br>
|
||||
Fossify Launcher est construit sur une base open source, vous permettant de consulter notre code sur GitHub, favorisant la confiance et une communauté engagée en faveur de la confidentialité.<br><br>
|
||||
Fossify Launcher est construit sur une base open source, qui vous permet de consulter notre code sur GitHub, favorisant la confiance et une communauté engagée en faveur de la confidentialité.<br><br>
|
||||
Trouvez votre équilibre entre vitesse, personnalisation et confidentialité avec Fossify Launcher.<br><br>
|
||||
Découvrez d'autres applications Fossify : https://www.fossify.org<br>
|
||||
Code open source : https://www.github.com/FossifyOrg<br>
|
||||
|
||||
@@ -1 +1 @@
|
||||
Personnalisez votre écran d'accueil avec un lanceur rapide, sans pubs, et open-source
|
||||
Paramétrez votre écran d'accueil avec un lanceur rapide, sans pub, open-source
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
Fossify Lanceur
|
||||
@@ -1 +0,0 @@
|
||||
* Eisiúint tosaigh
|
||||
@@ -1,4 +0,0 @@
|
||||
* Saincheisteanna feidhmíochta scrollaithe seasta
|
||||
* Socraithe saincheisteanna éagsúla a bhaineann le giuirléidí
|
||||
* Ceartúcháin agus feabhsuithe beaga eile ar fhabht
|
||||
* Cuireadh tuilleadh aistriúcháin leis
|
||||
@@ -1 +0,0 @@
|
||||
Fossify Launcher
|
||||
@@ -1 +0,0 @@
|
||||
* Versión inicial
|
||||
@@ -1 +0,0 @@
|
||||
Fossify Launcher
|
||||
@@ -1 +0,0 @@
|
||||
* Rilis awal
|
||||
@@ -1 +0,0 @@
|
||||
* Versione iniziale
|
||||
@@ -1,4 +0,0 @@
|
||||
* Risolti i problemi di performance dello scrolling
|
||||
* Risolti vari problemi relativi ai widget
|
||||
* Altre correzioni e miglioramenti minori
|
||||
* Aggiunta di altre traduzioni
|
||||
@@ -1 +0,0 @@
|
||||
Launcher Fossify
|
||||
18
fastlane/metadata/android/iw-IL/full_description.txt
Normal file
18
fastlane/metadata/android/iw-IL/full_description.txt
Normal file
@@ -0,0 +1,18 @@
|
||||
Fossify משגר הוא השער שלך לחווית מסך בית מהירה, מותאמת אישית ששומרת על פרטיותך. ללא פרסומות, בלי עומס – רק משגר חלק ויעיל שנועד להתאים לסגנון ולהעדפות הייחודיות שלך.<br><br>
|
||||
<b>🚀 ניווט מהיר כברק:</b><br>
|
||||
נווט במכשיר שלך במהירות ובדיוק. Fossify משגר מותאם להיות רספונסיבי וזורם, ומעניק לך גישה מיידית לאפליקציות המועדפות עליך ללא השהיה.<br><br>
|
||||
<b>🎨 התאמה אישית מלאה:</b><br>
|
||||
עצב את מסך הבית שלך עם ערכות נושא דינמיות, צבעים מותאמים אישית ופריסות. התאם אישית את המשגר שלך כדי להתאים לסגנון שלך באמצעות כלים קלים לשימוש המאפשרים לך ליצור הגדרה ייחודית באמת.<br><br>
|
||||
<b>🖼️ תמיכה מלאה בווידג'טים:</b><br>
|
||||
שלב ווידג'טים הניתנים לשינוי גודל בקלות. בין אם אתה צריך שעונים, לוחות שנה או כלים שימושיים אחרים, Fossify Launcher מבטיח שהם ישתלבו בצורה חלקה בעיצוב מסך הבית שלך.<br><br>
|
||||
<b>📱 ללא עומס מיותר:</b><br>
|
||||
נהל את האפליקציות שלך ללא מאמץ על ידי הסתרתן או הסרתן בכמה לחיצות בלבד, ושמור על מסך הבית שלך מאורגן ונקי מעומס.<br><br>
|
||||
<b>🔒 פרטיות ואבטחה:</b><br>
|
||||
הפרטיות שלך היא לב ליבו של Fossify Launcher. ללא גישה לאינטרנט וללא הרשאות חודרניות, הנתונים שלך נשארים איתך. ללא מעקב, ללא פרסומות – רק משגר שנבנה כדי לכבד את פרטיותך.<br><br>
|
||||
<b>🌐 הבטחה בקוד פתוח:</b><br>
|
||||
Fossify משגר בנוי על בסיס קוד פתוח, המאפשר לך לסקור את הקוד שלנו ב-GitHub, ומטפח אמון וקהילה המחויבת לפרטיות.<br><br>
|
||||
מצא את האיזון שלך בין מהירות, התאמה אישית ופרטיות עם Fossify Launcher.<br><br>
|
||||
חקור עוד אפליקציות Fossify: https://www.fossify.org<br>
|
||||
קוד פתוח: https://www.github.com/FossifyOrg<br>
|
||||
הצטרף לקהילה ב-Reddit: https://www.reddit.com/r/Fossify<br>
|
||||
התחבר בטלגרם: https://t.me/Fossify<br>
|
||||
1
fastlane/metadata/android/iw-IL/short_description.txt
Normal file
1
fastlane/metadata/android/iw-IL/short_description.txt
Normal file
@@ -0,0 +1 @@
|
||||
התאם אישית את מסך הבית שלך עם משגר מהיר, ללא פרסומות, ובקוד פתוח
|
||||
@@ -1 +0,0 @@
|
||||
Fossify Launcher
|
||||
@@ -1 +0,0 @@
|
||||
Fossify Launcher
|
||||
19
fastlane/metadata/android/ru-RU/full_description.txt
Normal file
19
fastlane/metadata/android/ru-RU/full_description.txt
Normal file
@@ -0,0 +1,19 @@
|
||||
Лаунчер Fossify — это ваш способ быстрого, персонализированного и приватному домашнему экрану. Без рекламы, никаких излишеств — просто плавный, эффективный лаунчер, разработанный с учётом вашего уникального стиля и предпочтений.<br><br>
|
||||
|
||||
<b>🚀 LIGHTNING-FAST NAVIGATION:</b><br>
|
||||
Navigate your device with speed and precision. Fossify Launcher is optimized to be responsive and fluid, giving you instant access to your favorite apps without lag.<br><br>
|
||||
<b>🎨 FULL CUSTOMIZATION:</b><br>
|
||||
Tailor your home screen with dynamic themes, custom colors, and layouts. Personalize your launcher to match your style with easy-to-use tools that let you create a truly unique setup.<br><br>
|
||||
<b>🖼️ COMPLETE WIDGET SUPPORT:</b><br>
|
||||
Integrate fully resizable widgets with ease. Whether you need clocks, calendars, or other handy tools, Fossify Launcher ensures they blend seamlessly into your home screen design.<br><br>
|
||||
<b>📱 NO UNWANTED CLUTTER:</b><br>
|
||||
Effortlessly manage your apps by hiding or uninstalling them in just a few taps, keeping your home screen organized and clutter-free.<br><br>
|
||||
<b>🔒 PRIVACY AND SECURITY:</b><br>
|
||||
Your privacy is at the heart of Fossify Launcher. With no internet access and no intrusive permissions, your data stays with you. No tracking, no ads – just a launcher built to respect your privacy.<br><br>
|
||||
<b>🌐 OPEN-SOURCE ASSURANCE:</b><br>
|
||||
Fossify Launcher is built on an open-source foundation, allowing you to review our code on GitHub, fostering trust and a community committed to privacy.<br><br>
|
||||
Find your balance of speed, customization, and privacy with Fossify Launcher.<br><br>
|
||||
Ознакомьтесь с другими приложениями от Fossify: https://www.fossify.org
|
||||
Исходный код: https://www.github.com/FossifyOrg
|
||||
Присоединяйтесь к сообществу на Reddit: https://www.reddit.com/r/Fossify
|
||||
Подключайтесь в Telegram: https://t.me/Fossify
|
||||
1
fastlane/metadata/android/ru-RU/short_description.txt
Normal file
1
fastlane/metadata/android/ru-RU/short_description.txt
Normal file
@@ -0,0 +1 @@
|
||||
Настройте домашний экран с быстрым, безрекламным и свободным лаунчером
|
||||
@@ -1 +0,0 @@
|
||||
* Initial version
|
||||
@@ -1 +0,0 @@
|
||||
Fossify Launcher
|
||||
@@ -1 +0,0 @@
|
||||
* İlk sürüm
|
||||
@@ -1,4 +0,0 @@
|
||||
* Kaydırma performansı hataları düzeltildi
|
||||
* Widget'larla ilgili çeşitli sorunları düzeltti
|
||||
* Diğer küçük hata düzeltmeleri ve iyileştirmeleri
|
||||
* Daha fazla çeviri eklendi
|
||||
@@ -1 +0,0 @@
|
||||
Fossify Başlatıcı
|
||||
@@ -1 +0,0 @@
|
||||
* Початковий випуск
|
||||
@@ -1,4 +0,0 @@
|
||||
* Виправлено проблеми зі швидкістю прокрутки
|
||||
* Виправлено різні проблеми, пов'язані з віджетами
|
||||
* Інші незначні виправлення та покращення
|
||||
* Додано більше перекладів
|
||||
@@ -1 +0,0 @@
|
||||
Fossify Лаунчер
|
||||
@@ -1 +0,0 @@
|
||||
* 首次发布
|
||||
@@ -1 +0,0 @@
|
||||
Fossify 启动器
|
||||
@@ -1 +0,0 @@
|
||||
Fossify 啟動器
|
||||
@@ -3,3 +3,8 @@ android.useAndroidX=true
|
||||
android.nonTransitiveRClass=true
|
||||
|
||||
org.gradle.jvmargs=-Xmx4096M
|
||||
|
||||
# Versioning
|
||||
VERSION_NAME=1.2.0
|
||||
VERSION_CODE=8
|
||||
APP_ID=org.fossify.home
|
||||
|
||||
@@ -1,31 +1,30 @@
|
||||
[versions]
|
||||
#jetbrains
|
||||
kotlin = "1.9.25"
|
||||
kotlin = "2.2.0"
|
||||
#KSP
|
||||
ksp = "1.9.25-1.0.20"
|
||||
ksp = "2.2.0-2.0.2"
|
||||
#Detekt
|
||||
detekt = "1.23.3"
|
||||
detekt = "1.23.8"
|
||||
detektCompose = "0.4.22"
|
||||
#Room
|
||||
room = "2.6.1"
|
||||
room = "2.7.2"
|
||||
#Fossify
|
||||
commons = "8038e3277e"
|
||||
commons = "4.3.0"
|
||||
#Gradle
|
||||
gradlePlugins-agp = "8.7.3"
|
||||
gradlePlugins-agp = "8.11.1"
|
||||
#build
|
||||
app-build-compileSDKVersion = "34"
|
||||
app-build-targetSDK = "34"
|
||||
app-build-minimumSDK = "26"
|
||||
app-build-javaVersion = "VERSION_17"
|
||||
app-build-kotlinJVMTarget = "17"
|
||||
#versioning
|
||||
app-version-appId = "org.fossify.home"
|
||||
app-version-versionCode = "3"
|
||||
app-version-versionName = "1.1.0"
|
||||
[libraries]
|
||||
#Room
|
||||
androidx-room-runtime = { module = "androidx.room:room-runtime", version.ref = "room" }
|
||||
androidx-room-ktx = { module = "androidx.room:room-ktx", version.ref = "room" }
|
||||
androidx-room-compiler = { module = "androidx.room:room-compiler", version.ref = "room" }
|
||||
#Compose
|
||||
compose-detekt = { module = "io.nlopez.compose.rules:detekt", version.ref = "detektCompose" }
|
||||
#Fossify
|
||||
fossify-commons = { module = "org.fossify:commons", version.ref = "commons" }
|
||||
[bundles]
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user