OSDN Git Service

wip
authorKoushik Dutta <koushd@gmail.com>
Thu, 21 Feb 2013 23:24:08 +0000 (15:24 -0800)
committerKoushik Dutta <koushd@gmail.com>
Thu, 21 Feb 2013 23:24:08 +0000 (15:24 -0800)
29 files changed:
Widgets/gen/com/koushikdutta/widgets/R.java
Widgets/res/drawable/list_content_left.xml [new file with mode: 0644]
Widgets/res/drawable/list_content_right.xml [new file with mode: 0644]
Widgets/res/layout-large/list_content.xml
Widgets/res/layout-large/list_content_header.xml [new file with mode: 0644]
Widgets/res/layout/list_content.xml
Widgets/res/layout/list_content_header.xml [new file with mode: 0644]
Widgets/res/layout/list_fragment.xml
Widgets/res/layout/list_item_selectable.xml
Widgets/res/values-large/color.xml [new file with mode: 0644]
Widgets/res/values-sw600dp/dimens.xml [new file with mode: 0644]
Widgets/res/values-sw720dp-land/dimens.xml [new file with mode: 0644]
Widgets/res/values-sw720dp/dimens.xml [new file with mode: 0644]
Widgets/res/values/color.xml
Widgets/res/values/dimens.xml [new file with mode: 0644]
Widgets/src/com/koushikdutta/widgets/ActivityBase.java
Widgets/src/com/koushikdutta/widgets/ActivityBaseFragment.java
Widgets/src/com/koushikdutta/widgets/ListContentActivity.java [deleted file]
Widgets/src/com/koushikdutta/widgets/ListContentAdapter.java [new file with mode: 0644]
Widgets/src/com/koushikdutta/widgets/ListContentFragment.java [new file with mode: 0644]
Widgets/src/com/koushikdutta/widgets/ListItem.java
Widgets/src/com/koushikdutta/widgets/SeparatedListAdapter.java
WidgetsSample/AndroidManifest.xml
WidgetsSample/gen/com/koushikdutta/widgets/R.java
WidgetsSample/gen/com/koushikdutta/widgets/sample/R.java
WidgetsSample/res/values-large-v14/styles.xml [new file with mode: 0644]
WidgetsSample/res/values-v14/styles.xml [new file with mode: 0644]
WidgetsSample/res/values/styles.xml [new file with mode: 0644]
WidgetsSample/src/com/koushikdutta/widgets/sample/ListContentTest.java

index 544db34..1d88f8f 100644 (file)
@@ -11,29 +11,49 @@ public final class R {
     public static final class attr {
     }
     public static final class color {
-        public static int holo_blue_bright=0x7f030002;
-        public static int holo_blue_dark=0x7f030001;
-        public static int holo_blue_light=0x7f030000;
+        public static int holo_blue_bright=0x7f040002;
+        public static int holo_blue_dark=0x7f040001;
+        public static int holo_blue_light=0x7f040000;
+        public static int list_content_background=0x7f040003;
+    }
+    public static final class dimen {
+        /**  Default screen margins, per the Android Design guidelines. 
+
+         Customize dimensions originally defined in res/values/dimens.xml (such as
+         screen margins) for sw720dp devices (e.g. 10" tablets) in landscape here.
+    
+
+         Customize dimensions originally defined in res/values/dimens.xml (such as
+         screen margins) for sw720dp devices (e.g. 10" tablets) in landscape here.
+    
+         */
+        public static int activity_horizontal_margin=0x7f050000;
+        public static int activity_vertical_margin=0x7f050001;
+    }
+    public static final class drawable {
+        public static int list_content_left=0x7f020000;
+        public static int list_content_right=0x7f020001;
     }
     public static final class id {
-        public static int checkbox=0x7f04000a;
-        public static int content=0x7f040001;
-        public static int empty=0x7f040004;
-        public static int footer_container=0x7f040005;
-        public static int image=0x7f040007;
-        public static int list=0x7f040000;
-        public static int list_header_title=0x7f040006;
-        public static int listview=0x7f040003;
-        public static int summary=0x7f040009;
-        public static int title=0x7f040008;
-        public static int title_container=0x7f040002;
+        public static int checkbox=0x7f06000a;
+        public static int content=0x7f060000;
+        public static int empty=0x7f060004;
+        public static int footer_container=0x7f060005;
+        public static int image=0x7f060007;
+        public static int list_content_container=0x7f060002;
+        public static int list_header_title=0x7f060006;
+        public static int listview=0x7f060003;
+        public static int summary=0x7f060009;
+        public static int title=0x7f060008;
+        public static int title_container=0x7f060001;
     }
     public static final class layout {
-        public static int list_content=0x7f020000;
-        public static int list_fragment=0x7f020001;
-        public static int list_header=0x7f020002;
-        public static int list_item=0x7f020003;
-        public static int list_item_base=0x7f020004;
-        public static int list_item_selectable=0x7f020005;
+        public static int list_content=0x7f030000;
+        public static int list_content_header=0x7f030001;
+        public static int list_fragment=0x7f030002;
+        public static int list_header=0x7f030003;
+        public static int list_item=0x7f030004;
+        public static int list_item_base=0x7f030005;
+        public static int list_item_selectable=0x7f030006;
     }
 }
