1 package com.moiseum.wolnelektury.base;
3 import android.content.ComponentName;
4 import android.content.Intent;
5 import android.content.pm.ApplicationInfo;
6 import android.content.pm.PackageManager;
7 import android.net.Uri;
8 import android.os.Bundle;
9 import android.support.annotation.Nullable;
10 import android.support.customtabs.CustomTabsClient;
11 import android.support.customtabs.CustomTabsIntent;
12 import android.support.customtabs.CustomTabsServiceConnection;
13 import android.support.v4.app.Fragment;
14 import android.support.v4.content.ContextCompat;
15 import android.support.v7.widget.Toolbar;
16 import android.view.LayoutInflater;
17 import android.view.View;
18 import android.view.ViewGroup;
19 import android.widget.Toast;
21 import com.moiseum.wolnelektury.R;
22 import com.moiseum.wolnelektury.connection.RestClient;
23 import com.moiseum.wolnelektury.utils.SharedPreferencesUtils;
24 import com.moiseum.wolnelektury.utils.TrackerUtils;
25 import com.moiseum.wolnelektury.view.login.LoginActivity;
27 import java.util.List;
29 import butterknife.ButterKnife;
30 import butterknife.Unbinder;
31 import io.reactivex.disposables.CompositeDisposable;
32 import io.reactivex.disposables.Disposable;
35 * Base fragment with view binding.
37 public abstract class AbstractFragment extends Fragment {
39 private static final String CHROME_PACKAGE_ID = "com.android.chrome";
41 private Unbinder unbinder;
42 private CompositeDisposable disposables = new CompositeDisposable();
46 public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
47 View view = inflater.inflate(getLayoutResourceId(), container, false);
48 unbinder = ButterKnife.bind(this, view);
49 prepareView(view, savedInstanceState);
55 public void onDestroyView() {
56 super.onDestroyView();
58 disposables.dispose();
61 protected void addDisposable(Disposable disposable) {
62 this.disposables.add(disposable);
65 private void trackScreen() {
66 String path = getClass().getPackage().getName();
67 String name = getNameForTracker();
68 TrackerUtils.trackScreen(path, name);
71 protected String getNameForTracker() {
72 return getClass().getSimpleName().replaceAll("Fragment", "");
75 protected void setupToolbar(Toolbar toolbar) {
76 AbstractActivity activity = (AbstractActivity) getActivity();
77 if (activity != null) {
78 activity.setupToolbar(toolbar);
82 protected void showPayPalForm() {
83 SharedPreferencesUtils preferences = WLApplication.getInstance().getPreferences();
84 if (preferences.isUserLoggedIn()) {
85 showBrowserView(Uri.parse(RestClient.WEB_PAYPAL_FORM_URL));
87 startActivity(new LoginActivity.LoginIntent(getContext()));
91 protected void showBrowserView(Uri uri) {
92 if (getActivity() != null) {
93 if (checkForPackageExistance(CHROME_PACKAGE_ID)) {
94 CustomTabsServiceConnection connection = new CustomTabsServiceConnection() {
96 public void onCustomTabsServiceConnected(ComponentName componentName, CustomTabsClient client) {
97 CustomTabsIntent intent = new CustomTabsIntent.Builder()
98 .setToolbarColor(ContextCompat.getColor(getActivity(), R.color.colorAccent))
102 intent.launchUrl(getActivity(), uri);
106 public void onServiceDisconnected(ComponentName name) {
110 CustomTabsClient.bindCustomTabsService(getActivity(), CHROME_PACKAGE_ID, connection);
112 Intent intent = new Intent(Intent.ACTION_VIEW, uri);
113 if (intent.resolveActivity(getActivity().getPackageManager()) != null) {
114 startActivity(intent);
116 Toast.makeText(getActivity(), R.string.install_chrome, Toast.LENGTH_LONG).show();
122 protected void showShareActivity(String shareUrl) {
123 Intent sharingIntent = new Intent(android.content.Intent.ACTION_SEND);
124 sharingIntent.setType("text/plain");
125 sharingIntent.putExtra(Intent.EXTRA_TEXT, shareUrl);
126 startActivity(Intent.createChooser(sharingIntent, getString(R.string.share)));
129 private boolean checkForPackageExistance(String targetPackage) {
130 List<ApplicationInfo> packages;
133 pm = getActivity().getPackageManager();
134 packages = pm.getInstalledApplications(0);
135 for (ApplicationInfo packageInfo : packages) {
136 if (packageInfo.packageName.equals(targetPackage)) {
144 * Providing layout resource ID for inflating.
146 * @return layout resource ID.
148 public abstract int getLayoutResourceId();
151 * Method called from @link{BindingFragment#onCreateView}. This will be the place to setup view stuff.
153 * @param view inflated View.
154 * @param savedInstanceState Bundle with current instance state.
156 public abstract void prepareView(View view, Bundle savedInstanceState);