Added Android code
[wl-app.git] / Android / app / src / main / java / com / moiseum / wolnelektury / base / AbstractActivity.java
1 package com.moiseum.wolnelektury.base;
2
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;
19
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;
24
25 import java.util.List;
26
27 import butterknife.ButterKnife;
28 import io.reactivex.disposables.CompositeDisposable;
29 import io.reactivex.disposables.Disposable;
30
31 public abstract class AbstractActivity extends AppCompatActivity {
32
33         private static final String CHROME_PACKAGE_ID = "com.android.chrome";
34
35         private CompositeDisposable disposables = new CompositeDisposable();
36
37         @Override
38         protected void onCreate(@Nullable Bundle savedInstanceState) {
39                 super.onCreate(savedInstanceState);
40                 //              ActionBar actionBar = getSupportActionBar();
41                 //              if (actionBar != null) {
42                 //                      actionBar.setElevation(0);
43                 //              }
44
45                 setContentView(getLayoutResourceId());
46                 ButterKnife.bind(this);
47                 prepareView(savedInstanceState);
48         }
49
50         @Override
51         public boolean onOptionsItemSelected(MenuItem item) {
52                 switch (item.getItemId()) {
53                         case android.R.id.home:
54                                 onHomeClicked();
55                                 return true;
56                 }
57                 return super.onOptionsItemSelected(item);
58         }
59
60         @Override
61         protected void onDestroy() {
62                 super.onDestroy();
63                 disposables.dispose();
64         }
65
66         protected void addDisposable(Disposable disposable) {
67                 this.disposables.add(disposable);
68         }
69
70         protected void onHomeClicked() {
71                 finish();
72         }
73
74         protected void setBackButtonEnable(boolean enable) {
75                 ActionBar actionBar = getSupportActionBar();
76                 if (actionBar != null) {
77                         actionBar.setDisplayHomeAsUpEnabled(enable);
78                 }
79         }
80
81         protected void hideToolbar() {
82                 ActionBar actionBar = getSupportActionBar();
83                 if (actionBar != null) {
84                         actionBar.hide();
85                 }
86         }
87
88         protected void setupToolbar(Toolbar toolbar) {
89                 if (toolbar != null) {
90                         setSupportActionBar(toolbar);
91                         getSupportActionBar().setDisplayHomeAsUpEnabled(true);
92                         getSupportActionBar().setDisplayShowHomeEnabled(true);
93                 }
94         }
95
96         protected void showPayPalForm() {
97                 SharedPreferencesUtils preferences = WLApplication.getInstance().getPreferences();
98                 if (preferences.isUserLoggedIn()) {
99                         showBrowserView(Uri.parse(RestClient.WEB_PAYPAL_FORM_URL));
100                 } else {
101                         startActivity(new LoginActivity.LoginIntent(this));
102                 }
103         }
104
105         protected void showBrowserView(Uri uri) {
106                 if (checkForPackageExistance(CHROME_PACKAGE_ID)) {
107                         CustomTabsServiceConnection connection = new CustomTabsServiceConnection() {
108                                 @Override
109                                 public void onCustomTabsServiceConnected(ComponentName componentName, CustomTabsClient client) {
110                                         CustomTabsIntent intent = new CustomTabsIntent.Builder()
111                                                         .setToolbarColor(ContextCompat.getColor(AbstractActivity.this, R.color.colorAccent))
112                                                         .build();
113
114                                         client.warmup(0L);
115                                         intent.launchUrl(AbstractActivity.this, uri);
116                                 }
117
118                                 @Override
119                                 public void onServiceDisconnected(ComponentName name) {
120
121                                 }
122                         };
123                         CustomTabsClient.bindCustomTabsService(this, CHROME_PACKAGE_ID, connection);
124                 } else {
125                         Intent intent = new Intent(Intent.ACTION_VIEW, uri);
126                         if (intent.resolveActivity(getPackageManager()) != null) {
127                                 startActivity(intent);
128                         } else {
129                                 Toast.makeText(this, R.string.install_chrome, Toast.LENGTH_LONG).show();
130                         }
131                 }
132         }
133
134         private boolean checkForPackageExistance(String targetPackage) {
135                 List<ApplicationInfo> packages;
136                 PackageManager pm;
137
138                 pm = getPackageManager();
139                 packages = pm.getInstalledApplications(0);
140                 for (ApplicationInfo packageInfo : packages) {
141                         if (packageInfo.packageName.equals(targetPackage)) {
142                                 return true;
143                         }
144                 }
145                 return false;
146         }
147         
148         /**
149          * Providing layout resource ID for inflating.
150          *
151          * @return layout resource ID.
152          */
153         public abstract int getLayoutResourceId();
154
155         /**
156          * Method called from @link{{@link AbstractActivity}#onCreate}. This will be the place to setup view stuff.
157          *
158          * @param savedInstanceState Bundle with current instance state.
159          */
160         public abstract void prepareView(Bundle savedInstanceState);
161 }