diff --git a/Widgets/res/drawable/list_content_left.xml b/Widgets/res/drawable/list_content_left.xml
new file mode 100644 (file)
index 0000000..f7f062f
--- /dev/null
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
+
+    <item>
+        <shape android:shape="rectangle" >
+            <solid android:color="@android:color/darker_gray" />
+        </shape>
+    </item>
+    <item android:left="1dp" android:top="1dp" android:bottom="1dp">
+        <shape android:shape="rectangle" >
+            <solid android:color="@android:color/white" />
+        </shape>
+    </item>
+
+</layer-list>
\ No newline at end of file
diff --git a/Widgets/res/drawable/list_content_right.xml b/Widgets/res/drawable/list_content_right.xml
new file mode 100644 (file)
index 0000000..c952bcc
--- /dev/null
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
+
+    <item>
+        <shape android:shape="rectangle" >
+            <solid android:color="@android:color/darker_gray" />
+        </shape>
+    </item>
+    <item android:left="1dp" android:right="1dp" android:top="1dp" android:bottom="1dp">
+        <shape android:shape="rectangle" >
+            <solid android:color="@android:color/white" />
+        </shape>
+    </item>
+
+</layer-list>
\ No newline at end of file
index 31c0644..92e6ff7 100644 (file)
@@ -2,20 +2,57 @@
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="fill_parent"
     android:layout_height="fill_parent"
-    android:orientation="horizontal" >
+    android:background="@color/list_content_background"
+    android:orientation="vertical" >
 
-    <ListView
-        android:id="@+id/list"
+    <LinearLayout
+        android:id="@+id/title_container"
         android:layout_width="fill_parent"
         android:layout_height="wrap_content"
-        android:layout_weight="2"
         android:orientation="vertical" />
 
     <LinearLayout
-        android:id="@+id/content"
+        android:id="@+id/list_content_container"
+        android:layout_width="fill_parent"
+        android:layout_height="fill_parent"
+        android:orientation="horizontal"
+        android:paddingBottom="@dimen/activity_vertical_margin"
+        android:paddingLeft="@dimen/activity_horizontal_margin"
+        android:paddingRight="@dimen/activity_horizontal_margin"
+        android:paddingTop="@dimen/activity_vertical_margin" >
+
+        <ListView
+            android:layout_marginTop="16dp"
+            android:id="@+id/listview"
+            android:layout_width="fill_parent"
+            android:layout_height="wrap_content"
+            android:layout_weight="1.6180339887498948482"
+            android:background="@drawable/list_content_left" />
+
+        <TextView
+            android:id="@+id/empty"
+            android:layout_width="fill_parent"
+            android:layout_height="fill_parent"
+            android:layout_gravity="center"
+            android:layout_weight="1"
+            android:gravity="center"
+            android:orientation="vertical"
+            android:textAppearance="@android:style/TextAppearance.Medium"
+            android:visibility="gone" />
+
+        <LinearLayout
+            android:id="@+id/content"
+            android:layout_width="fill_parent"
+            android:layout_height="fill_parent"
+            android:layout_weight="1"
+            android:background="@drawable/list_content_right"
+            android:orientation="vertical" />
+    </LinearLayout>
+
+    <LinearLayout
+        android:id="@+id/footer_container"
         android:layout_width="fill_parent"
         android:layout_height="wrap_content"
-        android:layout_weight="1"
         android:orientation="vertical" />
 
 </LinearLayout>
\ No newline at end of file
diff --git a/Widgets/res/layout-large/list_content_header.xml b/Widgets/res/layout-large/list_content_header.xml
new file mode 100644 (file)
index 0000000..eaf13b1
--- /dev/null
@@ -0,0 +1,10 @@
+<TextView xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+id/list_header_title"
+    style="@android:style/TextAppearance.Medium"
+    android:layout_width="fill_parent"
+    android:gravity="center"
+    android:padding="10dp"
+    android:layout_height="wrap_content"
+    android:textColor="@android:color/white" 
+    android:background="@color/holo_blue_light"
+    />
index b0cd4c6..f607af3 100644 (file)
@@ -3,11 +3,7 @@
     android:layout_width="fill_parent"
     android:layout_height="fill_parent" >
 
-    <LinearLayout
-        android:id="@+id/list"
-        android:layout_width="fill_parent"
-        android:layout_height="wrap_content"
-        android:orientation="vertical" />
+    <include layout="@layout/list_fragment" />
 
     <LinearLayout
         android:id="@+id/content"
