Bug 1580356 - Remove Fennec (Firefox for Android). r=snorp,mshal

This does many things:

1) stops producing (and consuming) `FennecJNI*` JNI wrappers
2) removes the :app and :thirdparty Gradle projects
3) removes relevant pieces of the Gradle target configuration
4) updates lints
5) purges old configurations

After this commit, the `mobile/android` project/application builds
only GeckoView.

Differential Revision: https://phabricator.services.mozilla.com/D46536

--HG--
extra : moz-landing-system : lando
This commit is contained in:
Nick Alexander 2019-10-04 20:55:11 +00:00
Родитель 116ce05f35
Коммит c46ec74815
3455 изменённых файлов: 120 добавлений и 392763 удалений

Просмотреть файл

@ -140,7 +140,6 @@ media/webrtc/trunk/.*
mfbt/double-conversion/double-conversion/.*
mfbt/lz4/.*
mobile/android/geckoview/src/thirdparty/.*
mobile/android/thirdparty/.*
modules/brotli/.*
modules/fdlibm/.*
modules/freetype2/.*

Просмотреть файл

@ -157,26 +157,6 @@ class MachExec extends Exec {
}
}
task machBuildGeneratedAndroidCodeAndResources(type: MachExec) {
onlyIf rootProject.ext.geckoBinariesOnlyIf
workingDir "${topsrcdir}"
commandLine mozconfig.substs.PYTHON
args "${topsrcdir}/mach"
args 'build'
args 'mobile/android/base/generated_android_code_and_resources'
// Add `-v` if we're running under `--info` (or `--debug`).
if (project.logger.isEnabled(LogLevel.INFO)) {
args '-v'
}
// `path` is like `:machBuildGeneratedAndroidCodeAndResources`.
standardOutput = new TaggedLogOutputStream("${path}>", logger)
errorOutput = standardOutput
}
// Why |mach build mobile/android/base/...| and |mach build faster|? |mach
// build faster| generates dependentlibs.list, which in turn depends on compiled
// code. That causes a circular dependency between Java compilation/JNI wrapper
@ -243,43 +223,21 @@ createMachStagePackageTask("machStagePackageForGeckoview").with {
afterEvaluate {
subprojects { project ->
if (project.name != 'thirdparty') {
tasks.withType(JavaCompile) {
// Add compiler args for all code except third-party code.
options.compilerArgs += [
// Turn on all warnings, except...
"-Xlint:all",
// Deprecation, because we do use deprecated API for compatibility.
"-Xlint:-deprecation",
// Serial, because we don't use Java serialization.
"-Xlint:-serial",
// Classfile, because javac has a bug with MethodParameters attributes
// with Java 7. https://bugs.openjdk.java.net/browse/JDK-8190452
"-Xlint:-classfile",
// Turn all remaining warnings into errors,
// unless marked by @SuppressWarnings.
"-Werror"]
}
if (project.name == 'app') {
tasks.withType(JavaCompile) {
// Turn off classfile warnings because upon updating to play services 15.0.0
// a warning is being thrown from play-services-base which fails the build
// (com/google/android/gms/common/api/GoogleApiClient.class):
// warning: Cannot find annotation method 'value()' in type 'GuardedBy':
// class file for javax.annotation.concurrent.GuardedBy not found
options.compilerArgs += ["-Xlint:-classfile"]
}
}
}
if (!hasProperty('android')) {
return
}
android.applicationVariants.all {
preBuild.dependsOn rootProject.machBuildGeneratedAndroidCodeAndResources
}
android.libraryVariants.all {
preBuild.dependsOn rootProject.machBuildGeneratedAndroidCodeAndResources
tasks.withType(JavaCompile) {
// Add compiler args for all code except third-party code.
options.compilerArgs += [
// Turn on all warnings, except...
"-Xlint:all",
// Deprecation, because we do use deprecated API for compatibility.
"-Xlint:-deprecation",
// Serial, because we don't use Java serialization.
"-Xlint:-serial",
// Classfile, because javac has a bug with MethodParameters attributes
// with Java 7. https://bugs.openjdk.java.net/browse/JDK-8190452
"-Xlint:-classfile",
// Turn all remaining warnings into errors,
// unless marked by @SuppressWarnings.
"-Werror"]
}
}
}
@ -311,9 +269,5 @@ idea {
excludeDirs += files(file(topobjdir).listFiles())
excludeDirs -= file("${topobjdir}/gradle")
}
if (!mozconfig.substs.MOZ_INSTALL_TRACKING) {
excludeDirs += file("${topsrcdir}/mobile/android/thirdparty/com/adjust")
}
}
}

Просмотреть файл

@ -171,8 +171,7 @@ accessible/xpcom/export: xpcom/xpidl/export
widget/android/bindings/export: mobile/android/base/export
# The widget JNI wrapper generator code needs to build the GeckoView
# and Fennec source code in order to find JNI wrapper annotations.
widget/android/fennec/export: mobile/android/base/export
# source code in order to find JNI wrapper annotations.
widget/android/export: mobile/android/base/export
# .xpt generation needs the xpidl lex/yacc files

Просмотреть файл

