Make the editor in the two-pane activity work
Change-Id: Ie468cbedf70a87084117b933e646f3af87746377
diff --git a/res/layout/contact_editor_fragment.xml b/res/layout/contact_editor_fragment.xml
index 3fb7c2e..0055956 100644
--- a/res/layout/contact_editor_fragment.xml
+++ b/res/layout/contact_editor_fragment.xml
@@ -25,14 +25,6 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
-
-<!-- If we need the real ListView again, this is how to do it
- <ListView android:id="@android:id/list"
- android:layout_width="match_parent"
- android:layout_height="0px"
- android:layout_weight="1"
- android:background="@drawable/title_bar_shadow"
- /> -->
<ScrollView
android:layout_width="match_parent"
android:layout_height="0px"
diff --git a/res/layout/two_pane_activity.xml b/res/layout/two_pane_activity.xml
index bcf0ad8..407360b 100644
--- a/res/layout/two_pane_activity.xml
+++ b/res/layout/two_pane_activity.xml
@@ -24,21 +24,22 @@
layout="@layout/search_bar"/>
<LinearLayout
- android:id="@+id/two_pane_activity"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent">
<fragment android:name="com.android.contacts.list.DefaultContactBrowseListFragment"
android:id="@+id/two_pane_list"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
+ android:layout_width="0px"
+ android:layout_height="match_parent"
android:layout_weight="1" />
- <fragment android:name="com.android.contacts.views.detail.ContactDetailFragment"
- android:id="@+id/two_pane_detail"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_weight="1" />
+ <!-- Holder for detail- or editor-fragment. -->
+ <LinearLayout
+ android:id="@+id/two_pane_right_view"
+ android:orientation="horizontal"
+ android:layout_width="0px"
+ android:layout_height="match_parent"
+ android:layout_weight="1" />
</LinearLayout>
</LinearLayout>
diff --git a/src/com/android/contacts/activities/TwoPaneActivity.java b/src/com/android/contacts/activities/TwoPaneActivity.java
index ec6d4e3..63283ad 100644
--- a/src/com/android/contacts/activities/TwoPaneActivity.java
+++ b/src/com/android/contacts/activities/TwoPaneActivity.java
@@ -20,6 +20,7 @@
import com.android.contacts.list.DefaultContactBrowseListFragment;
import com.android.contacts.list.OnContactBrowserActionListener;
import com.android.contacts.views.detail.ContactDetailFragment;
+import com.android.contacts.views.editor.ContactEditorFragment;
import com.android.contacts.widget.SearchEditText;
import com.android.contacts.widget.SearchEditText.OnFilterTextListener;
@@ -28,14 +29,21 @@
import android.net.Uri;
import android.os.Bundle;
import android.text.TextUtils;
+import android.widget.LinearLayout;
import android.widget.Toast;
+import android.widget.LinearLayout.LayoutParams;
public class TwoPaneActivity extends Activity {
private final static String TAG = "TwoPaneActivity";
+
private DefaultContactBrowseListFragment mListFragment;
+ private ListFragmentListener mListFragmentListener = new ListFragmentListener();
+
private ContactDetailFragment mDetailFragment;
private DetailFragmentListener mDetailFragmentListener = new DetailFragmentListener();
- private ListFragmentListener mListFragmentListener = new ListFragmentListener();
+
+ private ContactEditorFragment mEditorFragment;
+ private EditorFragmentListener mEditorFragmentListener = new EditorFragmentListener();
@Override
protected void onCreate(Bundle savedInstanceState) {
@@ -46,12 +54,51 @@
mListFragment = (DefaultContactBrowseListFragment) findFragmentById(R.id.two_pane_list);
mListFragment.setOnContactListActionListener(mListFragmentListener);
- mDetailFragment = (ContactDetailFragment) findFragmentById(R.id.two_pane_detail);
- mDetailFragment.setListener(mDetailFragmentListener);
+ setupContactDetailFragment();
setupSearchUI();
}
+ private void setupContactDetailFragment() {
+ // No editor here
+ if (mEditorFragment != null) {
+ mEditorFragment.setListener(null);
+ mEditorFragment = null;
+ }
+
+ // Already showing? Nothing to do
+ if (mDetailFragment != null) return;
+
+ mDetailFragment = new ContactDetailFragment();
+ mDetailFragment.setListener(mDetailFragmentListener);
+
+ // Nothing showing yet? Create (this happens during Activity-Startup)
+ openFragmentTransaction()
+ .replace(R.id.two_pane_right_view, mDetailFragment)
+ .commit();
+
+ }
+
+ private void setupContactEditorFragment() {
+ // No detail view here
+ if (mDetailFragment != null) {
+ mDetailFragment.setListener(null);
+ mDetailFragment = null;
+ }
+
+ // Already showing? Nothing to do
+ if (mEditorFragment != null) return;
+
+ mEditorFragment = new ContactEditorFragment();
+ mEditorFragment.setListener(mEditorFragmentListener);
+
+ // Nothing showing yet? Create (this happens during Activity-Startup)
+ openFragmentTransaction()
+ .replace(R.id.two_pane_right_view, mEditorFragment)
+ .commit();
+
+ }
+
private void setupSearchUI() {
SearchEditText searchEditText = (SearchEditText)findViewById(R.id.search_src_text);
searchEditText.setOnFilterTextListener(new OnFilterTextListener() {
@@ -112,6 +159,7 @@
}
public void onViewContactAction(Uri contactLookupUri) {
+ setupContactDetailFragment();
mDetailFragment.loadUri(contactLookupUri);
}
}
@@ -122,10 +170,8 @@
}
public void onEditRequested(Uri contactLookupUri) {
-// final ContactEditFragment fragment = new ContactEditFragment();
-// openFragmentTransaction().replace(mDetailFragment.getView().getId(), fragment).commit();
-// fragment.loadUri(contactLookupUri);
- Toast.makeText(TwoPaneActivity.this, "editContact", Toast.LENGTH_LONG).show();
+ setupContactEditorFragment();
+ mEditorFragment.loadUri(contactLookupUri);
}
public void onItemClicked(Intent intent) {
@@ -136,4 +182,22 @@
showDialog(id, bundle);
}
}
+
+ private class EditorFragmentListener implements ContactEditorFragment.Listener {
+ public void onContactNotFound() {
+ Toast.makeText(TwoPaneActivity.this, "onContactNotFound", Toast.LENGTH_LONG).show();
+ }
+
+ public void onDialogRequested(int id, Bundle bundle) {
+ Toast.makeText(TwoPaneActivity.this, "onDialogRequested", Toast.LENGTH_LONG).show();
+ }
+
+ public void onEditorRequested(Intent intent) {
+ Toast.makeText(TwoPaneActivity.this, "onEditorRequested", Toast.LENGTH_LONG).show();
+ }
+
+ public void onError() {
+ Toast.makeText(TwoPaneActivity.this, "onError", Toast.LENGTH_LONG).show();
+ }
+ }
}
diff --git a/src/com/android/contacts/views/detail/ContactDetailFragment.java b/src/com/android/contacts/views/detail/ContactDetailFragment.java
index bfbd4d7..49471cc 100644
--- a/src/com/android/contacts/views/detail/ContactDetailFragment.java
+++ b/src/com/android/contacts/views/detail/ContactDetailFragment.java
@@ -103,6 +103,8 @@
private Uri mLookupUri;
private Listener mListener;
+ private boolean mIsInitialized;
+
private ContactLoader.Result mContactData;
private ContactDetailHeaderView mHeaderView;
private ListView mListView;
@@ -194,11 +196,13 @@
public void loadUri(Uri lookupUri) {
mLookupUri = lookupUri;
- startLoading(LOADER_DETAILS, null);
+ if (mIsInitialized) startLoading(LOADER_DETAILS, null);
}
@Override
protected void onInitializeLoaders() {
+ mIsInitialized = true;
+ if (mLookupUri != null) startLoading(LOADER_DETAILS, null);
}
@Override
diff --git a/src/com/android/contacts/views/editor/ContactEditorFragment.java b/src/com/android/contacts/views/editor/ContactEditorFragment.java
index 384fa23..58f56ff 100644
--- a/src/com/android/contacts/views/editor/ContactEditorFragment.java
+++ b/src/com/android/contacts/views/editor/ContactEditorFragment.java
@@ -93,6 +93,8 @@
private Uri mLookupUri;
private Listener mListener;
+ private boolean mIsInitialized;
+
private ContactLoader.Result mContactData;
private ContactEditorHeaderView mHeaderView;
private MyListView mListView;
@@ -144,11 +146,13 @@
public void loadUri(Uri lookupUri) {
mLookupUri = lookupUri;
- startLoading(LOADER_DETAILS, null);
+ if (mIsInitialized) startLoading(LOADER_DETAILS, null);
}
@Override
protected void onInitializeLoaders() {
+ mIsInitialized = true;
+ if (mLookupUri != null) startLoading(LOADER_DETAILS, null);
}
@Override