Merge branch 'open_source' into google_internal

Conflicts:
	core/java/android/widget/TwoLineListItem.java
	core/res/res/values/public.xml
	preloaded-classes
This commit is contained in:
The Android Open Source Project
2009-03-29 08:55:27 -07:00
39 changed files with 466 additions and 140 deletions

View File

@@ -30687,6 +30687,28 @@
visibility="public"
>
</field>
<field name="ACTION_POWER_CONNECTED"
type="java.lang.String"
transient="false"
volatile="false"
value="&quot;android.intent.action.POWER_CONNECTED&quot;"
static="true"
final="true"
deprecated="not deprecated"
visibility="public"
>
</field>
<field name="ACTION_POWER_DISCONNECTED"
type="java.lang.String"
transient="false"
volatile="false"
value="&quot;android.intent.action.POWER_DISCONNECTED&quot;"
static="true"
final="true"
deprecated="not deprecated"
visibility="public"
>
</field>
<field name="ACTION_PROVIDER_CHANGED"
type="java.lang.String"
transient="false"
@@ -143285,7 +143307,7 @@
synchronized="true"
static="false"
final="false"
deprecated="not deprecated"
deprecated="deprecated"
visibility="public"
>
</method>
@@ -143719,7 +143741,7 @@
synchronized="true"
static="false"
final="false"
deprecated="not deprecated"
deprecated="deprecated"
visibility="public"
>
<parameter name="use" type="boolean">

View File

