Bug 1289242 - Use delegate to handle URLs from ASDetailActivity draft
authorAndrzej Hunt <ahunt@mozilla.com>
Fri, 29 Jul 2016 11:11:50 -0700
changeset 394987 1ad79b3499ad763c60dba67f1f244b253d5a73d2
parent 394986 be8d5435b351ad6ccc0f27480b0a8a40b81a06ff
child 394988 da010e433c09173fc9ca2d002670fdb1f62931a5
push id24690
push userahunt@mozilla.com
push dateMon, 01 Aug 2016 15:51:28 +0000
bugs1289242
milestone50.0a1
Bug 1289242 - Use delegate to handle URLs from ASDetailActivity MozReview-Commit-ID: 1czchuX3Rj9
mobile/android/base/java/org/mozilla/gecko/BrowserApp.java
mobile/android/base/java/org/mozilla/gecko/home/activitystream/ASDetailActivity.java
mobile/android/base/java/org/mozilla/gecko/home/activitystream/ActivityStream.java
--- a/mobile/android/base/java/org/mozilla/gecko/BrowserApp.java
+++ b/mobile/android/base/java/org/mozilla/gecko/BrowserApp.java
@@ -48,16 +48,17 @@ import org.mozilla.gecko.home.HomeConfig
 import org.mozilla.gecko.home.HomeFragment;
 import org.mozilla.gecko.home.HomePager;
 import org.mozilla.gecko.home.HomePager.OnUrlOpenInBackgroundListener;
 import org.mozilla.gecko.home.HomePager.OnUrlOpenListener;
 import org.mozilla.gecko.home.HomePanelsManager;
 import org.mozilla.gecko.home.HomeScreen;
 import org.mozilla.gecko.home.SearchEngine;
 import org.mozilla.gecko.home.activitystream.ASOpenURLDelegate;
+import org.mozilla.gecko.home.activitystream.ActivityStream;
 import org.mozilla.gecko.javaaddons.JavaAddonManager;
 import org.mozilla.gecko.media.AudioFocusAgent;
 import org.mozilla.gecko.menu.GeckoMenu;
 import org.mozilla.gecko.menu.GeckoMenuItem;
 import org.mozilla.gecko.mozglue.SafeIntent;
 import org.mozilla.gecko.overlays.ui.ShareDialog;
 import org.mozilla.gecko.permissions.Permissions;
 import org.mozilla.gecko.preferences.ClearOnShutdownPref;
@@ -2692,17 +2693,19 @@ public class BrowserApp extends GeckoApp
         // onMetricsChanged callback still works.
         if (mDynamicToolbar.isEnabled()) {
             mDynamicToolbar.setVisible(true, VisibilityTransition.IMMEDIATE);
         }
 
         if (mHomeScreen == null) {
             if (AppConstants.MOZ_ANDROID_ACTIVITY_STREAM) {
                 final ViewStub asStub = (ViewStub) findViewById(R.id.activity_stream_stub);
-                mHomeScreen = (HomeScreen) asStub.inflate();
+                ActivityStream activityStream = (ActivityStream) asStub.inflate();
+                activityStream.setBrowserApp(this);
+                mHomeScreen = activityStream;
             } else {
                 final ViewStub homePagerStub = (ViewStub) findViewById(R.id.home_pager_stub);
                 mHomeScreen = (HomeScreen) homePagerStub.inflate();
 
                 // For now these listeners are HomePager specific. In future we might want
                 // to have a more abstracted data storage, with one Bundle containing all
                 // relevant restore data.
                 mHomeScreen.setOnPanelChangeListener(new HomeScreen.OnPanelChangeListener() {
--- a/mobile/android/base/java/org/mozilla/gecko/home/activitystream/ASDetailActivity.java
+++ b/mobile/android/base/java/org/mozilla/gecko/home/activitystream/ASDetailActivity.java
@@ -78,17 +78,17 @@ public class ASDetailActivity
         pager.setAdapter(adapter);
 
         TabLayout tabLayout = (TabLayout) findViewById(R.id.as_detail_tablayout);
         tabLayout.setupWithViewPager(pager);
     }
 
     @Override
     public void onUrlOpen(String url, EnumSet<HomePager.OnUrlOpenListener.Flags> flags) {
-        // TODO: implement me. We'll need close the activit and laod the URL in the current tab?
+        ASOpenURLDelegate.openURL(this, url, flags);
     }
 
     @Override
     public void onUrlOpenInBackground(String url,
                                       EnumSet<HomePager.OnUrlOpenInBackgroundListener.Flags> flags) {
-        // TODO: implement me. We'll need to open a new background tab here.
+        ASOpenURLDelegate.openInBackground(this, url, flags);
     }
 }
--- a/mobile/android/base/java/org/mozilla/gecko/home/activitystream/ActivityStream.java
+++ b/mobile/android/base/java/org/mozilla/gecko/home/activitystream/ActivityStream.java
@@ -9,39 +9,54 @@ import android.content.Intent;
 import android.os.Bundle;
 import android.support.v4.app.FragmentManager;
 import android.support.v4.app.LoaderManager;
 import android.util.AttributeSet;
 import android.view.View;
 import android.widget.Button;
 import android.widget.RelativeLayout;
 
+import org.mozilla.gecko.BrowserApp;
 import org.mozilla.gecko.R;
 import org.mozilla.gecko.animation.PropertyAnimator;
 import org.mozilla.gecko.home.HomeBanner;
 import org.mozilla.gecko.home.HomeFragment;
 import org.mozilla.gecko.home.HomeScreen;
 
+import java.lang.ref.WeakReference;
+
 public class ActivityStream extends RelativeLayout implements HomeScreen {
 
+    private WeakReference<BrowserApp> browserAppWeakReference = new WeakReference<BrowserApp>(null);
+
     public ActivityStream(Context context) {
         this(context, null);
     }
 
+    public void setBrowserApp(final BrowserApp browserApp) {
+        this.browserAppWeakReference = new WeakReference<>(browserApp);
+    }
+
     @Override
     protected void onLayout(boolean changed, int l, int t, int r, int b) {
         super.onLayout(changed, l, t, r, b);
 
         Button detailButton = (Button) findViewById(R.id.detail_button);
 
         detailButton.setOnClickListener(new OnClickListener() {
             @Override
             public void onClick(View v) {
+                BrowserApp browserApp = browserAppWeakReference.get();
+
+                if (browserApp == null) {
+                    return;
+                }
+
                 Intent i = new Intent(getContext(), ASDetailActivity.class);
-                getContext().startActivity(i);
+                browserApp.startActivityForResult(i, BrowserApp.ACTIVITY_REQUEST_AS_DETAIL);
             }
         });
     }
 
     public ActivityStream(Context context, AttributeSet attrs) {
         super(context, attrs);
     }