Add a proxy activity that loads the right UI base on screen properties.
Change-Id: If6ae100f02a024006a541f02dabaf98ade89ab5d
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 5ce7df4..6544e07 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -116,11 +116,11 @@
</intent-filter>
</activity>
- <!-- Tab container for all tabs -->
- <activity-alias android:name="DialtactsContactsEntryActivity"
- android:targetActivity="DialtactsActivity"
+ <!-- Front door proxy that picks the right UI based on the screen config -->
+ <activity android:name=".activities.ContactsFrontDoor"
android:label="@string/contactsList"
android:icon="@drawable/ic_launcher_contacts"
+ android:theme="@android:style/Theme.NoTitleBar"
>
<intent-filter>
<action android:name="android.intent.action.MAIN" />
@@ -135,8 +135,7 @@
<data android:mimeType="vnd.android.cursor.dir/person" android:host="contacts" />
<data android:mimeType="vnd.android.cursor.dir/contact" android:host="com.android.contacts" />
</intent-filter>
-
- </activity-alias>
+ </activity>
<!-- Main launch Intent to open the Contacts app. This will open the app in its last manual
state. This is the state that has been explicitly set by the user (e.g. by clicking a tab).
@@ -389,13 +388,6 @@
<activity android:name=".activities.TwoPaneActivity"
android:label="Contacts Goop"
android:theme="@style/TallTitleBarTheme">
-
- <intent-filter android:label="Contacts Goop">
- <action android:name="android.intent.action.MAIN" />
- <category android:name="android.intent.category.DEFAULT" />
- <category android:name="android.intent.category.LAUNCHER" />
- <category android:name="android.intent.category.BROWSABLE" />
- </intent-filter>
</activity>
<!-- Create a new or edit an existing contact -->
diff --git a/src/com/android/contacts/DialtactsActivity.java b/src/com/android/contacts/DialtactsActivity.java
index afb8606..758a3b5 100644
--- a/src/com/android/contacts/DialtactsActivity.java
+++ b/src/com/android/contacts/DialtactsActivity.java
@@ -16,6 +16,7 @@
package com.android.contacts;
+import com.android.contacts.activities.ContactsFrontDoor;
import com.android.internal.telephony.ITelephony;
import android.app.Activity;
@@ -228,25 +229,24 @@
final int savedTabIndex = mLastManuallySelectedTab;
// Choose the tab based on the inbound intent
- String componentName = intent.getComponent().getClassName();
- if (getClass().getName().equals(componentName)) {
- if (recentCallsRequest) {
- mTabHost.setCurrentTab(TAB_INDEX_CALL_LOG);
- } else {
- mTabHost.setCurrentTab(TAB_INDEX_DIALER);
- }
- } else if (FAVORITES_ENTRY_COMPONENT.equals(componentName)) {
- mTabHost.setCurrentTab(TAB_INDEX_FAVORITES);
- } else if (CONTACTS_LAUNCH_ACTIVITY.equals(componentName)) {
- mTabHost.setCurrentTab(mLastManuallySelectedTab);
+ if (intent.getBooleanExtra(ContactsFrontDoor.EXTRA_FRONT_DOOR, false)) {
+ // Launched through the contacts front door, set the proper contacts tab
+ setContactsTab();
} else {
- SharedPreferences prefs = getSharedPreferences(PREFS_DIALTACTS, MODE_PRIVATE);
- boolean favoritesAsContacts = prefs.getBoolean(PREF_FAVORITES_AS_CONTACTS,
- PREF_FAVORITES_AS_CONTACTS_DEFAULT);
- if (favoritesAsContacts) {
+ // Not launched through the front door, look at the component to determine the tab
+ String componentName = intent.getComponent().getClassName();
+ if (getClass().getName().equals(componentName)) {
+ if (recentCallsRequest) {
+ mTabHost.setCurrentTab(TAB_INDEX_CALL_LOG);
+ } else {
+ mTabHost.setCurrentTab(TAB_INDEX_DIALER);
+ }
+ } else if (FAVORITES_ENTRY_COMPONENT.equals(componentName)) {
mTabHost.setCurrentTab(TAB_INDEX_FAVORITES);
+ } else if (CONTACTS_LAUNCH_ACTIVITY.equals(componentName)) {
+ mTabHost.setCurrentTab(mLastManuallySelectedTab);
} else {
- mTabHost.setCurrentTab(TAB_INDEX_CONTACTS);
+ setContactsTab();
}
}
@@ -258,6 +258,17 @@
intent.putExtra(EXTRA_IGNORE_STATE, false);
}
+ private void setContactsTab() {
+ SharedPreferences prefs = getSharedPreferences(PREFS_DIALTACTS, MODE_PRIVATE);
+ boolean favoritesAsContacts = prefs.getBoolean(PREF_FAVORITES_AS_CONTACTS,
+ PREF_FAVORITES_AS_CONTACTS_DEFAULT);
+ if (favoritesAsContacts) {
+ mTabHost.setCurrentTab(TAB_INDEX_FAVORITES);
+ } else {
+ mTabHost.setCurrentTab(TAB_INDEX_CONTACTS);
+ }
+ }
+
@Override
public void onNewIntent(Intent newIntent) {
setIntent(newIntent);
diff --git a/src/com/android/contacts/activities/ContactsFrontDoor.java b/src/com/android/contacts/activities/ContactsFrontDoor.java
new file mode 100644
index 0000000..773e135
--- /dev/null
+++ b/src/com/android/contacts/activities/ContactsFrontDoor.java
@@ -0,0 +1,52 @@
+/*
+ * Copyright (C) 2010 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.contacts.activities;
+
+import com.android.contacts.DialtactsActivity;
+
+import android.app.Activity;
+import android.content.Intent;
+import android.content.res.Configuration;
+import android.os.Bundle;
+
+public class ContactsFrontDoor extends Activity {
+ public static final String EXTRA_FRONT_DOOR = "front_door";
+
+ @Override
+ public void onCreate(Bundle savedState) {
+ super.onCreate(savedState);
+
+ Intent intent = new Intent();
+ intent.setFlags(
+ Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS | Intent.FLAG_ACTIVITY_FORWARD_RESULT);
+ intent.putExtra(EXTRA_FRONT_DOOR, true);
+
+ // The user launched the config based front door, pick the right activity to go to
+ Configuration config = getResources().getConfiguration();
+ int screenLayoutSize = config.screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK;
+ if (screenLayoutSize == Configuration.SCREENLAYOUT_SIZE_XLARGE) {
+ // XL screen, use two pane UI
+ intent.setClass(this, TwoPaneActivity.class);
+ } else {
+ // Default to the normal dialtacts layout
+ intent.setClass(this, DialtactsActivity.class);
+ }
+
+ startActivity(intent);
+ finish();
+ }
+}