OSDN Git Service

Improve the add-device-admin layout.
authorChris Palmer <palmer@google.com>
Mon, 13 Sep 2010 22:14:55 +0000 (15:14 -0700)
committerChris Palmer <palmer@google.com>
Tue, 28 Sep 2010 17:32:49 +0000 (10:32 -0700)
Make it so that the app's explanation comes before the list of possible
policies. This gives the app a chance to explain itself instead of having
the explanation hidden below the fold. To avoid situations in which one
bunch of text items can obscure the other, use an expandable/ellipsizable
TextView with an indicator image. This resolves b/2992594.

Change-Id: I0eb0d0c46bb4be2ec2e019d741915537e1fcc592

res/layout/device_admin_add.xml
src/com/android/settings/DeviceAdminAdd.java

index f560331..f3ba59e 100644 (file)
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:orientation="vertical">
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:orientation="horizontal"
+        android:background="@*android:drawable/title_bar_medium">
+        <TextView android:id="@+id/title"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:gravity="center"
+            android:textAppearance="?android:attr/textAppearanceLarge"
+            android:textColor="?android:attr/textColorPrimary"
+            android:shadowColor="?android:attr/colorBackground"
+            android:shadowRadius="2" />
+    </LinearLayout>
+
     <ScrollView
         android:layout_width="match_parent"
-        android:layout_height="match_parent"
-        android:layout_weight="1"
-        android:orientation="vertical">
+        android:layout_height="0dip"
+        android:layout_weight="1.0"
+        android:gravity="top">
         <LinearLayout
             android:layout_width="match_parent"
-            android:layout_height="0dp"
-            android:layout_weight="1"
+            android:layout_height="wrap_content"
             android:orientation="vertical">
-            <LinearLayout
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content"
-                android:orientation="horizontal"
-                android:background="@*android:drawable/title_bar_medium">
-                <TextView android:id="@+id/title"
-                    android:layout_width="match_parent"
-                    android:layout_height="match_parent"
-                    android:gravity="center"
-                    android:textAppearance="?android:attr/textAppearanceLarge"
-                    android:textColor="?android:attr/textColorPrimary"
-                    android:shadowColor="?android:attr/colorBackground"
-                    android:shadowRadius="2" />
-            </LinearLayout>
+
             <LinearLayout
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                     android:singleLine="true"
                     android:ellipsize="marquee" />
             </LinearLayout>
-            <TextView android:id="@+id/admin_warning"
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content"
-                android:padding="10dip" />
-            <LinearLayout android:id="@+id/admin_policies"
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content"
-                android:orientation="vertical"
-                android:paddingLeft="16dip"
-                android:paddingRight="12dip" />
-            <TextView android:id="@+id/admin_description"
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content"
-                android:layout_weight="1"
-                android:padding="10dip" />
-            <TextView android:id="@+id/add_msg"
+
+            <LinearLayout
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
-                android:layout_weight="1"
-                android:padding="10dip" />
+                android:orientation="vertical">
+                <TextView android:id="@+id/admin_description"
+                    android:layout_width="fill_parent"
+                    android:layout_height="0dip"
+                    android:layout_weight="0"
+                    android:padding="0dip" />
+                <LinearLayout
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:orientation="horizontal"
+                    android:gravity="center_vertical">
+                    <ImageView android:id="@+id/add_msg_expander"
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:gravity="center_vertical" />
+                    <TextView android:id="@+id/add_msg"
+                        android:layout_width="fill_parent"
+                        android:layout_height="wrap_content"
+                        android:gravity="center_vertical"
+                        android:padding="10dip" />
+                </LinearLayout>
+
+                <TextView android:id="@+id/admin_warning"
+                    android:layout_width="fill_parent"
+                    android:layout_height="wrap_content"
+                    android:layout_weight="1"
+                    android:padding="10dip" />
+                <LinearLayout android:id="@+id/admin_policies"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:layout_weight="1"
+                    android:orientation="vertical"
+                    android:paddingLeft="16dip"
+                    android:paddingRight="12dip" />
+            </LinearLayout>
+
         </LinearLayout>
     </ScrollView>
+
     <LinearLayout style="@android:style/ButtonBar"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
            android:layout_height="0dip"
            android:layout_weight="1" />
     </LinearLayout>
+
 </LinearLayout>
index 4760277..005196e 100644 (file)
@@ -35,9 +35,12 @@ import android.content.res.Resources;
 import android.os.Bundle;
 import android.os.Handler;
 import android.os.RemoteCallback;
+import android.text.TextUtils.TruncateAt;
 import android.util.Log;
+import android.view.Display;
 import android.view.View;
 import android.view.ViewGroup;
+import android.view.WindowManager;
 import android.widget.AppSecurityPermissions;
 import android.widget.Button;
 import android.widget.ImageView;
@@ -50,6 +53,10 @@ public class DeviceAdminAdd extends Activity {
     static final String TAG = "DeviceAdminAdd";
     
     static final int DIALOG_WARNING = 1;
+
+    private static final int MAX_ADD_MSG_LINES_PORTRAIT = 5;
+    private static final int MAX_ADD_MSG_LINES_LANDSCAPE = 2;
+    private static final int MAX_ADD_MSG_LINES = 15;
     
     Handler mHandler;
     
@@ -62,6 +69,7 @@ public class DeviceAdminAdd extends Activity {
     TextView mAdminName;
     TextView mAdminDescription;
     TextView mAddMsg;
+    boolean mAddMsgEllipsized = true;
     TextView mAdminWarning;
     ViewGroup mAdminPolicies;
     Button mActionButton;
@@ -138,7 +146,17 @@ public class DeviceAdminAdd extends Activity {
         mAdminIcon = (ImageView)findViewById(R.id.admin_icon);
         mAdminName = (TextView)findViewById(R.id.admin_name);
         mAdminDescription = (TextView)findViewById(R.id.admin_description);
+
         mAddMsg = (TextView)findViewById(R.id.add_msg);
+        mAddMsg.setOnClickListener(new View.OnClickListener() {
+            public void onClick(View v) {
+                toggleMessageEllipsis(v);
+            }
+        });
+
+        // toggleMessageEllipsis also handles initial layout:
+        toggleMessageEllipsis(mAddMsg);
+
         mAdminWarning = (TextView)findViewById(R.id.admin_warning);
         mAdminPolicies = (ViewGroup)findViewById(R.id.admin_policies);
         mCancelButton = (Button)findViewById(R.id.cancel_button);
@@ -280,5 +298,27 @@ public class DeviceAdminAdd extends Activity {
             mAdding = true;
         }
     }
-    
+
+
+    void toggleMessageEllipsis(View v) {
+        TextView tv = (TextView) v;
+
+        mAddMsgEllipsized = ! mAddMsgEllipsized;
+        tv.setEllipsize(mAddMsgEllipsized ? TruncateAt.END : null);
+        tv.setMaxLines(mAddMsgEllipsized ? getEllipsizedLines() : MAX_ADD_MSG_LINES);
+
+        ImageView iv = (ImageView) findViewById(R.id.add_msg_expander);
+        iv.setImageResource(mAddMsgEllipsized ?
+            com.android.internal.R.drawable.expander_ic_minimized :
+            com.android.internal.R.drawable.expander_ic_maximized);
+    }
+
+    int getEllipsizedLines() {
+        Display d = ((WindowManager) getSystemService(Context.WINDOW_SERVICE))
+                    .getDefaultDisplay();
+
+        return d.getHeight() > d.getWidth() ?
+            MAX_ADD_MSG_LINES_PORTRAIT : MAX_ADD_MSG_LINES_LANDSCAPE;
+    }
+
 }