Skip to content

Commit

Permalink
Merge pull request #168 from salemove/prelive
Browse files Browse the repository at this point in the history
Release 1.7.0
  • Loading branch information
dukhovnyi authored Jan 6, 2022
2 parents 15d6039 + 918498a commit aa9ed27
Show file tree
Hide file tree
Showing 38 changed files with 806 additions and 245 deletions.
32 changes: 28 additions & 4 deletions app/src/main/java/com/glia/exampleapp/Application.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,26 +4,50 @@

import androidx.preference.PreferenceManager;

import com.glia.exampleapp.auth.AuthorizationType;
import com.glia.widgets.GliaWidgets;
import com.glia.widgets.GliaWidgetsConfig;
import com.glia.androidsdk.SiteApiKey;

public class Application extends android.app.Application {

@Override
public void onCreate() {
super.onCreate();
GliaWidgets.onAppCreate(this);
GliaWidgets.init(createGliaAuthenticationConfiguration());
}

private GliaWidgetsConfig createGliaAuthenticationConfiguration() {
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
String appToken = sharedPreferences.getString(getString(R.string.pref_app_token), getString(R.string.app_token));
String siteId = sharedPreferences.getString(getString(R.string.pref_site_id), getString(R.string.site_id));
GliaWidgetsConfig gliaConfig = new GliaWidgetsConfig.Builder()
int authorizationType = sharedPreferences.getInt(getString(R.string.pref_authorization_type), AuthorizationType.DEFAULT);
if (authorizationType == AuthorizationType.SITE_API_KEY)
return configWithSiteApiKeyAuth(sharedPreferences);
else if (authorizationType == AuthorizationType.APP_TOKEN)
return configWithAppTokenAuth(sharedPreferences);
else return null;
}

private GliaWidgetsConfig configWithAppTokenAuth(SharedPreferences preferences) {
String appToken = preferences.getString(getString(R.string.pref_app_token), getString(R.string.app_token));
String siteId = preferences.getString(getString(R.string.pref_site_id), getString(R.string.site_id));
return new GliaWidgetsConfig.Builder()
.setAppToken(appToken)
.setSiteId(siteId)
.setRegion("beta")
.setContext(getApplicationContext())
.build();
}

GliaWidgets.init(gliaConfig);
private GliaWidgetsConfig configWithSiteApiKeyAuth(SharedPreferences preferences) {
String apiKeyId = preferences.getString(getString(R.string.pref_api_key_id), getString(R.string.glia_api_key_id));
String apiKeySecret = preferences.getString(getString(R.string.pref_api_key_secret), getString(R.string.glia_api_key_secret));
String siteId = preferences.getString(getString(R.string.pref_site_id), getString(R.string.site_id));
return new GliaWidgetsConfig.Builder()
.setSiteApiKey(new SiteApiKey(apiKeyId, apiKeySecret))
.setSiteId(siteId)
.setRegion("beta")
.setContext(getApplicationContext())
.build();
}
}
48 changes: 48 additions & 0 deletions app/src/main/java/com/glia/exampleapp/SettingsFragment.java
Original file line number Diff line number Diff line change
@@ -1,16 +1,64 @@
package com.glia.exampleapp;

import android.content.SharedPreferences;
import android.os.Bundle;

import androidx.navigation.NavController;
import androidx.navigation.fragment.NavHostFragment;
import androidx.preference.Preference;
import androidx.preference.PreferenceFragmentCompat;
import androidx.preference.PreferenceManager;

import com.glia.exampleapp.auth.AuthorizationType;

public class SettingsFragment extends PreferenceFragmentCompat {

private SharedPreferences sharedPreferences;

public SettingsFragment() {
}

@Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
setPreferencesFromResource(R.xml.preferences, rootKey);
sharedPreferences = PreferenceManager.getDefaultSharedPreferences(requireContext());
initAuthorizationPreferenceClickListener();
}

@Override
public void onResume() {
super.onResume();
updateAuthorizationDescription();
}

private void initAuthorizationPreferenceClickListener() {
NavController navController = NavHostFragment.findNavController(this);
Preference authorizationButtonPreference = findPreference(getString(R.string.pref_app_authorization));
if (authorizationButtonPreference != null)
authorizationButtonPreference.setOnPreferenceClickListener(preference -> {
navController.navigate(R.id.authorization);
return true;
});
}

private void updateAuthorizationDescription() {
int authorizationType = sharedPreferences.getInt(getString(R.string.pref_authorization_type), AuthorizationType.DEFAULT);
Preference preference = findPreference(getString(R.string.pref_app_authorization));
if (preference != null) setAuthorizationSummary(preference, authorizationType);
}

