diff --git a/app/src/cliqz/java/com/cliqz/browser/controlcenter/ControlCenterHelper.java b/app/src/cliqz/java/com/cliqz/browser/controlcenter/ControlCenterHelper.java index 5e763add6..70bd8e3ca 100644 --- a/app/src/cliqz/java/com/cliqz/browser/controlcenter/ControlCenterHelper.java +++ b/app/src/cliqz/java/com/cliqz/browser/controlcenter/ControlCenterHelper.java @@ -1,5 +1,6 @@ package com.cliqz.browser.controlcenter; +import android.content.Context; import android.view.View; import androidx.annotation.NonNull; @@ -7,6 +8,7 @@ import com.cliqz.browser.app.AppComponent; import com.cliqz.browser.app.BrowserApp; +import com.cliqz.browser.main.FlavoredActivityComponent; import com.cliqz.browser.main.Messages; import com.cliqz.browser.telemetry.Telemetry; import com.cliqz.nove.Bus; @@ -35,9 +37,10 @@ public class ControlCenterHelper implements ControlCenterActions { @Inject Telemetry telemetry; - public ControlCenterHelper(@NonNull FragmentManager fragmentManager) { - final AppComponent component = BrowserApp.getAppComponent(); + public ControlCenterHelper(Context context, @NonNull FragmentManager fragmentManager) { this.mFragmentManager = fragmentManager; + final FlavoredActivityComponent component = context != null ? + BrowserApp.getActivityComponent(context) : null; if (component != null) { component.inject(this); } diff --git a/app/src/cliqz/java/com/cliqz/browser/vpn/VpnPanel.java b/app/src/cliqz/java/com/cliqz/browser/vpn/VpnPanel.java index 9ca3c73b4..8085cf6df 100644 --- a/app/src/cliqz/java/com/cliqz/browser/vpn/VpnPanel.java +++ b/app/src/cliqz/java/com/cliqz/browser/vpn/VpnPanel.java @@ -1,5 +1,6 @@ package com.cliqz.browser.vpn; +import android.app.Dialog; import android.view.View; import androidx.fragment.app.FragmentManager; @@ -19,4 +20,12 @@ public static VpnPanel create(View view) { public void show(FragmentManager fragmentManager, String tag) { } + + public boolean isVisible() { + return false; + } + + public Dialog getDialog() { + return null; + } } diff --git a/app/src/lumen/java/com/cliqz/browser/controlcenter/ControlCenterDialog.java b/app/src/lumen/java/com/cliqz/browser/controlcenter/ControlCenterDialog.java index 830434739..29d75b80f 100644 --- a/app/src/lumen/java/com/cliqz/browser/controlcenter/ControlCenterDialog.java +++ b/app/src/lumen/java/com/cliqz/browser/controlcenter/ControlCenterDialog.java @@ -10,6 +10,7 @@ import android.view.View; import android.view.ViewGroup; import android.view.Window; +import android.view.WindowManager; import android.widget.Button; import androidx.annotation.NonNull; @@ -167,6 +168,14 @@ public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup c return view; } + @Override + public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + final Window window = getDialog().getWindow(); + window.addFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL); + getDialog().setCanceledOnTouchOutside(false); + } + @Subscribe void clearDashboardData(Messages.ClearDashboardData clearDashboardData) { insights.clearData(); diff --git a/app/src/lumen/java/com/cliqz/browser/controlcenter/ControlCenterHelper.kt b/app/src/lumen/java/com/cliqz/browser/controlcenter/ControlCenterHelper.kt index 292039298..fd65e4a9e 100644 --- a/app/src/lumen/java/com/cliqz/browser/controlcenter/ControlCenterHelper.kt +++ b/app/src/lumen/java/com/cliqz/browser/controlcenter/ControlCenterHelper.kt @@ -1,15 +1,30 @@ package com.cliqz.browser.controlcenter import acr.browser.lightning.constant.Constants +import android.content.Context import android.view.View import androidx.fragment.app.FragmentManager +import com.cliqz.browser.app.BrowserApp +import com.cliqz.browser.main.MainActivityHandler import com.cliqz.browser.main.Messages +import com.cliqz.nove.Bus import com.cliqz.nove.Subscribe +import javax.inject.Inject /** * Copyright © Cliqz 2019 */ -class ControlCenterHelper(private val fragmentManager: FragmentManager) : ControlCenterActions { +class ControlCenterHelper(context : Context, private val fragmentManager: FragmentManager) : ControlCenterActions { + + @Inject + lateinit var handler: MainActivityHandler + + @Inject + lateinit var bus : Bus + + init { + BrowserApp.getActivityComponent(context)?.inject(this) + } private var mSource: View? = null @@ -20,8 +35,15 @@ class ControlCenterHelper(private val fragmentManager: FragmentManager) : Contro } override fun toggleControlCenter() { + if (controlCenterDialog != null && controlCenterDialog!!.isVisible) { + controlCenterDialog?.dialog?.dismiss() + return + } controlCenterDialog = ControlCenterDialog.create(mSource) controlCenterDialog?.show(fragmentManager, Constants.CONTROL_CENTER) + handler.postDelayed({ + bus.post(Messages.DismissVpnPanel()) + }, 500) } override fun setControlCenterData(source: View, isIncognito: Boolean, hashCode: Int, url: String) { diff --git a/app/src/lumen/java/com/cliqz/browser/main/FlavoredActivityComponent.java b/app/src/lumen/java/com/cliqz/browser/main/FlavoredActivityComponent.java index 9ab600fc3..e2861d663 100644 --- a/app/src/lumen/java/com/cliqz/browser/main/FlavoredActivityComponent.java +++ b/app/src/lumen/java/com/cliqz/browser/main/FlavoredActivityComponent.java @@ -2,6 +2,7 @@ import com.cliqz.browser.annotations.PerActivity; import com.cliqz.browser.controlcenter.ControlCenterDialog; +import com.cliqz.browser.controlcenter.ControlCenterHelper; import com.cliqz.browser.controlcenter.DashboardFragment; import com.cliqz.browser.purchases.PurchaseFragment; import com.cliqz.browser.purchases.PurchasesManager; diff --git a/app/src/lumen/java/com/cliqz/browser/vpn/VpnPanel.java b/app/src/lumen/java/com/cliqz/browser/vpn/VpnPanel.java index 2d92b9c8c..3776b0b8a 100644 --- a/app/src/lumen/java/com/cliqz/browser/vpn/VpnPanel.java +++ b/app/src/lumen/java/com/cliqz/browser/vpn/VpnPanel.java @@ -14,6 +14,7 @@ import android.view.View; import android.view.ViewGroup; import android.view.Window; +import android.view.WindowManager; import android.view.animation.LinearInterpolator; import android.widget.Chronometer; import android.widget.ImageView; @@ -26,10 +27,10 @@ import com.cliqz.browser.R; import com.cliqz.browser.app.BrowserApp; +import com.cliqz.browser.extensions.DrawableExtensionsKt; import com.cliqz.browser.main.FlavoredActivityComponent; import com.cliqz.browser.main.Messages; import com.cliqz.browser.purchases.PurchasesManager; -import com.cliqz.browser.extensions.DrawableExtensionsKt; import com.cliqz.browser.webview.CliqzMessages; import com.cliqz.nove.Bus; import com.cliqz.nove.Subscribe; @@ -40,12 +41,11 @@ import javax.inject.Inject; import acr.browser.lightning.preference.PreferenceManager; -import de.blinkt.openvpn.VpnProfile; import butterknife.BindView; import butterknife.ButterKnife; import butterknife.OnClick; +import de.blinkt.openvpn.VpnProfile; import de.blinkt.openvpn.core.ConnectionStatus; -import de.blinkt.openvpn.core.LogItem; import de.blinkt.openvpn.core.ProfileManager; import de.blinkt.openvpn.core.VpnStatus; @@ -181,6 +181,9 @@ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceStat getString(R.string.vpn_cta_enabled) : getString(R.string.vpn_cta_disabled)); mMainHandler = new Handler(getContext().getMainLooper()); + final Window window = getDialog().getWindow(); + window.addFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL); + getDialog().setCanceledOnTouchOutside(false); } @Nullable @@ -190,6 +193,7 @@ public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup c return inflater.inflate(R.layout.home_vpn_panel, container, false); } + @OnClick(R.id.vpn_country) void vpnCountryClicked() { if (selectedProfile != null) { @@ -352,4 +356,9 @@ private void vpnMsgsChangeDrawable(@DrawableRes int id) { DrawableExtensionsKt.drawableStart(mVpnMsgLineOne, id); DrawableExtensionsKt.drawableStart(mVpnMsgLineTwo, id); } + + @Subscribe + void dismissVpnPanel(Messages.DismissVpnPanel event) { + dismissAllowingStateLoss(); + } } \ No newline at end of file diff --git a/app/src/main/java/com/cliqz/browser/app/AppComponent.java b/app/src/main/java/com/cliqz/browser/app/AppComponent.java index 51c5fec6a..6e0bd176a 100644 --- a/app/src/main/java/com/cliqz/browser/app/AppComponent.java +++ b/app/src/main/java/com/cliqz/browser/app/AppComponent.java @@ -4,7 +4,6 @@ import com.cliqz.browser.connect.PairedDevicesFragment; import com.cliqz.browser.connect.SyncActivity; import com.cliqz.browser.controlcenter.ControlCenterComponent; -import com.cliqz.browser.controlcenter.ControlCenterHelper; import com.cliqz.browser.controlcenter.ControlCenterModule; import com.cliqz.browser.gcm.MessageListenerService; import com.cliqz.browser.gcm.NotificationDismissedReceiver; @@ -134,7 +133,5 @@ public interface AppComponent { void inject(SearchEnginesModule searchEnginesModule); - void inject(ControlCenterHelper controlCenterHelper); - void inject(BrowserApp browserApp); } diff --git a/app/src/main/java/com/cliqz/browser/main/MainActivityComponent.java b/app/src/main/java/com/cliqz/browser/main/MainActivityComponent.java index 4810e3185..73b4aa156 100644 --- a/app/src/main/java/com/cliqz/browser/main/MainActivityComponent.java +++ b/app/src/main/java/com/cliqz/browser/main/MainActivityComponent.java @@ -1,5 +1,6 @@ package com.cliqz.browser.main; +import com.cliqz.browser.controlcenter.ControlCenterHelper; import com.cliqz.browser.main.search.Incognito; import com.cliqz.browser.main.search.SearchView; import com.cliqz.browser.overview.CommonOverviewFragment; @@ -46,4 +47,6 @@ interface MainActivityComponent { void inject(PasswordManager passwordManager); void inject(Incognito incognito); + + void inject(ControlCenterHelper controlCenterHelper); } diff --git a/app/src/main/java/com/cliqz/browser/main/Messages.java b/app/src/main/java/com/cliqz/browser/main/Messages.java index f8b1c7aa1..5bebb4d54 100644 --- a/app/src/main/java/com/cliqz/browser/main/Messages.java +++ b/app/src/main/java/com/cliqz/browser/main/Messages.java @@ -195,6 +195,9 @@ public static class UpdateAdBlockingList { public static class DismissControlCenter { } + public static class DismissVpnPanel { + } + public static class UpdateControlCenterIcon { @NonNull public final ControlCenterStatus status; diff --git a/app/src/main/java/com/cliqz/browser/main/TabFragment.java b/app/src/main/java/com/cliqz/browser/main/TabFragment.java index 86b82afd3..174f14c5b 100644 --- a/app/src/main/java/com/cliqz/browser/main/TabFragment.java +++ b/app/src/main/java/com/cliqz/browser/main/TabFragment.java @@ -143,6 +143,8 @@ public class TabFragment extends BaseFragment implements LightningView.LightingV private boolean mRequestDesktopSite = false; private boolean mIsReaderModeOn = false; + private VpnPanel mVpnPanel; + @BindView(R.id.local_container) FrameLayout localContainer; @@ -226,6 +228,9 @@ public class TabFragment extends BaseFragment implements LightningView.LightingV @Inject VpnHandler vpnHandler; + @Inject + MainActivityHandler mainActivityHandler; + private String mDomainName = ""; @NonNull @@ -326,7 +331,7 @@ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceStat } mControlCenterHelper = - new ControlCenterHelper(getChildFragmentManager()); + new ControlCenterHelper(getContext(), getChildFragmentManager()); if (openTabsCounter != null) { openTabsCounter.setCounter(tabsManager.getTabCount()); @@ -550,6 +555,8 @@ void menuClicked() { mOverFlowMenu.setDesktopSiteEnabled(mRequestDesktopSite); mOverFlowMenu.show(); hideKeyboard(null); + bus.post(new Messages.DismissControlCenter()); + bus.post(new Messages.DismissVpnPanel()); } } @@ -627,8 +634,15 @@ void toggleReaderMode() { @Optional @OnClick(R.id.vpn_panel_button) void toggleVpnView() { - final VpnPanel vpnPanel = VpnPanel.create(mStatusBar); - vpnPanel.show(getChildFragmentManager(), Constants.VPN_PANEL); + if (mVpnPanel != null && mVpnPanel.isVisible()) { + mVpnPanel.getDialog().dismiss(); + return; + } + mVpnPanel = VpnPanel.create(mStatusBar); + mVpnPanel.show(getChildFragmentManager(), Constants.VPN_PANEL); + mainActivityHandler.postDelayed(() -> { + bus.post(new Messages.DismissControlCenter()); + }, 500); } @SuppressWarnings("UnusedParameters") diff --git a/app/src/main/java/com/cliqz/browser/widget/SearchBar.java b/app/src/main/java/com/cliqz/browser/widget/SearchBar.java index 0d15ae69a..867e95ec2 100644 --- a/app/src/main/java/com/cliqz/browser/widget/SearchBar.java +++ b/app/src/main/java/com/cliqz/browser/widget/SearchBar.java @@ -426,6 +426,8 @@ public void onFocusChange(View v, boolean hasFocus) { if (hasFocus) { post(SearchBar.this::showKeyBoard); + bus.post(new Messages.DismissVpnPanel()); + bus.post(new Messages.DismissControlCenter()); } // } else { // showTitleBar();