diff --git a/Widgets/res/layout/list_content_header.xml b/Widgets/res/layout/list_content_header.xml
new file mode 100644 (file)
index 0000000..4326017
--- /dev/null
@@ -0,0 +1 @@
+<include xmlns:android="http://schemas.android.com/apk/res/android" layout="@layout/list_header" />
\ No newline at end of file
index 320c1b6..59ca3f7 100644 (file)
         android:layout_width="fill_parent"
         android:layout_height="fill_parent"
         android:layout_weight="1"
-        android:paddingLeft="10dp"
-        android:paddingRight="10dp" />
+        android:paddingBottom="@dimen/activity_vertical_margin"
+        android:paddingLeft="@dimen/activity_horizontal_margin"
+        android:paddingRight="@dimen/activity_horizontal_margin"
+        android:paddingTop="@dimen/activity_vertical_margin" />
 
     <TextView
-        android:textAppearance="@android:style/TextAppearance.Medium"
         android:id="@+id/empty"
         android:layout_width="fill_parent"
         android:layout_height="fill_parent"
         android:layout_gravity="center"
-        android:gravity="center"
         android:layout_weight="1"
+        android:gravity="center"
         android:orientation="vertical"
-        android:padding="10dp"
+        android:paddingLeft="@dimen/activity_horizontal_margin"
+        android:paddingRight="@dimen/activity_horizontal_margin"
+        android:textAppearance="@android:style/TextAppearance.Medium"
         android:visibility="gone" />
 
     <LinearLayout
index 1ded97f..f5efabe 100644 (file)
@@ -2,10 +2,14 @@
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="fill_parent"
     android:layout_height="wrap_content"
-    android:background="?android:attr/activatedBackgroundIndicator"
     android:minHeight="64dp"
     android:orientation="horizontal" >
 
+    <View
+        android:layout_width="10dp"
+        android:layout_height="match_parent"
+        android:background="?android:attr/activatedBackgroundIndicator" />
+
     <include layout="@layout/list_item_base" />
 
 </LinearLayout>