private void setAuthorizationSummary(Preference preference, int authorizationType) {
if (authorizationType == AuthorizationType.APP_TOKEN)
setAppTokenSummary(preference);
else if (authorizationType == AuthorizationType.SITE_API_KEY)
setApiKeySummary(preference);
}

private void setAppTokenSummary(Preference preference) {
preference.setSummary(R.string.authorization_app_token);
}

private void setApiKeySummary(Preference preference) {
preference.setSummary(R.string.authorization_site_api_key);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
package com.glia.exampleapp.auth;

import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.preference.PreferenceManager;
import androidx.viewpager2.widget.ViewPager2;

import com.glia.exampleapp.R;
import com.glia.exampleapp.auth.adapter.AuthorizationPagerAdapter;
import com.google.android.material.tabs.TabLayout;
import com.google.android.material.tabs.TabLayoutMediator;

import java.util.ArrayList;
import java.util.List;


public class AuthorizationFragment extends Fragment {
private final List<AuthorizationPageFragment> authorizationPages = new ArrayList<AuthorizationPageFragment>() {{
add(new AuthorizationPageFragment(
AuthorizationType.APP_TOKEN,
R.string.authorization_app_token,
R.xml.auth_token
));
add(new AuthorizationPageFragment(
AuthorizationType.SITE_API_KEY,
R.string.authorization_site_api_key,
R.xml.auth_site_api_key
));
}};

private TabLayout tabLayout;
private ViewPager2 viewPager;

public AuthorizationFragment() {
}

@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater,
@Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.authorization_fragment, container, false);
tabLayout = view.findViewById(R.id.tab_layout);
viewPager = view.findViewById(R.id.view_pager);
viewPager.setAdapter(new AuthorizationPagerAdapter<>(this, authorizationPages));
setupMediator();
return view;
}

private void setupMediator() {
new TabLayoutMediator(tabLayout, viewPager,
(tab, position) ->
tab.setText(authorizationPages.get(position).getTitleResource())
).attach();
}

@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(requireContext());
int item = sharedPreferences.getInt(getString(R.string.pref_authorization_type), AuthorizationType.DEFAULT);
viewPager.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
@Override
public void onPageSelected(int position) {
super.onPageSelected(position);
sharedPreferences.edit()
.putInt(
getString(R.string.pref_authorization_type),
authorizationPages.get(position).getAuthType()
).apply();
}
});
viewPager.post(() -> viewPager.setCurrentItem(item, false));
}
}

Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package com.glia.exampleapp.auth;

import android.os.Bundle;

import androidx.preference.PreferenceFragmentCompat;

public class AuthorizationPageFragment extends PreferenceFragmentCompat {
private final int titleRes;
private final int authType;
private final int prefRes;

public AuthorizationPageFragment(int authType, int titleRes, int prefRes) {
this.titleRes = titleRes;
this.authType = authType;
this.prefRes = prefRes;
}

@Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
setPreferencesFromResource(prefRes, rootKey);
}

public int getTitleResource() {
return titleRes;
}

