Skip to content

Commit aa9ed27

Browse files
authored
Merge pull request #168 from salemove/prelive
Release 1.7.0
2 parents 15d6039 + 918498a commit aa9ed27

38 files changed

+806
-245
lines changed

app/src/main/java/com/glia/exampleapp/Application.java

Lines changed: 28 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,26 +4,50 @@
44

55
import androidx.preference.PreferenceManager;
66

7+
import com.glia.exampleapp.auth.AuthorizationType;
78
import com.glia.widgets.GliaWidgets;
89
import com.glia.widgets.GliaWidgetsConfig;
10+
import com.glia.androidsdk.SiteApiKey;
911

1012
public class Application extends android.app.Application {
1113

1214
@Override
1315
public void onCreate() {
1416
super.onCreate();
1517
GliaWidgets.onAppCreate(this);
18+
GliaWidgets.init(createGliaAuthenticationConfiguration());
19+
}
1620

21+
private GliaWidgetsConfig createGliaAuthenticationConfiguration() {
1722
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
18-
String appToken = sharedPreferences.getString(getString(R.string.pref_app_token), getString(R.string.app_token));
19-
String siteId = sharedPreferences.getString(getString(R.string.pref_site_id), getString(R.string.site_id));
20-
GliaWidgetsConfig gliaConfig = new GliaWidgetsConfig.Builder()
23+
int authorizationType = sharedPreferences.getInt(getString(R.string.pref_authorization_type), AuthorizationType.DEFAULT);
24+
if (authorizationType == AuthorizationType.SITE_API_KEY)
25+
return configWithSiteApiKeyAuth(sharedPreferences);
26+
else if (authorizationType == AuthorizationType.APP_TOKEN)
27+
return configWithAppTokenAuth(sharedPreferences);
28+
else return null;
29+
}
30+
31+
private GliaWidgetsConfig configWithAppTokenAuth(SharedPreferences preferences) {
32+
String appToken = preferences.getString(getString(R.string.pref_app_token), getString(R.string.app_token));
33+
String siteId = preferences.getString(getString(R.string.pref_site_id), getString(R.string.site_id));
34+
return new GliaWidgetsConfig.Builder()
2135
.setAppToken(appToken)
2236
.setSiteId(siteId)
2337
.setRegion("beta")
2438
.setContext(getApplicationContext())
2539
.build();
40+
}
2641

27-
GliaWidgets.init(gliaConfig);
42+
private GliaWidgetsConfig configWithSiteApiKeyAuth(SharedPreferences preferences) {
43+
String apiKeyId = preferences.getString(getString(R.string.pref_api_key_id), getString(R.string.glia_api_key_id));
44+
String apiKeySecret = preferences.getString(getString(R.string.pref_api_key_secret), getString(R.string.glia_api_key_secret));
45+
String siteId = preferences.getString(getString(R.string.pref_site_id), getString(R.string.site_id));
46+
return new GliaWidgetsConfig.Builder()
47+
.setSiteApiKey(new SiteApiKey(apiKeyId, apiKeySecret))
48+
.setSiteId(siteId)
49+
.setRegion("beta")
50+
.setContext(getApplicationContext())
51+
.build();
2852
}
2953
}
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,64 @@
11
package com.glia.exampleapp;
22

3+
import android.content.SharedPreferences;
34
import android.os.Bundle;
45

6+
import androidx.navigation.NavController;
7+
import androidx.navigation.fragment.NavHostFragment;
8+
import androidx.preference.Preference;
59
import androidx.preference.PreferenceFragmentCompat;
10+
import androidx.preference.PreferenceManager;
11+
12+
import com.glia.exampleapp.auth.AuthorizationType;
613

