diff options
author | Nicolas Prevot <nprevot@google.com> | 2016-01-21 13:58:57 +0000 |
---|---|---|
committer | Nicolas Prevot <nprevot@google.com> | 2016-02-08 16:03:33 +0000 |
commit | 3d68a3d2985367feecb1e1dd8da5d219e9e23d3e (patch) | |
tree | 78d8bef8946403829d7f1a69d4c687d3834db466 | |
parent | fc98d5780a1ce96277b8a962e10a35401af2ef78 (diff) | |
download | android_packages_apps_ManagedProvisioning-3d68a3d2985367feecb1e1dd8da5d219e9e23d3e.tar.gz android_packages_apps_ManagedProvisioning-3d68a3d2985367feecb1e1dd8da5d219e9e23d3e.tar.bz2 android_packages_apps_ManagedProvisioning-3d68a3d2985367feecb1e1dd8da5d219e9e23d3e.zip |
Update layout of ManagedProvisioning.
Show the logo inside the illustration.
BUG:26899656
BUG:27025982
Change-Id: I0e18244ece41cfd5dedaf3368fa83edefc56b490
16 files changed, 163 insertions, 49 deletions
diff --git a/res/drawable-hdpi/ic_corp_icon.png b/res/drawable-hdpi/ic_corp_icon.png Binary files differnew file mode 100644 index 00000000..d83a862d --- /dev/null +++ b/res/drawable-hdpi/ic_corp_icon.png diff --git a/res/drawable-mdpi/ic_corp_icon.png b/res/drawable-mdpi/ic_corp_icon.png Binary files differnew file mode 100644 index 00000000..79372b21 --- /dev/null +++ b/res/drawable-mdpi/ic_corp_icon.png diff --git a/res/drawable-xhdpi/ic_corp_icon.png b/res/drawable-xhdpi/ic_corp_icon.png Binary files differnew file mode 100644 index 00000000..3626c7d0 --- /dev/null +++ b/res/drawable-xhdpi/ic_corp_icon.png diff --git a/res/drawable-xxhdpi/ic_corp_icon.png b/res/drawable-xxhdpi/ic_corp_icon.png Binary files differnew file mode 100644 index 00000000..d33319f3 --- /dev/null +++ b/res/drawable-xxhdpi/ic_corp_icon.png diff --git a/res/drawable-xxxhdpi/ic_corp_icon.png b/res/drawable-xxxhdpi/ic_corp_icon.png Binary files differnew file mode 100644 index 00000000..359e210e --- /dev/null +++ b/res/drawable-xxxhdpi/ic_corp_icon.png diff --git a/res/layout/progress.xml b/res/layout/progress.xml index a011b787..49c40d3d 100644 --- a/res/layout/progress.xml +++ b/res/layout/progress.xml @@ -17,12 +17,12 @@ */ --> <com.android.setupwizardlib.SetupWizardLayout - xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:app="http://schemas.android.com/apk/res-auto" - android:id="@+id/setup_wizard_layout" - android:layout_width="match_parent" - android:layout_height="match_parent"> - <TextView - style="@style/MainTextContainer" - android:id="@+id/prog_text" /> -</com.android.setupwizardlib.SetupWizardLayout>
\ No newline at end of file + xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto" + android:id="@+id/setup_wizard_layout" + android:layout_width="match_parent" + android:layout_height="match_parent"> + <TextView + style="@style/MainTextContainer" + android:id="@+id/prog_text" /> +</com.android.setupwizardlib.SetupWizardLayout> diff --git a/res/layout/user_consent_main_text.xml b/res/layout/user_consent_main_text.xml index 99ae8639..0d6d15a9 100644 --- a/res/layout/user_consent_main_text.xml +++ b/res/layout/user_consent_main_text.xml @@ -19,16 +19,6 @@ <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" style="@style/MainTextContainer" android:orientation="vertical"> - <!-- This ImageView is a mock --> - <ImageView - android:id="@+id/organisation_logo_view" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:adjustViewBounds="true" - android:maxWidth="60dp" - android:maxHeight="60dp" - android:scaleType="centerInside" - android:visibility="gone"/> <TextView android:id="@+id/user_consent_message" style="@style/MainText" diff --git a/res/values/dimens.xml b/res/values/dimens.xml index a77dc65f..8f90d473 100644 --- a/res/values/dimens.xml +++ b/res/values/dimens.xml @@ -44,4 +44,8 @@ <!-- MDM app info --> <dimen name="mdm_app_name_padding_start">16dp</dimen> <dimen name="icon_width_height">56dp</dimen> + + <dimen name="logo_padding_bottom">24dp</dimen> + <dimen name="max_logo_width">140dp</dimen> + <dimen name="max_logo_height">86dp</dimen> </resources> diff --git a/res/values/styles.xml b/res/values/styles.xml index 39e244bb..3138116f 100644 --- a/res/values/styles.xml +++ b/res/values/styles.xml @@ -19,13 +19,15 @@ <resources> <style name="SetupWorkSpaceTheme" parent="SuwThemeMaterial.Light" > - <item name="android:windowActionBar">false</item> - <item name="android:windowNoTitle">true</item> - <item name="android:colorPrimary">@color/orange</item> - <item name="android:colorAccent">@color/accent</item> - <item name="android:colorPrimaryDark">@color/orange</item> - <item name="android:windowBackground">@color/light_gray</item> - <item name="android:indeterminateTint">@color/teal</item> + <item name="android:windowActionBar">false</item> + <item name="android:windowNoTitle">true</item> + <item name="android:colorPrimary">@color/orange</item> + <item name="android:colorAccent">@color/accent</item> + <item name="android:colorPrimaryDark">@color/orange</item> + <item name="android:windowBackground">@color/light_gray</item> + <item name="android:indeterminateTint">@color/teal</item> + <item name="android:windowLightStatusBar">true</item> + <item name="android:statusBarColor">@color/white</item> </style> <style name="TextOrCheckBox"> <item name="android:textColor">@color/text_black</item> diff --git a/src/com/android/managedprovisioning/DeviceOwnerPreProvisioningActivity.java b/src/com/android/managedprovisioning/DeviceOwnerPreProvisioningActivity.java index 32348dad..f348d3dd 100644 --- a/src/com/android/managedprovisioning/DeviceOwnerPreProvisioningActivity.java +++ b/src/com/android/managedprovisioning/DeviceOwnerPreProvisioningActivity.java @@ -135,6 +135,9 @@ public class DeviceOwnerPreProvisioningActivity extends SetupLayoutActivity e.getMessage()); return; } + if (mParams != null) { + maybeSetLogoAndMainColor(mParams.mainColor); + } // Ask to encrypt the device before proceeding if (!(EncryptDeviceActivity.isPhysicalDeviceEncrypted() @@ -170,9 +173,6 @@ public class DeviceOwnerPreProvisioningActivity extends SetupLayoutActivity @Override protected void onResume() { super.onResume(); - if (mParams != null) { - setStatusBarColor(mParams.mainColor); - } setTitle(R.string.setup_device_start_setup); } @@ -247,7 +247,6 @@ public class DeviceOwnerPreProvisioningActivity extends SetupLayoutActivity TextView mdmInfoTextView = (TextView) findViewById(R.id.mdm_info_message); mdmInfoTextView.setText(R.string.the_following_is_your_mdm_for_device); setMdmInfo(); - LogoUtils.setOrganisationLogo(R.id.organisation_logo_view, this); } } diff --git a/src/com/android/managedprovisioning/DeviceOwnerProvisioningActivity.java b/src/com/android/managedprovisioning/DeviceOwnerProvisioningActivity.java index 012dbcc3..32f58955 100644 --- a/src/com/android/managedprovisioning/DeviceOwnerProvisioningActivity.java +++ b/src/com/android/managedprovisioning/DeviceOwnerProvisioningActivity.java @@ -103,6 +103,9 @@ public class DeviceOwnerProvisioningActivity extends SetupLayoutActivity { // Load the ProvisioningParams (from message in Intent). mParams = (ProvisioningParams) getIntent().getParcelableExtra( ProvisioningParams.EXTRA_PROVISIONING_PARAMS); + if (mParams != null) { + maybeSetLogoAndMainColor(mParams.mainColor); + } startDeviceOwnerProvisioningService(); } diff --git a/src/com/android/managedprovisioning/LogoUtils.java b/src/com/android/managedprovisioning/LogoUtils.java index bd457cdf..33685092 100644 --- a/src/com/android/managedprovisioning/LogoUtils.java +++ b/src/com/android/managedprovisioning/LogoUtils.java @@ -19,6 +19,8 @@ package com.android.managedprovisioning; import android.app.Activity; import android.content.Context; import android.graphics.Bitmap; +import android.graphics.drawable.BitmapDrawable; +import android.graphics.drawable.Drawable; import android.net.Uri; import android.provider.MediaStore; import android.view.View; @@ -53,24 +55,23 @@ public class LogoUtils { } } - public static void setOrganisationLogo(int resourceId, Activity activity) { - ImageView imageView = (ImageView) activity.findViewById(resourceId); - File logoFile = getOrganisationLogoFile(activity); + public static Drawable getOrganisationLogo(Context context) { + final File logoFile = getOrganisationLogoFile(context); try { if (logoFile.exists()) { - Bitmap bitmap = MediaStore.Images.Media.getBitmap(activity.getContentResolver(), + Bitmap bitmap = MediaStore.Images.Media.getBitmap(context.getContentResolver(), Uri.fromFile(logoFile)); if (bitmap != null) { - imageView.setImageBitmap(bitmap); - imageView.setVisibility(View.VISIBLE); - ProvisionLogger.logi("Displayed organisation logo from " + logoFile); + ProvisionLogger.logi("Obtained organisation logo from " + logoFile); + return new BitmapDrawable(context.getResources(), bitmap); } else { - ProvisionLogger.loge("Could not display organisation logo from " + logoFile); + ProvisionLogger.loge("Could not get organisation logo from " + logoFile); } } } catch (IOException e) { - ProvisionLogger.loge("Could not display organisation logo from " + logoFile, e); + ProvisionLogger.loge("Could not get organisation logo from " + logoFile, e); } + return context.getDrawable(R.drawable.ic_corp_icon); } public static void cleanUp(Context context) { diff --git a/src/com/android/managedprovisioning/MessageParser.java b/src/com/android/managedprovisioning/MessageParser.java index 3daad432..f4173037 100644 --- a/src/com/android/managedprovisioning/MessageParser.java +++ b/src/com/android/managedprovisioning/MessageParser.java @@ -323,9 +323,7 @@ public class MessageParser { if (intent.hasExtra(EXTRA_PROVISIONING_MAIN_COLOR)) { params.mainColor = intent.getIntExtra(EXTRA_PROVISIONING_MAIN_COLOR, 0 /* not used */); } else { - final TypedArray typedArray = context.obtainStyledAttributes(new int[]{ - android.R.attr.statusBarColor}); - params.mainColor = typedArray.getColor(0, 0); + params.mainColor = context.getResources().getColor(R.color.accent); } params.provisioningAction = Utils.mapIntentToDpmAction(intent); try { diff --git a/src/com/android/managedprovisioning/ProfileOwnerPreProvisioningActivity.java b/src/com/android/managedprovisioning/ProfileOwnerPreProvisioningActivity.java index 2edbc5dc..7530f698 100644 --- a/src/com/android/managedprovisioning/ProfileOwnerPreProvisioningActivity.java +++ b/src/com/android/managedprovisioning/ProfileOwnerPreProvisioningActivity.java @@ -151,7 +151,9 @@ public class ProfileOwnerPreProvisioningActivity extends SetupLayoutActivity showErrorAndClose(R.string.managed_provisioning_error_text, e.getMessage()); return; } - LogoUtils.setOrganisationLogo(R.id.organisation_logo_view, this); + if (mParams != null) { + maybeSetLogoAndMainColor(mParams.mainColor); + } setMdmIcon(mParams.deviceAdminPackageName); // If the caller started us via ALIAS_NO_CHECK_CALLER then they must have permission to @@ -188,9 +190,6 @@ public class ProfileOwnerPreProvisioningActivity extends SetupLayoutActivity @Override protected void onResume() { super.onResume(); - if (mParams != null) { - setStatusBarColor(mParams.mainColor); - } setTitle(R.string.setup_profile_start_setup); if (Utils.alreadyHasManagedProfile(this) != -1) { maybeShowDeleteManagedProfileDialog(); diff --git a/src/com/android/managedprovisioning/ProfileOwnerProvisioningActivity.java b/src/com/android/managedprovisioning/ProfileOwnerProvisioningActivity.java index 849af628..d341e2d4 100644 --- a/src/com/android/managedprovisioning/ProfileOwnerProvisioningActivity.java +++ b/src/com/android/managedprovisioning/ProfileOwnerProvisioningActivity.java @@ -112,6 +112,9 @@ public class ProfileOwnerProvisioningActivity extends SetupLayoutActivity { } mParams = (ProvisioningParams) getIntent().getParcelableExtra( ProvisioningParams.EXTRA_PROVISIONING_PARAMS); + if (mParams != null) { + maybeSetLogoAndMainColor(mParams.mainColor); + } } @Override diff --git a/src/com/android/managedprovisioning/SetupLayoutActivity.java b/src/com/android/managedprovisioning/SetupLayoutActivity.java index b96c094d..e381ad67 100644 --- a/src/com/android/managedprovisioning/SetupLayoutActivity.java +++ b/src/com/android/managedprovisioning/SetupLayoutActivity.java @@ -17,8 +17,18 @@ package com.android.managedprovisioning; import android.app.Activity; +import android.content.Context; +import android.content.res.Resources; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.ColorFilter; +import android.graphics.Paint; +import android.graphics.PixelFormat; +import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.Drawable; +import android.util.DisplayMetrics; import android.util.TypedValue; +import android.view.View; import android.view.Window; import android.view.WindowManager; import android.widget.Button; @@ -38,13 +48,15 @@ public abstract class SetupLayoutActivity extends Activity implements Navigation public static final int NEXT_BUTTON_EMPTY_LABEL = 0; - protected void setStatusBarColor(int color) { - // This code to colorize the status bar is just temporary. + protected void maybeSetLogoAndMainColor(int mainColor) { Window window = getWindow(); window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); - window.setStatusBarColor(color); + SetupWizardLayout layout = (SetupWizardLayout) findViewById(R.id.setup_wizard_layout); + + layout.setIllustration(new HeaderDrawable(this, mainColor)); + layout.setLayoutBackground(new ColorDrawable(mainColor)); } public void initializeLayoutParams(int layoutResourceId, int headerResourceId, @@ -81,4 +93,107 @@ public abstract class SetupLayoutActivity extends Activity implements Navigation @Override public void onNavigateNext() { } + + private class HeaderDrawable extends Drawable { + private Activity mActivity; + private int mMainColor; + + HeaderDrawable(Activity a, int mainColor) { + mActivity = a; + mMainColor = mainColor; + } + + @Override + public void draw(Canvas canvas) { + Drawable logo = LogoUtils.getOrganisationLogo(mActivity); + int logoWidth = logo.getIntrinsicWidth(); + int logoHeight = logo.getIntrinsicHeight(); + Resources resources = mActivity.getResources(); + + // Resize the logo if too big. + float maxWidth = + resources.getDimension(R.dimen.max_logo_width); + float maxHeight = + resources.getDimension(R.dimen.max_logo_height); + double ratio = Math.max(logoWidth / maxWidth, logoHeight / maxHeight); + if (ratio > 1) { + logoWidth /= ratio; + logoHeight /= ratio; + } + + int mainTextPaddingLeftRight = (int) resources + .getDimension(R.dimen.main_text_padding_left_right); + int logoPaddingBottom = (int) resources + .getDimension(R.dimen.logo_padding_bottom); + int totalWidth = getIntrinsicWidth(); + int totalHeight = getIntrinsicHeight(); + + // By default, the drawable is materialized: it is not a solid color. Draw a white + // rectangle over the whole drawable so that it is a solid color. + Paint paint = new Paint(); + paint.setColor(resources.getColor(R.color.white)); + canvas.drawRect(0, 0, totalWidth, totalHeight, paint); + + // Draw the logo. + if (shouldDrawLogoOnLeftSide()) { + logo.setBounds(mainTextPaddingLeftRight, + totalHeight - logoPaddingBottom - logoHeight, + mainTextPaddingLeftRight + logoWidth, + totalHeight - logoPaddingBottom); + } else { + logo.setBounds(totalWidth - mainTextPaddingLeftRight - logoWidth, + totalHeight - logoPaddingBottom - logoHeight, + totalWidth - mainTextPaddingLeftRight, + totalHeight - logoPaddingBottom); + } + logo.draw(canvas); + + } + + @Override + public int getIntrinsicHeight() { + if (mActivity.getResources().getBoolean(R.bool.suwUseTabletLayout)) { + return (int) mActivity.getResources() + .getDimension(R.dimen.suw_tablet_illustration_height); + } + return getScreenWidth() * 9 / 20; + } + + @Override + public int getIntrinsicWidth() { + return getScreenWidth(); + } + + @Override + public int getOpacity() { + return PixelFormat.OPAQUE; + } + + @Override + public void setAlpha(int alpha) { + //ignore + } + + @Override + public void setColorFilter(ColorFilter cf) { + // ignore + } + + private int getScreenWidth() { + DisplayMetrics metrics = new DisplayMetrics(); + mActivity.getWindowManager().getDefaultDisplay().getMetrics(metrics); + return metrics.widthPixels; + } + + private boolean shouldDrawLogoOnLeftSide() { + // for a tablet layout, the logo should be in the bottom left + boolean result = mActivity.getResources().getBoolean(R.bool.suwUseTabletLayout); + // for a right-to-left language, reverse it. + if (mActivity.getResources().getConfiguration().getLayoutDirection() + == View.LAYOUT_DIRECTION_RTL) { + result = !result; + } + return result; + } + } } |