summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEugene Kudelevsky <Eugene.Kudelevsky@jetbrains.com>2013-08-06 20:45:13 +0400
committerEugene Kudelevsky <Eugene.Kudelevsky@jetbrains.com>2013-08-06 20:45:13 +0400
commit673ce11d1e787bdfd0ca181006d3480e6e0d9eb9 (patch)
treeae403e3d0c332a4cc7603d4bf2dd635c227b6d0d
parentb05260e5e14b8d108cfca477eb484be00d95a9d6 (diff)
downloadidea-673ce11d1e787bdfd0ca181006d3480e6e0d9eb9.tar.gz
IDEA-111650 filter intent actions and categories to complete
-rw-r--r--android/src/org/jetbrains/android/dom/converters/ConstantFieldConverter.java56
-rw-r--r--android/src/org/jetbrains/android/sdk/AndroidTargetData.java76
-rw-r--r--android/testData/dom/manifest/IntentActionCompletion1.xml11
-rw-r--r--android/testData/dom/manifest/IntentActionCompletion2.xml11
-rw-r--r--android/testData/dom/manifest/IntentActionCompletion3.xml11
-rw-r--r--android/testData/dom/manifest/IntentActionDoc2.xml11
-rw-r--r--android/testData/dom/manifest/IntentCategoryCompletion.xml11
-rw-r--r--android/testData/dom/manifest/IntentCategoryCompletion_after.xml11
-rw-r--r--android/testData/dom/manifest/IntentCategoryDoc2.xml11
-rw-r--r--android/testData/dom/manifest/intentsCompletion2_after.xml2
-rw-r--r--android/testData/sdk1.5/platforms/android-1.5/data/activity_actions.txt89
-rw-r--r--android/testData/sdk1.5/platforms/android-1.5/data/broadcast_actions.txt120
-rw-r--r--android/testData/sdk1.5/platforms/android-1.5/data/categories.txt28
-rw-r--r--android/testData/sdk1.5/platforms/android-1.5/data/service_actions.txt1
-rw-r--r--android/testSrc/org/jetbrains/android/dom/AndroidManifestDomTest.java29
15 files changed, 473 insertions, 5 deletions
diff --git a/android/src/org/jetbrains/android/dom/converters/ConstantFieldConverter.java b/android/src/org/jetbrains/android/dom/converters/ConstantFieldConverter.java
index a64507da46c..6d0b4f679d0 100644
--- a/android/src/org/jetbrains/android/dom/converters/ConstantFieldConverter.java
+++ b/android/src/org/jetbrains/android/dom/converters/ConstantFieldConverter.java
@@ -15,6 +15,7 @@
*/
package org.jetbrains.android.dom.converters;
+import com.android.sdklib.IAndroidTarget;
import com.intellij.codeInsight.lookup.LookupElementBuilder;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.util.Pair;
@@ -28,6 +29,9 @@ import com.intellij.util.containers.HashSet;
import com.intellij.util.xml.*;
import org.jetbrains.android.dom.LookupClass;
import org.jetbrains.android.dom.LookupPrefix;
+import org.jetbrains.android.dom.manifest.*;
+import org.jetbrains.android.sdk.AndroidPlatform;
+import org.jetbrains.android.sdk.AndroidTargetData;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -67,21 +71,66 @@ public class ConstantFieldConverter extends Converter<String> implements CustomR
getProject()).findClass(lookupClass.value(), scope);
if (psiClass != null) {
- result.add(new MyReference(element, psiClass, lookupPrefix.value()));
+ final Set<String> filteringSet = getFilteringSet(context);
+ result.add(new MyReference(element, psiClass, lookupPrefix.value(), filteringSet));
}
}
return result.toArray(new PsiReference[result.size()]);
}
+ @Nullable
+ private static Set<String> getFilteringSet(@NotNull ConvertContext context) {
+ final Module module = context.getModule();
+
+ if (module == null) {
+ return null;
+ }
+ final AndroidPlatform platform = AndroidPlatform.getInstance(module);
+
+ if (platform == null) {
+ return null;
+ }
+ final IAndroidTarget target = platform.getTarget();
+ final AndroidTargetData targetData = platform.getSdkData().getTargetData(target);
+ DomElement element = context.getInvocationElement().getParent();
+
+ if (element instanceof Category) {
+ return targetData.getStaticConstantsData().getCategories();
+ }
+ else if (element instanceof Action) {
+ element = element.getParent();
+
+ if (element instanceof IntentFilter) {
+ element = element.getParent();
+
+ if (element instanceof Activity) {
+ return targetData.getStaticConstantsData().getActivityActions();
+ }
+ else if (element instanceof Service) {
+ return targetData.getStaticConstantsData().getServiceActions();
+ }
+ else if (element instanceof Receiver) {
+ return targetData.getStaticConstantsData().getReceiverActions();
+ }
+ }
+ }
+ return null;
+ }
+
private static class MyReference extends PsiReferenceBase<PsiElement> {
private final PsiClass myClass;
private final String myLookupPrefix;
+ private final Set<String> myFilteringSet;
- public MyReference(@NotNull PsiElement element, @NotNull PsiClass aClass, @NotNull String lookupPrefix) {
+ public MyReference(@NotNull PsiElement element,
+ @NotNull PsiClass aClass,
+ @NotNull String lookupPrefix,
+ @Nullable Set<String> filteringSet) {
super(element, true);
myClass = aClass;
myLookupPrefix = lookupPrefix;
+ myFilteringSet = filteringSet;
}
@Nullable
@@ -129,6 +178,9 @@ public class ConstantFieldConverter extends Converter<String> implements CustomR
public boolean process(Pair<PsiField, String> pair) {
final String s = pair.getSecond();
+ if (myFilteringSet != null && !myFilteringSet.contains(s)) {
+ return true;
+ }
if (added.add(s)) {
result.add(LookupElementBuilder.create(pair.getFirst(), s));
}
diff --git a/android/src/org/jetbrains/android/sdk/AndroidTargetData.java b/android/src/org/jetbrains/android/sdk/AndroidTargetData.java
index 18b61d2622c..2305a6f19f4 100644
--- a/android/src/org/jetbrains/android/sdk/AndroidTargetData.java
+++ b/android/src/org/jetbrains/android/sdk/AndroidTargetData.java
@@ -24,9 +24,10 @@ import org.jetbrains.android.uipreview.RenderingException;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
+import java.io.BufferedReader;
+import java.io.FileReader;
import java.io.IOException;
-import java.util.Map;
-import java.util.Set;
+import java.util.*;
/**
* @author Eugene.Kudelevsky
@@ -43,6 +44,8 @@ public class AndroidTargetData {
private final Object myPublicResourceCacheLock = new Object();
private volatile Map<String, Set<String>> myPublicResourceCache;
+ private volatile MyStaticConstantsData myStaticConstantsData;
+
public AndroidTargetData(@NotNull AndroidSdkData sdkData, @NotNull IAndroidTarget target) {
mySdkData = sdkData;
myTarget = target;
@@ -156,6 +159,14 @@ public class AndroidTargetData {
return xmlFiles;
}
+ @NotNull
+ public synchronized MyStaticConstantsData getStaticConstantsData() {
+ if (myStaticConstantsData == null) {
+ myStaticConstantsData = new MyStaticConstantsData();
+ }
+ return myStaticConstantsData;
+ }
+
private class PublicAttributeDefinitions extends FilteredAttributeDefinitions {
protected PublicAttributeDefinitions(@NotNull AttributeDefinitions wrappee) {
super(wrappee);
@@ -208,4 +219,65 @@ public class AndroidTargetData {
return myResult;
}
}
+
+ public class MyStaticConstantsData {
+ private final Set<String> myActivityActions;
+ private final Set<String> myServiceActions;
+ private final Set<String> myReceiverActions;
+ private final Set<String> myCategories;
+
+ private MyStaticConstantsData() {
+ myActivityActions = collectValues(IAndroidTarget.ACTIONS_ACTIVITY);
+ myServiceActions = collectValues(IAndroidTarget.ACTIONS_SERVICE);
+ myReceiverActions = collectValues(IAndroidTarget.ACTIONS_BROADCAST);
+ myCategories = collectValues(IAndroidTarget.CATEGORIES);
+ }
+
+ @Nullable
+ public Set<String> getActivityActions() {
+ return myActivityActions;
+ }
+
+ @Nullable
+ public Set<String> getServiceActions() {
+ return myServiceActions;
+ }
+
+ @Nullable
+ public Set<String> getReceiverActions() {
+ return myReceiverActions;
+ }
+
+ @Nullable
+ public Set<String> getCategories() {
+ return myCategories;
+ }
+
+ @Nullable
+ private Set<String> collectValues(int pathId) {
+ final Set<String> result = new HashSet<String>();
+ try {
+ final BufferedReader reader = new BufferedReader(new FileReader(myTarget.getPath(pathId)));
+
+ try {
+ String line;
+
+ while ((line = reader.readLine()) != null) {
+ line = line.trim();
+
+ if (line.length() > 0 && !line.startsWith("#")) {
+ result.add(line);
+ }
+ }
+ }
+ finally {
+ reader.close();
+ }
+ }
+ catch (IOException e) {
+ return null;
+ }
+ return result;
+ }
+ }
}
diff --git a/android/testData/dom/manifest/IntentActionCompletion1.xml b/android/testData/dom/manifest/IntentActionCompletion1.xml
new file mode 100644
index 00000000000..27e9b2ba26e
--- /dev/null
+++ b/android/testData/dom/manifest/IntentActionCompletion1.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+ package="p1.p2">
+ <application android:icon="@drawable/picture1">
+ <activity>
+ <intent-filter>
+ <action android:name="android.intent.action.CA<caret>"/>
+ </intent-filter>
+ </activity>
+ </application>
+</manifest>
diff --git a/android/testData/dom/manifest/IntentActionCompletion2.xml b/android/testData/dom/manifest/IntentActionCompletion2.xml
new file mode 100644
index 00000000000..6d59eff1d09
--- /dev/null
+++ b/android/testData/dom/manifest/IntentActionCompletion2.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+ package="p1.p2">
+ <application android:icon="@drawable/picture1">
+ <receiver>
+ <intent-filter>
+ <action android:name="android.intent.action.CA<caret>"/>
+ </intent-filter>
+ </receiver>
+ </application>
+</manifest>
diff --git a/android/testData/dom/manifest/IntentActionCompletion3.xml b/android/testData/dom/manifest/IntentActionCompletion3.xml
new file mode 100644
index 00000000000..0668940f32b
--- /dev/null
+++ b/android/testData/dom/manifest/IntentActionCompletion3.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+ package="p1.p2">
+ <application android:icon="@drawable/picture1">
+ <service>
+ <intent-filter>
+ <action android:name="<caret>"/>
+ </intent-filter>
+ </service>
+ </application>
+</manifest>
diff --git a/android/testData/dom/manifest/IntentActionDoc2.xml b/android/testData/dom/manifest/IntentActionDoc2.xml
new file mode 100644
index 00000000000..ad0669860d5
--- /dev/null
+++ b/android/testData/dom/manifest/IntentActionDoc2.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+ package="p1.p2">
+ <application android:icon="@drawable/picture1">
+ <service>
+ <intent-filter>
+ <action android:name="android.intent.action.CALL_BUTT<caret>ON"/>
+ </intent-filter>
+ </service>
+ </application>
+</manifest>
diff --git a/android/testData/dom/manifest/IntentCategoryCompletion.xml b/android/testData/dom/manifest/IntentCategoryCompletion.xml
new file mode 100644
index 00000000000..2116bab29cf
--- /dev/null
+++ b/android/testData/dom/manifest/IntentCategoryCompletion.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+ package="p1.p2">
+ <application android:icon="@drawable/picture1">
+ <activity>
+ <intent-filter>
+ <category android:name="android.intent.category.T<caret>"/>
+ </intent-filter>
+ </activity>
+ </application>
+</manifest>
diff --git a/android/testData/dom/manifest/IntentCategoryCompletion_after.xml b/android/testData/dom/manifest/IntentCategoryCompletion_after.xml
new file mode 100644
index 00000000000..251f46c40bf
--- /dev/null
+++ b/android/testData/dom/manifest/IntentCategoryCompletion_after.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+ package="p1.p2">
+ <application android:icon="@drawable/picture1">
+ <activity>
+ <intent-filter>
+ <category android:name="android.intent.category.TAB"/>
+ </intent-filter>
+ </activity>
+ </application>
+</manifest>
diff --git a/android/testData/dom/manifest/IntentCategoryDoc2.xml b/android/testData/dom/manifest/IntentCategoryDoc2.xml
new file mode 100644
index 00000000000..4576aafe309
--- /dev/null
+++ b/android/testData/dom/manifest/IntentCategoryDoc2.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+ package="p1.p2">
+ <application android:icon="@drawable/picture1">
+ <activity>
+ <intent-filter>
+ <category android:name="android.intent.category.TES<caret>T"
+ </intent-filter>
+ </activity>
+ </application>
+</manifest>
diff --git a/android/testData/dom/manifest/intentsCompletion2_after.xml b/android/testData/dom/manifest/intentsCompletion2_after.xml
index 8eb309fdb2e..2d32d88eca2 100644
--- a/android/testData/dom/manifest/intentsCompletion2_after.xml
+++ b/android/testData/dom/manifest/intentsCompletion2_after.xml
@@ -4,7 +4,7 @@
<application android:label="@string/app_name">
<service>
<intent-filter>
- <action android:name="android.intent.action.BOOT_COMPLETED" />
+ <action android:name="android.intent.action.BOOT_COMPL<caret>" />
</intent-filter>
</service>
</application>
diff --git a/android/testData/sdk1.5/platforms/android-1.5/data/activity_actions.txt b/android/testData/sdk1.5/platforms/android-1.5/data/activity_actions.txt
new file mode 100644
index 00000000000..4b7436a072a
--- /dev/null
+++ b/android/testData/sdk1.5/platforms/android-1.5/data/activity_actions.txt
@@ -0,0 +1,89 @@
+android.app.action.ADD_DEVICE_ADMIN
+android.app.action.SET_NEW_PASSWORD
+android.app.action.START_ENCRYPTION
+android.bluetooth.adapter.action.REQUEST_DISCOVERABLE
+android.bluetooth.adapter.action.REQUEST_ENABLE
+android.intent.action.ALL_APPS
+android.intent.action.ANSWER
+android.intent.action.APP_ERROR
+android.intent.action.ASSIST
+android.intent.action.ATTACH_DATA
+android.intent.action.BUG_REPORT
+android.intent.action.CALL
+android.intent.action.CALL_BUTTON
+android.intent.action.CHOOSER
+android.intent.action.CREATE_LIVE_FOLDER
+android.intent.action.CREATE_SHORTCUT
+android.intent.action.DELETE
+android.intent.action.DIAL
+android.intent.action.EDIT
+android.intent.action.EVENT_REMINDER
+android.intent.action.GET_CONTENT
+android.intent.action.INSERT
+android.intent.action.INSERT_OR_EDIT
+android.intent.action.INSTALL_PACKAGE
+android.intent.action.MAIN
+android.intent.action.MANAGE_NETWORK_USAGE
+android.intent.action.MEDIA_SEARCH
+android.intent.action.MUSIC_PLAYER
+android.intent.action.PASTE
+android.intent.action.PICK
+android.intent.action.PICK_ACTIVITY
+android.intent.action.POWER_USAGE_SUMMARY
+android.intent.action.RINGTONE_PICKER
+android.intent.action.RUN
+android.intent.action.SEARCH
+android.intent.action.SEARCH_LONG_PRESS
+android.intent.action.SEND
+android.intent.action.SENDTO
+android.intent.action.SEND_MULTIPLE
+android.intent.action.SET_ALARM
+android.intent.action.SET_WALLPAPER
+android.intent.action.SYNC
+android.intent.action.SYSTEM_TUTORIAL
+android.intent.action.UNINSTALL_PACKAGE
+android.intent.action.VIEW
+android.intent.action.VOICE_COMMAND
+android.intent.action.WEB_SEARCH
+android.media.action.DISPLAY_AUDIO_EFFECT_CONTROL_PANEL
+android.net.wifi.PICK_WIFI_NETWORK
+android.nfc.action.NDEF_DISCOVERED
+android.nfc.action.TAG_DISCOVERED
+android.nfc.action.TECH_DISCOVERED
+android.provider.calendar.action.HANDLE_CUSTOM_EVENT
+android.search.action.SEARCH_SETTINGS
+android.settings.ACCESSIBILITY_SETTINGS
+android.settings.ADD_ACCOUNT_SETTINGS
+android.settings.AIRPLANE_MODE_SETTINGS
+android.settings.APN_SETTINGS
+android.settings.APPLICATION_DETAILS_SETTINGS
+android.settings.APPLICATION_DEVELOPMENT_SETTINGS
+android.settings.APPLICATION_SETTINGS
+android.settings.BLUETOOTH_SETTINGS
+android.settings.DATA_ROAMING_SETTINGS
+android.settings.DATE_SETTINGS
+android.settings.DEVICE_INFO_SETTINGS
+android.settings.DISPLAY_SETTINGS
+android.settings.INPUT_METHOD_SETTINGS
+android.settings.INPUT_METHOD_SUBTYPE_SETTINGS
+android.settings.INTERNAL_STORAGE_SETTINGS
+android.settings.LOCALE_SETTINGS
+android.settings.LOCATION_SOURCE_SETTINGS
+android.settings.MANAGE_ALL_APPLICATIONS_SETTINGS
+android.settings.MANAGE_APPLICATIONS_SETTINGS
+android.settings.MEMORY_CARD_SETTINGS
+android.settings.NETWORK_OPERATOR_SETTINGS
+android.settings.NFCSHARING_SETTINGS
+android.settings.NFC_SETTINGS
+android.settings.PRIVACY_SETTINGS
+android.settings.QUICK_LAUNCH_SETTINGS
+android.settings.SECURITY_SETTINGS
+android.settings.SETTINGS
+android.settings.SOUND_SETTINGS
+android.settings.SYNC_SETTINGS
+android.settings.USER_DICTIONARY_SETTINGS
+android.settings.WIFI_IP_SETTINGS
+android.settings.WIFI_SETTINGS
+android.settings.WIRELESS_SETTINGS
+android.speech.tts.engine.CHECK_TTS_DATA
+android.speech.tts.engine.INSTALL_TTS_DATA
diff --git a/android/testData/sdk1.5/platforms/android-1.5/data/broadcast_actions.txt b/android/testData/sdk1.5/platforms/android-1.5/data/broadcast_actions.txt
new file mode 100644
index 00000000000..a2308407793
--- /dev/null
+++ b/android/testData/sdk1.5/platforms/android-1.5/data/broadcast_actions.txt
@@ -0,0 +1,120 @@
+android.app.action.ACTION_PASSWORD_CHANGED
+android.app.action.ACTION_PASSWORD_EXPIRING
+android.app.action.ACTION_PASSWORD_FAILED
+android.app.action.ACTION_PASSWORD_SUCCEEDED
+android.app.action.DEVICE_ADMIN_DISABLED
+android.app.action.DEVICE_ADMIN_DISABLE_REQUESTED
+android.app.action.DEVICE_ADMIN_ENABLED
+android.bluetooth.a2dp.profile.action.CONNECTION_STATE_CHANGED
+android.bluetooth.a2dp.profile.action.PLAYING_STATE_CHANGED
+android.bluetooth.adapter.action.CONNECTION_STATE_CHANGED
+android.bluetooth.adapter.action.DISCOVERY_FINISHED
+android.bluetooth.adapter.action.DISCOVERY_STARTED
+android.bluetooth.adapter.action.LOCAL_NAME_CHANGED
+android.bluetooth.adapter.action.SCAN_MODE_CHANGED
+android.bluetooth.adapter.action.STATE_CHANGED
+android.bluetooth.device.action.ACL_CONNECTED
+android.bluetooth.device.action.ACL_DISCONNECTED
+android.bluetooth.device.action.ACL_DISCONNECT_REQUESTED
+android.bluetooth.device.action.BOND_STATE_CHANGED
+android.bluetooth.device.action.CLASS_CHANGED
+android.bluetooth.device.action.FOUND
+android.bluetooth.device.action.NAME_CHANGED
+android.bluetooth.device.action.UUID
+android.bluetooth.devicepicker.action.DEVICE_SELECTED
+android.bluetooth.devicepicker.action.LAUNCH
+android.bluetooth.headset.action.VENDOR_SPECIFIC_HEADSET_EVENT
+android.bluetooth.headset.profile.action.AUDIO_STATE_CHANGED
+android.bluetooth.headset.profile.action.CONNECTION_STATE_CHANGED
+android.bluetooth.input.profile.action.CONNECTION_STATE_CHANGED
+android.bluetooth.pan.profile.action.CONNECTION_STATE_CHANGED
+android.hardware.action.NEW_PICTURE
+android.hardware.action.NEW_VIDEO
+android.hardware.input.action.QUERY_KEYBOARD_LAYOUTS
+android.intent.action.ACTION_POWER_CONNECTED
+android.intent.action.ACTION_POWER_DISCONNECTED
+android.intent.action.ACTION_SHUTDOWN
+android.intent.action.AIRPLANE_MODE
+android.intent.action.BATTERY_CHANGED
+android.intent.action.BATTERY_LOW
+android.intent.action.BATTERY_OKAY
+android.intent.action.BOOT_COMPLETED
+android.intent.action.CAMERA_BUTTON
+android.intent.action.CONFIGURATION_CHANGED
+android.intent.action.DATE_CHANGED
+android.intent.action.DEVICE_STORAGE_LOW
+android.intent.action.DEVICE_STORAGE_OK
+android.intent.action.DOCK_EVENT
+android.intent.action.DREAMING_STARTED
+android.intent.action.DREAMING_STOPPED
+android.intent.action.EXTERNAL_APPLICATIONS_AVAILABLE
+android.intent.action.EXTERNAL_APPLICATIONS_UNAVAILABLE
+android.intent.action.FETCH_VOICEMAIL
+android.intent.action.GTALK_CONNECTED
+android.intent.action.GTALK_DISCONNECTED
+android.intent.action.HEADSET_PLUG
+android.intent.action.INPUT_METHOD_CHANGED
+android.intent.action.LOCALE_CHANGED
+android.intent.action.MANAGE_PACKAGE_STORAGE
+android.intent.action.MEDIA_BAD_REMOVAL
+android.intent.action.MEDIA_BUTTON
+android.intent.action.MEDIA_CHECKING
+android.intent.action.MEDIA_EJECT
+android.intent.action.MEDIA_MOUNTED
+android.intent.action.MEDIA_NOFS
+android.intent.action.MEDIA_REMOVED
+android.intent.action.MEDIA_SCANNER_FINISHED
+android.intent.action.MEDIA_SCANNER_SCAN_FILE
+android.intent.action.MEDIA_SCANNER_STARTED
+android.intent.action.MEDIA_SHARED
+android.intent.action.MEDIA_UNMOUNTABLE
+android.intent.action.MEDIA_UNMOUNTED
+android.intent.action.MY_PACKAGE_REPLACED
+android.intent.action.NEW_OUTGOING_CALL
+android.intent.action.NEW_VOICEMAIL
+android.intent.action.PACKAGE_ADDED
+android.intent.action.PACKAGE_CHANGED
+android.intent.action.PACKAGE_DATA_CLEARED
+android.intent.action.PACKAGE_FIRST_LAUNCH
+android.intent.action.PACKAGE_FULLY_REMOVED
+android.intent.action.PACKAGE_INSTALL
+android.intent.action.PACKAGE_NEEDS_VERIFICATION
+android.intent.action.PACKAGE_REMOVED
+android.intent.action.PACKAGE_REPLACED
+android.intent.action.PACKAGE_RESTARTED
+android.intent.action.PACKAGE_VERIFIED
+android.intent.action.PHONE_STATE
+android.intent.action.PROVIDER_CHANGED
+android.intent.action.PROXY_CHANGE
+android.intent.action.REBOOT
+android.intent.action.SCREEN_OFF
+android.intent.action.SCREEN_ON
+android.intent.action.TIMEZONE_CHANGED
+android.intent.action.TIME_SET
+android.intent.action.TIME_TICK
+android.intent.action.UID_REMOVED
+android.intent.action.USER_PRESENT
+android.intent.action.WALLPAPER_CHANGED
+android.media.ACTION_SCO_AUDIO_STATE_UPDATED
+android.media.AUDIO_BECOMING_NOISY
+android.media.RINGER_MODE_CHANGED
+android.media.SCO_AUDIO_STATE_CHANGED
+android.media.VIBRATE_SETTING_CHANGED
+android.media.action.CLOSE_AUDIO_EFFECT_CONTROL_SESSION
+android.media.action.OPEN_AUDIO_EFFECT_CONTROL_SESSION
+android.net.conn.BACKGROUND_DATA_SETTING_CHANGED
+android.net.nsd.STATE_CHANGED
+android.net.wifi.NETWORK_IDS_CHANGED
+android.net.wifi.RSSI_CHANGED
+android.net.wifi.SCAN_RESULTS
+android.net.wifi.STATE_CHANGE
+android.net.wifi.WIFI_STATE_CHANGED
+android.net.wifi.p2p.CONNECTION_STATE_CHANGE
+android.net.wifi.p2p.DISCOVERY_STATE_CHANGE
+android.net.wifi.p2p.PEERS_CHANGED
+android.net.wifi.p2p.STATE_CHANGED
+android.net.wifi.p2p.THIS_DEVICE_CHANGED
+android.net.wifi.supplicant.CONNECTION_CHANGE
+android.net.wifi.supplicant.STATE_CHANGE
+android.speech.tts.TTS_QUEUE_PROCESSING_COMPLETED
+android.speech.tts.engine.TTS_DATA_INSTALLED
diff --git a/android/testData/sdk1.5/platforms/android-1.5/data/categories.txt b/android/testData/sdk1.5/platforms/android-1.5/data/categories.txt
new file mode 100644
index 00000000000..9d0a688bd7a
--- /dev/null
+++ b/android/testData/sdk1.5/platforms/android-1.5/data/categories.txt
@@ -0,0 +1,28 @@
+android.intent.category.ALTERNATIVE
+android.intent.category.APP_BROWSER
+android.intent.category.APP_CALCULATOR
+android.intent.category.APP_CALENDAR
+android.intent.category.APP_CONTACTS
+android.intent.category.APP_EMAIL
+android.intent.category.APP_GALLERY
+android.intent.category.APP_MAPS
+android.intent.category.APP_MARKET
+android.intent.category.APP_MESSAGING
+android.intent.category.APP_MUSIC
+android.intent.category.BROWSABLE
+android.intent.category.CAR_DOCK
+android.intent.category.CAR_MODE
+android.intent.category.DEFAULT
+android.intent.category.DESK_DOCK
+android.intent.category.DEVELOPMENT_PREFERENCE
+android.intent.category.EMBED
+android.intent.category.HE_DESK_DOCK
+android.intent.category.HOME
+android.intent.category.INFO
+android.intent.category.LAUNCHER
+android.intent.category.LE_DESK_DOCK
+android.intent.category.MONKEY
+android.intent.category.OPENABLE
+android.intent.category.PREFERENCE
+android.intent.category.SELECTED_ALTERNATIVE
+android.intent.category.TAB
diff --git a/android/testData/sdk1.5/platforms/android-1.5/data/service_actions.txt b/android/testData/sdk1.5/platforms/android-1.5/data/service_actions.txt
new file mode 100644
index 00000000000..c9cdc63b070
--- /dev/null
+++ b/android/testData/sdk1.5/platforms/android-1.5/data/service_actions.txt
@@ -0,0 +1 @@
+_ \ No newline at end of file
diff --git a/android/testSrc/org/jetbrains/android/dom/AndroidManifestDomTest.java b/android/testSrc/org/jetbrains/android/dom/AndroidManifestDomTest.java
index c387d6e5bb3..7481a53f326 100644
--- a/android/testSrc/org/jetbrains/android/dom/AndroidManifestDomTest.java
+++ b/android/testSrc/org/jetbrains/android/dom/AndroidManifestDomTest.java
@@ -181,6 +181,29 @@ public class AndroidManifestDomTest extends AndroidDomTest {
doTestExternalDoc("The user pressed the \"call\" button to go to the dialer");
}
+ public void testIntentActionDoc2() throws Throwable {
+ myFixture.configureFromExistingVirtualFile(
+ copyFileToProject(getTestName(false) + ".xml"));
+ doTestExternalDoc("The user pressed the \"call\" button to go to the dialer");
+ }
+
+ public void testIntentActionCompletion1() throws Throwable {
+ doTestCompletionVariants(getTestName(false) + ".xml", "android.intent.action.CALL", "android.intent.action.CALL_BUTTON");
+ }
+
+ public void testIntentActionCompletion2() throws Throwable {
+ doTestCompletionVariants(getTestName(false) + ".xml","android.intent.action.CAMERA_BUTTON",
+ "android.intent.action.NEW_OUTGOING_CALL");
+ }
+
+ public void testIntentActionCompletion3() throws Throwable {
+ doTestCompletionVariants(getTestName(false) + ".xml");
+ }
+
+ public void testIntentCategoryCompletion() throws Throwable {
+ doTestCompletion(false);
+ }
+
public void testIntentCategoryDoc() throws Throwable {
myFixture.configureFromExistingVirtualFile(
copyFileToProject(getTestName(false) + ".xml"));
@@ -195,6 +218,12 @@ public class AndroidManifestDomTest extends AndroidDomTest {
doTestExternalDoc("The activity should be able to browse the Internet.");
}
+ public void testIntentCategoryDoc2() throws Throwable {
+ myFixture.configureFromExistingVirtualFile(
+ copyFileToProject(getTestName(false) + ".xml"));
+ doTestExternalDoc("To be used as a test");
+ }
+
public void testApplicationNameCompletion() throws Throwable {
copyFileToProject("MyApplication.java", "src/p1/p2/MyApplication.java");
doTestCompletion(false);