714
public class SettingsFragment extends PreferenceFragmentCompat {
815

16+
private SharedPreferences sharedPreferences;
17+
918
public SettingsFragment() {
1019
}
1120

1221
@Override
1322
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
1423
setPreferencesFromResource(R.xml.preferences, rootKey);
24+
sharedPreferences = PreferenceManager.getDefaultSharedPreferences(requireContext());
25+
initAuthorizationPreferenceClickListener();
26+
}
27+
28+
@Override
29+
public void onResume() {
30+
super.onResume();
31+
updateAuthorizationDescription();
32+
}
33+
34+
private void initAuthorizationPreferenceClickListener() {
35+
NavController navController = NavHostFragment.findNavController(this);
36+
Preference authorizationButtonPreference = findPreference(getString(R.string.pref_app_authorization));
37+
if (authorizationButtonPreference != null)
38+
authorizationButtonPreference.setOnPreferenceClickListener(preference -> {
39+
navController.navigate(R.id.authorization);
40+
return true;
41+
});
42+
}
43+
44+
private void updateAuthorizationDescription() {
45+
int authorizationType = sharedPreferences.getInt(getString(R.string.pref_authorization_type), AuthorizationType.DEFAULT);
46+
Preference preference = findPreference(getString(R.string.pref_app_authorization));
47+
if (preference != null) setAuthorizationSummary(preference, authorizationType);
48+
}
49+
50+
private void setAuthorizationSummary(Preference preference, int authorizationType) {
51+
if (authorizationType == AuthorizationType.APP_TOKEN)
52+
setAppTokenSummary(preference);
53+
else if (authorizationType == AuthorizationType.SITE_API_KEY)
54+
setApiKeySummary(preference);
55+
}
56+
57+
private void setAppTokenSummary(Preference preference) {
58+
preference.setSummary(R.string.authorization_app_token);
59+
}
60+
61+
private void setApiKeySummary(Preference preference) {
62+
preference.setSummary(R.string.authorization_site_api_key);
1563
}
1664
}
Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
package com.glia.exampleapp.auth;
2+
3+
import android.content.SharedPreferences;
4+
import android.os.Bundle;
5+
import android.view.LayoutInflater;
6+
import android.view.View;
7+
import android.view.ViewGroup;
8+
9+
import androidx.annotation.NonNull;
10+
import androidx.annotation.Nullable;
11+
import androidx.fragment.app.Fragment;
12+
import androidx.preference.PreferenceManager;
13+
import androidx.viewpager2.widget.ViewPager2;
14+
15+
import com.glia.exampleapp.R;
16+
import com.glia.exampleapp.auth.adapter.AuthorizationPagerAdapter;
17+
import com.google.android.material.tabs.TabLayout;
18+
import com.google.android.material.tabs.TabLayoutMediator;
19+
20+
import java.util.ArrayList;
21+
import java.util.List;
22+
23+
24+
public class AuthorizationFragment extends Fragment {
25+
private final List<AuthorizationPageFragment> authorizationPages = new ArrayList<AuthorizationPageFragment>() {{
26+
add(new AuthorizationPageFragment(
27+
AuthorizationType.APP_TOKEN,
28+
R.string.authorization_app_token,
29+
R.xml.auth_token
30+
));
31+
add(new AuthorizationPageFragment(
32+
AuthorizationType.SITE_API_KEY,
33+
R.string.authorization_site_api_key,
34+
R.xml.auth_site_api_key
35+
));
36+
}};
37+
38+
private TabLayout tabLayout;
39+
private ViewPager2 viewPager;
40+
41+
public AuthorizationFragment() {
42+
}
43+
44+
@Nullable
45+
@Override
46+
public View onCreateView(@NonNull LayoutInflater inflater,
47+
@Nullable ViewGroup container,
48+
@Nullable Bundle savedInstanceState) {
49+
View view = inflater.inflate(R.layout.authorization_fragment, container, false);
50+
tabLayout = view.findViewById(R.id.tab_layout);
51+
viewPager = view.findViewById(R.id.view_pager);
52+
viewPager.setAdapter(new AuthorizationPagerAdapter<>(this, authorizationPages));
53+
setupMediator();
54+
return view;
55+
}
56+
57+
private void setupMediator() {
58+
new TabLayoutMediator(tabLayout, viewPager,
59+
(tab, position) ->
60+
tab.setText(authorizationPages.get(position).getTitleResource())
61+
).attach();
62+
}
63+
64+
@Override
65+
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
66+
super.onViewCreated(view, savedInstanceState);
67+
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(requireContext());
68+
int item = sharedPreferences.getInt(getString(R.string.pref_authorization_type), AuthorizationType.DEFAULT);
69+
viewPager.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
70+
@Override
71+
public void onPageSelected(int position) {
72+
super.onPageSelected(position);
73+
sharedPreferences.edit()
74+
.putInt(
75+
getString(R.string.pref_authorization_type),
76+
authorizationPages.get(position).getAuthType()
77+
).apply();
78+
}
79+
});
80+
viewPager.post(() -> viewPager.setCurrentItem(item, false));
81+
}
82+
}
83+
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package com.glia.exampleapp.auth;
2+
3+
import android.os.Bundle;
4+
5+
import androidx.preference.PreferenceFragmentCompat;
6+
7+
public class AuthorizationPageFragment extends PreferenceFragmentCompat {
8+
private final int titleRes;
9+
private final int authType;
10+
private final int prefRes;
11+
12+
public AuthorizationPageFragment(int authType, int titleRes, int prefRes) {
13+
this.titleRes = titleRes;
14+
this.authType = authType;
15+
this.prefRes = prefRes;
16+
}
17+
18+
@Override
19+
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
20+
setPreferencesFromResource(prefRes, rootKey);
21+
}
22+
23+
public int getTitleResource() {
24+
return titleRes;
25+
}
26+
27+
public int getAuthType() {
28+
return authType;
29+
}
30+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package com.glia.exampleapp.auth;
2+
3+
public class AuthorizationType {
4+
public static final int APP_TOKEN = 0;
5+
public static final int SITE_API_KEY = 1;
6+
7+
public static final int DEFAULT = SITE_API_KEY;
8+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package com.glia.exampleapp.auth.adapter;
2+
3+
import androidx.annotation.NonNull;
4+
import androidx.fragment.app.Fragment;
5+
import androidx.viewpager2.adapter.FragmentStateAdapter;
6+
7+
import java.util.List;
8+
9+
public class AuthorizationPagerAdapter<T extends Fragment> extends FragmentStateAdapter {
10+
private final List<T> authorizationScreens;
11+
12+
public AuthorizationPagerAdapter(Fragment fragment, List<T> authorizationScreens) {
13+
super(fragment);
14+
this.authorizationScreens = authorizationScreens;
15+
}
16+
17+
@NonNull
18+
@Override
19+
public Fragment createFragment(int position) {
20+
return authorizationScreens.get(position);
21+
}
22+
23+
@Override
24+
public int getItemCount() {
25+
return authorizationScreens.size();
26+
}
27+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
3+
xmlns:app="http://schemas.android.com/apk/res-auto"
4+
android:layout_width="match_parent"
5+
android:layout_height="match_parent">
6+
7+
<com.google.android.material.tabs.TabLayout
8+
android:id="@+id/tab_layout"
9+
android:layout_width="match_parent"
10+
android:layout_height="wrap_content"
11+
app:layout_constraintEnd_toEndOf="parent"
12+
app:layout_constraintStart_toStartOf="parent"
13+
app:layout_constraintTop_toTopOf="parent" />
14+
15+
<androidx.viewpager2.widget.ViewPager2
16+
android:id="@+id/view_pager"
17+
android:layout_width="match_parent"
18+
android:layout_height="0dp"
19+
app:layout_constraintBottom_toBottomOf="parent"
20+
app:layout_constraintEnd_toEndOf="parent"
21+
app:layout_constraintStart_toStartOf="parent"
22+
app:layout_constraintTop_toBottomOf="@id/tab_layout" />
23+
</androidx.constraintlayout.widget.ConstraintLayout>

app/src/main/res/navigation/nav_graph.xml

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,11 @@
66

77
<fragment
88
android:id="@+id/settings_fragment"
9-
android:name="com.glia.exampleapp.SettingsFragment" />
9+
android:name="com.glia.exampleapp.SettingsFragment">
10+
<action
11+
android:id="@+id/authorization"
12+
app:destination="@id/authorization_fragment" />
13+
</fragment>
1014

1115
<fragment
1216
android:id="@+id/main_fragment"
@@ -26,4 +30,8 @@
2630
android:id="@+id/chat_fragment"
2731
android:name="com.glia.exampleapp.ChatFragment" />
2832

33+
<fragment
34+
android:id="@+id/authorization_fragment"
35+
android:name="com.glia.exampleapp.auth.AuthorizationFragment" />
36+
2937
</navigation>

app/src/main/res/values/donottranslate.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,12 @@
1414
<string name="pref_font_color">font_color</string>
1515
<string name="pref_font_size">font_size</string>
1616
<string name="pref_header_title">header_title</string>
17+
<string name="pref_authorization_type">authorization_type</string>
1718
<string name="pref_app_token">app_token</string>
19+
<string name="pref_app_authorization">app_authorization</string>
1820
<string name="pref_site_id">site_id</string>
21+
<string name="pref_api_key_id">api_key</string>
22+
<string name="pref_api_key_secret">api_key_secret</string>
1923
<string name="pref_company_name">company_name</string>
2024
<string name="pref_queue_id">queue_id</string>
2125
<string name="pref_context_url">context_url</string>

app/src/main/res/values/setup.xml

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
<?xml version="1.0" encoding="utf-8"?>
2-
<resources xmlns:tools="http://schemas.android.com/tools">
3-
<string name="app_token" tools:ignore="ExtraTranslation">xWa2EKJTN35En26o</string>
4-
<string name="site_id" tools:ignore="ExtraTranslation">72c76913-ff1b-48a6-b209-bbeb57bd8649</string>
5-
<string name="queue_id" tools:ignore="ExtraTranslation">a0b87175-4ed1-44a7-9e78-e798f45d233f</string>
2+
<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="ExtraTranslation,TypographyDashes,Typos">
3+
<string name="app_token">xWa2EKJTN35En26o</string>
4+
<string name="site_id">72c76913-ff1b-48a6-b209-bbeb57bd8649</string>
5+
<string name="queue_id">a0b87175-4ed1-44a7-9e78-e798f45d233f</string>
6+
<string name="glia_api_key_id">9542b30d-faf2-443c-8553-d76ae331f9eb</string>
7+
<string name="glia_api_key_secret">gls_wZSeWDzOGFYzy794U5yDL5Sq4UlIadxPPglH</string>
68
<!-- for bot-->
79
<!-- <string name="queue_id" tools:ignore="ExtraTranslation">9f7632ed-56be-4999-819d-381fc3ffa22c</string>-->
810
</resources>

app/src/main/res/values/strings.xml

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,9 @@
2929
<string name="settings_chat_font_family">Chat message font family</string>
3030
<string name="settings_header_title">Title</string>
3131
<string name="settings_app_token">App token</string>
32-
<string name="settings_site_id">Site id</string>
32+
<string name="settings_site_api_key_id">Site Api Key id</string>
33+
<string name="settings_site_api_key_secret">Site Api Key Secret</string>
34+
<string name="settings_site_id">Site id (needs restart)</string>
3335
<string name="settings_chat_negative_color">Negative color</string>
3436
<string name="settings_chat_visitor_message_bg_color">Visitor message bg color</string>
3537
<string name="settings_chat_visitor_message_txt_color">Visitor message txt color</string>
@@ -54,12 +56,17 @@
5456
<string name="settings_operator_layout_styling">Operator Layout Styling</string>
5557
<string name="settings_other">Other</string>
5658
<string name="settings_company_name">Company name</string>
59+
<string name="settings_authorization">Authorization type (needs restart)</string>
60+
<string name="settings_authorization_summary">Authorization type</string>
5761
<string name="settings_queue_id">Queue id</string>
5862
<string name="settings_white_label">White label</string>
5963
<string name="settings_use_overlay">Use Overlay</string>
6064
<string name="settings_context_url">Context url</string>
6165
<string name="settings_use_alert_dialog_button_vertical_alignment">Align AlertDialog Buttons Vertically</string>
6266

67+
<string name="authorization_app_token">App Token</string>
68+
<string name="authorization_site_api_key">Site Api Key</string>
69+
6370
<string name="main_open_settings">Open Settings</string>
6471
<string name="main_launch_activity">Launch Chat in Activity</string>
6572
<string name="main_launch_fragment">Launch Chat in Fragment</string>
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<PreferenceScreen xmlns:app="http://schemas.android.com/apk/res-auto">
3+
<EditTextPreference
4+
app:defaultValue="@string/glia_api_key_id"
5+
app:key="@string/pref_api_key_id"
6+
app:title="@string/settings_site_api_key_id"
7+
app:useSimpleSummaryProvider="true" />
8+
<EditTextPreference
9+
app:defaultValue="@string/glia_api_key_secret"
10+
app:key="@string/pref_api_key_secret"
11+
app:title="@string/settings_site_api_key_secret"
12+
app:useSimpleSummaryProvider="true" />
13+
</PreferenceScreen>

app/src/main/res/xml/auth_token.xml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<PreferenceScreen xmlns:app="http://schemas.android.com/apk/res-auto">
3+
<EditTextPreference
4+
app:defaultValue="@string/app_token"
5+
app:key="@string/pref_app_token"
6+
app:title="@string/settings_app_token"
7+
app:useSimpleSummaryProvider="true" />
8+
</PreferenceScreen>

0 commit comments

Comments
 (0)