Bug 1369817 - Set screen orientation according to webapp manifest r=daleharvey draft
authorJames Willcox <snorp@snorp.net>
Tue, 08 Aug 2017 11:17:50 -0500
changeset 642807 b0e57f4853962c849121a98d3ed0cc8606e73550
parent 642806 f8eabc81c9043e9cfbe753d70bc4d64d78a583b0
child 642808 0fbd91ee09096ac8365473a49e032249ced0bc20
push id72868
push userbmo:snorp@snorp.net
push dateTue, 08 Aug 2017 19:00:02 +0000
reviewersdaleharvey
bugs1369817
milestone57.0a1
Bug 1369817 - Set screen orientation according to webapp manifest r=daleharvey MozReview-Commit-ID: KvuPsYSalVN
mobile/android/base/java/org/mozilla/gecko/webapps/WebAppActivity.java
--- a/mobile/android/base/java/org/mozilla/gecko/webapps/WebAppActivity.java
+++ b/mobile/android/base/java/org/mozilla/gecko/webapps/WebAppActivity.java
@@ -7,16 +7,17 @@ package org.mozilla.gecko.webapps;
 
 import java.io.File;
 import java.io.IOException;
 import java.util.List;
 
 import android.annotation.TargetApi;
 import android.app.ActivityManager;
 import android.content.Intent;
+import android.content.pm.ActivityInfo;
 import android.graphics.Bitmap;
 import android.net.Uri;
 import android.os.Build;
 import android.os.Bundle;
 import android.support.v7.app.ActionBar;
 import android.support.v7.app.AppCompatActivity;
 import android.support.v7.widget.Toolbar;
 import android.text.TextUtils;
@@ -27,16 +28,17 @@ import android.view.WindowManager;
 import android.widget.TextView;
 
 import org.json.JSONObject;
 import org.json.JSONException;
 
 import org.mozilla.gecko.ActivityHandlerHelper;
 import org.mozilla.gecko.AppConstants;
 import org.mozilla.gecko.GeckoAppShell;
+import org.mozilla.gecko.GeckoScreenOrientation;
 import org.mozilla.gecko.GeckoView;
 import org.mozilla.gecko.GeckoViewSettings;
 import org.mozilla.gecko.icons.decoders.FaviconDecoder;
 import org.mozilla.gecko.icons.decoders.LoadFaviconResult;
 import org.mozilla.gecko.prompts.PromptService;
 import org.mozilla.gecko.R;
 import org.mozilla.gecko.util.ColorUtil;
 import org.mozilla.gecko.util.FileUtils;
@@ -146,30 +148,44 @@ public class WebAppActivity extends AppC
             mScope = readScopeFromManifest(manifest, manifestPath);
             final ActivityManager.TaskDescription taskDescription = (color == null)
                     ? new ActivityManager.TaskDescription(name, icon)
                     : new ActivityManager.TaskDescription(name, icon, color);
 
             updateStatusBarColorV21(color);
             setTaskDescription(taskDescription);
 
+            updateScreenOrientation(manifestField);
         } catch (IOException | JSONException e) {
             Log.e(LOGTAG, "Failed to read manifest", e);
         }
     }
 
     @TargetApi(Build.VERSION_CODES.LOLLIPOP)
     private void updateStatusBarColorV21(final Integer themeColor) {
         if (themeColor != null) {
             final Window window = getWindow();
             window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
             window.setStatusBarColor(ColorUtil.darken(themeColor, 0.25));
         }
     }
 
+    private void updateScreenOrientation(JSONObject manifest) {
+        String orientString = manifest.optString("orientation", null);
+        if (orientString == null) {
+            return;
+        }
+
+        GeckoScreenOrientation.ScreenOrientation orientation =
+            GeckoScreenOrientation.screenOrientationFromString(orientString);
+        int activityOrientation = GeckoScreenOrientation.screenOrientationToAndroidOrientation(orientation);
+
+        setRequestedOrientation(activityOrientation);
+    }
+
     private Integer readColorFromManifest(JSONObject manifest) {
         final String colorStr = manifest.optString("theme_color", null);
         if (colorStr != null) {
             return ColorUtil.parseStringColor(colorStr);
         }
         return null;
     }