Improve the add-device-admin layout.

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
This commit is contained in:
Chris Palmer
2010-09-13 15:14:55 -07:00
parent 54e21852f2
commit 51794a05ad
2 changed files with 102 additions and 38 deletions

View File

@@ -20,30 +20,32 @@
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"
@@ -66,28 +68,49 @@
android:singleLine="true"
android:ellipsize="marquee" />
</LinearLayout>
<TextView android:id="@+id/admin_warning"
<LinearLayout
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"
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"
@@ -114,4 +137,5 @@
android:layout_height="0dip"
android:layout_weight="1" />
</LinearLayout>
</LinearLayout>

View 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;
@@ -51,6 +54,10 @@ public class DeviceAdminAdd extends Activity {
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;
DevicePolicyManager mDPM;
@@ -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);
@@ -281,4 +299,26 @@ public class DeviceAdminAdd extends Activity {
}
}
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;
}
}