\ No newline at end of file
diff --git a/Widgets/res/values-large/color.xml b/Widgets/res/values-large/color.xml
new file mode 100644 (file)
index 0000000..8729b26
--- /dev/null
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+    <color name="list_content_background">#f1f1f1</color>
+</resources>
\ No newline at end of file
diff --git a/Widgets/res/values-sw600dp/dimens.xml b/Widgets/res/values-sw600dp/dimens.xml
new file mode 100644 (file)
index 0000000..1ba777d
--- /dev/null
@@ -0,0 +1,8 @@
+<resources>
+
+    <!--
+         Customize dimensions originally defined in res/values/dimens.xml (such as
+         screen margins) for sw600dp devices (e.g. 7" tablets) here.
+    -->
+
+</resources>
\ No newline at end of file
diff --git a/Widgets/res/values-sw720dp-land/dimens.xml b/Widgets/res/values-sw720dp-land/dimens.xml
new file mode 100644 (file)
index 0000000..eee741a
--- /dev/null
@@ -0,0 +1,9 @@
+<resources>
+
+    <!--
+         Customize dimensions originally defined in res/values/dimens.xml (such as
+         screen margins) for sw720dp devices (e.g. 10" tablets) in landscape here.
+    -->
+    <dimen name="activity_horizontal_margin">128dp</dimen>
+
+</resources>
\ No newline at end of file
diff --git a/Widgets/res/values-sw720dp/dimens.xml b/Widgets/res/values-sw720dp/dimens.xml
new file mode 100644 (file)
index 0000000..ab79ef5
--- /dev/null
@@ -0,0 +1,9 @@
+<resources>
+
+    <!--
+         Customize dimensions originally defined in res/values/dimens.xml (such as
+         screen margins) for sw720dp devices (e.g. 10" tablets) in landscape here.
+    -->
+    <dimen name="activity_horizontal_margin">16dp</dimen>
+
+</resources>
\ No newline at end of file
index 4438241..8750076 100644 (file)
@@ -4,4 +4,6 @@
                <color name="holo_blue_dark">#ff0099cc</color>
                <color name="holo_blue_bright">#ff00ddff</color>
     
+                   <color name="list_content_background">@android:color/transparent</color>
+               
 </resources>
\ No newline at end of file
diff --git a/Widgets/res/values/dimens.xml b/Widgets/res/values/dimens.xml
new file mode 100644 (file)
index 0000000..a6dd140
--- /dev/null
@@ -0,0 +1,7 @@
+<resources>
+
+    <!-- Default screen margins, per the Android Design guidelines. -->
+    <dimen name="activity_horizontal_margin">16dp</dimen>
+    <dimen name="activity_vertical_margin">16dp</dimen>
+
+</resources>
\ No newline at end of file
index 03b4f47..e881ff3 100644 (file)
@@ -32,10 +32,18 @@ public class ActivityBase extends FragmentActivity implements ActivityBaseFragme
         return android.R.id.content;
     }
     
+    protected int getContentView() {
+        return 0;
+    }
+    
     ActivityBaseFragment fragment;
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         
+        int cv = getContentView();
+        if (0 != cv)
+            setContentView(cv);
+        
         try {
             fragment = (ActivityBaseFragment)clazz.getConstructors()[0].newInstance();
             fragment.setArguments(getIntent().getExtras());
index 60a8f89..cd03cf6 100644 (file)
@@ -3,6 +3,7 @@ package com.koushikdutta.widgets;
 import java.util.Comparator;
 
 import android.content.Context;
+import android.content.res.Configuration;
 import android.os.Bundle;
 import android.os.Handler;
 import android.support.v4.app.Fragment;
@@ -22,12 +23,25 @@ public class ActivityBaseFragment extends Fragment {
     ListView mListView;
     MyAdapter mAdapter;
     
-    static class MyAdapter extends SeparatedListAdapter<ListItemAdapter> {
+    @Override
+    public void onConfigurationChanged(Configuration newConfig) {
+        super.onConfigurationChanged(newConfig);
+        float hor = getResources().getDimension(R.dimen.activity_horizontal_margin);
+        float ver = getResources().getDimension(R.dimen.activity_vertical_margin);
+        mListView.setPadding((int)hor, (int)ver, (int)hor, (int)ver);
+    }
+    
+    public class MyAdapter extends SeparatedListAdapter<ListItemAdapter> {
         public MyAdapter(Context context) {
             super(context);
         }
         
         @Override
+        protected int getListHeaderResource() {
+            return ActivityBaseFragment.this.getListHeaderResource();
+        }
+        
+        @Override
         public boolean areAllItemsEnabled() {
             return false;
         }
@@ -220,10 +234,18 @@ public class ActivityBaseFragment extends Fragment {
             mListener.onCreate(savedInstanceState, view);
     }
     
+    protected int getListFragmentResource() {
+        return R.layout.list_fragment;
+    }
+    
+    void onListItemClick(ListItem li) {
+        
+    }
+    
     TextView mEmpty;
     @Override
-    public final View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
-        View ret = inflater.inflate(R.layout.list_fragment, null);
+    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
+        View ret = inflater.inflate(getListFragmentResource(), null);
         
         mListView = (ListView)ret.findViewById(R.id.listview);
         mListView.setOnItemClickListener(new OnItemClickListener() {
@@ -232,6 +254,7 @@ public class ActivityBaseFragment extends Fragment {
                 Object item = mAdapter.getItem(arg2);
                 if (item instanceof ListItem) {
                     ListItem li = (ListItem)item;
+                    onListItemClick(li);
                     li.onClickInternal(arg1);
                 }
             }
@@ -273,7 +296,11 @@ public class ActivityBaseFragment extends Fragment {
         mDestroyed = true;
     }
     
-    public int getListItemResource() {
+    protected int getListHeaderResource() {
+        return R.layout.list_header;
+    }
+    
+    protected int getListItemResource() {
         return R.layout.list_item;
     }
 
@@ -316,4 +343,8 @@ public class ActivityBaseFragment extends Fragment {
     public ListView getListView() {
         return mListView;
     }
+    
+    public MyAdapter getAdapter() {
+        return mAdapter;
+    }
 }
diff --git a/Widgets/src/com/koushikdutta/widgets/ListContentActivity.java b/Widgets/src/com/koushikdutta/widgets/ListContentActivity.java
deleted file mode 100644 (file)
index fd63aa0..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-package com.koushikdutta.widgets;
-
-import android.os.Bundle;
-import android.view.View;
-import android.widget.ListView;
-
-
-public class ListContentActivity extends ActivityBase {
-    public static class ListContentFragment extends ActivityBaseFragment {
-        @Override
-        public int getListItemResource() {
-            return R.layout.list_item_selectable;
-        }
-    }
-
-    public ListContentActivity() {
-        super(ListContentFragment.class);
-    }
-    
-    @Override
-    protected int getListContainerId() {
-        return R.id.list;
-    }
-    
-    @Override
-    protected void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-
-        setContentView(R.layout.list_content);
-    }
-    
-    @Override
-    public void onCreate(Bundle savedInstanceState, View view) {
-        super.onCreate(savedInstanceState, view);
-        
-        getFragment().getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE);
-//        getFragment().getListView().setCacheColorHint(android.R.color.transparent);
-//        getFragment().getListView().setSelector(R.drawable.list_selector);
-    }
-}
diff --git a/Widgets/src/com/koushikdutta/widgets/ListContentAdapter.java b/Widgets/src/com/koushikdutta/widgets/ListContentAdapter.java
new file mode 100644 (file)
index 0000000..ac484b5
--- /dev/null
@@ -0,0 +1,7 @@
+package com.koushikdutta.widgets;
+
+import android.support.v4.app.Fragment;
+
+public interface ListContentAdapter {
+    public Fragment getFragment(ListItem listItem, Fragment convertFragment);
+}
diff --git a/Widgets/src/com/koushikdutta/widgets/ListContentFragment.java b/Widgets/src/com/koushikdutta/widgets/ListContentFragment.java
new file mode 100644 (file)
index 0000000..1e95199
--- /dev/null
@@ -0,0 +1,90 @@
+package com.koushikdutta.widgets;
+
+import android.content.res.Configuration;
+import android.os.Bundle;
+import android.support.v4.app.Fragment;
+import android.support.v4.app.FragmentTransaction;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ListView;
+
+public class ListContentFragment extends ActivityBaseFragment {
+    ViewGroup mContent;
+    ViewGroup mContainer;
+
+    @Override
+    protected int getListHeaderResource() {
+        return R.layout.list_content_header;
+    }
+    
+    private void setPadding() {
+        float hor = getResources().getDimension(R.dimen.activity_horizontal_margin);
+        float ver = getResources().getDimension(R.dimen.activity_vertical_margin);
+        getListView().setPadding(0, 0, 0, 0);
+        mContainer.setPadding((int)hor, (int)ver, (int)hor, (int)ver);
+    }
+    
+    Fragment mCurrentContent;
+    
+    @Override
+    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
+        View ret = super.onCreateView(inflater, container, savedInstanceState);
+
+        mContent = (ViewGroup)ret.findViewById(R.id.content);
+        mContainer = (ViewGroup)ret.findViewById(R.id.list_content_container);
+
+        setPadding();
+        getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE);
+        
+        return ret;
+    }
+    
+    public void setContent(Fragment content) {
+        Fragment last = mCurrentContent;
+        mCurrentContent = content;
+        FragmentTransaction ft = getActivity().getSupportFragmentManager().beginTransaction();
+        ft.add(R.id.content, mCurrentContent);
+        if (last != null)
+            ft.remove(last);
+        ft.commit();
+    }
+    
+    @Override
+    void onListItemClick(ListItem li) {
+        super.onListItemClick(li);
+        if (mContentAdapter == null)
+            return;
+        
+        setContent(mContentAdapter.getFragment(li, mCurrentContent));
+    }
+
+    @Override
+    protected int getListItemResource() {
+        return R.layout.list_item_selectable;
+    }
+
+    @Override
+    protected int getListFragmentResource() {
+        return R.layout.list_content;
+    }
+    
+    public ViewGroup getContent() {
+        return mContent;
+    }
+    
+    @Override
+    public void onConfigurationChanged(Configuration newConfig) {
+        super.onConfigurationChanged(newConfig);
+        setPadding();
+    }
+    
+    ListContentAdapter mContentAdapter;
+    public ListContentAdapter getContentAdapter() {
+        return mContentAdapter;
+    }
+    
+    public void setContentAdapter(ListContentAdapter adapter) {
+        mContentAdapter = adapter;
+    }
+}
index 0ef1ed7..bb25b77 100644 (file)
@@ -1,6 +1,7 @@
 package com.koushikdutta.widgets;
 
 import android.content.Context;
+import android.graphics.drawable.Drawable;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.widget.CompoundButton;
@@ -17,11 +18,19 @@ public class ListItem {
     private int Icon;
     
     public ListItem setIcon(int icon) {
+        mDrawable = null;
         Icon = icon;
         Context.mAdapter.notifyDataSetChanged();
         return this;
     }
     
+    public ListItem setDrawable(Drawable drawable) {
+        mDrawable = drawable;
+        Icon = 0;
+        Context.mAdapter.notifyDataSetChanged();
+        return this;
+    }
+    
     public ListItem setEnabled(boolean enabled) {
         Enabled = enabled;
         Context.mAdapter.notifyDataSetChanged();
@@ -86,6 +95,12 @@ public class ListItem {
         Icon = icon;
     }
     
+    Drawable mDrawable;
+    public ListItem(ActivityBaseFragment context, String title, String summary, Drawable drawable) {
+        this(context, title, summary);
+        mDrawable = drawable;
+    }
+    
     private boolean CheckboxVisible = false;
     private boolean checked = false;
     
@@ -169,6 +184,10 @@ public class ListItem {
                 iv.setVisibility(View.VISIBLE);
                 iv.setImageResource(Icon);
             }
+            else if (mDrawable != null) {
+                iv.setVisibility(View.VISIBLE);
+                iv.setImageDrawable(mDrawable);
+            }
             else {
                 iv.setVisibility(View.GONE);
             }
index 7a8d75d..b009801 100644 (file)
@@ -15,13 +15,17 @@ public class SeparatedListAdapter<T extends Adapter> extends BaseAdapter {
         headers.clear();
         notifyDataSetChanged();
     }
+    
+    protected int getListHeaderResource() {
+        return R.layout.list_header;
+    }
 
     private final HashMap<String, T> sections = new HashMap<String, T>();
     private final ArrayAdapter<String> headers;
     private final static int TYPE_SECTION_HEADER = 0;
 
     public SeparatedListAdapter(Context context) {
-        headers = new ArrayAdapter<String>(context, R.layout.list_header);
+        headers = new ArrayAdapter<String>(context, getListHeaderResource());
     }
 
     public void addSection(String section, T adapter) {
index ebdb551..197f0a1 100644 (file)
@@ -12,7 +12,7 @@
         android:allowBackup="true"
         android:icon="@drawable/ic_launcher"
         android:label="@string/app_name"
-        android:theme="@android:style/Theme.Holo.Light" >
+        android:theme="@style/AppTheme" >
         <activity
             android:name=".MainActivity"
             android:label="@string/app_name" >
             </intent-filter>
         </activity>
         <activity
-            android:name=".MainActivityDark" />
+            android:name=".MainActivityDark" 
+            android:theme="@style/AppDarkTheme" />
         <activity
-            android:name=".ListContentTest"
-            android:theme="@android:style/Theme.Holo" />
+            android:name=".ListContentTest"/>
     </application>
 
 </manifest>
\ No newline at end of file
index 21a9e88..52aa238 100644 (file)
@@ -8,29 +8,39 @@ package com.koushikdutta.widgets;
 
 public final class R {
        public static final class id {
-               public static final int summary = 0x7f060009;
-               public static final int content = 0x7f060001;
-               public static final int title = 0x7f060008;
-               public static final int title_container = 0x7f060002;
-               public static final int list_header_title = 0x7f060006;
-               public static final int empty = 0x7f060004;
-               public static final int checkbox = 0x7f06000a;
-               public static final int footer_container = 0x7f060005;
-               public static final int image = 0x7f060007;
-               public static final int list = 0x7f060000;
-               public static final int listview = 0x7f060003;
+               public static final int summary = 0x7f080009;
+               public static final int content = 0x7f080000;
+               public static final int title = 0x7f080008;
+               public static final int title_container = 0x7f080001;
+               public static final int list_header_title = 0x7f080006;
+               public static final int empty = 0x7f080004;
+               public static final int checkbox = 0x7f08000a;
+               public static final int footer_container = 0x7f080005;
+               public static final int image = 0x7f080007;
+               public static final int list_content_container = 0x7f080002;
+               public static final int listview = 0x7f080003;
        }
        public static final class color {
-               public static final int holo_blue_light = 0x7f040000;
                public static final int holo_blue_bright = 0x7f040002;
+               public static final int holo_blue_light = 0x7f040000;
+               public static final int list_content_background = 0x7f040003;
                public static final int holo_blue_dark = 0x7f040001;
        }
        public static final class layout {
+               public static final int list_item_selectable = 0x7f030006;
+               public static final int list_content_header = 0x7f030001;
+               public static final int list_header = 0x7f030003;
                public static final int list_content = 0x7f030000;
-               public static final int list_header = 0x7f030002;
-               public static final int list_item_base = 0x7f030004;
-               public static final int list_item = 0x7f030003;
-               public static final int list_item_selectable = 0x7f030005;
-               public static final int list_fragment = 0x7f030001;
+               public static final int list_item_base = 0x7f030005;
+               public static final int list_item = 0x7f030004;
+               public static final int list_fragment = 0x7f030002;
+       }
+       public static final class drawable {
+               public static final int list_content_right = 0x7f020005;
+               public static final int list_content_left = 0x7f020004;
+       }
+       public static final class dimen {
+               public static final int activity_vertical_margin = 0x7f050001;
+               public static final int activity_horizontal_margin = 0x7f050000;
        }
 }
index 9b21a2b..511aab4 100644 (file)
@@ -14,42 +14,91 @@ public final class R {
         public static final int holo_blue_bright=0x7f040002;
         public static final int holo_blue_dark=0x7f040001;
         public static final int holo_blue_light=0x7f040000;
+        public static final int list_content_background=0x7f040003;
+    }
+    public static final class dimen {
+        /**  Default screen margins, per the Android Design guidelines. 
+
+         Customize dimensions originally defined in res/values/dimens.xml (such as
+         screen margins) for sw720dp devices (e.g. 10" tablets) in landscape here.
+    
+
+         Customize dimensions originally defined in res/values/dimens.xml (such as
+         screen margins) for sw720dp devices (e.g. 10" tablets) in landscape here.
+    
+         */
+        public static final int activity_horizontal_margin=0x7f050000;
+        public static final int activity_vertical_margin=0x7f050001;
     }
     public static final class drawable {
         public static final int box=0x7f020000;
         public static final int drive=0x7f020001;
         public static final int dropbox=0x7f020002;
         public static final int ic_launcher=0x7f020003;
-        public static final int nexusone=0x7f020004;
+        public static final int list_content_left=0x7f020004;
+        public static final int list_content_right=0x7f020005;
+        public static final int nexusone=0x7f020006;
     }
     public static final class id {
-        public static final int checkbox=0x7f06000a;
-        public static final int content=0x7f060001;
-        public static final int empty=0x7f060004;
-        public static final int footer_container=0x7f060005;
-        public static final int image=0x7f060007;
-        public static final int list=0x7f060000;
-        public static final int list_header_title=0x7f060006;
-        public static final int listview=0x7f060003;
-        public static final int summary=0x7f060009;
-        public static final int title=0x7f060008;
-        public static final int title_container=0x7f060002;
+        public static final int checkbox=0x7f08000a;
+        public static final int content=0x7f080000;
+        public static final int empty=0x7f080004;
+        public static final int footer_container=0x7f080005;
+        public static final int image=0x7f080007;
+        public static final int list_content_container=0x7f080002;
+        public static final int list_header_title=0x7f080006;
+        public static final int listview=0x7f080003;
+        public static final int summary=0x7f080009;
+        public static final int title=0x7f080008;
+        public static final int title_container=0x7f080001;
     }
     public static final class layout {
         public static final int list_content=0x7f030000;
-        public static final int list_fragment=0x7f030001;
-        public static final int list_header=0x7f030002;
-        public static final int list_item=0x7f030003;
-        public static final int list_item_base=0x7f030004;
-        public static final int list_item_selectable=0x7f030005;
+        public static final int list_content_header=0x7f030001;
+        public static final int list_fragment=0x7f030002;
+        public static final int list_header=0x7f030003;
+        public static final int list_item=0x7f030004;
+        public static final int list_item_base=0x7f030005;
+        public static final int list_item_selectable=0x7f030006;
     }
     public static final class string {
-        public static final int app_name=0x7f050000;
-        public static final int box=0x7f050005;
-        public static final int cloud=0x7f050001;
-        public static final int devices=0x7f050006;
-        public static final int dropbox=0x7f050004;
-        public static final int googledrive=0x7f050002;
-        public static final int googledrive_summary=0x7f050003;
+        public static final int app_name=0x7f060000;
+        public static final int box=0x7f060005;
+        public static final int cloud=0x7f060001;
+        public static final int devices=0x7f060006;
+        public static final int dropbox=0x7f060004;
+        public static final int googledrive=0x7f060002;
+        public static final int googledrive_summary=0x7f060003;
+    }
+    public static final class style {
+        /**  API 14 theme customizations can go here. 
+         */
+        public static final int AppBaseDarkTheme=0x7f070002;
+        /** 
+        Base application theme, dependent on API level. This theme is replaced
+        by AppBaseTheme from res/values-vXX/styles.xml on newer devices.
+    
+
+            Theme customizations available in newer API levels can go in
+            res/values-vXX/styles.xml, while customizations related to
+            backward-compatibility can go here.
+        
+
+        Base application theme for API 14+. This theme completely replaces
+        AppBaseTheme from BOTH res/values/styles.xml and
+        res/values-v11/styles.xml on API 14+ devices.
+    
+ API 14 theme customizations can go here. 
+         */
+        public static final int AppBaseTheme=0x7f070000;
+        /**  Application theme. 
+ All customizations that are NOT specific to a particular API-level can go here. 
+         */
+        public static final int AppDarkTheme=0x7f070003;
+        /**  Application theme. 
+ All customizations that are NOT specific to a particular API-level can go here. 
+         */
+        public static final int AppTheme=0x7f070001;
+        public static final int RequestTheme=0x7f070004;
     }
 }
diff --git a/WidgetsSample/res/values-large-v14/styles.xml b/WidgetsSample/res/values-large-v14/styles.xml
new file mode 100644 (file)
index 0000000..79a70c8
--- /dev/null
@@ -0,0 +1,3 @@
+<resources xmlns:android="http://schemas.android.com/apk/res/android">
+    <style name="RequestTheme"  parent="@android:style/Theme.Holo.Light.Dialog"></style>
+</resources>
\ No newline at end of file
diff --git a/WidgetsSample/res/values-v14/styles.xml b/WidgetsSample/res/values-v14/styles.xml
new file mode 100644 (file)
index 0000000..7f8e15e
--- /dev/null
@@ -0,0 +1,15 @@
+<resources xmlns:android="http://schemas.android.com/apk/res/android">
+
+    <!--
+        Base application theme for API 14+. This theme completely replaces
+        AppBaseTheme from BOTH res/values/styles.xml and
+        res/values-v11/styles.xml on API 14+ devices.
+    -->
+    <style name="AppBaseTheme" parent="@android:style/Theme.Holo.Light.DarkActionBar">
+        <!-- API 14 theme customizations can go here. -->
+    </style>
+
+    <style name="AppBaseDarkTheme" parent="android:Theme.Holo">
+        <!-- API 14 theme customizations can go here. -->
+    </style>
+</resources>
\ No newline at end of file
diff --git a/WidgetsSample/res/values/styles.xml b/WidgetsSample/res/values/styles.xml
new file mode 100644 (file)
index 0000000..d912b55
--- /dev/null
@@ -0,0 +1,29 @@
+<resources>
+
+    <!--
+        Base application theme, dependent on API level. This theme is replaced
+        by AppBaseTheme from res/values-vXX/styles.xml on newer devices.
+    -->
+    <style name="AppBaseTheme" parent="@android:style/Theme.Light">
+        <!--
+            Theme customizations available in newer API levels can go in
+            res/values-vXX/styles.xml, while customizations related to
+            backward-compatibility can go here.
+        -->
+    </style>
+
+    <!-- Application theme. -->
+    <style name="AppTheme" parent="AppBaseTheme">
+        <!-- All customizations that are NOT specific to a particular API-level can go here. -->
+    </style>
+    
+    <style name="AppBaseDarkTheme" parent="android:Theme.Black">
+        
+    </style>
+    
+    <!-- Application theme. -->
+    <style name="AppDarkTheme" parent="AppBaseDarkTheme">
+        <!-- All customizations that are NOT specific to a particular API-level can go here. -->
+    </style>
+    
+</resources>
\ No newline at end of file
index a7ee6bb..72e696e 100644 (file)
@@ -1,23 +1,81 @@
 package com.koushikdutta.widgets.sample;
 
+import java.util.Date;
+import java.util.List;
+
+import android.content.pm.ApplicationInfo;
+import android.content.pm.PackageInfo;
 import android.os.Bundle;
+import android.os.Handler;
 import android.view.View;
+import android.widget.TextView;
 
-import com.koushikdutta.widgets.ListContentActivity;
+import com.koushikdutta.widgets.ActivityBase;
+import com.koushikdutta.widgets.ListContentAdapter;
+import com.koushikdutta.widgets.ListContentFragment;
 import com.koushikdutta.widgets.ListItem;
 
-public class ListContentTest extends ListContentActivity {
+public class ListContentTest extends ActivityBase {
+    public ListContentTest() {
+        super(ListContentFragment.class);
+    }
+    
+    public ListContentFragment getFragment() {
+        return (ListContentFragment)super.getFragment();
+    }
+    
+    protected void onResume() {
+        super.onResume();
+        getFragment().getListView().setItemChecked(1, true);
+
+    };
+    
+    
+    Handler handler = new Handler();
     @Override
     public void onCreate(Bundle savedInstanceState, View view) {
         super.onCreate(savedInstanceState, view);
 
+        List<PackageInfo> pkgs = getPackageManager().getInstalledPackages(0);
+        int count = 0;
+        for (PackageInfo pkg: pkgs) {
+//            if (count == 6)
+//                break;
+            if ((pkg.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0)
+                continue;
+            
+            count++;
+
+            addItem("Allow", new ListItem(getFragment(), pkg.applicationInfo.loadLabel(getPackageManager()).toString(), new Date().toLocaleString(), pkg.applicationInfo.loadIcon(getPackageManager())));
+        }
+        
 //        android:background="?android:attr/activatedBackgroundIndicator"
-        addItem(R.string.devices, new ListItem(getFragment(), "Nexus S", null, R.drawable.nexusone));
-        addItem(R.string.devices, new ListItem(getFragment(), "Nexus One", null, R.drawable.nexusone));
-        addItem(R.string.devices, new ListItem(getFragment(), "Nexus 4", null, R.drawable.nexusone));
-        addItem(R.string.devices, new ListItem(getFragment(), "Nexus 7", null, R.drawable.nexusone));
-        addItem(R.string.devices, new ListItem(getFragment(), "Nexus 10", null, R.drawable.nexusone));
+//        addItem("Allow", new ListItem(getFragment(), "Nexus S", null, R.drawable.nexusone));
+//        addItem("Allow", new ListItem(getFragment(), "Nexus One", null, R.drawable.nexusone));
+//        addItem("Allow", new ListItem(getFragment(), "Nexus 4", null, R.drawable.nexusone));
+//        addItem("Deny", new ListItem(getFragment(), "Nexus 7", null, R.drawable.nexusone));
+//        addItem("Deny", new ListItem(getFragment(), "Nexus 10", null, R.drawable.nexusone));
 
-        getFragment().getListView().setItemChecked(0, true);
+        handler.postDelayed(new Runnable() {
+            
+            @Override
+            public void run() {
+//                getFragment().getListView().requestFocus();
+//                getFragment().getListView().requestFocusFromTouch();
+//                getFragment().getListView().setItemChecked(1, true);
+            }
+        }, 200);
+//        getFragment().getListView().setItemChecked(1, true);
+        
+//        getFragment().setContentAdapter(new ListContentAdapter() {
+//            @Override
+//            public View getView(ListItem listItem, View convertView) {
+//                TextView tv = new TextView(ListContentTest.this);
+//                tv.setText(listItem.getTitle());
+//                return tv;
+//            }
+//        });
+        
+//        getFragment().getListView().setPadding(0, 0, 0, 0);
     }
 }