public int getAuthType() {
return authType;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package com.glia.exampleapp.auth;

public class AuthorizationType {
public static final int APP_TOKEN = 0;
public static final int SITE_API_KEY = 1;

public static final int DEFAULT = SITE_API_KEY;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package com.glia.exampleapp.auth.adapter;

import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.viewpager2.adapter.FragmentStateAdapter;

import java.util.List;

public class AuthorizationPagerAdapter<T extends Fragment> extends FragmentStateAdapter {
private final List<T> authorizationScreens;

public AuthorizationPagerAdapter(Fragment fragment, List<T> authorizationScreens) {
super(fragment);
this.authorizationScreens = authorizationScreens;
}

@NonNull
@Override
public Fragment createFragment(int position) {
return authorizationScreens.get(position);
}

@Override
public int getItemCount() {
return authorizationScreens.size();
}
}
23 changes: 23 additions & 0 deletions app/src/main/res/layout/authorization_fragment.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">

<com.google.android.material.tabs.TabLayout
android:id="@+id/tab_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />

<androidx.viewpager2.widget.ViewPager2
android:id="@+id/view_pager"
android:layout_width="match_parent"
android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tab_layout" />
</androidx.constraintlayout.widget.ConstraintLayout>
10 changes: 9 additions & 1 deletion app/src/main/res/navigation/nav_graph.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,11 @@

<fragment
android:id="@+id/settings_fragment"
android:name="com.glia.exampleapp.SettingsFragment" />
android:name="com.glia.exampleapp.SettingsFragment">
<action
android:id="@+id/authorization"
app:destination="@id/authorization_fragment" />
</fragment>

<fragment
android:id="@+id/main_fragment"
Expand All @@ -26,4 +30,8 @@
android:id="@+id/chat_fragment"
android:name="com.glia.exampleapp.ChatFragment" />

<fragment
android:id="@+id/authorization_fragment"
android:name="com.glia.exampleapp.auth.AuthorizationFragment" />

</navigation>
4 changes: 4 additions & 0 deletions app/src/main/res/values/donottranslate.xml
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,12 @@
<string name="pref_font_color">font_color</string>
<string name="pref_font_size">font_size</string>
<string name="pref_header_title">header_title</string>
<string name="pref_authorization_type">authorization_type</string>
<string name="pref_app_token">app_token</string>
<string name="pref_app_authorization">app_authorization</string>
<string name="pref_site_id">site_id</string>
<string name="pref_api_key_id">api_key</string>
<string name="pref_api_key_secret">api_key_secret</string>
<string name="pref_company_name">company_name</string>
<string name="pref_queue_id">queue_id</string>
<string name="pref_context_url">context_url</string>
Expand Down
10 changes: 6 additions & 4 deletions app/src/main/res/values/setup.xml
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools">
<string name="app_token" tools:ignore="ExtraTranslation">xWa2EKJTN35En26o</string>
<string name="site_id" tools:ignore="ExtraTranslation">72c76913-ff1b-48a6-b209-bbeb57bd8649</string>
<string name="queue_id" tools:ignore="ExtraTranslation">a0b87175-4ed1-44a7-9e78-e798f45d233f</string>
<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="ExtraTranslation,TypographyDashes,Typos">
<string name="app_token">xWa2EKJTN35En26o</string>
<string name="site_id">72c76913-ff1b-48a6-b209-bbeb57bd8649</string>
<string name="queue_id">a0b87175-4ed1-44a7-9e78-e798f45d233f</string>
<string name="glia_api_key_id">9542b30d-faf2-443c-8553-d76ae331f9eb</string>
<string name="glia_api_key_secret">gls_wZSeWDzOGFYzy794U5yDL5Sq4UlIadxPPglH</string>
<!-- for bot-->
<!-- <string name="queue_id" tools:ignore="ExtraTranslation">9f7632ed-56be-4999-819d-381fc3ffa22c</string>-->
</resources>
9 changes: 8 additions & 1 deletion app/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,9 @@
<string name="settings_chat_font_family">Chat message font family</string>
<string name="settings_header_title">Title</string>
<string name="settings_app_token">App token</string>
<string name="settings_site_id">Site id</string>
<string name="settings_site_api_key_id">Site Api Key id</string>
<string name="settings_site_api_key_secret">Site Api Key Secret</string>
<string name="settings_site_id">Site id (needs restart)</string>
<string name="settings_chat_negative_color">Negative color</string>
<string name="settings_chat_visitor_message_bg_color">Visitor message bg color</string>
<string name="settings_chat_visitor_message_txt_color">Visitor message txt color</string>
Expand All @@ -54,12 +56,17 @@
<string name="settings_operator_layout_styling">Operator Layout Styling</string>
<string name="settings_other">Other</string>
<string name="settings_company_name">Company name</string>
<string name="settings_authorization">Authorization type (needs restart)</string>
<string name="settings_authorization_summary">Authorization type</string>
<string name="settings_queue_id">Queue id</string>
<string name="settings_white_label">White label</string>
<string name="settings_use_overlay">Use Overlay</string>
<string name="settings_context_url">Context url</string>
<string name="settings_use_alert_dialog_button_vertical_alignment">Align AlertDialog Buttons Vertically</string>

<string name="authorization_app_token">App Token</string>
<string name="authorization_site_api_key">Site Api Key</string>

<string name="main_open_settings">Open Settings</string>
<string name="main_launch_activity">Launch Chat in Activity</string>
<string name="main_launch_fragment">Launch Chat in Fragment</string>
Expand Down
13 changes: 13 additions & 0 deletions app/src/main/res/xml/auth_site_api_key.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:app="http://schemas.android.com/apk/res-auto">
<EditTextPreference
app:defaultValue="@string/glia_api_key_id"
app:key="@string/pref_api_key_id"
app:title="@string/settings_site_api_key_id"
app:useSimpleSummaryProvider="true" />
<EditTextPreference
app:defaultValue="@string/glia_api_key_secret"
app:key="@string/pref_api_key_secret"
app:title="@string/settings_site_api_key_secret"
app:useSimpleSummaryProvider="true" />
</PreferenceScreen>
8 changes: 8 additions & 0 deletions app/src/main/res/xml/auth_token.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:app="http://schemas.android.com/apk/res-auto">
<EditTextPreference
app:defaultValue="@string/app_token"
app:key="@string/pref_app_token"
app:title="@string/settings_app_token"
app:useSimpleSummaryProvider="true" />
</PreferenceScreen>
Loading

0 comments on commit aa9ed27

Please sign in to comment.