--- /dev/null
+package com.moiseum.wolnelektury.base;
+
+import android.content.ComponentName;
+import android.content.Intent;
+import android.content.pm.ApplicationInfo;
+import android.content.pm.PackageManager;
+import android.net.Uri;
+import android.os.Bundle;
+import android.support.annotation.Nullable;
+import android.support.customtabs.CustomTabsClient;
+import android.support.customtabs.CustomTabsIntent;
+import android.support.customtabs.CustomTabsServiceConnection;
+import android.support.v4.content.ContextCompat;
+import android.support.v7.app.ActionBar;
+import android.support.v7.app.AppCompatActivity;
+import android.support.v7.widget.Toolbar;
+import android.view.MenuItem;
+import android.widget.Toast;
+
+import com.moiseum.wolnelektury.R;
+import com.moiseum.wolnelektury.connection.RestClient;
+import com.moiseum.wolnelektury.utils.SharedPreferencesUtils;
+import com.moiseum.wolnelektury.view.login.LoginActivity;
+
+import java.util.List;
+
+import butterknife.ButterKnife;
+import io.reactivex.disposables.CompositeDisposable;
+import io.reactivex.disposables.Disposable;
+
+public abstract class AbstractActivity extends AppCompatActivity {
+
+ private static final String CHROME_PACKAGE_ID = "com.android.chrome";
+
+ private CompositeDisposable disposables = new CompositeDisposable();
+
+ @Override
+ protected void onCreate(@Nullable Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ // ActionBar actionBar = getSupportActionBar();
+ // if (actionBar != null) {
+ // actionBar.setElevation(0);
+ // }
+
+ setContentView(getLayoutResourceId());
+ ButterKnife.bind(this);
+ prepareView(savedInstanceState);
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ switch (item.getItemId()) {
+ case android.R.id.home:
+ onHomeClicked();
+ return true;
+ }
+ return super.onOptionsItemSelected(item);
+ }
+
+ @Override
+ protected void onDestroy() {
+ super.onDestroy();
+ disposables.dispose();
+ }
+
+ protected void addDisposable(Disposable disposable) {
+ this.disposables.add(disposable);
+ }
+
+ protected void onHomeClicked() {
+ finish();
+ }
+
+ protected void setBackButtonEnable(boolean enable) {
+ ActionBar actionBar = getSupportActionBar();
+ if (actionBar != null) {
+ actionBar.setDisplayHomeAsUpEnabled(enable);
+ }
+ }
+
+ protected void hideToolbar() {
+ ActionBar actionBar = getSupportActionBar();
+ if (actionBar != null) {
+ actionBar.hide();
+ }
+ }
+
+ protected void setupToolbar(Toolbar toolbar) {
+ if (toolbar != null) {
+ setSupportActionBar(toolbar);
+ getSupportActionBar().setDisplayHomeAsUpEnabled(true);
+ getSupportActionBar().setDisplayShowHomeEnabled(true);
+ }
+ }
+
+ protected void showPayPalForm() {
+ SharedPreferencesUtils preferences = WLApplication.getInstance().getPreferences();
+ if (preferences.isUserLoggedIn()) {
+ showBrowserView(Uri.parse(RestClient.WEB_PAYPAL_FORM_URL));
+ } else {
+ startActivity(new LoginActivity.LoginIntent(this));
+ }
+ }
+
+ protected void showBrowserView(Uri uri) {
+ if (checkForPackageExistance(CHROME_PACKAGE_ID)) {
+ CustomTabsServiceConnection connection = new CustomTabsServiceConnection() {
+ @Override
+ public void onCustomTabsServiceConnected(ComponentName componentName, CustomTabsClient client) {
+ CustomTabsIntent intent = new CustomTabsIntent.Builder()
+ .setToolbarColor(ContextCompat.getColor(AbstractActivity.this, R.color.colorAccent))
+ .build();
+
+ client.warmup(0L);
+ intent.launchUrl(AbstractActivity.this, uri);
+ }
+
+ @Override
+ public void onServiceDisconnected(ComponentName name) {
+
+ }
+ };
+ CustomTabsClient.bindCustomTabsService(this, CHROME_PACKAGE_ID, connection);
+ } else {
+ Intent intent = new Intent(Intent.ACTION_VIEW, uri);
+ if (intent.resolveActivity(getPackageManager()) != null) {
+ startActivity(intent);
+ } else {
+ Toast.makeText(this, R.string.install_chrome, Toast.LENGTH_LONG).show();
+ }
+ }
+ }
+
+ private boolean checkForPackageExistance(String targetPackage) {
+ List<ApplicationInfo> packages;
+ PackageManager pm;
+
+ pm = getPackageManager();
+ packages = pm.getInstalledApplications(0);
+ for (ApplicationInfo packageInfo : packages) {
+ if (packageInfo.packageName.equals(targetPackage)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Providing layout resource ID for inflating.
+ *
+ * @return layout resource ID.
+ */
+ public abstract int getLayoutResourceId();
+
+ /**
+ * Method called from @link{{@link AbstractActivity}#onCreate}. This will be the place to setup view stuff.
+ *
+ * @param savedInstanceState Bundle with current instance state.
+ */
+ public abstract void prepareView(Bundle savedInstanceState);
+}