@ -27,7 +27,7 @@
#include "mozilla/dom/nsCSPContext.h"
#ifdef MOZ_WIDGET_ANDROID
# include "FennecJNIWrappers.h"
# include "GeneratedJNIWrappers.h"
#endif
namespace mozilla {
@ -301,52 +301,52 @@ void WaitForLoad(const ClientOpenWindowArgs& aArgs,
#ifdef MOZ_WIDGET_ANDROID
void GeckoViewOpenWindow(const ClientOpenWindowArgs& aArgs,
ClientOpPromise::Private* aPromise) {
ClientOpPromise::Private* aPromise) {
RefPtr<ClientOpPromise::Private> promise = aPromise;
// passes the request to open a new window to GeckoView. Allowing the application
// to decide how to hand the open window request.
auto genericResult = java::GeckoRuntime::ServiceWorkerOpenWindow(aArgs.baseURL(), aArgs.url());
// passes the request to open a new window to GeckoView. Allowing the
// application to decide how to hand the open window request.
auto genericResult =
java::GeckoRuntime::ServiceWorkerOpenWindow(aArgs.baseURL(), aArgs.url());
auto typedResult = java::GeckoResult::LocalRef(std::move(genericResult));
// MozPromise containing the ID for the handling GeckoSession
auto promiseResult = mozilla::MozPromise<nsString, nsString, false>::FromGeckoResult(typedResult);
auto promiseResult =
mozilla::MozPromise<nsString, nsString, false>::FromGeckoResult(
typedResult);
promiseResult->Then(
SystemGroup::EventTargetFor(TaskCategory::Other),
__func__,
[aArgs, promise](nsString sessionId){
SystemGroup::EventTargetFor(TaskCategory::Other), __func__,
[aArgs, promise](nsString sessionId) {
nsresult rv;
nsCOMPtr<nsIWindowWatcher> wwatch =
do_GetService(NS_WINDOWWATCHER_CONTRACTID, &rv);
if (NS_WARN_IF(NS_FAILED(rv))) {
promise->Reject(rv, __func__);
return rv;
}
nsresult rv;
nsCOMPtr<nsIWindowWatcher> wwatch = do_GetService(NS_WINDOWWATCHER_CONTRACTID, &rv);
if (NS_WARN_IF(NS_FAILED(rv))) {
promise->Reject(rv, __func__);
return rv;
}
// Retrieve the window by using the GeckoSession ID. The window is named
// the same as the ID of the GeckoSession it is associated with.
nsCOMPtr<mozIDOMWindowProxy> domWindow;
wwatch->GetWindowByName(sessionId, nullptr, getter_AddRefs(domWindow));
if (!domWindow) {
promise->Reject(NS_ERROR_FAILURE, __func__);
return NS_ERROR_FAILURE;
}
// Retrieve the window by using the GeckoSession ID. The window is named the same as the ID of
// the GeckoSession it is associated with.
nsCOMPtr<mozIDOMWindowProxy> domWindow;
wwatch->GetWindowByName(sessionId, nullptr, getter_AddRefs(domWindow));
if (!domWindow) {
promise->Reject(NS_ERROR_FAILURE, __func__);
return NS_ERROR_FAILURE;
}
nsCOMPtr<nsPIDOMWindowOuter> outerWindow = do_QueryInterface(domWindow);
if (NS_WARN_IF(!outerWindow)) {
promise->Reject(NS_ERROR_FAILURE, __func__);
return NS_ERROR_FAILURE;
}
nsCOMPtr<nsPIDOMWindowOuter> outerWindow = do_QueryInterface(domWindow);
if (NS_WARN_IF(!outerWindow)) {
promise->Reject(NS_ERROR_FAILURE, __func__);
return NS_ERROR_FAILURE;
}
WaitForLoad(aArgs, outerWindow, promise);
return NS_OK;
},
[promise](nsString aResult){
promise->Reject(NS_ERROR_FAILURE, __func__);
}
);
WaitForLoad(aArgs, outerWindow, promise);
return NS_OK;
},
[promise](nsString aResult) {
promise->Reject(NS_ERROR_FAILURE, __func__);
});
}
class LaunchObserver final : public nsIObserver {
@ -410,18 +410,9 @@ RefPtr<ClientOpPromise> ClientOpenWindowInCurrentProcess(
new ClientOpPromise::Private(__func__);
#ifdef MOZ_WIDGET_ANDROID
// If we are on android but aren't Fennec, we must be GeckoView
if (!jni::IsFennec()) {
GeckoViewOpenWindow(aArgs, promise);
return promise.forget();
}
// This fires an intent that will start launching Fennec and foreground it,
// if necessary. We create an observer so that we can determine when
// the launch has completed.
RefPtr<LaunchObserver> launchObserver = LaunchObserver::Create();
java::GeckoApp::LaunchOrBringToFront();
// If we are on Android we are GeckoView.
GeckoViewOpenWindow(aArgs, promise);
return promise.forget();
#endif // MOZ_WIDGET_ANDROID
RefPtr<BrowsingContext> bc;
@ -429,41 +420,6 @@ RefPtr<ClientOpPromise> ClientOpenWindowInCurrentProcess(
nsCOMPtr<nsPIDOMWindowOuter> outerWindow(bc->GetDOMWindow());
#ifdef MOZ_WIDGET_ANDROID
// If we get the NOT_AVAILABLE error that means the browser is still
// launching on android. Use the observer we created above to wait
// until the launch completes and then try to open the window again.
if (rv == NS_ERROR_NOT_AVAILABLE && launchObserver) {
RefPtr<GenericPromise> p = launchObserver->Promise();
p->Then(
SystemGroup::EventTargetFor(TaskCategory::Other), __func__,
[aArgs, promise](bool aResult) {
RefPtr<BrowsingContext> bc;
nsresult rv = OpenWindow(aArgs, getter_AddRefs(bc));
if (NS_WARN_IF(NS_FAILED(rv))) {
promise->Reject(rv, __func__);
return;
}
nsCOMPtr<nsPIDOMWindowOuter> outerWindow(bc->GetDOMWindow());
if (NS_WARN_IF(!outerWindow)) {
promise->Reject(NS_ERROR_FAILURE, __func__);
return;
}
WaitForLoad(aArgs, outerWindow, promise);
},
[promise](nsresult aResult) { promise->Reject(aResult, __func__); });
return promise.forget();
}
// If we didn't get the NOT_AVAILABLE error then there is no need
// wait for the browser to launch. Cancel the observer so that it
// will release.
if (launchObserver) {
launchObserver->Cancel();
}
#endif // MOZ_WIDGET_ANDROID
if (NS_WARN_IF(NS_FAILED(rv))) {
promise->Reject(rv, __func__);
return promise.forget();

Просмотреть файл

@ -34,7 +34,6 @@
#endif
#ifdef MOZ_WIDGET_ANDROID
# include "AndroidDecoderModule.h"
# include "FennecJNIWrappers.h"
# include "GeneratedJNIWrappers.h"
#endif

Просмотреть файл

@ -6,7 +6,7 @@
#include "MediaDrmProxySupport.h"
#include "mozilla/EMEUtils.h"
#include "FennecJNINatives.h"
#include "GeneratedJNINatives.h"
#include "MediaCodec.h" // For MediaDrm::KeyStatus
using namespace mozilla::java;

Просмотреть файл

@ -9,7 +9,7 @@
#include "mozilla/DecryptorProxyCallback.h"
#include "mozilla/Logging.h"
#include "FennecJNIWrappers.h"
#include "GeneratedJNIWrappers.h"
#include "nsString.h"
namespace mozilla {

Просмотреть файл

@ -9,7 +9,7 @@
#include "PlatformEncoderModule.h"
#include "TimeUnits.h"
#include "FennecJNIWrappers.h"
#include "GeneratedJNIWrappers.h"
#include "JavaCallbacksSupport.h"
#include "mozilla/Maybe.h"

Просмотреть файл

@ -6,7 +6,7 @@
#define RemoteDataDecoder_h_
#include "AndroidDecoderModule.h"
#include "FennecJNIWrappers.h"
#include "GeneratedJNIWrappers.h"
#include "SurfaceTexture.h"
#include "TimeUnits.h"
#include "mozilla/Maybe.h"

Просмотреть файл

@ -7,7 +7,6 @@
#include "OSPreferences.h"
#include "mozilla/Preferences.h"
#include "FennecJNIWrappers.h"
#include "GeneratedJNIWrappers.h"
using namespace mozilla::intl;
@ -24,9 +23,7 @@ bool OSPreferences::ReadSystemLocales(nsTArray<nsCString>& aLocaleList) {
// XXX: Notice, this value may be empty on an early read. In that case
// we won't add anything to the return list so that it doesn't get
// cached in mSystemLocales.
auto locales = mozilla::jni::IsFennec()
? java::BrowserLocaleManager::GetLocales()
: java::GeckoAppShell::GetDefaultLocales();
auto locales = java::GeckoAppShell::GetDefaultLocales();
if (locales) {
for (size_t i = 0; i < locales->Length(); i++) {
jni::String::LocalRef locale = locales->GetElement(i);

Просмотреть файл

@ -1,525 +0,0 @@
buildDir "${topobjdir}/gradle/build/mobile/android/app"
apply plugin: 'com.android.application'
apply plugin: 'checkstyle'
apply plugin: 'findbugs'
if (mozconfig.substs.MOZILLA_OFFICIAL) {
apply plugin: 'com.getkeepsafe.dexcount'
}
apply from: "${topsrcdir}/mobile/android/gradle/product_flavors.gradle"
if (mozconfig.substs.MOZILLA_OFFICIAL) {
dexcount {
format = "tree"
}
}
android {
compileSdkVersion project.ext.compileSdkVersion
useLibrary 'android.test.runner'
useLibrary 'android.test.base'
useLibrary 'android.test.mock'
defaultConfig {
targetSdkVersion project.ext.targetSdkVersion
minSdkVersion project.ext.minSdkVersion
manifestPlaceholders = project.ext.manifestPlaceholders
applicationId mozconfig.substs.ANDROID_PACKAGE_NAME
// Used by Robolectric based tests; see TestRunner.
buildConfigField 'String', 'BUILD_DIR', "\"${project.buildDir}\"".tr(File.separator, "/")
vectorDrawables.useSupportLibrary = true
multiDexEnabled true
}
aaptOptions {
// The omnijar is already a compressed file itself and Gecko expects it to be
// STORED within the APK rather than DEFLATED.
noCompress 'ja'
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
dexOptions {
javaMaxHeapSize "6g"
jumboMode = true
}
lintOptions {
abortOnError true
}
buildTypes {
// We have the following difficult situation. Minification (Proguard) is only available per
// Android-Gradle `buildType`. Instrumentation (Robocop) is only available for exactly one
// `buildType` (see Android-Gradle `testBuildType`, which defaults to "debug"). Local
// developers expect to build and run tests against the "debug" build type. Automation
// needs to produce an instrumentation (Robocop) APK against a Fennec APK that will ship.
// (This is very unusual; usually, instrumentation tests do _not_ run against a shipping
// APK.)
//
// Given these constraints, we should not change `testBuildType` to avoid confusing local
// developers. Also, we should not Proguard any "debug" builds, because we don't want local
// developers to incur the cost of Proguard. However, we still need to find a way to
// Proguard a shipping APK and produce an instrumentation (Robocop APK) against it. To
// achieve this, we make "debug" builds Proguard in automation alone. This does have the
// unfortunate side effect of Proguarding the instrumentation (Robocop) APK, but nothing
// uses runtime inspection or class-loading with that APK, so it shouldn't be a problem.
def configureMinifyClosure = {
// Bug 1229269: we can't yet shrinkResources effectively. Be sure
// to use -stripped.ap_ after enabling this.
// shrinkResources true
minifyEnabled true
proguardFile "${topsrcdir}/mobile/android/config/proguard/proguard.cfg"
}
release configureMinifyClosure
if (mozconfig.substs.MOZILLA_OFFICIAL) {
debug configureMinifyClosure
}
def isDebuggable = (!mozconfig.substs.MOZILLA_OFFICIAL) || (mozconfig.substs.NIGHTLY_BUILD && mozconfig.substs.MOZ_DEBUG)
debug {
debuggable isDebuggable
}
release {
debuggable isDebuggable
}
}
project.configureProductFlavors.delegate = it
project.configureProductFlavors()
flavorDimensions "geckoBinaries"
sourceSets {
main {
aidl {
srcDir "${topsrcdir}/mobile/android/base/aidl"
}
java {
srcDir "${topsrcdir}/mobile/android/base/java"
srcDir "${topsrcdir}/mobile/android/services/src/main/java"
if (mozconfig.substs.MOZ_ANDROID_MLS_STUMBLER) {
srcDir "${topsrcdir}/mobile/android/stumbler/java"
}
if (!mozconfig.substs.MOZ_CRASHREPORTER) {
exclude 'org/mozilla/gecko/CrashReporterActivity.java'
exclude 'org/mozilla/gecko/CrashHandlerService.java'
}
if (!mozconfig.substs.MOZ_NATIVE_DEVICES) {
exclude 'org/mozilla/gecko/ChromeCastDisplay.java'
exclude 'org/mozilla/gecko/ChromeCastPlayer.java'
exclude 'org/mozilla/gecko/GeckoMediaPlayer.java'
exclude 'org/mozilla/gecko/GeckoPresentationDisplay.java'
exclude 'org/mozilla/gecko/MediaPlayerManager.java'
exclude 'org/mozilla/gecko/RemotePresentationService.java'
exclude 'org/mozilla/gecko/VirtualPresentation.java'
}
if (mozconfig.substs.MOZ_INSTALL_TRACKING) {
exclude 'org/mozilla/gecko/adjust/StubAdjustHelper.java'
} else {
exclude 'org/mozilla/gecko/adjust/AdjustHelper.java'
}
if (mozconfig.substs.MOZ_ANDROID_MMA) {
exclude 'org/mozilla/gecko/mma/MmaStubImp.java'
} else {
exclude 'org/mozilla/gecko/mma/MmaLeanplumImp.java'
exclude 'org/mozilla/gecko/mma/LeanplumVariables.java'
}
if (!mozconfig.substs.MOZ_ANDROID_GCM) {
exclude 'org/mozilla/gecko/gcm/**/*.java'
exclude 'org/mozilla/gecko/push/**/*.java'
exclude 'org/mozilla/gecko/advertising/**'
}
if (!mozconfig.substs.MOZ_ANDROID_GOOGLE_PLAY_SERVICES) {
exclude 'org/mozilla/gecko/util/WebAuthnUtils.java'
}
}
res {
srcDir "${topsrcdir}/${mozconfig.substs.MOZ_BRANDING_DIRECTORY}/res"
srcDir "${topsrcdir}/mobile/android/services/src/main/res"
if (mozconfig.substs.MOZ_CRASHREPORTER) {
srcDir "${topsrcdir}/mobile/android/base/crashreporter/res"
}
}
assets {
if (mozconfig.substs.MOZ_ANDROID_DISTRIBUTION_DIRECTORY) {
srcDir "${mozconfig.substs.MOZ_ANDROID_DISTRIBUTION_DIRECTORY}/assets"
}
}
}
test {
java {
// Bug 1229149 tracks pushing this into a :services Gradle project.
srcDir "${topsrcdir}/mobile/android/services/src/test/java"
if (!mozconfig.substs.MOZ_ANDROID_GCM) {
exclude 'org/mozilla/gecko/gcm/**/*.java'
exclude 'org/mozilla/gecko/push/**/*.java'
exclude 'org/mozilla/gecko/advertising/**'
}
}
resources {
// Bug 1229149 tracks pushing this into a :services Gradle project.
srcDir "${topsrcdir}/mobile/android/services/src/test/resources"
}
}
androidTest {
java {
// Bug 1229149 tracks pushing this into a :services Gradle project.
srcDir "${topsrcdir}/mobile/android/services/src/androidTest/java"
srcDir "${topsrcdir}/mobile/android/tests/browser/junit3/src"
}
}
}
testOptions {
// For Robolectric: see https://github.com/robolectric/robolectric/issues/3333#issuecomment-324300418.
unitTests.includeAndroidResources true
unitTests.all {
// We'd like to use (Runtime.runtime.availableProcessors()/2), but
// we have tests that start test servers and the bound ports
// collide. We'll fix this soon to have much faster test cycles.
maxParallelForks 1
}
}
}
dependencies {
implementation "com.android.support:support-v4:$support_library_version"
implementation "com.android.support:appcompat-v7:$support_library_version"
implementation "com.android.support:cardview-v7:$support_library_version"
implementation "com.android.support:recyclerview-v7:$support_library_version"
implementation "com.android.support:design:$support_library_version"
implementation "com.android.support:customtabs:$support_library_version"
implementation "com.android.support:palette-v7:$support_library_version"
// We always include support for multidexing even when we don't enable it at runtime.
// We could conditionally include support, but we'd need
// to generate the `Application` class or fork the file on disk.
implementation "com.android.support:multidex:1.0.3"
if (mozconfig.substs.MOZ_NATIVE_DEVICES) {
implementation "com.android.support:mediarouter-v7:$support_library_version"
implementation "com.google.android.gms:play-services-basement:$google_play_services_version"
implementation "com.google.android.gms:play-services-base:$google_play_services_version"
implementation "com.google.android.gms:play-services-cast:$google_play_services_cast_version"
}
if (mozconfig.substs.MOZ_INSTALL_TRACKING) {
implementation "com.google.android.gms:play-services-ads-identifier:$google_play_services_version"
implementation "com.google.android.gms:play-services-basement:$google_play_services_version"
}
if (mozconfig.substs.MOZ_ANDROID_GCM) {
implementation "com.google.android.gms:play-services-basement:$google_play_services_version"
implementation "com.google.android.gms:play-services-base:$google_play_services_version"
implementation "com.google.android.gms:play-services-gcm:$google_play_services_version"
implementation "com.google.android.gms:play-services-ads-identifier:$google_play_services_version"
implementation "org.mindrot:jbcrypt:0.4"
}
if (mozconfig.substs.MOZ_ANDROID_GOOGLE_PLAY_SERVICES) {
implementation "com.google.android.gms:play-services-fido:$google_play_services_fido_version"
}
// Include LeakCanary in local builds, but not in official builds.
if (mozconfig.substs.MOZILLA_OFFICIAL) {
implementation 'com.squareup.leakcanary:leakcanary-android-no-op:1.4-beta1'
} else {
implementation 'com.squareup.leakcanary:leakcanary-android:1.4-beta1'
}
testImplementation 'com.squareup.leakcanary:leakcanary-android-no-op:1.4-beta1'
implementation project(path: ':geckoview')
implementation project(path: ':thirdparty')
testImplementation 'junit:junit:4.12'
testImplementation 'org.robolectric:robolectric:4.3'
testImplementation 'org.simpleframework:simple-http:6.0.1'
testImplementation 'org.mockito:mockito-core:1.10.19'
}
// TODO: (bug 1261486): This impl is not robust -
// we just wanted to land something.
task checkstyle(type: Checkstyle) {
configFile file("checkstyle.xml")
// TODO: should use sourceSets from project instead of hard-coded str.
source = ['../base/java/','../geckoview/src/main/java/']
// TODO: This ignores our pre-processed resources.
include '**/*.java'
// TODO: classpath should probably be something.
classpath = files()
}
// The localization system uses the moz.build preprocessor to interpolate a .dtd
// file of XML entity definitions into an XML file of elements referencing those
// entities. (Each locale produces its own .dtd file, backstopped by the en-US
// .dtd file in tree.) Android Studio (and IntelliJ) don't handle these inline
// entities smoothly. This filter merely expands the entities in place, making
// them appear properly throughout the IDE. Be aware that this assumes that the
// JVM's file.encoding is utf-8. See comments in
// mobile/android/mach_commands.py.
class ExpandXMLEntitiesFilter extends FilterReader {
ExpandXMLEntitiesFilter(Reader input) {
// Extremely inefficient, but whatever.
super(new StringReader(groovy.xml.XmlUtil.serialize(new XmlParser(false, false, true).parse(input))))
}
}
apply from: "${topsrcdir}/mobile/android/gradle/with_gecko_binaries.gradle"
android.applicationVariants.all { variant ->
def syncPreprocessedJava = task("syncPreprocessedJavaFor${variant.name.capitalize()}", type: Sync) {
into("${project.buildDir}/moz.build/src/${variant.name}/java")
from("${topobjdir}/mobile/android/base/generated/preprocessed")
exclude('**/*.mkdir.done')
}
// This is an Android-Gradle plugin 3+-ism. Culted from reading the source,
// searching for "registerJavaGeneratingTask", and finding
// https://github.com/GoogleCloudPlatform/endpoints-framework-gradle-plugin/commit/2f2b91476fb1c6647791e2c6fe531a47615a1e85.
// The added directory doesn't appear in the paths listed by the
// `sourceSets` task, for reasons unknown.
variant.registerJavaGeneratingTask(syncPreprocessedJava, syncPreprocessedJava.destinationDir)
def syncPreprocessedRes = task("syncPreprocessedResFor${variant.name.capitalize()}", type: Sync) {
into("${project.buildDir}/moz.build/src/${variant.name}/res")
from("${topobjdir}/mobile/android/base/res")
filesMatching('**/strings.xml') {
filter(ExpandXMLEntitiesFilter)
}
exclude('**/*.mkdir.done')
// Bug 1478411: We want to turn XML entity expansion errors into the "error:" strings that
// Tree Herder parses. It's surprisingly difficult to do useful things with exceptions in a
// filter, but it appears that something deep in the XML parser prints errors to stderr, so
// we amplify those error outputs to achieve the goal.
def listener = {
def matches = (it =~ /\[Fatal Error\] +(.*)/)
if (matches) {
def (_, message) = matches[0]
logger.lifecycle "error: ${topobjdir}/mobile/android/base/res/values/strings.xml${message}"
}
} as StandardOutputListener
doFirst {
logging.addStandardErrorListener(listener)
}
doLast {
logging.removeStandardErrorListener(listener)
}
}
// This is an Android-Gradle plugin 3+-ism. Determined by reading the
// source. The added directory doesn't appear in the paths listed by the
// `sourceSets` task, for reasons unknown.
variant.registerGeneratedResFolders(project.files(syncPreprocessedRes.destinationDir).builtBy(syncPreprocessedRes))
// It's not easy -- see the backout in Bug 1242213 -- to change the
// <manifest> package for Fennec. Gradle has grown a mechanism to achieve
// what we want for Fennec, however, with applicationId. To use the same
// manifest as moz.build, we replace the package with org.mozilla.gecko (the
// eventual package) here.
def rewriteManifestPackage = task("rewriteManifestPackageFor${variant.name.capitalize()}", type: Copy, dependsOn: rootProject.machBuildGeneratedAndroidCodeAndResources) {
into("${project.buildDir}/moz.build/src/${variant.name}")
from("${topobjdir}/mobile/android/base/AndroidManifest.xml")
filter { it.replaceFirst(/package=".*?"/, 'package="org.mozilla.gecko"') }
exclude('**/*.mkdir.done')
}
// Every configuration needs the stub manifest at
// src/main/AndroidManifest.xml and the generated manifest. We can't use
// the main sourceSet without losing the stub, so we cover all the
// configurations here.
android.sourceSets."${variant.name}".manifest.srcFile "${rewriteManifestPackage.destinationDir}/AndroidManifest.xml"
variant.preBuildProvider.configure {
dependsOn rewriteManifestPackage
}
// Local (read, not 'official') builds want to reflect developer changes to
// AndroidManifest.xml.in, strings.xml, and preprocessed Java code. To do
// this, the Gradle build calls out to the moz.build system, which can be
// re-entrant. Official builds are driven by the moz.build system and
// should never be re-entrant in this way.
if (!mozconfig.substs.MOZILLA_OFFICIAL) {
syncPreprocessedJava.dependsOn rootProject.machBuildGeneratedAndroidCodeAndResources
syncPreprocessedRes.dependsOn rootProject.machBuildGeneratedAndroidCodeAndResources
rewriteManifestPackage.dependsOn rootProject.machBuildGeneratedAndroidCodeAndResources
}
// When driven from moz.build via |mach build|, Gradle does not require or
// use Gecko binaries. It's only |mach package| that packs the Gecko
// binaries into the resulting APK. The "withoutGeckoBinaries" variants
// handle this. When driven from Android Studio or Gradle, the
// "withGeckoBinaries" variants handle packing the Gecko binaries into the
// resulting APK (for on-device deployment). They also update the Omnijars
// as necessary, smoothing out the edit-compile-test development cycle.
// They do what they say on the tin!
if ((variant.productFlavors*.name).contains('withGeckoBinaries')) {
configureVariantWithGeckoBinaries(variant)
}
}
android.applicationVariants.all { variant ->
if (variant.name == mozconfig.substs.GRADLE_ANDROID_APP_VARIANT_NAME) {
configureApplicationVariantWithJNIWrappers(variant, "Fennec")
}
}
if (gradle.startParameter.taskNames.any { it.endsWith('UnitTest') }) {
// Approach cribbed from https://github.com/rwinch/jce-checker.
int maxKeyLen = javax.crypto.Cipher.getMaxAllowedKeyLength("AES")
if (maxKeyLen <= 128) {
throw new GradleException(
"Android unit tests require " +
"Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy, see " +
"http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html")
}
}
// Bug 1320035: Gradle configuration for running findbugs. Findbugs only allows
// to generate one report per invocation: https://stackoverflow.com/a/42720235.
// Run two tasks, accepting the cost of duplicate work.
android.applicationVariants.all { variant ->
def jarTask = tasks["bundle${variant.name.capitalize()}Classes"]
def bundleJar = jarTask.outputs.files.find({ it.name == 'classes.jar' })
task("findbugsHtml${variant.name.capitalize()}", type: FindBugs) {
outputs.upToDateWhen { false } // We always want to re-run findbugs when asked.
// TODO: figure out how to share the shared configuration.
description "Analyze ${variant.name} code with findbugs (HTML report)"
group "Verification"
ignoreFailures = false // We want builds to fail when running this task and issues are found
effort = "max" // Using more memory and time to find issues is acceptable in automation
reportLevel = "high" // For now we only care about high priority bugs. After we have fixed
// the issues with medium/low priority we can lower the report level here.
classes = files(bundleJar)
source = variant.javaCompileProvider.get().source
classpath = variant.javaCompileProvider.get().classpath + files(android.bootClasspath)
excludeFilter = file("findbugs-exclude.xml")
dependsOn jarTask
reports {
html.enabled = true // HTML reports for humans.
html.destination = file("$project.buildDir/reports/findbugs/findbugs-${variant.name}-output.html")
xml.enabled = false
}
}
task("findbugsXml${variant.name.capitalize()}", type: FindBugs) {
outputs.upToDateWhen { false } // We always want to re-run findbugs when asked.
// TODO: figure out how to share the shared configuration.
description "Analyze ${variant.name} code with findbugs (XML report)"
group "Verification"
ignoreFailures = false // We want builds to fail when running this task and issues are found
effort = "max" // Using more memory and time to find issues is acceptable in automation
reportLevel = "high" // For now we only care about high priority bugs. After we have fixed
// the issues with medium/low priority we can lower the report level here.
classes = files(bundleJar)
source = variant.javaCompileProvider.get().source
classpath = variant.javaCompileProvider.get().classpath + files(android.bootClasspath)
excludeFilter = file("findbugs-exclude.xml")
dependsOn jarTask
reports {
xml.enabled = true // XML reports for machines.
xml.destination = file("$project.buildDir/reports/findbugs/findbugs-${variant.name}-output.xml")
html.enabled = false
}
}
}
// Bug 1353055 - Strip 'vars' debugging information to agree with moz.build.
apply from: "${topsrcdir}/mobile/android/gradle/debug_level.gradle"
android.applicationVariants.all configureVariantDebugLevel
// Bug 1320310 - Hack up the manifest produced by Gradle to match that produced
// by moz.build. Per https://bugzilla.mozilla.org/show_bug.cgi?id=1320310#c14,
// this breaks launching in Android Studio; therefore, we only do this for
// official automation builds and not for local developer builds.
import groovy.xml.XmlUtil
// Workaround for fixing sub-dependencies upon gradle error:
// All gms/firebase (except play-services-cast since it has sub-dependencies in 15.0.0)
// libraries must use the exact same version specification (mixing versions can
// lead to runtime crashes). Found versions 15.0.1, 15.0.0. Examples include
// com.google.android.gms:play-services-base:15.0.1 and com.google.android.gms:play-services-basement:15.0.0
configurations.all {
resolutionStrategy {
eachDependency { DependencyResolveDetails details ->
if (details.requested.group == 'com.google.android.gms'
&& details.requested.name != 'play-services-cast'
&& details.requested.name != 'play-services-fido') {
details.useVersion "$google_play_services_version"
}
}
}
}
android.applicationVariants.all { variant ->
if (!mozconfig.substs.MOZILLA_OFFICIAL) {
return
}
variant.outputs.each { output ->
output.processManifest.doLast {
[file("${manifestOutputDirectory}/AndroidManifest.xml"),
].each({ File manifestOutFile ->
if (manifestOutFile.exists()) {
def contents = manifestOutFile.getText('UTF-8')
// A non-validating, non-namespace aware XML processor.
def xml = new XmlSlurper(false, false).parseText(contents)
// First, reinstate our <activity-alias android:name=".App">.
xml.depthFirst()
.findAll { it.name() == 'activity-alias' && it.'@android:name' == 'org.mozilla.gecko.App' }
.each { it.'@android:name' = '.App' }
manifestOutFile.write(XmlUtil.serialize(xml), 'UTF-8')
}
})
}
}
}
// Bug 1415298: make Robolectric find assets. Fix adapted from
// https://github.com/robolectric/robolectric/issues/2647.
android.applicationVariants.all { variant ->
def productFlavor = ""
variant.productFlavors.each {
productFlavor += "${it.name.capitalize()}"
}
def buildType = "${variant.buildType.name.capitalize()}"
tasks["compile${productFlavor}${buildType}UnitTestSources"].dependsOn(tasks["merge${productFlavor}${buildType}Assets"])
}

Просмотреть файл

@ -1,63 +0,0 @@
<?xml version="1.0"?>
<!-- This Source Code Form is subject to the terms of the Mozilla Public
- License, v. 2.0. If a copy of the MPL was not distributed with this
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
<!DOCTYPE module PUBLIC
"-//Puppy Crawl//DTD Check Configuration 1.2//EN"
"http://www.puppycrawl.com/dtds/configuration_1_2.dtd">
<!-- TODO: Clean up code & add checks:
- WhitespaceAround
- EmptyLineSeparator
- NeedBraces
- LeftCurly // placement of "{" in new scope or literal
- RightCurly // placement of "}" in close scope or literal
- Indentation
- OneStatementPerLine
- OperatorWrap
- SeparatorWrap
- MultipleVariableDeclarations
- FallThrough
(I spent too much time already)
Maybe add:
- OverloadMethodsDeclarationOrder
- Empty*Block // better to catch errors!
(I spent too much time already)
See http://checkstyle.sourceforge.net/google_style.html
for a good set of defaults.
-->
<module name="Checker">
<property name="charset" value="UTF-8"/>
<!-- TODO: <property name="fileExtensions" value="java, properties, xml"/> -->
<module name="FileTabCharacter"> <!-- No tabs! -->
<property name="eachLine" value="true"/>
</module>
<module name="RegexpSingleline"> <!-- excess whitespace -->
<property name="format" value="\s+$"/>
<property name="message" value="Trailing whitespace"/>
</module>
<module name="TreeWalker">
<module name="GenericWhitespace"/> <!-- whitespace for generics -->
<module name="NoLineWrap">
<property name="tokens" value="IMPORT,PACKAGE_DEF"/>
</module>
<module name="OuterTypeFilename"/> <!-- `class Lol` only in Lol.java -->
<module name="WhitespaceAfter">
<!-- TODO: (bug 1263059) Remove specific tokens to enable CAST check. -->
<property name="tokens" value="COMMA, SEMI"/>
</module>
<module name="WhitespaceAround">
<property name="allowEmptyConstructors" value="true"/>
<property name="allowEmptyMethods" value="true"/>
<property name="allowEmptyTypes" value="true"/>
</module>
<module name="OneTopLevelClass"/>
</module>
</module>

Просмотреть файл

@ -1,68 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- This Source Code Form is subject to the terms of the Mozilla Public
- License, v. 2.0. If a copy of the MPL was not distributed with this
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
<FindBugsFilter>
<!-- Bug 1316008 -->
<Match>
<Bug pattern="DM_DEFAULT_ENCODING" />
</Match>
<!-- Bug 1320298 -->
<Match>
<Bug pattern="MS_MUTABLE_ARRAY" />
</Match>
<!-- Bug 1316009 -->
<Match>
<Bug pattern="MS_SHOULD_BE_FINAL" />
</Match>
<!-- Bug 1316010 -->
<Match>
<Bug pattern="UL_UNRELEASED_LOCK" />
</Match>
<!-- Bug 1316021 -->
<Match>
<Bug pattern="ST_WRITE_TO_STATIC_FROM_INSTANCE_METHOD" />
</Match>
<!-- Bug 1320316 -->
<Match>
<Bug pattern="DM_BOXED_PRIMITIVE_TOSTRING" />
</Match>
<Match>
<Bug pattern="RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT" />
</Match>
<Match>
<Bug pattern="NP_NULL_ON_SOME_PATH" />
</Match>
<Match>
<Bug pattern="NP_NULL_PARAM_DEREF_NONVIRTUAL" />
</Match>
<!-- We explicitly want to swallow exceptions in releaseProviders() (Bug 1315982) -->
<Match>
<Class name="org.mozilla.gecko.sync.repositories.android.FennecTabsRepository$FennecTabsRepositorySession" />
<Method name="releaseProviders" />
<Bug pattern="DE_MIGHT_IGNORE" />
</Match>
<!-- Ignore false positive in SerialRecordConsumer (Bug 1316011) -->
<Match>
<Class name="org.mozilla.gecko.sync.synchronizer.SerialRecordConsumer" />
<Method name="stored" />
<Bug pattern="VO_VOLATILE_INCREMENT" />
</Match>
<!-- FindBugs doesn't like the resource classes provided by both ourselves, and the android
support libraries. -->
<Match>
<Class name="~.*\.R\$.*"/>
</Match>
<Match>
<Class name="~.*\.Manifest\$.*"/>
</Match>
</FindBugsFilter>

Просмотреть файл

@ -1,271 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<lint>
<!-- Enable relevant checks disabled by default -->
<issue id="NegativeMargin" severity="warning" />
<!-- We have a custom menu and don't conform to the recommended styles. -->
<issue id="IconColors" severity="ignore" />
<!-- We use our own preprocessing to either add or remove
`android:debuggable` when building with mach so it's
not actually hard-coded. We can probably remove this
warning when we switch to gradle. -->
<issue id="HardcodedDebugMode" severity="ignore" />
<!-- We have our own l10n system & don't use the platform's plurals. -->
<issue id="PluralsCandidate" severity="ignore" />
<!-- We don't want to have to follow the SDK release schedule: we can keep
the warning in order to not forget that there's a new SDK, but there's
no need to break on update. -->
<issue id="OldTargetApi" severity="warning" />
<!-- We want all lint warnings to be fatal errors.
Right now, we set these to lint warnings so:
DO NOT ADD TO THIS LIST.
We did this so we can land lint in automation
and not fail everything. -->
<issue id="AppCompatResource" severity="warning" />
<issue id="GoogleAppIndexingDeepLinkError" severity="warning" />
<issue id="GoogleAppIndexingUrlError" severity="warning" />
<issue id="Instantiatable" severity="warning" />
<issue id="LongLogTag" severity="warning" />
<issue id="MissingPermission" severity="warning" />
<issue id="OnClick" severity="warning" />
<issue id="ProtectedPermissions" severity="warning" />
<issue id="ReferenceType" severity="warning" />
<issue id="ResourceAsColor" severity="warning" />
<issue id="ResourceType" severity="warning" />
<issue id="ValidFragment" severity="warning" />
<!-- New Android-Gradle lint integration regressed this check. -->
<issue id="MissingRegistered" severity="warning" />
<!-- Fixes are in progress but we would like to block future candidates.
The ** in the path are wildcards. We need these wildcards to not change our code structure.
See: http://stackoverflow.com/questions/43994420/what-path-is-the-issue-ignore-path-element-in-lint-xml-relative-to -->
<issue id="NewApi" severity="error">
<ignore path="**/mobile/android/base/java/org/mozilla/gecko/activitystream/ActivityStreamPreference.java"/>
<ignore path="**/mobile/android/base/java/org/mozilla/gecko/dlc/DownloadContentTelemetry.java"/>
<ignore path="**/mobile/android/base/java/org/mozilla/gecko/preferences/LocaleListPreference.java"/>
<ignore path="**/mobile/android/base/java/org/mozilla/gecko/media/GeckoMediaControlAgent.java"/>
<ignore path="**/mobile/android/base/java/org/mozilla/gecko/PrintHelper.java"/>
<ignore path="**/mobile/android/base/java/org/mozilla/gecko/animation/PropertyAnimator.java"/>
<ignore path="**/mobile/android/base/java/org/mozilla/gecko/RemotePresentationService.java"/>
<ignore path="**/mobile/android/base/java/org/mozilla/gecko/VirtualPresentation.java"/>
<ignore path="**/mobile/android/base/java/org/mozilla/gecko/db/SharedBrowserDatabaseProvider.java"/>
<ignore path="**/mobile/android/base/java/org/mozilla/gecko/tabs/TabPanelBackButton.java"/>
<ignore path="**/mobile/android/base/java/org/mozilla/gecko/toolbar/ToolbarEditText.java"/>
<ignore path="**/mobile/android/base/java/org/mozilla/gecko/util/ViewUtil.java"/>
<ignore path="**/mobile/android/base/java/org/mozilla/gecko/IntentHelper.java"/>
<ignore path="**/media/webrtc/trunk/webrtc/modules/audio_device/android/java/src/org/webrtc/voiceengine/WebRtcAudioEffects.java"/>
<ignore path="**/media/webrtc/trunk/webrtc/modules/audio_device/android/java/src/org/webrtc/voiceengine/WebRtcAudioRecord.java"/>
<ignore path="src/main/res/values/styles.xml"/>
</issue>
<!-- We fixed all "Registered" lint errors. However the current gradle plugin has a bug where
it ignores @SuppressLint annotations for this check. See CrashReporterActivity class and
https://code.google.com/p/android/issues/detail?id=204846 -->
<issue id="Registered" severity="warning" />
<issue id="ObjectAnimatorBinding" severity="error">
<!-- Two animated properties are provided by the underlying
View implementation. -->
<ignore path="**/mobile/android/base/java/org/mozilla/gecko/firstrun/FirstrunPager.java"/>
</issue>
<!-- Tracked by Bug 1409550. -->
<issue id="AppCompatCustomView" severity="error">
<ignore path="**/mobile/android/base/java/org/mozilla/gecko/firstrun/FirstrunPager.java"/>
<ignore path="**/mobile/android/base/java/org/mozilla/gecko/home/PanelHeaderView.java"/>
<ignore path="**/mobile/android/base/java/org/mozilla/gecko/menu/MenuItemDefault.java"/>
<ignore path="**/mobile/android/base/java/org/mozilla/gecko/tabs/TabPanelBackButton.java"/>
<ignore path="**/mobile/android/base/java/org/mozilla/gecko/widget/AllCapsTextView.java"/>
<ignore path="**/mobile/android/base/java/org/mozilla/gecko/widget/ClickableWhenDisabledEditText.java"/>
<ignore path="**/mobile/android/base/java/org/mozilla/gecko/widget/EllipsisTextView.java"/>
<ignore path="**/mobile/android/base/java/org/mozilla/gecko/widget/SquaredImageView.java"/>
<ignore path="**/mobile/android/base/java/org/mozilla/gecko/widget/themed/ThemedEditText.java"/>
<ignore path="**/mobile/android/base/java/org/mozilla/gecko/widget/themed/ThemedImageButton.java"/>
<ignore path="**/mobile/android/base/java/org/mozilla/gecko/widget/themed/ThemedImageView.java"/>
<ignore path="**/mobile/android/base/java/org/mozilla/gecko/widget/themed/ThemedTextView.java"/>
</issue>
<!-- WHEN YOU FIX A LINT WARNING, ADD IT TO THIS LIST.
We want all lint warnings to be fatal errors.
This is the list of checks that we've explicitly
set as errors. Ideally, once we have no more warnings,
we switch to the `warningsAsErrors` lint option
(bug 1253737) rather than listing everything explicitly. -->
<issue id="AaptCrash" severity="error" />
<issue id="Accessibility" severity="error" />
<issue id="AccidentalOctal" severity="error" />
<issue id="AdapterViewChildren" severity="error" />
<issue id="AddJavascriptInterface" severity="error" />
<issue id="AllowBackup" severity="error" />
<issue id="AlwaysShowAction" severity="error" />
<issue id="AndroidGradlePluginVersion" severity="error" />
<issue id="AppCompatMethod" severity="error" />
<issue id="AppIndexingError" severity="error" />
<issue id="AppIndexingWarning" severity="error" />
<issue id="Assert" severity="error" />
<issue id="ButtonCase" severity="error" />
<issue id="ButtonOrder" severity="error" />
<issue id="ByteOrderMark" severity="error" />
<issue id="CheckResult" severity="error" />
<issue id="Correctness" severity="error" />
<issue id="CutPasteId" severity="error" />
<issue id="DalvikOverride" severity="error" />
<issue id="DeviceAdmin" severity="error" />
<issue id="DisableBaselineAlignment" severity="error" />
<issue id="DrawAllocation" severity="error" />
<issue id="DuplicateActivity" severity="error" />
<issue id="DuplicateDefinition" severity="error" />
<issue id="DuplicateIds" severity="error" />
<issue id="DuplicateIncludedIds" severity="error" />
<issue id="DuplicateUsesFeature" severity="error" />
<issue id="ExportedContentProvider" severity="error" />
<issue id="ExportedPreferenceActivity" severity="error" />
<issue id="ExtraText" severity="error" />
<issue id="ExtraTranslation" severity="error" />
<issue id="FloatMath" severity="error" />
<issue id="FullBackupContent" severity="error" />
<issue id="GetInstance" severity="error" />
<issue id="GifUsage" severity="error" />
<issue id="GradleCompatible" severity="error" />
<issue id="GradleDependency" severity="error" />
<issue id="GradleDeprecated" severity="error" />
<issue id="GradleDynamicVersion" severity="error" />
<issue id="GradleGetter" severity="error" />
<issue id="GradleIdeError" severity="error" />
<issue id="GradlePath" severity="error" />
<issue id="GrantAllUris" severity="error" />
<issue id="GridLayout" severity="error" />
<issue id="HandlerLeak" severity="error" />
<issue id="HardcodedText" severity="error" />
<issue id="IconExtension" severity="error" />
<issue id="IconLauncherShape" severity="error" />
<issue id="IconMixedNinePatch" severity="error" />
<issue id="IconNoDpi" severity="error" />
<issue id="IllegalResourceRef" severity="error" />
<issue id="ImpliedQuantity" severity="error" />
<issue id="InOrMmUsage" severity="error" />
<issue id="IncludeLayoutParam" severity="error" />
<issue id="InconsistentArrays" severity="error" />
<issue id="InefficientWeight" severity="error" />
<issue id="InnerclassSeparator" severity="error" />
<issue id="Internationalization" severity="error" />
<issue id="InvalidId" severity="error" />
<issue id="InvalidPackage" severity="error" />
<issue id="InvalidResourceFolder" severity="error" />
<issue id="JavascriptInterface" severity="error" />
<issue id="LabelFor" severity="error" />
<issue id="LibraryCustomView" severity="error" />
<issue id="LocalSuppress" severity="error" />
<issue id="LocaleFolder" severity="error" />
<issue id="LogTagMismatch" severity="error" />
<issue id="MangledCRLF" severity="error" />
<issue id="ManifestOrder" severity="error" />
<issue id="ManifestTypo" severity="error" />
<issue id="MenuTitle" severity="error" />
<issue id="MergeRootFrame" severity="error" />
<issue id="MipmapIcons" severity="error" />
<issue id="MissingApplicationIcon" severity="error" />
<issue id="MissingId" severity="error" />
<issue id="MissingPrefix" severity="error" />
<issue id="MissingQuantity" severity="error" />
<issue id="MissingSuperCall" severity="error" />
<issue id="MissingTranslation" severity="error" />
<issue id="MissingVersion" severity="error" />
<issue id="MockLocation" severity="error" />
<issue id="MultipleUsesSdk" severity="error" />
<issue id="NamespaceTypo" severity="error" />
<issue id="NestedScrolling" severity="error" />
<issue id="NfcTechWhitespace" severity="error" />
<issue id="NotSibling" severity="error" />
<issue id="ObsoleteLayoutParam" severity="error" />
<issue id="OnClick" severity="error" />
<issue id="Orientation" severity="error" />
<issue id="Override" severity="error" />
<issue id="OverrideAbstract" severity="error" />
<issue id="PackagedPrivateKey" severity="error" />
<issue id="ParcelCreator" severity="error" />
<issue id="Performance" severity="error" />
<issue id="Proguard" severity="error" />
<issue id="ProguardSplit" severity="error" />
<issue id="PropertyEscape" severity="error" />
<issue id="PxUsage" severity="error" />
<issue id="Range" severity="error" />
<issue id="RelativeOverlap" severity="error" />
<issue id="RequiredSize" severity="error" />
<issue id="ResAuto" severity="error" />
<issue id="ResourceCycle" severity="error" />
<issue id="ResourceName" severity="error" />
<issue id="ResourceType" severity="error" />
<issue id="RtlCompat" severity="error" />
<issue id="RtlEnabled" severity="error" />
<issue id="ScrollViewCount" severity="error" />
<issue id="ScrollViewSize" severity="error" />
<issue id="SecureRandom" severity="error" />
<issue id="Security" severity="error" />
<issue id="ServiceCast" severity="error" />
<issue id="SetJavaScriptEnabled" severity="error" />
<issue id="ShiftFlags" severity="error" />
<issue id="ShortAlarm" severity="error" />
<issue id="ShowToast" severity="error" />
<issue id="SignatureOrSystemPermissions" severity="error" />
<issue id="StringFormatCount" severity="error" />
<issue id="StringFormatInvalid" severity="error" />
<issue id="StringFormatMatches" severity="error" />
<issue id="StringShouldBeInt" severity="error" />
<issue id="SuspiciousImport" severity="error" />
<issue id="TextFields" severity="error" />
<issue id="TextViewEdits" severity="error" />
<issue id="TooDeepLayout" severity="error" />
<issue id="TooManyViews" severity="error" />
<issue id="TrulyRandom" severity="error" />
<issue id="TypographyDashes" severity="error" />
<issue id="TypographyFractions" severity="error" />
<issue id="TypographyOther" severity="error" />
<issue id="Typos" severity="error" />
<issue id="UniqueConstants" severity="error" />
<issue id="UniquePermission" severity="error" />
<issue id="UnknownId" severity="error" />
<issue id="UnknownIdInLayout" severity="error" />
<issue id="UnlocalizedSms" severity="error" />
<issue id="UnusedNamespace" severity="error" />
<issue id="UnusedQuantity" severity="error" />
<issue id="UnusedResources" severity="error">
<!-- The moz.build based build system leaves a .mkdir.done file lying around in the
preprocessed_resources res/raw folder. Lint reports it as unused. We should get
rid of the file eventually. See bug 1268948. -->
<ignore path="**/raw/.mkdir.done" />
<!-- Ignore drawables used for localized Top Sites. -->
<ignore regexp="^.*?/res/drawable-[xhmdpi]+/suggestedsites_[a-z]+.png$" />
<ignore regexp="activity_stream_signin_title|activity_stream_signin_description|activity_stream_signup_button|
activity_stream_signin_prompt|activity_stream_signin_prompt_button|firstrun_sendtab_title|firstrun_sendtab_message" />
</issue>
<issue id="Usability" severity="error" />
<issue id="UseCheckPermission" severity="error" />
<issue id="UseCompoundDrawables" severity="error" />
<issue id="UselessLeaf" severity="error" />
<issue id="UsesMinSdkAttributes" severity="error" />
<issue id="UsingHttp" severity="error" />
<issue id="ViewHolder" severity="error" />
<issue id="ViewTag" severity="error" />
<issue id="Wakelock" severity="error" />
<issue id="WebViewLayout" severity="error" />
<issue id="WorldReadableFiles" severity="error" />
<issue id="WorldWriteableFiles" severity="error" />
<issue id="WrongCall" severity="error" />
<issue id="WrongCase" severity="error" />
<issue id="WrongConstant" severity="error" />
<issue id="WrongFolder" severity="error" />
<issue id="WrongManifestParent" severity="error" />
<issue id="WrongRegion" severity="error" />
<issue id="WrongThread" severity="error" />
<issue id="WrongViewCast" severity="error" />
</lint>

Двоичные данные
mobile/android/app/mobile.ico

Двоичный файл не отображается.

До

Ширина:  |  Высота:  |  Размер: 4.2 KiB

Просмотреть файл

@ -7,27 +7,12 @@
with Files('**'):
BUG_COMPONENT = ('Firefox for Android', 'Build Config & IDE Support')
with Files('findbugs-exclude.xml'):
BUG_COMPONENT = ('Firefox for Android', 'General')
with Files('lint*'):
BUG_COMPONENT = ('Firefox for Android', 'General')
with Files('mobile*'):
BUG_COMPONENT = ('Firefox for Android', 'General')
with Files('omnijar/**'):
BUG_COMPONENT = ('Firefox for Android', 'Build Config & IDE Support')
with Files('src/main/**'):
BUG_COMPONENT = ('Firefox for Android', 'General')
with Files('src/androidTest/**'):
BUG_COMPONENT = ('Firefox for Android', 'Testing')
with Files('src/test/**'):
BUG_COMPONENT = ('Firefox for Android', 'Build Config & IDE Support')
for var in ('APP_NAME', 'APP_VERSION'):
DEFINES[var] = CONFIG['MOZ_%s' % var]

Просмотреть файл

@ -1,6 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- This is not the real manifest; it's a stub to satisfy the
Android-Gradle plugin. The real manifest is generated from
mobile/android/base/AndroidManifest.xml.in. -->
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="org.mozilla.gecko">
</manifest>

Просмотреть файл

@ -1 +0,0 @@
This is an example asset.

Двоичный файл не отображается.

До

Ширина:  |  Высота:  |  Размер: 167 B

Разница между файлами не показана из-за своего большого размера Загрузить разницу

Просмотреть файл

@ -1,19 +0,0 @@
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
package org.mozilla.geckoview;
import android.support.annotation.AnyThread;
import android.support.annotation.NonNull;
import org.mozilla.gecko.EventDispatcher;
/** This class exists so that Fennec can have access to getEventDispatcher without giving access to
* it to any other GV consumer. */
public class GeckoViewBridge {
@AnyThread
public static @NonNull EventDispatcher getEventDispatcher(GeckoView geckoView) {
return geckoView.getEventDispatcher();
}
}

Просмотреть файл

@ -1,21 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- This Source Code Form is subject to the terms of the Mozilla Public
- License, v. 2.0. If a copy of the MPL was not distributed with this
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
<set xmlns:android="http://schemas.android.com/apk/res/android">
<scale android:fromXScale="1.0"
android:toXScale="1.0"
android:fromYScale="0.3"
android:toYScale="1.0"
android:pivotX="0%"
android:pivotY="0%"
android:duration="150"/>
<alpha android:interpolator="@android:anim/decelerate_interpolator"
android:fromAlpha="0.0"
android:toAlpha="1.0"
android:duration="150"/>
</set>

Просмотреть файл

@ -1,10 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- This Source Code Form is subject to the terms of the Mozilla Public
- License, v. 2.0. If a copy of the MPL was not distributed with this
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
<alpha
xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="250"
android:fromAlpha="0.0"
android:toAlpha="1.0" />

Просмотреть файл

@ -1,11 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- This Source Code Form is subject to the terms of the Mozilla Public
- License, v. 2.0. If a copy of the MPL was not distributed with this
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
<alpha
xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="250"
android:fromAlpha="1.0"
android:toAlpha="0.0"
android:fillAfter="true" />

Просмотреть файл

@ -1,25 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:fillAfter="true" >
<scale
android:duration="300"
android:fromXScale="1"
android:fromYScale="1"
android:pivotX="50%"
android:pivotY="50%"
android:toXScale="2"
android:toYScale="2" >
</scale>
<scale
android:duration="300"
android:fromXScale="1"
android:fromYScale="1"
android:pivotX="50%"
android:pivotY="50%"
android:toXScale="0.5"
android:toYScale="0.5" >
</scale>
</set>

Просмотреть файл

@ -1,10 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- This Source Code Form is subject to the terms of the Mozilla Public
- License, v. 2.0. If a copy of the MPL was not distributed with this
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="@android:integer/config_longAnimTime"
android:fromYDelta="0"
android:toYDelta="100%p"
android:fillAfter="true" />

Просмотреть файл

@ -1,9 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- This Source Code Form is subject to the terms of the Mozilla Public
- License, v. 2.0. If a copy of the MPL was not distributed with this
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="@android:integer/config_longAnimTime"
android:fromYDelta="100%p"
android:toYDelta="0" />

Просмотреть файл

@ -1,16 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- This Source Code Form is subject to the terms of the Mozilla Public
- License, v. 2.0. If a copy of the MPL was not distributed with this
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/decelerate_interpolator"
android:duration="150">
<translate android:fromYDelta="-0"
android:toYDelta="-20"/>
<alpha android:fromAlpha="1.0"
android:toAlpha="0.0"/>
</set>

Просмотреть файл

@ -1,16 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- This Source Code Form is subject to the terms of the Mozilla Public
- License, v. 2.0. If a copy of the MPL was not distributed with this
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/decelerate_interpolator"
android:duration="150">
<translate android:fromYDelta="-20"
android:toYDelta="0"/>
<alpha android:fromAlpha="0.0"
android:toAlpha="1.0"/>
</set>

Просмотреть файл

@ -1,5 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromXDelta="-100%p" android:toXDelta="0"
android:duration="@android:integer/config_shortAnimTime"/>
</set>

Просмотреть файл

@ -1,5 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromXDelta="100%p" android:toXDelta="0"
android:duration="@android:integer/config_shortAnimTime"/>
</set>

Просмотреть файл

@ -1,5 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromXDelta="0" android:toXDelta="-100%p"
android:duration="@android:integer/config_shortAnimTime"/>
</set>

Просмотреть файл

@ -1,5 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromXDelta="0" android:toXDelta="100%p"
android:duration="@android:integer/config_shortAnimTime"/>
</set>

Просмотреть файл

@ -1,22 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- This Source Code Form is subject to the terms of the Mozilla Public
- License, v. 2.0. If a copy of the MPL was not distributed with this
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
<selector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:gecko="http://schemas.android.com/apk/res-auto">
<item gecko:state_private="true"
android:state_enabled="false"
android:color="@color/photon_icon_private_disabled"/>
<item gecko:state_private="true"
android:state_enabled="true"
android:color="@color/photon_icon_private"/>
<item android:state_enabled="false"
android:color="@color/photon_icon_disabled"/>
<item android:color="@color/photon_icon"/>
</selector>

Просмотреть файл

@ -1,15 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- This Source Code Form is subject to the terms of the Mozilla Public
- License, v. 2.0. If a copy of the MPL was not distributed with this
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
<selector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:gecko="http://schemas.android.com/apk/res-auto">
<item android:state_enabled="false"
android:color="@color/disabled_grey"
/>
<item android:color="@color/toolbar_icon_grey" />
</selector>

Просмотреть файл

@ -1,10 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:state_activated="true"
android:color="@color/dtp_selection" />
<item
android:state_activated="false"
android:color="?android:attr/textColorPrimary" />
</selector>

Просмотреть файл

@ -1,14 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- This Source Code Form is subject to the terms of the Mozilla Public
- License, v. 2.0. If a copy of the MPL was not distributed with this
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
<selector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:gecko="http://schemas.android.com/apk/res-auto">
<item android:color="@color/menu_item_tint_private"
gecko:state_private="true"/>
<item android:color="@color/menu_item_tint"/>
</selector>

Просмотреть файл

@ -1,14 +0,0 @@
<!-- This Source Code Form is subject to the terms of the Mozilla Public
- License, v. 2.0. If a copy of the MPL was not distributed with this
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true"
android:color="@color/about_page_header_grey"
android:drawable="@color/about_page_header_grey" />
<item android:color="@android:color/transparent"
android:drawable="@android:color/transparent"/>
</selector>

Просмотреть файл

@ -1,7 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_enabled="false" android:color="@color/text_color_primary_disable_only" />
<item android:color="@color/placeholder_active_grey"/>
</selector>

Просмотреть файл

@ -1,7 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_enabled="false" android:color="@color/disabled_grey" />
<item android:color="@color/text_and_tabs_tray_grey" />
</selector>

Просмотреть файл

@ -1,14 +0,0 @@
<!-- This Source Code Form is subject to the terms of the Mozilla Public
- License, v. 2.0. If a copy of the MPL was not distributed with this
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true"
android:color="@color/highlight"
android:drawable="@color/highlight" />
<item android:color="@android:color/transparent"
android:drawable="@android:color/transparent"/>
</selector>

Просмотреть файл

@ -1,14 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- This Source Code Form is subject to the terms of the Mozilla Public
- License, v. 2.0. If a copy of the MPL was not distributed with this
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
<selector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:gecko="http://schemas.android.com/apk/res-auto">
<item android:color="@color/photon_search_item_text_private"
gecko:state_private="true"/>
<item android:color="@color/photon_search_item_text"/>
</selector>

Просмотреть файл

@ -1,7 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_enabled="false" android:color="@color/text_color_primary_disable_only" />
<item android:color="@color/placeholder_grey"/>
</selector>

Просмотреть файл

@ -1,7 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_enabled="false" android:color="#999" />
<item android:color="#000"/>
</selector>

Просмотреть файл

@ -1,14 +0,0 @@
<!-- This Source Code Form is subject to the terms of the Mozilla Public
- License, v. 2.0. If a copy of the MPL was not distributed with this
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true"
android:color="@color/toolbar_grey_pressed"
android:drawable="@color/toolbar_grey_pressed" />
<item android:color="@android:color/transparent"
android:drawable="@android:color/transparent"/>
</selector>

Просмотреть файл

@ -1,12 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_checked="true"
android:color="@color/about_page_header_grey"/>
<item android:state_pressed="true"
android:color="@color/about_page_header_grey"/>
<item android:color="@color/tabs_tray_icon_grey"/>
</selector>

Просмотреть файл

@ -1,14 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- This Source Code Form is subject to the terms of the Mozilla Public
- License, v. 2.0. If a copy of the MPL was not distributed with this
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
<selector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:gecko="http://schemas.android.com/apk/res-auto">
<item android:color="@color/photon_highlight_private"
gecko:state_private="true"/>
<item android:color="@color/photon_highlight"/>
</selector>

Просмотреть файл

@ -1,14 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- This Source Code Form is subject to the terms of the Mozilla Public
- License, v. 2.0. If a copy of the MPL was not distributed with this
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
<selector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:gecko="http://schemas.android.com/apk/res-auto">
<item gecko:state_light="true"
android:color="@color/photon_icon"/>
<item android:color="@color/photon_icon_private"/>
</selector>

Просмотреть файл

@ -1,31 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:gecko="http://schemas.android.com/apk/res-auto">
<item android:color="@color/photon_text_main_private"
android:state_checked="true"
gecko:state_private="true"/>
<item android:color="@color/photon_text_secondary_private"
gecko:state_private="true"/>
<item android:color="@color/tab_strip_title_lwt_checked"
android:state_checked="true"
gecko:state_dark="true"/>
<item android:color="@color/tab_strip_title_lwt"
gecko:state_dark="true"/>
<item android:color="@color/tab_strip_title_lwt_checked"
android:state_checked="true"
gecko:state_light="true"/>
<item android:color="@color/tab_strip_title_lwt"
gecko:state_light="true"/>
<item android:color="@color/photon_text_main"
android:state_checked="true"/>
<item android:color="@color/photon_text_secondary"/>
</selector>

Просмотреть файл

@ -1,7 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true"
android:color="@color/placeholder_grey" />
<item android:color="@color/panel_tab_text_normal"/>
</selector>

Просмотреть файл

@ -1,14 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- This Source Code Form is subject to the terms of the Mozilla Public
- License, v. 2.0. If a copy of the MPL was not distributed with this
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
<selector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:gecko="http://schemas.android.com/apk/res-auto">
<item android:color="@color/menu_item_tint_private"
gecko:state_private="true"/>
<item android:color="@color/menu_item_tint"/>
</selector>

Просмотреть файл

@ -1,14 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- This Source Code Form is subject to the terms of the Mozilla Public
- License, v. 2.0. If a copy of the MPL was not distributed with this
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
<selector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:gecko="http://schemas.android.com/apk/res-auto">
<item android:color="@color/photon_toolbar_text_color_private"
gecko:state_private="true"/>
<item android:color="@color/photon_toolbar_text_color"/>
</selector>

Просмотреть файл

@ -1,7 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_enabled="false" android:color="@color/text_color_primary_disable_only" />
<item android:color="@color/text_color_tertiary"/>
</selector>

Просмотреть файл

@ -1,11 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:state_activated="true"
android:color="@color/dtp_header_text_active"
/>
<item android:state_activated="false"
android:color="@color/dtp_header_text_inactive"
/>
</selector>

Просмотреть файл

@ -1,11 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:state_activated="true"
android:color="@color/dtp_selection"
/>
<item
android:state_activated="false"
android:color="?android:attr/textColorSecondary"
/>
</selector>

Просмотреть файл

@ -1,11 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:state_activated="true"
android:color="@color/dtp_selection"
/>
<item
android:state_activated="false"
android:color="?android:attr/textColorPrimary"
/>
</selector>

Просмотреть файл

@ -1,14 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- This Source Code Form is subject to the terms of the Mozilla Public
- License, v. 2.0. If a copy of the MPL was not distributed with this
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- empty with no url -->
<item android:state_empty="true" android:color="#80777777" />
<!-- default -->
<item android:color="@color/placeholder_grey"/>
</selector>

Просмотреть файл

@ -1,16 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- This Source Code Form is subject to the terms of the Mozilla Public
- License, v. 2.0. If a copy of the MPL was not distributed with this
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
<selector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:gecko="http://schemas.android.com/apk/res-auto">
<!-- private browsing mode -->
<item android:color="@color/photon_text_main_private"
gecko:state_private="true"/>
<!-- normal mode -->
<item android:color="@color/photon_text_main"/>
</selector>

Просмотреть файл

@ -1,16 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- This Source Code Form is subject to the terms of the Mozilla Public
- License, v. 2.0. If a copy of the MPL was not distributed with this
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
<selector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:gecko="http://schemas.android.com/apk/res-auto">
<!-- private browsing mode -->
<item android:color="@color/photon_text_secondary_private"
gecko:state_private="true"/>
<!-- normal mode -->
<item android:color="@color/photon_text_secondary"/>
</selector>

Просмотреть файл

@ -1,12 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- This Source Code Form is subject to the terms of the Mozilla Public
- License, v. 2.0. If a copy of the MPL was not distributed with this
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
<selector xmlns:android="http://schemas.android.com/apk/res/android" xmlns:gecko="http://schemas.android.com/apk/res-auto">
<item android:color="@color/photon_toolbar_image_tint_private" android:state_enabled="false" gecko:state_private="true" />
<item android:color="@color/photon_toolbar_image_tint_private" android:state_enabled="true" gecko:state_private="true" />
<item android:color="@color/photon_toolbar_image_tint" android:state_enabled="false" gecko:state_private="false" />
<item android:color="@color/photon_toolbar_image_tint" />
</selector>

Просмотреть файл

@ -1,15 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- This Source Code Form is subject to the terms of the Mozilla Public
- License, v. 2.0. If a copy of the MPL was not distributed with this
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
<selector xmlns:android="http://schemas.android.com/apk/res/android" xmlns:gecko="http://schemas.android.com/apk/res-auto">
<!-- private browsing mode -->
<item android:color="@color/photon_text_main_private" gecko:state_private="true" />
<!-- normal mode -->
<item android:color="@color/photon_text_main" />
</selector>

Просмотреть файл

@ -1,15 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- This Source Code Form is subject to the terms of the Mozilla Public
- License, v. 2.0. If a copy of the MPL was not distributed with this
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
<selector xmlns:android="http://schemas.android.com/apk/res/android" xmlns:gecko="http://schemas.android.com/apk/res-auto">
<!-- private browsing mode -->
<item android:color="@color/photon_text_selected_highlight_private" gecko:state_private="true" />
<!-- normal mode -->
<item android:color="@color/photon_text_selected_highlight" />
</selector>

Просмотреть файл

@ -1,21 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- This Source Code Form is subject to the terms of the Mozilla Public
- License, v. 2.0. If a copy of the MPL was not distributed with this
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
<selector xmlns:android="http://schemas.android.com/apk/res/android" xmlns:gecko="http://schemas.android.com/apk/res-auto">
<!-- private browsing mode -->
<item android:color="@color/photon_text_placeholder_private" gecko:state_private="true" />
<!-- dark theme -->
<item android:color="@color/photon_text_placeholder_private" gecko:state_dark="true" />
<!-- light theme -->
<item android:color="@color/photon_text_placeholder_private" gecko:state_light="true" />
<!-- normal mode -->
<item android:color="@color/photon_text_placeholder" />
</selector>

Двоичный файл не отображается.

До

Ширина:  |  Высота:  |  Размер: 267 B

Двоичный файл не отображается.

До

Ширина:  |  Высота:  |  Размер: 259 B

Двоичный файл не отображается.

До

Ширина:  |  Высота:  |  Размер: 801 B

Двоичный файл не отображается.

До

Ширина:  |  Высота:  |  Размер: 474 B

Двоичный файл не отображается.

До

Ширина:  |  Высота:  |  Размер: 242 B

Двоичный файл не отображается.

До

Ширина:  |  Высота:  |  Размер: 335 B

Двоичный файл не отображается.

До

Ширина:  |  Высота:  |  Размер: 1.2 KiB

Двоичный файл не отображается.

До

Ширина:  |  Высота:  |  Размер: 344 B

Двоичный файл не отображается.

До

Ширина:  |  Высота:  |  Размер: 1.0 KiB

Двоичный файл не отображается.

До

Ширина:  |  Высота:  |  Размер: 480 B

Двоичный файл не отображается.

До

Ширина:  |  Высота:  |  Размер: 867 B

Двоичный файл не отображается.

До

Ширина:  |  Высота:  |  Размер: 694 B

Двоичный файл не отображается.

До

Ширина:  |  Высота:  |  Размер: 495 B

Двоичный файл не отображается.

До

Ширина:  |  Высота:  |  Размер: 1.0 KiB

Двоичный файл не отображается.

До

Ширина:  |  Высота:  |  Размер: 417 B

Двоичный файл не отображается.

До

Ширина:  |  Высота:  |  Размер: 573 B

Двоичный файл не отображается.

До

Ширина:  |  Высота:  |  Размер: 486 B

Двоичный файл не отображается.

До

Ширина:  |  Высота:  |  Размер: 644 B

Двоичный файл не отображается.

До

Ширина:  |  Высота:  |  Размер: 298 B

Двоичный файл не отображается.

До

Ширина:  |  Высота:  |  Размер: 189 B

Двоичный файл не отображается.

До

Ширина:  |  Высота:  |  Размер: 200 B

Двоичный файл не отображается.

До

Ширина:  |  Высота:  |  Размер: 187 B

Двоичный файл не отображается.

До

Ширина:  |  Высота:  |  Размер: 215 B

Двоичный файл не отображается.

До

Ширина:  |  Высота:  |  Размер: 183 B

Двоичный файл не отображается.

До

Ширина:  |  Высота:  |  Размер: 189 B

Двоичный файл не отображается.

До

Ширина:  |  Высота:  |  Размер: 296 B

Двоичный файл не отображается.

До

Ширина:  |  Высота:  |  Размер: 147 B

Двоичный файл не отображается.

До

Ширина:  |  Высота:  |  Размер: 176 B

Двоичный файл не отображается.

До

Ширина:  |  Высота:  |  Размер: 323 B

Двоичный файл не отображается.

До

Ширина:  |  Высота:  |  Размер: 82 B

Двоичный файл не отображается.

До

Ширина:  |  Высота:  |  Размер: 589 B

Двоичный файл не отображается.

До

Ширина:  |  Высота:  |  Размер: 624 B

Двоичный файл не отображается.

До

Ширина:  |  Высота:  |  Размер: 1.6 KiB

Двоичный файл не отображается.

До

Ширина:  |  Высота:  |  Размер: 594 B

Двоичный файл не отображается.

До

Ширина:  |  Высота:  |  Размер: 121 B

Двоичный файл не отображается.

До

Ширина:  |  Высота:  |  Размер: 157 B

Двоичный файл не отображается.

До

Ширина:  |  Высота:  |  Размер: 242 B

Некоторые файлы не были показаны из-за слишком большого количества измененных файлов Показать больше