What is a Live Folder? - Android

A LiveFolder (android.provider.LiveFolders) is a powerful feature that complements the content provider interface. A LiveFolder is a special folder containing content generated by a content provider. For example, a user might want to create a LiveFolder with favorite contacts (“Fave Five”), most frequently viewed emails in a custom email application, or high-priority tasks in a task management application.

When the user chooses to create a LiveFolder, the Android system provides a list of all activities that respond to the ACTION_CREATE_LIVE_FOLDER Intent. If the user chooses your Activity, that Activity creates the LiveFolder and passes it back to the system using the setResult() method.

The LiveFolder consists of the following components:

  • Folder name
  • Folder icon
  • Display mode (grid or list)
  • Content provider URI for the folder contents

The first task when enabling a content provider to serve up data to a LiveFolder is to provide an <intent-filter> for an Activity that handles enabling the LiveFolder.This is done within the AndroidManifest.xml file as follows:

<action android:name=
“android.intent.action.CREATE_LIVE_FOLDER” />
android:name=”android.intent.category.DEFAULT” />

Next, this action needs to be handled within the onCreate() method of the Activity it has been defined for. Within the preceding provider example, you can place the following code to handle this action:

final Intent intent = getIntent();
final String action = intent.getAction();
if (LiveFolders.ACTION_CREATE_LIVE_FOLDER.equals(action)) {
final Intent resultIntent = new Intent();
LiveFolders.EXTRA_LIVE_FOLDER_NAME, “GPX Sample”);
this, R.drawable.icon));
setResult(RESULT_OK, resultIntent);
} // ... rest of onCreate()

This defines the core components of the LiveFolder: its name, icon, display mode, and Uri. The Uri is not the same as one that already existed because it needs certain specific fields to work properly. This leads directly to the next task: modifying the content provider to prepare it for serving up data to the LiveFolder.

First, you define a new Uri. In this case, you add ”/live” to the end of the existing CONTENT_URI. For example:

public static final Uri LIVE_URI = Uri.parse(“content://”
+ AUTHORITY + “/” + TrackPointDatabase.TRACKPOINTS_TABLE
+ “/live”);

You add this new Uri pattern the UriMatcher. Next, modify the query() implementation to recognize this new Uri and add a projection, which is defined next:

switch (sURIMatcher.match(uri)) {
qBuilder.appendWhere(“_id=” + uri.getLastPathSegment());
// ... other cases
Cursor c = qBuilder.query( // ...

The projection is critical for a working LiveFolder provider. There are two mandatory fields that must be in the resulting Cursor: LiveFolder._ID and Live Folder .NAME. In addition to these, other fields, such as LiveFolder. DESCRIPTION, are available to modify the look and behavior of the view. In this example, we use TIMESTAMP for the name, as shown here in the following projection implementation:

private static final HashMap<String,String>
static {
new HashMap<String,String>();
LiveFolders._ID, _ID + “ as “ + LiveFolders._ID);
LiveFolders.NAME, TIMESTAMP + “ as “ + LiveFolders.NAME);

After this is done, the LiveFolder should be, well, live. In this example, only a list of dates is shown, as in Figure.

Sample LiveFolder list with dates.

Sample LiveFolder list with dates.

All rights reserved © 2020 Wisdom IT Services India Pvt. Ltd DMCA.com Protection Status

Android Topics