mobile/android/base/home/HomeAdapter.java

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.

     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.home.HomeConfig.PanelConfig;
     9 import org.mozilla.gecko.home.HomeConfig.PanelType;
    10 import org.mozilla.gecko.home.HomePager;
    12 import android.content.Context;
    13 import android.os.Bundle;
    14 import android.support.v4.app.Fragment;
    15 import android.support.v4.app.FragmentManager;
    16 import android.support.v4.app.FragmentStatePagerAdapter;
    17 import android.view.ViewGroup;
    19 import java.util.ArrayList;
    20 import java.util.HashMap;
    21 import java.util.List;
    23 class HomeAdapter extends FragmentStatePagerAdapter {
    25     private final Context mContext;
    26     private final ArrayList<PanelInfo> mPanelInfos;
    27     private final HashMap<String, Fragment> mPanels;
    29     private boolean mCanLoadHint;
    31     private OnAddPanelListener mAddPanelListener;
    33     interface OnAddPanelListener {
    34         public void onAddPanel(String title);
    35     }
    37     public HomeAdapter(Context context, FragmentManager fm) {
    38         super(fm);
    40         mContext = context;
    41         mCanLoadHint = HomeFragment.DEFAULT_CAN_LOAD_HINT;
    43         mPanelInfos = new ArrayList<PanelInfo>();
    44         mPanels = new HashMap<String, Fragment>();
    45     }
    47     @Override
    48     public int getCount() {
    49         return mPanelInfos.size();
    50     }
    52     @Override
    53     public Fragment getItem(int position) {
    54         PanelInfo info = mPanelInfos.get(position);
    55         return Fragment.instantiate(mContext, info.getClassName(), info.getArgs());
    56     }
    58     @Override
    59     public CharSequence getPageTitle(int position) {
    60         if (mPanelInfos.size() > 0) {
    61             PanelInfo info = mPanelInfos.get(position);
    62             return info.getTitle().toUpperCase();
    63         }
    65         return null;
    66     }
    68     @Override
    69     public Object instantiateItem(ViewGroup container, int position) {
    70         Fragment fragment = (Fragment) super.instantiateItem(container, position);
    71         mPanels.put(mPanelInfos.get(position).getId(), fragment);
    73         return fragment;
    74     }
    76     @Override
    77     public void destroyItem(ViewGroup container, int position, Object object) {
    78         super.destroyItem(container, position, object);
    79         mPanels.remove(mPanelInfos.get(position).getId());
    80     }
    82     public void setOnAddPanelListener(OnAddPanelListener listener) {
    83         mAddPanelListener = listener;
    84     }
    86     public int getItemPosition(String panelId) {
    87         for (int i = 0; i < mPanelInfos.size(); i++) {
    88             final String id = mPanelInfos.get(i).getId();
    89             if (id.equals(panelId)) {
    90                 return i;
    91             }
    92         }
    94         return -1;
    95     }
    97     public String getPanelIdAtPosition(int position) {
    98         // getPanelIdAtPosition() might be called before HomeAdapter
    99         // has got its initial list of PanelConfigs. Just bail.
   100         if (mPanelInfos.isEmpty()) {
   101             return null;
   102         }
   104         return mPanelInfos.get(position).getId();
   105     }
   107     private void addPanel(PanelInfo info) {
   108         mPanelInfos.add(info);
   110         if (mAddPanelListener != null) {
   111             mAddPanelListener.onAddPanel(info.getTitle());
   112         }
   113     }
   115     public void update(List<PanelConfig> panelConfigs) {
   116         mPanels.clear();
   117         mPanelInfos.clear();
   119         if (panelConfigs != null) {
   120             for (PanelConfig panelConfig : panelConfigs) {
   121                 final PanelInfo info = new PanelInfo(panelConfig);
   122                 addPanel(info);
   123             }
   124         }
   126         notifyDataSetChanged();
   127     }
   129     public boolean getCanLoadHint() {
   130         return mCanLoadHint;
   131     }
   133     public void setCanLoadHint(boolean canLoadHint) {
   134         // We cache the last hint value so that we can use it when
   135         // creating new panels. See PanelInfo.getArgs().
   136         mCanLoadHint = canLoadHint;
   138         // Enable/disable loading on all existing panels
   139         for (Fragment panelFragment : mPanels.values()) {
   140             final HomeFragment panel = (HomeFragment) panelFragment;
   141             panel.setCanLoadHint(canLoadHint);
   142         }
   143     }
   145     private final class PanelInfo {
   146         private final PanelConfig mPanelConfig;
   148         PanelInfo(PanelConfig panelConfig) {
   149             mPanelConfig = panelConfig;
   150         }
   152         public String getId() {
   153             return mPanelConfig.getId();
   154         }
   156         public String getTitle() {
   157             return mPanelConfig.getTitle();
   158         }
   160         public String getClassName() {
   161             final PanelType type = mPanelConfig.getType();
   162             return type.getPanelClass().getName();
   163         }
   165         public Bundle getArgs() {
   166             final Bundle args = new Bundle();
   168             args.putBoolean(HomePager.CAN_LOAD_ARG, mCanLoadHint);
   170             // Only DynamicPanels need the PanelConfig argument
   171             if (mPanelConfig.isDynamic()) {
   172                 args.putParcelable(HomePager.PANEL_CONFIG_ARG, mPanelConfig);
   173             }
   175             return args;
   176         }
   177     }
   178 }

mercurial