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.content.ContextCompat;
14 import android.support.v7.app.ActionBar;
15 import android.support.v7.app.AppCompatActivity;
16 import android.support.v7.widget.Toolbar;
17 import android.view.MenuItem;
18 import android.widget.Toast;
20 import com.moiseum.wolnelektury.R;
21 import com.moiseum.wolnelektury.connection.RestClient;
22 import com.moiseum.wolnelektury.utils.SharedPreferencesUtils;
23 import com.moiseum.wolnelektury.view.login.LoginActivity;
25 import java.util.List;
27 import butterknife.ButterKnife;
28 import io.reactivex.disposables.CompositeDisposable;
29 import io.reactivex.disposables.Disposable;
31 public abstract class AbstractActivity extends AppCompatActivity {
33 private static final String CHROME_PACKAGE_ID = "com.android.chrome";
35 private CompositeDisposable disposables = new CompositeDisposable();
38 protected void onCreate(@Nullable Bundle savedInstanceState) {
39 super.onCreate(savedInstanceState);
40 // ActionBar actionBar = getSupportActionBar();
41 // if (actionBar != null) {
42 // actionBar.setElevation(0);
45 setContentView(getLayoutResourceId());
46 ButterKnife.bind(this);
47 prepareView(savedInstanceState);
51 public boolean onOptionsItemSelected(MenuItem item) {
52 switch (item.getItemId()) {
53 case android.R.id.home:
57 return super.onOptionsItemSelected(item);
61 protected void onDestroy() {
63 disposables.dispose();
66 protected void addDisposable(Disposable disposable) {
67 this.disposables.add(disposable);
70 protected void onHomeClicked() {
74 protected void setBackButtonEnable(boolean enable) {
75 ActionBar actionBar = getSupportActionBar();
76 if (actionBar != null) {
77 actionBar.setDisplayHomeAsUpEnabled(enable);
81 protected void hideToolbar() {
82 ActionBar actionBar = getSupportActionBar();
83 if (actionBar != null) {
88 protected void setupToolbar(Toolbar toolbar) {
89 if (toolbar != null) {
90 setSupportActionBar(toolbar);
91 getSupportActionBar().setDisplayHomeAsUpEnabled(true);
92 getSupportActionBar().setDisplayShowHomeEnabled(true);
96 protected void showPayPalForm() {
97 SharedPreferencesUtils preferences = WLApplication.getInstance().getPreferences();
98 if (preferences.isUserLoggedIn()) {
99 showBrowserView(Uri.parse(RestClient.WEB_PAYPAL_FORM_URL));
101 startActivity(new LoginActivity.LoginIntent(this));
105 protected void showBrowserView(Uri uri) {
106 if (checkForPackageExistance(CHROME_PACKAGE_ID)) {
107 CustomTabsServiceConnection connection = new CustomTabsServiceConnection() {
109 public void onCustomTabsServiceConnected(ComponentName componentName, CustomTabsClient client) {
110 CustomTabsIntent intent = new CustomTabsIntent.Builder()
111 .setToolbarColor(ContextCompat.getColor(AbstractActivity.this, R.color.colorAccent))
115 intent.launchUrl(AbstractActivity.this, uri);
119 public void onServiceDisconnected(ComponentName name) {
123 CustomTabsClient.bindCustomTabsService(this, CHROME_PACKAGE_ID, connection);
125 Intent intent = new Intent(Intent.ACTION_VIEW, uri);
126 if (intent.resolveActivity(getPackageManager()) != null) {
127 startActivity(intent);
129 Toast.makeText(this, R.string.install_chrome, Toast.LENGTH_LONG).show();
134 private boolean checkForPackageExistance(String targetPackage) {
135 List<ApplicationInfo> packages;
138 pm = getPackageManager();
139 packages = pm.getInstalledApplications(0);
140 for (ApplicationInfo packageInfo : packages) {
141 if (packageInfo.packageName.equals(targetPackage)) {
149 * Providing layout resource ID for inflating.
151 * @return layout resource ID.
153 public abstract int getLayoutResourceId();
156 * Method called from @link{{@link AbstractActivity}#onCreate}. This will be the place to setup view stuff.
158 * @param savedInstanceState Bundle with current instance state.
160 public abstract void prepareView(Bundle savedInstanceState);