mobile/android/base/home/PanelRefreshLayout.java

Wed, 31 Dec 2014 07:22:50 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 07:22:50 +0100
branch
TOR_BUG_3246
changeset 4
fc2d59ddac77
permissions
-rw-r--r--

Correct previous dual key logic pending first delivery installment.

     1 /* -*- Mode: Java; c-basic-offset: 4; tab-width: 20; indent-tabs-mode: nil; -*-
     2  * This Source Code Form is subject to the terms of the Mozilla Public
     3  * License, v. 2.0. If a copy of the MPL was not distributed with this
     4  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
     6 package org.mozilla.gecko.home;
     8 import org.mozilla.gecko.R;
    10 import org.mozilla.gecko.GeckoAppShell;
    11 import org.mozilla.gecko.GeckoEvent;
    12 import org.mozilla.gecko.home.PanelLayout.DatasetBacked;
    13 import org.mozilla.gecko.home.PanelLayout.FilterManager;
    14 import org.mozilla.gecko.widget.GeckoSwipeRefreshLayout;
    15 import org.mozilla.gecko.widget.GeckoSwipeRefreshLayout.OnRefreshListener;
    17 import org.json.JSONException;
    18 import org.json.JSONObject;
    20 import android.content.Context;
    21 import android.database.Cursor;
    22 import android.util.Log;
    23 import android.view.View;
    25 /**
    26  * Used to wrap a {@code DatasetBacked} ListView or GridView to give the child view swipe-to-refresh
    27  * capabilities.
    28  *
    29  * This view acts as a decorator to forward the {@code DatasetBacked} methods to the child view
    30  * while providing the refresh gesture support on top of it.
    31  */
    32 class PanelRefreshLayout extends GeckoSwipeRefreshLayout implements DatasetBacked {
    33     private static final String LOGTAG = "GeckoPanelRefreshLayout";
    35     private static final String JSON_KEY_PANEL_ID = "panelId";
    36     private static final String JSON_KEY_VIEW_INDEX = "viewIndex";
    38     private final String panelId;
    39     private final int viewIndex;
    40     private final DatasetBacked datasetBacked;
    42     /**
    43      * @param context Android context.
    44      * @param childView ListView or GridView. Must implement {@code DatasetBacked}.
    45      * @param panelId The ID from the {@code PanelConfig}.
    46      * @param viewIndex The index from the {@code ViewConfig}.
    47      */
    48     public PanelRefreshLayout(Context context, View childView, String panelId, int viewIndex) {
    49         super(context);
    51         if (!(childView instanceof DatasetBacked)) {
    52             throw new IllegalArgumentException("View must implement DatasetBacked to be refreshed");
    53         }
    55         this.panelId = panelId;
    56         this.viewIndex = viewIndex;
    57         this.datasetBacked = (DatasetBacked) childView;
    59         setOnRefreshListener(new RefreshListener());
    60         addView(childView);
    62         // Must be called after the child view has been added.
    63         setColorScheme(R.color.swipe_refresh_orange, R.color.swipe_refresh_white,
    64                        R.color.swipe_refresh_orange, R.color.swipe_refresh_white);
    65     }
    67     @Override
    68     public void setDataset(Cursor cursor) {
    69         datasetBacked.setDataset(cursor);
    70         setRefreshing(false);
    71     }
    73     @Override
    74     public void setFilterManager(FilterManager manager) {
    75         datasetBacked.setFilterManager(manager);
    76     }
    78     private class RefreshListener implements OnRefreshListener {
    79         @Override
    80         public void onRefresh() {
    81             final JSONObject response = new JSONObject();
    82             try {
    83                 response.put(JSON_KEY_PANEL_ID, panelId);
    84                 response.put(JSON_KEY_VIEW_INDEX, viewIndex);
    85             } catch (JSONException e) {
    86                 Log.e(LOGTAG, "Could not create refresh message", e);
    87                 return;
    88             }
    90             final GeckoEvent event =
    91                 GeckoEvent.createBroadcastEvent("HomePanels:RefreshView", response.toString());
    92             GeckoAppShell.sendEventToGecko(event);
    93         }
    94     }
    95 }

mercurial