For the app to retrieve data from the Guestbook portlet, the user must first authenticate to the Liferay DXP instance. You can implement authentication using the Liferay Mobile SDK, but it takes time to write. Using Liferay Screens to authenticate takes about ten minutes. In this article, you’ll use Login Screenlet to implement authentication in your app.
Adding Login Screenlet to the App
To use any Screenlet, you must follow two steps:
-
Insert the Screenlet’s XML in the layout of the activity or fragment where you want the Screenlet to appear.
-
Implement the Screenlet’s listener in the activity or fragment class.
In this app, you’ll use Login Screenlet in MainActivity
. This means you must
insert the Screenlet’s XML in MainActivity
’s layout, activity_main.xml
.
You’ll then implement Login Screenlet’s listener, LoginListener
, in the
MainActivity
class.
Insert the Screenlet’s XML
Follow these steps to insert Login Screenlet’s XML in activity_main.xml
:
-
Open
activity_main.xml
from theres/layout
folder and delete theTextView
generated by Android Studio when you created the project. Insert Login Screenlet’s XML in its place:<com.liferay.mobile.screens.auth.login.LoginScreenlet android:id="@+id/login_screenlet" android:layout_width="match_parent" android:layout_height="match_parent" app:basicAuthMethod="screen_name" app:layoutId="@layout/login_default" />
Note the two
app
attributes in the Login Screenlet’s XML. Theapp:basicAuthMethod
attribute tells the Screenlet to use basic authentication instead of OAuth. Thescreen_name
value tells the Screenlet to authenticate with the user’s screen name. You can alternatively set this toemail
oruserId
. This Learning Path usesscreen_name
only because it’s much faster to type a screen name than a full email address in the emulator. Also, this value must match the authentication setting in the Liferay DXP instance. By default, Liferay DXP instances use email address for authentication. For this Learning Path, you need to set your Liferay DXP instance to authenticate by screen name instead. Click here for instructions on changing your Liferay DXP instance’s authentication setting.The second
app
attribute in Login Screenlet’s XML isapp:layoutId
. This attribute sets the View to display the Screenlet with. Views in Liferay Screens set a Screenlet’s look and feel independent of the Screenlet’s core functionality. You can think of them as a sort of skin or theme for a Screenlet. The value@layout/login_default
specifies Login Screenlet’s Default View, which is part of the Default View Set. A View Set is a collection of Views for several Screenlets. Using a View Set lets you apply a consistent look and feel across multiple Screenlets. To use a View that is part of a View Set, like Login Screenlet’s Default View, the theme of the app or activity must inherit the theme that sets the View Set’s styles. For the Default View Set, this isdefault_theme
. -
To set the app’s theme to inherit from
default_theme
, openres/values/styles.xml
and set the base app theme’s parent todefault_theme
. In this app, the base app theme isAppTheme
. The theme declaration should now look like this:<style name="AppTheme" parent="default_theme"> ...
Click here for more information on using Views in Liferay Screens. For more information on Login Screenlet’s available attributes, click here.
Next, you’ll implement LoginListener
in the MainActivity
class.
Implement the Screenlet’s Listener
To use a Screenlet in an activity or fragment, you must also implement the
Screenlet’s listener in that activity or fragment’s class. You’ll do this now to
use Login Screenlet in MainActivity
:
-
Open
MainActivity
and change its declaration to implementLoginListener
. The class declaration should now look like this:public class MainActivity extends AppCompatActivity implements LoginListener {...
You must also import
com.liferay.mobile.screens.auth.login.LoginListener
. -
Implementing
LoginListener
requires you to implement theonLoginSuccess
andonLoginFailure
methods. Add them to the class as follows:@Override public void onLoginSuccess(User user) { Toast.makeText(this, "Login successful!", Toast.LENGTH_SHORT).show(); } @Override public void onLoginFailure(Exception e) { Toast.makeText(this, "Couldn't log in " + e.getMessage(), Toast.LENGTH_LONG).show(); }
When you add these methods, you must import
android.widget.Toast
andcom.liferay.mobile.screens.context.User
.These are listener methods called when login succeeds or fails, respectively. Using them lets your app respond the Screenlet’s actions. For the moment, they each only do one thing: display a success or failure message to the user. You’ll change this shortly. Note that each Screenlet has different listener methods; they’re listed in the Screenlet reference documentation.
-
Now you must get a reference to the Screenlet and set the
MainActivity
class as its listener. To do so, add the following code to the end of theonCreate
method:LoginScreenlet loginScreenlet = (LoginScreenlet) findViewById(R.id.login_screenlet); loginScreenlet.setListener(this);
This requires you to import
com.liferay.mobile.screens.auth.login.LoginScreenlet
.The
findViewById
method uses the Screenlet’s ID from the layout to create the reference. ThesetListener
method then setsMainActivity
as Login Screenlet’s listener.
Now run the app by clicking the green play button in the toolbar, or by selecting Run ‘app’ from the Run menu. If you’ve never run the emulator, you must first create and choose an Android Virtual Device (AVD) to run your app. For more information on this and running the emulator in general, click here. Once the emulator launches, unlock it if necessary. Your app automatically opens to Login Screenlet. Enter your credentials and click SIGN IN. The toast message pops up saying that the login succeeded.
The toast message goes away and you remain on the login screen. Nothing else happens. Don’t worry, this is supposed to happen; you haven’t added any other functionality yet. You’ll fix this next.
Navigating from Login Screenlet
When login succeeds, the app should open GuestbooksActivity
. You’ll do this by
using an
Android intent
in MainActivity
’s onLoginSuccess
method:
-
Replace the contents of
onLoginSuccess
with this code:Intent intent = new Intent(this, GuestbooksActivity.class); startActivity(intent);
When login succeeds, this code creates an
Intent
and uses it to startGuestbooksActivity
. If you haven’t already, make sure to importandroid.content.Intent
inMainActivity
. -
Now you’re ready to see the intent in action! Run the app in the emulator and log in when prompted. When login succeeds,
GuestbooksActivity
opens.
Nice work! You successfully implemented Liferay DXP authentication in your Android app. It didn’t take you that long, either. So far, however, that’s all your app does; it doesn’t display any content. Next, you’ll rectify this by developing Guestbook List Screenlet.