@@ -508,6 +508,8 @@ import java.util.Set;
* <li> {@link #ACTION_PACKAGE_DATA_CLEARED}
* <li> {@link #ACTION_UID_REMOVED}
* <li> {@link #ACTION_BATTERY_CHANGED}
* <li> {@link #ACTION_POWER_CONNECTED}
* <li> {@link #ACTION_POWER_DISCONNECTED}
* </ul>
*
* <h3>Standard Categories</h3>
@@ -1249,6 +1251,25 @@ public class Intent implements Parcelable {
*/
@SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
public static final String ACTION_BATTERY_LOW = "android.intent.action.BATTERY_LOW";
/**
* Broadcast Action: External power has been connected to the device.
* This is intended for applications that wish to register specifically to this notification.
* Unlike ACTION_BATTERY_CHANGED, applications will be woken for this and so do not have to
* stay active to receive this notification. This action can be used to implement actions
* that wait until power is available to trigger.
*/
@SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
public static final String ACTION_POWER_CONNECTED = "android.intent.action.POWER_CONNECTED";
/**
* Broadcast Action: External power has been removed from the device.
* This is intended for applications that wish to register specifically to this notification.
* Unlike ACTION_BATTERY_CHANGED, applications will be woken for this and so do not have to
* stay active to receive this notification. This action can be used to implement actions
* that wait until power is available to trigger.
*/
@SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
public static final String ACTION_POWER_DISCONNECTED =
"android.intent.action.POWER_DISCONNECTED";
/**
* Broadcast Action: Indicates low memory condition on the device
*/

View File

@@ -351,6 +351,7 @@ public class IntentFilter implements Parcelable {
throws MalformedMimeTypeException {
mPriority = 0;
mActions = new ArrayList<String>();
addAction(action);
addDataType(dataType);
}

View File

@@ -351,23 +351,26 @@ public class SQLiteQueryBuilder
String groupBy, String having, String sortOrder, String limit) {
String[] projection = computeProjection(projectionIn);
StringBuilder where = new StringBuilder();
if (mWhereClause.length() > 0) {
mWhereClause.append(')');
where.append(mWhereClause.toString());
where.append(')');
}
// Tack on the user's selection, if present.
if (selection != null && selection.length() > 0) {
if (mWhereClause.length() > 0) {
mWhereClause.append(" AND ");
where.append(" AND ");
}
mWhereClause.append('(');
mWhereClause.append(selection);
mWhereClause.append(')');
where.append('(');
where.append(selection);
where.append(')');
}
return buildQueryString(
mDistinct, mTables, projection, mWhereClause.toString(),
mDistinct, mTables, projection, where.toString(),
groupBy, having, sortOrder, limit);
}

View File

@@ -1204,7 +1204,7 @@ public class Contacts {
*/
public interface OrganizationColumns {
/**
* The type of the the phone number.
* The type of the organizations.
* <P>Type: INTEGER (one of the constants below)</P>
*/
public static final String TYPE = "type";

View File

@@ -63,7 +63,7 @@ public final class Downloads implements BaseColumns {
* that had initiated a download when that download completes. The
* download's content: uri is specified in the intent's data.
*/
public static final String DOWNLOAD_COMPLETED_ACTION =
public static final String ACTION_DOWNLOAD_COMPLETED =
"android.intent.action.DOWNLOAD_COMPLETED";
/**
@@ -76,7 +76,7 @@ public final class Downloads implements BaseColumns {
* Note: this is not currently sent for downloads that have completed
* successfully.
*/
public static final String NOTIFICATION_CLICKED_ACTION =
public static final String ACTION_NOTIFICATION_CLICKED =
"android.intent.action.DOWNLOAD_NOTIFICATION_CLICKED";
/**
@@ -84,14 +84,14 @@ public final class Downloads implements BaseColumns {
* <P>Type: TEXT</P>
* <P>Owner can Init/Read</P>
*/
public static final String URI = "uri";
public static final String COLUMN_URI = "uri";
/**
* The name of the column containing application-specific data.
* <P>Type: TEXT</P>
* <P>Owner can Init/Read/Write</P>
*/
public static final String APP_DATA = "entity";
public static final String COLUMN_APP_DATA = "entity";
/**
* The name of the column containing the flags that indicates whether
@@ -104,7 +104,7 @@ public final class Downloads implements BaseColumns {
* <P>Type: BOOLEAN</P>
* <P>Owner can Init</P>
*/
public static final String NO_INTEGRITY = "no_integrity";
public static final String COLUMN_NO_INTEGRITY = "no_integrity";
/**
* The name of the column containing the filename that the initiating
@@ -113,7 +113,7 @@ public final class Downloads implements BaseColumns {
* <P>Type: TEXT</P>
* <P>Owner can Init</P>
*/
public static final String FILENAME_HINT = "hint";
public static final String COLUMN_FILE_NAME_HINT = "hint";
/**
* The name of the column containing the filename where the downloaded data
@@ -128,7 +128,7 @@ public final class Downloads implements BaseColumns {
* <P>Type: TEXT</P>
* <P>Owner can Init/Read</P>
*/
public static final String MIMETYPE = "mimetype";
public static final String COLUMN_MIME_TYPE = "mimetype";
/**
* The name of the column containing the flag that controls the destination
@@ -136,7 +136,7 @@ public final class Downloads implements BaseColumns {
* <P>Type: INTEGER</P>
* <P>Owner can Init</P>
*/
public static final String DESTINATION = "destination";
public static final String COLUMN_DESTINATION = "destination";
/**
* The name of the column containing the flags that controls whether the
@@ -145,7 +145,7 @@ public final class Downloads implements BaseColumns {
* <P>Type: INTEGER</P>
* <P>Owner can Init/Read/Write</P>
*/
public static final String VISIBILITY = "visibility";
public static final String COLUMN_VISIBILITY = "visibility";
/**
* The name of the column containing the current control state of the download.
@@ -154,7 +154,7 @@ public final class Downloads implements BaseColumns {
* <P>Type: INTEGER</P>
* <P>Owner can Read</P>
*/
public static final String CONTROL = "control";
public static final String COLUMN_CONTROL = "control";
/**
* The name of the column containing the current status of the download.
@@ -163,7 +163,7 @@ public final class Downloads implements BaseColumns {
* <P>Type: INTEGER</P>
* <P>Owner can Read</P>
*/
public static final String STATUS = "status";
public static final String COLUMN_STATUS = "status";
/**
* The name of the column containing the date at which some interesting
@@ -172,7 +172,7 @@ public final class Downloads implements BaseColumns {
* <P>Type: BIGINT</P>
* <P>Owner can Read</P>
*/
public static final String LAST_MODIFICATION = "lastmod";
public static final String COLUMN_LAST_MODIFICATION = "lastmod";
/**
* The name of the column containing the package name of the application
@@ -181,7 +181,7 @@ public final class Downloads implements BaseColumns {
* <P>Type: TEXT</P>
* <P>Owner can Init/Read</P>
*/
public static final String NOTIFICATION_PACKAGE = "notificationpackage";
public static final String COLUMN_NOTIFICATION_PACKAGE = "notificationpackage";
/**
* The name of the column containing the component name of the class that
@@ -191,7 +191,7 @@ public final class Downloads implements BaseColumns {
* <P>Type: TEXT</P>
* <P>Owner can Init/Read</P>
*/
public static final String NOTIFICATION_CLASS = "notificationclass";
public static final String COLUMN_NOTIFICATION_CLASS = "notificationclass";
/**
* If extras are specified when requesting a download they will be provided in the intent that
@@ -199,7 +199,7 @@ public final class Downloads implements BaseColumns {
* <P>Type: TEXT</P>
* <P>Owner can Init</P>
*/
public static final String NOTIFICATION_EXTRAS = "notificationextras";
public static final String COLUMN_NOTIFICATION_EXTRAS = "notificationextras";
/**
* The name of the column contain the values of the cookie to be used for
@@ -208,7 +208,7 @@ public final class Downloads implements BaseColumns {
* <P>Type: TEXT</P>
* <P>Owner can Init</P>
*/
public static final String COOKIE_DATA = "cookiedata";
public static final String COLUMN_COOKIE_DATA = "cookiedata";
/**
* The name of the column containing the user agent that the initiating
@@ -216,7 +216,7 @@ public final class Downloads implements BaseColumns {
* <P>Type: TEXT</P>
* <P>Owner can Init</P>
*/
public static final String USER_AGENT = "useragent";
public static final String COLUMN_USER_AGENT = "useragent";
/**
* The name of the column containing the referer (sic) that the initiating
@@ -224,7 +224,7 @@ public final class Downloads implements BaseColumns {
* <P>Type: TEXT</P>
* <P>Owner can Init</P>
*/
public static final String REFERER = "referer";
public static final String COLUMN_REFERER = "referer";
/**
* The name of the column containing the total size of the file being
@@ -232,7 +232,7 @@ public final class Downloads implements BaseColumns {
* <P>Type: INTEGER</P>
* <P>Owner can Read</P>
*/
public static final String TOTAL_BYTES = "total_bytes";
public static final String COLUMN_TOTAL_BYTES = "total_bytes";
/**
* The name of the column containing the size of the part of the file that
@@ -240,7 +240,7 @@ public final class Downloads implements BaseColumns {
* <P>Type: INTEGER</P>
* <P>Owner can Read</P>
*/
public static final String CURRENT_BYTES = "current_bytes";
public static final String COLUMN_CURRENT_BYTES = "current_bytes";
/**
* The name of the column where the initiating application can provide the
@@ -252,7 +252,7 @@ public final class Downloads implements BaseColumns {
* <P>Type: INTEGER</P>
* <P>Owner can Init</P>
*/
public static final String OTHER_UID = "otheruid";
public static final String COLUMN_OTHER_UID = "otheruid";
/**
* The name of the column where the initiating application can provided the
@@ -261,7 +261,7 @@ public final class Downloads implements BaseColumns {
* <P>Type: TEXT</P>
* <P>Owner can Init/Read/Write</P>
*/
public static final String TITLE = "title";
public static final String COLUMN_TITLE = "title";
/**
* The name of the column where the initiating application can provide the
@@ -270,7 +270,7 @@ public final class Downloads implements BaseColumns {
* <P>Type: TEXT</P>
* <P>Owner can Init/Read/Write</P>
*/
public static final String DESCRIPTION = "description";
public static final String COLUMN_DESCRIPTION = "description";
/*
* Lists the destinations that an application can specify for a download.

View File

@@ -30,8 +30,9 @@ import android.os.ParcelFileDescriptor;
import android.util.AttributeSet;
import android.util.Config;
import android.util.Log;
import java.util.ArrayList;
import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.concurrent.locks.ReentrantLock;
import java.lang.ref.WeakReference;

View File

@@ -25,30 +25,39 @@ import java.util.ArrayList;
import java.util.Iterator;
/**
* The class CookieSyncManager is used to synchronize the browser cookies
* between RAM and FLASH. To get the best performance, browser cookie is saved
* in RAM. We use a separate thread to sync the cookies between RAM and FLASH on
* a timer base.
* The CookieSyncManager is used to synchronize the browser cookie store
* between RAM and permanent storage. To get the best performance, browser cookies are
* saved in RAM. A separate thread saves the cookies between, driven by a timer.
* <p>
*
* To use the CookieSyncManager, the host application has to call the following
* when the application starts.
* when the application starts:
* <p>
* CookieSyncManager.createInstance(context)
* <p>
* To set up for sync, the host application has to call
* <p>
* CookieSyncManager.getInstance().startSync()
* <p>
* in its Activity.onResume(), and call
*
* <pre class="prettyprint">CookieSyncManager.createInstance(context)</pre><p>
*
* To set up for sync, the host application has to call<p>
* <pre class="prettyprint">CookieSyncManager.getInstance().startSync()</pre><p>
*
* in Activity.onResume(), and call
* <p>
*
* <pre class="prettyprint">
* CookieSyncManager.getInstance().stopSync()
* <p>
* in its Activity.onStop().
* <p>
* </pre><p>
*
* in Activity.onPause().<p>
*
* To get instant sync instead of waiting for the timer to trigger, the host can
* call
* <p>
* CookieSyncManager.getInstance().sync()
* <pre class="prettyprint">CookieSyncManager.getInstance().sync()</pre><p>
*
* The sync interval is 5 minutes, so you will want to force syncs
* manually anyway, for instance in {@link
* WebViewClient#onPageFinished}. Note that even sync() happens
* asynchronously, so don't do it just as your activity is shutting
* down.
*/
public final class CookieSyncManager extends WebSyncManager {
@@ -91,7 +100,7 @@ public final class CookieSyncManager extends WebSyncManager {
}
/**
* Package level api, called from CookieManager Get all the cookies which
* Package level api, called from CookieManager. Get all the cookies which
* matches a given base domain.
* @param domain
* @return A list of Cookie

View File

@@ -111,9 +111,13 @@ public class WebSettings {
private boolean mSyncPending = false;
// Custom handler that queues messages until the WebCore thread is active.
private final EventHandler mEventHandler;
// Private settings so we don't have to go into native code to
// retrieve the values. After setXXX, postSync() needs to be called.
// XXX: The default values need to match those in WebSettings.cpp
//
// The default values need to match those in WebSettings.cpp
// If the defaults change, please also update the JavaDocs so developers
// know what they are.
private LayoutAlgorithm mLayoutAlgorithm = LayoutAlgorithm.NARROW_COLUMNS;
private Context mContext;
private TextSize mTextSize = TextSize.NORMAL;
@@ -459,24 +463,21 @@ public class WebSettings {
}
/**
* Tell the WebView to use the double tree rendering algorithm.
* @param use True if the WebView is to use double tree rendering, false
* otherwise.
* @deprecated This setting controlled a rendering optimization
* that is no longer present. Setting it now has no effect.
*/
@Deprecated
public synchronized void setUseDoubleTree(boolean use) {
if (mUseDoubleTree != use) {
mUseDoubleTree = use;
postSync();
}
return;
}
/**
* Return true if the WebView is using the double tree rendering algorithm.
* @return True if the WebView is using the double tree rendering
* algorithm.
* @deprecated This setting controlled a rendering optimization
* that is no longer present. Setting it now has no effect.
*/
@Deprecated
public synchronized boolean getUseDoubleTree() {
return mUseDoubleTree;
return false;
}
/**
@@ -581,7 +582,7 @@ public class WebSettings {
}
/**
* Return the current layout algorithm.
* Return the current layout algorithm. The default is NARROW_COLUMNS.
* @return LayoutAlgorithm enum value describing the layout algorithm
* being used.
* @see WebSettings.LayoutAlgorithm
@@ -602,7 +603,7 @@ public class WebSettings {
}
/**
* Get the standard font family name.
* Get the standard font family name. The default is "sans-serif".
* @return The standard font family name as a string.
*/
public synchronized String getStandardFontFamily() {
@@ -621,7 +622,7 @@ public class WebSettings {
}
/**
* Get the fixed font family name.
* Get the fixed font family name. The default is "monospace".
* @return The fixed font family name as a string.
*/
public synchronized String getFixedFontFamily() {
@@ -648,7 +649,7 @@ public class WebSettings {
}
/**
* Set the serif font family name.
* Set the serif font family name. The default is "sans-serif".
* @param font A font family name.
*/
public synchronized void setSerifFontFamily(String font) {
@@ -659,7 +660,7 @@ public class WebSettings {
}
/**
* Get the serif font family name.
* Get the serif font family name. The default is "serif".
* @return The serif font family name as a string.
*/
public synchronized String getSerifFontFamily() {
@@ -678,7 +679,7 @@ public class WebSettings {
}
/**
* Get the cursive font family name.
* Get the cursive font family name. The default is "cursive".
* @return The cursive font family name as a string.
*/
public synchronized String getCursiveFontFamily() {
@@ -697,7 +698,7 @@ public class WebSettings {
}
/**
* Get the fantasy font family name.
* Get the fantasy font family name. The default is "fantasy".
* @return The fantasy font family name as a string.
*/
public synchronized String getFantasyFontFamily() {
@@ -718,7 +719,7 @@ public class WebSettings {
}
/**
* Get the minimum font size.
* Get the minimum font size. The default is 8.
* @return A non-negative integer between 1 and 72.
*/
public synchronized int getMinimumFontSize() {
@@ -739,7 +740,7 @@ public class WebSettings {
}
/**
* Get the minimum logical font size.
* Get the minimum logical font size. The default is 8.
* @return A non-negative integer between 1 and 72.
*/
public synchronized int getMinimumLogicalFontSize() {
@@ -760,7 +761,7 @@ public class WebSettings {
}
/**
* Get the default font size.
* Get the default font size. The default is 16.
* @return A non-negative integer between 1 and 72.
*/
public synchronized int getDefaultFontSize() {
@@ -781,7 +782,7 @@ public class WebSettings {
}
/**
* Get the default fixed font size.
* Get the default fixed font size. The default is 16.
* @return A non-negative integer between 1 and 72.
*/
public synchronized int getDefaultFixedFontSize() {
@@ -801,6 +802,7 @@ public class WebSettings {
/**
* Return true if the WebView will load image resources automatically.
* The default is true.
* @return True if the WebView loads images automatically.
*/
public synchronized boolean getLoadsImagesAutomatically() {
@@ -820,16 +822,16 @@ public class WebSettings {
}
/**
* Return true if the WebView will block network image.
* Return true if the WebView will block network image. The default is false.
* @return True if the WebView blocks network image.
*/
public synchronized boolean getBlockNetworkImage() {
return mBlockNetworkImage;
}
/**
* @hide
* Tell the WebView to block all network load requests.
* Tell the WebView to block all network load requests.
* @param flag True if the WebView should block all network loads
*/
public synchronized void setBlockNetworkLoads(boolean flag) {
@@ -842,13 +844,14 @@ public class WebSettings {
/**
* @hide
* Return true if the WebView will block all network loads.
* The default is false.
* @return True if the WebView blocks all network loads.
*/
public synchronized boolean getBlockNetworkLoads() {
return mBlockNetworkLoads;
}
private void verifyNetworkAccess() {
if (!mBlockNetworkLoads) {
if (mContext.checkPermission("android.permission.INTERNET",
@@ -896,7 +899,7 @@ public class WebSettings {
}
/**
* Return true if javascript is enabled.
* Return true if javascript is enabled. <b>Note: The default is false.</b>
* @return True if javascript is enabled.
*/
public synchronized boolean getJavaScriptEnabled() {
@@ -933,7 +936,8 @@ public class WebSettings {
}
/**
* Return true if javascript can open windows automatically.
* Return true if javascript can open windows automatically. The default
* is false.
* @return True if javascript can open windows automatically during
* window.open().
*/
@@ -953,7 +957,7 @@ public class WebSettings {
}
/**
* Get the default text encoding name.
* Get the default text encoding name. The default is "Latin-1".
* @return The default text encoding name as a string.
*/
public synchronized String getDefaultTextEncodingName() {
@@ -1042,8 +1046,8 @@ public class WebSettings {
/**
* Set the priority of the Render thread. Unlike the other settings, this
* one only needs to be called once per process.
*
* one only needs to be called once per process. The default is NORMAL.
*
* @param priority RenderPriority, can be normal, high or low.
*/
public synchronized void setRenderPriority(RenderPriority priority) {

View File

@@ -95,7 +95,104 @@ import java.util.List;
* in a WebView, you must add the <var>INTERNET</var> permissions to your
* Android Manifest file:</p>
* <pre>&lt;uses-permission android:name="android.permission.INTERNET" /></pre>
*
* <p>This must be a child of the <code>&lt;manifest></code> element.</p>
*
* <h3>Basic usage</h3>
*
* <p>By default, a WebView provides no browser-like widgets, does not
* enable JavaScript and errors will be ignored. If your goal is only
* to display some HTML as a part of your UI, this is probably fine;
* the user won't need to interact with the web page beyond reading
* it, and the web page won't need to interact with the user. If you
* actually want a fully blown web browser, then you probably want to
* invoke the Browser application with your URL rather than show it
* with a WebView. See {@link android.content.Intent} for more information.</p>
*
* <pre class="prettyprint">
* WebView webview = new WebView(this);
* setContentView(webview);
*
* // Simplest usage: note that an exception will NOT be thrown
* // if there is an error loading this page (see below).
* webview.loadUrl("http://slashdot.org/");
*
* // Of course you can also load from any string:
* String summary = "&lt;html>&lt;body>You scored &lt;b>192</b> points.&lt;/body>&lt;/html>";
* webview.loadData(summary, "text/html", "utf-8");
* // ... although note that there are restrictions on what this HTML can do.
* // See the JavaDocs for loadData and loadDataWithBaseUrl for more info.
* </pre>
*
* <p>A WebView has several customization points where you can add your
* own behavior. These are:</p>
*
* <ul>
* <li>Creating and setting a {@link android.webkit.WebChromeClient} subclass.
* This class is called when something that might impact a
* browser UI happens, for instance, progress updates and
* JavaScript alerts are sent here.
* </li>
* <li>Creating and setting a {@link android.webkit.WebViewClient} subclass.
* It will be called when things happen that impact the
* rendering of the content, eg, errors or form submissions. You
* can also intercept URL loading here.</li>
* <li>Via the {@link android.webkit.WebSettings} class, which contains
* miscellaneous configuration. </li>
* <li>With the {@link android.webkit.WebView#addJavascriptInterface} method.
* This lets you bind Java objects into the WebView so they can be
* controlled from the web pages JavaScript.</li>
* </ul>
*
* <p>Here's a more complicated example, showing error handling,
* settings, and progress notification:</p>
*
* <pre class="prettyprint">
* // Let's display the progress in the activity title bar, like the
* // browser app does.
* getWindow().requestFeature(Window.FEATURE_PROGRESS);
*
* webview.getSettings().setJavaScriptEnabled(true);
*
* final Activity activity = this;
* webview.setWebChromeClient(new WebChromeClient() {
* public void onProgressChanged(WebView view, int progress) {
* // Activities and WebViews measure progress with different scales.
* // The progress meter will automatically disappear when we reach 100%
* activity.setProgress(progress * 1000);
* }
* });
* webview.setWebViewClient(new WebViewClient() {
* public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
* Toast.makeText(activity, "Oh no! " + description, Toast.LENGTH_SHORT).show();
* }
* });
*
* webview.loadUrl("http://slashdot.org/");
* </pre>
*
* <h3>Cookie and window management</h3>
*
* <p>For obvious security reasons, your application has its own
* cache, cookie store etc - it does not share the Browser
* applications data. Cookies are managed on a separate thread, so
* operations like index building don't block the UI
* thread. Follow the instructions in {@link android.webkit.CookieSyncManager}
* if you want to use cookies in your application.
* </p>
*
* <p>By default, requests by the HTML to open new windows are
* ignored. This is true whether they be opened by JavaScript or by
* the target attribute on a link. You can customize your
* WebChromeClient to provide your own behaviour for opening multiple windows,
* and render them in whatever manner you want.</p>
*
* <p>Standard behavior for an Activity is to be destroyed and
* recreated when the devices orientation is changed. This will cause
* the WebView to reload the current page. If you don't want that, you
* can set your Activity to handle the orientation and keyboardHidden
* changes, and then just leave the WebView alone. It'll automatically
* re-orient itself as appropriate.</p>
*/
public class WebView extends AbsoluteLayout
implements ViewTreeObserver.OnGlobalFocusChangeListener,
@@ -1835,14 +1932,15 @@ public class WebView extends AbsoluteLayout
}
/**
* Clear the resource cache. This will cause resources to be re-downloaded
* if accessed again.
* <p>
* Note: this really needs to be a static method as it clears cache for all
* WebView. But we need mWebViewCore to send message to WebCore thread, so
* we can't make this static.
* Clear the resource cache. Note that the cache is per-application, so
* this will clear the cache for all WebViews used.
*
* @param includeDiskFiles If false, only the RAM cache is cleared.
*/
public void clearCache(boolean includeDiskFiles) {
// Note: this really needs to be a static method as it clears cache for all
// WebView. But we need mWebViewCore to send message to WebCore thread, so
// we can't make this static.
mWebViewCore.sendMessage(EventHub.CLEAR_CACHE,
includeDiskFiles ? 1 : 0, 0);
}

View File

@@ -320,11 +320,6 @@ public abstract class AbsSeekBar extends ProgressBar {
final int max = getMax();
progress += scale * max;
if (progress < 0) {
progress = 0;
} else if (progress > max) {
progress = max;
}
setProgress((int) progress, true);
}

View File

@@ -760,7 +760,7 @@
<!-- Title of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
<string name="permlab_readFrameBuffer">read frame buffer</string>
<!-- Description of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
<string name="permdesc_readFrameBuffer">Allows application to use
<string name="permdesc_readFrameBuffer">Allows application to
read the content of the frame buffer.</string>
<!-- Title of an application permission, listed so the user can choose whether they want to allow the application to do this. -->

View File

@@ -651,26 +651,35 @@ status_t AudioFlinger::setStreamVolume(int stream, float value)
return BAD_VALUE;
}
mHardwareMixerThread->setStreamVolume(stream, value);
#ifdef WITH_A2DP
mA2dpMixerThread->setStreamVolume(stream, value);
#endif
status_t ret = NO_ERROR;
if (stream == AudioSystem::VOICE_CALL ||
stream == AudioSystem::BLUETOOTH_SCO) {
float hwValue = value;
if (stream == AudioSystem::VOICE_CALL) {
value = (float)AudioSystem::logToLinear(value)/100.0f;
hwValue = (float)AudioSystem::logToLinear(value)/100.0f;
// FIXME: This is a temporary fix to re-base the internally
// generated in-call audio so that it is never muted, which is
// already the case for the hardware routed in-call audio.
// When audio stream handling is reworked, this should be
// addressed more cleanly. Fixes #1324; see discussion at
// http://review.source.android.com/8224
value = value * 0.99 + 0.01;
} else { // (type == AudioSystem::BLUETOOTH_SCO)
value = 1.0f;
hwValue = 1.0f;
}
AutoMutex lock(mHardwareLock);
mHardwareStatus = AUDIO_SET_VOICE_VOLUME;
ret = mAudioHardware->setVoiceVolume(value);
ret = mAudioHardware->setVoiceVolume(hwValue);
mHardwareStatus = AUDIO_HW_IDLE;
}
mHardwareMixerThread->setStreamVolume(stream, value);
#ifdef WITH_A2DP
mA2dpMixerThread->setStreamVolume(stream, value);
#endif
return ret;
}
@@ -709,7 +718,15 @@ float AudioFlinger::streamVolume(int stream) const
if (uint32_t(stream) >= AudioSystem::NUM_STREAM_TYPES) {
return 0.0f;
}
return mHardwareMixerThread->streamVolume(stream);
float value = mHardwareMixerThread->streamVolume(stream);
if (stream == AudioSystem::VOICE_CALL) {
// FIXME: Re-base internally generated in-call audio,
// reverse of above in setStreamVolume.
value = (value - 0.01) / 0.99;
}
return value;
}
bool AudioFlinger::streamMute(int stream) const

View File

@@ -0,0 +1,110 @@
/*
* Copyright (C) 2007 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.
*/
#define LOG_TAG "SurfaceFlinger"
#include <stdlib.h>
#include <stdint.h>
#include <sys/types.h>
#include <utils/Errors.h>
#include <utils/Log.h>
#include <core/SkBitmap.h>
#include <ui/EGLDisplaySurface.h>
#include "LayerBase.h"
#include "LayerScreenshot.h"
#include "SurfaceFlinger.h"
#include "DisplayHardware/DisplayHardware.h"
namespace android {
// ---------------------------------------------------------------------------
const uint32_t LayerScreenshot::typeInfo = LayerBase::typeInfo | 0x20;
const char* const LayerScreenshot::typeID = "LayerScreenshot";
// ---------------------------------------------------------------------------
LayerScreenshot::LayerScreenshot(SurfaceFlinger* flinger, DisplayID display)
: LayerBase(flinger, display), mReply(0)
{
}
LayerScreenshot::~LayerScreenshot()
{
}
void LayerScreenshot::onDraw(const Region& clip) const
{
const DisplayHardware& hw(graphicPlane(0).displayHardware());
copybit_image_t dst;
hw.getDisplaySurface(&dst);
if (dst.base != 0) {
uint8_t const* src = (uint8_t const*)(intptr_t(dst.base) + dst.offset);
const int fbWidth = dst.w;
const int fbHeight = dst.h;
const int fbFormat = dst.format;
int x = mTransformedBounds.left;
int y = mTransformedBounds.top;
int w = mTransformedBounds.width();
int h = mTransformedBounds.height();
Parcel* const reply = mReply;
if (reply) {
const size_t Bpp = bytesPerPixel(fbFormat);
const size_t size = w * h * Bpp;
int32_t cfg = SkBitmap::kNo_Config;
switch (fbFormat) {
case PIXEL_FORMAT_RGBA_4444: cfg = SkBitmap::kARGB_4444_Config; break;
case PIXEL_FORMAT_RGBA_8888: cfg = SkBitmap::kARGB_8888_Config; break;
case PIXEL_FORMAT_RGB_565: cfg = SkBitmap::kRGB_565_Config; break;
case PIXEL_FORMAT_A_8: cfg = SkBitmap::kA8_Config; break;
}
reply->writeInt32(0);
reply->writeInt32(cfg);
reply->writeInt32(w);
reply->writeInt32(h);
reply->writeInt32(w * Bpp);
void* data = reply->writeInplace(size);
if (data) {
uint8_t* d = (uint8_t*)data;
uint8_t const* s = src + (x + y*fbWidth) * Bpp;
if (w == fbWidth) {
memcpy(d, s, w*h*Bpp);
} else {
for (int y=0 ; y<h ; y++) {
memcpy(d, s, w*Bpp);
d += w*Bpp;
s += fbWidth*Bpp;
}
}
}
}
}
mCV.broadcast();
}
void LayerScreenshot::takeScreenshot(Mutex& lock, Parcel* reply)
{
mReply = reply;
mCV.wait(lock);
}
// ---------------------------------------------------------------------------
}; // namespace android

View File

@@ -23,6 +23,7 @@
#include <fcntl.h>
#include <errno.h>
#include <math.h>
#include <limits.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/ioctl.h>

View File

@@ -950,14 +950,13 @@ native_handle* Parcel::readNativeHandle(native_handle* (*alloc)(void*, int, int)
return 0;
}
}
for (int i=0 ; err==NO_ERROR && i<numFds ; i++) {
h->data[i] = dup(readFileDescriptor());
if (h->data[i] < 0) err = BAD_VALUE;
}
err = read(h->data + numFds, sizeof(int)*numInts);
if (err != NO_ERROR) {
if (alloc == 0) {
free(h);

View File

@@ -1,7 +1,8 @@
ifneq ($(BUILD_WITHOUT_PV),true)
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
ifneq ($(BUILD_WITHOUT_PV),true)
LOCAL_SRC_FILES:= \
android_media_MediaPlayer.cpp \
android_media_MediaRecorder.cpp \
@@ -11,15 +12,16 @@ LOCAL_SRC_FILES:= \
android_media_ResampleInputStream.cpp
LOCAL_SHARED_LIBRARIES := \
libopencoreplayer \
libopencoreauthor \
libopencore_player \
libopencore_author \
libandroid_runtime \
libnativehelper \
libcutils \
libutils \
libmedia \
libsgl \
libui
libui \
libomx_amrenc_sharedlibrary
LOCAL_STATIC_LIBRARIES :=
@@ -37,6 +39,7 @@ LOCAL_MODULE:= libmedia_jni
include $(BUILD_SHARED_LIBRARY)
endif
# build libsoundpool.so
include $(LOCAL_PATH)/soundpool/Android.mk
endif

View File

@@ -74,7 +74,7 @@ static void android_media_AmrInputStream_GsmAmrEncoderInitialize
encodeProps.iInNumChannels = 1;
encodeProps.iInInterleaveMode = TEncodeProperties::EINTERLEAVE_LR;
encodeProps.iMode = CPvGsmAmrEncoder::GSM_AMR_12_2;
encodeProps.iBitStreamFormatIf2 = false;
encodeProps.iBitStreamFormat = false;
encodeProps.iAudioObjectType = 0;
encodeProps.iOutSamplingRate = encodeProps.iInSamplingRate;
encodeProps.iOutNumChannels = encodeProps.iInNumChannels;

View File

@@ -7,12 +7,16 @@ LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES:= \
MediaRecorderClient.cpp \
MediaPlayerService.cpp \
MetadataRetrieverClient.cpp \
VorbisPlayer.cpp \
MidiFile.cpp
ifneq ($(BUILD_WITHOUT_PV),true)
LOCAL_SRC_FILES+= \
MediaRecorderClient.cpp
endif
ifeq ($(TARGET_OS)-$(TARGET_SIMULATOR),linux-true)
LOCAL_LDLIBS += -ldl -lpthread
endif
@@ -22,14 +26,22 @@ LOCAL_SHARED_LIBRARIES := \
libutils \
libvorbisidec \
libsonivox \
libopencoreplayer \
libopencoreauthor \
libmedia \
libandroid_runtime
ifneq ($(BUILD_WITHOUT_PV),true)
LOCAL_SHARED_LIBRARIES += \
libopencore_player \
libopencore_author
endif
LOCAL_C_INCLUDES := external/tremor/Tremor \
$(call include-path-for, graphics corecg)
ifeq ($(BUILD_WITHOUT_PV),true)
LOCAL_CFLAGS := -DNO_OPENCORE
endif
LOCAL_MODULE:= libmediaplayerservice
include $(BUILD_SHARED_LIBRARY)

View File

@@ -105,7 +105,11 @@ MediaPlayerService::~MediaPlayerService()
sp<IMediaRecorder> MediaPlayerService::createMediaRecorder(pid_t pid)
{
#ifndef NO_OPENCORE
sp<MediaRecorderClient> recorder = new MediaRecorderClient(pid);
#else
sp<MediaRecorderClient> recorder = NULL;
#endif
LOGV("Create new media recorder client from pid %d", pid);
return recorder;
}
@@ -532,10 +536,12 @@ static sp<MediaPlayerBase> createPlayer(player_type playerType, void* cookie,
{
sp<MediaPlayerBase> p;
switch (playerType) {
#ifndef NO_OPENCORE
case PV_PLAYER:
LOGV(" create PVPlayer");
p = new PVPlayer();
break;
#endif
case SONIVOX_PLAYER:
LOGV(" create MidiFile");
p = new MidiFile();

View File

@@ -49,7 +49,11 @@ MetadataRetrieverClient::MetadataRetrieverClient(pid_t pid)
mThumbnail = NULL;
mAlbumArt = NULL;
#ifndef NO_OPENCORE
mRetriever = new PVMetadataRetriever();
#else
mRetriever = NULL;
#endif
if (mRetriever == NULL) {
LOGE("failed to initialize the retriever");
}

View File

@@ -55,7 +55,7 @@ import java.util.List;
* Database helper class for {@link SettingsProvider}.
* Mostly just has a bit {@link #onCreate} to initialize the database.
*/
class DatabaseHelper extends SQLiteOpenHelper {
public class DatabaseHelper extends SQLiteOpenHelper {
/**
* Path to file containing default bookmarks, relative to ANDROID_ROOT.
*/

View File

@@ -43,7 +43,7 @@ public class SettingsProvider extends ContentProvider {
private static final String TABLE_FAVORITES = "favorites";
private static final String TABLE_OLD_FAVORITES = "old_favorites";
private DatabaseHelper mOpenHelper;
protected DatabaseHelper mOpenHelper;
/**
* Decode a content URL into the table, projection, and arguments

View File

@@ -237,6 +237,16 @@ class BatteryService extends Binder {
logOutlier = true;
}
// Separate broadcast is sent for power connected / not connected
// since the standard intent will not wake any applications and some
// applications may want to have smart behavior based on this.
if (mPlugType != 0 && mLastPlugType == 0) {
mContext.sendBroadcast(new Intent(Intent.ACTION_POWER_CONNECTED));
}
else if (mPlugType == 0 && mLastPlugType != 0) {
mContext.sendBroadcast(new Intent(Intent.ACTION_POWER_DISCONNECTED));
}
mLastBatteryStatus = mBatteryStatus;
mLastBatteryHealth = mBatteryHealth;
mLastBatteryPresent = mBatteryPresent;

View File

@@ -1577,12 +1577,22 @@ public final class RIL extends BaseCommands implements CommandsInterface
* {@inheritDoc}
*/
public void getNeighboringCids(Message response) {
RILRequest rr = RILRequest.obtain(
/* TODO: Remove this hack when backward compatibility issue is fixed.
* RIL_REQUEST_GET_NEIGHBORING_CELL_IDS currently returns REQUEST_NOT_SUPPORTED
*/
AsyncResult.forMessage(response).exception =
new CommandException(CommandException.Error.REQUEST_NOT_SUPPORTED);
response.sendToTarget();
response = null;
/* RILRequest rr = RILRequest.obtain(
RILConstants.RIL_REQUEST_GET_NEIGHBORING_CELL_IDS, response);
if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
send(rr);
*/
}
/**

View File

@@ -841,23 +841,6 @@ Document::Write(FILE* to)
fprintf(to, "package %s;\n", this->package.c_str());
}
// gather the types for the import statements
set<Type*> types;
N = this->classes.size();
for (i=0; i<N; i++) {
Class* c = this->classes[i];
c->GatherTypes(&types);
}
set<Type*>::iterator it;
for (it=types.begin(); it!=types.end(); it++) {
Type* t = *it;
string pkg = t->Package();
if (pkg.length() != 0 && pkg != this->package) {
fprintf(to, "import %s;\n", t->ImportType().c_str());
}
}
N = this->classes.size();
for (i=0; i<N; i++) {
Class* c = this->classes[i];

View File

@@ -5,6 +5,7 @@
#include <vector>
#include <set>
#include <stdarg.h>
#include <stdio.h>
using namespace std;

View File

@@ -1,6 +1,7 @@
#include "generate_java.h"
#include "AST.h"
#include "Type.h"
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
@@ -133,7 +134,7 @@ StubClass::make_as_interface(Type *interfaceType)
Method* m = new Method;
m->comment = "/**\n * Cast an IBinder object into an ";
m->comment += interfaceType->Name();
m->comment += interfaceType->QualifiedName();
m->comment += " interface,\n";
m->comment += " * generating a proxy if needed.\n */";
m->modifiers = PUBLIC | STATIC;
@@ -323,7 +324,7 @@ generate_method(const method_type* method, Class* interface,
transactCodeName += method->name.data;
char transactCodeValue[50];
sprintf(transactCodeValue, "(IBinder.FIRST_CALL_TRANSACTION + %d)", index);
sprintf(transactCodeValue, "(android.os.IBinder.FIRST_CALL_TRANSACTION + %d)", index);
Field* transactCode = new Field(STATIC | FINAL,
new Variable(INT_TYPE, transactCodeName));
@@ -517,7 +518,7 @@ generate_method(const method_type* method, Class* interface,
new LiteralExpression("Stub." + transactCodeName),
_data, _reply ? _reply : NULL_VALUE,
new LiteralExpression(
oneway ? "IBinder.FLAG_ONEWAY" : "0"));
oneway ? "android.os.IBinder.FLAG_ONEWAY" : "0"));
tryStatement->statements->Add(call);
// throw back exceptions.

View File

@@ -1,6 +1,7 @@
#ifndef DEVICE_TOOLS_AIDL_H
#define DEVICE_TOOLS_AIDL_H
#include <string.h>
#include <string>
#include <vector>

View File

@@ -5,7 +5,10 @@
#include <sstream>
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <sys/wait.h>
#include <cstdio>
using namespace std;

View File

@@ -2,6 +2,7 @@
#include <stdarg.h>
#include <set>
#include <cstdio>
using namespace std;

View File

@@ -1,5 +1,6 @@
#include "Values.h"
#include <stdlib.h>
#include <cstdio>
// =====================================================================================

View File

@@ -3,6 +3,7 @@
#include <algorithm>
#include <sys/time.h>
#include <time.h>
#include <cstdio>
const char* const XLIFF_XMLNS = "urn:oasis:names:tc:xliff:document:1.2";

View File

@@ -3,6 +3,7 @@
#include "SourcePos.h"
#include <algorithm>
#include <string>
#include <vector>
#include <map>

View File

@@ -6,6 +6,9 @@
#include <sys/fcntl.h>
#include <sys/stat.h>
#include <errno.h>
#include <string.h>
#include <stdlib.h>
#include <cstdio>
#include <host/Directories.h>
#include "log.h"

View File

@@ -4,6 +4,7 @@
#include "ValuesFile.h"
#include "Configuration.h"
#include <string>
#include <cstdio>
using namespace std;

View File

@@ -15,6 +15,7 @@
#include <sstream>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
using namespace std;

View File

@@ -1,3 +1,4 @@
#include <cstdio>
#include "XLIFFFile.h"
#include "ValuesFile.h"
#include "localize.h"

View File

@@ -1,3 +1,4 @@
#include <cstdio>
#include "merge_res_and_xliff.h"