Test: flashed on a device with /product partition and verified licences are correctly loaded Bug: 111179267 Change-Id: I2667029128a56baefbec376b0ec4e4ecdb3c3ad4 Merged-In: I12e9169b1d3d313a6c5da0d575a6526327268381
112 lines
3.3 KiB
Java
112 lines
3.3 KiB
Java
/*
|
|
* Copyright (C) 2017 The Android Open Source Project
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
package com.android.settings;
|
|
|
|
import android.content.Context;
|
|
import android.support.annotation.VisibleForTesting;
|
|
import android.util.Log;
|
|
|
|
import com.android.settings.utils.AsyncLoader;
|
|
|
|
import java.io.File;
|
|
import java.util.ArrayList;
|
|
import java.util.List;
|
|
|
|
/**
|
|
* LicenseHtmlLoader is a loader which loads a license html file from default license xml files.
|
|
*/
|
|
class LicenseHtmlLoader extends AsyncLoader<File> {
|
|
private static final String TAG = "LicenseHtmlLoader";
|
|
|
|
private static final String[] DEFAULT_LICENSE_XML_PATHS = {
|
|
"/system/etc/NOTICE.xml.gz",
|
|
"/vendor/etc/NOTICE.xml.gz",
|
|
"/odm/etc/NOTICE.xml.gz",
|
|
"/oem/etc/NOTICE.xml.gz",
|
|
"/product/etc/NOTICE.xml.gz"};
|
|
private static final String NOTICE_HTML_FILE_NAME = "NOTICE.html";
|
|
|
|
private Context mContext;
|
|
|
|
public LicenseHtmlLoader(Context context) {
|
|
super(context);
|
|
mContext = context;
|
|
}
|
|
|
|
@Override
|
|
public File loadInBackground() {
|
|
return generateHtmlFromDefaultXmlFiles();
|
|
}
|
|
|
|
@Override
|
|
protected void onDiscardResult(File f) {
|
|
}
|
|
|
|
private File generateHtmlFromDefaultXmlFiles() {
|
|
final List<File> xmlFiles = getVaildXmlFiles();
|
|
if (xmlFiles.isEmpty()) {
|
|
Log.e(TAG, "No notice file exists.");
|
|
return null;
|
|
}
|
|
|
|
File cachedHtmlFile = getCachedHtmlFile();
|
|
if(!isCachedHtmlFileOutdated(xmlFiles, cachedHtmlFile) ||
|
|
generateHtmlFile(xmlFiles, cachedHtmlFile)) {
|
|
return cachedHtmlFile;
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
@VisibleForTesting
|
|
List<File> getVaildXmlFiles() {
|
|
final List<File> xmlFiles = new ArrayList();
|
|
for (final String xmlPath : DEFAULT_LICENSE_XML_PATHS) {
|
|
File file = new File(xmlPath);
|
|
if (file.exists() && file.length() != 0) {
|
|
xmlFiles.add(file);
|
|
}
|
|
}
|
|
return xmlFiles;
|
|
}
|
|
|
|
@VisibleForTesting
|
|
File getCachedHtmlFile() {
|
|
return new File(mContext.getCacheDir(), NOTICE_HTML_FILE_NAME);
|
|
}
|
|
|
|
@VisibleForTesting
|
|
boolean isCachedHtmlFileOutdated(List<File> xmlFiles, File cachedHtmlFile) {
|
|
boolean outdated = true;
|
|
if (cachedHtmlFile.exists() && cachedHtmlFile.length() != 0) {
|
|
outdated = false;
|
|
for (File file : xmlFiles) {
|
|
if (cachedHtmlFile.lastModified() < file.lastModified()) {
|
|
outdated = true;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
return outdated;
|
|
}
|
|
|
|
@VisibleForTesting
|
|
boolean generateHtmlFile(List<File> xmlFiles, File htmlFile) {
|
|
return LicenseHtmlGeneratorFromXml.generateHtml(xmlFiles, htmlFile);
|
|
}
|
|
}
|